ArrayExpress/DESCRIPTION0000644000175200017520000000147514136065135015745 0ustar00biocbuildbiocbuildPackage: ArrayExpress Title: Access the ArrayExpress Microarray Database at EBI and build Bioconductor data structures: ExpressionSet, AffyBatch, NChannelSet Version: 1.54.0 Author: Audrey Kauffmann, Ibrahim Emam, Michael Schubert Maintainer: Suhaib Mohammed Depends: R (>= 2.9.0), Biobase (>= 2.4.0) Imports: XML, oligo, limma Description: Access the ArrayExpress Repository at EBI and build Bioconductor data structures: ExpressionSet, AffyBatch, NChannelSet License: Artistic-2.0 biocViews: Microarray, DataImport, OneChannel, TwoChannel NeedsCompilation: no Suggests: affy git_url: https://git.bioconductor.org/packages/ArrayExpress git_branch: RELEASE_3_14 git_last_commit: 9a09ffb git_last_commit_date: 2021-10-26 Date/Publication: 2021-10-26 Packaged: 2021-10-26 20:51:41 UTC; biocbuild ArrayExpress/NAMESPACE0000644000175200017520000000146714136047360015457 0ustar00biocbuildbiocbuildimportFrom("XML", "xmlTreeParse", "xmlRoot", "xpathSApply", "xpathApply", "xmlValue", "xmlAttrs", "xmlElementsByTagName", "getNodeSet", "xmlGetAttr") importFrom("Biobase", "pData", "pData<-", "phenoData", "phenoData<-", "sampleNames", "sampleNames<-", "read.AnnotatedDataFrame", "varLabels", "exprs", "assayDataNew", "featureData", "featureData<-", "featureNames", "assayData") importFrom("limma", "read.maimages") importFrom("oligo", "read.celfiles") importFrom("utils","URLencode") export("ArrayExpress", "getAE", "queryAE", "ae2bioc", "getcolproc", "getcolraw", "procset", "extract.zip") ArrayExpress/R/0000755000175200017520000000000014136047360014431 5ustar00biocbuildbiocbuildArrayExpress/R/ArrayExpress.r0000644000175200017520000000132314136047360017243 0ustar00biocbuildbiocbuildArrayExpress = function(accession, path = tempdir(), save = FALSE, dataCols = NULL, drop = TRUE){ expFiles = getAE(accession, path, type = "raw") # if(!save) # on.exit(cleanupAE(expFiles)) raweset = try(ae2bioc(mageFiles = expFiles, dataCols = dataCols, drop=drop)) if(inherits(raweset, 'try-error')){ save = TRUE raweset = NULL } else{ if(!is.list(raweset)){ # raweset = raweset[[1]]; message(paste("\n",accession," was successfully loaded into ",class(raweset),"\n")) } else { message(paste("\n",accession," was successfully loaded into ",length(raweset)," ",unlist(lapply(raweset,function(x){class(x)})),"\n")) } } if(!save) on.exit(cleanupAE(expFiles)) return(raweset) } ArrayExpress/R/ae2bioc.r0000644000175200017520000001163014136047360016121 0ustar00biocbuildbiocbuild# A function that takes ArrayExpress MAGETAB files for a specific experiment and returns an equivalent R object representation (NChannelSet, ExpressionSet or AffyBatch) # # Author: iemam ############################################################################### ae2bioc = function(mageFiles, dataCols=NULL, drop=TRUE){ # if(!save) # on.exit(cleanupAE(as.list(mageFiles))) dataFiles = mageFiles$rawFiles sdrf = mageFiles$sdrf idf = mageFiles$idf adf = mageFiles$adf path = mageFiles$path notuse = grep(dataFiles, pattern = "info.txt$|idf.txt$|processed|sdrf.txt$|.log$|RData|class") if (length(notuse) != 0) dataFiles = dataFiles[-notuse] dataFiles = dataFiles[dataFiles != ""] allDataFiles = dataFiles; if(length(dataFiles)==0) stop("ArrayExpress: Experiment has no raw files available. Consider using processed data instead by following procedure in the vignette") #read sample annotations ph = readPhenoData(sdrf,path) if(inherits(ph, 'try-error')){ ph=NULL stop("ArrayExpress: Parsing SDRF failed. Please make sure SDRF file ",sdrf," exists in ",path, " and is not corrupt.") } fullPhenoData = ph; #Checks arrayDataCol = getSDRFcolumn("ArrayDataFile",varLabels(ph)) # labelCol = getSDRFcolumn("label",varLabels(ph)) #ArrayDesign REF in SDRF adr = unique(pData(ph)[,getSDRFcolumn("ArrayDesignREF",varLabels(ph))]) adr = adr[adr != ""] if(!all(dataFiles %in% ph[[arrayDataCol]])) warning("Some data files in the zip archive are missing from the SDRF. The object may not be built.") if(length(adr)>1) message("ArrayExpress: Experiment uses multiple Array Designs. A separate expressionSet will be created for each") if((length(adr) == 0 || is.na(adr)) && length(grep(".cel",dataFiles, ignore.case = TRUE)) != 0) warning("ArrayExpress: Cannot find the array design reference in the sdrf file. The object may not be built.") if((length(adr) == 0 || is.na(adr)) && length(grep(".cel",dataFiles, ignore.case = TRUE)) == 0) stop("ArrayExpress: Cannot find the array design reference in the sdrf file. The object cannot be built.") #list of return R objects robjs=list(); for (ad in adr){ #Subselect SDRF data for current ArrayDesign REF if(length(adr)>1){ res=getPhenoDataPerAD(ad,fullPhenoData,allDataFiles) dataFiles = unique(res$dataFiles) ph = res$pheno } #read data files green.only = isOneChannel(sdrf,path) rawdata= try(readAEdata(path = path,files = dataFiles,dataCols=dataCols,green.only=green.only)) if(inherits(rawdata, "try-error")) stop("ArrayExpress: Unable to read assay data") #read and match array feature metadata to raw data if(!inherits(rawdata,"FeatureSet")){ adfFile = adf[grep(ad,adf)] features= try(readFeatures(adf=adfFile,path=path)) if(inherits(features, "try-error")){ warning("ArrayExpress: Unable to read feature data") features = NULL; } } #read experiment meta data experimentData = try(readExperimentData(idf=idf,path=path)) if(inherits(experimentData, "try-error")){ warning("ArrayExpress: Unable to read experiment data"); experimentData = new("MIAME"); } #Finally build ExpressionSet #Attach pheno and feature data to oligo::FeatureSet if(inherits(rawdata,"FeatureSet")){ raweset=rawdata phenoData(raweset) = ph[sampleNames(rawdata)] } if(class(rawdata) == "RGList" | class(rawdata) == "EListRaw"){ #construct nchannelset if(class(rawdata) == "RGList"){ assayData = if("Rb" %in% names(rawdata)) #FIXME: keep all with(rawdata, assayDataNew(R = R, G = G, Rb = Rb, Gb = Gb)) #will not work if datacolumns where user specified else with(rawdata, assayDataNew(G = G, R = R)) raweset = new("NChannelSet", assayData = assayData, experimentData = experimentData) } #construct expressionSet if(class(rawdata) == "EListRaw"){ assayData = with(rawdata, assayDataNew(E = E, Eb = Eb)) raweset = new("NChannelSet", assayData = assayData, experimentData = experimentData) } #Attach pheno data if(!is.null(ph)){ #FIXME:? #imagene doesnt have targets slot ph = ph[rawdata$targets$FileName,] phenoData(raweset) = ph } #Attach features if(!is.null(rawdata$genes) && rawdata$source != "ae1"){ features2 = new("AnnotatedDataFrame",rawdata$genes) featureData(raweset) = features2; } else if(!is.null(features)) featureData(raweset) = features; #consistency of order between features in featureData and assayData is established via previous sorting of feature columns if(length(featureNames(assayData(raweset))) != length(featureNames(featureData(raweset)))) warning("Number of features in assayData and featureData are not equal. Check control features (NA) that might have been removed from either assayData or featureData."); } robjs[[ad]]=raweset } if(drop && length(robjs) == 1) robjs = robjs[[1]] return(robjs) } ArrayExpress/R/extract.zip.r0000644000175200017520000000137714136047360017077 0ustar00biocbuildbiocbuildextract.zip = function (file, extractpath = dirname(file)[1]) { topic = basename(file) path = dirname(file) if (file.exists(file.path(path, topic))){ lapply(1:length(file), function(i) unzip(zipfile = file.path(path[i], topic[i]), exdir = extractpath)) rc = lapply(1:length(file), function(i) unzip(zipfile = file.path(path[i], topic[i]), list = TRUE, exdir = extractpath)) if(length(rc) > 1) rc = do.call(c, sapply(1:length(file), function(i) as.character(rc[[i]][,1]))) else rc = as.character(rc[[1]][,1]) if(inherits(rc,"try-error")) stop("Cannot extract the files the downloaded archive. Please install unzip on your machine") }else stop(sprintf("%s does not exist",file.path(path, topic))) return(rc) } ArrayExpress/R/getAE.r0000644000175200017520000001603114136047360015602 0ustar00biocbuildbiocbuild# TODO: Add comment # # Author: iemam ############################################################################### getAE = function (accession, path = getwd(), type = "full", extract = TRUE, local = FALSE, sourcedir=path) { if(!local){ baseURL = "https://www.ebi.ac.uk/arrayexpress/xml/v2/files" xmlURL = paste(baseURL,accession,sep="/") xml = xmlTreeParse(suppressWarnings(readLines(xmlURL)),useInternalNodes=TRUE) sdrfURL = xpathSApply(xml,"/files/experiment/file[kind='sdrf' and extension='txt']/url", xmlValue) sdrfFile = xpathSApply(xml,"/files/experiment/file[kind='sdrf' and extension='txt']/name", xmlValue) idfURL = xpathSApply(xml,"/files/experiment/file[kind='idf' and extension='txt']/url", xmlValue) idfFile = xpathSApply(xml,"/files/experiment/file[kind='idf' and extension='txt']/name", xmlValue) adfURL = xpathApply(xml,"/files/experiment/file[kind='adf' and extension='txt']/url", xmlValue) adfFiles = xpathApply(xml,"/files/experiment/file[kind='adf' and extension='txt']/name", xmlValue) rawArchiveURL = xpathApply(xml,"/files/experiment/file[kind='raw' and extension='zip']/url", xmlValue) procArchiveURL = xpathApply(xml,"/files/experiment/file[kind='processed' and extension='zip']/url", xmlValue) }else{ allfiles = list.files(sourcedir) #SDRF sdrfFile = allfiles[grep(paste(accession,".sdrf.txt$",sep=""),allfiles)] if(length(sdrfFile)==0) stop("SDRF file not found in directory ",sourcedir) sdrfURL=paste("file:/",sourcedir,sdrfFile,sep="/") #IDF idfFile = allfiles[grep(paste(accession,".idf.txt$",sep=""),allfiles)] if(length(idfFile)==0) warning("IDF file not found in directory ",sourcedir) idfURL=paste("file:/",sourcedir,idfFile,sep="/") #ADF ph = try(read.AnnotatedDataFrame(sdrfFile, path = sourcedir, row.names=NULL, blank.lines.skip = TRUE, fill=TRUE, varMetadata.char="$")) if(inherits(ph,'try-error')){ warning("Unable to retrieve ADF reference from SDRF. Reading any ADF in directory.") adfFiles = allfiles[grep(".adf.txt$",allfiles)] } else{ adr = unique(pData(ph)[,getSDRFcolumn("ArrayDesignREF",varLabels(ph))]) adfFiles = paste(adr,".adf.txt",sep=""); } if(all(file.exists(file.path(sourcedir,adfFiles)))){ adfURL = paste("file:/",sourcedir,adfFiles,sep="/") downloadADF = FALSE } else{ #ADF not found in local directory. Attempt to retrieve it from FTP filesURL="https://www.ebi.ac.uk/arrayexpress/files"; adfURL = paste(filesURL,adr,adfFiles,sep="/"); downloadADF = TRUE } rawArchiveURL = NULL procArchiveURL = NULL #RAW files rawArchive = allfiles[grep(paste(accession,".raw.[0-9]{1,}.zip",sep=""),allfiles)] if(length(rawArchive)!=0) rawArchiveURL = paste("file:/",sourcedir,rawArchive,sep="/") else warning("No raw files found in directory ",sourcedir) #Processed files processedArchive = allfiles[grep(paste(accession,".processed.[0-9]{1,}.zip",sep=""),allfiles)] if(length(processedArchive)!=0) procArchiveURL = paste("file:/",sourcedir,processedArchive,sep="/") else warning("No processed data files found in directory ", sourcedir) } #a temporary solution for old GEO imports with seq and array files if(length(sdrfURL) > 1){ warning("Found two SDRF files: \n",paste(sdrfURL,"\n")) hybSDRF = grep("hyb.sdrf",sdrfURL) if(length(hybSDRF)>0){ message("Choosing ",sdrfURL[hybSDRF]) sdrfURL=sdrfURL[hybSDRF]; sdrfFile=sdrfFile[hybSDRF]; } else{ warning("Unable to choose SDRF file. Please report experiment to miamexpress@ebi.ac.uk") } } #Download/copy files to working directory specified by 'path' if(!local || path!=sourcedir || downloadADF){ #Download/copy ADF adfFiles<-lapply(adfURL, function(url){ filedest = paste(path,basename(url),sep="/") dnld = try(download.file(url, filedest, mode="wb")) if(inherits(dnld, 'try-error') || file.info(filedest)$size == 0) { warning(paste(url, " does not exist or is empty. \n"),sep="") adffile = NULL} else{ adffile = basename(filedest)} return(adffile); }) if(!is.null(adfFiles)) adfFiles = unlist(adfFiles) } if(!local || path!=sourcedir){ #Download/copy SDRF sdrfFileDest = paste(path,sdrfFile,sep="/") dnld = try(download.file(sdrfURL, sdrfFileDest, mode="wb")) if(inherits(dnld, 'try-error') || file.info(sdrfFileDest)$size == 0) { warning(paste(sdrfFile, " does not exist or is empty. The object will not have featureData or phenoData. \n"),sep="") sdrfFile = NULL adffile = NULL } #Download/copy IDF idfFileDest = paste(path,idfFile,sep="/") dnld = try(download.file(idfURL, idfFileDest, mode="wb")) if(inherits(dnld, 'try-error') || file.info(idfFileDest)$size == 0) { warning(paste(idfFile, " does not exist or is empty. \n"),sep="") idfFile = NULL } ## Download data files rawArchive = NULL processedArchive = NULL ##RAW DATA if(type!="mageFilesOnly" && !is.null(rawArchiveURL) && (type == "full" || type == "raw")){ message("Copying raw data files\n") rawArchive<-lapply(rawArchiveURL, function(url){ filedest = paste(path,basename(url),sep="/") dnld = try(download.file(url, filedest, mode="wb")) ## Download raw.x.zip checking if(inherits(dnld, 'try-error') || file.info(filedest)$size == 0) { warning(paste(url, " does not exist or is empty. \n"),sep="") } else { return (filedest) } }) if(!is.null(rawArchive)){ rawArchive = unlist(rawArchive) rawArchive = basename(rawArchive) } } ##PROCESSED DATA if((type!="mageFilesOnly" && type == "full" || type == "processed") && !is.null(procArchiveURL)){ message("Copying processed data files\n") processedArchive<-lapply(procArchiveURL, function(url){ filedest = paste(path,basename(url),sep="/") dnld = try(download.file(url, filedest, mode="wb")) ## Download processed.x.zip checking if(inherits(dnld, 'try-error') || file.info(filedest)$size == 0) { warning(paste(url, " does not exist or is empty. \n"),sep="") } else { return(filedest) } }) if(!is.null(processedArchive)){ processedArchive = unlist(processedArchive) processedArchive = basename(processedArchive) } } } rawFiles = NULL processedFiles = NULL if(extract){ message("Unpacking data files") if(!is.null(rawArchive)) rawFiles<-lapply(rawArchive, function(zipfile){ rawfiles = extract.zip(file = paste(path, zipfile, sep="/")) return(rawfiles) }) if(!is.null(processedArchive)) processedFiles<-lapply(processedArchive, function(zipfile){ procfiles = extract.zip(file = paste(path, zipfile, sep="/")) return(procfiles) }) if(!is.null(rawFiles)) rawFiles = unlist(rawFiles) if(!is.null(processedFiles)) processedFiles = unlist(processedFiles) } res = list(path = path, rawFiles = rawFiles, rawArchive = rawArchive, processedFiles = processedFiles, processedArchive = processedArchive, sdrf = sdrfFile, idf = idfFile, adf = adfFiles) return(res) } ArrayExpress/R/getcolproc.r0000644000175200017520000000156314136047360016762 0ustar00biocbuildbiocbuildgetcolproc = function(files){ path = files$path procfile = files$processedFiles[1] ph = try(read.AnnotatedDataFrame(files$sdrf, path = path, row.names = NULL, blank.lines.skip = TRUE, fill = TRUE, varMetadata.char = "$", quote="\"")) derivedMatrixCol = getSDRFcolumn("DerivedArrayMatrix",varLabels(ph)) derivedFileCol = getSDRFcolumn("DerivedArrayFile",varLabels(ph)) #TEMP############ skiplines = 1 ################# if(length(derivedMatrixCol) != 0) skiplines = 1 else if(length(derivedFileCol) != 0) skiplines = 0 else warning("Unable to find Derived Data column in SDRF") coln = scan(file.path(path,procfile),what = "",nlines = 1, skip = skiplines, sep = "\t") return(unique(coln)) } getcolraw = function(path, rawfiles){ rawfile = rawfiles[1] coln = scan(file.path(path,rawfile),what = "",nlines = 1, sep = "\t") return(coln) } ArrayExpress/R/parseMAGE.r0000644000175200017520000005124114136047360016363 0ustar00biocbuildbiocbuild# TODO: Add comment # # Author: iemam ############################################################################### headers<-list( ae1=c("metaColumn","metaRow","row","column"), genepix=c("Block","Column","Row","X","Y"), arrayvision=c("Primary","Secondary"), agilent=c("Row","Col","PositionX","PositionY"), scanalyze=c("GRID","COL","ROW","LEFT","TOP","RIGHT","BOT"), scanarray=c('Array Column','Array Row','Spot Column','Spot Row','X','Y'), quantarray=c('Array Column', 'Array Row', 'Column', 'Row'), spotfinder=c("MC","MR","SC","SR","C","R"), mev=c("MC","MR","C","R","UID"), codelink=c("Logical_row","Logical_col","Center_X","Center_Y"), bluefuse=c("COL","ROW","SUBGRIDCOL","SUBGRIDROW"), UCSFSpot=c("Arr-colx","Arr-rowy","Spot-colx","Spot-rowy"), NimbleScanFeature=c("X","Y","PROBE_ID","X_PIXEL","Y_PIXEL"), NimblegenNASA=c("X_BC","Y_BC","Feature_ID","ProbID_BC"), imagene=c('Meta Column', 'Meta Row', 'Column', 'Row', 'Field', 'Gene ID'), ImaGene3=c("Meta_col","Meta_row","Sub_col","Sub_row","Name","Selected"), ImaGene7=c("Block","Column","Row","Ch1 XCoord","Ch1 YCoord", "Ch2 XCoord", "Ch2 YCoord"), ImaGeneFields=c("Field","Column","Row","XCoord","YCoord"), CSIRO_Spot=c("grid_c","grid_r","spot_c","spot_r","indexs") #add illumina ) isOneChannel = function(sdrf,path){ ph = try(read.AnnotatedDataFrame(sdrf, path = path, row.names = NULL, blank.lines.skip = TRUE, fill = TRUE, varMetadata.char = "$", quote="\"")) labelCol = getSDRFcolumn("label",varLabels(ph)) if(length(labelCol)==0) return(TRUE) # assume 1-color if no label reported - we warn the user in readPhenoData else return(length(unique(tolower(ph[[labelCol]])))==1) } readPhenoData = function(sdrf,path){ message("ArrayExpress: Reading pheno data from SDRF") ph = try(read.AnnotatedDataFrame(sdrf, path = path, row.names = NULL, blank.lines.skip = TRUE, fill = TRUE, varMetadata.char = "$", quote="\"")) arrayDataCol = getSDRFcolumn("ArrayDataFile",varLabels(ph)) labelCol = getSDRFcolumn("label",varLabels(ph)) if(length(arrayDataCol)==0) warning("ArrayExpress: Cannot find 'Array Data File' column in SDRF. Object might not be created correctly.") if(length(labelCol)==0) warning("ArrayExpress: Cannot find 'Label' column in SDRF. Object might not be created correctly.") ph = ph[gsub(" ", "", ph$Array.Data.File) != ""] sampleNames(ph) = ph$Array.Data.File ph@varMetadata['Array.Data.File','labelDescription'] = "Index" ph@varMetadata['Array.Data.File','channel'] = as.factor("_ALL_") #Remove empty rows from pheno data emptylines = which(sapply(seq_len(nrow(pData(ph))), function(i) all(pData(ph)[i,] == "",na.rm = TRUE))) if(length(emptylines) != 0) pData(ph) = pData(ph)[-emptylines,] phenoData = pData(ph) if(length(arrayDataCol)!=0 && length(labelCol)!=0){ #filter out duplicated rows where multiple derived data files are available per one array data file ph=ph[!duplicated(phenoData[,c(arrayDataCol,labelCol)])] } #treat SDRF for two channel experiments if(length(labelCol)==1 && length(unique(tolower(ph[[labelCol]])))==2){ arrayFilesNum = length(unique(ph[[arrayDataCol]])) si = pData(ph)[1:(arrayFilesNum*2),] lab = split(si,si[,"Label"]) if(nrow(lab[[1]]) != nrow(lab[[2]])){ stop("Number of CY3/CY5 is not equal") } #Reorder rows in each group (Cy3,Cy5) to the same order lab[[1]] = lab[[1]][order(lab[[1]][,arrayDataCol]),] lab[[2]] = lab[[2]][order(lab[[2]][,arrayDataCol]),] same = which(lapply(1:ncol(lab[[1]]), function(i) all(lab[[1]][i] == lab[[2]][i])) == TRUE) all = lab[[1]][same] gspe = lab[[1]][-same] colnames(gspe) = paste(colnames(gspe),names(lab)[1],sep = ".") rspe = lab[[2]][-same] colnames(rspe) = paste(colnames(rspe),names(lab)[2],sep = ".") metaData = data.frame(labelDescription = c(rep("_ALL_",ncol(all)),rep("G",ncol(gspe)),rep("R",ncol(rspe)))) ph = new("AnnotatedDataFrame", data = cbind(all,gspe,rspe), varMetadata = metaData) arrayDataCol = getSDRFcolumn("ArrayDataFile",varLabels(ph)) rownames(pData(ph)) = gsub(".[a-z][a-z][a-z]$","",ph[[arrayDataCol]],ignore.case=T) } # if(!all(basename(files) %in% pData(ph)[,getSDRFcolumn("ArrayDataFile",varLabels(ph))])) # warning("Some data files in the zip archive are missing from the SDRF. The object may not be built.") return(ph) } readAEdata = function(path,files,dataCols,green.only){ message("ArrayExpress: Reading data files") source = getDataFormat(path,files) #process extra arguments passed to read.maimages # if (!is.null(dataCols)) { # if (length(rawcol) > 1 && !is(rawcol, "list")) # stop("The argument 'rawcol' must be a list if multiple column name are given.") # if (length(rawcol) == 1 && !is(rawcol, "character")) # stop("The argument 'rawcol' must be a character if one column name is given.") # if (is(rawcol, "list") && !("R" %in% names(rawcol) && "G" %in% names(rawcol))) # stop("The names of the columns must contain R and G.") # } if(source == "affy"){ rawdata = try(oligo::read.celfiles(filenames = file.path(path,unique(files)))) if(inherits(rawdata, 'try-error')){ stop("Unable to read cel files in",path) } return(rawdata) }else if(source=="ae1"){ #Old AE1 formatted data files if (is.null(dataCols)){ dataCols= try(getDataColsForAE1(path,files)) if(inherits(dataCols,'try-error')) return() } rawdata = try(read.maimages(files=files,path=path,source="generic",columns=dataCols,annotation=headers$ae1)) if(!inherits(rawdata, 'try-error')) rawdata$source="ae1" }else if(source %in% c("agilent","arrayvision","bluefuse","genepix","bluefuse","imagene","quantarray")){ #data format can be directly read by limma rawdata = try(read.maimages(files=files,path=path,source=source,columns=dataCols,green.only=green.only)) }else if(!is.null(dataCols) && source=="unknown"){ #read generic source given columns specified by user rawdata = try(read.maimages(files=files,path=path,source="generic",columns=dataCols,green.only=green.only)) }else # TODO: add more formats (illumina) stop("Unable to recognize data file format") if(inherits(rawdata, 'try-error')){ stop("Unable to read data files in",path) } #reorder rows of RGList to reflect the same order in ADF as Block Row/Block Column/Row/Column if(is.null(rawdata$genes)) stop("Unable to read probe annotation from RGList") if(is.null(rawdata$source)) stop("Unable to read source from RGList") rawdata<-switch(source, agilent = rawdata<-rawdata[with(rawdata$genes,order(Row,Col)),], genepix = rawdata<-rawdata[with(rawdata$genes,order(Block,Row,Column)),], ae1 = rawdata<-rawdata[with(rawdata$genes,order(metaRow,metaColumn,row,column)),], rawdata) #if generic user has to specify feature columns in data return(rawdata) } readFeatures<-function(adf,path,procADFref=NULL){ message("ArrayExpress: Reading feature metadata from ADF") lines2skip = skipADFheader(adf,path,!is.null(procADFref)) features = try(read.table(file.path(path, adf), row.names = NULL, blank.lines.skip = TRUE, fill = TRUE, sep="\t", na.strings=c('?','NA'), skip = lines2skip, header=TRUE, quote="")) if('Block.Column' %in% colnames(features) & 'Reporter.Name' %in% colnames(features)){ ommittedRows = which(is.na(features[,'Block.Column']) | is.na(features[,'Reporter.Name'])) if(length(ommittedRows)!=0){ message("ArrayExpress: Ommitting NA rows from ADF") features = features[-ommittedRows,] } } if(!is.null(procADFref)){ if(procADFref %in% colnames(features)) rownames(features) = features[,procADFref] else{ repCol = getSDRFcolumn("reporter",colnames(features)) if(length(repCol) != 0) repCol= repCol[1] else repCol = getSDRFcolumn("composite",colnames(features)) if(length(repCol) != 0) repCol = repCol[1] else repCol = NULL if(!is.null(repCol)) rownames(features) = features[[repCol]] } } #Sort ADF features by columns Block row/Block column/Row/Column (only applicable for raw data exps, processed data is ordered by reporter/composite name) if("Block.Row" %in% colnames(features)) features = features[with(features,order(Block.Row,Block.Column,Row,Column)),] #Row names of featureData must match row names of the matrix / matricies in assayData # ri1 = grep("reporter.identifier|reporter.name", colnames(adff), ignore.case=TRUE) # ri2 = grep("reporter.identifier|reporter.name", colnames(fn), ignore.case=TRUE) # if(all(adff2[,ri1] == fn[,ri2])) # featureData(eset) = new("AnnotatedDataFrame",adff2) # else stop("Do not manage to map the reporter identifier between the annotation and the data files.\n") return(new("AnnotatedDataFrame",features)) } ## Assign experiment Data ## By Juok Cho readExperimentData = function(idf, path){ idffile = scan(file.path(path,idf),character(),sep = "\n",encoding="UTF-8") idf.data = list() for(g in idffile) { e = unlist(strsplit(g,"\t")) key = e[1] if(length(e)>1) values = e[2:length(e)] else values = NA idf.data[[key]] = values } ## making key matches # ## (Person Last Name, Person First Name, Person Mid Initials), Person Email, Person Phone, Person Address, Person Affiliation, Person_Name = c(idf.data$"Person First Name", idf.data$"Person Last Name",idf.data$"Person Mid Initials") Personal_contact = c(idf.data$"Person Email", idf.data$"Person Phone", idf.data$"Person Address") ## making experimentData object # SubmitterIndex = which(idf.data$"Person Roles"=="submitter") experimentData = new("MIAME", name = as.character(paste(idf.data$"Person Last Name"[SubmitterIndex],", ",idf.data$"Person First Name"[SubmitterIndex], sep = "")), #performer lab = as.character(idf.data$"Person Affiliation"[SubmitterIndex]) , #Person Affiliation contact = as.character(idf.data$"Person Email"[SubmitterIndex]), # Person Email(Person Phone, Person Address) title = as.character(idf.data$"Investigation Title") , #description #Investigation Title ##abstract= "", #not provided in the idf.data ##url = "", other = list( accession = gsub(".sdrf.txt","",idf.data$"SDRF File"), #Experiment Name identifier = gsub(".sdrf.txt","",idf.data$"SDRF File"), #Experiment Name ##Experimental Factor Type experimentalFactor = c(idf.data$"Experimental Factor Type"), ##Experimental Design type = c(idf.data$"Experimental Design") #measurementType = experimentData(eset)@other$measurementType #from processed data.zip depending on user answer about QT type ) ) #experimentData(eset) = experimentData return(experimentData) } skipADFheader<-function(adf,path,proc=F){ if(!proc) columns = list('Block Column','Block Row','Column','Row') else columns = list('Composite Element Name') con = file(file.path(path, adf), "r") on.exit(close(con)) Found = FALSE i = 0 repeat { i = i+1 txt <- readLines(con,n=1) if(!length(txt)) stop("Failed to recognize ADF file format") Found = TRUE for(a in columns) Found = Found && length(grep(a,txt)) Found2 = length(grep("^Reporter[[:punct:]|[:blank:]]*Name",txt,ignore.case=TRUE)) if(Found || Found2) break } return(i-1) } getPhenoDataPerAD<-function(ad,ph,dataFiles){ phenoData = pData(ph) arrayDataCol = getSDRFcolumn("ArrayDataFile",varLabels(ph)) arrayDesignRefCol = getSDRFcolumn("ArrayDesignREF",varLabels(ph)) if(length(arrayDataCol)==0) stop("Cannot find 'Array.Data.File' column in SDRF. Experiment uses multiple array designs. Cannot distinguish arrays with similar array design.") if(length(arrayDesignRefCol)==0) stop("Cannot find 'Array.Design.REF' column in SDRF. Experiment uses multiple array designs. Cannot distinguish arrays with similar array design.") if(length(phenoData[phenoData[arrayDesignRefCol]==ad,arrayDataCol]) == 0) stop("Cannot find array data file names in the sdrf file. Experiment uses multiple array designs. Cannot distinguish arrays with similar array design.") #Subselect data files for current ArrayDesign REF selectFiles = phenoData[phenoData[arrayDesignRefCol]==ad,arrayDataCol] if(!all(selectFiles %in% dataFiles)){ stop("Some or all data files for ",ad," array are missing.") } #subselect phenoData Frame for files ph = ph[phenoData[arrayDesignRefCol]==ad] phenoData = pData(ph) return(list(pheno=ph,dataFiles=selectFiles)) } getDataFormat=function(path,files){ if(length(grep(".cel",files, ignore.case = TRUE)) == length(files)){ return("affy") } else{ #Retrieve Column names from first data file allcnames = scan(file.path(path,files[1]),what = "",nlines = 200, sep = "\t",quiet=TRUE) allcnamesL = try(tolower(gsub("^\\s","",allcnames)),silent=TRUE) if(inherits(allcnamesL, 'try-error')){ allcnames = scan(file.path(path,files[1]),what = "",nlines = 200, sep = "\t",quiet=TRUE,encoding="latin1") allcnamesL = try(tolower(gsub("^\\s","",allcnames))) if(inherits(allcnamesL, 'try-error')){ allcnamesL = allcnames } } #Find source of data for(source in names(headers)){ allthere<-tolower(headers[[source]]) %in% allcnamesL if(all(allthere)) return(source) } } #Unable to detect source allcnames = scan(file.path(path,files[1]),what = "",nlines = 1, sep = "\n",quiet=TRUE) return("unknown") #stop("Unable to recognize data file format. First line:\n",allcnames) } getDataColsForAE1 = function(path,files){ url2 = "http://sourceforge.net/p/tab2mage/code/HEAD/tree/trunk/Tab2MAGE/lib/ArrayExpress/Datafile/QT_list.txt?format=raw" qt = try(read.table(url2, sep = "\t", quote = "", check.names = FALSE, fill = TRUE, comment.char = "#", stringsAsFactors = FALSE, encoding = "UTF-8")) ##read the QT file from the web if(inherits(qt, "try-error")) qt = try(read.table( file.path(system.file("doc", package = "ArrayExpress"),"QT_list.txt"), sep = "\t", quote = "", check.names = FALSE, fill = TRUE, comment.char = "#", stringsAsFactors = FALSE, encoding = "UTF-8")) ##read the QT file from the package scanners = grep(">>>",qt[,1],value = TRUE) ## list all the scanner names sl = grep(">>>",qt[,1]) ## list all the line numbers wherea scanner type starts scanners = gsub(">","",scanners) ## Parsing the first line of the expression file allcnames = scan(file.path(path,files[1]),what = "",nlines = 1, sep = "\t",quiet=TRUE) ## Looking for the right column to use scanname = allcnames[grep(":",allcnames)] if(length(grep("Database|Reporter",scanname)) != 0) scanname = scanname[-grep("Database|Reporter",scanname)] ##Feature is a problem because of Feature Extraction feature = grep("^Feature^",scanname) fe = grep("Feature Extraction",scanname) if(length(feature) != 0) scanname = scanname[-feature[!feature %in% fe]] ##Ready to read data if(length(scanname) == 0) stop(sprintf("No scanner name is given. It is not possible to handle such a case. Try to set the argument 'dataCols' by choosing among the following columns names: \n") , sprintf("\"%s\" \n",allcnames)) ##Image Analysis Program software = unique(sapply(seq_len(length(scanname)), function(i) strsplit(scanname,":")[[i]][1])) st = NULL for(x in software){ if(length(grep(x, scanners)) != 0){ st = x break } } #if(length(grep(st, scanners)) == 0) if(is.null(st)) stop(sprintf("Scanner name is, ",software,". This scanner type is not valid. \nTry to set the argument 'dataCols' by choosing among the following columns names: \n", st),sprintf("\"%s\" \n",scanname)) if(length(st) != 1) stop(sprintf("%s scanner names are given ( ",length(st)), sprintf("\"%s\" ",st), sprintf("). It is not possible to handle such a case. Try to set the argument 'dataCols' by choosing among the following columns names: \n") ,sprintf("\"%s\" \n",scanname)) if(length(grep(st, scanners)) > 1) stop(sprintf("Scanner name can be '%s'. \nTry to set the argument 'dataCols' by choosing among the following columns names: \n", scanners[grep(st, scanners)]),sprintf("\"%s\" \n",scanname)) gs = qt[((sl[grep(st,scanners)]+1):(sl[grep(st,scanners)+1]-1)),] ## extract the QTs of the specific scanner type foreground = gs[(gs[,4] == "MeasuredSignal" & (is.na(gs[,5]) | gs[,5] == 0)),c(1,7)] ## the colnames to use in the read.column background = gs[(gs[,4] == "MeasuredSignal" & (gs[,5] == 1)),c(1,7)] ## the colnames to use in the read.column foreground[,1] = paste(st,":",foreground[,1],sep = "") colnamesf = foreground[which(foreground[,1] %in% allcnames),] df = dim(colnamesf) if(dim(background)[1] != 0){ background[,1] = paste(st,":",background[,1],sep = "") colnamesb = background[which(background[,1] %in% allcnames),] db = dim(colnamesb) }else db = 0 if(length(files) != 1){ if(!all(sapply(2:length(files), function(i) readLines(file.path(path,files[1]),1) == readLines(file.path(path,files[i]),1)))) warning(sprintf("The files do not all have the same headings whereas the array design is the same. It may cause the object not being created.")) } #Two channel data if(df[1] == 2){ rawcol = if(db[1] == 2) list(R = colnamesf[colnamesf[,2] == "Cy5",1], G = colnamesf[colnamesf[,2] == "Cy3",1], Rb = colnamesb[colnamesb[,2] == "Cy5",1], Gb = colnamesb[colnamesb[,2] == "Cy3",1]) else list(R = colnamesf[colnamesf[,2] == "Cy5",1], G = colnamesf[colnamesf[,2] == "Cy3",1]) if(length(rawcol) == 0 || (0 %in% sapply(seq_len(length(rawcol)), function(i) length(rawcol[[i]])))) stop(sprintf("The known column names for this scanner are not in the heading of the files.\nTry to set the argument 'rawcol' by choosing among the following columns names: \n"), sprintf("\"%s\" \n",scanname)) } ## one channel data if(df[1] == 1){ rawcol = if(db != 0) list(G = colnamesf[,1], Gb = colnamesb[,1]) else list(G = colnamesf[,1]) } if(df[1] == 0) stop(sprintf("None of the columns names of the expression files is matching a valid known quantitation type.\nTry to set the argument 'rawcol' by choosing among the following columns names: \n"), sprintf("\"%s\" \n",scanname)) if(df[1] > 2) stop(sprintf("There are too many columns that could be read in the files.\n Try to set the argument 'rawcol' by choosing among the following columns names: \n"),sprintf("\"%s\" \n",scanname)) return(rawcol) } ## assign phenoData to Nchannelset preparePhenoDataFor2channel = function(ph,files){ #if(length(unique(tolower(ph[[labelCol]])))==2){ arrayFilesNum = length(unique(ph[[arrayDataCol]])) si = pData(ph)[1:(arrayFilesNum*2),] lab = split(si,si[,"Label"]) if(nrow(lab[[1]]) != nrow(lab[[2]])){ stop("Number of CY3/CY5 is not equal") } #Reorder rows in each group (Cy3,Cy5) to the same order lab[[1]] = lab[[1]][order(lab[[1]][,arrayDataCol]),] lab[[2]] = lab[[2]][order(lab[[2]][,arrayDataCol]),] same = which(lapply(1:ncol(lab[[1]]), function(i) all(lab[[1]][i] == lab[[2]][i])) == TRUE) all = lab[[1]][same] gspe = lab[[1]][-same] colnames(gspe) = paste(colnames(gspe),names(lab)[1],sep = ".") rspe = lab[[2]][-same] colnames(rspe) = paste(colnames(rspe),names(lab)[2],sep = ".") metaData = data.frame(labelDescription = c(rep("_ALL_",ncol(all)),rep("G",ncol(gspe)),rep("R",ncol(rspe)))) ph = new("AnnotatedDataFrame", data = cbind(all,gspe,rspe), varMetadata = metaData) arrayDataCol = getSDRFcolumn("ArrayDataFile",varLabels(ph)) rownames(pData(ph)) = gsub(".[a-z][a-z][a-z]$","",ph[[arrayDataCol]],ignore.case=T) #} return(ph) } getSDRFcolumn = function(col,headers){ pattern<-switch(col, ArrayDataFile = "^Array[[:punct:]|[:blank:]]*Data[[:punct:]|[:blank:]]*File", ArrayDesignREF = "^Array[[:punct:]|[:blank:]]*Design[[:punct:]|[:blank:]]*REF", ArrayDataMatrixFile = "^Array[[:punct:]|[:blank:]]*Data[[:punct:]|[:blank:]]*Matrix[[:punct:]|[:blank:]]*File", label = "^Label$", factorValues = "^Factor[[:punct:]|[:blank:]]*Value", DerivedArrayMatrix = "^Derived[[:punct:]|[:blank:]]*Array[[:punct:]|[:blank:]]*Data[[:punct:]|[:blank:]]*Matrix[[:punct:]|[:blank:]]*File", DerivedArrayFile = "^Derived[[:punct:]|[:blank:]]*Array[[:punct:]|[:blank:]]*Data[[:punct:]|[:blank:]]*File", reporter = "^Reporter[[:punct:]|[:blank:]]*[Name | Identifier]", composite = "^Composite[[:punct:]|[:blank:]]*Element[[:punct:]|[:blank:]]*[Name | Identifier]") colIndex = grep(pattern,headers,ignore.case = TRUE) return(colIndex) } ## remove all downloaded files cleanupAE = function(mageFiles){ path = mageFiles$path try(file.remove(file.path(path, mageFiles$rawFiles))) try(file.remove(file.path(path, mageFiles$processedFiles))) try(file.remove(file.path(path, mageFiles$sdrf))) try(file.remove(file.path(path, mageFiles$idf))) try(file.remove(file.path(path, mageFiles$adf))) try(file.remove(file.path(path, mageFiles$rawArchive))) try(file.remove(file.path(path, mageFiles$processedArchive))) } ArrayExpress/R/procset.r0000644000175200017520000001406514136047360016301 0ustar00biocbuildbiocbuildprocset = function(files, procol){ stopifnot(length(procol)==1) with(files, { #ph = try(read.AnnotatedDataFrame(sdrf, path = path, row.names = NULL, blank.lines.skip = TRUE, fill = TRUE, varMetadata.char = "$", quote="\"")) #Read SDRF samples = readPhenoData(sdrf,path); if(!inherits(samples, 'try-error')){ derivedMatrixCol = getSDRFcolumn("DerivedArrayMatrix",varLabels(samples)) derivedFileCol = getSDRFcolumn("DerivedArrayFile",varLabels(samples)) } else warning("Unable to read SDRF") if(length(processedFiles) > 1 && length(derivedFileCol) != 0){ #stop("The processed files contain different numbers/subsets of reporters and cannot be automatically assembled.") # READ individual files for each assay proceset = readDerivedDataFiles(processedFiles,procol,path) assayCol = derivedFileCol ADFrefCol = "Reporter.Name" } else if(length(processedFiles) == 1 && length(derivedMatrixCol) != 0){ #Read Processed data file res = readDerivedDataMatrixFile(processedFiles,procol,path) proceset = res$proceset assayREF = res$assayREF assayCol = grep(assayREF,varLabels(samples)) ADFrefCol = res$ADFrefCol } else stop("Unable to read processed data") #attach sample data dataSamples = gsub("\\.[a-z][a-z][a-z]$","",sampleNames(proceset),ignore.case=T) SDRFsamples = gsub("\\.[a-z][a-z][a-z]$","",pData(samples)[[assayCol]]) if(all(dataSamples %in% SDRFsamples)){ #if(all(dataSamples %in% rownames(pData(samples)))){ rownames(pData(samples)) = SDRFsamples samples = samples[dataSamples,] #Reorder samples in phenoData to match those in data phenoData(proceset) = samples } else warning("Cannot attach phenoData") #read and attach feature data features= try(readFeatures(adf=adf,path=path, procADFref=ADFrefCol)) if(inherits(features, "try-error")){ warning("ArrayExpress: Unable to attach feature data") }else{ if(all(featureNames(proceset) %in% featureNames(features))){ features = features[featureNames(proceset),] featureData(proceset) = features } else warning("Cannot attach feature data") } #read and attach experiment meta data experimentData = try(readExperimentData(idf=idf,path=path)) if(inherits(experimentData, "try-error")){ warning("ArrayExpress: Unable to read experiment data"); experimentData = new("MIAME"); } experimentData(proceset) = experimentData; if(!validObject(proceset)) warning(validObject(proceset)) else message(paste("\n",gsub(".sdrf.txt","",sdrf)," processed data was successfully loaded into ",class(proceset),"\n")) return(proceset) }) ## with } readDerivedDataFiles = function(processedFiles,procol,path){ for(procFile in processedFiles){ cat("Reading processed File: ",procFile,"\n") procData <- try(read.table(file.path(path, procFile), sep = "\t", header = TRUE, # interpret header row.names = 1, # header located in line 1 stringsAsFactors = FALSE, na.strings = c('NA','NULL','null'))); procsel = matrix(as.numeric(as.matrix(procData[, procol == colnames(procData)])), nrow = nrow(procData)) if(grep(procFile,processedFiles) == 1){ E = matrix(procsel) rownames(E) = rownames(procData) }else E = cbind(E,procsel) } ###TEMP### colnames(E) = gsub("\\.txt","",processedFiles) ########## proceset = new("ExpressionSet", exprs = E) return(proceset) } readDerivedDataMatrixFile = function(processedFile,procol,path){ #Convention for ArrayDataMatrix file # First row contains assay refs (eg. SCAN REF) # Second row contains gene annotation values (eg. GEO:AFFYMETRIX_VALUE) # avoided using header=T because of automatic name cat("Reading processed data matrix file, ",file.path(path,processedFile), "\n") #READ HEADER matrix.header <- try(read.table(file.path(path, processedFile), sep = "\t", header = FALSE, # read in and interprete header row.names = 1, # header located in row 1 nrows = 2, # num rows after header stringsAsFactors = FALSE)); if (inherits(matrix.header, "try-error")) { stop("Cannot read header ", file.path(path, processedFile)); } #READ a few rows to determine column classes for faster read.table proctot.class <- try(read.table(file.path(path, processedFile), sep = "\t", header = TRUE, # interprete header skip = 1, # starting from second line row.names = 1, # header located in line 1 nrows = 5, # read in 5 lines stringsAsFactors = FALSE)); if (inherits(proctot.class, "try-error")) { stop("Cannot read classes ", file.path(path, processedFile)); } classes <- sapply(proctot.class, class) # figure out classes #now read all table data.matrix <- try(read.table(file.path(path, processedFile), sep = "\t", header = TRUE, # interpret header skip = 1, # starting from second line row.names = 1, # header located in line 1 stringsAsFactors = FALSE, na.strings = c('NA','NULL','null'), colClasses = classes)); if(inherits(data.matrix, 'try-error')) if(length(grep("duplicate",data.matrix)) != 0) stop("The probe identifiers are not unique. The processed file cannot automatically be treated.") else stop("Cannot read the processed file automatically.") #Create matrix of data and construct an expressionSet datasel = matrix(as.numeric(as.matrix(data.matrix[, procol == matrix.header[2, ]])), nrow = nrow(data.matrix)) #colnames(datasel) = colnames(proctot.header[, procol == proctot.header[1, ]]) colnames(datasel) = matrix.header[, procol == matrix.header[2, ]][1,] rownames(datasel) = rownames(data.matrix) proceset = new("ExpressionSet", exprs = datasel) assayREF = rownames(matrix.header)[1] assayREF = gsub('\\sREF','',assayREF) #Choose ADF ref column in processed data matrix to link to from ADF ADFrefCol = rownames(matrix.header)[2] ADFrefCol = gsub(" ",".",gsub(" REF"," Name",ADFrefCol)) res = list() res$proceset = proceset res$assayREF = assayREF res$ADFrefCol = ADFrefCol return(res) } ArrayExpress/R/queryAE.r0000644000175200017520000001020614136047360016166 0ustar00biocbuildbiocbuildgetelt = function(x, node, element){ elt = sapply(1:length(xmlRoot(x)), function(i){ if(length(grep(node,names(xmlRoot(x)[[i]]))) != 0) unlist(xmlElementsByTagName(xmlRoot(x)[[i]], node))[names(unlist(xmlElementsByTagName(xmlRoot(x)[[i]], node)))== element] else "NA" }) sizeelt = sapply(1:length(xmlRoot(x)), function(i){ if(length(grep(node,names(xmlRoot(x)[[i]]))) != 0) length(unlist(xmlElementsByTagName(xmlRoot(x)[[i]], node))[names(unlist(xmlElementsByTagName(xmlRoot(x)[[i]], node)))== element]) else "NA" }) if(inherits(elt, "list") || (inherits(elt, "character") && max(sizeelt[sizeelt!="NA"]) == 1)) { elt2 = lapply(elt, function(i) if(length(i) == 0) "NA" else i) elt3 = unlist(lapply(elt2, function(i) do.call("paste",c(as.list(i),sep=" | ")))) } if(inherits(elt, "matrix") && max(sizeelt) > 1) elt3 = do.call("paste",c(as.list(elt),sep=" | ")) names(elt3) = NULL return(elt3) } geteltmulti = function(x, node, element1, element2){ elt = sapply(1:length(xmlRoot(x)), function(i){ if(length(grep(node,names(xmlRoot(x)[[i]]))) != 0){ lapply(1:length(xmlElementsByTagName(xmlRoot(x)[[i]], node)), function(j) { extr = unlist(xmlElementsByTagName(xmlRoot(x)[[i]], node)[[j]]) e1 = extr[names(extr)== element1] e2 = extr[names(extr)== element2] paste(e1, e2, sep="=") })} else "NA" }) if(inherits(elt, "list")) { elt2 = lapply(elt, function(i) if(length(i) == 0) "NA" else i) elt3 = lapply(elt2, function(i) unlist(i)) elt4 = unlist(lapply(elt3, function(i) do.call("paste",c(as.list(i),sep=" | ")))) } else elt4 = do.call("paste",c(as.list(do.call("paste",c(as.list(elt),sep=" | ")), sep="||"))) names(elt4) = NULL return(elt4) } queryAE = function(keywords = NULL, species = NULL){ if(is.null(keywords) && is.null(species)) stop("No keywords or species specified") baseURL = "https://www.ebi.ac.uk/arrayexpress/xml/v2/experiments"; qr = paste(baseURL,"?keywords=",keywords,"&species=",species,sep="") qr=URLencode(qr) queryfilename = paste("query",keywords,species,".xml",sep="") query = try(download.file(qr, queryfilename, mode="wb", method="curl")) x = xmlTreeParse(queryfilename) ID = sapply(1:length(xmlRoot(x)), function(i) unlist(xmlElementsByTagName(xmlRoot(x)[[i]], "accession"))["accession.children.text.value"]) names(ID) = NULL x2 = xmlTreeParse(queryfilename, useInternalNodes = TRUE) ra = getNodeSet(x2,"/experiments//raw[@count]") ##Raw = sapply(ra, function(r) xmlGetAttr(r, "count")) Rawids = sapply(ra, function(r) xmlGetAttr(r, "name")) Rawids = gsub(".raw.*.zip","",Rawids) ##names(Raw) = Rawids Raw = rep(NA,length(ID)) names(Raw) = ID Raw[which(ID %in% Rawids)] = 'yes' Raw[which(!ID %in% Rawids)] = 'no' pr = getNodeSet(x2,"/experiments//fgem[@count]") ##Processed = sapply(pr, function(p) xmlGetAttr(p, "count")) Procids = sapply(pr, function(r) xmlGetAttr(r, "name")) Procids = gsub(".processed.*.zip","",Procids) ##names(Processed) = Procids Processed = rep(NA,length(ID)) names(Processed) = ID Processed[which(ID %in% Procids)] = 'yes' Processed[which(!ID %in% Procids)] = 'no' date = getelt(x, node = "releasedate", element = "releasedate.children.text.value") pmid = getelt(x, node = "bibliography", element = "bibliography.children.accession.children.text.value") spec = getelt(x, node = "species", element = "species.children.text.value") experimentdesign = getelt(x, node = "experimentdesign", element = "experimentdesign.children.text.value") experimentalfactor = geteltmulti(x, node = "experimentalfactor", element1 = "children.name.children.text.value", element2 = "children.value.children.text.value") xmlparsed = data.frame(ID = ID, Raw = Raw[ID], Processed = Processed[ID], ReleaseDate = date, PubmedID = pmid, Species = spec, ExperimentDesign = experimentdesign, ExperimentFactors = experimentalfactor) return(xmlparsed) } ArrayExpress/build/0000755000175200017520000000000014136065135015327 5ustar00biocbuildbiocbuildArrayExpress/build/vignette.rds0000644000175200017520000000041414136065135017665 0ustar00biocbuildbiocbuild}Qj0 ] [GZînY۾|$%`'IAD1xCiIqO [cy6+TwjZmVHxJp[tK4/>tmcп/E.6ݞգaq(z,j4 & %U-_FJڻ[.ϝ6ʌ8^]_K +­խ/J:6ʎE{0ArrayExpress/inst/0000755000175200017520000000000014136065135015205 5ustar00biocbuildbiocbuildArrayExpress/inst/CITATION0000644000175200017520000000141314136047360016341 0ustar00biocbuildbiocbuildcitEntry(entry="article", title = "Importing ArrayExpress datasets into R/Bioconductor", author = "Audrey Kauffmann and Tim F. Rayner and Helen Parkinson and Misha Kapushesky and Margus Lukk and Alvis Brazma and Wolfgang Huber", journal = "Bioinformatics", year = "2009", volume = "25", number = "16", pages ="2092--4", textVersion = paste("Kauffmann, A., Rayner, T.F., Parkinson, H., Kapushesky, M., Lukk, M., Brazma, A., Huber, W. (2009)", "Importing ArrayExpress datasets into R/Bioconductor.", "Bioinformatics, 25(16):2092-4.") ) citFooter("This free open-source software implements academic research by the authors and co-workers. If you use it, please support the project by citing the appropriate journal articles.") ArrayExpress/inst/doc/0000755000175200017520000000000014136065135015752 5ustar00biocbuildbiocbuildArrayExpress/inst/doc/ArrayExpress.R0000644000175200017520000000665114136065135020535 0ustar00biocbuildbiocbuild### R code from vignette source 'ArrayExpress.Rnw' ################################################### ### code chunk number 1: queryAE ################################################### library("ArrayExpress") sets = queryAE(keywords = "pneumonia", species = "homo+sapiens") ################################################### ### code chunk number 2: ArrayExpress-raw ################################################### rawset = ArrayExpress("E-MEXP-1422") ################################################### ### code chunk number 3: ArrayExpress-columnsneeded ################################################### eset = try(ArrayExpress("E-MEXP-1870")) ################################################### ### code chunk number 4: ArrayExpress-withcolumns ################################################### eset = ArrayExpress("E-MEXP-1870", dataCols=list(R="ScanArray Express:F650 Mean", G="ScanArray Express:F550 Mean", Rb="ScanArray Express:B650 Mean", Gb="ScanArray Express:B550 Mean")) ################################################### ### code chunk number 5: getAE-full ################################################### mexp1422 = getAE("E-MEXP-1422", type = "full") ################################################### ### code chunk number 6: ae2bioc-full ################################################### rawset= ae2bioc(mageFiles = mexp1422) ################################################### ### code chunk number 7: getcolproc ################################################### cn = getcolproc(mexp1422) show(cn) ################################################### ### code chunk number 8: procset ################################################### proset = procset(mexp1422, cn[2]) ################################################### ### code chunk number 9: import (eval = FALSE) ################################################### ## AEset = ArrayExpress("E-MEXP-1416") ################################################### ### code chunk number 10: norm (eval = FALSE) ################################################### ## library("affy") ## AEsetnorm = rma(AEset) ################################################### ### code chunk number 11: fac (eval = FALSE) ################################################### ## fac = grep("Factor.Value",colnames(pData(AEsetnorm)), value=T) ################################################### ### code chunk number 12: qanorm (eval = FALSE) ################################################### ## if (suppressWarnings(require("arrayQualityMetrics", quietly=TRUE))) { ## qanorm = arrayQualityMetrics(AEsetnorm, ## outdir = "QAnorm", ## intgroup = fac) ## } ################################################### ### code chunk number 13: limma (eval = FALSE) ################################################### ## library("limma") ## facs = pData(AEsetnorm)[,fac] ## facs[facs[,2]=="female",2]="F" ## facs[facs[,2]=="male",2]="M" ## facs[facs[,1]=="Parkinson disease",1]="parkinson" ## facs = paste(facs[,1],facs[,2], sep=".") ## f = factor(facs) ## design = model.matrix(~0+f) ## colnames(design) = levels(f) ## fit = lmFit(AEsetnorm, design) ## cont.matrix = makeContrasts(normal.FvsM = normal.F-normal.M, ## parkinson.FvsM = parkinson.F-parkinson.M, ## Diff=(parkinson.F-parkinson.M)-(normal.F-normal.M), ## levels=design) ## fit2 = contrasts.fit(fit, cont.matrix) ## fit2 = eBayes(fit2) ## res = topTable(fit2, coef = "parkinson.FvsM", adjust = "BH") ArrayExpress/inst/doc/ArrayExpress.Rnw0000644000175200017520000003421314136047360021075 0ustar00biocbuildbiocbuild%\VignetteIndexEntry{ArrayExpress: Import and convert ArrayExpress data sets into R object} %\VignetteDepends{Biobase,oligo,limma} %\VignetteKeywords{ImportData} %\VignettePackage{ArrayExpress} \documentclass[a4paper]{article} \usepackage{times} \usepackage{a4wide} \usepackage{verbatim} \newcommand{\Robject}[1]{\texttt{#1}} \newcommand{\Rpackage}[1]{\textit{#1}} \newcommand{\Rclass}[1]{\textit{#1}} \newcommand{\Rfunction}[1]{{\small\texttt{#1}}} \clearpage \SweaveOpts{keep.source=TRUE,eps=FALSE,include=FALSE,width=4,height=4.5} \begin{document} \title{ Building R objects from ArrayExpress datasets } \author{Audrey Kauffmann} \maketitle \section{ArrayExpress database} ArrayExpress is a public repository for transcriptomics and related data, which is aimed at storing MIAME-compliant data in accordance with MGED recommendations. The Gene Expression Atlas stores gene-condition summary expression profiles from a curated subset of experiments in the repository. Currently, around 917 460 assays are represented in ArrayExpress. Please visit http://www.ebi.ac.uk/arrayexpress/ for more information on the database. \section{MAGE-TAB format} In the repository, for each dataset, ArrayExpress stores a MAGE-TAB document with standardized format. A MAGE-TAB document contains five different types of files Investigation Description Format (IDF), Array Design Format (ADF), Sample and Data Relationship Format (SDRF), the raw data files and the processed data files. The tab-delimited IDF file contains top level information about the experiment including title, description, submitter contact details and protocols. The tab-delimited ADF file describes the design of an array, e.g., what sequence is located at each position on an array and what the annotation of this sequence is. The tab-delimited SDRF file contains the sample annotation and the relationship between arrays as provided by the submitter. The raw zip file contains the raw files (like the CEL files for Affymetrix chips or the GPR files from the GenePix scanner for instance), and the processed zip file contains all processed data in one generic tab delimited text format. \section{Querying the database} It is possible to query the ArrayExpress repository, using the \Rfunction{queryAE} function. Two arguments are available, 'keywords' and 'species'. You can use both of them simultaneously or each of them independently, according to your needs. If you want to use several words, they need to be separated by a '+' without any space. Here is an example where the object \Robject{sets} contains the identifiers of all the datasets for which the word 'pneumonia' was found in the description and for which the Homo sapiens is the studied species. You need to be connected to Internet to have access to the database. <>= library("ArrayExpress") sets = queryAE(keywords = "pneumonia", species = "homo+sapiens") @ % In August 2012, this query retrieved 21 identifiers. The output is a dataframe with the identifiers and 7 columns giving the number of data raw and processed. When raw and processed data are available for the same dataset, a unique identifier is given for both. There is no way to distinguish between a processed and a raw dataset just from the identifier. The column 'Raw' from the output of \Rfunction{queryAE} allows to know if the raw data are available for a data set. The following columns contain the release date of the dataset on the database, the pubmed ID of the publication related to the dataset, the species, the experiment design and the experimental factors. The experiment design defines what was studied by the authors, such as time series, disease state or compound treatment. The experimental factors are the values of the studied factors, "Day 1", "Day 2" for instance. For a more extended querying mode, the ArrayExpress website offers an advanced query interface with detailed results. \section{Import an ArrayExpress dataset into R} \subsection{Call of the function ArrayExpress} Once you know which identifier you wish to retrieve, the function \Rfunction{ArrayExpress} can be called, using the following arguments: \begin{itemize} \item \emph{accession}: an ArrayExpress experiment identifier for which the raw data are available. \item \emph{path}: the name of the directory in which the files downloaded from the ArrayExpress repository will be extracted. The default is the current directory. \item \emph{save}: if TRUE, the files downloaded from the database will not be deleted from 'path' after executing the function. \item \emph{dataCols}: by default, the columns are automatically selected according to the scanner type. If the scanner is unknown or if the user wants to use different columns than the default, the argument 'dataCols' can be set. For two colour arrays it must be a list with the fields 'R', 'G', 'Rb' and 'Gb' giving the column names to be used for red and green foreground and background. For one colour arrays, it must be a character string with the column name to be used. These column names must correspond to existing column names of the expression files. \end{itemize} You still need to be connected to Internet to have access to the database. \subsection{Examples and ouput format} \paragraph{Simple example} The output object is an \Rclass{AffyBatch} if the ArrayExpress identifier corresponds to an Affymetrix experiment, it is an \Rclass{ExpressionSet} if the identifier corresponds to a one colour non Affymetrix experiment and it is a \Rclass{NChannelSet} if the identifier corresponds to a two colours experiment. <>= rawset = ArrayExpress("E-MEXP-1422") @ % In this example, \emph{'E-MEXP-1422'} being an Affymetrix experiment, 'rawset' is an \Rclass{AffyBatch}. The expression values of 'rawset' are the content from the CEL files. The \Rclass{phenoData} of 'rawset' contains the whole sample annotation file content from the MAGE-TAB sdrf file. The \Rclass{featureData} of 'rawset' contains the whole feature annotation file content from the MAGE-TAB adf file. The \Rclass{experimentData} of 'rawset' contains the experiment annotation file content from the MAGE-TAB idf file. \paragraph{Example when the column names are needed} In the case of non Affymetrix experiments, \Rfunction{ArrayExpress} decides automatically, based on known quantitation types, which column from the scan files are to be used to fill the \Rclass{exprs}. However, in some cases the scanner software is not recognized or unknown and this decision cannot be made automatically. The argument 'rawcol' is then needed. Here is an example. <>= eset = try(ArrayExpress("E-MEXP-1870")) @ % Here, the object cannot be built because the columns are not recognized. The error message also gives a list of possible column names. We can then call the function again, feeding the argument 'dataCols' with the appropriate column names. <>= eset = ArrayExpress("E-MEXP-1870", dataCols=list(R="ScanArray Express:F650 Mean", G="ScanArray Express:F550 Mean", Rb="ScanArray Express:B650 Mean", Gb="ScanArray Express:B550 Mean")) @ Then \Robject{eset} is created. However, there is still a warning, the \Rclass{phenoData} cannot be built. This means that the object is correctly created but the sample annotation has not been attached to it. It is still possible to manually correct the files and try to build the object. To do so, the functions \Rfunction{getAE} and \Rfunction{ae2bioc}, used by the \Rfunction{ArrayExpress} function, can be called separately. \section{Download an ArrayExpress dataset on your local machine} It is possible to only download the data, by calling the function \Rfunction{getAE}. The arguments 'input' and 'path' are the same than for the \Rfunction{ArrayExpress} function. The argument 'type' determines if you retrieve the MAGE-TAB files with the raw data only (by setting 'type' to 'raw'), the MAGE-TAB files with the processed data only (by setting 'type' to 'processed') or if you retrieve all the MAGE-TAB files, both raw and processed (by setting 'type' to 'full'). Here, you also need Internet connection to access the database. <>= mexp1422 = getAE("E-MEXP-1422", type = "full") @ Here, the output is a list of all the files that have been downloaded and extracted in the directory 'path'. \section{Build an R object from local raw MAGE-TAB} If you have your own raw MAGE-TAB data or if you want to build an R object from existing MAGE-TAB data that are stored locally on your computer. The function \Rfunction{ae2bioc} can convert them into an R object. The arguments for the \Rfunction{ae2bioc} are: \begin{itemize} \item \emph{mageFiles} A list as given from \Rfunction{getAE} function. Containing the elements 'rawFiles' (the expression files to use to create the object), 'sdrf' (name of the sdrf file), 'idf' (name of the idf file), 'adf' (name of the adf file) and 'path' (the name of the directory containing these files). \item \emph{dataCols} by default, the columns are automatically selected according to the scanner type. If the scanner is unknown, the argument 'dataCols' can be set. For two colour arrays it must be a list with the fields 'R', 'G', 'Rb' and 'Gb' giving the column names to be used for red and green foreground and background. For one colour arrays, it must be a character string with the column name to be used. These column names must correspond to existing column names of the expression files. \end{itemize} As an example, we can use the files that we have downloaded in the previous example. <>= rawset= ae2bioc(mageFiles = mexp1422) @ % The object \Robject{rawset} is an \Rclass{AffyBatch}. \section{Build an R object from local processed MAGE-TAB} Processed data in the database are less uniform as processing methods vary a lot. To import a processed dataset from ArrayExpress, three steps are required: (i) download the dataset using \Rfunction{getAE}, (ii) identify which column is of interest thanks to \Rfunction{getcolproc}, (iii) create the R object with \Rfunction{procset}. \subsection{Identification of the columns to extract} Once the data are downloaded, we need to know the different column names available in the processed file to be able to choose a relevant one to extract. The function \Rfunction{getcolproc} needs, as an input, a list containing two slots: \begin{itemize} \item \emph{procfile} the name of the processed expression file. \item \emph{path} the name of the directory containing the 'procfile'. \end{itemize} This kind of list is given as an output from the function \Rfunction{getAE}. <>= cn = getcolproc(mexp1422) show(cn) @ \Robject{cn} is a character vector with the available column names in the 'procfile'. \subsection{Creation of the object} We can now create the \Rclass{ExpressionSet} using \Rfunction{procset}. This function has two arguments: \begin{itemize} \item \emph{files} a list as given by \Rfunction{getAE} containing the names of the processed, sdrf, idf, adf files and the path. \item \emph{procol} the name of the column chosen after using \Rfunction{getcolproc}. \end{itemize} <>= proset = procset(mexp1422, cn[2]) @ \Robject{proset} is an \Rclass{ExpressionSet} containing the processed log(ratio) of the dataset E-MEXP-1422. %Turning off evaluation of this section for now (Oct 26, 2011) %until ArrayExpress server failure is fixed \section{Example of a standard microarray analysis using data from ArrayExpress} In this section, we are briefly describing an analysis from the data import to the identification of differentially expressed genes, of data publicly available on ArrayExpress. The first step consists of importing a dataset from ArrayExpress. We chose E-MEXP-1416. This dataset studies the transcription profiling of melanized dopamine neurons isolated from male and female patients with Parkinson disease to investigate gender differences. <>= AEset = ArrayExpress("E-MEXP-1416") @ As AEset is an Affymetrix experiment, we can use RMA normalisation to process the raw data, please read the rma function help. <>= library("affy") AEsetnorm = rma(AEset) @ To check the normalisation efficiency, we can run a quality assessment. For details on the arguments used, please read the arrayQualityMetrics vignette. Please note that, at the time of its release (Oct 2010), Bioconductor 2.7 didn't include a 64-bit Windows binary version of the \Rpackage{arrayQualityMetrics} package (but this might change in the future). <>= fac = grep("Factor.Value",colnames(pData(AEsetnorm)), value=T) @ %Turning off evaluation for now (Oct 15, 2010) until someone has the time to %troubleshoot the following error on Windows: % Error: processing vignette 'ArrayExpress.Rnw' failed with diagnostics: % chunk 11 (label=qanorm) % Error in aqm.report.qm(p, obj[[i]], i, names(obj)[i]) : % could not find function "svg" <>= if (suppressWarnings(require("arrayQualityMetrics", quietly=TRUE))) { qanorm = arrayQualityMetrics(AEsetnorm, outdir = "QAnorm", intgroup = fac) } @ Now that we have ensured that the data are well processed, we can search for differentially expressed genes using the package \Rpackage{limma}. To understand the details of each steps, please see the limma user guide. <>= library("limma") facs = pData(AEsetnorm)[,fac] facs[facs[,2]=="female",2]="F" facs[facs[,2]=="male",2]="M" facs[facs[,1]=="Parkinson disease",1]="parkinson" facs = paste(facs[,1],facs[,2], sep=".") f = factor(facs) design = model.matrix(~0+f) colnames(design) = levels(f) fit = lmFit(AEsetnorm, design) cont.matrix = makeContrasts(normal.FvsM = normal.F-normal.M, parkinson.FvsM = parkinson.F-parkinson.M, Diff=(parkinson.F-parkinson.M)-(normal.F-normal.M), levels=design) fit2 = contrasts.fit(fit, cont.matrix) fit2 = eBayes(fit2) res = topTable(fit2, coef = "parkinson.FvsM", adjust = "BH") @ Here we end up with a list of genes that are differentially expressed between the female and the male patients having Parkinson's disease, which was the topic of the paper, but one can perform other comparisons with the same data. \end{document} ArrayExpress/inst/doc/ArrayExpress.pdf0000644000175200017520000041763514136065135021115 0ustar00biocbuildbiocbuild%PDF-1.5 % 3 0 obj << /Length 3119 /Filter /FlateDecode >> stream xڝَ_!9XóIHĈ y]O"L<<,&qZyOLIL7qf.74OFoyZ fNn]W$&xŸ=5=wqD~]RM8kٶ/hځFM&NB#Yev$dR~c="Z|ح^ i4*2LOTZtBבtqDk&"Kc8ڣ$d-Cb9`I` #6_¯H,1WeuK-ڭq{͋Uv1HG\yiOG0"s1ԯݳ)z7PXb? > .o#q}}7ozB3#Q#C`1%4:NCS1!Zp_˜C3!H8yvL{UΒ\}爌Z'Όz[ZC;΄(E?h<@usYZHylH|bn)Z;\m%nݜH0tċ+Qķ7UB"L}8`U ~kn qI'\P QqE_r΄8±cyN04wG8uA,hVd2vX__WhnC#Fk(bRCoLn ph.|;Ǿ#;$v7ow/m棈lhQsI$xR(3'Nȗ '579XHzn1ٻ?'&p=3c4y2CCygWk>.ag9φ! mլ{MW('[#7\Ĺwċ:Yb{HC?:`v68!k-b,eǫt(6-Tt/kbSyl!hD+p>6v7Hwat8=f<ߓd<9HUG%]yG V {/-^2L~W5(MQʒޭ]Vq处*&EƦ#ѾH 2^2%5BN6X:lpB[@|(V. 5M(,cs8gK%FW -g$l5W/*,%5yc̳#BgwȕjKU/!':|E}XkT&7" mߎ"]|.yߨ$&He$KUIExL̥\ipָGC&s!;yҍ~?!ɥDܩKrBSv4s$NNqbExI<ʅSYK[d).-$yYJnpZƕ<㧈aLiRa^9_,LJG@rWB6D +*v8WquE2vW}eL*C$@vsܓP պ~ɓ,&G%].?6v6{Ut/y)w|rT= 힄yda_4%,=s=zKmjѴO ;X2^ VO̗>pRAdx~\iI"jeg_[i-Me`L`#A(ɊqD?U# ( R?k`x-qp2AC^F . tZQ%ќ_e캹S|vkjjF>(݊j~_p1Y7U^Wg% X''qo5F{[W8b,ЛR <&N(eW7OEAZ /:~}ڏ=з ;pwKaDRgK,ՅI3cY:ƂI)qkEyVLF-k=4E`UE8ˇf8`FVUYby'Yw4^Gk 7Q8<[y&AѣBzl-GqV6#xx`sxr.mPY!-̤]^3iux-B?@Pqb+ZSxv33XLPlAi}d̢JDUED.UXLx\2 endstream endobj 15 0 obj << /Length 2804 /Filter /FlateDecode >> stream xZ[o~ϯb ^-$"ŦzUEDYZ+JQ{ns#i;~<(&g̜0~*gUXI>[nfU4+4l\4qp?_$yq}Γ28ikizmߢX߶zOkYv'EPLGrDfzg$^SdѶC70\&im˙{{5=]_}éYeqVXta ?Fm qzv;nkWwL0[w@GR;X]_2Ψ>hH2&ZX3t?%,tl O5[ނ#k‰;v@IVڟdI{)Kf S'-4 + Ȯ/(ώh:nyKɇ~ATjcR6xGj Q,@ %E{ !v'BG"7f0-+1SA/$l;p!X7.8"A9LlJY.ةd=%ESaܦY  N(,2=#i'aԛДTC~@#VQVsiJ|:iD7(cwcM`oO~L1 RC[GLZn'-!,  BxaDB2•u朂1kOhmubwІ4(H7'*Ѻ'`_d? ߎ-E8=ar} )Q1lJnSrX_ nQ9Fϊ-Icby#LWbglNU)aӌ$A`yW8hd=?}6(i?^vSzstFZ0 |tg]uEUi뽎BUt"Ǜ oFi;P^E#+& mB\*K%(e ~=C{H]Lpo "9FN^tl0[~E Cn͕DEȳ`DBP H+W0Gg:^p0u_tk[BJrq&ӶVR=r:vA<@~/WNGS1؍s7^Gp7*gg{\] dVU=bR%_]aY8PL3  +p!kG~սP g* (O.eW:D/NDE؉3.%Y>"P $^#Y[^ſX-g~$I /Pey޻%ƷÞy MAGX[i|"l+%O}|Y"Ipy c_Vʐ2qpD 0Q|a t 'u&Ƴ5Qwd:45?d4PL"_ie~@2X(QXFtKܜb mmImqNKw /Ga%~򳎉 B%C,:\0^vdy-d }( 5/h9kQ!r [ {߯c]KE>  MTer?as殜npqI5|e3E7Eڛ_da^] (P0s1Qqeal-ծm!K.#ANY>G zzlKl+_\!T[zt*f~ 5-hzGO* ȔM g0UPڋo\I63?:!+-zĶ>KسYQ@'VwY|JNz|G1)?i;npN`w7LH%6y]iZj.U$E~C Aa\̘H +iDƣxޘq:Q-M| W}>f eRdP dP\ta!"ǧ|ř$Q>t(A+#ro`=BUV':ڻ(wkW ?9=𭁯\DUE,-²R$WWW[ endstream endobj 20 0 obj << /Length 3323 /Filter /FlateDecode >> stream xڽZY~X8>2+[l@@,qfpH_!w:_|WmV]]UM^T_٫kҹ?_Mf+";5-==w#ua*hm &HU[{UA?ɒɇUx`n~*qG@F_\׸-lkZ "lG[e64y*톇¯0jnZ7jTޖ1oq]BLWuU0 ZYw:]wIt-֪jG41ɍ9\;|SYsZ@1aK}3"J\˚/ˇYnϕO G10ѝu},^0^Ym|+?$ni'BQy*:elRN<\>?*m =v@fq؅ uhUtU3gxroj|ҫLzaW)l8 ^\n]"# YʊXu-({ޱaa-ŔTNX@c@X pݮQ{GvzZ"hfMXU3ٴ)\ޚM/C0FRJSFFLUvki+i^KmX SQ%q}~:~'P%Cټh?%T S'n* N2ΑY.z7UNz  IHU[sޓt4m>7A/Gqw=Y3TL`:%~Kn܎Tp(vǾRm*۳v7p&ҹ>l(fa5+8BTt!}aT6{DgsAXc5[EMgAۚZJ> f8qefZۏu%>0F'ENFyZq3wA$|]j_kܯDq[&3jGRmCV;n-9'\{ )a*/jö| 0^+Q[s]{LL0:[SbnBsGMMj'U+E-?yu7\fD '(6w0:wt&c;er6(cL'$m^W2H7ɪ֓uQs Eh4l%6_R%n (@{HGgVRQ7֡'G\dukҁ(4t8Mѱ!(ї!s!zN8*ovbsl&(5ʇF}TMD_hZF,^K^(K/V*N\ u$:8Q1VGXMB$#q6 ͞_3< $2K֫őhԌ*}8״i"0iCkl[$ɢbR'.0gx8Q@~yP^seR(sC@ Ć7*&Eẁ8_o,ܼ6 ntҜ+u59`Uagz2x70 χY%"3xr N"Wl]b?Ly9MUc0p䃙3}"`Dq 9Eth8 ~p9 %:#oZ:oNg/zjbnF<^ḩ,)mA(ZswO]X .+NKl1C [i; D>S{"78~4jX.3*;O)l2I;=+&ڧYy>Yk>̋D]P.()XLta=C./i$c)X#F ܇oQ r;|)IAHzd-šE @+/}|3Ah$Pjw^&-4TW {0}$ĄUEpP8?B\77PɁVgؕXEmg~F7$Sk:yϻɎ)zǓO'B?#Y=Xe&2I:% /Urѝ,6a[)!@Өбܘ2W-!j!?G+5k֪Rz5݅k/,íx% W*\1JnZd4 (th$_Q2 ka[Jn*.KuDP9XM^ 6dtҍT/WI [ƫ9*9a^>4NѕPrFIm& <> uFjv#kqOV) (w8u:8ZW,e44aB֩^'~<18V vs <[avU% &A׻OPB!pXqDA䍋l (zEq`/VQy#hW|G82SS=HU>R'm`'1w1C S-(}Z||ÂHQxsNiJfΛOS+p>ߓ7P[;CrB $g=/G@Tkh, X(} j /\|wBy찃9 b%ez80MeC,r!w3Jd΢;2-}fԗ],5gL]M,%7dmwJxnAHuof5OQO2eVӻ>|h>td޳^*X}~RN:*i !s?/ʒ稜s6q5AlǞ%Y =$1p>P8ꇼ9}'1:rg6pBB9r!*)bȋnsI]< K8B f T> stream xZ[o6~0RYK +֥V- EYJ%VȞ"Eܿsg Uidt1^ W^}fH5٬9OߌL<}n^W߯~t#"QuWd.Iqud;9'o $Uf81K/z_.+o{054Yd!5 ilJuBq4OT3nb5m?dua+z Ld\1%!Y<6ZjasX \3ٯ3&"H}?/l \ ~^zוּse=F̗DhNDVp:6 ߱jg}&\(_DhtPѣDhhlDP4PI4n'O T^_H9{B0 f?Tw Y?X;h&]<LB=!jۣ*b  5hQAƾQIdAw,#Ml5/]r̳OmZ`}NvDLF-$NNRV≲Ҟ4` gYMAܠ]u. eZwVl+XYES,Q-y=duK^&{ūfb B3'(k2qECSHR7{B.Q!:#yj! LUhR"Nx_n[ؿnv˖ Wd| 󑹰Aɒ2aVnP>3A.傪K'L= Rc k=*8ٜаZCBkd.WV^"{k_mBHX}cJfB7Y߄&\ 0?JېE\ .;D&rk,Y-^MI5CO =(8YؤF/q<J'9K%RƊԟf-1TJ NlfE)XtKyM'?=tD~C;NC6qLuB܍<}> NRS\;|En{Ɵ BO; ?>2 Q(.DJexj !Md糋E9jd<FVE/QjrL/ kQ@nOYxo<wF^ C(f&|/YqW-W"R1eܯA4JY:%s)acٔiH[N V(>>Sa;j7RPn[6bCf#~'R; 5Eө;DȬ=ӾäJNY1rtt儖֋,r90lhwydwawJهF+q5t8&ѳNO3*MYqm0+Q|ݘDJN6nPR܋oUb$bdKNWA p >> Zi`*S=ы ~reT9&ʤ ,<#mDm;+B Ll+V*oƠPJ62zA?6 z>f䐽x jIá v6r".[t|o&:ITm-c$UIЋI\mp1ݱ޸之4eXC5 Rs㲙PJ~ S[!-v?LtZeB,Ьe /R wedb~`ź*/ӶEnSgڶqUͥn/ o>޿EHAIұV&<*@\?>-= endstream endobj 26 0 obj << /Length 2424 /Filter /FlateDecode >> stream xڵr_K@ ꌜHtƭQ̤yXK10)=$Eq@,rn{|,d'q9ʂQM'A2=棟 ơIr1zOV ֌Te~s&| ӘVۨqz4Tgв|W+%@KGQ8I6!лd~LnY~>&Y% _<*T-Ķ`kT,O ǡ\ZȄ'yV os(lZ}D؏nzu\wTGsbjF`6"d$)@i byO(䜆V)SRD3zS A6 G}xOFjĊ6};k9561(2$ՌF o$Idϼ{[&RcՈC3"C\soWk'Fߏ0PraBOJ4QVDKb!n]R)jMzl׎1wvyn}][\ʉ۾ + y5ϯyy0 ;Ry>B֍yTY8@Me ){'rUܿǧ,N *̒;1_uqt)QE2?,Xp}G,%ԋkrJr}} 8ƿ26ƥ=^a*0R)1Sky9/%N΄j:\%aQSNUJ6؁V&H]c&SP.{M]Jb".88<Ⱥ cdg?AD&8&U8 'i*UF!4&M/I?Cmzdڹ*62{j-kSS53)H26P$t>I/kRJ 5\ϊBbzQa;"9=Qlla_)E N Z`F dJQ]#HϥttGxpT[޶س) Wa^%dPx`8hut<~4¼8nu94PtVU lEwqyN/dFa~; Ӑ|=KE"ЫW: endstream endobj 28 0 obj << /Length 149 /Filter /FlateDecode >> stream x3135R0P0Bc3csCB.c46K$r9yr+p{E=}JJS ]  b<]00 @0?`d=0s@f d'n.WO@.sud endstream endobj 39 0 obj << /Length1 2031 /Length2 13752 /Length3 0 /Length 14986 /Filter /FlateDecode >> stream xڍt[ '[ݱmۨضmw;v:mf9?ƽƨz95*2"y%Z#[CcQ['ZF:N # L?bX2UcGs[ >dN<[`b`'@ C1v%sw075s? %os9 cdflh`P;/fNNvt֎t4Ws'3ூTFKP63wGdkj` Xm?,mJ9;ch c#s @[k;wsS1@NT͉``cwQG)`nHhnW貈#_ ;?NZغxU("?2Sc' +#`4˽ʿx{L>0671t4p1898{{[,##0465Cll8|s71zIclm>_zEQM*NP Ieba02|gxn ƿl%lLldѦ?@o_Sk 3 , 7ϣ ې߄DVSQX[1N c6f Z_ؘZ探nFN@f_;fenc,ohץed`?Z~\cowH_ 0pp0p8dD#cG@Ogca(`by|L_+^b Az?@/_Ї"W>z"/G.G.Ho/IG&_//meA1G>?GJY ~g~5\}l2`܏?dpG#5?];ZcO/?__/뿚Aw5@g[Kc#clf ]rY?T ̐Rz.:t8?!B%QVe; $ lP/zC&(={)N.Lb~,P׏G̿jo )Ik̎('V_<2W*R6M_-OdIyϒulR>XA<~ҝh]9 +U, 9ag0YIB%P^+ R:uG7AəJ'5=ң5|YMenlUgEPrQ)'49a }_ML-nE5/gL^!zVF-`=gߴ .u|ظlBQ8WuKUϒY+ P_4UCo6`"ޘO[))g ;~E[.qVuY=m3~BhcO-X>{ݶV.֝4 (}Jt 1_6T9q<2 &({lh]ߛxg|8Sι/8y$f*Cb8Ò"%4Usu(y. r)Hd*ŇKxU 6RV6iJ]ǘ/*_)ƨ/'YAY5d%MCOw4m˘\_!qpw%I es3!nZ`o `RgU٤T83CsBz<"@!NXWԦ%f{jA9L>_f !lJK~3!*U ~{DZQP%С:^ :Jtg=v ~/K|6)`D.Bdsyಷ?'(X#Ix{ wɹF˔ΙkIZ^H6@F 20sx$=r_ 2ّSJ}Q>yd40Z-D:8k/N8ňJ!5۽OSnE֝x ?a) mK47B6Cp'EO ~IXtΙ1vjV ע: bM6euwM5ηn>5:it0qO#DMl3b(dرUGSЧ,)ގ~Z $i tpoUM5\;-0Z@d[!>:R4sHy(j Ժڷ K-O1JIplTQFZh&w쮾py;=raszj-Idau2@Js!{34,d]1}J5U%%F~3ixKdVabѝꚡMG%ॉqND-+H}r<vax kicԥE"Ty-ē rO{nyKE"4* +lk5xl)>~;Cuɡbeӗq]Ϭ?,s3coCRGWI)Hp/+f֯Gv_Y vGԲ#fԸZx:_xV=Xm9ݨVi5DPͱ!HAxRQnd~M56Xog{UIњέ1J V^MD*/Cb{:hiq$CwKZ=YhY7&֛}Sr%ߞԾX;1B8AiI8Oa*+覥|nT>U>U ۴z)HT9_xs [CY G&^&z4_N.ʹX NYk] W \;kޞzdDWE i;ցFxDu6ڈ"apy+]UZVߞfd蠸-v{E]Pװn,`D-ҷXG޹&vǘ载Qچ:,,~bĕ^n~<eiaؾAtnLyS)oP0AWq'G.-8MVYvٖ:5s[JY:D5NjZ^O>x*:ᷪyɫ¼$sZXk٩鴯ދ?R!zrܪ2aI6dػ LMOn<8jB±:/Lmg;rer# \-,lSLsxj"]Ї|/-LUҕ?sO: ~4]?O\ b`WY TQX@.1 cb;0ρaFaLnfQ INiSzȊTS1|lN7 Ru1%k{<rM@6A8sQf ޺/ʾ$pCK9Dv2$7j?2nNJi$Z$V D ~׃#Xf.NCvS= xlFckjhm ad^CۿMףPRiO@8"^O ф%N?OH uț_O0=C2NL-K۹CyoUxW^Жa(M!rY{yyt{k}}X 2[m_Uҳ$cEhӾk ̙vc:y 1s*";9Q(jrcP;׺~/}<mp\vi4ΚhvoKbƱ1=zHs--Rr»lB0#o({{NEנNQ;Kjp ;"18r]aG>ׅ̰vo%p?yd+){<{ "2h;gYƷ1 2OTf׷p~hm9S =.ATpǍ0b+l[v;rc4聈iePVlH+o'ۯ/X1%+1 x 7wTyԒ_#Q|~i =y6n9>՞<+ʢINo[e}k3RT |mzQ}v5WRɤ>+O`Ʉ7.#|Z;Ycݤ7,ǵ X ϙDԳcŒlNhSz 5O#7mbtk?4'm{ _Zk c 1Mes G V"Y2h(ZqsD5Uh56<^To62'k^zHs~>n8[?hBrՃ>N˔$ݼ>>ښV;"4Ө{ s;K)A*2>ѵݙ6n oɛ $PkC@b3](BaĄ8T/֭Ȱd*k+ҳlb!@6`{DmP8}9bqڅ}kpğ4CՏas~֠%Vd@fTl:h%5}~{819kY~ǽp@Bl&k!4G1$j(9Eؐqpɰ!t$ ?x'DlZݿ1v8Pn/zTkNe2L&~*KY5Q&P7ylLQoG~Vj[STC-PZ=.],ߝj  ؾWk@ mD)>?d~Ppeyؒ\ ))PnHx5/G˫[wV\6 ^G݋ڐtFK'Q#T!7D҈扔it@?t`UHZ{-_?xF|n5'yr?#\ ?m",ӝ{z6,/Odv>Neә[׃IGb‚ѱ>(,:tAu?+.q|m^7M8,_kQ{:iPJ(}%N*kKF> ;Q;"dUtomju~-=1I0"'rO%|PSo8O?66-fJ:L짅 w( µz?a͙>;&B qlԶIF!{5%$뮱 9b(XFtL]%XMAg;P63y@}Ʈ2[E Vſ J(.Ȓ LY5۶?oj<3wnzf6oh=})ou A5Pr^cp.0bP0\AKU>Ep~U,w>b\pEYPŹz|ԚT1vvKq"SpSկ)"Տns߫o1!=NJd9 #jy}N/z$ir8ϳCd;pf&\; Vw7AyDfABuWu"HNRTvdU M7| Muf\\+Zf;nX)% <;V;Jy@oέwhDFPKRf*{O;s ]}{- [8ég7}oXo,@}oK=*DX 79o$^Ɠ;4l yU#2"S);}&r2)ra˚֝PRC!r]q:Tk| Er!R\ O;EI&fT-|"s^|_9y+HUY|&՚/O)c*r &!.#1?_QQZz1{DGCяfֆzO)8z-2u\iw6 e-i|2ؼw q* xKwTӕٜz1p"esV&3ӽez<б;?bb,wzL>A=})kPN'βnB[41 صZ]0~K˕\^$Dt Ë0cY:oڞ;0T0E&gj[JifZzOlp -hwK|qg$;|_dmdpɹ[!uo 'ׅJ|r7"t˛V4 iqjJg(8Ex+Zh|s6833IZCPݔF̤c@S9އ" 8BrP3|ypauJvv%"oh{t[sUbÇFv8T~V iտ9?~^Qs=ӌ;GxzL 9@qާǽ[ `5ri+X*9_f $Ť$jb@|bou 4ڊ8>H\.Y×Ȯp0;B0v%l_W51 |IӽUO[;kL0֒g*WGV\oo$$(0/*5ttt 1c *y]ٶ?4]U7s)0c;7g~lE^v:OKjuS#)d_Irw IHQeq4?+u{︥V~~[V$! 8C74ݪ(hHco}t,=E-<7=n׌*o<.4fqg]z ~KEz 1}kzcybmf{N Oy_*OquKjlomHvo.P~b;/&*).XݲxX(!s"z6YZˢ{JG46krP}rKmX~ܢ1m|:ߋף A1"̃9>F9JjJgXgizR+ ՃkOFӄR';7&'>˳!DopyfLƂv0MPK\YM/X:/fj0?OFfM*ǭyT+qCkccl 32 "a*o oDοNGBvYϾĢTrLL4ڵ.+v'cZ_vDCWU#AL.I 7О*:":!uvCSZZ6 uishwPQkFVb$}=QIq.>HZ#&`lP99[ez{Bc:V-mopV||N%ty먐Jl/[go̷wewr h:tcMIbF"R] J|G^D,A>_BЌzL v s.B`VI U52zδ{cm ^?=A(M m١7WFT> Ӏ*2;M"SٴU,Wmz{n9`-;?CNATJ(ALl3$&_sXE5)4Pu*MZjM+v;ó"1Fw0QY\?Pkk.E $h]RBVQpaQ 0'*Q%UŊ-M~%ݽZ5@&f-}HM6&չKD2|f=LMۣ˖֣UH!}{DKDŞ'#u :]hܵ '^EyzO/7&5N}-޴ %g|ؕ1n4'[p1@Ij Q/Eڂm).knr H3*[tM>$r|i+{/EuDNI<0Kǔ= S5Tfͼ C(ns1cVu RQVkGn_27A/G3T{k ¾apIQ/)( >>h!kB21T0_m6]7> .a!QZKO3B9vŪeɳA4_|q=6$ o?5{K5BʯszMUzMybMhf':kGv^T85Qg2vbX&w,nu~oFu})}Ɵd._bjE ons27Wc$ ILs eo+ׁv.%ٕ7 o&VS1ؚ׹сF€agcJ ) /"9}+VlGB kRm]u iUYo#PY!0LuoX $zG,0yӜ$D4}N3(s?@EŒ9I*]cx>wm`d=y4]ѡ-j,+y!5DTށ#Kmܠ}:@87Dp* G5`ĘL.9#S"vG(f2OYE ~*Ɔjc" (nm_O"qꚤλ2X7&[u\~-fpJ]?LPO#aycM!*FAԖ;i"HG6?f5y5CuyR}+8LGt<)01E3 HZ;׺n6wW{ b r*Ϡ䫅y" =haa)9>lU _={*G Po[ۓ͘^Y#VMUz]brBb@ASNj4 p: l2RΓ{?|Ek&l\0`z*(p*$N=r ̥N }!uVu#+N=6{b;{V 0$FRP4%{0^^!_N4[F+[E%E8tqzpl$BdI2f]J hIsS?ds e*zw-9^|1+cApu.0HsP5>8o ^FdqƹEXz$&*+iuTiRP%C0q쭺w 6uIo&:k'XpNGT~n}2IXyN.:UtxhM;.YyOV$p_sSZ*˼geWTėʛk9;f /cgӟ譕{ A-`m/,r!8[%/騐4kXK)2*]gI>f&P Fe=ߎM+dXk3dP1Vkp!bMuUv^%v0JPҜOg` um p͜$)+r^&yAn8l5HT^g*_Dya\B6',?F J^;pUGBWoMB#RQ |ZJ5y==(2 7$bA[1xahVٷ!@1m94 .5ܞWZUyz)=~hLV|=M><6!k TEHHhؠ@GmzZp>,Xya>8l^>,/}g>Ƅ]Xg E[/}&}\qkk1V4ٯJ4̳ p9^UO?smfn9N [t!Z,b%izco&V9FJFȣ,]r79nBNʫHaJgjr9gTYgxeNɲ᳭T$U꿅,tAh!KipZma +b\C{H[Qj3!VѰ!c;NekO[8 e~$C,3_.S _TPqȵ??as>p ^LP2kpZ T=帕|I(~ŀ=St,ޟ<-8[(VBgOw_2B =J{| :s&;{q]u] 2֧c+WT)2a}bvH9zyj&>W贮],g%(£޵)l'yݯg꠭D%"5 _'y˺זnf.6DEo:ɏ dEA{>Ӛ~qV绹b]}ٳ^TVǐ3Nb22CQl?7&E%BDt5= Ds̓ Zw8Q[G@֠Da/śv_Ȭ&'|Fdd%88VJ~s >p2Sb?J E6o3g(N*Rk#;8+ u' x*Vpщ1vȽ ݥ"]Bg Q%y4x΅PKUb\|Wn3 .4{JeIF(?M'UR@֑=d΍[`v "v -U}!:XI-B o:O+bi@Q6hmn&> stream xڌP\w'@nƂ;$Npנv3ɜT$j "fv. ,̼1Uf33#33+< bx M_bN@Ld`ouX8yYx U @RD`j9:Y983:[nwД%mmv.r~w7[ٙnՁI(#o`ffa@SK=R:vwZA{;.N@_M,,3+S 1@{,^fv6uLjjJ**tt `d\Fe+cgnZИb// c)ڃ̦?,ϫ/  IWMll?ʧ@(O!P>?ʧLԻeC]?4C diLm@?v[?O/u AA/dV`nE-mnW6_ovм,=,vYdg_ǿ44+ۿZOd nA8Q9l.,*G 9v l\8@qtw}`lu5J5Үmle7/BE0X[ڄiDUfRHxi.~mnL`I$qmxdSjpNW~,z+e.]Z@LTn&A,ۅ̺нc8|.c|+/;7m ߂9>|O(ijd0D)9=J8\tY(^I,ͱt9H^.#ջX5iSxYQB{0~8$skv}[^.judpQ.:S5 Y)]J$ngOuQ7ۦX-uǝgw2q e~#0e%^a7MuJ`Yk1Y+dFMj_ȼ6zgwHFwȽm*58!m)Iw27"^#5E~͜nA`c8Rea-$Xo{e ?6 T9׭c w逓o kM?s&xH dDZUS,$,N˳d)!25=D៧MTPf' aEB|AEf^u)悉㬅' Ԝ:_'Hd*A\p'HuT '~ W8HE@6ƟM\vd{>lyQyXS)4g,t͕r`4y2Ox-2y/ 3IΕ)CC *AڥnzhϔB<@u]ݍD/NKy}3i$>aBsX7n҂}/)q8 O2)[}FGqUxGjD$\LWT*s9BS/fj29cE3C"Φ^p|8~Onl"CW؝^:Bk׺kBz^'mFm1RR $lSɻ- \JJҝɾ_Ov0'yfb͙?n&X=IfvOvY4Dk=$aNɷz 0u7@W}z}k}wPe"$c9z/j{& Ȃ b[:yc@(T+oǡvNYp2[S#u_s+0DK=.lذཫ@Ncw3łj,"U8=nҚT[Xiy9 8]_~F"MoMk>/<>FXH] _h5Y6$L)l$XX}Zw:W9{#T-H oyw&.9İJ,'L`I>^ĨiE]@|)"W@_`STrQN^=SZ|f` EUw3k$͇e)[/&*,85c~rmG͢cEgÏ?8d!{wþ,8(]x/gvQQ,MQ3RA\F2Qdɂ`Ά^ ]{ 7LS۷Uoy@19- kHzLn,^m=4=oMgy~upF&~_$ˮYGRϥL쮄lb\\ x,_A\M#5 RuD18VkEOJ ~2HbFX$1 Pͣ/}X*E}heqllw<<*bkJ1{E…'$HҖZc_F*n͌  ?Q+qVҩ/9e>cq.G,[ S~?! !5bV.kE:Q\WExEfyӅ`-%K9r.HjnŤz%F:]2|>6,u0|AT|e"dʅ=v~? `WL 5[ݶ7V['bI#py;sN݀Mo(q ﹀K"&Fc ˨haCr9ôm\&8~*cbLQn]e^?"08[ldFrXV" 0‡wei$B:rSe5Z{AL 4hN1 ^l.šiDu)SA zyLO哼e^ӫ @AYGt~*T4vd0G@45>}V BvopӰug,' }S S~QTȨјOJze7 6 }ّ1VLnO8فqcfKѬ-c6!l὜1%)N 0yܗm#%dxpT4\yƋmcSN_c!B" tyx ÷Hð+mf|@U2xwe(+TbB!j/m?Gk/+q2L*0EM#>k7(P_85}%[1^^1fp#2n{߬%kxοU9N#Qv.0`rhdy8,ss*e:Աӏe`>Y%fߊW*S)oxD(8-Xz u)Om ikwsT4ړ"@Q}nɦP-l=6,[΢j\dfUƓ̛7A[Ftqegb\D/:7 bGߪ\927.?0E!nFm_oe 7zu7/$'|,7>Wx0^2i()t?AqB="卍aFNr (₆xPGIjRV8j=ɣ7 VG./O]D|b8R6G$`p' u[5*2.F_K.x/m ɞ86h ]މ,W6.Apc{a|SbÆgL9O&CHz3c9=Ч&D^VW&!8#5O{(Zߠߥم9Ǥ1"{#Wz]G&G 6p$v`*x<37P|9[>\&66`6kEedDy(J{zH=)\W vkcqݘ8ɼt^ Gϵ沊)Gv!7v!mV8/WS@4~wE S\4vq9%"\GTX]^=8<}`^P5 6D\-q5uxkVvE Q5Cs$BʙeCYD-m?nR9u>VɧO|=;=}1Ӕ_;vƪz-4dj.ulGxx% /uFdgd*, ZkY* -~~nImmF*13>$2t`VA:.w;K6ׄ,yrg8Is  Bv|SJVaACvM6[f El;&|,B'<vAFHNT)I>TzE* ZEn+_S]B?$qީiw1WдYnj-vH7YƮ0.իCAO3ڹ#*6K`MCAV6z^[ra#g I8"%)Orz+;i1,8_C+=ۨO꽄{ΦkruW2rl0FydF".%Y(ѝ#bqw̚z+ BQV=CpWiT~@'4ȷO~A #7l޶ky…k^^YRlj=6Q+l(>0.,"NXU]Uxcn=r>pW ɚqqYiϙ*! zڼ~RlTl[Ut]]CڻЗUoq~ԾkTfSqHjHT٫U_)OLF)<?js2%ǎO;(ǀU9^%R&E܇ݷS?53&qκ4%ՍSMSgWkNr]B!~ cHv.9:%+J>i ُAobB0Gcb{Xq o;Q_N5ke؁**Ez_# _8*ISE pVŚ(\VBۘ蚵1H''E>2I= HŔ C)Hcu5_kfSރ إCD֟ fz 㷹ƇhƑNJ(m4&f@:[:I꩚It1ۮ(6 ĺq1~_0aTiSpUZK}Jg+ 7/L3No*vh~> i"E_cxٰyn{C}{=Qrm/3˸*CzR\+Cv c`On)֋ {)Д;#{ aT~ 3݉UG;7t 9W9 kh$ b_'hx"H8_^ybe}|39:.P,P3|; :v6vuݦ|`v\.fX{;ӓ(AJy࿮&{'xs*x(%į;04\fۊw'-LP*Ʈʾkd7  [[TU<V; j%JE1 dV8,蔜_J"{E2a=kKcpbiÉؘ=)*,m}t#&_u/Iq -? ׵|) Ha OY-D|Z;˳O)t|VW1P c>'bU}rAt1kR1YLI)6vK~9nP{3'`en&J3c~͞MoqE\`}]:6`n!pdrIJ2)6npn.p(ŕe LB?#+Mb. _ne._}IcLIOiGrȂxMU$rr.DS`utBٸ^wRN.B - 069v?? VJ|Y+VՐm׳{9WI5WWvN6z94!bN8ژ+(ayI.7VⶻtTmn筌X[cNR*u0Gu\p4Aʭig֋|@Bʰ9R +u$,\b_&Q 7TpP ߵa8v~*~Dh- U} 6wj@r:m=\4OqqF?Fqp?M;L JM3d bZ&kN~;Gk=]qdr!gmSڀ_It/H{FZσ(ړ-^O?2B/a&Jĕ;GJx/-UTO~rpɲfM!P)v/q⟲} gqN-q\C{$I甐f6aBQVv򀌮 <*Wdt%8 ij_گaл`UU8~EwI(owUEqs RaS^ Ӹ1džx;jPavvڕdH4ɷ + m t"k+~߅ҊՄqR$mhݛG#y4- j4ޏQ'NIJ3ۇδYg.͙';QlB529wk61c@Mp"7>PlԆȐ^)glx)F9| /8<Ү,3c^ZuJHw//EԨ3Ċ"c-Q"߿bRtxe~"ye=z3z#s`Z':ǏN8?T7tEQèn rLd4鱼,xpR(c6ؾTUz D*|ge5̳JէOtC^RlIn{%H9U1v(X:N4oW. X V1A:ZGò]at]ט>X^ z9ѡqq2 1iOZ<ᒝ4dRIaa?. Y@wHA%., e(O(=}7Ec آUMIl|fH) [CXl2 2)6u6`@n c9aE)B@:\G/.*FXF ?p/fv0|Bd<7"/v϶/&eǶnifd8-]ki Nvh*kmvMpPSveX!hĐbcɷaw|~ڪ^ϳS׭*K{%aƲ0'&oNK|SYs2g#͍ܳ+R\v?x›pqcs °o3y6BiNEc'(PV 9G>2 QX 9 B|8Di6ձV:cKnnw]!_xk%gL(˸ц(*ďzVL(cB2;BF53>d5Rٻ(J#_]dWM)f9hk v$Mʉy OpT1r X[ѓx'? U)kʉ`*XuEN/Îa٫30o%Jk!*``7\dYhZ?IɆ * 俿+/@sĥKSwt6[@Zȫu0;HSu-]]%wm jֆȾ }?N)Gd}= 1l4<ž 6v;g=m`*X܏?_cx3ɢyJO`#5 1I9]s>. 6s8n7wTD"gaD\ZHƥ2J!Z M3:flbrmз qi3UCja p%pZ]3[ZU(f,XVwS aޣKPvGO5F0fLl>'~;n?ƚC&+I=YLF?rJ1&(7`/duDwKI=N Iĵ"ݪ{l0/yi<#:At}Uw;,C;AI}-:|ٴլC* [7H02!`#AS(|5ix*{#T֑1- mQeO8H%Iz;x@hv3(nFOZH|rRp]ϋ+ȖA͸D#{SitBZ0 3ы@# oюo%jtrjq1X$^;~y:}|{mf$co蘩pBR Ps7 & цA6 ^8eM_O=q`/Jÿ]Qf8>Ć ;jJIN1A;=*[ُp[ |J)z8{~y+=?ejX3Z1#}״' T0B@[^gԞ?7XbB$l摖++ *t*["ף8w/ |B^;6E WPBlf*r!E$%{e6fǠ,KWP3uA!?] zl\nj2`}.5ҾRq~p)^M&iaVi.])`[B'Wcؔ1j6v`5#ϻrqmd;;q * ϧC>>hjj:QM]ql;C/skwQbOxP'(]]tyh?XaK<2aWtgGZ#)jsZTN8V!ذƈ%e\j{o~GC[ݲC{ɷh% Rܶ:ؼ1z7>:mc 3]/t(Upp&Ҹݨ DaʐTI>*O@INBIR#x0(:?"_%:Q@JI =ĜDyw&O=λҖΆK2tPm K;͑hT+QΦ\gr]d'vV}_+hOT~ Bȱ M|M >7k- &(2tL,ߧ֡Il__/?VdkPZohtE] 4l: :Oz: &9P+J@>#3sM>5lr%Sv FvfŁ%jNY^I;_'ɧ\vWHyʵP5u?Y>$YJ }.笐o8=NTk];D4( q37+rt>,#Ӝ.+8%r\T?Ѷ&{$ϛz_;fΈ9qP[:wgB)ld"mzԬ% X ~oqd/ ~OucDRE*LUu@#"ٹڹ>,}HxKÀ e 7lǁUe )K=M Phzd- '^Ս-3\sTPɂ|,aȮWXR?qv֜ F1:_H!g ϵ}qܲ,r(k۞#iֻ55Bi3Lߜ|~Sk‘a(D*CрBL>.yuL?҆G'QYS ^,_n ndxpɯzI-18ڱXZk;K"s^{?iN[bi}>GZH8MT9za7 *Q:6#j16co@1ae d=#9/bY1f6!ea<3=|! iv9,- 0FdK߽쪶|=.h4u0Q8A{,wQz x2|jZ2,b/Wy(KYCŭˬw :4:fʦΞVTf&%0SFlO%qA\*RfE&{54OWŝi2b{Md6#PB*ͤ[DU=V+xBTIL*-v@7pdX~rǚh7ŶQw^}T6GkU]BFLPK udo%} *n=;=nlh@Rsi;iܕ܊ uIw`eh]7 a^iS2T/4յ9OMVz?l/TU{Äa\7J!uYwm6OnFŽO-1?j!YCIzrF}F li7MUǿ,x?o]99u9W/n:DBG%H"|DZ4RX4ՠxv#$b"M}[=7#u~ZS;o*e q R z dn(<5ΆTS30c:ÝsZIՋK2W/d::pv]6BA Hrg`nCmr!t#Z?g"/A3'$7o >FF4)" d[/.X8y~.ye3?<٪f gώ3dbxߨb(.w&{H(l=}/u(=U_^~K=rj\6әz pTN ڴm^^zgXE?D($%받N[ᠢ>ffWWSvoz>;x#EL@|X"{=J]vV`M#Ǧ-?{xJřRIy|[,}1|UУoߎ8CF 󗟳 y,mlHP]B"ىpHbOJ`#iN; Th;y!/ŸR]/ÊBK=$%+[X? 2tkCGyHg\_W$8V\_0LcDJB਋Ut;2JGǶ9"4uSy5ecn\uz]Y !:EvjhEwW}?`Oˬ"hŲqw$=1H,qh` 8H̍LJTk]mU6YHHU *'[?TOݜVH @Ӂ%W$k1ho )ѭ;zIK2K+pV_ 99W@>c/}Y=t`|ju¿kx9H-Mđ77DHiR"JaWxEsQM~kOn}@ =b5cވ HŔkE7;O.k⼹g?P9mOLUqRP>Aס ]:F*xpPU#t頝֝r>rI$NVwn]XW0߶ 1$;}]8sQL5Qwn}r7t.yZA]vK;-ƭЌ8ܮY i7vU SjKէ2P^i.I#7,qM3kpш}1<YLS'۷.% f9_4vy#[LN<"M3o b!zA_i9*% ˪*'})Gn06г*Bl\cNzqA >\mVj^xT\\miQ"knQ"N)qdos1$Fi٪qK LhRwP},S OYɧOQN+ 3fO3ͣM$ @m?`dNN-`d@-=q _*.,@f.Ĝw{So ]LfAx\ԝHR+P"d? bzPSL|fԟO,G[Np۠OS62WU7Ún--c+%L5TsDI%kE oH, % z}?r(Ҙ/Ƴ @aQ2`2`T(NIK.yb;_)} `N>9Wj%ϳ-I7\,I*#-Q^b~Bi3̧\;f?þ S$/N]#y iɇkʬ_&'h nwɍYߣ{s{ۗ̏rϧM}DC`#]Ā O_Ӂ5v#c/.o 秹ۼqJY ܶSXT(t/3@b%Shп+jEٍTKYz)K; hc!{ QU!XxְSiOz d1z` 6U#8C3  ~ ˑ6tgha# b}S,1x?1`;X|ۺwXZ)^u9c#T<mDn I7}>WQG{lbQB /0qΕyk=aJB#:ĭ_*s ;(nA$i@\AaAX6w+-i|S1LS,؋9-7 y\k}+|Hˍ:a|>3#)ɤMѰwڇ+~ݒG {TbS"Z}"Hѕ#uɽH p[I m6{G4P6ǿV؝ D3bu?E/?P#%m%_dU+0DR㥉w-hw5A,:lV6xyB:0ڟ^qXl]*V4|/pt؏r#Sd<P2~_^$BVΰ耛lݦ"±ϡjy/z0?(5n(ޟUW(ĉ5Rc_Ul>Njpp%nmHaBѱ{nh=u^5%X 'u" gۣ oW<RrMQaӜaY @x̛҄9RsHez7D$;'7|}PB$raYu xх}ݧ ߪ3tUFI֢[ʐj%R0T%G־H(L>)<ɤͬH_wPT# հΗ{Sn7$/܋Jàբq7#;,&1oz_%@W[s;}"WrT )B~\Q,+5/ 6: ?6B*C{X$h6?hny Iwณ-(,/&RZT$33%5/ FA 9e4 ӗv G`0ρ5M3ZWhN+Q+lw*m/TAk:̋~4aG͡B[_ȚՊ?c_ ~2ry A~<i945ȪxvHrH(6^z6sM'[,!0̭QK>TXs&CB4S5QqdY^mȶX;X6$q>n L1%M DLx`4#Ņ0خԋc^-PBxn k>%B3&1:z`Sጽ路948DwBk 6P;]\QecOFݺvؾÂYSk&k"}JݰБtFVV&AK#9|A`۔BZL'K}( J0Q< |)\KFs4{/!˦ LZ1-FgoQ0v1CZ@5kvƲ+Y1YGsKj}@hlyޢ\;@pR gVmL3GB-/=m+Vw6]8&4T6gp+ gqXߨhڊ l1qb,U tVeEtSF%UU9q݄Nϩ^BXrt`yZ1W`iɓcv/xM[y;2~+HՄoH}R*rPoM q*R9m^P5[(Ŭ,$j7U$jJ?*"̪&9Ou7)v[G%#؞t_t.^4y€+FOcY2~ANMߝGu\ԢdPo|hsP#392_lgcBZFZ%`Wüz;&V)k'gD+jڹ1 qE!0Gی.RFқfl endstream endobj 43 0 obj << /Length1 1665 /Length2 9593 /Length3 0 /Length 10673 /Filter /FlateDecode >> stream xڍP.w݂<dN!XH  %8ݽ{WWSݧOw*it8e,NPwN.(@N]q茌w_ftF} */+d?ԝGPGH":A+:@ vCgsrvغ?O%+GDDw#b A`ǧ %_!XmݝE@n\N6/-@v[~ 9 k qӮdr K0jv<%(4?j 8 py trtA!P5 TTrs@PBӓ?qY< 89(z*,]!n\n%rt P+9'GG0 !`˧kP'/_]3VKdBfv@!~Yr m~`Tb ~Buy`yxVKwE'l'~j+0>/r:x#u d4oNV p DB@GA:We@>WY VpzZ0Z>?\wی=Y?4if=ܟ_i +5`+=8}7E lqsX^28y6p{?(wJ \]AA< NO.N;*(m =![o$"'߈ =m?ߕq[ 'dm/)'_\Oڧ_Sr׿r{ڣhA?Shw/OEzyryfꂥ;ǞKL3newFMeYuI}r!@s 5#E/;$ɭN/?d(9u]{U]< `Cc[/kU1*8b_0X|%CqzƆ ÙϛxQIbG?+5Z㍿\G@fDJx?6+Bͷdu,+q]- k׽SS& Q2RnDBՎɎ(9K*0Sv 7dȣP6Vm^.* Q![-Qj# t@ > ;hf.dՈe6ls6 ^{˺K3'*>S{lYNýnVd!uy1č9T"qٙ|Z#f& [?0Xjw;Я#7+*ejў&ߴ"D{+}Y_XW` /<3~6svdR 窰ёpxC`v4]/@a*4@ ZS=$w T1J˥ Dhbp`0puT sThT½ iX~ny'XG?aD]J h;70P+X^m8kĐGp7"J!Ag3|:Xz+TfIԨ]b.z)^o{1j{fs) 6@`FG?}~qĤӰ/ך Q4r[.xeQ7qHlf~\p +Q|+kl=kEr5qA9RxթZu}B]/Y6E2pٟ.^[&,~Abv("sB( -flI:C`Ƕ eٽ4),dRwˑ̻I s L=H*{hl 2Sh{i西΄ȖH@==[" W_Rl4~_/'Y Ε{;1Y>Å"KɁ F+BE ] |e߻yHG]2)LAdc4/y4FkzYGڰ;UPK0uwUކQ5$g {Γj 6~LMOS"G &7DuWʈVZCh%K'`1ߢs05E_ht\?Iw>CoRvM$Y"bDKyΝRʟSz:evK"8Rhl"AU4f9 4TC1-S52A"C+GFI g{^JC[=>3J:Rⳡ z°*Ai[r6N{~v'l #K fr)7Qd0LR&C&X&/'\\7#O%_F0Sj~@bF˕YpΧއ D9uf纴s0wuH,'[>2DA%~Bs}Xשȥ>KZ.)Z$Hy̮>QK0$Ȕp+QjJznWǥwAT!5S?)76CgJR}[L35R}9 q|̎ඨx<`&ϸDT]|ϷՍwrW\i;"3%iZ/7Fʬ6]#jARFmb }}gEۭ&+02$%wSd;DfHފ~n<قVd$=V\#uyr f+ Z Ca#Mxzc>= QS7g'K+JsQ*ZwIϷ%o\-A7DQp )jMfϷ]lBJk]wJCpwmkSb`*޴>X̽叡;& ^Z-^;YGʨjYņsB"jݑMKlFe8iVl hXzd"f73dc rY?pXѾv-hҏIt.8n)g5;0+~!FX ^r$J&+&y-iP)u ^aڛ}fOfT=/ jٛf%M-Wc F X @&MctDXVm{8,햦W (ّf TX<0m0^VH]ӯxI;7= ܯ7S-њ\|K078ROMZq|/xH{@^ՓXJ {4uȇ6UNӫl67= Q9p _% ӁRϭy(fGEYbs PQ>6 F Ee/h(w\gr?ID6vn ("nq+ij8D蹙X$Sq^qU-Ԍ9Ҟn|݌9iߗz¤,bK={M)>!$i>2πT[OOm03f! =j"8 o3,f54DsUj/rgBd=V?uL=QژJ^whsjnu-$ɵ e6$ꓸ>9xP wmq-Mb9v *԰p섧54)X_SXC|]BF@6>Ƃ n|\U_p&;U&mToef M/mp"( r?|"aP_Ҽ.Gm8ڻ| bȏ!Zj#ȝ:LDp5(fXkX[<)syIܘ(!9l4RZmA(wGivo)zRhTpQ_1,?7 #aB^vYo zm D:6F$5N In) N`i}3 ~CP!uymɗGtL&<k1(L @hTvqQ, J2,ci7X46=zwN%yxt/}$=[T/?6-Ex:l60^ t5NTIh-._0F+ }KF.QNHDECz E,n6J'zdq`96,S-)Gٱnkn&૒ LNЏpW6[ш R֐~uM(J]{Ȭk$r8#e!,zrD(PSaXP}ćB9^tbv'u2Hhu_D®X#O& XxN"=!YV&ưM[%RBK zu8YeI)\sibï"o#[NiQ14NJGD%P@vR8ֹgM]E>HdA ZNIw 6y>.à{/KwiC_Y}֚m(L=N͂xz'W ۖ:\BYO~;LHfa|TP!m1X^S t p=N(}EzMU]b~<Y` Ì:"bLFD"S[F|تse#70N1$blqzՌ3Z,m.=䄗?ca:I'ⅎ #C[+y[RC^U6 5;a[Ij?J-;v?9|OZ)А}|xO2oPAKk(84<w'٩s)R|UL"w̴H?֋ Iة\U~Z)~l;"K;QP,4S;+RƖ)#N c{p`Bu=|ټ4-ґf gL;e7eb/ aM݆ex"S퍘XOv5!~iRw_|{5if,̱CD׸ h~v<3Y=kݬy9{-օ/lx1cPRqƶMFQb]3 Ac~.QVo V?#Nt0sMk߶rRb n ]xT;8u?ېg8(xφ:[-4:&z*aS[#߾]B a2 PWD( 8Y3އRMiֶ̟ Nz3| ԣuv$SϠSY7Yq3qq_idfs웸-^]l6x*/_m"b _?ˁ?eVh+ْi:)WU`ǨUaTY!U-xR !#'b%rR9SS7 |8nlH m+-L:%̡7ȣ}Sp>(cR6(B+?HX kQZȻzkOa|r-sY'_!E=QDD1ўGЙf_ӥ73 'edIn1Q6,iLJXE^,0",dk7JL9iq &oHeͷ~+ˮj' ENi# y ;4DE~4Ǫ;S1\,DӒ_ˈVs~iZ^ljԛ$ڒRN m}uWA4+%c`J Bo^g"31YGr3R un],H&0ܣn1'r3riߖs룚i1K7^/erB)Fߐj|*Ӻ&29\LE,s  P+ɽiHE&UJR,lF` ՂLՁ4w?ȈCAl׾GO㖔*٘?Z@]JKy8k^v`vJ!]Y!ۜӴۂ W8h]7{_?^r9{Y8X J^ԩFl̙,m2McyJ]WH3 ~qDۉQsU^Tѳ r4C&L%]5Vɀo;/`.!22n'\&`>80|ɒ`}v@ʝOu5]^-F:IkйžcBmgf%޻rYsEgfG6qBԅi!ő7 v3/1bIx6,dn>KG!Wz7YŇ֮PX~B*?c}8"zJ`:nWa'AjFAh}_>@ g\o-Wdq:R)';`KʒJC4N{YT ZH-˻vf?DH,k86<}":6\/(៨AWļ܉.K>]c\N-J,Qdu93W86e_q|3wљ,kq{y]|' Rv\¥gaؼZN`rs)"i>@e+3Mk? z{Fx~!Ln)=}\f%=HjY5V:# y 48R=a:fWcg)mEKJI MKך⍤kOwM%mֺbp%&?r#{ŔmpPbh>d-?*Z-۶`t"k~)o0MD^bȆ9F912{|T[B&A?ȱ}1F]q؞$>v[kUnJ7z`{fO~G!X^Q;HSF1@YcxnKMM҇I%!,_ %H(dх'D[1$S2/)̩i\P/kyzW?<ʪ7ծd Xa 0<9 C\l6 D>= { q:h-!MnFMB.SR. !{m-c7{۵ue/k5qΜ5{ݩ)++2PF:l |7SGpה2u#d4pTg`=;"zG^~s^t*\4D% }imܮΤHId*BQ ]fVV {2*&4W_':.w24 *4 $ 3>vD mx< nB_ =X=.y,W9)yKb\8GRlsYc4I9Qb4>]Ԥ@8EZCpd& F ynzKљXQ0@jyOvԷkAs/tE8o_DbHa.BCGۋ(66dw|} yNJ7N^ۙ{+1Sb~:а]}=v׈>ܞƂM ݎqw`}[gs=D1=_hG }B{f}\ _*Cg==~ɛ8P\-+ DcRĸ5UƊU~d'K2ALRVG~8eYLqʰ! бIŐI}N/Ƹ3;D Ex1 A+L0(+a_]# }a` /Yr3$ <Ke8\# h903l:x{\a$ՑdQ(B4,#̞(ȁ˙CbZutKYƧ\ߌ>ΌmgvT_4#iFP F%t~`"k:TkMDGdȄθXI88YZxCHo󡾎eO-|kg\!*Ɖෂ?Ƶ{EyZ[TYܘM"M(6-u|boJʜk9< ]'h'to*4-t"r]|_9q);,_Eeb2o`xNnSFaL]; O){dipmEqF2{$CA&~Y3GgiA*#êu׶z ٩YdT}{ iZd'%F[?PЁHHdU5 De> 5{PP1XNɅq2\!^D^\W[i=:@̍'@IY𰅗4M:(6ݣLDH~zO@1'mz ! vب:{ qKa_Bnn;wwJNr y<*MA-5;,5Il:Y^ZJL&~8=Q iG$_H4Xu2^/!)9`Vk9z @pKJ߭vɇtzD3M6nvz3A1RSI#c˩LUfqʫtkaB쾃ߣFiL t-o9Ғ?#Kf-Չ.=6DKBe:C] XIG_  dh?=v! K^} Dl.pӕ"nsrCJ{V[GxfFQ(:qhV'(7Y;L,y84?M ܰ}ʑ$9 RX[3a<|3x/8v^X^ Jǀ_BGdv\meV]4V-{+Z\]QN'-ýOk4y6)L b0~Ç)"tzV^~_bTZ4WUSGS 7Ԇ<qMC} jSմ-ݟÕԺWI7&Si`YG+J^#ԛ;$ wDń ~[2U$b1?4?ۍ endstream endobj 45 0 obj << /Length1 1701 /Length2 10191 /Length3 0 /Length 11270 /Filter /FlateDecode >> stream xڍPضMp wwwwwFqwNp nI{&{Utk킚\MY bݘY66N66djj-12 a 4w{I)Cw;'GW ? PԒ'oK 2w,es7[KFKs&ttBnnN,掮,z&'tx;e r[ v4w^ K lt$h+T࿍6`s6vw /gsKK9XU%7/7&9귡+`nbWquKjrrseq9nwS[IB`7WI\/ڃ!`݄6Efcc@/K[ᵼ)_:u8_/_Ⱦ@;O2;; dڀFwy ^f_/e;xkJ)+I2t//3'' w5s?U*.`ݠw,tθ7IoG.H/5_̺̿2e T*@[+f`#URY=,˵/ T~*fv6{,Ke"R_SJ-!V7`b2H_Uz5V0Ҟ?FyEU_J8!~^`^,Cb?% `_//i"K^u.K^?%Ҽ|IMYU50^@Ky`]}XM8'޸ n&=K:B}ͻ +iKeGߟ"[SL4ڐ''J~#A"f{t u;Z΍gקʕш=EiqFeԅsn$ ا^W3d Io9K} 69o|֪8\ H`.Gh|%+/la(zT5>F^T 3 k7؍ uxCٿGqL"t(KH< Mu8NW4ĈEth5o06u55R/lŬ?s>3CQtSo hd-nٷFڡvHqm #SaLfm<ɨ4%7Fvz8CcYd{;@!3xXH|G0r٢'tT2O;R$26ȕ wNjs$M7uǑ,3Q]:pU{..ח2>ËAbA2tkd:#k'.nyb]='RU) =$p.?m[%?=u9SqS܉U4_Vj06U5]G4+|gc7 _ľ(^EI!4a`a};O ?#d0ь㽠ڃT3gΙ\8ܛiI7c\nm<^kN'#ecD i2g:fqǟrbD2"((Zul#ˍ8ۦ ݱIsWIťCmieZ=;Anfm1l-9KlyTf"/W3ܣZ;ӞkB%8%ϧuW,~~O=[9p寶5=D{6K\O4#ZbM((/ۜ?aߪbD<+(zgl1_=%UKVx31jG#*.6·˄XWyƅ5 fes?ν)5ai]{&OMڃ|纟dY(PL]N-8s&,M_@dXl#0u~;N?/A]w֛Hȁݳ())u@$mZM'n:; ̩]'.ՊVc1?{BM(gMXAdŧveȐTE!9Ò[=vV= gH=.̵BV`'TsIj٭%KETۄYAFŸ1A"VrXWI&w Ml/xcϭ.zQB׵_J] њl7s)|g)ewȰәj3y w~]֒><貦Qgjjm"Mjl}n{rNilioq #SuM[jr#>]o)).>b -sR;:) q lP]^ȋl=Q_'+ ?k;r_{ı&eDȒPOf.2iEߞ"ld:̛5J԰ dJ,E/rj%q{2ˎi >od?(gUB͏ lS<wLXU~ۭ ~L켗7"l ^z' 1?N,ma&1MM `CdHɖ+C`/?Yt; /V?6SAHౢ&rqͲ 9kFx |&{2LpHinS/X6ECjryJsHOJ:fA^>bC땾hfRr.βIhRb3v}ዕJdk6+L VȬ> Z4yZzj ؍E5ldȎC_7ǶGZO3?h74`R1[9ZkښWfrH>Rj>OW>.B19~׫-濥|jc4;u[z1!E JG0ᓌie]H|<Ҕ^{^>e~ ڕZάИ]K yճ oNEn;_8 C@iJT~ݷ s)Ҫ0C6[ ~`X8כd߰Y$cUj 2=FDgPyW>/)yS%5N$JFH_9i_; nyNs_pLJ!Z Ku͚dA/Cq*g&6ehR|,L;\c5W]JpV RyFjp^+иڈpxe( ܟt3?qFXΙ(/b46YߗE"%5ͣ8}I|1nwTC4iInn06(a1mb6Ubه+ ->c+e =7\)x\2>MSy}aߥː~[ (+#`-E/:C 紵/+xؑv>z|nJE tpWC1/q,N %)EvnErӱv4+iO= d:ٜڱ3D ;תq]"j%UuDDB }pc,qnɦ; F2e1u6叾XD蟪G!_ ޴g \tmH% ';1Z T΃ҨLy3q|Xf;Ȏ네IpY_5C= 4>T$ς%Oz7L{R? _k4>"8ob֟',?T[| OD$Ȼ>W^)؀Gt$T<6rKܼ_IJw a)G*\us:}vsw~~UwVbWWY-I, 2MY;𚎺3)b]=(舗m ju9ha*5gu(DdqID9V0fz[.38>qs Qkr?CTX;I0eNT?̿VΈD Ec +=vwA b^By ҞN-tP]4^K,Uҟ' j1+~+Ep+EXݠ Q)GUE8:4䅾ypZlܖ5m?$~A$FTE2vh~ZΒS /$LRdeGMg_( }p+a#="- MgQWtg̺-׎ oMƢ"4ˬĎ\&I^}!*]yJq/u"]_~M|q4\ц7SFKPu[fUśldžz.B\8 oe9l-EY囌-{oḿb fY 6K³dW&AH"ffbz:Irnf{ٌehH,x,{Ndؖfh_Yj4M}O# i@sL /x6r%ڱ n[\Lk׆νtޣL)9:':"M>k슅>?[ljsp$mioIA!0S.xx,#7f7&-JEbfg7[>=U6p&i?j[% ͟HϧHRD>[ \vk~XisJ,I eRӘWW2NOat"03Œ_ ZQi,[.mǛdkp _QBʔ}rC0o|H5FҐ PQ pߥ9ɣm~_R0.hl qhuр{gùjb7T1QIږ+1Pȅ.ޓ/\Sx5%SQShk٩!ݓ&I7^}5h˴װbE< .o}J$U<)b-hm'z|Z7_ȡKqcS8V89{9b}0([~ %iR<|QJ5١327ZdOJds+lѩw`]t 5qfvtjlLoW_OBЫ$jVDfWa :KVbsû0Z)Zؑ>&:uKf=͢?4-kHNHN%ŬȚ 0,6oA0Je:k7"6QRXczMa K=8}! d #w -Z̅{Yn,i/L%˼)lҦWP imR LrߛHA[!_p ϥ|zѯdAt0y: F|l}Mƺ`-|Ú"k4G5,Y4R~ʬȶj w R_`3l}}(WyDU\&FZ{J#a(d~jۯG&Li#ۤWt֞L0\"~`a&QFiۼFCXy8`&έ0@GTڰ~Oܻw﹩>QkFyDoU%RWV1w3V@9rϺO,>iqX୎ nOO1y?x|`8'  MIǛMס /ìohDqw'irfzWÑȮj^KE0`QRQFpQ\x=G}%;"4.&{'I;!!edn&K`V,ZJh1$y6VIS#X! 8 ߉tgm,=Gìoy΃rh)+Nr{znRogO˾U݋A]w6\EvߌV )B%PI̜gdF&]O6Ю!|p칝A_)ƒzU\wBHf52o0xhZ3 ޣ"tܚR/ƣkr%^s=U^u*c.Go@ي,(4e-nĮ(( CPHׄ@|%ye84Ŷ=Q9OL_&g;h⊃f=,`AbSGeA㼊hLΕ=@1Du{hk0LTyt=q߳ŊX-wwSdv6y2QQ5~;kgEWp"%6fET 2(vKZ5djMy0!է&g0 a~0E}t~jwGMN- /q*@Qn./[xdI(Q4ͯ9CNR)1Mq"cs ˜Uʯ_.sdK4z@^D{B1S܏tJo&FǶn C՜%SC*|b)˓9lj5^O+Izl{FF@[,%`K>{fǏ+f:2q(\7qQ#, P& YYl@hL"=lt,><帥wtK-c*wpaϏ|Bp_u yR>S8 p{*q+5ы$Q="MtK,Ҡ~cTx'G D=(ᆁ@ai ^B|RgP¹0]L$=' p{*fa¯{͹!Ɋ%[>ݤrq5ծNaYkިpBdrpy•7VvJgtY`q덶չ=l1f-55;;f62[i!]Qg9K0d!3,E~qǁ6|/~L8 0`ֽ ~Hbӽ֫Fh)u]*՝p) Z!uC>=M2g)|.WMGtjZKOڋu!C%0RG1ky8LH^Sb _69*w鍈HqdPBT؃ͅ*vի f|! nլf'v{,yL\݆q>3ɬ_hFK:ؖhmSʾ+WZw^!:7 ϩ:ϜCEF' 훥ַ ɫ}CQj,-5FO拜?s78aWc<|GF¬#G-5 *!\!T t-Z/?O&^ʸa 40Nnp9/ya":nlv{KWҮgjeSj- 5:8uzhVhU"ix!~^72̷E鶒n$PˊWΣPk 5(_UNxx:?[=uP5&jxi\_ͩHz&am xmzHe\R [d%4[W -nc_V$% endstream endobj 47 0 obj << /Length1 2449 /Length2 15977 /Length3 0 /Length 17400 /Filter /FlateDecode >> stream xڌeT; n;wwwii]w ݂Cp A^̽oVӻjsLEI (bbcf++hhXY9YYّ4l@$*-#qW),0N9w{_+?@ sr!Q;9{XY@kN`a t17u(u's \оYX<==Mܘ\6 k U6@oqHT kTN OSW ,1:-p|@Y#?1?9q `ic(K)0@SGnN`{SS{S30MRSpfcW,7ZBrC+? W9,olihaW),6.@Y"2+  >X enW ogJ:}R6@?$_7S S `acl~{`xYC`o9prMYDU-_fpqבT OF7g 𿾔 wV.VskcoNR3hK1Ll;NpTm?[qwZY)x-DM hb2{Lkv6@'7+сw|oJU⯝cz# ^N `avtM NH-7E/?"X#^o`X~#6o`>E`;l~#o `5hF~#p<\ο3 Mmaoۘ'bjjZsGk>ǿc <pr%qp#o԰X!g DK^&V[6fi񇏿N)V=V?)D n5Xfgj܉?37{,xߵ,Nc758_j3Qtd,3vpNp/ 9pqw-( ,[l^z,.0 66';-tC =? #.ҽ6swWp@{#--8 6u׋z2Npqk޾r"Cn3C}U³ ,M͕PՇVH b DŽ&8anzďr@;uG(= sFVuK%$>H| GHRUT|@LJSY>@nn[6$2YuFN d~_ +p.B xnF[=h%/ $#cݒtR+*הR qO7qʆΞBsa (%2?}x*geh1gzlfL(va޿É(_Ԏ: h;}OܕN42nG}Om! iiUca]%zgMMNhF, d0J٦Y*70;ޫhTfcH9n$0 L).j8?WHx1+G!CCǶ9j`;>=C6+ߡ Z):F #Tl^ 0cBCmրb9]'4dbUbu6.se㘙Ǐ&tD`~o HÏ }+h%ʯy mX`?s7ZLNi\{R;qjLX(kCc l{OqyVӟh[e)XZY#'Tt/7,sCTxsn Yh/gVX\gVII}A淍Wpe\xm'O,Rh4U >夗(g8$T"~Bk% SdF3mR5ż3L5$~'/V m䎘XʀJ8J xOs0'ʔ[4@Ekuy4GōO̕ZUE%6rU}B&N/R:X$p>Ou@RXq&feșg{eWJ]D9­/\Qn,]c\g-־;>ºjlj` c? '%S1u> L_.Dra>9Sxƻsr㯄S6d$k{4%~|QS0"[=Hj뜧* $s$Ou!%M!zHGtQd˵&CxrE6&W}No^،nʬ_eu4֯81 -V=ɇ<䬬F77'9Z hۂ,"g v?8LRYx]1BHm}‘YDEobL*lό;㋋+3ߓ|6Jw0Ŕ{i!IƘs zzpK YUqOZTa$g4kNJYMqnUo{."'iRA>[ ]ǙEUsErGhD+Bv$mD VݑhYAIL1 `oWB]k%+ũ݊ߤ%Z̾3sK|֝=dڀfIkP/R>eHl>bv["AFo 5 _gHđ::Y%J Q}g,e4b:%'U8 ҕD#U+]V}"]b=Ȟdp$~ Pl.3NfPs Id1یaAUqn2 (κ\K{<M TDWү;^o~L# If޹@qߒ/ Sz6F<.At4(|Q%2%~Qux90~HLQ99s[X1itp8vwMU+@sȺ 59yL(Y;3(#(/ГqfW.r oPPiP":Ug& ONÑHxGjٍ'T +HмI/RR a7dX1J6_Z{-.VBa!G&0peCO ŋ/F= ::my>c_Ee50c㧱ZVBP `:ёo8J"4On~9iS)c_8OߋZےK R6@ W`XO^0B*~# nZ^L޿>L9JNGrRM1w (Sdfa9Z~Q>յS{1N?u׼bLXm$ aT<$/L~tg]ݢb G-`E˅4htV߾te`/jׇߵ l?^`]%]Q9}wYHo؞G.߉ rDZ^ {X`L}%x)yB4㻾65X+cbK&zs+uN:\5p9Hrgk=@Hf T򐏻wwϬH"ihsuUT:lf#F3+#%eTR_u`XޘUԤY:ŴkoD#5G7q'b(4|T,& Se$6ƕ7EF2z0E!Sׄ`h9>ǬLK~} >ʠ>+_)sk=/;4ME[ _nvDAW/[:߫Y4-B( 8xa}p[8#.cmG7WRG"Y{qc̹=$ah15PE{Z[*Biץl``GTxR)kIW_A|UPtY_|v.䠩\G_Ŋ:|yHDƘq'^|$ r&d[12[1/fbw=^a"WGSj+giVNR FIȜKH CZ{o45R<>84cKNJ'Ty1 nZn| vu9݊ Kg? F8NR:QĿ3`Brza-NOx,"e&,?̏],Q u ܶM%^RzsC'L"O$(E>^r߆@y&#הDޖi L $Bky"Wq$wF-DJ}a -h8c xKEs,*Tuo\0\2hi /dKL}BōkC"An\EL)eR'pCJb7 M /e~/(l+LXz %`(XæbHx0j@uiHYb0U z[AriAsr |Y7N7;Uq4nz}g1Ёr;F+vs8dxW8Z+9i8-Xkn*?Fϯ%# 0<c.ł,ayֶc31>Qb<ݤQDkj GݯJv=7uX?%o<2XRĻ1<]&2 _DfI vҞx+%!Wd߳lֻ@vJ_23 "{FD(~Ņ4(3\oR4Gj8Y/ԇ* FQ$G-D_w˗SJ+{CwRDJ˵OGܵ)㚏g?:c8S(!;wBQ'pDl:Y4OMi˪FؼTR|6x f-j9yhaEZg 3.rrōcoreJtf i喹l:vkT4mҪ1+Բwb4-7ɫN03?CyeJUeۘOw3c/YzJ%#+QQGWCj3v^lf\o:C[P7F&vUx"Ӟc$^FY9a_?DN/!^vs &CdQ -we'iCvX46]QzaNlHs y USgV sy#y@'KK&a*rHi c0kuD Uhc [,"&lszؑ|:-h /g-Z`f#U_j4r4a9 * )f ɯaGRz~(SBATXIJ)*kQdGFGtI,n 4ԤQ.+k.C3Z9їD4835fWҎd {=MNwWgDM[ oZyplG t@K6n^Ҙb2fίgDc.YD~رO3IW /2ї>NP_~=4 y_S>8T5^C_ߘgřUNXO:,z=\=\"y ~3VHJw8S΂9Jd­ӛV/O}9׀36y#r<=**@қc4({V\ <*/aV>GW/o*So"d9,7CߓuMYXn.ÊNty;8Ђ㻯BZЎaWv*uY!}a;mK#9=[=ńDcd4>/p@%'XZ?[MGc¹eUB?ͦ6Ȋ=qHyhkx9lÄRķ;Я4IgH_&ʎGhk\F:g=E)Lw_.ZD{UԝqZ,G|Wh1#TƫѺy+ݕ\&HuQWT*R^ k ?$:آ"*N/:p uM,j (.MmrTW=9/{(~f|'&,Kv\z %UIg>̑UWvCR`ao9D.!{:x}s0o xl"y+ ,zd1xvoq^o1TBu!I`G%ua=*TC/@Ζ;u RZV7r{o4JM{*j2Zf_AKR8/gdKZя qǿ'Q\{Мg &]w~4DF* 3 vwӯK*pu4S.JMФrpYC'A/6h0P8|-E- aMXn]?atBW1s|M:1Kab 4{/S?mj||ǟB,ɵncI}_#H9 5+uP0zR8>`|wDt4jnqu t1OZyI$w1 e}ߊq|kq9&W X&' ?7/z<a& |ʧ:Q̾A+F*~OW1 O)'f?{(9w@*ha{<0_S<'/&tַUna~[wmw[/z'VѲTb޴e/%൦ߺ̢}*XAv7EӀ 6’ j%+*q }O`Z򂨲2 bvS6wbY_ 9&Mmq%FTy=G$pHڻ20KT +wViGNX|e-o` I`R{1_Gz>gfoDvrj.aY׺k:1>Vy5w!@$OXLE Ȼc72^- k#x*Q]?6.$QIh`SȎ*G;`4XUYy {b6}JŻ5d#Q8(=K$:o"ѹKⰋG jDyIۛhIi|Iert 3'ا_ e|u?gxԴgjy4I/o$c0WB4:~n η{/۠ Jkf7,OoϳQM[ٔUR>SĿ;f7T,qm YQ

r+ vWM^DCA=b!ƺ(!ڛ "d Δ:Ax;-\sRŵD&R\kS |gFS_̣"Ws>6` :h}\ܲu7m!9hؕ QFNꉋXWt2|./̈M:Pl;kW6w-e^^[%Bbh~):O. 7ɧ;<#&0S"#'(;0.6; $şH'R} t^Xem~9JrDV%`2lO\F/ 7FP~HQdh9BR^֔$}i8+,R}gLZB7]m_t@\1$dWjCt86}*^&Xx줵+Hp3zFèH>$Gˊh(%CJTP gT?'8* O^}mw;AR&!_aYOQ`vW1yז$X'@3TJ˔p! epHLK+7[%m'˄ul9xy<@q 皖 ( 4۱g۠< g}аVA`!@҂3?*+Og|n wu#N? 69~M(-ΡyP}<c,-}M|q>=. `k,q58_ѺΉgJpNrѭVWZ}z5s赈lEGҷȜmj^)3k@/nȶlla-# Kliq cWIBLq:2{Q׽HG%OiWfσhq,r<,ғ8P}t>Y?o}wu|RTUGu:JdoqMV)HTkr쀋>-O*ރp|GdIV4n>=E8I>\w1{,1/n ;a5d+uWAfUnw%TxuXl`EꉧlKG=W4/=|LH>xp'v)+w@w'L~S邨gICUuzFt/0ZmV 8αlGaTySt/^9lKuuN5#'4؟fѵP $Jjjg$J^e+@9UAR K9i(U  _ wZKOu1ntzneBXaP.!xk#{k|ڶ9H0̯@17IiK':wSDjY6SW+}qHNu7A1;T~ |ZpjڝͥѶDޥYbxza %dsrx~ -hM'|hTR뺽Y,|p 8|!!{1vI7.w F y{f@KF U%80Û/ȋtGウ^Ɖ[ͥϜ㸾n/eC@+w3>cPw pLnoHuRc}!@6ģ"rj5͙Z PoZ]J O>Q 4lTCg;3nB+/Ea ;-:Tk(Q.bޢmI>%4u!rfy}5K`|(V̛]@4=[_vJMkz *@S NFnQ@\$V~9-_2 4W|\5s{+6..nvQ):7}2$PNV&3z<>Q+ZFa.㑨!$UB<{uWa1`/!z|O=AؚՑ6Kd M` "ai> K_a뺭iRXGdih%.IiWaJZEG]? @M^8o26 9a8Gc8^l 7a}ZP=:ĿTc^,5\0",+&nY7d!qB`aY$@vU7fq ՀPWrs5'6P<%M!nMLp,}lrX^1.1M4*8/_H甸6(⨌8f)M=W_#-5_hjaP_B aCy.Lt>i1(sVd6d9(n5_aX%«WI0]c"KR p!J2}ur]cOG9-^K"KۣTK_TiqXh]}akRPH|̂jƓտۥQ # ܗ^<Ms`@'44`^A:#2|EتF *f?.g^p71UP0?&b2)%Bqd#yU)_rc\SZ(3QXpTX҅qUh sm Y2@:¤%pԛ/ !捡rM:F<1AZ^ۧ8EA"f8[Bb۾̠!PeYiBy"Q.kVV2@< 5-e{X4"&w(v"uhq юmv78_QqP]H,S@ms Ko,dڻ`:hgtJdedtxFP,\47! ˡV휛o(L:i!D*vX?9EcqUekܤ(<ĺ=+4"ݚ *hk/z.sԺAݪ{5"XL+(PEQ#4Pf]3*+g VRٻ+~q*͆N'cAo_#|`#l<2H\u!FwC:LX;]K fT+}$@uJ0ApjJ&ߏa{<(R8pD`~*4;|h¾ΤN* xwJL>v;-&{69L'Cuv}1r5G6-O3cZ{oŵTjqDN5 RmH5B$B_ji}hmZƵz_\"aasԒΐQ^ZW9~1?mkFgl t%]¢`QQ˪sLOO~;s quf y+(xHW]아$l*AEPAP|KG 5'xr2ѥ/c3Y(2@Z_sI^GNr;K:gŧ܂<¼1Z^p9%_@MIj0ܨżM2XʼnJx1#+y oAUxW-v2 .C#1*==xBmF "N_DDZ ,8g)7m%}x@ee~7}{ 9іp tў Y ;}g tʗ͛ch ^Q1 $2ܹsV}(Izt= trq@.MiAHYb}A6īCAXDW5* 7A ;$[-59_B:JOeAijM'CL(@`%T *K]Ps@yZ_X`t'OcU}'+/]H sbfr*glz(_}GS,3[K"4lg9d<~ACtZLc5KR'a 3/rW&[ endstream endobj 49 0 obj << /Length1 1949 /Length2 15326 /Length3 0 /Length 16535 /Filter /FlateDecode >> stream xڍP˲ C 72 ;{#ދVʬ̪J&@#S 3=3@T^M GNflc?v8r SG'K?Ο61CO< b`f0s0s01XtZ2@;S'8rQ:20sss+ lkhilh7t0\ 44u_),y mt7Kg ௖ ifao*i46s q31u|P(ڛ,o?`f`oD_@[{C;K;s)@QBݙ`hg ojhichIW aegىJv&@[[S;g't45w_m3Y:Jifn `gbbb:Lݍ-Z@_N̟=xfmX~~y9]L}`bi 025;-ߘ> `'Ol<%h""@w=+; |y -S?b̀OS4@\ O;g+*[ͿT& m-m?s>W7/kM?NA??2d0Z}e7fن?g(U?/dt;?/], 0y?es]?wf}?_4vqtuy|  LMMƼVn{,lב0⸮ʁ|O7QK=sQOh',ZXLzQF:H;5 %y 2rW$͖}-u-b"5 > .Gr +݈r[[-r9YȓB_ Vb4\tSrlzX&z"1XTc%H'᎟JHN4բZszaG<91r˗@BoqIn<Jasܡ>\`Xdx\oDN!!s }i NASu.ErﯳwpA+NӖfo;ca |`8u)6ٗ!uf>Syzt!B^ c2 wdI $dW3~h,+ °\WTrMջwl)H#/6c0BkG2|Rv7G"KTGy:P:]GR9w_   Ilh^FS]5ֻ:/^À! ;/| |rUq?v VܼEUu3 4ER#婂[~kJ;1? ULĪ6ibί!3^k5fɃ iZ^jDВQ#y3$<,I~tZ"vhq _l%O| P *!L~"g3Cy3cVc~2v?ŢAh7I"A1nR [hY\ uBtft}T8xWV݈xHdvd$)LҰC~?8J2mqɉVmAL65!' <{ME5GǠ:%- ]FbQw4'ӏ~xġ{[Me_K.iJ'MfY+gB;+l s\ wdm{xJA Q.K=a|+h\K>Sb<M[1=ţ`<8|eM#!zY+H(,Yyv u qfN-K8`\_Q|>ԯ2&M"n6ԎDzea@$RJ7La)` @M!i3·v "`>,Hۋˑ,_*2J'7Y;ֲuĤ+^'Ty0 y^v̨:k!pPƳE*)%{ӿj ;WhJsjv#@ _%;[=u}ه? =˫7SidB\?Ton^iZYԕ@^\i8ܗ&u,:ffq aSqMs뼥u_p46!z@~:86A/B;]S` E+D@#ca$9AƸ1+GDNB>jƵlU@d{3&L/J8"\j2Qcޤaf]` I"H"p@>[݂ G Yw}\Xn]ɲ Il]LkGVf^"wqk-xs㵎2nv~ї {@.`رB9y[W洰nټ־`(K;u狀Uі75xܠ  DCf9nM㖆!RUGxfkpj⒡~/aئ.A@A |sY_N?oK~u $[\xJ9"3&&`x<9EFEG(k`x\LbQݲ{{}])HEM?j3&VDd"15Q'8 )=َߵJ jD6y18B+ۚ1)x<BiDMә 6gcpP61uYKE\(r$ph@d t"f\%"f[hJcp; 9,NG̩WZ~W$7<9 \`&3DR^:gk]z,nʲt K7I Q"\1>XRsZl8s[$κ]#yq֛ F_X.[m"}+X NF|ƭ땶ـO'a({Ѱ7Esa7(7#+\ZgMSݚBێn=|0E5!saI/tW1=4嫬H߇Tdw0MlP5q0@TΖ*L:S\]cu4kkNw+(MuL߷3޸ YO~l% =)̴@Hh´ƏFE _Lʗ0\}dqX03CU Fe Agw!d t>ԣDO2/- 6]Dn"%'!ۜR0E ]e^|E\oџҬOС=y1K6_{r,zkgӀghHrfBܦچPM{W@#sƎk-h^v3sևSqhԄ3څ|7H FÅ#wTB"U"U7>RIh'/V~飉J;8 P 7q _r~%{%"]БiMsZMho4~~owm48Ϗ);W-HZOo{fz=Ɂbb [ "Syp psq jˇ#"TG]Rr7vZ5m\֧ @Ft:ɽ.gJ((< 1j45:U-Յ/4 h@fȆ|:$^M休gԛ@l=qUi]s 3TَZ<1\c6_G~]]{<v~j -Z1s#Eky+j1tBjA!nes?k=;fK6=M`׬=. w ȰSQᦢ6Ѥ%)a4?4ߦG_&]iq_GRi&ͦY[|?c~n-b!vN=ŷTR V2íh8 쩁26ntv lF-D..ɩ* JSG .rz,M$Ι%C+T/(߭f@f% v@ c\]dt~Hi| _\=qu'7Vwe\,fW<*7'GUˑV#1Ԣwy Tm<^M TWϕ̶:8XQ @mX)%`[p*pWl> 2d!}wqvjz]s /:\FhH'nwk&ǫ!ɸFJBeùꂡl̿x*-=' Cv A;wN7D;͊Gq}n}g QK8{V.z+r "~)Eءm5Z:; m, 5.ƥ}URnx+y/DmqY+{m?^ ļM IKtQ\_$:rJ nJƩFHJՖOʙ˽mu!ft֧隷 LL|7+w76x%p:|h3;>vҏ{hgh5~Jh۞b*2UsGE]<( iDˠQ t`>":$g*9H\xH{/պ9C> @)}rۙ;nK4r.= A8<衖Jב x+Siz !9oL4BR$܋#逓w\44{VWɋJg$RNQ> o:G*.+pY8 My0^ׅkBT|ռ䆿wb Q6QtrRԙMR?8t k2ZP"c\E5Xb3\S_ue@*X'[ ybi5࠹ NZ|9{&]B.p 1FBƑ0Y9X\1j#V65u AOw˺O X /厱j:r~1zr'oTѺSMoy0Y-(0t\":b2X'" `/JpjF]Ə8Ba1a۾\?QEmTƒXE,p`>Fxnic T~BC^qq/#&'7q$; ml߶*}08rZR}0F0 . A')]kLd3;n ORV &?Pbe1eeb!_#5,\?,M)$?|vx(N&>EICXDG !T5z1'R% rWCx`B3ËMQ#eDw7 OA[H{Tv?6 oSfCZW?(mMc+6z H^JZ׉=yr"eT6P0fW`ǀ#~(iP^]9}z`ayJ;w F-2C,-n>`mtGA9M 38#T2ˌe?,e1,"6aa]tb}ɸ 6yްAUGcwM$u uMIH`. u'UáigbQ?E>X WuչEl䔷3 gȊƢo$ruI /nmĢt.fpܛlDx㚗jO) mjU|(Grx =^=" 3.{_ky7mah|䛶}qy*LedσQdU`am+C\&y$I _?"!;ؿٜ%Un*fZW$I}ێ/KY8uw lL:|ٺ=,7E̡Y{K\ h9, p9_1-~πqgD Oyj+%ޕ7R]kL6Nᕸ}7Ѧ~|iMcECPZ&<;ZPxՎӟZvɊ\~@)^ͷYi`}빵>]qq=@1+Jb/qo!_Z:*MM z=`;Z@' xEhiKbyn%,EGAo9=-ޞV☁;F8 V>fJ}}.*kriGԷ=hcz:i7 I 8hOǼA(œKxIipĘdeFSۏl҃Z)}m?}p 3<Pi9֐,&YEEuT~6) 2aôvBHzl'Nm Uu ʨ:}=bÿgP-!BWC1ŀwq}#5FfwZ;&a[{xѕ drGP5; դ)SkOu9WvsWa+vL_C%\-[VCrL7E$ RQYBx ?=xg6b/Y" lS:qfr_5#òf576.[ʄD]N!?yHr*X<К{ef _XG)ókH·7:BKI{D֝NH )I :.w8""myrY@Hq㲳$k00+ڨJ)4"I ST ] B8ƚC}VY`IJX8X\$9G6]0SEJV&{H% yq,+<5j'!lS8qh4~[Rlzn7R%%(Kv|@Y󧦴4r~(?#C햩Xn->)Tv8hԾH+c2B-@.s잘.*OA/ i4A!"GހհzEv!L4Rɂ &ApP%G_ icǖ{w7:&;g:Vet[ ρA ۫!**0dG4'UcBZcC8Dk0걳:P+}ұ?f۽ʸ0 HL#,)u>Nrf9zAMt6?^Wh:ֵ@F1=D4#-ZoV5TPmA Y+$YZfÕtK7N-Ġ2Ҟv{@eZf9ɖTqJRܽ[Xf^tk0puFQэhN|l68 zU\ZcvzFg_$҃J\ȶv*~b=ڍR/bS#a5|ޢRfn9x012kTqV*8f9$m"87jPDx~vƍ7s['oxJ<FͿOu: `|'[A .يE+N iZ'70elH <;]CPF@DV饈'y*TEf.FG fH:p{&@B5~=4Z)$e"LL `t:>q3I6ǝ@R疒U*iKQ7jPru=Cst煠s6.f"۲>3oã/tR{qE9qr:v F1f ƀ0%jm}tm._AĪOa㴔fV\m*UZ2fAWds(ZrM$7L)Yu9k|_OXi 9u='vz%YڶT2∱V/3ok~7]+f VsX3ChYWlM#37 -hwt:ܲW11h'"/˽AвPߊd$}g5ڹ|'%lX'&)wlj3Ӣ`ty/{L؅7]FԵѥU2<^/(;bM Fh_GǸFL:G|ZRZʰd-+tB$JaW6+Wbg*BJO{KůJ mҕnS&Q*rӦ"9[-KS3Xϧ|7S ݬGS9cRK7:äJ]Sth;e; ^ؙS#2© Ch+Q˕b&=O{@$,EbR. XH+;s]k;v_wJT.*c)F$gTix]Kҙzΐ~Ah8 %9Ov /\29Uyީbv!XLX}R[p0P𘜮6XG 7aޥ0ak[;ZB^0qzMUMp09K;Ȳ9"\..q0ۼ﹦`*Fs_m#Pj^mAOWu`'e\vB1%p?OEr4" O;{=&Ls>dqbE> %p&Qi&fO@:"FNg %Muq8PۥWsi:.S>m7(={)(80c}&ыEJd׏YDr;'GwD0Т' sF\YA&a) oheP|c1]Rax"geW0-qIE_7!; o8rل]mc/8o!7<8B.~} 4 !ͷ֕$}7ŏʫaYfFnOǍT.}e#T,϶z ,ŹF=ȍF,~v?@ z!ծ{ҼZTq <'?xyYo}hw SG HC4gHR&<_$F*Jʻa@-O|z ]`% .xDjmob3Fe(+5?\8,pLÙusJ lnýr{Q?2 Rpm;RɝDžn + -lufc9gyP)2;SR7hԄ<ˆA8qvE`rC1ЁcC?'ߕE/\&I876hmT=A' @ZqNumHIiB/Gi|kF>X^ 'VniW,.j"H <5y^IqC?d4Y a4e:&>[^lh,o}vrO4cԲf+;^ %JayȺcY>S MX ho8Qs 9aP *ᅲJ:=:Amu7gYM&88x5Sym~G{f'{"LdЗ%y]VG.)7V0y]gD+Aiۏ#,Iz'O;`X%8KrpѲA %=6o9I .ӛwӾa1.VW~ʆ2OtL[gLIm2n.`%g8nCgZ~?n u~&Fe_Cd ɰ[t9cs@iIsLC3M8o_Y_f=\OhEyˑIl&BܛGI!,Iudq0O-Oa:ȉ?R T¹al} {JB*OO9Ԟ(J1ufV^S}PlUyOh wLẇ/tpuT Z`]=_M^EڢuWU#s8>Rxm[{rDo&㈅-b!ՃZ3_q+lr*Z%E(@Oy3_GraF J)e`vgw::B,$@MV&:_.(w4IZqEHA}ܼ_5ŃT$l2Qo`ypb3ĦE3nTΗ&v;$̿l Hix2p잂MtWiJ lkfnBE!&?\WؼY #Z&CWEN gg:.66-5{lD_ه2,|_JD: 4#,W:{o(in~mVe|]M}YَU4!j !y jÀ!*72RP]*N_:bXc6A~V6q%ЂyF- 2 Sw=p / WTdܞ28.,B>=`sx*p oah>U3*moWJ_:o}jX3 Z[ƾc( 0S%keJ0̵/^=l(H-]3VB@K=f+~;o*F£ nénP%ǒ} 4O6oLG<>oE9¶aҠ ɗ֯0,pIR:U!wcJ:ߡtu+˾M_-MIN2Tt0#;éC/,3ɎɝOw}eM- [\MQT"I5txbE1_/`^%Z͑EgǩgT:ƃ$xNrBW?vg_ĪWW {eK $}n4q{C>=a\v,\z4j^`0k2chNinJ?!Ӳ$ -'/I0 7n N _8|4F(W:@8Y/xeiU 1P 08ÑмqG TO{Wc*;~_wk<+T![q #2lg%HU@NB/f`eV}-ad-_ jq1{1Bg_mNDham7vAA+VߧWIE;?Հ:-E,|r :ذ{qx'n&ksD8,n8ewnpÛmc4XSRBìDuchzKXȒMQ;?۽|pHLiOH'*΁715_wz+BW}:vqA*zZT/VO D! (O?H&eV.U)H5ٲ%DWq'~)׎Y~3kn=fAvE섞78}vtu]z|%5;8E PŘ&ncV ZLEδMC>[ıțB1N2#zf gfٛT^ra'YrS+4=tRC SibCgj2RIad(oS%A-d޻O?JS-/rK0RנZL檾SY^˦NcP:9;BʼnR%z+3]B$>d~/S UEx@> stream xڍtk ؘƶmĜضM4mIj9zk֚ko* Pޅ *`bbe`bb''WrGO9[9B4vy;d\m̬ffN&&  @<1c7+3<@ O. ty*Sj377'a;  ob {hjl Pu0xO*>KGFFwwwc;g5t܀f(OPrB lL.f@=;@UZܿ nW +MM=-V@ /Cc[gwc7c+[cwK7H+)ř/yoĬ@@{2pm̭aȨno ͻ`gbbbe@SKƿy:V2%~02{;. W?fV.=b<L `of`o#fTPצ7*ED<lzVV;+'Q]?<*K)@o,;aߌuoEe7ܺ&_SMWhfj. loaFZ9KXy͔\L-3[+{_7 ޗp~ɿUߌf- ;2gz$vv76=b#˻ /בr qE . `/d0JAF?(ǔ/zTX*+QzLzE뿈=33Mmw9*މ3u}?HIA1N?y1x\Apx7S{+,=-xYw?;E?v`}'u~1'W?`~";?En`n~7{ζΖOoFK}}=ߏ;gS?7=z8}u/OB h `b]qMߝ~o|O3{ J] NCYZ#~>im oKVny6LTk_.>$#Wyql!wrBV*Dw,>_!\>Gu" =!, / 7hyo2𾧱_uX6*X{ppup!o&f)EdKKb6s6'}ƻ?Ia3قV%'|rTiOqh%$ [J G"@fn0 ۫nOndOutww0כE6^|1 z|jO==T;*]aS3?g5q&ԢpRIgpe;+}rw'hM.f7Ak&6M<@ΌK+^-'nV-4.q >)~pkX^dJjA[x|(paAsKs&A F6.NPaqA`28)Xi>Ż[iq,m̛#trȱDG~H ZdʖGN&+}S;AП/cBgWgsc&.v8PBL7q,qm=T+qfɚe*6m\q~?~=~t^yîek_:cBt^h$!TqwWgzd rlo )47 I m\T~nH_[eM )).#5FkU[to=u#ZAQ>=ADd J\d .U]?-+w3KXZQLCufTI+*!Y(2R(bhv$O IPeu\PI96CXc=ʂYz|ɫZsk^+tTj\وq5F<ڻV頹B!lf: 4ϩ8a|zap;`)`c,kax:a+U`G6eH1{?uN")a;3b!kI~xNTgKOO$󥂲˒RsSnǂ'>KbE"*JźqdW}U`6%,N=TϾ/ѝDUb|l[sۦ9!;X>JJIO*2(YKJP+K]Ҷ 1D3dT8IecхꬁXUj<%]#!,Gٝy$J<-%:C(UVId!-A_XZo%,3~?O*T;N~5ɒ箅i!c1gi'qy pLm.J$hG链P{{aqʽ>-K>D5x {HϦBɤqwFhKR"LjMd*̭ݳPjF!T8< V܅Rn; lD{mQYt׹_vl)MM6Ҥnt$C8N5.ɧ@t]Z<-1BB08 tmu}b8ޏ73:| ;Jƛq%4"6AC+5[J'"lIU ;EvѪUظv)07њh%׮ćGF;20z*^ s\hӧWS`0?WTO#$|fp&tJ\~ aw:h 8QVd"8Ҥy8A$&7~fTdyAs.e7nIyS%X@xھI/]O!Hj-*dt_JOEOw)3z3rNWrJµ6[i+ڴN4͟{~xk鷍oڹ~xU<gP3iA]lB5d(l8͇ngS9"'*ii_?ff ;ƍDo(hyǚ[AZ*c=rq#^rO9"^ E{J.Ox aXݰ1J+c!A|-IIڜP2~u6f]=/M TAGi+^v a>!Y:m77C7w0Xs贃rM Lo gC,-D1+0H}adu#3.T&al4N"\#l'oռi&GDRq^~5h5"xK1V0Du-'/ >uհcC1UhM ޜ+k%rf-Ed};ϑRMV ~7u!XQݟX`E,P2>@AbgLEEULCcf/X䕴/*1uIa.`^B,5 ^XQD<^gFC|`pon=^j8ia]??$ᦿuN!%4‡Qt'Lj:ܦaYPN{L(ʧTv%@[BҠoޯC @v.vvx2}K y3'QZ֦/jkOÈZP_=DWX2 ~"#j [0);tyL;OS/,U2W0SV/pĶ6ۭ&̊*X#j7 &ݨy*᛭UE${>)ZzfQξ,1x2.0Z[qV1*hjN&>D~'I|G,O=&¾yx_9Q(!x.;!K1/,bn$R&<}%KrM֡~\eqn"|댳eXGp!j\tpmQd+'-o tħaf E2jܵg'i-𵁄L 8U)݄:*"mxX@ nfKSeuw^l+Quy= zoT:<,3hР1IG=7\-'*z]Yr4GwΞRއC|]xZ0D_L].<*4+b9si 9Et8z dFފq#׏S;G,,V.pTB>%` E:(00EHHm#C-"˯ NG\xG~Ow tU_dt{8fKϪ8/ZfM]ITr"DUAXq\qAzICo滾ՒHtNuAuk {qM)GrZq1Ȗ2d,im8z;Ļک!`2-+'<1l՗Z?٩C[^z#TM% u9kI9 BR#h"ʘ ?H 7Bq<Έ7x{T-ܾ/l4t'h CMK\n+|G{MgkVeޭlbMx-]="L]mqO44eey͔/h5p6v sQoE5iuDGsUNۂzڠTCj٧R}9#`V{i[E㽙GZÄ26uT$a38v1: v7MP^ꈉ(IR4=Lݲ[(ä`ÂQf:$uC0)˔zzȎ>7HۺU{*]>Ayͺ䝵3Vsu9yv s/J2mKK>'uEҮg2uUm@s`Udb CDOǛ9 E?Ácbڤ*mWy_yw7_ՅߌM>rkwEq3tB<,! wt O#LVkc1Za{va5_:mB2l'ю'= `2󷢐k4s4l5RkD,B6[haa>]sB,P࿪ f.wUzF%z؅ų([- "UuY/ tCg&U4IB>U[TWzkD]Å/ (_ ق=JhSWCŔ*k7F.x39=^qӫTZtRu}(bajo<3O^qAj A0b(lq`i DŽ;(Eݮp26:X=ùeD2|(Ѿ* ?`,؟pvH2غf PrvJ^jE*.Ѽ2 i귈5VPԠ}197}JM#f4^ΊWÔcEmOO*ջ{SM_J¿px?VfU" t9Hdgwm>v(?S`bZS!%htѤ-ۻ/N} [ ;0d!2 !xy]&0#ڿQL|f:݌LuIUh0pW,W޲$MqU-Q  'QPfmq@#_")ua>"g뱏؃I*quS6$2s#}Oyv?%MH0 ojTCRgB.F6Ӂw cO)D:4Ժ26ќFwC->5qOo⒣M⇮/c z AYs'a{BqB%>CW5<^ʃWB MdT #~˟ .)tuzn3rW}<~l􂙏-W2uU&Ki;hI0MjnQPx3)z:w2^2 ˪ %9r["5?DܘxhƓ.=$,pJM򾕄:F-Z;U(O zWuqƮ~/ !gc긫~r> "mw?7虍5 UCBi]dhVZ8IDKdX{=aD+1>jxL2WQҸo>5kHS?TB%`gz~AlX*|7e`Bi 7ֈ 8s,xQ/7EjW3 h0=&`OtCыw*سSr5𕦎>7Ѝ, d(=ΧEP0t_\R;-ؕ83d.ӣ4R~OnN?)FHP<[#'eH%xo LN8+D u~hlwZ <2Pi>hR^oݱ όB&Ցl ziδF~b+#)yl"3~d1Ψ-NnTTYEs] R Ֆ @@g]XP$RBf-_Z=-ics^[j`+InV2cRKI^ ^}&}T.x,u"0{;4@qQUc}kJX|HZtqBB.ʀ@p-(J=w]wdfnS C.hy"O3rYdpy 3A;fp;9K,"C\^;' ;3DP$bt< M^*g5\tF>X^ˎ-<^'욠ZqVS~.kDXR빢 dsMo)*e"R[?$Vx=*QIvק:d' Z_X &s|p~:XO(#O)~b'o~ۼYA8rt>fZd#I+Flch`q9a?ų]鋚eΔ=hj8@8ͭWm7[gIY53Uwv}ʲ!9 ɹqs֠sȵeO\h>Z8"t4fޝĽ"6ho6D@| JSK^הfńr9Jr$6b$-Cs ? Nh.e O4͋xoxp6ʰcMKe7%*"ٸt/8Gp8SPO~n}ƈf?`B%yhR(7W&yIܥSgiqG~e M!Gi ɚc R,s4mGx~IDyØc6F9}ygFHϘשJ\) F@ZoczXS?d P6YlPMi9j*RQ8^k ErwG^n05DXWi :;\챟U^Z7[PJʬR3tIꑢF bB1}IQ=l(W/qyuSQdʆ8#UC#A$ 4Xe}޸jp8{X3y[ m0ej6)Ȓ^'H7/dh F9D^b[jtfBzYk f+c1rdJ{Ε#Q w\d Y Xav6cy)ep \|"'ubA7 4UJy>f%.n|5aV0ݮ{e +11XO:!!WrՏ-2IB g3U/Tև.M$"W=$fX'q̛1 S67@9 9˳7ڃ^QUGjob?%QEg>TcX B< *>66y~Arb,RL(xU < f^ =:\ 9$7m;30ɀpj.`]")d&%d[ELNSeةb OPl7^r/RXa+ZZcv"8A QIōﵧDɿ ׀Z]CN&2j{>O}í!<|&p!Lv_*6t 1r> LJgT M t1iό/?BFe`Dw,dT3HK701OG3cΖőmi<n7=kLZR]ӍXtlmS\r=+[j%[5_aYvzyB4asEN3Cq 8ʽkq bN<-(P nX5%`C D:58D=u6sdT|s8&u}\\EJA:ݬ@whjC]ܙ=(99RCK;O;'6պ |ͥN2*[o:OӐne?y`YX l_1.]=6K/"eSh 8sQWydN r#8'cnK@9QD4Q< ٢0dHm(A(%-KOwqUuD*-~2!Wo  b$Uve=bKxpNUc}*T q1)]9%(%߀b^%Ecf)мLąlW7\ﮧ ]aaޓ'g'6|<%m?Cx JB9\~~ e+ʬV?xDZѶ{Nx(2̩jn`z4FB\rH]zC P斸Xs2 3Kb" A7Dȧ? Qڠ$>p=v *Yg?!9|0ΫMuXO0&%j0%6RzHUsW%yk.X kEu%<{n)V&+cENWgO4|E*QŚVl Ms,` *ޠ)ҸV[[-Y*W0R>9hQ-r*WkǞ `Vmմ%ylgg+b0m4t2SU+M`^+&IDfv&ԔH 6׻^N7(2Vdv[Pl(ΘQ2qGN!rSh.)h=&9X]6-cSGZGAn\دՊُ'+/~JQmpey5ʞ͢`!1C_f]2pbNU.?Jn!j.l Jʜ1ƍ޵k \X +XÊRrwuMA%޲>p}E[BN Do"e2":g V])W%3[]H+M.4RMjzLu0 R[TϞl )ESlĪHykWl0"F YDFaQүۛf4n R_-]Leuw#snjbjRoIi搠B ,صs&)4JM"Kv>a~C.6frNv-8@9|5uL<`ng䵨%U X; j>F߉ 0^Λ+'q ږ$kioŅ CuNI*LO%Xf&AqmYÚ1%YpUaPEzqG! XC%-_|Du <&:ʹh{TPwܮDZAjO&} ϼnRjTT݅pby~, $UQ:KVjܰи 0y%]GH8[EF0MWN/=wqdS8ROyQ)Lo̸y M0J r>03`Ň-9!:3n*P ^6al)ͅ/m3&Sv^4+A!Ald4b`rwՑҳ4ﶣ%MJggMOjR}bGMxsaSNZ_/$?YMW/[Pd$E@X{8^*h-|=Єܓ R%CE=lK?ݛ3glI_b |!36n!;irV|ޝ2LNQ"eּ!֚۵hor>!rCQ3`BJ+e%fEڞrۥS<Un!DU~u`K.tmqRdzMhYdUEt"HNg ̭2 +'S?+]Cnwf2m2c㎕Rߛ_874xB`:Pr~B0?CBxQp6P. Mn D&mV֊7RF;fɩd")u,I0CsC-BGG5jMF,@%kY,:|;;Q.[( 8AhbV=["L텈GM{͚oوiʵ>{ӭ}F+T6òfҞv{hdtP%"ӒO(l| I\f2ZLo.9P!DBHZQ7X@n8PsM<XŠ /*n@K ~U%tv`%1Ε%:*x~3,B WBl_qUfE$eoyɮm Ѻq$ D .m^AeI Bfd{'ƾHrރK$vKa=V^զS!5{t6xQt+kd>q٠|$)O0$2Z)7%Ґ!6=û&]Т][2G S6/S$ JYo0N)VIRU*r JfD-\Cs|tCěW0۪tg,|=kTm[0b%->JC ŷ~w2ZDٍ>ͼCq4p诧#ǚbiPt)e,+E"z>ii536Ѭ3]q!aܤ).!_:c˫޳,n<DŽbo%,u[7i {ˈlDࡪܒΰar " cK":p[ 1ku #K-Ωr+RR>HD]Œ"yĤ\ȗ9o-O')nW4<(܎]*R%UcOKπ]&W+;kpZe&U\5.|[ )>ұz]d"n[68jN-c*iK=](7Wz&E%[6(7΃;?!2ʍ =~a)/S&H$P|WR; *f׹~CMp'w~Q| F\ԓϸ]B #>X&->e}"VZ~:Xc/oݏf}Cx>/u4u`O$c |#$Cc@#RNm%97,XcotdQ@ч !hOΌWז jfA!7fJzveoX0s$xt̔)Fx]Lx-Z{ܬ0Ʒ+-%QF~H(Nf-EhKTdia&EOFO\mli}RDX6/CmU^Ep3P,-H>r|>iy)z]#7~?7aH[i endstream endobj 53 0 obj << /Length1 1646 /Length2 8839 /Length3 0 /Length 9906 /Filter /FlateDecode >> stream xڍT.Kp).ŃSE B($AJqwkw+PxSG9sZIoff2iX- p?/8PN 1  / a `Ճ8"9C{<qS;Uv@~A 88PO?D8P UA@vK (@{3T#l 'Z:pK_)%mGq͍l w>6@m b0Pl3^+ Ov v0K} ?|q'l+w"`KK#Z jw7`sǃ]0;=@E- st9"\x]`v[Ns?e+9=]<by?vП79XYn u9!!*QMlP(XqB-m@ӿp|߁#h}f x]!@3o#?? fZ@0??;܁|^^Vp;/腆3m?;'+ wzyB@@N U?*p؟?usi5 #||_B#O߿$)"p0;E"_C\Yu i^~ dvsXi6O9@4.o |{ep. p% ,;;=|2z/Ap};o5BE ߦ?7@?i7%/(ABgx8ܿ"0mv NB@}fA 7#="~:<5tKV/|[J]VкlJMn'sx~vnG^b'pT8$ t/+=]`\zuk= 8]-;'/=WͨNDŽdnJ}%!Z["nK&yt#_NXdP1c!xq8I܉ΧH~1p{ y셀K'5 =N*gQA\&/ʼCW9=Ih-P. Y+\HPfdCR@;{uLA2]V͚PoL6+\lKYRMʱ9C!`Yp2*#^S$tGŹ$ez/.}fdL5%Q.P2^ ] s`ۊU7oJl|dLI: pRak>E.s9c=I')4 SؙKbCqL_ aAўI ߺMMj%/O~h%N/#3> nWĨ6B5[hz\2b8ʙ\sgTq|c-e_)K$ܺo~cao)>_w0m|K0S0r3=P"#pUmqf_۞ fTNeH/T(G* RcFn!$i gymɸDI4?m}{a>m:(%vp'52H ~jWsT\; lJ)yعM\[H"خ;Hb֍ 06Ǻ l{ig!Eŗ#ؤ(\qmO7rۢ3mho GwNYEF{5-Ħ1{vg t8+k*fOz5û`/Fȶ-f]k;t(O[}ցh a W27j_$ "i\ᐹANcsSXܯƇ h*7=)勻hbq-YS=*U夊_c~ߧ$4F]SRm ٧ 8ʐw,Zr ef=(>O^ggtZP%NqOw @jEA#$@hS3ғ+wJو)s ݗj鶬wevtҰ",}(")!i'Q㗭>ۭg\nQ`*>W6&|oBEIM2j0~USwGYƣ/d FSsGg9*"R9hn;qZDC/>`-]-{^eJ)׵p$m?~^akoQːPϤJ_2{Uv-^ZNȾ0ͬ3!@*"S8]gJm:Q@8_qxkl;z/B/GI Qb=,D}Zi37kx M>|RdH͏B/#zC;ܶWw[; .=i}}vslc2*\ RyWO?%3V;4MNu'.x׮ZruIhǷr0R0ӐlJi*mGml\:6ǚ/AIRTGVD;R_"0?orO,?]|Җv/d񰠸X#ΌիG2ZgAGܹ/)sSS 䙯MQXHW\y xfW[ިPx .HOa+ʦ Z~(0@d?z#}Ch8))&mr}FW֊2P壈&spD@< &c-]Jk$DoO2?myjvH\*?)(kBR'A嫁qLzܳo jr^E}@6RF1ȘzSTVHx8_ alДsOHtp|9}xOq]!1.K BBuuKg2mCn#ԭ0l9,~T^teȊ}(Uukb*JGeс)8YD{30::SjHŶCZ1(d¯WSO@ϊ*k˲̈O}:vǕP(Jbߗ&U |sɚla06]uQ3P7qy1^24<LM\/5dI<@J޹Jihy*Ѽ4,81\]V;^Hdo@O?/Y/++T"ƳUi|Ði0vx˭%3M4G OxZE9KiO8rnP03pu/QV[(ŻQlFMw!~ðHnO\t:|Ev'̛nWatμ vu9 f5 aZةvE #&Y(&nO&Uhgh?^y*ٔf"]ѭ(L$]ꮯc(<yfs:癝ĦAk:_?NΆTO6Qi).^۫k>ݦi-444%6O7s ޓTG6=o6-?OV}NxB#.α%_f`pYWE6'46 ᇞբk@•esz4EZ> uX;PVwЌ%FQ%Zv*U ?}>=7-Mގ&Gs5(u5'd4%=qА[eܚd'&?ca.~%1&˭^$K*2?,:= aeO `h]:AOMfNXeC,XU A1aeO 3GD\U4n n?)؜y|T=8FT:AIWc4`ov 2v?|KmւjhRT¨H20sr{PZ Ki _5G0sRShɱ=sB N6z̡Yf +lf*iSqmT ScKXӿS gr]j~կ&`sffZD8JK ?Q NC!.'%Tc!.>cF4,ٷz)>zÂP+QqDJE9ORpyiD>V5G8-Ei?܀/.Hy.ᙖHֲ(<͞v$Wvd4SÊO溑uD[ ďW~"K!h-3jPKa=ru,MCq,ڭMlenot~u իM=PRKt<Ә#2كx(1l$F }1ђ+4P Nire G~$VcI ydxFBwvdwgðOD|UY s|,AZE{v>5_0A&emn0/Q5'8;6&ڳV_jgN=gnwj1=qm: Z)׃"FGk2?rZBrzЙDizaHQs'=W<"!ؠ}Bm<7ȍ_yͲG!䏼땴,@6&砪'j-!;Nħ'滻&)ֳT3,)rH.~8aRҘWxUO:|*L%uZ;fDya#Li;kVFFaq#5d2SdRGXGsf;2< i |2uejkabrjC6b!|A[QhK1<00H:@¦*c6 ͸8V[>/ 5Zt<氭 o浽,MtLm\LdR]S%织*m]Jy9%vi6ݣZH8>bD)$w/숂{L7,~Li<hgT8 {Ռu=1dj 0R'~W$DLgK.eWuNҋ8?Mڿt|fu%DoL}v6 ]}1#V&kgVTMO$ yzS>\ħe iFmdoh$\)WmVtg" `QgiGqn6DL*&/ 1:R\"F.3*[=ߎNpt&Qkl"+ ثv骯܆'yzpf~嬋LՏ#o@M AG LHj> N;ckaKR|tvt|uwD-I咯:.IN Y=WMg~#R?9?SAێ FbW]T!xC8?>G[=C %~eu d`.p[ԨRNMeԜ`[ 0"fyكʑr@sBZX9 B(].wg)Uɼ~W epP#] u] /,L;oB4U.Rh 7Aq'^^۶45'Ȓ_XIJOv٪F*IouDe> ? G@?Y&^kh$M۶+!bh\1Kr*2iiP'W? a›I>dAEUy”VQZ d`<1ڛYzr#@&}%PFCƬlw8#m;!^ܫi2h]٧6N'~iO"*\*2KڸWח~|nu#W/[^BR+h; 1pocW Kwz$Tͧ'- O?E9?nn+ZOѓ* v}wzow_)57Tͻ-yv̿Od:B׵BjIJyxNFKːJ:7\&978یcOpi=bj `,Lmva!RBհKwݞF,}lש*y$˒8Lo6{[Z6Hڒا'%[\rh՝Ukcilbx%sОoӋ6~zE2TsQOc:- jKq_hyhfI1T^bM9Ws9F\%!KQӂg̤4_95h3~{yAÖBTGUt-mV۲0#ܢf'La9LkAϦkn.eĺHk ƍ9үqRjcfTᛥk|>"ГTcKC]Sɸ%\OBDH 8j2['/QAKK<͢oB7o֎T &yC:"EO.Vml )SS9U-T7-fާWy.847~gpStG8ѲV*+6XG Y/QI;)V5cꙊu<+),ɥd`ԡ_It?宿_}qy;Jr?>[[^_Blg2_f٭q5! iO}{(Y~!+wrP5|W>?eۤ,l(VQ.`qL`ƛd,yjpÓr!*=\ӯU?u<)UA)oFuIrEH3uV{\ڣ:>h,?Аɩʪ+XI0\g}W&0*g_JcSOoU.;33DhW'`*DhN6& ϼP{HϤn-rRЧpK-> endobj 11 0 obj << /Type /ObjStm /N 40 /First 299 /Length 2319 /Filter /FlateDecode >> stream xZ[s;~nmݥ*T @.TgÁ뷻%cāOm!v[\LTn?f\V WXهƻ>(Ev: uhTX[z%x9NMeLE ip,J0y H$ht!c> Ϲ}o)Ϭr4 J:l^kPcC"!D\$A&Z(IT|h\؃6#5wӗhh9.Ob{|&m1x\d.'fNoۊ1a99B HCPvYbu-D9'M94b{u>ԗ)(Ge=cu %r"E96m|^WW<.Dfo>P)jR8mʱ {b)]L4ZKָ%SKR90Qo-IS)OJbe[u\ZE.=UK)E9Hk̰@l`¦Gswh"(d#/z[E b3QMe#,RG 0%xFKdu tRoƹgD4]q+p,no#}QDREIEAad4<$U H 8uҾu/K2|,-j/CrE+G: +\S:GIe:W82h(<@ ׎ q@imP>w;&-"ZcjI#NeA-mP؎iڌjpT.Qfh$xg&޲6TM-#WxֶM4G[͈i1<zPűpގ:L޻4֑CXF`@2X8JJ"{4;axE$$Tlz KM7[=.t1Isc?㜤LFssD`p3kQX{7۫I}7O%+̶Q@2¶d[RײxG۞lnp_*^T 4=\P m |9+`{t=?Uie΅mwK~c~Oy?i_Wp+|FC~G|ǣjR/O$+ͤ1ߣ5,VC { QsQ ڐaj k@ ?o<p%a _݂<\ Q @7pau5 +nx?4cԊEMc/V/W5&b8L&W N0`c1mX*sk oګMwz?jh ۫ެި\m_q|G1;a&Z9>z Z>=]#U8SbAql6K) OÅ}O1Zr:Y=OrPQtQ- VfM7rh|_imwIUB']v9˳=0uT&mB -SG7[4 ommtfآ~Cn&ǟX6E/n`]qU~tYM{nnQ9}1Y!9k%#h8Fp;FOn6uu^i:AN9W~x7k{yk;l$[,Ȗl)#[? ;m.;mW6OV^δ+^%z';, 7ţqOv4πBu%ke)~!I0U}9ee1%T^d}&7 endstream endobj 57 0 obj << /Type /XRef /Index [0 58] /Size 58 /W [1 3 1] /Root 55 0 R /Info 56 0 R /ID [ ] /Length 168 /Filter /FlateDecode >> stream xIQsm[1S`bh 1 F&"s'_޽;@>T#1}11]}o{3VIuHQ`cNd } \examples{ ETABM25.affybatch = ArrayExpress("E-TABM-25") print(ETABM25.affybatch) sampleNames(ETABM25.affybatch) colnames(pData(ETABM25.affybatch)) } \keyword{datasets} ArrayExpress/man/ae2bioc.Rd0000644000175200017520000000442114136047360016577 0ustar00biocbuildbiocbuild\name{ae2bioc} \alias{ae2bioc} \docType{data} \title{ Convert MAGE-TAB files from raw data into a Bioconductor object } \description{ \code{ae2bioc} converts local MAGE-TAB files into a AffyBatch, an ExpressionSet or a NChannelSet. } \usage{ ae2bioc(mageFiles, dataCols = NULL, drop = TRUE) } \arguments{ \item{mageFiles}{ A list as given from \code{\link[ArrayExpress]{getAE}} function. Containing the following elements: \describe{ \item{rawFiles}{all the expression files to use to create the object. The content of the raw.zip MAGE-TAB file.} \item{sdrf}{the name of the sdrf file from MAGE-TAB.} \item{idf}{the name of the idf file from MAGE-TAB.} \item{adf}{the name of the adf file from MAGE-TAB.} \item{path}{is the name of the directory containing these files.}}} \item{dataCols}{by default, the columns are automatically selected according to the scanner type. If the scanner is unknown or if the user wants to use different columns than the default, the argument 'dataCols' can be set. For two colour arrays it must be a list with the fields 'R', 'G', 'Rb' and 'Gb' giving the column names to be used for red and green foreground and background. For one colour arrays, it must be a character string with the column name to be used. These column names must correspond to existing column names of the expression files.} \item{drop}{ if TRUE and only one platform in series, the platform name will be dropped.} } \value{ An object of class \code{\link[affy:AffyBatch-class]{AffyBatch}}, \code{\link[Biobase:class.ExpressionSet]{ExpressionSet}} or \code{\link[Biobase:class.NChannelSet]{NChannelSet}} with the raw expression values in the 'assayData' of the object, the information contained in the sdrf file in the 'phenoData', the adf file content in the 'featureData' and the idf file content in the 'experimentData'. If several array designs are used in the dataset, the output is a list with an object for each array design. } \seealso{\code{\link[ArrayExpress]{ArrayExpress}}, \code{\link[ArrayExpress]{queryAE}}, \code{\link[ArrayExpress]{getAE}}} \author{ Ibrahim Emam Maintainer: } \examples{ # An example can be found in the help of the getAE function. } \keyword{datasets} ArrayExpress/man/extract.zip.Rd0000644000175200017520000000121314136047360017542 0ustar00biocbuildbiocbuild\name{extract.zip} \alias{extract.zip} \docType{data} \title{ Unzip archives in a specified directory } \description{ \code{extract.zip} extracts the files from a .zip archive in a specific directory. } \usage{ extract.zip(file, extractpath = dirname(file)[1]) } \arguments{ \item{file}{ A file name. } \item{extractpath}{ A path to define where the files are to be extracted. } } \value{ \code{ Success is indicated by returning the directory in which the files have been extracted. If it fails, it returns an empty character string. } } \author{ Audrey Kauffmann Maintainer: } \keyword{datasets} ArrayExpress/man/getAE.Rd0000644000175200017520000000313214136047360016256 0ustar00biocbuildbiocbuild\name{getAE} \alias{getAE} \docType{data} \title{ Download MAGE-TAB files from ArrayExpress in a specified directory } \description{ \code{getAE} downloads and extracts the MAGE-TAB files from an ArrayExpress dataset. } \usage{ getAE(accession, path = getwd(), type = "full", extract = TRUE, local = FALSE, sourcedir = path) } \arguments{ \item{accession}{ is an ArrayExpress experiment identifier. } \item{path}{ is the name of the directory in which the files downloaded on the ArrayExpress repository will be extracted.} \item{type}{ can be 'raw' to download and extract only the raw data, 'processed' to download and extract only the processed data or 'full' to have both raw and processed data.} \item{extract}{ if FALSE, the files are not extracted from the zip archive.} \item{local}{ if TRUE, files will be read from a local folder specified by sourcedir.} \item{sourcedir}{ when local = TRUE, files will be read from this directory.} } \value{ \code{ A list with the names of the files that have been downloaded and extracted. } } \seealso{\code{\link[ArrayExpress]{ArrayExpress}}, \code{\link[ArrayExpress]{ae2bioc}}, \code{\link[ArrayExpress]{getcolproc}}, \code{\link[ArrayExpress]{procset}}} \author{ Ibrahim Emam, Audrey Kauffmann Maintainer: } \examples{ mexp1422 = getAE("E-MEXP-1422", type = "full") ## Build a an ExpressionSet from the raw data MEXP1422raw = ae2bioc(mageFiles = mexp1422) ## Build a an ExpressionSet from the processed data cnames = getcolproc(mexp1422) MEXP1422proc = procset(mexp1422, cnames[2]) } \keyword{datasets} ArrayExpress/man/getcolproc.Rd0000644000175200017520000000170214136047360017433 0ustar00biocbuildbiocbuild\name{getcolproc} \alias{getcolproc} \docType{data} \title{ Return the possible column names from processed MAGE-TAB files } \description{ \code{getcolproc} extracts the column names from processed MAGE-TAB and return them. The output is needed to call the function \code{procset}. } \usage{ getcolproc(files) } \arguments{ \item{files}{ A list as given from \code{\link[ArrayExpress]{getAE}} function. Containing the following elements: \describe{ \item{procfile}{procfile is the name of the processed MAGE-TAB file to be read.} \item{path}{is the name of the directory where to find this file.} } } } \seealso{\code{\link[ArrayExpress]{ArrayExpress}}, \code{\link[ArrayExpress]{queryAE}}, \code{\link[ArrayExpress]{getAE}}, \code{\link[ArrayExpress]{procset}}} \author{ Audrey Kauffmann Maintainer: } %\examples{ %# An example can be found in the help of the getAE function. %} \keyword{datasets} ArrayExpress/man/getcolraw.Rd0000644000175200017520000000132414136047360017261 0ustar00biocbuildbiocbuild\name{getcolraw} \alias{getcolraw} \docType{data} \title{ Return the possible column names from raw MAGE-TAB files } \description{ \code{getcolraw} extracts the column names from raw MAGE-TAB and return them. The output can be use to set the argument 'rawcol' of the function \code{magetab2bioc}. } \usage{ getcolraw(path, rawfiles) } \arguments{ \item{rawfiles}{rawfiles are the name of the raw MAGE-TAB files to be read.} \item{path}{is the name of the directory where to find these files.} } \seealso{\code{\link[ArrayExpress]{ArrayExpress}}, \code{\link[ArrayExpress]{queryAE}}, \code{\link[ArrayExpress]{getAE}}} \author{ Audrey Kauffmann Maintainer: } \keyword{datasets} ArrayExpress/man/procset.Rd0000644000175200017520000000161214136047360016751 0ustar00biocbuildbiocbuild\name{procset} \alias{procset} \docType{data} \title{ Convert processed MAGE-TAB files into a Bioconductor object} \description{ \code{procset} converts local MAGE-TAB files into an \code{\link[Biobase:class.ExpressionSet]{ExpressionSet}}. } \usage{ procset(files, procol) } \arguments{ \item{files}{ is the list with the names of the processed, the sdrf, the adf and the idf files and the path of the data as given by \code{\link[ArrayExpress]{getAE}}. } \item{procol}{ the name of the column to be extracted from the file. Obtained using \code{\link[ArrayExpress]{getcolproc}}.} } \seealso{\code{\link[ArrayExpress]{queryAE}}, \code{\link[ArrayExpress]{getAE}}, \code{\link[ArrayExpress]{getcolproc}}} \author{ Ibrahim Emam, Audrey Kauffmann Maintainer: } \examples{ # An example can be found in the help of the getAE function. } \keyword{datasets} ArrayExpress/man/queryAE.Rd0000644000175200017520000000254514136047360016653 0ustar00biocbuildbiocbuild\name{queryAE} \alias{queryAE} \docType{data} \title{ XML query of the ArrayExpress repository } \description{ \code{queryAE} queries the ArrayExpress database with keywords and give a dataframe with ArrayExpress identifiers and related information, as an output. } \usage{ queryAE(keywords = NULL, species = NULL) } \arguments{ \item{keywords}{ the keyword(s) of interest. To use several words, they must be separated by a "+" as shown in the examples. } \item{species}{ the specie(s) of interest.} } \value{ \code{ A dataframe with all the ArrayExpress dataset identifiers which correspond to the query in the first column. The following columns contain information about these datasets, such as the number of raw files, the number of data processed, the release date on the database, the pubmed ID, the species, the experiment design and the experimental factors.} } \seealso{\code{\link[ArrayExpress]{ArrayExpress}}, \code{\link[ArrayExpress]{getAE}}} \author{ Ibrahim Emam, Audrey Kauffmann Maintainer: } \examples{ ## To retrieve all the identifiers of pneumonia data sets pneumo = queryAE(keywords = "pneumonia") ## To retrieve all the identifiers of pneumonia data sets studied in human pneumoHS = queryAE(keywords = "pneumonia", species = "homo+sapiens") } \keyword{datasets} ArrayExpress/vignettes/0000755000175200017520000000000014136065135016240 5ustar00biocbuildbiocbuildArrayExpress/vignettes/ArrayExpress.Rnw0000644000175200017520000003421314136047360021363 0ustar00biocbuildbiocbuild%\VignetteIndexEntry{ArrayExpress: Import and convert ArrayExpress data sets into R object} %\VignetteDepends{Biobase,oligo,limma} %\VignetteKeywords{ImportData} %\VignettePackage{ArrayExpress} \documentclass[a4paper]{article} \usepackage{times} \usepackage{a4wide} \usepackage{verbatim} \newcommand{\Robject}[1]{\texttt{#1}} \newcommand{\Rpackage}[1]{\textit{#1}} \newcommand{\Rclass}[1]{\textit{#1}} \newcommand{\Rfunction}[1]{{\small\texttt{#1}}} \clearpage \SweaveOpts{keep.source=TRUE,eps=FALSE,include=FALSE,width=4,height=4.5} \begin{document} \title{ Building R objects from ArrayExpress datasets } \author{Audrey Kauffmann} \maketitle \section{ArrayExpress database} ArrayExpress is a public repository for transcriptomics and related data, which is aimed at storing MIAME-compliant data in accordance with MGED recommendations. The Gene Expression Atlas stores gene-condition summary expression profiles from a curated subset of experiments in the repository. Currently, around 917 460 assays are represented in ArrayExpress. Please visit http://www.ebi.ac.uk/arrayexpress/ for more information on the database. \section{MAGE-TAB format} In the repository, for each dataset, ArrayExpress stores a MAGE-TAB document with standardized format. A MAGE-TAB document contains five different types of files Investigation Description Format (IDF), Array Design Format (ADF), Sample and Data Relationship Format (SDRF), the raw data files and the processed data files. The tab-delimited IDF file contains top level information about the experiment including title, description, submitter contact details and protocols. The tab-delimited ADF file describes the design of an array, e.g., what sequence is located at each position on an array and what the annotation of this sequence is. The tab-delimited SDRF file contains the sample annotation and the relationship between arrays as provided by the submitter. The raw zip file contains the raw files (like the CEL files for Affymetrix chips or the GPR files from the GenePix scanner for instance), and the processed zip file contains all processed data in one generic tab delimited text format. \section{Querying the database} It is possible to query the ArrayExpress repository, using the \Rfunction{queryAE} function. Two arguments are available, 'keywords' and 'species'. You can use both of them simultaneously or each of them independently, according to your needs. If you want to use several words, they need to be separated by a '+' without any space. Here is an example where the object \Robject{sets} contains the identifiers of all the datasets for which the word 'pneumonia' was found in the description and for which the Homo sapiens is the studied species. You need to be connected to Internet to have access to the database. <>= library("ArrayExpress") sets = queryAE(keywords = "pneumonia", species = "homo+sapiens") @ % In August 2012, this query retrieved 21 identifiers. The output is a dataframe with the identifiers and 7 columns giving the number of data raw and processed. When raw and processed data are available for the same dataset, a unique identifier is given for both. There is no way to distinguish between a processed and a raw dataset just from the identifier. The column 'Raw' from the output of \Rfunction{queryAE} allows to know if the raw data are available for a data set. The following columns contain the release date of the dataset on the database, the pubmed ID of the publication related to the dataset, the species, the experiment design and the experimental factors. The experiment design defines what was studied by the authors, such as time series, disease state or compound treatment. The experimental factors are the values of the studied factors, "Day 1", "Day 2" for instance. For a more extended querying mode, the ArrayExpress website offers an advanced query interface with detailed results. \section{Import an ArrayExpress dataset into R} \subsection{Call of the function ArrayExpress} Once you know which identifier you wish to retrieve, the function \Rfunction{ArrayExpress} can be called, using the following arguments: \begin{itemize} \item \emph{accession}: an ArrayExpress experiment identifier for which the raw data are available. \item \emph{path}: the name of the directory in which the files downloaded from the ArrayExpress repository will be extracted. The default is the current directory. \item \emph{save}: if TRUE, the files downloaded from the database will not be deleted from 'path' after executing the function. \item \emph{dataCols}: by default, the columns are automatically selected according to the scanner type. If the scanner is unknown or if the user wants to use different columns than the default, the argument 'dataCols' can be set. For two colour arrays it must be a list with the fields 'R', 'G', 'Rb' and 'Gb' giving the column names to be used for red and green foreground and background. For one colour arrays, it must be a character string with the column name to be used. These column names must correspond to existing column names of the expression files. \end{itemize} You still need to be connected to Internet to have access to the database. \subsection{Examples and ouput format} \paragraph{Simple example} The output object is an \Rclass{AffyBatch} if the ArrayExpress identifier corresponds to an Affymetrix experiment, it is an \Rclass{ExpressionSet} if the identifier corresponds to a one colour non Affymetrix experiment and it is a \Rclass{NChannelSet} if the identifier corresponds to a two colours experiment. <>= rawset = ArrayExpress("E-MEXP-1422") @ % In this example, \emph{'E-MEXP-1422'} being an Affymetrix experiment, 'rawset' is an \Rclass{AffyBatch}. The expression values of 'rawset' are the content from the CEL files. The \Rclass{phenoData} of 'rawset' contains the whole sample annotation file content from the MAGE-TAB sdrf file. The \Rclass{featureData} of 'rawset' contains the whole feature annotation file content from the MAGE-TAB adf file. The \Rclass{experimentData} of 'rawset' contains the experiment annotation file content from the MAGE-TAB idf file. \paragraph{Example when the column names are needed} In the case of non Affymetrix experiments, \Rfunction{ArrayExpress} decides automatically, based on known quantitation types, which column from the scan files are to be used to fill the \Rclass{exprs}. However, in some cases the scanner software is not recognized or unknown and this decision cannot be made automatically. The argument 'rawcol' is then needed. Here is an example. <>= eset = try(ArrayExpress("E-MEXP-1870")) @ % Here, the object cannot be built because the columns are not recognized. The error message also gives a list of possible column names. We can then call the function again, feeding the argument 'dataCols' with the appropriate column names. <>= eset = ArrayExpress("E-MEXP-1870", dataCols=list(R="ScanArray Express:F650 Mean", G="ScanArray Express:F550 Mean", Rb="ScanArray Express:B650 Mean", Gb="ScanArray Express:B550 Mean")) @ Then \Robject{eset} is created. However, there is still a warning, the \Rclass{phenoData} cannot be built. This means that the object is correctly created but the sample annotation has not been attached to it. It is still possible to manually correct the files and try to build the object. To do so, the functions \Rfunction{getAE} and \Rfunction{ae2bioc}, used by the \Rfunction{ArrayExpress} function, can be called separately. \section{Download an ArrayExpress dataset on your local machine} It is possible to only download the data, by calling the function \Rfunction{getAE}. The arguments 'input' and 'path' are the same than for the \Rfunction{ArrayExpress} function. The argument 'type' determines if you retrieve the MAGE-TAB files with the raw data only (by setting 'type' to 'raw'), the MAGE-TAB files with the processed data only (by setting 'type' to 'processed') or if you retrieve all the MAGE-TAB files, both raw and processed (by setting 'type' to 'full'). Here, you also need Internet connection to access the database. <>= mexp1422 = getAE("E-MEXP-1422", type = "full") @ Here, the output is a list of all the files that have been downloaded and extracted in the directory 'path'. \section{Build an R object from local raw MAGE-TAB} If you have your own raw MAGE-TAB data or if you want to build an R object from existing MAGE-TAB data that are stored locally on your computer. The function \Rfunction{ae2bioc} can convert them into an R object. The arguments for the \Rfunction{ae2bioc} are: \begin{itemize} \item \emph{mageFiles} A list as given from \Rfunction{getAE} function. Containing the elements 'rawFiles' (the expression files to use to create the object), 'sdrf' (name of the sdrf file), 'idf' (name of the idf file), 'adf' (name of the adf file) and 'path' (the name of the directory containing these files). \item \emph{dataCols} by default, the columns are automatically selected according to the scanner type. If the scanner is unknown, the argument 'dataCols' can be set. For two colour arrays it must be a list with the fields 'R', 'G', 'Rb' and 'Gb' giving the column names to be used for red and green foreground and background. For one colour arrays, it must be a character string with the column name to be used. These column names must correspond to existing column names of the expression files. \end{itemize} As an example, we can use the files that we have downloaded in the previous example. <>= rawset= ae2bioc(mageFiles = mexp1422) @ % The object \Robject{rawset} is an \Rclass{AffyBatch}. \section{Build an R object from local processed MAGE-TAB} Processed data in the database are less uniform as processing methods vary a lot. To import a processed dataset from ArrayExpress, three steps are required: (i) download the dataset using \Rfunction{getAE}, (ii) identify which column is of interest thanks to \Rfunction{getcolproc}, (iii) create the R object with \Rfunction{procset}. \subsection{Identification of the columns to extract} Once the data are downloaded, we need to know the different column names available in the processed file to be able to choose a relevant one to extract. The function \Rfunction{getcolproc} needs, as an input, a list containing two slots: \begin{itemize} \item \emph{procfile} the name of the processed expression file. \item \emph{path} the name of the directory containing the 'procfile'. \end{itemize} This kind of list is given as an output from the function \Rfunction{getAE}. <>= cn = getcolproc(mexp1422) show(cn) @ \Robject{cn} is a character vector with the available column names in the 'procfile'. \subsection{Creation of the object} We can now create the \Rclass{ExpressionSet} using \Rfunction{procset}. This function has two arguments: \begin{itemize} \item \emph{files} a list as given by \Rfunction{getAE} containing the names of the processed, sdrf, idf, adf files and the path. \item \emph{procol} the name of the column chosen after using \Rfunction{getcolproc}. \end{itemize} <>= proset = procset(mexp1422, cn[2]) @ \Robject{proset} is an \Rclass{ExpressionSet} containing the processed log(ratio) of the dataset E-MEXP-1422. %Turning off evaluation of this section for now (Oct 26, 2011) %until ArrayExpress server failure is fixed \section{Example of a standard microarray analysis using data from ArrayExpress} In this section, we are briefly describing an analysis from the data import to the identification of differentially expressed genes, of data publicly available on ArrayExpress. The first step consists of importing a dataset from ArrayExpress. We chose E-MEXP-1416. This dataset studies the transcription profiling of melanized dopamine neurons isolated from male and female patients with Parkinson disease to investigate gender differences. <>= AEset = ArrayExpress("E-MEXP-1416") @ As AEset is an Affymetrix experiment, we can use RMA normalisation to process the raw data, please read the rma function help. <>= library("affy") AEsetnorm = rma(AEset) @ To check the normalisation efficiency, we can run a quality assessment. For details on the arguments used, please read the arrayQualityMetrics vignette. Please note that, at the time of its release (Oct 2010), Bioconductor 2.7 didn't include a 64-bit Windows binary version of the \Rpackage{arrayQualityMetrics} package (but this might change in the future). <>= fac = grep("Factor.Value",colnames(pData(AEsetnorm)), value=T) @ %Turning off evaluation for now (Oct 15, 2010) until someone has the time to %troubleshoot the following error on Windows: % Error: processing vignette 'ArrayExpress.Rnw' failed with diagnostics: % chunk 11 (label=qanorm) % Error in aqm.report.qm(p, obj[[i]], i, names(obj)[i]) : % could not find function "svg" <>= if (suppressWarnings(require("arrayQualityMetrics", quietly=TRUE))) { qanorm = arrayQualityMetrics(AEsetnorm, outdir = "QAnorm", intgroup = fac) } @ Now that we have ensured that the data are well processed, we can search for differentially expressed genes using the package \Rpackage{limma}. To understand the details of each steps, please see the limma user guide. <>= library("limma") facs = pData(AEsetnorm)[,fac] facs[facs[,2]=="female",2]="F" facs[facs[,2]=="male",2]="M" facs[facs[,1]=="Parkinson disease",1]="parkinson" facs = paste(facs[,1],facs[,2], sep=".") f = factor(facs) design = model.matrix(~0+f) colnames(design) = levels(f) fit = lmFit(AEsetnorm, design) cont.matrix = makeContrasts(normal.FvsM = normal.F-normal.M, parkinson.FvsM = parkinson.F-parkinson.M, Diff=(parkinson.F-parkinson.M)-(normal.F-normal.M), levels=design) fit2 = contrasts.fit(fit, cont.matrix) fit2 = eBayes(fit2) res = topTable(fit2, coef = "parkinson.FvsM", adjust = "BH") @ Here we end up with a list of genes that are differentially expressed between the female and the male patients having Parkinson's disease, which was the topic of the paper, but one can perform other comparisons with the same data. \end{document} ArrayExpress/vignettes/QT_list.txt0000644000175200017520000042117414136047360020371 0ustar00biocbuildbiocbuild# # $Id$ # # ----------------------------------------------------------------------------------------------------- # # This first section includes a set of "custom" QTs # which are commonly used but not defined elsewhere. # # Name DataType Scale MAGE Subclass isBackground ConfidenceIndicator target QT Channel Description >>>Tab2MAGE_FGEM[ebi.ac.uk] RMA float linear_scale DerivedSignal Normalized float linear_scale DerivedSignal Ratio float linear_scale Ratio # ----------------------------------------------------------------------------------------------------- # # Below is the curated list of QTs as prepared and maintained by the ArrayExpress curators. # This will be updated periodically with new releases of this package. # # NOTE TO SELF - this part of the file will be automatically generated by Datafiles::write_QTs. # Attempt no changes here unless you are sure they won't be overwritten. # # Name DataType Scale MAGE Subclass isBackground ConfidenceIndicator target QT Channel Description >>>AIDA[Raytest] Area [pixel] float linear_scale SpecializedQuantitationType Spot area in pixels. Bkg SD Cy3 float linear_scale Error 1 Bkg [QL] Cy3 Cy3 Standard deviation of background channel Cy3. Bkg SD Cy5 float linear_scale Error 1 Bkg [QL] Cy5 Cy5 Standard deviation of background channel Cy5. Bkg [QL] Cy3 float linear_scale SpecializedQuantitationType 1 Cy3 Standard deviation of background channel Cy3. Bkg [QL] Cy5 float linear_scale SpecializedQuantitationType 1 Cy5 Standard deviation of background channel Cy5. Homogeneity [%] Cy3 float linear_scale SpecializedQuantitationType Cy3 Percentage of dot deviation from homogenous intensity distribution channel Cy3. Homogeneity [%] Cy5 float linear_scale SpecializedQuantitationType Cy5 Percentage of dot deviation from homogenous intensity distribution channel Cy5. Integral SD Cy3 float linear_scale Error Integral [QL] Cy3 Cy3 Standard deviation of integrated raw intensity channel Cy3. Integral SD Cy5 float linear_scale Error Integral [QL] Cy5 Cy5 Standard deviation of integrated raw intensity channel Cy5. Integral [QL] Cy3 float linear_scale MeasuredSignal Cy3 Integrated raw intensity of spot Channel Cy3. Integral [QL] Cy5 float linear_scale MeasuredSignal Cy5 Integrated raw intensity of spot Channel Cy5. Mean [QL] Cy3 float linear_scale MeasuredSignal Cy3 Mean (Integral/Area) Channel Cy3. Mean [QL] Cy5 float linear_scale MeasuredSignal Cy5 Mean (Integral/Area) Channel Cy5. Median [QL] Cy3 float linear_scale SpecializedQuantitationType Cy3 Median of the raw pixel intensity of spot Channel Cy3. Median [QL] Cy5 float linear_scale SpecializedQuantitationType Cy5 Median of the raw pixel intensity of spot Channel Cy5. Quality Cy3 boolean unscaled SpecializedQuantitationType Cy3 Quality flag Channel Cy3. Quality Cy5 boolean unscaled SpecializedQuantitationType Cy5 Quality flag Channel Cy5. Saturated [pixel] Cy3 float linear_scale SpecializedQuantitationType Cy3 Measure of saturation pixels channel Cy3. Saturated [pixel] Cy5 float linear_scale SpecializedQuantitationType Cy5 Measure of saturation pixels channel Cy5. >>>Affymetrix[Affymetrix] Probe Set Name string_datatype unscaled SpecializedQuantitationType The name of the probe set. Detection string_datatype unscaled PresentAbsent A measurement indicating if the transcript was detected (Present), not detected (Absent) or marginally detected (Marginal). Can be one of "Absent", "Marginal", "Present" or "No Call". Detection p-value float linear_scale PValue Detection The p-value calculated for a given detection call. Signal float linear_scale DerivedSignal A measure of the relative abundance of a transcript. Number of Pairs integer linear_scale SpecializedQuantitationType The number of probe pairs in the probe set. Number of Pairs Used integer linear_scale SpecializedQuantitationType The number of probe pairs in the probe set used in the Detection call. CELIntensity float linear_scale MeasuredSignal The intensity value of the probe. Represents the 75th percentile among the DAT file intensity values of the pixels in the feature. CELIntensityStdev float linear_scale SpecializedQuantitationType The standard deviation of the intensity of the probe. CELMask boolean linear_scale SpecializedQuantitationType A flag indicating that the probe was masked by the user. CELOutlier boolean linear_scale SpecializedQuantitationType A flag indicating that the software called this probe an outlier. CELPixels integer linear_scale SpecializedQuantitationType The number of pixels used to calculate the intensity. CELX integer linear_scale SpecializedQuantitationType The x coordinate of the probe. CELY integer linear_scale SpecializedQuantitationType The y coordinate of the probe. CHPAbsCall string_datatype unscaled PresentAbsent The call in an absolute analysis that indicates if the transcript was present (P), absent (A), or marginal (M). CHPAllele string_datatype unscaled SpecializedQuantitationType The allele call in a SNP analysis: AA, BB, AB, AB_A, AB_B, or "No call". CHPAllelePvalue float linear_scale PValue CHPAllele The p-value calculated for a given allele call. CHPAllelePvalueAA float linear_scale PValue CHPAllele The p-value calculated for a given AA allele call. CHPAllelePvalueAB float linear_scale PValue CHPAllele The p-value calculated for a given AB allele call. CHPAllelePvalueBB float linear_scale PValue CHPAllele The p-value calculated for a given BB allele call. CHPAllelePvalueNoCall float linear_scale PValue CHPAllele The p-value calculated for a given NoCall allele call. CHPAlleleRAS1 float linear_scale SpecializedQuantitationType CHPAlleleRAS2 float linear_scale SpecializedQuantitationType CHPAvgDiff float linear_scale DerivedSignal Average intensity difference CHPAvgDiffChange float linear_scale SpecializedQuantitationType The change in average difference CHPBaselineAbsent float linear_scale SpecializedQuantitationType Flag indicating if the baseline call was absent. CHPChange string_datatype unscaled PresentAbsent A call indicating an Increase (I), Marginal Increase (MI), No Change (NC), Decrease (D), or Marginal Decrease (MD) in transcript level between a baseline array and an experiment array. May also have the value "No Call". CHPChangePvalue float linear_scale PValue CHPChange Measures the probability that the expression levels of a probe set in two different arrays are the same or not. When the p-value is close to 0.5 they are likely to be the same. When the p-value is close to 0 the expression level in the experiment array is CHPCommonPairs integer linear_scale SpecializedQuantitationType The number of common probe pairs on two arrays (experiment versus baseline) after saturation across the probe set is determined. CHPDPos-DNegRatio float linear_scale Ratio The ratio of the change in positive to the change in negative pairs CHPDec integer linear_scale SpecializedQuantitationType The number of decreasing pairs CHPDecRatio float linear_scale Ratio The ratio of decreasing pairs to the total number of pairs. CHPDetection string_datatype unscaled PresentAbsent A measurement indicating if the transcript was detected (Present), not detected (Absent) or marginally detected (Marginal). Can be one of "A", "M", "P" or "No Call". CHPDetectionPvalue float linear_scale PValue CHPDetection See Detection p-value CHPDiffCall string_datatype unscaled PresentAbsent The comparison change call CHPFoldChange float linear_scale Ratio The fold change CHPInc integer linear_scale SpecializedQuantitationType The number of increasing pairs. CHPIncDecRatio float linear_scale Ratio The ratio of increase to decrease pairs. CHPIncRatio float linear_scale Ratio The ratio of increasing pairs to the total number of pairs CHPLogAvg float log_base_10 DerivedSignal Average log ratio CHPLogAvgRatioChange float log_base_10 SpecializedQuantitationType The change in log average ratio CHPNegChange integer linear_scale SpecializedQuantitationType The change in negative pairs CHPNegative integer linear_scale SpecializedQuantitationType Number of negative probe pairs CHPPairs integer linear_scale SpecializedQuantitationType The number of probe pairs in the probe set. CHPPairsInAvg integer linear_scale SpecializedQuantitationType Number of probe pairs used in computing the average intensity difference CHPPairsUsed integer linear_scale SpecializedQuantitationType The number of probe pairs in the probe set used in the Detection call. CHPPosChange float linear_scale SpecializedQuantitationType The change in positive pairs. CHPPosFraction float linear_scale Ratio The fraction of positive pairs CHPPosNegRatio float linear_scale Ratio The ratio of the positive to the negative pairs CHPPositive integer linear_scale SpecializedQuantitationType Number of positive probe pairs CHPSignal float linear_scale DerivedSignal A measure of the relative abundance of a transcript. CHPSignalLogRatio float log_base_2 Ratio The change in expression level for a transcript between a baseline and an experiment array. This change is expressed as the Log2 ratio. CHPSignalLogRatioHigh float log_base_2 Ratio The upper limit of the Signal Log Ratio within a 95% confidence interval. CHPSignalLogRatioLow float log_base_2 Ratio The lower limit of the Signal Log Ratio within a 95% confidence interval. CHPSortScore float linear_scale SpecializedQuantitationType The sort score. ProbeSetName string_datatype unscaled SpecializedQuantitationType The name of the probe set. Stat Pairs integer linear_scale SpecializedQuantitationType The number of probe pairs in the probe set. Stat Pairs Used integer linear_scale SpecializedQuantitationType The number of probe pairs in the probe set used in the Detection call. >>>AppliedBiosystems[Celera] Assay_Normalized_Signal float DerivedSignal CV float SpecializedQuantitationType Flags integer unscaled SpecializedQuantitationType SDEV float linear_scale MeasuredSignal S_N float SpecializedQuantitationType Signal float linear_scale MeasuredSignal >>>ArrayGauge[FUJIFILM] Dens.(Total PSL) float linear_scale MeasuredSignal 0 Total phospho stimulated luminescence. Norm Data float log_base_2 DerivedSignal Overshining Status boolean unscaled SpecializedQuantitationType During quantification the analysis spots that display false positive intensity due to non-specific signal from neighboring clones are excluded. Total PSL float linear_scale SpecializedQuantitationType 0 Total phospho stimulated luminescence. >>>ArrayVision[Imaging Research] % At Ceiling - Bkgd_Cy3 float linear_scale SpecializedQuantitationType Cy3 Clipped pixels - A quality control measure that reports the proportion of pixels at the uppermost limit (ceiling) of the density scale. The presence of clipped pixels suggest a problem during image formation, and can affect the validity of density data. V % At Ceiling - Bkgd_Cy5 float linear_scale SpecializedQuantitationType Cy5 Clipped pixels - A quality control measure that reports the proportion of pixels at the uppermost limit (ceiling) of the density scale. The presence of clipped pixels suggest a problem during image formation, and can affect the validity of density data. V % At Ceiling_Cy3 float linear_scale SpecializedQuantitationType Cy3 Clipped pixels - A quality control measure that reports the proportion of pixels at the uppermost limit (ceiling) of the density scale. The presence of clipped pixels suggest a problem during image formation, and can affect the validity of density data. % At Ceiling_Cy5 float linear_scale SpecializedQuantitationType Cy5 Clipped pixels - A quality control measure that reports the proportion of pixels at the uppermost limit (ceiling) of the density scale. The presence of clipped pixels suggest a problem during image formation, and can affect the validity of density data. % At Floor - Bkgd_Cy3 float linear_scale SpecializedQuantitationType Cy3 Clipped pixels - A quality control measure that reports the proportion of pixels at the lowermost limit (floor) of the density scale. The presence of clipped pixels suggest a problem during image formation, and can affect the validity of density data. Val % At Floor - Bkgd_Cy5 float linear_scale SpecializedQuantitationType Cy5 Clipped pixels - A quality control measure that reports the proportion of pixels at the lowermost limit (floor) of the density scale. The presence of clipped pixels suggest a problem during image formation, and can affect the validity of density data. Val % At Floor_Cy3 float linear_scale SpecializedQuantitationType Cy3 Clipped pixels - A quality control measure that reports the proportion of pixels at the lowermost limit (floor) of the density scale. The presence of clipped pixels suggest a problem during image formation, and can affect the validity of density data. % At Floor_Cy5 float linear_scale SpecializedQuantitationType Cy5 Clipped pixels - A quality control measure that reports the proportion of pixels at the lowermost limit (floor) of the density scale. The presence of clipped pixels suggest a problem during image formation, and can affect the validity of density data. % Replaced (AR VOL)_Cy3 float linear_scale SpecializedQuantitationType Cy3 Percentage of pixels replaced with estimated values in the calculation of AR volume. % Replaced (AR VOL)_Cy5 float linear_scale SpecializedQuantitationType Cy5 Percentage of pixels replaced with estimated values in the calculation of AR volume. AR VOL - RFU_Cy3 float linear_scale SpecializedQuantitationType Cy3 Artifact-removed density value for each spot, multiplied by its area. AR VOL - RFU_Cy5 float linear_scale SpecializedQuantitationType Cy5 Artifact-removed density value for each spot, multiplied by its area. Area - 5m2_Cy3 integer linear_scale SpecializedQuantitationType Cy3 Area of the spot, background and/or reference region. Area - 5m2_Cy5 integer linear_scale SpecializedQuantitationType Cy5 Area of the spot, background and/or reference region. Area - mm2_Cy3 integer linear_scale SpecializedQuantitationType Cy3 Area of the spot, background and/or reference region. Area - mm2_Cy5 integer linear_scale SpecializedQuantitationType Cy5 Area of the spot, background and/or reference region. Area - m2_Cy3 linear_scale SpecializedQuantitationType Cy3 Area of the spot, background and/or reference region. Area - m2_Cy5 linear_scale SpecializedQuantitationType Cy5 Area of the spot, background and/or reference region. Bkgd_Cy3 float linear_scale MeasuredSignal 1 Cy3 Background density or volume; background volume value is adjusted to the size of spot, where applicable. Bkgd_Cy5 float linear_scale MeasuredSignal 1 Cy5 Background density or volume; background volume value is adjusted to the size of spot, where applicable. Flag_Cy3 boolean linear_scale PresentAbsent Cy3 Select this measure to manually flag data in the data table. The value of this measure can be 0 or 1. Flag_Cy5 boolean linear_scale PresentAbsent Cy5 Select this measure to manually flag data in the data table. The value of this measure can be 0 or 1. MAD - RFU / 5m2_Cy3 float linear_scale SpecializedQuantitationType Cy3 Median of absolute deviation - median of the absolute values of deviations from the median density (i.e., the absolute values of pixel densities median density); it is a measure of the variation around the median density value of the spot. MAD - RFU / 5m2_Cy5 float linear_scale SpecializedQuantitationType Cy5 Median of absolute deviation - median of the absolute values of deviations from the median density (i.e., the absolute values of pixel densities median density); it is a measure of the variation around the median density value of the spot. MAD - RFU / mm2_Cy3 float linear_scale SpecializedQuantitationType Cy3 Median of absolute deviation - median of the absolute values of deviations from the median density (i.e., the absolute values of pixel densities median density); it is a measure of the variation around the median density value of the spot. MAD - RFU / mm2_Cy5 float linear_scale SpecializedQuantitationType Cy5 Median of absolute deviation - median of the absolute values of deviations from the median density (i.e., the absolute values of pixel densities median density); it is a measure of the variation around the median density value of the spot. MAD - RFU / m2_Cy3 float linear_scale SpecializedQuantitationType Cy3 Median of absolute deviation - median of the absolute values of deviations from the median density (i.e., the absolute values of pixel densities median density); it is a measure of the variation around the median density value of the spot. MAD - RFU / m2_Cy5 float linear_scale SpecializedQuantitationType Cy5 Median of absolute deviation - median of the absolute values of deviations from the median density (i.e., the absolute values of pixel densities median density); it is a measure of the variation around the median density value of the spot. Median Dens - Levels_Cy3 float linear_scale SpecializedQuantitationType Cy3 Median Density value of the spot Levels. ['Gray levels' (Levels) are the raw pixel intensity values upon which all other density/intensity scales are based.] Median Dens - Levels_Cy5 float linear_scale SpecializedQuantitationType Cy5 Median Density value of the spot Levels. ['Gray levels' (Levels) are the raw pixel intensity values upon which all other density/intensity scales are based.] Median Dens - RFU / m2_Cy3 float linear_scale SpecializedQuantitationType Cy3 Median Dens - RFU / m2_Cy5 float linear_scale SpecializedQuantitationType Cy5 S/N_Cy3 float linear_scale Ratio 1 Cy3 Signal-to-noise ratio - spot density minus background density, divided by the SD of the background density. S/N_Cy5 float linear_scale Ratio 1 Cy5 Signal-to-noise ratio - spot density minus background density, divided by the SD of the background density. SD - Levels_Cy3 float linear_scale SpecializedQuantitationType Cy3 Standard deviation of the pixel Levels values. SD - Levels_Cy5 float linear_scale SpecializedQuantitationType Cy5 Standard deviation of the pixel Levels values. SD - RFU / 5m2_Cy3 float linear_scale SpecializedQuantitationType Cy3 Standard deviation of the pixel density values. SD - RFU / 5m2_Cy5 float linear_scale SpecializedQuantitationType Cy5 Standard deviation of the pixel density values. SD - RFU / mm2_Cy3 float linear_scale SpecializedQuantitationType Cy3 Standard deviation of the pixel density values. SD - RFU / mm2_Cy5 float linear_scale SpecializedQuantitationType Cy5 Standard deviation of the pixel density values. SD - RFU / m2_Cy3 float linear_scale SpecializedQuantitationType Cy3 Standard deviation of the pixel density values. SD - RFU / m2_Cy5 float linear_scale SpecializedQuantitationType Cy5 Standard deviation of the pixel density values. SPOTLABEL Spot labels integer linear_scale SpecializedQuantitationType VOL - Levels x mm2_Cy3 float linear_scale SpecializedQuantitationType Cy3 VOL - Levels x mm2_Cy5 float linear_scale SpecializedQuantitationType Cy5 sARMDens_Cy3 float linear_scale MeasuredSignal Cy3 Background corrected ARM Density value. ARM Density value of the spot, minus the background Density value. sARMDens_Cy5 float linear_scale MeasuredSignal Cy5 Background corrected ARM Density value. ARM Density value of the spot, minus the background Density value. sARVOL_Cy3 float linear_scale SpecializedQuantitationType Cy3 Subtracted AR volume value (AR volume value of the spot minus the background volume value); the background value is adjusted to the size of the spot when applicable. sARVOL_Cy5 float linear_scale SpecializedQuantitationType Cy5 Subtracted AR volume value (AR volume value of the spot minus the background volume value); the background value is adjusted to the size of the spot when applicable. sMedianDens_Cy3 float linear_scale SpecializedQuantitationType Cy3 Background corrected Median Density value. Median Density value of the spot, minus the background Density value. sMedianDens_Cy5 float linear_scale SpecializedQuantitationType Cy5 Background corrected Median Density value. Median Density value of the spot, minus the background Density value. sVOL_Cy3 float linear_scale SpecializedQuantitationType Cy3 Background corrected Volume value. Volume value of the spot, minus the background Volume value. The background value is adjusted to the size of the spot when applicable. sVOL = DxA_data - ((DxA_bkgd * Area_data)/Area_bkgd)). sVOL_Cy5 float linear_scale SpecializedQuantitationType Cy5 Background corrected Volume value. Volume value of the spot, minus the background Volume value. The background value is adjusted to the size of the spot when applicable. sVOL = DxA_data - ((DxA_bkgd * Area_data)/Area_bkgd)). >>>BZScan[TAGC ERM206] Diameter float linear_scale SpecializedQuantitationType Automatically computed spot diameter. Fit_correction float linear_scale SpecializedQuantitationType 1 Background level by unit surface. Overshining_correction float linear_scale SpecializedQuantitationType Correction for overshining by unit radius. Q(fit,const) float linear_scale SpecializedQuantitationType Spot intensity based on user-provided diameter and theoretical fit to the data. Q(fit,var) float linear_scale SpecializedQuantitationType Spot intensity based on computed diameter and and theoretical fit to the data. Q(image,const) float linear_scale MeasuredSignal Spot intensity based on user-provided diameter and measured data. Q(image,var) float linear_scale SpecializedQuantitationType Spot intensity based on computed diameter and measured data. QM float linear_scale PValue Q(image,const) Quality metric: distance between measured data and theoretical fit. SpotQuality boolean unscaled PresentAbsent Present/Absent (automatic guess). >>>BeadStudio[Illumina] MIN_Signal float linear_scale SpecializedQuantitationType Minimum intensity of the Bead Type/target in the group. AVG_Signal float linear_scale MeasuredSignal Average intensity of the Bead Type/target in the group. MAX_Signal float linear_scale SpecializedQuantitationType Maximum intensity of the Bead Type/target in the group. NARRAYS integer linear_scale SpecializedQuantitationType Number of samples in the group. ARRAY_STDEV SpecializedQuantitationType Standard deviation associated with sample-to-sample variability within the group (undefined when the group contains a single sample). BEAD_STDEV float linear_scale Error AVG_Signal Average standard deviation associated with bead-to-bead variability for the samples in the group. Avg_NBEADS integer linear_scale SpecializedQuantitationType Average number of beads per bead type representing probes for the gene. Detection float SpecializedQuantitationType 1-p-value computed from the background model characterizing the chance that the target sequence signal was distinguishable from the negative controls. Detection Pval float SpecializedQuantitationType DiffScore float SpecializedQuantitationType Statistical confidence that the gene's expression has changed with respect to a reference group. Concordance float SpecializedQuantitationType Number of probes showing upregulated signal compared to the number of probes showing downregulated signal. >>>BlueFuse[BlueGnome] AMPCH1 float linear_scale MeasuredSignal Cy3 Total signal in Cy3 channel. AMPCH2 float linear_scale MeasuredSignal Cy5 Total signal in Cy5 channel. AUTO EXCL string_datatype unscaled SpecializedQuantitationType Indication of whether a spot has been automatically excluded. Yes - it has been excluded, no - it has not been excluded. BLOCK integer linear_scale SpecializedQuantitationType The sequential number of the block on the array. CIRCULARITY float linear_scale SpecializedQuantitationType Estimate of the circularity of the spot, between 0 and 1. The nearer to 1, the more circular the spot. CONFIDENCE float linear_scale SpecializedQuantitationType The Confidence Estimate in the calculated ratio, between 0 and 1. FLAG string_datatype unscaled SpecializedQuantitationType The Confidence Flag calculated from the Confidence Estimate. GRID OFFSET float linear_scale SpecializedQuantitationType Distance in pixels of the spot from the ideal grid position. ID string_datatype unscaled SpecializedQuantitationType The ID of the spot, taken from ID field in GAL file. LOG10PRODUCT float log_base_10 SpecializedQuantitationType Log base 10 of the product of total signal in Cy3 channel multiplied by total signal in Cy5 channel. LOG10RATIO CH1/CH2 float log_base_10 SpecializedQuantitationType Log base 10 of the ratio of total signal in Cy3 channel divided by total signal in Cy5 channel. LOG10RATIO CH2/CH1 float log_base_10 SpecializedQuantitationType Log base 10 of the ratio of total signal in Cy5 channel divided by total signal in Cy3 channel. LOG10SUM float log_base_10 SpecializedQuantitationType Log base 10 of the sum of total signal in Cy3 channel plus total signal in Cy5 channel. LOG2PRODUCT float log_base_2 SpecializedQuantitationType Log base 2 of the product of total signal in Cy3 channel multiplied by total signal in Cy5 channel. LOG2RATIO CH1/CH2 float log_base_2 Ratio Log base 2 of the ratio of total signal in Cy3 channel divided by total signal in Cy5 channel. LOG2RATIO CH2/CH1 float log_base_2 SpecializedQuantitationType Log base 2 of the ratio of total signal in Cy5 channel divided by total signal in Cy3 channel. LOG2SUM float log_base_2 SpecializedQuantitationType Log base 2 of the sum of total signal in Cy3 channel plus total signal in Cy5 channel. MAN EXCL string_datatype unscaled SpecializedQuantitationType Indication of whether a spot has been manually excluded. Yes - it has been manually excluded, no - it has not been manually excluded. NAME string_datatype unscaled SpecializedQuantitationType The name of the spot, taken from Name field in GAL file. P ON CH1 float linear_scale SpecializedQuantitationType Cy3 Estimate of whether there is a biological signal in Cy3 channel, between 0 and 1. P ON CH2 float linear_scale SpecializedQuantitationType Cy5 Estimate of whether there is a biological signal in Cy5 channel, between 0 and 1. PELCOL integer linear_scale SpecializedQuantitationType Calculated horizontal position of the spot on image in pixels. 1 is the left column of pixels. PELROW integer linear_scale SpecializedQuantitationType Calculated vertical position of the spot on image in pixels. 1 is the top row of pixels. PRODUCT float linear_scale SpecializedQuantitationType Product of total signal in Cy3 channel multiplied by total signal in Cy5 channel. QUALITY SpecializedQuantitationType RADIUS float linear_scale SpecializedQuantitationType Estimate of the radius of the spot in pixels. RATIO CH1/CH2 float linear_scale SpecializedQuantitationType Ratio of total signal in Cy3 channel divided by total signal channel in Cy5 channel. RATIO CH2/CH1 float linear_scale SpecializedQuantitationType Ratio of total signal in Cy5 channel divided by total signal channel in Cy3 channel. SPOTNUM integer linear_scale SpecializedQuantitationType The sequential number of the spot on the array. SUM float linear_scale SpecializedQuantitationType Sum of total signal in Cy3 channel plus total signal in Cy5 channel. UNIFORMITY float linear_scale SpecializedQuantitationType Estimate of the uniformity of the spot, between 0 and 1. The nearer to 1 the more coin-shaped the spot, i.e. vertical sides and horizontal surface. >>>ChipSkipper[EMBL] Comment string_datatype unscaled SpecializedQuantitationType Additional description of spot. Comp_Channel Cy3 float linear_scale DerivedSignal Cy3 Normalised intensity of Cy3_Vol-BG. Comp_Channel Cy5 float linear_scale DerivedSignal Cy5 Normalised intensity of Cy5_Vol-BG. Comp_Directional_Ratio-Cy5/Cy3 float linear_scale SpecializedQuantitationType Compensated directional ratio: if Comp_Ratio > 1 then Directional = Ratio, if Ratio < 1 then Directional = -1/Ratio. Comp_Log2_Ratio float log_base_2 SpecializedQuantitationType Compensated Log2 ratio: log2 (Comp_Ratio-Cy5/Cy3). Comp_Ratio-Cy5/Cy3 float linear_scale Ratio Compensated ratio ( = Comp_Channel Cy5 / Comp_Channel Cy3 ). Cy3_Av-Vol/pixel float linear_scale SpecializedQuantitationType Cy3 Average intensity per pixel in color channel Cy3. Cy3_BG-Arith float linear_scale SpecializedQuantitationType 1 Cy3 Arithmetic average for local background in color channel Cy3. Cy3_BG-Geom float linear_scale SpecializedQuantitationType 1 Cy3 Geometric average for local background in color channel Cy3. Cy3_BG-Median float linear_scale SpecializedQuantitationType 1 Cy3 Median average for local background in color channel Cy3. Cy3_BG_Tot float linear_scale MeasuredSignal 1 Cy3 Total integrated background in color channel Cy3. Cy3_SNR1 float linear_scale Error Cy3_Vol-BG Cy3 Sdev of local background average in color channel Cy3. Cy3_SNR1_Score float linear_scale Error Cy3_Vol-BG Cy3 Quality value based on intensity and background for color channel Cy3 (range: 0 = bad....1 = good). Cy3_Sat-pixel float linear_scale SpecializedQuantitationType Cy3 Number of saturated pixel in color channel Cy3. Cy3_Spot-area float linear_scale SpecializedQuantitationType Cy3 Area of spot in colour channel Cy3 in pixels. Cy3_Vol-BG float linear_scale SpecializedQuantitationType 1 Cy3 Background reduced intensity of colour channel Cy3. Cy3_Volume integer linear_scale MeasuredSignal Cy3 Total integrated signal intensity in color channel Cy3. Cy5_Av-Vol/pixel float linear_scale SpecializedQuantitationType Cy5 Average intensity per pixel in color channel Cy5. Cy5_BG-Arith float linear_scale SpecializedQuantitationType 1 Cy5 Arithmetic average for local background in color channel Cy5. Cy5_BG-Geom float linear_scale SpecializedQuantitationType 1 Cy5 Geometric average for local background in color channel Cy5. Cy5_BG-Median float linear_scale SpecializedQuantitationType 1 Cy5 Median average for local background in color channel Cy5. Cy5_BG_Tot float linear_scale MeasuredSignal 1 Cy5 Total integrated background in color channel Cy5. Cy5_SNR1 float linear_scale Error Cy5_Vol-BG Cy5 Sdev of local background average in color channel Cy5. Cy5_SNR1_Score float linear_scale Error Cy5_Vol-BG Cy5 Quality value based on intensity and background for color channel Cy5 (range: 0 = bad....1 = good). Cy5_Sat-pixel float linear_scale SpecializedQuantitationType Cy5 Number of saturated pixel in color channel Cy5. Cy5_Spot-area float linear_scale SpecializedQuantitationType Cy5 Area of spot in colour channel Cy5 in pixels. Cy5_Vol-BG float linear_scale SpecializedQuantitationType 1 Cy5 Background reduced intensity of colour channel Cy5. Cy5_Volume integer linear_scale MeasuredSignal Cy5 Total integrated signal intensity in color channel Cy5. Directional_Ratio-Cy5/Cy3 float linear_scale SpecializedQuantitationType Directional ratio: if Ratio > 1 then Directional = Ratio, if Ratio < 1 then Directional = -1/Ratio. Flags string_datatype unscaled SpecializedQuantitationType Quality Flags: SNR1,SNR2 = low signal quality in color channel Cy5, Cy3; GS = low geometric score; MB = manually flagged bad. GS_Flags string_datatype linear_scale SpecializedQuantitationType P = pass or M = marginal flag. Group name string_datatype unscaled SpecializedQuantitationType Group name for this spot. Image-x-Pos integer linear_scale SpecializedQuantitationType Image coordinate of spot. Image-y-Pos integer linear_scale SpecializedQuantitationType Image coordinate of spot. Line_Counter integer unscaled SpecializedQuantitationType Line counter Log2_Ratio-Cy5/Cy3 float log_base_2 Ratio Log2 ratio: log2 (Ratio-Cy5/Cy3) Median of ratios float linear_scale SpecializedQuantitationType Median of ratios (Cy5/Cy3) from all pixel in this spot. Median of ratios % SDev float linear_scale SpecializedQuantitationType Standard deviation of Median of ratios in percent. Ratio of medians float linear_scale SpecializedQuantitationType Ratio of Medians (Cy5/Cy3) from all pixel in this spot. Ratio of medians % SDev float linear_scale SpecializedQuantitationType Standard deviation of Ratio of medians in percent. Ratio-Cy5/Cy3 float linear_scale SpecializedQuantitationType Direct ratio ( = Cy5_Vol-BG / Cy3_Vol-BG ) Regulation string_datatype unscaled SpecializedQuantitationType If Flag = SNR1 then Regulation=>Down; if Flag = SNR2 then Regulation=>up; if Flag = SNR1 AND SNR2 then Regulation=>weak; else Regulation = Ratio-Cy5/Cy3. Rep_vol_BG2 float linear_scale SpecializedQuantitationType Average of background reduced volume for onchip replicas (when calculated). Replicas float linear_scale SpecializedQuantitationType SNR*GS float linear_scale SpecializedQuantitationType Number of saturated pixel in both colors (logical or). SNR-tot float linear_scale SpecializedQuantitationType Squared average of Cy5_SNR and Cy3_SNR. SNR-tot_Score float linear_scale SpecializedQuantitationType Squared average of Cy5_%SNR and Cy3_%SNR. Tot_Sat-pixel float linear_scale SpecializedQuantitationType Number of saturated pixel in color channel Cy5 OR color channel Cy3. >>>CodeLink[Motorola Life Sciences] Cy3 BG Mean float linear_scale MeasuredSignal 1 Cy3 Background mean in Cy3 channel. Cy3 BG Median integer linear_scale SpecializedQuantitationType 1 Cy3 Background median in Cy3 channel. Cy3 Mean float linear_scale SpecializedQuantitationType Cy3 Statistical mean (average) of the raw intensity signal (i.e. mean of all the pixels belonging to the feature region) in Cy3 channel. Cy3 Raw Intensity float linear_scale MeasuredSignal Cy3 The signal from the spot minus the median background in Cy3 channel. Cy5 BG Mean float linear_scale MeasuredSignal 1 Cy5 Background mean in Cy5 channel. Cy5 BG Median integer linear_scale SpecializedQuantitationType 1 Cy5 Background median in Cy5 channel. Cy5 Mean float linear_scale SpecializedQuantitationType Cy5 Statistical mean (average) of the raw intensity signal (i.e. mean of all the pixels belonging to the feature region) in Cy5 channel. Cy5 Raw Intensity float linear_scale MeasuredSignal Cy5 The signal from the spot minus the median background in Cy5 channel. Flag boolean unscaled SpecializedQuantitationType Flag indicates if the spot matched with quality measures (i.e shape, low signal, saturated). TRUE corresponds to features that have to be discarded according to the quality measures, while FALSE is the opposite. >>>Spot[CSIRO] # These first are just feature coordinate/index columns, and should be discarded. #indexs The index of the spot. #grid_r The row index of the grid. #grid_c The column index of the grid. #spot_r The row index of the spot within the its grid. #spot_c The column index of the spot within the its grid. area integer linear_scale SpecializedQuantitationType The number of pixels in the segmented spot. Gmean float linear_scale SpecializedQuantitationType 0 Cy3 The average pixel value within the spot: green band. Gmedian float linear_scale MeasuredSignal 0 Cy3 The median pixel value within the spot: green band. GIQR float 0 Cy3 The interquartile range of the logged pixel values within the spot: green band. Rmean float linear_scale SpecializedQuantitationType 0 Cy5 The average pixel value within the spot: red band. Rmedian float linear_scale MeasuredSignal 0 Cy5 The median pixel value within the spot: red band. RIQR float 0 Cy5 The interquartile range of the logged pixel values within the spot: red band. bg.Gmean float linear_scale SpecializedQuantitationType 1 Cy3 The average pixel value in the background region: green band. bg.Gmedian float linear_scale MeasuredSignal 1 Cy3 The median pixel value in the background region: green band. bg.Gsd float 1 Cy3 bg.GIQR float 1 Cy3 The interquartile range of the logged pixel values in the background region: green band. bg.Rmean float linear_scale SpecializedQuantitationType 1 Cy5 The average pixel value in the background region: red band. bg.Rmedian float linear_scale MeasuredSignal 1 Cy5 The median pixel value in the background region: red band. bg.Rsd float 1 Cy5 bg.RIQR float 1 Cy5 The interquartile range of the logged pixel values in the background region: red band. valleyG SpecializedQuantitationType Cy3 Median of median image values in four neighbouring "valley" regions: green band. "Valley" regions are square regions between spots. valleyR SpecializedQuantitationType Cy5 Median of median image values in four neighbouring "valley" regions: red band. morphG integer linear_scale SpecializedQuantitationType Cy3 Value of a morphological opening of the green band image at the nominal spot centre. Openings and erosions (see below) use a rectangular structuring element with side lengths equal to twice the average horizontal and vertical distances between spots. morphG.erode SpecializedQuantitationType Cy3 Value of a morphological erosion of the green band image at the nominal spot centre. morphG.close.open integer linear_scale SpecializedQuantitationType Cy3 Value of a morphological closing followed by a morphological opening of the green band image at the nominal spot centre. morphR integer linear_scale SpecializedQuantitationType Cy5 Value of a morphological opening of the red band image at the nominal spot centre. morphR.erode SpecializedQuantitationType Cy5 Value of a morphological erosion of the red band image at the nominal spot centre. morphR.close.open integer linear_scale SpecializedQuantitationType Cy5 Value of a morphological closing followed by a morphological opening of the red band image at the nominal spot centre. logratios float log_base_2 Ratio 0 The base-2 log of the background-adjusted ratio, R/G, using R/Gmedian for spot value and morphR/G for background. perimeter integer linear_scale SpecializedQuantitationType The perimeter of the spot as measured by the number of pixels in the spot which have a neighbouring pixel outside the spot. Each pixel is considered to have 8 neighbours in this process. circularity SpecializedQuantitationType A measure of circularity of the spot equal to area times four pi divided by perimeter squared. This is ideally one for circles and more than one for other shapes. badspot SpecializedQuantitationType A flag which is one if the spot area is greater than the product of the horizontal and vertical average spot separations, and zero otherwise. >>>CodeLink Expression Analysis[GE Healthcare] Raw_intensity float linear_scale SpecializedQuantitationType 0 Spot density, which is the difference between the spot mean and the local background median. Normalized_intensity float linear_scale DerivedSignal 0 Normalized intensity value (the raw intensity divided by the normalization factor). Quality_flag string_datatype unscaled SpecializedQuantitationType 0 Metrics the software uses to indicate the quality of a spot. Signal_strength float linear_scale Ratio 0 Estimated signal above its local background noise level. The ratio is expressed as the spot mean divided by the local background standard deviation. Spot_mean float linear_scale MeasuredSignal 0 Sum of all pixel values in the spot area divided by the number of pixels. Spot_median integer linear_scale SpecializedQuantitationType 0 Median pixel intensity computed over the spot area. Spot_stdev float linear_scale Error 0 Spot_mean Standard deviation of the pixel intensity in the spot. Spot_area integer linear_scale SpecializedQuantitationType 0 Number of pixels in the spot. Spot_diameter float linear_scale SpecializedQuantitationType 0 Spot diameter (in pixels) that the software calculates during data extraction. Spot_noise_level float linear_scale SpecializedQuantitationType 1 Local background noise level, given by the median signal of the pixels within the baackground ring. Bkgd_mean float linear_scale MeasuredSignal 1 Estimate of the background mean that the software computes, using the pixel intensities in the background area surrounding the spot. Bkgd_median integer linear_scale SpecializedQuantitationType 1 Estimate of the background median the software computes, using the pixel intensities inside the background area surrounding the spot. Bkgd_stdev float linear_scale Error 1 Bkgd_mean Estimate of the background standard deviation that the software computes, using the pixel intensities inside the background area surrounding the spot. Bkgd_area float linear_scale SpecializedQuantitationType 1 Number of pixels that the software includes to compute the estimated local background mean, median, and standard deviation. >>>Feature Extraction Software[Agilent Technologies] BGPixCorrelation float linear_scale SpecializedQuantitationType Ratio of estimated feature covariance in RedGreen space to product of feature Standard Deviation in Red Green space. The covariance of two features measures their tendency to vary together, i.e. to co-vary. In this case, it is a cumulative quantitation of BGSubSigCorrelation float linear_scale SpecializedQuantitationType Ratio of estimated background subtracted feature signal covariance in RG space to product of background subtracted feature Standard Deviation in RG space. DyeNormCorrelation float linear_scale SpecializedQuantitationType Dye normalized red and green pixel correlation. ErrorModel integer linear_scale SpecializedQuantitationType ErrorModel Indicates the error model that the user chose for feature extraction. A 0 indicates use of the Propogated Error Model. A 1 indicates use of the Universal Error Model. Failed boolean linear_scale Failed Set to one if the quantitation values of a feature are considered bad enough to thrown out in the higher level analysis. Features are thrown out if both channels are saturated or if either channel is a non-uniform outlier. A feature can be failed from out Green.BGPixSDev float linear_scale Error Green.Background Cy3 Green.Background float linear_scale MeasuredSignal 1 Cy3 Green.DerivedSignal float linear_scale DerivedSignal Cy3 Green.DyeNormSignal float linear_scale SpecializedQuantitationType Cy3 Green.MeasuredSignal float linear_scale MeasuredSignal Cy3 Green.PixSDev float linear_scale Error Green.MeasuredSignal Cy3 Green.ProcessedSigError float linear_scale Error Green.DerivedSignal Cy3 HighEndCorrDNCorrelation float linear_scale SpecializedQuantitationType HighEndDyeNormApplied boolean linear_scale SpecializedQuantitationType Has a value of 0 or 1. IsManualFlag boolean linear_scale SpecializedQuantitationType If a feature has been moved manually this flag will be set to 1. IsNormalization boolean linear_scale SpecializedQuantitationType A boolean flag which indicates if a feature is used to measure dye bias. A 1 incidates the value was used. IsUsedBGAdjust float linear_scale SpecializedQuantitationType A boolean used to flag features used for computation of global BG offset. A 1 indicates the feature was used. LogRatio float log_base_10 Ratio log(REDsignal/GREENsignal) per feature. Signals in both channels are post dye normalization If SURROGATES are disabled, then this value will be set to: -2 if DyeNormRedSig <= 0.0 &DyeNormGreenSig > 0.0; 2 if DyeNormRedSig > 0.0 & DyeNormGreenSi LogRatioError float log_base_10 Error LogRatio LogRatioError = error of the log ratio calculated according to the error model chosen. If SURROGATES are disabled, then this value will be set to if DyeNormRedSig <= 0.0 OR DyeNormGreenSig <= 0.0 PValueLogRatio float percent PValue LogRatio Significance level of the Log Ratio computed for a feature PixCorrelation float linear_scale SpecializedQuantitationType Ratio of estimated feature covariance in RedGreen space to product of feature Standard Deviation in Red Green space. The covariance of two features measures their tendency to vary together, i.e. to co-vary. In this case, it is a cumulative quantitation of PositionX float linear_scale SpecializedQuantitationType Found X coordinate of the feature centroid currently reported in pixels. PositionY float linear_scale SpecializedQuantitationType Found Y coordinate of the feature centroid currently reported in pixels. Red.BGPixSDev float linear_scale Error Red.Background Cy5 Red.Background float linear_scale MeasuredSignal 1 Cy5 Red.DerivedSignal float linear_scale DerivedSignal Cy5 Red.DyeNormSignal float linear_scale SpecializedQuantitationType Cy5 Red.MeasuredSignal float linear_scale MeasuredSignal Cy5 Red.PixSDev float linear_scale Error Red.MeasuredSignal Cy5 Red.ProcessedSigError float linear_scale Error Red.DerivedSignal Cy5 SpotExtentX float linear_scale SpecializedQuantitationType The size of a spot in X in microns. SpotExtentY float linear_scale SpecializedQuantitationType The size of a spot in Y in microns. gBGMeanSignal float linear_scale MeasuredSignal 1 Cy3 Mean local background signal (local to corresponding feature) computed per channel. gBGMedianSignal float linear_scale SpecializedQuantitationType 1 Cy3 Median local background signal (local to corresponding feature) computed per channel. gBGNumPix integer linear_scale SpecializedQuantitationType 1 Cy3 Total number of pixels used to compute Local BG statistics per spot; ie. Total number of BG inlier pixels. This number is computed independently in each channel. gBGPixSDev float linear_scale Error 1 gBGMeanSignal Cy3 Standard deviation of all inlier pixels per Local BG of each feature, computed independently in each channel. gBGSDUsed float linear_scale Error 1 gBGUsed Cy3 Standard deviation of background used in green channel. gBGSubSigError float linear_scale Error gBGSubSignal Cy3 Propagated standard error as computed on net green background subtracted signal. gBGSubSignal float linear_scale SpecializedQuantitationType Cy3 The net green signal following the subtraction of the background from the raw mean green signal. gBGUsed float linear_scale SpecializedQuantitationType 1 Cy3 Background value subtracted from the raw mean signal to generate the BG subtracted signal; this value is computed per channel. If global BG subtraction is used the column is identical for every feature in a given channel. gBackground float linear_scale MeasuredSignal 1 Cy3 Mean local background signal (local to corresponding feature) computed per channel. gDerivedSignal float linear_scale DerivedSignal Cy3 The propagated feature signal, per channel, used for computation of log ratio. gDyeNormError float linear_scale Error gDyeNormSignal Cy3 The standard error associated with the dye normalized signal. gDyeNormSignal float linear_scale SpecializedQuantitationType Cy3 The dye normalized signal in the indicated channel. gHighEndCorrDNError float linear_scale Error gHighEndCorrDNSig Cy3 gHighEndCorrDNSig float linear_scale SpecializedQuantitationType Cy3 gIsBGNonUnifOL boolean linear_scale SpecializedQuantitationType Cy3 Boolean flag indicating if a background is a NonUniformity Outlier or not. A feature is non-uniform if the pixel noise of feature exceeds a threshold established for a "uniform" feature. A 1 indicates Feature is a non-uniformity outlier. gIsBGPopnOL boolean linear_scale SpecializedQuantitationType Cy3 Boolean flag indicating if a background is a Population Outlier or not. Probes with replicate features on a microarray are examined using population statistics. A feature is a population outlier if its signal is less than a lower threshold or exceeds an u gIsFeatNonUnifOL boolean linear_scale SpecializedQuantitationType Cy3 Boolean flag indicating if a feature is a NonUniformity Outlier or not. A feature is non-uniform if the pixel noise of feature exceeds a threshold established for a "uniform" feature. A 1 indicates Feature is a non-uniformity outlier. gIsFeatPopnOL boolean linear_scale SpecializedQuantitationType Cy3 Boolean flag indicating if a feature is a Population Outlier or not. Probes with replicate features on a microarray are examined using population statistics. A feature is a population outlier if its signal is less than a lower threshold or exceeds an uppe gIsFound boolean linear_scale SpecializedQuantitationType Cy3 A boolean used to flag found (strong) features. The flag is applied independently in each channel. A feature is considered found if the found spot centroid is within the bounds of the spot deviation limit with respect to corresponding nominal centroid. NO gIsInNegCtrlRange boolean linear_scale SpecializedQuantitationType Cy3 Boolean that identifies this spot as being in the range of background. gIsPosAndSignif boolean linear_scale SpecializedQuantitationType Cy3 Boolean flag indicating if the mean signal of a feature is greater than the corresponding background and if this difference is significant. Significance is established via a 2-sided t-test against the user-settable maximum p-value. A 1 indicates Feature i gIsSaturated boolean linear_scale SpecializedQuantitationType Cy3 Boolean flag indicating if a feature is saturated or not. A feature is saturated if 50% of the pixels in a feature are above the saturation threshold. A value of 1 means saturated. gIsWellAboveBG boolean linear_scale SpecializedQuantitationType Cy3 Boolean flag indicating if a feature is well above background or not. A feature must be gIsPosAndSignif and additionally the gBGSubSignal must be greater than 2.6*g(r)BG_SD. A 1 indicates a feature IsWellAboveBG. gMeanSignal float linear_scale MeasuredSignal Cy3 Raw mean signal of feature in green channel. gMeasuredSignal float linear_scale MeasuredSignal Cy3 Raw mean signal of feature in green channel. gMedianSignal float linear_scale SpecializedQuantitationType Cy3 Raw median signal of feature in green channel. gNetSignal float linear_scale SpecializedQuantitationType Cy3 The meanSignal - the scanner offset. gNumBGUsed integer linear_scale SpecializedQuantitationType 1 Cy3 A count of the number of background pixels used in the green channel. gNumPix integer linear_scale SpecializedQuantitationType Cy3 Total number of pixels used to compute feature statistics; ie. total number of inlier pixels/per spot, computed independently in each channel. The number of inlier pixels are the same in both channels. gNumPixOLHi integer linear_scale SpecializedQuantitationType Cy3 Number of outlier pixels per feature with intensity > upper threshold set via the pixel outlier rejection method. The number is computed independently in each channel. These pixels are omitted from all subsequent calculations. gNumPixOLLo integer linear_scale SpecializedQuantitationType Cy3 Number of outlier pixels per feature with intensity < lower threshold set via the pixel outlier rejection method. The number is computed independently in each channel. NOTE: The pixel outlier method is the ONLY step that removes data in Feature Extract gNumSatPix integer linear_scale SpecializedQuantitationType Cy3 Total number of saturated pixels per feature, computed per channel. gPValFeatEqBG float linear_scale SpecializedQuantitationType Cy3 P-value from t-test of significance between green Mean signal and green background. gPixSDev float linear_scale Error gMeanSignal Cy3 Standard deviation of all inlier pixels per feature; this is computed independently in each channel. gProcessedSigError float linear_scale Error gProcessedSignal Cy3 Standard error of propagated feature signal, per channel. gProcessedSignal float linear_scale DerivedSignal Cy3 The propagated feature signal, per channel, used for computation of log ratio. gSpatialDetrendIsInFilteredSet boolean linear_scale SpecializedQuantitationType Cy3 Set to true for a given feature if it is part of the filtered set used to fit the surface measuring the spatial trend across the microarray. This feature is considered part of the locally weighted x% of the features. gSpatialDetrendSurfaceValue float linear_scale SpecializedQuantitationType Cy3 Value of the smoothed surface derived from the set of features that are part of SpatialDetrendIsInFilteredSet. gSurrogateUsed float linear_scale SpecializedQuantitationType Cy3 The green surrogate value used. rBGMeanSignal float linear_scale MeasuredSignal 1 Cy5 Mean local background signal (local to corresponding feature) computed per channel. rBGMedianSignal float linear_scale SpecializedQuantitationType 1 Cy5 Median local background signal (local to corresponding feature) computed per channel. rBGNumPix integer linear_scale SpecializedQuantitationType 1 Cy5 Total number of pixels used to compute Local BG statistics per spot; ie. Total number of BG inlier pixels. This number is computed independently in each channel. rBGPixSDev float linear_scale Error 1 rBGMeanSignal Cy5 Standard deviation of all inlier pixels per Local BG of each feature, computed independently in each channel. rBGSDUsed float linear_scale Error 1 rBGUsed Cy5 Standard deviation of background used in red channel. rBGSubSigError float linear_scale Error rBGSubSignal Cy5 Propagated standard error as computed on net red background subtracted signal. rBGSubSignal float linear_scale SpecializedQuantitationType Cy5 The net red signal following the subtraction of the background from the raw mean red signal. rBGUsed float linear_scale SpecializedQuantitationType 1 Cy5 Background value subtracted from the raw mean signal to generate the BG subtracted signal; this value is computed per channel. If global BG subtraction is used the column is identical for every feature in a given channel. rBackground float linear_scale MeasuredSignal 1 Cy5 Mean local background signal (local to corresponding feature) computed per channel. rDerivedSignal float linear_scale DerivedSignal Cy5 The propagated feature signal, per channel, used for computation of log ratio. rDyeNormError float linear_scale Error rDyeNormSignal Cy5 The standard error associated with the dye normalized signal. rDyeNormSignal float linear_scale SpecializedQuantitationType Cy5 The dye normalized signal in the indicated channel. rHighEndCorrDNError float linear_scale Error rHighEndCorrDNSig Cy5 rHighEndCorrDNSig float linear_scale SpecializedQuantitationType Cy5 rIsBGNonUnifOL boolean linear_scale SpecializedQuantitationType Cy5 Boolean flag indicating if a background is a NonUniformity Outlier or not. A feature is non-uniform if the pixel noise of feature exceeds a threshold established for a "uniform" feature. A 1 indicates Feature is a non-uniformity outlier. rIsBGPopnOL boolean linear_scale SpecializedQuantitationType Cy5 Boolean flag indicating if a background is a Population Outlier or not. Probes with replicate features on a microarray are examined using population statistics. A feature is a population outlier if its signal is less than a lower threshold or exceeds an u rIsFeatNonUnifOL boolean linear_scale SpecializedQuantitationType Cy5 Boolean flag indicating if a feature is a NonUniformity Outlier or not. A feature is non-uniform if the pixel noise of feature exceeds a threshold established for a "uniform" feature. A 1 indicates Feature is a non-uniformity outlier. rIsFeatPopnOL boolean linear_scale SpecializedQuantitationType Cy5 Boolean flag indicating if a feature is a Population Outlier or not. Probes with replicate features on a microarray are examined using population statistics. A feature is a population outlier if its signal is less than a lower threshold or exceeds an uppe rIsFound boolean linear_scale SpecializedQuantitationType Cy5 A boolean used to flag found (strong) features. The flag is applied independently in each channel. A feature is considered found if the found spot centroid is within the bounds of the spot deviation limit with respect to corresponding nominal centroid. NO rIsInNegCtrlRange boolean linear_scale SpecializedQuantitationType Cy5 Boolean that identifies this spot as being in the range of background. rIsPosAndSignif boolean linear_scale SpecializedQuantitationType Cy5 Boolean flag indicating if the mean signal of a feature is greater than the corresponding background and if this difference is significant. Significance is established via a 2-sided t-test against the user-settable maximum p-value. A 1 indicates Feature i rIsSaturated boolean linear_scale SpecializedQuantitationType Cy5 Boolean flag indicating if a feature is saturated or not. A feature is saturated if 50% of the pixels in a feature are above the saturation threshold. A value of 1 means saturated. rIsWellAboveBG boolean linear_scale SpecializedQuantitationType Cy5 Boolean flag indicating if a feature is well above background or not. A feature must be gIsPosAndSignif and additionally the gBGSubSignal must be greater than 2.6*g(r)BG_SD. A 1 indicates a feature IsWellAboveBG. rMeanSignal float linear_scale MeasuredSignal Cy5 Raw mean signal of feature in red channel. rMeasuredSignal float linear_scale MeasuredSignal Cy5 Raw mean signal of feature in red channel. rMedianSignal float linear_scale SpecializedQuantitationType Cy5 Raw median signal of feature in red channel. rNetSignal float linear_scale SpecializedQuantitationType Cy5 The meanSignal - the scanner offset. rNumBGUsed integer linear_scale SpecializedQuantitationType 1 Cy5 A count of the number of background pixels used in the red channel. rNumPix integer linear_scale SpecializedQuantitationType Cy5 Total number of pixels used to compute feature statistics; ie. total number of inlier pixels/per spot, computed independently in each channel. The number of inlier pixels are the same in both channels. rNumPixOLHi integer linear_scale SpecializedQuantitationType Cy5 Number of outlier pixels per feature with intensity > upper threshold set via the pixel outlier rejection method. The number is computed independently in each channel. These pixels are omitted from all subsequent calculations. rNumPixOLLo integer linear_scale SpecializedQuantitationType Cy5 Number of outlier pixels per feature with intensity < lower threshold set via the pixel outlier rejection method. The number is computed independently in each channel. NOTE: The pixel outlier method is the ONLY step that removes data in Feature Extract rNumSatPix integer linear_scale SpecializedQuantitationType Cy5 Total number of saturated pixels per feature, computed per channel. rPValFeatEqBG float linear_scale SpecializedQuantitationType Cy5 P-value from t-test of significance between red Mean signal and red background. rPixSDev float linear_scale Error rMeanSignal Cy5 Standard deviation of all inlier pixels per feature; this is computed independently in each channel. rProcessedSigError float linear_scale Error rProcessedSignal Cy5 Standard error of propagated feature signal, per channel. rProcessedSignal float linear_scale DerivedSignal Cy5 The propagated feature signal, per channel, used for computation of log ratio. rSpatialDetrendIsInFilteredSet boolean linear_scale SpecializedQuantitationType Cy5 Set to true for a given feature if it is part of the filtered set used to fit the surface measuring the spatial trend across the microarray. This feature is considered part of the locally weighted x% of the features. rSpatialDetrendSurfaceValue float linear_scale SpecializedQuantitationType Cy5 Value of the smoothed surface derived from the set of features that are part of SpatialDetrendIsInFilteredSet. rSurrogateUsed float linear_scale SpecializedQuantitationType Cy5 The red surrogate value used. xDev float log_base_10 SpecializedQuantitationType Used to compute the Log Ratio PValue. >>>GEMTools[Incyte Genomics] BalancedDiffExpr float linear_scale SpecializedQuantitationType Balanced fold change. CloneID string_datatype unscaled SpecializedQuantitationType Incyte identifier for individual clone spotted on the array. CloneSource string_datatype unscaled SpecializedQuantitationType All arrayed elements were either clones derived from Incyte cDNA libraries, or sequences generated specifically to be used as hybridization and/or signal balancing controls. DiffExpr float linear_scale SpecializedQuantitationType Unbalanced fold change. GEMID string_datatype unscaled SpecializedQuantitationType Unique identifier. GeneID string_datatype unscaled SpecializedQuantitationType Incyte unique identifier for a sequence contig. GeneName string_datatype unscaled SpecializedQuantitationType Genbank annotation of Incyte sequence contig. IncyteCloneID string_datatype unscaled SpecializedQuantitationType Incyte identifier for individual clone spotted on the array. Location integer linear_scale SpecializedQuantitationType An Incyte code that can be used to determine the location of the spot on the array. P1Area% integer linear_scale SpecializedQuantitationType Cy5 Area of spot coverage. P1Description string_datatype unscaled SpecializedQuantitationType Cy5 Identifier or code name for Cy5 labeled probe. P1S/B float linear_scale SpecializedQuantitationType 1 Cy5 Element signal to background in the Cy5 channel. P1Signal integer linear_scale MeasuredSignal Cy5 Signal intensity in the Cy5 channel. P2Area% integer linear_scale SpecializedQuantitationType Cy3 Area of spot coverage. P2BalancedSignal integer linear_scale SpecializedQuantitationType Balanced Cy3 signal (balanced by total average signal intensity in both channels). P2Description string_datatype unscaled SpecializedQuantitationType Cy3 Identifier or code name for Cy3 labeled probe. P2S/B float linear_scale SpecializedQuantitationType 1 Cy3 Element signal to background in the Cy3 channel. P2Signal integer linear_scale MeasuredSignal Cy3 Signal intensity in the Cy3 channel. PCRStatus string_datatype unscaled SpecializedQuantitationType An indicator of the quality of the spotted cDNA. Probe1 string_datatype unscaled SpecializedQuantitationType Cy5 Unique identifier for Cy5 labeled probe. Probe2 string_datatype unscaled SpecializedQuantitationType Cy3 Unique identifier for Cy3 labeled probe. >>>GLEAMS[NuTec Sciences] BG.Cy3 float linear_scale MeasuredSignal 1 Cy3 Median pixel intensity computed over the local background region for Cy3. BG.Cy5 float linear_scale MeasuredSignal 1 Cy5 Median pixel intensity computed over the local background region for Cy5. Mean.Sig.Cy3 float linear_scale SpecializedQuantitationType Cy3 Pixel intensity averaged over the local signal region for Cy3. Mean.Sig.Cy5 float linear_scale SpecializedQuantitationType Cy5 Pixel intensity averaged over the local signal region for Cy5. Med.Sig.Cy3 integer linear_scale MeasuredSignal Cy3 Median pixel intensity computed over the local signal region for Cy3. Med.Sig.Cy5 integer linear_scale MeasuredSignal Cy5 Median pixel intensity computed over the local signal region for Cy5. SD.Cy3 float linear_scale Error Mean.Sig.Cy3 Cy3 Standard deviation of pixel intensities over the local signal region for Cy3. SD.Cy5 float linear_scale Error Mean.Sig.Cy5 Cy5 Standard deviation of pixel intensities over the local signal region for Cy5. Sig.Area integer linear_scale SpecializedQuantitationType Number of pixels in the local signal region. X integer linear_scale SpecializedQuantitationType Location of the center of the spot on the array on the X-axis. Y integer linear_scale SpecializedQuantitationType Location of the center of the spot on the array on the Y-axis. >>>GenePix[Axon Instruments] % > B595+1SD integer linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels with intensities more than one standard deviation above the background pixel intensity, at wavelength 595 nm. % > B595+2SD integer linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels with intensities more than two standard deviations above the background pixel intensity, at wavelength 595 nm. % > B685+1SD integer linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels with intensities more than one standard deviation above the background pixel intensity, at wavelength 685 nm. % > B685+2SD integer linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels with intensities more than two standard deviations above the background pixel intensity, at wavelength 685 nm. B595 integer linear_scale SpecializedQuantitationType 1 Cy3 The actual background value used for the feature in GenePix Pro calculations (as opposed to B595 Median, for example, which is the local median background.) This column is required because GenePix Pro 5.0 has global and negative control background subtrac B595 CV integer linear_scale SpecializedQuantitationType 1 Cy3 The coefficient of variation of local background pixel intensity. B595 Mean integer linear_scale MeasuredSignal 1 Cy3 The mean feature background intensity at wavelength 595 nm. B595 Median integer linear_scale SpecializedQuantitationType 1 Cy3 The median feature background intensity at wavelength 595 nm. B595 SD integer linear_scale Error 1 B595 Median Cy3 The standard deviation of the feature background intensity at wavelength 595 nm. B685 integer linear_scale SpecializedQuantitationType 1 Cy5 The actual background value used for the feature in GenePix Pro calculations (as opposed to B685 Median, for example, which is the local median background.) This column is required because GenePix Pro 5.0 has global and negative control background subtrac B685 CV integer linear_scale SpecializedQuantitationType 1 Cy5 The coefficient of variation of local background pixel intensity. B685 Mean integer linear_scale MeasuredSignal 1 Cy5 The mean feature background intensity at wavelength 685 nm. B685 Median integer linear_scale SpecializedQuantitationType 1 Cy5 The median feature background intensity at wavelength 685 nm. B685 SD integer linear_scale Error 1 B685 Median Cy5 The standard deviation of the feature background intensity at wavelength 685 nm. F595 % Sat. integer linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels at wavelength 595 nm that are saturated. F595 CV integer linear_scale SpecializedQuantitationType Cy3 The coefficient of variation of feature pixel intensity. F595 Mean integer linear_scale MeasuredSignal Cy3 Mean feature pixel intensity at wavelength 595 nm. F595 Mean - B595 integer linear_scale SpecializedQuantitationType Cy3 The mean feature pixel intensity at wavelength 595 nm with the median background subtracted. F595 Median integer linear_scale SpecializedQuantitationType Cy3 Median feature pixel intensity at wavelength 595 nm. F595 Median - B595 integer linear_scale SpecializedQuantitationType Cy3 The median feature pixel intensity at wavelength 595 nm with the median background subtracted. F595 SD integer linear_scale Error F595 Median Cy3 The standard deviation of the feature intensity at wavelength 595 nm. F595 Total Intensity integer linear_scale SpecializedQuantitationType Cy3 The sum of feature pixel intensities at 595 nm. F685 % Sat. integer linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels at wavelength 685 nm that are saturated. F685 CV integer linear_scale SpecializedQuantitationType Cy5 The coefficient of variation of feature pixel intensity. F685 Mean integer linear_scale MeasuredSignal Cy5 Mean feature pixel intensity at wavelength 685 nm. F685 Mean - B685 integer linear_scale SpecializedQuantitationType Cy5 The mean feature pixel intensity at wavelength 685 nm with the median background subtracted. F685 Median integer linear_scale SpecializedQuantitationType Cy5 Median feature pixel intensity at wavelength 685 nm. F685 Median - B685 integer linear_scale SpecializedQuantitationType Cy5 The median feature pixel intensity at wavelength 685 nm with the median background subtracted. F685 SD integer linear_scale Error F685 Median Cy5 The standard deviation of the feature intensity at wavelength 685 nm. F685 Total Intensity integer linear_scale SpecializedQuantitationType Cy5 The sum of feature pixel intensities at 685 nm. Log Ratio (685/595) float log_base_2 Ratio Log (base 2) transform of the ratio of the medians. Mean of Ratios (685/595) float linear_scale SpecializedQuantitationType The geometric mean of the pixel-by-pixel ratios of pixel intensities, with the median background subtracted. Median of Ratios (685/595) float linear_scale SpecializedQuantitationType The median of pixel-by-pixel ratios of pixel intensities, with the median background subtracted. Ratio of Means (685/595) float linear_scale SpecializedQuantitationType The ratio of the arithmetic mean intensities of each feature for each wavelength, with the median background subtracted. Ratio of Medians (685/595) float linear_scale SpecializedQuantitationType The ratio of the median intensities of each feature for each wavelength, with the median background subtracted. Ratios SD (685/595) float linear_scale Error Median of Ratios (685/595) The geometric standard deviation of the pixel intensity ratios. Rgn R2 (685/595) float linear_scale SpecializedQuantitationType The coefficient of determination for the current regression value. Rgn Ratio (685/595) float linear_scale SpecializedQuantitationType The regression ratio of every pixel in a 2-feature-diameter circle around the center of the feature. SNR 595 float linear_scale SpecializedQuantitationType 1 Cy5 The signal-to-noise ratio at 595 nm, defined by (F595 Mean - B595 Mean) / (B595 SD) SNR 685 float linear_scale SpecializedQuantitationType 1 Cy5 The signal-to-noise ratio at 685 nm, defined by (F685 Mean - B685 Mean) / (B685 SD) Sum of Means (685/595) integer linear_scale SpecializedQuantitationType The sum of the arithmetic mean intensities for each wavelength, with the median background subtracted. Sum of Medians (685/595) integer linear_scale SpecializedQuantitationType The sum of the median intensities for each wavelength, with the median background subtracted. % > B633+1SD integer linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels with intensities more than one standard deviation above the background pixel intensity, at wavelength 633 nm. % > B633+2SD integer linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels with intensities more than two standard deviations above the background pixel intensity, at wavelength 633 nm. B633 integer linear_scale SpecializedQuantitationType 1 Cy5 The actual background value used for the feature in GenePix Pro calculations (as opposed to B633 Median, for example, which is the local median background.) This column is required because GenePix Pro 5.0 has global and negative control background subtrac B633 CV integer linear_scale SpecializedQuantitationType 1 Cy5 The coefficient of variation of local background pixel intensity. B633 Mean integer linear_scale MeasuredSignal 1 Cy5 The mean feature background intensity at wavelength 633 nm. B633 Median integer linear_scale SpecializedQuantitationType 1 Cy5 The median feature background intensity at wavelength 633 nm. B633 SD integer linear_scale Error 1 B633 Median Cy5 The standard deviation of the feature background intensity at wavelength 633 nm. F633 % Sat. integer linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels at wavelength 633 nm that are saturated. F633 CV integer linear_scale SpecializedQuantitationType Cy5 The coefficient of variation of feature pixel intensity. F633 Mean integer linear_scale MeasuredSignal Cy5 Mean feature pixel intensity at wavelength 633 nm. F633 Mean - B633 integer linear_scale SpecializedQuantitationType Cy5 The mean feature pixel intensity at wavelength 633 nm with the median background subtracted. F633 Median integer linear_scale SpecializedQuantitationType Cy5 Median feature pixel intensity at wavelength 633 nm. F633 Median - B633 integer linear_scale SpecializedQuantitationType Cy5 The median feature pixel intensity at wavelength 633 nm with the median background subtracted. F633 SD integer linear_scale Error F633 Median Cy5 The standard deviation of the feature intensity at wavelength 633 nm. F633 Total Intensity integer linear_scale SpecializedQuantitationType Cy5 The sum of feature pixel intensities at 633 nm. Log Ratio (633/532) float log_base_2 Ratio Log (base 2) transform of the ratio of the medians. Mean of Ratios (633/532) float linear_scale SpecializedQuantitationType The geometric mean of the pixel-by-pixel ratios of pixel intensities, with the median background subtracted. Median of Ratios (633/532) float linear_scale SpecializedQuantitationType The median of pixel-by-pixel ratios of pixel intensities, with the median background subtracted. Ratio of Means (633/532) float linear_scale SpecializedQuantitationType The ratio of the arithmetic mean intensities of each feature for each wavelength, with the median background subtracted. Ratio of Medians (633/532) float linear_scale SpecializedQuantitationType The ratio of the median intensities of each feature for each wavelength, with the median background subtracted. Ratios SD (633/532) float linear_scale Error Median of Ratios (633/532) The geometric standard deviation of the pixel intensity ratios. Rgn R2 (633/532) float linear_scale SpecializedQuantitationType The coefficient of determination for the current regression value. Rgn Ratio (633/532) float linear_scale SpecializedQuantitationType The regression ratio of every pixel in a 2-feature-diameter circle around the center of the feature. SNR 633 float linear_scale SpecializedQuantitationType 1 Cy5 The signal-to-noise ratio at 633 nm, defined by (F633 Mean - B633 Mean) / (B633 SD) Sum of Means (633/532) integer linear_scale SpecializedQuantitationType The sum of the arithmetic mean intensities for each wavelength, with the median background subtracted. Sum of Medians (633/532) integer linear_scale SpecializedQuantitationType The sum of the median intensities for each wavelength, with the median background subtracted. % > B532+1SD integer linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels with intensities more than one standard deviation above the background pixel intensity, at wavelength 532 nm. % > B532+1SD2 integer linear_scale SpecializedQuantitationType Cy3 % > B532+2SD integer linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels with intensities more than two standard deviations above the background pixel intensity, at wavelength 532 nm. % > B532+2SD2 integer linear_scale SpecializedQuantitationType Cy3 % > B563+1SD integer linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels with intensities more than one standard deviation above the background pixel intensity, at wavelength 563 nm. % > B563+2SD integer linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels with intensities more than two standard deviations above the background pixel intensity, at wavelength 563 nm. % > B635+1SD integer linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels with intensities more than one standard deviation above the background pixel intensity, at wavelength 635 nm. % > B635+1SD2 integer linear_scale SpecializedQuantitationType Cy5 % > B635+2SD integer linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels with intensities more than two standard deviations above the background pixel intensity, at wavelength 635 nm. % > B635+2SD2 integer linear_scale SpecializedQuantitationType Cy5 Autoflag boolean linear_scale SpecializedQuantitationType Reports whether or not a feature has been flagged from the Flag Features dialog box. It applies to good and bad flags only. B Pixels integer linear_scale SpecializedQuantitationType The total number of background pixels. B532 integer linear_scale SpecializedQuantitationType 1 Cy3 The actual background value used for the feature in GenePix Pro calculations (as opposed to B532 Median, for example, which is the local median background.) This column is required because GenePix Pro 5.0 has global and negative control background subtrac B532 CV integer linear_scale SpecializedQuantitationType 1 Cy3 The coefficient of variation of local background pixel intensity. B532 Mean integer linear_scale MeasuredSignal 1 Cy3 The mean feature background intensity at wavelength 532 nm. B532 Median integer linear_scale SpecializedQuantitationType 1 Cy3 The median feature background intensity at wavelength 532 nm. B532 SD integer linear_scale Error 1 B532 Median Cy3 The standard deviation of the feature background intensity at wavelength 532 nm. B532 SD2 float linear_scale Error 1 B532 Median Cy3 B563 Mean integer linear_scale MeasuredSignal 1 Cy3 The mean feature background intensity at wavelength 563 nm. B563 Median integer linear_scale SpecializedQuantitationType 1 Cy3 The median feature background intensity at wavelength 563 nm. B563 SD integer linear_scale Error 1 B563 Median Cy3 The standard deviation of the feature background intensity at wavelength 563 nm. B635 integer linear_scale SpecializedQuantitationType 1 Cy5 The actual background value used for the feature in GenePix Pro calculations (as opposed to B635 Median, for example, which is the local median background.) This column is required because GenePix Pro 5.0 has global and negative control background subtrac B635 CV integer linear_scale SpecializedQuantitationType 1 Cy5 The coefficient of variation of local background pixel intensity. B635 Mean integer linear_scale MeasuredSignal 1 Cy5 The mean feature background intensity at wavelength 635 nm. B635 Median integer linear_scale SpecializedQuantitationType 1 Cy5 The median feature background intensity at wavelength 635 nm. B635 SD integer linear_scale Error 1 B635 Median Cy5 The standard deviation of the feature background intensity at wavelength 635 nm. B635 SD2 float linear_scale Error 1 B635 Median Cy5 Circularity integer linear_scale SpecializedQuantitationType A measure of circularity from 0 to 100, using a metric based on the variance of the distance of each boundary pixel to the centroid of the feature: 100 is most circular, 0 is most non-circular. Circular features always have a circularity of 100, square fe Dia. integer linear_scale SpecializedQuantitationType The diameter in um of the feature-indicator. F Pixels integer linear_scale SpecializedQuantitationType The total number of feature pixels. F532 % Sat. integer linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels at wavelength 532 nm that are saturated. F532 CV integer linear_scale SpecializedQuantitationType Cy3 The coefficient of variation of feature pixel intensity. F532 Mean integer linear_scale MeasuredSignal Cy3 Mean feature pixel intensity at wavelength 532 nm. F532 Mean - B532 integer linear_scale SpecializedQuantitationType Cy3 The mean feature pixel intensity at wavelength 532 nm with the median background subtracted. F532 Median integer linear_scale SpecializedQuantitationType Cy3 Median feature pixel intensity at wavelength 532 nm. F532 Median - B532 integer linear_scale SpecializedQuantitationType Cy3 The median feature pixel intensity at wavelength 532 nm with the median background subtracted. F532 SD integer linear_scale Error F532 Median Cy3 The standard deviation of the feature intensity at wavelength 532 nm. F532 Total Intensity integer linear_scale SpecializedQuantitationType Cy3 The sum of feature pixel intensities at 532 nm. F563 % Sat. integer linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels at wavelength 563 nm that are saturated. F563 Mean integer linear_scale MeasuredSignal Cy3 Mean feature pixel intensity at wavelength 563 nm. F563 Mean - B563 integer linear_scale SpecializedQuantitationType Cy3 The mean feature pixel intensity at wavelength 563 nm with the median background subtracted. F563 Median integer linear_scale SpecializedQuantitationType Cy3 Median feature pixel intensity at wavelength 563 nm. F563 Median - B563 integer linear_scale SpecializedQuantitationType Cy3 The median feature pixel intensity at wavelength 563 nm with the median background subtracted. F563 SD integer linear_scale Error F563 Median Cy3 The standard deviation of the feature intensity at wavelength 563 nm. F635 % Sat. integer linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels at wavelength 635 nm that are saturated. F635 CV integer linear_scale SpecializedQuantitationType Cy5 The coefficient of variation of feature pixel intensity. F635 Mean integer linear_scale MeasuredSignal Cy5 Mean feature pixel intensity at wavelength 635 nm. F635 Mean - B635 integer linear_scale SpecializedQuantitationType Cy5 The mean feature pixel intensity at wavelength 635 nm with the median background subtracted. F635 Median integer linear_scale SpecializedQuantitationType Cy5 Median feature pixel intensity at wavelength 635 nm. F635 Median - B635 integer linear_scale SpecializedQuantitationType Cy5 The median feature pixel intensity at wavelength 635 nm with the median background subtracted. F635 SD integer linear_scale Error F635 Median Cy5 The standard deviation of the feature intensity at wavelength 635 nm. F635 Total Intensity integer linear_scale SpecializedQuantitationType Cy5 The sum of feature pixel intensities at 635 nm. Flags integer linear_scale SpecializedQuantitationType The type of flag associated with a feature: -100 = user-flagged null spot; -50 = software-flagged null spot; 0 = spot valid. Log Ratio float log_base_2 Ratio Log (base 2) transform of the ratio of the medians. Log Ratio (532/635) float log_base_2 Ratio log (base 2) transform of the ratio of the medians. Log Ratio (635/532) float log_base_2 Ratio Log (base 2) transform of the ratio of the medians. Mean of Ratios float linear_scale SpecializedQuantitationType The geometric mean of the pixel-by-pixel ratios of pixel intensities, with the median background subtracted. Mean of Ratios (532/635) float linear_scale SpecializedQuantitationType The geometric mean of the pixel-by-pixel ratios of pixel intensities, with the median background subtracted. Mean of Ratios (635/532) float linear_scale SpecializedQuantitationType The geometric mean of the pixel-by-pixel ratios of pixel intensities, with the median background subtracted. Median of Ratios float linear_scale SpecializedQuantitationType The median of pixel-by-pixel ratios of pixel intensities, with the median background subtracted. Median of Ratios (532/635) float linear_scale SpecializedQuantitationType The median of pixel-by-pixel ratios of pixel intensities, with the median background subtracted. Median of Ratios (635/532) float linear_scale SpecializedQuantitationType The median of pixel-by-pixel ratios of pixel intensities, with the median background subtracted. Normalize integer unscaled PresentAbsent The normalization status of the feature (included/not included). Ratio of Means float linear_scale SpecializedQuantitationType The ratio of the arithmetic mean intensities of each feature for each wavelength, with the median background subtracted. Ratio of Means (532/635) float linear_scale SpecializedQuantitationType The ratio of the arithmetic mean intensities of each feature for each wavelength, with the median background subtracted. Ratio of Means (635/532) float linear_scale SpecializedQuantitationType The ratio of the arithmetic mean intensities of each feature for each wavelength, with the median background subtracted. Ratio of Medians float linear_scale SpecializedQuantitationType The ratio of the median intensities of each feature for each wavelength, with the median background subtracted. Ratio of Medians (532/635) float linear_scale SpecializedQuantitationType The ratio of the median intensities of each feature for each wavelength, with the median background subtracted. Ratio of Medians (635/532) float linear_scale SpecializedQuantitationType The ratio of the median intensities of each feature for each wavelength, with the median background subtracted. Ratios SD float linear_scale Error Median of Ratios The geometric standard deviation of the pixel intensity ratios. Ratios SD (532/635) float linear_scale Error Median of Ratios (532/635) The geometric standard deviation of the pixel intensity ratios. Ratios SD (635/532) float linear_scale Error Median of Ratios (635/532) The geometric standard deviation of the pixel intensity ratios. Rgn R (532/635) float linear_scale SpecializedQuantitationType Rgn R2 float linear_scale SpecializedQuantitationType The coefficient of determination for the current regression value. Rgn R2 (532/635) float linear_scale SpecializedQuantitationType The coefficient of determination for the current regression value. Rgn R2 (635/532) float linear_scale SpecializedQuantitationType The coefficient of determination for the current regression value. Rgn Ratio float linear_scale SpecializedQuantitationType The regression ratio of every pixel in a 2-feature-diameter circle around the center of the feature. Rgn Ratio (532/635) float linear_scale SpecializedQuantitationType The regression ratio of every pixel in a 2-feature-diameter circle around the center of the feature. Rgn Ratio (635/532) float linear_scale SpecializedQuantitationType The regression ratio of every pixel in a 2-feature-diameter circle around the center of the feature. Rgn R float linear_scale SpecializedQuantitationType Rgn R (635/532) float linear_scale SpecializedQuantitationType Rgn R (532/635) float linear_scale SpecializedQuantitationType SNR 532 float linear_scale SpecializedQuantitationType 1 Cy3 The signal-to-noise ratio at 532 nm, defined by (F532 Mean - B532 Mean) / (B532 SD) SNR 635 float linear_scale SpecializedQuantitationType 1 Cy5 The signal-to-noise ratio at 635 nm, defined by (F635 Mean - B635 Mean) / (B635 SD) Sum of Means integer linear_scale SpecializedQuantitationType The sum of the arithmetic mean intensities for each wavelength, with the median background subtracted. Sum of Means (532/635) integer linear_scale SpecializedQuantitationType The sum of the arithmetic mean intensities for each wavelength, with the median background subtracted. Sum of Means (635/532) integer linear_scale SpecializedQuantitationType The sum of the arithmetic mean intensities for each wavelength, with the median background subtracted. Sum of Medians integer linear_scale SpecializedQuantitationType The sum of the median intensities for each wavelength, with the median background subtracted. Sum of Medians (532/635) integer linear_scale SpecializedQuantitationType The sum of the median intensities for each wavelength, with the median background subtracted. Sum of Medians (635/532) integer linear_scale SpecializedQuantitationType The sum of the median intensities for each wavelength, with the median background subtracted. X integer linear_scale SpecializedQuantitationType The X-coordinate in um of the center of the feature-indicator associated with the feature, where (0,0) is the top left of the image. Y integer linear_scale SpecializedQuantitationType The Y-coordinate in um of the center of the feature-indicator associated with the feature, where (0,0) is the top left of the image. >>>GeneTAC Background med Cy3 float linear_scale MeasuredSignal 1 Cy3 Background med Cy5 float linear_scale MeasuredSignal 1 Cy5 Background med ratio float linear_scale Ratio 1 Background st dev Cy3 float linear_scale Error 1 Background med Cy3 Cy3 Background st dev Cy5 float linear_scale Error 1 Background med Cy5 Cy5 Signal med Cy3 float linear_scale MeasuredSignal Cy3 Signal med Cy5 float linear_scale MeasuredSignal Cy5 Signal med ratio float linear_scale Ratio Signal st dev Cy3 float linear_scale Error Signal med Cy3 Cy3 Signal st dev Cy5 float linear_scale Error Signal med Cy5 Cy5 >>>ImaGene[BioDiscovery] Area To Perimeter_Cy3 float linear_scale SpecializedQuantitationType Cy3 This quality measure defines the spot's circularity. Area of a spot is divided by a square of spot perimeter and multiplied by 4π. As a result, this measure ranges from 0 (highly non-circular shape) to 1 (a perfect circle). Area To Perimeter_Cy5 float linear_scale SpecializedQuantitationType Cy5 This quality measure defines the spot's circularity. Area of a spot is divided by a square of spot perimeter and multiplied by 4π. As a result, this measure ranges from 0 (highly non-circular shape) to 1 (a perfect circle). Background Area_Cy3 integer linear_scale SpecializedQuantitationType 1 Cy3 Number of pixels in the local background region. Background Area_Cy5 integer linear_scale SpecializedQuantitationType 1 Cy5 Number of pixels in the local background region. Background Contamination Present_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 Background Contamination Present_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 Background Mean float linear_scale MeasuredSignal 1 Background Mean_Cy3 float linear_scale MeasuredSignal 1 Cy3 Pixel intensity averaged over the local background region. Background Mean_Cy5 float linear_scale MeasuredSignal 1 Cy5 Pixel intensity averaged over the local background region. Background Median_Cy3 float linear_scale SpecializedQuantitationType 1 Cy3 Median pixel intensity computed over the local background region. Background Median_Cy5 float linear_scale SpecializedQuantitationType 1 Cy5 Median pixel intensity computed over the local background region. Background Mode_Cy3 float linear_scale SpecializedQuantitationType 1 Cy3 Mode pixel intensity computed over the local background region. Background Mode_Cy5 float linear_scale SpecializedQuantitationType 1 Cy5 Mode pixel intensity computed over the local background region. Background Stdev float linear_scale Error 1 Background Mean Background Stdev_Cy3 float linear_scale Error 1 Background Mean_Cy3 Cy3 Standard deviation of pixel intensities over the local background region. Background Stdev_Cy5 float linear_scale Error 1 Background Mean_Cy5 Cy5 Standard deviation of pixel intensities over the local background region. Background Total_Cy3 integer linear_scale SpecializedQuantitationType 1 Cy3 Total pixel intensity summed over the local background region. Background Total_Cy5 integer linear_scale SpecializedQuantitationType 1 Cy5 Total pixel intensity summed over the local background region. Background contamination present_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 0 if the spot passed background contamination test, 1 if it did not. Background contamination present_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 0 if the spot passed background contamination test, 1 if it did not. CM Offset-X_Cy3 float linear_scale SpecializedQuantitationType Cy3 X offset (in pixels) of the spot's center of the mass from the expected position in the grid. CM Offset-X_Cy5 float linear_scale SpecializedQuantitationType Cy5 X offset (in pixels) of the spot's center of the mass from the expected position in the grid. CM Offset-Y_Cy3 float linear_scale SpecializedQuantitationType Cy3 Y offset (in pixels) of the spot's center of the mass from the expected position in the grid. CM Offset-Y_Cy5 float linear_scale SpecializedQuantitationType Cy5 Y offset (in pixels) of the spot's center of the mass from the expected position in the grid. CM Offset_Cy3 float linear_scale SpecializedQuantitationType Cy3 Offset (in pixels) of the spot's center of the mass from the expected position in the grid. CM Offset_Cy5 float linear_scale SpecializedQuantitationType Cy5 Offset (in pixels) of the spot's center of the mass from the expected position in the grid. CM-X_Cy3 float linear_scale SpecializedQuantitationType Cy3 X coordinate of the center of the mass of spot's signal region. CM-X_Cy5 float linear_scale SpecializedQuantitationType Cy5 X coordinate of the center of the mass of spot's signal region. CM-Y_Cy3 float linear_scale SpecializedQuantitationType Cy3 Y coordinate of the center of the mass of spot's signal region. CM-Y_Cy5 float linear_scale SpecializedQuantitationType Cy5 Y coordinate of the center of the mass of spot's signal region. Control_Cy3 string_datatype unscaled SpecializedQuantitationType Cy3 Name of a control type for current spot (no name means the spot is not a control spot). Control_Cy5 string_datatype unscaled SpecializedQuantitationType Cy5 Name of a control type for current spot (no name means the spot is not a control spot). Diameter integer linear_scale SpecializedQuantitationType Diameter_Cy3 integer linear_scale SpecializedQuantitationType Cy3 Diameter (in pixels) of grid circle corresponding to the spot. Diameter_Cy5 integer linear_scale SpecializedQuantitationType Cy5 Diameter (in pixels) of grid circle corresponding to the spot. Empty spot_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 0 if the spot passed offset test, 1 if it did not. Empty spot_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 0 if the spot passed offset test, 1 if it did not. Expected X_Cy3 float linear_scale SpecializedQuantitationType Cy3 X coordinate of expected position of the circle in the grid. Expected position in the grid is computed fitting least square lines to circle centers in every row and column. Expected X_Cy5 float linear_scale SpecializedQuantitationType Cy5 X coordinate of expected position of the circle in the grid. Expected position in the grid is computed fitting least square lines to circle centers in every row and column. Expected Y_Cy3 float linear_scale SpecializedQuantitationType Cy3 Y coordinate of expected position of the circle in the grid. Expected position in the grid is computed fitting least square lines to circle centers in every row and column. Expected Y_Cy5 float linear_scale SpecializedQuantitationType Cy5 Y coordinate of expected position of the circle in the grid. Expected position in the grid is computed fitting least square lines to circle centers in every row and column. Failed Control_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 0 if the control passed all tests, 1 if at least one of the tests failed. Failed Control_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 0 if the control passed all tests, 1 if at least one of the tests failed. Field string_datatype unscaled SpecializedQuantitationType Name of a field where the spot is located. Flag boolean unscaled PresentAbsent Flag_Cy3 integer linear_scale SpecializedQuantitationType Cy3 Numeric code for the spot (0 - no flag, flag codes 1,...,7). Flag_Cy5 integer linear_scale SpecializedQuantitationType Cy5 Numeric code for the spot (0 - no flag, flag codes 1,...,7). Gene ID string_datatype unscaled SpecializedQuantitationType Gene ID information for the spot. Ignored % failed_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 0 if the spot passed ignored percentage test, 1 if it did not. Ignored % failed_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 0 if the spot passed ignored percentage test, 1 if it did not. Ignored Area_Cy3 integer linear_scale SpecializedQuantitationType Cy3 Area of ignored regions directly neighboring ("touching") the signal area is computed. Ignored Area_Cy5 integer linear_scale SpecializedQuantitationType Cy5 Area of ignored regions directly neighboring ("touching") the signal area is computed. Ignored Median_Cy3 float linear_scale SpecializedQuantitationType Cy3 Median pixel intensity computed over the local ignored region. Ignored Median_Cy5 float linear_scale SpecializedQuantitationType Cy5 Median pixel intensity computed over the local ignored region. Max Diam_Cy3 float linear_scale SpecializedQuantitationType Cy3 Diameter of the circle, the spot's signal region can be inscribed in. Max Diam_Cy5 float linear_scale SpecializedQuantitationType Cy5 Diameter of the circle, the spot's signal region can be inscribed in. Min Diam_Cy3 float linear_scale SpecializedQuantitationType Cy3 Diameter of the circle inscribed into the spot's signal region. Min Diam_Cy5 float linear_scale SpecializedQuantitationType Cy5 Diameter of the circle inscribed into the spot's signal region. Negative spot_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 1 if the spot was qualified as negative, 0 if it was not. Negative spot_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 1 if the spot was qualified as negative, 0 if it was not. Offset X_Cy3 float linear_scale SpecializedQuantitationType Cy3 X Offset (in pixels) of the center of the grid circle from the expected position in the grid. Offset X_Cy5 float linear_scale SpecializedQuantitationType Cy5 X Offset (in pixels) of the center of the grid circle from the expected position in the grid. Offset Y_Cy3 float linear_scale SpecializedQuantitationType Cy3 Y Offset (in pixels) of the center of the grid circle from the expected position in the grid. Offset Y_Cy5 float linear_scale SpecializedQuantitationType Cy5 Y Offset (in pixels) of the center of the grid circle from the expected position in the grid. Offset failed_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 0 if the spot passed offset test, 1 if it did not. Offset failed_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 0 if the spot passed offset test, 1 if it did not. Open Perimeter Failed_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 Open Perimeter Failed_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 Open Perimeter_Cy3 float linear_scale SpecializedQuantitationType Cy3 Computes the proportion of signal perimeter that touches the border of rectangular snip around the spot. Open Perimeter_Cy5 float linear_scale SpecializedQuantitationType Cy5 Computes the proportion of signal perimeter that touches the border of rectangular snip around the spot. Open perimeter failed_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 0 if the spot open perimeter test, 1 if it did not. Open perimeter failed_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 0 if the spot open perimeter test, 1 if it did not. Perim-To-Area_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 Perim-To-Area_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 Perim-to-area failed_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 0 if the spot passed perimeter-to-area test, 1 if it did not. Perim-to-area failed_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 0 if the spot passed perimeter-to-area test, 1 if it did not. Position Offset_Cy3 float linear_scale SpecializedQuantitationType Cy3 Position Offset_Cy5 float linear_scale SpecializedQuantitationType Cy5 Position offset_Cy3 float linear_scale SpecializedQuantitationType Cy3 Offset (in pixels) of the center of the grid circle from the expected position in the grid. Position offset_Cy5 float linear_scale SpecializedQuantitationType Cy5 Offset (in pixels) of the center of the grid circle from the expected position in the grid. Saturated spot_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 1 if the spot was qualified as saturated, 0 if it was not. Saturated spot_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 1 if the spot was qualified as saturated, 0 if it was not. Selected spot_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 1 if the spot was selected in the software view at time of save, 0 if not. Selected spot_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 1 if the spot was selected in the software view at time of save, 0 if not. Shape Regularity float linear_scale SpecializedQuantitationType Shape Regularity Failed_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 Shape Regularity Failed_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 Shape Regularity_Cy3 float linear_scale SpecializedQuantitationType Cy3 The signal area of a spot is inscribed into a circle, then the number of non-signal pixels that fall within this circle is computed and divided by area of circle. This ratio is subtracted from 1 to give the Shape Regularity. Shape Regularity_Cy5 float linear_scale SpecializedQuantitationType Cy5 The signal area of a spot is inscribed into a circle, then the number of non-signal pixels that fall within this circle is computed and divided by area of circle. This ratio is subtracted from 1 to give the Shape Regularity. Shape regularity failed_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 0 if the spot passed shape regularity test, 1 if it did not. Shape regularity failed_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 0 if the spot passed shape regularity test, 1 if it did not. Signal Area_Cy3 integer linear_scale SpecializedQuantitationType Cy3 Number of pixels in the local signal region. Signal Area_Cy5 integer linear_scale SpecializedQuantitationType Cy5 Number of pixels in the local signal region. Signal Contamination Present_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 Signal Contamination Present_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 Signal Mean float linear_scale MeasuredSignal Signal Mean_Cy3 float linear_scale MeasuredSignal Cy3 Pixel intensity averaged over the local signal region. Signal Mean_Cy5 float linear_scale MeasuredSignal Cy5 Pixel intensity averaged over the local signal region. Signal Median_Cy3 float linear_scale SpecializedQuantitationType Cy3 Median pixel intensity computed over the local signal region. Signal Median_Cy5 float linear_scale SpecializedQuantitationType Cy5 Median pixel intensity computed over the local signal region. Signal Mode_Cy3 float linear_scale SpecializedQuantitationType Cy3 Mode pixel intensity computed over the local signal region (mode corresponds to the pick location in intensity distribution). Signal Mode_Cy5 float linear_scale SpecializedQuantitationType Cy5 Mode pixel intensity computed over the local signal region (mode corresponds to the pick location in intensity distribution). Signal Stdev float linear_scale Error Signal Mean Signal Stdev_Cy3 float linear_scale Error Signal Mean_Cy3 Cy3 Standard deviation of pixel intensities over the local signal region. Signal Stdev_Cy5 float linear_scale Error Signal Mean_Cy5 Cy5 Standard deviation of pixel intensities over the local signal region. Signal Total_Cy3 integer linear_scale SpecializedQuantitationType Cy3 Total pixel intensity summed over the local signal region. Signal Total_Cy5 integer linear_scale SpecializedQuantitationType Cy5 Total pixel intensity summed over the local signal region. Signal contamination present_Cy3 boolean linear_scale SpecializedQuantitationType Cy3 0 if the spot passed signal contamination test, 1 if it did not. Signal contamination present_Cy5 boolean linear_scale SpecializedQuantitationType Cy5 0 if the spot passed signal contamination test, 1 if it did not. Spot Area_Cy3 integer linear_scale SpecializedQuantitationType Cy3 Signal Area plus Ignored Area. Spot Area_Cy5 integer linear_scale SpecializedQuantitationType Cy5 Signal Area plus Ignored Area. XCoord float linear_scale SpecializedQuantitationType XCoord_Cy3 float linear_scale SpecializedQuantitationType Cy3 X coordinate (in pixels) of grid circle corresponding to the spot. XCoord_Cy5 float linear_scale SpecializedQuantitationType Cy5 X coordinate (in pixels) of grid circle corresponding to the spot. YCoord float linear_scale SpecializedQuantitationType YCoord_Cy3 float linear_scale SpecializedQuantitationType Cy3 Y coordinate (in pixels) of grid circle corresponding to the spot. YCoord_Cy5 float linear_scale SpecializedQuantitationType Cy5 Y coordinate (in pixels) of grid circle corresponding to the spot. >>>NimbleScan[NimbleGen Systems] GENE_EXPR_OPTION string_datatype unscaled SpecializedQuantitationType The CONTAINER name from the design file, if analysis was done by container or WHOLE_ARRAY if all replicate probe sets were combined into a single set. The default analysis is normally by container. CONTAINER names are generally named FORWARD/REVERSE/BLOCK IMAGE_ID_CY3 string_datatype unscaled SpecializedQuantitationType Cy3 The name of the image the data was extracted from, minus the .tif extension. For NimbleGen data sets, this will be the array identifier plus any additional information, like wavelength used to scan the array, or photomultiplier tube setting. The array ID IMAGE_ID_CY5 string_datatype unscaled SpecializedQuantitationType Cy5 The name of the image the data was extracted from, minus the .tif extension. For NimbleGen data sets, this will be the array identifier plus any additional information, like wavelength used to scan the array, or photomultiplier tube setting. The array ID IMAGE_ID string_datatype unscaled SpecializedQuantitationType The name of the image the data was extracted from, minus the .tif extension. For NimbleGen data sets, this will be the array identifier plus any additional information, like wavelength used to scan the array, or photomultiplier tube setting. The array ID MATCH_INDEX integer linear_scale SpecializedQuantitationType Integer number that ties probe pairs together. Using the combination of MATCH_INDEX and MISMATCH you can retrieve and distinguish the members of the probe pair. Required for expression arrays with mismatches. Must be unique for each probe pair of a given MM_CY3 float linear_scale SpecializedQuantitationType Cy3 The mismatch signal intensity for the probe pair. Will range from 0 to 65536. Will be zero for perfect match only designs. MM_CY5 float linear_scale SpecializedQuantitationType Cy5 The mismatch signal intensity for the probe pair. Will range from 0 to 65536. Will be zero for perfect match only designs. PM_CY3 float linear_scale MeasuredSignal Cy3 The perfect match signal intensity for the probe pair. Will range from 0 to 65536. PM_CY5 float linear_scale MeasuredSignal Cy5 The perfect match signal intensity for the probe pair. Will range from 0 to 65536. MM float linear_scale SpecializedQuantitationType The mismatch signal intensity for the probe pair. Will range from 0 to 65536. Will be zero for perfect match only designs. PM float linear_scale MeasuredSignal The perfect match signal intensity for the probe pair. Will range from 0 to 65536. POSITION integer linear_scale SpecializedQuantitationType Position of the PROBE_SEQUENCE in the sequence/region of interest, starting from the left/5-prime end. PROBE_ID string_datatype unscaled SpecializedQuantitationType The NimbleGen probe identifier. Used to identify a probe sequence within a design. Limited to 50 characters. For expression designs, a PROBE_ID is a 17 character string that looks like HSAP00P0001724033. The first four letters (HSAP) are the species code. SEQ_ID string_datatype unscaled SpecializedQuantitationType The NimbleGen sequence identifier. Used to group the probe pairs together for determining gene expression summary values. Required - must be unique for each sequence/region of interest. Limited to 50 characters. SEQ_URL string_datatype unscaled SpecializedQuantitationType When populated, URL to sequence information for the SEQ_ID. >>>QuantArray[PerkinElmer] Cy3 Area integer linear_scale SpecializedQuantitationType Cy3 The area of the spot given as the number of pixels (in sq. microns). Used to determine whether the spot is close to the expected size or is an artifact on the slide. Cy3 Area Filter boolean linear_scale SpecializedQuantitationType Cy3 Cy3 Background float linear_scale MeasuredSignal 1 Cy3 Mean pixel Cy3 background intensity in Channel Cy3. Cy3 Background Std Dev float linear_scale Error 1 Cy3 Background Cy3 Standard deviation of the raw Cy3 background pixel intensity. Cy3 Background Subtr 1 Cy3 Cy3 Bkg. Uniformity float linear_scale SpecializedQuantitationType 1 Cy3 The uniformity of the pixels used in the background intensity calculation. Cy3 Bkg. Uniformity Filter boolean linear_scale SpecializedQuantitationType Cy3 Cy3 Circularity float linear_scale SpecializedQuantitationType Cy3 Reports the degree to which a spot is close to a perfect circle. This measurement is used to determine the print quality of the microarray. Cy3 Circularity Filter boolean linear_scale SpecializedQuantitationType Cy3 Cy3 Confidence integer linear_scale SpecializedQuantitationType Cy3 Unused QuantArray feature, will always = 1. Cy3 Diameter float linear_scale SpecializedQuantitationType Cy3 Average diameter of the spot (in microns). Used to determine whether the spot is close to the expected size or is perhaps an artifact on the slide. Cy3 Diameter Filter boolean linear_scale SpecializedQuantitationType Cy3 Cy3 Footprint float linear_scale SpecializedQuantitationType Cy3 The distance between the expected position of a spot and its actual measured position (in microns). Cy3 Footprint Filter boolean linear_scale SpecializedQuantitationType Cy3 Cy3 Intensity float linear_scale MeasuredSignal Cy3 Mean pixel Cy3 foreground intensity in Channel Cy3. Cy3 Intensity Std Dev float linear_scale Error Cy3 Intensity Cy3 Standard deviation of the raw Cy3 foreground pixel intensity. Cy3 Normalized & BackSubtr 1 Cy3 Cy3 Normalized & BackSubtr Ratio 1 Cy3 Cy3 Percent float linear_scale SpecializedQuantitationType Cy3 The portion of the overall spot fluorescence contributed by channel Cy3 (in percent). Cy3 Ratio float linear_scale SpecializedQuantitationType Cy3 The portion of the overall spot fluorescence contributed by channel Cy3 (normalized so that channel Cy3 contribution equals 1). Cy3 Replicate Filter boolean linear_scale SpecializedQuantitationType Cy3 Cy3 Signal Noise Ratio float linear_scale Ratio 1 Cy3 The ratio of spot intensity to the standard deviation of the local background of all spots in the microarray. Spots with a low Signal/Noise Ratio can be quickly identified for later reviews. Cy3 Signal Noise Ratio Filter float linear_scale SpecializedQuantitationType Cy3 Cy3 Spot Uniformity float linear_scale SpecializedQuantitationType Cy3 The uniformity of the pixels used in the spot foreground intensity calculation.This helps in determining the quality of the spot and aids in selecting the correct quantification output method. Cy3 Spot Uniformity Filter boolean linear_scale SpecializedQuantitationType Cy3 Cy5 Area integer linear_scale SpecializedQuantitationType Cy5 The area of the spot given as the number of pixels (in sq. microns). Used to determine whether the spot is close to the expected size or is an artifact on the slide. Cy5 Area Filter boolean linear_scale SpecializedQuantitationType Cy5 Cy5 Background float linear_scale MeasuredSignal 1 Cy5 Mean pixel Cy5 background intensity in Channel Cy5. Cy5 Background Std Dev float linear_scale Error 1 Cy5 Background Cy5 Standard deviation of the raw Cy5 background pixel intensity. Cy5 Background Subtr 1 Cy5 Cy5 Bkg. Uniformity float linear_scale SpecializedQuantitationType 1 Cy5 The uniformity of the pixels used in the background intensity calculation. Cy5 Bkg. Uniformity Filter boolean linear_scale SpecializedQuantitationType Cy5 Cy5 Circularity float linear_scale SpecializedQuantitationType Cy5 Reports the degree to which a spot is close to a perfect circle. This measurement is used to determine the print quality of the microarray. Cy5 Circularity Filter boolean linear_scale SpecializedQuantitationType Cy5 Cy5 Confidence integer linear_scale SpecializedQuantitationType Cy5 Unused QuantArray feature, will always = 1. Cy5 Diameter float linear_scale SpecializedQuantitationType Cy5 Average diameter of the spot (in microns). Used to determine whether the spot is close to the expected size or is perhaps an artifact on the slide. Cy5 Diameter Filter boolean linear_scale SpecializedQuantitationType Cy5 Cy5 Footprint float linear_scale SpecializedQuantitationType Cy5 The distance between the expected position of a spot and its actual measured position (in microns). Cy5 Footprint Filter boolean linear_scale SpecializedQuantitationType Cy5 Cy5 Intensity float linear_scale MeasuredSignal Cy5 Mean pixel Cy5 foreground intensity in Channel Cy5. Cy5 Intensity Std Dev float linear_scale Error Cy5 Intensity Cy5 Standard deviation of the raw Cy5 foreground pixel intensity. Cy5 Normalized & BackSubtr 1 Cy5 Cy5 Normalized & BackSubtr Ratio 1 Cy5 Cy5 Percent float linear_scale SpecializedQuantitationType Cy5 The portion of the overall spot fluorescence contributed by channel Cy5 (in percent). Cy5 Ratio float linear_scale SpecializedQuantitationType Cy5 The portion of the overall spot fluorescence contributed by channel Cy5 (normalized so that channel Cy5 contribution equals 1). Cy5 Replicate Filter boolean linear_scale SpecializedQuantitationType Cy5 Cy5 Signal Noise Ratio float linear_scale Ratio 1 Cy5 The ratio of spot intensity to the standard deviation of the local background of all spots in the microarray. Spots with a low Signal/Noise Ratio can be quickly identified for later reviews. Cy5 Signal Noise Ratio Filter float linear_scale SpecializedQuantitationType Cy5 Cy5 Spot Uniformity float linear_scale SpecializedQuantitationType Cy5 The uniformity of the pixels used in the spot foreground intensity calculation.This helps in determining the quality of the spot and aids in selecting the correct quantification output method. Cy5 Spot Uniformity Filter boolean linear_scale SpecializedQuantitationType Cy5 Ignore Filter integer linear_scale SpecializedQuantitationType Whether the feature quantitation is used in down-stream analysis (flagging feature as valid): 0 = feature invalid (null data); 1 = feature valid. Number integer linear_scale SpecializedQuantitationType Unique integer for each spot. X Location integer linear_scale SpecializedQuantitationType X pixel coordinate of spot center. Y Location integer linear_scale SpecializedQuantitationType Y pixel coordinate of spot center. log_normalised float log_base_2 Ratio Ratio = log2 Cy5 - log2 Cy3, for dyeswap ratio *-1 normalised log(cy3/cy5) ratio float log Ratio 0 normalised log(cy5/cy3) ratio float log Ratio 0 Cy3 Background Mean float linear_scale MeasuredSignal 1 Cy3 Mean pixel Cy3 background intensity in Channel Cy3. Cy3 Background Median integer linear_scale SpecializedQuantitationType 1 Cy3 Median pixel Cy3 background intensity in Channel Cy3. Cy3 Background Mode float linear_scale SpecializedQuantitationType 1 Cy3 Mode of pixel Cy3 background intensity in Channel Cy3. Cy3 Background Total integer linear_scale SpecializedQuantitationType 1 Cy3 Total pixel Cy3 background intensity in Channel Cy3. Cy3 Flag integer unscaled SpecializedQuantitationType Cy3 Cy3 Signal Mean float linear_scale MeasuredSignal Cy3 Mean pixel Cy3 foreground intensity in Channel Cy3. Cy3 Signal Median integer linear_scale SpecializedQuantitationType Cy3 Median pixel Cy3 foreground intensity in Channel Cy3. Cy3 Signal Mode float linear_scale SpecializedQuantitationType Cy3 Mode of pixel Cy3 foreground intensity in Channel Cy3. Cy3 Signal Total integer linear_scale SpecializedQuantitationType Cy3 Total pixel Cy3 foreground intensity in Channel Cy3. Cy5 Background Mean float linear_scale MeasuredSignal 1 Cy5 Mean pixel Cy5 background intensity in Channel Cy5. Cy5 Background Median integer linear_scale SpecializedQuantitationType 1 Cy5 Median pixel Cy5 background intensity in Channel Cy5. Cy5 Background Mode float linear_scale SpecializedQuantitationType 1 Cy5 Mode of pixel Cy5 background intensity in Channel Cy5. Cy5 Background Total integer linear_scale SpecializedQuantitationType 1 Cy5 Total pixel Cy5 background intensity in Channel Cy5. Cy5 Flag integer unscaled SpecializedQuantitationType Cy5 Cy5 Signal Mean float linear_scale MeasuredSignal Cy5 Mean pixel Cy5 foreground intensity in Channel Cy5. Cy5 Signal Median integer linear_scale SpecializedQuantitationType Cy5 Median pixel Cy5 foreground intensity in Channel Cy5. Cy5 Signal Mode float linear_scale SpecializedQuantitationType Cy5 Mode of pixel Cy5 foreground intensity in Channel Cy5. Cy5 Signal Total integer linear_scale SpecializedQuantitationType Cy5 Total pixel Cy5 foreground intensity in Channel Cy5. >>>ScanAlyze[Stanford University] BGPIX integer linear_scale SpecializedQuantitationType 1 Number of background pixels. BOT integer linear_scale SpecializedQuantitationType Box bottom: int(((centerX + radius) - Xoffset) / pixelSize). CH1AB float linear_scale SpecializedQuantitationType 1 Cy3 Mean intensities of background pixels of Cy3. CH1B float linear_scale MeasuredSignal 1 Cy3 Median intensities of background pixels of Cy3. CH1EDGEA float linear_scale SpecializedQuantitationType Cy3 Mean magnitude of the horizontal & vertical Sobel edge vectors contained within each spot, for Cy3. CH1GTB1 float linear_scale SpecializedQuantitationType Cy3 Fraction of pixels in the spot greater than background (CH1B) of Cy3. CH1GTB2 float linear_scale SpecializedQuantitationType Cy3 Fraction of pixels in the spot greater than 1.5x the background (CH1B) for Cy3. CH1I float linear_scale MeasuredSignal Cy3 Uncorrected Cy3 mean pixel intensity. CH1KSD float linear_scale SpecializedQuantitationType Cy3 Value of Komogorov-Smirnov statistic that assesses the likelihood that the spot pixel intensity is drawn from the background distribution, for Cy3. CH1KSP float linear_scale SpecializedQuantitationType Cy3 Probability value of Komogorov-Smirnov statistic that assesses the likelihood that the spot pixel intensity is drawn from the background distribution, for Cy3. CH2AB float linear_scale SpecializedQuantitationType 1 Cy5 Mean intensities of background pixels of Cy5. CH2B float linear_scale MeasuredSignal 1 Cy5 Median intensities of background pixels of Cy5. CH2EDGEA float linear_scale SpecializedQuantitationType Cy5 Mean magnitude of the horizontal & vertical Sobel edge vectors contained within each spot, for Cy5. CH2GTB1 float linear_scale SpecializedQuantitationType Cy5 Fraction of pixels in the spot greater than background (CH2B) of Cy5. CH2GTB2 float linear_scale SpecializedQuantitationType Cy5 Fraction of pixels in the spot greater than 1.5x the background (CH2B) for Cy5. CH2I float linear_scale MeasuredSignal Cy5 Uncorrected Cy5 mean pixel intensity. CH2KSD float linear_scale SpecializedQuantitationType Cy5 Value of Komogorov-Smirnov statistic that assesses the likelihood that the spot pixel intensity is drawn from the background distribution, for Cy5. CH2KSP float linear_scale SpecializedQuantitationType Cy5 Probability value of Komogorov-Smirnov statistic that assesses the likelihood that the spot pixel intensity is drawn from the background distribution, for Cy5. COL integer linear_scale SpecializedQuantitationType The column within the grid that the spot is contained. CORR float linear_scale SpecializedQuantitationType The correlation between channel1 (Cy3) & Channel 2 (Cy5) pixels within the spot, and is a useful quality control parameter. Generally, high values imply better fit & good spot quality. EDGE integer unscaled SpecializedQuantitationType FLAG integer unscaled Failed User defined spot flag (default 0). GRID integer linear_scale SpecializedQuantitationType The grid in which the spot is contained. LEFT integer linear_scale SpecializedQuantitationType Box left: int(((centerY - radius) - yoffset) / pixelSize). LFRAT float linear_scale SpecializedQuantitationType When single pixel intensities on channel 1 (Cy3) are plotted against those in channel 2 (Cy5) they fall on a straight line with a slope equal to the ratio. The least-squares fit of a line to the points, minimizing the sum of the squares shortest distance MRAT float linear_scale SpecializedQuantitationType Contains median of Ch2PI-CH2B/Ch1PI-CH1B where Ch1PI & Ch2PI represent single pixel intensities. RAT2 float linear_scale Ratio Ratio of the arithmetic mean intensities of each spot for each wavelength, with the median background subtracted. Channel 2/Channel 1 ratio, (CH2I - CH2B)/(CH1 - CH1B) or Red/Green ratio. REGR float linear_scale SpecializedQuantitationType When single pixel intensities on channel 1 (Cy3) are plotted against those in channel 2 (Cy5) they fall on a straight line with a slope equal to the ratio. This represents the linear regression of Cy5 on Cy3. RIGHT integer linear_scale SpecializedQuantitationType Box right: int(((centerY + radius) - yoffset) / pixelSize). SPIX integer linear_scale SpecializedQuantitationType Count of the number of pixels in the spot. SPOT integer linear_scale SpecializedQuantitationType Unique index of spot in file - counting starts with grid1, moves along row1 from column1 until the last column, then advances to the next row; after all rows in grid1 are assigned an index, counting proceeds to grid2, etc... TOP integer linear_scale SpecializedQuantitationType Box top: int(((centerX - radius) - Xoffset) / pixelSize). >>>ScanArray Express[PerkinElmer] % > B543+1SD float linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels with intensities more than one standard deviation above the background pixel intensity, in the 543nm channel. % > B543+2SD float linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels with intensities more than two standard deviations above the background pixel intensity, in the 543nm channel. % > B633+1SD float linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels with intensities more than one standard deviation above the background pixel intensity, in the 633nm channel. % > B633+2SD float linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels with intensities more than two standard deviations above the background pixel intensity, in the 633nm channel. B Pixels integer linear_scale SpecializedQuantitationType The total number of background pixels. B543 Mean float linear_scale MeasuredSignal 1 Cy3 Mean pixel background intensity in 543nm channel. B543 Median float linear_scale SpecializedQuantitationType 1 Cy3 Median pixel background intensity in 543nm channel. B543 SD float linear_scale Error 1 B543 Median Cy3 Standard deviation of the raw 543nm background pixel intensity. B633 Mean float linear_scale MeasuredSignal 1 Cy5 Mean pixel background intensity in 633nm channel. B633 Median float linear_scale SpecializedQuantitationType 1 Cy5 Median pixel background intensity in 633nm channel. B633 SD float linear_scale Error 1 B633 Median Cy5 Standard deviation of the raw 633nm background pixel intensity. Cy3 % > B + 1 SD float linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels with intensities more than one standard deviation above the background pixel intensity, in the Cy3 channel. Cy3 % > B + 2 SD float linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels with intensities more than two standard deviations above the background pixel intensity, in the Cy3 channel. Cy3 B Mean float linear_scale MeasuredSignal 1 Cy3 Mean pixel Cy3 background intensity in Channel Cy3. Cy3 B Median float linear_scale SpecializedQuantitationType 1 Cy3 Median pixel Cy3 background intensity in Channel Cy3. Cy3 B SD float linear_scale Error 1 Cy3 B Median Cy3 Standard deviation of the raw Cy3 background pixel intensity. Cy3 F % Sat. float linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels in the Cy3 channel that are saturated. Cy3 Log Ratio Cy3 Mean float linear_scale MeasuredSignal Cy3 Mean pixel Cy3 foreground intensity in Channel Cy3. Cy3 Mean - B float linear_scale SpecializedQuantitationType Cy3 The mean feature pixel intensity in the Cy3 channel with the mean background subtracted. Cy3 Mean of Ratios Cy3 Median float linear_scale SpecializedQuantitationType Cy3 Median pixel Cy3 foreground intensity in Channel Cy3. Cy3 Median - B float linear_scale SpecializedQuantitationType Cy3 The median feature pixel intensity in the Cy3 channel with the median background subtracted. Cy3 Median of Ratios Cy3 N (Mean-B) float linear_scale DerivedSignal Cy3 Mean pixel Cy3 foreground intensity in Channel Cy3 with the mean background subtracted, globally normalized. Cy3 N (Median-B) float linear_scale SpecializedQuantitationType Cy3 Median pixel Cy3 foreground intensity in Channel Cy3 with the median background subtracted, globally normalized. Cy3 N Log Ratio Cy3 N Mean float linear_scale DerivedSignal Cy3 Globally normalized mean pixel Cy3 foreground intensity in Channel Cy3. Cy3 N Mean of Ratios Cy3 N Median float linear_scale SpecializedQuantitationType Cy3 Globally normalized median pixel Cy3 foreground intensity in Channel Cy3. Cy3 N Median of Ratios Cy3 N Ratio of Means Cy3 N Ratio of Medians Cy3 N Rgn Ratio Cy3 Ratio of Means Cy3 Ratio of Medians Cy3 Ratios SD Cy3 Rgn Ratio Cy3 Rgn R Cy3 SD float linear_scale Error Cy3 Median Cy3 Standard deviation of the raw Cy3 foreground pixel intensity. Cy3 SignalNoiseRatio float linear_scale Ratio Cy3 The ratio of spot Cy3 intensity to the standard deviation of the local Cy3 background of all spots in the microarray. Spots with a low Signal/Noise Ratio can be quickly identified for later reviews. Cy5 % > B + 1 SD float linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels with intensities more than one standard deviation above the background pixel intensity, in the Cy5 channel. Cy5 % > B + 2 SD float linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels with intensities more than two standard deviations above the background pixel intensity, in the Cy5 channel. Cy5 B Mean float linear_scale MeasuredSignal 1 Cy5 Mean pixel Cy5 background intensity in Channel Cy5. Cy5 B Median float linear_scale SpecializedQuantitationType 1 Cy5 Median pixel Cy5 background intensity in Channel Cy5. Cy5 B SD float linear_scale Error 1 Cy5 B Median Cy5 Standard deviation of the raw Cy5 background pixel intensity. Cy5 F % Sat. float linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels in the Cy5 channel that are saturated. Cy5 Log Ratio Cy5 Mean float linear_scale MeasuredSignal Cy5 Mean pixel Cy5 foreground intensity in Channel Cy5. Cy5 Mean - B float linear_scale SpecializedQuantitationType Cy5 The mean feature pixel intensity in the Cy5 channel with the mean background subtracted. Cy5 Mean of Ratios Cy5 Median float linear_scale SpecializedQuantitationType Cy5 Median pixel Cy5 foreground intensity in Channel Cy5. Cy5 Median - B float linear_scale SpecializedQuantitationType Cy5 The median feature pixel intensity in the Cy5 channel with the median background subtracted. Cy5 Median of Ratios Cy5 N (Mean-B) float linear_scale DerivedSignal Cy5 Mean pixel Cy5 foreground intensity in Channel Cy5 with the mean background subtracted, globally normalized. Cy5 N (Median-B) float linear_scale SpecializedQuantitationType Cy5 Median pixel Cy5 foreground intensity in Channel Cy5 with the median background subtracted, globally normalized. Cy5 N Log Ratio Cy5 N Mean float linear_scale DerivedSignal Cy5 Globally normalized mean pixel Cy5 foreground intensity in Channel Cy5. Cy5 N Mean of Ratios Cy5 N Median float linear_scale SpecializedQuantitationType Cy5 Globally normalized median pixel Cy5 foreground intensity in Channel Cy5. Cy5 N Median of Ratios Cy5 N Ratio of Means Cy5 N Ratio of Medians Cy5 N Rgn Ratio Cy5 Ratio of Means Cy5 Ratio of Medians Cy5 Ratios SD Cy5 Rgn Ratio Cy5 Rgn R Cy5 SD float linear_scale Error Cy5 Median Cy5 Standard deviation of the raw Cy5 foreground pixel intensity. Cy5 SignalNoiseRatio float linear_scale Ratio Cy5 The ratio of spot Cy5 intensity to the standard deviation of the local Cy5 background of all spots in the microarray. Spots with a low Signal/Noise Ratio can be quickly identified for later reviews. Dia. integer linear_scale SpecializedQuantitationType The diameter in um of the feature-indicator. Diameter integer linear_scale SpecializedQuantitationType The diameter in um of the feature-indicator. F Pixels integer linear_scale SpecializedQuantitationType The total number of feature pixels. F543 % Sat. float linear_scale SpecializedQuantitationType Cy3 The percentage of feature pixels in the 543nm channel that are saturated. F543 Mean float linear_scale MeasuredSignal Cy3 Mean pixel foreground intensity in 543nm channel. F543 Mean - B543 float linear_scale SpecializedQuantitationType Cy3 The mean feature pixel intensity in the 543nm channel with the mean background subtracted. F543 Median float linear_scale SpecializedQuantitationType Cy3 Median pixel foreground intensity in 543nm channel. F543 Median - B543 float linear_scale SpecializedQuantitationType Cy3 The median feature pixel intensity in the 543nm channel with the median background subtracted. F543 SD float linear_scale Error F543 Median Cy3 Standard deviation of the raw 543nm foreground pixel intensity. F633 % Sat. float linear_scale SpecializedQuantitationType Cy5 The percentage of feature pixels in the 633nm channel that are saturated. F633 Mean float linear_scale MeasuredSignal Cy5 Mean pixel foreground intensity in 633nm channel. F633 Mean - B633 float linear_scale SpecializedQuantitationType Cy5 The mean feature pixel intensity in the 633nm channel with the mean background subtracted. F633 Median float linear_scale SpecializedQuantitationType Cy5 Median pixel foreground intensity in 633nm channel. F633 Median - B633 float linear_scale SpecializedQuantitationType Cy5 The median feature pixel intensity in the 633nm channel with the median background subtracted. F633 SD float linear_scale Error F633 Median Cy5 Standard deviation of the raw 633nm foreground pixel intensity. Flags integer unscaled SpecializedQuantitationType Footprint integer linear_scale SpecializedQuantitationType ID string_datatype unscaled SpecializedQuantitationType Index integer linear_scale SpecializedQuantitationType Log Ratio float log_base_2 Ratio Log Ratio (633/543) float log_base_2 Ratio Mean of Ratios float linear_scale SpecializedQuantitationType The mean of pixel-by-pixel ratios of pixel intensities. Mean of Ratios (633/543) float linear_scale SpecializedQuantitationType The mean of pixel-by-pixel ratios of pixel intensities. Median of Ratios float linear_scale SpecializedQuantitationType The median of pixel-by-pixel ratios of pixel intensities. Median of Ratios (633/543) float linear_scale SpecializedQuantitationType The median of pixel-by-pixel ratios of pixel intensities. N Log Ratio float linear_scale SpecializedQuantitationType N Mean of Ratios float linear_scale SpecializedQuantitationType N Median of Ratios float linear_scale SpecializedQuantitationType N Ratio of Means float linear_scale SpecializedQuantitationType N Ratio of Medians float linear_scale SpecializedQuantitationType N Rgn Ratio float linear_scale SpecializedQuantitationType Name string_datatype unscaled SpecializedQuantitationType Normalize integer unscaled PresentAbsent The normalization status of the feature (included/not included). Ratio of Means float linear_scale SpecializedQuantitationType The ratio of the mean intensities of each feature for each wavelength. Ratio of Means (633/543) float linear_scale SpecializedQuantitationType The ratio of the mean intensities of each feature for each wavelength. Ratio of Medians float linear_scale SpecializedQuantitationType The ratio of the median intensities of each feature for each wavelength. Ratio of Medians (633/543) float linear_scale SpecializedQuantitationType The ratio of the median intensities of each feature for each wavelength. Ratios SD float linear_scale SpecializedQuantitationType Median of Ratios Ratios SD (633/543) float linear_scale SpecializedQuantitationType Median of Ratios (633/543) Rgn R2 float linear_scale SpecializedQuantitationType Rgn R2 (633/543) float linear_scale SpecializedQuantitationType Rgn Ratio float linear_scale SpecializedQuantitationType Rgn Ratio (633/543) float linear_scale SpecializedQuantitationType Rgn R (633/543) float linear_scale SpecializedQuantitationType Sum of Means float linear_scale SpecializedQuantitationType The sum of the mean intensities for each wavelength. Sum of Medians float linear_scale SpecializedQuantitationType The sum of the median intensities for each wavelength. X integer linear_scale SpecializedQuantitationType X coordinate of spot center. Y integer linear_scale SpecializedQuantitationType Y coordinate of spot center. >>>SpotFinder[TIGR] BGA integer linear_scale MeasuredSignal 1 Cy3 Spot background in Cy3 channel. BGB integer linear_scale MeasuredSignal 1 Cy5 Spot background in Cy5 channel. BkgA integer linear_scale MeasuredSignal 1 Cy3 Spot background in Cy3 channel. BkgB integer linear_scale MeasuredSignal 1 Cy5 Spot background in Cy5 channel. Flag string_datatype unscaled SpecializedQuantitationType Flag values are generated based on next conditions: A - the number of non-saturated pixels in spot is 0; B- number of non-saturated pixels in spot is between 30 and 50; C- number of non saturated pixels in spot is more then 50; S- fully or partially satur Flag A string_datatype unscaled SpecializedQuantitationType Cy3 Spot flag in channel A. This flag is set by QC filter. Flag B string_datatype unscaled SpecializedQuantitationType Cy5 Spot flag in channel B. This flag is set by QC filter. FlagA string_datatype unscaled SpecializedQuantitationType Cy3 Spot flag in channel A. This flag is set by QC filter. FlagB string_datatype unscaled SpecializedQuantitationType Cy5 Spot flag in channel B. This flag is set by QC filter. IA integer linear_scale MeasuredSignal Cy3 Spot intensity in Cy3 channel corrected for background. IB integer linear_scale MeasuredSignal Cy5 Spot intensity in Cy5 channel corrected for background. MNA integer linear_scale SpecializedQuantitationType Cy3 Mean intensity value in Cy3 channel. MNB integer linear_scale SpecializedQuantitationType Cy5 Mean intensity value in Cy5 channel. MeanR float linear_scale Ratio Spot mean ratio MedA integer linear_scale SpecializedQuantitationType Cy3 Median intensity in Cy3 channel. MedB integer linear_scale SpecializedQuantitationType Cy5 Median intensity in Cy5 channel. MedBkgA integer linear_scale SpecializedQuantitationType Cy3 Median background intensity in Cy3 channel. MedBkgB integer linear_scale SpecializedQuantitationType Cy5 Median background intensity in Cy5 channel. MedianR float linear_scale Ratio Spot median ratio. ModeR float linear_scale Ratio Spot mode ratio. PValueA float linear_scale SpecializedQuantitationType Cy3 P-value in Cy3 channel. PValueB float linear_scale SpecializedQuantitationType Cy5 P-value in Cy5 channel. QC float linear_scale SpecializedQuantitationType Spot total QC score. This is a mean of QC scores in Cy3 and Cy5 channels. QCA float linear_scale SpecializedQuantitationType Cy3 Spot QC score in channel A. This is a geometric mean of shape and S/N QC scores in channel A. S/N QC score is calculated as percentage of pixels in a spot with values higher than 2*median(local BKG). Spot shape QC score is defined as ratio of spot area to QCB float linear_scale SpecializedQuantitationType Cy5 Spot QC score in channel B. This is a geometric mean of shape and S/N QC scores in channel B. S/N QC score is calculated as percentage of pixels in a spot with values higher than 2*median(local BKG). Spot shape QC score is defined as ratio of spot area to QCscore float linear_scale SpecializedQuantitationType SA integer linear_scale SpecializedQuantitationType Spot total area in pixels. SC integer unscaled SpecializedQuantitationType SDA float linear_scale Error IA Cy3 Standard deviation for spot pixels in Cy3 channel. SDB float linear_scale Error IB Cy5 Standard deviation for spot pixels in Cy5 channel. SDBkgA float linear_scale Error 1 BkgA Cy3 Standard deviation of the background value in Cy3 channel. SDBkgB float linear_scale Error 1 BkgB Cy5 Standard deviation of the background value in Cy5 channel. SF float linear_scale SpecializedQuantitationType SR integer unscaled SpecializedQuantitationType Sat float linear_scale SpecializedQuantitationType Spot saturation factor. This measure shows the percentage of non-saturated pixels in the spot used for integration. UID integer linear_scale SpecializedQuantitationType Unique identifier for this spot. >>>UCSF Spot Dapi float linear_scale MeasuredSignal DAPI DapiBack float linear_scale MeasuredSignal 1 DAPI DapiFore float linear_scale SpecializedQuantitationType DAPI Flag integer linear_scale Failed Log2MedRat float log_base_2 Ratio Log2Rat float log_base_2 Ratio Log2Slope float log_base_2 SpecializedQuantitationType MeanLog2Rat float log_base_2 SpecializedQuantitationType MeanRat float linear_scale SpecializedQuantitationType MedianRatio float Ratio MinF-B float SpecializedQuantitationType OriginDist float SpecializedQuantitationType RawRat float linear_scale Ratio Ref float linear_scale MeasuredSignal RefBack float linear_scale MeasuredSignal 1 RefBackSD linear_scale Error 1 RefBack RefFore float linear_scale SpecializedQuantitationType RefForeSD linear_scale Error RefFore RefIntercept float SpecializedQuantitationType RefZstat PValue Slope float linear_scale SpecializedQuantitationType SpotCorr float DerivedSignal Test float linear_scale MeasuredSignal 1 TestBack float linear_scale MeasuredSignal 1 TestBackSD linear_scale Error 1 TestBack TestFore float linear_scale SpecializedQuantitationType TestForeSD linear_scale Error TestFore TestIntercept float SpecializedQuantitationType TestZstat PValue nback integer linear_scale SpecializedQuantitationType 1 nfore integer linear_scale SpecializedQuantitationType >>>Uni of Toronto in-house analysis software B532 Location float linear_scale MeasuredSignal 1 Cy3 B635 Location float linear_scale MeasuredSignal 1 Cy5 F532 Location float linear_scale MeasuredSignal Cy3 F635 Location float linear_scale MeasuredSignal Cy5 Intensity float log_base_10 SpecializedQuantitationType Raw Log Ratio float log_base_10 Ratio 1