DNAcopy/0000755000175000017500000000000014147405732011710 5ustar nileshnileshDNAcopy/demo/0000755000175000017500000000000014136047041012625 5ustar nileshnileshDNAcopy/demo/00Index0000644000175000017500000000010414136047041013752 0ustar nileshnileshDNAcopy Demo of DNAcopy package analysis and plotting capabilities DNAcopy/demo/DNAcopy.R0000644000175000017500000000264414136047041014253 0ustar nileshnilesh if(dev.cur() <= 1) get(getOption("device"))() opar <- par(ask = interactive() && (.Device %in% c("X11", "GTK", "windows","quartz")) ) #datadir <- system.file("examples", package = "DNAcopy") #Read in two example by Snijders et al. data(coriell) #Combine into one CNA object to prepare for analysis on Chromosomes 1-23 CNA.object <- CNA(cbind(coriell$Coriell.05296,coriell$Coriell.13330), coriell$Chromosome,coriell$Position, data.type="logratio",sampleid=c("c05296","c13330")) #We generally recommend smoothing single point outliers before analysis #Make sure to check that the smoothing is proper smoothed.CNA.object <- smooth.CNA(CNA.object) #Segmentation at default parameters segment.smoothed.CNA.object <- segment(smoothed.CNA.object, verbose=1) #Plot whole studies plot(segment.smoothed.CNA.object, plot.type="w") #Plot each study by chromosome plot(segment.smoothed.CNA.object, plot.type="s") #Plot each chromosome across studies (6 per page) plot(segment.smoothed.CNA.object, plot.type="c", cbys.layout=c(2,1), cbys.nchrom=6) #Plot by plateaus plot(segment.smoothed.CNA.object, plot.type="p") #Segment again but making sure that splits correspond are 3SDs separated segment.smoothed.CNA.object <- segment(smoothed.CNA.object, undo.splits="sdundo", verbose=1) #All the non-obvious splits have been removed plot(segment.smoothed.CNA.object,plot.type="s") DNAcopy/DESCRIPTION0000644000175000017500000000122014136070260013401 0ustar nileshnileshPackage: DNAcopy Title: DNA copy number data analysis Version: 1.68.0 Author: Venkatraman E. Seshan, Adam Olshen Description: Implements the circular binary segmentation (CBS) algorithm to segment DNA copy number data and identify genomic regions with abnormal copy number. Maintainer: Venkatraman E. Seshan LazyData: yes License: GPL (>= 2) biocViews: Microarray, CopyNumberVariation git_url: https://git.bioconductor.org/packages/DNAcopy git_branch: RELEASE_3_14 git_last_commit: 08f039f git_last_commit_date: 2021-10-26 Date/Publication: 2021-10-26 NeedsCompilation: yes Packaged: 2021-10-26 21:18:40 UTC; biocbuild DNAcopy/chrom-lengths0000644000175000017500000000043014136047041014373 0ustar nileshnileshChromosome, {Length (Mb)}; 1, {263}; 2, {255}; 3, {214}; 4, {203}; 5{194}; 6, {183}; 7, {171}; 8, {155}; 9, {145}; 10, {144}; 11, {144}, 12, {143}; 13, (114}; 14, {109}; 15, {106}; 16, {98}; 17, {92}; 18, {85}; 19, {67}; 20, {72}; 21, {50}; 22, {56}; X {164}/Y {59} (total = 3286)DNAcopy/README.md0000644000175000017500000000026514136047041013163 0ustar nileshnilesh# DNAcopy Bioconductor package implementing the circular binary segmentation (CBS) algorithm to segment DNA copy number data and identify genomic regions with abnormal copy number. DNAcopy/man/0000755000175000017500000000000014136047041012454 5ustar nileshnileshDNAcopy/man/DNAcopy-internal.Rd0000644000175000017500000000162414136047041016055 0ustar nileshnilesh\name{DNAcopy-internal} \alias{changepoints} \alias{changepoints.prune} \alias{changepoints.sdundo} \alias{smooth.data} \alias{trimmed.variance} \alias{inflfact} \alias{exon.changepoint} \title{Internal DNAcopy functions} \description{ Internal functions of package DNAcopy. } \usage{ changepoints(genomdat, data.type = "logratio", alpha = 0.01, weights = NULL, sbdry, sbn, nperm = 10000, p.method="hybrid", min.width=2, kmax=25, nmin = 200, trimmed.SD = NULL, undo.splits = "none", undo.prune = 0.05, undo.SD = 3, verbose = 1, ngrid=100, tol=1e-6) changepoints.prune(genomdat, lseg, change.cutoff=0.05) changepoints.sdundo(genomdat, lseg, trimmed.SD, change.SD=3) trimmed.variance(genomdat, trim=0.025) inflfact(trim) exon.changepoint(exondat, ngrid=100, tol=1e-6) } \details{These are not to be called directly by the user} \keyword{internal} DNAcopy/man/DNAcopy.Rd0000644000175000017500000000237214136047041014244 0ustar nileshnilesh\name{DNAcopy} \alias{DNAcopy} \alias{print.DNAcopy} \title{Results of segmenting a CNA data object} \usage{ \method{print}{DNAcopy}(x, showSegRows=FALSE, \dots) } \description{ The results of segmenting data from copy number array experiments from programs such as circular binary segmentation (CBS). } \arguments{ \item{x}{an object of class \code{DNAcopy} -- output of segment.} \item{showSegRows}{option to show row numbers for the segment start and end. default is FALSE.} \item{...}{arguments to be passed onto print command called within.} } \value{ \item{data}{The original CNA object which was the input for segment} \item{ID}{sample identifier.} \item{chrom}{the chromosome within the sample.} \item{loc.start}{the starting map location of the segment} \item{loc.end}{the ending map location of the segment} \item{num.mark}{the number of markers in the segment} \item{data.type}{the segment mean.} \item{call}{the call that produced the object.} } \details{ An object of class \code{DNAcopy}. There is a \code{print} method that prints the results in a tabular format. Each row gives the sample, the chromosome, the start and end map locations, the number of markers and the mean of each segment. } \keyword{nonparametric} DNAcopy/man/subset.DNAcopy.Rd0000644000175000017500000000151614136047041015547 0ustar nileshnilesh\name{subset.DNAcopy} \alias{subset.DNAcopy} \title{Subset a DNAcopy data object} \description{ Function to return a subset of a copy number array data object by a list of chromosomes and sample. } \usage{ \method{subset}{DNAcopy}(x, chromlist=NULL, samplelist=NULL, ...) } \arguments{ \item{x}{DNAcopy object} \item{chromlist}{chromosomes of interest. Should be a subset of the valid chromosome names in the original data.} \item{samplelist}{samples of interest. Can be integers denoting the samples of interest or a vector of valid sample names.} \item{...}{other arguments which may be passed to \code{subset}.} } \value{ An object of class \code{DNAcopy} with the input data and the results of segmenting them only for the chromosomes and samples of interest. } \keyword{nonparametric} DNAcopy/man/coriell.Rd0000644000175000017500000000115714136047041014400 0ustar nileshnilesh\name{coriell} \alias{coriell} \title{Array CGH data set of Coriell cell lines} \description{ These are two data array CGH studies sets of Corriel cell lines taken from the reference below. } \usage{data(coriell)} \format{A data frame containing five variables: first is clone name, second is clone chromosome, third is clone position, fourth and fifth are log2ratio for two cell lines.} \source{ http://www.nature.com/ng/journal/v29/n3/suppinfo/ng754\_S1.html } \references{Snijders et al., Assembly of microarrays for genome-wide measurement of DNA copy number, \emph{Nature Genetics}, 2001} \keyword{datasets} DNAcopy/man/smooth.CNA.Rd0000644000175000017500000000314514136047041014657 0ustar nileshnilesh\name{smooth.CNA} \alias{smooth.CNA} \title{Smooth a `Copy Number Array' data object} \description{ Detect outliers and smooth the data prior to analysis by programs such as circular binary segmentation (CBS). } \usage{ smooth.CNA(x, smooth.region=10, outlier.SD.scale=4, smooth.SD.scale=2, trim=0.025) } \arguments{ \item{x}{Copy number array data object} \item{smooth.region}{number of points to consider on the left and the right of a point to detect it as an outlier. (default=10)} \item{outlier.SD.scale}{the number of SDs away from the nearest point in the smoothing region to call a point an outlier.} \item{smooth.SD.scale}{the number of SDs from the median in the smoothing region where a smoothed point is positioned.} \item{trim}{proportion of data to be trimmed for variance calculation for smoothing outliers and undoing splits based on SD.} } \value{ An object of class \code{CNA} with outliers smoothed i.e the logratio values of singleton outliers is shrunk towards the values of its neighbors. The output is of the same dimension as the input. } \examples{ data(coriell) #Combine into one CNA object to prepare for analysis on Chromosomes 1-23 CNA.object <- CNA(cbind(coriell$Coriell.05296,coriell$Coriell.13330), coriell$Chromosome,coriell$Position, data.type="logratio",sampleid=c("c05296","c13330")) #We generally recommend smoothing single point outliers before analysis #Make sure to check that the smoothing is proper smoothed.CNA.object <- smooth.CNA(CNA.object) } \keyword{nonparametric} DNAcopy/man/exon.segment.Rd0000644000175000017500000000256314136047041015363 0ustar nileshnilesh\name{exon.segment} \alias{exon.segment} \title{Binary segmentation of exon data.} \description{ Compute the binary segmentation statistic, location and approximate p-value. } \usage{ exon.segment(gene, eloc, edat, ngrid=100, tol=1e-6) } \arguments{ \item{gene}{gene names in the exon data} \item{eloc}{exon locations within gene} \item{edat}{exon expressions within gene} \item{ngrid}{number grid points for the integral} \item{tol}{tolerance level for calculating nu} } \value{ a matrix with three columns. The maximal statistic from binary segmentation, its location and the p-values for each gene. } \details{ The p-values are obtained by applying Siegmund's approximation for the maximal statistic from binary segmenting consecutive segments within a chromosome. These are one-sided test for an increase in expression. } \examples{ # test code on an easy data set set.seed(25) gene <- rep(c("A", "B"), c(30,20)) eloc <- c(1:30, 1:20) edat <- matrix(rnorm(500), 50, 10) # changes for gene1 in samples 3 & 7 edat[1:30, 3] <- edat[1:30, 3] + rep(0.9*0:1, c(17, 13)) edat[1:30, 7] <- edat[1:30, 7] + rep(1.1*0:1, c(21, 9)) # changes for gene2 in samples 4 & 7 edat[31:50, 4] <- edat[31:50, 4] + rep(1.1*0:1, c(8, 12)) edat[31:50, 7] <- edat[31:50, 7] + rep(1.2*0:1, c(13, 7)) exon.segment(gene, eloc, edat) } \author{Venkatraman E. Seshan} \keyword{nonparametric} DNAcopy/man/plotSample.Rd0000644000175000017500000000615614136047041015073 0ustar nileshnilesh\name{plotSample} \alias{plotSample} \title{Plot the data and results from segmentation for a single sample} \description{ Plots the data for a single sample from a copy number array experiment (aCGH, ROMA etc.) along with the results of segmenting it into regions of equal copy numbers. } \usage{ plotSample(x, sampleid=NULL, chromlist=NULL, xmaploc=FALSE, col=c("black","green"), pch=".", cex=NULL, altcol=TRUE, segcol="red", lwd=3, zeroline=TRUE, zlcol="grey", xlab=NULL, ylab=NULL, main=NULL, ...) } \arguments{ \item{x}{an object of class \code{DNAcopy} resulting from analyzing data from copy number array experiments.} \item{sampleid}{the sample for which the plot is requested. Should be a valid sample name or number. If missing the first sample is plotted.} \item{chromlist}{a vector of chromosome numers or names to be plotted. If missing the whole genome is plotted.} \item{xmaploc}{a logical indicating if data are plotted against genomic position or Index. Defaults to \code{FALSE}.} \item{col}{a vector of two colors that can be used for alternating colors for successive chromosomes.} \item{pch}{the plotting character. Defaults to \code{.}.} \item{cex}{the size of plotting character. If missing it is set to 3 if pch is `.' and 1 otherwise.} \item{altcol}{a logical indicating if colors of successive chromosomes should be alternated. Defaults to \code{TRUE}.} \item{segcol}{color for segment means.} \item{zeroline}{a logical indicating if the zeroline is drawn. Defaults to \code{TRUE}.} \item{zlcol}{color for zero line.} \item{lwd}{thickness of the lines.} \item{xlab}{the x-axis lavel. If missing Index or Genomic Position will be used depending on xmaploc.} \item{ylab}{the y-axis label. If missing log(CN) or LOH will be used depending on data type.} \item{main}{the main title. If missing sample name will be used.} \item{...}{other arguments to the \code{plot} function can be passed here.} } \details{ This function plots the whole genome and segmentation results for a single sample. This function overcomes the deficiency in the plot.DNAcopy function which cycles through all the samples. If sampleid is not specified the first sample is plotted. } \examples{ #Read in two examples from Snijders et al. data(coriell) #Combine into one CNA object to prepare for analysis on Chromosomes 1-23 CNA.object <- CNA(cbind(coriell$Coriell.05296,coriell$Coriell.13330), coriell$Chromosome,coriell$Position, data.type="logratio",sampleid=c("c05296","c13330")) #We generally recommend smoothing single point outliers before analysis #Make sure to check that the smoothing is proper smoothed.CNA.object <- smooth.CNA(CNA.object) #Segmentation at default parameters segment.smoothed.CNA.object <- segment(smoothed.CNA.object, verbose=1) # Plot whole sample c13330 plotSample(segment.smoothed.CNA.object, sampleid="c13330") # Plot only chromosomes 1,3,5,7,9 from first sample plotSample(segment.smoothed.CNA.object, sampleid=1, chromlist=c(1,3,5,7,9)) } \keyword{nonparametric} DNAcopy/man/getbdry.Rd0000644000175000017500000000171614136047041014410 0ustar nileshnilesh\name{getbdry} \alias{getbdry} \alias{default.DNAcopy.bdry} \title{Sequential stopping boundary} \description{ Function to compute the sequential boundary for early stopping. } \usage{ getbdry(eta, nperm, max.ones, tol= 1e-2) } \arguments{ \item{eta}{Type I error rate of the boundary.} \item{nperm}{Number of permutations for the reference distribution.} \item{max.ones}{maximum number of ones given by "floor(nperm*alpha)+1".} \item{tol}{tolerance level for the iterations.} } \value{ A vector integer values of length max.ones*(max.ones+1)/2 corresponding to the boundary for the number of ones from 1 to max.ones. The default boundary for nperm=10000, eta=0.05, alpha=0.01 is stored in the data object "default.DNAcopy.bdry". Use this function to get the boundary for your favorite values for the parameters "nperm, eta, alpha" and use it for the argument "sbdry" in the function "segment." } \keyword{nonparametric} DNAcopy/man/glFrequency.Rd0000644000175000017500000000141214136047041015225 0ustar nileshnilesh\name{glFrequency} \alias{glFrequency} \title{Additional summary measured for the segments} \description{ This program computes the frequency of gains and losses for each probe as a function of level of mad. } \usage{ glFrequency(xout, threshold=1) } \arguments{ \item{xout}{an object of class DNAcopy} \item{threshold}{threshold value to call gain or loss} } \value{ A segment is called a gain or loss if the segment mean is at least the threshold* mad distance away from the median copy number level. The output is a data frame with five columns which give the chromosome (chrom), genomic position (maploc), the number of samples with available data (pfreq), and the gain (gain) and loss (loss). } \author{Venkatraman E. Seshan} \keyword{nonparametric} DNAcopy/man/plot.DNAcopy.Rd0000644000175000017500000001074614136047041015225 0ustar nileshnilesh\name{plot.DNAcopy} \alias{plot.DNAcopy} \title{Plot the data and results from segment of a CNA object} \description{ Plots the data from a copy number array experiment (aCGH, ROMA etc.) along with the results of segmenting it into regions of equal copy numbers. } \usage{ \method{plot}{DNAcopy}(x, plot.type=c("whole", "plateau", "samplebychrom", "chrombysample"), xmaploc=FALSE, altcol=TRUE, sbyc.layout= NULL, cbys.nchrom=1, cbys.layout=NULL, include.means=TRUE, zeroline=TRUE, pt.pch=NULL, pt.cex=NULL, pt.cols=NULL, segcol= NULL, zlcol=NULL, ylim=NULL, lwd=NULL, ...) } \arguments{ \item{x}{an object of class \code{DNAcopy} resulting from analyzing data from copy number array experiments.} \item{plot.type}{the type of plot.} \item{xmaploc}{logical flag to indicate that the X axis is the maploc position rather than the index. Since the segments are rearranged the plateau plot does not use maploc position.} \item{altcol}{logical flag to indicate if chromosomes should be plotted in alternating colors in the whole genome plot.} \item{sbyc.layout}{\code{layout} settings for the multifigure grid layout for the `samplebychrom' type. It should be specified as a vector of two integers which are the number of rows and columns. The default values are chosen based on the number of chromosomes to produce a near square graph. For normal genome it is 4x6 (24 chromosomes) plotted by rows.} \item{cbys.layout}{\code{layout} settings for the multifigure grid layout for the `chrombysample' type. As above it should be specified as number of rows and columns and the default chosen based on the number of samples.} \item{cbys.nchrom}{the number of chromosomes per page in the layout. The default is 1.} \item{include.means}{logical flag to indicate whether segment means are to be drawn.} \item{zeroline}{logical flag to indicate whether a horizontal line at y=0 is to be drawn.} \item{pt.pch}{the plotting character used for plotting the log-ratio values (default is ".").} \item{pt.cex}{the size of plotting character used for the log-ratio values (default is 3).} \item{pt.cols}{the color list for the points. The colors alternate between chromosomes. If missing the point colors are black and green.} \item{segcol}{the color of the lines indicating the segment means. If missing the line color is set to be red.} \item{zlcol}{the color of the zeroline. If missing it is set to be grey.} \item{ylim}{this argument is present to override the default limits which is the range of symmetrized log-ratios.} \item{lwd}{line weight of lines for segment mean and zeroline. If missing it is set to 3.} \item{...}{other arguments which will be passed to \code{plot} commands.} } \details{ There are four possible plot types. For the type `whole' the data are plotted for the entire genome. For the `samplebychrom' type a graph with each chromosome (of a given sample) is drawn in a separate figure on a multi-figure grid. For the `plateau' type the graph is drawn with the chromosome segments re-ordered by the segment means. For the `chrombysample' type the samples for a given chromosome are drawn in a 4x6 multi-figure grid in multiples of 24. By default the segments means are drawn. For multisample data each sample or chromosome is drawn on a separate sheet. When invoked interactively the user is prompted before advancing to the next sample. } \examples{ #Read in two examples from Snijders et al. data(coriell) #Combine into one CNA object to prepare for analysis on Chromosomes 1-23 CNA.object <- CNA(cbind(coriell$Coriell.05296,coriell$Coriell.13330), coriell$Chromosome,coriell$Position, data.type="logratio",sampleid=c("c05296","c13330")) #We generally recommend smoothing single point outliers before analysis #Make sure to check that the smoothing is proper smoothed.CNA.object <- smooth.CNA(CNA.object) #Segmentation at default parameters segment.smoothed.CNA.object <- segment(smoothed.CNA.object, verbose=1) #Plot whole studies plot(segment.smoothed.CNA.object, plot.type="w") #Plot each study by chromosome plot(segment.smoothed.CNA.object, plot.type="s") #Plot each chromosome across studies (6 per page) plot(segment.smoothed.CNA.object, plot.type="c", cbys.layout=c(2,1), cbys.nchrom=6) #Plot by plateaus plot(segment.smoothed.CNA.object, plot.type="p") } \keyword{nonparametric} DNAcopy/man/segment.Rd0000644000175000017500000001650114136047041014410 0ustar nileshnilesh\name{segment} \alias{segment} \title{Genome Segmentation Program} \description{ This program segments DNA copy number data into regions of estimated equal copy number using circular binary segmentation (CBS). } \usage{ segment(x, weights = NULL, alpha = 0.01, nperm = 10000, p.method = c("hybrid", "perm"), min.width=2, kmax=25, nmin=200, eta=0.05, sbdry=NULL, trim = 0.025, undo.splits = c("none", "prune", "sdundo"), undo.prune=0.05, undo.SD=3, verbose=1) } \arguments{ \item{x}{an object of class CNA} \item{weights}{a vector of weights for the probes. The weights should be inversely proportional to their variances. Currently all weights should be positive i.e. remove probes with zero weight prior to segmentation.} \item{alpha}{significance levels for the test to accept change-points.} \item{nperm}{number of permutations used for p-value computation.} \item{p.method}{method used for p-value computation. For the "perm" method the p-value is based on full permutation. For the "hybrid" method the maximum over the entire region is split into maximum of max over small segments and max over the rest. Approximation is used for the larger segment max. Default is hybrid.} \item{min.width}{the minimum number of markers for a changed segment. The default is 2 but can be made larger. Maximum possible value is set at 5 since arbitrary widths can have the undesirable effect of incorrect change-points when a true signal of narrow widths exists.} \item{kmax}{the maximum width of smaller segment for permutation in the hybrid method.} \item{nmin}{the minimum length of data for which the approximation of maximum statistic is used under the hybrid method. should be larger than 4*kmax} \item{eta}{the probability to declare a change conditioned on the permuted statistic exceeding the observed statistic exactly j (= 1,...,nperm*alpha) times.} \item{sbdry}{the sequential boundary used to stop and declare a change. This boundary is a function of nperm, alpha and eta. It can be obtained using the function "getbdry" and used instead of having the "segment" function compute it every time it is called.} \item{trim}{proportion of data to be trimmed for variance calculation for smoothing outliers and undoing splits based on SD.} \item{undo.splits}{A character string specifying how change-points are to be undone, if at all. Default is "none". Other choices are "prune", which uses a sum of squares criterion, and "sdundo", which undoes splits that are not at least this many SDs apart.} \item{undo.prune}{the proportional increase in sum of squares allowed when eliminating splits if undo.splits="prune".} \item{undo.SD}{the number of SDs between means to keep a split if undo.splits="sdundo".} \item{verbose}{level of verbosity for monitoring the program's progress where 0 produces no printout, 1 prints the current sample, 2 the current chromosome and 3 the current segment. The default level is 1.} } \value{ An object of class \code{DNAcopy}. It has three elements: \item{data}{The original CNA object which was the input for segment} \item{out}{a data frame with six columns. Each row of the data frame contains a segment for which there are six variables: the sample id, the chromosome number, the map position of the start of the segment, the map position of the end of the segment, the number of markers in the segment, and the average value in the segment.} \item{segRows}{a data frame with the start and end row of each segment in the data matrix. print command shows it with the showSegRows=T} \item{call}{the call that produced the output object.} } \details{ This function implements the cicular binary segmentation (CBS) algorithm of Olshen and Venkatraman (2004). Given a set of genomic data, either continuous or binary, the algorithm recursively splits chromosomes into either two or three subsegments based on a maximum t-statistic. A reference distribution, used to decided whether or not to split, is estimated by permutation. Options are given to eliminate splits when the means of adjacent segments are not sufficiently far apart. Note that after the first split the \eqn{\alpha}-levels of the tests for splitting are not unconditional. We recommend using one of the undoing options to remove change-points detected due to local trends (see the manuscript below for examples of local trends). Since the segmentation procedure uses a permutation reference distribution, R commands for setting and saving seeds should be used if the user wishes to reproduce the results. Data that are NA, Inf, NaN will be removed on a per sample basis for "genomdat" and all samples for "chrom" and "maploc". } \examples{ # test code on an easy data set set.seed(25) genomdat <- rnorm(500, sd=0.1) + rep(c(-0.2,0.1,1,-0.5,0.2,-0.5,0.1,-0.2),c(137,87,17,49,29,52,87,42)) plot(genomdat) chrom <- rep(1:2,c(290,210)) maploc <- c(1:290,1:210) test1 <- segment(CNA(genomdat, chrom, maploc)) # test code on a noisier and hence more difficult data set set.seed(51) genomdat <- rnorm(500, sd=0.2) + rep(c(-0.2,0.1,1,-0.5,0.2,-0.5,0.1,-0.2),c(137,87,17,49,29,52,87,42)) plot(genomdat) chrom <- rep(1:2,c(290,210)) maploc <- c(1:290,1:210) test2 <- segment(CNA(genomdat, chrom, maploc)) # test code for weighted CBS set.seed(97) wts <- sample(1:3, 500, replace=TRUE) genomdat <- rnorm(500, sd=0.3)/sqrt(wts) + rep(c(-0.2,0.1,1,-0.5,0.2,-0.5,0.1,-0.2),c(137,87,17,49,29,52,87,42)) plot(genomdat) chrom <- rep(1:2,c(290,210)) maploc <- c(1:290,1:210) test3 <- segment(CNA(genomdat, chrom, maploc), weights=wts) #A real analyis data(coriell) #Combine into one CNA object to prepare for analysis on Chromosomes 1-23 CNA.object <- CNA(cbind(coriell$Coriell.05296,coriell$Coriell.13330), coriell$Chromosome,coriell$Position, data.type="logratio",sampleid=c("c05296","c13330")) #We generally recommend smoothing single point outliers before analysis #Make sure to check that the smoothing is proper smoothed.CNA.object <- smooth.CNA(CNA.object) #Segmentation at default parameters segment.smoothed.CNA.object <- segment(smoothed.CNA.object, verbose=1) data(coriell) #Combine into one CNA object to prepare for analysis on Chromosomes 1-23 CNA.object <- CNA(cbind(coriell$Coriell.05296,coriell$Coriell.13330), coriell$Chromosome,coriell$Position, data.type="logratio",sampleid=c("c05296","c13330")) #We generally recommend smoothing single point outliers before analysis #Make sure to check that the smoothing is proper smoothed.CNA.object <- smooth.CNA(CNA.object) #Segmentation at default parameters segment.smoothed.CNA.object <- segment(smoothed.CNA.object, verbose=1) } \author{Venkatraman E. Seshan \email{seshanv@mskcc.org} and Adam Olshen \email{olshena@biostat.ucsf.edu} } \references{ Olshen, A. B., Venkatraman, E. S., Lucito, R., Wigler, M. (2004). Circular binary segmentation for the analysis of array-based DNA copy number data. \emph{Biostatistics} 5: 557-572. Venkatraman, E. S., Olshen, A. B. (2007) A faster circular binary segmentation algorithm for the analysis of array CGH data. \emph{Bioinformatics} 23: 657-63. } \keyword{nonparametric} DNAcopy/man/segments.p.Rd0000644000175000017500000000426714136047041015037 0ustar nileshnilesh\name{segments.p} \alias{segments.p} \title{p-values for the change-points} \description{ This program computes pseudo p-values and confidence intervals for the change-points found by the circular binary segmentation (CBS) algorithm. } \usage{ segments.p(x, ngrid=100, tol=1e-6, alpha=0.05, search.range=100, nperm=1000) } \arguments{ \item{x}{an object of class DNAcopy} \item{ngrid}{number grid points for the integral} \item{tol}{tolerance level for calculating nu} \item{alpha}{Confidence level is 1-alpha} \item{search.range}{statistic is maximized over nu +/- search.range} \item{nperm}{number of permutations for confidence interval} } \value{ a data frame with ten columns. The maximal statistic from binary segmentation, the p-values and lower and upper alpha/2 confidence limits (as genomic positions) are added to the six columns from the segment command. NOTE: THE p VALUES ARE APPROXIMATE TAIL PROBABILITIES. ANY VALUE GREATER THAN 0.1 CAN HAVE LARGE ERROR. p > 1 ARE REPLACED WITH 1. } \details{ The p-values are obtained by applying Siegmund's approximation for the maximal statistic from binary segmenting consecutive segments within a chromosome. This p-value is only to give the relative importance of the change-points as the CBS is different from the algorithm used here. The confidence intervals are obtained by a permutation algorithm. The data are permuted to the left and right of the identified change-point and the location of the maximal binary segmentation statistic computed. The confidence interval is given by the quantiles of the permutation distribution of the locations. The statistical properties of this confidence interval is unknown. It is used to give an idea of the uncertainity on the location of the change-points as the CBS is different from the algorithm used here. } \examples{ # test code on an easy data set set.seed(25) genomdat <- rnorm(500, sd=0.1) + rep(c(-0.2,0.1,1,-0.5,0.2,-0.5,0.1,-0.2),c(137,87,17,49,29,52,87,42)) plot(genomdat) chrom <- rep(1:2,c(290,210)) maploc <- c(1:290,1:210) test1 <- segment(CNA(genomdat, chrom, maploc)) segments.p(test1) } \author{Venkatraman E. Seshan} \keyword{nonparametric} DNAcopy/man/cytoBand.Rd0000644000175000017500000000056614136047041014515 0ustar nileshnilesh\name{cytoBand} \alias{cytoBand} \title{Cytogenic band data} \description{ Cytogenic band data from the goldenPath repository } \usage{data(cytoBand)} \format{A data frame containing five variables: chromosome, start and end positions, band name and giesma stain. } \source{ http://hgdownload.cse.ucsc.edu/goldenPath/hg19/database/cytoBand.txt.gz } \keyword{datasets} DNAcopy/man/subset.CNA.Rd0000644000175000017500000000246314136047041014655 0ustar nileshnilesh\name{subset.CNA} \alias{subset.CNA} \title{Subset a `Copy Number Array' data object} \description{ Function to return a subset of a copy number array data object by a list of chromosomes and sample. } \usage{ \method{subset}{CNA}(x, chromlist=NULL, samplelist=NULL, ...) } \arguments{ \item{x}{Copy number array data object} \item{chromlist}{chromosomes of interest. Should be a subset of the valid chromosome names in the original data.} \item{samplelist}{samples of interest. Can be integers denoting the samples of interest or a vector of valid sample names.} \item{...}{other arguments which may be passed to \code{subset}.} } \value{ An object of class \code{CNA} with the data for the list of chromosomes and samples of interest. } \examples{ data(coriell) #Combine into one CNA object to prepare for analysis on Chromosomes 1-23 CNA.object <- CNA(cbind(coriell$Coriell.05296,coriell$Coriell.13330), coriell$Chromosome,coriell$Position, data.type="logratio",sampleid=c("c05296","c13330")) #Take the first ten chromosomes of the first sample #subset.CNA.object <- subset.CNA(CNA.object,chromlist=1:10,samplelist="c05296") subset.CNA.object <- subset(CNA.object,chromlist=1:10,samplelist="c05296") } \keyword{nonparametric} DNAcopy/man/segments.summary.Rd0000644000175000017500000000171214136047041016265 0ustar nileshnilesh\name{segments.summary} \alias{segments.summary} \title{Additional summary measured for the segments} \description{ This program computes the standard deviation, median and the mad of the data for each segment found by the CBS algorithm. } \usage{ segments.summary(x) } \arguments{ \item{x}{an object of class DNAcopy} } \value{ a data frame with nine columns. The sd, median and mad of each segment is added to the six columns from the segment command. } \examples{ # test code on an easy data set set.seed(25) genomdat1 <- rnorm(500, sd=0.1) + rep(c(-0.2,0.1,1,-0.5,0.2,-0.5,0.1,-0.2),c(137,87,17,49,29,52,87,42)) genomdat2 <- rnorm(500, sd=0.1) + rep(c(-0.2,0.1,1,-0.5,0.2,-0.5,0.1,-0.2),c(137,87,17,49,29,52,87,42)) genomdat1[sample(1:500,5)] <- NA chrom <- rep(1:2,c(290,210)) maploc <- c(1:290,1:210) test1 <- segment(CNA(cbind(genomdat1,genomdat2), chrom, maploc)) segments.summary(test1) } \author{Venkatraman E. Seshan} \keyword{nonparametric} DNAcopy/man/zoomIntoRegion.Rd0000644000175000017500000000507614136047041015735 0ustar nileshnilesh\name{zoomIntoRegion} \alias{zoomIntoRegion} \title{Zoomed in view of genomic region} \description{ This program computes the frequency of gains and losses for each probe as a function of level of mad. } \usage{ zoomIntoRegion(x, chrom, sampleid, maploc.start=NULL, maploc.end=NULL, pt.pch=NULL, pt.cex=NULL, pt.col=NULL, segcol=NULL, seglwd=NULL, main=NULL, xlab=NULL, ylab=NULL, ...) } \arguments{ \item{x}{an object of class DNAcopy.} \item{chrom}{the chromosome in which the region lies.} \item{sampleid}{the sample of interest.} \item{maploc.start}{genomic start position of the region of interest. Default is the beginning of the chromosome.} \item{maploc.end}{genomic end position of the region of interest. Default is the end of the chromosome.} \item{pt.pch}{the plotting character used for plotting the log-ratio values (default is ".").} \item{pt.cex}{the size of plotting character used for the log-ratio values (default is 3 if "." and 1 otherwise).} \item{pt.col}{the color used for the points. Default is green3.} \item{segcol}{the color of the lines indicating the segment means. If missing the line color is set to be red.} \item{seglwd}{line weight of lines for segment mean and zeroline. If missing it is set to 3.} \item{main}{figure title. If missing will be generated by pasting the chromosome, range and sample name together.} \item{xlab}{x-axis label. If missing "Genomic position" will be used} \item{ylab}{y-axis label. If missing "log-ratio" will be used} \item{...}{additional plotting options.} } \details{ This command plots the region of interest with the log-ratio and segments. It works for a region from a single chromosome in a single sample. So if more than one chromosome and/or one sample are given only the first chromosome from the first sample will be used. } \examples{ data(coriell) #Combine into one CNA object to prepare for analysis on Chromosomes 1-23 CNA.object <- CNA(cbind(coriell$Coriell.05296,coriell$Coriell.13330), coriell$Chromosome,coriell$Position, data.type="logratio",sampleid=c("c05296","c13330")) #We generally recommend smoothing single point outliers before analysis #Make sure to check that the smoothing is proper smoothed.CNA.object <- smooth.CNA(CNA.object) #Segmentation at default parameters segment.smoothed.CNA.object <- segment(smoothed.CNA.object, verbose=1) zoomIntoRegion(segment.smoothed.CNA.object, chrom=10, sampleid="c05296") } \author{Venkatraman E. Seshan \email{seshanv@mskcc.org} } \keyword{nonparametric} DNAcopy/man/CNA.Rd0000644000175000017500000000443414136047041013351 0ustar nileshnilesh\name{CNA} \alias{CNA} \alias{print.CNA} \title{Create `Copy Number Array' data object} \description{ Creates a `copy number array' data object used for DNA copy number analyses by programs such as circular binary segmentation (CBS). } \usage{ CNA(genomdat, chrom, maploc, data.type=c("logratio","binary"), sampleid=NULL, presorted = FALSE) \method{print}{CNA}(x, \dots) } \arguments{ \item{genomdat}{a vector or matrix of data from array-CGH, ROMA, or other copy number experiments. If it is a matrix the rows correspond to the markers and the columns to the samples.} \item{chrom}{the chromosomes (or other group identifier) from which the markers came. Vector of length same as the number of rows of genomdat. If one wants the chromosomes to be ordered in the natural order, this variable should be numeric or ordered category.} \item{maploc}{the locations of marker on the genome. Vector of length same as the number of rows of genomdat. This has to be numeric.} \item{data.type}{logratio (aCGH, ROMA, etc.) or binary (LOH).} \item{sampleid}{sample identifier. If missing the samples are named by prefixing "Sample" to consecutive integers.} \item{presorted}{logical indicator telling if the data have already been sorted by chrom and maploc. Default is FALSE.} \item{x}{object returned by CNA} \item{...}{arguments to be passed onto print command called within.} } \value{ An object of class \code{CNA}. There is a \code{print} method that gives the number of samples and probes and the type of data. } \details{ Data that are NA, Inf, NaN will be removed on a per sample basis for "genomdat" and all samples for "chrom" and "maploc". If the chrom variable has non-numeric values make it into an ordered variable to get them ordered correctly. E.g. for human genome use: \code{chrom <- ordered(chrom, levels=c(1:22,"X","Y"))} to prepare the variable if chromosomes X and Y are present in your data. } \examples{ data(coriell) #Combine into one CNA object to prepare for analysis on Chromosomes 1-23 CNA.object <- CNA(cbind(coriell$Coriell.05296,coriell$Coriell.13330), coriell$Chromosome,coriell$Position, data.type="logratio",sampleid=c("c05296","c13330")) } \keyword{nonparametric} DNAcopy/src/0000755000175000017500000000000014136070260012467 5ustar nileshnileshDNAcopy/src/smoothCNA.f0000644000175000017500000000623214136047041014475 0ustar nileshnileshc n = length(gdat) i.e. number of markers and log-ratio c k is the neighborhood width c oSD = how far the outlier is to the nearest observation c sSD = how close should it be moved c nchr = number of chromosomes c cfrq = number of probes in respective chromosomes subroutine smoothLR(n, gdat, nchr, cfrq, sgdat, k, oSD, sSD) integer n, nchr, cfrq(nchr), k double precision gdat(n), sgdat(n), oSD, sSD integer i, j, ilo, ihi, k1, k2, j1, ic, cilo, cihi double precision mnnbd, mxnbd, distij, xmed c temporary array for finding median double precision, allocatable :: xnbhd(:) k2 = 2*k + 1 allocate(xnbhd(k2)) c initial values for start and end of chromosomes cilo = 1 cihi = 0 c loop over chromomsomes do 100 ic = 1, nchr c end of the current chromosome cihi = cihi + cfrq(ic) do 50 i = cilo, cihi c range of the neighborhood ilo = max(cilo, i-k) ihi = min(cihi, i+k) c check if ith observation is an outlier c initialize the distances to be large mxnbd = 100*oSD mnnbd = 100*oSD do 10 j = ilo, ihi if (j .ne. i) then c calculate distance from between ith and jth obsn distij = gdat(i) - gdat(j) c if distance is less than oSD no smoothing necessary if (abs(distij) .le. oSD) then sgdat(i) = gdat(i) go to 50 c otherwise calculate distances from above and below else c mxnbd is distance from above if (distij .lt. mxnbd) mxnbd = distij c mnnbd is distance from below if (-distij .lt. mnnbd) mnnbd = -distij endif endif 10 continue c if all the points in the nbhd are above than mxnbd will be negative c and mnnbd will be greater than oSD. Vice versa if all points below c c If both are negative then the ith point is singleton in the middle c but distance oSD away from all points in the nbhd. No smoothing done. if ((mxnbd .le. 0) .and. (mnnbd .le. 0)) then sgdat(i) = gdat(i) go to 50 else c calculate the median of the nbhd c number of points in the nbhd k1 = ihi - ilo + 1 c get the data into temporary array do 20 j = ilo, ihi xnbhd(j-ilo+1) = gdat(j) 20 continue c sort the data call qsort3(xnbhd, 1, k1) c median is the midpoint if n is odd and average of the two if even j1 = k1/2 if (k1 .eq. 2*j1) then xmed = (xnbhd(j1) + xnbhd(j1+1))/2 else xmed = xnbhd(j1+1) endif c if point is above the nbhd bring it down if (mxnbd .gt. 0) sgdat(i) = xmed + sSD c if point is below the nbhd bring it up if (mnnbd .gt. 0) sgdat(i) = xmed - sSD endif 50 continue c beginning of next chromosome cilo = cilo + cfrq(ic) 100 continue deallocate(xnbhd) return end DNAcopy/src/tailprobs.f0000644000175000017500000000603614136047041014643 0ustar nileshnileshc tail probability of circular binary segmentation statistic c from Siegmund (1988) or Yao (1989) paper double precision function tailp(b, delta, m, ngrid, tol) double precision b, delta, tol integer m, ngrid c it1tsq is the integral of 1/(t*(1-t))**2 double precision nu, it1tsq external nu, it1tsq double precision t, tl, dincr, bsqrtm, x, nux integer i dincr = (0.5d0 - delta)/dfloat(ngrid) bsqrtm = b/sqrt(dfloat(m)) tl = 0.5d0 - dincr t = 0.5d0 - 0.5d0*dincr tailp = 0.0d0 do 10 i = 1,ngrid tl = tl + dincr t = t + dincr x = bsqrtm/sqrt(t*(1-t)) nux = nu(x, tol) tailp = tailp + (nux**2)*it1tsq(tl, dincr) 10 continue tailp = 9.973557d-2*(b**3)*exp(-b**2/2)*tailp c since test is two-sided need to multiply tailp by 2 tailp = 2.0d0*tailp return end c integral of 1/(t*(1-t))**2 from x to x+a double precision function it1tsq(x, a) double precision x, a double precision y y = x + a - 0.5d0 it1tsq = (8.0d0*y)/(1.0d0 - 4.0d0*y**2) + 1 2.0d0*log((1.0d0 + 2.0d0*y)/(1.0d0 - 2.0d0*y)) y = x - 0.5d0 it1tsq = it1tsq - (8.0d0*y)/(1.0d0 - 4.0d0*y**2) - 1 2.0d0*log((1.0d0 + 2.0d0*y)/(1.0d0 - 2.0d0*y)) return end double precision function nu(x, tol) double precision x, tol double precision fpnorm external fpnorm double precision lnu0, lnu1, dk, xk integer i, k if (x .gt. 0.01d0) then lnu1 = log(2.0d0) - 2*log(x) lnu0 = lnu1 k = 2 dk = 0 do 10 i = 1, k dk = dk + 1 xk = -x*sqrt(dk)/2.0d0 lnu1 = lnu1 - 2.0d0*fpnorm(xk)/dk 10 continue do 50 while (dabs((lnu1-lnu0)/lnu1) .gt. tol) lnu0 = lnu1 do 20 i = 1,k dk = dk + 1 xk = -x*sqrt(dk)/2.0d0 lnu1 = lnu1 - 2.0d0*fpnorm(xk)/dk 20 continue k = 2*k 50 enddo else lnu1 = -0.583d0*x endif nu = exp(lnu1) return end c tail probability of binary segmentation statistic c from page 387 of Siegmund (1986) paper double precision function btailp(b, m, ng, tol) integer m, ng double precision b, tol double precision ll, ul, dincr, nulo, nuhi, x, x1, dm integer i, k double precision fpnorm, nu external fpnorm, nu dm = dfloat(m) k = 2 ll = b*sqrt(1.0/dfloat(m-k) - 1.0/dfloat(m)) ul = b*sqrt(1.0/dfloat(k) - 1.0/dfloat(m)) dincr = (ul - ll)/dfloat(ng) btailp = 0.0 x = ll x1 = x + (b**2)/(dm*x) nulo = nu(x1, tol)/x do 10 i = 1, ng x = x + dincr x1 = x + (b**2)/(dm*x) nuhi = nu(x1, tol)/x btailp = btailp + (nuhi + nulo)*dincr nulo = nuhi 10 continue btailp = b*exp(-b**2/2)*btailp/2.506628275 btailp = btailp + 2*(1.0-fpnorm(b)) return end DNAcopy/src/changepoints-wtd.f0000644000175000017500000001421114136047041016114 0ustar nileshnileshc Ternary segmentation with permutation reference distribution c probes have weights due to differences in variances subroutine wfindcpt(n,x,tss,wts,rwts,cwts,px,sx,nperm,cpval,ncpt, 1 icpt,hybrid,al0,hk,mncwt,delta,ngrid,sbn,sbdry,tol) integer n,nperm,ncpt,icpt(2),al0,hk,ngrid,sbn,sbdry(sbn) logical hybrid double precision x(n),tss,wts(n),rwts(n),cwts(n),px(n),sx(n), 1 cpval,mncwt(hk),delta,tol integer np,nrej,nrejc,iseg(2),n1,n2,n12,l,k double precision ostat,ostat1,pstat,tpval,pval1,pval2 c new functions to replace tmax and htmax (also tmaxo replaces tmax1) double precision tailp, wtmaxp, hwtmaxp, wtpermp external tailp, wtmaxp, hwtmaxp, wtpermp call rndstart() nrej = 0 ncpt = 0 c call the observed statistic routine call wtmaxo(n,x,wts,tss,sx,cwts,iseg,ostat,al0) ostat1 = sqrt(ostat) ostat = ostat * 0.99999 c if maximal t-statistic is too small (for now use 0.1) don't split if (ostat1 .le. 0.1) go to 500 c if maximal t-statistic is too large (for now use 7.0) split c also make sure it's not affected by outliers i.e. small seglength l = min(iseg(2) - iseg(1), n - iseg(2) + iseg(1)) if ((ostat1 .ge. 7.0) .and. (l .ge. 10)) go to 200 c o.w calculate p-value and decide if & how data are segmented if (hybrid) then call getmncwt(n, cwts, hk, mncwt, delta) c delta is a function of arc lengths pval1 = tailp(ostat1, delta, n, ngrid, tol) if (pval1 .gt. cpval) go to 500 pval2 = cpval - pval1 nrejc = int(pval2*dfloat(nperm)) k=nrejc*(nrejc+1)/2 + 1 do 50 np = 1,nperm c call permutation code for data with weights call wxperm(n,x,px,rwts) c call the small arc permutation statistic function pstat = hwtmaxp(n,hk,px,wts,sx,cwts,mncwt,al0) if (ostat.le.pstat) then nrej = nrej + 1 k = k + 1 endif if (nrej.gt.nrejc) go to 500 if (np .ge. sbdry(k)) go to 200 50 continue else nrejc = int(cpval*dfloat(nperm)) k=nrejc*(nrejc+1)/2 + 1 do 100 np = 1,nperm c call permutation code for data with weights call wxperm(n,x,px,rwts) c call full data permutation statistic function pstat = wtmaxp(n,px,wts,sx,cwts,al0) if (ostat.le.pstat) then nrej = nrej + 1 k = k + 1 endif if (nrej.gt.nrejc) go to 500 if (np .ge. sbdry(k)) go to 200 100 continue endif 200 if (iseg(2).eq.n) then ncpt = 1 icpt(1) = iseg(1) else if(iseg(1).eq.0) then ncpt = 1 icpt(1) = iseg(2) else l = 1 n1 = iseg(1) n12 = iseg(2) n2 = n12 - n1 tpval = wtpermp(n1,n2,n12,x(l),px,wts(l),rwts(l),nperm) if (tpval.le.cpval) then ncpt = 1 icpt(1) = iseg(1) endif l = iseg(1) + 1 n12 = n - iseg(1) n2 = n - iseg(2) n1 = n12 - n2 tpval = wtpermp(n1,n2,n12,x(l),px,wts(l),rwts(l),nperm) if (tpval.le.cpval) then ncpt = ncpt + 1 icpt(ncpt) = iseg(2) endif endif endif 500 call rndend() return end c ******* code to permute the data vector with weights ******** c since variance of probe i is inversely proportional to weights c multiply by square root, permute and then divide by square root subroutine wxperm(n,x,px,rwts) integer n double precision x(n),px(n),rwts(n) integer i,j double precision cc,tmpx double precision dunif external dunif do 10 i = 1,n px(i) = x(i)*rwts(i) 10 continue do 20 i = n,1,-1 cc = dunif() j = int(cc*dfloat(i))+1 tmpx = px(i) px(i) = px(j)/rwts(i) px(j) = tmpx 20 continue return end c function for the p-value of t-statistics for removing edge effects double precision function wtpermp(n1,n2,n,x,px,wts,rwts,nperm) integer n1,n2,n,nperm double precision x(n),px(n),wts(n),rwts(n) integer np,i,m1,j,nrej double precision xsum1,xsum2,xbar,ostat,pstat,rn1,rn2,rm1, 1 tstat, tss, rn, cc, tmpx double precision dunif external dunif if (n1.eq.1 .or. n2.eq.1) then nrej = nperm go to 110 endif xsum1 = 0.0 tss = 0.0 rn1 = 0.0 do 10 i=1,n1 px(i) = x(i)*rwts(i) xsum1 = xsum1 + wts(i)*x(i) tss = tss + wts(i)*x(i)**2 rn1 = rn1 + wts(i) 10 continue xsum2 = 0.0 rn2 = 0.0 do 20 i=n1+1,n px(i) = x(i) xsum2 = xsum2 + wts(i)*x(i) tss = tss + wts(i)*x(i)**2 rn2 = rn2 + wts(i) 20 continue rn = rn1 + rn2 xbar = (xsum1 + xsum2)/rn tss = tss - rn*(xbar**2) if (n1.le.n2) then m1 = n1 rm1 = rn1 ostat = 0.99999*abs(xsum1/rn1 - xbar) tstat = (ostat**2)*rn1*rn/rn2 else m1 = n2 rm1 = rn2 ostat = 0.99999*abs(xsum2/rn2 - xbar) tstat = (ostat**2)*rn2*rn/rn1 endif nrej = 0 tstat = tstat/((tss-tstat)/(dfloat(n)-2.0)) c if observed t is large (> 5) don't bother with permutation p-value c also make sure there are enough observations i.e. m1 >= 10 if ((tstat .gt. 25) .and. (m1 .ge. 10)) go to 110 do 100 np = 1,nperm xsum1 = 0 do 30 i = n,n-m1+1,-1 cc = dunif() j = int(cc*dfloat(i))+1 tmpx = px(i) px(i) = px(j) px(j) = tmpx c the observation should be divided by sqrt(wts(i)) to get the correct c probe variance. But should be multiplied by wts(i) for statistic xsum1 = xsum1 + px(i)*rwts(i) 30 continue pstat = abs(xsum1/rm1 - xbar) if (ostat.le.pstat) nrej = nrej + 1 100 continue 110 wtpermp = dfloat(nrej)/dfloat(nperm) return end DNAcopy/src/segmentp.f0000644000175000017500000000420014136047041014455 0ustar nileshnilesh subroutine bsegp(n, gendat, ostat, pval, ng, tol) integer n, ng double precision gendat(n), ostat, pval, tol double precision btmax, btailp external btmax, btailp ostat = btmax(n, gendat) c call dblepr("Max Stat",8,ostat,1) pval = btailp(ostat, n, ng, tol) if (pval .gt. 1) pval = 1.0d0 return end double precision function btmax(n, x) integer n double precision x(n) integer i double precision sumxi, btmaxi, dn, di, ostat sumxi = x(1) ostat = 0.0 dn = dfloat(n) di = 1.0 do 20 i = 2,n-2 di = di + 1.0 sumxi = sumxi + x(i) btmaxi = dn*(sumxi**2)/(di*(dn-di)) if (ostat .lt. btmaxi) then ostat = btmaxi c ibseg = i endif 20 continue btmax = sqrt(ostat) return end c pseudo confidence interval based on permutations subroutine bsegci(n, k, sumxk, x, px, sr, vfact, nperm, bsloc) integer n, k, sr(2), nperm, bsloc(nperm) double precision sumxk, x(n), px(n), vfact(n) integer k1, nk, np, ibseg call rndstart() k1 = k+1 nk = n-k do 10 np = 1, nperm call xperm(k,x,px) call xperm(nk,x(k1),px(k1)) call btmxci(n,k,sr,px,vfact,ibseg,sumxk) bsloc(np) = ibseg 10 continue call rndend() return end subroutine btmxci(n,k,sr,x,vfact,ibseg,sumxk) integer n,k,sr(2),ibseg double precision x(n),vfact(n),sumxk integer i double precision sumxi, ostat, btmaxi ostat = vfact(k)*(sumxk**2) ibseg = k sumxi = sumxk do 10 i = k-1,sr(1),-1 sumxi = sumxi - x(i+1) btmaxi = vfact(i)*(sumxi**2) if (ostat .lt. btmaxi) then ostat = btmaxi ibseg = i endif 10 continue sumxi = sumxk do 20 i = k+1,sr(2) sumxi = sumxi + x(i) btmaxi = vfact(i)*(sumxi**2) if (ostat .lt. btmaxi) then ostat = btmaxi ibseg = i endif 20 continue ostat = sqrt(ostat) return end DNAcopy/src/cbsWtstats.f0000644000175000017500000005656314136047041015017 0ustar nileshnileshc these are the subroutines to do the weigthed version of CBS c which is useful in order to merge data from multiple platforms c -------------------------------------------------------------- c This is relevant only for log-ratio not binary data c -------------------------------------------------------------- c function for calculating the full max weighted t-statistic c new approach to maximizing t-statistic subroutine wtmaxo(n,x,wts,tss,sx,cwts,iseg,ostat,al0) integer n,iseg(2),al0 double precision x(n),wts(n),tss,sx(n),cwts(n),ostat c c look at the partial sums in blocks of size sqrt(n) c integer ipsmin, ipsmax, ipsmin0, ipsmax0, nb, i, j, k, l, nb1, 1 nb2, bi, bj, ilo, ihi, jlo, jhi, ihi1, jlo1, jhi1, 2 tmaxi, tmaxj, nal0 double precision psum, psmin, psmax, psmin0, psmax0, bssmax, 1 bsslim, rn, sij1, sij2, sijmx0, bijbss, awtmax, psrnov2, 2 psdiff, psrj, psrn, psrnj, awtlo, awthi, awt1 c c use local arrays for working within blocks c block partial sum max and min double precision, allocatable :: bpsmax(:), bpsmin(:) c location of the max and min integer, allocatable :: bb(:), ibmin(:), ibmax(:) c t statistic corresponding to max for block i,j double precision, allocatable :: bssbij(:), bssijmax(:), awt(:) c row, column and order vector for reordering bssbij integer, allocatable :: bloci(:), blocj(:), loc(:) c calculate number of blocks (nb) and block boundaries (vector bb) rn = dfloat(n) if (n .ge. 50) then nb = nint(sqrt(dfloat(n))) else nb = 1 endif c the number of paiwise block comparison nb2 = nb*(nb+1)/2 c allocate memory allocate(bpsmax(nb), bpsmin(nb)) allocate(bb(nb), ibmin(nb), ibmax(nb)) allocate(bssbij(nb2), bssijmax(nb2), awt(nb2)) allocate(bloci(nb2), blocj(nb2), loc(nb2)) c block boundaries do 110 i = 1, nb bb(i) = nint(rn*(dfloat(i)/dfloat(nb))) 110 continue c find the max, min of partial sums and their locations within blocks ilo = 1 psum = 0 psmin0 = 0 psmax0 = 0 ipsmin0 = n ipsmax0 = n do 20 j = 1, nb sx(ilo) = psum + x(ilo)*wts(ilo) psmin = sx(ilo) ipsmin = ilo psmax = sx(ilo) ipsmax = ilo do 10 i = ilo+1, bb(j) sx(i) = sx(i-1) + x(i)*wts(i) if (sx(i) .lt. psmin) then psmin = sx(i) ipsmin = i endif if (sx(i) .gt. psmax) then psmax = sx(i) ipsmax = i endif 10 continue c store the block min, max and locations ibmin(j) = ipsmin ibmax(j) = ipsmax bpsmin(j) = psmin bpsmax(j) = psmax c adjust global min, max and locations if (psmin .lt. psmin0) then psmin0 = psmin ipsmin0 = ipsmin endif if (psmax .gt. psmax0) then psmax0 = psmax ipsmax0 = ipsmax endif c reset ilo to be the block boundary + 1 psum = sx(bb(j)) ilo = bb(j) + 1 20 continue c calculate bss for max s_i - min s_i psdiff = psmax0 - psmin0 c if the segment is all constant then psdiff = 0 and so bssmax = 0 if (psdiff .le. 0) then bssmax = 0 go to 120 endif psrn = cwts(n) psrj = abs(cwts(ipsmax0) - cwts(ipsmin0)) psrnj = psrj*(psrn-psrj) bssmax = (psdiff**2)/psrnj tmaxi = min(ipsmax0, ipsmin0) tmaxj = max(ipsmax0, ipsmin0) c for a pair of blocks (i,j) calculate the max absolute t-statistic c at the (min_i, max_j) and (max_i, min_j) locations c for other indices the t-statistic can be bounded using this c c if a block doesn't have the potential to exceed bssmax ignore it c calculate the bsslim for each block and include ones >= bssmax psrnov2 = psrn/2 l = 0 nal0 = n - al0 do 40 i = 1, nb do 30 j = i, nb c calculate bsslim if (i .eq. 1) then ilo = 1 else ilo = bb(i-1) + 1 endif ihi = bb(i) if (j .eq. 1) then jlo = 1 else jlo = bb(j-1) + 1 endif jhi = bb(j) c for wCBS calculated hi and lo arc weights instead of lengths awthi = cwts(jhi) - cwts(ilo) if (jhi - ilo .gt. nal0) then awthi = 0 do 35 k = 1, al0 awthi = max(awthi, cwts(nal0+k) - cwts(k)) 35 continue endif if (i .eq. j) then awtlo = cwts(ilo+al0) - cwts(ilo) do 36 k = ilo + 1, ihi - al0 awtlo = min(awtlo, cwts(k+al0) - cwts(k)) 36 continue else if (i+1 .eq. j) then awtlo = cwts(jlo) - cwts(jlo-al0) do 37 k = jlo - al0 + 1, ihi awtlo = min(awtlo, cwts(k+al0) - cwts(k)) 37 continue else awtlo = cwts(jlo) - cwts(ihi) endif c max S_k over block j - min S_k over block i sij1 = abs(bpsmax(j) - bpsmin(i)) c max S_k over block i - min S_k over block j sij2 = abs(bpsmax(i) - bpsmin(j)) c if i = j then sij1 and sij2 are the same sijmx0 = max(sij1, sij2) psrnj = min(awtlo*(psrn-awtlo), awthi*(psrn-awthi)) bsslim = (sijmx0**2)/psrnj c if its as large as bssmax add block if (bssmax .le. bsslim) then l = l+1 loc(l) = l bloci(l) = i blocj(l) = j bssijmax(l) = bsslim c max sij in the (i,j) block, t-statistic etc if (sij1 .gt. sij2) then awt(l) = abs(cwts(ibmax(j)) - cwts(ibmin(i))) bssbij(l) = (sij1**2)/(awt(l)*(psrn-awt(l))) else awt(l) = abs(cwts(ibmin(j)) - cwts(ibmax(i))) bssbij(l) = (sij2**2)/(awt(l)*(psrn-awt(l))) endif endif 30 continue 40 continue nb1 = l c Now sort the t-statistics by their magnitude call qsort4(bssbij, loc, 1, nb1) c now go through the blocks in reverse order (largest down) do 100 l = nb1, 1, -1 k = loc(l) c need to check a block only if it has potential to increase bss c rjlo is the smalllest (j-i) in the block and rjhi is the largest bsslim = bssijmax(k) if (bssmax .le. bsslim) then c bi, bj give the block location bi = bloci(k) bj = blocj(k) awtmax = awt(k) if (bi .eq. 1) then ilo = 1 else ilo = bb(bi-1) + 1 endif ihi = bb(bi) if (bj .eq. 1) then jlo = 1 else jlo = bb(bj-1) + 1 endif jhi = bb(bj) awthi = cwts(jhi) - cwts(ilo) if (bi .eq. bj) then awtlo = 0 else awtlo = cwts(jlo) - cwts(ihi) endif c c if arc wt is larger than half total wt (psrn/2) make is psrn - arc wt c if (awtmax .gt. psrn - awtmax) awtmax = psrn - awtmax c c if awtlo <= psrn/2 start from (ihi, jlo) and go up c if awthi >= psrn/2 start from (ilo, jhi) and go down c if (awtlo .le. psrnov2) then if (bi .eq.bj) then ihi1 = ihi - al0 else ihi1 = ihi endif do 60 i = ihi1, ilo, -1 jlo1 = max(i + al0, jlo) do 55 j = jlo1, jhi awt1 = cwts(j) - cwts(i) if (awt1 .le. awtmax) then bijbss = (sx(j) - sx(i))**2/(awt1*(psrn-awt1)) if (bijbss .gt. bssmax) then bssmax = bijbss tmaxi = i tmaxj = j endif endif 55 continue 60 continue endif c c make arc wt psrn - arc wt c awtmax = psrn - awtmax if (awthi .ge. psrnov2) then do 70 i = ilo, ihi if ((bi .eq. 1) .and. (bj .eq. nb)) then jhi1 = min(jhi, jhi - al0 + i) else jhi1 = jhi endif do 65 j = jhi1, jlo, -1 awt1 = cwts(j) - cwts(i) if (awt1 .ge. awtmax) then bijbss = (sx(j) - sx(i))**2/(awt1*(psrn-awt1)) if (bijbss .gt. bssmax) then bssmax = bijbss tmaxi = i tmaxj = j endif endif 65 continue 70 continue endif endif 100 continue 120 if (tss.le.bssmax+0.0001) tss = bssmax + 1.0 bssmax = bssmax/((tss-bssmax)/(rn-2.0)) c deallocate memory deallocate(bpsmax, bpsmin, bb, ibmin, ibmax) deallocate(bssbij, bssijmax, bloci, blocj, loc, awt) ostat = bssmax iseg(1) = tmaxi iseg(2) = tmaxj return end c function for calculating the full max wtd t-statistic on permuted data c using a new approach to maximizing t-statistic double precision function wtmaxp(n,px,wts,sx,cwts,al0) integer n,al0 double precision px(n),wts(n),sx(n),cwts(n) c c look at the partial sums in blocks of size sqrt(n) c integer ipsmin, ipsmax, ipsmin0, ipsmax0, nb, i, j, k, l, nb1, 1 nb2, bi, bj, ilo, ihi, jlo, jhi, ihi1, jlo1, jhi1, nal0 double precision psum, psmin, psmax, psmin0, psmax0, bssmax, 1 bsslim, rn, sij1, sij2, sijmx0, bijbss, awtmax, psrnov2, 2 psdiff, psrj, psrn, psrnj, awtlo, awthi, awt1, ssq, tss c c use local arrays for working within blocks c block partial sum max and min double precision, allocatable :: bpsmax(:), bpsmin(:) c location of the max and min integer, allocatable :: bb(:), ibmin(:), ibmax(:) c t statistic corresponding to max for block i,j double precision, allocatable :: bssbij(:), bssijmax(:), awt(:) c row, column and order vector for reordering bssbij integer, allocatable :: bloci(:), blocj(:), loc(:) c calculate number of blocks (nb) and block boundaries (vector bb) rn = dfloat(n) if (n .ge. 50) then nb = nint(sqrt(dfloat(n))) else nb = 1 endif c the number of paiwise block comparison nb2 = nb*(nb+1)/2 c allocate memory allocate(bpsmax(nb), bpsmin(nb)) allocate(bb(nb), ibmin(nb), ibmax(nb)) allocate(bssbij(nb2), bssijmax(nb2), awt(nb2)) allocate(bloci(nb2), blocj(nb2), loc(nb2)) c block boundaries do 110 i = 1, nb bb(i) = nint(rn*(dfloat(i)/dfloat(nb))) 110 continue c find the max, min of partial sums and their locations within blocks ilo = 1 psum = 0 psmin0 = 0 psmax0 = 0 ipsmin0 = n ipsmax0 = n ssq = 0 do 20 j = 1, nb sx(ilo) = psum + px(ilo)*wts(ilo) ssq = ssq + (px(ilo)**2)*wts(ilo) psmin = sx(ilo) ipsmin = ilo psmax = sx(ilo) ipsmax = ilo do 10 i = ilo+1, bb(j) sx(i) = sx(i-1) + px(i)*wts(i) ssq = ssq + (px(i)**2)*wts(i) if (sx(i) .lt. psmin) then psmin = sx(i) ipsmin = i endif if (sx(i) .gt. psmax) then psmax = sx(i) ipsmax = i endif 10 continue c store the block min, max and locations ibmin(j) = ipsmin ibmax(j) = ipsmax bpsmin(j) = psmin bpsmax(j) = psmax c adjust global min, max and locations if (psmin .lt. psmin0) then psmin0 = psmin ipsmin0 = ipsmin endif if (psmax .gt. psmax0) then psmax0 = psmax ipsmax0 = ipsmax endif c reset ilo to be the block boundary + 1 psum = sx(bb(j)) ilo = bb(j) + 1 20 continue c calculate bss for max s_i - min s_i psdiff = psmax0 - psmin0 psrn = cwts(n) tss = ssq - (sx(n)/psrn)**2 psrj = abs(cwts(ipsmax0) - cwts(ipsmin0)) psrnj = psrj*(psrn-psrj) bssmax = (psdiff**2)/psrnj c for a pair of blocks (i,j) calculate the max absolute t-statistic c at the (min_i, max_j) and (max_i, min_j) locations c for other indices the t-statistic can be bounded using this c c if a block doesn't have the potential to exceed bssmax ignore it c calculate the bsslim for each block and include ones >= bssmax psrnov2 = psrn/2 l = 0 nal0 = n - al0 do 40 i = 1, nb do 30 j = i, nb c calculate bsslim if (i .eq. 1) then ilo = 1 else ilo = bb(i-1) + 1 endif ihi = bb(i) if (j .eq. 1) then jlo = 1 else jlo = bb(j-1) + 1 endif jhi = bb(j) c for wCBS calculated hi and lo arc weights instead of lengths awthi = cwts(jhi) - cwts(ilo) if (jhi - ilo .gt. nal0) then awthi = 0 do 35 k = 1, al0 awthi = max(awthi, cwts(nal0+k) - cwts(k)) 35 continue endif if (i .eq. j) then awtlo = cwts(ilo+al0) - cwts(ilo) do 36 k = ilo + 1, ihi - al0 awtlo = min(awtlo, cwts(k+al0) - cwts(k)) 36 continue else if (i+1 .eq. j) then awtlo = cwts(jlo) - cwts(jlo-al0) do 37 k = jlo - al0 + 1, ihi awtlo = min(awtlo, cwts(k+al0) - cwts(k)) 37 continue else awtlo = cwts(jlo) - cwts(ihi) endif c max S_k over block j - min S_k over block i sij1 = abs(bpsmax(j) - bpsmin(i)) c max S_k over block i - min S_k over block j sij2 = abs(bpsmax(i) - bpsmin(j)) c if i = j then sij1 and sij2 are the same sijmx0 = max(sij1, sij2) psrnj = min(awtlo*(psrn-awtlo), awthi*(psrn-awthi)) bsslim = (sijmx0**2)/psrnj c if its as large as bssmax add block if (bssmax .le. bsslim) then l = l+1 loc(l) = l bloci(l) = i blocj(l) = j bssijmax(l) = bsslim c max sij in the (i,j) block, t-statistic etc if (sij1 .gt. sij2) then awt(l) = abs(cwts(ibmax(j)) - cwts(ibmin(i))) bssbij(l) = (sij1**2)/(awt(l)*(psrn-awt(l))) else awt(l) = abs(cwts(ibmin(j)) - cwts(ibmax(i))) bssbij(l) = (sij2**2)/(awt(l)*(psrn-awt(l))) endif endif 30 continue 40 continue nb1 = l c Now sort the t-statistics by their magnitude call qsort4(bssbij, loc, 1, nb1) c now go through the blocks in reverse order (largest down) do 100 l = nb1, 1, -1 k = loc(l) c need to check a block only if it has potential to increase bss c rjlo is the smalllest (j-i) in the block and rjhi is the largest bsslim = bssijmax(k) if (bssmax .le. bsslim) then c bi, bj give the block location bi = bloci(k) bj = blocj(k) awtmax = awt(k) if (bi .eq. 1) then ilo = 1 else ilo = bb(bi-1) + 1 endif ihi = bb(bi) if (bj .eq. 1) then jlo = 1 else jlo = bb(bj-1) + 1 endif jhi = bb(bj) awthi = cwts(jhi) - cwts(ilo) if (bi .eq. bj) then awtlo = 0 else awtlo = cwts(jlo) - cwts(ihi) endif c c if arc wt is larger than half total wt (psrn/2) make is psrn - arc wt c if (awtmax .gt. psrn - awtmax) awtmax = psrn - awtmax c c if awtlo <= psrn/2 start from (ihi, jlo) and go up c if awthi >= psrn/2 start from (ilo, jhi) and go down c if (awtlo .le. psrnov2) then if (bi .eq.bj) then ihi1 = ihi - al0 else ihi1 = ihi endif do 60 i = ihi1, ilo, -1 jlo1 = max(i + al0, jlo) do 55 j = jlo1, jhi awt1 = cwts(j) - cwts(i) if (awt1 .le. awtmax) then bijbss = (sx(j) - sx(i))**2/(awt1*(psrn-awt1)) if (bijbss .gt. bssmax) bssmax = bijbss endif 55 continue 60 continue endif c c make arc wt psrn - arc wt c awtmax = psrn - awtmax if (awthi .ge. psrnov2) then do 70 i = ilo, ihi if ((bi .eq. 1) .and. (bj .eq. nb)) then jhi1 = min(jhi, jhi - al0 + i) else jhi1 = jhi endif do 65 j = jhi1, jlo, -1 awt1 = cwts(j) - cwts(i) if (awt1 .ge. awtmax) then bijbss = (sx(j) - sx(i))**2/(awt1*(psrn-awt1)) if (bijbss .gt. bssmax) bssmax = bijbss endif 65 continue 70 continue endif endif 100 continue if (tss.le.bssmax+0.0001) tss = bssmax + 1.0 wtmaxp = bssmax/((tss-bssmax)/(rn-2.0)) c deallocate memory deallocate(bpsmax, bpsmin, bb, ibmin, ibmax) deallocate(bssbij, bssijmax, bloci, blocj, loc, awt) return end c function for the max (over small arcs) wtd t-statistic on permuted data c new code to speed up this part 4/1/2010 double precision function hwtmaxp(n,k,px,wts,sx,cwts,mncwt,al0) integer n,k,al0 double precision px(n),wts(n),sx(n),cwts(n),mncwt(k) integer i, j, nmj, ipj, ipnmj double precision rn, rj, rnj, bssmax, bssij, psmin, psmax, psdiff, 1 bsslim, ssq, tss c create blocks of size k (or k+1) to span 1 thru n c block partial sum max and min double precision, allocatable :: bpsmax(:), bpsmin(:) c location of the max and min integer, allocatable :: bb(:) c variables to work on block specific data integer nb, ilo, ihi, l double precision psum, psdiffsq rn = dfloat(n) c number of blocks nb = int(rn/dfloat(k)) c allocate memory allocate(bpsmax(nb), bpsmin(nb)) allocate(bb(nb)) c block boundaries do 110 i = 1, nb bb(i) = nint(rn*(dfloat(i)/dfloat(nb))) 110 continue c don't need global min and max c find the max, min of partial sums and their locations within blocks ilo = 1 psum = 0 ssq = 0.0d0 bssmax = 0.0d0 rn = cwts(n) do 20 j = 1, nb sx(ilo) = psum + px(ilo)*wts(ilo) ssq = ssq + wts(ilo)*px(ilo)**2 psmin = sx(ilo) ipsmin = ilo psmax = sx(ilo) ipsmax = ilo do 10 i = ilo+1, bb(j) sx(i) = sx(i-1) + px(i)*wts(i) ssq = ssq + wts(i)*px(i)**2 if (sx(i) .lt. psmin) then psmin = sx(i) ipsmin = i endif if (sx(i) .gt. psmax) then psmax = sx(i) ipsmax = i endif 10 continue c store the block min, max and locations bpsmin(j) = psmin bpsmax(j) = psmax c reset ilo to be the block boundary + 1 psum = sx(bb(j)) ilo = bb(j) + 1 c calculate the bss at the block max & min pr i = abs(ipsmin - ipsmax) if ((i .le. k) .and. (i .ge. al0)) then rj = abs(cwts(ipsmax) - cwts(ipsmin)) rnj = rj*(rn-rj) bssij = (bpsmax(j) - bpsmin(j))**2/rnj if (bssmax .lt. bssij) bssmax = bssij endif 20 continue tss = ssq - (sx(n)/rn)**2 c check the first block ilo = 1 ihi = bb(1) psdiff = bpsmax(1) - bpsmin(1) psdiffsq = psdiff**2 do 40 j = al0,k rj = mncwt(j) bsslim = psdiffsq/(rj*(rn-rj)) if (bsslim .lt. bssmax) go to 50 sxmx = 0.0d0 do 30 i = ilo,ihi-j ipj = i+j rj = cwts(ipj) - cwts(i) bssij = (sx(ipj) - sx(i))**2/(rj*(rn-rj)) if (bssij .gt. bssmax) bssmax = bssij 30 continue 40 continue c now the minor arcs spanning the end (n) 50 psdiff = max(abs(bpsmax(1)-bpsmin(nb)), abs(bpsmax(nb)-bpsmin(1))) psdiffsq = psdiff**2 do 70 j = al0,k rj = mncwt(j) bsslim = psdiffsq/(rj*(rn-rj)) if (bsslim .lt. bssmax) go to 100 nmj = n-j do 60 i = 1,j ipnmj = i + nmj rj = cwts(ipnmj) - cwts(i) bssij = (sx(ipnmj) - sx(i))**2/(rj*(rn-rj)) if (bssij .gt. bssmax) bssmax = bssij 60 continue 70 continue c now the other blocks 100 do 200 l = 2,nb ilo = bb(l-1)+1 ihi = bb(l) psdiff = bpsmax(l) - bpsmin(l) psdiffsq = psdiff**2 do 140 j = al0,k rj = mncwt(j) bsslim = psdiffsq/(rj*(rn-rj)) if (bsslim .lt. bssmax) go to 150 sxmx = 0.0d0 do 130 i = ilo,ihi-j ipj = i+j rj = cwts(ipj) - cwts(i) bssij = (sx(ipj) - sx(i))**2/(rj*(rn-rj)) if (bssij .gt. bssmax) bssmax = bssij 130 continue 140 continue 150 psdiff = max(abs(bpsmax(l)-bpsmin(l-1)), 1 abs(bpsmax(l-1)-bpsmin(l))) psdiffsq = psdiff**2 do 170 j = al0,k rj = mncwt(j) bsslim = psdiffsq/(rj*(rn-rj)) if (bsslim .lt. bssmax) go to 200 do 160 i = ilo-j,ilo-1 ipj = i+j rj = cwts(ipj) - cwts(i) bssij = (sx(ipj) - sx(i))**2/(rj*(rn-rj)) if (bssij .gt. bssmax) bssmax = bssij 160 continue 170 continue 200 continue c call dblepr("bss max", 7, bssmax, 1) if (tss .le. bssmax+0.0001d0) tss = bssmax + 1.0d0 hwtmaxp = bssmax/((tss-bssmax)/(dfloat(n)-2.0d0)) c deallocate memory deallocate(bpsmax, bpsmin, bb) return end c the new statistic routine doesn't compute mncwt subroutine getmncwt(n, cwts, k, mncwt, delta) integer n, k double precision cwts(n), mncwt(k), delta integer i, j, nmj double precision rj, rn rn = cwts(n) do 30 j = 1,k mncwt(j) = cwts(j) nmj = n-j do 10 i = 1,nmj rj = cwts(i+j) - cwts(i) mncwt(j) = min(mncwt(j), rj) 10 continue do 20 i = 1, j rj = cwts(i+nmj) - cwts(i) mncwt(j) = min(mncwt(j), rn-rj) 20 continue 30 continue j = k+1 nmj = n-j delta = cwts(j) do 40 i = 1,nmj rj = cwts(i+j) - cwts(i) delta = min(delta, rj) 40 continue do 50 i = 1, j rj = cwts(i+nmj) - cwts(i) delta = min(delta, rn-rj) 50 continue delta = delta/cwts(n) return end DNAcopy/src/changepoints.f0000644000175000017500000001421114136047041015320 0ustar nileshnileshc Ternary segmentation with permutation reference distribution subroutine fndcpt(n,x,tss,px,sx,nperm,cpval,ncpt,icpt,ibin, 1 hybrid,al0,hk,delta,ngrid,sbn,sbdry,tol) integer n,nperm,ncpt,icpt(2),al0,hk,ngrid,sbn,sbdry(sbn) logical ibin,hybrid double precision x(n),tss,px(n),sx(n),cpval,delta,tol integer np,nrej,nrejc,iseg(2),n1,n2,n12,l,k double precision ostat,ostat1,pstat,tpval,pval1,pval2 c new functions to replace tmax and htmax (also tmaxo replaces tmax1) double precision tailp, tmaxp, htmaxp, tpermp external tailp, tmaxp, htmaxp, tpermp call rndstart() nrej = 0 ncpt = 0 c call tmax1(n,twon,x,tss,sx,tx,iseg,ostat,ibin) call tmaxo(n,x,tss,sx,iseg,ostat,al0,ibin) ostat1 = sqrt(ostat) ostat = ostat * 0.99999 c call dblepr("Max Stat",8,ostat,1) c call intpr("Location",8,iseg,2) c if maximal t-statistic is too small (for now use 0.1) don't split if (ostat1 .le. 0.1) go to 500 c if maximal t-statistic is too large (for now use 7.0) split c also make sure it's not affected by outliers i.e. small seglength l = min(iseg(2) - iseg(1), n - iseg(2) + iseg(1)) if ((ostat1 .ge. 7.0) .and. (l .ge. 10)) go to 200 c o.w calculate p-value and decide if & how data are segmented if (hybrid) then pval1 = tailp(ostat1, delta, n, ngrid, tol) if (pval1 .gt. cpval) go to 500 pval2 = cpval - pval1 nrejc = int(pval2*dfloat(nperm)) k=nrejc*(nrejc+1)/2 + 1 do 50 np = 1,nperm call xperm(n,x,px) c pstat = htmax(n,twon,hk,tss,px,sx,tx,ibin) pstat = htmaxp(n,hk,tss,px,sx,al0,ibin) if (ostat.le.pstat) then nrej = nrej + 1 k = k + 1 endif if (nrej.gt.nrejc) go to 500 if (np .ge. sbdry(k)) go to 200 50 continue else nrejc = int(cpval*dfloat(nperm)) k=nrejc*(nrejc+1)/2 + 1 do 100 np = 1,nperm call xperm(n,x,px) c pstat = tmax(n,twon,tss,px,sx,tx,ibin) pstat = tmaxp(n,tss,px,sx,al0,ibin) c call dblepr("Perm Max Stat",13,pstat,1) if (ostat.le.pstat) then nrej = nrej + 1 k = k + 1 endif c call intpr("num rej",7,nrej,1) if (nrej.gt.nrejc) go to 500 if (np .ge. sbdry(k)) go to 200 100 continue endif 200 if (iseg(2).eq.n) then ncpt = 1 icpt(1) = iseg(1) else if(iseg(1).eq.0) then ncpt = 1 icpt(1) = iseg(2) else l = 1 n1 = iseg(1) n12 = iseg(2) n2 = n12 - n1 tpval = tpermp(n1,n2,n12,x(l),px,nperm) c call dblepr("binseg p-value",14,tpval,1) if (tpval.le.cpval) then ncpt = 1 icpt(1) = iseg(1) endif l = iseg(1) + 1 n12 = n - iseg(1) n2 = n - iseg(2) n1 = n12 - n2 tpval = tpermp(n1,n2,n12,x(l),px,nperm) c call dblepr("binseg p-value",14,tpval,1) if (tpval.le.cpval) then ncpt = ncpt + 1 icpt(ncpt) = iseg(2) endif endif endif 500 call rndend() return end c code to permute the data vector subroutine xperm(n,x,px) integer n double precision x(n),px(n) integer i,j double precision cc,tmpx double precision dunif external dunif do 10 i = 1,n px(i) = x(i) 10 continue do 20 i = n,1,-1 cc = dunif() j = int(cc*dfloat(i))+1 tmpx = px(i) px(i) = px(j) px(j) = tmpx 20 continue return end c function for the p-value of t-statistics for removing edge effects double precision function tpermp(n1,n2,n,x,px,nperm) integer n1,n2,n,nperm double precision x(n),px(n) integer np,i,m1,j,nrej double precision xsum1,xsum2,xbar,ostat,pstat,rn1,rn2,rm1, 1 tstat, tss, rn, cc, tmpx double precision dunif external dunif rn1 = dfloat(n1) rn2 = dfloat(n2) rn = rn1 + rn2 if (n1.eq.1 .or. n2.eq.1) then nrej = nperm go to 110 endif xsum1 = 0.0 tss = 0.0 do 10 i=1,n1 px(i) = x(i) xsum1 = xsum1 + x(i) tss = tss + x(i)**2 10 continue xsum2 = 0.0 do 20 i=n1+1,n px(i) = x(i) xsum2 = xsum2 + x(i) tss = tss + x(i)**2 20 continue xbar = (xsum1 + xsum2)/rn tss = tss - rn*(xbar**2) if (n1.le.n2) then m1 = n1 rm1 = rn1 ostat = 0.99999*abs(xsum1/rn1 - xbar) tstat = (ostat**2)*rn1*rn/rn2 else m1 = n2 rm1 = rn2 ostat = 0.99999*abs(xsum2/rn2 - xbar) tstat = (ostat**2)*rn2*rn/rn1 endif c call dblepr("O-Stat",6,ostat,1) nrej = 0 tstat = tstat/((tss-tstat)/(rn-2.0)) c call dblepr("T-square",8,tstat,1) c if observed t is large (> 5) don't bother with permutation p-value c also make sure there are enough observations i.e. m1 >= 10 if ((tstat .gt. 25) .and. (m1 .ge. 10)) go to 110 do 100 np = 1,nperm c******************************************* c the following is very inefficient c******************************************* c call xperm(n,x,px) c xsum1 = 0.0 c do 30 i=1,m1 c xsum1 = xsum1 + px(i) c 30 continue c******************************************* c changed to the following: instead of c full permutation sample m1 w.o. repl c******************************************* xsum1 = 0 do 30 i = n,n-m1+1,-1 cc = dunif() j = int(cc*dfloat(i))+1 tmpx = px(i) px(i) = px(j) px(j) = tmpx xsum1 = xsum1 + px(i) 30 continue pstat = abs(xsum1/rm1 - xbar) c call dblepr("P-Stat",6,pstat,1) if (ostat.le.pstat) nrej = nrej + 1 100 continue 110 tpermp = dfloat(nrej)/dfloat(nperm) return end DNAcopy/src/esegment.f0000644000175000017500000000250514136047041014450 0ustar nileshnileshc for binary segmentation of exon data re-use the segment.p code c with one-sided p-value subroutine esegp(n, exndat, ostat, eloc, pval, ng, tol) integer n, eloc, ng double precision exndat(n), ostat, pval, tol double precision btailp external btailp integer i double precision tss tss = 0 do 10 i = 1, n tss = tss + exndat(i)**2 10 continue call etmax(n, exndat, tss, ostat, eloc) c call dblepr("Max Stat",8,ostat,1) pval = btailp(ostat, n, ng, tol) pval = pval/2 if (pval .gt. 1) pval = 1.0d0 return end c looking for increase in expression - use a one-sided t-statistic c t_i = S_i*sqrt(n/(i*(n-i)))/sqrt((tss - S_i^2*n/(i*(n-i)))/(n-2)) subroutine etmax(n, x, tss, ostat, eloc) integer n, eloc double precision x(n), tss, ostat integer i double precision sumxi, btmaxi, dn, di sumxi = x(1) ostat = 0.0 eloc = -1 dn = dfloat(n) di = 1.0 do 20 i = 2,n-2 di = di + 1.0 sumxi = sumxi + x(i) btmaxi = -sumxi/sqrt(di*(dn-di)) if (ostat .lt. btmaxi) then ostat = btmaxi eloc = i endif 20 continue ostat = (ostat/sqrt(tss - dn*ostat**2))*sqrt(dn*(dn-2)) return end DNAcopy/src/fpnorm.c0000644000175000017500000000022514136047041014134 0ustar nileshnilesh#include #include /* Fortran function for standard normal CDF */ double F77_SUB(fpnorm)(double *x) { return pnorm(*x, 0, 1, 1, 0); } DNAcopy/src/rshared.c0000644000175000017500000000024114136047041014261 0ustar nileshnilesh#include void F77_SUB(rndstart)(void) { GetRNGstate(); } void F77_SUB(rndend)(void) { PutRNGstate(); } double F77_SUB(dunif)(void) { return unif_rand(); } DNAcopy/src/prune.f0000644000175000017500000000561714136047041014001 0ustar nileshnilesh subroutine prune(n,x,nseg,lseg,pcut,sx,ncpt,loc,loc1,pncpt) integer n, nseg, lseg(nseg), ncpt, loc(ncpt), loc1(2,ncpt), pncpt double precision x(n), pcut, sx(nseg) integer i, j, k, kmj double precision ssq, wssqk, wssq1, wssqj logical jleft double precision errssq external errssq ssq = 0.0 do 10 i = 1,n ssq = ssq + x(i)**2 10 continue k = 0 do 15 i = 1,nseg sx(i) = 0 do 14 j = 1,lseg(i) k = k + 1 sx(i) = sx(i) + x(k) 14 continue 15 continue k = nseg - 1 do 16 i = 1,k loc(i) = i loc1(2,i) = i 16 continue wssqk = ssq - errssq(nseg,lseg,sx,k,loc) do 100 j = k-1, 1, -1 kmj = k - j jleft = .TRUE. do 20 i = 1,j loc(i) = i loc1(1,i) = i 20 continue wssqj = ssq - errssq(nseg,lseg,sx,j,loc) do 30 while(jleft) call combn(j, kmj, loc, jleft) wssq1 = ssq - errssq(nseg,lseg,sx,j,loc) if (wssq1 .le. wssqj) then wssqj = wssq1 do 25 i = 1,j loc1(1,i) = loc(i) 25 continue endif 30 continue if (wssqj/wssqk .gt. 1+pcut) then pncpt = j+1 do 35 i = 1,pncpt loc(i) = loc1(2,i) 35 continue return else do 40 i = 1,j loc1(2,i) = loc1(1,i) 40 continue endif 100 continue pncpt = 0 return end double precision function errssq(nseg,lseg,sx,k,loc) integer nseg, lseg(nseg),k,loc(k) double precision sx(nseg) double precision segsx integer segnx, i, j errssq = 0.0 segsx = 0.0 segnx = 0 do 10 i = 1,loc(1) segsx = segsx + sx(i) segnx = segnx + lseg(i) 10 continue errssq = errssq + segsx**2/dfloat(segnx) do 20 j = 2,k segsx = 0.0 segnx = 0 do 15 i = loc(j-1)+1,loc(j) segsx = segsx + sx(i) segnx = segnx + lseg(i) 15 continue errssq = errssq + segsx**2/dfloat(segnx) 20 continue segsx = 0.0 segnx = 0 do 25 i = loc(k)+1,nseg segsx = segsx + sx(i) segnx = segnx + lseg(i) 25 continue errssq = errssq + segsx**2/dfloat(segnx) return end c c This program generates Choose(n,r) combinations one at a time c Adapted from Algorithm AS 88 Appl. Statist. (1975) Vol.24, No. 3 c subroutine combn(r, nmr, loc, rleft) integer r, nmr, loc(r) logical rleft integer i,j i = r do 10 while (loc(i) .eq. nmr+i) i = i-1 10 continue loc(i) = loc(i) + 1 do 20 j = i+1,r loc(j) = loc(j-1)+1 20 continue if (loc(1) .eq. nmr+1) rleft = .FALSE. return end DNAcopy/src/flchoose.c0000644000175000017500000000023114136047041014432 0ustar nileshnilesh#include #include /* Fortran function for log-combinations */ double F77_SUB(flchoose)(double *n, double *k) { return lchoose(*n, *k); } DNAcopy/src/getbdry.f0000644000175000017500000000673114136047041014306 0ustar nileshnilesh subroutine getbdry(eta, m, nperm, mb, ibdry, etastr, tol) integer m, nperm, mb, ibdry(mb) double precision eta, etastr(m), tol double precision eta0, etalo, etahi, plo, phi, pexcd integer j, l l = 1 ibdry(1) = nperm-int(dfloat(nperm)*eta) etastr(1) = eta eta0 = eta do 20 j = 2,m etahi = eta0*1.1 call etabdry(nperm, etahi, j, ibdry(l+1)) call pexceed(nperm, j, ibdry(l+1), phi) etalo = eta0*0.25 call etabdry(nperm, etalo, j, ibdry(l+1)) call pexceed(nperm, j, ibdry(l+1), plo) do 10 while ((etahi-etalo)/etalo .gt. tol) eta0 = etalo + (etahi-etalo)*(eta-plo)/(phi-plo) call etabdry(nperm, eta0, j, ibdry(l+1)) call pexceed(nperm, j, ibdry(l+1), pexcd) if (pexcd .gt. eta) then etahi = eta0 phi = pexcd else etalo = eta0 plo = pexcd endif 10 continue etastr(j) = eta0 l = l+j 20 continue return end subroutine etabdry(nperm, eta0, n1s, ibdry) integer nperm, n1s, ibdry(n1s) double precision eta0 double precision fphypr external fphypr integer i, k double precision di, dn, dn1s, dk, tprob dn1s = dfloat(n1s) dn = dfloat(nperm-n1s) k = 0 dk = 0.0d0 do 10 i = 1, nperm di = dfloat(i) tprob = fphypr(dk, dn1s, dn, di) if (tprob .le. eta0) then k = k+1 dk = dk + 1.0d0 ibdry(k) = i endif 10 continue return end subroutine pexceed(nperm, n1s, ibdry, pexcd) integer nperm, n1s, ibdry(n1s) double precision pexcd double precision dn, dk, dn1, dk1, dn2, dk2, dn3, dk3, dlcnk integer i double precision flchoose external flchoose dn = dfloat(nperm) dk = dfloat(n1s) dn1 = dfloat(nperm-ibdry(1)) dlcnk = flchoose(dn, dk) pexcd = exp(flchoose(dn1, dk) - dlcnk) if (n1s .ge. 2) then dn1 = dfloat(ibdry(1)) dn = dfloat(nperm-ibdry(2)) dk = dfloat(n1s-1) pexcd = pexcd + exp(log(dn1) + flchoose(dn, dk) - dlcnk) endif if (n1s .ge. 3) then dn1 = dfloat(ibdry(1)) dn2 = dfloat(ibdry(2)) dn = dfloat(nperm-ibdry(3)) dk = dfloat(n1s-2) pexcd = pexcd + 1 exp(log(dn1) + log(dn1-1.0) - log(2.0) + 2 flchoose(dn, dk) - dlcnk) + 3 exp(log(dn1) + log(dn2-dn1) + flchoose(dn, dk) - dlcnk) endif if (n1s .gt. 3) then do 10 i = 4, n1s dn1 = dfloat(ibdry(i-3)) dk1 = dfloat(i-1) dk2 = dfloat(i-2) dk3 = dfloat(i-3) dn2 = dfloat(ibdry(i-2)) dn3 = dfloat(ibdry(i-1)) dn = dfloat(nperm-ibdry(i)) dk = dfloat(n1s-i+1) pexcd = pexcd + 1 exp(flchoose(dn1, dk1) + flchoose(dn, dk) - dlcnk) + 2 exp(flchoose(dn1, dk2) + log(dn3-dn1) + 3 flchoose(dn, dk) - dlcnk) + 4 exp(flchoose(dn1, dk3) + log(dn2-dn1) + log(dn3-dn2) + 3 flchoose(dn, dk) - dlcnk) + 5 exp(flchoose(dn1, dk3) + log(dn2-dn1) - log(2.0) + 6 log(dn2-dn1-1.0) + flchoose(dn, dk) - dlcnk) 10 continue endif return end DNAcopy/src/cbststats.f0000644000175000017500000006137314136047041014663 0ustar nileshnileshc new approach to maximizing t-statistic c dynamic memory allocation using allocatable arrays subroutine tmaxo(n,x,tss,sx,iseg,ostat,al0,ibin) integer n,iseg(2),al0 double precision x(n),tss,sx(n),ostat logical ibin c c look at the partial sums in blocks of size sqrt(n) c integer ipsmin, ipsmax, ipsmin0, ipsmax0, nb, i, j, k, l, nb1, 1 nb2, bi, bj, ilo, ihi, jlo, jhi, alenmax, i2j, sxmxi, 2 alenlo, alenhi, tmaxi, tmaxj, ixlo, ixhi, nal0 double precision psum, psmin, psmax, psmin0, psmax0, bssmax, 1 bsslim, rn, rj, rjhi, rjlo, rnjov1, sij1, sij2, sijmx0, 2 absx, sxmx, bijbss, rnov2, psdiff c c use local arrays for working within blocks c block partial sum max and min double precision, allocatable :: bpsmax(:), bpsmin(:) c location of the max and min integer, allocatable :: bb(:), ibmin(:), ibmax(:) c t statistic corresponding to max for block i,j (and max possible) double precision, allocatable :: bssbij(:), bssijmax(:) c row, column and order vector for reordering bssbij integer, allocatable :: bloci(:), blocj(:), loc(:), alen(:) c calculate number of blocks (nb) and block boundaries (vector bb) rn = dfloat(n) if (n .ge. 50) then nb = nint(sqrt(dfloat(n))) else nb = 1 endif c the number of paiwise block comparison nb2 = nb*(nb+1)/2 c allocate memory allocate(bpsmax(nb), bpsmin(nb)) allocate(bb(nb), ibmin(nb), ibmax(nb)) allocate(bssbij(nb2), bssijmax(nb2)) allocate(bloci(nb2), blocj(nb2), loc(nb2), alen(nb2)) c block boundaries do 110 i = 1, nb bb(i) = nint(rn*(dfloat(i)/dfloat(nb))) 110 continue c find the max, min of partial sums and their locations within blocks ilo = 1 psum = 0 psmin0 = 0 psmax0 = 0 ipsmin0 = n ipsmax0 = n do 20 j = 1, nb sx(ilo) = psum + x(ilo) psmin = sx(ilo) ipsmin = ilo psmax = sx(ilo) ipsmax = ilo do 10 i = ilo+1, bb(j) sx(i) = sx(i-1) + x(i) if (sx(i) .lt. psmin) then psmin = sx(i) ipsmin = i endif if (sx(i) .gt. psmax) then psmax = sx(i) ipsmax = i endif 10 continue c store the block min, max and locations ibmin(j) = ipsmin ibmax(j) = ipsmax bpsmin(j) = psmin bpsmax(j) = psmax c adjust global min, max and locations if (psmin .lt. psmin0) then psmin0 = psmin ipsmin0 = ipsmin endif if (psmax .gt. psmax0) then psmax0 = psmax ipsmax0 = ipsmax endif c reset ilo to be the block boundary + 1 psum = sx(bb(j)) ilo = bb(j) + 1 20 continue c calculate bss for max s_i - min s_i psdiff = psmax0 - psmin0 rj = dfloat(abs(ipsmax0 - ipsmin0)) rnjov1 = rn/(rj*(rn-rj)) if (ibin) then bssmax = rnjov1*(psdiff-0.5)**2 else bssmax = rnjov1*psdiff**2 endif tmaxi = min(ipsmax0, ipsmin0) tmaxj = max(ipsmax0, ipsmin0) c if the segment is all constant then psdiff = 0 and so bssmax = 0 if (psdiff .le. 0) then bssmax = 0 go to 120 endif c for a pair of blocks (i,j) calculate the max absolute t-statistic c at the (min_i, max_j) and (max_i, min_j) locations c for other indices the t-statistic can be bounded using this c c if a block doesn't have the potential to exceed bssmax ignore it c calculate the bsslim for each block and include ones >= bssmax rnov2 = rn/2 l = 0 nal0 = n - al0 do 40 i = 1, nb do 30 j = i, nb c calculate bsslim if (i .eq. 1) then ilo = 1 else ilo = bb(i-1) + 1 endif ihi = bb(i) if (j .eq. 1) then jlo = 1 else jlo = bb(j-1) + 1 endif jhi = bb(j) alenhi = jhi - ilo if (alenhi .gt. nal0) alenhi = nal0 rjhi = dfloat(alenhi) if (i .eq. j) then alenlo = 1 else alenlo = jlo - ihi endif if (alenlo .lt. al0) alenlo = al0 c max S_k over block j - min S_k over block i sij1 = abs(bpsmax(j) - bpsmin(i)) c max S_k over block i - min S_k over block j sij2 = abs(bpsmax(i) - bpsmin(j)) c if i = j then sij1 and sij2 are the same sijmx0 = max(sij1, sij2) rjlo = dfloat(alenlo) rnjov1 = rn/min(rjlo*(rn-rjlo), rjhi*(rn-rjhi)) if (ibin) then bsslim = rnjov1*(sijmx0-0.5)**2 else bsslim = rnjov1*(sijmx0**2) endif c if its as large as bssmax add block if (bssmax .le. bsslim) then l = l+1 loc(l) = l bloci(l) = i blocj(l) = j bssijmax(l) = bsslim c max sij in the (i,j) block, t-statistic etc if (sij1 .gt. sij2) then alen(l) = abs(ibmax(j) - ibmin(i)) rj = dfloat(alen(l)) rnjov1 = rn/(rj*(rn-rj)) if (ibin) then bssbij(l) = rnjov1*(sij1-0.5)**2 else bssbij(l) = rnjov1*(sij1**2) endif else alen(l) = abs(ibmin(j) - ibmax(i)) rj = dfloat(alen(l)) rnjov1 = rn/(rj*(rn-rj)) if (ibin) then bssbij(l) = rnjov1*(sij2-0.5)**2 else bssbij(l) = rnjov1*(sij2**2) endif endif endif 30 continue 40 continue nb1 = l c Now sort the t-statistics by their magnitude call qsort4(bssbij, loc, 1, nb1) c now go through the blocks in reverse order (largest down) do 100 l = nb1, 1, -1 k = loc(l) c need to check a block only if it has potential to increase bss c rjlo is the smalllest (j-i) in the block and rjhi is the largest bsslim = bssijmax(k) if (bssmax .le. bsslim) then c bi, bj give the block location bi = bloci(k) bj = blocj(k) c max arc length of interest in block alenmax = alen(k) if (bi .eq. 1) then ilo = 1 else ilo = bb(bi-1) + 1 endif ihi = bb(bi) if (bj .eq. 1) then jlo = 1 else jlo = bb(bj-1) + 1 endif jhi = bb(bj) alenhi = jhi - ilo if (alenhi .gt. nal0) alenhi = nal0 rjhi = dfloat(alenhi) if (bi .eq. bj) then alenlo = 1 else alenlo = jlo - ihi endif if (alenlo .lt. al0) alenlo = al0 rjlo = dfloat(alenlo) c c if arc length is larger than n/2 make is n - arc length c if (alenmax .gt. n - alenmax) alenmax = n - alenmax c c if alenlo <= n/2 start from (ihi, jlo) and go up c if alenhi >= n/2 start from (ilo, jhi) and go down c if ((rjlo .le. rnov2) .and. (alenlo .le. alenmax)) then do 60 i2j = alenlo, alenmax c excess calcultaions to set range of i ixlo = max(0, jlo - ilo - i2j) ixhi = max(0, ihi + i2j - jhi) sxmx = 0 do 55 i = ilo + ixlo, ihi - ixhi j = i+i2j absx = abs(sx(j) - sx(i)) if (sxmx .lt. absx) then sxmx = absx sxmxi = i endif 55 continue rj = dfloat(i2j) rnjov1 = rn/(rj*(rn-rj)) if (ibin) then bijbss = rnjov1*(sxmx-0.5)**2 else bijbss = rnjov1*(sxmx**2) endif if (bijbss .gt. bssmax) then bssmax = bijbss tmaxi = sxmxi tmaxj = sxmxi + i2j endif 60 continue endif c c make arclength n - arc length c alenmax = n - alenmax if ((rjhi .ge. rnov2) .and. (alenhi .ge. alenmax)) then do 70 i2j = alenhi, alenmax, -1 c excess calcultaions to set range of i ixlo = max(0, jlo - ilo - i2j) ixhi = max(0, ihi + i2j - jhi) sxmx = 0 do 65 i = ilo + ixlo, ihi - ixhi j = i + i2j absx = abs(sx(j) - sx(i)) if (sxmx .lt. absx) then sxmx = absx sxmxi = i endif 65 continue rj = dfloat(i2j) rnjov1 = rn/(rj*(rn-rj)) if (ibin) then bijbss = rnjov1*(sxmx-0.5)**2 else bijbss = rnjov1*(sxmx**2) endif if (bijbss .gt. bssmax) then bssmax = bijbss tmaxi = sxmxi tmaxj = sxmxi + i2j endif 70 continue endif endif 100 continue 120 if (ibin) then if (tss.le.0.0001) tss = 1.0 bssmax = bssmax/(tss/rn) else if (tss.le.bssmax+0.0001) tss = bssmax + 1.0 bssmax = bssmax/((tss-bssmax)/(rn-2.0)) endif c deallocate memory deallocate(bpsmax, bpsmin, bb, ibmin, ibmax) deallocate(bssbij, bssijmax, bloci, blocj, loc, alen) ostat = bssmax iseg(1) = tmaxi iseg(2) = tmaxj return end c function for calculating the full max t-statistic on permuted data c new approach to maximizing t-statistic using allocatable arrays double precision function tmaxp(n,tss,px,sx,al0,ibin) integer n,al0 double precision tss,px(n),sx(n) logical ibin c c look at the partial sums in blocks of size sqrt(n) c integer ipsmin, ipsmax, ipsmin0, ipsmax0, nb, i, j, k, l, nb1, 1 nb2, bi, bj, ilo, ihi, jlo, jhi, alenmax, i2j, alenlo, 2 alenhi, ixlo, ixhi, nal0 double precision psum, psmin, psmax, psmin0, psmax0, bssmax, 1 bsslim, rn, rj, rjhi, rjlo, rnjov1, sij1, sij2, sijmx0, 2 absx, sxmx, bijbss, rnov2, psdiff c c use local arrays for working within blocks c block partial sum max and min double precision, allocatable :: bpsmax(:), bpsmin(:) c location of the max and min integer, allocatable :: bb(:), ibmin(:), ibmax(:) c t statistic corresponding to max for block i,j (and max possible) double precision, allocatable :: bssbij(:), bssijmax(:) c row, column and order vector for reordering bssbij integer, allocatable :: bloci(:), blocj(:), loc(:), alen(:) c calculate number of blocks (nb) and block boundaries (vector bb) rn = dfloat(n) if (n .ge. 50) then nb = nint(sqrt(dfloat(n))) else nb = 1 endif c the number of paiwise block comparison nb2 = nb*(nb+1)/2 c allocate memory allocate(bpsmax(nb), bpsmin(nb)) allocate(bb(nb), ibmin(nb), ibmax(nb)) allocate(bssbij(nb2), bssijmax(nb2)) allocate(bloci(nb2), blocj(nb2), loc(nb2), alen(nb2)) c block boundaries do 110 i = 1, nb bb(i) = nint(rn*(dfloat(i)/dfloat(nb))) 110 continue c find the max, min of partial sums and their locations within blocks ilo = 1 psum = 0 psmin0 = 0 psmax0 = 0 ipsmin0 = n ipsmax0 = n do 20 j = 1, nb sx(ilo) = psum + px(ilo) psmin = sx(ilo) ipsmin = ilo psmax = sx(ilo) ipsmax = ilo do 10 i = ilo+1, bb(j) sx(i) = sx(i-1) + px(i) if (sx(i) .lt. psmin) then psmin = sx(i) ipsmin = i endif if (sx(i) .gt. psmax) then psmax = sx(i) ipsmax = i endif 10 continue c store the block min, max and locations ibmin(j) = ipsmin ibmax(j) = ipsmax bpsmin(j) = psmin bpsmax(j) = psmax c adjust global min, max and locations if (psmin .lt. psmin0) then psmin0 = psmin ipsmin0 = ipsmin endif if (psmax .gt. psmax0) then psmax0 = psmax ipsmax0 = ipsmax endif c reset ilo to be the block boundary + 1 psum = sx(bb(j)) ilo = bb(j) + 1 20 continue c calculate bss for max s_i - min s_i psdiff = psmax0 - psmin0 rj = dfloat(abs(ipsmax0 - ipsmin0)) rnjov1 = rn/(rj*(rn-rj)) if (ibin) then bssmax = rnjov1*(psdiff-0.5)**2 else bssmax = rnjov1*psdiff**2 endif c for a pair of blocks (i,j) calculate the max absolute t-statistic c at the (min_i, max_j) and (max_i, min_j) locations c for other indices the t-statistic can be bounded using this c c if a block doesn't have the potential to exceed bssmax ignore it c calculate the bsslim for each block and include ones >= bssmax rnov2 = rn/2 l = 0 nal0 = n - al0 do 40 i = 1, nb do 30 j = i, nb c calculate bsslim if (i .eq. 1) then ilo = 1 else ilo = bb(i-1) + 1 endif ihi = bb(i) if (j .eq. 1) then jlo = 1 else jlo = bb(j-1) + 1 endif jhi = bb(j) alenhi = jhi - ilo if (alenhi .gt. nal0) alenhi = nal0 rjhi = dfloat(alenhi) if (i .eq. j) then alenlo = 1 else alenlo = jlo - ihi endif if (alenlo .lt. al0) alenlo = al0 c max S_k over block j - min S_k over block i sij1 = abs(bpsmax(j) - bpsmin(i)) c max S_k over block i - min S_k over block j sij2 = abs(bpsmax(i) - bpsmin(j)) c if i = j then sij1 and sij2 are the same sijmx0 = max(sij1, sij2) rjlo = dfloat(alenlo) rnjov1 = rn/min(rjlo*(rn-rjlo), rjhi*(rn-rjhi)) if (ibin) then bsslim = rnjov1*(sijmx0-0.5)**2 else bsslim = rnjov1*(sijmx0**2) endif c if its as large as bssmax add block if (bssmax .le. bsslim) then l = l+1 loc(l) = l bloci(l) = i blocj(l) = j bssijmax(l) = bsslim c max sij in the (i,j) block, t-statistic etc if (sij1 .gt. sij2) then alen(l) = abs(ibmax(j) - ibmin(i)) rj = dfloat(alen(l)) rnjov1 = rn/(rj*(rn-rj)) if (ibin) then bssbij(l) = rnjov1*(sij1-0.5)**2 else bssbij(l) = rnjov1*(sij1**2) endif else alen(l) = abs(ibmin(j) - ibmax(i)) rj = dfloat(alen(l)) rnjov1 = rn/(rj*(rn-rj)) if (ibin) then bssbij(l) = rnjov1*(sij2-0.5)**2 else bssbij(l) = rnjov1*(sij2**2) endif endif endif 30 continue 40 continue nb1 = l c Now sort the t-statistics by their magnitude call qsort4(bssbij, loc, 1, nb1) c now go through the blocks in reverse order (largest down) do 100 l = nb1, 1, -1 k = loc(l) c need to check a block only if it has potential to increase bss c rjlo is the smalllest (j-i) in the block and rjhi is the largest bsslim = bssijmax(k) if (bssmax .le. bsslim) then c bi, bj give the block location bi = bloci(k) bj = blocj(k) c max arc length of interest in block alenmax = alen(k) if (bi .eq. 1) then ilo = 1 else ilo = bb(bi-1) + 1 endif ihi = bb(bi) if (bj .eq. 1) then jlo = 1 else jlo = bb(bj-1) + 1 endif jhi = bb(bj) alenhi = jhi - ilo if (alenhi .gt. nal0) alenhi = nal0 rjhi = dfloat(alenhi) if (bi .eq. bj) then alenlo = 1 else alenlo = jlo - ihi endif if (alenlo .lt. al0) alenlo = al0 rjlo = dfloat(alenlo) c c if arc length is larger than n/2 make is n - arc length c if (alenmax .gt. n - alenmax) alenmax = n - alenmax c c if alenlo <= n/2 start from (ihi, jlo) and go up c if alenhi >= n/2 start from (ilo, jhi) and go down c if ((rjlo .le. rnov2) .and. (alenlo .le. alenmax)) then do 60 i2j = alenlo, alenmax c excess calcultaions to set range of i ixlo = max(0, jlo - ilo - i2j) ixhi = max(0, ihi + i2j - jhi) sxmx = 0 do 55 i = ilo + ixlo, ihi - ixhi j = i+i2j absx = abs(sx(j) - sx(i)) if (sxmx .lt. absx) sxmx = absx 55 continue rj = dfloat(i2j) rnjov1 = rn/(rj*(rn-rj)) if (ibin) then bijbss = rnjov1*(sxmx-0.5)**2 else bijbss = rnjov1*(sxmx**2) endif if (bijbss .gt. bssmax) bssmax = bijbss 60 continue endif c c make arclength n - arc length c alenmax = n - alenmax if ((rjhi .ge. rnov2) .and. (alenhi .ge. alenmax)) then do 70 i2j = alenhi, alenmax, -1 c excess calcultaions to set range of i ixlo = max(0, jlo - ilo - i2j) ixhi = max(0, ihi + i2j - jhi) sxmx = 0 do 65 i = ilo + ixlo, ihi - ixhi j = i + i2j absx = abs(sx(j) - sx(i)) if (sxmx .lt. absx) sxmx = absx 65 continue rj = dfloat(i2j) rnjov1 = rn/(rj*(rn-rj)) if (ibin) then bijbss = rnjov1*(sxmx-0.5)**2 else bijbss = rnjov1*(sxmx**2) endif if (bijbss .gt. bssmax) bssmax = bijbss 70 continue endif endif 100 continue if (ibin) then if (tss.le.0.0001) tss = 1.0 tmaxp = bssmax/(tss/rn) else if (tss.le.bssmax+0.0001) tss = bssmax + 1.0 tmaxp = bssmax/((tss-bssmax)/(rn-2.0)) endif c deallocate memory deallocate(bpsmax, bpsmin, bb, ibmin, ibmax) deallocate(bssbij, bssijmax, bloci, blocj, loc, alen) return end c function for the max (over small arcs) t-statistic on permuted data c new code to speed up this part 3/31/2010 double precision function htmaxp(n,k,tss,px,sx,al0,ibin) integer n,k,al0 double precision tss,px(n),sx(n) logical ibin integer i, j, nmj double precision rn, rj, absx, sxmx, bssmx, psmin, psmax, psdiff, 1 bsslim, rnjov1 c create blocks of size k (or k+1) to span 1 thru n c block partial sum max and min double precision, allocatable :: bpsmax(:), bpsmin(:) c location of the max and min integer, allocatable :: bb(:) c variables to work on block specific data integer nb, ilo, ihi, l double precision psum, psdiffsq rn = dfloat(n) c number of blocks of size k (plus fraction since n/k may not be integer) nb = int(rn/dfloat(k)) c allocate memory allocate(bpsmax(nb), bpsmin(nb)) allocate(bb(nb)) c block boundaries do 110 i = 1, nb bb(i) = nint(rn*(dfloat(i)/dfloat(nb))) 110 continue c don't need global min and max c find the max, min of partial sums and their locations within blocks ilo = 1 psum = 0 htmaxp = 0.0d0 do 20 j = 1, nb sx(ilo) = psum + px(ilo) psmin = sx(ilo) ipsmin = ilo psmax = sx(ilo) ipsmax = ilo do 10 i = ilo+1, bb(j) sx(i) = sx(i-1) + px(i) if (sx(i) .lt. psmin) then psmin = sx(i) ipsmin = i endif if (sx(i) .gt. psmax) then psmax = sx(i) ipsmax = i endif 10 continue c store the block min, max and locations bpsmin(j) = psmin bpsmax(j) = psmax c reset ilo to be the block boundary + 1 psum = sx(bb(j)) ilo = bb(j) + 1 c calculate the bss at the block max & min pr i = abs(ipsmin - ipsmax) if ((i .le. k) .and. (i .ge. al0)) then rj = dfloat(i) rnjov1 = rn/(rj*(rn-rj)) if (ibin) then bssmx = rnjov1*(bpsmax(j) - bpsmin(j) -0.5)**2 else bssmx = rnjov1*(bpsmax(j) - bpsmin(j))**2 endif if (htmaxp .lt. bssmx) htmaxp = bssmx endif 20 continue c check the first block ilo = 1 ihi = bb(1) psdiff = bpsmax(1) - bpsmin(1) if (ibin) then psdiffsq = (psdiff-0.5)**2 else psdiffsq = psdiff**2 endif do 40 j = al0,k rj = dfloat(j) rnjov1 = rn/(rj*(rn-rj)) bsslim = rnjov1*psdiffsq if (bsslim .lt. htmaxp) go to 50 sxmx = 0.0d0 do 30 i = ilo,ihi-j absx = abs(sx(i+j) - sx(i)) if (sxmx.lt.absx) sxmx = absx 30 continue if (ibin) then bssmx = rnjov1*(abs(sxmx)-0.5)**2 else bssmx = rnjov1*sxmx**2 endif if (htmaxp.lt.bssmx) htmaxp = bssmx 40 continue c now the minor arcs spanning the end (n) 50 psdiff = max(abs(bpsmax(1)-bpsmin(nb)), abs(bpsmax(nb)-bpsmin(1))) if (ibin) then psdiffsq = (psdiff-0.5)**2 else psdiffsq = psdiff**2 endif do 70 j = al0,k rj = dfloat(j) rnjov1 = rn/(rj*(rn-rj)) bsslim = rnjov1*psdiffsq if (bsslim .lt. htmaxp) go to 100 sxmx = 0.0d0 nmj = n-j do 60 i = 1,j absx = abs(sx(i+nmj) - sx(i)) if (sxmx.lt.absx) sxmx = absx 60 continue if (ibin) then bssmx = rnjov1*(abs(sxmx)-0.5)**2 else bssmx = rnjov1*sxmx**2 endif if (htmaxp.lt.bssmx) htmaxp = bssmx 70 continue c now the other blocks 100 do 200 l = 2,nb ilo = bb(l-1)+1 ihi = bb(l) psdiff = bpsmax(l) - bpsmin(l) if (ibin) then psdiffsq = (psdiff-0.5)**2 else psdiffsq = psdiff**2 endif do 140 j = al0,k rj = dfloat(j) rnjov1 = rn/(rj*(rn-rj)) bsslim = rnjov1*psdiffsq if (bsslim .lt. htmaxp) go to 150 sxmx = 0.0d0 do 130 i = ilo,ihi-j absx = abs(sx(i+j) - sx(i)) if (sxmx.lt.absx) sxmx = absx 130 continue if (ibin) then bssmx = rnjov1*(abs(sxmx)-0.5)**2 else bssmx = rnjov1*sxmx**2 endif if (htmaxp.lt.bssmx) htmaxp = bssmx 140 continue 150 psdiff = max(abs(bpsmax(l)-bpsmin(l-1)), 1 abs(bpsmax(l-1)-bpsmin(l))) if (ibin) then psdiffsq = (psdiff-0.5)**2 else psdiffsq = psdiff**2 endif do 170 j = al0,k rj = dfloat(j) rnjov1 = rn/(rj*(rn-rj)) bsslim = rnjov1*psdiffsq if (bsslim .lt. htmaxp) go to 200 sxmx = 0.0d0 nmj = n-j do 160 i = ilo-j,ilo-1 absx = abs(sx(i+j) - sx(i)) if (sxmx.lt.absx) sxmx = absx 160 continue if (ibin) then bssmx = rnjov1*(abs(sxmx)-0.5)**2 else bssmx = rnjov1*sxmx**2 endif if (htmaxp.lt.bssmx) htmaxp = bssmx 170 continue 200 continue if (ibin) then if (tss .le. 0.0001d0) tss = 1.0d0 htmaxp = htmaxp/(tss/rn) else if (tss .le. htmaxp+0.0001d0) tss = htmaxp + 1.0d0 htmaxp = htmaxp/((tss-htmaxp)/(rn-2.0d0)) endif c deallocate memory deallocate(bpsmax, bpsmin, bb) return end DNAcopy/src/fphyper.c0000644000175000017500000000027414136047041014314 0ustar nileshnilesh#include #include /* Fortran function for hypergeometric CDF */ double F77_SUB(fphypr)(double *i, double *m, double *n, double *k) { return phyper(*i, *m, *n, *k, 1, 0); } DNAcopy/vignettes/0000755000175000017500000000000014136070260013710 5ustar nileshnileshDNAcopy/vignettes/DNAcopy.bib0000644000175000017500000000457414136047041015676 0ustar nileshnilesh @ARTICLE{pinkel98, Author = {D. Pinkel and R. Segraves and D. Sudar and S. Clark and I. Poole and D. Kowbel and C. Collins and W. L. Kuo and C. Chen and Y. Zhai and S. H. Dairkee and B. M. Ljung and J. W. Gray and D. G. Albertson}, Journal = {Nat. Genet.}, Title = {High resolution analysis of DNA copy number variation using comparative genomic hybridization to microarrays}, Year = {1998}, volume = {20}, OPTnumber = {}, pages = {207-211} } @ARTICLE{snijders01, Author = {A. M. Snijders and N. Nowak and R. Segraves and S. Blackwood and N. Brown and J. Conroy and G. Hamilton and A. K. Hindle and B. Huey and K. Kimura and S. Law S and K. Myambo and J. Palmer and B. Ylstra and J. P. Yue and J. W. Gray and A. N. Jain and D. Pinkel and D. G. Albertson}, Journal = {Nat. Genet.}, Title = {Assembly of microarrays for genome-wide measurement of DNA copy number}, Year = {2001}, volume = {29}, OPTnumber = {3}, pages = {263-4} } @ARTICLE{wigler03, Author = {R. Lucito and J. Healey and J. Alexander and A. Reiner and D. Esposito and M. Chi and L. Rodgers and A. Brady and J. Sebat and J. Troge and JA West and S. Rostan and KC Nguyen and S. Powers and KQ Ye and A. Olshen and E. Venkatraman and L. Norton and M. Wigler}, Journal = {Nat. Genet.}, Title = {Representational oligonucleotide microarray analysis: a high resolution method to detect genome copy number variation}, Year = {2003}, volume = {13}, OPTnumber = {10}, pages = {2291-305} } @ARTICLE{olshen04, Author = {A. B. Olshen and E. S. Venkatraman and R. Lucito and M. Wigler}, Journal = {Biostatistics}, Title = {Circular binary segmentation for the analysis of array-based DNA copy number data}, Year = {2004}, volume = {5}, OPTnumber = {4}, pages = {557-72} } @ARTICLE{venkat07, Author = {E. S. Venkatraman and A. B. Olshen}, Journal = {Bioinformatics}, Title = {A faster circular binary segmentation algorithm for the analysis of array CGH data}, Year = {2007}, volume = {23}, OPTnumber = {6}, pages = {657-63} } DNAcopy/vignettes/DNAcopy.Rnw0000644000175000017500000001560514136047041015705 0ustar nileshnilesh%\VignetteIndexEntry{DNAcopy} %\VignetteDepends{} %\VignetteKeywords{DNA Copy Number Analysis} %\VignettePackage{DNAcopy} \documentclass[11pt]{article} \usepackage{amsmath} \usepackage[authoryear,round]{natbib} \usepackage{hyperref} \SweaveOpts{echo=FALSE} \setlength{\textheight}{8.5in} \setlength{\textwidth}{6in} \setlength{\topmargin}{-0.25in} \setlength{\oddsidemargin}{0.25in} \setlength{\evensidemargin}{0.25in} \begin{document} \setkeys{Gin}{width=0.99\textwidth} \title{\bf DNAcopy: A Package for Analyzing DNA Copy Data} \author{Venkatraman E. Seshan$^1$ and Adam B. Olshen$^2$} \maketitle \begin{center} $^1$Department of Epidemiology and Biostatistics\\ Memorial Sloan-Kettering Cancer Center\\ {\tt seshanv@mskcc.org}\\ \ \\ $^2$Department of Epidemiology and Biostatistics\\ University of California, San Francisco\\ {\tt olshena@biostat.ucsf.edu} \end{center} \tableofcontents %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Overview} This document presents an overview of the {\tt DNAcopy} package. This package is for analyzing array DNA copy number data, which is usually (but not always) called array Comparative Genomic Hybridization (array CGH) data \citep{pinkel98, snijders01, wigler03}. It implements our methodology for finding change-points in these data \citep{olshen04}, which are points after which the (log) test over reference ratios have changed location. Our model is that the change-points correspond to positions where the underlying DNA copy number has changed. Therefore, change-points can be used to identify regions of gained and lost copy number. We also provide a function for making relevant plots of these data. \section{Data} We selected a subset of the data set presented in \cite{snijders01}. We are calling this data set {\tt coriell}. The data correspond to two array CGH studies of fibroblast cell strains. In particular, we chose the studies {\bf GM05296} and {\bf GM13330}. After selecting only the mapped data from chromosomes 1-22 and X, there are 2271 data points. There is accompanying spectral karyotype data (not included), which can serve as a gold standard. The data can be found at \\ \url{http://www.nature.com/ng/journal/v29/n3/suppinfo/ng754_S1.html} \section{An Example} Here we perform an analysis on the {\bf GM05296} array CGH study described above. <>= library(DNAcopy) @ <>= data(coriell) @ \noindent Before segmentation the data needs to be made into a CNA object. <>= CNA.object <- CNA(cbind(coriell$Coriell.05296), coriell$Chromosome,coriell$Position, data.type="logratio",sampleid="c05296") @ \noindent We generally recommend smoothing single point outliers before analysis. It is a good idea to check that the smoothing is proper for a particular data set. <>= smoothed.CNA.object <- smooth.CNA(CNA.object) @ \noindent After smoothing, if necessary, the segmentation is run. Here the default parameters are used. A brief discussion of parameters that can be adjusted is in the Tips section. <>= segment.smoothed.CNA.object <- segment(smoothed.CNA.object, verbose=1) @ %Plot whole studies \noindent There are a number of plots that can be made. The first is ordering the data by chromosome and map positons. The red lines correspond to mean values in segments. Note that the points are in alternate colors to indicate different chromosomes. \pagebreak \begin{center} <>= plot(segment.smoothed.CNA.object, plot.type="w") @ \end{center} \noindent Another possibility is to plot by chromosome within a study. \begin{center} <>= plot(segment.smoothed.CNA.object, plot.type="s") @ \end{center} %Plot each chromosome across studies (6 per page) %\begin{center} %<>= %plot(segment.smoothed.CNA.object, plot.type="c", % cbys.layout=c(2,1), % cbys.nchrom=6) %@ %\end{center} %Plot by plateaus \noindent If there are multiple studies, one could plot by chromosome across studies using the option {\tt plot.type='c'}. A final plot orders the segment by their chromosome means. One can take the plateaus in this plot to determine what the mean values should be for calling segments gains or losses. In this case, maybe $0.4$ for gains and $-0.6$ for losses. For most data, these plateaus are much closer to zero. The next generation of this software will have automatic methods for calling gains and losses. \begin{center} <>= plot(segment.smoothed.CNA.object, plot.type="p") @ \end{center} \noindent Change-points are often found due to local trends in the data. An undo method is needed to get rid of unnecessary change-points. Below all splits that are not at least three SDs apart are removed. The following plot shows that all splits not corresponding to the gold standard results have been removed. <>= sdundo.CNA.object <- segment(smoothed.CNA.object, undo.splits="sdundo", undo.SD=3,verbose=1) @ \begin{center} <>= plot(sdundo.CNA.object,plot.type="s") @ \end{center} \section{Tips} \noindent A function that may be of interest that has not been mentioned is {\tt subset.CNA}. It allows for subsetting of a CNA object by chromosome and sample so that segmentation does not have to be run on a whole data set. Similarly, {\tt subset.DNAcopy} allows subsetting of DNAcopy objects, which contain the output of segmentation. The original default segmentation algorithm, because it was based on permutation, took $O(N^2)$ computations, where $N$ is the number of markers on a chromosome. The new default algorithm is much faster. It includes a hybrid approach to compute the $p$-value for segmenting based partly on permutation and partly on a Gaussian approximation (available in all versions after 1.2.0) and a stopping rule (available in all versions after 1.5.0) to declare change when there is a strong evidence for its presence \citep{venkat07}. We no longer recommend using overlapping windows for larger data sets. It is still possible to run the full permutations analysis using the option {\tt p.method='perm'}. If the new algorithm is still too slow, one can reduce the number of permutations in the hybrid method using the parameter {\tt nperm} (default is 10,000). However, the lower {\tt alpha} (the significance level for the test to accept change-points) is, the more permutations that are needed. The stopping boundary needs to be computed for any choice of {\tt nperm} and {\tt alpha} which is not the default which is done automatically within the function {\tt segment} or can be done externally using the function {\tt getbdry} and passed on to {\tt segment}. %\newpage \bibliographystyle{apalike} \bibliography{DNAcopy} \end{document} DNAcopy/build/0000755000175000017500000000000014136070260012777 5ustar nileshnileshDNAcopy/build/vignette.rds0000644000175000017500000000033214136070260015334 0ustar nileshnileshb```b`add`b2 1# 'vsL/ +GbJQ& 7 h0XX%cؗZDh3ܤ"ǼĜbsxVDQU▙ sWHf e2|q  "9'= RKҊAJnVDNAcopy/tests/0000755000175000017500000000000014136047041013043 5ustar nileshnileshDNAcopy/tests/redundancy,20090610,segment.R0000644000175000017500000000727314136047041017670 0ustar nileshnilesh###################################################################### # Type: Redundancy test # Created by: Henrik Bengtsson # Created on: 2009-06-10 ###################################################################### # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Startup # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - library("DNAcopy") # Record current random seed sample(1) # Assert that a random seed exists oldSeed <- .Random.seed # Alway use the same random seed set.seed(0xbeef) # Tolerance (maybe decrease?) tol <- .Machine$double.eps^0.5 print(sessionInfo()) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Simulating copy-number data # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Number of loci J <- 1000 x <- sort(runif(J, min=0, max=1000)) w <- runif(J) mu <- double(J) jj <- (200 <= x & x < 300) mu[jj] <- mu[jj] + 1 jj <- (650 <= x & x < 800) mu[jj] <- mu[jj] - 1 w[jj] <- 0.001 eps <- rnorm(J, sd=1/2) y <- mu + eps # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Setting up a raw CNA object # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cnR <- CNA( genomdat = y, chrom = rep(1, times=J), maploc = x, data.type = "logratio", sampleid = "SampleA" ) print(cnR) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Test: Non-weighted segmentation # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - t <- system.time({ fitR <- segment(cnR, verbose=1) }) cat("Processing time:\n") print(t) print(fitR) # Expected results # These were obtained by dput(fitR$output) using DNAcopy v1.19.0 truth <- structure(list(ID = c("SampleA", "SampleA", "SampleA", "SampleA", "SampleA"), chrom = c(1, 1, 1, 1, 1), loc.start = c(1.36857712641358, 201.604291098192, 303.775111911818, 650.741211604327, 800.302447052673 ), loc.end = c(199.083976913244, 301.066882908344, 647.42697100155, 798.971758922562, 999.329038895667), num.mark = c(209, 105, 337, 138, 211), seg.mean = c(0.0256, 1.0099, -0.0084, -0.9792, -0.0289 )), .Names = c("ID", "chrom", "loc.start", "loc.end", "num.mark", "seg.mean"), row.names = c(NA, -5L), class = "data.frame") stopifnot(all.equal(fitR$output, truth, tolerance=tol)) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Test: Weighted segmentation # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - t <- system.time({ fitR <- segment(cnR, weights=w, verbose=1) }) cat("Processing time:\n") print(t) print(fitR) # Expected results # These were obtained by dput(fitR$output) using DNAcopy v1.19.0 truth <- structure(list(ID = c("SampleA", "SampleA", "SampleA"), chrom = c(1, 1, 1), loc.start = c(1.36857712641358, 201.604291098192, 303.775111911818 ), loc.end = c(199.083976913244, 301.066882908344, 999.329038895667 ), num.mark = c(209, 105, 686), seg.mean = c(0.0259, 1.0004, -0.0233)), .Names = c("ID", "chrom", "loc.start", "loc.end", "num.mark", "seg.mean"), row.names = c(NA, -3L), class = "data.frame") stopifnot(all.equal(fitR$output, truth, tolerance=tol)) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Cleanup # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Reset to previous random seed .Random.seed <- oldSeed print(sessionInfo()) ###################################################################### # HISTORY # 2009-06-10 # o ROBUSTNESS: Added this test to assert that DNAcopy v1.19.2 and # newer will numerically give the same results as DNAcopy v1.19.0. # This test is ran each time with R CMD check. # o Created. ###################################################################### DNAcopy/R/0000755000175000017500000000000014136047041012102 5ustar nileshnileshDNAcopy/R/zoomIntoRegion.R0000644000175000017500000000301414136047041015205 0ustar nileshnileshzoomIntoRegion <- function(x, chrom, sampleid, maploc.start=NULL, maploc.end=NULL, pt.pch=NULL, pt.cex=NULL, pt.col=NULL, segcol=NULL, seglwd=NULL, main=NULL, xlab=NULL, ylab=NULL, ...) { if (class(x) != "DNAcopy") stop("First arg must be a DNAcopy object") tmp <- subset(x, chrom=chrom[1], samplelist=sampleid[1]) lrdata <- tmp$data if (missing(maploc.start)) maploc.start <- min(lrdata$maploc, na.rm=T) - 1 if (missing(maploc.end)) maploc.end <- max(lrdata$maploc, na.rm=T) + 1 ii <- ((lrdata$maploc >= maploc.start) & (lrdata$maploc <= maploc.end)) if (missing(pt.pch)) pt.pch <- "." if (missing(pt.cex)) pt.cex <- ifelse(pt.pch==".", 3, 1) if (missing(pt.col)) pt.col <- "green3" if (missing(segcol)) segcol <- "red" if (missing(seglwd)) seglwd <- 3 if (missing(main)) main <- paste("chr", chrom, ": ", maploc.start,"-", maploc.end, " from sample ", sampleid, sep="") if (missing(xlab)) xlab = "Genomic Position" if (missing(ylab)) ylab = "log-ratio" plot(lrdata[ii,2], lrdata[ii,3], main = main, xlab=xlab, ylab = ylab, pch = pt.pch, cex = pt.cex, col = pt.col, ...) segs <- tmp$output jj <- ((segs$loc.start <= maploc.end) & (segs$loc.end >= maploc.start)) segs <- segs[jj,] k <- nrow(segs) segs$loc.start[1] <- maploc.start segs$loc.end[k] <- maploc.end segments(segs$loc.start, segs$seg.mean, x1=segs$loc.end, y1=segs$seg.mean, col = segcol, lwd = seglwd) # for(i in 1:k) { # lines(c(segs$loc.start[i],segs$loc.end[i]), rep(segs$seg.mean[i],2), col=segcol, lwd=seglwd) # } } DNAcopy/R/DNAcopyMethods.R0000644000175000017500000003571414136047041015060 0ustar nileshnileshCNA <- function(genomdat, chrom, maploc, data.type=c("logratio","binary"), sampleid=NULL, presorted=FALSE) { if (is.data.frame(genomdat)) genomdat <- as.matrix(genomdat) if (!is.numeric(genomdat)) stop("genomdat must be numeric") if (!is.numeric(maploc)) stop("maploc must be numeric") data.type <- match.arg(data.type) ina <- (!is.na(chrom) & is.finite(maploc)) if (sum(!ina)>0) warning("markers with missing chrom and/or maploc removed\n") if (!presorted) { sortindex <- which(ina)[order(chrom[ina], maploc[ina])] } else { sortindex <- which(ina) } if (is.factor(chrom)) chrom <- as.character(chrom) # added to allow arrays of single dimension - results from data.frame ops if (is.array(genomdat)) { if (length(dim(genomdat)) == 1) { genomdat <- as.matrix(genomdat) } } if (is.vector(genomdat)) genomdat <- as.matrix(genomdat) if (!missing(sampleid)) { if (length(sampleid) != ncol(genomdat)) { warning("length(sampleid) and ncol(genomdat) differ, names ignored\n") sampleid <- paste("Sample", 1:ncol(genomdat)) } } else { sampleid <- paste("Sample", 1:ncol(genomdat)) } colnames(genomdat) <- sampleid zzz <- data.frame(chrom=I(chrom), maploc=maploc, genomdat) zzz <- zzz[sortindex,] # check for duplicate probes (i.e. repeated maploc within a chromosome) if (length(ii <- which(diff(maploc)==0)) > 0) { if (any(chrom[ii]==chrom[ii+1])) warning("array has repeated maploc positions\n") } attr(zzz, "data.type") <- data.type class(zzz) <- c("CNA","data.frame") zzz } subset.CNA <- function(x, chromlist=NULL, samplelist=NULL, ...) { if (!inherits(x, 'CNA')) stop("First arg must be of class CNA") chrom <- x$chrom uchrom <- unique(chrom) if (missing(chromlist)) chromlist <- uchrom if (length(setdiff(chromlist, uchrom)) > 0) stop("chromlist contains chromosomes not in the data") if (length(chromlist) > length(unique(chromlist))) warning("duplicate chromosomes in chromlist removed") sampleid <- colnames(x)[-(1:2)] if (missing(samplelist)) samplelist <- sampleid nsample <- length(sampleid) if (length(setdiff(samplelist, 1:nsample)) > 0 & length(setdiff(samplelist, sampleid)) > 0) stop("samplelist should be a list of valid sample numbers or names") if (!is.numeric(samplelist)) samplelist <- match(samplelist, names(x)) - 2 if (length(samplelist) > length(unique(samplelist))) warning("duplicate samples in samplelist removed") samplelist <- unique(samplelist) y <- x[chrom %in% chromlist,c(1:2,samplelist+2)] attr(y, "data.type") <- attr(x, "data.type") y } smooth.CNA <- function(x, smooth.region=10, outlier.SD.scale=4, smooth.SD.scale=2, trim=0.025) { if (!inherits(x, 'CNA')) stop("First arg must be of class CNA") nsample <- ncol(x)-2 chrom <- x$chrom uchrom <- unique(chrom) if(attr(x, "data.type")=="binary") stop("Not smoothing binary data ") for (isamp in 1:nsample) { genomdat <- x[,isamp+2] ina <- which(is.finite(genomdat)) trimmed.SD <- sqrt(trimmed.variance(genomdat[ina], trim)) outlier.SD <- outlier.SD.scale*trimmed.SD smooth.SD <- smooth.SD.scale*trimmed.SD k <- smooth.region n <- length(genomdat[ina]) cfrq <- diff(c(which(!duplicated(chrom[ina])), n+1)) nchr <- length(cfrq) # to allow for some chrom with all missing smoothed.data <- .Fortran("smoothLR", as.integer(n), as.double(genomdat[ina]), as.integer(nchr), as.integer(cfrq), sgdat=double(n), as.integer(k), as.double(outlier.SD), as.double(smooth.SD), PACKAGE = "DNAcopy")$sgdat x[,isamp+2][ina] <- smoothed.data } x } print.CNA <- function(x, ...) { if (!inherits(x, 'CNA')) stop("First arg must be of class CNA") cat("Number of Samples", ncol(x)-2, "\nNumber of Probes ", nrow(x), "\nData Type ", attr(x,"data.type"),"\n") } plot.DNAcopy <- function (x, plot.type=c("whole", "plateau", "samplebychrom", "chrombysample"), xmaploc=FALSE, altcol=TRUE, sbyc.layout=NULL, cbys.nchrom=1, cbys.layout=NULL, include.means=TRUE, zeroline=TRUE, pt.pch=NULL, pt.cex=NULL, pt.cols=NULL, segcol=NULL, zlcol=NULL, ylim=NULL, lwd=NULL, ...) { if (!inherits(x, "DNAcopy")) stop("First arg must be the result of segment") xdat <- x$data nsample <- ncol(xdat)-2 if(missing(ylim)) { uylim <- max(abs(xdat[,-(1:2)]), na.rm=TRUE) ylim <- c(-uylim, uylim) } xres <- x$output if(dev.cur() <= 1) dev.new() int.dev <- dev.interactive() plot.type <- match.arg(plot.type) op <- par(no.readonly = TRUE) parask <- par("ask") if (int.dev & !parask & nsample>1) par(ask = TRUE) sampleid <- colnames(xdat)[-(1:2)] chrom0 <- xdat$chrom uchrom <- unique(chrom0) nchrom <- length(uchrom) if (xmaploc) { maploc0 <- as.numeric(xdat$maploc) if(length(uchrom)>1 & max(maploc0[chrom0==uchrom[1]]) > min(maploc0[chrom0==uchrom[2]])) { plen <- max(maploc0[chrom0==uchrom[1]]) for(i in 2:nchrom) { maploc0[chrom0==uchrom[i]] <- plen + maploc0[chrom0==uchrom[i]] plen <- max(maploc0[chrom0==uchrom[i]]) } } } if (missing(pt.pch)) pt.pch <- "." if (missing(pt.cex)) { if (pt.pch==".") { pt.cex <- 3} else {pt.cex <- 1} } wcol0 <- rep(1, length(chrom0)) if (altcol) { j <- 0 for (i in uchrom) { j <- (j+1) %% 2 wcol0[chrom0==i] <- 1+j } } if (missing(pt.cols)) pt.cols <- c("black","green") if (missing(segcol)) segcol <- "red" if (missing(zlcol)) zlcol <- "grey" if (missing(lwd)) lwd <- 3 if (plot.type == "chrombysample") { cat("Setting multi-figure configuration\n") par(mar = c(0, 4, 0, 2), oma = c(4, 0, 4, 0), mgp = c(2, 0.7, 0)) if (missing(cbys.layout)) { nrow <- ncol <- ceiling(sqrt(nsample)) if (nrow*ncol - nsample > 0) { nrow <- nrow - 1 ncol <- ncol + 1 } if (nrow*ncol - nsample >= nrow) ncol <- ncol - 1 cbys.layout <- c(nrow, ncol) } lmat0 <- lmat1 <- c(1:nsample, rep(-cbys.nchrom*nsample, prod(cbys.layout) - nsample)) for(i in 1:(cbys.nchrom-1)) { lmat1 <- c(lmat1,lmat0+nsample*i) } lmat1[lmat1<0] <- 0 lmat <- matrix(lmat1, nrow = cbys.layout[1], ncol = cbys.nchrom*cbys.layout[2], byrow = FALSE) layout(lmat) } if (plot.type == "samplebychrom") { cat("Setting multi-figure configuration\n") par(mar = c(4, 4, 4, 2), oma = c(0, 0, 2, 0), mgp = c(2, 0.7, 0)) if (missing(sbyc.layout)) { nrow <- ncol <- ceiling(sqrt(nchrom)) if (nrow*ncol - nchrom > 0) { nrow <- nrow - 1 ncol <- ncol + 1 } if (nrow*ncol - nchrom > ncol) ncol <- ncol - 1 sbyc.layout <- c(nrow, ncol) } lmat <- matrix(c(1:nchrom, rep(0,prod(sbyc.layout)-nchrom)), nrow = sbyc.layout[1], ncol = sbyc.layout[2], byrow=TRUE) layout(lmat) } if (plot.type == "chrombysample") { atchrom <- 0.5/cbys.nchrom for (ichrom in uchrom) { if (xmaploc) maploc1 <- maploc0[chrom0==ichrom] for (isamp in 1:nsample) { genomdat <- xdat[chrom0==ichrom, isamp+2] ina <- which(is.finite(genomdat)) genomdat <- genomdat[ina] if (xmaploc) maploc <- maploc1[ina] ii <- cumsum(c(0, xres$num.mark[xres$ID == sampleid[isamp] & xres$chrom==ichrom])) mm <- xres$seg.mean[xres$ID == sampleid[isamp] & xres$chrom==ichrom] kk <- length(ii) zz <- cbind(ii[-kk] + 1, ii[-1]) if (xmaploc) { plot(maploc, genomdat, pch = pt.pch, cex=pt.cex, xaxt="n", ylim = ylim, ylab = sampleid[isamp]) } else { plot(genomdat, pch = pt.pch, cex=pt.cex, xaxt="n", ylim = ylim, ylab = sampleid[isamp]) } if(zeroline) abline(h=0, col=zlcol, lwd=lwd) if (isamp%%cbys.layout[1] == 0) { axis(1, outer=TRUE) title(xlab="Index") } if (include.means) { if (xmaploc) { segments(maploc[zz[,1]], mm, x1=maploc[zz[,2]], y1=mm, col = segcol, lwd=lwd) } else { segments(zz[,1], mm, x1=zz[,2], y1=mm, col = segcol, lwd=lwd) } # for (i in 1:(kk - 1)) { # if (xmaploc) { # lines(maploc[zz[i, ]], rep(mm[i], 2), col = segcol, lwd=lwd) # } else { # lines(zz[i, ], rep(mm[i], 2), col = segcol, lwd=lwd) # } # } } } mtext(paste("Chromosome",ichrom), side = 3, line = 1, at = atchrom, outer=TRUE, font=2) atchrom <- atchrom + 1/cbys.nchrom atchrom <- atchrom - floor(atchrom) } } else { for (isamp in 1:nsample) { genomdat <- xdat[, isamp+2] ina <- which(is.finite(genomdat)) genomdat <- genomdat[ina] wcol <- wcol0[ina] chrom <- chrom0[ina] if (xmaploc) maploc <- maploc0[ina] ii <- cumsum(c(0, xres$num.mark[xres$ID == sampleid[isamp]])) mm <- xres$seg.mean[xres$ID == sampleid[isamp]] kk <- length(ii) zz <- cbind(ii[-kk] + 1, ii[-1]) if(missing(ylim)) ylim <- range(c(genomdat, -genomdat)) if (plot.type=="whole") { if (xmaploc) { plot(maploc, genomdat, pch = pt.pch, cex=pt.cex, col=pt.cols[wcol], main = sampleid[isamp], ylab = "", ylim = ylim) if(zeroline) abline(h=0, col=zlcol, lwd=lwd) } else { plot(genomdat, pch = pt.pch, cex=pt.cex, col=pt.cols[wcol], main = sampleid[isamp], ylab = "", ylim = ylim) if(zeroline) abline(h=0, col=zlcol, lwd=lwd) } if (include.means) { if (xmaploc) { segments(maploc[zz[,1]], mm, x1=maploc[zz[,2]], y1=mm, col = segcol, lwd=lwd) } else { segments(zz[,1], mm, x1=zz[,2], y1=mm, col = segcol, lwd=lwd) } # for (i in 1:(kk - 1)) # { # if (xmaploc) { # lines(maploc[zz[i, ]], rep(mm[i], 2), col = segcol, lwd=lwd) # } else { # lines(zz[i, ], rep(mm[i], 2), col = segcol, lwd=lwd) # } # } } } if (plot.type=="samplebychrom") { cc <- xres$chrom[xres$ID == sampleid[isamp]] for (ichrom in uchrom) { if (xmaploc) { plot(maploc[chrom == ichrom], genomdat[chrom == ichrom], pch = pt.pch, cex=pt.cex, xlab="maploc", ylab = "", main = paste("Chromosome", ichrom), ylim = ylim) } else { plot(genomdat[chrom == ichrom], pch = pt.pch, cex=pt.cex, ylab = "", main = paste("Chromosome", ichrom), ylim = ylim) } if(zeroline) abline(h=0, col=zlcol, lwd=lwd) if (include.means) { jj <- which(cc==ichrom) jj0 <- min(jj) if (xmaploc) { segments(maploc[zz[jj,1]], mm[jj], x1=maploc[zz[jj,2]], y1=mm[jj], col = segcol, lwd=lwd) } else { segments(1+zz[jj,1]-zz[jj0,1], mm[jj], x1=1+zz[jj,2]-zz[jj0,1], y1=mm[jj], col = segcol, lwd=lwd) } # for (i in jj) # { # if (xmaploc) { # lines(maploc[zz[i, ]], rep(mm[i], 2), col = segcol, lwd=lwd) # } else { # lines(1+zz[i, ]-zz[jj0,1], rep(mm[i], 2), col = segcol, lwd=lwd) # } # } } } mtext(sampleid[isamp], side = 3, line = 0, outer = TRUE, font=2) } if (plot.type=="plateau") { omm <- order(mm) ozz <- zz[omm,] ina <- unlist(apply(ozz, 1, function(ii) ii[1]:ii[2])) plot(genomdat[ina], pch = pt.pch, cex=pt.cex, main = sampleid[isamp], ylab = "", ylim = ylim) if(zeroline) abline(h=0, col=zlcol, lwd=lwd) if (include.means) { ii <- cumsum(c(0, xres$num.mark[xres$ID == sampleid[isamp]][omm])) smm <- mm[omm] zz <- cbind(ii[-kk] + 1, ii[-1]) segments(zz[,1], smm, x1=zz[,2], y1=smm, col = segcol, lwd=lwd) # for (i in 1:(kk-1)) lines(zz[i, ], rep(smm[i], 2), col = segcol, lwd=lwd) } } } } on.exit( if (plot.type=="chrombysample" | plot.type=="samplebychrom") { par(op) } else { if(int.dev & !parask & nsample>1) par(ask=parask) }) } print.DNAcopy <- function(x, showSegRows=FALSE, ...) { if (!inherits(x, "DNAcopy")) stop("Object is not the result of segment") if (!is.null(cl<- x$call)) { cat("Call:\n") dput(cl) cat("\n") } if (showSegRows) { if (is.null(x$segRows)) { print(x$output) warning("segRows missing. Object may be a subset or from DNAcopy < 1.23.2.\n") } else { print(cbind(x$output, x$segRows)) } } else { print(x$output) } } subset.DNAcopy <- function(x, chromlist=NULL, samplelist=NULL, ...) { if (!inherits(x, 'DNAcopy')) stop("First arg must be of class DNAcopy") zdat <- x$data zres <- x$output chrom <- zdat$chrom uchrom <- unique(chrom) if (missing(chromlist) | is.null(chromlist)) chromlist <- uchrom if (length(setdiff(chromlist, uchrom)) > 0) stop("chromlist contains chromosomes not in the data") if (length(chromlist) > length(unique(chromlist))) warning("duplicate chromosomes in chromlist removed") sampleid <- colnames(zdat)[-(1:2)] if (missing(samplelist)) samplelist <- sampleid nsample <- length(sampleid) if (length(setdiff(samplelist, 1:nsample)) > 0 & length(setdiff(samplelist, sampleid)) > 0) stop("samplelist should be a list of valid sample numbers or names") if (!is.numeric(samplelist)) samplelist <- match(samplelist, names(zdat)) - 2 if (length(samplelist) > length(unique(samplelist))) warning("duplicate samples in samplelist removed") samplelist <- unique(samplelist) jj <- unlist(sapply(sampleid[samplelist], function(i, id) {which(id==i)}, zres$ID )) zres <- zres[jj,] y <- list() y$data <- zdat[chrom %in% chromlist,c(1:2,samplelist+2)] attr(y$data, "data.type") <- attr(zdat, "data.type") y$output <- zres[zres$chrom %in% chromlist,] class(y) <- "DNAcopy" y } # Chromosome.Lengths <- c(263, 255, 214, 203, 194, 183, 171, 155, 145, 144, 144, 143, 114, 109, 106, 98, 92, 85, 67, 72, 50, 56, 164, 59) # names(Chromosome.Lengths) <- c(as.character(1:22),"X","Y") DNAcopy/R/segment.R0000644000175000017500000000735414136047041013700 0ustar nileshnileshsegment <- function(x, weights=NULL, alpha=0.01, nperm=10000, p.method= c("hybrid","perm"), min.width=2, kmax=25, nmin=200, eta=0.05, sbdry=NULL, trim = 0.025, undo.splits= c("none","prune", "sdundo"), undo.prune=0.05, undo.SD=3, verbose=1) { if (!inherits(x, 'CNA')) stop("First arg must be a copy number array object") call <- match.call() if (min.width < 2 | min.width > 5) stop("minimum segment width should be between 2 and 5") if (nmin < 4*kmax) stop("nmin should be >= 4*kmax") if (missing(sbdry)) { if (nperm==10000 & alpha==0.01 & eta==0.05) { if (!exists("default.DNAcopy.bdry")) data(default.DNAcopy.bdry, package="DNAcopy",envir=environment()) sbdry <- get("default.DNAcopy.bdry", envir=environment()) } else { max.ones <- floor(nperm*alpha) + 1 sbdry <- getbdry(eta, nperm, max.ones) } } weighted <- ifelse(missing(weights), FALSE, TRUE) # rudimentary error checking for weights if (weighted) { if (length(weights) != nrow(x)) stop("length of weights should be the same as the number of probes") if (min(weights) <= 0) stop("all weights should be positive") } sbn <- length(sbdry) nsample <- ncol(x)-2 sampleid <- colnames(x)[-(1:2)] uchrom <- unique(x$chrom) data.type <- attr(x, "data.type") p.method <- match.arg(p.method) undo.splits <- match.arg(undo.splits) segres <- list() segres$data <- x allsegs <- list() allsegs$ID <- NULL allsegs$chrom <- NULL allsegs$loc.start <- NULL allsegs$loc.end <- NULL allsegs$num.mark <- NULL allsegs$seg.mean <- NULL segRows <- list() segRows$startRow <- NULL segRows$endRow <- NULL for (isamp in 1:nsample) { if (verbose>=1) cat(paste("Analyzing:", sampleid[isamp],"\n")) genomdati <- x[,isamp+2] ina <- which(is.finite(genomdati)) genomdati <- genomdati[ina] trimmed.SD <- sqrt(trimmed.variance(genomdati, trim)) chromi <- x$chrom[ina] # maploci <- x$maploc[ina] if (weighted) { wghts <- weights[ina] } else { wghts <- NULL } sample.lsegs <- NULL sample.segmeans <- NULL for (ic in uchrom) { if (verbose>=2) cat(paste(" current chromosome:", ic, "\n")) segci <- changepoints(genomdati[chromi==ic], data.type, alpha, wghts, sbdry, sbn, nperm, p.method, min.width, kmax, nmin, trimmed.SD, undo.splits, undo.prune, undo.SD, verbose) sample.lsegs <- c(sample.lsegs, segci$lseg) sample.segmeans <- c(sample.segmeans, segci$segmeans) } sample.nseg <- length(sample.lsegs) sample.segs.start <- ina[cumsum(c(1,sample.lsegs[-sample.nseg]))] sample.segs.end <- ina[cumsum(sample.lsegs)] allsegs$ID <- c(allsegs$ID, rep(isamp,sample.nseg)) allsegs$chrom <- c(allsegs$chrom, x$chrom[sample.segs.end]) allsegs$loc.start <- c(allsegs$loc.start, x$maploc[sample.segs.start]) allsegs$loc.end <- c(allsegs$loc.end, x$maploc[sample.segs.end]) allsegs$num.mark <- c(allsegs$num.mark, sample.lsegs) allsegs$seg.mean <- c(allsegs$seg.mean, sample.segmeans) segRows$startRow <- c(segRows$startRow, sample.segs.start) segRows$endRow <- c(segRows$endRow, sample.segs.end) } allsegs$ID <- sampleid[allsegs$ID] allsegs$seg.mean <- round(allsegs$seg.mean, 4) allsegs <- as.data.frame(allsegs) allsegs$ID <- as.character(allsegs$ID) segres$output <- allsegs segres$segRows <- as.data.frame(segRows) segres$call <- call if (weighted) segres$weights <- weights class(segres) <- "DNAcopy" segres } DNAcopy/R/segmentp.R0000644000175000017500000001016514136047041014052 0ustar nileshnileshsegments.p <- function(x, ngrid=100, tol=1e-6, alpha=0.05, search.range=100, nperm=1000) { if (!inherits(x, "DNAcopy")) stop("First arg must be the result of segment") xdat <- x$data xout <- x$output nsample <- ncol(xdat)-2 sampleid <- colnames(xdat)[-(1:2)] chrom0 <- xdat$chrom maploc0 <- xdat$maploc uchrom <- unique(chrom0) nchrom <- length(uchrom) bstat <- pval <- lcl <- ucl <- rep(NA, nrow(xout)) ll <- 0 iisamp <- 2 for (isamp in sampleid) { iisamp <- iisamp + 1 # genomdat = logratio data of sample isamp genomdat <- xdat[, iisamp] # ina = location of the missing values and infinity ina <- which(is.finite(genomdat)) # subset out the missing & infinity locations genomdat <- genomdat[ina] chrom <- chrom0[ina] maploc <- maploc0[ina] for(ichrom in uchrom) { # kk = number of segments in chromosome ichrom of sample isamp kk <- sum(1*(xout$ID == isamp & xout$chrom == ichrom)) if (kk > 1) { # gendat = logratio data in chromosome ichrom of sample isamp gendat <- genomdat[chrom == ichrom] # seglen = lengths of the segments in chromosome ichrom of sample isamp seglen <- xout$num.mark[xout$ID == isamp & xout$chrom == ichrom] # segmean = means of the segments in chromosome ichrom of sample isamp segmean <- xout$seg.mean[xout$ID == isamp & xout$chrom == ichrom] # xresid = residuals of the data in chromosome ichrom of sample isamp xresid <- gendat - rep(segmean, seglen) ibstat <- ipval <- ilcl <- iucl <- rep(NA, kk) # begin with the first 2 segments lo & hi are the start & end points lo <- 1 hi <- sum(seglen[1:2]) for(i in 1:(kk-1)) { # prep data from adjacent segments gendati <- gendat[lo:hi] xresidi <- xresid[lo:hi] # standardize data gendati <- (gendati - mean(gendati))/sd(xresidi) n <- length(gendati) # call the p-value subroutine zzz <- .Fortran("bsegp", as.integer(n), as.double(gendati), ostat=double(1), pval=double(1), as.integer(ngrid), as.double(tol), PACKAGE="DNAcopy") ibstat[i] <- zzz$ostat ipval[i] <- zzz$pval # additional data for CI routine # k = location of change-point # sr = search range # sumxk = partial sum at k (all paths are pegged at that point) # var.factor = variance for 2-sample t-statistic k <- seglen[i] sr <- c(max(2, k-search.range),min(n-2,k+search.range)) sumxk <- sum(gendati[1:k]) var.factor <- n/((1:n)*(n:1 - 1)) var.factor[n] <- 0 # call the confidence subroutine zzz <- .Fortran("bsegci", as.integer(n), as.integer(k), as.double(sumxk), as.double(gendati), px = double(n), sr = as.integer(sr), vfact = as.double(var.factor), as.integer(nperm), bsloc = integer(nperm), PACKAGE="DNAcopy") bsloc <- zzz$bsloc bsci <- quantile(bsloc, c(alpha/2, 1-alpha/2), type=1) ilcl[i] <- bsci[1] iucl[i] <- bsci[2] # increment to the next segment lo <- lo + seglen[i] if(i < kk-1) hi <- hi + seglen[i+2] } ibstat[kk] <- ipval[kk] <- ilcl[kk] <- iucl[kk] <- NA } else { seglen <- ibstat <- ipval <- ilcl <- iucl <- NA } bstat[ll + (1:kk)] <- ibstat pval[ll + (1:kk)] <- ipval # convert the lcl & ucl from probe number to maploc lcl[ll + (1:kk)] <- maploc[chrom == ichrom][cumsum(seglen) + (ilcl - seglen)] ucl[ll + (1:kk)] <- maploc[chrom == ichrom][cumsum(seglen) + (iucl - seglen)] ll <- ll + kk } } cbind(xout, bstat, pval, lcl, ucl) } DNAcopy/R/zzz.R0000644000175000017500000000012714136047041013062 0ustar nileshnilesh.onLoad <- function(libname, pkgname) { library.dynam("DNAcopy", pkgname, libname) } DNAcopy/R/plotSample.R0000644000175000017500000000424114136047041014346 0ustar nileshnileshplotSample <- function(x, sampleid=NULL, chromlist=NULL, xmaploc=FALSE, col=c("black","green"), pch=".", cex=NULL, altcol=TRUE, segcol="red", lwd=3, zeroline=TRUE, zlcol="grey", xlab=NULL, ylab=NULL, main=NULL, ...) { if (class(x) != "DNAcopy") stop("First arg must be a DNAcopy object") if (missing(sampleid)) {sampleid <- 1} subx <- subset(x, chromlist=chromlist, samplelist=sampleid[1]) # get the data for plotting genomdat <- subx$data[,3] ina <- is.finite(genomdat) genomdat <- genomdat[ina] chrom <- subx$data[ina,1] uchrom <- unique(chrom) segres <- subx$output # setup the X-axis based on xmaploc if (xmaploc) { maploc <- subx$data[ina,2] rmaploc <- sapply(uchrom, function(i, maploc, chrom) range(maploc[chrom==i]), maploc, chrom) nc <- length(uchrom) if ((nc>1) && any(rmaploc[1,-1] < rmaploc[2,-nc])) { cmaploc <- cumsum(as.numeric(rmaploc[2,])) for (i in 2:nc) { maploc[chrom==uchrom[i]] <- cmaploc[i-1] + maploc[chrom==uchrom[i]] } } xlabel <- "Genomic Position" } else { maploc <- 1:sum(ina) xlabel <- "Index" } # setup altenating colors if (altcol & length(uchrom)>1) { colvec <- rep(1, length(chrom)) j <- 0 for(i in uchrom) { j <- (j+1) %% 2 colvec[chrom == i] <- j+1 } } else { colvec <- 1 } # set other graphical parameters if (missing(cex)) cex <- ifelse(pch == ".", 3, 1) if (missing(main)) main <- names(subx$data)[3] if (missing(xlab)) xlab <- xlabel if (missing(ylab)) { if (attr(subx$data, "data.type") == "logratio") {ylab <- "log(relative CN)"} else {ylab <- "LOH"} } # plot the data plot(maploc, genomdat, col=col[colvec], pch=pch, cex=cex, main=main, xlab=xlab, ylab=ylab, ...) # add the segment means ii <- cumsum(c(0, segres$num.mark)) mm <- segres$seg.mean kk <- length(ii) segments(maploc[ii[-kk]+1], segres$seg.mean, x1=maploc[ii[-1]], y1=segres$seg.mean, col = segcol, lwd=lwd) # for (i in 1:(kk - 1)) { # lines(maploc[c(ii[i]+1,ii[i+1])], rep(mm[i], 2), col = segcol, lwd=lwd) # } # add the zeroline if (zeroline) abline(h=0, col=zlcol, lwd=lwd) } DNAcopy/R/changepoints.R0000644000175000017500000001674114136047041014720 0ustar nileshnileshchangepoints <- function(genomdat, data.type="logratio", alpha=0.01, weights= NULL, sbdry, sbn, nperm=10000, p.method="hybrid", min.width=2, kmax=25, nmin=200, trimmed.SD=NULL, undo.splits="none", undo.prune=0.05, undo.SD=3, verbose=1, ngrid=100, tol=1e-6) { n <- length(genomdat) if (missing(trimmed.SD)) trimmed.SD <- mad(diff(genomdat))/sqrt(2) # start with the whole seg.end <- c(0,n) k <- length(seg.end) change.loc <- NULL weighted <- ifelse(is.null(weights), FALSE, TRUE) while (k > 1) { current.n <- seg.end[k]-seg.end[k-1] if (verbose>=3) cat(".... current segment:",seg.end[k-1]+1,"-",seg.end[k],"\n") if(current.n >= 2*min.width) { current.genomdat <- genomdat[(seg.end[k-1]+1):seg.end[k]] # check whether hybrid method needs to be used hybrid <- FALSE delta <- 0 if ((p.method=="hybrid") & (nmin < current.n)) { hybrid <- TRUE delta <- (kmax+1)/current.n } # call the changepoint routine if (weighted) { # get the weights for the current set of probes current.wts <- weights[(seg.end[k-1]+1):seg.end[k]] current.rwts <- sqrt(current.wts) current.cwts <- cumsum(current.wts)/sqrt(sum(current.wts)) # if all values of current.genomdat are the same don't segment if (isTRUE(all.equal(diff(range(current.genomdat)), 0))) { zzz <- list() zzz$ncpt <- 0 } else { # centering the current data will save a lot of computations later current.avg <- sum(current.genomdat*current.wts)/sum(current.wts) current.genomdat <- current.genomdat - current.avg # need total sum of squares too current.tss <- sum(current.wts*(current.genomdat^2)) zzz <- .Fortran("wfindcpt", n=as.integer(current.n), x=as.double(current.genomdat), tss=as.double(current.tss), wts=as.double(current.wts), rwts=as.double(current.rwts), cwts=as.double(current.cwts), px=double(current.n), sx=double(current.n), nperm=as.integer(nperm), cpval=as.double(alpha), ncpt=integer(1), icpt=integer(2), hybrid=as.logical(hybrid), al0=as.integer(min.width), hk=as.integer(kmax), mncwt=double(kmax), delta=as.double(delta), ngrid=as.integer(ngrid), sbn=as.integer(sbn), sbdry=as.integer(sbdry), tol= as.double(tol), PACKAGE="DNAcopy") } } else { # if all values of current.genomdat are the same don't segment if (isTRUE(all.equal(diff(range(current.genomdat)), 0))) { zzz <- list() zzz$ncpt <- 0 } else { # centering the current data will save a lot of computations later current.avg <- mean(current.genomdat) current.genomdat <- current.genomdat - current.avg # need total sum of squares too current.tss <- sum(current.genomdat^2) zzz <- .Fortran("fndcpt", n=as.integer(current.n), x=as.double(current.genomdat), tss=as.double(current.tss), px=double(current.n), sx=double(current.n), nperm=as.integer(nperm), cpval=as.double(alpha), ncpt=integer(1), icpt=integer(2), ibin=as.logical(data.type=="binary"), hybrid=as.logical(hybrid), al0=as.integer(min.width), hk=as.integer(kmax), delta=as.double(delta), ngrid=as.integer(ngrid), sbn=as.integer(sbn), sbdry=as.integer(sbdry), tol= as.double(tol), PACKAGE="DNAcopy") } } } else { zzz <- list() zzz$ncpt <- 0 } if(zzz$ncpt==0) change.loc <- c(change.loc,seg.end[k]) seg.end <- switch(1+zzz$ncpt,seg.end[-k], c(seg.end[1:(k-1)],seg.end[k-1]+zzz$icpt[1],seg.end[k]), c(seg.end[1:(k-1)],seg.end[k-1]+zzz$icpt,seg.end[k])) k <- length(seg.end) if(verbose>=3) cat(".... segments to go:",seg.end,"\n") } seg.ends <- rev(change.loc) nseg <- length(seg.ends) lseg <- diff(c(0,seg.ends)) if (nseg > 1) { if (undo.splits == "prune") { lseg <- changepoints.prune(genomdat, lseg, undo.prune) } if (undo.splits == "sdundo") { lseg <- changepoints.sdundo(genomdat, lseg, trimmed.SD, undo.SD) } } segmeans <- 0*lseg ll <- uu <- 0 for(i in 1:length(lseg)) { uu <- uu + lseg[i] if (weighted) { segmeans[i] <- sum(genomdat[(ll+1):uu]*weights[(ll+1):uu])/sum(weights[(ll+1):uu]) } else { segmeans[i] <- mean(genomdat[(ll+1):uu]) } ll <- uu } list("lseg" = lseg, "segmeans" = segmeans) } changepoints.prune <- function(genomdat, lseg, change.cutoff=0.05) { n <- length(genomdat) nseg <- length(lseg) ncpt <- nseg-1 zzz <- .Fortran("prune", as.integer(n), as.double(genomdat), as.integer(nseg), as.integer(lseg), as.double(change.cutoff), double(nseg), as.integer(ncpt), loc=integer(ncpt), integer(2*ncpt), pncpt=integer(1), PACKAGE="DNAcopy") pruned.ncpt <- zzz$pncpt pruned.cpts <- cumsum(lseg)[zzz$loc[1:pruned.ncpt]] pruned.lseg <- diff(c(0,pruned.cpts,n)) pruned.lseg } changepoints.sdundo <- function(genomdat, lseg, trimmed.SD, change.SD=3) { change.SD <- trimmed.SD*change.SD cpt.loc <- cumsum(lseg) sdundo <- TRUE while(sdundo) { k <- length(cpt.loc) if (k>1) { segments0 <- cbind(c(1,1+cpt.loc[-k]),cpt.loc) segmed <- apply(segments0, 1, function(i,x) {median(x[i[1]:i[2]])}, genomdat) adsegmed <- abs(diff(segmed)) if (min(adsegmed) < change.SD) { i <- which(adsegmed == min(adsegmed)) cpt.loc <- cpt.loc[-i] } else { sdundo <- FALSE } } else { sdundo <- FALSE } } lseg.sdundo <- diff(c(0,cpt.loc)) lseg.sdundo } trimmed.variance <- function(genomdat, trim=0.025) { n <- length(genomdat) n.keep <- round((1-2*trim)*(n-1)) inflfact(trim)*sum((sort(abs(diff(genomdat)))[1:n.keep])^2 / (2*n.keep)) } inflfact <- function(trim) { a <- qnorm(1-trim) x <- seq(-a,a,length.out=10001) x1 <- (x[-10001] + x[-1])/2 1/(sum(x1^2*dnorm(x1)/(1-2*trim))*(2*a/10000)) } DNAcopy/R/getbdry.R0000644000175000017500000000076414136047041013674 0ustar nileshnileshgetbdry <- function(eta, nperm, max.ones, tol= 1e-2) { bdry <- rep(0, max.ones*(max.ones+1)/2) zz <- .Fortran("getbdry", as.double(eta), as.integer(max.ones), as.integer(nperm), as.integer(max.ones*(max.ones+1)/2), bdry=as.integer(bdry), etastr=double(max.ones), as.double(tol), PACKAGE="DNAcopy") # list("eta.star"=zz$etastr, "boundary"=zz$bdry) zz$bdry } DNAcopy/R/exonsegment.R0000644000175000017500000000324114136047041014561 0ustar nileshnileshexon.segment <- function(gene, eloc, edat, ngrid=100, tol=1e-6) { ii <- order(gene, eloc) gene <- gene[ii] eloc <- eloc[ii] if (is.matrix(edat)) { edat <- edat[ii,] } else { edat <- cbind(edat[ii]) } ugene <- unique(gene) ngene <- length(ugene) nsample <- ncol(edat) out.stat <- out.loc <- out.p <- matrix(0, ngene, nsample) ss <- 3*(1:nsample) for(i in 1:ngene) { exondat <- edat[gene==ugene[i],] gout <- exon.changepoint(exondat, ngrid, tol) out.stat[i,] <- gout[[1]] out.loc[i,] <- gout[[2]] out.p[i,] <- gout[[3]] } rownames(out.stat) <- rownames(out.loc) <- rownames(out.p) <- ugene list(statistic=out.stat, location=out.loc, p.value=out.p) } exon.changepoint <- function(exondat, ngrid=100, tol=1e-6) { # # exondat -- is a matrix of normalized expression values # rows are ordered by location and columns are samples # nsample <- ncol(exondat) # number of samples n <- nrow(exondat) # number of exons in the gene # initialize sample specific output estat <- epval <- eloc <- rep(0, nsample) # calculate the max t-stat, location and p-value for(i in 1:nsample) { exondati <- exondat[,i] # center the data exondati <- (exondati - mean(exondati)) # call the p-value subroutine zzz <- .Fortran("esegp", as.integer(n), as.double(exondati), ostat=double(1), eloc=integer(1), pval=double(1), as.integer(ngrid), as.double(tol), PACKAGE="DNAcopy") estat[i] <- zzz$ostat epval[i] <- zzz$pval eloc[i] <- zzz$eloc } list(estat, eloc, epval) } DNAcopy/R/glFrequency.R0000644000175000017500000000214614136047041014514 0ustar nileshnileshglFrequency <- function(xout, threshold=1) { if (!inherits(xout, 'DNAcopy')) stop("First arg must be of class DNAcopy") nsample <- ncol(xout$data)-2 snames <- names(xout$data) xmad <- rep(NA,nsample) for(i in 2+(1:nsample)) { sout <- xout$output[xout$output$ID==snames[i],] xmad[i-2] <- mad(na.omit(xout$data[,i]) - rep(sout$seg.mean,sout$num.mark)) } pfreq <- gain <- loss <- rep(0, nrow(xout$data)) for(i in 1:nsample) { # ii <- !is.na(xout$data[,i+2]) genomdat <- xout$data[,i+2] # ii = location of the missing values and infinity ii <- which(is.finite(genomdat)) # segment means as a vector segout <- xout$output[xout$output$ID==snames[i+2],] segmean <- rep(segout$seg.mean, segout$num.mark) # gains and losses pfreq[ii] <- pfreq[ii] + 1 gain[ii] <- gain[ii] + 1*((segmean - median(segmean))/xmad[i] > threshold) loss[ii] <- loss[ii] - 1*((segmean - median(segmean))/xmad[i] < -threshold) } out <- list() out$chrom <- xout$data$chrom out$maploc <- xout$data$maploc out$pfreq <- pfreq out$gain <- gain/pfreq out$loss <- loss/pfreq as.data.frame(out) } DNAcopy/R/segmentsummary.R0000644000175000017500000000204514136047041015306 0ustar nileshnileshsegments.summary <- function(x) { if (!inherits(x, "DNAcopy")) stop("First arg must be the result of segment") xdat <- x$data xout <- x$output nsample <- ncol(xdat)-2 sampleid <- colnames(xdat)[-(1:2)] seg.median <- seg.sd <- seg.mad <- rep(NA, nrow(xout)) ll <- 0 iisamp <- 2 for (isamp in sampleid) { iisamp <- iisamp + 1 # genomdat = logratio data of sample isamp genomdat <- xdat[, iisamp] # ina = location of the missing values and infinity ina <- which(is.finite(genomdat)) # subset out the missing & infinity locations genomdat <- genomdat[ina] seglen <- xout$num.mark[xout$ID == isamp] kk <- length(seglen) seg.sd[ll+(1:kk)] <- tapply(genomdat, rep(1:kk,seglen), sd) seg.median[ll+(1:kk)] <- tapply(genomdat, rep(1:kk,seglen), median) seg.mad[ll+(1:kk)] <- tapply(genomdat, rep(1:kk,seglen), mad) ll <- ll + kk } xout$seg.sd <- round(seg.sd, 4) xout$seg.median <- round(seg.median, 4) xout$seg.mad <- round(seg.mad, 4) xout } DNAcopy/inst/0000755000175000017500000000000014136070260012655 5ustar nileshnileshDNAcopy/inst/doc/0000755000175000017500000000000014136070260013422 5ustar nileshnileshDNAcopy/inst/doc/DNAcopy.pdf0000644000175000017500000061756214136070260015433 0ustar nileshnilesh%PDF-1.5 % 36 0 obj << /Length 1721 /Filter /FlateDecode >> stream xXɒ6+t, L.WYIqI-$N8Oo"ss z~ :Qb]ШЦ ;f.:~W,7˕1Qv%A^ʇA Lqݰ#|=;HVWyx*6BV њLuPA=!:8F6x cw0ڽh, 5E*"VƤ|\-V#1֨)? !)z Bdcvr,VQ̱y7U䂪s#rχqHrf`.&D,I*+!z{4(N p; I: #>; 3 /rKcEJmec3ix$5E:iG \-{ @"ɔEe0:x7-3$@ 3X80Jl,g_i8:WTsx@Dk+[:$q @W]ښ?;ȁMfY_\7Vb2*06'De;%\czڛeUa7 ~,_H}80q.Cy6…ύb-= LI@ҝe@Yb\h^-zo`K`m}3R RI1C.Olhpwx%~}"eT,$0.Eyb[4xN޷r-Wlۥ%?: F,L[H bz'sUIiEu?.Y%?m8> stream xڵX[D~﯈*ѸHސEȱ7'Iysڛ4 6Y{ggfͬ_̞<eQhf4(h֌~ ~j?[?xev;$E*\F2W`L)iPM,["opRNaf_ey"VQf9%BXQj  <-q$%iLv(l;x~$;>^ x4ILy6Ibl2&`Sa7QyxMt,=Wj4RAHj+~ykP41yv-K,S&y0[az6HE.kw?ǣ/5CYy`k ZB|g9{D݀$>QyH"QiZCPi<,5ԴfiNQ ]9gw]Ix LJ IX@dk`ޟA0l/>ɀq2 JSVPFy峖{ SSoo"s'v2i *`d0R F,97$DŽ4L܈]xbK2Q7ğ&:E%#gY ttrjPH^@H¨/iXi'#ɸ} oް\܃7}Ww.:͜"KΐOBrb daη& aRȩIw0n8 $qN7^HWG'k%{꿰o`A{GYi8)xKuek' A`tS [4ٍDp2RڋNl[m.)oŐ{&wy{\/`~bubr/@t FRZ,}$gۻVIEσ8Q}l/;o {* ;YYo_^)?iYw(ckسX4jSSZ۴ܒh3շ`k xzA~EJ;{,jT+tBio OT_E[]r}g 0`@n8@Ɏ/HKȤrsyد5\#KVk$<`uB훅УaS:JN<-)HrK$7䋴w۷\[ +."0PmѺ Sd*CQ?kC\el#)Ty &|vztNρk}Ѵ-W 7PkZ YfP@)طZ2,Tr1ɒpQ{y =RIze2H=/4$r|\iMVdYõ"i{ dIQ|I _5VR&.K!./NlT>h~qa.?W[~W:;2I>_D NHy^@!D%M{@RI+9>܏)|Я!QSEK?v^#\,| ᴭ>Hݝ@k~)ɠ=cj[ԉdJԡg]IL8, =y9{7`iz endstream endobj 61 0 obj << /Length 376 /Filter /FlateDecode >> stream xSN0+,N]'$DnM_A)MgmoP kwޝ8"Ͳ1)5eV -+%NQ:' DxFbh+Q|GAdtK%qn ox'^I+{\!.'X-$oCtWD$`V 04 +3J;`S6F5&zѧ8gNʜ9LBpx k3CµvmrM#]~U #Qu4RXL8\nZVAuߨCh){\z)?!aЀڳ4_{MC$u 7Ft{57?cBw惣W)Bq:UX֠ endstream endobj 57 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpqVgp1D/Rbuild3b8beb7c28cb6b/DNAcopy/vignettes/DNAcopy-006.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 63 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 64 0 R/F3 65 0 R>> /ExtGState << >>/ColorSpace << /sRGB 66 0 R >>>> /Length 14029 /Filter /FlateDecode >> stream xͮfq}g(|ONe$F $,6#- jj>[2'#dŪb7S?F9G^o_ߞy>Wo#|Ͱl,> /(s Kɮ0{PNYuݘY6 ysNsߠ+OX{˟us?{0 =n/{Ǟ~>gv+-螽;6ϼvs} Xen[}ߥ]P^~]~޺kn(%ueR^o[qKw{6ҽ&`en'ݳ_>%7 [ÿedۅ6/Ϫ]g>ޡO{I7 oThǮ~tݼ9?Kּt9݈.a5L–DƱAʒTJ.e~l{>f/{G`m,=.3{)ӧ kov130]6fnk}^m3r@ʽnJ6ۘ{} k ָY#v=n7f ўnXn<vt5}޽Y>S98h/X? _05!煽ۖKf7gv]U}<1ĔӖC&{Y>.,k<ʒ-|~nA|k$m_ws-`^>(+`3C6`W0瞓7Ԟ~Ꮌ+5u\Wz޽ml,bSߧH'pS/Q}^p^v˶3bkm/^~Xn/<^:6fױibHќJBg}Y ڠW0CƂDM1^-.6֚mKCu[ChcS߷oޝWo`cXyjvƪ Q1sq7܌ccKݞ*fE6ƲȊ*Y9r{KS=/sE 'E7egeY۳dbK 57Pm 5P[0c{vg%j=/jዡ+CG0487fKnechj.Ec*DMs9|LЍ^7V\7UX6%ne1汗[!ژ^h^&(gj{5Xndcf/%n5ْi.)`n.14iCE[Cl뜡.Gbmgm6="ٹY ~l8]0 4#|Mm0I2hLhǾvM t#loqIƚYrнhXd``v}رfXC^HX h6d"^Yu%=^ j j{M(IQp8n۫1H$EH|N=t@I[<%V tjKEϤjC:``}MrHmNG vX tE h`H")-k75pRE+Bmh t!hatvȆql&Ravʆ*H. Vc`ЂQ&ƋkNy+q^YDz 6jiI<&O߽:RhE S_^ 4$5`ڛ􆠫%|W^ \! -#6I2y@2Hw%,&mz}+`:6~,JjX,dkPu%IeV:vre%~Eژw{I=S 6{ Rr`HA`?˥ФDm#l2xıXͤbMY%ЦoJZg6SmN]+߉ϴł 㖣Fkn3]\GnC6?lhlr]WT1Ŗ@]W얬oxm cC4 iq {eH΋opH͹u[,D H$Ɯ2nSO傃3?//" %)%3f3Bx!X#%]iZ$^ c:EdP~Ԗ{8v,%k<6jk. BG*.TeQiJ@sswIF[7m0S/hm%lXUm[wK)J_"셶 :t9h¶MtPMFxh@rF>&'5Хm+l1ޠ5:d2Td XDTm2 LFDh[nCC K3slc^̃!tjLəQ i ,~CF`C!H &d"i `HM3 MX\m1j9R```b"78&>DZlp?S3" "/hN_`WÌZmʆ(h 6X%4il6 M@asm6O *CeڔgC2 %X[͆*ېh0C$h29A trMx{|vEM]9x!y]]jOm`QݳDL޾AZp _hE<=MN"M׆zdT c!¹2&nEUHT)t>"U.\(m*L$.N 0 C9y.k>.X.V~ۦڂc*cmo( )[)=M5$bEW$$o^6+bBC0hklY ӱ`RdxC[ b=#L#{yh} CCm$C4y/(TZ jzb]ԑ2&W9V ^6~l۶#6vnz!fm+ ee`[jg ̚z&Ys_?6D]p8ho'gRS"V`Qi5c%s Q 'M7pI" ITui|Xh2b#h2n dg+E-N QC4ɜ[5Ds&h'*'u0S֪jIH`Q[U v O%GV .ItXm-OA#L)/$&V1+kJ`w[}9/6KUتӤ*u3B>0kZ- HJSZkNd#p۠(Md!6x53h"7kMtLdwh2uN&V0W90ͪ"MR5pHƢ!̡EC0J*8EENH"̳qƀ)7~hlܠG,J*`Ÿ=Tisgd@`$i/B|/K49UZ|~YA'ͥK4<ˢX:ޔ饠SΆx+ܒg%>!3E*3Sm0׶]"KP ӏWukV$WX*|P0k9"VqK}R DKgVIMb53#^ GXhri&')kXZцD3Xm+Q4 \3s ܕMW4I+)Բ+wN*oLxi*L^/嵴?x .gaUn7W,aW0 {I;ۢeHEq#^HvE~ޅm͆*%ʏiC)[ڟMc`ݎSW1'nK0XCy ,v ``DHV9S(Q70$ԥ-hrZ'g})gSJ  = ] z潽m(v<,`9Y(3rLknC] \j!U240㿳Q.5hr}`]1#h3#*@DӛhrI8&'*whZ*Z/)8]y+B^\Xd2+r2qѷ`C]$<^yH0eڷ̴ ͧ{k3d}:vKbHJ4PĨ[jT&-zMŎ*STzgke+ѭYжqJR^FWLI4SWLz X]IFlأ4=Hbp4#Pg&ct++=?גPyRD3U-uf+pnH;QgP"{B2yLPW-XXtlQب#&#㷌7ER sjos@K*:E49e\Eh&E&S֤;j *~yP2KrH*JcʉJxelФE oФa^cŞI'Dh}15~*~*pBTաt< ,{ұAAY{[:`РS}/ޖO"LM N40D[k0iu.<&ê9th2GrrҊWDMW bh;& Ms`F^M"XUږJҤ=JMn`ivҊSډu!2*9De%$4N25M 4*t]0VҊpj:HzR?R & nM)M496~ P ['6NZM4)&[ x۠-EM49h V9Y U?B`+qJx++ccm!ZsC@RVhڶ~^}ɺ~ݟ݃fmkۆ,J v]l%Rm`KDؕU t[+tlEc4Wmo=s`dZ--$҈w𕊟"g/`QVKHx5 4"[ =Y,uLRmUِ6X|g\7hz^MD`oۄ_& e]t4?hV)@!57p)ŊDX8 0MS49/M.TYި\1U}p 8 vdFƉj?s48.}s>v C6M eT7Qlag;^tZL^-A r23fLlXH[W]:يu&{ӀΏ(T&7)8I ?:f18SBLyIuBFb1 "* Bd &uq+֥ 6xZnb]J=ʼ5 CLo) -T aC*C) C&ws.$z:z%ATEЩ 8ڱ!vPTA-ϊu)i <\wl~Z b\7D Cf"C)b"npDVm)*c1D-~,nGeq|P=Ղ1UCƲb]-u)2*hC:Sus"ZtQi| y8JxIjymɲEA u'],:7W*dwcN7^`ᜏZ쉁^TL)!TCwEaF8hrAf .xdbWy* L% ,Jos4<+% (Th'pSp43rf`No1w }Jx% $x[e\J{LrR4j25F, V=bpvX |DFA 5E͏M})\q`&g jjMNT ln8TsTRҥ*co\d<LM:'1UH Ys*@d#ܙ z:BS%o sZ-y@NgB:C g C4S렻ݒBQEZY-]5i@e$5E3d@߃X+h2R2*|%2K ,dΩ_rJr%}z?Ԃ% ΃ץ|uCr}ˌcK~aD9ZODbtz塑9RDm3rҊ`X"Ɯo%dm"(?4Lid.q'Th&]Tpfݪy1WF͒Ӛqshng`i/60Z܊m:ZFq!^RyT=)m`V<ab`U$m`,%q8nhSwj0Q6HOpqE3˚'^W%PrN"sY^6 lJy~8˙z ɉt2P=)!4HDSFy.׿)D]֢ 3+-<40ҊěCϼN] )c`{z3;<'.Y"C* (qLkGH8"݆hc=h\,,< 6Vw܉IrS&m9mX%PN l` KFP`%§/Em+׳P=bIrCr? iZT-a6DW/^H49Q4]-1 }5ߋEs)dL%GLk`0myT@[sqыID}TV~~^8rFmɈUK {`GbWd#ò@W":S [L4L+ldցxJH RM1B4bZPB{F­o,lD)ZTl`5&+8t[\Ѩ S^J~ [X{?/oˋoϽWNIJ_ ֯ MmYC?KK} sov2} ݾSBMg/O~6xҶgG7ϟ:>۷Tp~D?3"Kf4c.t _06$7_?˿՞]?~?~v?~5fyQ=~Y~k3|Y2hl=]c75I {%TS?G9I~uؿd o"/RXwo'vx>ͯ Ź9Bc mJO@LQ_tegC_,m*ZӴc)Lx.w2}_m*)S9/TG SԬܥBJ~/DseW1/vs*+J՘y~_uvt(8ֲؓ}:o_U^s~_$CZch"շ%ΏoP}K9G>_J٩־<Ԧ 8Ao8JIeԳ8[ :(B~/Av<[i_Le1Ӊll zyɅĖo?r\uq endstream endobj 68 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 72 0 obj << /Length 845 /Filter /FlateDecode >> stream xڍUKo0 WjWݣ@w0 uvlII׏XM3`0dKE~$?2ȨTe̔0QdH!Җc,ݨC? Jd|7\(Il"fӲfM-]$EOdܵڵNP&Qy|5`)rThV$p ;JvԪk[]"̙R$#p>Sx/|^dZbd"NRUNH[uYiX1rhm$)Po9杓)\c8pFIP4]D_- %P6=: NSx"8Zo !;S|HarxHjGHA8aܜ^sA-+:rFK1Z*ݺ}ǮH] oTÊ.!5eg67WgB{<Jm؏yvlE !y*2SXt͌v-g u|z-ՊS{$WʊBi',SPOw$':Lko eKmCF/_wgW jxӁP+j7 ခƻJkvW4ˡhDi/ߟ#xV-NXA\Fx >8ڱ^:a|qkԛz5<_? ^_8[L?A/Kp endstream endobj 58 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpqVgp1D/Rbuild3b8beb7c28cb6b/DNAcopy/vignettes/DNAcopy-007.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 76 0 R /BBox [0 0 792 648] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 77 0 R/F3 78 0 R>> /ExtGState << >>/ColorSpace << /sRGB 79 0 R >>>> /Length 19344 /Filter /FlateDecode >> stream xˮv?_Ri;k6J@`nn2 AGF|\k^{{b |>#}|2lmXc9?|ǶmhuX#E/_$,H#/"cm?r~&(r]AVpVY~YV}x1=+YW+u[gQ1.0ٲqm~mu\r|udǶ,ߡg~vYj.Xlx>'0.esSY(#mD6xϊ+(x긤8f +sUe ߯[չe`2o&^2uG/Z-<̉]&^]6,=aCl$s~Wvwv/hv..[K3G˲=K%.kS{Ox1ٗ⸌w{A5l7yoYs˹" spld\we3^~oaͩ3#I{x]R=~ v"{Agemݽ>t{o8P/ϸ1q3glz 5eXGan8EeM_Z]gY/Gl5g>'0.L/˜foCM&뛞q -vu4|[]-~C,q2|[uSm%.zvlv☏s>MLt/XaN$mK+˷\ ˚Q\E-/|]u\\տm\u ldsvlHu,t'ƍdseB{i'NxP-Q<¦AҴeg94qpVĢl o aViyD8pFښX5-M ±nbں576 U 3 ¥#ĞvmSN!:IR}݈5#o7_}?8oDG>7v.ro]O7{l7~Fܛ|!|=_>ڧ_a B~W_Jkze}!K˥)ך?$5{d?~C,E}C͋8ڼw=}_\>!?s'k /͒Ϯ#C]ns􏔲M 67f!΂T2ZicQze}=Nmiױ.Wۿ_[Zhr?Ǯ^wu7쀣3v|>Lt[7B06Lm|m}[rq0q)Ti=Ii?ߜ\$(HQ {O}TOCڍht]ze}=åiw}~4:{b*_c [K13R= $nuz[E]lQ*_Nmtz]A5Uk{5ۼy 6C+;|ϛ8UfbΌUrJ1x{MUr*j/U:e`+x>G(M{O*';PekxM<%ILY}3}9qJFՕsXA8?D{76ؿc_Go=;]WJ3?-ke[ʾ]ǵ޹= =z{2L4ǡZj=ndg/NMl'=ɯӣ%n/ygljAa{̄/PIP/"oQsԇ3+ ~c4 0 ? FU¥v VQv[s@"OUC$˴} vYdI'$^$- hI}/[@8iN^R),}l:UE*;⸉Lb` 輍1V&EwNXnď9]faE66Cmts,$\!rD RLp͛4Ҧeu,n#oz D0Y6m{l$G)= ʴvQ9dF@Ӳ3CP'SO͵K}wq+ifboW_v㐆pؒO6QH2TE2V_"Z~y0Co/r1٣hg|xd'eMPfIPo؞^/9xԍ#iKG^9i=x8 5cÍwqz>!U Tתa]MՖ4C4GԁiV6)GE &X=(QU`PMX[DHU/U'p. JW$a m:'QkAIU YL]l4(-ZvM31Uzz= sVV twMS$;MYV뾤fF BxͻTq@&n nzRgNjthOh־y9޺Y$cWACa2vn5=jORկ4IQVVl!qf| ֮'7/jB4}лubVNE2mƩq c j>R CҡLUmxwEZݭlsԧ=G]¦JLpul$}BU P*:>Y#xh"P`2q]4^LĆHf*tG}]8SCjlwf|,n9- ¡IUnK^eh]%uL f@m&szQDw#.k{ڥN D܎OM]d̞G }-QTm&.h`3{Y&h cd´f k¥:ogMr¡T1 zJg<QA楮ktAh^jBq.!NK?ٮ9C3;wU=~N5[":噙>4t̨KKp\z57v\$RmAҡ \ZO̽3>A*d&U}ƓiY$҈Ucg|MVs#=D!f|gdu 7‰֮<'^<=JUA׵tƳ6cmy-nѶIȤn[\Fq*f|\m+:+!ZvE P^JDT &P$>yTm7zkJ#Zp-z#Ns]R chUg߽<ǯF5ދF5ׯQH/ͯNxԇy=S{xL{1';{|!PsNL//WӘ£}·=c e?G~wLiLS؋~7c sԇӲ+^]"]i'kGH֒tT#k~: #߈K>=0 5Gh׌IwC&eQ 솬o;) xb¥:6f7ޑ y<,5]';ӇBJshfe"F:pz1 @RX E*SY&)Ҁ]aQrf:Q:mZ &(] 89vSҦ"2򈼧.ڈPknFTQoim.5HE|bQI)0s|7@->2M`v, ²Fbx Z7\ë28MaGGO[7\jN ~B;`s%ug p͇eA"FA8ԥ[%aoSW閬6z~  ]]~75{őߜae[7ӦLKGhƧMp8_O(&Wf Z F3=C=qo5kKB(qJ"zGԚsE0)^t(yQ#?&~]kr-+Udl]1ވ >lҌ(Iwݷ@I18Ʈfs~+ `yh!4q4:FYnD~44 x5y*&sǏzl]𨚞 ǚ&syc0P&KH&UC^xe3HYfaOfZAdDABzc>ǯl,tGr4Ň1z jh@oO~@ݤ'c[jecjU~G@jͪSs@{w'CU9V0 TYuSnl}ےKj_NڮF%hI{xd`e8{xd'Uvr_R, kkōxWcobsi`sq}3 p{㓝=`-T\=ܯc<zqlvgy>}}ROw7@<%4|XE2&'H+_$^q 8=ݢr;_A;yNYڼGs(Rk"_Rpȵykb[":HWM>1c<|5 9I{L]^h>oZC <|@_+<|ywIsRώO<|oO5y<ӕiJ.?a3c%(ޯm©*,FS=.x4u0 j]==^no;ݫ-$.DVK5̞V9E-©AMH&7NvDsPĮ6NpVt;B*n^ŦZKnrJcadTݓ*v e r;o p{WYi" DRb\IG>J RKgYTt!\)EdQ@c׫㉲kH)L؅}`LQQH,U B73Sdq^*[S=x >Yj06->ʾRkk#o=F"@7'ɰ jI NsO %1L:g+|*̭z_Ԓ2D 09QqoF׸uWr=Y ¡`4{NAW#{1GPMIB7 uIAh2!zL;d {@/=~|_框*\I5oZR^5sC[=v{Aqq ﺻz\ՏOvuYj~tnLJڇmm6zW_q]1G|6cK<菭D菹.$NS)evUw YoKLQxL¹ n䤞dB#Ix7w0nd|'%Rt >fउ MG'×yABڳRbƪa9I۸!N#(K&,yʩdK:R} YZdJt?gSRΜr"heƁU,s¥::#nnD_hǍ= j\Pf=-%Jq$@h{c_$4~DOX:6*,L:ɄCwqM]AucE-34 ަq <t+4 6ݸ 캐ؕK]̍GfK*<ᴠᝮJ?&UϺ;jY75`vXBߠ O\#b.B((`Io8ɕ>ZM2M\qVp:n#]]Qvq i U0'9}3MW4cQh(-l@N]8MJy8`fky/;aM4~Rzboo7%% ɕi:iX)!&;u%z__d!r)y46r3\E C^]\&Ȫ3wqz c 8Zq>9^r}_kK*ڗ2}:vMrrm`>S}q|a,G#qs]n=.;\LJ';{|)۱|/ݱ|+߱$po#k6Ͼ#cIʾS*Ki_Ǿ}&'wdV}o[}}ee6ph'ba|^1IXR òW.FPgFb𯛗"ԚT&O[*㔻fB ][-k%x JAhӎ,i wA``BeLj3aO;=}!?QH6ȼm:&@fBĠuc,Chf32"*[D,w 2sG: bm%CZ dWN_3`c&Ds¥C љ* %vc&0U؋Q4s&,Bf_?f>c&0.b e)3n_k>J9!V 1F.nR[̄Ǭb]fB&ۤl@51Ja0&?AT20|d2RPR檃0Udb,PDۡ3!mNpy B:l&@a$LgBJt$fl΄mdL2X0t>WV&!::uJ3!\Ox)ݰ$]( (ĂB\oUNK*".YYs˝DU,SOWR=iLj`SP #u |8cL.&$G|M"m^MiXpʆo@~SJuT8FEfIHe %ӵAoq!ӽK42q3#ՙ0j mG]YJ ּ~9_B 7O',rqyңkaK. gk_zL9{XCSgk=|_{hUrBș;?UK& 1{x9Wh틏.Pۋ7{7{Dqzjwݛh=.';{|hԷzv5&>:Ûh{MME3?&Ļ_t}x >.GQ ܹm$XѽoRtQ4k4-[5yvZ5/산@6d bMǙHq.R_KN.] I"C7yrK^@8ۍ :`ϻ"U>젭\WpQ7CtUA84S ;B+#j\ qƸhB9:vV9:Y.s ZŰȝ-V ]`i!\DݤآY7Fͻ4d3d ul\.=Ԡ7\ָAh qO3Q b{ Hm-vu  l>B0[-c #܎ z=Qk4ob2@,Jr{_T0yoPInQ-y;{6NO HiBi]'^`q qz,K QJv2J3*œ Cݤxtad B pFa3˯b"]cl=}\+¬Hھx9~Y eh`Oz Ḁqp->eK\(HO,,qFgp#Xz|"X F//eWc?`YX`nDOEEB3@ ԙZ'Plն1nW=6ElLCRMsn6ƫY:;vE}rlGaEޖzrS BJ' <04`,*DdlSqS1NUڢ;eA(QĕX\9/,'G2RGo ԑ77C *'GY$Vv\|aG= eDh) DvXrbL#]+ڍ22QSY3sKq{lG_YQxm ZɎ+ Cp-vWz ﹫b .$Wv GԘkUq ڍ¥bt0 ʦ3PVOjPI]#\Q-Ψ !4=wW3 ajcmcsCd!,dRMmi}%В]%Ml5orPFv!N( xbv5+~g0]h@nj6\`WNǎ&ͨ:ɵTh.Th=Pi{vU mF/ Q `7KF?DuU: Y5@\?Ҹa N+P5b3~u(>M}@Wb!o_z }-RK';RD7\ׯ伶F}cg!qza̭g!]8X_8-!=]=9dq}-7=ϓԿglWqE(7bN {=mъ0fR%p%|%Ϥ&`I)rɇ{j<_L*H|_<\'\$'B2e @:;ŦU\7 dJxI/3IC`wHXQзM"HPpvH5 #! m6MiϩObHMd@FL2=cnH4^u@% | )um1)9txN¹,_9{Ž`29@Y܍ _(*l{^s'"omѹlչ[wXM.KpXC Ǭh, u& PI\))jr%aڄcM ʊ!5.Nm+<(Λm)aމDۂc]q{VȽyȑ6_O7Ԓk{?> l)q_).9+_.ҳO/vP!y')ښyIrm^EV!Eބk":4M QaHoR.y攡R k>PдDJEʗ/r]Oϴoq?i;9D!oS&-)EYC,%WF}< |i +'Fetۂ *DQ3E{$EUl9ua@sil-AXUs`n@cUUsT.Ui%2Gި$1?޼&l¬ Sc1+vVt%0lTb1*P *uDQO + з襄ND1%Wf럙+) d ?eqÈĖ#K Fa&D)%$[|ZUretcÓ=Nhov5F6ں\X>1ɮI Lq!RBNV693c~l57q>2s˖8ڧX\_w/̼%r, CON-O57y20}aRg],Eᦢ8mEq㢗[7i/>> hk2oڌ~55m}`׊WRuH1%'I'xjP$癡UElʦ.r=B̾,PjBU6uO s<-fUz)aCo>YKWW)Vb 辌-j%G㘥˲AwTOXx40FFݦ aQdIHi /QWյy[*lJA:>6ZA8=P0"TCJXU4@Y]?"`lR.@SuT*S]MM둵'ut' Rb4L5b!)Kl͌Ѩ ݑDwuceqSՌh fY :cQȆF]Gl iQjvk#+@g"g}qkg&go=,жiNGu L},0,rcbx}=0kz=.:q(nyK_ٕʷv'a 9,0kq;' ̈p~on[`L8/^bDŽsƔm? G\xd±yxy!Qu kL+M69?<@7\Bg$o :INaT@xYZ` Yn&P*y$=Oo[`/.Xfo/!<;]= sSaq~Q( {LEupy Zo]I \Jo6 6n-˃$WNɠJSU-"ԀekO꘎:˒^WB'ZPUbVF*/M5F޻fmf>4ٌ"jnp髰+tLD𠓮]VvBy P'(EM%VJwI7!q˲MmEAq/R"Qr k0i2(KEj]+n}c4Aͣ3zd2f9F˞R & BMl&>CY$h&is"]d⫤ފ@vk[˾ T}H$wȫ4uzeea;|ٳT'ee!~+9OK}c,o9\k4êo˞d̨'t1}5tq\!6wg"@E+\S)˾6efNjlӵf(M*^DdȦEd@_JFۼz5& ԪFW왫S^,VxqϺY }$/xY; xo=%кBS8֓YK{18vor쑞zf8zqXL㴘4@M57zF߁z>c0zCTf!ܬ_ET}Ŭ41I}?3 Q'P6 W'AUC <"cvݸ[jSعYs2xmm-@@Nn8O;t3KEo[H{u yt@DA<5IvjAPΡfCϴJEoTOT9tl1>6 "kXQKDhaCX$K0!8%B"m,[P`IV4T+:%xYo8R/ ZqmzVv^HX9> ûG|@Mo;(£0t-V&$IfW騙d&- Q:Ipé12ډqt-4hd RmE/Â8ATğ{`DKT{xxa) Go=ݞ=}:>]~(Bx2Pq=F\[^),מ }JO9x:{SNT5ߐU7|Jcx>c0|1j\͟_1|EQU1I}?S P a wQ 'Ox43ܪxRT% F`MS527?{H8 iƃKupPBC ;  yï 4oHh9`P@2sbX `t90*RH+f0vV6ʼnA]*G*.!m oRk.;KuHD\jC:Ztw+o|ȿ[2ӵ@|E~==|ݧ畧S%R*$VhiRT[Q>:Kr]Sjs'o {|\q$AYH2p4R\ "zP܏AˊC_MUkznfQΐшV<;ƯeF_0e,HwMd NxZ7!×sN^lWgn*,.<.6- *21EAa r$e,.)~$%Ӄ!ǘLmR/WdG $E/5d ,xx1Y4YJ.3q5dKCtN޾CLJD$[rO yi߮(.[A5-:uYkڒAAȔ~{d݆ :yNoK:aL}Omt.Qo?5&nB@'s>gپdF׀7d@{MQ^|/V,ѽdorwcwe؃I<*dk`b$fCo2YKA䬈@p߯'/к{֬і˥_C_it>C͹jAqNCnI4M~0*0*wk9DGԆEmWgR; ύjs+'lhWO } |/}jYf~' g G:qm~U z_@M1X.vE`7 c0F -QA (]AHxA9C8ӄ x >dĸ'x%QXs"K Q0"Otd8(3̑}LX $hŔQIX0\Gf`,@J[&"dBcmB(ȲR P.1Nrm\-ȺZtD `N $ʨI|D+TH`Ɠܚzyʳ贇ܚ\Q5Oy!)o!bS~}~Yb!Jv9 ^u=@}zJ R0;%r׼L~ b8T~ c5/_OttZ(|+Q(?f\O5/:>O{ΈB{\J_\zM^`ȑaMݹ$~ʁ'ЯVk0d[`s;XRbpV )(T @W4'"m75YĎK6Fl-11>K\ HuK 4*'0Ӛr[<$晌-ܚg:Y]<V9=+tt-G?<`;(y܏@G}1Ә܏@GrɛG].| x?mŏc @CWGa|dڱU>?_;+ӆ⪌e 'Tw8UY, )%0PS`DB">Ab e`*iǸQ!ȁte@e"Hz(maDǷʋ0tY9X0?z^ 1;)J D7Vec$BhYS@"# x(.e%#M%WYX(X2{[bHX:,0'0Չ&0Vb? %I\tCT+FnuIq" ܕ"L áo-1Q|2 o h I܈is-/P0΍_0Ʋ" `_^0d"]j$%V2TZmxk d<?<>W@4Hѕs3K]T|WiCuܵnZF%rcr׺M~jݏOttmojv{Zc/PA;;\v0ײxҺ 7j}su>h>\~M}OLϴn=Cb6KC\eHN﷖W#$ݥH%&cx? endstream endobj 81 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 85 0 obj << /Length 736 /Filter /FlateDecode >> stream xڥUKo@WX=vެc#@$8 x9vPkmDU&|3l>:(X"H&E~HKLZ3|)hyOmH ," R:]*6Vevaf݂ބB@ݡt=bTG::X +Z!07n.eFPAA ٪JaΊoˏbMl-#eϵUkem:@FA1u~+$p C7Y^K/.f~O: SAf)#)MO䉑ipB;fn@&  )p-8rbSMYFEkRK'yH{:~3lKŏhBk3jvK~O Ҷ <>4S`I%Quãi[Gw&d"zg*C1\[ <5j;A]<r!;Hӭ<0k\MpDoM?6"~Z<0vm\v kLSS6IIqJV'~> /ExtGState << >>/ColorSpace << /sRGB 90 0 R >>>> /Length 13892 /Filter /FlateDecode >> stream xMq+RZ71F / 6M/f~0R9{jTLdx^~_yWK9R-%O׏|y>y}_~K{>jy?bzŏPy+Ƽ.ԏzc#躡[XQEϼ.tsߐ4 #4zw[Ϯׅ3`c>hC%}QuOXǸ/}t]7> T>.#=Uߗ{u˲e/1uwXШ#_i/`EoM#].nϲag.{OR W5?=~Ϻ2$M%7&CK>¼. mg}yA~>}mM,sښVyσl6ȼ#4}=h no߳/YK5ɘýOL'q;1 i/2Wu29VҚ]?w56[7ץ9VuGת^DmFmkd/!Ī!9_ϻ׸iqӺy\Su/ow|i^߳^Kwu%Dz@>d/ q]O \7 2v'\7195OlQȱꇫkI09OX;lqQ=]~v9ybz9/ MuZ}]lbb8{Oll/hgmKhNn"OXp{޺Ė^ضh'O>=E$^خEk7vqc"=v梤xah(ɪ7T0*tnʠz^@ǭ ȝd^|JŘ<FW(h]= ܠlcv: L  G˂ ӄV'uv 5XPF_m\rvK ň-lC Wx̋rE`0}S&AQ`T \T5`JggQl5[.7[<X+n5W* Wul{C` p˅;B`lRqϨi~gІm(*0SV[ f9?nbKˆKۇmz,v>Zh؆4l"md4l D`Bdvޖx9}-NPM"gjٟ$0mI;[ydτ)UU [-a ݳo=J`r Vv[x5_CNc dZl_o,b;xf &P6F$Mհro\ڶcYKl&@ p+EvBL /17m ;rJ@B'V̖nYW`uR $oY*I ./k eC59>oEuipJZ[X&AKvi6iG.lˆt"=l^gʆC~_09`}f?k no&\A`*<\`.gw%D{`ׄ.O 9.bk3hKR ݟ-,| j|H(t5H.뚇l.zر6 Ng | !EZ7^wR[TN6=9"ST` o..g@jMm}{w~ <{ tm6ٱ@k qFm7!δD;uE% XЎli8{A`ko6vnQޑ %!aS%-ݠl(Ψ%#gLtJ#JN4}O+yK{iO`sI -dBr"&M#~&>HÈ&Ĺ3g ݒeфX M#D([!ȑCpXTD% 9&ދX mG@ %<JnAo6ʆXL0;t^hm ?AP J8!Bx-X:B&ĘK:)ܹ:dC$ V: l`w 5|sJl٩8x9(~ O͚N<6m +oqaLpu'\ %ׁ`4kq5@`3m7!]6!P7!Ο2ºY7!^O]MJ ՄxldwgO03 `x{"Mxh^7k\PW3Ĉ^%Hg:nLJTyh!8,V=]4^QVwzj7-ө=2ېHwn'Rsb.̧O∑GՄ3%(#H8&!6\])"`]*Smuf0xz PgWg`Au0vl)h¨T~v2',SP4'뫕 1B Sܬ K@d <[ 4J,Up;Y!3Rd&c$v'uU5!|bVuN*lۄ]3!fgkfN5'DL5saoj6T`kᤏA6'g!t7QEBA)Ӧ lm([`ؒW@n^"5T6/(0@k&XE`t4L̈́86!^&Ę)pSzTL`)GBUNT-myGJhQ&jQ%r3̨r{c?L2A9r4^s\)C[ u'S`Yni(G;R C4pϥ }mBLEBۄ8y=",0YOل ] ޶9&sOYJکt\{%ʀٝqJUU+?or }kE2xf8)d0]EN0:p'UjGжL2 Vneikw_*"0YU`J x7㏘M9zoB;݄XxevLp q"٩ۍ݄ nBdd%Nb,"0!Z2'RAYN{%A:`'`J`?ٞ/J,zpWzxW ʆ2](1c7(JģU ʆrϊK==y.Y@ഡhhOBL`;5U`E&86!z^EӃNx5ı 1z ~Pq{7"bp T036\j'}S>RpNW=|L!js* xSS1.w+\ /pݱYw[XQT!1lLS`wޒl>T06W&.Q% i] %+ 8yH`dp;ḩ0a)k;6_y̬м{kq$=Ҳ 77W`5VVW Oݒ= &q%JY鸖)1K]f`61-;ބP, v(}qGlv9I abm̤Zl%9oWc"L bB,%:{b*,>Lko`U뱐soMmM#wٝlrn2#pT*bH{iX#r1.eyCVL䳵GT"8آM?޲^~WcOqW|udFP>iO2#kN7\WW|"raaE#['UT)RY]1kcAݎ#0yڛ3h':`PtL@|b~f$I1m(eC!6-P>b;)10kf6eǒÔ9̤<zH5s=5U@hݬs|\ F.m6_=?ªo0BjY$FjDvlelMcyHPrL݀.3!fg)IMlBd%e>à3!fZ$.XȡQy퍁a FYz\<%XWsT·5U`+>%Pԥ-́Vrf'L5%Hl꺣Knab?J 1M;Meb J{wSSbBdX .|%N5BkqXȴ_,c5BcOɎTi4ըNtbYJ N9"31 T0[T'#Z#K4'ۢ $'ZNբC쥞H}&͝4{1ńX mm!VL7AD \QK?*~ L9AքxuUkpPX|_:|*ec~ F|X5L9)*X2Y_>)*g.qU7< zWEN!꼟0A!@*Y$jntz&] }%<3Hު q:^U`u&x$d&ę2FG6Tu9=Fw. ٝ%(nVnpE$o+[FZ'QTQ- V)D;Z~[Deղx{<)dB>cotL}2";aWzN؏jB0~bk;Q4aSZhb p*tĪme j?*5U0 6^.xձ<*V[*^'8eC .KNsxO(b7L'CL7m;c!p*16b}B"ĵBؼf+-B{6!d *c?m%Pf+RC&83i-#ajμT@xK'dĖOZz!wd0hj*:C"r 6N4eF|Q0GV^>5͛ bvDI걙Lni!X1!'Tɸm7!0H9pPQbo[,0Yk&<ЊTgxǑͤSͰ 淥ҏ0U(?[`p *!* GT!1,t*6?džVH`w 9ub<*MQ&xR)cJ7!NUT!{*R .5[xc}ODZ!TT+9H`F9NcP'vnBe o2LS!>L#&ÄL7I8I Ш)kBym\Ӹj%޶9 lx4Pe8|=)T toϺRV'f?v?Vw~U7MEHuF-pTh}u*>eYU("G!ryNʭ \*nٖpbۆhs=-7 qPsI \6׏rْ q!x]3% DŽ8Q2} L nW@.QJ& q ;v K0ʂU|;)p*tⷅO&|Z3\>7U`ؖp7B`20m&*%9 Ɗvv|Jt QLqmT}kS-`Q-ݑdHH~]6H"p*5v(k*W  ]0!Fb!08>c& ߨ2@JXJOM*0!0()?u)n3펌dnZ!.^Ɲ uO5b\l(`adni E uyhdO8>=0#< >s*]FwMo&āb~%J9D  R*t@9|E*#bϺ2 H?Fvt.qXn*yv"oo\ N;n͖#[nFnWn8l]-QHɱ<`j7JV9XWv5J 8`g7(g:7be|h2IaJnC T;FனcLPw%:tw¦߃NBiW烷]jy"X/U`.jHU*dCő*oD (Hig Y߃>:}X:i;Ӊr?l.2)TJݠTִ ~j6!(cJRD$?"pEUv/V{HtB}OFP- $ ;B ;$r'?I~\\i.pG@BήO޴ H$?s6NV(YΑsk"(JNPD'BXyO T\A>Rܬ 1vv2!ڈ)㑭WA`tɄ8Fr&mNŹW)RrFžn0Zn.vL-p`jUCF(QAN[Hx< %m< 6GwS=TvLbR QgN`-ݻ)d:{C.*3dBK<`Ko-ބSJJ 6!FU mBLGV\U喠lOM`ɧK@pivC +r ySRƉq8H lO#s,7 Ӹjxwu0!DmfRxxfS:|rŒhRg͜ Q<&蝲>d As.O`seX C)G:Htxerل8!pSSv#*B9l% \'H rдegWQ-ϑtB3JcwoiP-`e;M͎>Պ/C,S RQ.s,7_~`˺S\K?uy`#dv af*e!܏b*nulr2BHw NidRߩZ2 Jx:iCJA+IzߖWxUWbN_g|4TTWu"F=ɻsunE}b=dR+S!^iE,0FP7!rNV Nw,Bye3DrOoGv:Cw&8*aRs[LA%-bʌ*cTӨpV6ҋmeC1~:ńnP6P!L0meCglhW!ƕ( hJ[X͚[xA-Blo;}tM~vA#/y^O?,|}=^󗰪/m8碵?H_uE y؁ϯ>7X?q|W?_~[| +CB3~緯~XwۗזW\-~.V_ϯo.UO_ 7O5x_ڳ+;xXW4X99 1W|yoo!67jyykj]?]_}.flؗ+lΎp>=ؾg E;_5WFdڦ3MG?˷NcU8a9vo￝7|׷frsnάmͷ̺άߙnol=tV*@H+'FٙR.#Rӫ[OOᛆudS^u}xH|ˮ׬_SJ3./6"=/) GE^=.u=WhI_Q=}ρ/"/sʜi}f{o/r9<f'V=^d/Jׯ/D{b_Sh_3ַ{E4֊ikbc{N;n܊ p޲ F:E_n.큸/yc%˿_hĪ,zX"Xxjݿ endstream endobj 92 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 97 0 obj << /Length 1835 /Filter /FlateDecode >> stream xڭXK62VH6i!AE{hzZۍeg( !Ùo^(E t(nbgJhdH$-d}co_I+a[T&EFqa3˕VJEz_zVq b*UOp܎p(YA/[#72ɢ|ɣG|D5S'~-.­5\ y~4XƝ#4kb'5gpau8SuT]8Ո?;C1\zl.uj=O?2 ~igYXiP$cNh,,~}NgQkW(zbZ8ke ypOL/cM %*ڒ|­5A18VI&VGB\ɯ(\kFHdO6e*Mm,sJپWތxr/sX'ڳ-"/$|p<'~wU׳ÒK-7 #[~BU $<$ "iOCa!e"[8س\4nVcT=n };Dt<(q>T剁 󏔨$琠rB\P7xJG5p+}ǡ;U9dPS_7:)pNr5=+Ki0B nxbҽ+E7Z4ͤJw>kQ\tdAK`g/n鍤:OLGf 'h7{$m(J`p*VB 0Fn+H \c BSk2}m/Ӛ -e?ÜGl=chĹ>oF\VrjuIZqRG?(W$ ̻Eh3*ģxa?z?h4AM+PVT.sD=o:kc\%H-HUP.JR2]b3܆S&6!|]r)" 70?ɫ֝#8;}+Rﵠ~BqَdY².s8m<?)90rT'OIC"*O QJ2"LJ} endstream endobj 82 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpqVgp1D/Rbuild3b8beb7c28cb6b/DNAcopy/vignettes/DNAcopy-010.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 99 0 R /BBox [0 0 792 648] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 100 0 R/F3 101 0 R>> /ExtGState << >>/ColorSpace << /sRGB 102 0 R >>>> /Length 19292 /Filter /FlateDecode >> stream xˮv?_Ri;k6J@`nn2 AGF|\k^{{b |>#}|2lmXc9?|ǶmhuX#E/_$,H#/"cm?r~&(r]AVpVY~YV}x1=+YW+u[gQ1.0ٲqm~mu\r|udǶ,ߡg~vYj.Xlx>'0.esSY(#mD6xϊ+(x긤8f +sUe ߯[չe`2o&^2uG/Z-<̉]&^]6,=aCl$s~Wvwv/hv..[K3G˲=K%.kS{Ox1ٗ⸌w{A5l7yoYs˹" spld\we3^~oaͩ3#I{x]R=~ v"{Agemݽ>t{o8P/ϸ1q3glz 5eXGan8EeM_Z]gY/Gl5g>'0.L/˜foCM&뛞q -vu4|[]-~C,q2|[uSm%.zvlv☏s>MLt/XaN$mK+˷\ ˚Q\E-/|]u\\տm\u ldsvlHu,t'ƍdseB{i'NxP-Q<¦AҴeg94qpVĢl o aViyD8pFښX5-M ±nbں576 U 3 ¥#ĞvmSN!:IR}݈5#o7_}?8oDG>7v.ro]O7{l7~Fܛ|!|=_>ڧ_a B~W_Jkze}!K˥)ך?$5{d?~C,E}C͋8ڼw=}_\>!?s'k /͒Ϯ#C]ns􏔲M 67f!΂T2ZicQze}=Nmiױ.Wۿ_[Zhr?Ǯ^wu7쀣3v|>Lt[7B06Lm|m}[rq0q)Ti=Ii?ߜ\$(HQ {O}TOCڍht]ze}=åiw}~4:{b*_c [K13R= $nuz[E]lQ*_Nmtz]A5Uk{5ۼy 6C+;|ϛ8UfbΌUrJ1x{MUr*j/U:e`+x>G(M{O*';PekxM<%ILY}3}9qJFՕsXA8?D{76ؿc_Go=;]WJ3?-ke[ʾ]ǵ޹= =z{2L4ǡZj=ndg/NMl'=ɯӣ%n/ygljAa{̄/PIP/"oQsԇ3+ ~c4 0 ? FU¥v VQv[s@"OUC$˴} vYdI'$^$- hI}/[@8iN^R),}l:UE*;⸉Lb` 輍1V&EwNXnď9]faE66Cmts,$\!rD RLp͛4Ҧeu,n#oz D0Y6m{l$G)= ʴvQ9dF@Ӳ3CP'SO͵K}wq+ifboW_v㐆pؒO6QH2TE2V_"Z~y0Co/r1٣hg|xd'eMPfIPo؞^/9xԍ#iKG^9i=x8 5cÍwqz>!U Tתa]MՖ4C4GԁiV6)GE &X=(QU`PMX[DHU/U'p. JW$a m:'QkAIU YL]l4(-ZvM31Uzz= sVV twMS$;MYV뾤fF BxͻTq@&n nzRgNjthOh־y9޺Y$cWACa2vn5=jORկ4IQVVl!qf| ֮'7/jB4}лubVNE2mƩq c j>R CҡLUmxwEZݭlsԧ=G]¦JLpul$}BU P*:>Y#xh"P`2q]4^LĆHf*tG}]8SCjlwf|,n9- ¡IUnK^eh]%uL f@m&szQDw#.k{ڥN D܎OM]d̞G }-QTm&.h`3{Y&h cd´f k¥:ogMr¡T1 zJg<QA楮ktAh^jBq.!NK?ٮ9C3;wU=~N5[":噙>4t̨KKp\z57v\$RmAҡ \ZO̽3>A*d&U}ƓiY$҈Ucg|MVs#=D!f|gdu 7‰֮<'^<=JUA׵tƳ6cmy-nѶIȤn[\Fq*f|\m+:+!ZvE P^JDT &P$>yTm7zkJ#Zp-z#Ns]R chUg߽<ǯF5ދF5ׯQH/ͯNxԇy=S{xL{1';{|!PsNL//WӘ£}·=c e?G~wLiLS؋~7c sԇӲ+S\=PSh@FL 0?]k'5 YF*RP&;i DmC\]kh&I!|hz̓WѪYux(O7fE&b`C8 a,و a0P}m ݍնݶ,wIkmO8nd1$Ӧ% b>Bhi}]o7 m*{v7b6ɩ,9!10% iԛXXK F|Óbei6\SRffJ& 3Y_ef{,M?zxDqqG썣~y_"jHy ^g N[IGtOI쑞<Ý9yâd2ɳU}}{l;y7e\tKjMrr 1섌h@-‚"a7jvhO%cUE/Dllo@5~ڼz(_#%HGH n5QT%fytD4nG s$E.  F;ZA#[:/ ɏg #g_5rIx*v篂Ц&J=>GibMϦ#bo@k6t8y-Zsthy]1$cFlQf@qF9Oj] 2MAo%5v6\iC 1r`"Ui?®SN4$;~ԣ4=F!w%jjmKģ7kaèCݚ,}"{fϓV}{9`9qMd,|I+ߝU]ѧҥKƚ"q@F4 4C\nw'gR({VK\X5rHܓD M,.%،ϥ.;7og\[8wwYo=,]b ].kbÐ$4̉2JLhn84d!iC>8ގ3(Fq[I ^x ;+8]N„gKP5_Y7&SUX7z\b'h<`eպ{v5+q/{F2vW7Z6 I]'!5j=sZJSX9 Lj1n=3_'̆ԡ]5lN{hv3DL'Mҗf¦'D$}Tv!6}16d Eofด㼲Uz3AS}`cZ|}ϥF4{D杁 ^MѓA8ԸP"K>oEc 6uƓWdЎeBҘ6wFyJʂTeq,TXji!05 ®02JdkMC1.A,PCK(ug}kQa"c1.Oj3C72MAJO!wY MamLX4$0 մ7EOEC@P[ =˕: 8GU<٢71!'Qcm Bs=-/_jmlKˍx׌6eSm\ɍ6r\B˸ (|.{2o o$X&Rhca'oRLZ2"|p 3twG B3mpz:0%-ڳ:D3a˞j憶z(eS=U=N_8uwYi<7Ƴ\տqm?\ϯR~=c'ymŖyP[mQs]4'..wIS. &3xޖ0nÓ;񦙄sMI=ɄV#$p o0aƺNJL'\bI=N/fAc&gm 9ČYs 3蒷qC(F5%r7MKYȕSFi t&2ˋe(Ww~|Ϭ<9D! ъfYKutF܊P4{BO #<ʹS{ZC%>KՕ|H] n1ƾJIi2s#w՟0"gumTXTfu5 )i|/#Zfh4 MZhy&W6ӫimA@mVqAu!+cp+P"UyiA+]5~Mu'wlӲoj) 찒2㫅L7A :,\4F\P| mQ8Xp.+}B&ddP7 X7ub7˒2#axMe,mhyp t/=ӄm3@mar:9oRkD8S4[-D{ shצIBSS8{.A-Ix L$O;IJ !45٩t-R% KK|i*Bll*Pnz7GVUӍ[&X_]ro <(Kz/^#o_zT'־ůKg?Fn.ٯhrKޗks¨kScf9ZyK8rqtuߑ:>g#cζ9O#,(s6/ ߥ: IpoCxv%7<;hXݼ,2yښT5 ]84BHjX+[ŝUBL՝v efI^غcuxb,cphU }L,jF @mә0"6"FcBs'D=6 P~%G`9l&[+~Q8P6woA,"mx'rr  3!+.5΄U}8-03qg^^3f21IF3L@-/M uZ['&(AP vqBȘe&Đ0z?fc26&5d1U 褆q7)w a#퐙P5B22-Wfߨ:z4/bx۵& i#v"a3e? S'd:R I-7c;u&l&Sgƨ A A "6 aՙ(OTS] eTzKe&\%a@̄DyL&<_zZt]RUvʚ\l&*%e1J\|#EHdRkhSNcuY5Q%?BkjmjrO݄_WW6|ZmVr謣:I'7,2K@B.W( n~ ]᎛΄0Vcn;b?VOǶq:[!EןO=}:`i#ۗM]Gk_ztT8{Xc ڗ:{Xv2xKE Cz@!9g]2NaBk_|tr^ý&zxSDq&>> D}כ藿M7tpDkCgoUVob-71m_%}ŝK{$oiu9jLL o'9Ut u[zxOĻo$x#rAXMYnrkd1¦P"ձ8eE.B ޤ.ƐnNʐtS`f=:+ޅ:{$)326ws`d!`,0!M{Ak XjZT;k y[& @NT)BRm>yfZI#O[+ 0Xj~fjl lZ\l뀅&aH 8fg0cL:a\ |I!b]q¥*OMA-ʻ5-pcĻH3U=0XO&q0b@ pC]{aK-a*z,ƨJdKֲXmWgFHU*0^q˯c2f0' 5n6-N awR;ihelIUH]fĨkD5!4vF:n@H7nxTn``իMM!I zrwMgoBˮV:OñPNY=S|{x|{)qħ(>ߋO<>y?S>Q>oO5d}J/ǧz1>f|y7,>\Hv'$S^ꅶ e:HG|ߎOSQ PB%uƸe'` 91m}+UqM(: r1֜ٹ<-c;rԓÜRzT7Ya] Ḧ́~ԃ;(~]7mpH'_8bŒ]㮊Ln.v8QkPQ elq5,LZ$fjwFLȷd\ P{%C85nN" .$mjK3f-=-iGe)~ߕ qJ (`\i9BS?fr:24TlFI DsyFȌzO۳UPFsW6zQUEGGNxS2r)%*VjؕZ``Y1mSyC!iCy]KlQ |o_z<<З=rp4~%0b̟`{<y8x=cn=3 z\<Ovǡo yjqx%cGF!kgCo8% ?8=P_8hqqx >8`2,rvpFNwWiV,@--<+)ԓ(o&84L ;N>ܓfRG#9$:”&9x)#cx-5e^, U +³Lr~,$)<̘]GŠ XoA}G→HCj]p O(xhiJN{x@xl2$32bI#pC2*l>_@E5hH~,nYXMɡsFea+Ce B؝'SnYGQA)=>YidJj:wY:wodmFdIPN61JJ۔%O)R[+ & jM8>rUV qpZQ@q|LKq> SnN  <jܛ|ߵECzʽyȧTܛ/op.fOIZLq~^~?uvuV) 4; :Oּ41k"/b6/&̇\>!?EΤGo Fz 4wє(A3'O`X70X Դ߄%|VU|!4zBo0~ !>CLj'зxce|nIO)*\EBT)-2{)eMc87A&9*P3 "B),b3Fɬ; 4Kb ªsRll j!JF%q}yō=5f{f5_k4Y1(=aӥ/hpmP[$:P8|](L@|O`E/%t$)28\vHCxs P؇(>?peӏF'![1|3!*ƯgLA('*K7ŕ+ם wtvBRE~QɍwNvM¯'f jq {f;C1 YX䁚.FMr I*U-H@8 r gE7Yi.JrPI 6(eO qCoܘ0#ȽӄRdǙ]A (:n^aO>M4z祇{y_e.wdiPzrTn}zk ) =b)z7i+zC/z=N{_#].fh[]hL<l|4AWWgO-UWL-1t3Kک1tYmpy) w ϖjPܪ`˪{"+!ZΫ_: WCs8F)tPGT7˕@1Ԉ!4+9N¸6"U"&< `Ŭ*reSP6uɜdeRu/ {bmxi0K4zɊd_J*JdGܖpv觥X@e\PK,9,Ք^ 2.BRţ1+6MGRU'CJBI$OKX:TTZU YRĪb aDU>)}dj]XwkW*Xlj*8{`.=iSg HYm-VNg`kf|E]Ȍ$G+G/flEKN0[jMI󠍈F6 D4=bcyBoV ]sYb>{1>{싻^x>{4)O<{xveMv߰p"?o[`B۳ga 3gK\cu-0qYCxp {\"vOvR̮|/hW+? =aY`&i|nԩNr kU-2xqtXS|cf`)rQ҄DB\,8J$ZHe\¨3xQ^UܟhdĴIn<4$m膠!j/*cG*MBQor; U&= Nɷ]) KDR eG[9`hz[ Ʒb&'Y+cٟcM-0 MeFuDIoK6c`Qz:8}5kN:E-0)UCV#7}JU %-ju1j]|O"lGi.{JZS-0݁K۩ q4ݒZ`4nB'lJP4 P-gn`_al-ۇՂj=}k;g1,}Zowy_eU;߰p"ka},0S ۧ]z($nyzSny{|,0Cߴjj=5aYxZ`F s  E+{$14R$!~3Xq2uC~ aYxgBBQ6F΃`=- SzNboV@~w`^N@Ϸqm@X$rzELPZj%,G^{Rtԙ \Z< KjAX)z[ƹ'ؐ~IЊkk@ZQ]={mzA mZ5!VO'0=> NG 3Mma1пeNBN-/LN~?Gno1A˧ do+}ā"h#Zzgp\gKi8zxф /Tu@“񆪎1^Hayd]0P}*ϱ3։p5{j84w=\dg/$oTTCͷoU j*+j` Ico0r_` cb8|BģV <|\2 h,IL0`o0z6?Y$ػEa0L4\ dX-' `1]`x~e!G~C,-0׫ #! WE͍EF_13K@)N4 :"V9RviS~Zv9\jC:$*Rk9T]:KKuH^|Cݒؿ- y>]?pF٩`.k4)d)@k"cpuӲ D|.0wr\*d8 ]u3`UgwYqppnIPᔉy, ' c#)-`tIi{ ,,H-fo7P %,z!g`S.̢2xWpasD8![bpbfV&"aݒ{ n`lKvEqvٚ|?Oh>z _Ԗ B;ܳ$[`L6`@w2|['H$׉s>>g{j{deDs z1YvC`w8 ߳f\.n=pRMjdT;w&wK)mÄQńQ[&?'::|Š67-j=1M`(nT;[@1m? o>ҁ'pwk\(%ot+I G7:$XhJ@jd @1™&+O$k\'= 蜘V.B_b4Ry2s Aa `SdR *N<'AD+LP)`֠0 R%=0cR0%k2@qD@ŕJuQukjAm2% ds 1&QF kL~K#ZB3<`^3SE=<劂xȭyʫD5Oyk Bۦ_Vڰ#V+wSP%.! eKCKCyxxB[`FI4zB^y9xҼ wF4W2k*h^녘vzi  [N6qT~b\u7Vʴ2%"1My$uŰvMhcᐍM!0![GL<hAQҥeM i7. f#ô)q:?ɽy&(>!npy_u:Ve?OE0wNNJ85 jO08 `rq&#grIL~$&#DGqbgWw9x =>ŏ8GS##S~g)??^'vϏΊ!Ĵ4p)cYi¦h 5#@SK,nL,F T)M%1$1d%HID1Jjq)nJd2 ([PdH">G0Hd[/$ " }CjxV&n|~ (;LŀځH0t eZ)1 BfsqKP^'Kw8$4F\F>?irQS ~H 8 TtOrN"p"Jd!aa441 0;7F5OB&AV`$6 Q?re  Xփ, ґZvTm޼dJ&*SKudtڤq m7 endstream endobj 104 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 108 0 obj << /Length 1812 /Filter /FlateDecode >> stream xڭXS8_GgQmGѣ1x0IrMb&NJ9/rpMY]Iͫ7h;By4 Cf:3x`?Npd҄kN5|Q`Vغu~+=,J8X$}w$ /6*kAd! fNXEZՆ=O0v n8=KHS B>WFA/ ?C0$5Qdp;O"E?;`7LƍJ--֤Op5"htN4\őJPQTpĉFֹ2`d`Ҳ˒Ϋ$P 6rgx55l0̃+8 -Y)LxZGK @vK5,G~?ޒc{:v#羛(s6FY1%||`]l6FIpQZL<0ҷ~|a"8R|`a~'[yhMr{.YLR-W'Wky>ȣ`tG'(N1`e BI RE/NM3v!, aުh3B) U¾6}fd(&;T a@ryZ2kZW.%?wWy 聩ydQ FʵzړxZXMvz+ 哾sGn,'OQl{(Ezݺ-:Gj=qx$'T7L`;jl(D,=5䝣ɌP!S#F9LeS0\/?~BBJhИ:BO6RSv;$ CC.3Y?"IWR\ l\M^ۚƝߨe/D"RtHe,Lu hkThLNkA:q:Zf]m_ٛTzd SЫM=z tΦ>5φXGpLgyN/  %|oeARȲlgҴwq3c4\/HqB̵ P > stream xڍP.3XpNp 08;w {^|gս5U3tZkKE(ljg 932DDXY,,L,,lTT6T@G'K; DF21#w;9;@`eea#/@ D=--#Ƅ;@hib9[m#TL,EAoldddh.@pt(@SlUƄ@PtKbgf l,M w)Y`e,2o?,A:<,A3K @ABݙ`2̍J.ىy_eq-G~b@e`kgAvn %"L]@.b,,,\nb=O |fE},̀?^NF@ ߊFSKg1h~|GKw{XIスL@6ZڊU; `ey4F/ 3;_پ/dw=撷{Z &e`1ybn?]:[$\llTl-m<6xoZ{65"v6[} A6YDK' Kw_\,8T,,K>X&{Cؙ1`l#GG#-~G/I4f& 8#`C0b +Y'z)qAlfG;??=佩wfߑ?z?v.rx71|_d 'g|=2xw~|w/{n%61 /di9Os\_z˨Qs *e'ہIٙfhn2!@MZ LU"iPE1TbEdBA nJEy|Aό !T=a*:쑐!0{ltM߇|{zV sяFa6$Jp4,-^]SQ{6S +Ky >fbih|;0! $3DL~iMS(qCYJZKۡPόU~̊|PP9iRRc9[u{y@ U| Kr5)lk"}TtѥwpV@\"%nIERJO@*Q=Ahraf,Ӂ$}s(Z/ Wl5J4i'9zJ6b5JDu;z yCWh1@ E*W)!^KmɁrUq?<3S r[L4dS 4Rc]2ME];ݍг0rhaӽG蝠!,Ǻ ~@q<- GzB>Qԝ[{7rC$cjjUxw\{lvo>JD:nnqs_MH[ AffAk:c|l~F?oJy]Szћ r.DJ(.ɘ͚ƫ/Ww6=sjEX[I"qa:HӪ<~ AumAʯo'7i32Ё?`BzSBg}:GpqDzDm0}yA|iO8&:,elo>N|qJLtp SL6L}!P l&}s En *%1rH JF_ӷe .(yF ~7(S <RLGƛЖ ޡO.vOQ+$yTߑ'`u|_'&wxoS )7U8A}qLJ{b"=6Yz op*YzudG 0:_ĈTZ_oԿ%[ PV8e3,+X nve#m:# <(6XhDVLԸA 6 {z+} 004p/hӬo^Q6?Bű{(*/샋)OESO `oKK%V 1L`f5.Ubē%)\cX(D X w6&v;tC6(2j~Y72GfJqyh(,}{^[4}= +z ;jsnqᛙ/DIQф)L!xJH$FN5YW!ڗ$'`set=JdqrFyEߎ;$ Y@O~"̋[a>6h6ˤ/0硍{nn%vӤJ|),ڔigA=j<'K>LSZ,Lif/TVK )K-,§ rVU0!pa|guσ2Q|B -fvoN#^pڿojHhq`ALE"MKy]:.w/qdu321Q> 2E)̸s,BbMU@ "2iʫӛN >cNǡk/!ᰟ "BڟBg[;%x_k tebsoH^&6cC*^rx?1-_ΰښFMT}BM^Z9_o !nTg|YЃ'VIϨiQCrjn^r^wvF^M|h_՟,4*3$e _ܥpe"Y^3W<.rnϙ@sq-6CGfu#= t^bM8]ZՍuI^"VkZ\ET\!{?d٪j?\aVdkQ,՗G^r [2*-h6~BQ5p^x.B WݮF1C\ 2)72pg;7dBZh>̔`^(> }2ej5;ij "n6>PG,\"_nO*37@I*C[ fe?z4Tڽdf%L5`{FmT2}1bu҉s?Q8/H<ԦDz;mgԜӯ0 6G(6<ʖA./-89*54gE^睊@В3! xa0B)M%yu|acJ$+H h=\:]IK8<,[[Wx7jiJ'rfqTlzh|"-eEFSt5ƣ@hu,-E9A"JJū奂#[7ʌ%D [!`k/-~[S78Q+ 岂u]kkQ~STe4w5f]EPFOLa僛0q`0:njoUf} WLDwS? Y=>()+rwvY]|ث~1xx,az;A Ӱ,dbr3 #Ի4b>걱+:ptb)f[$geTX#6|ŷX)ZHڰ"IC)ĜrZ(s9᪃+ -bj.S9,_>hN燥/! c*2hw+:ynr^4i}ܟtx0*&뵨k6hɁNtU'GfRKj->?P {=4aCO 7c€E d7ZuԛV{)pA,P:5+٧jTsdhp/1yQD};F)qAPӚlZAPBHֆPsqS*U~ P]y&2xР9z96}WZ6fY=URy6+ďpd=yֳL1 ¨i'h[u+?% S#o+,%6dyHi{9Ne=f)H3k,sӈ9`/\\GbvےT_t ħ3qO*UN$ 6s.arD?tW8 "9+{{.NQ!ϝ1j lj' ]5]\KB+z mWĪGJ+D5{Y(`s3ZSuRJqQhjO2*&65jmc Z¾+ [d11BTڙ0PǺ6Q+l Y_"]a/T0Ď4As4:wLV dVκڤ:)*%!wЦ{'wqU[-9:<'t8uU1u]qoxz9?c.Tp0m*=:lCSO br?DIpC|UtNr05~JU%L0$8 9E3+mzYG28kk 5ϵ 9OnpW%wæO,I ktB|,ٻĨ[ZG?d;p|§nw,Lڝ1N)崈*EĻ׬jtphDzq,k b>MdW/F_5S ]RG6 `)p=Q'Tl6FᄍQ(=dlX0Lp+14i%[sL3>Kyo9ޏwfs3OTJ5)R1lr->U59W>tS"אI4@G^ s:SAG[F!Q~MFg1񅱗kDBAq3"DgcQO_|{+affƈ|*x?ۂ+IV  Qs5UEotQa:kTV}q3dOKi#QX9H zYNLZrdvׁw Bњǂ ^ ]Th2krB/x3.)Yӫ.#B$q³R ./s 3,6Vx~j 4k#]IK:cs.vE6>gIS:.ԈpV ]i׹a tr˼*<S3g'gⲲO/ELNVSzO)ȧݵDzRj ͘4H Eue-CEh.:hW?RxnM!t\!kH5\t֟װ*:=Tvk5;zxBU@G KPwmMF"6E/ IݲF󊉭h,%H[̧b{aW ΄aҵ]\x}qW B*0RUO睖S_mg>=Eq&23b>ax8 d6]R]4)^$l&$ ckV,"u(jf5S>d}jA 3^{IG+=xMb.WWV &g.7QM]BM:[_K26 ^\Y1M͈?L.bV(a_Lu]+tlY xODaGHA=cf0bk$H/[5M)VN`Қjb9EyGw&jI7T ?lKE]v3huPyьhK]WV߿=mc kcUSb ֈi=Y3U(F-߿@礌ƽI 0lc=[g܉)1ÄNqВ0t~@5 5:rUT*/򅜦S7ga_,S;'pODBU-xC4ğ4*4Ge۳ج|· pyw &#K[`6{ ̷,O^fmpw) E4A |o֪[ݬߩfVJՌ.K2|60aϺς]~2Aa#~qwnyB`3n~P')A ;yHWjӧ&.T~_z#eFnQ7foB].7K2llNM9ϼ 0QKUTS{f ta^Vpej\)Sbh2QM޳ 77YDu5秛08V18pA1Cy>RClU 2T48r> C:rPd3h82g.^miU, ^iFm@Ų45S҈B$.ȅa%A"m=c=l*^B`]#kf2l255{IJgV=Glz&ǴvW%[ɔik:+L4S*7 Ixן<Zzme9Uʨc!y >Imӓk惭1~/y rc_ VJL>,LxId+%tv)];Ok4 `vzi/8 Ok] ɹI>Bku`OHDIJgWý+1Lω).W&Es9/+DG&Y;raˏδ=V>e}Ʉn N $",{.w_gwreqzؚ}(r*h[\"w mk$ SFgeH~h߀"t#y7Gs h~qU4A(2XXs@B['TLl)Rh%#v .ŒeI˙@Bʲ\,㮋_`S \`7O咍;mM3+&U%I<<Q#_7YAJ`J @ߏ7chGOћ#`YFXkEi{ҝ8 s5F"_yeLK&SpW W w;Y|;;{>Ǘcgs؟[wn[& 4*]Cg ?QՉcitF۷$ O+[l|%cX"`({FZ;/b賂W`aM9ă.D A}PuYFԳl2f} n۽vrzWrm=!EXEx HJʾxϾK y&`|>,wQfM~bE`eܙ1{u4(95=b)V&/OcޯYSYi]pbT9f0y~$FȔ>$H-!_ІK$2GU?,5%K+oݱ(-*뾸(^/(%k=G\kwCCaz%kHQׂeOC;s,)-ʞV@x#/0AKa(R"ޠƭ1">-80[ƴ/t߁QyN%~޳{>ITFILk"(y^NH9P=ܴŭYqI^f.Ocp%Fq4vN %.uZل`^gUjX0& HcV1uIe-FGAW 爝Xm 1 P%qBHcJ=PqN6{E #Vm,*0;{O=en+̊2\4iMN!8c:fNpTEn:'BWŕe n!Ȝ0tm;bL-w KlZw=Lh]v ) xnQ`N*5xcJ0A0&}sp ~\A_|oIP_.9׾Dgus$ȶ 5$*lʿ"ca2ĭgl vJ~~;44Bd2.,)}l_a ++no龄iwGLv&K1EJpqtJ蒳>(2d)Hx*EDPAh5%r>1L5 ěM4+!4ȶuH*q`d+kIIi]=d nCkI Kvc5i:I[{h=2~0@DӶ\2%n I;-HΈfÉ}̸4/3uKG.]+лelogI( VP{; #qeM8+W;!ITF>/[*Zaet#ԊֆCKQOz|FFUxӋ|/=tl3c0y {a$%F}P`=F ` cXNÁaBS' ApM Jj@yfB@ګ/dk aAD)u2f(vOtPgZYB[jlDGqP'0QbB1J)}t]QjêW!wo7u^rjGsr_ͱLF2{O(aCUz S[fCб*qP^)g}n?7YRI~OH&pKǮoz-Kd@f6Gdd*MAP؁@f( "659i&9L[~<>Y %eu b>ɊrSIK’zqՊFM}gp(riHwQh3m}6a ћkq+}i!R}- q6>q7TIYfUDoL)dE/EF_ҽnnAuuǭ94Xya$v?I g ?\x;bXŶgVi| qƚ\G`>j O I"6rEV`:z5!Qk0UC@QCzG.t\+*6߅d U!/i :N& ɒµwUߒq.c%q( Y&$ϓW#6TYna>~EDQC`Uf0,|:+b]]џxW1p3r]srMK(Am a1e=m5Ƙ_j Le M hM֓MXt}8kHWw}QB+(%OlX *Œx-PV=q{!rBҎ*ES}͜bX|Ǧ"K4'8d~38,~-ղhTbў5A0"XZOYVR%S(L*1k ЦobkG1ѥ*m ӗJ3{ZtXeĭ aJ]N e7"p3_Nwrkޠ椔̷nr]sW?ۃR endstream endobj 124 0 obj << /Length1 1441 /Length2 6590 /Length3 0 /Length 7574 /Filter /FlateDecode >> stream xڍwT6 "ED:COBW 5@P^HS( "ERJT_,{}]+gfyf7\췍0u$+KU ` ," LXz #PAàXN"KC$`0,7B}N@=!6T(4%ǑTPPuyvtzp!xd]X4+!.@_8h>0'ϒPO؟҄\@W8a@C`p.'h 4@?A@p/g#E.@g h+ @@PWP!O}G4a?k ;f5 b?Sasi;[r#"^0-? o KJHa^@+&(/#WCp :ʀÝa hoXp)  tGǩaοe\p?G?0'$_-h)_Fee0PPD((,B@ "qnC_-33|qw>HgBx Q7ӭb`G_.?23Re POX!qÀo9ޞmBq㠄pQZ"*c~0po֛88vbp^`pS莻F08n6A1jO框pD:>a1q pIb@nL`~  !X Ws0l$S[ %A @_5K4h\o׍SHG{n~T+1 mg.%-&L+;QXj5~fUQ*'K|6h4+n:˜ug5_U|fq׎Y8Iײz{G@/I|kp(ֿӨrx7#rzD [If?jA-"BϨ4jGRly zd]{ګ*@P7UdzSYxTh,hA+ ȕZxpr0/v}zޤc?r7klQ͚ kvbZXO5_ W]x!녽|I:[%Ihl4fF6S/j`۶JyinkBxL9*~tK+|,M,EӵPbG)*\D6LEvzڷp`Bq}ؗ?{sf+cfĿ(t:1g03ihmhi&~YK@ȏKG3-jq;ǏlShh3(aG8tPtRn-:*W[.M 16 E^ =+zz:CVO} f@L8X'egVM7"D3d0뮜tcK7ibCeBu/ꂜ< FXknEͯsɗE+ƈE3f.ݔ]F Ԓ<"3VmHavOVQG l[݊',Sa4^췌VHQgRK٣wPR%w7 ju-9'WY#7Un oETh3[ nd`=&ggrFX 9gԄҤp⛵rfףj^VIрZ{<kަv7@mxP n0H~X̝+ :S?<1ӽ7pS_rXp=A1-z+E>2Uݐ\ coRm`\M p2LllMHOivPۊ>)y@J xv±_ 2fc"CRIy%+-/ Ml}]#dx8GwȄV'bsɮxju*5&1+u@+*=573\Hd(¤&L|T\'( tto)}'hKRi&W0%2i2ҶjUp1!bSpB#Lꙙ?>rR^]Q+;=^1^4@X ix=k!k5/OknŎ7N޸J1Q[EŸpdUƻ=OYu8 ! j's>g)PtO%D|>BϑVY 7}=Q2m!rcaX.>(feP a8cHO jM橡͟/YQ=vo{ђכ^B3nVqήHwZ:iH8`dV ʝrbdsIO/9N2˙!#I *O&ϯ~z>HC%Nթ44go& "ǿwaS.q&{ʫӉ+9QnH~xHx^8iqfͲ5-2 VSed{5P]\ ^/]$(}\Ծ8} ut kWFvmD;l TzusG[\* D*S#'itxeU ⚲sCT;~6*)eԔdT3l*F& RkpHnU-Q5Eh[v]W,â)_[=4[7.Su{90GySݘfEZdL?=oI~=J$W=\5BY%8yvmMEWyeՏl/qpKP?TbkZ*H1h WFU訯uY]|#-!<b%:F&ϜVGR=|KXR:5fIX q&VpjiHƐeU[2W>ޭnT˹Ca2Sz8(" dyI1M5XYcfq$b|^*JMw 7oN͑<9[N`=D~M\#~db#BӮH[U56 !]-tWÊz]uf/ed-/Gt>o'oBw?eVzWXQ΂`$Vձn]UP1zʱ~k6?IѸ$Hr_Ӛ6X eTAU7t0mۦ(h+NRu}]DxMY&kZzqxYt =ꦎ[r⌽DDXÒ'kIJǩ9-WKYe( 5>ݽ I%aFqGrƸ,U\"mx *&ZXiƾCgLXhɑpwc^WSdir~ŭ=Dqڭ]&SWHD)?&_znJacqh7%IH{_VT^$%2[=WM 4jw+!zKe@Y BBڹ&(~%EUŗ>#;ӐÇFr?Խ!:>mwv? e!>Ж+u'ҝ,0'ij"Q+^F}~r9> 4W[l8fW4)J[2w+rPvpCMlM?Q`~Dw"= *"-,D#ƒt=xPgkѨ-4iy ㍂5( , X`䊡}oe狡c#\SSƏu-|a/z'?R Xlr37酻ϽŞ(ƐQzr؊>ޗ~+\6t »b`ER^D,aXZI6SFb_.FA:N?p8~]5!-/TNi[ {}_#Hfӯ# ]Kx=F=0gy\³b?TiObLM>Yx)uU,?I{U|V2bAckT` ~0)p P+ Wnc_8H+<1H_ECc wjEl} K97(uVU  ؈^3"Oi]p|h))A^>+DC}HfGBUԞ=8Y욈IMyg (`O^Jm`fr[}@%Toqh些j}/{NAhج%TK 1>\&eԺjZ+%.fRqB]{B4qTig5Vo GH\W:;jy TyfvD|lapH kEwNe.VneN^7m.{~%Zox 7Sg(lM12/5׫Qd8_ikIecfѓg ] `^a[=b:ۜNEv$lhz͉M7hkgcx2( e){?pm[ќN= > stream xڌPܲ wwwwwww` {pwn!8w/g'WuoQ5޽z QR6s0J8ػ330DULL LL,jV@g+{? DƮ +N f `f0s0s01X fneg8](D,,]Ai+ʔI;@lejl7vځ2TL^ՑÃ΅Baj P݁f(fi\ lL. 7{33*-Ptc,_Yllj`hleeo0%\=]fۺ8ݍlM@Wn V=Sg+GW+ۿZd+ hfvv@{Wr;x Vf5aȨno$B-ؙ8Y@'Ԓj^A8:8AḾ>.@O33`G$àw2v˨,)!LOщ8x|٘,L濖([[*vwԀZ 13>Wo +mwAnvV^t@j@3+7v5]a{ Ehdjj϶#WZ\zV_:2=.[ݜN)no`ca;;{!Df]4zF{W Ԟ`0 %8"(b(d0J&fob0J&Vob0&P- To"@(&P-!.P-J ]7&Pvʮ@5~(oeM!nPv3M ?3t5 _;3wP, X@6'@#(wHֿܜ2AEN% UmfbFfGqrݙ?~rv/5jP0GO-٘:d@U;/?Na8Pr1_6@? ze~2Z:8Pٮ8&A$cA3(7T9&h=K ֵ5=w'g)v5S};Q`37oFzVũn_|~F&(=>~QmCX,%\7@O@&d%Cƅq/Y7P2W!\6CT%-|t_WXҫT-u2$B)b$|+m4t&UĪn3pj$<4Yk1J=SCֶT62:H~itOXp@ƒFR7ju'+t8D&Pn=8'ByI |=_eùBܻ!o! o&]_ ,Yō2©r{"s?S*B7+J/ ٤%vTD{Y?p3jTű+Gӏ4 sߚlݖ`:hN8odAS}Sݿ'\E3H `Oqܷ-Aob+"ⴑ#_&3S/\_ۡY}bzNFa \CCMMg/lDñhݤ+.O%>6y+~{)eTd^Ԗf?gY7C֧4uQ0h4z)Y[/\WS" @=6E6wt;ּg=h| Kylm> z}l4RV<;LmYUYܣ:QY㏢:"YD^+T(Q},L_8m+p6uqGd~|`H4Kss`^wO͉Ik)BE.~(ϗM6>yS"۵`'{_ {9f zˊ B,\N$rf3U~0k0 }~*zpv 5!L_d} 1fjx%ҁ#X͠5NHW.c&qb#Y))5]HVxt۲r^* ԢgM} 8U+<ܳ3tfŽ6!ȲL9@{"\C -psՔnCrt! nq1F>pw@廅8C!sV| %ciokecAʬgQѫ6ڹB,7H%6e%rMRtj}\6]#i>(OMfPνQ\K xA\Q*YhZt_A7X=Q] YT(L0rcK9aBAk]HyY\4+kcXpJJ"ceaٛ&b! B͵,l襶ވ{s,gkaNJ&oE}4kEF^e1?$)')[Rþ=0PܚR)r~UI]8u.L־8v[$@*[ԎPzFW;z9 GmQ@^tyK-c9a PrnŸQR9`n#> RF.*Yv?TBeDʹMz?\u>܊qz.xˀGt3ֽ8p :gD{L8&a.J)fzsЛQm1|[Fi'JC֊xWFd_ϵ@]7'›/CH^X"EܕRˆH|uY8H'Nt'az8hH FZx<-0l~({\ϻ"IA*r;twSJt\9y"Ĕ]ុQSM4тKU@jkU6(yb.X%[7J<%A plgAYFjxuU>`xaIBh9~5SyUX^>9 :a؊f|gX#Ys`c*qf.e/yፙ xH-7<;P2߬0=Bĩ$Gy'ZV >%ڨQgf9_q reNEpi0Hp'zʛYT _ϟ82Z.,<dKu1@G QesT`|FR,GI%WnVŪu ]`I'k'=́KifRW7=,ITa]ͶDU,Ӧ Wu~2f+iKOqCCNhaG ƯmLS#g|@ iCvr \MFcXZΝZl!o9Gm>#n4$-m &*! = nƅ)LuʸR˫}b3˔$:9dRu!'FrECۤ*)]a爵4_ob ~PXHuE+J"6|h= %잋RJ@[B)j)ĞBvB(7>͸>3U84*A^33XS1يя){m#V_[w*VJiۜo$Ϲ7J>y0)gAm 2Nӷ*ܼVɝ/׮Lh{I^3wUwPYH]t*PU %4:_`*6%y> Kѣ~ F 9Yp[> ?-̴Hx jڑvv:.a5~gVػw1}v.l<^~5Rc-F-NC!^PTohreݦ ~D_Ŷ0'{<ڴci;^*tx&' 2.l }*V?ԧ ,s?e~22>E/FҭB3>6&zgu)gg=Z?"7w k)ɞVP*:i=Zyؑ^np䙬(9tkĥL{۠s$M<‹0ڕ,Rإbuv+#qOqn9ө|}Z^keS4olZ,ql%Riy?. z)'WHwSԃWRqY%œ>b*|,/C.EO6ZӐ[o/OKEZh G?IHidVT9QϬW ?,  і}jiC_FIV%pUW~I[%mt_0l!@LCRnvB`Ӏԩj2fA;TU} ($`Mͧii#QGțO扆̼V-TbQaAaDsD%?^(vY/j9M(wz/ws ݾG*1`d)97偗Lea^OOĬWĪc@;tNI)|(İ*#})57~=E-s"(qճ􍯂rSs&ͼEB b*4=Q Gfq)Q;DmXh`w9kBOv8=!YєZ CB h҈zĩ<#O#E4L~س z>Xpgރ#n;cKa7J%qP 3=-0c9lYTb}uB,hwq@oGMZ<W йv Wň* 4/k/f=pϏeAάi1Y&Cox7k5`kVUt+ޘ{/,/8e}dz\\Bsrh:zT)-7UUv:ز,Ҿ:R8Zr@L5VTLvsew!_a篼fҢ?![9^DeȲӌX,TU. _}ĩ?cYR&:AC?mX$r+LOeo'qM@Yt(!գs¸w?U+~%5@rnqԝC"GJ|!_ peVEx)\WTi5{u1rȿl&DLf%y? B)|h1s[mbUE ܡC 8 fz b dUSÁ% %⾸M&JZ}}Dq9%Lur1_W#I.96W*rY Sኾ=4qO $I`\=db3~>OCh6~?)ً4jDu8p ]B=tlXo}ʏҏ`}Gij"|OeTYƼ>X&1)ͮiY೴~@>}[ȹ|Æfp܁a;.)%W@z7(4Jp}a"]8Rhͬ Ւhwmkפ,J* T}摞IMepmjʏ[ׄxvO4u"rlV]DlwuiX :Hu3= 3y`s i) P krSlb&uL (SP,Fٚ+B]ީ0+b^6!A|9'6*kɎgI)D{ܝ~1c7K# ]P(4@h:`̈GvhI2Un͖uoXs  \9ħԐnWm0F,^]im(嫅mTtN[5 R%20#ͨn 9}{A& y`̅+Fw &W2hvWm+s "IPS1ܮ~_+ESiweGo9.QBZbrI`*+[F /|ŰWׂVǥt #h Yurm>AQelfRֱB;o}"Ϩ`ϵRs3^yG;۱ů}t[6)JSL&5lQyK14 ce4Hp4 F:}׺('`r_/ MI#Yd;^?3/QIb1Rhhy񕫄O-;:\ D 5# .ًzLMa1_y1h*K=}8}4O|` T]A>+xsdlnA.B6:ZOļ$Jj|P!,ˤO~Pi<&ih@r^5ȼ8+:@0}D#g: jci)E*pl:xK5KM'm!OΉ逎jasLa1%L>UqG|wzYsdK>6v1XK*vVƘFPw6e9"^4 '%^[di"A7ZG@߾S$;"W>+=%*GN**W1ds(_(4. (̱ܠyWآ,DPt}{t-5rg+ꊠj`./, K~&VS>E|ԙrŠ@!\&e\׈ 'T4JWcJW&"1՚tW{WwQG(<hs\yLOYi&qٟwLWcCU eW+k0'UrtgdKfK̯?V2*XTBsç̰+JJ+Vۗi0+vzV&>׮/,5H8VYa΁F+e#x<-p~;ɭ] 1l_xYho_nᬢt~fuUwvV)V&{%%^rB$iq}i蝗7oXkY#-͒_ :hbfT~d MtÝ>|tt\ʖm9>l%6܆z7p|na,i3bWm d^{}7j,MwWqpq j_٫meP ++_sHKIcᕡa |]aM bMGm<-럸]=?1Uv`J +0ɦ}ch8cIEU++„ͺ27Wo=Ţ;R:EM=y${ٝB5Y G?CHQޫUhӃ!RAU['Ǥh(:]QYn1nf!ʾL\`S6ۿXg` -~+Xl"}4AR8'2;O?^*lVz;^2uR8P\c%p{LbO~i.ȕ9غ7``X;;xdƺ^FYh(ԝץgtgQ9 4tk Ld+ Y4jWCJt~v>3d/E@H#(Zʺ%ݟ~T7AzviKx\^b8&b._y**I~1bkKn2=g>7~[;xBk<[J,.Kq8S,:ĴMX=oq,FimSנaݪ?"1%ѹ'`MVZ5hE论-g{WRjCȊkh겒`˺MzPǂGF #I y L.ϸ3-FFRW& 喨@rݯr|zE~%\/oBKr{/L54lpz%Yksv\əKvՁ_SHat{Lf^;;ɃX%HChhxN-`X9Jp^x9@0IlSn(eͰt"ԇ,G+ rѠl03W-q5 :WDlyYǘ-I<-NDL*eϸ!ls;S$]OCjs"] Oގ"wNpJ,^xALOVYXF"7V?^ONh|aLK ck%^O-7:R^LܺcfQ[2S|\No}s8jS?|-&"o6|GozIC*aUŌ#ЌјG΁0P )]$Ev4#jy8׈^{h\*]^FciN+$6%ݍsDH5'`;Sk)_1f"LcYǪu)׈MҤdiW,S |Gގ!D^8o`IB^u*^M:%h$a& \L, v /w.ʯhT;ŝ_\5}Σ BQB̋`vJ?hݐ)q:rK'Rէ74dE^c'8r~1MyI~$gg;బ"hgxg$ڪMO*X"=#ɠ/",7S4ՒI*٧JB2q]iyy5|Tq.=PB"s UPHF\TSVwĿ̴.f\ ]8$3`h!DZ:&m q[HP` Y0}4jLVCS}A 3j4Y-EcںUb SL׉#y Q=gܬ@߃+ E;&He3K]/%o4/mѝKmU,<<ŌA"eaZ5:[•_dlD7nZZ\E&4-z%EZӨZ='D2Pz%:+zZ=gb䎏UB>{olO˫Q!?ǖ`)- d-I}{'LLT< e67VׇG" w kY癑1Hhyhg=E^NJ(5c,›Bu -dU̴eO*fcn,}ңBu"~~B+SI x#)g6QEH6+aeM2pLa6O|P-/`Omwgqs&]$ʾ'A1Z 1@⭌_MNx.[{RSX;ALFj'i{䍋͆Y ъCѠȲ6c>C^/PfvPք=Ƽܬk À.zR72+ ;7<[8R,J^q j8>>} GgC Eњ:Z B@ITSOeVOm'ܮ.Q0GF= &$_UG,X(2ijUH/ۆB&jPnއv`Xr5.xۑ2?}HAc7cYl )!_"Ox:AF)XIM*:p4>@9.<^Ep+'-\p0}VK{I>wwRZKSʭ'igЯpI2٤IgH؈,˼똪wwo g# PSz3medtI5'…) u&qf7rxh'ղ)H2ȄcN"ipCtur/;TN䤒p_960fXu)|/ў~t7rStgX4Ky9tL6[U]Ibmv^ewȽy>͚/FL1b$qqLW/ug";4/fU`sq %{=UHW`Q 3<>Y:f /F\;7Dpiuk#E}[hT/BެطM1ĺa~Umy ڰox*92Xs';4H*=W{y [j }5+FhK5g:(:|!4AKilf%]ԘrTN,w!7%x;44v^׀9l[L?Ak#GJv7,Ǡ ٙ|?.ۊT;F\4@ˈ9s1 _RX|1`9zfzq:V[geҡ؆&]KΡ$_ pvﺥ\ ?{~,J1rMiC&8rS6 ofY~:^JelKuS?w%.^J<5q5 K T4l|'2[-dANNmtdLڐR2جh=ϝutu̖6Lo\4;J BĸSQxómizF_,Uk?XXX%p,G=V^^`j98pDJiH,ޱD)Ή}[M0K7pDCܩj}ؕNkUDs 9ڌ`A]{*^VuU;*Թ%qlBXBw򋲱‰~O$kVzÎShflQyIgs1 ,TIȔXnKR܇;%C h9k)vw({.5s%]̉#H|=SՅeI l߱ʙUE&gE%>; dE ي7t=V#uwk| ׽/ph"(e<ۢ[R@zP4xcɶEyzm/ɷk]ĤbW4 GE,__V"ܽP:UfX˜ƥ LL\c1Lh}.xPt,M?㔫0]&[ d|{?AL9>Nf4A_ȣ @d4[ײrdǘTH1~)_Ė~1UT䧩_}*UŚTY[롙 ׭QwW:`NH &3 {jv'k,杖Эo_521ށYmZcGqFݚ5 .cwזh3DQ_g% v'ra_gHz/ /3TD5Lssb-~$%y ' Sg+f']˰ߤ.%T1)ug6᷁6V.H>0F)OQ?r賊VS_@7RUrdo|sŹK9>|ss4 D L((G;Ƴ8xn_g~BM)g7Lٹx%8y<7/NA +7+JCbK~'(2?L1RHV#]‹>2`C sGiĐ;HK3< Aܥ/^)dB6a ?XQd"a4,H[Jùu )wKG J.2|HOQTǽn{Sw97̆mKww<⣕FLjAм]m|Qx>-o c-짫U~Tbǽ:HYjTCp^RPhJ rUJ*9EbD";k(0yȋvpa÷cY?.T"D"@!tKWwym%k~HhKTh *Z5O9͕(c\R {t[%}h$I,Lfc@\.4GfB֣l#~1U26ӳ-3j_Msһ E? ƍ(ۋN;UH)gaNA8>SN6E…ayTvDe#|l`F揺)kEl QE$sIȃs^+N;"ۘ9JLJ?6@j֫Kdc=%.OVZn$d:T0S=`ppHq}+`Qd8B')pVdVCF&3{;8xTi1Y~V$5*6nNi@0: gfV/_ʩ,GʄF|6LxE x0)-K]g{F^|o%T^Xϑ{~ yxl7>kcXE9*-Uq/gLvFIdhujј|Ќ~_ xnPzE66Y;Z+w>.en M eapQ{ HC˟ܜaگ0Q0//0{^J+F|r1B4UF<3M1Yt؍-<` VqxpBD&"ؑTr3rBş{/U`H~bV<37.;ݒt].nP|aLq5F EuS?~#f&^EM:'k/39^0_DUe R #S*Hӗ*zXv)(}D'ۆD.GnS W=I-rxzxbOm6N)IP{kus ϫRy4 E\ѕn准B4,cFIEߙ'.X~.6$i{6 *hx뫡UA7q}F/^ûy)|Gg2fBw#W|#"J+/#}&o.w(vMoC(Ymj*ŬтZlðsYw=YQlX* WN&i8y0!+bXi,g.\t׌7 1ұ[(mWmF':aF/lZqMMy ==.]=q +p Vm1B:_ܩKc BD=l,˓Yj'9G*m憉ӥ[xlq{9w^Í˼HzSksZ |[b*vx]m`{INDž Ӧ_w/ϛI^v/Ftu3YǬZlݩLUޙг|%^lTV½>@sw"dYxMq>~E>v[ePwQaiɵ1hw0Y%lͧ#ΐ'~ʥ<&;OUZVg,qɴ&WN+8º"<|6/K]nF WR|^6~quY(@Sb/ •G_䪩#A[;аʪ8y6m̯d|@qZA4*G,0;'nUr`B6-H|0ZǴk9SL"90aY(/Gcd0 |0bWN $1Dʒo5WRy aJ#52&n#]WBaNNg!l\B?I /EJMvp%)?atuTxXť)$]H N9L! 8"5{<`t~teftz9IV@Iuw=-gk}!KʺuݑiU4CtXS02'|bDMCGΒdC "**a_+٪FZz! ]9Dg䇾ȸH\ۅ~D|NZOǩ,nxCIp7 3_fSU)^TslIJGjQBz!͠q4r.͝ JuxKtiFfbo1ŬxWxpr;mb p#t卾2?V4CtW~'8+"Wb煦e;,{#l6HYD) F:+ XoG;Q ^1:NB|Qrm4@hf)ϙ*O+].|Xнi  {kMѝ_3Vh|#AJU6[`'.$OeG&>"fruQUe2hza~b8Yk12Y}IDakS9 ǭ֣ Z?5: @B#t%߯/"]Uh7t`+%7!><+*<\OgןpDKB ӹ??} V@[{5Gt+Z}z&Q\XE9g'$G88br@x[-PRՆa)ym0OQ(aa3c=8ja\͕͚I3:LZ6Ο<-<ʥZQv.i,F!@|V7Y-F(iCB@nϫ,%BБ*\yd 9Nk \:pj_3g(QoUh"\~$FmQ5=̒E<*qV_p`xPZpu ktb7w'=>/9'8Z3UHД5?!)ܓsn ZD.#{XO]X֬NS3${#lO?tƅ>|Eͥ@AwX,dOWK~?fz(8¸gbnu~̍,k*'.p~5BM#D%a!oNbRЧmU{ o|Ah9hՎ [UΎ{WWm k)ua Ju/05<@D pfr`O2&2fU_A֎{R&g]2o6=^ T;2fN6rP &hcd[z;!P<k'u;Uq]lOZa tuԐC i8`r'y=[KzjF$4,*6͔M=X ?I3#^:`v{5١"Q`faAT#*8_.^P{f+:_yi9{5_ N?sk3{Pl0Nrφ|3@LLG忈ùL7粂MT`7A⥲rC~ђ>:η!ˠ6._"0ژ^ñN‹n' Y}0̄ZgrTBr;x{gP͚/lȆ'+@6P}^JCŽhډjE˶_xS]8@]$c*f_'0%P$f\׳B:USFAGv̿ٽRMk=.ySwkMOFdv2b;P5EYs,dk ]>b;i6=l8Xɾ 0y@TqgC\{uMoU>TX7zFA{%nò1N8H`,} 7(.u,K#!FlpKjfisU A0v2y> stream xڍP.w]Z]@pbݵwwP(.r=g̐<~ %( p 98\(44(4@-$/)E&mb\^A>Avv'; A%@]PhN^[kח4 `p1pBl-@%3WKF 3_!m\]<<i[e^lnlAVtsb:2y#x@g†wxM/'J|N&~V/3w  `E ,b 0`_F/1cl2RZLvNR app|<jfW*?} vkc)_H qCvv?L࿣8ɺ98CQ9:xeY7+_:?oV hiZW;Y;=F[Y[O͟dSlA@UW?˲y9\^ r8Rd}a<3 H<<Sza+xi`(/MO ` dF|/Ho`ilf ~?%߈?ֿgf/` 8 d|I//O%//o?#zU Krȿ\S(&0pop^t%&'$6dyĸ 7|MA5Mň_a:UݗgFE,¬h8*of byHp ig=E },0t!c7N9Gv-_܈޵rKKvo>Ž_9=>έ N=B!% ~9 ̥1MβFqj-3wt.AEѹY5@gg~hOR`[k>uR PR1uY18*{kV;|n!9)OР=q?Cq'v@&(Lsgl*gf7ӱ[nn6j:7\]XuA*6# %y^$t ՂTgiEogI=(=ZRvB'gDd61#hTI[/ 'S>hr# U *-tDX aY(a*GKTfPȟT4swY:[(ZtבJ)jcm,C 5$({Xl\RF/ ~u`=QJPiyԓ?'dq<}Qr>Q0ciQX(j~X hDT9`M;6 ,M&{4NߪsIDO#R_سby*$#83QЈkpgE>dbc7͜ k>p/u+aj5X~;.?KbMuSV}mR*\/{PE 6=6'6]rɖ{)M8zGKm #愮(eLk!VuϛhRfگAK$U+;So%k+&wꡛ~^8o%s" `ǛB}}Ok+=RR9;1~A6h\%DOMQ#pD!Le]g]gƀ]nJ,rDd*7u4y [[6ʥq'T$L)ޔsZ fWwhRi#||,#p5UJGdG h]URZS,' %x-g~o9D'dY]T}]([+G-૜"#\F /0V9:xz1nU}Z~yH4| i!gw1[օՕ#BV aF댇T]NxJ&cjmC*oœD|fM0G3'D?7t{fi7nk+(mX1![W/ eLxT3*a.E_rk~D ) VzOsLgGt>' 7|췣w]w~'Y{Ji١UugNs>貲#<"2Q> ~KP\_wP'_u9sb֎o|PR^󭶧AF` {0ttM'}8caؒ|[> ` |z[-ԍmĖ 9Qx3y쉁.ZVܔ%1N~ iES3u;.\&r2/ pD~bqYLDuܻ"دu)C0@ uDIC?ރi'75~$U_XQ:KW($ ]uGq{Wʈ&N5( mwSq[tl>f_xdK3|٥.~)7U*u|3XtlF)c.4D(Z7 =.u/|ag=t5ia دʰt9U ay:Tˇ%t:X2F켔Qbf2i_vvzwFI4dLwOw(o"VVnPpA\|F &pj p&@j4}37t4Ej`/A$Ы!3YYcs11_($es Vo`ZPa ԰װ/s.߹ڈ6gK3)SQkDiqHy4- jBm_5mt9X CUrІ6OzpSf^Ay#KczHҊR%xD!w+yY?1S12P'P, + @0R񖪃 oRiטgcФ2}4}BOȶݥ% 1_= RŠ !^t/7<3Yyl>͊2!0qwx}/[ωzjGڙ|\Ibp>@Y\[vEƲW|a5e@wMB1%< =iq0A@@*нJ-̯0B~7F; {(Og>J~gZαX\_..|ͺ* a D`%J061Y/,T^+vZ38eOt[u̢HǠ5:!HAk/ɰvN^@%n4'8Ji-"1_/ƲlՃUݓN.wv߹go<7ojɅF;o&@u''OP@$5aWa6vN Y7mqӴpj9hMRL-^V kĥ9cPZ$R GpW9iH'0ߞUQuHtaD NϗiN d~f!Sj#y:iI'k>0#BDզzfNulInsP89q[w6 z@-=dCczH.beZe,s5:Z eRd;^D`Nos?ӣ|}A=V3>XvJV ֲZ ̊raϓK ;r-/W k"0YAi&4-lIJ9,|KW1cTY \ݾce$p1Á d/z=..ԑYBis8d0兆E][+׳EZ$o%ߐ{s>K:ZxUOH{ӹ_n tĀU 14#6Dgu ~Q Q`u olFb uhW䛑$gyLcd0kmJ%d 9Bf`K]1c<~NbU>ewA0*ԩ C0[-X[Y+(:B%iY1u ,c*ѴC@d%vs-ԩLy.R}s2q_ʇn3cD0cztG=;jVM P,ISW 6,?;>:.DQ FGC|aD˯1(1HCD?LR\h,;,&^Ч /5 1DrJv3< DO3|paㄷ69F:iRhy=w!6Pa wu¸cZ-|PA.nMqϸ*d_S?]cTp wY綟ԗ?IZl8~Ց&W2cLmfA/WLE4lסbzD{)5!]+z6:̋Jvϳ)&FQ 3}$qVHO3pfIɭB[|ƥF!\Ճ5RSwAOui{ZNEji튭n79\Épugl(Jrɛ<NlIE5-$uxS{vwPр^`ii)zu$ݍw*(uh5+`1?-da^?8Jk)7[0+'<8Uv߫d蚏l.9.(82) qA/R"7$;0S9䤄AlXE6+2Qo,5v Ί}K|sd%ć-DI`*iPt[|X#썚L=>I$uzF&xDlV)XNFc&wN^[{F\H& I ?o3kMΣZB |MTK ֲg#Tyگ~oaFs3gr*h)@j J imᴪ${3;ODv]?&WN!ħX ڬsG!o m5MTlY逧hNtSR 0i|Y`tr33{ȢMRRai#L$䲰Zju&"S=[|O33=Z}0/SXc,uIgzKfNV8"vdGҫ9Qu.Yx Zm5sXJaYU'cK\1~{ w.|t@*݉Vo=8 zePdVkaX/ԈX|]Cp'H u+ͮ+'i`;G&=pbTF밡EEe׭t 7f\%O:RVhHf[2 [&sjޤxKVyh fܨk$7;u>{|ݶDAt\,EI= *9qڛ^ImBa 6*Zo:..Go $[lqS{W6k'Lw~XegON ~.(Q:,s1 7݊vTVzV|c>ul`wV:윣]y`mJٹP^tmBԞ VGanc-{ɨwpE%nc"QxP[802aMo&lJ?0+9&՛qozvQ֓F"CL S.}o l`ˮ,F6_w6VNDۅRVWۛG!ݘ F}L;==U+PzpKTQI"tXcӼ3knS~ \Z({YqI[]>ܗN% [N.*7ՠ6L;={ȡ6_J98׺.hxMe"Z {ӛ΋,O(`CѴ 8PL4$5 O >}s(v@D<3ء&jmOU[z+d"x=a'/@y֕kfB ,;~H#,h33)qOoUi a: :_|PQe8.cⵦJr~Yc&.Q/>TrWg q Ӿ.t\.$aMOҏY_(5H(spɵ! ()BgR`x, A,$^>LÉFEǛ­ar!ɩmv9iH`ߥhe]It##YǣF /%Zz[^Ƥ9]WtdRUe@;T;9BI1 eO c0\GJ̍DX'RdsEVAmќdZ/L^a|IaMOup]˿쒅Ըa/6viWءӉ8閾;xtb#%9/MLkOsubֈ\(-UCvFd;z'?|#7[o2A]47ti\V&3|* {}5H n Yܼ]LH1V[Bv?_|̉NbGЙy xq7?d)ke$sɪ1_:EHRK#'K} eBLcP2Q1;Mcm<U5Fp]&7"qfVt5A;-;a+4OҐ vľ5#`U< R%d. .b8QqZ~hD=DT3X'dTENY 'SȨk0m@t/5k"(io)if^ 3LHWOrۀ mnj*r^7$|%`ݩGWKSDBS\%~T8V,>*ޖOGO<.}4a X}_'u3m_Y\(*C=H~q G\M6Sj+dlˏSw"R?rU=OK?~o=} lEIN[˧#d.=S%U0D?*Qűz(ybѪuF[ݭ͛9eH?|5w"TŊƯ*T~fe ΂߫<@أ#ڗEFq<=M/Ilqц'9tMbV2Դ>!L9%?v`Y5^> stream xڍtT/]%Ȁ9H#) 00--J#tJK(ߨ9{Ͻkݻf<~mp/( P >"bc3?Z"6c0 $]:E ݡ#PT(&)(#! Py@Zu8 $bSz# (t\p Z #]m!`?Rp>vD\%<==A.H~8 /r胑`k\6{0~"6#GmGy`Z؂aHt;k 4:`g?;ѿA`ApWsC`&? ~9H8:@A6hߍrzzC" ($?54KV)]\0W} {|!0;_#ع  n`5ſ=*(vl~%7v6Vu#!`/`mD ( #OvlGFo dƖ *&yy(OHD̢ ݅b`pğfѷ=>36X0?7E0C,w?Po+/a@xuGG3߮OU Bs@%B/.e*Fp$׃ *[gD &?K*lv%$" ! o"ђ708 @#~SX ~~):(Ool4~ſߜDp[Pֳj9OQ)ͧ\|6 R4+>+q.0_~kÏhNkJҟl!8N7\m/!#ߵq3vf:[8nՙgWmopVƝI8XiW63tx(>&n/)ʗcIC6 nslj!v~ZIr `SĮ4&$ |R_R)dI@jHz&j3ڐR[iuӃr+Q^ujяza~(It)i/9K:*J(9镤+;xz$LiR8΀ہFmCRn|qnV.CǤ1K 2/tx;\<+1R]0sߕD55bM;EJp@*δ;3Ŧn(rD>IE7,(sA%V=0!J%a8.aS>h;Y&`=uʚK#H|!PSynf/1T4Shn^B!KIi!! 5J-#Q(ͼNqE3Ɠ#GZHLwW$wC>4l(B~ב:S6!U/~5&, YOlj hy̥U1 N\Id:v@ SQ/]tCG2uk@uѝ,$ ?c}Q0@u=44mg z{ I.DmX6WD(LkEhni(9}d{az 1,Ũe(ǻ3e,3&—$O^u'5oU;ЫM-([t` ?Rl}1Đ7N.ĩ2t7?ER=zYbf6]pD`@g31,ܹRo>3kMonFJy_^t.~X] |N"K#вMd Cb.ך"&z B##]],P A1±V^aV36~jzwQu0<~՚ζoULby[p#i:m:w \!ܾ-onVIz6(JhqSnuߧpk#Eq",_U@i CF)(؁XkaD5lPB- ^K=&j2}EHLjq2٩Y 13̾< fGSiU[x"5O-ݎ7u>1^E.)a&'ѩ' J:^DN.E\&mدg#bCbv^~v& -ޔ*,lc@+nNG)d_LQ0:}_U-!8]0ˎqksm1m 6. Ǒ$2Z{ګvZG7Ym&Ќw#0Gf}P${Ǖ])fDDzGbez"uO>sl"ɑÌxG^IĺO4Z >A[0OT_q"2Wng]ŸխTw ΧRټos`bA=swǴ-Wer{*RP)N{^Ou/|fYڏzΜ~4N NA)lV#xbg&G=We\[i3SSM/:Xа*s|^4OA#~kR2Vq`L׬=GY¨Eg dw%nMz.+1T SFv7rTr]LRSux·{pD+6:5YE#05.h߸=0п# lD)cZ͓_g)'IXg6}ܕM))=fL#C~}wiZ'I*屨{lּ.嵐]-u$#] pdi+t}%-ޮJ=ƭ? _(UwR&x@fTf֏;;Om-(a C䛨LQO'_y}#kjɔB̞UlU$uw:yx4tJlRB7Z+&2Y'cdy䴧}+ݔfmycj'DUzkɟX ܝ=XE-*b7x2G>[<9ЬOgș}u^=?XecYʀߨS0z@\)"Jҙ/~nwY1z:|wZpaťM*)j/b-HΫIƹ A’C _?cG>o\}ѭ$JrxdU=_!;YH}U, - o'PWoܳ L|] :Ut&UZl¥RFQ'iSW%bgGO i,CG_ޱwȓRi[J)`\R!zB+l[4Ct?4wSK5uƾ>VkS#9c^z`J"BNu0Y,e,5v;4fc>ج]™kXp8Hx>:4"9 P6!K@Hf./+w52:' 8G'0c@|#bySb?C(sv,l_}cu (g&1y6Qyt+z4TtHHVaGR#ikTʻe;m2 h v2\pI_c!@ڻ˛xԑm Pܽwyn@.=| joKLy[0c-lrF2[f1*1^5$WlyNvGZm A>Nh$!JRt6ܴѵ)cԄC]7ĔgWGScmVKZeWІI3/}FUTּXkꋪO%y~@5drjoSXz_yecvФ%^Fw ΂4:[Ay~Q5ewWHG)]3YgwIR!&y:gB;!]| +V\8t\GuX mz}mNv-N?(mۇS3o ;z?lt `VɊen" eԭ$ca~f6Us< /Gl#ڿhD;M2slFp^b*U yµR69 }$ܓlF_7(u"R%k9y:t5׼I bKc`UGܾ̃#-EKqiDr&"ViJ|Yςc9(C"U)7ݣ6%{5!9i!E͘0o"ؒ]3{Vp_} v Jv|'n`#uAAUcmͰw!}> _!1+m%O=XX%cpW/QjpAeRQ}zsJrKCy3PE5,('v\W`68cZ >,.hAQ Pgt}h=,J\"a.hR;LRXk:2#[\eCQiV[ٶ--dÛwQ+Bƒߕ^ȩԼUq)ey`ɖwڑ-^l7f@7-lHW0p+ YMyGQym!FF 2JcX>c3V<,oΦ jc-v/enHy.Qiʎ8UP*!ᅀfOnux\'x>|\vLgEO~ ͙T' CMk?n&_~5*^o5$ʽa]-M'}6qx,ez4rtxglޗt͛=!pk1!Z%xu@.;R Ϳ9sp Lo1;8!Z#xnÛxectk->g)6pzE ~F u`2٬ojrVS8tl-\5\KF PÑ4AM7=G6}S[C]IT"2VմV.^ۡ9 xW_-]` =1AD3M&ī^?-~){?g>cAM]Q?a|&_5jzhg4D\%&J=^Dt[)þN>ET mM$m}'݅{M0}C4C$M'{@͖L BN5S7R*9?ziZr. 8$x7{HH=5=ۊs]và)~YN8?S7 -) ʩb ?I#C>u"Љ*m9[OQE >OwmX3z`Ќ%}]nk;1Eq*- IuF%Jz{rAdEګgJ. Җ`^]e|lw3`(=y'Ǎ!գg'8Ы|[qM` e#&"VUp[&(D$_a1vy$ê endstream endobj 132 0 obj << /Length1 2101 /Length2 12560 /Length3 0 /Length 13841 /Filter /FlateDecode >> stream xڍuTP݊k N(Pn{wwe$;33_U5Ł`34ޅM `cdac@ִv Qkt@dR.S%=@ ```cp$2uX`{3$rL@N%S+DsS[?!脬\\XYYLYN"Lwk+:~ P6S 5@o lA'W{ 9!Pqm??޿Yljns0XXۂ*Ҋ,..LS{oCS[g0 bWiq5)TldlmJa ~kف]~'e2tޓ+{@ߥ]X]ArR,A.n666>ł s+߇hz:RCv;, |-@$ogS7o"$vv`G"Y!,pAH`!g@.UUVSWSQKH=lfNN;/TMȿ\-49tzRC 797r"(?sv˂&/ S;k[@(%0d(;SZ_)d,-!fg[l,mZ[EZ vjllG5s:q/2J{[{s0qpLL= xCV{ `vB}<Vߢ/UJx!H `CA??j TV?N`$9B_ 7$ k7п< ?{m՟ ]t? $*)C!'67aRO:g!%8QC9@ֺ-叔?ҿG1$o4 [?rB vlu(DCDžt,?j9NlV+'П fuqAHC!-p9 <9 6dv}<@H s`s>ֈ3oqvh]q!EBo|W&)%ʽK̔R҇UL6݆_5vlK9[7Q'}I>Sk]jQ,P0[=GxbJD9z~Y[?5)AaMwzMG7ؕX&s=32H.ugfĺV bߘ #shw/ oa(xZ#G9^E:0|CIyhxXh%{[z83-Kw5i=5bB Q/4W*Lr]lxKm4Oq!lB:@v.1 T״~>ɱ][iM}6SMڅY)7C*qIvRRqN JV*8 qÉy]™p)bC'8dlMtm:*uq퐅χ6x P4w)lTM `fBFZpm ~.4AU$Q'_oܑMIzOpi.`n-NK4B9bWܱ(k{ە’A0N+ة;; U7Q@OV^PR->#N%=:s0W4x/DJ,h]F49NW~?c_7hE}gb8!#W5u8 N^C qa؏8Vp1y ]Dnd9ߵP'zőzw,1k.AY =1r(ǎ]xAU\Y\:kІsE9LVThHA:Iиtï$h%"4>:%hxŝO{\|CIxrR_Wfb{i2ẻTG} Z=GtXfEORInbjXWiE)Crl`41<%+d(Xs4͡0,HXʳ&:[K\je9+>KWrWwQOfǺEƮm" be7YM388QA#>U-TvgVUsZ\_P٤D;,K~P x!HK=ļAATlo%# Fղy]L%ENvKX>"i}i5.݋rO eulKr,c3W( KWoBH$KfÏLlT¿7**MI8(II{آ:l1ǐ:qd3'@[cV0nLGE[~ljZ̈́X y^?|- yEúG7sg>CY"6Ixm"+dTuUXZs"cvȸ3D;y(~xEw\ӓD[7AP'qeQ(y%2+eN rQш` M~ׄI.xWe$7z+s5FI\y ^юK5Y)*=3~-TύHⰛf/ȝ賭=2&: F,hB, &͋XɈܧ'sڨ$*X\ g?EdHAAW ?.@ sI ~*ri6$dB,!2 `5~Vdsyl"KR!.9so=|W>2KKjpiPÅ 1ymSs:ŀЯ5u߬wYo 59ﺛ ^7|+ $p?̜zcmS=.9|`Ie~œ](BMobD&j˂j;Sv3Qt>o9 .c1hy;l<[SVFfI- V?o s}Ɣ-CTUjVq$xY%,k!7rvE=M=:cy5s%XXKb^N^w0)lCGi\ cQ|y \ "e@071E&_NMj-% ?$Aץum $Y֍Q!Aם;|ta{Yψ@E|^cK*c'DY Gm8aoE|^BU'Zg<5v7{ӝ_S^Oѓ`嫙eCc q`լ:|!4뽢I;@k*7)~T$^«;T jO hFՏX-i_PP]b\S<嶑b5/Sx\jDBsh6rϐ3a➥]"ba" $Gؽ餇JznrƷ~:C=0ė/9)|+pd*2꼈Wi~=z8/ԀK=mr.NX s0]Ճ=!e~ɗsՉ[q+|]|s|(ST1f~}-R}]@ϋyۢ;Z,K9}OT<4K׋Ee_.q˜gã9o&>龏=/HhJ[U%F`Gj7,C98%9${i/ք4l[αFW..i_o]qx9gy"uO89A$zCIH֭ Gq9xV&)Ν}bUl8Y잲NυHnċ1uY5!'}vny@Cp9nM9ݡq@~Y(9OAR\[kͰ5\CJo0 NryW"ޒ iJ GA~%t2%3fmdэ % ;;tM/T|5a{ٌcxYXOM5h|ͅBstՀ"]i/f ]ބ[\4JbX%WnjKa}[h:CbiTe8ejY evh `\G,2˗Z+q. 5r{^ᒀM(G L{ojBhX9Q0h6Y xrDe#b6$ns@k~l@8 KPl.N2t-OJ׎1DZ s- hDkj&JĀdkV{ؓ"`I+ cx\MKLt]'?gFv<G`h!f8sÍjg:JޭޟӐգgז}7Ss\BVbx7ʖ]d(5gE+GkRIܑ`R?rz=d(@,(kvG.'6a HY ]YFa6p h5y,V$q?SXb&xbGDsD̓#m0.CᎻ.nR-WkQ{fki[5% dpǓŶ( bQ흴%!{; /8&" N5&R¾ׅڷS\}j$|QN$Υɔ_5.{*_0ظl6;v%CۯG lg+޼蛳ګ?zR#l$3YPF;3[߉\|W7 UKyX4v[4ݑ["\5!hIQ#{MƦw#a JPc4ˆhY nnD~qo"+[H|q0jq\f01sLH}ڈ(7wKR;Z7$ʋUv:LXsn F)Oԍv YɰjY~0NN-Tܤշ9XS!ь. u8bZӀ\ B}(]Sx9}̓i7ōw~G'FXX&v!] pՓd7P!ɢ>桔"_zYBs_jI=:\ vb:fYc S+\-aU=bð="v>;*?8FNI{{m;. c`Ԁȃ@rw6!YIpO:^͍+Iu0xі hChJ䌔ąKA/RV yq+@Xo)?%2== }_-͘-ѯ[Rw ] *!oX[Ϯ驧U ?- HQ攬=REvEhrPzkNb̸f-q#Mu9=4t%c Vj`@P|Ԑuƫ_Q\W.>=wev]V:t!ҭ,tf_ylguh=3| 4sZP]ex=UZFKAGe7"4|51Q]& ŴqAvQ5bu@$O2髰%vwͣ Z"?W1v]/)М}k 41{}^|V׭`B ٸbuwh9i^H򃤟R,V!-륋;p7@O?MQ r jx[)7C2tB1tȺqw]?eb&]H'3?9#- zϯ P+lp]bmVg0֣YXזH&@#]Mx>8Ǒu45}ܖ ځL'I󐋏BI d&v%\Wq6gèۋ}9+?= ;vO~Y}(FSK%DqaNMQ:#wy{E\⪉br{s-)/}M(i?TeQʧ91c+(C ?'1 UsS-PӺ0w5̮m+~IT!#w٫ch}3OBmG4Th|$}9|_KRRk|w(L\cwUaX=k|Bs%vvϱU,\kSlc2$CM*T0[{' rOqVvMMfm}U'ȑFp° D^̔]fbB H$L6dArJRDX6/H&L@1v9Qx5"m.]l7Y/Q&u\ %\bN .iՋ밮cUz0jqАML8,BԶaћˬ7Ҡ623cRC aϿ>oIz|(6?IߺTgI(" !b%زcLlwpAd>)EٮzנNV^# c.d+-$:lL+ Lz^)2҉bMnq/⼂v_,z3fhp`@Ći@'z"ȥF V9M:e3}Ka\sjI̛ r?tS\/svl'g m,Z-$a5?P _R#P%?}! \Kc 0֨#p%Y8V&xp5"rhx6SI 3׈WZ7:c'6"JaG4֩S̄+IN%W+mkJd)ȟǞQbԖ )Fȋɞ*g-K`>4&ykCM[R[a""!ݬ3(Jֵֆj zբ\MFǧoXz۬uvÐѾ_uY^##if1N NP4J<p"OepfS͡g]:HsoS<[NiO&N˺hldYf6zjfM}[Rgc[2 t,C0Cμ(+Shgܵ"׾Pzib,s_6ulosզlVtn*hMɯ:LL$PB4c։˥ɡ5,}۹.hC!q`nws3{γ qb&4IG>E%-:㕹۵,CajK2=nn&#lOu_gr-$ϟ@PIL(4 };_Cgshu &HWA)0ed4I:ډ#T3;\-3 ׹waSqlHcR#8 N0+&gXOO4FVKkC:5s0xf4D dny>G޼Y(eEB7-cV<2'/^(SPLIu6 $;K}2C\5*RgM+dOo7ꌗʰˤ]" 7R"_c72kT&mb^B?-~*Q`!o=M*|1M&/|/ ~I*+CbAA}g#gT/ucvN.a`_|xVx9+r"1/a1q;kT}u; %۞:1W x|3m!͢ʓ,f@]UϏ(p/Y`=%x"KUy\'V*ciM{p޷[uSԊNC8Kg oFr>t[b9b_c5>p Dѵ֥/U)ui.J|E#8[ތL̛A0C{`VݢWɹ.k< 7]c+LAY'!vqK3]$򓄰^qLJ'H~/BSWn$LQdf /]vaF)sVpJsA3uIC߻W-w4cٿ-4Z}}mX'qFU;v]INo6OG85A5qb_>;P? mʜϥq)\f $TK^ͻQnS+2Hp\Ξa+{$sރPؽ™~viYB D3Bqk`#Te| PCNV[i :ӝ3f95m~ L4Y. 쵹dFB}M=uſ :ɋT}y(H~,6?iYl=H竡 'd_!3 ᖊJARVR!T9ǐ_U&q{6Jc7Q (97=urDUqBiɊ: :Uyqh<ѩa_Rp*~ MxKZ4{2}e ˇR?&t-EVc/6{1h.mU7@՚&`xyY38*-zD)`6s/*Yy0x aI|;eoaIi| Ef_ǁ'mk5wS&BX4,xzpΜ^#@U1lVQΖNpi3Nwt1)cmcvv2ꋳǛ҄P.V>$gt]7fm?}% y.P9S^]aŃZS.EQtr\-Jg5:60%By`aܬk)ϓ6rU^ FNҨq\*𱧶0FiKnj՗z+XdذIw!8JR{QF(S ő ƌhd"6/V` +$0MeW3evWSJ_$kL#g&[~L 0?2эnU=:NWN`ۇK8?aj^[n(i6f,3 a.`|$x2>/%fVV(e"wuTjeK0R㊁EN5b'-q`_JiFKECS|^lirlgNp29 u&EL BR|6khǠW6uľ52}j)tFEPLwЩ:HdԖn4/M_Z$ jd7*Sű=_Ɖm&V녣0l,JU[ySNo${ے3QToF"%_I4R෿sZn #"N @Vb/GD*ȣ>5'X[Ceka% z3HO<ۚ4 /-y FUb^h%N6BfX|?lj9-i0x6xJlh C p$˯i!+ͱCR횏Y\ܛt]Ӝ=\(]$ByXE\.W)l ASd5?Bү$s%^~ͩ;u*ְ>Az|*xJ\ %07洨YG :gJ =!-*M?݃&50#x.{Z5DΓ7 ePSz? ^~XcFw&\{hij@pN6Pa>s(O!:VtӬ˙?dnYΰas·h@t l?7@3q m<%e'(ӶD~ԯnV< 潳RFܞc4$ht'[:UfPw2Ξ;߸8>\EaEð?aEsCOD+|K`wx= PgVGZi!N[֕,@8Q"o+1j:!SZR 7M4<mdTbVI;G&U{˸EGn_sYQ4ͅdTH+c6E4 Fq 3pOۉpGlEܘHHr5&W'BJM '7Z,XJvm&H#[xK '#/y%E*%ٖuY?MYDbo[,P#{Y&cRdj[ԶP,TY&e_}ק gtu_Q$2k>ylrwڂgU̶ endstream endobj 134 0 obj << /Length1 1379 /Length2 5902 /Length3 0 /Length 6848 /Filter /FlateDecode >> stream xڍxTT6"̀t "90 % H()] JZ߷f=繮=6;1#Re]cK! M(o;> EGm*(4PhyB"!1)!q)  J DxHT콠]F+#}=N(to\ n8p tQ`7tE= `A(qFܥݐ'9n>7 0#^`Gzn? Lȿ @`PDxtu@ gsBBJ'W"(w=psBN|P|{/= @{Cahj{C<( 54mV;*#pW*P0ツ@᎐_c8z ¡<*0hmN`@()&&*?}@΂ ;3#@(G{(Op:8BA( wv k> ;k4p῏XPLr*)!|’~I1 @HHH .. g{>#VA$jO\ g.=`׿( /BgWݑ' ۻAahz*Eo9/nD٣ՠwB3__v(R v4@//p AGC ~ 5Ϻp؄EFDBhU:}~ (G!nP'Ahߚ} 9H:exe"71յ$hQ3glGJv54#O *"y/} Y(@ao(};}frD9M? =J6d$¶L5z @r(='aɠG+wa>da[C [>$I 44|MPꈣa5܁"'Eڽb5~Z,#)ɹZ-H %s$VH,;3EEyT++Ŧb4t-ԝA_X`.5>1_Iӱhb鱸yZe ?n}1u`;dIMn=Gjƣ*מGtr''cR~ 0ɚh&B\hB:owR*B1xR3Vt`[*$w {ݶIr8Ƴ.zlWǩmKV9[)PadK^a${׭ ņ 磌2_Ovroh4]c; K Eە? PƘZ tyBϾY]H qn;r^HI@F̹!)Q!MmBU~)Tx. i߄k/QY=i%mRw?>e@^ 5* Ue [_EDw-kG*m8іWN#[I,gG, Tun7lִU 4}i)v9;ðһN%|qQ)=5 ,Kf+?ۇ) OS{ҘreGlUu=d֜M=etpH9};PhF/j$ӕ*RԼ4l^&/us]|Ob 765lkW!",k; $NX}_`ja/TL%Y1Lz><7lZ+ְ'3.E4O-l P'NU(K9I1 iFs7Vg>OE W'(J1{N~z 񏚴!Uq~&Y䟕>;xz`1) T>]Y|1B$ZFv}W}YU s0'+ԟ]1e=²Zbٿj_؞yxj3ĚTقl#nÝb/؞spqa*ӘP:q;8_Q$KLIt eWX?1uQAn-3=50P0!Jtd?Zh8_IWq̎Vsh_+ Tm9>m_m}-?Gyp*f:%ԏ-1mL2`_yD!vFAv+/iUF4 Յ@(wR(ܺC<+{hC7v}ƘXH66︇:T-l8rV~ok&x+!H`Mm$5]_xib:6GG]|̯yAcJ rn+4pn9r''+PCĎ-(ɹ,".\̛,_-l+6d6,p-N/1o_ač3o+~j /#HM\b&;}T\ԗJxr+Ew`o^朑juΎ\4Pn;bU $('<-ȷn*TNzUǵf6e5V& 7[(=Yy$BPMӛ^yD'yoZAx@[-րͱtZOעޮ.*nD5n 0LB|E1m5GeNôɧG ۳oI~$Zy%H=?3vd܀ĬBK9Ka>K^_z5s`*:GDB. ሳNNIU0%Q\xH轧Q_ ʕrl?9LFCmG z.=s/*^1c=w)j#b0_*aQRP񜯳)GMOHvFE(ܵXLVo03m7A3望ɡVQ~=#tHٺ!NccIբv$Y'<۵Ģ"%jN3 󔲶7s˫:8!f^}2u 7)8iPݝS9 <ˬ?HT=;Bg}x@`aѴr]jcYiPY7[<#8[8}1F\ OA znO?<`y20"2:m}'Εz6e'}nIyg@&J/&UQ:Z8ٸOˌEx]h<NV,G9M`25Hx暣e(@fuEAJ4QMpLc_N}LN;mfaMRƣۙrDc]"rZ~*z:,X%xt \"c/1Oc46zU. :(P>Y]"`4[rCY߫>AZ jI^)cg(~; 3}j9+aRV3G]jSض?fIS{pi'sIvㄸlXAG'r䡺ydlr ~s=ēv]ڨc_')c0dr W} [JUճOTWPSKN ٮ^R} ϕuTqXTe2bj0eK+;>_˼=I['DrSFJG @29/֕fscpȵe&-⮟j)iێNhvByFd2} /^ME铧j_M/ X_iGFVuL[vU\xPGzlFi'W\7d\Iq0_f)>+NiH5xf ڴJcп;lr*Z 3:y\ߩm+jB{p յ 5ZbkF+PLClݑHew*4q.q(R`u=aWH)SK\$/dkm,H{?WwfED~>1B94sRImuJ)wb, 4 XLw[TX֛/Rd,bܽIm|󕭍qPzlC؉W/q6__zxvP0ĠVh!Bc{Ik;_:gnfizo9r|Uq|V+5V1S:{mÙp -LՔ^ABzmeZL@`H(qHEo5iIKukFSdh߭O}&qʢN8}$lQO8cP\KXXi˅U 2Qrc=no9jNLF$đ΋%f$efo;NKjA9żO6,^*th3Ҿp9)x[CJͲFzv }a!V35],|ˋIpý[V9~)l`eYѧFv\ I}序7宒k|>l3]JWCzq, ^cIl?P(߱{ss!Fg̠ NJexގ6/hg[箄I{}n1Gy+9M&w߼a8Igj>Tfd7ݣUEGHz&w8e|񹏝1{[hreu%+p'~*8EoYk-h×tgu0s@--Jcvrmz[T|`3iRY]j97hc4TܐPTVnCga7_}oҪ,9W/,L'Yd5_=SkŦ _fZ#x^7$~5˚0M}dv[0U;zQyAշ̧Cc[޳?|-ӎwg\(\#mbf+i'0C/t7G1mvRa4ud'y3"\V{\,Tnƾ CFo}f0¸"k d#*j{oVUK5M,KR|3);"мYO0> stream xڍT-;Bp-ݵx$ܥJ-Z(.ŋbEmO߽{+k%g3sΞƤkDnQÐO% Zj~~A>~~! ≀a`(xBl6E[Q {"?pO 7P <6' ϿN0@@\\p lN8 AW N)'$]uC=ex>P@xzC жu aw@zBW(C!(6܁F0DMo΃ ?6G /@<_ !:0?w8< :@~ O#<=A0d0C <ϿW \CJڊ<oӧp_@Aa0?@@$}Xw][u#V U9d5p;6An/~!*#U[~οoƃrSRM ^54D@_/; B`Tys p!|CvyxEyW 1l a]? a@TC|3#B=x\ӟHTTE@ qo$ Q : XaB?nA<=^?p>Q/7; KF:D^T<9";zycD뽡 uy,1vFsW2Ŕj)0-Vjn7pLjan#wo989"Tq^m$.FLL-M>id+Hnd7eZHxoFMq-n# 1g%7'av,jcGGqjM轩 oq?qZIrw(}z9l/(QT\ZgWywd R@+CDrDZ>P:yqwq0Plg+K$Rݠ5ZzX /=Y;(8 2A<Ԣ 5( kSO;~vW kIa;ّM = i!Ta h)3ɬlCIV-B}@/{~BGE -9'֔#nW]YX靑|^[FQohZi}+ɧɲ=׏WcYMi:W\!HCƱ(7xu.O~kIBŵV66H^2^%-k;d߷{XsE@-̴>(C  }Tpql/fVN)@$xg3Z~Q6n 'lq> *˳ȽqɎƸ|Vjx:/a[JpFP{Q-aQ 7Yjziپ-b"!kIk٪EH\%O$M pw:( ""$,S縤<ǖ_ʢj^-tK[QY_]` ސ||L,<qs1 d()K೒"p?ij,qpřGq8-<̷ {uNςIÊ9KeK*(QHd0=8?8]NЏ!5;}%O -0&AЖWy 2/@WD)85s:R@eKNFx..ʧkEБTY6q֬n 鬫'W#3n3M^_2qt'0zxh:ao imjku1y+ 6#0ŗ- p'fI*mL~)n'TpfmIv\~nݓC6KeJ_# JU>AOeoUW{?ғxvS 8FQj%Rmky -ih45]TCo?Hþb)r] w E%{G@wdE!8v) ƥnQlֹ8;B;m2gHI#0"Eq^1ޢ,\Z_z^l~$~GE+Zk$h _Qm(=q~D]ȅgXrDUsğNB}]Gz2b: XsM,Ib17C' =Şng@@Rҷŵҋi ]K)DELWO&~)Q!kCIkT\\dPrLB,A.Iuo~|8k(W(EdZmH aK}}&c64NPQ~I!ԟ_uH2{b wĿ4/laxϷN07M!%.׮8>3^{_p'p #Ry+5 *4e ;]>k1Ցtɉ#|T#IfwѠGN7e;eAs@mK.*pVw`pWݕ3!e ?I)p'߾8#9.\0~l=A5εuvr%\I`2ĮP@:hHtG99xqѩv^5/I58@_eį7Ý\FsQֻ-= ֯{#>g-co9&ekdnoMXA 8o?Vܝݣ?cLOy(up $`ƃmRh_FqmYq&gD_<&JN"vrձCȯ(#xfꞟ;}Lƿngq# piA~5FceJrw;M)9?6ʄkvb)PysSE.*ٰro_;$ v|Z{Smu*9[h5g$ ֕f(<6QDk2+oxĕƾ {6 R;i~U;E^1qAx Rԁr-HSϪ}f'L!Y_9OsӖJ"{)bӬi)ҲkL3xw(VWw{==Mѝ}ٖy˱| ݿCٶ~7 !_ IdMWӺ]'Gv1 bq7j$KPå1"ʶ LX]s뼰s֏9%}&jT$Fm]6Gh Je^}}sö8i8  E%HП{tml{%ë4iVfю2 $;O4BRF`dfio|?ru #mڟ/q|F~NϤފ0\ģ{!}8nfi/zk־o~_%i雋"U;tP&S5J.0s1L#B;Fӡ>1YIB N ciI[$גE]35v ޭۊ/t">%+Va☪^eXg&8p .n9\(!:WnjPJ`a1G9ydGoW7&bTO>$_,xԄ},Uj$1D,ҦZ$k>:J]^90m$Σ6(}[ubo *@TwV)W귫f`v\,@̒#ٱs0|ڄT:X]d@RNtp3oz%CB6/u)TAfn|TǤ6u7o3u^*+DdsiN))Α|^`c[bP8{}r=d=k@*:(S]MT`YBU:šTh֙milmQz܏ R=O[˶lyfoX OΔɸoIOs(񡳳 uPrޠ87?M*zN Dzzq!lYn=FˈCA_2'wJDv-lZ (Q{C8]1g #Ri4<Sʋ^=jroIu3)r%MlQ5tu߻9R-9_0T2}B)xD*?k`~[RB4_*tC#DЬ;EgR+u,K@eE!j\QJ"oss䓭䍌[-Ώױu,I3%d+ؖØp\~a7|DzcWg~ްٗ}O@xٲ  f.ߦz-ҩ@='C/K'jUw_7ǣ1Sq>SZS)Xqi9Pí|~jN؛*5vF\cb>Vh?|w!^6wCC9!j2rļݛ?Lg93:55;83=]BĪ 7Fȶ}cmݗ^tl`g"ⰨיH^2|E*圅T=a%[vAk2c-fĆ5⾙d'VFWMSߡ8mYDT% |5_z<|ӏ<-.`홍FvSHivL z{aȵ9v˦WyMiZ5jP~6K͛UE@mf `8YLvfq]f tl~ݶc0x4=sϜ 1&-{R$zi{֏J`)o#-":kasI֔Hd]70P:vf\g >K+245*4o< gb+OUv*'f7ыc,yes sr뵲:; 4U/}ig_ RVgGdѴ:cOONsr7]!l N=; ari߄1ځVnۜ 8INś^4:e/??le^,%m732VG3<.PC yqdpsmFZKgm%zuZtgo2gwELPMd{?1Txh nH߼Ɍ< ?Ì#_.QqڗVIx/J-f:uz*u{gދ|ঢ়.Ao|C혴zGQ i4 ²"aZP-w-ko)-)W.FCDl 1S7nŽ"c [q.,I &]y TįV ^n=?㻹B}sv8vI>)K%8O|o_&v'ܣGp9WkRFr?k hZ-zlQ1aP97Q y|ۇ;J8ȵ[ NO|[Ҳm{;,J!?6gDˆ5P*`+N9wM#e)ETho"Vr~[=ߩ3Vv}j"#WڧL+SOU΁Pc:30 95\JU]>SNk K%(%I\{^Ol3}u,ڱhOj&Zf\)]#@4u 9$T=Ƭi.D= .B367}]}<6f#b7K$'+k3#sVyC59)]O1o7G5JXDzKU{ &"L<Ԯ 7IZh9K5rMN8 h+*rG '-^f}* tH&P$ 0PjvRLܷR- W'7oE]vr1JuP(:FCZH:.ό<%15 2ʿ\ڼLvH㈷,iP& %5F]7z!=sFC< *Mc9r#zd߅-tVۏN'6s"bs\}2O1S P8F5}Taܒ;Rw4NF`i?UTLp+;grˉcv3yI /Q:kX>g=_7CVM'14D^!`R Pз=頢-3=;7&)^cWh jLw"s}@-7%vЌI򯹲, 6nF~r.8"HX?v>|-Y] d_V{z N¡Y[bg5!c)|EC2skNjIOCzα-*UDU㣨.P(׋뉱[xApŏQednͫO5Qᳬji %ނ{RsG l3p%ۈYfV Fg O}-k"=1<w1/,!f1# 5az$t:|ƌ>I Bh3Ƞ8]m2F4 7^H'T3zNqWOƮmTD+1]A}R)#o/G*܆:ƾж"-ɓ;K endstream endobj 138 0 obj << /Length1 2086 /Length2 14065 /Length3 0 /Length 15339 /Filter /FlateDecode >> stream xڍP[  2w %8Bpw Is^yjf^ݽzw?5$wf$Ձl6666vdjju+g[Α5A'+=?<$ c׳ί`{-ryll|qC],9= Zt~:Szo:@25(;[^3V g A'hblX3ܬ- 'dK2@oi,uK+ndJq7Aj ews@W +Ʀ`;c{+{ -,07 7v556yutcs2X98;8Y0m7ف읝dw_=?/f.V. y=Bsfrpr@%_ =@jr;_e|A?^NƮ 3O"d `fe 0YX#z 2~;@u>:af`{[?_1uie KQ\b0sp8x|bl*7UkS'AXJ׹G6.6/ao:")[ۿtrYzun]_w@ U UY_.[VNRV 3+gS˿g_홭=Hdד dc?2y}z8&oFI{S_K 0@=^' |F3C `e;R|`_W`_*X""^+91M >׫l?'5` rty?V?_2r vbZ!k?,=,AjU?{k%\TkUO1d_81C?xe8_)C|_9)/rdWw3dkd$xlVgK}U5˟1x q_xOTO_)gIL] 7ϱ LAuA5bn̻BsԻZi^ː{td꬀ o^Ik'Я UgvېM N"0y?9zkBwQ9`ߺK,~ثGy,eֈ_q*zV>T]5#:c%Fs77)喢~P0k,2ܵiݔ稞66ZPGE_{ޅ֙T^}S's{jg.Ȉo1 3xGk9?"U@!}!\Xeq{<Mts#iM*2j&6?ŭAO`J-\)}'*jV%:&u=cX`΂X@8n^7;SKsI5N ʎn`Aa~@"4IhY^΃hQ?RX:ؘ7)UfQ?^UKX˗O ͩt"t]7Nҗ_7m\wGǨpuT]h퐿{CLݯ |$m*>w>]}3׋,Oy+c2{Gn#ss v- x{:U8'kh,]8s/ܢG՝S,ŪbpGjalhGy5\ywїޮ<=;29!KWzDI32) *J0jpf8?e@e)}L`q9>]9B[y<, ϬyzD_R񶱇1 gYÈ4֦koZIΒSh3~@¾uR")WExAYQ0 @ }|N֢.5<ƞG3@Cf:_n¤L? [wow, ,ĹQo8LreC"z ƧrIL˶eRsa#29Z{Ryڷsh¹Y*JL^js7E/ iV?I8Z^=/+Ui8LUVPEa#g1kF:?>U$`_ˑB`[[Aa)bnѦB/zlL8GSfDUM_4K2 t:!r`<{xudj# :~ y.wflmyNwC.ؼ寏LrͶmhMLRd~kxot]&Țj`:X<Λ° O};Rv8܎5"|oNRνĈwHD9c>XWYXPX%+t+.\Ehobqp?mi2uOȖ~ydJTGZ>JzSUcGҘjl_%Y1~9 6k_~ p&~?>e&= .Vox7H+ tx$%{/I˽x6gvR/CS,.܌.|#ȳUFkft#0$]\(a)ܬjhI.KWmso ;'X |ݷSbՂȗ*D/Y\ͥM$YܴLH_llXX<2AzӴ+3|NnIGD_b9m3 N}I`T~gĒ54%F<ofz76Jz#(+=GʽI${ͺ~bwƟA)&"q”/#:gYE p|ORGr"Xz(+Qz&J.C4`x=w*$?G T]kPk']Q} 7si20$[ScVg8ȊЁ2Ul|E|S}:]"n V,aJ04ڑ/(]`#~%~dL}[U,i)*uLk D7,t=Y$,Q0ԅ]e>Uz3x$LC2U!+e$ӎwT8-a`ywS-@v:!̩/SZӴ-!Kwӷޖ=tެ :bGɓkwXK,] eCHL2Q& DgϾ{z뱖mYǓ$~܂b9dޥ9U-^F./zaſ[9zbyz?.@B#ҟ*m*P:R;6V@D N ei)?{6.u4/2yN=Ofx"؊ "ؔ&zI;[Mr! (\:SBjfȢa~\ 2NkGW_#m4I],~|Jzʏ\5+8YҶ5GAh˅#~(0U[(<UVQI· >;!Yh lIJ*~QOϊP~ NrsM\ ^L79;龇K%ċaggOEe HVV+gxW%Ԇ6]w!v_܎6t -G#K ߔ\qE] z(8ވ[`! MOf[?_h2:'ѽ6JnwLjK-1*5 -Łqp1(% a be'zz_ȗHJpm"#؎eȣ1su9MbXC3ӐRn$ E;w5I;]AoCo!yBM{c-IT8" c?aYی ok\[>΄ED@2 yZK(d>%gLB҄`6+=r~nȦM=8Tz3dVK@YA"oxO-ZHdF䶊s}_pM0E.psUB7Z$+>Phz ,TrE$i~48EAލHQ{3׊%JF=ӑ+ě>AD'?7苂2+-?eLCWC| WhK^(YhkiqE#飢,Qzӄ5?S2^xQ(xG;blGXPadSx .aAj"leW9`I$4A03cSv~F#B`AzőгH*yQN{_vZ~,qUjQb82ZpC:sWau [0jDFI~(Q ؖO[ExS:1Fv7RJM+Ga~"]QҾL(8ݗZo"vՉ]KnZ=|u.-uGQ9;RB#?D2ƨ+'z1>P9a/{ű4> {.Epjo2P9.4,<o{2[d%bí!bi?!toPӰwqc v6L0?)ԑѺ)A2aYS&Bi{(Nfޑ0- Vb4K$t4bdZ ѽK;dP /7ںVyZ~4# p9C` _J6 Wv~Î&RAk<ڎO"}eofM,a/0 'm5yH2`Q(ip8Zq pgyqN_Gs R$qfH`ygwWk9"q$bO)=͸S']P?Ϧָ.3}ՠWY=a[aΊbb 抰{;&#_1bf^09f1PtK%((C@|t?jQǺn$`d!"mSfh0y*;傯u!c&o\KaaSBY~$\46{6B"D$NF7*.l_0 B^dE{PJyB!&).{g3BT|ӟ=ϓ[AEv޶S.nYBf u2E$f΍;0~+ 1tfjrwk^GvNLK Sv ήWmg&V #CnW(7[T(!3͒+D53#6.'S/T;G1ȕFE \v-fصbwǼؑAcC(WG2^Nz A&U㮟oA/g$by .bOF8ED+s\۳Hr׈ѬP,x?[⼿qҭzb^oMe̟p^ۂBkI5:ͿÎ̇TKsJ0křޟCbG;|lȖ_ʾfF>w/DW2( p:YtGit&mSrn]m|pxC[ 1΀nĦJʭag֔ĺ@3u/Y()v(íY.Ug= @ql5XbpX+lKt_Be}'hHRK(5<9~$=qp<w 8Y#,Kom39T%M!էčC+ʼnүgELƯsZ!SRC1ԒnTpF ȁyrbdzƒv/A~tOfW6c%l/+j׈. ί&W<D{c▖!;7|{' ;? lWcQtfY*hLJL6G߷d|"zOQA2Yo ަoTᮞU0[Z\`*QzƁg~3Wz"ﮘ (ۨ̌U޺Vfx?{9%iG(l S?/nӸmg<}3bH Dpp_:AXo>& ra~*;&5Qfm USVmL>9B#R1^ʕ)T=,e)mоY,x6)՝[f38g)ȁF.$R*aϵkƌ Hps$'40 ]AS"ewDdim~S1[}>ʿ\ w"͎pB=8@j"piT {[-woj,Ӣ ڣ[[f\QyT"lB}ZcDρjƮqW05?;~ VZ>)?B+j])iIah;G|%SKT  Y]!lzbj84rpW \D r'Xpw/,s>9Qx,8G(}E ԫ[0"g;vB }H]DeFݎɫPʆ7v1b3⭱xi&a)G(kmjqp.)y͂o!{Dk.P'JqkSY `r<{qvWtQBʦ%vAT'Rmo1~Tչ)_ :XN%.;-\!c8(O66zaWDKVX-|7VOqHgT b '` rqFe,XrTP6G_{Az"68HcjdXѲ%Eщ$d+[/6l!9b]!TlqT"-݈*j'c$ڕ?QCQڏ#ҽ^"^k4ʱkOzyZ$鷼^f>Z)(iZk~R+VCq&6U W&%G'ȷMNduNN(wI.VmΏU~=M 1#}R7X Ϲ"bv!d⦏;4إ&-uB e= P/؄CH:VA7l1;[jI~>䅉xu ulCB@`\Jm۫o22wF Lhjd-XbP -So`}k{>ypDFH, `ߤ.lp7N`Ӻo;G2| ԭݓ֩Wk=?ac1'<u&#oQd~z](Ϝ M\cwgt'9 >l̩}F\,+[|. p![),y;eV@,TSLF$Xڼ(^σOT1]czִRɢ&cfR[=t DBRH5[P>o1(fvo >c];iŚXy&aM/+ckr@6 ] {?/U ҀӤ/:74Q8l|GhD ׃w1Rm-n0I.(ݟĈ'blp߼U68>u"-+FbU Fm"'/$1UQeC!"*u?r ڢ"P^p{^b"7n6E!i?x&]%P~D|(ˆ̙Ƞ?b&a#UTq۠Q$}/䎇^:Od*ԭ9q;g͹Y_D\juv8R5~ &3M^08Ц^,$r1vqLYͺPkUa.}RhHr]3IZM5"~sOAXW<pU z.TDp_qQs%µm3~' U?* S \T ]kxk~) ^txaOOK`!cZ{%b{.V󆕬A{.-S _7vvaϭdl/$ 378]nh]sI:71[αf0}PF*ʰϛ!V+{/1:Y^ >r;ie;CS5ȹWknHㅱ,(nW1V[8~B):V d ܰ)yh4k/ڏ`w?هyꊺ>KUlTGe)lzwN\_IcBQ1.$3rK8>PvUYW'h{'À5FHsDՉ,p;|у?g0}M2f(U۷ag_`U:RTHt<']Fgjէ'SLIaJb^;iwj$ݏPɨ+vN}Z꺝q[0W&iPP wy"GQ92 M8`E}:+xb=YrpDe;cZHSֳ\J˜z[mڧ.;ih`"C}FoL.ޅr,&vʇH GkHXC 1?X 5$f끔;~*<|))$#2VJ8RY2֯_n\#)GHF,d_ u EI= 0JU5g?8L:o',-2WFWF.q,# .U[>9i"VCm.w7j-?)]f'ZN&#{ܔ(@y/eW P)GtژEoUk!QA?Qj0LPH4ܗc=3mżUGبb3k8+) J8^Toz]vwgt94O ~vӤy!tCA w nZeg{+:NN!z5`B(u!V桏x$zUPOhͅ]Q4 w+jx{'amƩDa_L;X q;7N"#|n]$Jq  EfOh2y_|Yy+ںtMfI锠ǒ՜B`9s(!)st,eWcoKsjw(]NGnPktZFOlw|0=H2J鵢!-\O?&uި&jUOX,K)یDz}Ӄ-v)qUsEJש2!:+ƚrfg,n~/Wzhe X37NYHRelm&I|~uxgUa܏^\ NrYM4 _9Įeb(͍R7["+=PYlɰi۟|s^7y <F0n$YJ3]"6=%tCx#@b7F!$({/ b V-s8y-!) nM7p37cFHkh'%  C6K^'[F ߏ*Uj,\30R圿4J?s~rL.LdC5UD䘦߱%EC#*VuoM V^_{,/+Q_W"w s(nN%@O6Eh~!/Y}ޙBgpe›؀owڳJޚx7l^,9=3Ŭf槸mԬ+zO_=gmIDf0lİKb? RkF lew|\ R`w=A|{| f au޸'T]YW8']k1&tsK̂q._x)#BxZ 7E$XՖ(M#fK:PG]{ӸviܷY endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 810 /Length 3355 /Filter /FlateDecode >> stream x[oEH}J!!{\K D`ɰ_u8 X ]]]=A2,ӂ9f$K&I mI,~DG fcF0))"*K\Md |;1;V1+QZfVX4XȨV`2jTc&&z̠taDŢ9 44#-M#`Z;܉I@oC8;&zFl"A0#b2 yό(f SEkf{hLԑϬ!0Kx!gER UͬhǻER`@ 8aV>pqמŜjZفwL"^Bb$p/z ! e**H(z $suEɕ:RDiل'G&œx(7頌$PQQ2P~ʀCzvc|Ã!Τ6pP-믝;ϪY]}H2nٔt&QLj2A=|Et{^ٽ{~eT1<:|g8hA3ca&[M(jRӪW١@:`0Hxn& sMS$M7o.|t3,LԙrpZ +ݏEO( ?^ԂT!z4x7+,5^Dibo޾JޣL $iYHlm.!3(UKȴ􅿜 llebRwEה(nj?+8gwF͞m1N+bߝOALU1eO#w_'ikťԥ$P{uW,ײҊ|Eu7_Y4^Ǣ3;$l؝_P؊*h([6m;>z^rtRw'MQoڭk Dl!5mFеr 5VR[*Ue?tzpL-Qaw.CxgFiƣLss1^zٽ[PdC~Zs:l~axoP'˳iSn=NO?ϼ1" .{5^ {>ܼ Etp\rpP%n|'./=hSɬIx^Aw %VW y?jp(fM# (Kp,ٶ#,8hx ~=7,b\ƒ>_|hmgn/f8Ȍ #Jg7^*(DAڈ]W>쩯 /_gÂI֡ki>]%HHG _~Ѧ *؋ɮBk-lh-$W5FB\MCt./] >PE"ޭs-n*t"}6hutļԚ[/)qg3X, 2]c$>'L3$LaXN`H[]P$E3ڸ$~J ٴQ{5DjAїu <"SAOG!4&pwː euqQ")Тҝpr(lHj $S*bdBc bA]fIj<ӈU8Ō)Y6GJͅ,VR]vRYʟёZ% r~DK]yVl3ᬺ#1A{Z!1.WS731iU"h`tsY <|ɿvޗxL&vCwbwU%("m)'#'*GasP徻:7en:}M0lf *xc*mw?s]> 7~kS>zP!džOޜ7{5$Jr>dȞ>ބ^`f%0+5ZiQ5UuwMj1WKěp7*|a@GOZ~x__IwxzZ%1ՠWNNyV\脟|TiDGtƉc;{ZuZi'{Bsױv^% gF݊&zcs簟,؂+`#\o?zpsVn#$tZQGk#`S* AMYѵ4rE#z]hZK,J!H fް/]N~c~Lx5|Tt{&R_ }Tͫ ˥)Zq8Էr#6BWVplB`dgAAM.lT>]2B+4^+vvc.V(\5blZkQo']x2L)rfLt@y$ 0f!LPwr" ^s2Ie60 endstream endobj 150 0 obj << /Producer (pdfTeX-1.40.20) /Author()/Title()/Subject()/Creator(LaTeX with hyperref)/Keywords() /CreationDate (D:20211026171840-04'00') /ModDate (D:20211026171840-04'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) kpathsea version 6.3.1) >> endobj 140 0 obj << /Type /ObjStm /N 23 /First 183 /Length 786 /Filter /FlateDecode >> stream xڝVN@}WcӪx{-!$pS! PhŃ%8mhdTቝٙs̎'A0$8{D:*b|@R %*AKseOHQ@9QP1ӁP*!;nw=^~,_\7'S c{:gɼe$NRWO>qڠ[2)s:W;_}9$VvɎh{bvgGaZ&kvgNJ`&IZY>SGQ[9o=^ws,vx;QEe֙S'[3 %}{7Ǝk?9~?q"#8t*7LrQ H_Mg߂o3"VP*7S/4I,^t걫21)θPOJWۙ~ʗlKjoܾ.PahK) &qmgM]Л?8+:M|'ޛMG2{Ozvt&&:Eh]).ߡ&I;yqg{sR4$54*{Y}PJ&Y6s˖eASԂi.Yןqҏe ijlNSǺu/Z!oqEW?6ui**uXSQU^hJݸZ}6/f^z s~X^ endstream endobj 151 0 obj << /Type /XRef /Index [0 152] /Size 152 /W [1 3 1] /Root 149 0 R /Info 150 0 R /ID [<443773CF07F7312172F087CCFADC5440> <443773CF07F7312172F087CCFADC5440>] /Length 404 /Filter /FlateDecode >> stream x%RAsz"1n#[x ޢ" ޖ>U7YL w<#5+6X?n~uOwϙ#"׉8 hOd@ N3">xQRCpmE0C08d!cPTUzR>O*(0d`fJkkٟ>= library(DNAcopy) @ <>= data(coriell) @ \noindent Before segmentation the data needs to be made into a CNA object. <>= CNA.object <- CNA(cbind(coriell$Coriell.05296), coriell$Chromosome,coriell$Position, data.type="logratio",sampleid="c05296") @ \noindent We generally recommend smoothing single point outliers before analysis. It is a good idea to check that the smoothing is proper for a particular data set. <>= smoothed.CNA.object <- smooth.CNA(CNA.object) @ \noindent After smoothing, if necessary, the segmentation is run. Here the default parameters are used. A brief discussion of parameters that can be adjusted is in the Tips section. <>= segment.smoothed.CNA.object <- segment(smoothed.CNA.object, verbose=1) @ %Plot whole studies \noindent There are a number of plots that can be made. The first is ordering the data by chromosome and map positons. The red lines correspond to mean values in segments. Note that the points are in alternate colors to indicate different chromosomes. \pagebreak \begin{center} <>= plot(segment.smoothed.CNA.object, plot.type="w") @ \end{center} \noindent Another possibility is to plot by chromosome within a study. \begin{center} <>= plot(segment.smoothed.CNA.object, plot.type="s") @ \end{center} %Plot each chromosome across studies (6 per page) %\begin{center} %<>= %plot(segment.smoothed.CNA.object, plot.type="c", % cbys.layout=c(2,1), % cbys.nchrom=6) %@ %\end{center} %Plot by plateaus \noindent If there are multiple studies, one could plot by chromosome across studies using the option {\tt plot.type='c'}. A final plot orders the segment by their chromosome means. One can take the plateaus in this plot to determine what the mean values should be for calling segments gains or losses. In this case, maybe $0.4$ for gains and $-0.6$ for losses. For most data, these plateaus are much closer to zero. The next generation of this software will have automatic methods for calling gains and losses. \begin{center} <>= plot(segment.smoothed.CNA.object, plot.type="p") @ \end{center} \noindent Change-points are often found due to local trends in the data. An undo method is needed to get rid of unnecessary change-points. Below all splits that are not at least three SDs apart are removed. The following plot shows that all splits not corresponding to the gold standard results have been removed. <>= sdundo.CNA.object <- segment(smoothed.CNA.object, undo.splits="sdundo", undo.SD=3,verbose=1) @ \begin{center} <>= plot(sdundo.CNA.object,plot.type="s") @ \end{center} \section{Tips} \noindent A function that may be of interest that has not been mentioned is {\tt subset.CNA}. It allows for subsetting of a CNA object by chromosome and sample so that segmentation does not have to be run on a whole data set. Similarly, {\tt subset.DNAcopy} allows subsetting of DNAcopy objects, which contain the output of segmentation. The original default segmentation algorithm, because it was based on permutation, took $O(N^2)$ computations, where $N$ is the number of markers on a chromosome. The new default algorithm is much faster. It includes a hybrid approach to compute the $p$-value for segmenting based partly on permutation and partly on a Gaussian approximation (available in all versions after 1.2.0) and a stopping rule (available in all versions after 1.5.0) to declare change when there is a strong evidence for its presence \citep{venkat07}. We no longer recommend using overlapping windows for larger data sets. It is still possible to run the full permutations analysis using the option {\tt p.method='perm'}. If the new algorithm is still too slow, one can reduce the number of permutations in the hybrid method using the parameter {\tt nperm} (default is 10,000). However, the lower {\tt alpha} (the significance level for the test to accept change-points) is, the more permutations that are needed. The stopping boundary needs to be computed for any choice of {\tt nperm} and {\tt alpha} which is not the default which is done automatically within the function {\tt segment} or can be done externally using the function {\tt getbdry} and passed on to {\tt segment}. %\newpage \bibliographystyle{apalike} \bibliography{DNAcopy} \end{document} DNAcopy/inst/benchmark/0000755000175000017500000000000014136047041014610 5ustar nileshnileshDNAcopy/inst/benchmark/benchmark,20090610,segment.R0000644000175000017500000001230414136047041021222 0ustar nileshnilesh###################################################################### # Type: Redundancy test # Created by: Henrik Bengtsson # Created on: 2009-06-10 ###################################################################### # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Startup # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - scriptName <- "benchmark,20090610,segment" library("DNAcopy") library("R.utils") # Record current random seed sample(1) # Assert that a random seed exists oldSeed <- .Random.seed # Alway use the same random seed set.seed(0xbeef) # Tolerance (maybe decrease?) tol <- .Machine$double.eps^0.5 pd <- packageDescription("DNAcopy") pkgStr <- sprintf("%s v%s", pd$Package, pd$Version) figPath <- Arguments$getWritablePath("figures") benchmarkName <- paste(c(scriptName, gsub(" ", "_", pkgStr)), collapse=",") logFilename <- sprintf("%s.log", benchmarkName) log <- Verbose(logFilename, threshold=-10, timestamp=TRUE) log && header(log, "BENCHMARKING") log && cat(log, "Script: ", scriptName) log && print(log, sessionInfo()) benchmarkFilename <- sprintf("%s.Rbin", benchmarkName) force <- FALSE # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Main benchmarking loop # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Sizes of data sets to be benchmarked Js <- c(1e3, 1e4, 1e5, 2e5, 5e5, 1e6) if (!force && isFile(benchmarkFilename)) { benchmarkData <- loadObject(benchmarkFilename) } else { benchmarkData <- data.frame(J=NULL, seg=NULL, weightSeg=NULL) } for (jj in seq(along=Js)) { # Number of loci J <- as.integer(Js[jj]) log && enter(log, sprintf("Case #%d (J=%d) of %d", jj, J, length(Js))) if (is.element(J, benchmarkData$J)) { log && cat(log, "Already done.") log && exit(log) next } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Simulating copy-number data # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - x <- sort(runif(J, min=0, max=1000)) w <- runif(J) mu <- double(J) jj <- (200 <= x & x < 300) mu[jj] <- mu[jj] + 1 jj <- (650 <= x & x < 800) mu[jj] <- mu[jj] - 1 w[jj] <- 0.001 eps <- rnorm(J, sd=1/2) y <- mu + eps # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Setting up a raw CNA object # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cnR <- CNA( genomdat = y, chrom = rep(1, times=J), maploc = x, data.type = "logratio", sampleid = "SampleA" ) log && print(log, cnR) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Non-weighted segmentation # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - log && enter(log, "Non-weighted segmentation") t1 <- system.time({ fitR <- segment(cnR, verbose=1) })[3] log && printf(log, "Processing time: %.3f secs\n", t1) log && print(log, fitR) log && exit(log) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Weighted segmentation # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - log && enter(log, "Weighted segmentation") t2 <- system.time({ fitR <- segment(cnR, weights=w, verbose=1) })[3] log && printf(log, "Processing time: %.3f secs\n", t1) log && print(log, fitR) log && exit(log) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Record benchmarking # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - timings <- data.frame(J=J, seg=t1, weightSeg=t2) benchmarkData <- rbind(benchmarkData, timings) log && print(log, benchmarkData) # Saving to file saveObject(benchmarkData, file=benchmarkFilename) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Cleanup # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Reset to previous random seed .Random.seed <- oldSeed log && exit(log) } # for (jj ...) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Benchmarking summary # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - log && print(log, benchmarkData) log && header(log, "APPENDIX") log && print(log, sessionInfo()) figName <- paste(c(scriptName, gsub(" ", "_", pkgStr)), collapse=",") width <- 640 height <- 0.618*width filename <- sprintf("%s.png", figName) pathname <- file.path(figPath, filename) devNew(png, pathname, width=width, height=height) n <- ncol(benchmarkData)-1 matplot(benchmarkData[1], benchmarkData[,-1], type="b", pch=20, lwd=3, xlab="J", ylab="seconds", main=pkgStr) legend("topleft", colnames(benchmarkData)[-1], col=1:n, lty=1:n, lwd=3) devDone() ###################################################################### # HISTORY: # 2009-06-10 # o Benchmarking show a major improvement in the algorithm when going # from DNAcopy v1.19.0 to the recent DNAcopy v1.19.2. It was # roughly O(J*ln(J)) and now it is O(J). For a chromosome with # 500,000 loci, we observed a speed up in the weighted case going # from 20 mins to 30 seconds, which is a 40 times speedup. # o Created. ###################################################################### DNAcopy/inst/CHANGES0000644000175000017500000002604014136047041013653 0ustar nileshnileshChanges in Version 1.49.1 o Added length.out in seq call (partial name issue) 1.47.2 became 1.48.0 in Bioconductor 3.4 & =1.49.0 now ------------------------------------------------------ Changes in Version 1.47.2 o Added a check to see if genomdat is a one-dimensional array Changes in Version 1.47.1 o Added importFrom("grDevices", "dev.cur", "dev.interactive", "dev.new") and importFrom("utils", "data") to NAMESPACE to resolve warnings 1.41.3 became 1.42.0, 1.44.0 and 1.46.0 in Bioconductor 3.1, 3.2 & 3.3 ---------------------------------------------------------------------- Changes in Version 1.41.3 o Address the "malformed Description field" NOTE. Changes in Version 1.41.2 o change in segment to remove "no visible binding for global variable" NOTE during R CMD check Changes in Version 1.41.1 o add as.numeric to cumsum call in plotSample to address integer overflow 1.37.4 became 1.38.0 in Bioconductor 2.14 & 1.40.0 in Bioconductor 3.0 ---------------------------------------------------------------------- Changes in Version 1.37.4 o segment function now returns the weights used if weights are given. Changes in Version 1.37.3 o Changed default main, xlab, ylab options in plotSample to NULL to allow for empty strings to produce blank labels. Changes in Version 1.37.2 o Version 1.37.1 appears to be a system change to add vignettes directory o Changed cex option in plotSample and main, xlab, ylab options in zoomIntoRegions to be customizable. 1.35.1 became 1.36.0 in Bioconductor 2.13 & =1.36.0 now ------------------------------------------------------ Changes in Version 1.35.1 o update cytoBand data to match the goldenPath hg19 file 1.33.1 became 1.34.0 in Bioconductor 2.12 & =1.35.0 now ------------------------------------------------------ Changes in Version 1.33.1 o changes to smooth.CNA. Looping over chromosomes done within fortran and calculate median of nbhd only when needed. Change R code to match. 1.31.1 became 1.32.0 in Bioconductor 2.11 & =1.33.0 now ------------------------------------------------------ Changes in Version 1.31.1 o use function segments in plots instead of lines in a loop 1.29.2 became 1.30.0 in Bioconductor 2.10 & =1.31.0 now ------------------------------------------------------ Changes in Version 1.29.2 o Dropped startup message about data format. Changes in Version 1.29.1 o added additional details the smooth.CNA help function o made sure that CNA orders data correctly when chrom is an ordered variable with both integer and character values (i.e. X or Y). 1.27.2 became 1.28.0 in Bioconductor 2.9 & =1.29.0 now ------------------------------------------------------ Changes in Version 1.27.2 o segment function gets default.DNAcopy.bdry internaly instead of assuming DNAcopy is loaded. Allows for loading package by NAMESPACE only. o xmaploc now works for samplebychrom and chrombysample also. Changes in Version 1.27.1 o Don't further segment if all values in the current segment are the same. o Use is.finite in functions instead of is.na(.) & !(abs(.)==Inf) 1.25.1 became 1.26.0 in Bioconductor 2.8 & =1.27.0 now ------------------------------------------------------ Changes in Version 1.25.1 o House keeping: changed the URL for cytoband and removed Columbia email 1.23.8 became 1.24.0 in Bioconductor 2.7 & =1.25.0 now ------------------------------------------------------ Changes in Version 1.23.8 o Added getbdry to exported functions in NAMESPACE Changes in Version 1.23.7 o Versions 1.23.4 to 1.23.6 were changes made to use file based data. This needed changing CNA and DNAcopy objects to S4 classes which was too much of a paradigm shift for users. So changes are undone here. o Change default smooth.region to 10 in smooth.CNA o Added function plotSample for whole genome plot of a single sample. o Fixed the is.integer to is.numeric in subset functions. o CNA accomodates data.frames (as.matrix not needed) and presorted data. Changes in Version 1.23.3 (same fix applied in v1.22.1) o Fixed weird bug in smoothCNA.f triggered when there are at most 2*smooth.region (default smooth.region=2) markers in a chromosome. Changes in Version 1.23.2 o row numbers of the segments are automatically returned as the object segRows in the output. The print method shows it if showSegRows=TRUE. Changes in Version 1.23.1 o Added zoomIntoRegion function. o Added an option to return the row numbers of the segments. 1.21.6 became 1.22.0 in Bioconductor 2.6 & =1.23.0 now ------------------------------------------------------ Changes in Version 1.21.6 o Fixed indexing bug (i <= k or i > n-k, not and) in smoothCNA.f Changes in Version 1.21.5 o ADDED packageStartupMessage THAT CNA DATA FORMAT WILL CHANGE o changed filename of NEWS to CHANGES; file format didn't work with news o changed function .First.lib to .onLoad o in the function CNA, changed code for ordering by chrom and maploc because of "na.last=NA" slowed it down terribly o removed the unnecessary rownames command in CNA Changes in Version 1.21.4 o moved CHANGES file to inst/NEWS o documentation of CNA and segment say that missing values will be removed Changes in Version 1.21.3 o forgot to deallocate memory in the new code Changes in Version 1.21.2 o changed the code for htmaxp & hwtmaxp for the hybrid Changes in Version 1.21.1 o changed our affiliations in the vignette 1.19.6 became 1.20.0 in Bioconductor 2.5 & =1.21.0 now ------------------------------------------------------ Changes in Version 1.19.6 o added function glFrequency to calculate gains and losses Changes in Version 1.19.5 o Changed smooth.CNA from all R to Fortran backbone Changes in Version 1.19.4 o Fixed infinite loop when the logratio is constant across a segment Changes in Version 1.19.3 o Redundancy check by Henrik Bengtsson o Bioconductor fixes (license version, BiocViews etc.) Changes in Version 1.19.2 o Fixed a rarely triggered bug in the new code Changes in Version 1.19.1 o Faster algorithm to compute the CBS maximum t-statistic 1.17.5 became 1.18.0 in Bioconductor 2.4 & =1.19.0 now ------------------------------------------------------ Changes in Version 1.17.5 o For weighted CBS return weighted segment means (not ordinary mean). Changes in Version 1.17.4 o Bug fixes to wtermp code and how it's called in wfindcpt. Changes in Version 1.17.3 o Weighted segmentation code added. Weights per probe can be used. Changes in Version 1.17.1 o NAMESPACE file added and man pages fixed to reflect it. 1.15.4 became 1.16.0 in Bioconductor 2.3 & =1.17.0 now ------------------------------------------------------ Changes in Version 1.15.4 o make sure there are at least 10 obsns when t-stat threshold is used Changes in Version 1.15.3 o the minimum width of segment is user selectable (argument min.width). Changed from the fixed value of 2 based on user demand. Max value 5. Changes in Version 1.15.2 o changed to a faster algorithm for calculating the max t-statistic o changed to a faster code for undoing edge effects (redundant perm) o added basic functions exon.segment and exon.changepoint (workhorse) These functions are used for finding a translocation using binary segmentation. The data for this should be properly normalized. o fortran code re-arranged into different files Changes in Version 1.15.1 o updated the call to get(getOption("device")) to use dev.new 1.13.3 became 1.14.0 in Bioconductor 2.2 & =1.15.0 now ------------------------------------------------------ Changes in Version 1.13.3 o Added segments.summary to give the median, sd & mad for each segment. Changes in Version 1.13.2 o Modified the p-value function to replace p > 1 with 1. Changes in Version 1.13.1 o Modified the p-value function. Added pseudo confidence intervals for the change-points. o Windowing option has been removed (R & fortran code modified). 1.11.2 became 1.12.0 in Bioconductor 2.1 & =1.13.0 now ------------------------------------------------------ Changes in Version 1.11.2 o Added a p-value function for the change-points. This is based on binary segmentation and not necessarily correct but gives an idea of the relative importance of the change-points. Changes in Version 1.11.1 o Changed Venkat's affiliation from MSKCC to Columbia University 1.9.3 became 1.10.0 in Bioconductor 2.0 & =1.11.0 now ----------------------------------------------------- Changes in Version 1.9.3 o Added warning that windowing will be deprecated in the next version. Changes in Version 1.9.2 o Added code to not bother with p-values and split the segment when the maximal T is large (p-value will be tiny if T > 7). o Added code to not split when the maximal T is small (fixes a numerical problem where a constant large segment can have a significant split). Changes in Version 1.9.1 o The mod function in fortran inflicts serious time penalty -- code rewritten to fix it 1.5.3 became 1.6(8).0 in Bioconductor 1.8(9) & =1.9.0 now --------------------------------------------------------- Changes in Version 1.5.3 o Fixed the subset functions to enable sample re-ordering Changes in Version 1.5.2 o Bug fix in plot.DNAcopy (triggered only when #chrom=1) o Added information about stopping rule in the Vignette o Cytoband data from the goldenPath repository added for future plots Changes in Version 1.5.1 o Add a sequential stopping rule to declare change early o Bug fix - make the object from subset.DNAcopy of class DNAcopy ############################################################### ### ### ## E. S. Venkatraman is the new package maintainer ## ### ### ############################################################### 1.2.5 became 1.4.0 in Bioconductor 1.7 & =1.5.0 in the development branch ------------------------------------------------------------------------- Changes in Version 1.2.5 o Updated the vignette to include references to additional features. Changes in Version 1.2.4 o Seg fault occurs if window.size is set when hybrid method is used. Fixed by setting window.size to be NULL in the function segment. o Added options to plot command to draw line at y=0 and control its color and lwd of all lines. o If ylim is missing it's calculated from all the data instead of just the first sample. Changes in Version 1.2.3 o Modifications to the plot function to make par("ask") behave better. Changes in Version 1.2.2 o Modified the plot function. X-axis is either the index or (cumulative) map location. Incorporate col, pch, ylim etc. to provide better control over plots. Changes in Version 1.2.1 o Added the hybrid method for computing p-values to determine splits. This speeds up the computations considerably and so has been made the default. DNAcopy/data/0000755000175000017500000000000014136047041012612 5ustar nileshnileshDNAcopy/data/default.DNAcopy.bdry.R0000644000175000017500000007526414136047041016632 0ustar nileshnilesh"default.DNAcopy.bdry" <- as.integer(c(9500, 8352, 9864, 7316, 9174, 9936, 6473, 8360, 9474, 9962, 5809, 7623, 8843, 9627, 9975, 5259, 6976, 8209, 9113, 9714, 9982, 4815, 6429, 7633, 8575, 9290, 9773, 9986, 4439, 5956, 7116, 8058, 8820, 9411, 9813, 9989, 4121, 5548, 6659, 7582, 8358, 8998, 9499, 9842, 9991, 3840, 5186, 6248, 7145, 7916, 8576, 9129, 9564, 9863, 9993, 3603, 4875, 5889, 6756, 7512, 8175, 8750, 9234, 9617, 9880, 9994, 3391, 4596, 5565, 6400, 7138, 7794, 8376, 8885, 9316, 9659, 9894, 9995, 3209, 4353, 5279, 6083, 6799, 7443, 8023, 8542, 8997, 9384, 9693, 9905, 9995, 3042, 4132, 5018, 5792, 6486, 7116, 7689, 8208, 8676, 9088, 9440, 9722, 9915, 9996, 2887, 3926, 4775, 5521, 6193, 6807, 7370, 7887, 8359, 8785, 9162, 9486, 9744, 9922, 9996, 2757, 3751, 4565, 5283, 5933, 6530, 7082, 7591, 8061, 8493, 8883, 9230, 9527, 9766, 9929, 9997, 2640, 3592, 4375, 5066, 5696, 6275, 6813, 7314, 7780, 8211, 8608, 8968, 9288, 9564, 9784, 9935, 9997, 2518, 3431, 4184, 4851, 5461, 6024, 6550, 7041, 7501, 7930, 8330, 8698, 9034, 9333, 9591, 9797, 9939, 9998, 2420, 3297, 4023, 4667, 5257, 5804, 6316, 6797, 7249, 7673, 8071, 8442, 8785, 9098, 9378, 9619, 9812, 9943, 9998, 2331, 3175, 3874, 4498, 5069, 5600, 6099, 6568, 7011, 7430, 7824, 8195, 8542, 8862, 9156, 9417, 9643, 9824, 9947, 9998, 2246, 3060, 3735, 4338, 4892, 5408, 5894, 6352, 6786, 7198, 7588, 7956, 8304, 8629, 8930, 9206, 9452, 9665, 9835, 9951, 9998, 2169, 2954, 3607, 4191, 4728, 5230, 5703, 6150, 6575, 6979, 7364, 7729, 8074, 8401, 8707, 8991, 9251, 9483, 9684, 9845, 9954, 9998, 2086, 2844, 3476, 4042, 4564, 5052, 5512, 5949, 6365, 6762, 7141, 7502, 7846, 8172, 8481, 8770, 9040, 9286, 9508, 9699, 9852, 9956, 9999, 2014, 2747, 3359, 3908, 4414, 4889, 5338, 5765, 6172, 6561, 6933, 7289, 7630, 7955, 8263, 8556, 8830, 9086, 9321, 9531, 9713, 9859, 9958, 9999, 1951, 2661, 3254, 3787, 4279, 4741, 5179, 5595, 5993, 6375, 6740, 7091, 7427, 7749, 8056, 8349, 8627, 8887, 9131, 9354, 9554, 9727, 9866, 9961, 9999, 1892, 2580, 3156, 3674, 4153, 4603, 5029, 5436, 5825, 6198, 6557, 6902, 7234, 7552, 7857, 8149, 8427, 8691, 8940, 9171, 9384, 9575, 9740, 9873, 9963, 9999, 1837, 2504, 3064, 3567, 4033, 4472, 4888, 5285, 5665, 6031, 6383, 6722, 7048, 7362, 7665, 7955, 8233, 8498, 8750, 8987, 9208, 9412, 9595, 9752, 9879, 9965, 9999, 1786, 2435, 2978, 3468, 3922, 4350, 4755, 5143, 5516, 5874, 6219, 6551, 6873, 7183, 7482, 7769, 8046, 8311, 8564, 8805, 9032, 9243, 9438, 9613, 9764, 9885, 9966, 9999, 1737, 2367, 2896, 3373, 3815, 4232, 4629, 5008, 5372, 5722, 6061, 6388, 6703, 7009, 7304, 7589, 7864, 8128, 8382, 8624, 8854, 9071, 9274, 9461, 9629, 9774, 9890, 9968, 9999, 1691, 2304, 2820, 3284, 3716, 4122, 4509, 4880, 5236, 5580, 5911, 6232, 6543, 6844, 7135, 7417, 7689, 7952, 8205, 8447, 8680, 8900, 9109, 9304, 9483, 9644, 9783, 9894, 9970, 9999, 1647, 2244, 2745, 3199, 3619, 4017, 4395, 4757, 5106, 5442, 5768, 6083, 6388, 6684, 6971, 7249, 7519, 7780, 8032, 8274, 8507, 8730, 8943, 9143, 9330, 9503, 9658, 9791, 9899, 9971, 9999, 1606, 2187, 2677, 3119, 3530, 3918, 4287, 4642, 4983, 5313, 5632, 5941, 6241, 6532, 6815, 7090, 7356, 7615, 7865, 8107, 8340, 8564, 8778, 8982, 9175, 9355, 9521, 9671, 9800, 9903, 9972, 9999, 1567, 2134, 2612, 3043, 3445, 3824, 4185, 4532, 4866, 5189, 5502, 5806, 6101, 6387, 6666, 6937, 7200, 7456, 7704, 7944, 8176, 8401, 8616, 8823, 9019, 9205, 9379, 9539, 9683, 9807, 9907, 9973, 9999, 1530, 2083, 2549, 2970, 3363, 3733, 4087, 4427, 4754, 5071, 5378, 5676, 5966, 6248, 6522, 6789, 7049, 7302, 7547, 7786, 8017, 8241, 8457, 8665, 8864, 9054, 9233, 9401, 9555, 9694, 9814, 9910, 9974, 9999, 1488, 2028, 2482, 2894, 3278, 3640, 3986, 4319, 4640, 4950, 5252, 5545, 5829, 6107, 6377, 6640, 6897, 7147, 7390, 7627, 7857, 8080, 8296, 8505, 8706, 8898, 9082, 9256, 9418, 9568, 9703, 9819, 9912, 9975, 9999, 1447, 1973, 2417, 2819, 3194, 3549, 3888, 4214, 4528, 4833, 5129, 5416, 5696, 5969, 6236, 6495, 6748, 6995, 7236, 7471, 7700, 7922, 8138, 8347, 8549, 8743, 8930, 9108, 9276, 9434, 9580, 9710, 9824, 9914, 9976, 10000, 1411, 1925, 2359, 2752, 3119, 3466, 3798, 4118, 4426, 4725, 5015, 5298, 5573, 5842, 6104, 6360, 6609, 6853, 7091, 7324, 7550, 7771, 7986, 8195, 8397, 8592, 8781, 8962, 9134, 9297, 9450, 9592, 9719, 9829, 9917, 9976, 10000, 1380, 1883, 2307, 2692, 3051, 3391, 3717, 4030, 4332, 4625, 4910, 5188, 5459, 5723, 5980, 6232, 6479, 6719, 6955, 7184, 7409, 7628, 7841, 8049, 8251, 8446, 8636, 8818, 8993, 9161, 9319, 9467, 9604, 9727, 9834, 9920, 9977, 10000, 1351, 1842, 2258, 2635, 2986, 3320, 3638, 3945, 4242, 4530, 4810, 5083, 5349, 5608, 5862, 6110, 6353, 6590, 6823, 7050, 7272, 7489, 7700, 7907, 8108, 8303, 8493, 8677, 8854, 9023, 9186, 9339, 9483, 9616, 9736, 9839, 9922, 9978, 10000, 1322, 1803, 2210, 2579, 2924, 3250, 3563, 3864, 4155, 4438, 4713, 4981, 5242, 5498, 5748, 5992, 6231, 6466, 6695, 6919, 7139, 7354, 7564, 7769, 7969, 8164, 8353, 8537, 8715, 8887, 9052, 9209, 9358, 9498, 9627, 9743, 9844, 9925, 9979, 10000, 1296, 1767, 2165, 2527, 2865, 3185, 3492, 3787, 4073, 4351, 4621, 4884, 5142, 5393, 5639, 5880, 6115, 6346, 6572, 6794, 7011, 7224, 7432, 7635, 7834, 8028, 8217, 8401, 8579, 8752, 8919, 9079, 9232, 9377, 9513, 9638, 9751, 9849, 9927, 9979, 10000, 1270, 1731, 2122, 2476, 2808, 3122, 3423, 3713, 3993, 4266, 4532, 4791, 5043, 5291, 5533, 5770, 6002, 6230, 6453, 6672, 6887, 7097, 7303, 7504, 7702, 7895, 8083, 8266, 8445, 8618, 8786, 8948, 9104, 9253, 9394, 9526, 9648, 9758, 9853, 9929, 9980, 10000, 1245, 1697, 2080, 2427, 2752, 3061, 3356, 3641, 3917, 4184, 4445, 4700, 4949, 5192, 5431, 5664, 5893, 6118, 6338, 6554, 6766, 6974, 7178, 7378, 7573, 7765, 7952, 8135, 8313, 8487, 8655, 8819, 8976, 9128, 9273, 9410, 9539, 9657, 9764, 9857, 9931, 9981, 10000, 1222, 1665, 2040, 2382, 2700, 3003, 3293, 3573, 3844, 4107, 4364, 4614, 4859, 5098, 5333, 5563, 5789, 6010, 6228, 6441, 6650, 6856, 7057, 7255, 7449, 7639, 7825, 8007, 8185, 8358, 8527, 8691, 8850, 9004, 9151, 9292, 9426, 9551, 9667, 9771, 9861, 9933, 9981, 10000, 1198, 1633, 2001, 2336, 2649, 2946, 3231, 3506, 3772, 4031, 4284, 4530, 4771, 5007, 5238, 5464, 5687, 5905, 6120, 6330, 6537, 6740, 6940, 7135, 7328, 7516, 7701, 7882, 8059, 8232, 8400, 8565, 8725, 8879, 9029, 9173, 9310, 9440, 9562, 9675, 9777, 9865, 9935, 9982, 10000, 1177, 1604, 1965, 2294, 2601, 2893, 3173, 3443, 3705, 3960, 4208, 4450, 4687, 4919, 5147, 5370, 5590, 5805, 6016, 6224, 6429, 6629, 6826, 7020, 7210, 7397, 7581, 7760, 7936, 8109, 8277, 8441, 8601, 8757, 8908, 9053, 9194, 9327, 9454, 9574, 9683, 9783, 9868, 9937, 9982, 10000, 1156, 1574, 1929, 2252, 2554, 2841, 3116, 3381, 3639, 3889, 4133, 4372, 4605, 4834, 5058, 5278, 5494, 5707, 5915, 6120, 6322, 6520, 6715, 6907, 7096, 7281, 7462, 7641, 7816, 7987, 8155, 8319, 8479, 8635, 8787, 8934, 9076, 9213, 9344, 9468, 9584, 9691, 9788, 9871, 9938, 9983, 10000, 1135, 1547, 1895, 2212, 2509, 2791, 3061, 3322, 3576, 3822, 4062, 4297, 4527, 4752, 4973, 5190, 5403, 5612, 5818, 6021, 6220, 6416, 6609, 6798, 6985, 7168, 7348, 7525, 7699, 7869, 8036, 8200, 8360, 8516, 8668, 8816, 8960, 9099, 9232, 9359, 9480, 9594, 9699, 9793, 9875, 9940, 9983, 10000, 1115, 1519, 1861, 2173, 2465, 2742, 3008, 3265, 3514, 3756, 3993, 4224, 4450, 4672, 4890, 5103, 5313, 5520, 5723, 5923, 6120, 6313, 6504, 6691, 6876, 7057, 7236, 7412, 7584, 7753, 7920, 8082, 8242, 8398, 8551, 8699, 8844, 8984, 9119, 9250, 9374, 9492, 9603, 9706, 9798, 9878, 9941, 9984, 10000, 1097, 1493, 1830, 2136, 2423, 2696, 2957, 3210, 3455, 3694, 3926, 4154, 4377, 4596, 4810, 5021, 5228, 5432, 5632, 5830, 6024, 6215, 6403, 6589, 6771, 6951, 7128, 7302, 7473, 7641, 7806, 7968, 8127, 8283, 8435, 8584, 8729, 8870, 9007, 9140, 9267, 9389, 9504, 9612, 9713, 9803, 9881, 9943, 9984, 10000, 1079, 1469, 1800, 2101, 2383, 2651, 2909, 3157, 3399, 3634, 3863, 4087, 4307, 4522, 4734, 4941, 5146, 5347, 5545, 5739, 5931, 6120, 6306, 6489, 6670, 6848, 7023, 7195, 7365, 7532, 7696, 7857, 8015, 8170, 8323, 8471, 8617, 8758, 8896, 9030, 9159, 9284, 9403, 9516, 9621, 9719, 9807, 9883, 9944, 9985, 10000, 1061, 1444, 1770, 2066, 2343, 2607, 2860, 3105, 3343, 3574, 3800, 4021, 4237, 4449, 4658, 4863, 5064, 5262, 5458, 5650, 5839, 6026, 6210, 6391, 6570, 6746, 6919, 7090, 7258, 7424, 7587, 7747, 7904, 8059, 8211, 8359, 8505, 8647, 8785, 8920, 9051, 9177, 9299, 9415, 9526, 9630, 9725, 9812, 9886, 9945, 9985, 10000, 1044, 1421, 1741, 2032, 2305, 2565, 2814, 3055, 3289, 3517, 3739, 3957, 4170, 4380, 4585, 4787, 4986, 5182, 5374, 5564, 5751, 5936, 6118, 6297, 6473, 6648, 6819, 6988, 7155, 7319, 7481, 7640, 7796, 7950, 8101, 8250, 8395, 8537, 8676, 8811, 8943, 9071, 9195, 9314, 9428, 9536, 9638, 9731, 9816, 9889, 9947, 9985, 10000, 1027, 1398, 1712, 1999, 2268, 2523, 2769, 3006, 3237, 3461, 3680, 3895, 4105, 4311, 4514, 4713, 4909, 5103, 5293, 5480, 5665, 5847, 6027, 6204, 6379, 6551, 6721, 6889, 7054, 7216, 7377, 7535, 7690, 7843, 7994, 8141, 8286, 8428, 8567, 8703, 8836, 8965, 9091, 9212, 9328, 9440, 9546, 9645, 9737, 9819, 9891, 9948, 9986, 10000, 1012, 1376, 1686, 1968, 2233, 2485, 2727, 2960, 3187, 3408, 3624, 3836, 4043, 4247, 4447, 4643, 4837, 5027, 5215, 5400, 5583, 5763, 5940, 6115, 6288, 6459, 6627, 6793, 6956, 7117, 7277, 7433, 7588, 7740, 7889, 8036, 8181, 8323, 8462, 8598, 8731, 8861, 8987, 9110, 9228, 9342, 9452, 9555, 9653, 9743, 9823, 9893, 9949, 9986, 10000, 996, 1355, 1660, 1938, 2199, 2447, 2685, 2915, 3139, 3357, 3570, 3778, 3983, 4183, 4380, 4575, 4765, 4954, 5139, 5322, 5502, 5680, 5855, 6028, 6199, 6368, 6534, 6699, 6861, 7021, 7178, 7334, 7487, 7638, 7787, 7933, 8077, 8218, 8357, 8493, 8626, 8757, 8884, 9008, 9128, 9244, 9356, 9463, 9564, 9660, 9748, 9827, 9896, 9950, 9986, 10000, 981, 1334, 1634, 1908, 2165, 2409, 2643, 2870, 3091, 3306, 3516, 3721, 3923, 4121, 4315, 4507, 4695, 4881, 5064, 5245, 5423, 5598, 5772, 5943, 6112, 6279, 6443, 6606, 6767, 6925, 7081, 7235, 7388, 7538, 7685, 7831, 7974, 8115, 8253, 8389, 8523, 8653, 8781, 8906, 9027, 9145, 9259, 9368, 9473, 9573, 9666, 9753, 9830, 9898, 9951, 9987, 10000, 966, 1314, 1610, 1880, 2133, 2373, 2605, 2828, 3046, 3257, 3464, 3667, 3866, 4061, 4253, 4442, 4628, 4812, 4992, 5171, 5347, 5520, 5692, 5861, 6028, 6193, 6356, 6517, 6676, 6833, 6988, 7141, 7292, 7440, 7587, 7732, 7874, 8014, 8152, 8288, 8421, 8552, 8680, 8805, 8927, 9046, 9162, 9273, 9381, 9484, 9581, 9673, 9758, 9834, 9900, 9952, 9987, 10000, 953, 1295, 1587, 1853, 2102, 2339, 2567, 2787, 3002, 3211, 3415, 3615, 3811, 4004, 4193, 4380, 4563, 4744, 4923, 5099, 5273, 5444, 5614, 5781, 5946, 6110, 6271, 6430, 6588, 6743, 6897, 7048, 7198, 7345, 7491, 7635, 7777, 7916, 8053, 8189, 8322, 8452, 8580, 8706, 8828, 8948, 9065, 9178, 9287, 9393, 9494, 9590, 9679, 9763, 9837, 9902, 9953, 9987, 10000, 939, 1277, 1564, 1826, 2072, 2306, 2530, 2748, 2959, 3165, 3367, 3564, 3757, 3948, 4135, 4319, 4500, 4679, 4855, 5029, 5201, 5371, 5538, 5704, 5867, 6028, 6188, 6346, 6502, 6655, 6808, 6958, 7106, 7253, 7397, 7540, 7681, 7820, 7956, 8091, 8224, 8354, 8482, 8607, 8730, 8851, 8968, 9082, 9194, 9301, 9404, 9503, 9597, 9686, 9767, 9841, 9904, 9954, 9987, 10000, 925, 1258, 1541, 1799, 2041, 2272, 2493, 2708, 2916, 3119, 3318, 3513, 3704, 3892, 4076, 4258, 4437, 4614, 4788, 4960, 5130, 5297, 5463, 5626, 5788, 5948, 6106, 6262, 6416, 6569, 6719, 6868, 7015, 7161, 7304, 7446, 7586, 7724, 7860, 7994, 8126, 8256, 8384, 8509, 8633, 8753, 8871, 8987, 9099, 9208, 9313, 9415, 9512, 9605, 9691, 9771, 9843, 9906, 9955, 9988, 10000, 913, 1241, 1520, 1774, 2013, 2240, 2459, 2670, 2876, 3076, 3272, 3465, 3653, 3838, 4021, 4200, 4377, 4552, 4724, 4894, 5061, 5227, 5391, 5552, 5712, 5870, 6027, 6181, 6334, 6485, 6634, 6782, 6928, 7072, 7214, 7355, 7494, 7631, 7766, 7900, 8031, 8161, 8288, 8414, 8537, 8658, 8776, 8892, 9005, 9115, 9222, 9326, 9426, 9521, 9612, 9697, 9776, 9846, 9907, 9956, 9988, 10000, 900, 1224, 1499, 1750, 1985, 2209, 2425, 2634, 2837, 3034, 3228, 3418, 3604, 3787, 3967, 4144, 4319, 4491, 4661, 4829, 4995, 5159, 5320, 5480, 5639, 5795, 5950, 6103, 6254, 6403, 6551, 6697, 6842, 6985, 7126, 7266, 7404, 7540, 7674, 7807, 7938, 8067, 8194, 8319, 8442, 8563, 8682, 8798, 8912, 9023, 9131, 9236, 9338, 9436, 9530, 9619, 9702, 9780, 9849, 9909, 9957, 9988, 10000, 889, 1207, 1479, 1726, 1958, 2179, 2392, 2598, 2798, 2994, 3185, 3372, 3556, 3737, 3914, 4089, 4262, 4432, 4600, 4766, 4930, 5092, 5252, 5410, 5567, 5721, 5874, 6026, 6176, 6324, 6470, 6615, 6758, 6900, 7040, 7179, 7316, 7451, 7585, 7716, 7847, 7975, 8102, 8226, 8349, 8470, 8589, 8705, 8820, 8931, 9040, 9147, 9250, 9350, 9446, 9538, 9626, 9708, 9784, 9852, 9911, 9958, 9989, 10000, 876, 1190, 1458, 1702, 1931, 2149, 2359, 2563, 2760, 2953, 3142, 3327, 3508, 3687, 3862, 4035, 4206, 4374, 4540, 4704, 4866, 5026, 5184, 5341, 5496, 5649, 5800, 5950, 6098, 6245, 6390, 6534, 6676, 6816, 6955, 7093, 7228, 7363, 7496, 7627, 7756, 7884, 8010, 8134, 8257, 8378, 8496, 8613, 8727, 8840, 8949, 9057, 9161, 9263, 9361, 9455, 9546, 9632, 9713, 9787, 9854, 9912, 9958, 9989, 10000, 865, 1175, 1439, 1679, 1905, 2121, 2328, 2529, 2724, 2914, 3100, 3283, 3462, 3639, 3812, 3983, 4151, 4318, 4482, 4644, 4804, 4962, 5119, 5274, 5427, 5578, 5728, 5877, 6023, 6169, 6312, 6455, 6595, 6735, 6872, 7009, 7144, 7277, 7409, 7539, 7668, 7795, 7921, 8044, 8166, 8287, 8405, 8522, 8637, 8749, 8859, 8967, 9073, 9175, 9275, 9372, 9465, 9554, 9638, 9718, 9791, 9857, 9914, 9959, 9989, 10000, 854, 1160, 1420, 1658, 1881, 2094, 2298, 2496, 2689, 2877, 3061, 3241, 3418, 3592, 3764, 3933, 4099, 4263, 4426, 4586, 4744, 4901, 5056, 5209, 5360, 5510, 5659, 5805, 5951, 6095, 6237, 6378, 6517, 6655, 6792, 6927, 7061, 7193, 7324, 7454, 7582, 7708, 7833, 7956, 8078, 8198, 8316, 8433, 8547, 8660, 8770, 8879, 8985, 9088, 9189, 9287, 9382, 9474, 9561, 9644, 9723, 9795, 9859, 9915, 9960, 9989, 10000, 843, 1145, 1402, 1636, 1857, 2067, 2269, 2464, 2654, 2840, 3022, 3200, 3375, 3547, 3716, 3883, 4048, 4210, 4371, 4529, 4686, 4840, 4994, 5145, 5295, 5443, 5590, 5735, 5879, 6022, 6163, 6302, 6441, 6578, 6713, 6847, 6980, 7111, 7241, 7370, 7497, 7623, 7747, 7869, 7990, 8110, 8228, 8344, 8459, 8571, 8682, 8791, 8897, 9001, 9103, 9203, 9299, 9392, 9482, 9569, 9650, 9727, 9798, 9862, 9917, 9961, 9989, 10000, 832, 1130, 1383, 1615, 1832, 2039, 2239, 2432, 2620, 2803, 2983, 3159, 3332, 3502, 3669, 3834, 3997, 4157, 4316, 4473, 4627, 4781, 4932, 5082, 5230, 5377, 5522, 5666, 5809, 5950, 6090, 6228, 6365, 6501, 6635, 6768, 6900, 7030, 7159, 7287, 7413, 7538, 7661, 7783, 7904, 8023, 8140, 8256, 8371, 8483, 8594, 8703, 8810, 8915, 9017, 9117, 9215, 9310, 9402, 9491, 9575, 9656, 9731, 9801, 9864, 9918, 9961, 9990, 10000, 821, 1115, 1366, 1594, 1809, 2014, 2211, 2402, 2587, 2768, 2946, 3120, 3290, 3458, 3624, 3787, 3948, 4107, 4263, 4418, 4571, 4723, 4873, 5021, 5168, 5313, 5457, 5600, 5741, 5880, 6019, 6156, 6292, 6426, 6559, 6691, 6822, 6951, 7079, 7206, 7331, 7455, 7578, 7699, 7819, 7938, 8055, 8171, 8285, 8397, 8508, 8617, 8724, 8829, 8932, 9033, 9132, 9228, 9321, 9412, 9499, 9582, 9661, 9736, 9804, 9866, 9920, 9962, 9990, 10000, 811, 1102, 1349, 1575, 1787, 1989, 2184, 2372, 2555, 2734, 2910, 3081, 3250, 3416, 3580, 3741, 3900, 4057, 4212, 4365, 4517, 4667, 4815, 4962, 5107, 5251, 5393, 5534, 5674, 5813, 5950, 6085, 6220, 6353, 6485, 6616, 6746, 6874, 7001, 7127, 7251, 7375, 7496, 7617, 7736, 7854, 7971, 8086, 8200, 8312, 8422, 8531, 8639, 8744, 8847, 8949, 9048, 9145, 9240, 9332, 9421, 9507, 9589, 9667, 9740, 9808, 9868, 9921, 9963, 9990, 10000, 802, 1089, 1333, 1556, 1765, 1965, 2157, 2344, 2525, 2702, 2875, 3045, 3212, 3376, 3538, 3697, 3854, 4009, 4163, 4314, 4464, 4613, 4759, 4905, 5048, 5191, 5332, 5471, 5610, 5747, 5882, 6017, 6150, 6282, 6413, 6543, 6671, 6799, 6925, 7050, 7173, 7296, 7417, 7537, 7655, 7773, 7889, 8003, 8117, 8228, 8339, 8448, 8555, 8660, 8764, 8866, 8966, 9063, 9159, 9252, 9342, 9430, 9514, 9595, 9672, 9744, 9811, 9871, 9922, 9963, 9990, 10000, 793, 1076, 1317, 1537, 1744, 1941, 2131, 2315, 2494, 2669, 2841, 3008, 3173, 3336, 3496, 3653, 3809, 3962, 4114, 4264, 4412, 4559, 4704, 4848, 4990, 5131, 5271, 5409, 5546, 5682, 5816, 5950, 6082, 6213, 6342, 6471, 6598, 6725, 6850, 6974, 7096, 7218, 7338, 7457, 7575, 7692, 7807, 7922, 8034, 8146, 8256, 8364, 8471, 8577, 8681, 8783, 8883, 8981, 9078, 9172, 9263, 9353, 9439, 9522, 9602, 9677, 9748, 9814, 9873, 9924, 9964, 9990, 10000, 784, 1063, 1302, 1519, 1724, 1919, 2106, 2288, 2465, 2638, 2807, 2973, 3136, 3297, 3455, 3611, 3765, 3917, 4067, 4215, 4362, 4507, 4651, 4793, 4934, 5073, 5212, 5349, 5484, 5619, 5752, 5884, 6015, 6145, 6273, 6401, 6527, 6652, 6776, 6899, 7021, 7142, 7262, 7380, 7497, 7613, 7728, 7841, 7954, 8065, 8174, 8283, 8390, 8495, 8599, 8701, 8801, 8900, 8997, 9092, 9184, 9275, 9362, 9447, 9529, 9608, 9682, 9752, 9817, 9875, 9925, 9964, 9990, 10000, 773, 1050, 1285, 1500, 1702, 1895, 2080, 2260, 2435, 2606, 2773, 2937, 3099, 3257, 3414, 3568, 3720, 3870, 4019, 4166, 4311, 4454, 4597, 4737, 4877, 5015, 5152, 5287, 5422, 5555, 5687, 5818, 5948, 6076, 6204, 6330, 6456, 6580, 6703, 6825, 6946, 7066, 7185, 7302, 7419, 7534, 7648, 7761, 7873, 7984, 8093, 8201, 8307, 8413, 8516, 8619, 8719, 8818, 8916, 9011, 9105, 9196, 9285, 9371, 9455, 9536, 9613, 9687, 9755, 9819, 9876, 9926, 9965, 9991, 10000, 765, 1038, 1271, 1483, 1683, 1873, 2057, 2234, 2407, 2576, 2742, 2904, 3063, 3220, 3375, 3528, 3678, 3827, 3974, 4119, 4263, 4405, 4546, 4685, 4823, 4960, 5095, 5230, 5363, 5495, 5625, 5755, 5884, 6011, 6138, 6263, 6387, 6510, 6633, 6754, 6874, 6993, 7111, 7227, 7343, 7458, 7571, 7684, 7795, 7905, 8014, 8122, 8228, 8333, 8436, 8539, 8639, 8739, 8836, 8932, 9026, 9118, 9208, 9296, 9381, 9463, 9543, 9619, 9691, 9759, 9822, 9878, 9927, 9966, 9991, 10000, 756, 1026, 1256, 1466, 1663, 1852, 2033, 2209, 2380, 2547, 2710, 2871, 3028, 3184, 3337, 3488, 3637, 3784, 3929, 4073, 4215, 4356, 4495, 4633, 4770, 4905, 5039, 5172, 5304, 5435, 5565, 5693, 5821, 5947, 6072, 6196, 6320, 6442, 6563, 6683, 6802, 6921, 7038, 7154, 7269, 7383, 7495, 7607, 7718, 7827, 7936, 8043, 8149, 8254, 8357, 8459, 8560, 8659, 8757, 8853, 8947, 9040, 9131, 9219, 9306, 9390, 9471, 9549, 9624, 9696, 9763, 9825, 9880, 9928, 9966, 9991, 10000, 748, 1014, 1242, 1449, 1644, 1831, 2010, 2184, 2353, 2518, 2680, 2839, 2995, 3148, 3300, 3449, 3596, 3742, 3886, 4028, 4169, 4308, 4446, 4583, 4718, 4852, 4985, 5117, 5247, 5377, 5505, 5633, 5759, 5884, 6008, 6132, 6254, 6375, 6495, 6614, 6733, 6850, 6966, 7081, 7196, 7309, 7421, 7532, 7642, 7751, 7859, 7966, 8071, 8176, 8279, 8381, 8481, 8581, 8678, 8775, 8869, 8962, 9054, 9143, 9230, 9316, 9398, 9479, 9556, 9630, 9700, 9766, 9827, 9882, 9929, 9967, 9991, 10000, 740, 1003, 1228, 1433, 1626, 1810, 1988, 2159, 2327, 2490, 2650, 2807, 2962, 3114, 3263, 3411, 3557, 3701, 3843, 3984, 4124, 4262, 4398, 4533, 4667, 4800, 4932, 5062, 5192, 5320, 5447, 5574, 5699, 5823, 5946, 6068, 6189, 6310, 6429, 6547, 6664, 6781, 6896, 7011, 7124, 7237, 7348, 7458, 7568, 7676, 7784, 7890, 7995, 8099, 8202, 8304, 8404, 8503, 8601, 8697, 8792, 8885, 8977, 9067, 9155, 9241, 9325, 9407, 9486, 9562, 9635, 9705, 9770, 9830, 9884, 9930, 9967, 9991, 10000, 732, 992, 1215, 1418, 1608, 1790, 1966, 2136, 2301, 2463, 2621, 2776, 2929, 3080, 3228, 3374, 3518, 3661, 3802, 3941, 4079, 4216, 4351, 4485, 4618, 4749, 4880, 5009, 5137, 5264, 5390, 5515, 5639, 5763, 5885, 6006, 6126, 6245, 6363, 6481, 6597, 6713, 6827, 6941, 7054, 7165, 7276, 7386, 7495, 7602, 7709, 7815, 7920, 8023, 8126, 8227, 8327, 8426, 8524, 8620, 8715, 8809, 8901, 8991, 9080, 9167, 9252, 9335, 9415, 9493, 9568, 9640, 9709, 9773, 9832, 9885, 9931, 9968, 9991, 10000, 723, 981, 1200, 1401, 1589, 1769, 1943, 2111, 2275, 2435, 2591, 2745, 2896, 3045, 3192, 3336, 3479, 3620, 3760, 3898, 4034, 4170, 4303, 4436, 4568, 4698, 4827, 4955, 5082, 5208, 5333, 5457, 5580, 5702, 5823, 5943, 6062, 6181, 6298, 6414, 6530, 6645, 6758, 6871, 6983, 7094, 7204, 7313, 7421, 7529, 7635, 7740, 7844, 7948, 8050, 8151, 8251, 8350, 8447, 8543, 8639, 8732, 8825, 8915, 9005, 9092, 9178, 9262, 9343, 9423, 9500, 9574, 9645, 9712, 9776, 9834, 9887, 9932, 9968, 9992, 10000, 716, 970, 1188, 1386, 1573, 1751, 1922, 2089, 2250, 2409, 2564, 2716, 2865, 3013, 3158, 3301, 3442, 3582, 3720, 3857, 3992, 4126, 4259, 4390, 4520, 4649, 4777, 4904, 5030, 5155, 5279, 5402, 5523, 5644, 5764, 5884, 6002, 6119, 6235, 6351, 6466, 6579, 6692, 6804, 6915, 7026, 7135, 7243, 7351, 7458, 7563, 7668, 7772, 7874, 7976, 8077, 8176, 8275, 8372, 8469, 8564, 8657, 8750, 8841, 8930, 9018, 9105, 9189, 9272, 9352, 9431, 9507, 9580, 9650, 9716, 9779, 9837, 9888, 9933, 9968, 9992, 10000, 708, 960, 1175, 1371, 1556, 1732, 1902, 2066, 2226, 2383, 2536, 2687, 2835, 2981, 3124, 3266, 3406, 3544, 3681, 3817, 3950, 4083, 4214, 4345, 4474, 4601, 4728, 4854, 4979, 5102, 5225, 5347, 5468, 5587, 5706, 5825, 5942, 6058, 6174, 6288, 6402, 6515, 6627, 6738, 6849, 6958, 7067, 7174, 7281, 7387, 7492, 7596, 7700, 7802, 7903, 8003, 8103, 8201, 8298, 8394, 8489, 8583, 8675, 8766, 8856, 8944, 9031, 9116, 9200, 9281, 9361, 9438, 9513, 9585, 9654, 9720, 9782, 9839, 9890, 9934, 9969, 9992, 10000, 701, 950, 1163, 1357, 1539, 1714, 1882, 2045, 2203, 2358, 2510, 2659, 2805, 2950, 3092, 3232, 3371, 3508, 3643, 3777, 3910, 4041, 4171, 4300, 4428, 4555, 4680, 4805, 4928, 5051, 5173, 5293, 5413, 5532, 5650, 5767, 5883, 5999, 6113, 6227, 6340, 6452, 6563, 6674, 6783, 6892, 7000, 7107, 7213, 7318, 7423, 7526, 7629, 7731, 7832, 7932, 8030, 8128, 8225, 8321, 8416, 8509, 8602, 8693, 8783, 8871, 8959, 9044, 9128, 9211, 9291, 9370, 9446, 9520, 9591, 9659, 9724, 9785, 9841, 9892, 9935, 9969, 9992, 10000, 693, 940, 1150, 1342, 1523, 1696, 1862, 2023, 2180, 2333, 2483, 2631, 2776, 2919, 3060, 3199, 3336, 3472, 3606, 3738, 3870, 4000, 4129, 4256, 4383, 4508, 4633, 4756, 4879, 5000, 5121, 5240, 5359, 5477, 5594, 5710, 5826, 5940, 6054, 6167, 6279, 6390, 6500, 6610, 6718, 6826, 6934, 7040, 7145, 7250, 7354, 7457, 7559, 7660, 7761, 7860, 7959, 8056, 8153, 8248, 8343, 8436, 8529, 8620, 8710, 8799, 8886, 8972, 9057, 9140, 9221, 9300, 9378, 9453, 9526, 9596, 9664, 9728, 9788, 9843, 9893, 9936, 9970, 9992, 10000, 687, 931, 1139, 1329, 1508, 1678, 1843, 2002, 2158, 2310, 2458, 2604, 2748, 2889, 3029, 3166, 3302, 3437, 3570, 3701, 3831, 3960, 4088, 4214, 4340, 4464, 4587, 4709, 4831, 4951, 5071, 5189, 5307, 5424, 5540, 5655, 5770, 5883, 5996, 6108, 6219, 6329, 6439, 6548, 6656, 6763, 6869, 6975, 7080, 7184, 7287, 7389, 7491, 7592, 7691, 7790, 7889, 7986, 8082, 8177, 8271, 8365, 8457, 8548, 8638, 8727, 8814, 8901, 8986, 9069, 9151, 9231, 9309, 9386, 9460, 9532, 9602, 9668, 9731, 9790, 9845, 9894, 9937, 9970, 9992, 10000, 680, 921, 1127, 1315, 1492, 1661, 1824, 1982, 2135, 2286, 2433, 2577, 2720, 2860, 2998, 3134, 3269, 3402, 3533, 3663, 3792, 3920, 4046, 4172, 4296, 4419, 4541, 4663, 4783, 4902, 5021, 5138, 5255, 5371, 5486, 5600, 5714, 5826, 5938, 6049, 6160, 6269, 6378, 6486, 6593, 6700, 6805, 6910, 7014, 7118, 7220, 7322, 7423, 7523, 7623, 7721, 7819, 7915, 8011, 8106, 8200, 8293, 8385, 8476, 8566, 8655, 8743, 8829, 8914, 8998, 9081, 9161, 9241, 9318, 9393, 9467, 9538, 9607, 9672, 9735, 9793, 9847, 9896, 9938, 9971, 9992, 10000, 673, 912, 1116, 1302, 1477, 1645, 1806, 1962, 2114, 2263, 2409, 2552, 2693, 2832, 2968, 3103, 3237, 3368, 3499, 3628, 3755, 3882, 4007, 4131, 4255, 4377, 4498, 4618, 4737, 4855, 4973, 5089, 5205, 5320, 5434, 5547, 5660, 5772, 5883, 5993, 6102, 6211, 6319, 6426, 6533, 6638, 6743, 6847, 6951, 7054, 7156, 7257, 7357, 7457, 7556, 7654, 7751, 7847, 7943, 8037, 8131, 8224, 8316, 8406, 8496, 8585, 8673, 8759, 8844, 8929, 9011, 9093, 9172, 9250, 9327, 9401, 9474, 9544, 9612, 9677, 9738, 9796, 9849, 9897, 9938, 9971, 9992, 10000, 667, 903, 1105, 1289, 1462, 1628, 1788, 1942, 2093, 2240, 2385, 2527, 2666, 2803, 2939, 3073, 3205, 3335, 3464, 3592, 3719, 3844, 3968, 4091, 4213, 4334, 4454, 4573, 4691, 4809, 4925, 5041, 5155, 5269, 5383, 5495, 5607, 5717, 5827, 5937, 6045, 6153, 6260, 6367, 6472, 6577, 6682, 6785, 6888, 6990, 7091, 7192, 7292, 7391, 7489, 7587, 7683, 7779, 7874, 7968, 8062, 8154, 8246, 8337, 8426, 8515, 8603, 8689, 8775, 8859, 8942, 9023, 9104, 9183, 9260, 9335, 9409, 9480, 9550, 9617, 9681, 9741, 9798, 9851, 9899, 9939, 9971, 9993, 10000, 659, 893, 1092, 1275, 1446, 1610, 1768, 1921, 2071, 2216, 2359, 2500, 2638, 2774, 2908, 3041, 3171, 3301, 3429, 3555, 3680, 3805, 3928, 4050, 4171, 4290, 4409, 4528, 4645, 4761, 4876, 4991, 5105, 5218, 5330, 5441, 5552, 5662, 5771, 5880, 5988, 6095, 6201, 6307, 6412, 6516, 6619, 6722, 6824, 6926, 7026, 7126, 7226, 7324, 7422, 7519, 7615, 7711, 7805, 7899, 7992, 8085, 8176, 8266, 8356, 8444, 8532, 8619, 8704, 8789, 8872, 8954, 9034, 9114, 9192, 9268, 9343, 9415, 9486, 9555, 9621, 9684, 9744, 9801, 9853, 9900, 9940, 9972, 9993, 10000, 653, 884, 1082, 1263, 1432, 1595, 1751, 1903, 2051, 2195, 2337, 2476, 2613, 2747, 2880, 3011, 3141, 3269, 3396, 3521, 3645, 3768, 3890, 4011, 4131, 4250, 4368, 4485, 4601, 4716, 4831, 4945, 5057, 5169, 5281, 5391, 5501, 5610, 5719, 5826, 5933, 6039, 6145, 6250, 6354, 6457, 6560, 6662, 6764, 6865, 6965, 7064, 7163, 7261, 7358, 7454, 7550, 7645, 7739, 7833, 7925, 8017, 8108, 8199, 8288, 8376, 8464, 8550, 8636, 8720, 8803, 8886, 8967, 9046, 9125, 9202, 9277, 9351, 9423, 9492, 9560, 9625, 9688, 9747, 9803, 9855, 9901, 9941, 9972, 9993, 10000, 647, 876, 1071, 1250, 1419, 1579, 1734, 1885, 2031, 2174, 2314, 2452, 2587, 2721, 2853, 2983, 3111, 3238, 3363, 3488, 3611, 3733, 3854, 3973, 4092, 4210, 4327, 4443, 4558, 4672, 4786, 4899, 5011, 5122, 5232, 5342, 5451, 5559, 5666, 5773, 5879, 5985, 6090, 6194, 6297, 6400, 6502, 6603, 6704, 6804, 6904, 7002, 7100, 7198, 7294, 7390, 7486, 7580, 7674, 7767, 7859, 7951, 8041, 8131, 8220, 8309, 8396, 8482, 8568, 8652, 8736, 8818, 8899, 8979, 9058, 9135, 9211, 9286, 9359, 9430, 9499, 9565, 9630, 9692, 9750, 9806, 9856, 9902, 9941, 9973, 9993, 10000, 641, 868, 1061, 1239, 1405, 1564, 1718, 1867, 2012, 2153, 2292, 2429, 2563, 2695, 2826, 2954, 3082, 3207, 3332, 3455, 3577, 3698, 3818, 3936, 4054, 4171, 4287, 4402, 4516, 4629, 4742, 4854, 4965, 5075, 5184, 5293, 5401, 5509, 5615, 5721, 5827, 5931, 6035, 6139, 6241, 6343, 6445, 6545, 6645, 6745, 6844, 6942, 7039, 7136, 7232, 7328, 7422, 7516, 7610, 7702, 7794, 7885, 7976, 8065, 8154, 8242, 8329, 8415, 8501, 8585, 8668, 8751, 8832, 8912, 8991, 9069, 9146, 9221, 9294, 9366, 9436, 9505, 9571, 9634, 9695, 9753, 9808, 9858, 9903, 9942, 9973, 9993, 10000, 635, 859, 1051, 1227, 1392, 1549, 1701, 1849, 1992, 2133, 2270, 2406, 2539, 2670, 2799, 2926, 3053, 3177, 3301, 3423, 3544, 3663, 3782, 3900, 4017, 4132, 4247, 4361, 4474, 4587, 4698, 4809, 4919, 5029, 5137, 5245, 5352, 5459, 5565, 5670, 5775, 5878, 5982, 6084, 6186, 6288, 6388, 6488, 6588, 6686, 6784, 6882, 6979, 7075, 7171, 7265, 7360, 7453, 7546, 7638, 7730, 7820, 7910, 8000, 8088, 8176, 8263, 8349, 8434, 8518, 8602, 8684, 8765, 8846, 8925, 9003, 9080, 9156, 9230, 9303, 9374, 9443, 9510, 9576, 9639, 9699, 9756, 9810, 9860, 9905, 9943, 9973, 9993, 10000, 629, 851, 1041, 1215, 1379, 1535, 1685, 1831, 1974, 2113, 2249, 2383, 2515, 2645, 2773, 2899, 3024, 3148, 3270, 3391, 3511, 3629, 3747, 3864, 3979, 4094, 4208, 4321, 4434, 4545, 4656, 4766, 4875, 4983, 5091, 5198, 5304, 5410, 5515, 5620, 5723, 5826, 5929, 6031, 6132, 6233, 6333, 6432, 6531, 6629, 6726, 6823, 6919, 7015, 7110, 7204, 7298, 7391, 7483, 7575, 7666, 7756, 7846, 7935, 8023, 8110, 8197, 8283, 8368, 8452, 8535, 8618, 8699, 8780, 8859, 8938, 9015, 9091, 9165, 9239, 9311, 9381, 9449, 9516, 9581, 9643, 9703, 9759, 9812, 9862, 9906, 9944, 9974, 9993, 10000, 623, 844, 1032, 1204, 1366, 1521, 1670, 1814, 1955, 2093, 2228, 2361, 2492, 2620, 2747, 2872, 2996, 3119, 3240, 3360, 3479, 3596, 3713, 3829, 3943, 4057, 4170, 4282, 4394, 4504, 4614, 4723, 4831, 4939, 5046, 5152, 5258, 5362, 5467, 5570, 5673, 5776, 5877, 5978, 6079, 6179, 6278, 6377, 6475, 6572, 6669, 6765, 6861, 6956, 7050, 7144, 7237, 7330, 7422, 7513, 7604, 7693, 7783, 7871, 7959, 8046, 8133, 8218, 8303, 8387, 8470, 8553, 8634, 8714, 8794, 8872, 8950, 9026, 9101, 9175, 9248, 9319, 9388, 9456, 9522, 9586, 9647, 9706, 9762, 9815, 9863, 9907, 9944, 9974, 9993, 10000, 618, 836, 1022, 1193, 1353, 1507, 1654, 1798, 1937, 2074, 2208, 2339, 2469, 2596, 2722, 2846, 2969, 3090, 3211, 3329, 3447, 3564, 3680, 3794, 3908, 4021, 4133, 4244, 4355, 4464, 4573, 4681, 4789, 4895, 5001, 5107, 5212, 5316, 5419, 5522, 5624, 5726, 5827, 5927, 6027, 6126, 6224, 6322, 6420, 6517, 6613, 6708, 6804, 6898, 6992, 7085, 7178, 7270, 7361, 7452, 7542, 7631, 7720, 7808, 7896, 7983, 8069, 8154, 8239, 8323, 8406, 8488, 8569, 8650, 8729, 8808, 8885, 8962, 9037, 9112, 9185, 9256, 9326, 9395, 9462, 9527, 9590, 9651, 9709, 9765, 9817, 9865, 9908, 9945, 9974, 9993, 10000, 612, 828, 1013, 1182, 1341, 1493, 1639, 1781, 1919, 2055, 2187, 2318, 2446, 2572, 2697, 2820, 2942, 3062, 3181, 3299, 3416, 3532, 3646, 3760, 3873, 3985, 4096, 4206, 4316, 4424, 4532, 4640, 4746, 4852, 4957, 5062, 5166, 5269, 5372, 5474, 5575, 5676, 5776, 5876, 5975, 6073, 6171, 6269, 6365, 6462, 6557, 6652, 6747, 6840, 6934, 7026, 7118, 7210, 7301, 7391, 7481, 7570, 7658, 7746, 7833, 7920, 8005, 8091, 8175, 8259, 8341, 8423, 8505, 8585, 8665, 8743, 8821, 8898, 8973, 9048, 9121, 9194, 9264, 9334, 9402, 9468, 9532, 9595, 9655, 9713, 9767, 9819, 9866, 9909, 9946, 9975, 9993, 10000, 607, 821, 1004, 1171, 1329, 1479, 1624, 1765, 1902, 2036, 2168, 2297, 2424, 2550, 2673, 2795, 2916, 3035, 3153, 3270, 3386, 3500, 3614, 3727, 3839, 3950, 4060, 4169, 4278, 4386, 4493, 4599, 4705, 4810, 4915, 5018, 5122, 5224, 5326, 5427, 5528, 5628, 5727, 5826, 5925, 6022, 6120, 6216, 6312, 6408, 6503, 6597, 6691, 6784, 6877, 6969, 7061, 7152, 7242, 7332, 7421, 7510, 7598, 7685, 7772, 7858, 7943, 8028, 8112, 8196, 8278, 8360, 8441, 8522, 8601, 8680, 8758, 8834, 8910, 8985, 9059, 9131, 9203, 9273, 9341, 9409, 9474, 9538, 9600, 9659, 9716, 9770, 9821, 9868, 9910, 9946, 9975, 9993, 10000, 600, 813, 994, 1160, 1316, 1465, 1609, 1748, 1884, 2017, 2147, 2275, 2401, 2525, 2648, 2769, 2888, 3007, 3124, 3239, 3354, 3468, 3581, 3693, 3804, 3914, 4023, 4131, 4239, 4346, 4452, 4558, 4663, 4767, 4871, 4974, 5076, 5178, 5279, 5379, 5479, 5579, 5677, 5776, 5873, 5970, 6067, 6163, 6258, 6353, 6448, 6541, 6635, 6727, 6819, 6911, 7002, 7093, 7183, 7272, 7361, 7449, 7536, 7623, 7710, 7796, 7881, 7965, 8049, 8132, 8215, 8296, 8377, 8458, 8537, 8616, 8693, 8770, 8846, 8921, 8995, 9068, 9140, 9211, 9280, 9348, 9414, 9479, 9542, 9603, 9662, 9719, 9772, 9823, 9869, 9911, 9947, 9975, 9994, 10000, 595, 806, 985, 1150, 1304, 1452, 1595, 1733, 1867, 1999, 2128, 2255, 2380, 2503, 2625, 2745, 2863, 2980, 3097, 3211, 3325, 3438, 3550, 3661, 3771, 3880, 3988, 4096, 4203, 4309, 4415, 4519, 4623, 4727, 4830, 4932, 5033, 5134, 5235, 5334, 5433, 5532, 5630, 5728, 5825, 5921, 6017, 6112, 6207, 6301, 6395, 6488, 6581, 6673, 6765, 6856, 6946, 7036, 7125, 7214, 7303, 7390, 7477, 7564, 7650, 7735, 7820, 7904, 7988, 8071, 8153, 8234, 8315, 8395, 8475, 8553, 8631, 8708, 8784, 8859, 8933, 9006, 9079, 9150, 9219, 9288, 9355, 9421, 9485, 9547, 9608, 9666, 9722, 9775, 9825, 9871, 9912, 9947, 9975, 9994, 10000)) DNAcopy/data/coriell.rda0000644000175000017500000015267714136047041014755 0ustar nileshnilesh%U{n$g*A`V8=fatLw$*J IA@@ " $ﳧ:ܻキ[ ;|w8U5寸׊׸|,1f42t1Zsc[e|ɘ~Ywd.|^?.7s&3F;3G|~җ -KdZw5|? i~2u_c s~KP5%2~+׭}HGd!ƣSH hBϫ~;1y phq~{3oyki\\>8i]JQ9C@>ўz/={mV)"Hw^ᓵOy_|:<+^l*|߆/>B>k|"|,<(cg'f=_WD"CuTc])G%ç[!k_1;:0Nuw^u~[zB.ZΛX emցlx,}٠eL5R~A7ߠ=;L,0vetF eƄ'f]r+=wrЅҎmK_؋ #^~-ȷ< I؇9/K}~xz ϯ@gk#b\cؗ=OBCEx_qЩ*cUDGE"S؃VЗ=F"6ZDo.³>|G 0s@\o{6`P "_qvPAeD6l+_0p3|+ > >}%냡7"VDQ"NWK@FVFne!K*""tp~8$ DvYoeG~{"c]Wz[AFU_y>\{/ì"8x9 `ex^z&/,o"/76TC?3r)2>_ ]!`^9(=Ƶ ozUnʌ[`@ (;nŚJB,G~vQ}S|MEքUצ.Wb2-"s_>[[A&zU@~oh=UĮ\Y2""xW\xmogQ+v͕>oٚ6`f73oY[GT~ΉK;L5/*V+UU_obG0p".Wd⿙E_t: "\Ğ`P{/WC]u |wC͘++eo SFK  {*w'%&Ad*P{+_zO0ذnAe,-sOxXL^],>cWYgE+w2t*k[2{-aS6+`Ktʚm?U 2>w`b X&~(m3WbQB z]dOE<2ns=S-aMN])*9}r,5%)BIt[.ѷ.c:_sHs!|aU`+O?Uf%ZB*Ȩ(%a4;mB9%#t؛{Syw{.%R9`:]qX^\tgw$8Q0[-1Y` ;4A+⃰QV F92[ %UY?x\FFd| 7G<)qEt= lk\Hg$;hU[OeZŶΰ2|3ز#:,NLFsz# `QI|5択G%ȲNlʕğ##XosEɃVo 20ؠ?#'%a*q> 6iХ 3Uaٔ QxZ沗 cGGxI QC#<` 8_YJl <-Il'2g]29#1'+DLb#ĎKߑ`Xb)[QeO4 4b݄UY4Ydͮءo-d\ɝo ~ VowYK ,aKUr"н*l6`wY_~%*b1@Ar)'E &%Pb.rEeb{%DU.~:`p *!SWW2-! )J.Nv[4~Ey+ ys[[y+"XRdE %V'F,UEtEA]؈؁|ZUZH<r%qmU^ȿ$z*1Cys%~$qeț+1%4`U`s 3C-%ހ7 vљ"y-oE͕мmAka$gWe?K_.NY$] +=rWr1P(K|,/]s$+$(zR_$֪H>#{]tM$O'e e2SAv\@+cEz\/26Wc⍒b*\"</.!˞|UaɟcYr~*U&4bo׉VKĶ2g VGH+ףe#Q۩JNfWEߤ *!}+R#A s 7Grog@/ TKS,_UD*,#9+% cQ SoKB]l0NyW/[+\W<ؤK/HTDP?$wvȪeqEl]BO%tĘU$!)c%\*;K *ؘ]t!q!Fr]Iɵ^DwGE%UBw+ k ",> H= TVY +Ȯ"vbߌ]D ^QjQ_.^$n./:?1o)JΧGJl^:Rr.|sJ)}Vn"8GEpqǑ:'Ěɿ"a -K΀}U,. c#EpW%n>oīF$8C\ZVi9V ?G{T!sFo]DW&6^H("'X\S%^qlt.!n iQc$!%́?*o$)a#eİ$Nfn#@? p$xSAϪ*-* UbE\&&*tQye=r[X*7k,I"6\ȥ Uͤ>,o,ÍRk!xTet,ޕ~$ **몠UxO]1?E>R%^2늎ւi$^\g=⃊Nf^UсSX{kW/Eqq }H= Y' V!5 u" 7Wrlp{\~J-Kb,xYk]Uk;Cê}`UłIY UI0?.Ì7b")`EwUj`hU&~Я,׉}7 a-eCŮEo%|Q _Q6CR_n+ё0*umJAGSA>*[K%Kƒ/$YWe%b3UM$?]ߢK.*YT-I>9I)4ed_0>">E  FAWvp$1ج؞$*5{b̪(P q%FЙfIjCI,q& 좫Uɷ%5h$b*SH WJ}RGr yg%M`e,6JcJP6 [yIb9 ":b+Ux_x9KS3 wuV LWo`e{|!6G>T>,Ҋ %fD*%^1r `}YrD^{p.6/ e|N[el9`DIH!XCز r,ae%< ]-I=@x$~HTr)wY*VàWI >cE-^oLVZ.k(J"2ZVH'~ 2//ö\J,5ЭJ.:O_Wj[oK< Z vmUjaUtUaΪ !5r93 ^!~rU" (Y&?M5"|1rߔyȨJ}MU!9,Am2|s#u+{hC v_.tHErX#%7\"k側̩ѮďR vq|L?bWrN'5K y.:R/@itVnWс:H|!NG*#1uBThp*rF'gr--Keb@WjGa9Ol/ &J^ z-FM25Nd_Ȣ*5ȹ7[$nIQW.Y{Uf?#*2(EKdV$u Kr>/elY<98z^^j}"Fb%x[DAhyM sG;o9k /I E,JƖ%;b"1qVU8#VO99P&,I<3Ƞ #Z 15:FJj^<" 9ĶȑZ^ĉKMT FbaEݥF8K#"Hȱ.]NJGF_i\(U"X;*FwԤD[}jdsY~+Zqò oEѢ:c7c ̌z/A N_Z=9fz0w9@Ģd@~O8Mu^=%y,0^6?-'dfț; wH‰M{ͦMB/!bo̫񬻕)lQX?fq8}MfA5hXo,kYNـZlN.*?-wMS|M?/.Ir⨻q8,.Iؙ6iAg%X%PUoh m$ G\׸i▞rqj aY_4E;kk\u40zJ9uAT{-ա)ʼaY8 !ѼƥDg6 Qk!m"[ݛZ8!ⰡC0/j0oXwv FBO kH¹^lgBHk 6Fsm6%.i#M%^מ6ek6߃fžMYmۥwL"CWE{Sxf~%`YnG4}I/ɲFWS oΦ~rR,5aԼFK7X9advk$Acȯ_m貜攙i}tw ښ唰65ޯj]G]g}5O jPV!f ̈́:X_NHz^"RAtQik8EVW]!7,*KgODa6 &ͺR,LzRiBԯrZ Z38 AT[`6DsʽXeĝ8b+ b֌.IAcbeBA2 m$Ɨvh?]aKhbUk Hn "I 4lCF x:ƵɅv͒ -vaʯk׮hY5zVzCZB C*xZ3<9waom;[UPإ[]G^ Džúkh GG4؅K5/ѕpf%:Q:jVkjV6-R6m7WCwj|azxZWЫ. YX3V, Zkݏe:C9t$EVim[Qv:#<)"c#ݺ06XL\) 3q̒P3ak:͍a٘sqYx6j( ! bkveRq -֦2Y,%5yiUHj&^gEhgegaOYؓxZo֛UfH_6$hЖV2 ,RhaOhH¥"֌uDͳ[iX3 DӋH-HYJWZ:YH #I-fafn $-w>MԶtiםmI.d$5%#:IFtH#ޗi:Hks )Ԥ~ imT+qZ[?sԳ^7bzo"~aRu;TX'A)10K8cUM~ט4j-FFcҔ&9i6[3VVڟ-XwdpLg#{0;eR^NhoxpS`9acQOQ=>z{L(]k5BRkfz@|yqAb<=<$ר}Aj)R.S&&+H? iZN$ԧ| A [Dk=[$]$]!WV_NrtH' :-Z1/U%=|(|/w3Aҷ@k-5%wIk'ڏCҧtR} iF-/OA xZ#Dֶ3}{/o6MX&]{6(oWG[X-F5xK4:yc+_ӷ4& }uHXXz5/}+ՀLMwif~Эe豰hP?E?҇ѐB, [< @A!I62aA֕-ZRwc4Ǣsci_bLձ|Lh5}O$ .A~ i!X~ OBpZ@߫2 ϊA ui[ 4k5chպ0 gm;AZd-z"mA< O@ҏ4@ :AוbdGI5 V_-mm.b`@~0\s{kM4 BOZAҧ6-~%0зB[YIrXiREYN-Ґz&`z]""-&O(=VO!-NnQj5 4ćZC}ǧ뀫)cc8;jV;?iF~ȷp"9d9($ ,,d-5XU/ i=f VQn'!Yb#:4n ,ٽ&HGi(շ_BҏB 𣺧't)j hui!Zy%,aLڞjҰ^ܼ{=ɱߢV 5ԫu> z,~:_^a,Uߌ#}I?R/;B[=Nڬ^=|,}b7T? .D'!Jǝ:({-1uیh?[exT{x7ezIrIMDHImT+m7c Z!Y$KIh$IO ' !IlE^IlS![&%~~~~dVdK$mƑth3jӪ|6uDɄR}& Y7=@үB;=V'!iDNk᠖LZTM"}s*X}vV40M,$LX4iof6juՠR+FM=~D+_TG5FtBcs֢J`Qd-Ƌid?#[f]5fgLp6f>DVuϾtl09NfSn0؜Уn@.'[DS zAU%1AC1[)Z#*$ j ӕrgᠦ<-VFy|W-Tx>잾y&}yK5z+ fed`Zu2!_w/zYs[gAТ9өg>Zk=rA7+ GˡӔ.ui|-Pǰ򼳦gPpuR > `SdSS:T#Q^P fA4髴 %Zq}UlJܥE"5NċhUHrATkkZҔ>fFrAL+ л L?UdzhFjdK5dc"ASwE]ʣ=ꞧ`6" P>?5zaLvB,u*%k_Bam@+%z>*k&<=ׄ©ksy: ^B[P#>Cz=.;zC(/}_`!ݺOúH)E"k%z~h9 °_s#{4e\%a,;Zzc|=Y4%Z E<7V)Jܬ7 مFeA *(G!]Uqk:4e^aҧ0* '1-Da27 AI,HJ~%Tޡ'A{94eAM_s-f_j]5jai3a֭,%ӡ\gPal\O5q+~jaraKMTv\?U)°r zQQ=˸JqcB#%TFu͚txz]4=FDQk%J"U)lbCToCOQ*=N*}~ۈZsgȦ)}V\ګFy!t%.,u~ES[OF~ߢvk¨ahb_3ӔdV kzv폢@䣺')(Qݭ=O0M.OmDPOsVC ùz~u_E( ǵV}UԮ hFG:2)c.#8P$ZblEܪ'u]ڜQEEE~Z(Jj Kt4!!-dHJ(͈G͞h{Ju)J^F{s E^YEj9tuD~N+J'YFLQ֩t-O68*QLSG]_^Ozs[=FXDTa 1E41",ta0u)k>qmBEIPEuRbMQv{J7WA S(j~j'tm,t =kzkUl &&Y)\w데P_guٵˈqO/_K9LPmӔau~fkXhVi)Ύbkq_Eo#l'e8Vq"KyzƑ QOq4bQ)5vc]N͠Xqr iʠE[ޒC_G֤3iRԢ"a)HtѼeFӔZE9NZi A=(S!NSz42BLg4gNF(Zو5X6tܮ ^",R2֏Q#P맦 Iݍ]KԤ㞦!NRӞ 5>Hjux&7{.h,c.nuO"ykK>OS*]N|}P 3빆$bXWT2u965:uJJߓW hV{@K#z;`L9$LH6n'u/[65IToNLg=Ik7d}D$/L9&HWŢï$iՂNt,Iڭ>Cɐ5FLs#iMR_aI-/},Jq5[>t@'t:J8bt6ϢʷP80A-lG$-*K4CC t)OdJA!UJOIu2gY|fLpZ!/ E#iHmHwZ2?cs#\p_JkԙәF5KoUY}kz.ܦްW^!ݥ~7@QD9>8#VN_fG?_@>is4Xd!IV6a~iJ=ԷcGЅ)vF4E}ZnԞGjɕF:J1u @',ƺƭC#,>HQX1㚒X֜wD|dsi4ѥ4vjeٛ[T앦WS}:NQ71Mi)c&f͚ϙ~f?)[S47{>M[diru@[Qۺ~P9j:p: C*5N:fYMEY>;UPVϗLS(%jd5]ͬnV+MSguoAXקRiR EsUlc$ =M_t)X^, 7YKHY YϗP6 5x@Q&=z=a^sKHYa2 'Cfs4עXRMYWԾb˚be>b}{Ӻa,^`GygVU4Y2_3*nf.8fɘ^a%r>zIߢV1,Fnʲd MhUR]9MЗS؞i{g ʳ>=퀪rfCW#DA!s0[G8''4g ! J$L"j~x# )#Ǭ<;eY2 OdפQPh9WU 7:{qsZwmn SewK$n6BwI~//]xұXZ*Ta?nlk+~>lZ??lʇakhۇ‡D[ai+}>l?lm ۪Wme[f5>lmmB#u7k h;d̆{=_u?`L3cv̘^cv~ޘ=fߵ|`c139Ϙc2[9kO9˜ƌ9}cĘ 7w5~ޘǾn+gcQT:jU3Z#i7ΜgYiݮ5^#nZޖc%;.8W=ka[w_Dq LWW6΋w^+6;29͸ŀe\~/m~ݸmWaܾ=.qʴ;7/5{ȸpO̸۽yyNl'23-}@{U&P|ʧCF)lX21O\79o)BL{>})촋)|vLa‘±5SLwL·67]` Wͺoe_2&1:˘dו3<@/N:Ҙ321:t6px[4Φgwv<2|8=e/K3s.UsY6d쒷]۞yĸĸ+oW4q>|qﳏՋL^688M3{’kMISmøv~ܘ/_91'pǁcNg"uy\w5rf]%o?o0Og9 1S~v<š1ObSǍy{" Dk̶U:y[ {YT㬳./g3ŗi`&ض=Xc9쀌?}q>qet|8`g7c-kwyqc0L887/{5Ώ33pۍEw9>qsio˟6ύ[[۸+`ܕ&б&n>}mn>͉is;y ƍ1nq?uvݧ6tۭ߸{,.0>wÍۿ8V|=yBfcޣ .Ӷ5휭{ƽ 4śq6M׌{+swNTG}q?~߸wָb kQ#w\1+Vr4t|d-~:5&|Ҙ杍iט3=o4Ϙ1:1ØS/1R9ǀ-keƼ/=2{WNA!Usڍ5gGB];77>1tnjs.ƹy6qCx]qo^ķ}yoyܧ[׸+nܕM;l[3{4Ͷ Ҹ]cܓi +{')hyI~ո7^DV= n_onu~a?0cWd \K >loc> oB̵)>| o;zuw=+{@vK38#g]Wsr;8J73-_6!v?08|.cyëB̅Sg3v<|@O|Nqq~pqn n݃y ~9ɋw'7cwW[w)>z|;r8._6Lb k;s<^l̊Jme5ׁwٍ/6 4oŶ:<9ս|0|ksO/c#ˍ}'-y bm63ζo5NX'>+ֵlqv'>co}ELj G4Rp@b*簟⑿5Q1щ1b}bK|bIbQWW#osnb}~bb^a>fÃƇ98OG><|^"yOrk{_N4jGwaĠ 6|c~cˣ6I`\sb\Nobmr;ؕuwb=7ɢyS189áW@d]%\8eicfĝs>[aKܒ ]نkSgycy{_y{˛k5`쁘$ⷭWM~7ƙw#nv튾;;{?p*wEÍӏs[-AڛG<~܋y;kWt[7v9Wӷ}}E/p^ƼVX\C8V{3Gm#&.{xj;rKX( N_#:׌t*|#5W'Nk{ѐf=[ 6`Ϡs͈ S.-u ۇ1/bb8ˌs4r z,>q惿 vyׅ50+nۘ~iJv1lU?C}ߴO7ueUphuwBg˶lܚ̷מ6NrmYJs||,۟kНQ 3{8r">˽'q`Y767[w /*w/'d] |՘]6oհtU6#1N? NŞwoϾn }>}у9ՐF _et_ n: zx.}c }Nunj_w?=a?|^jߙ~W^rJEV|}ց_lH1 ? 2#fH Nd͍3 {h 898rs6}:٠' s>1ʋ's_M\~ `݌qϷb})^sh?3d9_`ÿ?r?V$_"?ՠ~qs9 ġ+[N66.dcmEyh[9_̛wT" v _)mEg:yK,5yoPfBejQxM*`M޾vjWx>og&oo{ |]ǡױ[6xq;. w޽oߖ7\yfr4گK\6~7YBgq"RF7JG;GkVoFa8os6>lޝ؎<}%^E7For,1b#{ `+B{Sⵇ65Q]'AJD@`Z4dT%}ք7k#Ӎh!Oxօlw>X 8'^,xnM,D|21砋.Eb~,9n&!JqyVkHc?U䉿9Ŗ%[;ӏO6 mmI~b=>C˱`~ɍ&=dbm]^Hzyb{ /<Ǒ/-ӗs^,9ҖS\jGO;nNp0b>_,Byy$~48} {"qp@WV"F^ m}=}d)8˞7bK$Q;5;[TmG.<1ӱudSS?so]Ȟ/w.ȅy{bqد~ 5b7ɿo#y)9!4\#&7 ;=?yK:(x>fpqK& tz>yV#Y)[sf[/$%n']k.I2?A%a_OMr츝󳰓OƆOY#S/}qU\~#>zv5u]=M, nF.w ӓ >oL;x|1{#{%Szq(yٿzx\dwoνy|⓹/ޞXih*=n-E_Ͳ373{:;rU%ino¿C8Ǫ9y0^#^םn6z|Mjc5쏯̊ ;툭}P|x jz{<ױG.?b LvsO&%ƭЏJ& vq1)|2=HO!ם%a]b6n-{ uO&=|v<y\XI_]Ͼ|_7&[A`]9<ڞǤ>? ⊹ ^?Vx8k/>ռm/? mCܻy=~C8 !mD4c-̼ FJSN4 ЁmQ5¿;Lܑ}5?;a-a]`^[s=N^Jny<}>ǼI|-2x"X ,rM6%m+3h2N+<voqc%$ZּQd3J^v(u8xqy=񲛦~.&{}d fM|/1oM_=aw/@̸26T|> mʬu1::`q^ޤoUۡۃ}'}'o쥛53;r,&n |u?GnG-㥣1Q92zd~p)^;tAb'O:4|WЫ߾o#X4Րk_ d_<8ooPys>~g\xxjwۚzP[ /s?H_JCwv@.;4#6tئqmv /u=}>{9 vE{#-猑oT^_).xQ1oy~^p lwr?|In~TX _Sar=XdO~ }Nr=tqwwdv8yytq_&(-_$v '79l򏳱o+8+t'?R [^=ٸ?4nǶƝgRwdߕ˚YsyO}?צzWMg?O~߮p -M᯾u䭽￸*N~}7mڶ{tf]O.ztێo1k5}C.z4u]o;w:m:G?{k՚.u|-tC\I}hC.` GM^C)g_4ksKӕ{ѳL]|ӿ:kMw߯uJt̵o

o'g]^u:NiMwfxz[eMW޽{^|_4+?SxCf 6S<3ٛoΓ}}'MoX{IA}k/oj:9cf]c_/V}.9ko%4YctXMȶS~_=+~|? 'Mgn3 Y_U}b؊b ,@E:gM J؊""ߜ{/3{ܹ眽Z{|4sPr Yy"wC| ;B`>LpĕRl t md\4T_q%ddp =/| Iw̆|Hs+[;~VLXTg:t&=nѿp>#k`g՚[ZY*WiQbrӵ=C~ OGN)D~{CUDI**s} sj XRz7=pO#͡<c+F4܌l_b؄WBO[. K [G5e!;!3%\TuC\}s  vuw5Ʉ0E3.0qֵB /H vX i D0%N{ \wCÿ3i.gf ;% mCo*逴Eh-)=VE{ z72Dcˤ/cnҍ9xuD}XXzAqw~^6:r$ e磿!igu.ƵamӪ`mۧמSfF+w[dlLnh5ޓ A)btWD0lbWݷa[QANQ D: 7×ƣמ%B\={h3$5xAh%3]}y;WtADZ ?zaKL8OC1V5YuGK> =ig~<<ǾX\3R_qrMzL0Vc޲Bx8w{.ϖC6# a%E~W7iw#{yw\-Zysfps't"S tT&!!1QO2q$]݉oJNF hmxj" d|M1}.!{+r,h$MEE[+G 1ҼL"1u.{=x6~0nk0˦E]ðVQ$\ ]>(h:1ڿazU"a܊X;~دn1<35l/-,z^df+r]xcR'L2$uԆ1dD5xFJ,&Ջq snڮن0']:[C`=l\|J-LdG1^ ;~ǿ.*uy ֬W /.-TG/INUЏkmwW1F`cD= BL^tz}ex 8:ޖzDr:M%L'rz7 g0߬X2vjCQNMaPߴt9y楼 hȑȎ֜q0\Sn5 z[Tzpj{ܻנ3R°2+Z`č>-c/}~ .N>e(Z}T.E,ʁOԷBܩ6ClZ`PgGR MifpW,oq&J$7>0ÿ|ydW6뮋'riC yÅ=}bߪYS7-WLxծ:g`6wtIwvKq#^ɤpy}RCL7acPGf } {Vq rAForLa$S;1By_bΐIc'a<+Z&Ew.~9#&;%p&>h<9hck);̀HJd4|7x͚<Lm`D YO֊*BS2ԕ%G7M `Z0<61vq "r]vUHtӖb1R0g7&L<,8yaIEX{¬|޺zy|&] ?^/G徝0+rC* qr{[IOX|bIXpWǎ7QvzaGڥC0w)۷b7<")e9)kRE|CӐrg8wNDFMՁO1@dD$d[D_/ O$(<"tB9΀GE3O/ Tw&YW ^4|ԬFȪ1Li(Z(SLX)Z]q cUME{IiOy%4Pz y#)N>p戏) Fnf4`/).1Oˎ L-17Oizj e*zVT5`3ԁ^ TxDDK̥-(OA Qadw*-Fϣ!fQg6U2'Ny0ck*w:dj d[ ?eqyyqMPZX)*r}U ‹;!k.I@J,^z9  RGc&]_bJ*h0^Ѥ )756$C꒭[;BݳxKbnp&nLXw"^8w_/ ЉIFY%RӒj{%DDR}x.:'YA-w~f&MK9$3T`&G <3,{mXNC .PO+0!;!}\u$pLM>] T=1aI:#co]6[ *q?y/"h.e_4I¸qoàmG'[|ņ? NVAx"GpJ̳!)p{ay.Rj7-,?EaSMC=r{4ܛ eA[BM :lU Bΐ@Oa*5帩30<[^}Gp &TZ,$z7V:ӯ U,H~3hD>D9sFWs-y`\h[6TR=}v«ZӉorF I`E#K [gzƸvL Cr&yoy]I__\Bo\i$b y֊5Eؗ _C(B__#G}lI:t3Ňљ~4U6k$S:VW^?E[15K ڍw /.Ye:38=WTi}Rfu{"07u/FTwi4S( ]89MHc& bSJ6{I*='G/gؕ`/5C! TM}E߯8lQ;n˺t/3;= ²L@80͔q9 jL}I~23^v8\lzO Ʉ"ߎ>T3 C.ȩ'_\~.:LF<1Ąwm>q {}ABxxSS~I4 MG/ncH*| 1y+e0~nbzP(ƋhM !o܃5x=6x1t.kDw0ڇ0j+xf^c1A :^[h"a3o1# /oŢ#Zq3#`< Njx.̢#8O.-$[a4 0ì16q Tl(HoIp:݋a |(gt|Ҷ8RbcBǓ6¥N"8.~ѫdAvߘB,"},, I?H34߃K"?7ʤWgcUjC؍cZa{9ݓ7Y=&rzџ=h[c,,DSI7VhB& y*&"rxy| )I\7*٘ 0/tvM14AGBvc^dYy7&C0)w>a͋l/V:V:dpiÃ?UkIjrkerBiHlfGd~Vm⇧`'* *U{5՘Hv nәG5o1`?o>E&m@N5l ZaK~W'b\Lzxՙm,K?K? חƈiZ/lĖ•f@Єo!eL) ?tUWolcSwI]"!?80E!*IrqIa${ui _*z"suk0U-O;wN.DŽAXO0nYLrRΩw xJZTKP21.a7'.+#!MMѝƽLdK1yc_f!p"m86NinK[C=SK 8xG3wt6{<2Qwy3BkS߲11!Kh1tO4u hg.5ͫ룯nD1}@Wf)@3ww/~}qnLP_E)$hqve ~~.w VΆw{OqД E]*#=?_ihάkRʖ>U / M/3<4fnP7<[U;a|FD>(ʋTY2 r.2$ ˧ng~>&ro AooU`)^l9RH?O&cГ4^ )r~˷<5#ſ Mk=7AfɚkaH#L;E_;%P{>JK̠Rv]I^S\fj7pPY 1CF)dG6~OIL A`~:0n%bywon[.`DZ O~JPp|& U\R6ޟ2 nEۿ !_CKLddz#3Ń!Ʃ罭 Ӌ 14c>!Yr@3c=mx/,`o7>U%XQyrFPr4sY}\䈑*^Ud>b-Jy"4S0t`*ס fbۭJԏCo]P_4v14[I 6k2-TCi_NJF1<ޅ]zv2%®Ǽ 28'^QV8B},7j#AR^+).b-Z';ؗEK_YG(d˞u\,G !CqxZu(fY}/ny ү%b/޳lpŇ{4S*<oT(F'n2q~T7UFFNDqǜndIHgI `]6LSe'è4 &0K J2+wb<%Fgg0O"Q+bmzvssV ,V_AP^syqFvǬӐQ{(Z\ *pL';F-L@%;{RN?ں!L9o2t͡ #;f=U~A/SeP,`f͟^t71=W; uL ܏<A/2& *>l"}vNww2֍}lߟ!IρҘ:OJr|J #RDCƻRYc K#yi@ `3ӡIPƫt^UL]8/dC;5`$v.B[ \;-uB5g(~.H՜iC+3kCe,1 tsS7`ㄟ3P>7Ooړ1*CiO+l]Eʱ ǚؼev{0@A~6G1[uGixȭO>+NA% qژW6&Cî7&1zgOL`{=; h IbJ ?vpv{4Iu΄Z%ʛs]leru@lELgx̐:Ek[PwǾIv5n\;ǏzxϾt`ӷrdYw`A3ul`GvpdX5#(l/-'- <&VyQDx? <(e t?=WBi=קP#rh]fHPWگd<5JYy-W8G4Cc25s7kty@]]\>hxc>o'BgR!Le];bDnL5ώkP=O^t) z65%e"Ọ}<=Wj-0$Obؚ?”3w[.R_@/yȂ\k-`dxK>>=Q)p^wKvcqEC%5f UЊuӽL0K!a=>186Ljή=-#fPC[4y 9lSl;0z/O&.&SaBbx*CaW7.|ö)72OM][Tؐ2\D" h@XD/"^xx&j_*?GF?>_;P0bmآ, :9#<ʏ붎w/34C3Fߔ@329| A?@WkH ϡd؏-m-E4Lx(~wnY5uр j*<C șL=`lG~// ( OUbAUBٍ">hf3I >YWBvtǴb#ӣvswAVdԱO4k~AGi{;CZjNb:+Bh׃Sutg۱Y;w(7D >$Sl^wN#1rf_ $ \AxU_#bGoFCP,.`3L\;n6An ):t*Rq1D(A1>Z˞I4~E=ƥAQ,w:pm"QRU|qL :*y#oA땗LLۧB? 1t21*;٥LАSl @6<ܻC)憜=_-?wADII=PGH0oYh[QhVNjR8#Em!҇<$[μ3$Ӽ fv8XQ(Km&c z-P[atɌo3}m8{bw`B-KXּIs0]$=VaY| $9UmT0uXKt0u叒W nʱN13`Rlx`M('R)~ ty6pp=_3Bѓ7GF۩;Lx*1Z.I3R=fI& hZ1z"ڿ !=#9 2ݲ(c+E*=Ѳv/o,&|{DG.ٸmƥƑy4? 얮§G !+bv.-N9eS"p1;Tad1~d vC{#zx V]k&1.%L֫s|;}VrW4'jx &5YT4l.}QI"xyP6㨿bq-Pީakbߋ1+%b#8D X ~Tc.U8O1+!dC8e Ѭ1)2lEpfC2َj'φY˗HVW Z }8W(N<0:*O2yc+#i 6 1R]׶oGNrz뷉1v1;z e~x~Bbt:LǢdKNɳ%q^\<*I|)-x+E'8 icVga!<F-`AnGEmn [\wׄ:༗8hC A=j'9E0U!a>SF-/SjM"uL8ǐbh)e|=t]'z+^39EJ$hY3 i. i}yslp3Z~*|𤄎Ъ^=m`Hd.̌R'm]j Ihf t;=.xAk;ҕ߰ :J;Ȅh?e8mSh(J99>7>ՙM+9Ai.rR!th…w҄O ġdžP[3*ء{U{ @ǎAk앪]?2= 7,7ԮtbQ\En ;4Fb@3(2V)w't] Cr'B;oZĭx\):d4xB&~@N}QN S͡V8a# 2ws8R;Lx6jhpO+ɌEg 2xOϊ^G ח/FBU-B!ૂ۬Ï|2H\?+0@kȼ++{Sq^J59 }xsQFO1T"НFӛg07KG_~*uO9L'OaΕDH\k`\:ƉeG95`i>0L,T>zAw"UPG7pv·()DQ\WMo& it 49 '.F2 L8*{n!sj x]߹ eHXJj ` ^,ts-^ŶZ4'-YyݶȕGmn~3^WtVޡZ u.vBA2M&[q:+<۪Xh@B6_xQFʿlu@x/ԟmiCչMT ڼd%"P7dxhYFhBo~ D+3K;!I/wyI NVdQDhqSG׆CUJ몤>wo 9Yռ7y"4;I;w ^NҚqh,mޅ>_/Q /oO i{Ҏ@x jBQra&$/^: 3~cGǭ;6[^[L={]{b0` ͫB㯰bؐ Ր #L]{%VvqL㡤i}E ͊)y..ѻ2G0yvH!soѶS0ZD㽇ͣDg`mǧ͔aApǤ7 khmi~K bhZy VsCz#yOkbV ѣ.f0ȟ@ٗ6b %l]7^[eZW+%́@|U3%|љLUۏ']" VwB !L <[ȍϐL搱m㰑!cw8% `137]Cy dsY]h"q 6~ #U`PC u F s0Gl1Jn9XN L,h~ [FE'f~K(j U$n R,!8Wt7hH_?a"Ճ>4 }KBꚕCs(83FF7oD炼sN}FHʌN0Ş׾+;Zv`!柸b/HL >8#NL؇YBSo59oJo}Lwjt!YFpfE ͮ*tzt%*TrƂbl@cFTDdO) Ml F7ɲxͧB| c%kd,\ 0:brx{#țh{_T#:9v ص?3ᄶˁ8uUЃ} ˃WC殹1WH;OOk5YXs`R(ף C 됼=_E^HEd/B%Ⓝj|3,uuX@,q"؝6H"3稹$Llu|SB`Y/?/SȝBJ:Ө'1jjzcȥ))Jː=͊A hРs9+=YKAk|d q9Pci]/f uh&, mV(Bxu˨0qva>+>?$TZGMVuݧE̮=͋fpg=qA=ȧAL)e0{oD:OZa6ȡ]81]:-S,SLT6Aca5i "Pbn/R/:c>}hnjNJC1qT_B}ʆ-.2jܧ$A w,c9`_bEO2I'D&9V9@O?VZ6u8VI\oSEgřzUdRxS;F"cY֧boeԐkB!>N#MGv#z9-M1:dz0"!c=a8Et 1>'XudmۊX 0ۄ%d:#λH.b?{_;ڰXY(>`.QYUt=g'԰D XAو%ڗD"ӏID/b'k$~!^>)5]f.vL4v:Q cFj?bgbOv<}_-R-+K I.;oe`0y,E_uq$ʜ=,jyq鋹IR{;<i^Zbۃ;: d=1Dz Q'nWZ;V?>:撲G)F2v9-ҊL r)~'e"ҎVteM;X}݃.RzA{K1$>7&;w@eDfsk[:^]w $wkb^1"&Q>gðMBV6e8|e$c5jg#׳ .dgFaP"y@g.b|ñt];$i5cg4I4~D\J|]=(/#o%A<3i=$nUn*?=#xKyVtB֡ Ѽ>QL|*m ՏgCM#Rh{jb)Oc% (XZѥolF*)C+C;fR5aQ0&&M1cdTo(yq`CC+$]Ԅe4y͵nDnmfGFDҤ)2jJtۡ?1krͮ+ȥ8V1z ^N}cЅueϝX2B 4tp.rΟL6_U ]i>c=(D/7:2d^g#O=x9ҪV|5N ,F&:sSxh2(Y2o}& Nޒ3pMWPP}fגDwo0}Gs~O ̝* XFa> yeK,FG@C'Y{17fEPB@Fj1pC.vA2}y IS F" Ne $Y>5opu͏0*< ̼Bdr p>uY-!8c>bLΙ'lo&{OӔthP1~fveVcQO1a] |H9"h#gK;}"jyL-XfED"TE.d'|^XdBMxP A%TO!1s8$H NLd~YX$˪yyBvw?l};8F=m9Jv |z>7zʢ.@,C($.#P1AW]nDSc!YbjA|οތ!W u6_EAn laSoa w*%Y٠Ä}Q:1g umъwg|.7<{/בu,1%159= =7K 4ͧA@iO%(]g [GVATЦ|1S22uU6&=W> pTzp*F<(AV!a* QehϢ:]B(%yB\~A]~8.׾*ܾYM{9w>}[9m_gwikK*wVG!mxUO{櫯rur96xW^zWuYpxmJݖ6W:\TE G[pO[WKҼyDڏzt4'ΎxUG)AsWnKq7>/uSzauW7+;$9s7pO?9G>>}2^) lt:%D߆8.Eu^;lێEhQbWUۗqݓOjb{ΥQnz܎ .Jn١pܐQUt]tQRlHqy|\f}gn|{:Z(ãF7=7Qrc.[/8gju#zDO]},qkw!E7?4νv^o=暯>'{}Gڿãn[G;˒>ՎnkrOwח^p+ud5>qswd΀+o:Z@Û9A\s?\پػ'ч. ~/ -OeD7I.-Nkumnz;\_u vINTzFancrV>?[|$nI_ VީϢk8޻8VUϞx?]dm>|Ǎ?7CzJ6I͹k|܆rEt|/ZuKqsIEٟpI21ޏxt.$Vv#qxWU/=vGx9a総=&ra2ߖޕ,*Y–˾ts=\ޒ/tR?5 ;?ujѴw O[~m/9gN-]zW|gt+uGTs%Yk>ύNO W O?\[ G\c=o(Jns?hR!gq-t&?[[w;g\MK g}ƿ :nurFæG~ޕ9nѓq"Z ?Ҏ>[EW<>9}҃}~&_umwU$s <Naym|3/zsǯliu~=pqkWO|?yɺ@+Nj$;.r\ϭ5|RzY^{6:Gh=Seux'=3^ʵi^`#9+ѷuiOO^OC\}boS&&7,kn)$ݧ/Ygp%sK~A'}_^<%j[vygm\r]tm[ı4YsW^nǥ}+]9k+N 5[˓&мۅRcO\YWUͿy eQr0 $xc|\{_;밎7.םǓSM : ~];l/dR+Z7y^ބ7GijxR˗=_|,[o)ol|Gwl>ʻg̋v}yh79k^ !7G V\MN?|}ǿͮ,j۱54Z•soṋyboOgaOd=KW;nx^'}}#%s wQ|,_Ǧor74q_6Orsݢk=jn_T˸sɮv5>|AsH#J7I%./oDWA(Mi"ןs+S<ˉvgo yyWs<,U;=ѷg3p`弨gNф~hzitVTS>3뤟Ms腹|}گ|sڧ!nېkߺI5nƕ>osMroZ/mm{-Lx~b{_-m|N sĚxM`|nz򌶗ϫ6ʢv8>Nr+>mK~Ӗ.7Qnw+6V7'W닋l^uCMyerM** w״u??r<SAQ^qZ\{崯8+Lsr2;׌pr.k/-IG's$t8:_!4KW=u-~=Эcq1߭]|L閤66ď7uiU:G=/yN>ngŵRoW^}j^= {\p @[qa;mlkn~%\ou3[k>ʳysr+N}>Kjc yK2Ǐ'mM뢬-=?mp?yy^:iC6qҏ9XnR<[^Ήr%>}Cr#{M:t?XG9^s/% `&Q6<n.&ۍ$Ǖ< kuWK*Yr+_gOVR-qy0L̍9wǍ\^O4??Uh8yBܰ( yU&G^HϿW5ѴxZȟUG&Oҭ҆vc1^FǛCξ w5W۽X+ nQ<%}Ҹ=i\>>ӈh Rnr::orIN+iQ7\}EϺ ^9'8JIN\yQo6?[&?}|W^:p>\Xrd4ckz<˯{_ϫCOƒB.>[h |EB_C3I%˟؟Ouɾ&/eЏo3ݠwyq\7$s%Qlto:٭Vܖ[OO&vh ]\C4 \qIq1IuӴF+{-M΁U5v ҤN<-X~? ٖws&6>Eݞ [O;yܯ֦}Fo[1i_|Ӧ{-^ViS~iS]ߪ~>y>w>OT]I2 Mعt ve ׷pnS/q{K/"}xie@.y<+;9ե< Mi۸wܸ8JyҮ]Dn]6ztW'=;ɼ^1pE.I}/Ǎ볿j4d7uG|PknS^]v]Opuf7<==9ʋh'4qo퉃nv4nf\_&Ne43W-q[yL1zusUB%z蘭7NIYsI)^ߘCצ'y_@굣3'tg?Ͼ{QOG}Á ['R_oxpɔvkx|;Xn^`w=.spo?˅scc积WE\շy꾛9mEoMy/ Cxe8z\6k1TinAQ# їN}toNz~.ū_Z/T-X hd8h­Jw݂Î^(%Ӽ1k6hs>]/wv/DBk'sG.h]~W'tGΙa/w'>eɀh=o[|{f#WsYg7īqYr/qi܆+g4/4,YQ Vr- s~nCsp)RSeQqUCoΌc\~=7G\ o;2o:,0-4~⧯) M o\J<{`\7vv֋w>op%Aቪ<}+Mm\Wv\q}WwN87</j}GߊDrhM?>Uy>]Έ<{vTF5}>dȽvuͭ~xϿ{DtqS?ק8G5IDXW;SVOzE_xg}ԉ Nxaql=/rfq}gaWWn>d?^tRK;줱\Se3][71]|.HH/3 &nSvW=uݯov/?=N=Wkxyr~14>/7|yc'%jG+>(s z\ZwsU,ȑ'l{ki!g$=Ys݌9W+IQ,YeGolՍ_ׇ5~׎$?{_dN{>YK/;>y%siӲOs7}>WpEڟ_*;劢;lʭ&xF4&oxUƬEI]!ޘpiƙ wKz>.z==>sr#Sx ~kv]xq];?d|^M >O?^r*ws&wlr6wxgdW^vEٕʮtve+? +]e5(AY jPVՠe5(AY PY PY PY PY PY Y Y Y Y Y 0Y 0Y 0Y 0Y 0Y ?g5~VjY ?g5FAV#jY d5FհY հY հY հY հY aV#jY0f52 aV#; RɥK#\riRyR͓jT'u}C]P7 nu@P7ZkZkZBP7! nuCB]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"+"JW Rx+^)JW Rx+^)JW Rx+^)JW Rx+^)JW Rx+^)JW Rx+^)JW Rx+^)JW Rx+^)JW Rx+^)JW Rx+^)JW Rx+^)JW Rx+^)JW R4x+ ^iJW4x+ ^iJW4x+ ^iJW4x+ ^iJW4x+ ^iJW4x+ ^iJW4x+ ^iJW4x+ ^iJW4x+ ^iJW4x+ ^iJW4x+ ^iJW4x+ ^iJW4x+ ^iʀW2 xe+^ʀW2 xe+^ʀW2 xe+^ʀW2 xe+^ʀW2 xe+^ʀW2 xe+^ʀW2 xe+^ʀW2 xe+^ʀW2 xe+^ʀW2 xe+^ʀW2 xe+^ʀW2 xe+^ʀW2||||||||||||||||||||||||||||||||||||||||||||||||||**************************************************,xe+ ^YʂW,xe+ ^YʂW,xe+ ^YʂW,xe+ ^YʂW,xe+ ^YʂW,xe+ ^YʂW,xe+ ^YʂW,xe+ ^YʂW,xe+ ^YʂW,xe+ ^YʂW,xe+ ^YʂW,xe+ ^YʂW,xe+ ^Y*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B*B* No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A No'ȷ v|;A|?5>DNAcopy/data/cytoBand.tab0000644000175000017500000007502714136047041015060 0ustar nileshnileshchromNum chromStart chromEnd bandname gieStain chr01 0 2300000 p36.33 gneg chr01 2300000 5400000 p36.32 gpos25 chr01 5400000 7200000 p36.31 gneg chr01 7200000 9200000 p36.23 gpos25 chr01 9200000 12700000 p36.22 gneg chr01 12700000 16200000 p36.21 gpos50 chr01 16200000 20400000 p36.13 gneg chr01 20400000 23900000 p36.12 gpos25 chr01 23900000 28000000 p36.11 gneg chr01 28000000 30200000 p35.3 gpos25 chr01 30200000 32400000 p35.2 gneg chr01 32400000 34600000 p35.1 gpos25 chr01 34600000 40100000 p34.3 gneg chr01 40100000 44100000 p34.2 gpos25 chr01 44100000 46800000 p34.1 gneg chr01 46800000 50700000 p33 gpos75 chr01 50700000 56100000 p32.3 gneg chr01 56100000 59000000 p32.2 gpos50 chr01 59000000 61300000 p32.1 gneg chr01 61300000 68900000 p31.3 gpos50 chr01 68900000 69700000 p31.2 gneg chr01 69700000 84900000 p31.1 gpos100 chr01 84900000 88400000 p22.3 gneg chr01 88400000 92000000 p22.2 gpos75 chr01 92000000 94700000 p22.1 gneg chr01 94700000 99700000 p21.3 gpos75 chr01 99700000 102200000 p21.2 gneg chr01 102200000 107200000 p21.1 gpos100 chr01 107200000 111800000 p13.3 gneg chr01 111800000 116100000 p13.2 gpos50 chr01 116100000 117800000 p13.1 gneg chr01 117800000 120600000 p12 gpos50 chr01 120600000 121500000 p11.2 gneg chr01 121500000 125000000 p11.1 acen chr01 125000000 128900000 q11 acen chr01 128900000 142600000 q12 gvar chr01 142600000 147000000 q21.1 gneg chr01 147000000 150300000 q21.2 gpos50 chr01 150300000 155000000 q21.3 gneg chr01 155000000 156500000 q22 gpos50 chr01 156500000 159100000 q23.1 gneg chr01 159100000 160500000 q23.2 gpos50 chr01 160500000 165500000 q23.3 gneg chr01 165500000 167200000 q24.1 gpos50 chr01 167200000 170900000 q24.2 gneg chr01 170900000 172900000 q24.3 gpos75 chr01 172900000 176000000 q25.1 gneg chr01 176000000 180300000 q25.2 gpos50 chr01 180300000 185800000 q25.3 gneg chr01 185800000 190800000 q31.1 gpos100 chr01 190800000 193800000 q31.2 gneg chr01 193800000 198700000 q31.3 gpos100 chr01 198700000 207200000 q32.1 gneg chr01 207200000 211500000 q32.2 gpos25 chr01 211500000 214500000 q32.3 gneg chr01 214500000 224100000 q41 gpos100 chr01 224100000 224600000 q42.11 gneg chr01 224600000 227000000 q42.12 gpos25 chr01 227000000 230700000 q42.13 gneg chr01 230700000 234700000 q42.2 gpos50 chr01 234700000 236600000 q42.3 gneg chr01 236600000 243700000 q43 gpos75 chr01 243700000 249250621 q44 gneg chr02 0 4400000 p25.3 gneg chr02 4400000 7100000 p25.2 gpos50 chr02 7100000 12200000 p25.1 gneg chr02 12200000 16700000 p24.3 gpos75 chr02 16700000 19200000 p24.2 gneg chr02 19200000 24000000 p24.1 gpos75 chr02 24000000 27900000 p23.3 gneg chr02 27900000 30000000 p23.2 gpos25 chr02 30000000 32100000 p23.1 gneg chr02 32100000 36600000 p22.3 gpos75 chr02 36600000 38600000 p22.2 gneg chr02 38600000 41800000 p22.1 gpos50 chr02 41800000 47800000 p21 gneg chr02 47800000 52900000 p16.3 gpos100 chr02 52900000 55000000 p16.2 gneg chr02 55000000 61300000 p16.1 gpos100 chr02 61300000 64100000 p15 gneg chr02 64100000 68600000 p14 gpos50 chr02 68600000 71500000 p13.3 gneg chr02 71500000 73500000 p13.2 gpos50 chr02 73500000 75000000 p13.1 gneg chr02 75000000 83300000 p12 gpos100 chr02 83300000 90500000 p11.2 gneg chr02 90500000 93300000 p11.1 acen chr02 93300000 96800000 q11.1 acen chr02 96800000 102700000 q11.2 gneg chr02 102700000 106000000 q12.1 gpos50 chr02 106000000 107500000 q12.2 gneg chr02 107500000 110200000 q12.3 gpos25 chr02 110200000 114400000 q13 gneg chr02 114400000 118800000 q14.1 gpos50 chr02 118800000 122400000 q14.2 gneg chr02 122400000 129900000 q14.3 gpos50 chr02 129900000 132500000 q21.1 gneg chr02 132500000 135100000 q21.2 gpos25 chr02 135100000 136800000 q21.3 gneg chr02 136800000 142200000 q22.1 gpos100 chr02 142200000 144100000 q22.2 gneg chr02 144100000 148700000 q22.3 gpos100 chr02 148700000 149900000 q23.1 gneg chr02 149900000 150500000 q23.2 gpos25 chr02 150500000 154900000 q23.3 gneg chr02 154900000 159800000 q24.1 gpos75 chr02 159800000 163700000 q24.2 gneg chr02 163700000 169700000 q24.3 gpos75 chr02 169700000 178000000 q31.1 gneg chr02 178000000 180600000 q31.2 gpos50 chr02 180600000 183000000 q31.3 gneg chr02 183000000 189400000 q32.1 gpos75 chr02 189400000 191900000 q32.2 gneg chr02 191900000 197400000 q32.3 gpos75 chr02 197400000 203300000 q33.1 gneg chr02 203300000 204900000 q33.2 gpos50 chr02 204900000 209000000 q33.3 gneg chr02 209000000 215300000 q34 gpos100 chr02 215300000 221500000 q35 gneg chr02 221500000 225200000 q36.1 gpos75 chr02 225200000 226100000 q36.2 gneg chr02 226100000 231000000 q36.3 gpos100 chr02 231000000 235600000 q37.1 gneg chr02 235600000 237300000 q37.2 gpos50 chr02 237300000 243199373 q37.3 gneg chr03 0 2800000 p26.3 gpos50 chr03 2800000 4000000 p26.2 gneg chr03 4000000 8700000 p26.1 gpos50 chr03 8700000 11800000 p25.3 gneg chr03 11800000 13300000 p25.2 gpos25 chr03 13300000 16400000 p25.1 gneg chr03 16400000 23900000 p24.3 gpos100 chr03 23900000 26400000 p24.2 gneg chr03 26400000 30900000 p24.1 gpos75 chr03 30900000 32100000 p23 gneg chr03 32100000 36500000 p22.3 gpos50 chr03 36500000 39400000 p22.2 gneg chr03 39400000 43700000 p22.1 gpos75 chr03 43700000 44100000 p21.33 gneg chr03 44100000 44200000 p21.32 gpos50 chr03 44200000 50600000 p21.31 gneg chr03 50600000 52300000 p21.2 gpos25 chr03 52300000 54400000 p21.1 gneg chr03 54400000 58600000 p14.3 gpos50 chr03 58600000 63700000 p14.2 gneg chr03 63700000 69800000 p14.1 gpos50 chr03 69800000 74200000 p13 gneg chr03 74200000 79800000 p12.3 gpos75 chr03 79800000 83500000 p12.2 gneg chr03 83500000 87200000 p12.1 gpos75 chr03 87200000 87900000 p11.2 gneg chr03 87900000 91000000 p11.1 acen chr03 91000000 93900000 q11.1 acen chr03 93900000 98300000 q11.2 gvar chr03 98300000 100000000 q12.1 gneg chr03 100000000 100900000 q12.2 gpos25 chr03 100900000 102800000 q12.3 gneg chr03 102800000 106200000 q13.11 gpos75 chr03 106200000 107900000 q13.12 gneg chr03 107900000 111300000 q13.13 gpos50 chr03 111300000 113500000 q13.2 gneg chr03 113500000 117300000 q13.31 gpos75 chr03 117300000 119000000 q13.32 gneg chr03 119000000 121900000 q13.33 gpos75 chr03 121900000 123800000 q21.1 gneg chr03 123800000 125800000 q21.2 gpos25 chr03 125800000 129200000 q21.3 gneg chr03 129200000 133700000 q22.1 gpos25 chr03 133700000 135700000 q22.2 gneg chr03 135700000 138700000 q22.3 gpos25 chr03 138700000 142800000 q23 gneg chr03 142800000 148900000 q24 gpos100 chr03 148900000 152100000 q25.1 gneg chr03 152100000 155000000 q25.2 gpos50 chr03 155000000 157000000 q25.31 gneg chr03 157000000 159000000 q25.32 gpos50 chr03 159000000 160700000 q25.33 gneg chr03 160700000 167600000 q26.1 gpos100 chr03 167600000 170900000 q26.2 gneg chr03 170900000 175700000 q26.31 gpos75 chr03 175700000 179000000 q26.32 gneg chr03 179000000 182700000 q26.33 gpos75 chr03 182700000 184500000 q27.1 gneg chr03 184500000 186000000 q27.2 gpos25 chr03 186000000 187900000 q27.3 gneg chr03 187900000 192300000 q28 gpos75 chr03 192300000 198022430 q29 gneg chr04 0 4500000 p16.3 gneg chr04 4500000 6000000 p16.2 gpos25 chr04 6000000 11300000 p16.1 gneg chr04 11300000 15200000 p15.33 gpos50 chr04 15200000 17800000 p15.32 gneg chr04 17800000 21300000 p15.31 gpos75 chr04 21300000 27700000 p15.2 gneg chr04 27700000 35800000 p15.1 gpos100 chr04 35800000 41200000 p14 gneg chr04 41200000 44600000 p13 gpos50 chr04 44600000 48200000 p12 gneg chr04 48200000 50400000 p11 acen chr04 50400000 52700000 q11 acen chr04 52700000 59500000 q12 gneg chr04 59500000 66600000 q13.1 gpos100 chr04 66600000 70500000 q13.2 gneg chr04 70500000 76300000 q13.3 gpos75 chr04 76300000 78900000 q21.1 gneg chr04 78900000 82400000 q21.21 gpos50 chr04 82400000 84100000 q21.22 gneg chr04 84100000 86900000 q21.23 gpos25 chr04 86900000 88000000 q21.3 gneg chr04 88000000 93700000 q22.1 gpos75 chr04 93700000 95100000 q22.2 gneg chr04 95100000 98800000 q22.3 gpos75 chr04 98800000 101100000 q23 gneg chr04 101100000 107700000 q24 gpos50 chr04 107700000 114100000 q25 gneg chr04 114100000 120800000 q26 gpos75 chr04 120800000 123800000 q27 gneg chr04 123800000 128800000 q28.1 gpos50 chr04 128800000 131100000 q28.2 gneg chr04 131100000 139500000 q28.3 gpos100 chr04 139500000 141500000 q31.1 gneg chr04 141500000 146800000 q31.21 gpos25 chr04 146800000 148500000 q31.22 gneg chr04 148500000 151100000 q31.23 gpos25 chr04 151100000 155600000 q31.3 gneg chr04 155600000 161800000 q32.1 gpos100 chr04 161800000 164500000 q32.2 gneg chr04 164500000 170100000 q32.3 gpos100 chr04 170100000 171900000 q33 gneg chr04 171900000 176300000 q34.1 gpos75 chr04 176300000 177500000 q34.2 gneg chr04 177500000 183200000 q34.3 gpos100 chr04 183200000 187100000 q35.1 gneg chr04 187100000 191154276 q35.2 gpos25 chr05 0 4500000 p15.33 gneg chr05 4500000 6300000 p15.32 gpos25 chr05 6300000 9800000 p15.31 gneg chr05 9800000 15000000 p15.2 gpos50 chr05 15000000 18400000 p15.1 gneg chr05 18400000 23300000 p14.3 gpos100 chr05 23300000 24600000 p14.2 gneg chr05 24600000 28900000 p14.1 gpos100 chr05 28900000 33800000 p13.3 gneg chr05 33800000 38400000 p13.2 gpos25 chr05 38400000 42500000 p13.1 gneg chr05 42500000 46100000 p12 gpos50 chr05 46100000 48400000 p11 acen chr05 48400000 50700000 q11.1 acen chr05 50700000 58900000 q11.2 gneg chr05 58900000 62900000 q12.1 gpos75 chr05 62900000 63200000 q12.2 gneg chr05 63200000 66700000 q12.3 gpos75 chr05 66700000 68400000 q13.1 gneg chr05 68400000 73300000 q13.2 gpos50 chr05 73300000 76900000 q13.3 gneg chr05 76900000 81400000 q14.1 gpos50 chr05 81400000 82800000 q14.2 gneg chr05 82800000 92300000 q14.3 gpos100 chr05 92300000 98200000 q15 gneg chr05 98200000 102800000 q21.1 gpos100 chr05 102800000 104500000 q21.2 gneg chr05 104500000 109600000 q21.3 gpos100 chr05 109600000 111500000 q22.1 gneg chr05 111500000 113100000 q22.2 gpos50 chr05 113100000 115200000 q22.3 gneg chr05 115200000 121400000 q23.1 gpos100 chr05 121400000 127300000 q23.2 gneg chr05 127300000 130600000 q23.3 gpos100 chr05 130600000 136200000 q31.1 gneg chr05 136200000 139500000 q31.2 gpos25 chr05 139500000 144500000 q31.3 gneg chr05 144500000 149800000 q32 gpos75 chr05 149800000 152700000 q33.1 gneg chr05 152700000 155700000 q33.2 gpos50 chr05 155700000 159900000 q33.3 gneg chr05 159900000 168500000 q34 gpos100 chr05 168500000 172800000 q35.1 gneg chr05 172800000 176600000 q35.2 gpos25 chr05 176600000 180915260 q35.3 gneg chr06 0 2300000 p25.3 gneg chr06 2300000 4200000 p25.2 gpos25 chr06 4200000 7100000 p25.1 gneg chr06 7100000 10600000 p24.3 gpos50 chr06 10600000 11600000 p24.2 gneg chr06 11600000 13400000 p24.1 gpos25 chr06 13400000 15200000 p23 gneg chr06 15200000 25200000 p22.3 gpos75 chr06 25200000 27000000 p22.2 gneg chr06 27000000 30400000 p22.1 gpos50 chr06 30400000 32100000 p21.33 gneg chr06 32100000 33500000 p21.32 gpos25 chr06 33500000 36600000 p21.31 gneg chr06 36600000 40500000 p21.2 gpos25 chr06 40500000 46200000 p21.1 gneg chr06 46200000 51800000 p12.3 gpos100 chr06 51800000 52900000 p12.2 gneg chr06 52900000 57000000 p12.1 gpos100 chr06 57000000 58700000 p11.2 gneg chr06 58700000 61000000 p11.1 acen chr06 61000000 63300000 q11.1 acen chr06 63300000 63400000 q11.2 gneg chr06 63400000 70000000 q12 gpos100 chr06 70000000 75900000 q13 gneg chr06 75900000 83900000 q14.1 gpos50 chr06 83900000 84900000 q14.2 gneg chr06 84900000 88000000 q14.3 gpos50 chr06 88000000 93100000 q15 gneg chr06 93100000 99500000 q16.1 gpos100 chr06 99500000 100600000 q16.2 gneg chr06 100600000 105500000 q16.3 gpos100 chr06 105500000 114600000 q21 gneg chr06 114600000 118300000 q22.1 gpos75 chr06 118300000 118500000 q22.2 gneg chr06 118500000 126100000 q22.31 gpos100 chr06 126100000 127100000 q22.32 gneg chr06 127100000 130300000 q22.33 gpos75 chr06 130300000 131200000 q23.1 gneg chr06 131200000 135200000 q23.2 gpos50 chr06 135200000 139000000 q23.3 gneg chr06 139000000 142800000 q24.1 gpos75 chr06 142800000 145600000 q24.2 gneg chr06 145600000 149000000 q24.3 gpos75 chr06 149000000 152500000 q25.1 gneg chr06 152500000 155500000 q25.2 gpos50 chr06 155500000 161000000 q25.3 gneg chr06 161000000 164500000 q26 gpos50 chr06 164500000 171115067 q27 gneg chr07 0 2800000 p22.3 gneg chr07 2800000 4500000 p22.2 gpos25 chr07 4500000 7300000 p22.1 gneg chr07 7300000 13800000 p21.3 gpos100 chr07 13800000 16500000 p21.2 gneg chr07 16500000 20900000 p21.1 gpos100 chr07 20900000 25500000 p15.3 gneg chr07 25500000 28000000 p15.2 gpos50 chr07 28000000 28800000 p15.1 gneg chr07 28800000 35000000 p14.3 gpos75 chr07 35000000 37200000 p14.2 gneg chr07 37200000 43300000 p14.1 gpos75 chr07 43300000 45400000 p13 gneg chr07 45400000 49000000 p12.3 gpos75 chr07 49000000 50500000 p12.2 gneg chr07 50500000 54000000 p12.1 gpos75 chr07 54000000 58000000 p11.2 gneg chr07 58000000 59900000 p11.1 acen chr07 59900000 61700000 q11.1 acen chr07 61700000 67000000 q11.21 gneg chr07 67000000 72200000 q11.22 gpos50 chr07 72200000 77500000 q11.23 gneg chr07 77500000 86400000 q21.11 gpos100 chr07 86400000 88200000 q21.12 gneg chr07 88200000 91100000 q21.13 gpos75 chr07 91100000 92800000 q21.2 gneg chr07 92800000 98000000 q21.3 gpos75 chr07 98000000 103800000 q22.1 gneg chr07 103800000 104500000 q22.2 gpos50 chr07 104500000 107400000 q22.3 gneg chr07 107400000 114600000 q31.1 gpos75 chr07 114600000 117400000 q31.2 gneg chr07 117400000 121100000 q31.31 gpos75 chr07 121100000 123800000 q31.32 gneg chr07 123800000 127100000 q31.33 gpos75 chr07 127100000 129200000 q32.1 gneg chr07 129200000 130400000 q32.2 gpos25 chr07 130400000 132600000 q32.3 gneg chr07 132600000 138200000 q33 gpos50 chr07 138200000 143100000 q34 gneg chr07 143100000 147900000 q35 gpos75 chr07 147900000 152600000 q36.1 gneg chr07 152600000 155100000 q36.2 gpos25 chr07 155100000 159138663 q36.3 gneg chr08 0 2200000 p23.3 gneg chr08 2200000 6200000 p23.2 gpos75 chr08 6200000 12700000 p23.1 gneg chr08 12700000 19000000 p22 gpos100 chr08 19000000 23300000 p21.3 gneg chr08 23300000 27400000 p21.2 gpos50 chr08 27400000 28800000 p21.1 gneg chr08 28800000 36500000 p12 gpos75 chr08 36500000 38300000 p11.23 gneg chr08 38300000 39700000 p11.22 gpos25 chr08 39700000 43100000 p11.21 gneg chr08 43100000 45600000 p11.1 acen chr08 45600000 48100000 q11.1 acen chr08 48100000 52200000 q11.21 gneg chr08 52200000 52600000 q11.22 gpos75 chr08 52600000 55500000 q11.23 gneg chr08 55500000 61600000 q12.1 gpos50 chr08 61600000 62200000 q12.2 gneg chr08 62200000 66000000 q12.3 gpos50 chr08 66000000 68000000 q13.1 gneg chr08 68000000 70500000 q13.2 gpos50 chr08 70500000 73900000 q13.3 gneg chr08 73900000 78300000 q21.11 gpos100 chr08 78300000 80100000 q21.12 gneg chr08 80100000 84600000 q21.13 gpos75 chr08 84600000 86900000 q21.2 gneg chr08 86900000 93300000 q21.3 gpos100 chr08 93300000 99000000 q22.1 gneg chr08 99000000 101600000 q22.2 gpos25 chr08 101600000 106200000 q22.3 gneg chr08 106200000 110500000 q23.1 gpos75 chr08 110500000 112100000 q23.2 gneg chr08 112100000 117700000 q23.3 gpos100 chr08 117700000 119200000 q24.11 gneg chr08 119200000 122500000 q24.12 gpos50 chr08 122500000 127300000 q24.13 gneg chr08 127300000 131500000 q24.21 gpos50 chr08 131500000 136400000 q24.22 gneg chr08 136400000 139900000 q24.23 gpos75 chr08 139900000 146364022 q24.3 gneg chr09 0 2200000 p24.3 gneg chr09 2200000 4600000 p24.2 gpos25 chr09 4600000 9000000 p24.1 gneg chr09 9000000 14200000 p23 gpos75 chr09 14200000 16600000 p22.3 gneg chr09 16600000 18500000 p22.2 gpos25 chr09 18500000 19900000 p22.1 gneg chr09 19900000 25600000 p21.3 gpos100 chr09 25600000 28000000 p21.2 gneg chr09 28000000 33200000 p21.1 gpos100 chr09 33200000 36300000 p13.3 gneg chr09 36300000 38400000 p13.2 gpos25 chr09 38400000 41000000 p13.1 gneg chr09 41000000 43600000 p12 gpos50 chr09 43600000 47300000 p11.2 gneg chr09 47300000 49000000 p11.1 acen chr09 49000000 50700000 q11 acen chr09 50700000 65900000 q12 gvar chr09 65900000 68700000 q13 gneg chr09 68700000 72200000 q21.11 gpos25 chr09 72200000 74000000 q21.12 gneg chr09 74000000 79200000 q21.13 gpos50 chr09 79200000 81100000 q21.2 gneg chr09 81100000 84100000 q21.31 gpos50 chr09 84100000 86900000 q21.32 gneg chr09 86900000 90400000 q21.33 gpos50 chr09 90400000 91800000 q22.1 gneg chr09 91800000 93900000 q22.2 gpos25 chr09 93900000 96600000 q22.31 gneg chr09 96600000 99300000 q22.32 gpos25 chr09 99300000 102600000 q22.33 gneg chr09 102600000 108200000 q31.1 gpos100 chr09 108200000 111300000 q31.2 gneg chr09 111300000 114900000 q31.3 gpos25 chr09 114900000 117700000 q32 gneg chr09 117700000 122500000 q33.1 gpos75 chr09 122500000 125800000 q33.2 gneg chr09 125800000 130300000 q33.3 gpos25 chr09 130300000 133500000 q34.11 gneg chr09 133500000 134000000 q34.12 gpos25 chr09 134000000 135900000 q34.13 gneg chr09 135900000 137400000 q34.2 gpos25 chr09 137400000 141213431 q34.3 gneg chr10 0 3000000 p15.3 gneg chr10 3000000 3800000 p15.2 gpos25 chr10 3800000 6600000 p15.1 gneg chr10 6600000 12200000 p14 gpos75 chr10 12200000 17300000 p13 gneg chr10 17300000 18600000 p12.33 gpos75 chr10 18600000 18700000 p12.32 gneg chr10 18700000 22600000 p12.31 gpos75 chr10 22600000 24600000 p12.2 gneg chr10 24600000 29600000 p12.1 gpos50 chr10 29600000 31300000 p11.23 gneg chr10 31300000 34400000 p11.22 gpos25 chr10 34400000 38000000 p11.21 gneg chr10 38000000 40200000 p11.1 acen chr10 40200000 42300000 q11.1 acen chr10 42300000 46100000 q11.21 gneg chr10 46100000 49900000 q11.22 gpos25 chr10 49900000 52900000 q11.23 gneg chr10 52900000 61200000 q21.1 gpos100 chr10 61200000 64500000 q21.2 gneg chr10 64500000 70600000 q21.3 gpos100 chr10 70600000 74900000 q22.1 gneg chr10 74900000 77700000 q22.2 gpos50 chr10 77700000 82000000 q22.3 gneg chr10 82000000 87900000 q23.1 gpos100 chr10 87900000 89500000 q23.2 gneg chr10 89500000 92900000 q23.31 gpos75 chr10 92900000 94100000 q23.32 gneg chr10 94100000 97000000 q23.33 gpos50 chr10 97000000 99300000 q24.1 gneg chr10 99300000 101900000 q24.2 gpos50 chr10 101900000 103000000 q24.31 gneg chr10 103000000 104900000 q24.32 gpos25 chr10 104900000 105800000 q24.33 gneg chr10 105800000 111900000 q25.1 gpos100 chr10 111900000 114900000 q25.2 gneg chr10 114900000 119100000 q25.3 gpos75 chr10 119100000 121700000 q26.11 gneg chr10 121700000 123100000 q26.12 gpos50 chr10 123100000 127500000 q26.13 gneg chr10 127500000 130600000 q26.2 gpos50 chr10 130600000 135534747 q26.3 gneg chr11 0 2800000 p15.5 gneg chr11 2800000 10700000 p15.4 gpos50 chr11 10700000 12700000 p15.3 gneg chr11 12700000 16200000 p15.2 gpos50 chr11 16200000 21700000 p15.1 gneg chr11 21700000 26100000 p14.3 gpos100 chr11 26100000 27200000 p14.2 gneg chr11 27200000 31000000 p14.1 gpos75 chr11 31000000 36400000 p13 gneg chr11 36400000 43500000 p12 gpos100 chr11 43500000 48800000 p11.2 gneg chr11 48800000 51600000 p11.12 gpos75 chr11 51600000 53700000 p11.11 acen chr11 53700000 55700000 q11 acen chr11 55700000 59900000 q12.1 gpos75 chr11 59900000 61700000 q12.2 gneg chr11 61700000 63400000 q12.3 gpos25 chr11 63400000 65900000 q13.1 gneg chr11 65900000 68400000 q13.2 gpos25 chr11 68400000 70400000 q13.3 gneg chr11 70400000 75200000 q13.4 gpos50 chr11 75200000 77100000 q13.5 gneg chr11 77100000 85600000 q14.1 gpos100 chr11 85600000 88300000 q14.2 gneg chr11 88300000 92800000 q14.3 gpos100 chr11 92800000 97200000 q21 gneg chr11 97200000 102100000 q22.1 gpos100 chr11 102100000 102900000 q22.2 gneg chr11 102900000 110400000 q22.3 gpos100 chr11 110400000 112500000 q23.1 gneg chr11 112500000 114500000 q23.2 gpos50 chr11 114500000 121200000 q23.3 gneg chr11 121200000 123900000 q24.1 gpos50 chr11 123900000 127800000 q24.2 gneg chr11 127800000 130800000 q24.3 gpos50 chr11 130800000 135006516 q25 gneg chr12 0 3300000 p13.33 gneg chr12 3300000 5400000 p13.32 gpos25 chr12 5400000 10100000 p13.31 gneg chr12 10100000 12800000 p13.2 gpos75 chr12 12800000 14800000 p13.1 gneg chr12 14800000 20000000 p12.3 gpos100 chr12 20000000 21300000 p12.2 gneg chr12 21300000 26500000 p12.1 gpos100 chr12 26500000 27800000 p11.23 gneg chr12 27800000 30700000 p11.22 gpos50 chr12 30700000 33300000 p11.21 gneg chr12 33300000 35800000 p11.1 acen chr12 35800000 38200000 q11 acen chr12 38200000 46400000 q12 gpos100 chr12 46400000 49100000 q13.11 gneg chr12 49100000 51500000 q13.12 gpos25 chr12 51500000 54900000 q13.13 gneg chr12 54900000 56600000 q13.2 gpos25 chr12 56600000 58100000 q13.3 gneg chr12 58100000 63100000 q14.1 gpos75 chr12 63100000 65100000 q14.2 gneg chr12 65100000 67700000 q14.3 gpos50 chr12 67700000 71500000 q15 gneg chr12 71500000 75700000 q21.1 gpos75 chr12 75700000 80300000 q21.2 gneg chr12 80300000 86700000 q21.31 gpos100 chr12 86700000 89000000 q21.32 gneg chr12 89000000 92600000 q21.33 gpos100 chr12 92600000 96200000 q22 gneg chr12 96200000 101600000 q23.1 gpos75 chr12 101600000 103800000 q23.2 gneg chr12 103800000 109000000 q23.3 gpos50 chr12 109000000 111700000 q24.11 gneg chr12 111700000 112300000 q24.12 gpos25 chr12 112300000 114300000 q24.13 gneg chr12 114300000 116800000 q24.21 gpos50 chr12 116800000 118100000 q24.22 gneg chr12 118100000 120700000 q24.23 gpos50 chr12 120700000 125900000 q24.31 gneg chr12 125900000 129300000 q24.32 gpos50 chr12 129300000 133851895 q24.33 gneg chr13 0 4500000 p13 gvar chr13 4500000 10000000 p12 stalk chr13 10000000 16300000 p11.2 gvar chr13 16300000 17900000 p11.1 acen chr13 17900000 19500000 q11 acen chr13 19500000 23300000 q12.11 gneg chr13 23300000 25500000 q12.12 gpos25 chr13 25500000 27800000 q12.13 gneg chr13 27800000 28900000 q12.2 gpos25 chr13 28900000 32200000 q12.3 gneg chr13 32200000 34000000 q13.1 gpos50 chr13 34000000 35500000 q13.2 gneg chr13 35500000 40100000 q13.3 gpos75 chr13 40100000 45200000 q14.11 gneg chr13 45200000 45800000 q14.12 gpos25 chr13 45800000 47300000 q14.13 gneg chr13 47300000 50900000 q14.2 gpos50 chr13 50900000 55300000 q14.3 gneg chr13 55300000 59600000 q21.1 gpos100 chr13 59600000 62300000 q21.2 gneg chr13 62300000 65700000 q21.31 gpos75 chr13 65700000 68600000 q21.32 gneg chr13 68600000 73300000 q21.33 gpos100 chr13 73300000 75400000 q22.1 gneg chr13 75400000 77200000 q22.2 gpos50 chr13 77200000 79000000 q22.3 gneg chr13 79000000 87700000 q31.1 gpos100 chr13 87700000 90000000 q31.2 gneg chr13 90000000 95000000 q31.3 gpos100 chr13 95000000 98200000 q32.1 gneg chr13 98200000 99300000 q32.2 gpos25 chr13 99300000 101700000 q32.3 gneg chr13 101700000 104800000 q33.1 gpos100 chr13 104800000 107000000 q33.2 gneg chr13 107000000 110300000 q33.3 gpos100 chr13 110300000 115169878 q34 gneg chr14 0 3700000 p13 gvar chr14 3700000 8100000 p12 stalk chr14 8100000 16100000 p11.2 gvar chr14 16100000 17600000 p11.1 acen chr14 17600000 19100000 q11.1 acen chr14 19100000 24600000 q11.2 gneg chr14 24600000 33300000 q12 gpos100 chr14 33300000 35300000 q13.1 gneg chr14 35300000 36600000 q13.2 gpos50 chr14 36600000 37800000 q13.3 gneg chr14 37800000 43500000 q21.1 gpos100 chr14 43500000 47200000 q21.2 gneg chr14 47200000 50900000 q21.3 gpos100 chr14 50900000 54100000 q22.1 gneg chr14 54100000 55500000 q22.2 gpos25 chr14 55500000 58100000 q22.3 gneg chr14 58100000 62100000 q23.1 gpos75 chr14 62100000 64800000 q23.2 gneg chr14 64800000 67900000 q23.3 gpos50 chr14 67900000 70200000 q24.1 gneg chr14 70200000 73800000 q24.2 gpos50 chr14 73800000 79300000 q24.3 gneg chr14 79300000 83600000 q31.1 gpos100 chr14 83600000 84900000 q31.2 gneg chr14 84900000 89800000 q31.3 gpos100 chr14 89800000 91900000 q32.11 gneg chr14 91900000 94700000 q32.12 gpos25 chr14 94700000 96300000 q32.13 gneg chr14 96300000 101400000 q32.2 gpos50 chr14 101400000 103200000 q32.31 gneg chr14 103200000 104000000 q32.32 gpos50 chr14 104000000 107349540 q32.33 gneg chr15 0 3900000 p13 gvar chr15 3900000 8700000 p12 stalk chr15 8700000 15800000 p11.2 gvar chr15 15800000 19000000 p11.1 acen chr15 19000000 20700000 q11.1 acen chr15 20700000 25700000 q11.2 gneg chr15 25700000 28100000 q12 gpos50 chr15 28100000 30300000 q13.1 gneg chr15 30300000 31200000 q13.2 gpos50 chr15 31200000 33600000 q13.3 gneg chr15 33600000 40100000 q14 gpos75 chr15 40100000 42800000 q15.1 gneg chr15 42800000 43600000 q15.2 gpos25 chr15 43600000 44800000 q15.3 gneg chr15 44800000 49500000 q21.1 gpos75 chr15 49500000 52900000 q21.2 gneg chr15 52900000 59100000 q21.3 gpos75 chr15 59100000 59300000 q22.1 gneg chr15 59300000 63700000 q22.2 gpos25 chr15 63700000 67200000 q22.31 gneg chr15 67200000 67300000 q22.32 gpos25 chr15 67300000 67500000 q22.33 gneg chr15 67500000 72700000 q23 gpos25 chr15 72700000 75200000 q24.1 gneg chr15 75200000 76600000 q24.2 gpos25 chr15 76600000 78300000 q24.3 gneg chr15 78300000 81700000 q25.1 gpos50 chr15 81700000 85200000 q25.2 gneg chr15 85200000 89100000 q25.3 gpos50 chr15 89100000 94300000 q26.1 gneg chr15 94300000 98500000 q26.2 gpos50 chr15 98500000 102531392 q26.3 gneg chr16 0 7900000 p13.3 gneg chr16 7900000 10500000 p13.2 gpos50 chr16 10500000 12600000 p13.13 gneg chr16 12600000 14800000 p13.12 gpos50 chr16 14800000 16800000 p13.11 gneg chr16 16800000 21200000 p12.3 gpos50 chr16 21200000 24200000 p12.2 gneg chr16 24200000 28100000 p12.1 gpos50 chr16 28100000 34600000 p11.2 gneg chr16 34600000 36600000 p11.1 acen chr16 36600000 38600000 q11.1 acen chr16 38600000 47000000 q11.2 gvar chr16 47000000 52600000 q12.1 gneg chr16 52600000 56700000 q12.2 gpos50 chr16 56700000 57400000 q13 gneg chr16 57400000 66700000 q21 gpos100 chr16 66700000 70800000 q22.1 gneg chr16 70800000 72900000 q22.2 gpos50 chr16 72900000 74100000 q22.3 gneg chr16 74100000 79200000 q23.1 gpos75 chr16 79200000 81700000 q23.2 gneg chr16 81700000 84200000 q23.3 gpos50 chr16 84200000 87100000 q24.1 gneg chr16 87100000 88700000 q24.2 gpos25 chr16 88700000 90354753 q24.3 gneg chr17 0 3300000 p13.3 gneg chr17 3300000 6500000 p13.2 gpos50 chr17 6500000 10700000 p13.1 gneg chr17 10700000 16000000 p12 gpos75 chr17 16000000 22200000 p11.2 gneg chr17 22200000 24000000 p11.1 acen chr17 24000000 25800000 q11.1 acen chr17 25800000 31800000 q11.2 gneg chr17 31800000 38100000 q12 gpos50 chr17 38100000 38400000 q21.1 gneg chr17 38400000 40900000 q21.2 gpos25 chr17 40900000 44900000 q21.31 gneg chr17 44900000 47400000 q21.32 gpos25 chr17 47400000 50200000 q21.33 gneg chr17 50200000 57600000 q22 gpos75 chr17 57600000 58300000 q23.1 gneg chr17 58300000 61100000 q23.2 gpos75 chr17 61100000 62600000 q23.3 gneg chr17 62600000 64200000 q24.1 gpos50 chr17 64200000 67100000 q24.2 gneg chr17 67100000 70900000 q24.3 gpos75 chr17 70900000 74800000 q25.1 gneg chr17 74800000 75300000 q25.2 gpos25 chr17 75300000 81195210 q25.3 gneg chr18 0 2900000 p11.32 gneg chr18 2900000 7100000 p11.31 gpos50 chr18 7100000 8500000 p11.23 gneg chr18 8500000 10900000 p11.22 gpos25 chr18 10900000 15400000 p11.21 gneg chr18 15400000 17200000 p11.1 acen chr18 17200000 19000000 q11.1 acen chr18 19000000 25000000 q11.2 gneg chr18 25000000 32700000 q12.1 gpos100 chr18 32700000 37200000 q12.2 gneg chr18 37200000 43500000 q12.3 gpos75 chr18 43500000 48200000 q21.1 gneg chr18 48200000 53800000 q21.2 gpos75 chr18 53800000 56200000 q21.31 gneg chr18 56200000 59000000 q21.32 gpos50 chr18 59000000 61600000 q21.33 gneg chr18 61600000 66800000 q22.1 gpos100 chr18 66800000 68700000 q22.2 gneg chr18 68700000 73100000 q22.3 gpos25 chr18 73100000 78077248 q23 gneg chr19 0 6900000 p13.3 gneg chr19 6900000 13900000 p13.2 gpos25 chr19 13900000 14000000 p13.13 gneg chr19 14000000 16300000 p13.12 gpos25 chr19 16300000 20000000 p13.11 gneg chr19 20000000 24400000 p12 gvar chr19 24400000 26500000 p11 acen chr19 26500000 28600000 q11 acen chr19 28600000 32400000 q12 gvar chr19 32400000 35500000 q13.11 gneg chr19 35500000 38300000 q13.12 gpos25 chr19 38300000 38700000 q13.13 gneg chr19 38700000 43400000 q13.2 gpos25 chr19 43400000 45200000 q13.31 gneg chr19 45200000 48000000 q13.32 gpos25 chr19 48000000 51400000 q13.33 gneg chr19 51400000 53600000 q13.41 gpos25 chr19 53600000 56300000 q13.42 gneg chr19 56300000 59128983 q13.43 gpos25 chr20 0 5100000 p13 gneg chr20 5100000 9200000 p12.3 gpos75 chr20 9200000 12100000 p12.2 gneg chr20 12100000 17900000 p12.1 gpos75 chr20 17900000 21300000 p11.23 gneg chr20 21300000 22300000 p11.22 gpos25 chr20 22300000 25600000 p11.21 gneg chr20 25600000 27500000 p11.1 acen chr20 27500000 29400000 q11.1 acen chr20 29400000 32100000 q11.21 gneg chr20 32100000 34400000 q11.22 gpos25 chr20 34400000 37600000 q11.23 gneg chr20 37600000 41700000 q12 gpos75 chr20 41700000 42100000 q13.11 gneg chr20 42100000 46400000 q13.12 gpos25 chr20 46400000 49800000 q13.13 gneg chr20 49800000 55000000 q13.2 gpos75 chr20 55000000 56500000 q13.31 gneg chr20 56500000 58400000 q13.32 gpos50 chr20 58400000 63025520 q13.33 gneg chr21 0 2800000 p13 gvar chr21 2800000 6800000 p12 stalk chr21 6800000 10900000 p11.2 gvar chr21 10900000 13200000 p11.1 acen chr21 13200000 14300000 q11.1 acen chr21 14300000 16400000 q11.2 gneg chr21 16400000 24000000 q21.1 gpos100 chr21 24000000 26800000 q21.2 gneg chr21 26800000 31500000 q21.3 gpos75 chr21 31500000 35800000 q22.11 gneg chr21 35800000 37800000 q22.12 gpos50 chr21 37800000 39700000 q22.13 gneg chr21 39700000 42600000 q22.2 gpos50 chr21 42600000 48129895 q22.3 gneg chr22 0 3800000 p13 gvar chr22 3800000 8300000 p12 stalk chr22 8300000 12200000 p11.2 gvar chr22 12200000 14700000 p11.1 acen chr22 14700000 17900000 q11.1 acen chr22 17900000 22200000 q11.21 gneg chr22 22200000 23500000 q11.22 gpos25 chr22 23500000 25900000 q11.23 gneg chr22 25900000 29600000 q12.1 gpos50 chr22 29600000 32200000 q12.2 gneg chr22 32200000 37600000 q12.3 gpos50 chr22 37600000 41000000 q13.1 gneg chr22 41000000 44200000 q13.2 gpos50 chr22 44200000 48400000 q13.31 gneg chr22 48400000 49400000 q13.32 gpos50 chr22 49400000 51304566 q13.33 gneg chrX 0 4300000 p22.33 gneg chrX 4300000 6000000 p22.32 gpos50 chrX 6000000 9500000 p22.31 gneg chrX 9500000 17100000 p22.2 gpos50 chrX 17100000 19300000 p22.13 gneg chrX 19300000 21900000 p22.12 gpos50 chrX 21900000 24900000 p22.11 gneg chrX 24900000 29300000 p21.3 gpos100 chrX 29300000 31500000 p21.2 gneg chrX 31500000 37600000 p21.1 gpos100 chrX 37600000 42400000 p11.4 gneg chrX 42400000 46400000 p11.3 gpos75 chrX 46400000 49800000 p11.23 gneg chrX 49800000 54800000 p11.22 gpos25 chrX 54800000 58100000 p11.21 gneg chrX 58100000 60600000 p11.1 acen chrX 60600000 63000000 q11.1 acen chrX 63000000 64600000 q11.2 gneg chrX 64600000 67800000 q12 gpos50 chrX 67800000 71800000 q13.1 gneg chrX 71800000 73900000 q13.2 gpos50 chrX 73900000 76000000 q13.3 gneg chrX 76000000 84600000 q21.1 gpos100 chrX 84600000 86200000 q21.2 gneg chrX 86200000 91800000 q21.31 gpos100 chrX 91800000 93500000 q21.32 gneg chrX 93500000 98300000 q21.33 gpos75 chrX 98300000 102600000 q22.1 gneg chrX 102600000 103700000 q22.2 gpos50 chrX 103700000 108700000 q22.3 gneg chrX 108700000 116500000 q23 gpos75 chrX 116500000 120900000 q24 gneg chrX 120900000 128700000 q25 gpos100 chrX 128700000 130400000 q26.1 gneg chrX 130400000 133600000 q26.2 gpos25 chrX 133600000 138000000 q26.3 gneg chrX 138000000 140300000 q27.1 gpos75 chrX 140300000 142100000 q27.2 gneg chrX 142100000 147100000 q27.3 gpos100 chrX 147100000 155270560 q28 gneg chrY 0 2500000 p11.32 gneg chrY 2500000 3000000 p11.31 gpos50 chrY 3000000 11600000 p11.2 gneg chrY 11600000 12500000 p11.1 acen chrY 12500000 13400000 q11.1 acen chrY 13400000 15100000 q11.21 gneg chrY 15100000 19800000 q11.221 gpos50 chrY 19800000 22100000 q11.222 gneg chrY 22100000 26200000 q11.223 gpos50 chrY 26200000 28800000 q11.23 gneg chrY 28800000 59373566 q12 gvar DNAcopy/NAMESPACE0000644000175000017500000000060714136047041013123 0ustar nileshnileshuseDynLib(DNAcopy) import(stats,graphics) importFrom("grDevices", "dev.cur", "dev.interactive", "dev.new") importFrom("utils", "data") export("CNA","exon.segment","getbdry","segment","segments.p","segments.summary","smooth.CNA","glFrequency","plotSample","zoomIntoRegion") S3method(print, CNA) S3method(plot, DNAcopy) S3method(print, DNAcopy) S3method(subset, CNA) S3method(subset, DNAcopy)