DNAcopy/DESCRIPTION0000644000175400017540000000075113175725015014614 0ustar00biocbuildbiocbuildPackage: DNAcopy Title: DNA copy number data analysis Version: 1.52.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 NeedsCompilation: yes Packaged: 2017-10-30 22:39:09 UTC; biocbuild DNAcopy/NAMESPACE0000644000175400017540000000060713175713402014322 0ustar00biocbuildbiocbuilduseDynLib(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) DNAcopy/R/0000755000175400017540000000000013175713402013301 5ustar00biocbuildbiocbuildDNAcopy/R/DNAcopyMethods.R0000644000175400017540000003571413175713402016257 0ustar00biocbuildbiocbuildCNA <- 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/changepoints.R0000644000175400017540000001674113175713402016117 0ustar00biocbuildbiocbuildchangepoints <- 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/exonsegment.R0000644000175400017540000000324113175713402015760 0ustar00biocbuildbiocbuildexon.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/getbdry.R0000644000175400017540000000076413175713402015073 0ustar00biocbuildbiocbuildgetbdry <- 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/glFrequency.R0000644000175400017540000000214613175713402015713 0ustar00biocbuildbiocbuildglFrequency <- 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/plotSample.R0000644000175400017540000000424113175713402015545 0ustar00biocbuildbiocbuildplotSample <- 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/segment.R0000644000175400017540000000735413175713402015077 0ustar00biocbuildbiocbuildsegment <- 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.R0000644000175400017540000001016513175713402015251 0ustar00biocbuildbiocbuildsegments.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/segmentsummary.R0000644000175400017540000000204513175713402016505 0ustar00biocbuildbiocbuildsegments.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/R/zoomIntoRegion.R0000644000175400017540000000301413175713402016404 0ustar00biocbuildbiocbuildzoomIntoRegion <- 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/zzz.R0000644000175400017540000000012713175713402014261 0ustar00biocbuildbiocbuild.onLoad <- function(libname, pkgname) { library.dynam("DNAcopy", pkgname, libname) } DNAcopy/build/0000755000175400017540000000000013175725015014202 5ustar00biocbuildbiocbuildDNAcopy/build/vignette.rds0000644000175400017540000000033213175725015016537 0ustar00biocbuildbiocbuildb```b`fab`b2 1# 'vsL/ +GbJQ& 7 h0X@(dKM-ư/ 5/$M?Lg ~IE y9řN,/ -3'殐89 d Bw#(,/׃ @?DrNb1z@p$$ T,DNAcopy/chrom-lengths0000644000175400017540000000043013175713402015572 0ustar00biocbuildbiocbuildChromosome, {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/data/0000755000175400017540000000000013175713402014011 5ustar00biocbuildbiocbuildDNAcopy/data/coriell.rda0000644000175400017540000015267713175713402016154 0ustar00biocbuildbiocbuild%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.tab0000644000175400017540000007502713175713402016257 0ustar00biocbuildbiocbuildchromNum 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/data/default.DNAcopy.bdry.R0000644000175400017540000007526413175713402020031 0ustar00biocbuildbiocbuild"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/demo/0000755000175400017540000000000013175713402014024 5ustar00biocbuildbiocbuildDNAcopy/demo/00Index0000644000175400017540000000010413175713402015151 0ustar00biocbuildbiocbuildDNAcopy Demo of DNAcopy package analysis and plotting capabilities DNAcopy/demo/DNAcopy.R0000644000175400017540000000264413175713402015452 0ustar00biocbuildbiocbuild 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/inst/0000755000175400017540000000000013175725015014060 5ustar00biocbuildbiocbuildDNAcopy/inst/CHANGES0000644000175400017540000002604013175713402015052 0ustar00biocbuildbiocbuildChanges 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/inst/benchmark/0000755000175400017540000000000013175713402016007 5ustar00biocbuildbiocbuildDNAcopy/inst/benchmark/benchmark,20090610,segment.R0000644000175400017540000001230413175713402022421 0ustar00biocbuildbiocbuild###################################################################### # 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/doc/0000755000175400017540000000000013175725015014625 5ustar00biocbuildbiocbuildDNAcopy/inst/doc/DNAcopy.R0000644000175400017540000000422613175725015016251 0ustar00biocbuildbiocbuild### R code from vignette source 'DNAcopy.Rnw' ################################################### ### code chunk number 1: DNAcopy.Rnw:74-75 ################################################### library(DNAcopy) ################################################### ### code chunk number 2: DNAcopy.Rnw:78-79 ################################################### data(coriell) ################################################### ### code chunk number 3: DNAcopy.Rnw:85-88 ################################################### CNA.object <- CNA(cbind(coriell$Coriell.05296), coriell$Chromosome,coriell$Position, data.type="logratio",sampleid="c05296") ################################################### ### code chunk number 4: DNAcopy.Rnw:96-97 ################################################### smoothed.CNA.object <- smooth.CNA(CNA.object) ################################################### ### code chunk number 5: DNAcopy.Rnw:105-106 ################################################### segment.smoothed.CNA.object <- segment(smoothed.CNA.object, verbose=1) ################################################### ### code chunk number 6: DNAcopy.Rnw:120-121 ################################################### plot(segment.smoothed.CNA.object, plot.type="w") ################################################### ### code chunk number 7: DNAcopy.Rnw:129-130 ################################################### plot(segment.smoothed.CNA.object, plot.type="s") ################################################### ### code chunk number 8: DNAcopy.Rnw:157-158 ################################################### plot(segment.smoothed.CNA.object, plot.type="p") ################################################### ### code chunk number 9: DNAcopy.Rnw:169-172 ################################################### sdundo.CNA.object <- segment(smoothed.CNA.object, undo.splits="sdundo", undo.SD=3,verbose=1) ################################################### ### code chunk number 10: DNAcopy.Rnw:177-178 ################################################### plot(sdundo.CNA.object,plot.type="s") DNAcopy/inst/doc/DNAcopy.Rnw0000644000175400017540000001560513175713402016616 0ustar00biocbuildbiocbuild%\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/inst/doc/DNAcopy.pdf0000644000175400017540000065254113175725015016632 0ustar00biocbuildbiocbuild%PDF-1.5 % 36 0 obj << /Length 1556 /Filter /FlateDecode >> stream xWrF+x1f\"v8\e&9$9@$$A)ק"CU9 bׯi^xΥ3)-73j;; .(zG旹NV5ͭNa|4/l撏\ l[68pB''H+`#^ۯ >{^3Y;#C4g9>urI̞)1O!RM9)r Q}*+#,GZ$q PdwCޥKqo}n;"@ˊ8ppBUr[)NL+{8"ĽU1ې.HVLȱ5à"z"Jaǣ3ahD yLEU ȩ{D\=+9ꚬt<[N6SI˧3J$maOp|vdI:;,C:Knni0kr0Z%8d$T?駇7~\(<pw凌ж $@(2qk~b.߱ɭDej>$ab/b1dv5i^o[^i8瞞Kɒ7,]ʙ"a&ms_8鋷 endstream endobj 55 0 obj << /Length 1875 /Filter /FlateDecode >> stream xڵXmD_U|pDz @^K[$*F rb6عrz&G6?Ȥah͢Q>BSFj['i+|F& gh4 A2iP'i-=AU&aQlLf))E!J\S Oy 8#RNIQ"\zI_Ɠ8}PaC)Jr/+GO4*{V7DφmjJv$̑0,FŹT@B]y0 2[ 6D8a=5-Xa,UVJ>}ǦMD'dذhhC*ˊpJpdc gRoD0*b$l\:(Ŭgi֛$ɢ0, {<Њ {ŊI7;=_X vàf:+~pzo 7€5}^7.R̕ lkgPRgnj|M4>BmDqcם'01L;KmY"K(Mk*c9[\;ſRi!CKZPeoB$9/^ $cZ t֐m'474b|F%`O!5lᬪQgX<[z.n&8wJ[O@HiI-\aּjSW{!ZpN#` :SPĚ/yXDGq9d)&i_C ;TJ͵|-4t0VPo&fa1iYꍾO8QHcSeVxCʳCb `<#/{W=!{`yjb}닱 -˼cG-m{F®z=A5 6FLVw>5)4||ʓa'Ao@0z<ͲAt׶2Ch"g+4;clA9K1.jU=~pO=Q HJMkYJɳmh\(n_[}MH2j3jIDR\`if dƥ4 ^(U߈ǖuD[WRx0b^Q{E[JGl\BuIis m *sZX*X0_bDyv8P).׹WQ wZT;?*F bRS9 +F|-X* <ں{2|j;w 1R:N1;g^OQEFY1ж|^W]݋וLV2-bZ?{צ.<͡l7M_#"۔Q(;c1[J+M{6K39s#g%8BuвBIsa52?I"'T2őalmV7Dl剳Q>Â/.cMM~:Bt~TNALmX'>F{;IB2d RNy^8.XmWhg7}bxv\]+kt鼸gx> stream xSN0+,N]'$DnM_A)MgmoP kwޝ8"2` XfVJeŒ 7JDH -b j"(_n$ 1-+Iw{%bO+Dx*2ae}FZsGL}vDO8#̩s̙J$'ΰ;j?$\k&WYܴ9RQߕW0_Ay[HN.u(DeaTj*-<ǥ{ /={AYj5 >#T&9}#4P A <_'@ k@TbuK| endstream endobj 58 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpmjGjrw/Rbuild317f1eab3dd8/DNAcopy/vignettes/DNAcopy-006.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 64 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 65 0 R/F3 66 0 R>> /ExtGState << >>/ColorSpace << /sRGB 67 0 R >>>> /Length 14030 /Filter /FlateDecode >> stream xͮfq}gh|ONe$F $,@H p4H.?Z,o"Yk>#}??>|(~?Gk}>o}6'%}za3ufʉ>?su~>=oi~aw+v~yy|=gO}fsu~7YG~^,vy%ݳwش~X.3{ϔݱLXmTKrKu{[u eYw~߳יl[5 ms{csuK7wn/]7 ޺mq{c˧xak 7,s_wXԍ}]if3c_~aa1k]al!m+m7{X=6.ϻ\7g*>}cymVK? &򼰗yRu{I_fۮ7fױ{rҠ֠sHd/ˇڅe{}XY>Oomc6(ߛ/{/5MxijoOKe%lcf(= sƒs9ܑu. a]ϻ׸^l)Qc8jwO ΃ t{v;^lme}ߒ<|Ky~<^:\߾6Mli?ӽ{Xiգh^Ʋ ޳6w{VLpff=&jKf uώ PۣCMw?|1{EYb6CƟ0Gwuwv^llBm֥hLXi46O1S4v+ƪ +BѸč1e `}]ȃ3pc^h ힻ9nC9dC{;CPa? D*=rY|PmȦjBNfMΝ4^&XE7/?&2]EŃ_EjN"0tg䓩PxosuP`UZ6`lC_R ?%ܶJ+ml#A97i^Զm#,  \ڸA!@2mh24l'ܶ*PUiȀFMNBA^3g y$ RIM٠NmVEn]" l #/6hA~GU;& QS0l.uXe(^LlsVZF$bzb۠PeM6^49cDMf5?'9.PBp.Qɶ+/$AK퉽,{i7R η]16 ;gIڰ4A4al0X87U| ݆p'Ue]A #VV/G#``vۆE ðWc>kzXUȒpf2m 7+A`:6_Q:L~h!WZ|Ėid OZBabJT%R*J[I6-hs|WEah= -R%,-X4@ܚ\ωyfCzyRL{H dǧB/ER ?VWrG=v•0Eoe#u&JԒϹ8+ht&{Y4uXǛ2t/`[ d'xHe` VK5Q`_d)*a_.`JK pm0G 2nvb]]J](XcL0q=V?i ^lF]|fKQMNTV7-TDs#ecaXKߐ3ڐhrK4"١mE3Jᗦkv.32)ݮ;'ef]Zٞ4`}mRK-DJFf0חU=@^{w6W٥M+zDm{UTA0hzM. 'cD.=UbCCRKEKZT"e +oSۋ k``LuEN&3w˖::+)L6!=ֿ4~o {VNxiY_ CBI07uK-ʤPر[}|;#=Jll%5+6VITJJށ8&>sʛ V}IC}JR>R-d*p◤ g3ԅJ[~[\;o{sA$NH-}Lb;=ꠅζ!Y|P@~Z& ^;x+t Y@DI+9 V S%7JQ`RNɉBܼWOs>ЭznQ$U4FI㗳|\KhOP\M>ێ]}ɾAX:6h64(KboKU 4t*R'Y}[Y7peA9QU[ד2<,`De:Mgୢ3a&/Th@_E'nCTI'd0PT`,U,w!/XE=DCsզ5ЖAqψooИ*h\֬'{?WP^A*jX<-h|vI-o/dz[usrPT r5>#g(S^i=4O30HD$]&/AಁC y0hr*8+w#5\4qTIMI̳7^UPO2=7|ӱBw6'=T@Zs@h`r%O=V|/`MX1 m?tg3]hsLv%nCX }esl #D 2s;Yynh^ Bv?Ko=Y׏W{ZŒ7 yM7rېeX^uW1_WS x)괁.סpk%CߙN ;hrl`R{Ղmws.UeXQRSD,Jx 8]ƐFdkug39I *:&~MoV+Lm+դ-*6D.X(pg[i&':@Ʌ*\8A1Na'".l8Q-'qǥs..7-lPr}Զ‹RT 7k% ]Nfƌ v=طiʲKTg0[do:8cj8$B7&'\8gP,9B7gʀ;@A)o5iNBL!@!B7XDAb] @aڤN1nźBOTmVKG`CƳb G@TJ=H󲍿tqtUNZKĘSMDW;#5 ̥ B d .,ʕN[TpY""eashSp4S$L'_gAYܷZBOt!⑙LP'j&JZ'N\zhrcA ZX. u*딅e^ ,%&9F[-QG(6K*'%Ҵ ̊#L e$Nv zY u; Wi.NhvY3?K]@?SΉWc`Vd= XFMSԶ"π0Zgz9@u!9ѣNS'%sh"?g,{R%T+@SC#|F+"0Іt6O.}:Nŝ4@?hUeJ00*(KR$ 7ЖN{;t.QՋ%K泳r_ a  ^t⥨mzW,InSg!M@kJ%$-)Ψsݖɳ]bE UbW9!:yF ǂ/dõShC F]k`20DŽͥIC?%,*ix&td;%t̒nb`Q{w@?6aJÙfN ;(T.Q҆E.TdfJ+ўi|b<1fXUivPf.QHPb_w ܦnMAI.*id#+DckWJp2)FAWlC Jt_h^͒E4s8E<3 ad ޖn++ugXHE販o;Oa]Z3+Lμ.c%SXބ1$Ag+ luͷNm +%LPïSd|FԶӛ=řaA)ω$V!yXQ-ƒN ]j!4a'{gB f%ܻ%itVȬISy.P2ܗږ/A7ctmT!ҔPH`乿1 DZGFa`842N*M˹MJ~;4/þ-*EؕAy~7xRoy~1p<':grDYn"0pfl{5gh`V}JXFwC8ӱhHS| FrS4U -A$"C+#1 V+ԕq3ҊIŰmWmS$ ylfy`Pfɉ4<'ʨ6)J&'8]2=(uԕ} ԝsNwvMo骾28MX<8Yl;S?RDK",+ ة`3FF mC'S{>x]9ĠK{MIyJ7~P*YdM(uwQNTi`0;EBm#6(u .J;E'vZlt\|TD l{uQpcdžBW^kX.E!{Y>$n" ~BvqB8Uwi]s<9c+ & <>bSU5#H"X*בe@+}Nej!g<@'V9Qș9Z0+ ^ Qs"``**\N+ 0gKls`D -Cg6<(Yi0%/Q#SБFX.K`z&x#_x @Wa!?׋RsJ#(5!J 1!/mC0!J]2 J9ckúvT  wm;u8h.ę+7h+V!a`>Y7$'IqƙY)uj[u''f,S=audž;̥A~=j# lHü++Íyj}Jp4/ iQ< Q.Jpjhy.WԋuHriFi^T!ej۩BO5hϘϩ9>|MS 4FBA;6tVFFL~6R+#LTp+awzEł* v%0p$' ಓiVFLWB,OqiCZ)u`ڞ aӉ)N=6锺tJ}8oF+{|SjM&x;<p^:[6{ᔤ`^T?c|0/3=|)y?_jGnWT]>=&|<~/!+O s ?t>:~>o~h+ӷf;%tT] _^ns{ O=;|1ؾ4%GGǿy?3:KiLf.Svm_0N$7=~?}~כ> 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 73 0 obj << /Length 846 /Filter /FlateDecode >> stream xڍUKo0 WjWݣ@w0 uvlII׏XM3`0dKE~$?2ȨTe̔0QdH!Җc,ݨC? Jd|7\HIl"fӲfM-]$EOdܵڵNP&Qy|5`)rThV$p ;JvԪk[]ݘ2̙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ˡhD<$o* ++ϷAXG;kX=0yzs?Xsr V|\CsI7:8 endstream endobj 59 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpmjGjrw/Rbuild317f1eab3dd8/DNAcopy/vignettes/DNAcopy-007.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 77 0 R /BBox [0 0 792 648] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 78 0 R/F3 79 0 R>> /ExtGState << >>/ColorSpace << /sRGB 80 0 R >>>> /Length 19384 /Filter /FlateDecode >> stream xˮv?_Ri;+lX@a%0:$5\_Ar9{37=\d09FO׏2lmXc9?~???ۏm>?uGQ_?!Id=YGkG^D.~xMY=Q2f%޳k (c{Wس4<ޯk?Vxb\aeeGG"%֏m;$&YCIϲf7 ]^vq}N`\*/榲P0.GڈlvogWPkGqIqVޯ?_?s)>d߶M4e^ [xx9L>0l4Yzd,.I u9/f_eKeGr]]b/q?zωk,پn=~"`sE0ȸnfֽ\k%f:p@,<.0.R_'L7==Z\.÷ hv8o=|[|Ye~J]6uK1eS|\ckol^œXI-0Vos5=;>|[_F9۸6wY=2nk59wȺؐd=Xxθ9^df}N]d%/%FYҶO 0N[y+M8insB3hभE®ib49p75jZ"c,Ŵuk+ov5l6A(JfKG=ۦ2 B7u kF=1Ro?D}?8ODGlA LJȽyw=^<]</roUϛ.ox|fOϏH>QhJ㯶?En+K#K˗.Q.|\kԠ': ճ\[6/r(k"}rm^@|뻟oaK%7K6r?9tesԷʴ/>i{G. sc3]xW??_+r7NQf?Ǯkwul3v;|> MtwE6P6L ~m2AKWDZ*&ttLzv҄iv R" ms/*jyWe6z򮭚*_MmmSekxڼov`cꕝ?fM*a }31F*9%qA\ y߽ k*95*I=4ɕ]ܠ|3}#A5< &iYc&dq&䬎LxCk%IUC˹f. S"BOA4tf6})aa8%Rxrw"S4=3sA@ʢ,QڪFIl%8mm+!Ôb>G4GkKo=G_Xsx챯_Lw.o e}rљ2- Ke.ZW8i=O (qZPPECnDyӊz|v{_%WSSQs-m7sњ2 S,>3UR+Ջɛ&MsghuٵqU>oUR`#Ũ}TU-ph o5슢Y` eCP>sѳK|Ar2Jۆ3$2Aٵȭ߄ QC/JP˾%6DkB"|O˿1;q@AH. ob]90IēeeWN7TD-iaRrۢ$L.8UJnju/tl B%O{))2mjttY1yh˥dO"3~?nm4ʮ eWq@[.7 q)]@:Kd{oN϶"_N: Vug1Ba^_djuU*hߒy_t@ˢqj*آuq Zy1\0t+Sssj,7V^2tE0"66Cmtz,$]C&)_^6 }~7:4c|fÎ6S~\Wݔn]V5FQaFB ǤZk8p՝܃% ռVD:nD!\xת'dRiA&pIc>$¦R w=BQ2E!U T#Dh Ԫ!]MBC4Gi67UEc &X=B,QqLJT`PMRY[H1UgP/*OW%$m:'QktAIY]M]l4`Ƚ/ZMS1UƁz sVrtMs$*4F kB r}Z Chk`Kp ˠU4Y>m-0Z;)} UYc ©[j4&=|#@&PCn؆۾5Oӎ_["{mIDFh8L&vuFcNG~sQoH~_Oni-6)0Jc~=t\B&Hlɲ{μ[ĽVUƓQaK D+Ii1lSfY}&^eWYm"O W+ 9ш쵒8xh[ggɀr;]7ξ'JM-Fk,9-zjĥecal/X{+޶$0.4(݊2YT? \w{*_bF7#UJ}iSaY}7G]S}tr`FF/h<\WAO= )_zx4atYA>{<<]~ө#-d)o%boOLuӝB>1Gzrywym=#zFp8FOvH1w﹍j6zGۃ&GQ󷻍>sF00^t6ymbEߏqI3&.FP{/AAxК~XDŜ Qk!.$ypa~>tMd,I+ߝqU]ҥLƚ)q@F7 D\ꒊw'kR=){V)K@]X5rd ܓD'N,5%pljϥ.=7og\b_8wwYo-]b .qmbnĐ5̉2&Mh o84d!ix@e%`LqboDc"Ɛ0yTgY%{ [mߨlɌ;n,V~t"$7C]Ed=DO7$[(~MՉR\,Buu!ZddҖ*))_sΤp#@p-yX44LS}kG7LiSr6Gp z;IlҾm|Φp"Tfʻlٙ9ėpuMs.b,y*qgj#5S?8.KuaͰ6]A $]?ەT.$HLEpx=k XcY‰.}-]Vy{2LCHL duՅo 1EKY•fʍL&g$۵TfAv : :XfZ):*N5bnMJ1AunD8tG.1vU9Ŷvg܀q3 P56Uy>`r$ ɣ*kt/V0@y;kNw@Cߓ9&V᎔Z ZDh;VRp&f3-R=c̢O J7?gX':^UP]]7L92of. nFI "_exL, 3F畭5՝ Be ӂ{.56}cXB>e}B ¡N?q@y+dO6B18aܪ1Kx,$o_zT'־Kg?ץMnIhrK@ekݨkS#Ҿ&@Z$yK 8rqIuOA>o n^FUk3$'U NH5C#1QpYL L 7B Z׍ 9VZJ#6XN.ˌH}?6{(<׾Alt6ܓ]9}9lvҎZ Dgª|H(k/ϙ@~xR } !WOZ#ߏe&̄ub@X{L TWZH8M!d2jb cnw ulh?AHtRRYCLvLV!BJ doTʼ=#1 BatZ_o΄Q같Pز)ߓ|2 )A:v3ac|L`!0 f_i LH>u*8)'΄2fF 2Xwy舃PfBRBR %1fsUNlRDntcdu.w=ETz>7^Itt"25INA>[4)Ҩ 65ܶy9{OñapB+q M-K?+9tQ[^ h%S!+ ^b<[ƅ. QyCh8qXgdPBa05g6B'e[B~ .0J>]j4-Kڣ/=`/=}11aK V=}x|m{P數U~== gW.Yj'20ϡ/C)t/EEq{juߢߢ[-ܷl:|__Sɷhu$շXn~[LW|_q.1e|Zq]j&puۺJ?;enm!hr)kֽri[j_k?4_a7Angc!4:3TG\ <]^.xH-oėˀp ÞEP/+0Dٱ^N踂ph 2j&Nw3V^FFG%V&9n/螹AHwaтap!gQ;r14ccԋQXOedf0X-R<}:&6י&*CjM\4مՖ a5>{cj؛ !!#AhuU'-2c=*O2qZmӠ'Smx'q2qfibRS2 IV aB`AWBJ#_XvS}7gzL2j+#҄>'K>`eMeXeP HtKU^, T<2ei8xiW rl9c_LC]MudBqxd9,;rtRc rt,;ÿ^@64Aރ;)\QpBT剺I7,E7=(nw3dj gz;]1:npqаe wiVc" _Eňl Z2BÓ@= 3:FfnyXpA,ƍB9 disa@8,ux'M9: ʀ,u-&Θh7F= [Ptz6Y)ɺ{VCS\N i8*aWOvtB8nq|qajhh~l@'X>27Q'ys6rz= a9qFN>gwĐ. (::!l RB6 {v68 G4Y+%iy SuH&Bi$g;Xh n-vTvEBKaǞ l?2 |䝐3lZ\ vD;XTjz"L5݌JvQl7)r]AX_y{#мl58Ah@etDz!g@!1z?dH׈so_Xs<{?l'/=~|_ {;Sނlsi@6.oVY%=S<{x<{,qxijxDߋg<y?S>W>OxVdz>gYͲG^gy3mϮ WA]EU+:<#|8 4){@g[3t'cWl!їoŨܷ ^ |ѯڧNKb灷/=E]}d2D_vÈ1/V}LV==N8LXq?<> >Z䗿і1}|0O޷K<~/:x~ O񞂍Ew\B.D-:w;:w+ekܽ%[;!Đ~:*IxS+T7!WY1䶢rEy}.E3L Ah[Е;xtmro}*79R)!Zro'\i<%uk%'yEt^zVV<Zd=`["OӰT͋Ȋ=ڼț0Brm^@|A%J*MVES>ϜW>aR^M~S\2Wɞpǡ'X7Zx+^.,d$~oJ'+0Agsђ}xř0ĉKrh.xSryT0o)!,AJVt{#<_,rLL W l3M-]dOPؙA8ƍn ,zeQ ?M14L} &,ɡ&{^Cx^zx}m˯xU6_K!'HfߧךR{؄>Cٸ.fp{8rq˭ێ4ш޵7 HZ v>lc0OFXjG֯҂bHh}옲>3% ۿ-h޶% /!\ؚI"p{>Xڈa)"Lѹb3p Y*6EShi!āJ`pE~s\IVIM풓j(UY)B) _P"W6UeSY8̿Nf_C8QVШ *:+m JNC7HɊm QH Z.4aF@Į!RMf`P .UPynӄ3Uu9TJ$dcM18sHGT{32#ۛCd5y0ޗTLRrۢXgc$9 @Q5!˴ln\-=&ulEl2D xz/ $h =}08ܮ>{(gP%]챣};g+:zxvUXc { '6wjh3𰶼}Z9\181ʭ8[8';{|3Jw1M{̯أ~~=f|3>c|c/4#8OS-@#`'1c hQj9d"^Jk~9)N?(jc@&ڢj=,@f7~}70eL+lĴQ%E)I@$bnj2E@'uZG eLa@*18v+#SJ2"̦^];3UFw7U_GDUؕ+b^SI;"I.+kDd`Ed_Joۼ5 zeQW0X`^dxqrY}5/xYr_xo=AкS59֓{18Lxos쑞|F8|qXL㴘4#pR57|Fz>c0OFV#@Zn䏯bh(>3 'V6 `CC_`A VF"vݸjqUYs2ĺmm-@8Pn,P;3LEo[H@ţ{U ytDAB5II1vjϡF EqATwOT9tl>6 #[QLDh!EFpLB!`' e"m,(4bIMX]4+V%YoHnR5 rmzVv^KH@]A ЫGȴMo;(h!0Fv8VB$ gWYYd&- e<#eĩ%1r߉Ђtt-]hdA R m/8 FfT˟{DK[{xxaGo=0=}AK>]~tC5Pq=Fᶼ\[^-מ}*OU:xL{SAS+T U7~*Jx(>c0OJ!#Vߐϯ"#8>S Q 2w'a43xCR `M`SE?{(t8 ɃYuppPD  zï 4oHbh`2sb vq0*CRH+mV7]*Gҗ.!m `Rk.;KuHD \jC:Ztw+o|ȿ[jӵE~?a=|߫畧ҨS%AR*^$VjiRT[Q>:K]SjsP)ob a||q <HxM|S%7%nѮWQK^D+&OJsV p޻E!Ȧ>$YH!3p4R (":g܏D @ Nkn RGшك!,FȘLR3WdG( $E5d , {1…Y4YJu.3q!5dKC޾CLJք%[rO{i߮(2.[A e;uYFlAa͔{~dպ"'ŷdPO PI||$JN0Sc@F,@ u2y;IVh$ }C:z@ k*0<`/7XQ(P|>؞Q=˃B,x6&c`DԊ` ,?YL+MFfc%]%"nո9QnL*!s JZı$IUR " 2ܿo]m'7OY˧1CM,\~k,yܚ@*`I g m\$@$^K3x̎v4MVO rM~֏Ottqm}oZv{浣R;pfvAxl?fXF#0je᫘S35{>Km?3 /p'w-m H]h(o5J}k}M7:0hOM`:dՀO1d ]O礎ki?= Ó.BablRy2u@Aa^ SdRP*<'X+jV*p۠0R%0:,BD `5Luђu5nAm2%du!1&L OlL~NLT#hCF9<4 h3SE=< xȭyʫ 5Oyak bۦ_#VT0;,wS\%. fKtCK|C宆xxb[A(GIzBpaW9zxl?a;c s5,}*s55}{@aGnW0 c L5u!.6@mQ pso{c' `JNjcQG5`LRY^g)dd@hR^ ,iWfa=HBdV-qt!,9P{ A8càhKZ>MkJnYGܛgʂrkI UGiUhj_oy(p\s8y)yhr?M~&Ncr?M~Ottyh)ov{硃a+J@Boَd_ףGDJ^Z$?W꧂:G䮂TM~(7*9 nS|WTp4xSSʁ:c+} cQ7(ߨUYHs5]{0 >Km?S DANq(X۔/ y~ri!n8NZ^瑌Β"H92@Z9 endstream endobj 82 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 86 0 obj << /Length 736 /Filter /FlateDecode >> stream xڥUK@ WD{d:ii  mo!̶EiRz$UnܱitGEk[sVٷY\IbaIKۙຝ}7EM0/:.( IEOjjU6khFi-M.>\:j@Gk؈#FU|P~tcˁ5¬9q }FPa4 u!jQ̐1{+|,F21R\[8P 9V dZsYB"O 0t兺t`jC2tmR` <ҴDʞ c&kB1/ (;7ق3,/;6pJДZndo`\&}Ҙ׌c7Of*Z,6PVm-m ʚsIk*:EI VយTQ_1<&>}pt|nB&ǘmWIMlb^QT3  _iFna^⪎h%z#}NlB夀') ]l*c`\W g쟲K4L{褧V:L1B?BR=!^`1d߂ HMy("61|,{G:{:E7~vR}=1G!'Lrʭ@U՚ j-<ϹV7/-C endstream endobj 70 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpmjGjrw/Rbuild317f1eab3dd8/DNAcopy/vignettes/DNAcopy-008.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 88 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 89 0 R/F3 90 0 R>> /ExtGState << >>/ColorSpace << /sRGB 91 0 R >>>> /Length 13892 /Filter /FlateDecode >> stream xM+RZor=ШY f3 Ƚ Vu9 5t*E&Ɍ`f2 ϯx򫥏_)Ǐ_q_?^~_</?=B1Gϼ?bH`c^GtЭo,r(t]ץ#`B¼tz^[ŏg^GoHXׅ`y^W_Wu=}gB14>;'u]xKi~ Q(uoycߗ>w*~*{K= eKS̲;^bhe^"{ѷ&kn~gY03WF灧wk^﫚obӈjvg] % ka^zŶڳ> ?&9}mMH|6d^tm4lٗA,%F6?F\&na{^oX};l/8 –)#{ 2&}mg쥃Mt7ִr}Ĵ01D\4Зˮ'Қ sMu7*鉩g?v'l{\{Mv2p$>{NLvLf.=ot lh&i.sMuiyQjb'Qe/Qe/!11K0OLt{]e-^'{>C^\p=^^ PրNL|OtM+b /?֘׸nc c}{XC`>jt]=˵ z.Üн0witO i0~{Η5nbZܴn};yG}9_춗Am/ݾys]w{{.{ %91K(}kܰ4z;v=׍c/Ƴ~5MLNSa>v=9r,.jh|Z/L[\T{Ey⢲'7[v֨b!V+F&[gn#B兊•u]2-rN4ԣt3jx٬u4f 8Gن2pϤۆ@dn^1Ϥ4SK o-dβ%Ɖ [XݶB"[J9!3A`CuP$aMlh[Q]qR3*㷽IsВ]}MڑK;۲y[xDẂpquXYp$O§+[7y."ś b! φ. c'625ˆBؚ ZBh ,lZ8;=F +˺![xvCYlvv[᝟Bmk)OH1-{M`vlhB"ф85|M3-n]b ->#*0[4j_ڛ][Tw4u*)AHFA (:B`a7(ʴ3*p*S]HMSÊr`;9C:S#>xvmC 燜 i∟ qĹτ80 qLiC+0:6xY4!wQ8a21 rD bNI_NI} x!ǍD WWN!`S'o;7tqK@0=Ф&X7&(0sBP@{U -WQ%mwNf*n 1eZ\A@MUp#oB\c2b96; tcjr`+&ā?0PʉT ÄX`6`DVg 1fkNJwP=:4%N$|-D#j&;z0B ;sv*fa#8C§Eh0M`v[)q6D] h.WBvu e0Ms\#&XLjM#gM)>MQCZ[X3&Ĕ+pb CISϑ <, t&6`/Z CkfwJjKD L\*\6DQ5ުGb"B\!+\4ʪZx[oZm`:ղGfr].QܭDwnBѥ5ԛiB1cUeZՄ8$چ+ED+\eJpN /TOl=2MՑ*܏N}e 椟Bb}8FhvJ5a gv sTB&Q Q@ Np'ǑR& )S+uWx6D0>i?KT \;Uz՝k/մr]53#NjgMpXOuH ' CɾݵBj[mւIFJխ,s@%C& `ܢ @•`f 1GMqGk̎n7!N$;t"U`?DM#DiBS8WVKԶD:(IUr$OL;Y 8;۳bV XTiDU R*_Kdwb\8/dzln!fH*y#P6TN,W}B^M߄x2MywGMs&<'{. |ʰRq:Z56Q9N3Nx:e3s $S`阠K{5h hsMpE;ERslB,a.0\R'l \ 2 n`8ԟŽBȲA 0!jc"\? bfNI$p bÄ8b0!Iabc*=I+*d Tz>A0snjgeCJr4APKe;feCix4<]*0APYq)G7'ϥwT>6 I l HÄ#&TKqz?IfR86!]pb*{FDfbZAqǂ. IUWJ)dBQ#~SSva/xj\"0:v;6K<|+?s7*$m}i [r-X'Jw%D!MKTd%= L nmtƽ::ymgs+}{3]Zv?V ,[<Ɗ!)[2[^:NսD?+Ruv>%f,`f9斿vǛ@%a;N`-#n9=)! B^U T sm0aJwLY \WLD@goBLeVЇi-j=r|; q7BMf*7ZE ro28 wD޶8^,ohЊ |ʛB$[Tԕg[֋j,)Joly'Mi@fd;{ܒ*OQ~Y.,`{~뤊jnI q~h]م1`-e``.`fMCJ#dk)i1x+om|y SkZW(SwVJZ]+/ $9ƅ:i55ߛ:|% ;8$%yK'^ˠWf]s߭/cWLx]'7 }| /TNƭ݊߃&oiB[kpDǂs&Ĵ[|%`*кc 6]PWMuy(a9Ŧ84rsol!Fv?-b?Yܚ_4~X&N`vx{ RWnlB? -X=y<{cm8RA+[TEN }01M)m*7-m>G"u7;f(8ڙξrX߹yXDƀ+ qD&MLE-rvLXԁg'.T :ޜ d0d+ sGvZ=TTm R2:@0~ {]Q|+w;qBJľC'p298RѻS*)əQorudw{ϛ=8T֬ ~_J.xɄ8lBh]IDL3߼Њ2ȴt.]-8Y krF*Yao>੩W:D%P]L>1Z. 4_uM;Yۑr,4HHf5@6 s-aiư"vjArmΖniU]4ʺSBF--_|giBML*i|T(P?&THZ$SqɈSu+4ߙs|xBl2}>Z+Eb:2@k/>mU`xw o'x(N0lin냑"+]6Z.0 cm9sOv l^I'τXz'!g_ o6!NMR9ݶ"Y7:B`ے s.6 fj[v,I|1LÎLʩWʉT]3SSJy8OaUaJji\҆1aՓ*j;i6 s(䨨E2`t١NdF^̖1ل87TU 2bv 1;ؔ&ĉNVR8 j>bfٮEe=ЎjYO)' T=. -#[I!{{е3e aމ x s~Tp^ۉ2 BBSKT]̄8 _xD@*ܴ<&Vm,S'UT%6,zwuXTTQ:7(Ju|&G@ \:-#1R1NuvZ-mlut|ciF?s|٢ Fv -WN{߄ZLle@oBR/'uĄ;?l>0Ё0#r#U0Xדowi}#pn%x¸#UU쮝OYVeuy܂ l;}}P> ؠZ@52q=};ĥvb,c.p8V|aB 1aB1'w&xf@IIjF=LYk#Hhzp pDUT+&``[*sݰ\]OZ{#~偆:#bF<xÉ+!Ӝńw`6G:)d+r2\+V0x q 8)TK_2LG$p*:6!Nh !78*[9) D Fwȑˆ+ t\)d( %̕nNhDO=کB/SE+* HFTQ- 9GD:7H`2"^Y-Zo80h0!fW`lBiCvg**pb &ĉJ P &^[l8\rGh۴ !=.b\k = B-aeJ\f0+f,p*ڄ8P`Ex8 5UWL]Sڄ!"PY(ʷ:)0!3BFimz,F%0;nJDKTts/B9 ˓v"Unm\Tp ̶ 6D3ao ^HKV!n~D̖ LL#U1ś)I =&ĉ!#oV`dpuR24M#mg?S(pX2Q䕨@-EIKTG-}7Ӛ(0i7aö7#9h`0Q!/iN0VxS#Ub ;nO탥mvX"mj $mGF:+JxAd7PKTCY#V loHHeX 1 #09VFUDP%"UBxj@gT qWFO)NK-tiwd| G`v pp*,&0{J ;eC9+$pKGwd-]C#ۥ|b)]DU[T>2 7 hz3!+E,Qʑ%Pȗ]vXT˔."pTC(|֕QhEN 4v\rSɋyC}sUwYp lr÷4r[ waj D LUWmrO-Qb ?{6A9ӹs(Cs5F3u܄OB SjL'u}Z1wMc:j+q@>v6%t%HuH GOz<*Tze'paUTfF%pT!*Tw#J@g Mp,COnaLd7 ٛ"vQᘉ]%][zk&OWB WLJ\ش 1ibd:ڴ@ʭ*g(T(~j[N>XR;LڐXLXy7%Nȣ2N?7.pEPdeCtе}xic*eMjaI/{yk+7mvVlB7!nDN 4rEyw 0Αf/(*P^­"(Ivzn)Gw`O;`;%kZy&lYUT]ԈSGc τ%RElC0kf3BLԱ,@ʎ&8k|l1@!#7xlzpi|o+M Nل8)Gg+E`&ġ DŽþ*{P]?dC.V(qH:Aj-S?jm ~TOMV 6% BT0FpӸ" !p AD:L`XMl LŦҍC5"0™gل \QT?M;yebta 1v˸U9RoE0GTTz`l_DX'MK#KHNSSKb룆O.uYZ6$l>oD:E`7 + .Q%PQ--&%Q\bBR1!N"@ 1 rT 1!T?zDJY?U9ִa_WTO yK;jA+.nRlvV|qfhjwc![֥-ROUN Caڎ Ad7iVv"̰fڻj>"%b͑/5LsL3.:ͬ몧):UlIo&ěޠqC7:G̊d͑iUT.FvY_?pXEt%:h*gS۶RUFOͧv hήkt @PÍꍭ,=xۺlIEkez"jXKBGjDTMlWڊZ9` 6D,fB<@}`fB1tLUKdП&ĽQl&#ZfB0y [ލʉ;.:ޡT QZ!0ꙸMޝp/BX  EZJ/BgIW6 qG^֗uopz+ >e/e+%P{z>ӑ5W + gj :7(iWfTy&8ܠFC𶲡^lC?'(˴)&tL L `Y,on+JtSOu_v׸VGbv1^| %)ANg=.?QvyC3Njb1-{xU\^1WO3s~{{Ι90oE? E}jC=NV[^Q~^Q\2pbe}E BETh/z<=Vq걦qZUXkW5%mU/vF,ZH[HXsixV- v5\<). w5ioaϛ -_}B#V%B_t}Z V{ L endstream endobj 93 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 98 0 obj << /Length 1831 /Filter /FlateDecode >> stream xڭXKoFWV }uM=8(j%5ȊRk P||\HOGItZF6ՉQ.ۛn)ehHZEo_IKa[TX9*UduWџ[,6.~_^iURR|- O[,M煎Opkv{%}l઎V ǟ𣈟7LE>8 6p6RὓqdMCx,N#mu]9Ujd'ux05\pΜgGP e`0+<ϢH2=椫4g ;hRG|@X]R ]_Pwt<8'W^"^'*ސ|ĥ A18RlÉncpN&H!=٘4Wo"h7T:Ӣp휯eWތx:.F{N\Oz69y)D n\x 00'4Xw[NA/"A2 p(,$^ãl֬ 5UiǛ}=q[wjԦ>ՉO$琠C\Px*G5eL6 GZi92C`C)W ) h8˸4]u%Jύ}~E[!nS*3pL61;f&LDV"'>iZ5-tU6qhE18'qv^X!i/ i"f eTVЌ# JQY(hyTFj3 o,yTXӔ5U74Φ!BM&UR)vݗ%A~R  tmh*icµλl2vS%/,oBKTZ!4qCQiG1A q3Zv\$(,I@eAՒa{;A|xv,Q*'8h,F{I .fe,lM(Oxǁ]ޭ~e\ ;t*E[ATGO8G8q8t'c7 jqW':ogS!YIS FJt ?)2=sL궓w#.=\I`lilEIeu/agh^xڭ t-uͧ=ot2$-)JUqD->a nŗ+H\c Bk2|m.Z[ÜG_{$>oF\VrjuIZq2U?()9u"X4TtiQJj^h4vz/пWT.sD/:kcN^ ֒cP)C 1Rרk/ju@br׮ aɦmw_\8BMaE7@ݰBgߙ'Dӟс|k >"^ \ endstream endobj 83 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpmjGjrw/Rbuild317f1eab3dd8/DNAcopy/vignettes/DNAcopy-010.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 100 0 R /BBox [0 0 792 648] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 101 0 R/F3 102 0 R>> /ExtGState << >>/ColorSpace << /sRGB 103 0 R >>>> /Length 19333 /Filter /FlateDecode >> stream xˮv?_Ri;+lX@a%0:$5\_Ar9{37=\d09FO׏2lmXc9?~???ۏm>?uGQ_?!Id=YGkG^D.~xMY=Q2f%޳k (c{Wس4<ޯk?Vxb\aeeGG"%֏m;$&YCIϲf7 ]^vq}N`\*/榲P0.GڈlvogWPkGqIqVޯ?_?s)>d߶M4e^ [xx9L>0l4Yzd,.I u9/f_eKeGr]]b/q?zωk,پn=~"`sE0ȸnfֽ\k%f:p@,<.0.R_'L7==Z\.÷ hv8o=|[|Ye~J]6uK1eS|\ckol^œXI-0Vos5=;>|[_F9۸6wY=2nk59wȺؐd=Xxθ9^df}N]d%/%FYҶO 0N[y+M8insB3hभE®ib49p75jZ"c,Ŵuk+ov5l6A(JfKG=ۦ2 B7u kF=1Ro?D}?8ODGlA LJȽyw=^<]</roUϛ.ox|fOϏH>QhJ㯶?En+K#K˗.Q.|\kԠ': ճ\[6/r(k"}rm^@|뻟oaK%7K6r?9tesԷʴ/>i{G. sc3]xW??_+r7NQf?Ǯkwul3v;|> MtwE6P6L ~m2AKWDZ*&ttLzv҄iv R" ms/*jyWe6z򮭚*_MmmSekxڼov`cꕝ?fM*a }31F*9%qA\ y߽ k*95*I=4ɕ]ܠ|3}#A5< &iYc&dq&䬎LxCk%IUC˹f. S"BOA4tf6})aa8%Rxrw"S4=3sA@ʢ,QڪFIl%8mm+!Ôb>G4GkKo=G_Xsx챯_Lw.o e}rљ2- Ke.ZW8i=O (qZPPECnDyӊz|v{_%WSSQs-m7sњ2 S,>3UR+Ջɛ&MsghuٵqU>oUR`#Ũ}TU-ph o5슢Y` eCP>sѳK|Ar2Jۆ3$2Aٵȭ߄ QC/JP˾%6DkB"|O˿1;q@AH. ob]90IēeeWN7TD-iaRrۢ$L.8UJnju/tl B%O{))2mjttY1yh˥dO"3~?nm4ʮ eWq@[.7 q)]@:Kd{oN϶"_N: Vug1Ba^_djuU*hߒy_t@ˢqj*آuq Zy1\0t+Sssj,7V^2tE0"66Cmtz,$]C&)_^6 }~7:4c|fÎ6S~\Wݔn]V5FQaFB ǤZk8p՝܃% ռVD:nD!\xת'dRiA&pIc>$¦R w=BQ2E!U T#Dh Ԫ!]MBC4Gi67UEc &X=B,QqLJT`PMRY[H1UgP/*OW%$m:'QktAIY]M]l4`Ƚ/ZMS1UƁz sVrtMs$Ͳi #W&5i |+[E-YY#{|OU̙¡>]Jx5 %!}% =#Lvj+Рث,uT*KS8;mCYje3!'0}1=Gc#3>O>6r~^:\nGܶDȕYt͞%J"gy0M 4j,jEBpMۖAۅ[@nZJ VFcpFɲ/M!,D+p겏n^TI (G˔/=}X 胃9gGo=.az*xR'o#=||m=N{{.';{|#|\>~5u<mwx˧]>B|./|^ty>sEZeg;C6wD 2"8Լqy!I-[E€o6:ѡ!4K4$>L >/c+aئa86j,yMR 7/GJL]6RQoG#Hիj)*Q+Xqi9(#MGnH QNwFT_9EΐXG:5j+0{MM=w{ՇH ǚM sGIm߀mNq:^'u让\5>IX(&$pryׄd߈jn6W֙Bs GdFGC ]i;G{pi-PivourDcPZ?帊W6Ôe4j9`.MDvMfp!doCpjp*N'FG$JSxˇp zFN@MzRL1V9L6@IU_xtԤ߬:5'q ԤmwnbO;Tce .`HU5з꾤DZFt= b踇OPʉOvy_e5%%XP^ Ptp5V (V^/Zwmqo6p=Z=g=#zֽi?> z߂߳jj?o1#2:Gk[$>:t-73k8_qz9Q|\e#z8SHULX$Q*"e1\*eeݜ.Ű dd$U j:@Pq8@B 9I9 R2$B SIXG IS$Xrze* |8'>(mG,^uloDL0aq4#ױU)xw ,\{Ŭ%E$$ pށH|x`*:"&K; FM$CBk0f$W bb}?SK$an CMIrR8L0kmcysDtPƓ1IR)`62&|woVumFK"0k9I(!sK*ޝpIY1,uYcQp=cQr'pOH7֔@4:&b>d|Cq] ueMmtI/+ ߓĵ!C0'bʐz29%А}xq3YĽCqfwCESўeʗ=L6lm2}.sN!'3޷XqGӉDߤNuYf=Ar:ߐlhQ6U'"Jqʳ{ YmcaΓ1I[_<7lr<|Y;8cL23O9e35)O![‡''} H9‰DTfS]Uegjo_.VבS&7͡0;(zCn?qR,zd|NA,Յt1它,ߒ(tnWR]hВ2޺?un%@rg) 'r>phK[t2̑Ufl: 62ӗ Յ+?*;M2$I۷k.8R]ٛKx+¥˓]Qa\gu{eVU/ |5a٦'c+Pe9ZLv6`^E?FTlfN4eT*k®,aH<5nCx4I/bn<h 8'Tx_CBlw`MMY$@y/[O].) g.??N\zd˥_(šxijxIwE>Ï\CS^ܚ>!?EnoߤY8)-OReZ<|OͣЄ#-_U|w_d^u-Zc8gh?hDvhDK{(qSpؙ] r=XʺQ=!%b4U;GSO'0 ޳mXo $I3:!]LY|Yl0l7+IFUDb^&`o,vװ'{a'sL(Eٯ[̄]䗩xDXaA(gk L9+[ek;1'K\jzm6NsǰPuYˠN=C-8 =~.ⶁV4ɞaSOmik_¡_t\{1h=.A]][_p_!k=]=؏̓ pJ[Y`QYr˧pY0mW@t7E7M2ݠJNW&Z9!xs J֭xR.QY8;g[.4v2|I]4A+4un+:H/f$ğB4bi̒2@:M64Ԅ3!-՞Yʬp7}AJ/{f&(2Ո6;[bp\̒* \36M4yXzXE>oJR#*` KHyy7UJM_d9o¢5˹pLMA&=t'OH]7h*_ԒF m0M[:4NwƲ^hn< ʶڍ® ]y؅˜Zqj(sȣN aYmR,I#@~SLi FUC_-JH(ہ$`ʥ#0,oێzFC\c4!1'k Wqe71;,U ®ћʈ@>{ӧ 9tE3&E6Qۂt؅s$8nP;h"7Z8M5*f vkpP+\IvˆUBhlSn\L/j@cӘ7cFW`nR:sŷL0ʩ yWRaӻ#:%]ۗ^|H޾O=}ēۗ~˯KܞBjg.~[/23QǧF}MIHqi$qM|xǗ!2!˷R!Or!\ h~$MT2zWɸ_J|=23k>g$# OdC1(7ߥR;+JBoDv%>@_ eT%Kهe&<&!@̄D~&Ja戫ZTU٤>v\z&*%e1K<}JMzEHC dRkv9hPS#uYQ%AkjmscrᄲWW6|ZVr謣I'>2KC.W(x s~ ]p뎛p΄ɠ>W#„an;jbmVO0ʶq\8%aןO=}`i[ۗMGk_zt^8{Xc bڗ:{Xv2xKS{z@=9  ]NdaCk_> Ec}׷藿[otBkDoH~o Է\|A=cHM)ꆷu'lOa1E_޴L]Xm #w7&bH^xJ*!nNʐTT>h=:+|$9)`4!6wsFd70!M{! k mZTIk[& @dNT{m?ytJC#O[>,F ߐb/jfjl lZl@&a  :qg7c:aY^ Ib{¥*OM!-J5-qc\N3V=7bO&hq0 Nqk{!K;*z,F&dK2X=nW׷*FHUU10r˽c2f0&( 5nBNC ay;iBieIUHfkqD5!4vcn@a]7b Fo T•@`V3G.JPJv2Jd2* Dݤtad B xƥa3˯d"]i=}R+­ھx9~Y ehOz Ḁqp-eK (HO**qFףUz|U F//ZeWhc?>YN`abTQs/?>WBatۗآ.޾xxI/Exjyi~Z;JkqaĘw>x"{z#uC$?hKD> >O'Co?%<??P_?hxE>?`2,rvPGWw*siV,62/+)铜)A&E8BLJ;AܓU0hRG2#$?:T&xE#UfxIt6%s, +f³L,$)l=GB pp]Gb9H$DbpIP%,тt7Z!$,1eH d@3FDe^G}T|l*JѐRxYGPY8͚_$$ &W , tYXFOxOAEWȻ{.!B}"V|t5tސ܍Fʒ-ޝлmb >$<)ȕR)K*WVMx}І r[Qr\>tA-Iy6w7kܛ){O-v7_]-4:x㒓um":/=kT9Sjhwr~rQyiHe*E^drm^M6/r}C~>ߋğI֎&h)QQg1+yuaxh/&-勤iWz{t3[ ?HGENQk?h:tKzdQ*zKɃQ3P9(qF ~9 J)!RMQ(kfQ}TfnVcKVU#-Eb808g# !tUJl6T7+gan7و6ۃ0-tZcv U՞F.#f<C ʆot%o\S:D!"|~.J*x'Rɕ/Fh`LF>BţBhDi+d41&@10d|~ Q;6>cu B KVD&)^\dOc+]-FГ.xnTvk>BG\HFHǷT㜓Mx39HGNEL%t94Rj,nM}Dmv+\ldnM %M+Jb/4u9PJ݀d&+L PQ&@͖.{'( YVd cuF& 2&ܗJ &>e _q[ OZ=i! xmN0m6a/QG6Ѓzxap]}Ȋ+s٣c_٣IUg/mZ=є{&={ c1:k_xO=ƳnyK zʭc{xǗy{^IDA??sg ds mSs{}:k6s}1^;sD~žq^qTy Z{(T8@cͧNS6π!<515Ŧw|X$!R{֮sDy-_f.n w5$I*#mԥAT#&j"KY% E ) 62RlJ#x 7*Hz[1ΦC}D"dD\s=\nMAtpH&F)mQ{Q˱{aGt(ҚjQ:eNM6.[ q>: uS.Xjwt<= k ch>lnW{h=!.>{`x=}xx*{1=]{ X5OfbxX[>CQ/p{{p{ʭp{{㓝=`]=WS{Q??ڇu c3jUWm Sֿ6 d S1{4V(q2QMOWk5?Ü|X z1 hmQy~5[Xt ~JM; 2&ɕK6b("Ɣ$ wUf175g" :UaN w}ΈAJfS}QMK`қ#"\*l1q)k@hfP*1 wQÉ9]M޲9{SuQk:d9 UJ[*5m6ʒ[ A0tO"ZH W뫰9@Njɑ*í鲧Ժ?fw :.{1 f3 NhڈW(*)3a6"5o3U_6I|2*M=g^e#_=eYYB,Jqe'˛.EW[AjeE9벧ț?3 ƻn aW&j,~8Wȼ]c o Grʲ}|G¡,Zac,)j"GGKp 2Ԣ~2`կp%÷m^Sղɫt]hiK0X/ˇ|ru2<8g9,Ѿۧ*{<xWǩ{CZϠ)Õ~q*Ovo*vJ_MG%@F2QZX yr7GKp|CFE x”IO1v e0@u91|8 )X6SdK.bk#KpZ60iå:C".!CQUjCdZ7>-Z؉k~ۢ ʟWULSiᩒ y)/x+Nz]]S(Rm%.)q^D7 e>?l @yIj$ǦwQ|h뫨x %/}} '9+ qi ]U"dSI,Xx8N)P^qsG"A} ^'ߵf7ӣtAhDB*a 8NF#n1[O*&2'0TBdw'Gw B+3uQOj^yceGmygNIǢ0s1Q?r vchg Mb `v#dLB)`+2#TȢ} =U,,z:晸MĐ%!Gyo!f&k%k-`_ VؽoWn 2#IEʠf=ARKj`w2|['@H$׉s>>gd}jd%cs }1Y v`:<|$+h4!cۀkbv J{еXgai}(}MCLAhlOި`Y![cc<@Ir|B0XbjEd\ȌkC^,&ЕE&b31zВTg`j(7XJ&K`9H%-s X*pp`Q_NSW6ܛŊ!&.5OyCnS~}~E 0@$߳l\. BVqRZMfe;Mw&wYmÄQńQ[&?M'::|Ÿ67k=Q }`n3;[@<Ml3m?U=@6چ8p Z໖V.pM47c۵>&GTD[&vf2j@ 2M'sRǵW4NpSD{!ω0bG)<:0)2)(c@L amf5F+m^pEſCK {zmiI x_"0&Pκh:I jrz2:Őh'6&y_'&*@!]Ork@4p)ϢrkrU<=#7+j!(a| {;wE1׾E,*Eр2"Fey N-Iv10]-AXdcUY>UAЃgk@@-A ,)H3)ue lJ'Oro) rȭy&%\oxWUIϣ}坣"qM:Hǯr.乃3yޙw;3y=>+睁ywCϻcY|;xo< Ty= 6e,Um>{by@Y͌ňc=%T 2z@9p$5ơ Yl(`VI1Oƍ" q,ݐõ]D2SlU^yHAp.@@yd?UBl PUG ۆֱ*%˚:j7xA(+mD!^:+F1ϴ"rsW2dQDN0eyȴPG>@ iQTS ~HB QrѭNTdږAuA>41l8B75JOB&AV 6 3Q?eh乱Xr,, ґZs޼$J]S\N> 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 109 0 obj << /Length 1810 /Filter /FlateDecode >> stream xڭXS8_GgQmGѣ1x0rMb&NJ9/rpMY]Iͫ7Dv*hp3 Cf:3xF~&CÑIy8QGZb%Ɵ'VzY`͓.4ۑ27Ĺ6VY B`?+vw*ڙV<%,!M)6 z%n^9bJR3EFX߹1 y.lmP0}7*SgZI?k:E$pG+BFA+'UFZ#5ʙ;r=) =ˇ` FF odW}ypQ|˧ar RUNNB\=R{ `U;oc/}ɜBh.1f@qsk?̛x>k>䟻V%z` B)i*|y7Q I4V'3ç8x[P2 >=6b')vH.> stream xڍP\ tpwwwwƝ=@p%w #sz{9ǴUMII^(`gf`ʋh13XXլ@5.VSg+G 32D ?r'ߗkcndneoffVN@i9&l@ t=L-(}_oGG@_+srvz`fe -n.?f>+W̨$&&#Mu8x9,Lff6Q2Jۛ;jӲ{AK]@?Bcbg2}b,?C,BI7\W;jZ][Ehd2K.X4[+{=3o]%M26vv6Dxwf~_G3ǟ*02;CQvQ `/d0J8wQi_bF!;+_w;|o_?]${/m~59 w]tyF?@ _サ wdyt+R?Ϸ,4EX^p0 wߟ#L^vL]yV8ymmWFh6-Q0^efaiTp!<ЁϋF d+x y+R>{G@}jYYh(y&Y8$0 zB8K7s9So2gѬE:[,1^j,.ݸd:873"G_e>.z|_ ^ O%Sq.$q7p0RPPyH'VfX?&h~!>;WIa>#x~a,7N6 ]QP0;+2P;:Noу䓉RQϗ8i4Ni+kb`:i"(?˳eR7\!4ʹ> ̽du,\U>8c TFԟ`Hs7  :q8iVs-KѵK3`6n[;_`KkfN Lp3PqVHmV5CrRB2]=B<&lN~x֑Wwɯ{JߚaP;- Иq5kAj.¥]*;i$H /ξٲ#v!JH h=2}z(di<Ç1aţV%X:ZP׽ogBШw4sL (-C tH!+1d_-۟Qaa9LS?}F'dNn?M6S6)Qڻ\mA2boGEbĦ[&1Pܚ7L4Ζ㬜 ag "& ˷ J\=:} #^[\{&/vNWJ8ti#H[ϨĞwpnhX)QL's| dIY"JN 0|eHIIEsF=Ihcޖ%4b=awQa}ZAq[tAAMvZp?Q52.OL2""M+Hg Jϙ߇=Y3Mg5j _MdXLT=]ܕ5mRh1Ӝ,;KRMW]e 3xqx:uׁCȣ"FG6Y(=P~F4.?qF1dkjiO,P|5&{#340,LSV^Ao_fjti.Y^¦ȒDsH|SMD^Rfr%PY_AzkZö? G$kS/@9/@sQ^ lnqJvS7Q;#4H,TCCe D3@!Go@.XcW|z}u"m$Ujc@\deO$(k2׏{l;_Z(T=J`A:tΞ{9>n? T-r!Țu@~s[ݶe i٪[ļMCjSZ&1 D L a4[17W[8] *P,dDh9bBbfaH%%g˄iqGMƻP". Ti+2C+U@S̪8MN9''FNϩdZeN']jXڻ࣫]+(\|fYeiFcLu3T^rX-kt$.8 IE]Bq. Mg:=L^OL\3͌ mS!vś^@fK!RgKoqC ͯ78Z5O)ۄ+`uF y!M{CT%RcVj$E)R:U:bbl:,]GѾyRdeM Wg5bLXS-`\0O ^cqeT+"ڹA'GN AACVCl* @ z I5We{UnJx h%HtXCDNa^TھF# rsԺSU_LnJ;0i' amFj$9P![ɠ-sdFꙛIpH*]_Z<;9-'_s,̌v͈4?ss"tO{Wg`|j04w^]hwGܶBE7{kwKr>f7,SPѨA=bo#?۞Lv-%Z 6D ..(&7q>϶kU!t*XgbLG伀ddJ[r5j+:DcU6yi$i_cbJĘ42$b6<>xY90p+b`Es|G/zY෣2`AbMD<\!k1dNi\WæLv᣹QthFaDړ'iKW bjc^ DO-P5ϩ W}etr.76 ع\pc YͶ,_%I1OK?|S }5ʱ g݃ 3u * h(#~aRGSD1"vMHUY.^Orp" ob<@i8-AC[8GshoVCW'T'߁k),.;l?x> 0<1$>g`Lx#]꾢z\s1 2$r[@bJs?-MV}=Z!g U !@6rʒQ!b yXL >θ+7rWl3P { ]lt  n.|!w?NYCt߂ySf, O:b#=w'T|Z8Cq8 YGRǭȬR†BJeboz!8ILjbUh[Lշ Զe VI~F2Pp:K.e=|JAmI׍D3OTsY_/T~wdӇ)]SS=ELhOrwB9ǡ8C|M6x̞)W[sj~;!ͨMMZjѐ߲'])'r_q+XylE6*YzȤ"~ 6y/G|Aα`a wP$^2'M Uפw D09} ﻞT$0tPX8G8UugnwXXx]낍i%˜Ict_Yq @ҵN2t-^$vD]CF,1U% j9oB STg\Um<0|KUYlosfl.a۳I![@Ů*L*Qit)7/_Y+1T_Π21-(EҔk2uJe~gZ-+ێq M3UvԸ#Sә{DնvKuֽhl2FmKWoSi# :* bHһ ښ El-{^d,|EL/Bӗ(6:.4X SnT) S+5U˼|_WOFNRh o$B‘LN n;5h4c+A+ tpL!U'Z^G> py N1qvo)pnT5bu +r&Ǒf;*2}jۯGov~[Fu:,QGa>{2)*HNfTio&dDc֮BT׮^ OG=3E_'tcK^C:j'ױ!*6SoXA3CHʜP jM.k:7ivq_ϜΖT4i@+ĉ({I\KVIT$ cu4U˘7"tH+H.d:53Ȧ V" &x"&qRfۙ'"R482lXΆ!s y""Og:Ty?>+av ]۹?yB.Umu'199l,]/_lk>yL0VR鱌u0̭!H ޭ\QY>s9%vRܯ#]o1zZԐxPEyj]!` u^GhdE՝lrvImZk|$P!ҔF&&Q,|m_;Y9 HeW[WPUzh.Sʅ;ؘ&~QFK`ƗES=u^.k(DKT c kqwק5Zo\`#rW@2\d0lWBke|뛮):sP9Hx+X2FwWJD0h dVfwbA"O|[pP.ZlC*l#O 2' MkH)VbMTHFf wj_@jUs/-#QyeB]ر#t>oJOAhv~\L!5'SfJp]0Ӝ2>NZM(JoJT zHnȹ}o0_D;|xSR U)O1~uY|\L0-+DŽ}zjڻLؓlWԇ^ipcn?y~Xt6n_ ikRzp!/9*=d/ ɉ51g๹6.Sv(l9Jz$h 1&&<32n]TL{7԰ai1_TQr4ƇXRL?Z=a83m#lJZ# b1}+XfG 6ТTεSlqkxuiuAǚJg8 r|v5RX"/ ~+2ȈgO10ۋ$bF.F1! Q ٿ.tu@!Uć͇?:Gu#i"Zfk޷[ႏINЗxPw7M{8;qb q8$94$9lI h]zhDC`_~ShY"*GҴw.=ޅQSoL*Ԥc11AƨVf(n,8E"1LJ+ d ALx:,lfxᾙW -y nj|D;pb$U}$uOFLUh* ߇[}etLj47g A,.,2DΚ&/z3iV}!=7Lc'a(dfX43WGs%ृ _`ѷ1 |Hs= hi'cRh[nDYjVHHT0T$b37bB.+ȅhtIpO`Kκϻi:ݪMi?%!FZ4/nevǰMSJ Tt}.&KɊsֱ@:/qX-߀CEۄ-􁃁|&z/5E0gwEf߯aVU{$ifGo"Z`ihܸ&5mZ[^5} aZm| LFrKa"-m -^`a^CI%nB`\ (wCyFv,vbX\|s3LyB`nDNA|_4PmCSt÷@+Mvyvv41y^b&};^u{ o IS!;,ej6iBMytMmh9?qv;atfпf=zE3&f*X)nnݮ?! hpvX.dUYg;;dF{H~Ħ>R'WYLg^Y;wpkEѸO>n.ܚ73xG1L J~<РKL[Ļ)')~ 9BڶeII +/[8_ > )_O#ʛ\BV.曔%_5ɜ:u}ZvEg`j= B0 `~]AE'>뇾q4;CAR{w~l,Zu4j:@]3~Z鍃j ;Dv%O>7!1k 8fdT#7gJnO_#C>,`"cw.,g?֑U1ISVx \F 7_1kAPԓwbaW.="Ho| UPٶX)~FgAŲf\x+<2/`Lv;-(jUJFް ӯ˜F*[R/K0o؆iH] ìVilbq7:#Ϩ X=d LsJ#a9pAg:= ;dSkuA:Z?'?̨M;63b#(͘t2?)pbx.kB/7y,́ ֒X坌 A7fURsn0 DtMѧ(鵳>@9t]<[s%X7Cch^ IN/5?A:6y[t:Gum*M4֧`mP LR1o`aY q Ģt<ڕ=mUWs]Η<);K[ݠi٢5TBl;2%-B-绦Z#B?zrް] nγ?r5"gw6fq9ƒگIP8*[,c _jod9Aev}Umm_=7]i$/K~\UVY|T=UD3ߏv.րh6 4Ýf3֒LoBmzμ;xOn"7QsN=\reTKd^n-}pYL/%  ވ]s8o8˅5C>:ϵxtgaHMdD_ tw-2 42v)w&t*A߉ gV^ewhT;V*sEpk>d^ЗrLGRyncG\t@<5v3qsrFFt8s 5?wGV6AV %Sk8/EW FsӇ7 ak텒e,:nm) ]g3:z ]pW[tc{%Y;eu%=Ԧ d« P֨6=L r~6:qTZiۡFM8sryvn,!ۅ)L:?cؔ5OB~A𷠹bi]w>c~B̸~#]6ʺa$/4D$(2>=j"thM;+(("s 37Z炣ޏr\V 9unxVE]B56 ?9IMeFܥ9wIP$CYS,Oљi/t,&%ZˇET=gi˯$xEDԷUR)ņj#mՈ^BJ{9r)aUG2U51!5`sBf``գ] ~`ϗ<24:|dSC3v(qvɮ/y[3>Cع. |"&;2\A܌;SHЊ-@WJ+ ܌V)>]gf`) e+#;0E,5JB>AO@mũY\{mJtKĘWdd$pC#6IPƧe8SS([vĵp.Bv~bZ8_EJ'>g6]Hd s SZ)se7jҸ0L3;|_iJ`bWVǂOg!1P 3ٶ"fu /NE]R2nʉ3]ON nO7uovդj(8_PjyRDWPQxoi]d?+aL@74ױ%8ˏ̚G9-U5÷sڽѡo7 <q|XxI{̈ Cr*ƒ4cQpwپjҫ[TaU=KU?.{Ƭ(ի-kRhqX]]QؔjJĶhc.ZoHnDmo&qF|Tl'{ { 9D(y'q6hl 0xXN 9T iQ!y!xz M}93v5Ju=w&vgIՅ4xV$e<_R;ONz[16x+CNo!SaxQ% )[aeP貲kUؖpɐ`>ZhS{b^[ ̛ۻ71s 5 |2@!) / jQ s]-+e:l&!9wOtﯠ Rt71>5M%20r1aOr^y{):2?aa 29rRgt+]ܦ1һ"VT)O;, I Ffr-CRjbAh4C-kd50J+\9^T0pP7ߓ<\>؅cA2*fkGi5c4//R0?PUDw$ y2QN?܅'ǕEOAPZܱ' Xhf?R dXc|U"mPcʑ~xJo`Y4-]N"qv*\ r`ߞg,KAbb;T7۠EA8J E@EO]O`G*[8>37a6>v< ĥ.Sꑠ2W")ZNV:z^*ͥ΃y_S2Mӡj9\)]o:Sqyh!“Kh-£P` 5 -fC57Wih<&<[?DWl _Z2%fY>U kYKYC*cCq% Ln⮟rSm[z9;36xzlNuUfuT̪ob=z,M>p+߽N'!#z~ѝZOpR*d *8Y+0! 7sMkiؚwi׼ZV3b0: waNsd6H+轅LBUl?"a΄W$Sė\XxPi?WaN$- y՘ȕU Q'MNoƞ3"Qaz:G_%4"p̔H$cj!K&k3W11izuw>^xV13$PpG3Yn{Z1 dɂcdC6l09 IKQk&ЕWaס?_C+$NÛXC$[p)~H/ÛIk L1 ߌ He_BVja<spfiu\A@M.F۰` ߃uMƐUXnv(ߡ,5ɨa;ZcD <ΏiOec1fHў|#<=>օnqR iv1ΉQC`&4Ogs%cqS`m\ efjjDB^9"GF|x%G Ao⥸pqHetlo4\> rGS^JmP!Dr endstream endobj 126 0 obj << /Length1 1864 /Length2 12027 /Length3 0 /Length 13188 /Filter /FlateDecode >> stream xڍP n5  l`pw5X ]={꽢 fuWԵ$,! Y+;0@JERɍFG vǎF !bHAA@4q(x\\œnNN!Pa4l Pa(BA.htR'/(>-\BB$@Pt9T ``quu`:CbL @, P:mvˡrBA=h ^jN ǿX#` vXA5YevWOWV"t/?[d%4  vruaw1#i^YR rtuA?i0dr^_#? hinN:`g7ߜ?6k+S_r<-l8(e?'e  B@~>v/BX-\ k#?_ C#q8'YBy*:rz,_$`pq8~Gb }9^&R(`GƜ|/?ϐ*#oGn"`{/us}.8_Օ[_+e${`Y'Rja\h`G:`?{y>\^4 <[RbǖqP( EJ||uyb#%2 EFB C$/x^|jE7C /zd/{`9X^6/a/2*_ݿK9^\/#p__Zq|_mq/pg̮6P?^n򯀗N_{_/_:,ܠЗ=7 @[X m `KebYBNb ^^K$ ,o0^]|9hChIh}09݊0A?@Mn|3l"] zޭ79ھ#s;JSlu>gS#Q0zb\]Of?S*~bA;Scs7REBKbHL;2I#H4S\]hEa:(֎ t武\)&e$U5kI'9^+7Vh,Ec;|&"ozo:Qc/b/y$O.9n\Wn'Q#gKm#1 A UwG+p`J>N)َT)vzc=~>_2ٹ{>﬽`YjIVvDVʫ2J<˒4)S T_#H"/n)&KޣT(87x]uD#-}•G/!+}dSbB$UDe^,JHRs2fMXmM`=KΓGCmމM =UvF)՝&WX3f8.%*71^VZ^sF{ Q8_oUA瘔ElJbfs[gM(f~y0xS%_A⽭! 7;J51ʞ8I`RJNRJʘ+b(ſΧc&v\{.',SWԠ,!Jx"P$W@Aw6qn;G9C>Sa$4:.h0X!\&1-q:ӘJ#0eie(&  l(ePJUuG^JtGbAؐߚš-cxy:hN&)/j?hD J2LXAaĺFiCHlk[]뼅҆li3zKJNyM n7sj\ʨ_Bv?ZCfma.Օ%&.hׇnshxdJ+L߮nV9)|[dF;m)< K}WnZ{!OQ'ywxTVBfb~(_JvRRQx(Ap:(,Gw$vH0DX+LU]gB"Jf7 e@JmsH܍eq@J/ nj n:!8/'Ӌ}J*t2g WMEf"-%[-Elã=З@yxxaD?%u]Eâ=sy=ӠuRr}ߥk_]EZq} b־1KcYGБ~@aS %33)źD$[Rf!:o{W_Q!MԪGj;=^ygX/4&IbH&/웓&/,6֠bN}MB)꜡)p9=kNӍ\'Ⱍt$5 o-jTTQ [%f=6JWA6c%6q5ѱJ+ kcx)KVY,1|z3|EK s~7vprrŝ$%$=Դ6+O@MzԊKo4QsdBA6fCE5WO!tA^*uN5>fA.L"h v ~j;6߳ 1-iRVM]9p;:\6i(0-„IYBHAKNIP6[xgX߲k'DjNXʔkXنS7~AGLtD JVj+AFՙ:J:s;4 ùfvb- 5GBlLwnh]n,uW?y5yX(D$j+" #>|׋TV!`nRE+[]XpÌ$BpF̀T9˘&WDeiP/{* ga2e=N@| 1&u]꣯`c qA16x>q W7UMܟctI,|8AK>Ϻq!AzD-5^5h=&S3*XpJ=c܂K]a%n>GcvP6Xۜ{Z/pUA1+27y]MudrE;zl5e0|SOi/m:IobUmv1dtCm7#^?V9i4 bl e|3"bpc8P~}.zcc.Dpw' 5eBw֎j*479C0znIpLP8jkHc{j[}V}G(¾Lea֬!1KD!8 Vqܮ-O3~g E-GAh&5eq;YkhӨxG!PHORg`Q=dXaKSV[ &֥ۢ|eStPj$~ `mE",ET>Wͣe3\I8К1<.vڄ1d MxE|oy',g{K.{3\}.)(KWm# "cďLް]"iѾbl@0N<2p+S`dSCWz_7'|S`^#OW3ElM}L65 j=3g PrZI[IGWxLG}v{GPVM@ IA#67.,cyQ]2>keQ]g#ЧfsYkh<gC,܀%:# fivW3ѷ~2q'HIKs7tuwXJP3Ⱥn(̖߿W }`:>^ eiαAoV6S_'ͫ<`fйdD[-5Rgr_tI Άu5Hօ1q؎ ҝvXqd ~jF;cS1`' BAxzc#p";O'$5RauPA16 '#Z~SOG.Q ?6lPWk3}%a4lhUWmM?KOQOiJ{B^:'bl0:?&}o{35JbS{>. T0Pg#;ײn /@'znۼM5^v/a]seϽwjO|.<4X X7ޢl98٪8X)`8kQT `U ߪ?g)D |"IUG*Hu0/~m#>Г"MaEgYFu+/EfՀAǏjJ_{ub@T6W2{҈:̓#zڕOUJPb# uݣf@:kKLր8=%:9yCYy׬ 1u^a|b+? ^2g;m'C1SOϢ;+,x@.e 12Wrm.:|nÀ lH:^i`FZˡlQ%dm e3WD\sXXC@e^B2?D@@;nH"xs$ko 6?Wtw,\g1:;zGI/]ůO{CWcid{Ҭ{݋3zcզKķqXrGjG/v3gE{vwפrhI,be`3v@zf{%xH`HqhPHm)Lڃ!ʦ*JHtOL<;Qv/trF߂$l٥J+g ػۡ >{M3 q *_}`X]Vʎ`mB'B@`4Ͱ2'(_4dݏ@*: 1x,jMfݳ0|L=Yk&5™ò+z(o WUQ^J_"n/s+AE]P:'HFp„Fu-d±%t|p-W⥓:~ӛS޶70tMav[zmDe2UZ9QX;0|x+c3Z'3TԦi|`b3߱}]_dy3u JsaA$8xGldVScԭb{tёjUDe~[oY9хGZڴJo75<-{/KfxkL֣C\K9T+يglxA_}Qdgh C9gpp k1}\ڠi"/#f.ҟg%1.Q ̓"tBQݯ+ob!C zĬ\j[yl)Ffaʛqb߰Z?e@ GhDC. ?_iIl᱓|Ucz]:ܺW)$bt1޼)&`1-*hp{CQQ_I9k[Cx^?zx,oWl3b4=[OҘtj)Pbs5d{3p"B(keX.ѕp/* Hb ?)5C<[wbeNrg;Mg4so%I5 ؾ֛W=%F$;"p2m|#m(DcsJzȇrhYjJذ|Mh" ,O!ݗX7"[u?mZFaU"$8+eX 7\D 2k4Sr[YW䙿YY4/yyM݄1^z,v\W S#czOBKy&;iRoBvʞysNE^{~|+#1P^H^(Sx.[4'< IS|WhN 5=nA}`v2^<]_Ņwzgp]weq]E'Z焃@i$[@ Z?wzX,D qJl!R tT7JE>m0ْz 2d)J"Ao>OM9@%jDol%{75[սܴ67CʨU{uMb0wsL/:`++tb{R$ ̵=&nSiSRXa$::Bs5JuwIi3m+ K:N vp˾۔ nyǮm+ -8j0ʪTcBv3*VG!-u\ln2,':I乫ãgab)NY9 t+;ғpYEBOlYsHT:)¦o3td0elv緲=ڀcz/]ok>HV9q1VZR}{} ^ tfv(!LwGS6Tx,Q,@N.Q?$Sڅj\*}! NeͧѬ gT$ ގ48]jjQ;#!\M Y&kYfUwEHlBMynC}hD0yC1xw U8/t39(rS _ q@ʪѥ?y-ҲHa78Cw1'.?"&\ӳ ~밃կb=HHu¸T5~`h ^ J]9p%93qMDJڃ80>й\Ih#`q;ME1Ke!&!rnldT9|8}H#9\<>8y9Gd(GAx8G7VPޚIb+>H3evTJ+M <}sW\$l ]_e"ڰ,["0"|gv6 ,/+ aڭe*Ĉfz,9:Q$AD$B ]X?fR*cV&r^Sg~+1BhS͟Nt y gJ#l>`;ołHԲ⠢6iƯ9cΦBL*9=mO{zRM0kۏBQܾU6< yiK]R 'V*$_yzPmhhtQ`pۅ6V E%ύK*Mrye ?eðV >&׫1ËLZ+FZЙ9':hG3럁eAEm6)ӓnWBKόS:3AEkqK׏n>1p^,v7c˚.ȐV)8ySWpZ4GWZt-Q2rT;MѶ~)NūuܵΆua#F[z[?CxԮج2yP^ΣbpՉUh}=:dۈעvŒuD|ٖU \0%!$;[)F#! `0LC{w#I3e;etnetY-enCa{Gnn:z43^0YN$d6&L#SȑsOMEb *lj@B^ڤ9D6 5 AN~Q*&osay+WZ~H: qov+%ͽ ^^mO}3 _;#@rƈHsl4&Uɫ3SfV+33Sm yEXy$+\oSS^E#|=3a%7b0͋yQP5v0H_ @ ǀ* ^!4{OĨAPT%H혳|U wk|cb ^Bnba|әN,w!ܵWMwv=h5&޹v^C?1W2D27ämK)y4&xCL._,Ț_P6+a)Bܸ)S=tըtԣ*n':+! %( ]`/ !S"+D]J~mzمc+1wg&?"A%L9h09Et=ՙX,ʞ㣎wIK}ch4[I)3OWs~ 1?v΃q$-ְw򫶺qR"3x%Gp}rޓ)OnMOV]a0(߻ |+p5'"T0VBatws'I=a` vfP{dt,5k~)Of.`B]44nU{6Dh|ɏ-?6^QMӣr=]y-q!fQzh}[Y>4\6Wd D]|Y7=rmi02B_i>l#ީC3T^X`W}$FzS&u+M/emt>. iUU] 'a(tV2r mܶ33rϋfIh֬2&>Zzko+0|u3/Ǖ" 3?DDe d/$HڣDe9F'lTx9^,>~ړ-Lkf.|zHF,V!XfOqz"W,>-)\r,rv+׼9>׌eV-P:s\0GGb!^b44|eϱ:o*jpG6ltD1ΐDMkN_mdo-.'VKȘikڰ`%~PH_ "S[="ŬԄ-PDrih@Tu sO;tȢK9Ur-aF}}&/Tnoc1 Zq^ endstream endobj 128 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.wwww)P$@pPXq(Nq-RPܭxE.ݳ̽$6H ebȨjqq89y99t젎htz 3X_2,BTewG_K@)Cg0@agPe(;Anht2.;0Z2XpH9 v@0@9=g:-@P (j spxzz؝!6LO;-@ x@vƎFбsSl B@g%AJ. Ư4`5;3AuWP/(+mtts~zTKi ՞%fEa,qvrnh듵,fΞ`߿wV.`;Ww_&"d6 (S@r,m9~v-~`wиVvPOg1O|{\ߟ<ӔWbu^_6^7@HP (@U l )`m0;3iA8w ywG?Ԍ?j_Ϝu>_ kfUAVvNU@ l@VvPK?\9ځAnv_'/p{f*wJ9 !73\ϧhv3ܞ?{|ߢ??C$L3R 8A~z#!$=G> 8gLϩs9##;Sɳ~噞99_ytnCw Am!r<Aז-!w;|*D[s "dۙOcb]ta!'3UgAGz_,o1^I.R=6 %i7KКiGppP~MGrO/K.]KƳ_~li,lnGs_l-F7uP,]EWb$( 3 nr Q _uۯ>+:n$$FWcS)D c_ ;7s93i@~M 3s+^kSLt*ND>[V^R!jƪh(Pϧ.s[ﳏHPgeK\O ͭNJ(ܱ!Z}=d2"e.GiUtC=54{3qvi<ص;fDb L,_Ӗ+B>Z 4erVF^+OI!:Sf~'M-2ݲ'<,"TEfqwB/²a.NM 8El1ǿ:ɏ#3j.QicF;G },ɱr#4M:Lxd0;88xaG1"Bm4qmA*#GW7$\ܽZ uByF:i3 o|S@* 0fMPpdܲ|Z1>HƔJ)z7JMn7#] f%DRF)]<5ڛzSz{GC]f%lMvz@RgKgt5P~-޷]/˔3Vn܏^A'}CwEE+Wg^)TXbug\Q ..Z_L-zZ+)u H⟶G4F^XkOIe{ءGǤ7Ԃt6_M+FD۫ TsK 5(KLG X .oMNWID8ƝJPď/xJE|!˘H.{2ϙepbJ7x70ǃ#K!lט?L{ s̋3t<6ݡq45E_lbslZ=Jֶ?#5EyFA,4sDۑE9 yS>U"6̳ʓ3/DUDv\"CԴ1SW"œ }D'9Prq[c( jv7 Tౡ|@Բ8:NqqͿ&3tPA2z~&yB 1,IXcdLL oKlC2V4ƻarCETNB%$"HBCk32s QJ7!#pMO&N)zJuu\.Ϯ:KqC$C|gX%яg6:U7OG{+^K쟓5`ҐKvdtp}rp\ځlYS@Ex^~FԦ؟<ֵ'#vNOY1dUjOG *K<;8?jm'3;MKp+)fu9TxZ];G.v23&Y1ŽC,c-_;5~KTwZʘ}̌ 0b`8HR@g {?#6 sDٌw⓿a~5K՜;A\N9A(> S5<(NU_9)&{d MZwJRxo+]-e7/׫<%z\6Ɠ6لKf\~+H{+-֤i&,ߚ:d}Z8ZGU]*_Ȩj^V/o)z%]S>Ry%…`3aV'AE, 0zW\b0"(35@)’_r fY,!]kǧO5B`e"‹fb!bKJx/'Ab՘ [ .ۡ?r$,_cc, Ա-"TWz!NWޭ?z߀%j28g;4jn z1"z5?-P,B^^)ʎOL*@EO<Hc$5Н =e'Z rPSZo&#GigT!-=aa4r[ap%}N'hCk۪.\(iTޟnlK R7gQ=T*g_ f0,4 ŋGZ`o4jv7^EjsGu'kJw'?Uk|f zOX.y~cK|F"I =$C=xa/H]GKZoPz~>*J<4jek,ʦ2"LJ\zM:~R]Xwfe~-цpz"۾i| 1 e3Y+|釿/5N-:PERM2-?uumjMQ$_` 1+jjcǡ|o ?vfzД؟H!UNkkn2DeT['zMp+QkRMơDDn#ĩjM-<jRL"_jh]X%#!wˮ"W v q'(rROG)K.mdJl!<2 аg>\Ⱥ1{f  v-6`dR3+&5E7l {8sVq\s~L-=%խjkP^1˽ES,-q6*Uoq)\zvoH)|_6ڢ3#xӁ&m.vq|FL]B,$tԬP`Sو|shG̬/SDD'D!5G%E>S7vu@DGӛcܘ-m$qr(\ q13 / ͳpi.nJ|U^/PWҍLh%Ǥed+hEWa*'+箄OeMw5iEl#X=2hjYPAGۍxv1㒿Wq'gBZD?OwKBLED2?a׺T#ƺ3^#Hu|!"SWt+5U֛B'~JTM&< b::k8uhP@\uf>\ۍF*&溭'ď{L/o'k2~юsڙ@85'792d n m@dmQ%l?z|yj"©M# …9`)$vBKԬq!WiKIygWi1s@ ?FoZU뮙C뫭:#pٰ/~9ܸ؊7eM|Ԩa|cOQ2<"֨*hJ.=;|a%#}O }'lYX!4 4eWaG#=/`|"G禲$m/m*F'^-4p),T48Щ.ugsюF*sF Y"h‡Ixiϱﲬ47BtHrߡ'1['ƉF;qv﯒ٱ_RtB`3ljN|p>@㕖*Պ>gg42昑ݜ&; ͜|8 "g!̵c L-_oWkˆ={=ݙՆn`,ӟ g{*{]kG&qx &~yY2L$Iʤ;B-@m3:1n>&'/>ٙ=| V 9HO(K$YYHm\eVc?gK5+#J`vB伽s'e(8sQTUGrNfFI9uBjQ|EA;G(DXwz7+)μ96rFYovױti>` KVX\:aϟoºy噸cV,21)0 Y*'x>wj-51v-\V.WnARcn Z>H8\JD\T2Rĥ+j=QsEӾ 7:FTT'cnJӳz}!ApƨNw3=BֵpYI"іaG?WiaP'XRqOʼG ;~}D`o l;_\> DPY֢ۗM8nBj7M(J}I+d"R-XGZfQXKV,Whl*j"s] Y;-UeÊ3`kQWSUUfuǺ/]9`fmdvҁ!DŨi$0)rWt*41ǽbt/{;r  b$G//rt5 sS&(% 'gj@C̨EF9}W-X%BvƏYaJ .kCi$r@O;igZCu#$ng?VNX"JMS&W`@f>" +]辀i$%tG2izUn>iN*5XyϡsZ$2m~b=VWfu-zH%>pd̓}kyAPqv  jdS۵DgFFJݷ'qs?@ȌYuVhFfM|au6b~]{}Ʌ7+R$>:H0Rxؾ,-!J0}npR& RcC}<ه6hn?VPBC Ĕ$20ucp+Dn:K^S=g^ ۰b=r9)ɚ)~G3#\.tRJގb#E ʙe[_oVbvJָm˟a)Ϫ hy|Y3k-gA;L&mP Kj)jubd1ĺ#D O`>6& )c䀦;,R8882o15GY'=Dc5VыjujuS{nЛi7\"J{\JzSRl׹e֛ڐ!a+ܧb'gB ΃p84s[[RLe!O CR9ņ){[k֟!H\^^LfQۃ*!!Κ| ݾi6!s[98h zE_Qfe'Ki,bM/5Xxw(dxEIJk@!0jF.k1$oshЋѦ|..wx%;X˲]gc#yˇڱBnU%\v}Ilupɯ|^AIHM)#d- CNaи#3L=Umg>DbY.d)B. ;`֕X PFXArn;L5_xXP,鑪*Z ><[HҠl Fժ~sd2Wnq[֫rz~p[/$lSg| BO)S.cP3g<^QDCfKhw {t 7otao!hD v,)E$ӓzFSx"ڊo*I'"<Jv?g'O5xoю3$]z$Zuû(j>|bMۖe>PzSާrsV;(nP\> $o:--ܧ5vJ26blw!$ұ76=m\1fZ˶"<-ib8S QygǑ^?_ȡH$=~9BѮAMrٰ0ZE^=jS['uGӜcO \({2J>KDŖ!5jNcеi¥e֙egݔvxR6v2LLD|XڗbmZ1`Z b5"#HpLiPR՗t<~*4T]F4 At2f_A U;1BX;uTXy=ڍY1`gOXRc̓**{ɢ>E1;(!ÿP?kr+e^.#6yOh cMjIuDFnjoZ%#o9< DuzL$LrQU%-U:g+S8@8{"hiﰉo v2'3/ Rb~ }b+6M26 N)65EpN*v>>M{*~,Xكt/Qt3|IT%N ji*YF, 9sZT1+!ʋo=awdCʰ%F;_`DNtl>k4;@"X|愢.wARcXFo~NAt$ifՁF+ ^lL*DjDhEX^ ycl# {kZuӎL3$B[nWj*͋i"7=wS-4] 7yƪuuKBQC LBkm|9߱K눨ƿϙb+SFbXYi1Ԯx/!#9Ys[8YKmS{ I!5ptS$*<+ݴ,0Fj#P.}5.kDuY Y \ V=X1-hSMmĭ ]wCJ'CqRQYEt^C~5UK[ZV~іzk,x ST/*t*Q1\x(`͵59|Xy2@hO*` r6 w. ]NT_EUuS@RlSQM9%(u \ \ 1~G>9;u0f$nřݽshdԛ} n-Ե0Th7!~5XS;]@8sOO2XR {qV㭤lE눌"&RV,ljӾZ6jPΕj#|5sT(W$OxQ\goyVgCI[':Whe@؉Xb[ho\6 8YFQW~F6KV*=x/W=bo#ܨ*ʁB%sQ}Oe8i>n;!_SVFẺhQUmpI0ԈH+* #^ @e?aeڔ>Zi4Ue/X]d{|*{LBT0ʽTXwKcQP`IvrJzŧCz ~"UBGl}bLzmy_!Pw`ٔ0v~Bt"@'e}lEə{(цi+>ERڡAeJ^SL(VB3C ҵxUp2$D endstream endobj 134 0 obj << /Length1 1373 /Length2 6093 /Length3 0 /Length 7034 /Filter /FlateDecode >> 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 136 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 138 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 2 0 obj << /Type /ObjStm /N 100 /First 812 /Length 3484 /Filter /FlateDecode >> stream x[ko_ .|cIڼ;iRøH{YRp{\I+#vZঀpL0˴`"I|`RaR3iqA/Ot`:*n,S9G͔aQyv)cʁh{ɼ@+H,Tΐi%pM;`S$ b%EV'UHţ.'L@P2IEH7 ͡C(F|e #~(H&G&5Mar Bcp3z8(]ϝ;/Ni]}PerZn&ҙhk~)OFj3ɤhr zzHdwQ`Z 6vj2Մ)p4%']T|1bϗĈA˂dyvV4I3w4?:pܫIfy'|CR;e!Cp)=]xoU MM! "E0B)Km-: з/BVZ](PȰ\Sem]m5pѝ+FVTnO;v)J~(X=x. w(A'Bޞ0B;BCK_=QRp mh3*2I&;%Zȥ FQ# 6e:2O0:r[(68 $gȤ`n.хGjM2T#e $bD Nn/#SaliMb`ļNYzSGiTSqP09S[r|2a0D{85WZ#&ǿ\ |fo,N;q*i9p؝Vh!aoc~={4.Guw^̦nҨ7VcՅA5-FS0rR%ZMnaѓBWx;M#z8Sak9}[Iީ?|T0~Rfs6V!@Lj~4.O+^vgӊwqwv_}Ӻ߫IÉޏ+`Hbqyz pǘwa~h< _Φ|x4Tx$~Q٭^Eo/AC`Hx^Nwq%ۖ9WWuM~#ޝ :NzgQc:GT9l[~swvİ}ۙ"|0{k--Hræ81=fƅ^Iqqi5TNacwP(Roa#Kjm67:#QǰouCwprn;#=gFmz+DAok/s3G/`dWkh-3W5FB\MC엧`mR]apT7*3v:.hcAi͜UE`kjMtåo kz)*(>#ӝJ"dURd$yeM͡kw`~kʔ2G 8|,o(͖#z:F4<N)bzK&^*^kA5ѪV/Zh®Rg ŽNYVoV s 72C/՚}%q<)s?uy_I\51ea:QiH21s~yd;,x~HƦ|jmyGl$¢bJ!iDjl.rŅuZK\ԲUJtki=%] @K'锰]Ho"Fr:oS"hgv6O&A$:XJ4Us_HM43YRnkNÁZVThZ Œ6KrKԗ$Y}SMz4y)?yw~Gf2ŃtNg(qzVWv9z\GǸ Ƕ*ݓdZ_1ߛV'oSApp8.t÷g%Ѽ}~|P*>o|'>qU!?W5z֘] 맏qQpф }"l'dU¦˻p@eѧa |΋GgO6VW/Jǫ:Z!TF|TaoUp~{7[&%MZE߅CS_)\cn{0 0 ONJރq$1Y Wc~ut\ `=1=竹6N3:O;Nh%gK;嫮vwJk/M&oeKE?xpHm΂˷/?L cV@n#(,tZUZwM5=qtHvRj-+"9s8:~9&/sV[#zUSW=kԟMۍ]vXеB۷$m<,Gy@Dm!݈w; ]+?O.yF[ڣ\بiצn"C+*LW5? endstream endobj 142 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 154 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.16)/Keywords() /CreationDate (D:20171030183909-04'00') /ModDate (D:20171030183909-04'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) kpathsea version 6.2.1) >> endobj 144 0 obj << /Type /ObjStm /N 26 /First 209 /Length 1069 /Filter /FlateDecode >> stream xڝV[SJ ~#9gf: N'P8dI\.Gk;q gCbV>I̤ AD C|Arą@2"^1q)i ?tɈB`>'!#AHY`%BN-iEdwIРFP\>{.p x^yxA/|yY{\gS{9\{426fYidOc[6<7vJ5%9U2KCb9xdZ_Wba =<k#e,1*T o6yPx-rJ1_x3$UaFs<{iz#ṈB=Q3?*:UV Eè"\8w|id\)PfrsUzPI^h* z8|OzZPE]]y }FWz.6 Dt}ԤVg=ݚy`MvSV ݜY^^˕}#wud[Ƚwݳp=8[LJYl@tຕ~\ݾr}x[k^U:w |7NyYNOTA;[i:7L[2.Ge ^?MU a Qy77l,Uqnr3E]f~SDQPo#z6;Ճv+SbcZz ] /Length 409 /Filter /FlateDecode >> stream x%ҹOQޑAAgPEddQ6w@AVe@D-L(!T6^;zcKB4֖4O{.g{NY0'#U%K$Az.Rp+#AƘ˒,(p2? W*@- ekPɕ)#RFW^'( ^ L-,.elqڠQa+4A3m#˵%G|Ch'%脻p˾}N8I^x$+Sx ] =DcFadϠ``Xe|sx9)s0I 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/segments.summary.Rd0000644000175400017540000000171213175713402017464 0ustar00biocbuildbiocbuild\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/smooth.CNA.Rd0000644000175400017540000000314513175713402016056 0ustar00biocbuildbiocbuild\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/subset.CNA.Rd0000644000175400017540000000246313175713402016054 0ustar00biocbuildbiocbuild\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/subset.DNAcopy.Rd0000644000175400017540000000151613175713402016746 0ustar00biocbuildbiocbuild\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/zoomIntoRegion.Rd0000644000175400017540000000507613175713402017134 0ustar00biocbuildbiocbuild\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/src/0000755000175400017540000000000013175725015013672 5ustar00biocbuildbiocbuildDNAcopy/src/cbsWtstats.f0000644000175400017540000005656313175725015016221 0ustar00biocbuildbiocbuildc 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/cbststats.f0000644000175400017540000006137313175725015016065 0ustar00biocbuildbiocbuildc 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/changepoints-wtd.f0000644000175400017540000001421113175725015017316 0ustar00biocbuildbiocbuildc 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/changepoints.f0000644000175400017540000001421113175725015016522 0ustar00biocbuildbiocbuildc 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.f0000644000175400017540000000250513175725015015652 0ustar00biocbuildbiocbuildc 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/flchoose.c0000644000175400017540000000023113175725015015634 0ustar00biocbuildbiocbuild#include #include /* Fortran function for log-combinations */ double F77_SUB(flchoose)(double *n, double *k) { return lchoose(*n, *k); } DNAcopy/src/fphyper.c0000644000175400017540000000027413175725015015516 0ustar00biocbuildbiocbuild#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/src/fpnorm.c0000644000175400017540000000022513175725015015336 0ustar00biocbuildbiocbuild#include #include /* Fortran function for standard normal CDF */ double F77_SUB(fpnorm)(double *x) { return pnorm(*x, 0, 1, 1, 0); } DNAcopy/src/getbdry.f0000644000175400017540000000673113175725015015510 0ustar00biocbuildbiocbuild 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/prune.f0000644000175400017540000000561713175725015015203 0ustar00biocbuildbiocbuild 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/rshared.c0000644000175400017540000000024113175725015015463 0ustar00biocbuildbiocbuild#include void F77_SUB(rndstart)(void) { GetRNGstate(); } void F77_SUB(rndend)(void) { PutRNGstate(); } double F77_SUB(dunif)(void) { return unif_rand(); } DNAcopy/src/segmentp.f0000644000175400017540000000420013175725015015657 0ustar00biocbuildbiocbuild 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/smoothCNA.f0000644000175400017540000000623213175725015015677 0ustar00biocbuildbiocbuildc 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.f0000644000175400017540000000603613175725015016045 0ustar00biocbuildbiocbuildc 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/tests/0000755000175400017540000000000013175713402014242 5ustar00biocbuildbiocbuildDNAcopy/tests/redundancy,20090610,segment.R0000644000175400017540000000727313175713402021067 0ustar00biocbuildbiocbuild###################################################################### # 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/vignettes/0000755000175400017540000000000013175725015015113 5ustar00biocbuildbiocbuildDNAcopy/vignettes/DNAcopy.Rnw0000644000175400017540000001560513175713402017104 0ustar00biocbuildbiocbuild%\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/vignettes/DNAcopy.bib0000644000175400017540000000457413175713402017075 0ustar00biocbuildbiocbuild @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} }