Skip to content

Instantly share code, notes, and snippets.

@jeanpat
Last active July 15, 2018 16:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jeanpat/472053f4c12bd06e214f5944b49d5f65 to your computer and use it in GitHub Desktop.
Save jeanpat/472053f4c12bd06e214f5944b49d5f65 to your computer and use it in GitHub Desktop.
Modules used in telomere length modelisation
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 30 13:04:37 2016
@author: jeanpat
"""
import pandas as pn
from itertools import product
import ClassChromosome as K
import Genome as G
def init_genome(telomeres_distribution =
{"1":(15000,18000,9000,12000),
"2":(11000, 20000, 11050,19950)}):
'''telomeres_distribution is a dictionary:
{"1":(15000,18000,9000,12000), "2":(11000, 20000, 11050,19950)}
'''
if type(telomeres_distribution) != type(dict()):
raise NameError('Telomere length must be a dictionary "chrom1":(p1,q1,p2,q2)')
chrom_set = []
for tels in telomeres_distribution.keys():
t0 = telomeres_distribution[tels][0]#first homolog at pter
t1 = telomeres_distribution[tels][1]#first homolog at qter
t2 = telomeres_distribution[tels][2]#other homolog at pter
t3 = telomeres_distribution[tels][3]#other homolog at qter
w1 = K.Watson(ttaggg = t0, ccctaa = t1)
c1 = K.Crick(ttaggg = t1, ccctaa = t0)
w2 = K.Watson(ttaggg= t2, ccctaa = t3)
c2 = K.Crick(ttaggg= t3, ccctaa = t2)
#chrom_set.ap
chrom_set.append(K.Chromosome(watson=w1,crick=c1, name =str(tels),homolog='mat'))
chrom_set.append(K.Chromosome(watson=w2,crick=c2, name =str(tels),homolog='pat'))
return G.Genome(*chrom_set)
class Cell(object):
# def init_genome(self, telomeres_distribution = {"1":(15000,18000,9000,12000),
# "2":(11000, 20000, 11050,19950)}):
# '''telomeres_distribution is a dictionary:
# {"1":(15000,18000,9000,12000), "2":(11000, 20000, 11050,19950)}
#
# '''
# print "init_genome"
# if type(telomeres_distribution)<>type(dict()):
# raise NameError('Telomere length must be a dictionary "chrom1":(p1,q1,p2,q2)')
# chrom_set = []
# for tels in telomeres_distribution.keys():
# t0 = telomeres_distribution[tels][0]#first homolog at pter
# t1 = telomeres_distribution[tels][1]#first homolog at qter
# t2 = telomeres_distribution[tels][2]#other homolog at pter
# t3 = telomeres_distribution[tels][3]#other homolog at qter
#
# w1 = K.Watson(ttaggg = t0, ccctaa = t1)
# c1 = K.Crick(ttaggg = t1, ccctaa = t0)
#
# w2 = K.Watson(ttaggg= t2, ccctaa = t3)
# c2 = K.Crick(ttaggg= t3, ccctaa = t2)
# #chrom_set.ap
# chrom_set.append(K.Chromosome(watson=w1,crick=c1, name =str(tels),homolog='mat'))
# chrom_set.append(K.Chromosome(watson=w2,crick=c2, name =str(tels),homolog='pat'))
# return G.Genome(*chrom_set)
#
def __init__(self,division = 0,
genome = init_genome(),
short_telomere_threshold = 200,
telomerase = {'ON':False,
'Docking':(1000,0.95),
'Elongation':(200,0.95)}
):
self.division = division
#
#telomerase parametres
self.telomerase_par = telomerase
self.telomerase_ON = self.telomerase_par['ON']
#telomere lenght theshold (bp)for telomerase docking
#simulation of the D-loop opening:
self.docking_threshold = self.telomerase_par['Docking'][0]
#docking probability: bellow the docking threshold,
#the probability for the telomerase to dock is:
self.docking_proba = self.telomerase_par['Docking'][1]
# When telomerase is docked the TTAGGG motif is elongated
# by n bases (ex:200) with a probability of p (p=0.95):
self.tel_elongation = self.telomerase_par['Elongation'][0]
self.elongation_prob = self.telomerase_par['Elongation'][1]
#### GENOME initialization ####
self.genome = genome
self.short_telomere_threshold = short_telomere_threshold
self.genome_dataframe()
self.shortest_telo = self.scan_shortest_telomere()
if self.shortest_telo <= self.short_telomere_threshold:
## The cell becomes senescent, blocked in G0
self.G0 = True
else:
self.G0 = False
#def scan_shortest_telomere(self):
# df = self.genome_dataframe()
# return df.T.min()[0]
def scan_shortest_telomere(self):
df = self.genome_dataframe()
#telomeres_list = df.columns-['division']
telomeres_list = df.columns[1:]
shortest_telo = df.ix[:, telomeres_list ].min().min()
#print shortest_telo
return shortest_telo
def mitose(self):
# check if G_0 can be left
#print type(self.genome)
# trigger genome replication
self.shortest_telo = self.scan_shortest_telomere()
#print type(shortest_telo[0]),shortest_telo[0]
if self.shortest_telo <= self.short_telomere_threshold:
## The cell becomes senescent, blocked in G0
self.G0 = True
#return None
else:
self.genome.set_G1_to_G2()
#trigger telophase
son_genome = self.genome.G2_to_M()
#print self.division
self.division = self.division +1
self.genome_dataframe()
daughter_cell = Cell(division = self.division,
genome = son_genome,
telomerase = self.telomerase_par,
short_telomere_threshold = self.short_telomere_threshold)
# Check post replication if the shortest telomere is bellow threshold
#Check mother cell
self.shortest_telo = self.scan_shortest_telomere()
if self.shortest_telo <= self.short_telomere_threshold:
## The cell becomes senescent, blocked in G0
self.G0 = True
#Daughter cell: the telomere length is checked on initialisation. If the shortest telo
#of the daughter cell is bellow threshold, the daughter cell is blocked in G0
return daughter_cell
def genome_dataframe(self):
'''Return all the telomere in a pandas data_frame, one column per telomere
the homologs must be distinguished by a tag: eg:maternal,paternal
'''
chroms = self.genome.get_chromosomes_list()
homogs = self.genome.get_homologous_tags()
telo = {}
#telo['division'] = self.division
div_df = pn.DataFrame({'division' : self.division}, index = [0])
for telomeric in product(chroms,['pter','qter'], '_',homogs):
telo[''.join(telomeric)]= [self.genome.get_telo_length(pair=telomeric[0],
hog=telomeric[3],
tel=telomeric[1])]
self.telo_df = pn.DataFrame(telo)#pandas dataframe
self.telo_df = pn.concat([div_df,self.telo_df], axis = 1)
return self.telo_df
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 6 11:29:52 2012
@author: Jean-Patrick Pommier
"""
from WatsonCrick import Watson, Crick
import random
class Chromosome(object):
def __init__(self,watson = Watson(ttaggg = 10001, ccctaa = 5000), crick = Crick(ttaggg = 5000, ccctaa = 10000), name ='1', homolog ='a'):
#print 'new chromosome'
watson.in_use = True
crick.in_use = True
self.name = name
self.homolog = homolog
self.phase = 'G1'
self.watson = watson
self.crick = crick
#Double strand DNA
self.chromatide = []
self.chromatide.append(self.watson)
self.chromatide.append(self.crick)
self.chromosome = []
self.chromosome.append(self.chromatide)#chromosome with one chromatid
def set_G1_to_G2(self):
self.phase = 'G2'
self.sister_chromatid1 = []
self.sister_chromatid2 = []
# temporary variables
self.ctd = self.chromosome.pop()
self.strand1 = self.ctd.pop()
self.strand2 = self.ctd.pop()
self.sister_chromatid1.append(self.strand1)
self.sister_chromatid1.append(self.strand1.replicate())
self.sister_chromatid2.append(self.strand2)
self.sister_chromatid2.append(self.strand2.replicate())
self.chromosome.append(self.sister_chromatid1)
self.chromosome.append(self.sister_chromatid2)
def segregate(self) :
'''gives two sister chromatids from metaphasic chromosome
'''
def getWatsonCrick_Index_in(chromatid):
if type(chromatid[0]) == Watson:
return 0, 1
else:
return 1, 0
if self.phase == 'G2':
index = random.randint(0,1)
#print index
# get one of the two chromatids of the G2 chromosome
self.sister_ctd1 = self.chromosome.pop(index)
w, c = getWatsonCrick_Index_in(self.sister_ctd1)
#Back to G1 state in the cell cycle after chromosome segregation
self.phase = 'G1'
son = Chromosome(self.sister_ctd1.pop(w),self.sister_ctd1.pop(), name = self.name, homolog=self.homolog)
return son
else:
raise NameError ('chromosome segregation only on metaphasic chrom!')
#==============================================================================
#
#==============================================================================
def get_Crick(self):
'''Returns a single strand of type Crick
'''
if type(self.chromosome[0][0]) == Crick:
return self.chromosome[0][0]
else:
return self.chromosome[0][1]
def get_Watson(self):
'''Returns a single strand of type Watson
'''
if type(self.chromosome[0][0]) == Watson:
return self.chromosome[0][0]
else:
return self.chromosome[0][1]
def get_pter_G1(self, motif='ccctaa'):
'''telomere length at pter = nber of ccctaa motifs on Crick single strand
telomere length at pter = nber of ttaggg motifs on Watson single strand
'''
#get index of crick strand in chromatid[]
if motif == 'ccctaa':
if self.phase == 'G1':
if type(self.chromosome[0][0]) == Crick:
return self.chromosome[0][0].getCCCTAA()
else:
return self.chromosome[0][1].getCCCTAA()
else:
raise NameError('only on G1 chromosome')
elif motif =='ttaggg':
if self.phase == 'G1':
if type(self.chromosome[0][0]) == Watson:
return self.chromosome[0][0].getTTAGGG()
else:
return self.chromosome[0][1].getTTAGGG()
else:
raise NameError('only on G1 chromosome')
def get_qter_G1(self,motif='ccctaa'):
'''telomere length at qter = nber of ccctaa motifs on Watson single strand
telomere length at qter = nber of ttaggg motifs on Crick single strand
'''
#get index of crick strand in chromatid[]
if motif == 'ccctaa':
if self.phase == 'G1':
if type(self.chromosome[0][0]) == Watson:
return self.chromosome[0][0].getCCCTAA()
else:
return self.chromosome[0][1].getCCCTAA()
else:
raise NameError('only on G1 chromosome')
elif motif =='ttaggg':#ERROR
if self.phase == 'G1':
if type(self.chromosome[0][0]) == Crick:
return self.chromosome[0][0].getTTAGGG()
else:
return self.chromosome[0][1].getTTAGGG()
else:
raise NameError('only on G1 chromosome')
def get_pter_G2(self,motif='ccctaa'):
'''telomere length at pter = nber of ccctaa motifs on Crick single strand
telomere length at pter = nber of ttaggg motifs on Watson single strand
'''
def getCrickindex_chromatid1():
'''get the index of the Crick strand in chromatid1
'''
if type(self.sister_chromatid1[0]) == Crick:
return 0
else:
return 1
def getCrickindex_chromatid2():
'''get the index of the Crick strand in chromatid2
'''
if type(self.sister_chromatid2[0]) == Crick:
return 0
else:
return 1
def getWatsonindex_chromatid1():
if type(self.sister_chromatid1[0]) == Watson:
return 0
else:
return 1
def getWatsonindex_chromatid2():
if type(self.sister_chromatid2[0]) == Watson:
return 0
else:
return 1
if self.phase == 'G2':
if motif == 'ccctaa':
c1 = getCrickindex_chromatid1()
c2 = getCrickindex_chromatid2()
return self.sister_chromatid1[c1].getCCCTAA(),self.sister_chromatid2[c2].getCCCTAA()
elif motif == 'ttaggg':
w1 = getWatsonindex_chromatid1()
w2 = getWatsonindex_chromatid2()
ttaggg1 = self.sister_chromatid1[w1].getTTAGGG()
ttaggg2 = self.sister_chromatid2[w2].getTTAGGG()
return ttaggg1, ttaggg2
else:
raise NameError('only on G2 chromosome')
def get_qter_G2(self,motif='ccctaa'):
'''telomere length at qter = nber of ccctaa motifs on Watson single strand
telomere length at qter = nber of ttaggg motifs on Crick single strand
on each chromatid
'''
#get index of Watson strand in chromatid[]
def getWatsonindex_chromatid1():
'''get the index of the Watson strand in chromatid1
'''
if type(self.sister_chromatid1[0]) == Watson:
return 0
else:
return 1
def getWatsonindex_chromatid2():
'''get the index of the Watson strand in chromatid2
'''
if type(self.sister_chromatid2[0]) == Watson:
return 0
else:
return 1
def getCrickindex_chromatid1():
'''get the index of the Crick strand in chromatid1
'''
if type(self.sister_chromatid1[0]) == Crick:
return 0
else:
return 1
def getCrickindex_chromatid2():
'''get the index of the Crick strand in chromatid2
'''
if type(self.sister_chromatid2[0]) == Crick:
return 0
else:
return 1
if self.phase == 'G2':
if motif == 'ccctaa':
w1 = getWatsonindex_chromatid1()
w2 = getWatsonindex_chromatid2()
return self.sister_chromatid1[w1].getCCCTAA(),self.sister_chromatid2[w2].getCCCTAA()
elif motif == 'ttaggg':
c1 = getCrickindex_chromatid1()
c2 = getCrickindex_chromatid2()
ttaggg1 = self.sister_chromatid1[c1].getTTAGGG()
ttaggg2 = self.sister_chromatid2[c2].getTTAGGG()
return ttaggg1, ttaggg2
else:
raise NameError('only on G2 chromosome')
def telomere_length(self,end = 'pter', motif = 'ccctaa'):
'''returns the telomere length (TTAGGG with motif='ttaggg' or CCCTAA with motif='ccctaa')
of a chromosome, given the location:end='pter' or end='qter'.
For a chromosome in G1 cell cycle, the length is a single number.
For a chromosome in G2, the length is a tuple, one value for each chromatid.
'''
if self.phase == 'G1':
if end == 'pter':
if motif =='ccctaa':
return self.get_pter_G1(motif)
elif motif =='ttaggg':
return self.get_pter_G1(motif)
elif end =='qter':
if motif =='ccctaa':
return self.get_qter_G1(motif)
elif motif =='ttaggg':
return self.get_qter_G1(motif)
elif self.phase =='G2':
if end == 'pter':
if motif =='ccctaa':
return self.get_pter_G2(motif)
elif motif =='ttaggg':
return self.get_pter_G2(motif)
elif end =='qter':
if motif =='ccctaa':
return self.get_qter_G2(motif)
elif motif =='ttaggg':
return self.get_qter_G2(motif)
#==============================================================================
#
# S
#
#
#==============================================================================
def test_get_pter():
k = Chromosome()
print( k)
print( 'G1+ccctaa:k.get_pter_G1() ',k.get_pter_G1())
print( "G1+ccctaa:k.get_pter_G1(motif='ccctaa') ",k.get_pter_G1(motif='ccctaa'))
print( "G1+ttaggg:k.get_pter_G1(motif='ttaggg') ",k.get_pter_G1(motif='ttaggg'))
print()
print( '----------------------')
k.set_G1_to_G2()
print( k)
print( "G2+ccctaa:k.get_pter_G1(motif='ccctaa') ",k.get_pter_G2(motif='ccctaa'))
print( "G2+ttaggg:k.get_pter_G1(motif='ttaggg') ",k.get_pter_G2(motif='ttaggg'))
print()
print()
def test_one_replication():
k = Chromosome()
#print k.chromosome
print( 'telomere p/q length G1 (ccctaa):',k.get_pter_G1(motif='ccctaa'),' ',k.get_qter_G1(motif='ccctaa'))
print( 'telomere p/q length G1 (ttaggg):',k.get_pter_G1(motif='ttaggg'),' ',k.get_qter_G1(motif='ttaggg'))
k.set_G1_to_G2()
motif='ccctaa'
print( 'ccctaa G2:','pter',k.get_pter_G2(motif),'qter',k.get_qter_G2(motif))
motif='ttaggg'
print( 'ttaggg G2:','pter',k.get_pter_G2(motif),'qter',k.get_qter_G2(motif))
print( k.chromosome)
neo = k.segregate()
print( 'neo',neo.get_pter_G1(),' ',neo.get_qter_G1())
print( 'c post seg:',k.get_pter_G1(),' ',k.get_qter_G1())
def test_replication(n):
k = Chromosome()
for i in range(n):
k.set_G1_to_G2()
k1 = k.segregate()
print( i,' ',k.get_pter_G1(),',',k.get_qter_G1(),' ',k1.get_pter_G1())
def test_rep(n):
import numpy as np
klist0 = []
k = Chromosome()
print( 'chrom name', k.name)
klist0.append(k)
generation = {}
motif = 'ttaggg'
generation[0] = (k.get_pter_G1(motif), k.get_qter_G1(motif))
for i in range(n):
klist1 = []
for c in klist0:
c.set_G1_to_G2()
for c in klist0:
klist1.append(c.segregate())
klist0 = klist0 + klist1
pq = []
for c in klist0:
pq.append((c.get_pter_G1(motif), c.get_qter_G1(motif)))
generation[i+1] = pq
# print generation.keys()
# print ((0,generation[0][0],generation[0][1]))
table = np.asarray((0,generation[0][0],generation[0][1]))
# print table.dtype
# print 'gen 0:',generation[0]
for g in generation.keys():
# print g,type(generation[g])
for pair in generation[g]:
if g == 0:
break
else:
# print 'g:',g,'pair:',pair,' ',pair[0],pair[1]
tmp = np.asarray((g,pair[0],pair[1]))
table = np.vstack([table,tmp])
return table
#==============================================================================
# Tests
#==============================================================================
if __name__ == "__main__":
test_get_pter()
test_one_replication()
telomeres=test_rep(9)
pter=telomeres[:,1]
print( pter)
qter=telomeres[:,2]
gen=telomeres[:,0]
import matplotlib.pyplot as plt
#import matplotlib.mlab as mlab
from scipy import stats
#import scipy as sc
fig = plt.figure(1)
plt.subplot(312, frameon = True)
plt.scatter(pter,qter,c=gen,s=50)
slope, intercept, r_value, p_value, slope_std_error = stats.linregress(gen, pter)
print( 'slope, intercept:',slope, intercept)
print( telomeres[gen ==4,1])
#plt.scatter(gen,pter)
plt.subplot(311, frameon = True)
# ax = fig.add_subplot(311)
# mu = sc.mean
# y = mlab.normpdf(bincenters, mu, sigma)
plt.hist(telomeres[gen==9,1], bins=100)
plt.subplot(313, frameon = True)
plt.scatter(gen, pter)
plt.show()
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 13 18:25:58 2012
@author: JeanPat
"""
#from WatsonCrick import *
import ClassChromosome as K
import numpy as np
#import pdb
class Genome(object):
''' a genome is a collection of chromosomes
'''
def __init__(self, *args):
def tuplesChrom_to_dict(tu):
''' convert a tuple (('1','a'), ('1','A'), ('2','b'), ('2','B'))
into a dict {'1':('a','A'),'2':('b','B')}
'''
g={}
for c,krom in enumerate(tu):
if krom.name in g:
g[krom.name]=g[krom.name],krom
else:
g[krom.name]=krom
return g
#print type(args)
if len(args) % 2 ==0:
self.ploidy = (len(args) / 2)
else:
self.ploidy = len(args) / 2 , 1
#print('WARNING: Non diploïd genome, delta p/q will crash')
#========================================================================
# Let's populate the genome with chromosomes
#========================================================================
for count, chrom in enumerate(args):
#pdb.set_trace()
if type(chrom) != type(K.Chromosome()):
raise NameError('Genome only loves Chromosomes')
#==============================================================================
# self.genome is dictionary where :
# key= chromosome name (1, 2, 3...)
# values: pair of homologous chromosomes (a or b for ex)
#==============================================================================
self.genome = tuplesChrom_to_dict(args)
#==============================================================================
#
#Let's define what we can get from a genome object:
# * telomere length :
# -of a given chromosome/homolog
# -mean telomere length for the whole genome
# -std dev
# * difference of length:
# -between two homologs
# -distribution of telomere length
# * telomere length ratio:
# -pter / qter for a given chromosome/homolog
# -ratio distribution
# * ordered list of telomeres : ex 1pa, 2pB, 2qA, 1pA, 1qB ...
#==============================================================================
def get_chrom_phase(self, pair='1', hog='a'):
'''get if a chrom '1' homolog 'a' is G1 or G2
'''
homolog = self.get_homologous_chromosome(pair,hog)
return homolog.phase
def get_chromosomes_list(self):
return self.genome.keys()
def get_chrom_pair(self,pair='1'):
return self.genome[pair]#should be a tuple
def get_homologous_tags(self, pair='1'):
'''given a pair of chromosomes, returns the values
of Chromosome.homolog ex ['a','A']
'''
pair = self.get_chrom_pair(pair)
tags=[]
for k in pair:
tags.append(k.homolog)#k should be a Chromosome instance
#print 'tags ', tags
return tags
def get_homologous_chromosome(self,pair,hog):
'''Return one of the two chromosomes: ex
Need chromosome 1, homolog a? ask get_homologous_chromosome('1','a')
'''
pair = self.get_chrom_pair(pair)
chrom1 = pair[0]
chrom2 = pair[1]
if chrom1.homolog == hog:
return chrom1
elif chrom2.homolog == hog:
return chrom2
def get_telo_length(self, pair='1',hog='a', tel='pter',cycle='G1',motif='ccctaa'):
#==============================================================================
# Should use .homolog.phase to know if chromosome is in G1 or G2
#==============================================================================
homolog = self.get_homologous_chromosome(pair, hog)
if (tel == 'pter') and (cycle == 'G1'):
return homolog.get_pter_G1(motif)
elif tel == 'qter' and cycle == 'G1':
return homolog.get_qter_G1(motif)
elif tel == 'pter' and cycle == 'G2':
return homolog.get_pter_G2(motif)
elif tel == 'qter' and cycle == 'G2':
return homolog.get_qter_G2(motif)
else:
raise NameError('Can only get length at pter or qter in G1 or G2 cell cycle')
def get_telomere_length(self,pair='1',hog='a', tel='pter', motif='ccctaa'):
'''need not to know if G1 or G2
'''
homolog = self.get_homologous_chromosome(pair, hog)
return homolog.telomere_length(end = tel, motif = motif)
def get_mean_std_telo_lenght(self, cycle='G1',motif='ccctaa'):
'''compute the mean and standard deviation telomere length in one genome
'''
telomeres = []#an array containing all the telomeres
#print 'genome:',self.genome
for c,kpair in self.genome.items():
homolog1=kpair[0]
homolog2=kpair[1]
#==============================================================================
# Uses ccctaa motifs and chromosomes when G1 cycle is 'on'
#==============================================================================
p1=self.get_telomere_length(pair=homolog1.name, hog=homolog1.homolog,tel='pter')
q1=self.get_telomere_length(pair=homolog1.name, hog=homolog1.homolog,tel='qter')
p2=self.get_telomere_length(pair=homolog2.name, hog=homolog2.homolog,tel='pter')
q2=self.get_telomere_length(pair=homolog2.name, hog=homolog2.homolog,tel='qter')
telomeres.append(p1)
telomeres.append(q1)
telomeres.append(p2)
telomeres.append(q2)
tel = np.asarray(telomeres)
mean_telo = tel.mean()
std_telo = tel.std()
# print telomeres
# print (tel-mean_telo)/std_telo# centrée réduites
return mean_telo,std_telo
def get_pq_ratio(self,pair='1',hog='a',motif='ccctaa'):
'''Compute ratio (length pter)/(length qter) for
a given homologous chromsome
'''
p = self.get_telomere_length(pair,hog,motif,tel='pter')
q = self.get__telomere_length(pair,hog,motif,tel='qter')
if q>0:
return 1.0*p/q
else:
return None
def delta_telo(self,chromPair='1',tel='pter', cycle='G1',motif='ccctaa'):
''' calculate the difference of length between two homologous telomeres
'''
hmlog_tags = self.get_homologous_tags(chromPair)
first_hmlog = hmlog_tags[0]
second_hmlog = hmlog_tags[1]
if cycle == 'G1':
telo1 = self.get_telomere_length(chromPair, first_hmlog, tel,motif)
# print 'telo1',telo1
telo2 = self.get_telomere_length(chromPair, second_hmlog, tel,motif)
# print 'telo2',telo2
# print telo1-telo2
return telo1-telo2
elif cycle == 'G2':
pass
else:
raise NameError('only G1 or G2 cell cycle state')
def distribution_delta_telo(self, mode='raw'):
''' Should return all the difference between all the telomeres two by two
'''
pass
#==================================================
# Let's define what we can do with a genome
# * cell cycle from G1 to G2
# * segregating :1 Genome -----> 2 Genomes
#==================================================
def set_G1_to_G2(self):
for n,pair_krom in self.genome.items():
pair_krom[0].set_G1_to_G2()
pair_krom[1].set_G1_to_G2()
def G2_to_M(self):
#
chromosomes_list=[]
for n, pair_krom in self.genome.items():
rosalind = pair_krom[0].segregate()# one chromatid of one homologous chromosome
franklin = pair_krom[1].segregate()# one chromatid of the other homologous chromosome
chromosomes_list.append(rosalind)
chromosomes_list.append(franklin)
return Genome(*chromosomes_list)
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Levy *et al.* in [Telomere End-replication Problem and Cell Aging](https://www.ncbi.nlm.nih.gov/pubmed/?term=levy+M%5BAu%5D+telomere%5Bti%5D), modelized the distribution of telomeric erosion with cells divisions at a single telomere. The model accounts for the decrease in somatic cell division capabilities with in-vitro passages of fibroblasts (Hayflick's limit).\n",
"\n",
"Here, the telomere length of several chromosomes is modelised numerically with segregation of chromosomes in daughter cells. The model takes the [5' degradation of the CCCTAA strand](https://www.ncbi.nlm.nih.gov/pubmed/9054505) into account. The aim of the simulation is to compare the distributions with QFISH data.\n",
"\n",
" * The modele show that the telomere length at pter and qter are correlated.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Check the modules\n",
"The simulation relies on several modules:\n",
"\n",
" * watsoncrick \n",
" * Chromosome\n",
" * Genome\n",
" * Cell"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"........\n",
"----------------------------------------------------------------------\n",
"Ran 8 tests in 0.014s\n",
"\n",
"OK\n",
".........\n",
"----------------------------------------------------------------------\n",
"Ran 9 tests in 0.010s\n",
"\n",
"OK\n",
"........\n",
"----------------------------------------------------------------------\n",
"Ran 8 tests in 0.009s\n",
"\n",
"OK\n"
]
}
],
"source": [
"%run unittest-watsoncrick.py\n",
"%run unittest_Chromosome.py\n",
"%run unittest_Genome.py"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/jeanpat/Developpement/TelomereLengthSimulation/Cellular.py:116: DeprecationWarning: \n",
".ix is deprecated. Please use\n",
".loc for label based indexing or\n",
".iloc for positional indexing\n",
"\n",
"See the documentation here:\n",
"http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated\n",
" shortest_telo = df.ix[:, telomeres_list ].min().min()\n",
"/home/jeanpat/anaconda3/envs/DeepFish/lib/python3.6/site-packages/pandas/core/indexing.py:890: DeprecationWarning: \n",
".ix is deprecated. Please use\n",
".loc for label based indexing or\n",
".iloc for positional indexing\n",
"\n",
"See the documentation here:\n",
"http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated\n",
" retval = getattr(retval, self.name)._getitem_axis(key, axis=i)\n",
".....\n",
"----------------------------------------------------------------------\n",
"Ran 5 tests in 0.115s\n",
"\n",
"OK\n"
]
}
],
"source": [
"%run unittest_Cell.py"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"#import copy\n",
"#import inspect\n",
"import numpy as np\n",
"import seaborn as sb\n",
"from random import sample"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pn\n",
"from itertools import product"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"#%pylab inline\n",
"from matplotlib import pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"import ClassChromosome as K\n",
"import Genome as G\n",
"import Cellular as C"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# Simulate synchronous cell division:\n",
"Let's define two functions:\n",
" \n",
" * **expand_from_cell**: takes one cell and generate a cellular population after $k$ doublings (cell divisions) and finally returns a list of cells.\n",
" \n",
" * **passage**: the function takes a list of cells, chooses randomly half of the cells to make one division.\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"def expand_from_one_cell(cell, doubling=4):\n",
" ''' generate a cellular population by expanding one cell for N divisions\n",
" (telomerase negative cells)\n",
" '''\n",
" div = 1\n",
" mothers = []\n",
" daughters = []\n",
" mothers.append(cell)\n",
" N = doubling\n",
" while div <= N:\n",
" #print div\n",
" daughters = [c.mitose() for c in mothers if c.G0 == False]\n",
" mothers.extend(daughters)\n",
" daughters = []\n",
" div = div + 1\n",
" return mothers"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"def passage(cell_pop):\n",
" '''take randomly half the cells from the population(list of cells) and let them to divide once\n",
" to make a new cells population\n",
" '''\n",
" if len(cell_pop) > 1:\n",
" #mothers = copy.copy(random.sample(cell_pop,int(len(cell_pop)/2)))\n",
" mothers = sample(cell_pop,int(len(cell_pop)/2))\n",
" elif len(cell_pop) == 1:\n",
" #mothers = copy.copy(cell_pop)\n",
" mothers = cell_pop\n",
" daughters = [c.mitose() for c in mothers if c.G0 == False]\n",
" mothers.extend(daughters)\n",
" return mothers"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def extract_DataFrame_from_cells(population):\n",
" a_cell = population[0]\n",
" pop_df = a_cell.genome_dataframe()\n",
" for a_cell in population[1:]:\n",
" c_df = a_cell.genome_dataframe()\n",
" pop_df = pop_df.append(c_df, ignore_index= True)\n",
" return pop_df"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## A Cell class is defined . A Cell object:\n",
" * has a genome\n",
" \n",
" * is telomerase ON/OFF\n",
" \n",
" * has a method for mitosis (returns a daughter cell)\n",
" \n",
" * count the cell divisions\n",
" \n",
" * has a method returning a pandas dataframe containing the length of its telomeres.\n",
" \n",
" * could be used to derive class for cell differenciation (telomerase ON <--> OFF, contact inhibition ...)\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Generating a genome with different patterns of telomere length between homologs ##\n",
"A singled chromatid, double stranded DNA, chromosome with its telomeres can be represented by vertical bars (on the left for telomere at pter, or on the short arm and on the right at qter, or on the long chromsomal arm), an **o** for the centromere and dashed lines for the remaining chromosomal domains:\n",
"\n",
" * Pair 1 : one homolog has its two telomeres longer than those of the other homolog:\n",
" \n",
" 1m &nbsp; |||||||||||||---------o-----------|||||||||||||||||| \n",
" 1p &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |||||---------o-----------||||||||||\n",
" \n",
" * Pair 2 : length of both homologs are identical:\n",
" \n",
" 2m &nbsp; |||||||||||||-------o-------------|||||||||||||||||||||||| \n",
" 2p &nbsp; |||||||||||||-------o-------------||||||||||||||||||||||||\n",
" \n",
" * Pair 3 : Crossed pattern,one homolog has a longer and a shorter telomere:\n",
" \n",
" 3m &nbsp; |||||||||||||---------o-----------||||||||||| \n",
" 3p &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |||||---------o-----------|||||||||||||||||||||\n",
" \n",
" \n",
" * Pair 4: difference between only one pair of telomeres, at pter:\n",
" \n",
" 4m |||||||||||||----o----------------|||||||||||||||||| \n",
" 4p &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |||||----o----------------||||||||||||||||||\n",
" \n",
" \n",
" * Pair 5: difference between only one pair of telomeres, at qter:\n",
" \n",
" 5m &nbsp; |||||||||||||---o-----------------|||||||||||||||||| \n",
" 5p &nbsp; |||||||||||||---o-----------------|||||||||\n",
" \n",
" \n",
"It would be fine to automatize the initialization of a genome, that is to yield a list of telomere length. For example with a dictionnary where the name of the chromosomes (1, 2, 3 ...) as key and a 4-tuple representing the initial telomere length of each of the four telomeres of the pair of homolog chromosomes:\n",
"\n",
" {1:(p1,q1,p2,q2),2:(p1,q1,p2,q2),3:(p1,q1,p2,q2)}\n",
" \n",
"with:\n",
" \n",
" p1: telomere length (TTAGGG) at pter of the first homolog chromosome\n",
" q1: telomere length (TTAGGG) at qter of the first homolog chromosome\n",
" p2: telomere length (TTAGGG) at pter of the other homolog chromosome\n",
" \n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Let's play with the simulation:\n",
" * choose the initial telomere lenght distribution\n",
" * make a cell object and get its telomeres through a pandas dataframe\n",
" * then expand a cell population and makes successive passages"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"t1=(15000,18000,9000,12000)\n",
"t2=(11000, 20000, 11050,19950)\n",
"t3=(13000, 8000, 7500, 14000)\n",
"t4=(7000, 10000, 30000, 12050)\n",
"t5=(16050, 16000, 9500, 9520)\n",
"tel_distrib = {\"1\":t1, \"2\":t2,\"3\":t3,\"4\":t4,\"5\":t5}\n",
"gen0 = C.init_genome(tel_distrib)\n",
"cell0 = C.Cell(genome = gen0)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>division</th>\n",
" <th>1pter_mat</th>\n",
" <th>1pter_pat</th>\n",
" <th>1qter_mat</th>\n",
" <th>1qter_pat</th>\n",
" <th>2pter_mat</th>\n",
" <th>2pter_pat</th>\n",
" <th>2qter_mat</th>\n",
" <th>2qter_pat</th>\n",
" <th>3pter_mat</th>\n",
" <th>...</th>\n",
" <th>3qter_mat</th>\n",
" <th>3qter_pat</th>\n",
" <th>4pter_mat</th>\n",
" <th>4pter_pat</th>\n",
" <th>4qter_mat</th>\n",
" <th>4qter_pat</th>\n",
" <th>5pter_mat</th>\n",
" <th>5pter_pat</th>\n",
" <th>5qter_mat</th>\n",
" <th>5qter_pat</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>15000</td>\n",
" <td>9000</td>\n",
" <td>18000</td>\n",
" <td>12000</td>\n",
" <td>11000</td>\n",
" <td>11050</td>\n",
" <td>20000</td>\n",
" <td>19950</td>\n",
" <td>13000</td>\n",
" <td>...</td>\n",
" <td>8000</td>\n",
" <td>14000</td>\n",
" <td>7000</td>\n",
" <td>30000</td>\n",
" <td>10000</td>\n",
" <td>12050</td>\n",
" <td>16050</td>\n",
" <td>9500</td>\n",
" <td>16000</td>\n",
" <td>9520</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1 rows × 21 columns</p>\n",
"</div>"
],
"text/plain": [
" division 1pter_mat 1pter_pat 1qter_mat 1qter_pat 2pter_mat 2pter_pat \\\n",
"0 0 15000 9000 18000 12000 11000 11050 \n",
"\n",
" 2qter_mat 2qter_pat 3pter_mat ... 3qter_mat 3qter_pat \\\n",
"0 20000 19950 13000 ... 8000 14000 \n",
"\n",
" 4pter_mat 4pter_pat 4qter_mat 4qter_pat 5pter_mat 5pter_pat \\\n",
"0 7000 30000 10000 12050 16050 9500 \n",
"\n",
" 5qter_mat 5qter_pat \n",
"0 16000 9520 \n",
"\n",
"[1 rows x 21 columns]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cell0.genome_dataframe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Making a small population from a single cell by synchronous divisions\n",
" A cell population can generated by iterative divisions from one cell. By appying $k$ divisions, the cell population has $2^{k}$ cells.\n",
"\n",
"#### After initial cell expansion or after each passage the length of the telomeres are stored in a dataframe with:\n",
"* One colum per telomere, that is four columns for two homologous chromosomes\n",
"* One line per cell"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [],
"source": [
"P0 = expand_from_one_cell(cell0, doubling = 10)\n",
"df_P0 = extract_DataFrame_from_cells(P0)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [],
"source": [
"P1 = passage(P0)\n",
"df_P1 = extract_DataFrame_from_cells(P1)"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [],
"source": [
"P2 = passage(P1)\n",
"df_P2 = extract_DataFrame_from_cells(P2)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [],
"source": [
"P3 = passage(P2)\n",
"df_P3 = extract_DataFrame_from_cells(P3)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"P4 = passage(P3)\n",
"df_P4 = extract_DataFrame_from_cells(P4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The length of the telomeres can be extracted in a pandas dataframe:\n",
" * In early passages at least, all cells should have performed the same number of divisions "
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>division</th>\n",
" <th>1pter_mat</th>\n",
" <th>1pter_pat</th>\n",
" <th>1qter_mat</th>\n",
" <th>1qter_pat</th>\n",
" <th>2pter_mat</th>\n",
" <th>2pter_pat</th>\n",
" <th>2qter_mat</th>\n",
" <th>2qter_pat</th>\n",
" <th>3pter_mat</th>\n",
" <th>...</th>\n",
" <th>3qter_mat</th>\n",
" <th>3qter_pat</th>\n",
" <th>4pter_mat</th>\n",
" <th>4pter_pat</th>\n",
" <th>4qter_mat</th>\n",
" <th>4qter_pat</th>\n",
" <th>5pter_mat</th>\n",
" <th>5pter_pat</th>\n",
" <th>5qter_mat</th>\n",
" <th>5qter_pat</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>22</td>\n",
" <td>12824</td>\n",
" <td>6818</td>\n",
" <td>15982</td>\n",
" <td>9980</td>\n",
" <td>8854</td>\n",
" <td>9026</td>\n",
" <td>18006</td>\n",
" <td>17829</td>\n",
" <td>10880</td>\n",
" <td>...</td>\n",
" <td>5993</td>\n",
" <td>12377</td>\n",
" <td>5371</td>\n",
" <td>27464</td>\n",
" <td>7474</td>\n",
" <td>10436</td>\n",
" <td>13540</td>\n",
" <td>7678</td>\n",
" <td>14320</td>\n",
" <td>7170</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>22</td>\n",
" <td>12450</td>\n",
" <td>6043</td>\n",
" <td>16382</td>\n",
" <td>10710</td>\n",
" <td>8847</td>\n",
" <td>9215</td>\n",
" <td>18009</td>\n",
" <td>17556</td>\n",
" <td>10348</td>\n",
" <td>...</td>\n",
" <td>6533</td>\n",
" <td>12719</td>\n",
" <td>4298</td>\n",
" <td>27510</td>\n",
" <td>8571</td>\n",
" <td>10431</td>\n",
" <td>13714</td>\n",
" <td>7675</td>\n",
" <td>14174</td>\n",
" <td>7158</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>22</td>\n",
" <td>12456</td>\n",
" <td>6803</td>\n",
" <td>16362</td>\n",
" <td>10018</td>\n",
" <td>9728</td>\n",
" <td>8835</td>\n",
" <td>17157</td>\n",
" <td>17926</td>\n",
" <td>10878</td>\n",
" <td>...</td>\n",
" <td>6009</td>\n",
" <td>12533</td>\n",
" <td>5206</td>\n",
" <td>27537</td>\n",
" <td>7675</td>\n",
" <td>10435</td>\n",
" <td>13916</td>\n",
" <td>7695</td>\n",
" <td>13981</td>\n",
" <td>7180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>22</td>\n",
" <td>12708</td>\n",
" <td>5965</td>\n",
" <td>16234</td>\n",
" <td>10882</td>\n",
" <td>8338</td>\n",
" <td>9397</td>\n",
" <td>18561</td>\n",
" <td>17396</td>\n",
" <td>11047</td>\n",
" <td>...</td>\n",
" <td>5862</td>\n",
" <td>11998</td>\n",
" <td>4998</td>\n",
" <td>28226</td>\n",
" <td>7857</td>\n",
" <td>9668</td>\n",
" <td>13869</td>\n",
" <td>7478</td>\n",
" <td>13957</td>\n",
" <td>7343</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>22</td>\n",
" <td>12881</td>\n",
" <td>6807</td>\n",
" <td>16108</td>\n",
" <td>10022</td>\n",
" <td>8330</td>\n",
" <td>8891</td>\n",
" <td>18624</td>\n",
" <td>17931</td>\n",
" <td>10158</td>\n",
" <td>...</td>\n",
" <td>6735</td>\n",
" <td>11851</td>\n",
" <td>5222</td>\n",
" <td>27866</td>\n",
" <td>7638</td>\n",
" <td>10050</td>\n",
" <td>13345</td>\n",
" <td>7542</td>\n",
" <td>14515</td>\n",
" <td>7376</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 21 columns</p>\n",
"</div>"
],
"text/plain": [
" division 1pter_mat 1pter_pat 1qter_mat 1qter_pat 2pter_mat 2pter_pat \\\n",
"0 22 12824 6818 15982 9980 8854 9026 \n",
"1 22 12450 6043 16382 10710 8847 9215 \n",
"2 22 12456 6803 16362 10018 9728 8835 \n",
"3 22 12708 5965 16234 10882 8338 9397 \n",
"4 22 12881 6807 16108 10022 8330 8891 \n",
"\n",
" 2qter_mat 2qter_pat 3pter_mat ... 3qter_mat 3qter_pat \\\n",
"0 18006 17829 10880 ... 5993 12377 \n",
"1 18009 17556 10348 ... 6533 12719 \n",
"2 17157 17926 10878 ... 6009 12533 \n",
"3 18561 17396 11047 ... 5862 11998 \n",
"4 18624 17931 10158 ... 6735 11851 \n",
"\n",
" 4pter_mat 4pter_pat 4qter_mat 4qter_pat 5pter_mat 5pter_pat \\\n",
"0 5371 27464 7474 10436 13540 7678 \n",
"1 4298 27510 8571 10431 13714 7675 \n",
"2 5206 27537 7675 10435 13916 7695 \n",
"3 4998 28226 7857 9668 13869 7478 \n",
"4 5222 27866 7638 10050 13345 7542 \n",
"\n",
" 5qter_mat 5qter_pat \n",
"0 14320 7170 \n",
"1 14174 7158 \n",
"2 13981 7180 \n",
"3 13957 7343 \n",
"4 14515 7376 \n",
"\n",
"[5 rows x 21 columns]"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_P4.head()"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"11350.65"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_P4.iloc[0,1:].mean()"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>division</th>\n",
" <th>1pter_mat</th>\n",
" <th>1pter_pat</th>\n",
" <th>1qter_mat</th>\n",
" <th>1qter_pat</th>\n",
" <th>2pter_mat</th>\n",
" <th>2pter_pat</th>\n",
" <th>2qter_mat</th>\n",
" <th>2qter_pat</th>\n",
" <th>3pter_mat</th>\n",
" <th>...</th>\n",
" <th>3qter_mat</th>\n",
" <th>3qter_pat</th>\n",
" <th>4pter_mat</th>\n",
" <th>4pter_pat</th>\n",
" <th>4qter_mat</th>\n",
" <th>4qter_pat</th>\n",
" <th>5pter_mat</th>\n",
" <th>5pter_pat</th>\n",
" <th>5qter_mat</th>\n",
" <th>5qter_pat</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>18</td>\n",
" <td>13203</td>\n",
" <td>6852</td>\n",
" <td>16422</td>\n",
" <td>10718</td>\n",
" <td>9064</td>\n",
" <td>9767</td>\n",
" <td>18582</td>\n",
" <td>17768</td>\n",
" <td>11585</td>\n",
" <td>...</td>\n",
" <td>6000</td>\n",
" <td>12372</td>\n",
" <td>5407</td>\n",
" <td>28431</td>\n",
" <td>8202</td>\n",
" <td>10199</td>\n",
" <td>14433</td>\n",
" <td>8039</td>\n",
" <td>14134</td>\n",
" <td>7516</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>18</td>\n",
" <td>13197</td>\n",
" <td>7186</td>\n",
" <td>16344</td>\n",
" <td>10377</td>\n",
" <td>8814</td>\n",
" <td>9398</td>\n",
" <td>18782</td>\n",
" <td>18126</td>\n",
" <td>10865</td>\n",
" <td>...</td>\n",
" <td>6736</td>\n",
" <td>12556</td>\n",
" <td>5534</td>\n",
" <td>28207</td>\n",
" <td>8033</td>\n",
" <td>10390</td>\n",
" <td>14069</td>\n",
" <td>8218</td>\n",
" <td>14511</td>\n",
" <td>7351</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>18</td>\n",
" <td>12846</td>\n",
" <td>7000</td>\n",
" <td>16746</td>\n",
" <td>10510</td>\n",
" <td>8443</td>\n",
" <td>9251</td>\n",
" <td>19106</td>\n",
" <td>18299</td>\n",
" <td>11384</td>\n",
" <td>...</td>\n",
" <td>6194</td>\n",
" <td>12568</td>\n",
" <td>5706</td>\n",
" <td>28406</td>\n",
" <td>7839</td>\n",
" <td>10261</td>\n",
" <td>14423</td>\n",
" <td>8221</td>\n",
" <td>14127</td>\n",
" <td>7337</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>18</td>\n",
" <td>12827</td>\n",
" <td>7728</td>\n",
" <td>16753</td>\n",
" <td>9834</td>\n",
" <td>8703</td>\n",
" <td>9423</td>\n",
" <td>18910</td>\n",
" <td>18163</td>\n",
" <td>11374</td>\n",
" <td>...</td>\n",
" <td>6193</td>\n",
" <td>12732</td>\n",
" <td>5388</td>\n",
" <td>28048</td>\n",
" <td>8182</td>\n",
" <td>10588</td>\n",
" <td>14617</td>\n",
" <td>8046</td>\n",
" <td>13990</td>\n",
" <td>7570</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>18</td>\n",
" <td>13175</td>\n",
" <td>6807</td>\n",
" <td>16382</td>\n",
" <td>10727</td>\n",
" <td>8295</td>\n",
" <td>9453</td>\n",
" <td>19314</td>\n",
" <td>18155</td>\n",
" <td>10810</td>\n",
" <td>...</td>\n",
" <td>6745</td>\n",
" <td>12043</td>\n",
" <td>5313</td>\n",
" <td>28215</td>\n",
" <td>8235</td>\n",
" <td>10419</td>\n",
" <td>14195</td>\n",
" <td>7337</td>\n",
" <td>14324</td>\n",
" <td>8243</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>18</td>\n",
" <td>13047</td>\n",
" <td>7368</td>\n",
" <td>16513</td>\n",
" <td>10149</td>\n",
" <td>9565</td>\n",
" <td>9411</td>\n",
" <td>18033</td>\n",
" <td>18106</td>\n",
" <td>11386</td>\n",
" <td>...</td>\n",
" <td>6162</td>\n",
" <td>12553</td>\n",
" <td>5352</td>\n",
" <td>27973</td>\n",
" <td>8194</td>\n",
" <td>10590</td>\n",
" <td>14069</td>\n",
" <td>8231</td>\n",
" <td>14565</td>\n",
" <td>7357</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>18</td>\n",
" <td>12640</td>\n",
" <td>7580</td>\n",
" <td>16927</td>\n",
" <td>10037</td>\n",
" <td>9037</td>\n",
" <td>9379</td>\n",
" <td>18537</td>\n",
" <td>18115</td>\n",
" <td>11550</td>\n",
" <td>...</td>\n",
" <td>6046</td>\n",
" <td>12720</td>\n",
" <td>5573</td>\n",
" <td>28246</td>\n",
" <td>8014</td>\n",
" <td>10416</td>\n",
" <td>14452</td>\n",
" <td>7878</td>\n",
" <td>14180</td>\n",
" <td>7681</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>18</td>\n",
" <td>13215</td>\n",
" <td>7399</td>\n",
" <td>16347</td>\n",
" <td>10188</td>\n",
" <td>8885</td>\n",
" <td>9379</td>\n",
" <td>18749</td>\n",
" <td>18122</td>\n",
" <td>10863</td>\n",
" <td>...</td>\n",
" <td>6742</td>\n",
" <td>12557</td>\n",
" <td>5343</td>\n",
" <td>27842</td>\n",
" <td>8198</td>\n",
" <td>10747</td>\n",
" <td>14258</td>\n",
" <td>8043</td>\n",
" <td>14341</td>\n",
" <td>7560</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>18</td>\n",
" <td>12995</td>\n",
" <td>6674</td>\n",
" <td>16617</td>\n",
" <td>10883</td>\n",
" <td>8637</td>\n",
" <td>9771</td>\n",
" <td>18932</td>\n",
" <td>17783</td>\n",
" <td>11232</td>\n",
" <td>...</td>\n",
" <td>6367</td>\n",
" <td>12914</td>\n",
" <td>5226</td>\n",
" <td>28773</td>\n",
" <td>8391</td>\n",
" <td>9838</td>\n",
" <td>13907</td>\n",
" <td>7473</td>\n",
" <td>14722</td>\n",
" <td>8073</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>18</td>\n",
" <td>13741</td>\n",
" <td>7360</td>\n",
" <td>15834</td>\n",
" <td>10196</td>\n",
" <td>8694</td>\n",
" <td>9414</td>\n",
" <td>18936</td>\n",
" <td>18102</td>\n",
" <td>11026</td>\n",
" <td>...</td>\n",
" <td>6550</td>\n",
" <td>12685</td>\n",
" <td>5199</td>\n",
" <td>28549</td>\n",
" <td>8412</td>\n",
" <td>10020</td>\n",
" <td>14272</td>\n",
" <td>8225</td>\n",
" <td>14347</td>\n",
" <td>7358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>18</td>\n",
" <td>13166</td>\n",
" <td>7034</td>\n",
" <td>16355</td>\n",
" <td>10543</td>\n",
" <td>8859</td>\n",
" <td>9798</td>\n",
" <td>18771</td>\n",
" <td>17788</td>\n",
" <td>11006</td>\n",
" <td>...</td>\n",
" <td>6566</td>\n",
" <td>12757</td>\n",
" <td>5514</td>\n",
" <td>28230</td>\n",
" <td>8028</td>\n",
" <td>10410</td>\n",
" <td>14774</td>\n",
" <td>7683</td>\n",
" <td>13803</td>\n",
" <td>7900</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>18</td>\n",
" <td>12629</td>\n",
" <td>7037</td>\n",
" <td>16900</td>\n",
" <td>10532</td>\n",
" <td>9041</td>\n",
" <td>8858</td>\n",
" <td>18585</td>\n",
" <td>18686</td>\n",
" <td>11222</td>\n",
" <td>...</td>\n",
" <td>6368</td>\n",
" <td>11984</td>\n",
" <td>5718</td>\n",
" <td>27833</td>\n",
" <td>7810</td>\n",
" <td>10771</td>\n",
" <td>14222</td>\n",
" <td>8246</td>\n",
" <td>14352</td>\n",
" <td>7330</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>18</td>\n",
" <td>12824</td>\n",
" <td>6643</td>\n",
" <td>16737</td>\n",
" <td>10903</td>\n",
" <td>9016</td>\n",
" <td>9777</td>\n",
" <td>18593</td>\n",
" <td>17747</td>\n",
" <td>11407</td>\n",
" <td>...</td>\n",
" <td>6214</td>\n",
" <td>12045</td>\n",
" <td>5561</td>\n",
" <td>28204</td>\n",
" <td>8029</td>\n",
" <td>10413</td>\n",
" <td>14231</td>\n",
" <td>7689</td>\n",
" <td>14357</td>\n",
" <td>7879</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>18</td>\n",
" <td>13189</td>\n",
" <td>7040</td>\n",
" <td>16353</td>\n",
" <td>10519</td>\n",
" <td>9417</td>\n",
" <td>9016</td>\n",
" <td>18201</td>\n",
" <td>18459</td>\n",
" <td>11210</td>\n",
" <td>...</td>\n",
" <td>6337</td>\n",
" <td>12730</td>\n",
" <td>5378</td>\n",
" <td>27858</td>\n",
" <td>8221</td>\n",
" <td>10752</td>\n",
" <td>14054</td>\n",
" <td>7893</td>\n",
" <td>14499</td>\n",
" <td>7733</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>18</td>\n",
" <td>12963</td>\n",
" <td>7027</td>\n",
" <td>16627</td>\n",
" <td>10550</td>\n",
" <td>8814</td>\n",
" <td>9584</td>\n",
" <td>18777</td>\n",
" <td>17943</td>\n",
" <td>11394</td>\n",
" <td>...</td>\n",
" <td>6206</td>\n",
" <td>12372</td>\n",
" <td>4850</td>\n",
" <td>28044</td>\n",
" <td>8738</td>\n",
" <td>10582</td>\n",
" <td>14435</td>\n",
" <td>8051</td>\n",
" <td>14178</td>\n",
" <td>7557</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>18</td>\n",
" <td>13030</td>\n",
" <td>7203</td>\n",
" <td>16538</td>\n",
" <td>10350</td>\n",
" <td>8854</td>\n",
" <td>9194</td>\n",
" <td>18775</td>\n",
" <td>18313</td>\n",
" <td>11555</td>\n",
" <td>...</td>\n",
" <td>6040</td>\n",
" <td>12174</td>\n",
" <td>5382</td>\n",
" <td>28012</td>\n",
" <td>8226</td>\n",
" <td>10592</td>\n",
" <td>14428</td>\n",
" <td>8387</td>\n",
" <td>14176</td>\n",
" <td>7210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>18</td>\n",
" <td>13050</td>\n",
" <td>7363</td>\n",
" <td>16587</td>\n",
" <td>10195</td>\n",
" <td>9187</td>\n",
" <td>9198</td>\n",
" <td>18411</td>\n",
" <td>18324</td>\n",
" <td>11065</td>\n",
" <td>...</td>\n",
" <td>6554</td>\n",
" <td>12356</td>\n",
" <td>5577</td>\n",
" <td>28047</td>\n",
" <td>8010</td>\n",
" <td>10604</td>\n",
" <td>14053</td>\n",
" <td>7692</td>\n",
" <td>14531</td>\n",
" <td>7878</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>18</td>\n",
" <td>13000</td>\n",
" <td>7588</td>\n",
" <td>16553</td>\n",
" <td>10036</td>\n",
" <td>9030</td>\n",
" <td>9183</td>\n",
" <td>18608</td>\n",
" <td>18315</td>\n",
" <td>10489</td>\n",
" <td>...</td>\n",
" <td>7104</td>\n",
" <td>12890</td>\n",
" <td>5375</td>\n",
" <td>28203</td>\n",
" <td>8275</td>\n",
" <td>10356</td>\n",
" <td>14619</td>\n",
" <td>8402</td>\n",
" <td>13980</td>\n",
" <td>7179</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>18</td>\n",
" <td>13002</td>\n",
" <td>7225</td>\n",
" <td>16562</td>\n",
" <td>10371</td>\n",
" <td>9037</td>\n",
" <td>9075</td>\n",
" <td>18585</td>\n",
" <td>18464</td>\n",
" <td>11394</td>\n",
" <td>...</td>\n",
" <td>6197</td>\n",
" <td>12560</td>\n",
" <td>5532</td>\n",
" <td>28384</td>\n",
" <td>7987</td>\n",
" <td>10232</td>\n",
" <td>14269</td>\n",
" <td>7684</td>\n",
" <td>14329</td>\n",
" <td>7890</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>18</td>\n",
" <td>12963</td>\n",
" <td>7573</td>\n",
" <td>16532</td>\n",
" <td>10023</td>\n",
" <td>9054</td>\n",
" <td>8833</td>\n",
" <td>18579</td>\n",
" <td>18686</td>\n",
" <td>11567</td>\n",
" <td>...</td>\n",
" <td>6030</td>\n",
" <td>12208</td>\n",
" <td>5543</td>\n",
" <td>27508</td>\n",
" <td>8019</td>\n",
" <td>11125</td>\n",
" <td>14424</td>\n",
" <td>7673</td>\n",
" <td>14177</td>\n",
" <td>7879</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>18</td>\n",
" <td>13366</td>\n",
" <td>7001</td>\n",
" <td>16229</td>\n",
" <td>10557</td>\n",
" <td>8465</td>\n",
" <td>9606</td>\n",
" <td>19105</td>\n",
" <td>17977</td>\n",
" <td>10888</td>\n",
" <td>...</td>\n",
" <td>6735</td>\n",
" <td>12055</td>\n",
" <td>6080</td>\n",
" <td>28035</td>\n",
" <td>7495</td>\n",
" <td>10579</td>\n",
" <td>13885</td>\n",
" <td>7868</td>\n",
" <td>14691</td>\n",
" <td>7709</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>18</td>\n",
" <td>12993</td>\n",
" <td>7051</td>\n",
" <td>16516</td>\n",
" <td>10527</td>\n",
" <td>9564</td>\n",
" <td>9410</td>\n",
" <td>18034</td>\n",
" <td>18136</td>\n",
" <td>10860</td>\n",
" <td>...</td>\n",
" <td>6751</td>\n",
" <td>12901</td>\n",
" <td>5550</td>\n",
" <td>28351</td>\n",
" <td>8060</td>\n",
" <td>10187</td>\n",
" <td>13853</td>\n",
" <td>8234</td>\n",
" <td>14715</td>\n",
" <td>7330</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>18</td>\n",
" <td>12822</td>\n",
" <td>7727</td>\n",
" <td>16760</td>\n",
" <td>9792</td>\n",
" <td>8971</td>\n",
" <td>9759</td>\n",
" <td>18562</td>\n",
" <td>17758</td>\n",
" <td>11579</td>\n",
" <td>...</td>\n",
" <td>6008</td>\n",
" <td>12919</td>\n",
" <td>5399</td>\n",
" <td>28067</td>\n",
" <td>8217</td>\n",
" <td>10573</td>\n",
" <td>14249</td>\n",
" <td>8243</td>\n",
" <td>14383</td>\n",
" <td>7386</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>18</td>\n",
" <td>12473</td>\n",
" <td>7190</td>\n",
" <td>17104</td>\n",
" <td>10357</td>\n",
" <td>8689</td>\n",
" <td>9761</td>\n",
" <td>18942</td>\n",
" <td>17751</td>\n",
" <td>11254</td>\n",
" <td>...</td>\n",
" <td>6381</td>\n",
" <td>12533</td>\n",
" <td>5014</td>\n",
" <td>27651</td>\n",
" <td>8588</td>\n",
" <td>10923</td>\n",
" <td>14029</td>\n",
" <td>7857</td>\n",
" <td>14543</td>\n",
" <td>7721</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>18</td>\n",
" <td>12651</td>\n",
" <td>6817</td>\n",
" <td>16913</td>\n",
" <td>10713</td>\n",
" <td>8644</td>\n",
" <td>10125</td>\n",
" <td>18929</td>\n",
" <td>17415</td>\n",
" <td>11403</td>\n",
" <td>...</td>\n",
" <td>6221</td>\n",
" <td>12213</td>\n",
" <td>5759</td>\n",
" <td>28405</td>\n",
" <td>7847</td>\n",
" <td>10235</td>\n",
" <td>14212</td>\n",
" <td>7684</td>\n",
" <td>14353</td>\n",
" <td>7936</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>18</td>\n",
" <td>13352</td>\n",
" <td>7549</td>\n",
" <td>16167</td>\n",
" <td>10001</td>\n",
" <td>9241</td>\n",
" <td>9421</td>\n",
" <td>18401</td>\n",
" <td>18142</td>\n",
" <td>10889</td>\n",
" <td>...</td>\n",
" <td>6748</td>\n",
" <td>12919</td>\n",
" <td>4606</td>\n",
" <td>28403</td>\n",
" <td>8904</td>\n",
" <td>10209</td>\n",
" <td>14236</td>\n",
" <td>8542</td>\n",
" <td>14340</td>\n",
" <td>6973</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>18</td>\n",
" <td>13166</td>\n",
" <td>7044</td>\n",
" <td>16358</td>\n",
" <td>10505</td>\n",
" <td>8864</td>\n",
" <td>9223</td>\n",
" <td>18760</td>\n",
" <td>18344</td>\n",
" <td>11202</td>\n",
" <td>...</td>\n",
" <td>6374</td>\n",
" <td>12735</td>\n",
" <td>5220</td>\n",
" <td>28613</td>\n",
" <td>8385</td>\n",
" <td>10052</td>\n",
" <td>14783</td>\n",
" <td>8036</td>\n",
" <td>13808</td>\n",
" <td>7528</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>18</td>\n",
" <td>13194</td>\n",
" <td>7597</td>\n",
" <td>16367</td>\n",
" <td>9949</td>\n",
" <td>9049</td>\n",
" <td>9214</td>\n",
" <td>18564</td>\n",
" <td>18312</td>\n",
" <td>11399</td>\n",
" <td>...</td>\n",
" <td>6222</td>\n",
" <td>12174</td>\n",
" <td>5401</td>\n",
" <td>27646</td>\n",
" <td>8200</td>\n",
" <td>10951</td>\n",
" <td>14078</td>\n",
" <td>7694</td>\n",
" <td>14522</td>\n",
" <td>7894</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>18</td>\n",
" <td>13384</td>\n",
" <td>7193</td>\n",
" <td>16226</td>\n",
" <td>10403</td>\n",
" <td>8675</td>\n",
" <td>9406</td>\n",
" <td>18959</td>\n",
" <td>18140</td>\n",
" <td>11578</td>\n",
" <td>...</td>\n",
" <td>6003</td>\n",
" <td>12386</td>\n",
" <td>5580</td>\n",
" <td>28359</td>\n",
" <td>8042</td>\n",
" <td>10247</td>\n",
" <td>14603</td>\n",
" <td>7678</td>\n",
" <td>14013</td>\n",
" <td>7890</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>18</td>\n",
" <td>13007</td>\n",
" <td>7170</td>\n",
" <td>16556</td>\n",
" <td>10361</td>\n",
" <td>9389</td>\n",
" <td>9621</td>\n",
" <td>18243</td>\n",
" <td>17936</td>\n",
" <td>11592</td>\n",
" <td>...</td>\n",
" <td>6010</td>\n",
" <td>12546</td>\n",
" <td>5246</td>\n",
" <td>28060</td>\n",
" <td>8373</td>\n",
" <td>10569</td>\n",
" <td>14058</td>\n",
" <td>8621</td>\n",
" <td>14532</td>\n",
" <td>7001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>994</th>\n",
" <td>18</td>\n",
" <td>12836</td>\n",
" <td>7012</td>\n",
" <td>16726</td>\n",
" <td>10517</td>\n",
" <td>8491</td>\n",
" <td>9624</td>\n",
" <td>19110</td>\n",
" <td>17918</td>\n",
" <td>11593</td>\n",
" <td>...</td>\n",
" <td>6023</td>\n",
" <td>12743</td>\n",
" <td>5145</td>\n",
" <td>28437</td>\n",
" <td>8329</td>\n",
" <td>10267</td>\n",
" <td>14787</td>\n",
" <td>7683</td>\n",
" <td>13782</td>\n",
" <td>7890</td>\n",
" </tr>\n",
" <tr>\n",
" <th>995</th>\n",
" <td>18</td>\n",
" <td>13196</td>\n",
" <td>7345</td>\n",
" <td>16357</td>\n",
" <td>10171</td>\n",
" <td>8797</td>\n",
" <td>9058</td>\n",
" <td>18762</td>\n",
" <td>18492</td>\n",
" <td>11423</td>\n",
" <td>...</td>\n",
" <td>6211</td>\n",
" <td>12920</td>\n",
" <td>5577</td>\n",
" <td>28359</td>\n",
" <td>8007</td>\n",
" <td>10248</td>\n",
" <td>14615</td>\n",
" <td>8058</td>\n",
" <td>13950</td>\n",
" <td>7508</td>\n",
" </tr>\n",
" <tr>\n",
" <th>996</th>\n",
" <td>18</td>\n",
" <td>12843</td>\n",
" <td>7215</td>\n",
" <td>16759</td>\n",
" <td>10366</td>\n",
" <td>8851</td>\n",
" <td>9248</td>\n",
" <td>18757</td>\n",
" <td>18309</td>\n",
" <td>11109</td>\n",
" <td>...</td>\n",
" <td>6549</td>\n",
" <td>12539</td>\n",
" <td>5353</td>\n",
" <td>28602</td>\n",
" <td>8223</td>\n",
" <td>10080</td>\n",
" <td>13995</td>\n",
" <td>8029</td>\n",
" <td>14504</td>\n",
" <td>7517</td>\n",
" </tr>\n",
" <tr>\n",
" <th>997</th>\n",
" <td>18</td>\n",
" <td>12861</td>\n",
" <td>7368</td>\n",
" <td>16710</td>\n",
" <td>10192</td>\n",
" <td>8839</td>\n",
" <td>9790</td>\n",
" <td>18733</td>\n",
" <td>17727</td>\n",
" <td>11073</td>\n",
" <td>...</td>\n",
" <td>6531</td>\n",
" <td>12347</td>\n",
" <td>5379</td>\n",
" <td>28009</td>\n",
" <td>8217</td>\n",
" <td>10598</td>\n",
" <td>13707</td>\n",
" <td>8068</td>\n",
" <td>14934</td>\n",
" <td>7557</td>\n",
" </tr>\n",
" <tr>\n",
" <th>998</th>\n",
" <td>18</td>\n",
" <td>12841</td>\n",
" <td>7349</td>\n",
" <td>16726</td>\n",
" <td>10202</td>\n",
" <td>9168</td>\n",
" <td>9052</td>\n",
" <td>18391</td>\n",
" <td>18480</td>\n",
" <td>11397</td>\n",
" <td>...</td>\n",
" <td>6182</td>\n",
" <td>12558</td>\n",
" <td>5579</td>\n",
" <td>28587</td>\n",
" <td>8033</td>\n",
" <td>10029</td>\n",
" <td>14806</td>\n",
" <td>8250</td>\n",
" <td>13826</td>\n",
" <td>7327</td>\n",
" </tr>\n",
" <tr>\n",
" <th>999</th>\n",
" <td>18</td>\n",
" <td>13040</td>\n",
" <td>7354</td>\n",
" <td>16552</td>\n",
" <td>10193</td>\n",
" <td>9195</td>\n",
" <td>9189</td>\n",
" <td>18385</td>\n",
" <td>18287</td>\n",
" <td>11407</td>\n",
" <td>...</td>\n",
" <td>6190</td>\n",
" <td>12930</td>\n",
" <td>5390</td>\n",
" <td>28405</td>\n",
" <td>8196</td>\n",
" <td>10200</td>\n",
" <td>13864</td>\n",
" <td>7848</td>\n",
" <td>14731</td>\n",
" <td>7723</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1000</th>\n",
" <td>18</td>\n",
" <td>13193</td>\n",
" <td>6858</td>\n",
" <td>16407</td>\n",
" <td>10728</td>\n",
" <td>9002</td>\n",
" <td>9613</td>\n",
" <td>18560</td>\n",
" <td>17982</td>\n",
" <td>11239</td>\n",
" <td>...</td>\n",
" <td>6382</td>\n",
" <td>12226</td>\n",
" <td>5727</td>\n",
" <td>28596</td>\n",
" <td>7876</td>\n",
" <td>10021</td>\n",
" <td>13746</td>\n",
" <td>7689</td>\n",
" <td>14881</td>\n",
" <td>7905</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1001</th>\n",
" <td>18</td>\n",
" <td>13548</td>\n",
" <td>7396</td>\n",
" <td>16010</td>\n",
" <td>10214</td>\n",
" <td>9398</td>\n",
" <td>8712</td>\n",
" <td>18222</td>\n",
" <td>18838</td>\n",
" <td>11214</td>\n",
" <td>...</td>\n",
" <td>6396</td>\n",
" <td>12730</td>\n",
" <td>4647</td>\n",
" <td>28562</td>\n",
" <td>8929</td>\n",
" <td>10048</td>\n",
" <td>14265</td>\n",
" <td>8390</td>\n",
" <td>14342</td>\n",
" <td>7165</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1002</th>\n",
" <td>18</td>\n",
" <td>13006</td>\n",
" <td>6834</td>\n",
" <td>16546</td>\n",
" <td>10781</td>\n",
" <td>9393</td>\n",
" <td>9795</td>\n",
" <td>18250</td>\n",
" <td>17783</td>\n",
" <td>11212</td>\n",
" <td>...</td>\n",
" <td>6329</td>\n",
" <td>12760</td>\n",
" <td>5397</td>\n",
" <td>28258</td>\n",
" <td>8184</td>\n",
" <td>10414</td>\n",
" <td>14586</td>\n",
" <td>8060</td>\n",
" <td>13969</td>\n",
" <td>7554</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1003</th>\n",
" <td>18</td>\n",
" <td>13014</td>\n",
" <td>7583</td>\n",
" <td>16588</td>\n",
" <td>9989</td>\n",
" <td>9235</td>\n",
" <td>9055</td>\n",
" <td>18389</td>\n",
" <td>18473</td>\n",
" <td>11025</td>\n",
" <td>...</td>\n",
" <td>6519</td>\n",
" <td>12176</td>\n",
" <td>5743</td>\n",
" <td>28170</td>\n",
" <td>7809</td>\n",
" <td>10442</td>\n",
" <td>14443</td>\n",
" <td>8028</td>\n",
" <td>14145</td>\n",
" <td>7544</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1004</th>\n",
" <td>18</td>\n",
" <td>13172</td>\n",
" <td>7031</td>\n",
" <td>16392</td>\n",
" <td>10540</td>\n",
" <td>9175</td>\n",
" <td>9440</td>\n",
" <td>18423</td>\n",
" <td>18135</td>\n",
" <td>11232</td>\n",
" <td>...</td>\n",
" <td>6394</td>\n",
" <td>12216</td>\n",
" <td>5395</td>\n",
" <td>28006</td>\n",
" <td>8217</td>\n",
" <td>10555</td>\n",
" <td>14419</td>\n",
" <td>7860</td>\n",
" <td>14144</td>\n",
" <td>7745</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1005</th>\n",
" <td>18</td>\n",
" <td>12955</td>\n",
" <td>6823</td>\n",
" <td>16514</td>\n",
" <td>10712</td>\n",
" <td>9220</td>\n",
" <td>9575</td>\n",
" <td>18387</td>\n",
" <td>17917</td>\n",
" <td>11253</td>\n",
" <td>...</td>\n",
" <td>6374</td>\n",
" <td>12899</td>\n",
" <td>5194</td>\n",
" <td>28056</td>\n",
" <td>8370</td>\n",
" <td>10600</td>\n",
" <td>13754</td>\n",
" <td>8052</td>\n",
" <td>14901</td>\n",
" <td>7557</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1006</th>\n",
" <td>18</td>\n",
" <td>12977</td>\n",
" <td>7555</td>\n",
" <td>16568</td>\n",
" <td>10034</td>\n",
" <td>8659</td>\n",
" <td>9371</td>\n",
" <td>18936</td>\n",
" <td>18103</td>\n",
" <td>11571</td>\n",
" <td>...</td>\n",
" <td>6037</td>\n",
" <td>12762</td>\n",
" <td>5173</td>\n",
" <td>27829</td>\n",
" <td>8408</td>\n",
" <td>10788</td>\n",
" <td>14208</td>\n",
" <td>7836</td>\n",
" <td>14349</td>\n",
" <td>7702</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1007</th>\n",
" <td>18</td>\n",
" <td>12684</td>\n",
" <td>7763</td>\n",
" <td>16929</td>\n",
" <td>9802</td>\n",
" <td>8845</td>\n",
" <td>9260</td>\n",
" <td>18753</td>\n",
" <td>18303</td>\n",
" <td>11401</td>\n",
" <td>...</td>\n",
" <td>6198</td>\n",
" <td>12702</td>\n",
" <td>5369</td>\n",
" <td>28037</td>\n",
" <td>8197</td>\n",
" <td>10620</td>\n",
" <td>14052</td>\n",
" <td>8395</td>\n",
" <td>14479</td>\n",
" <td>7184</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1008</th>\n",
" <td>18</td>\n",
" <td>13192</td>\n",
" <td>7404</td>\n",
" <td>16456</td>\n",
" <td>10180</td>\n",
" <td>9030</td>\n",
" <td>9781</td>\n",
" <td>18586</td>\n",
" <td>17819</td>\n",
" <td>10856</td>\n",
" <td>...</td>\n",
" <td>6738</td>\n",
" <td>12583</td>\n",
" <td>5398</td>\n",
" <td>28406</td>\n",
" <td>8181</td>\n",
" <td>10241</td>\n",
" <td>14400</td>\n",
" <td>7493</td>\n",
" <td>14146</td>\n",
" <td>8069</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1009</th>\n",
" <td>18</td>\n",
" <td>12677</td>\n",
" <td>7195</td>\n",
" <td>16919</td>\n",
" <td>10348</td>\n",
" <td>9222</td>\n",
" <td>9590</td>\n",
" <td>18421</td>\n",
" <td>17926</td>\n",
" <td>10859</td>\n",
" <td>...</td>\n",
" <td>6740</td>\n",
" <td>12930</td>\n",
" <td>5374</td>\n",
" <td>28198</td>\n",
" <td>8239</td>\n",
" <td>10381</td>\n",
" <td>14107</td>\n",
" <td>8362</td>\n",
" <td>14515</td>\n",
" <td>7174</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1010</th>\n",
" <td>18</td>\n",
" <td>13186</td>\n",
" <td>7208</td>\n",
" <td>16359</td>\n",
" <td>10328</td>\n",
" <td>9190</td>\n",
" <td>9098</td>\n",
" <td>18363</td>\n",
" <td>18514</td>\n",
" <td>11349</td>\n",
" <td>...</td>\n",
" <td>6186</td>\n",
" <td>12197</td>\n",
" <td>5187</td>\n",
" <td>28043</td>\n",
" <td>8366</td>\n",
" <td>10595</td>\n",
" <td>14243</td>\n",
" <td>8381</td>\n",
" <td>14331</td>\n",
" <td>7160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1011</th>\n",
" <td>18</td>\n",
" <td>13544</td>\n",
" <td>7716</td>\n",
" <td>16010</td>\n",
" <td>9842</td>\n",
" <td>8866</td>\n",
" <td>9070</td>\n",
" <td>18734</td>\n",
" <td>18491</td>\n",
" <td>11587</td>\n",
" <td>...</td>\n",
" <td>6057</td>\n",
" <td>11985</td>\n",
" <td>5541</td>\n",
" <td>28029</td>\n",
" <td>7984</td>\n",
" <td>10607</td>\n",
" <td>14070</td>\n",
" <td>8042</td>\n",
" <td>14506</td>\n",
" <td>7514</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1012</th>\n",
" <td>18</td>\n",
" <td>12814</td>\n",
" <td>7388</td>\n",
" <td>16772</td>\n",
" <td>10217</td>\n",
" <td>8825</td>\n",
" <td>9613</td>\n",
" <td>18754</td>\n",
" <td>17968</td>\n",
" <td>10681</td>\n",
" <td>...</td>\n",
" <td>6896</td>\n",
" <td>12209</td>\n",
" <td>5690</td>\n",
" <td>28393</td>\n",
" <td>7840</td>\n",
" <td>10233</td>\n",
" <td>14561</td>\n",
" <td>7318</td>\n",
" <td>13994</td>\n",
" <td>8292</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1013</th>\n",
" <td>18</td>\n",
" <td>13370</td>\n",
" <td>6898</td>\n",
" <td>16193</td>\n",
" <td>10720</td>\n",
" <td>9031</td>\n",
" <td>9057</td>\n",
" <td>18587</td>\n",
" <td>18466</td>\n",
" <td>10538</td>\n",
" <td>...</td>\n",
" <td>7094</td>\n",
" <td>12746</td>\n",
" <td>5370</td>\n",
" <td>28024</td>\n",
" <td>8210</td>\n",
" <td>10567</td>\n",
" <td>13876</td>\n",
" <td>8054</td>\n",
" <td>14695</td>\n",
" <td>7548</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1014</th>\n",
" <td>18</td>\n",
" <td>12836</td>\n",
" <td>7211</td>\n",
" <td>16754</td>\n",
" <td>10376</td>\n",
" <td>9384</td>\n",
" <td>9788</td>\n",
" <td>18176</td>\n",
" <td>17754</td>\n",
" <td>11742</td>\n",
" <td>...</td>\n",
" <td>5792</td>\n",
" <td>12908</td>\n",
" <td>5008</td>\n",
" <td>28215</td>\n",
" <td>8585</td>\n",
" <td>10371</td>\n",
" <td>14227</td>\n",
" <td>7888</td>\n",
" <td>14371</td>\n",
" <td>7729</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1015</th>\n",
" <td>18</td>\n",
" <td>13013</td>\n",
" <td>7030</td>\n",
" <td>16582</td>\n",
" <td>10540</td>\n",
" <td>9392</td>\n",
" <td>9575</td>\n",
" <td>18237</td>\n",
" <td>17942</td>\n",
" <td>10849</td>\n",
" <td>...</td>\n",
" <td>6739</td>\n",
" <td>13070</td>\n",
" <td>4682</td>\n",
" <td>27704</td>\n",
" <td>8915</td>\n",
" <td>10929</td>\n",
" <td>14066</td>\n",
" <td>8057</td>\n",
" <td>14525</td>\n",
" <td>7593</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1016</th>\n",
" <td>18</td>\n",
" <td>12673</td>\n",
" <td>6867</td>\n",
" <td>16915</td>\n",
" <td>10718</td>\n",
" <td>9179</td>\n",
" <td>9565</td>\n",
" <td>18406</td>\n",
" <td>17985</td>\n",
" <td>11008</td>\n",
" <td>...</td>\n",
" <td>6546</td>\n",
" <td>12735</td>\n",
" <td>5419</td>\n",
" <td>28578</td>\n",
" <td>8233</td>\n",
" <td>10059</td>\n",
" <td>14408</td>\n",
" <td>8051</td>\n",
" <td>14133</td>\n",
" <td>7555</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1017</th>\n",
" <td>18</td>\n",
" <td>13219</td>\n",
" <td>7369</td>\n",
" <td>16354</td>\n",
" <td>10189</td>\n",
" <td>9243</td>\n",
" <td>9082</td>\n",
" <td>18387</td>\n",
" <td>18505</td>\n",
" <td>11259</td>\n",
" <td>...</td>\n",
" <td>6352</td>\n",
" <td>12893</td>\n",
" <td>4653</td>\n",
" <td>28390</td>\n",
" <td>8922</td>\n",
" <td>10207</td>\n",
" <td>13751</td>\n",
" <td>8036</td>\n",
" <td>14910</td>\n",
" <td>7521</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1018</th>\n",
" <td>18</td>\n",
" <td>12801</td>\n",
" <td>7024</td>\n",
" <td>16719</td>\n",
" <td>10521</td>\n",
" <td>8664</td>\n",
" <td>9452</td>\n",
" <td>18916</td>\n",
" <td>18172</td>\n",
" <td>11395</td>\n",
" <td>...</td>\n",
" <td>6252</td>\n",
" <td>12564</td>\n",
" <td>5560</td>\n",
" <td>27916</td>\n",
" <td>8049</td>\n",
" <td>10766</td>\n",
" <td>14807</td>\n",
" <td>7462</td>\n",
" <td>13803</td>\n",
" <td>8100</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1019</th>\n",
" <td>18</td>\n",
" <td>12962</td>\n",
" <td>7555</td>\n",
" <td>16544</td>\n",
" <td>10026</td>\n",
" <td>8664</td>\n",
" <td>9252</td>\n",
" <td>18941</td>\n",
" <td>18315</td>\n",
" <td>11601</td>\n",
" <td>...</td>\n",
" <td>5974</td>\n",
" <td>12185</td>\n",
" <td>5679</td>\n",
" <td>27660</td>\n",
" <td>7799</td>\n",
" <td>10939</td>\n",
" <td>14233</td>\n",
" <td>7490</td>\n",
" <td>14292</td>\n",
" <td>8064</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1020</th>\n",
" <td>18</td>\n",
" <td>13165</td>\n",
" <td>7008</td>\n",
" <td>16397</td>\n",
" <td>10576</td>\n",
" <td>9021</td>\n",
" <td>9581</td>\n",
" <td>18581</td>\n",
" <td>17974</td>\n",
" <td>11933</td>\n",
" <td>...</td>\n",
" <td>5668</td>\n",
" <td>12426</td>\n",
" <td>5733</td>\n",
" <td>28388</td>\n",
" <td>7878</td>\n",
" <td>10203</td>\n",
" <td>14435</td>\n",
" <td>7832</td>\n",
" <td>14128</td>\n",
" <td>7746</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1021</th>\n",
" <td>18</td>\n",
" <td>12988</td>\n",
" <td>6686</td>\n",
" <td>16555</td>\n",
" <td>10878</td>\n",
" <td>9371</td>\n",
" <td>9597</td>\n",
" <td>18224</td>\n",
" <td>17934</td>\n",
" <td>11060</td>\n",
" <td>...</td>\n",
" <td>6577</td>\n",
" <td>12741</td>\n",
" <td>5186</td>\n",
" <td>27724</td>\n",
" <td>8386</td>\n",
" <td>10951</td>\n",
" <td>14045</td>\n",
" <td>8444</td>\n",
" <td>14502</td>\n",
" <td>7164</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1022</th>\n",
" <td>18</td>\n",
" <td>12781</td>\n",
" <td>7197</td>\n",
" <td>16766</td>\n",
" <td>10340</td>\n",
" <td>9373</td>\n",
" <td>9393</td>\n",
" <td>18227</td>\n",
" <td>18171</td>\n",
" <td>11602</td>\n",
" <td>...</td>\n",
" <td>6010</td>\n",
" <td>12232</td>\n",
" <td>5376</td>\n",
" <td>27886</td>\n",
" <td>8208</td>\n",
" <td>10771</td>\n",
" <td>13919</td>\n",
" <td>8424</td>\n",
" <td>14713</td>\n",
" <td>7140</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1023</th>\n",
" <td>18</td>\n",
" <td>13012</td>\n",
" <td>7210</td>\n",
" <td>16535</td>\n",
" <td>10341</td>\n",
" <td>8827</td>\n",
" <td>9380</td>\n",
" <td>18743</td>\n",
" <td>18151</td>\n",
" <td>11757</td>\n",
" <td>...</td>\n",
" <td>5863</td>\n",
" <td>12711</td>\n",
" <td>5030</td>\n",
" <td>28244</td>\n",
" <td>8541</td>\n",
" <td>10428</td>\n",
" <td>13835</td>\n",
" <td>8006</td>\n",
" <td>14683</td>\n",
" <td>7530</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1024 rows × 21 columns</p>\n",
"</div>"
],
"text/plain": [
" division 1pter_mat 1pter_pat 1qter_mat 1qter_pat 2pter_mat \\\n",
"0 18 13203 6852 16422 10718 9064 \n",
"1 18 13197 7186 16344 10377 8814 \n",
"2 18 12846 7000 16746 10510 8443 \n",
"3 18 12827 7728 16753 9834 8703 \n",
"4 18 13175 6807 16382 10727 8295 \n",
"5 18 13047 7368 16513 10149 9565 \n",
"6 18 12640 7580 16927 10037 9037 \n",
"7 18 13215 7399 16347 10188 8885 \n",
"8 18 12995 6674 16617 10883 8637 \n",
"9 18 13741 7360 15834 10196 8694 \n",
"10 18 13166 7034 16355 10543 8859 \n",
"11 18 12629 7037 16900 10532 9041 \n",
"12 18 12824 6643 16737 10903 9016 \n",
"13 18 13189 7040 16353 10519 9417 \n",
"14 18 12963 7027 16627 10550 8814 \n",
"15 18 13030 7203 16538 10350 8854 \n",
"16 18 13050 7363 16587 10195 9187 \n",
"17 18 13000 7588 16553 10036 9030 \n",
"18 18 13002 7225 16562 10371 9037 \n",
"19 18 12963 7573 16532 10023 9054 \n",
"20 18 13366 7001 16229 10557 8465 \n",
"21 18 12993 7051 16516 10527 9564 \n",
"22 18 12822 7727 16760 9792 8971 \n",
"23 18 12473 7190 17104 10357 8689 \n",
"24 18 12651 6817 16913 10713 8644 \n",
"25 18 13352 7549 16167 10001 9241 \n",
"26 18 13166 7044 16358 10505 8864 \n",
"27 18 13194 7597 16367 9949 9049 \n",
"28 18 13384 7193 16226 10403 8675 \n",
"29 18 13007 7170 16556 10361 9389 \n",
"... ... ... ... ... ... ... \n",
"994 18 12836 7012 16726 10517 8491 \n",
"995 18 13196 7345 16357 10171 8797 \n",
"996 18 12843 7215 16759 10366 8851 \n",
"997 18 12861 7368 16710 10192 8839 \n",
"998 18 12841 7349 16726 10202 9168 \n",
"999 18 13040 7354 16552 10193 9195 \n",
"1000 18 13193 6858 16407 10728 9002 \n",
"1001 18 13548 7396 16010 10214 9398 \n",
"1002 18 13006 6834 16546 10781 9393 \n",
"1003 18 13014 7583 16588 9989 9235 \n",
"1004 18 13172 7031 16392 10540 9175 \n",
"1005 18 12955 6823 16514 10712 9220 \n",
"1006 18 12977 7555 16568 10034 8659 \n",
"1007 18 12684 7763 16929 9802 8845 \n",
"1008 18 13192 7404 16456 10180 9030 \n",
"1009 18 12677 7195 16919 10348 9222 \n",
"1010 18 13186 7208 16359 10328 9190 \n",
"1011 18 13544 7716 16010 9842 8866 \n",
"1012 18 12814 7388 16772 10217 8825 \n",
"1013 18 13370 6898 16193 10720 9031 \n",
"1014 18 12836 7211 16754 10376 9384 \n",
"1015 18 13013 7030 16582 10540 9392 \n",
"1016 18 12673 6867 16915 10718 9179 \n",
"1017 18 13219 7369 16354 10189 9243 \n",
"1018 18 12801 7024 16719 10521 8664 \n",
"1019 18 12962 7555 16544 10026 8664 \n",
"1020 18 13165 7008 16397 10576 9021 \n",
"1021 18 12988 6686 16555 10878 9371 \n",
"1022 18 12781 7197 16766 10340 9373 \n",
"1023 18 13012 7210 16535 10341 8827 \n",
"\n",
" 2pter_pat 2qter_mat 2qter_pat 3pter_mat ... 3qter_mat \\\n",
"0 9767 18582 17768 11585 ... 6000 \n",
"1 9398 18782 18126 10865 ... 6736 \n",
"2 9251 19106 18299 11384 ... 6194 \n",
"3 9423 18910 18163 11374 ... 6193 \n",
"4 9453 19314 18155 10810 ... 6745 \n",
"5 9411 18033 18106 11386 ... 6162 \n",
"6 9379 18537 18115 11550 ... 6046 \n",
"7 9379 18749 18122 10863 ... 6742 \n",
"8 9771 18932 17783 11232 ... 6367 \n",
"9 9414 18936 18102 11026 ... 6550 \n",
"10 9798 18771 17788 11006 ... 6566 \n",
"11 8858 18585 18686 11222 ... 6368 \n",
"12 9777 18593 17747 11407 ... 6214 \n",
"13 9016 18201 18459 11210 ... 6337 \n",
"14 9584 18777 17943 11394 ... 6206 \n",
"15 9194 18775 18313 11555 ... 6040 \n",
"16 9198 18411 18324 11065 ... 6554 \n",
"17 9183 18608 18315 10489 ... 7104 \n",
"18 9075 18585 18464 11394 ... 6197 \n",
"19 8833 18579 18686 11567 ... 6030 \n",
"20 9606 19105 17977 10888 ... 6735 \n",
"21 9410 18034 18136 10860 ... 6751 \n",
"22 9759 18562 17758 11579 ... 6008 \n",
"23 9761 18942 17751 11254 ... 6381 \n",
"24 10125 18929 17415 11403 ... 6221 \n",
"25 9421 18401 18142 10889 ... 6748 \n",
"26 9223 18760 18344 11202 ... 6374 \n",
"27 9214 18564 18312 11399 ... 6222 \n",
"28 9406 18959 18140 11578 ... 6003 \n",
"29 9621 18243 17936 11592 ... 6010 \n",
"... ... ... ... ... ... ... \n",
"994 9624 19110 17918 11593 ... 6023 \n",
"995 9058 18762 18492 11423 ... 6211 \n",
"996 9248 18757 18309 11109 ... 6549 \n",
"997 9790 18733 17727 11073 ... 6531 \n",
"998 9052 18391 18480 11397 ... 6182 \n",
"999 9189 18385 18287 11407 ... 6190 \n",
"1000 9613 18560 17982 11239 ... 6382 \n",
"1001 8712 18222 18838 11214 ... 6396 \n",
"1002 9795 18250 17783 11212 ... 6329 \n",
"1003 9055 18389 18473 11025 ... 6519 \n",
"1004 9440 18423 18135 11232 ... 6394 \n",
"1005 9575 18387 17917 11253 ... 6374 \n",
"1006 9371 18936 18103 11571 ... 6037 \n",
"1007 9260 18753 18303 11401 ... 6198 \n",
"1008 9781 18586 17819 10856 ... 6738 \n",
"1009 9590 18421 17926 10859 ... 6740 \n",
"1010 9098 18363 18514 11349 ... 6186 \n",
"1011 9070 18734 18491 11587 ... 6057 \n",
"1012 9613 18754 17968 10681 ... 6896 \n",
"1013 9057 18587 18466 10538 ... 7094 \n",
"1014 9788 18176 17754 11742 ... 5792 \n",
"1015 9575 18237 17942 10849 ... 6739 \n",
"1016 9565 18406 17985 11008 ... 6546 \n",
"1017 9082 18387 18505 11259 ... 6352 \n",
"1018 9452 18916 18172 11395 ... 6252 \n",
"1019 9252 18941 18315 11601 ... 5974 \n",
"1020 9581 18581 17974 11933 ... 5668 \n",
"1021 9597 18224 17934 11060 ... 6577 \n",
"1022 9393 18227 18171 11602 ... 6010 \n",
"1023 9380 18743 18151 11757 ... 5863 \n",
"\n",
" 3qter_pat 4pter_mat 4pter_pat 4qter_mat 4qter_pat 5pter_mat \\\n",
"0 12372 5407 28431 8202 10199 14433 \n",
"1 12556 5534 28207 8033 10390 14069 \n",
"2 12568 5706 28406 7839 10261 14423 \n",
"3 12732 5388 28048 8182 10588 14617 \n",
"4 12043 5313 28215 8235 10419 14195 \n",
"5 12553 5352 27973 8194 10590 14069 \n",
"6 12720 5573 28246 8014 10416 14452 \n",
"7 12557 5343 27842 8198 10747 14258 \n",
"8 12914 5226 28773 8391 9838 13907 \n",
"9 12685 5199 28549 8412 10020 14272 \n",
"10 12757 5514 28230 8028 10410 14774 \n",
"11 11984 5718 27833 7810 10771 14222 \n",
"12 12045 5561 28204 8029 10413 14231 \n",
"13 12730 5378 27858 8221 10752 14054 \n",
"14 12372 4850 28044 8738 10582 14435 \n",
"15 12174 5382 28012 8226 10592 14428 \n",
"16 12356 5577 28047 8010 10604 14053 \n",
"17 12890 5375 28203 8275 10356 14619 \n",
"18 12560 5532 28384 7987 10232 14269 \n",
"19 12208 5543 27508 8019 11125 14424 \n",
"20 12055 6080 28035 7495 10579 13885 \n",
"21 12901 5550 28351 8060 10187 13853 \n",
"22 12919 5399 28067 8217 10573 14249 \n",
"23 12533 5014 27651 8588 10923 14029 \n",
"24 12213 5759 28405 7847 10235 14212 \n",
"25 12919 4606 28403 8904 10209 14236 \n",
"26 12735 5220 28613 8385 10052 14783 \n",
"27 12174 5401 27646 8200 10951 14078 \n",
"28 12386 5580 28359 8042 10247 14603 \n",
"29 12546 5246 28060 8373 10569 14058 \n",
"... ... ... ... ... ... ... \n",
"994 12743 5145 28437 8329 10267 14787 \n",
"995 12920 5577 28359 8007 10248 14615 \n",
"996 12539 5353 28602 8223 10080 13995 \n",
"997 12347 5379 28009 8217 10598 13707 \n",
"998 12558 5579 28587 8033 10029 14806 \n",
"999 12930 5390 28405 8196 10200 13864 \n",
"1000 12226 5727 28596 7876 10021 13746 \n",
"1001 12730 4647 28562 8929 10048 14265 \n",
"1002 12760 5397 28258 8184 10414 14586 \n",
"1003 12176 5743 28170 7809 10442 14443 \n",
"1004 12216 5395 28006 8217 10555 14419 \n",
"1005 12899 5194 28056 8370 10600 13754 \n",
"1006 12762 5173 27829 8408 10788 14208 \n",
"1007 12702 5369 28037 8197 10620 14052 \n",
"1008 12583 5398 28406 8181 10241 14400 \n",
"1009 12930 5374 28198 8239 10381 14107 \n",
"1010 12197 5187 28043 8366 10595 14243 \n",
"1011 11985 5541 28029 7984 10607 14070 \n",
"1012 12209 5690 28393 7840 10233 14561 \n",
"1013 12746 5370 28024 8210 10567 13876 \n",
"1014 12908 5008 28215 8585 10371 14227 \n",
"1015 13070 4682 27704 8915 10929 14066 \n",
"1016 12735 5419 28578 8233 10059 14408 \n",
"1017 12893 4653 28390 8922 10207 13751 \n",
"1018 12564 5560 27916 8049 10766 14807 \n",
"1019 12185 5679 27660 7799 10939 14233 \n",
"1020 12426 5733 28388 7878 10203 14435 \n",
"1021 12741 5186 27724 8386 10951 14045 \n",
"1022 12232 5376 27886 8208 10771 13919 \n",
"1023 12711 5030 28244 8541 10428 13835 \n",
"\n",
" 5pter_pat 5qter_mat 5qter_pat \n",
"0 8039 14134 7516 \n",
"1 8218 14511 7351 \n",
"2 8221 14127 7337 \n",
"3 8046 13990 7570 \n",
"4 7337 14324 8243 \n",
"5 8231 14565 7357 \n",
"6 7878 14180 7681 \n",
"7 8043 14341 7560 \n",
"8 7473 14722 8073 \n",
"9 8225 14347 7358 \n",
"10 7683 13803 7900 \n",
"11 8246 14352 7330 \n",
"12 7689 14357 7879 \n",
"13 7893 14499 7733 \n",
"14 8051 14178 7557 \n",
"15 8387 14176 7210 \n",
"16 7692 14531 7878 \n",
"17 8402 13980 7179 \n",
"18 7684 14329 7890 \n",
"19 7673 14177 7879 \n",
"20 7868 14691 7709 \n",
"21 8234 14715 7330 \n",
"22 8243 14383 7386 \n",
"23 7857 14543 7721 \n",
"24 7684 14353 7936 \n",
"25 8542 14340 6973 \n",
"26 8036 13808 7528 \n",
"27 7694 14522 7894 \n",
"28 7678 14013 7890 \n",
"29 8621 14532 7001 \n",
"... ... ... ... \n",
"994 7683 13782 7890 \n",
"995 8058 13950 7508 \n",
"996 8029 14504 7517 \n",
"997 8068 14934 7557 \n",
"998 8250 13826 7327 \n",
"999 7848 14731 7723 \n",
"1000 7689 14881 7905 \n",
"1001 8390 14342 7165 \n",
"1002 8060 13969 7554 \n",
"1003 8028 14145 7544 \n",
"1004 7860 14144 7745 \n",
"1005 8052 14901 7557 \n",
"1006 7836 14349 7702 \n",
"1007 8395 14479 7184 \n",
"1008 7493 14146 8069 \n",
"1009 8362 14515 7174 \n",
"1010 8381 14331 7160 \n",
"1011 8042 14506 7514 \n",
"1012 7318 13994 8292 \n",
"1013 8054 14695 7548 \n",
"1014 7888 14371 7729 \n",
"1015 8057 14525 7593 \n",
"1016 8051 14133 7555 \n",
"1017 8036 14910 7521 \n",
"1018 7462 13803 8100 \n",
"1019 7490 14292 8064 \n",
"1020 7832 14128 7746 \n",
"1021 8444 14502 7164 \n",
"1022 8424 14713 7140 \n",
"1023 8006 14683 7530 \n",
"\n",
"[1024 rows x 21 columns]"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_P0"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f368ca91cf8>"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_P4['division'].plot.hist(bins = 10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The length of two telomeres belonging to the same homologous chromosome are correlated:\n",
"The length of telomeres belonging to the same homologous chromomoses (maternal or paternal) are correlated in a cells population deriving from one cell."
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0,0.5,'tel qter (bp)')"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Draw a graph with pandas and keep what's returned\n",
"ax = df_P4.plot(kind='scatter', x='1pter_mat', y='1qter_mat')\n",
"\n",
"# Set the x,y scale\n",
"#ax.set_xlim((13000, 15000))\n",
"#ax.set_ylim((16000, 18000))\n",
"\n",
"# Set the x-axis label\n",
"ax.set_xlabel(\"tel pter (bp)\")\n",
"\n",
"# Set the y-axis label\n",
"ax.set_ylabel(\"tel qter (bp)\")"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ0AAAELCAYAAAAC4Fv8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8VPW9//HXh7BK2cTBooABi8oS1rAJChQVsLQRd/QqCFdAtNXba6+23ntxab1avbVKFbQNBZVVvW61Fa0/KOJSwLqxCEaIEqESUVABIYTP749zEoZkskySmWzv5+Mxj5n5nO855zPZPjnnfM/3a+6OiIhIMjSo7gRERKT+UNEREZGkUdEREZGkUdEREZGkUdEREZGkUdEREZGkUdEREZGkUdEREZGkUdEREZGkaVjdCVSH4447zlNTU6s7DRGRWuOtt9763N0jld1OvSw6qamprF27trrTEBGpNczs46rYjk6viYhI0qjoiIhI0qjoiIhI0tTLazqx5OXlkZOTw7ffflvdqUgN1LRpUzp06ECjRo2qOxWRWk1FJ5STk0OLFi1ITU3FzKo7HalB3J1du3aRk5ND586dqzsdkVpNp9dC3377LW3btlXBkWLMjLZt2+oouCbKzYU1a4JnqRVUdKKo4EhJ9LNRA117LbRrB0OHQocO8PDD1Z2RlINOr4lI7XPCCbBjR/A6Ly94nj49eJ42rXpyknJJ6JGOmc01s51mti4qtsTM3gkf2Wb2TtSyn5tZlpltMrPRUfExYSzLzG6Oinc2s7+b2Yfhdhsn8vMk2uTJk2nXrh09e/ZM2D5++9vfsm/fvoRtv0B2dnbMz7FixQrGjRuX8P2XlYfUYgsWHCk4RV1/vU611XCJPr02DxgTHXD3S9y9j7v3AZ4C/g/AzLoDlwI9wnUeMrMUM0sBHgTGAt2BCWFbgLuB+9y9K/AlMCXBnyehJk2axIsvvpjQfVSk6OTn5ycoG5EKWLq09OVvvx0863pPjZTQouPuK4EvYi2z4CT5xcCiMJQBLHb3A+6+FcgCBoaPLHff4u4HgcVARrj+94Enw/XnA+cl7MPEUsU/1GeeeSbHHntsqW0mTZrENddcw8iRI+nSpQt/+9vfmDx5Mt26dWPSpEmF7a655hrS09Pp0aMHM2fOBOCBBx5g+/btjBw5kpEjRwLw0ksvMWTIEPr168dFF13EN998AwRDBd1+++0MGzaMJ554ghEjRnDTTTcxcOBATjnlFF599VUgOJI444wz6NevH/369eP1118v83N+8803XHjhhZx22mlcfvnluDsAr7zyCn379iUtLY3Jkydz4MCBwlx+8YtfMGTIENLT0/nHP/7B6NGjOfnkk5kzZw4Q9DD72c9+Rs+ePUlLS2PJkiXF9vvtt99y1VVXkZaWRt++fVm+fDkA+/bt4+KLL6ZXr15ccsklDBo0SMMk1WQXX1zysgMH4Nxz4fjjg+s9gwbBd78L996bvPykdO6e0AeQCqyLET8TWBv1/nfAv0S9zwQuDB9/iIpfEbY9jqAYFcQ7xtpP1PKpwFpgbadOnbyoDRs2FIuVauFC92bN3Fu1Cp4XLoxv/RJs3brVe/ToUeLyiRMn+iWXXOKHDx/2Z555xlu0aOHvvfee5+fne79+/fztt992d/ddu3a5u/uhQ4d8+PDh/u6777q7+0knneS5ubnu7p6bm+tnnHGGf/PNN+7uftddd/ltt91W2O7uu+8u3O/w4cP9pz/9qbu7v/DCCz5q1Ch3d9+7d6/v37/f3d03b97s/fv3L/VzLF++3Fu2bOnbtm3z/Px8Hzx4sL/66qu+f/9+79Chg2/atMnd3a+44gq/7777CnN56KGH3N39hhtu8LS0NP/qq698586dHolE3N39ySef9LPOOssPHTrk//znP71jx46+ffv2o/K49957fdKkSe7uvnHjRu/YsaPv37/f77nnHp86daq7u7///vuekpLia9asKZZ73D8jkjgnnOAO8T0mT67urGu16L/XlXlUZ++1CRw5ygGI1T3IKxCPyd0fcfd0d0+PRCo5UGpuLkyZAvv3w549wfOUKUk7jP/hD3+ImZGWlsbxxx9PWloaDRo0oEePHmRnZwOwdOlS+vXrR9++fVm/fj0bNmwotp0333yTDRs2MHToUPr06cP8+fP5+OMjY/pdcsklR7U///zzAejfv3/hfvLy8rj66qtJS0vjoosuirmfogYOHEiHDh1o0KABffr0ITs7m02bNtG5c2dOOeUUACZOnMjKlSsL1/nRj34EQFpaGoMGDaJFixZEIhGaNm3K7t27WbVqFRMmTCAlJYXjjz+e4cOHs2bNmqP2u2rVKq644goATjvtNE466SQ2b97MqlWruPTSSwHo2bMnvXr1KvMzSDX79FOYMSO+debOhY0bE5OPlFu19F4zs4bA+UD/qHAOwdFKgQ7A9vB1rPjnQGsza+juh4q0T6zsbGjcOCg2BRo1CuKVLWjl0KRJEwAaNGhQ+Lrg/aFDh9i6dSv33nsva9asoU2bNkyaNCnmPSbuztlnn82iRYuKLQNo3rx5zP2mpKRw6NAhAO677z6OP/543n33XQ4fPkzTpk3LnX/0ttxL/H+hXJ+5rPWBEtuUZ12pgR58EDIyYPx4KO91ytWroVu3xOYlpaquI52zgA/cPScq9hxwqZk1MbPOQFdgNbAG6Br2VGtM0NngufBwbznB6TeAicCzSck+NRUOHjw6lpcXxGuAr776iubNm9OqVSs+++wz/vKXvxQua9GiBV9//TUAgwcP5rXXXiMrKwsIrm1s3rw5rn3t2bOH9u3b06BBAx577LEKdzo47bTTyM7OLszlscceY/jw4eVe/8wzz2TJkiXk5+eTm5vLypUrGThwYLE2CxYsAGDz5s188sknnHrqqQwbNoyl4cXpDRs28P7771foM0g16Ns3OHlWXjNnBv8wmgXPJ50Et9+uzgZJlOgu04uAN4BTzSzHzAp6l13K0afWcPf1wFJgA/AicK2754dHMdcBy4CNwNKwLcBNwE/NLAtoS3AdKPEiEcjMhGbNoGXL4Dkzs9JHORMmTGDIkCFs2rSJDh06kJlZsY/Tu3dv+vbtS48ePZg8eTJDhw4tXDZ16lTGjh3LyJEjiUQizJs3jwkTJtCrVy8GDx7MBx98ENe+ZsyYwfz58xk8eDCbN28udnRUXk2bNuWPf/wjF110UeHpwukF912Uw/jx4+nVqxe9e/fm+9//Pr/+9a/57ne/WyzX/Px80tLSuOSSS5g3bx5NmjRhxowZ5Obm0qtXL+6++2569epFq1atKvQ5JMmifxejjoBL9PHHR+7rycuDTz4JClG7dlDCEb9ULauPpxbS09O9aO+kjRs30i3ew+7c3OCUWmpqUk6rSWLk5+eTl5dH06ZN+eijjxg1ahSbN2+mceOjb/uq0M+IJEfB7+J3vgNXXw2vvRb/NlJSgvt/9Lsck5m95e7pld2ORiSojEhEP6B1wL59+xg5ciR5eXm4O7Nnzy5WcKSGi/5dXLUq6DDw+OOwbBm89Vb5tpGfH9zjc845ictTVHREWrRoofty6ppu3eBXvwru2Rk2rPzrjQ4HQjnuOBg+HCZNgiSOoFEfaMBPEam7hg6FESPiX+/zz+Gpp+CHPwR1oa9SKjoiUrctXw433ljx9d9/H/70p6rLp55T0RGRuu+ee2DOHGhYwSsKP/lJ0Flh6VKYNUs3mVaCrumISP0wbRqcf/6RAUE3bQqKSXls3Rp0q442eXLQXVvioiOdGiQRUxtkZ2ezcOHCKtteaW699VbujTGw4qRJk3jyySdjrJHcPESIRILeaeecA2edVbltzZ2rgUQrQEWnBknE1AYVKTqaykDqhW7d4LrrKreNn/1MoxnESUWnEnL35rLm0zXk7k3u1AbTp0/njDPO4JRTTuFP4QXOkqYYuPnmm3n11Vfp06cP9913H/n5+fzsZz9jwIAB9OrVi4fDKX5XrFjByJEjueyyy0hLSyM7O5tu3bpx9dVX06NHD8455xz2h2PN/f73v2fAgAH07t2bCy64oFzz86xcuZLTTz+dLl26FB71eAnTEaxYsYLhw4dz8cUXc8opp3DzzTezYMECBg4cSFpaGh999BEAH3/8MaNGjaJXr16MGjWKTz75pNh+33nnHQYPHkyvXr0YP348X375JQBr1qyhV69eDBkypDAHqYdmzYING6B//7LblmT06OAaz/z5utZTHlUxVHVtexQMvx8t3mHrF7630Jv9spm3+p9W3uyXzXzh+8mb2mD06NGen5/vmzdv9hNPPNH3799f4hQDy5cv9x/84AeF6z/88MN+xx13uLv7t99+6/379/ctW7b48uXL/ZhjjvEtW7YU5pGSklI4VcJFF13kjz32mLu7f/7554Xbu+WWW/yBBx5wd/eZM2f6PffcEzPnCy+80PPz8339+vV+8sknu3vJ0xEsX77cW7Vq5du3b/dvv/3WTzjhBP/v//5vd3f/7W9/69dff727u48bN87nzZvn7u6ZmZmekZFRLI+0tDRfsWKFu7v/13/9V+G6PXr08Ndee83d3W+66aZSv+YFNLVBHbdhg/sNN7gPH+4+ZEj8UycUPE4/3X3nzur+NFWOOjC1Qa2VuzeXKc9NYf+h/ew5sIf9h/Yz5dkpVXbEU5aLL76YBg0a0LVrV7p06cIHH3xQ7ikGXnrpJR599FH69OnDoEGD2LVrFx9++CEQTDnQuXPnwradO3emT58+wNHTGaxbt44zzjiDtLQ0FixYwPr164vtp6jzzjuPBg0a0L17dz777DOAUqcjGDBgAO3bt6dJkyacfPLJnBPeJV5wFAbwxhtvcNlllwFwxRVXsGrVqqP2uWfPHnbv3l04cGjBdAm7d+/m66+/5vTTTwco3IbUc926wX33wYoVcOutFd/O668Hk8hpLLeY1HutArJ3Z9M4pTH7Dx2Z2qBRSiOyd2cTaZ74YXGCSVOPfl/eKQbcnVmzZjG64M7r0IoVK0qcygCCKQgKTq9NmjSJZ555ht69ezNv3jxWrFhRZs7R2/JwvL+C57LaR09nUDCVQSxFvy4lKW2/IkAwerVZfCNYR3OHyy4LOitoqKyj6EinAlJbp3Iw/+ipDfLy80htnZqU/T/xxBMcPnyYjz76iC1btnDqqaeWOMVA9FQGAKNHj2b27NnkhSPtbt68mb1798a1/6+//pr27duTl5dXOFVARZRnOoLSnH766SxevBiABQsWMKzIcCetWrWiTZs2hVNrF0yX0KZNG1q0aMGbb74JULgNkUKRCFTiZ7vQL35R+W3UMTrSqYBI8wiZGZlMeXYKjVIakZefR2ZGZqWPciZMmMCKFSv4/PPP6dChA7fddhtTpkwp1u7UU09l+PDhfPbZZ8yZM4emTZsyY8YMLrjgAp544glGjhxZeNTSq1cvGjZsSO/evZk0aRLXX3892dnZ9OvXD3cnEonwzDPPxJXnHXfcwaBBgzjppJNIS0s7qqjFY/z48bzxxhv07t0bMyucjqC80ys88MADTJ48mXvuuYdIJMIf//jHYm3mz5/P9OnT2bdvH126dClsk5mZydVXX03z5s0ZMWKEpjKQ4iZMCI5U5syB3/wGdu+Ofxtz58KgQcHrnTvhe9+DkSPr9dGPpjYIVWTY+ty9uWTvzia1dWpSTqtBcGpr3LhxXHjhhWU3lhJ98803fOc73wHgrrvuYseOHdx///2lrqOpDaRQOU/llmjhwqCo1SJVNbVBoidxm2tmO81sXZH4j81sk5mtN7NfR8V/bmZZ4bLRUfExYSzLzG6Oinc2s7+b2YdmtiScWTRpIs0jDDhxQNIKjlSdF154gT59+tCzZ09effVV/vM//7O6U5LaZMyYyq1/2WX19v6ehB7pmNmZwDfAo+7eM4yNBG4BfuDuB8ysnbvvNLPuBLOJDgROAP4KnBJuajNwNpBDMH31BHffYGZLgf9z98VmNgd4191nl5VXlU3iJvWKfkak0Jo1EMf1x5h+/3v413+tmnySoFYc6bj7SuCLIuFrgLvc/UDYZmcYzwAWu/sBd98KZBEUoIFAlrtvcfeDwGIgw4KuSt8HCsZXmQ+cV8l8K7O61GH62ZCjpKYGU2RXRj3tUl0dvddOAc4IT4v9zcwGhPETgW1R7XLCWEnxtsBudz9UJB6TmU01s7VmtjY3xmFt06ZN2bVrl/64SDHuzq5du0rshi71UCQSDPbZrBkcc0wQO+446N27/NtYuTLoWDBqFPzhD/XmdFt19F5rCLQBBgMDgKVm1gWIdWXOiV0YvZT2Mbn7I8AjEJxeK7q8Q4cO5OTkEKsgiTRt2pQOHTpUdxpSkxT0bsvODo58IpHgtNugQeW7v+fQIfjoo+Dx//4fXH110FNu2rREZ16tqqPo5BBch3FgtZkdBo4L4x2j2nUAtoevY8U/B1qbWcPwaCe6fdwaNWp01N34IiJlikSO7v6cmhrM2RPeBxe36dOD5zpceKrj9NozBNdiMLNTgMYEBeQ54FIza2JmnYGuwGqCjgNdw55qjYFLgefCorUcKOg7PBF4NqmfREQkWiQCd95ZuW1Mn16nT7Ulusv0IuAN4FQzyzGzKcBcoEvYjXoxMDEcT249sBTYALwIXOvu+eFRzHXAMmAjsDRsC3AT8FMzyyK4xqMZlUSket14I8S4qRuABuX8kzt7Nrz0UvCoYwVIN4eKiCTCxo3w9NPB6/HjgwFF+/U7MnNpPGrAtZ6q6jKtYXBERBKhW7fgEW3AgIoVnTp0rUcDfoqIJMsNN1R83TpyrUdFR0QkWSo7Rfbjj1ddLtVEp9dERJJp1iyYMSMoIBs2QJMmwf0+27fDzJmlr/vnPwfD7zz9NJx2GmRk1LoRq9WRQESkJli6FC65pPQ27doFUyREmzmzcjOdllOtGHtNRETKqXXrstsULTgAt90WzNFTS6joiIjUBH37QqNGJS8vbRimFSvgtdeqPKVEUNEREakJIhGYP7944TnzTFi1Cq68svT1C+4Jys0NxoCroT3d1JFARKSmKBhEtOBenr59j3QUOPbY0ofYOe20YLqEyZODmU3dg+mya9gMpepIICJSW2RkwHPPFY+bwfr1kJYG+flH4g0bBr3iqqCHmzoSiIjUN3/4Q1BIipo9OxgqJ7rgQDB9wvLlycmtnFR0RERqi0gEHn0UmjYNJo9r3DgoNuefHxSeWLKykptjGXRNR0SkNilp8riS5vFp1y7ZGZZKRUdEpLaJNXnc4cOx23bqFDzn5h5dqKqJTq+JiNR2kQjcf3/xeOPGQQ+4RYvgpJPg7LOD50WLkp9jKNGTuM01s53hhG0FsVvN7FMzeyd8nBu17OdmlmVmm8xsdFR8TBjLMrObo+KdzezvZvahmS0JZxYVEal/pk0Lru80aRJc72nWDObNC5ZNmQL798OePcHzlCnVdh9Poo905gFjYsTvc/c+4ePPAGbWnWAq6h7hOg+ZWYqZpQAPAmOB7sCEsC3A3eG2ugJfAiVM1yciUg9MmwbbtgUjFHz8cXD9Jzs7OOKJ1qhREK8GCS067r4S+KKczTOAxe5+wN23AlnAwPCR5e5b3P0gwRTXGWZmwPeBJ8P15wPnVekHEBGpbSKRYLK4gus2qalw8ODRbfLygng1qK5rOteZ2Xvh6bc2YexEYFtUm5wwVlK8LbDb3Q8ViYuISIFIBDIzg9NtLVsGz5mZ1daZoDqKzmzgZKAPsAP43zBuMdp6BeIxmdlUM1trZmtza+iYRCIiCTFhQnC67a9/PXLarZokvcu0u39W8NrMfg/8KXybA3SMatoB2B6+jhX/HGhtZg3Do53o9rH2+wjwCATD4FTyY4iI1C5Fu1lXk6Qf6ZhZ+6i344GCnm3PAZeaWRMz6wx0BVYDa4CuYU+1xgSdDZ7zYNC45cCF4foTgWeT8RlERKRiEnqkY2aLgBHAcWaWA8wERphZH4JTYdnANAB3X29mS4ENwCHgWnfPD7dzHbAMSAHmuvv6cBc3AYvN7JfA20BmIj+PiIhUjkaZFhGRMmmUaRERqXVUdEREJGlUdEREJGlUdEREJGlUdEREJGlUdEREJGlUdEREJGlUdEREJGlUdEREJGlUdEREJGlUdEREJGlUdEREJGlUdEREJGlUdEREJGlUdEREJGkSWnTMbK6Z7TSzdTGW3WhmbmbHhe/NzB4wsywze8/M+kW1nWhmH4aPiVHx/mb2frjOA2Zmifw8IiJSOYk+0pkHjCkaNLOOwNnAJ1HhsQRTVHcFpgKzw7bHEsw4OggYCMw0szbhOrPDtgXrFduXiIjUHAktOu6+EvgixqL7gP8gmLK6QAbwqAfeBFqbWXtgNPCyu3/h7l8CLwNjwmUt3f0ND6Y/fRQ4L5GfR0REKifp13TM7EfAp+7+bpFFJwLbot7nhLHS4jkx4iIiUkM1TObOzOwY4BbgnFiLY8S8AvGS9j2V4FQcnTp1KjNXERGpesk+0jkZ6Ay8a2bZQAfgH2b2XYIjlY5RbTsA28uId4gRj8ndH3H3dHdPj0QiVfBRREQkXuUuOmb2SnlipXH39929nbununsqQeHo5+7/BJ4Drgx7sQ0G9rj7DmAZcI6ZtQk7EJwDLAuXfW1mg8Nea1cCz8aTj4iIJFeZp9fMrClwDHBc+Ee/4LRWS+CEMtZdBIwI180BZrp7ZgnN/wycC2QB+4CrANz9CzO7A1gTtrvd3Qs6J1xD0EOuGfCX8CEiIjWUBR2/Smlgdj1wA0GB+ZQjRecr4Pfu/ruEZpgA6enpvnbt2upOQ0Sk1jCzt9w9vbLbKfNIx93vB+43sx+7+6zK7lBEROqvcvdec/dZZtYT6A40jYo/mojERESk7il30TGzmQTXZ7oTXH8ZC6wiuClTRESkTPF0mb4QGAX8092vAnoDTRKSlYiI1EnxFJ397n4YOGRmLYGdQJfEpCUiInVRPCMSrDWz1sDvgbeAb4DVCclKRETqpHg6EswIX84xsxcJBtt8LzFpiYhIXRTX2Gtmdj4wjGCMs1WAio6IiJRbPMPgPARMB94H1gHTzOzBRCUmIiJ1TzxHOsOBnuHcNZjZfIICJCIiUi7x9F7bBETPCdARnV4TEZE4xHOk0xbYaGYFPdYGAG+Y2XMA7v6jqk5ORETqlniKzn8nLAsREakX4uky/bfSlpvZG+4+pPIpiYhIXVWVM4c2LbuJiIjUZ1VZdIpNzGNmc81sp5mti4rdYWbvmdk7ZvaSmZ0Qxs3MHjCzrHB5v6h1JprZh+FjYlS8v5m9H67zQDiDqIiI1FBVWXRimQeMKRK7x917uXsf4E8cuVY0FugaPqYCswHM7FhgJjAIGAjMDGcwJWwzNWq9ovsSEZEapCqLTrGjDHdfCXxRJPZV1NvmHDlCygAe9cCbQGszaw+MBl529y/c/UvgZWBMuKylu78R3jv0KHBeFX4eERGpYuXqSGBmKcAydz+rlGZXlHenZvYr4EpgDzAyDJ8IbItqlhPGSovnxIiLiEgNVa4jHXfPB/aZWatS2qwraVmMtre4e0dgAXBdGI51PcYrEI/JzKaa2VozW5ubm1veVEVEpArFc3rtW+B9M8sML9o/YGYPVHL/C4ELwtc5BKMcFOgAbC8j3iFGPCZ3f8Td0909PRKJVDJtERGpiHiKzgvAfwErCebTKXjExcy6Rr39EfBB+Po54MqwF9tgYI+77wCWAeeYWZuwA8E5BKf6dgBfm9ngsNfalcCz8eYjIiLJE8/NofPNrBnQyd03lWcdM1sEjACOM7Mcgl5o55rZqcBh4GOCkasB/gycC2QB+4Crwv1+YWZ3AGvCdre7e0HnhGsIesg1A/4SPkREpIaycNDoshua/RC4F2js7p3NrA9BAah1Y66lp6f72rVrqzsNEZFaw8zecvf0ym4nntNrtxLcJ7MbwN3fATpXNgEREak/4ik6h9x9T5FY+Q6TREREiG+U6XVmdhmQEnYG+AnwemLSEhGRuiieI50fAz2AAwRdnfcA1yciKRERqZviOdL5gbvfAtxSEDCzi4AnqjwrERGpk+I50vl5OWMiIiIxlXmkY2ZjCe6fObHICAQtgUOJSkxEROqe8pxe2w6sJRg9IHoEgq+Bf0tEUiIiUjeVWXTc/V3gXTNb6O55SchJRETqqHg6EvzDzGLdl2OAu3uvKspJRETqqHiKTsG4Zo+Fz5cTjJE2v0ozEhGROiueojPU3YdGvb/ZzF5z99urOikREamb4uky3dzMhhW8MbPTCaabFhERKZd4jnSmAHPD2UOdYESCqxKSlYiI1EnxzKfzFtDbzFoSTImwx8yuAt5OWHYiIlKnxHN6DQB3/ypqtOnbSmtrZnPNbKeZrYuK3WNmH5jZe2b2tJm1jlr2czPLMrNNZjY6Kj4mjGWZ2c1R8c5m9ncz+9DMlphZ43g/j4iIJE+ZRScsDrEe7wPHl7H6PGBMkdjLQM+wi/VmwqF0zKw7cCnBoKJjgIfMLMXMUoAHgbFAd2BC2BbgbuA+d+8KfElwClBERGqo8pxeOx4YTfBHPZpRxtQG7r7SzFKLxF6KevsmcGH4OgNY7O4HgK1mlkUwaRxAlrtvATCzxUCGmW0Evg9cFraZTzDR3OxyfCYREakG5Sk6fwK+E84UehQzW1HJ/U8GloSvTyQoQgVywhjAtiLxQUBbYLe7H4rRXkREaqDyDINT4ikrd7+spGVlMbNbCAYMXVAQirULYp8C9FLal7S/qcBUgE6dOsWVq4iIVI24OxJUBTObCIwDLnf3gkKRA3SMataBYLDRkuKfA63NrGGReEzu/oi7p7t7eiQSqZoPIiIicUl60TGzMcBNwI/cfV/UoueAS82siZl1BroCq4E1QNewp1pjgs4Gz4XFajlHrglNBJ5N1ucQEZH4JbTomNki4A3gVDPLMbMpwO+AFsDLZvaOmc0BcPf1wFJgA/AicK2754fXbK4DlgEbgaVhWwiK10/DTgdtgcxEfh4REakcO3J2q/5IT0/3tWvXVncaIiK1hpm95e7pld1OtVzTERGR+klFR0REkkZFR0REkkZFR0REkkZFR0REkkZFR0REkkZFR0REkkZFR0REkkZFR0REkkZFR0REkkZFR0QZD0ivAAAU2ElEQVREkkZFR0REkkZFR0REkkZFR0REkkZFJw65e3NZ8+kacvfmVncqIiK1kopOOS16fxEn/fYkRj06io73deThtx6u7pRERGqdRM8cOtfMdprZuqjYRWa23swOm1l6kfY/N7MsM9tkZqOj4mPCWJaZ3RwV72xmfzezD81sSTiddZXL3ZvLlOemsP/Qfr4++DUH8g8w/U/TeXitCo+ISDwSfaQzDxhTJLYOOB9YGR00s+7ApUCPcJ2HzCzFzFKAB4GxQHdgQtgW4G7gPnfvCnwJTEnEh8jenU3DBg2Lxa9/8XqdahMRiUNCi467rwS+KBLb6O6bYjTPABa7+wF33wpkAQPDR5a7b3H3g8BiIMPMDPg+8GS4/nzgvER8jtTWqRzMP1gs3jilMdm7s4HgaOilrJd4KeslFSIRkRLUpGs6JwLbot7nhLGS4m2B3e5+qEg8JjObamZrzWxtbm58RSHSPML9Y+8vFj90+BAH8w8y/fnptL+3PaMXjGb0gtG0/9/2LFq3KK59iIjUB8XPGVUfixFzYhdGL6V9TO7+CPAIQHp6eontSjKt/zTw4JRa45TGHDp8iDM6ncGwPw4r1jbf87nsqcs4q/NZRJpH4t2ViEidVZOKTg7QMep9B2B7+DpW/HOgtZk1DI92otsnxLT0aZzf7Xyyd2dzMP9gzIIT7fF3H+ffTv+3RKYkIlKr1KSi8xyw0Mx+A5wAdAVWExzRdDWzzsCnBJ0NLnN3N7PlwIUE13kmAs8mOslI8wiR5hHmvzO/zLbLPlrGmK5j2LYnODvYsVVHvjn4DamtU3UEJCL1UkKLjpktAkYAx5lZDjCToGPBLCACvGBm77j7aHdfb2ZLgQ3AIeBad88Pt3MdsAxIAea6+/pwFzcBi83sl8DbQGYiP0+0gScOLLPNX7f8le4PdT8q1pCGNGrYiMyMTCb0nJCo9EREaiRzj/vyRq2Xnp7ua9eurfR2fvyXH/O71b+r0LrNGjbj4xs+1hGPiNQKZvaWu6eX3bJ0Nen0Wq0za+wsZqTPYPWnq/nesd9jdc5qnv/weZZnLy9z3YOHDpK9O1tFR0TqFRWdSuoW6Ua3SDcAhnYaSo92PcpVdPLJ5zuNv0Pu3lze3vE2AH3b91UREpE6TUWnivVt35cUUsgnv9R2hnFG5hnsOrDrqPjM4TO5dcStCcxQRKT61KSbQ+uESPMID457sMx2jhcrOAC3/e02Rs4bmYjURESqnYpOAkzrP405P5iDxbx/tWwrPl7Ba5+8VsVZiYhUP51eS5CCG0mXb13O6zmv89k3n7Fn/x7+suUv5Vr/6Y1PM7TT0ARnKSKSXOoynUSz/j6Ln7z4k3K1bUxjDnKQSLMIl6ddztT0qYUdFkREkq2qukzr9FoSndXlrHK3PUgwqnXu/lx+u/q3dH+oOxcuuTBRqYmIJIWKThJ1i3TjuoHXVXj9pz54iqGZOuUmIrWXik6SzRo7iw0zNjCx18QKrf96zuvqZCAitZau6VSj3L25zFkzh+XZy2nVpBXPbH6mXOtFjongh53mjZrTPdKd87ufT8ZpGbqxVEQSpqqu6ajo1BAbczcWGxw0Hg2sAY+f/7gGERWRhFBHgjqmstd7DvthrnrmKk2VLSI1mopODVJwvadhBW+fyjucR/bu7KpNSkSkCqno1DDdIt3Im5nH8xOe5+zOZ3PmSWcy4LsDyrXuYT/Ml/u/ZPaa2WQsymDBewsSnK2ISHwSek3HzOYC44Cd7t4zjB0LLAFSgWzgYnf/0swMuB84F9gHTHL3f4TrTAT+M9zsL919fhjvD8wDmgF/Bq73cnygmnhNpzS3vHILd666s0LrRppF2PkfO6s4IxGpb2rLNZ15wJgisZuBV9y9K/BK+B5gLMEU1V2BqcBsKCxSM4FBwEBgppm1CdeZHbYtWK/ovuqEf+n1LxVeN3d/Lj0f7FmF2YiIVFxCi467rySYnjpaBjA/fD0fOC8q/qgH3gRam1l7YDTwsrt/4e5fAi8DY8JlLd39jfDo5tGobdUple1ksP7z9bq3R0RqhOq4pnO8u+8ACJ/bhfETgW1R7XLCWGnxnBjxOqmgk8FxzY6r0PoF02rn7s1lzadr1MtNRKpFTRplOtY8AF6BeOyNm00lOBVHp06dKpJftesW6Ubuf+SyMXcjqz9dTbOGzZjw1AQOc7jMdZeuX8ri9YsL3xvG7HGzmdZ/WiJTFhE5SnUUnc/MrL277whPkRVc5c4BOka16wBsD+MjisRXhPEOMdrH5O6PAI9A0JGgch+hehVMkZ27N5cUS+Gwl110ihYmx5n+p+ngwTQMIiLJUB2n154DCgYemwg8GxW/0gKDgT3h6bdlwDlm1ibsQHAOsCxc9rWZDQ57vl0Zta16IdI8wvzz55fdsBTTX5iuU20ikjQJLTpmtgh4AzjVzHLMbApwF3C2mX0InB2+h6DL8xYgC/g9MAPA3b8A7gDWhI/bwxjANcAfwnU+Aso3Q1odMqHnBDbM2FCpbSzfulzXekQkKTT2Wh2xaN0irnr6KvI9n3zP5wddf8C7/3yXbV9vK3Pdjt/pyLZvttGABqQ0SOHfh/w7Px3yUw0gKiKFNOBnJdTFogNBz7Ts3dmktk4l0jzChCcnHNV5IB6NGjRi/vj5GkBURIDac3OoJFGkeYQBJw4oPEKpzL09eYfzmPLsFJ1uE5EqpaJThw3tNJRzupxT4fXz8/M1gKiIVCkVnTpu2RXLWHXVKoZ1HEbzhs1pSEOapzQv17oH/SAH8w9y56t3cufKO9mYuzHB2YpIXadrOvXQmk/XMPAPAyu07uguo3ns/MfUyUCkntE1Hamw1NapNKjgt37ZlmUcf+/xLFq3qIqzEpH6QEWnHoo0j/D4BY9XeH3HueppzVIqIvFT0amnJvScwM4bd9LhOx3KbhyLoU4GIhK3mjTgpyRZpHmEbf++jdc+eY2XPnqJU9qewhf7v+D5zc/z8paXS103Pz+fz/Z+xvhF48ndn8s16ddwea/Lk5S5iNRW6kggxbz2yWsM++OwUtuktkole0/2UbH2zduz/cYSx1wVkVpMHQkkYcpzf0/RggOwY+8Orv3TtQnKSkTqAhUdiang/p5GNCq2LP34kv/Zeeith9TBQERKpKIjJRraaSgHZx7k+QnPc3na5fzm7N+w88adNEgp/cfm7R1vJylDEalt1JFAyjTulHGMO2Xckfddx7F6++pS19mYu5GnNz4NBuNPG0+3SLdEpykitYA6Ekjccvfm0u7edjGXNbSGXNn7Sua+M/eo+OQ+k8nMyExGeiKSALW+I4GZXW9m68xsvZndEMaONbOXzezD8LlNGDcze8DMsszsPTPrF7WdiWH7D81sYkn7k6oTaR5h4QULi8Ub0ID/GfU/xQoOwNx35nLv6/cmIz0RqcGqpeiYWU/gamAg0BsYZ2ZdgZuBV9y9K/BK+B5gLNA1fEwFZofbORaYCQwKtzWzoFBJYhXcXLrkgiX8auSvWHLBEv554z85mH+wxHV+8covyN2bq1lKReqx6rqm0w140933AZjZ34DxQAYwImwzH1gB3BTGH/XgXOCbZtbazNqHbV8umL7azF4GxgAaGCwJIs0jXNzz4qODVnL7ximNeXjtw9y56k4apzTmYP5BMjMyNVGcSD1SXafX1gFnmllbMzsGOBfoCBzv7jsAwueCCwcnAtHzLueEsZLiUk3Gnza+xGX5h/O5c9Wd7D+0nz0H9rD/0H5NFCdSz1RL0XH3jcDdwMvAi8C7wKFSVon1/7OXEi++AbOpZrbWzNbm5uqPXKJ0i3QrNmNpAxrQrGEzbjnzFhqnND5qWaOURhrDTaQeqbYu0+6eCWQCmNmdBEcpn5lZe3ffEZ4+2xk2zyE4EirQAdgexkcUia8oYX+PAI9A0Hutyj6IFDNr7CxmpM9g9aer+d6x36NxSmNSW6cCcOerdx7VNi8/r3CZiNR91VZ0zKydu+80s07A+cAQoDMwEbgrfH42bP4ccJ2ZLSboNLAnLEzLgDujOg+cA/w8mZ9DYusW6Rbz3pzMjEymPDuFRimNyMvPIzMjUxPCidQj1Xlz6FNm1hbIA6519y/N7C5gqZlNAT4BLgrb/pnguk8WsA+4CsDdvzCzO4A1YbvbCzoVSM00oecEzup8Ftm7s0ltnaqCI1LP6OZQEREpU62/OVREROofFR0REUkaFR0REUkaFR0REUkaFR0REUkaFR0REUmaetll2sxygY8TuIvjgM8TuP2KUl7xq6m5Ka/4KK/4Fc3tJHev9I119bLoJJqZra2K/uxVTXnFr6bmprzio7zil6jcdHpNRESSRkVHRESSRkUnMR6p7gRKoLziV1NzU17xUV7xS0huuqYjIiJJoyMdERFJGhWdcjKz1mb2pJl9YGYbzWyImR1rZi+b2Yfhc5uwrZnZA2aWZWbvmVm/qO1MDNt/aGYTK5nTqWb2TtTjKzO7obrzitrmv5nZejNbZ2aLzKypmXU2s7+H+1liZo3Dtk3C91nh8tSo7fw8jG8ys9FVkNf1YU7rzeyGMJb0r5mZzTWznWa2LipWZXmYWX8zez9c5wEzizXTbnnzuij8eh02s/Qi7WN+f8xsTBjLMrObo+IxfwYqkds9FvxevmdmT5tZ62TnVkJed4Q5vWNmL5nZCWG8Wr+XUctuNDM3s+OSmpe761GOBzAf+NfwdWOgNfBr4OYwdjNwd/j6XOAvBNNpDwb+HsaPBbaEz23C122qKL8U4J/ASTUhL+BEYCvQLHy/FJgUPl8axuYA14SvZwBzwteXAkvC190JpjNvQjDJ30dASiXy6gmsA44hmE/qr0DX6viaAWcC/YB1UbEqywNYTTA5ooXrjq1EXt2AUwlm5k2Pisf8/oSPj4AuBL8v7wLdo34Wiv0MVCK3c4CG4eu7o75mScuthLxaRr3+CUd+vqv1exnGOwLLCO5XPC6ZeelIpxzMrCXBNy8TwN0PuvtuIIOgGBE+nxe+zgAe9cCbQGsLpt8eDbzs7l+4+5fAy8CYKkpzFPCRu39cg/JqCDQzs4YEf+R3AN8Hniwht4KcnwRGhf81ZQCL3f2Au28lmMhvYCVy6ga86e773P0Q8DdgPNXwNXP3lUDRSQerJI9wWUt3f8ODvw6PRm0r7rzcfaO7b4rRvKTvz0Agy923uPtBYDGQEX5PS/oZqGhuL4XfS4A3CaatT2puJeT1VdTb5kDBBfRq/V6G7gP+IyqnpOWlolM+XYBc4I9m9raZ/cHMmgPHu/sOgPC5Xdj+RGBb1Po5YaykeFW4FFgUvq72vNz9U+BeghlgdwB7gLeA3VF/IKL3U5hDuHwP0DYBua0DzjSztmZ2DMF/dx2pAV+zUFXlcWL4uqrzKyrevNpS8s9AVZhM8B93jcjNzH5lZtuAy4H/rmBeVfq9NLMfAZ+6+7tFFiUlLxWd8mlIcIg62937AnsJTn2UJNZ5TS8lXinheecfAU+U1TRZeVlwLSKD4LTGCQT/6Y0tZT9Jyc3dNxKcgnkZeJHg1MqhUlZJ6veyCvNIVn41Ji8zu4Xge7mgpuTm7re4e8cwp+uqO6/wH61bOFIAj1qcjLxUdMonB8hx97+H758kKEKfhYeYhM87o9p3jFq/A7C9lHhljQX+4e6fhe9rQl5nAVvdPdfd84D/A04nOGRvGGM/hTmEy1sRnBao8tzcPdPd+7n7meE+PqRmfM2owjxyOHKaqSrzKyrevD6n5J+BCgsvbo8DLg9P9dSY3EILgQsqmFdVfi9PJvhH8F0zyw639Q8z+27S8irPxSg9HOBV4NTw9a3APeEj+qLvr8PXP+DoC3Kr/cgFua0EF+PahK+PrYLcFgNXRb2v9ryAQcB6gms5RnB+/McER2PRF2pnhK+v5eiOBEvD1z04+mLwFirRkSDcZrvwuRPwQfiZq+VrBqRy9MXnKssDWBO2LbjIe25F84qKr+DojgQxvz8EZwe2hLGCi/U9wnVi/gxU4ms2BtgARIq0S2puMfLqGvX6x8CTNel7GS7L5khHgqTkVak/dvXpAfQB1gLvAc+EX/y2wCsE/ym/EvWNMOBBgh4y7xf5JZ1McEEzi6hCUYm8jgF2Aa2iYtWeV7jN2wj+qK8DHgt/+bsQ9HjJCn/Bm4Rtm4bvs8LlXaK2c0uY8ybK2WunjLxeJfgj9S4wqrq+ZgTX4HYAeQT/NU6pyjyA9PBr/xHwO8KbwSuY1/jw9QHgM2BZWd8fgutlm8Nlt0TFY/4MVCK3LIJrDu+EjznJzq2EvJ4Kv/7vAc8DJ9aE72WR5dkcKTpJyUsjEoiISNLomo6IiCSNio6IiCSNio6IiCSNio6IiCSNio6IiCSNio6IiCSNio5InEobLj5G2xFmdnoy8iph/7+orn2LxKKiIxK/eZR/ROkRBMP/lFvUMCxVQUVHapSq/OEWqRfcfaVFTTIHYGYrCO6GHwi0JLiDeycwHcg3s38hGArlA4LhVTqFq97g7q+Z2a0EA6OmEowBdlnR/ZrZJIKRAQqGdVno7reFy54hGB+rKXC/uz9iZncRTC3xDrDe3S+vki+ASCWo6IhUnebufrqZnQnMdfeeZjYH+Mbd7wUws4XAfe6+ysw6EUyk1S1cvz8wzN33l7KPgQQT0e0D1pjZC+6+Fpjs7l+YWbMw/pS732xm17l7nwR9XpG4qeiIVJ1FUHgk1NKipk2OchbQPWpW35Zm1iJ8/VwZBQeCybR2AZjZ/wHDCMYE/ImZjQ/bdCSYDXVXxT+KSGKo6IhUnaIDGcYa2LABMKRocQmL0N6K7MPMRhAUsyHuvi881de0PAmLJJs6EohUnUsAzGwYsMfd9wBfAy2i2rzEkcm8MLN4T32dbWbHhqfRzgNeI5h76Muw4JxGMNR8gTwzaxT/RxFJDBUdkTiZ2SLgDeBUM8sxsynhoi/N7HWCjgIFseeB8Wb2jpmdAfwESDez98xsA0FHg3isIpgm4h3gqfB6zotAQzN7D7gDeDOq/SPAe2a2oNiWRKqBpjYQqQLhKa0bwyKQqH1MIpjj5Lqy2orUVDrSERGRpNGRjkgNY2ajgbuLhLe6+/hY7UVqExUdERFJGp1eExGRpFHRERGRpFHRERGRpFHRERGRpFHRERGRpPn/1valhLou8LcAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ax1 = df_P4.plot.scatter(x='1pter_mat', y='1qter_mat', color ='r', label ='1 maternal homolog')#, c='division'\n",
"ax2 = df_P4.plot.scatter(x='1pter_pat', y='1qter_pat', color='g', label ='1 paternal homolog', ax = ax1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"### The lenght of two telomeres belonging to different chromosomes are not correlated"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/jeanpat/anaconda3/envs/DeepFish/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n",
" warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n"
]
},
{
"data": {
"text/plain": [
"<seaborn.axisgrid.JointGrid at 0x7f368c9d1ac8>"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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uOuuu0a08d5778Xll1+OhQsXYtq0aVi5cmVRrtvobI8cOQKlFN566y1MmDABAPD+979/aL8jR45wzi1kuEyARMaazXuQyQ4M25bJDmDN5j1obkyVqFXRsmfPHtx9991oamrC3/3d3+E//uM/8PWvfx1f/epX8dhjj2H8+PFob2/HzTffjHvuuQeLFy/GP/zDPwAAbrnlFtx999346le/CgD4/e9/j//+7/9GbW0tLrvsMtxxxx1oamrCO++8g+OPPx6PPvoourq60N3djb/85S8499xzccEFFwAAOjs70dPTgwkTJqCpqQlbt27F+eefDyC3tuqZZ54Z0fa1a9dizZo1I7affvrpePjhhx2vO51OY9KkSUO/T5w4Eel0GqeccsqwfSZOnDhiHwD405/+NLTvKaecgj//+c9D9yCbzeLjH/843n77bXz961/H1VdfjZdffhnjx4/HF77wBXR3d+Occ87B97//fYwZMwb/+I//aNvO3/zmN9i1axfq6upw7rnn4tJLL8WcOXOG7bNkyRLs2bNnxGdvuOEGXH311Z6vO5FI4M4770RDQwPGjBmDM844A3fcccfQ32+++Wbcf//9OOGEE/D000/btp14hxYciYzXezOW29O9GTS1bcHU1k1oatsSK4tu0qRJaGpqAgB87nOfwzPPPIM9e/Zg165duOiiizB79mysWrUK+/fvBwDs2rULH/3oR9HQ0IC1a9eip6dn6Fif/vSnUVtbCwBoamrCDTfcgB/84Afo7e3FqFGj8Mwzz+Czn/0samtrcfLJJ+NjH/sYfvvb3wIAzjvvPEycOBE1NTWYPXs2Xn311aHjLlmyxLLtS5cuRVdX14gfN3EDMGQhmim0RnT2KaS/vx/PPfccNm3ahM2bN+Pb3/42fv/736O/vx/PP/88vvzlL6OzsxNjxoxBW1ubazsvuuginHjiiUgmk1i8eLGl0Le3t1veh0Jx072mbDaLO++8E52dnXj99dcxa9YsrF69eujv3/nOd7Bv3z4sXboUt99+u+s1eOXgkaOhH7NSoMCRyJhQn7TcLkBs3ZaFnZuIQCmFmTNnDnWUO3fuxJNPPgkg54q8/fbbsXPnTixfvnzYmqcxY8YM/b+1tRU//vGPkclkMG/ePOzevduyczU47rjjhv5fW1uL/v5+y+OaWbt27ZAb1PxzxRVXjNj3jjvuGPr7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\n",
"text/plain": [
"<Figure size 432x432 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sb.jointplot('1pter_mat', '1qter_pat', data=df_P4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# How does the mean telomere lenght evolve after 6, 7, 8, 9, 10 divisions?\n",
"In telomerase negative cells as modelised here, the telomere lenght decreases:\n",
"\n",
" * The mean telomere length of each telomere is calculated, then the mean values of these mean values yield the mean telomere length of a cell.\n",
" * The standard deviation of the telomere length is also calculated,this is the mean value of the standard deviation of each telomere.\n",
" \n",
"The decrease of telomere length depends on the 5' exonuclease activity .The amount of degraded DNA is modelised here by a binomial law to fit the data of Makarov et al. (1997). As published in 1992, the standard deviation of the telomere length increase at each cell division.\n",
"\n",
"So the mean telomere length, $mean +- std$, was ploted as a function of the cell divisions after an expansion of six cellular divisions and four passages."
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [],
"source": [
"m0 = df_P0.iloc[:,1:]"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [],
"source": [
"m0 = df_P0.iloc[:,1:].mean().mean()\n",
"s0 = df_P0.iloc[:,1:].std().mean()\n",
"\n",
"m1 = df_P1.iloc[:,1:].mean().mean()\n",
"s1 = df_P1.iloc[:,1:].std().mean()\n",
"\n",
"m2 = df_P2.iloc[:,1:].mean().mean()\n",
"s2 = df_P2.iloc[:,1:].std().mean()\n",
"\n",
"m3 = df_P3.iloc[:,1:].mean().mean()\n",
"s3 = df_P3.iloc[:,1:].std().mean()\n",
"\n",
"m4 = df_P4.iloc[:,1:].mean().mean()\n",
"s4 = df_P4.iloc[:,1:].std().mean()\n",
"\n",
"mean_telo = [m0, m1, m2, m3, m4]\n",
"std_telo = [s0, s1, s2, s3, s4]"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6 divisions, telomere length: 11714.0 +/- 286.0\n",
"7 divisions, telomere length: 11624.0 +/- 300.0\n",
"8 divisions, telomere length: 11534.0 +/- 311.0\n",
"9 divisions, telomere length: 11445.0 +/- 327.0\n",
"10 divisions, telomere length: 11355.0 +/- 337.0\n",
"\n",
"The telomere erosion is constant over these early passages:\n",
"6 -> 7 -90.0 bp\n",
"7 -> 8 -90.0 bp\n"
]
}
],
"source": [
"print('6 divisions, telomere length:',round(m0,0),'+/-',round(s0))\n",
"print( '7 divisions, telomere length:',round(m1),'+/-',round(s1))\n",
"print( '8 divisions, telomere length:',round(m2),'+/-',round(s2))\n",
"print( '9 divisions, telomere length:',round(m3),'+/-',round(s3))\n",
"print( '10 divisions, telomere length:',round(m4),'+/-',round(s4))\n",
"print()\n",
"print( 'The telomere erosion is constant over these early passages:')\n",
"print( '6 -> 7',round(m1-m0),' bp')\n",
"print('7 -> 8', round(m2-m1), ' bp')"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f368c5dc198>]"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter([18,19,20,21,22], mean_telo,c='red')\n",
"plt.plot([18,19,20,21,22], np.asarray(mean_telo) + np.asarray(std_telo))\n",
"plt.plot([18,19,20,21,22], np.asarray(mean_telo) - np.asarray(std_telo))"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5,1,'Standard deviation of the telomere length')"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter([18,19,20,21,22], np.asarray(std_telo))\n",
"plt.title('Standard deviation of the telomere length')"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# Detection of telomere length difference between homologs"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f368c749940>"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAD9CAYAAABX0LttAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAG5lJREFUeJzt3X2UXVWZ5/HvL4kRg2IgVSpdBROwgi04jKPVgD2aSWOTF5ZD0PEF17gsnDhBRpJGFiM6MuJgYMk4M2jRNr3SkqHoZQdpopJuEzBtQ2e6m5dUTIiAmipDhOJFKgkJkAwkMc/8cXbBTc6tqtS9t+rcqvv7rFWrzt5nn3Oes+vWfe4+L/coIjAzMys1qegAzMys/jg5mJlZjpODmZnlODmYmVmOk4OZmeU4OZiZWY6Tg5mZ5Tg5mJlZjpODmZnlTCk6gEo1NTXFzJkziw7DzGxc2bhx446IaB6u3bhNDjNnzqS7u7voMMzMxhVJvzmadj6sZGZmOU4OZmaW4+RgZmY5Tg5mZpbj5GDWgLZu3cqCBQvo7e0tOhSrU04OZg3oiiuuYO/evXzhC18oOhSrU04OZg1m69atvPDCCwDs2bPHowcry8nBrMFcccUVh5U9erBynBzMGszAqGHAnj17CorE6pmTg5mZ5Yzbr88wa1SdnZ01P0+wdOnSipZra2ureFmrbx45mDWY5ubmIctm4JGD2bhTi0/qs2fPfnV61apVVa/PJh6PHMwa0MBooaOjo+BIrF555GDWgFpaWmhpaWHRokVFh2J1yiMHMzPLcXIwM7McJwczM8txcjAzsxwnBzMzy/HVSmZjaDTubq5ET08PUJt7JqrhO6zrl5OD2Rjq7e1l06ObYHrBgRzKfm16alNxMewubtM2PCcHs7E2HQ7NOVR0FIWbdJ+PatczJwezMdTX1wd7/MYIwG7oi76io7BBDPsKlbRC0nOSHjmifomkX0l6VNL/KKn/sqTeNG9eSf38VNcr6Usl9adIelBSj6TvS5paq50zM7PKHM3I4VbgT4HbBiok/RGwEDgzIl6R9JZUfzpwEXAG8HvA30k6LS32HeA8oA/YIGl1RDwG3ADcGBG3S/pzYBFwcy12zqzetLa20q9+H1YiGz21trQWHYYNYtiRQ0SsB3YdUX0p8I2IeCW1eS7VLwRuj4hXIuJxoBc4K/30RsS2iNgP3A4slCTgXODOtHwXcGGV+2RmZlWq9JzDacAHJF0HvAxcGREbgBbggZJ2fakO4Mkj6s8GZgC7I+JgmfZmE9PuOjjn8FL6/cYCY9iN/9vrWKXJYQpwPHAO8AfAHZJOBVSmbVB+hBJDtC9L0mJgMcDJJ588wpDNitfW1lZ0CMBr9znMaplVXBAt9dMflldpcugDfhARATwk6RDQlOpPKmnXCjydpsvV7wCmS5qSRg+l7XMiYjmwHKC9vX3QJGJWr+rlhq+BODo7OwuOxOpVpWPbH5GdKyCdcJ5K9ka/GrhI0uslnQLMAh4CNgCz0pVJU8lOWq9OyeVe4KNpvR3AXZXujJmZ1cawIwdJK4E5QJOkPuAaYAWwIl3euh/oSG/0j0q6A3gMOAh8PiJ+l9ZzGXAPMBlYERGPpk1cBdwuaRmwCbilhvtnZmYVGDY5RMQnB5n1qUHaXwdcV6Z+DbCmTP02squZzMysTvg2TTMzy3FyMDOzHCcHswZ04MABenp62LlzZ9GhWJ1ycjBrQNu3b2fv3r1cf/31RYdidcrfymo2zlT7wKADBw6wd+9eADZs2MCll17K6173uorW5Yf1TFweOZg1mO3btw9ZNgNQdnvC+NPe3h7d3d1Fh2E27syePTtXt379+gIisSJI2hgR7cO188jBzMxynBzMzCzHycGswTQ1NR1Wbm5uLigSq2dODmYNZuBKpQEvvfTSIC2tkTk5mDWYuXPnHlaeN2/eIC2tkTk5mDWYjo4Opk6dCsDUqVPp6OgoOCKrR04OZg2mqamJBQsWIInzzz+fGTNmFB2S1SHfIW3WgDo6Oti+fbtHDTYoJwezBtTU1MRNN91UdBhWx3xYyczMcpwczMwsx8nBzMxynBzMzCzHycHMzHKcHMzMLMfJwczMcpwczMwsx8nBzMxynBzMzCxn2OQgaYWk5yQ9UmbelZJCUlMqS1KnpF5JWyS9p6Rth6Se9NNRUv9eST9Py3RKUq12zszMKnM0I4dbgflHVko6CTgPeKKkegEwK/0sBm5ObU8ArgHOBs4CrpF0fFrm5tR2YLnctszMbGwNmxwiYj2wq8ysG4EvAlFStxC4LTIPANMlnQjMA9ZFxK6IeB5YB8xP846LiPsjIoDbgAur2yUzM6tWReccJF0APBURDx8xqwV4sqTcl+qGqu8rU29mZgUacXKQNA34CvDVcrPL1EUF9YNte7Gkbknd/f39RxNuoXbs2MGSJUvYuXNn0aGYmY1IJSOHtwOnAA9L2g60Aj+T9DayT/4nlbRtBZ4epr61TH1ZEbE8Itojor25ubmC0MdWV1cXW7Zsoaurq+hQzMxGZMTJISJ+HhFviYiZETGT7A3+PRHxLLAa+HS6aukcYE9EPAPcA8yVdHw6ET0XuCfNe1HSOekqpU8Dd9Vo3wq1Y8cO1q5dS0Swdu1ajx7MbFw5mktZVwL3A++Q1Cdp0RDN1wDbgF7gL4D/DBARu4CvAxvSz7WpDuBS4LtpmV8DayvblfrS1dXFwYMHAThw4IBHD2Y2rii7SGj8aW9vj+7u7qLDGNT8+fPZt2/fq+Vp06Zx9913FxiRmRlI2hgR7cO18x3So+Sd73znYeUzzjijoEjMzEbOyWGUbNq06bDyxo0bC4rEzGzknBxGyaFDh4Ysm5nVMycHMzPLmVJ0APWqs7OT3t7eipefMmXKq1crDZSXLl064vW0tbVVtJyZWTU8chglp5566pBlM7N65pHDIGrxaf3cc8/l4MGDNDc3893vfrcGUZmZjQ2PHEbRqaeeyqRJk7jhhhuKDsXMbEScHEbRtGnTOPPMM2lrays6FDOzEXFyMDOzHCcHMzPLcXIwM7McJwczM8txcjAzs5wJeZ9DtXc310pPTw9Qm3smquG7rM1spCZkcujt7WXTzx/j0LQTCo1D+7NnZWz89bOFxTBp367hG5mZHWFCJgeAQ9NO4OXTP1R0GIU75rG/LToEMxuHJmRy6OvrY9K+PX5jBCbt20lf38HhG5qZlfAJaTMzy5mQI4fW1lZ++8oUH1YiO6zU2vq2osMws3HGIwczM8uZkCMHyK7SKfqcg15+AYA45rjCYsiuVvLIwcxGZkImh3r5FtSenhcBmPX2It+c31Y3/WFm48eETA71csPXQBydnZ0FR2JmNjI+52BmZjlODmZmljNscpC0QtJzkh4pqfumpF9K2iLph5Kml8z7sqReSb+SNK+kfn6q65X0pZL6UyQ9KKlH0vclTa3lDpqZ2cgdzcjhVmD+EXXrgHdFxJnAVuDLAJJOBy4CzkjL/JmkyZImA98BFgCnA59MbQFuAG6MiFnA88CiqvbIzMyqNmxyiIj1wK4j6n4SEQPfyfAA0JqmFwK3R8QrEfE40AuclX56I2JbROwHbgcWShJwLnBnWr4LuLDKfTIzsyrV4pzDfwTWpukW4MmSeX2pbrD6GcDukkQzUD8hvPDCC2zevJmNGzcWHYqZ2YhUlRwkfQU4CHxvoKpMs6igfrDtLZbULam7v79/pOGOuW3btgHwxS9+seBIzMxGpuL7HCR1AB8CPhgRA2/ofcBJJc1agafTdLn6HcB0SVPS6KG0fU5ELAeWA7S3tw+aRGqh2gcGvfDCC69OHzhwgIsvvpjjjhv5ndJ+UI+ZFaGikYOk+cBVwAURsa9k1mrgIkmvl3QKMAt4CNgAzEpXJk0lO2m9OiWVe4GPpuU7gLsq25X6MjBqGKxsZlbP9NqH/kEaSCuBOUAT8FvgGrKrk14P7EzNHoiIz6X2XyE7D3EQuDwi1qb684FvAZOBFRFxXao/lewE9QnAJuBTEfHKcIG3t7dHd3f3SPZ1TM2ePTtXt379+gIiMTN7jaSNEdE+XLthDytFxCfLVN8yRPvrgOvK1K8B1pSp30Z2NZOZmdUJ3yFtZmY5Tg6j5CMf+chh5Y9//OMFRWJmNnJODqPk8ssvP6x82WWXFRSJmdnIOTmMooHRg0cNZjbeDHu1Ur2q96uVzMzq0dFereSRg5mZ5Tg5mJlZjpODmVmVtm7dyoIFC6r6yp164+RgZlalZcuWsXfvXq699tqiQ6kZJwczsyps3bqV7du3A7B9+/YJM3pwcjAzq8KyZcsOK0+U0YOTg5lZFQZGDYOVxysnBzOzKmRPOx68PF45OZiZVeHIG4nH643FR3JyMDOznIofE2pmNhFU+0jgcip5tG+9PRLYIwczsyo0NzcPWR6vPHIws4ZWi0/rpY8FXrVqVdXrqwceOZiZVWlgtNDR0VFwJLXjkYOZWZVaWlpoaWlh0aJFRYdSMx45mJlZjpODmZnlODmYmVmOk4OZmeX4hLSZjVujcQNbJXp6eoDaXBZbjVreSOfkYGbjVm9vL7/cvJm3FRzHwCGY3Zs3FxbDszVe37DJQdIK4EPAcxHxrlR3AvB9YCawHfh4RDyv7OsIvw2cD+wDLo6In6VlOoCr02qXRURXqn8vcCvwBmAN8CcxUb65ysxG3duARUyMb0Ktxi3U9m3zaM453ArMP6LuS8BPI2IW8NNUBlgAzEo/i4Gb4dVkcg1wNnAWcI2k49MyN6e2A8sduS0zMxtjw44cImK9pJlHVC8E5qTpLuA+4KpUf1v65P+ApOmSTkxt10XELgBJ64D5ku4DjouI+1P9bcCFwNpqdsrMGkNfXx8vUvtPzePRM8BLfX01W1+lVyu9NSKeAUi/35LqW4AnS9r1pbqh6vvK1JclabGkbknd/f39FYZuZmbDqfUJ6XIH/qKC+rIiYjmwHKC9vd0fFcwaXGtrK7t37PA5B7LR0/TW1pqtr9KRw2/T4SLS7+dSfR9wUkm7VuDpYepby9SbmVmBKh05rAY6gG+k33eV1F8m6Xayk897IuIZSfcA15echJ4LfDkidkl6UdI5wIPAp4GbKozJzBrQsxR/zmFn+j2jwBieBabXcH1HcynrSrITyk2S+siuOvoGcIekRcATwMdS8zVkl7H2kl3K+hmAlAS+DmxI7a4dODkNXMprl7KuxSejzewotbW1FR0CAP3pJrjps2YVFsN0atsfGq+3FLS3t0d3d3fRYZiZvXpXcmdnZ8GRDE/SxohoH66dv1vJzMxynBzMzCzHycHMzHKcHMzMLMfJwczMcpwczMyqtG/fPrZs2VIXz5aoFScHM7Mqbdu2jUOHDnHVVVcVHUrN+GE/ZtbQqn2a3L59+zh48CAA/f39fPazn2XatGkjXk8tn+JWCx45mJlVYdu2bUOWxyvfIW1mVoXZs2fn6tavX19AJEfHd0ibmVnFnBzMzCzHycHMrAqTJk0asjxeTYy9MDMryHnnnXdYee7cuQVFUltODmZmVbjkkkuQsseUSuKSSy4pOKLacHIwM6tCU1PTq6OFefPmMWNGkc+Dqx3fBGdmVqVLLrmEZ599dsKMGsDJwcysak1NTdx0001Fh1FTPqxkZmY5Tg5mZpbj5GBmZjlODmZmluPkYGZmOU4OZmaW4+RgZmY5VSUHSV+Q9KikRyStlHSMpFMkPSipR9L3JU1NbV+fyr1p/syS9Xw51f9K0rzqdsnMzKpVcXKQ1AIsBdoj4l3AZOAi4AbgxoiYBTwPLEqLLAKej4g24MbUDkmnp+XOAOYDfyZpcqVxmZlZ9ao9rDQFeIOkKcA04BngXODONL8LuDBNL0xl0vwPKvu2qoXA7RHxSkQ8DvQCZ1UZl00wO3bsYMmSJezcubPoUMwaQsXJISKeAv4n8ARZUtgDbAR2R8TB1KwPaEnTLcCTadmDqf2M0voyy5gB0NXVxZYtW+jq6hq+sZlVrZrDSseTfeo/Bfg94FhgQZmmAw+p1iDzBqsvt83Fkroldff39488aBuXduzYwZo1a4gIfvzjH3v0YDYGqjms9MfA4xHRHxEHgB8AfwhMT4eZAFqBp9N0H3ASQJr/ZmBXaX2ZZQ4TEcsjoj0i2pubm6sI3caTrq4uDhw4AMCBAwc8ejAbA9UkhyeAcyRNS+cOPgg8BtwLfDS16QDuStOrU5k0/+8jIlL9RelqplOAWcBDVcRlE8w999xzWPnuu+8uKBKzxlHxV3ZHxIOS7gR+BhwENgHLgR8Dt0talupuSYvcAvylpF6yEcNFaT2PSrqDLLEcBD4fEb+rNC6beA4dOjRk2cxqr6rnOUTENcA1R1Rvo8zVRhHxMvCxQdZzHXBdNbHYxLV///4hy2ZWe75D2szMcvwkOBsTnZ2d9Pb21mx9S5curWi5tra2ipc1ayQeOVjda2lpGbJsZrXnkYONiWo/rc+ePfvV6ZUrV1YbjpkNwyMHGxcGRgtXXnllwZGYNQaPHGxcaG5uprm5mQsuuKDoUMwagkcOZmaW4+RgZmY5Tg5mZpbj5GBmZjlODmZmluOrlWxYtb67uRI9PT1A9fdL1ILvsrZG4ORgw+rt7WXrIz/j5DcW92W5Uw9kg9yXt28oLAaAJ17y482tMTg52FE5+Y2/4+r2l4oOo3DLut9YdAhmY8LnHMzMLMcjBxtWX18fe1+c7E/NwG9enMyxfX1Fh2E26jxyMDOzHI8cbFitra28fPAZn3MgO+dwTGtr0WGYjTonBzsqT7xU7GGl3+7LBrlvnVbs86OfeGkypxUagdnYcHKwYbW1tRUdAvvTfQ7HzJxVaBynUR/9YTbanBxsWPVww9dADJ2dnQVHYtYYfELazMxynBzMzCzHycHMzHKcHMzMLMfJwczMcqpKDpKmS7pT0i8l/ULS+ySdIGmdpJ70+/jUVpI6JfVK2iLpPSXr6UjteyR1VLtTZmZWnWpHDt8G7o6I3wf+FfAL4EvATyNiFvDTVAZYAMxKP4uBmwEknQBcA5wNnAVcM5BQzAY89dRTbN68mVtuuaXoUMwaQsX3OUg6DpgNXAwQEfuB/ZIWAnNSsy7gPuAqYCFwW0QE8EAadZyY2q6LiF1pveuA+cDKSmOz+lPtA4P6+/sB6Orq4uGHH654PX5Qj9nRqWbkcCrQD/wfSZskfVfSscBbI+IZgPT7Lal9C/BkyfJ9qW6wejMgGzUMVTaz2qvmDukpwHuAJRHxoKRv89ohpHJUpi6GqM+vQFpMdkiKk08+eWTRWqGq+bQ+e/bsw8r9/f2sWrWq2pDMbAjVjBz6gL6IeDCV7yRLFr9Nh4tIv58raX9SyfKtwNND1OdExPKIaI+I9ubm5ipCNzOzoVScHCLiWeBJSe9IVR8EHgNWAwNXHHUAd6Xp1cCn01VL5wB70mGne4C5ko5PJ6LnpjozMytItV+8twT4nqSpwDbgM2QJ5w5Ji4AngI+ltmuA84FeYF9qS0TskvR1YODJ8dcOnJw2A5BEdh3Da2UzG11VJYeI2Ay0l5n1wTJtA/j8IOtZAayoJhabuEoTQ7mymdWe75C2ujdz5swhy2ZWe04OVveuvvrqw8pf/epXC4rErHE4OVjdO+20014dLcycOdNPYjMbA04ONi5cffXVHHvssR41mI0RPybUxoXTTjuNtWvXFh2GWcPwyMHMzHKcHMzMLMfJwczMcpwczMwsR+P1blNJ/cBvio7jKDQBO4oOYoJwX9aW+7O2xkt//ouIGPabS8dtchgvJHVHRLmvGLERcl/WlvuztiZaf/qwkpmZ5Tg5mJlZjpPD6FtedAATiPuyttyftTWh+tPnHMzMLMcjBzMzy3FyMDOznIZODpJWSHpO0iNH0XaOpD8ci7iGI+lCSacXHUc546lPJf3XorY9nBH247slnT8WcQ2n6L/pcMZTv0q6XNK0orbf0MkBuBWYf5Rt5wAjetFLGq1vvb0QqMvkwPjq07pNDoysH99N9nz2ozaKr805jPBvOsZuZfz06+VAYcmBiGjoH2Am8EhJ+T7gW8A/A48AZ6U2zwJPAZuBDwDNwCpgQ/r5N2n5r5FdtfAT4K8G2ebFwI+AvwEeBy4DrgA2AQ8AJ6R2/ymt++G0rWlk/3i70nKbgbcX3Yd11Kd3AXcDvwKuKZn3I2Aj8CiwONV9A/hd2vb3iu6zo+zH96bXwv3AN1NfTgWeAPrTvnwCOJbsmewb0mtqYUkf/XV63f39INucA/wDcAewNfXTfwAeAn4+8HoD/h3wYFr/3wFvLfc3LboP66xf1wM/BB4D/hyYlObdDHSn1+d/T3VLgf2pz+8tpJ+K/kMV/VPmhXIf8BdpevbAvPQGdWVJu78C3p+mTwZ+UdJuI/CGIbZ5MdALvInsDXEP8Lk070bg8jQ9o2SZZcCSNH0r8NGi+64O+/QZYAbwhvQP3p7mDSTbgfoZqfxS0X01wn7cAvzbNP3Nkn68GPjTknbXA59K09PJ3uSPTe36BvpjkG3OAXYDJwKvJ3ujH3jD+hPgW2n6eF672vGzwP8q9zetx58C+/Vl4FRgMrBu4H+45PU5Of2vnJnK24GmovrJD/spbyVARKyXdJyk6WXa/DFwuqSB8nGS3pSmV0fE/xtmG/dGxIvAi5L2kH3qgOyTwplp+l2SlpG9EN8I3FPZ7tSFsejTdRGxE0DSD4D3k30iWyrpw6nNScAsYGfluzL2JL0ZmB4R/5Cq/hJYMEjzucAFkq5M5WPIki1kfbRrmM1tiIhn0nZ/TTZig+y1+UdpuhX4vqQTyT5lPz6S/akXY9yvD0XEtrTdlWSvzzuBj0taTPbwtRPJDhlvqWR/asnJobwjb/4odzPIJOB9R75hpTe2vUexjVdKpg+VlA/x2t/lVuDCiHhY0sVknz7Gq7Ho09w2JM0hSzrvi4h9ku4j+6ceb0T5Phus7b+PiF8dVimdTe1emzcB/zsiVqc+/tpRxlZvxrJfy70+TwGuBP4gIp6XdCt18vps9BPSg/kEgKT3A3siYg/wItlhoAE/ITtXQGr77lGI403AM5JeR3bcd8CRsYwHY9Gn50k6QdIbyE7a/xPwZuD5lBh+HzinpP2B1Ld1LyJ2A3tS/8HQr4d7gCVKWVXSvx6FkN5MdsgJoGOIWOraGPfrWZJOkTSJ7P/hH4HjyBLLHklv5fBRS6F92dDJIQ3t7gfeIalP0qI063lJ/0x20mig7m+AD0vaLOkDZCeM2iVtkfQY8LlRCPG/kZ30Wwf8sqT+duC/SNok6e2jsN2KFdyn/0h2WGAzsCoiuslOUE+RtAX4OtkJ/wHLgS2SvjfyPR1dg/TjZ4DvSLofKB1d3Ut2OG6zpE+Q7efryPbtkVSuta8Bfy3p/3L411Qf+TetKwX36/1kJ/gfITsM98OIeJjs5PajZCe7/6mk/XJgraR7R7qfteCvzzhCOuxwZXpjsRoYiz5Nh93aI+Ky4dpOBJJmAn8bEe8qOJQJZbT6NR16uzIiPlTL9Y6mhh45mJlZeR45jCJJ84Abjqh+PCI+XK69Dc99WhuS/iXZIbhSr0TE2UXEM1FMpH51cjAzsxwfVjIzsxwnBzMzy3FyMDOzHCcHMzPLcXIwM7Oc/w9nuXcFtrowHgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"DF = df_P4[['1pter_mat','1pter_pat', '1qter_mat','1qter_pat']]\n",
"#Df.plot.box()\n",
"sb.boxplot(data = DF)"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f368c6425f8>"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sb.boxplot(data = DF['1pter_mat']-DF['1pter_pat'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 5 11:05:01 2012
@author: Jean-Pat
"""
import unittest as ut
import WatsonCrick as ss# single strand DNA
class Test_Wa(ut.TestCase):
""" class for unit tests for Watson class """
def test_initW(self):
""" Watson constructor test"""
w = ss.Watson(ttaggg = 10400, ccctaa = 5000)
self.assertEqual(w.getTTAGGG(), 10400)
self.assertEqual(w.getCCCTAA(), 5000)
def test_initCr(self):
""" Crick constructor test"""
c = ss.Crick(ttaggg = 5000, ccctaa = 10400)
self.assertEqual(c.getTTAGGG(), 5000)
self.assertEqual(c.getCCCTAA(), 10400)
def test_delete5prime(self):
""" test 5' ccctaa deletion with No exonuclease"""
ss.deletion = 1
w = ss.Watson(ttaggg = 10400, ccctaa = 5000)
w.delete5prime()
self.assertLess(w.getCCCTAA(), 5000)
c = ss.Crick(ttaggg = 5000, ccctaa = 10400)
c.delete5prime()
self.assertLess(c.getCCCTAA(), 10400)
def test_replicate1(self):
""" Check that Watson replication gives Crick and reciprocally"""
w = ss.Watson(ttaggg = 10400, ccctaa = 5000)
self.assertIsInstance(w.replicate(),ss.Crick)
c = ss.Crick(ttaggg = 5000, ccctaa = 10400)
self.assertIsInstance(c.replicate(),ss.Watson)
def test_replicate2(self):
""" Check Watson.replicate(),or Crick, reduces Watson (Crick) CCCTAA"""
w = ss.Watson(ttaggg = 10400, ccctaa = 5000)
w.replicate()
self.assertLess(w.getCCCTAA(),5000)
c = ss.Crick(ttaggg = 5000, ccctaa = 10400)
c.replicate()
self.assertLess(c.getCCCTAA(), 10400)
def test_replicate3(self):
""" Take a Watson strand
replicate it
Check that the new Crick CCCTAA< Watson TTAGGG"""
w = ss.Watson(ttaggg = 10400, ccctaa = 5000)
c = w.replicate()
self.assertLess(c.getCCCTAA(),w.getTTAGGG())
def test_replicate4(self):
""" Take a Crick strand
replicate it
Check that the new Watson CCCTAA< Crick TTAGGG"""
c = ss.Crick(ttaggg = 10400, ccctaa = 5000)
w = c.replicate()
self.assertLess(w.getCCCTAA(),c.getTTAGGG())
def test_lengthenTTAGGG(self):
""" Check that Watson (Crick) TTAGGG can be lengthened (telomerase)"""
w = ss.Watson(ttaggg = 10400, ccctaa = 5000)
w.lengthen_ttaggg(200)
self.assertGreater(w.getTTAGGG(),10400)
c = ss.Crick(ttaggg = 5000, ccctaa = 10000)
c.lengthen_ttaggg(200)
self.assertGreater(c.getTTAGGG(),5000)
if __name__ == '__main__':
ut.main()
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 30 16:52:42 2016
@author: jeanpat
"""
import unittest as ut
import Cellular as C
class test_cell(ut.TestCase):
def test_initDivision(self):
cell = C.Cell()
self.assertEqual(cell.division, 0)
def test_initDivision1(self):
cell = C.Cell()
cell.mitose()
self.assertEqual(cell.division, 1)
def test_length1(self):
tel=(15000,18000,9000,201)
distrib = {"1":tel}
tgen = C.init_genome(telomeres_distribution = distrib)
tcell = C.Cell(genome = tgen, short_telomere_threshold= 200)
df = tcell.genome_dataframe()
self.assertEqual(df['1pter_mat'][0], 15000)
def test_cell_cycle1(self):
tel=(15000,18000,9000,201)
distrib = {"1":tel}
tgen = C.init_genome(telomeres_distribution = distrib)
tcell = C.Cell(genome = tgen, short_telomere_threshold= 200)
self.assertEqual(tcell.G0, False)
def test_cell_cycle2(self):
tel=(15000,18000,9000,201)
distrib = {"1":tel}
tgen = C.init_genome(telomeres_distribution = distrib)
mother_cell = C.Cell(genome = tgen, short_telomere_threshold= 200)
daughter_cell = mother_cell.mitose()
self.assertEqual(mother_cell.G0, True)
self.assertEqual(daughter_cell.G0, True)
if __name__ == '__main__':
ut.main()
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 5 15:01:23 2012
@author: Jean-Pat
"""
import unittest as ut
import ClassChromosome as K
class Test_Chromosome(ut.TestCase):
""" class for unit tests for Chromosome class """
def test_initK(self):
w=K.Watson(ttaggg=10000, ccctaa = 5000)
c=K.Crick(ttaggg=5000, ccctaa = 10000)
k=K.Chromosome(watson=w,crick=c)
self.assertIsInstance(k,K.Chromosome)
def test_Chromatid1(self):
""" check if a chromatid (Chromosome) has two
Watson an Crick obj
"""
k=K.Chromosome()
self.assertIsInstance(k.get_Crick(),K.Crick)
self.assertIsInstance(k.get_Watson(),K.Watson)
def test_1_telomere_length(self):
""" check telomere length on instanciation
"""
w=K.Watson(ttaggg=10000, ccctaa = 5000)
c=K.Crick(ttaggg=5000, ccctaa = 10000)
k=K.Chromosome(w, c)
length_pter = k.get_pter_G1()
length_qter = k.get_qter_G1()
self.assertEqual(length_pter,10000)
self.assertEqual(length_qter,5000)
def test_2a_telomere_length_G2(self):
""" check telomere length after G1 to G2 is tupple
"""
w=K.Watson(ttaggg=10000, ccctaa = 5000)
c=K.Crick(ttaggg=5000, ccctaa = 10000)
k=K.Chromosome(w, c)
k.set_G1_to_G2()
cell_cycle ='G2'
motif='ccctaa'
self.assertEqual(k.phase,cell_cycle)
self.assertIsInstance(k.get_pter_G2(motif),tuple)
self.assertIsInstance(k.get_qter_G2(motif),tuple)
def test_2b_telomere_length_G2(self):
""" check telomere length after G1 to G2 is tupple
"""
w=K.Watson(ttaggg=10000, ccctaa = 5000)
c=K.Crick(ttaggg=5000, ccctaa = 10000)
k=K.Chromosome(w, c)
k.set_G1_to_G2()
cell_cycle ='G2'
motif='ttaggg'
self.assertEqual(k.phase,cell_cycle)#self.assertEquals(k.phase,cell_cycle)
self.assertIsInstance(k.get_pter_G2(motif),tuple)
self.assertIsInstance(k.get_qter_G2(motif),tuple)
def test_3_telomere_G1_pter_GStrand(self):
""" Take a chromosome :
*G1 to G2
*segregate (mitosis and back to G1)
Check telomere ttaggg longer than ccctaa for
the two G1 chromosomes (pter)
"""
w=K.Watson(ttaggg=10000, ccctaa = 5000)
c=K.Crick(ttaggg=5000, ccctaa = 10000)
k0=K.Chromosome(w, c)
k0.set_G1_to_G2()
k1 = k0.segregate()
#---------------------
ccctaa0 = k0.get_pter_G1(motif='ccctaa')
ttaggg0 = k0.get_pter_G1(motif='ttaggg')
#print ccctaa0, ttaggg0
ccctaa1 = k1.get_pter_G1(motif='ccctaa')
ttaggg1 = k1.get_pter_G1(motif='ttaggg')
#Check at pter
self.assertLess(ccctaa0,ttaggg0)
self.assertLess(ccctaa1,ttaggg1)
def test_4_telomere_G1_qter_GStrand(self):
""" Take a chromosome :
*G1 to G2
*segregate (mitosis)
Check telomere ttaggg longer than ccctaa(qter)
"""
w=K.Watson(ttaggg=10000, ccctaa = 5000)
c=K.Crick(ttaggg=5000, ccctaa = 10000)
k0=K.Chromosome(w, c)
k0.set_G1_to_G2()
k1 = k0.segregate()
#---------------------------------------
ccctaa0 = k0.get_qter_G1(motif='ccctaa')
ttaggg0 = k0.get_qter_G1(motif='ttaggg')
#print ccctaa0, ttaggg0
ccctaa1 = k1.get_qter_G1(motif='ccctaa')
ttaggg1 = k1.get_qter_G1(motif='ttaggg')
self.assertLess(ccctaa0,ttaggg0)
self.assertLess(ccctaa1,ttaggg1)
def test_5_telomere_G2_(self):
""" Take a chromosome :
*G1 to G2
* compute telomre lenghth on G2 chrom
Check that telomere length on both chromatids are similar
"""
w=K.Watson(ttaggg=10000, ccctaa = 5000)
c=K.Crick(ttaggg=5000, ccctaa = 10000)
k0=K.Chromosome(w, c)
k0.set_G1_to_G2()
motif='ccctaa'
pter = k0.get_pter_G2(motif)
p1 = pter[0]
p2 = pter[1]
self.assertAlmostEqual(p1,p2,delta=400)
qter = k0.get_qter_G2(motif)
q1 = qter[0]
q2 = qter[1]
self.assertAlmostEqual(q1,q2,delta=400)
motif='ttaggg'
pter = k0.get_pter_G2(motif)
p1 = pter[0]
p2 = pter[1]
self.assertAlmostEqual(p1,p2,delta=400)
qter = k0.get_qter_G2(motif)
q1 = qter[0]
q2 = qter[1]
self.assertAlmostEqual(q1,q2,delta=400)
def test_6_telomere_length_method(self):
'''Check that telomere_length() method gives the same results than
the other methods get_pter|qter_G1|G2(motif='ccctaa'|'ttaggg'),
with an easier to use interface.
'''
w = K.Watson(ttaggg=10000, ccctaa = 5000)
c = K.Crick(ttaggg=5000, ccctaa = 10000)
k0 = K.Chromosome(w, c)
L = k0.telomere_length(end='pter', motif='ccctaa')
self.assertEqual(L,10000)
L = k0.telomere_length(end='qter', motif='ccctaa')
self.assertEqual(L,5000)
L = k0.telomere_length(end='pter', motif='ttaggg')
self.assertEqual(L,10000)
L = k0.telomere_length(end='qter', motif='ttaggg')
self.assertEqual(L,5000)
#Switch to G2:Two chromatids Chromosome
k0.set_G1_to_G2()
self.assertIsInstance(k0.telomere_length(end='pter', motif='ccctaa'),tuple)
self.assertIsInstance(k0.telomere_length(end='qter', motif='ccctaa'),tuple)
p1, p2 = k0.telomere_length(end='pter', motif='ccctaa')
q1, q2 = k0.telomere_length(end='qter', motif='ccctaa')
self.assertAlmostEqual(p1,p2,delta=300)
self.assertAlmostEqual(q1,q2,delta=300)
#Switch from G2 to M:One chromatid Chromosome
k0.segregate()
self.assertIsInstance(k0.telomere_length(end='pter', motif='ccctaa'),int)
if __name__ == '__main__':
ut.main()
# -*- coding: utf-8 -*-
"""
Created on Thu Oct 11 14:20:03 2012
@author: Jean-Pat
"""
import unittest as ut
import ClassChromosome as K
import Genome as G
class Test_Genome(ut.TestCase):
""" class for unit tests for Genome class """
def test_genome01(self):
'''Check creation of a genome instance
'''
watson = K.Watson(ttaggg=1200, ccctaa=5500)
crick = K.Crick(ttaggg=5500, ccctaa=1200)
c1 = K.Chromosome(watson, crick, name='1', homolog='a')
c2 = K.Chromosome(homolog='b')
x = K.Chromosome(K.Watson(ttaggg=12000, ccctaa=4000),
K.Crick(ttaggg=4000, ccctaa=12000),
name='2', homolog='X')
y = K.Chromosome(K.Watson(ttaggg=20000, ccctaa=7000),
K.Crick(ttaggg=7000, ccctaa=20000),
name='2', homolog='Y')
g = G.Genome(c1, c2, x, y)
self.assertIsInstance(g, G.Genome)
def test_genome02(self):
''' Check can get the chromosomes name & homologous chrom name
'''
watson = K.Watson(ttaggg=1200, ccctaa=5500)
crick = K.Crick(ttaggg=5500, ccctaa=1200)
c1 = K.Chromosome(watson, crick, name='1', homolog='a')
c2 = K.Chromosome(homolog='b')
x = K.Chromosome(K.Watson(ttaggg=12000, ccctaa=4000),
K.Crick(ttaggg=4000, ccctaa=12000),
name='2', homolog='X')
y = K.Chromosome(K.Watson(ttaggg=20000, ccctaa=7000),
K.Crick(ttaggg=7000, ccctaa=20000),
name='2', homolog='Y')
g = G.Genome(c1, c2, x, y)
ploidy = g.get_chromosomes_list()
#print(ploidy)
self.assertEqual(list(ploidy), ['1','2'])
homologous = g.get_homologous_tags(pair='1')
self.assertEqual(homologous, ['a','b'])
homologous = g.get_homologous_tags(pair='2')
self.assertEqual(homologous, ['X','Y'])
def test_genome03(self):
'''Check can get chromosome phase
'''
watson=K.Watson(ttaggg = 1200, ccctaa = 5500)
crick=K.Crick(ttaggg = 5500, ccctaa = 1200)
c1 = K.Chromosome(watson, crick, name='1',homolog='a')
c2 = K.Chromosome(homolog='b')
g = G.Genome(c1, c2)
f1=g.get_chrom_phase(pair='1',hog='a')
self.assertEqual(f1,'G1')
f2=g.get_chrom_phase(pair='1',hog='b')
self.assertEqual(f1,'G1')
g.set_G1_to_G2()
f1=g.get_chrom_phase(pair='1',hog='a')
self.assertEqual(f1,'G2')
f2=g.get_chrom_phase(pair='1',hog='b')
self.assertEqual(f2,'G2')
def test_genome31(self):
'''check can get a pair of chrom with
'''
#TODO:Check that can get a pair of chromosomes with G.get...
pass
def test_genome04(self):
'''Check can get telomere length with self.get_telo_length method
'''
watson=K.Watson(ttaggg = 1200, ccctaa = 5500)
crick=K.Crick(ttaggg = 5500, ccctaa = 1200)
c1 = K.Chromosome(watson, crick, name='1',homolog='a')
c2 = K.Chromosome(homolog='b')
g = G.Genome(c1, c2)
p1a = g.get_telo_length()
p1a = g.get_telo_length(pair='1',hog='a', tel='pter',cycle='G1',motif='ccctaa')
self.assertEqual(p1a,1200)
def test_genome05(self):
'''Check can get telomere length with self.get_telomere_length method
'''
watson = K.Watson(ttaggg=1200, ccctaa=5500)
crick = K.Crick(ttaggg=5500, ccctaa=1200)
c1 = K.Chromosome(watson, crick, name='1', homolog='a')
c2 = K.Chromosome(homolog='b')
g = G.Genome(c1, c2)
p1a = g.get_telomere_length()
self.assertEqual(p1a, 1200)
q1a = g.get_telomere_length(tel='qter')
self.assertEqual(q1a, 5500)
def test_genome06(self):
'''Check telomere length difference between homologs
'''
watson = K.Watson(ttaggg=1200, ccctaa=5500)
crick = K.Crick(ttaggg=5500, ccctaa=1200)
wat1 = K.Watson(ttaggg=7500, ccctaa=9708)
crk1 = K.Crick(ttaggg=9708, ccctaa=7500)
c1 = K.Chromosome(watson, crick, name='1', homolog='a')
c2 = K.Chromosome(wat1, crk1, name='1', homolog='b')
g = G.Genome(c1, c2)
self.assertEqual(g.delta_telo(), 1200 - 7500)
self.assertEqual(g.delta_telo(tel='pter'), 1200 - 7500)
self.assertEqual(g.delta_telo(tel='qter'), 5500 - 9708)
def test_genome_state(self):
'''Check genome state:
'''
if __name__ == '__main__':
ut.main()
# -*- coding: utf-8 -*-
"""
Created on Wed Sep 5 11:05:37 2012
@author: Jean-Patrick Pommier
"""
import numpy as np
#The 5' ccctaa exonuclease deletion is simulated
#by a Binomial law(n=deletion, p=p_deletion)
#RNA = 20
#deletion = 400
#p_deletion = 0.40
#==============================================================================
# Watson & Crick seems to be the same class.but they are symetrical. A Watson
# object produces a Crick object and reciprocally as DNA replication does.
#==============================================================================
class Watson(object):
#Better to put these cte as class variables, same value for all instances
RNA = 20
deletion = 400
p_deletion = 0.40
def __init__(self, ttaggg = 5000, ccctaa = 10000):
self.__ttaggg = ttaggg
self.__ccctaa = ccctaa
self.in_use = False
def delete5prime(self):
#simulation action of 5' exonuclease (Makarov 1997)
self.__ccctaa = self.__ccctaa - (Watson.RNA+np.random.binomial(Watson.deletion,Watson.p_deletion))
def replicate(self):
self.__neottaggg = self.__ccctaa
self.__neoccctaa = self.__ttaggg
#make a complementary single strand
self.compstrand = Crick(self.__neottaggg,self.__neoccctaa)
#now delete Watson strand and Crick strand on 5' side
self.delete5prime()
self.compstrand.delete5prime()
return self.compstrand
def lengthen_ttaggg(self, l):
#use for telomerase
self.__ttaggg = self.__ttaggg+l
def lengthen_ccctaa(self, l):
#use for telomerase+DNA pol
self.__ccctaa = self.__ccctaa+l
def getTTAGGG(self):
return self.__ttaggg
def getCCCTAA(self):
return self.__ccctaa
ttaggg = property(fget=getTTAGGG, fset=None)
ccctaa = property(fget=getTTAGGG, fset=None)
class Crick(object):
RNA = 20
deletion = 400
p_deletion = 0.40
def __init__(self,ttaggg = 10000, ccctaa = 5000):
self.__ttaggg = ttaggg
self.__ccctaa = ccctaa
self.in_use = False
def delete5prime(self):
self.__ccctaa = self.__ccctaa - (Crick.RNA+np.random.binomial(Crick.deletion,Crick.p_deletion))
def replicate(self):
self.__neottaggg = self.__ccctaa
self.__neoccctaa = self.__ttaggg
#make a complementary single strand
self.compstrand = Watson(self.__neottaggg,self.__neoccctaa)
#now delete Watson strand and Crick strand on 5' side
self.delete5prime()
self.compstrand.delete5prime()
return self.compstrand
def lengthen_ttaggg(self, l):
#use for telomerase
self.__ttaggg = self.__ttaggg+l
def lengthen_ccctaa(self, l):
#use for telomerase+DNA pol
self.__ccctaa = self.__ccctaa+l
def getTTAGGG(self):
return self.__ttaggg
def getCCCTAA(self):
return self.__ccctaa
ttaggg = property(fget = getTTAGGG, fset = None)
ccctaa = property(fget = getTTAGGG, fset = None)
#==============================================================================
#
#==============================================================================
def test_watson_replication():
w = Watson()
print( 'w TTAGGG:',w.getTTAGGG())
print( 'w CCCTAA:',w.getCCCTAA())
neoc = w.replicate()
print( 'w post replication CCCTAA:',w.getCCCTAA())
print( 'Crick strand post rep, CCCTAA:',neoc.getCCCTAA())
w.__ccctaa = 200
print( w.getCCCTAA())
if __name__ == "__main__":
test_watson_replication()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment