[med-svn] [r-bioc-metagenomeseq] 08/09: New upstream version 1.16.0

Andreas Tille tille at debian.org
Sun Oct 1 15:31:08 UTC 2017


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository r-bioc-metagenomeseq.

commit 63047b3fdf6654f8cfe3460c33a9c1f12a0b40b9
Author: Andreas Tille <tille at debian.org>
Date:   Sun Oct 1 17:27:53 2017 +0200

    New upstream version 1.16.0
---
 DESCRIPTION                           |   29 +
 NAMESPACE                             |  104 ++++
 NEWS                                  |   71 +++
 R/MRcoefs.R                           |  114 ++++
 R/MRexperiment2biom.R                 |   84 +++
 R/MRfulltable.R                       |  136 +++++
 R/MRtable.R                           |  130 +++++
 R/aggregateBySample.R                 |   64 +++
 R/aggregateByTaxonomy.R               |   77 +++
 R/allClasses.R                        |  308 ++++++++++
 R/biom2MRexperiment.R                 |   41 ++
 R/calculateEffectiveSamples.R         |   14 +
 R/correlationTest.R                   |  119 ++++
 R/cumNorm.R                           |   53 ++
 R/cumNormMat.R                        |   37 ++
 R/cumNormStat.R                       |   63 +++
 R/cumNormStatFast.R                   |   57 ++
 R/deprecated_metagenomeSeq_function.R |   23 +
 R/doCountMStep.R                      |   70 +++
 R/doEStep.R                           |   33 ++
 R/doZeroMStep.R                       |   41 ++
 R/exportMat.R                         |   30 +
 R/exportStats.R                       |   42 ++
 R/filterData.R                        |   21 +
 R/fitDO.R                             |   64 +++
 R/fitFeatureModel.R                   |   73 +++
 R/fitLogNormal.R                      |   71 +++
 R/fitPA.R                             |   61 ++
 R/fitTimeSeries.R                     |  610 ++++++++++++++++++++
 R/fitZeroLogNormal.R                  |  299 ++++++++++
 R/fitZig.R                            |  274 +++++++++
 R/getCountDensity.R                   |   22 +
 R/getEpsilon.R                        |   22 +
 R/getNegativeLogLikelihoods.R         |   27 +
 R/getPi.R                             |   17 +
 R/getZ.R                              |   29 +
 R/isItStillActive.R                   |   24 +
 R/loadBiom.R                          |   19 +
 R/loadMeta.R                          |   26 +
 R/loadMetaQ.R                         |   28 +
 R/loadPhenoData.R                     |   52 ++
 R/mergeMRexperiments.R                |  103 ++++
 R/misc.R                              |   70 +++
 R/plotBubble.R                        |   96 ++++
 R/plotCorr.R                          |   35 ++
 R/plotFeature.R                       |   73 +++
 R/plotGenus.R                         |   69 +++
 R/plotMRheatmap.R                     |   37 ++
 R/plotOTU.R                           |   64 +++
 R/plotOrd.R                           |   59 ++
 R/plotRare.R                          |   42 ++
 R/zigControl.R                        |   29 +
 README.md                             |   32 ++
 build/vignette.rds                    |  Bin 0 -> 296 bytes
 data/lungData.rda                     |  Bin 0 -> 290918 bytes
 data/mouseData.rda                    |  Bin 0 -> 197032 bytes
 debian/README.test                    |   10 -
 debian/changelog                      |   22 -
 debian/compat                         |    1 -
 debian/control                        |   34 --
 debian/copyright                      |  106 ----
 debian/docs                           |    3 -
 debian/rules                          |    4 -
 debian/source/format                  |    1 -
 debian/tests/control                  |    3 -
 debian/tests/run-unit-test            |   13 -
 debian/watch                          |    3 -
 inst/CITATION                         |   50 ++
 inst/doc/fitTimeSeries.R              |  120 ++++
 inst/doc/fitTimeSeries.Rnw            |  278 +++++++++
 inst/doc/fitTimeSeries.pdf            |  Bin 0 -> 241572 bytes
 inst/doc/metagenomeSeq.R              |  299 ++++++++++
 inst/doc/metagenomeSeq.Rnw            |  725 ++++++++++++++++++++++++
 inst/doc/metagenomeSeq.pdf            |  Bin 0 -> 998018 bytes
 inst/extdata/CHK_NAME.otus.count.csv  | 1001 +++++++++++++++++++++++++++++++++
 inst/extdata/CHK_clinical.csv         |   79 +++
 inst/extdata/CHK_otus.taxonomy.csv    | 1001 +++++++++++++++++++++++++++++++++
 inst/extdata/lungfit.rds              |  Bin 0 -> 93152 bytes
 man/MRcoefs.Rd                        |   72 +++
 man/MRcounts.Rd                       |   37 ++
 man/MRexperiment-class.Rd             |   61 ++
 man/MRexperiment2biom.Rd              |   32 ++
 man/MRfulltable.Rd                    |   77 +++
 man/MRtable.Rd                        |   75 +++
 man/aggregateBySample.Rd              |   39 ++
 man/aggregateByTaxonomy.Rd            |   49 ++
 man/biom2MRexperiment.Rd              |   29 +
 man/calcNormFactors.Rd                |   29 +
 man/calcPosComponent.Rd               |   22 +
 man/calcShrinkParameters.Rd           |   24 +
 man/calcStandardError.Rd              |   28 +
 man/calcZeroAdjustment.Rd             |   28 +
 man/calcZeroComponent.Rd              |   22 +
 man/calculateEffectiveSamples.Rd      |   24 +
 man/correctIndices.Rd                 |   36 ++
 man/correlationTest.Rd                |   61 ++
 man/cumNorm.Rd                        |   32 ++
 man/cumNormMat.Rd                     |   33 ++
 man/cumNormStat.Rd                    |   39 ++
 man/cumNormStatFast.Rd                |   36 ++
 man/doCountMStep.Rd                   |   45 ++
 man/doEStep.Rd                        |   37 ++
 man/doZeroMStep.Rd                    |   38 ++
 man/expSummary.Rd                     |   31 +
 man/exportMat.Rd                      |   40 ++
 man/exportStats.Rd                    |   35 ++
 man/extractMR.Rd                      |   30 +
 man/filterData.Rd                     |   29 +
 man/fitDO.Rd                          |   51 ++
 man/fitFeatureModel.Rd                |   53 ++
 man/fitLogNormal.Rd                   |   46 ++
 man/fitMultipleTimeSeries.Rd          |   45 ++
 man/fitPA.Rd                          |   45 ++
 man/fitSSTimeSeries.Rd                |   73 +++
 man/fitTimeSeries.Rd                  |   68 +++
 man/fitZeroLogNormal.Rd               |   43 ++
 man/fitZig.Rd                         |   75 +++
 man/getCountDensity.Rd                |   32 ++
 man/getEpsilon.Rd                     |   31 +
 man/getNegativeLogLikelihoods.Rd      |   33 ++
 man/getPi.Rd                          |   26 +
 man/getZ.Rd                           |   33 ++
 man/isItStillActive.Rd                |   30 +
 man/libSize-set.Rd                    |   32 ++
 man/libSize.Rd                        |   30 +
 man/loadBiom.Rd                       |   28 +
 man/loadMeta.Rd                       |   30 +
 man/loadMetaQ.Rd                      |   27 +
 man/loadPhenoData.Rd                  |   33 ++
 man/lungData.Rd                       |   12 +
 man/makeLabels.Rd                     |   27 +
 man/mergeMRexperiments.Rd             |   32 ++
 man/mergeTable.Rd                     |   20 +
 man/metagenomeSeq-deprecated.Rd       |   30 +
 man/metagenomeSeq-package.Rd          |   21 +
 man/mouseData.Rd                      |   12 +
 man/newMRexperiment.Rd                |   46 ++
 man/normFactors-set.Rd                |   32 ++
 man/normFactors.Rd                    |   29 +
 man/plotBubble.Rd                     |   55 ++
 man/plotClassTimeSeries.Rd            |   46 ++
 man/plotCorr.Rd                       |   40 ++
 man/plotFeature.Rd                    |   54 ++
 man/plotGenus.Rd                      |   60 ++
 man/plotMRheatmap.Rd                  |   46 ++
 man/plotOTU.Rd                        |   55 ++
 man/plotOrd.Rd                        |   51 ++
 man/plotRare.Rd                       |   37 ++
 man/plotTimeSeries.Rd                 |   41 ++
 man/posteriorProbs.Rd                 |   41 ++
 man/returnAppropriateObj.Rd           |   31 +
 man/ssFit.Rd                          |   48 ++
 man/ssIntervalCandidate.Rd            |   34 ++
 man/ssPerm.Rd                         |   28 +
 man/ssPermAnalysis.Rd                 |   41 ++
 man/trapz.Rd                          |   37 ++
 man/ts2MRexperiment.Rd                |   46 ++
 man/uniqueFeatures.Rd                 |   31 +
 man/zigControl.Rd                     |   38 ++
 tests/testthat.R                      |   17 +
 tests/testthat/test-fitZig.R          |   58 ++
 tests/testthat/test-norm.R            |   35 ++
 vignettes/fitTimeSeries.Rnw           |  278 +++++++++
 vignettes/fitTimeSeries.bib           |   40 ++
 vignettes/metagenomeSeq.Rnw           |  725 ++++++++++++++++++++++++
 vignettes/metagenomeSeq.bib           |   33 ++
 vignettes/metagenomeSeq_figure1.png   |  Bin 0 -> 26433 bytes
 vignettes/metagenomeSeq_figure2.png   |  Bin 0 -> 313594 bytes
 vignettes/overview.pdf                |  Bin 0 -> 36144 bytes
 169 files changed, 12082 insertions(+), 200 deletions(-)

diff --git a/DESCRIPTION b/DESCRIPTION
new file mode 100644
index 0000000..3b8cc1b
--- /dev/null
+++ b/DESCRIPTION
@@ -0,0 +1,29 @@
+Package: metagenomeSeq
+Title: Statistical analysis for sparse high-throughput sequencing
+Version: 1.16.0
+Date: 2016-07-21
+Author: Joseph Nathaniel Paulson, Hisham Talukder, Mihai Pop, Hector Corrada
+    Bravo
+Maintainer: Joseph N. Paulson <jpaulson at jimmy.harvard.edu>
+Description: metagenomeSeq is designed to determine features (be it
+    Operational Taxanomic Unit (OTU), species, etc.) that are
+    differentially abundant between two or more groups of multiple
+    samples. metagenomeSeq is designed to address the effects of
+    both normalization and under-sampling of microbial communities
+    on disease association detection and the testing of feature
+    correlations.
+License: Artistic-2.0
+Depends: R(>= 3.0), Biobase, limma, glmnet, methods, RColorBrewer
+Suggests: annotate, BiocGenerics, biomformat, knitr, gss, testthat (>=
+        0.8), vegan, interactiveDisplay
+Imports: parallel, matrixStats, foreach, Matrix, gplots
+VignetteBuilder: knitr
+URL: https://github.com/nosson/metagenomeSeq/
+BugReports: https://github.com/nosson/metagenomeSeq/issues
+biocViews: Classification, Clustering, GeneticVariability,
+        DifferentialExpression, Microbiome, Metagenomics,
+        Normalization, Visualization, MultipleComparison, Sequencing,
+        Software
+RoxygenNote: 5.0.1
+NeedsCompilation: no
+Packaged: 2016-10-17 23:12:48 UTC; biocbuild
diff --git a/NAMESPACE b/NAMESPACE
new file mode 100644
index 0000000..afb0a56
--- /dev/null
+++ b/NAMESPACE
@@ -0,0 +1,104 @@
+import(Biobase)
+import(RColorBrewer)
+import(limma)
+import(glmnet)
+import(methods)
+importFrom(parallel,makeCluster)
+importFrom(parallel,stopCluster)
+importFrom(parallel,parRapply)
+importFrom(parallel,mclapply)
+importFrom(matrixStats,colQuantiles)
+importFrom(matrixStats,rowSds)
+importFrom(gplots,heatmap.2)
+importFrom(foreach,'%dopar%')
+importFrom(foreach,foreach)
+importFrom(Matrix,bdiag)
+importFrom("graphics", "abline", "axis", "lines", "plot", "points",
+             "polygon")
+importFrom("grDevices", "col2rgb", "rgb")
+importFrom("stats", "approx", "approxfun", "binomial", "cmdscale",
+             "coefficients", "cor", "cor.test", "density", "dist",
+             "dnorm", "fisher.test", "glm.fit", "hclust", "lm.fit",
+             "median", "model.matrix", "p.adjust", "plogis", "pnorm",
+             "prcomp", "predict", "qlogis", "quantile", "residuals",
+             "sd", "var")
+importFrom("utils", "packageVersion", "read.delim", "read.table",
+             "tail")
+exportClasses( "MRexperiment" )
+
+exportMethods(
+"[",
+"colSums",
+"rowSums",
+"colMeans",
+"rowMeans",
+"normFactors",
+"normFactors<-",
+"libSize",
+"libSize<-"
+)
+
+export(
+aggregateByTaxonomy,
+aggTax,
+aggregateBySample,
+aggSamp,
+biom2MRexperiment,
+calculateEffectiveSamples,
+calcNormFactors,
+correlationTest,
+correctIndices,
+cumNorm,
+cumNormMat,
+cumNormStat,
+cumNormStatFast,
+expSummary,
+exportMat,
+exportStats,
+fitDO,
+fitMeta,
+fitFeatureModel,
+fitLogNormal,
+fitPA,
+fitMultipleTimeSeries,
+fitSSTimeSeries,
+fitTimeSeries,
+fitZig,
+filterData,
+load_biom,
+load_meta,
+load_metaQ,
+load_phenoData,
+loadBiom,
+loadMeta,
+loadMetaQ,
+loadPhenoData,
+makeLabels,
+mergeMRexperiments,
+MRcoefs,
+MRcounts,
+MRfulltable,
+MRtable,
+MRexperiment2biom,
+plotBubble,
+plotCorr,
+plotGenus,
+plotMRheatmap,
+plotOTU,
+plotOrd,
+plotRare,
+plotFeature,
+plotTimeSeries,
+plotClassTimeSeries,
+uniqueFeatures,
+returnAppropriateObj,
+ssFit,
+ssIntervalCandidate,
+ssPerm,
+ssPermAnalysis,
+ts2MRexperiment,
+trapz,
+zigControl,
+newMRexperiment,
+posteriorProbs
+)
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..ca87f7f
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,71 @@
+version 1.15.xx (2016)
+	+ Added 'mergeMRexperiment' function
+	+ Added 'normFactors' and 'libSize' generics
+	+ Added 'fitMultipleTimeSeries' function
+	+ Replaced RUnit with testthat library for unit testing
+	+ Adding multiple upgrades and changes throughout
+	+ Deprecated the load_* functions and created load* function.
+version 1.13.xx (2015)
+	+ Upgrade support for biom-format vs. 2.0
+	+ Fixed issue - "MRtable, etc will report NA rows when user requests more features than available"
+	+ Fixed s2 miscalculation in calcZeroComponent
+version 1.11.xx (2015)
+	+ Adding fitFeatureModel - a feature based zero-inflated log-normal model.
+	+ Added MRcoefs,MRtable,MRfulltable support for fitFeatureModel output.
+	+ Added mention in vignette.
+	+ Added support for normalizing matrices instead of just MRexperiment objects.
+	+ Fixed cumNormStat's non-default qFlag option 
+version 1.9.xx (2015)
+	+ Added flexibility in formula choice for fitTimeSeries
+	+ Added readability in ssPermAnalysis
+	+ Fixed default in plotClassTimeSeries (include = c("1",...))
+	+ Added fitTimeSeries vignette
+	+ Removed interactiveDisplay to namespace - moved to suggests
+	+ Fixed ordering of MRtable,MRfulltable first four columns
+	+ modified df estimated through responsibilities
+	+ renamed fitMeta to fitLogNormal - a more appropriate name
+version 1.7.xx (2014-05-07)
+	+ Added function plotBubble
+	+ Added parallel (multi-core) options to fitPA, fitDO
+	+ Fixed bug for fitMeta when useCSSoffset=FALSE and model matrix ncol==2
+	+ (1.7.10) Updated default quantile estimate (.5) for low estimates
+	+ (1.7.10) Added short description on how to do multiple group comparisons
+	+ (1.7.15) Output of fitZig (eb) is now a result of limma::eBayes instead of limma::ebayes
+	+ (1.7.16) plotMRheatmap allows for sorting by any stat (not just sd)
+	+ (1.7.18) fitTimeSeries Including times series method for differentially abundant time intervals
+	+ (1.7.20) Fixed minor bug for OTU level time series analyses and added plotClassTimeSeries
+	+ (1.7.26) Added warning / fix if any samples are empty in cumNormStat
+	+ (1.7.27) Added a few unit tests
+	+ (1.7.29) Added interactiveDisplay to namespace (display function allows interactive exploration / plots through browser)
+version 1.5.xx (2014-04-17)
+	+ Incorporating biom-format support with the biom2MRexperiment, MRexperiment2biom and load_biome function.
+	+ Added uniqueFeatures, filterData, aggregateByTaxonomy / aggTax, plotFeature and calculateEffectiveSamples functions.
+	+ Renamed MRfisher to fitPA (presence-absence fisher test).
+	+ Added warnings for normalization 
+	+ Added fitDO (Discovery odds ratio test) and fitMeta (original metastats).
+	+ Added match.call() info to fitZig output
+	+ Fixed missing E-Step bounds
+version 1.2.xx (2013-08-20)
+	+ Our paper got accepted and is available!
+        + Added methods for MRexperiment objects (colSums,colMeans,rowSums,rowMeans, usage is for example colSums(obj) or colSums(obj,norm=TRUE)) (09-25)
+        + Added two new functions, plotOrd and plotRare - a function to plot PCA/MDS coordinates and rarefaction effect (09-04,09-18)
+        + Updated MRfisher to include thresholding for presence-absence testing (08-19)	
+	+ Updated comments (roxygen2) style for all the functions using the Rd2roxygen package (07-13)
+	+ Updated plotCorr and plotMRheatmap to allow various colors/not require trials(07-13)
+	+ Rewrote vignette (and switched to knitr) 
+
+version 1.1.xx (last update 2013-06-25)	
+	+ Rewrote load_meta and load_metaQ to be faster/use less memory
+	+ Modified cumNormStat to remove NA samples from calculations (example would be samples without any counts)
+	+ Re-added plotGenus' jitter
+	+ Fixed uniqueNames call in the MR tables
+
+	+ Changed thanks to Kasper Daniel Hansen's suggestions the following:
+		plotOTU and plotGenus both have much better auto-generated axis
+		MRtable, MRfulltable, MRcoefs have a sort by p-value option now
+		MRtable, MRfulltable, MRcoefs now have an extra option to include unique numbers for OTU features (default would automatically add them previously)
+		cumNorm.R - now returns the object as well - not just replacing the environment
+	0 Still need to turn the fitZig output to S3, consider subsetting function address low p-values
+
+version 1.0.0: (2013-03-29)
+	+ Release!
diff --git a/R/MRcoefs.R b/R/MRcoefs.R
new file mode 100644
index 0000000..40a4f87
--- /dev/null
+++ b/R/MRcoefs.R
@@ -0,0 +1,114 @@
+#' Table of top-ranked features from fitZig or fitFeatureModel
+#' 
+#' Extract a table of the top-ranked features from a linear model fit. This
+#' function will be updated soon to provide better flexibility similar to
+#' limma's topTable.
+#' 
+#' 
+#' @param obj Output of fitFeatureModel or fitZig.
+#' @param by Column number or column name specifying which coefficient or
+#' contrast of the linear model is of interest.
+#' @param coef Column number(s) or column name(s) specifying which coefficient
+#' or contrast of the linear model to display.
+#' @param number The number of bacterial features to pick out.
+#' @param taxa Taxa list.
+#' @param uniqueNames Number the various taxa.
+#' @param adjustMethod Method to adjust p-values by. Default is "FDR". Options
+#' include "holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr",
+#' "none". See \code{\link{p.adjust}} for more details.
+#' @param group One of five choices, 0,1,2,3,4. 0: the sort is ordered by a
+#' decreasing absolute value coefficient fit. 1: the sort is ordered by the raw
+#' coefficient fit in decreasing order. 2: the sort is ordered by the raw
+#' coefficient fit in increasing order. 3: the sort is ordered by the p-value
+#' of the coefficient fit in increasing order. 4: no sorting.
+#' @param eff Filter features to have at least a "eff" quantile or number of effective samples.
+#' @param numberEff Boolean, whether eff should represent quantile (default/FALSE) or number.
+#' @param counts Filter features to have at least 'counts' counts.
+#' @param file Name of output file, including location, to save the table.
+#' @return Table of the top-ranked features determined by the linear fit's
+#' coefficient.
+#' @seealso \code{\link{fitZig}} \code{\link{fitFeatureModel}} \code{\link{MRtable}} \code{\link{MRfulltable}}
+#' @examples
+#' 
+#' data(lungData)
+#' k = grep("Extraction.Control",pData(lungData)$SampleType)
+#' lungTrim = lungData[,-k]
+#' lungTrim=filterData(lungTrim,present=30)
+#' lungTrim=cumNorm(lungTrim,p=0.5)
+#' smokingStatus = pData(lungTrim)$SmokingStatus
+#' mod = model.matrix(~smokingStatus)
+#' fit = fitZig(obj = lungTrim,mod=mod)
+#' head(MRcoefs(fit))
+#' ####
+#' fit = fitFeatureModel(obj = lungTrim,mod=mod)
+#' head(MRcoefs(fit))
+#'
+MRcoefs<-function(obj,by=2,coef=NULL,number=10,taxa=obj$taxa,
+    uniqueNames=FALSE,adjustMethod="fdr",group=0,eff=0,numberEff=FALSE,counts=0,file=NULL){
+
+    if(length(grep("fitFeatureModel",obj$call))){
+        groups = factor(obj$design[,by])
+        by = "logFC"; coef = 1:2;
+        tb = data.frame(logFC=obj$fitZeroLogNormal$logFC,se=obj$fitZeroLogNormal$se)
+        p  = obj$pvalues
+    } else {
+        tb = obj$fit$coefficients
+        if(is.null(coef)){
+            coef = 1:ncol(tb)
+        }
+        p=obj$eb$p.value[,by]
+        groups = factor(obj$fit$design[,by])
+        if(eff>0){
+            effectiveSamples = calculateEffectiveSamples(obj)
+            if(numberEff == FALSE){
+                valid = which(effectiveSamples>=quantile(effectiveSamples,p=eff,na.rm=TRUE))
+            } else {
+                valid = which(effectiveSamples>=eff)
+            }
+        }
+    }
+
+    tx = as.character(taxa)
+    if(uniqueNames==TRUE){
+        for (nm in unique(tx)) {
+            ii=which(tx==nm)
+            tx[ii]=paste(tx[ii],seq_along(ii),sep=":")
+        }
+    }
+    padj = p.adjust(p,method=adjustMethod)
+
+    if(group==0){
+        srt = order(abs(tb[,by]),decreasing=TRUE)
+    } else if(group==1){
+        srt = order((tb[,by]),decreasing=TRUE)
+    } else if(group==2){
+        srt = order((tb[,by]),decreasing=FALSE)
+    } else if(group==3){
+        srt = order(p,decreasing=FALSE)
+    } else {
+        srt = 1:length(padj);
+    }
+    
+    valid = 1:length(padj);
+    if(counts>0){
+        np=rowSums(obj$counts);
+        valid = intersect(valid,which(np>=counts));
+    }
+    srt = srt[which(srt%in%valid)][1:min(number,nrow(tb))];
+    
+    mat = cbind(tb[,coef],p)
+    mat = cbind(mat,padj)
+    rownames(mat) = tx;
+    mat = mat[srt,]
+    
+    nm = c(colnames(tb)[coef],"pvalues","adjPvalues")
+    colnames(mat) = nm
+
+    if(!is.null(file)){
+        nm = c("Taxa",nm)
+        mat2 = cbind(rownames(mat),mat)
+        mat2 = rbind(nm,mat2)
+        write(t(mat2),ncolumns=ncol(mat2),file=file,sep="\t")
+    }
+    return(as.data.frame(mat))
+}
diff --git a/R/MRexperiment2biom.R b/R/MRexperiment2biom.R
new file mode 100644
index 0000000..908bbb8
--- /dev/null
+++ b/R/MRexperiment2biom.R
@@ -0,0 +1,84 @@
+#' MRexperiment to biom objects
+#' 
+#' Wrapper to convert MRexperiment objects to biom objects.
+#' 
+#' @param obj The MRexperiment object.
+#' @param id Optional id for the biom matrix.
+#' @param norm normalize count table
+#' @param log log2 transform count table
+#' @param sl scaling factor for normalized counts.
+#' @param qiimeVersion Format fData according to QIIME specifications (assumes only taxonomy in fData).
+#' @return A biom object.
+#' @seealso \code{\link{loadMeta}} \code{\link{loadPhenoData}} \code{\link{newMRexperiment}} \code{\link{loadBiom}} \code{\link{biom2MRexperiment}}
+MRexperiment2biom <- function(obj,id=NULL,norm=FALSE,log=FALSE,sl=1000,qiimeVersion=TRUE){
+    requireNamespace("biomformat")
+    id = id
+    format = "Biological Observation Matrix 1.0.0-dev"
+    format_url = "http://biom-format.org/documentation/format_versions/biom-1.0.html"
+    type = "OTU table"
+    generated_by = sprintf("metagenomeSeq %s",packageVersion("metagenomeSeq"))
+    date = as.character(Sys.time())
+    matrix_type = "dense"
+    matrix_element_type = "int"
+    if( (norm==TRUE) | (log == TRUE) ) {
+        matrix_element_type = "float"
+    }
+    
+    data  = MRcounts(obj,norm=norm,log=log,sl=sl)
+    shape = dim(data)
+
+    rows   = metadata(fData(obj),qiimeVersion=qiimeVersion)
+    columns= metadata(pData(obj))
+
+    data = as.list(as.data.frame(t(data)))
+    names(data) <- NULL
+
+    biomlist = list(id=id,format=format,format_url=format_url,type=type,generated_by=generated_by,
+                    date=date,matrix_type=matrix_type,matrix_element_type=matrix_element_type,shape=shape,
+                    rows=rows,columns=columns,data=data)
+    biomformat::biom(biomlist)
+}
+
+metadata <- function(df,qiimeVersion=FALSE){
+    if(ncol(df)>0){
+        for(i in 1:ncol(df)){
+            df[,i] = as.character(df[,i])
+        }
+    }
+    if(qiimeVersion==TRUE){
+        if(ncol(df)==0){
+            meta = lapply(1:nrow(df),function(i){
+                    ll = list(id=rownames(df)[i],metadata=NULL)
+                    ll
+                })
+        } else {
+        	meta = lapply(1:nrow(df),function(i){
+            	    ll = list(id=rownames(df)[i], 
+	                metadata=list("taxonomy" = paste(df[i,])))
+                    NAvalues = grep("NA$",ll$metadata$taxonomy)
+                    if(length(NAvalues)>0){
+                        k = NAvalues[1]
+                        ll$metadata$taxonomy = paste(df[i,1:(k-1)])
+                    }
+                	ll
+            	})
+        }
+        return(meta)
+    } else {
+        if(ncol(df)==0){
+            meta = lapply(1:nrow(df),function(i){
+                    ll = list(id=rownames(df)[i],metadata=NULL)
+                    ll
+                })
+        } else {
+            meta  = lapply(1:nrow(df),function(i){
+                    ll = list(id=rownames(df)[i],
+                    metadata=lapply(1:ncol(df),
+                        function(j){as.character(df[i,j])}))
+                    names(ll$metadata) = colnames(df)
+                    ll
+                })            
+        }
+        return(meta)
+    }
+}
diff --git a/R/MRfulltable.R b/R/MRfulltable.R
new file mode 100644
index 0000000..92792c6
--- /dev/null
+++ b/R/MRfulltable.R
@@ -0,0 +1,136 @@
+#' Table of top microbial marker gene from linear model fit including sequence
+#' information
+#' 
+#' Extract a table of the top-ranked features from a linear model fit. This
+#' function will be updated soon to provide better flexibility similar to
+#' limma's topTable. This function differs from \code{link{MRcoefs}} in that it
+#' provides other information about the presence or absence of features to help
+#' ensure significant features called are moderately present.
+#' 
+#' 
+#' @param obj A list containing the linear model fit produced by lmFit through
+#' fitZig.
+#' @param by Column number or column name specifying which coefficient or
+#' contrast of the linear model is of interest.
+#' @param coef Column number(s) or column name(s) specifying which coefficient
+#' or contrast of the linear model to display.
+#' @param number The number of bacterial features to pick out.
+#' @param taxa Taxa list.
+#' @param uniqueNames Number the various taxa.
+#' @param adjustMethod Method to adjust p-values by. Default is "FDR". Options
+#' include "holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr",
+#' "none". See \code{\link{p.adjust}} for more details.
+#' @param group One of five choices: 0,1,2,3,4. 0: the sort is ordered by a
+#' decreasing absolute value coefficient fit. 1: the sort is ordered by the raw
+#' coefficient fit in decreasing order. 2: the sort is ordered by the raw
+#' coefficient fit in increasing order. 3: the sort is ordered by the p-value
+#' of the coefficient fit in increasing order. 4: no sorting.
+#' @param eff Filter features to have at least a "eff" quantile or number of effective samples.
+#' @param numberEff Boolean, whether eff should represent quantile (default/FALSE) or number.
+#' @param ncounts Filter features to those with at least 'counts' counts.
+#' @param file Name of output file, including location, to save the table.
+#' @return Table of the top-ranked features determined by the linear fit's
+#' coefficient.
+#' @seealso \code{\link{fitZig}} \code{\link{fitFeatureModel}} \code{\link{MRcoefs}} \code{\link{MRtable}}
+#' \code{\link{fitPA}}
+#' @examples
+#' 
+#' data(lungData)
+#' k = grep("Extraction.Control",pData(lungData)$SampleType)
+#' lungTrim = lungData[,-k]
+#' lungTrim=filterData(lungTrim,present=30)
+#' lungTrim=cumNorm(lungTrim,p=0.5)
+#' smokingStatus = pData(lungTrim)$SmokingStatus
+#' mod = model.matrix(~smokingStatus)
+#' fit = fitZig(obj = lungTrim,mod=mod)
+#' # head(MRfulltable(fit))
+#' ####
+#' fit = fitFeatureModel(obj = lungTrim,mod=mod)
+#' # head(MRfulltable(fit))
+#'
+MRfulltable<-function(obj,by=2,coef=NULL,number=10,taxa=obj$taxa,
+    uniqueNames=FALSE,adjustMethod="fdr",group=0,eff=0,numberEff=FALSE,ncounts=0,file=NULL){
+    
+    if(length(grep("fitFeatureModel",obj$call))){
+        groups = factor(obj$design[,by])
+        by = "logFC"; coef = 1:2;
+        tb = data.frame(logFC=obj$fitZeroLogNormal$logFC,se=obj$fitZeroLogNormal$se)
+        p  = obj$pvalues
+    } else {
+        tb = obj$fit$coefficients
+        if(is.null(coef)){
+            coef = 1:ncol(tb)
+        }
+        p=obj$eb$p.value[,by]
+        groups = factor(obj$fit$design[,by])
+        if(eff>0){
+            effectiveSamples = calculateEffectiveSamples(obj)
+            if(numberEff == FALSE){
+                valid = which(effectiveSamples>=quantile(effectiveSamples,p=eff,na.rm=TRUE))
+            } else {
+                valid = which(effectiveSamples>=eff)
+            }
+        }
+    }
+
+    tx = as.character(taxa)
+    if(uniqueNames==TRUE){
+        for (nm in unique(tx)) {
+            ii=which(tx==nm)
+            tx[ii]=paste(tx[ii],seq_along(ii),sep=":")
+        }
+    }
+    padj = p.adjust(p,method=adjustMethod)
+    cnts = obj$counts
+    yy = cnts>0
+    
+    pa = matrix(unlist(fitPA(obj$counts,groups)),ncol=5)
+    
+    np0 = rowSums(yy[,groups==0])
+    np1 = rowSums(yy[,groups==1])
+
+    nc0 = rowSums(cnts[,groups==0])
+    nc1 = rowSums(cnts[,groups==1])
+
+    if(group==0){
+        srt = order(abs(tb[,by]),decreasing=TRUE)
+    } else if(group==1){
+        srt = order((tb[,by]),decreasing=TRUE)
+    } else if(group==2){
+        srt = order((tb[,by]),decreasing=FALSE)
+    } else if(group==3){
+        srt = order(p,decreasing=FALSE)
+    } else {
+        srt = 1:length(padj)
+    }
+
+    valid = 1:length(padj)
+    if(ncounts>0){
+        np=rowSums(cbind(np0,np1))
+        valid = intersect(valid,which(np>=ncounts))
+    }
+    srt = srt[which(srt%in%valid)][1:min(number,nrow(tb))]
+
+    mat = cbind(np0,np1)
+    mat = cbind(mat,nc0)
+    mat = cbind(mat,nc1)
+    mat = cbind(mat,pa)
+    mat = cbind(mat,tb[,coef])
+    mat = cbind(mat,p)
+    mat = cbind(mat,padj)
+    rownames(mat) = tx
+    mat = mat[srt,]
+
+    nm = c("+samples in group 0","+samples in group 1","counts in group 0",
+        "counts in group 1",c("oddsRatio","lower","upper","fisherP","fisherAdjP"),
+    colnames(tb)[coef],"pvalues","adjPvalues")
+    colnames(mat) = nm
+
+    if(!is.null(file)){
+        nm = c("Taxa",nm)
+        mat2 = cbind(rownames(mat),mat)
+        mat2 = rbind(nm,mat2)
+        write(t(mat2),ncolumns=ncol(mat2),file=file,sep="\t")
+    }
+    return(as.data.frame(mat))
+}
diff --git a/R/MRtable.R b/R/MRtable.R
new file mode 100644
index 0000000..214ff16
--- /dev/null
+++ b/R/MRtable.R
@@ -0,0 +1,130 @@
+#' Table of top microbial marker gene from linear model fit including sequence
+#' information
+#' 
+#' Extract a table of the top-ranked features from a linear model fit. This
+#' function will be updated soon to provide better flexibility similar to
+#' limma's topTable. This function differs from \code{link{MRcoefs}} in that it
+#' provides other information about the presence or absence of features to help
+#' ensure significant features called are moderately present.
+#' 
+#' 
+#' @param obj Output of fitFeatureModel or fitZig.
+#' @param by Column number or column name specifying which coefficient or
+#' contrast of the linear model is of interest.
+#' @param coef Column number(s) or column name(s) specifying which coefficient
+#' or contrast of the linear model to display.
+#' @param number The number of bacterial features to pick out.
+#' @param taxa Taxa list.
+#' @param uniqueNames Number the various taxa.
+#' @param adjustMethod Method to adjust p-values by. Default is "FDR". Options
+#' include "holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr",
+#' "none". See \code{\link{p.adjust}} for more details.
+#' @param group One of five choices, 0,1,2,3,4. 0: the sort is ordered by a
+#' decreasing absolute value coefficient fit. 1: the sort is ordered by the raw
+#' coefficient fit in decreasing order. 2: the sort is ordered by the raw
+#' coefficient fit in increasing order. 3: the sort is ordered by the p-value
+#' of the coefficient fit in increasing order. 4: no sorting.
+#' @param eff Filter features to have at least a "eff" quantile or number of effective samples.
+#' @param numberEff Boolean, whether eff should represent quantile (default/FALSE) or number.
+#' @param ncounts Filter features to have at least 'counts' of counts.
+#' @param file Name of file, including location, to save the table.
+#' @return Table of the top-ranked features determined by the linear fit's
+#' coefficient.
+#' @seealso \code{\link{fitZig}} \code{\link{fitFeatureModel}} \code{\link{MRcoefs}} \code{\link{MRfulltable}}
+#' @examples
+#' 
+#' data(lungData)
+#' k = grep("Extraction.Control",pData(lungData)$SampleType)
+#' lungTrim = lungData[,-k]
+#' lungTrim=filterData(lungTrim,present=30)
+#' lungTrim=cumNorm(lungTrim,p=0.5)
+#' smokingStatus = pData(lungTrim)$SmokingStatus
+#' mod = model.matrix(~smokingStatus)
+#' fit = fitZig(obj = lungTrim,mod=mod)
+#' head(MRtable(fit))
+#' ####
+#' fit = fitFeatureModel(obj = lungTrim,mod=mod)
+#' head(MRtable(fit))
+#'
+MRtable<-function(obj,by=2,coef=NULL,number=10,taxa=obj$taxa,
+    uniqueNames=FALSE,adjustMethod="fdr",group=0,eff=0,numberEff=FALSE,ncounts=0,file=NULL){
+
+    if(length(grep("fitFeatureModel",obj$call))){
+        groups = factor(obj$design[,by])
+        by = "logFC"; coef = 1:2;
+        tb = data.frame(logFC=obj$fitZeroLogNormal$logFC,se=obj$fitZeroLogNormal$se)
+        p  = obj$pvalues
+    } else {
+        tb = obj$fit$coefficients
+        if(is.null(coef)){
+            coef = 1:ncol(tb)
+        }
+        p=obj$eb$p.value[,by]
+        groups = factor(obj$fit$design[,by])
+        if(eff>0){
+            effectiveSamples = calculateEffectiveSamples(obj)
+            if(numberEff == FALSE){
+                valid = which(effectiveSamples>=quantile(effectiveSamples,p=eff,na.rm=TRUE))
+            } else {
+                valid = which(effectiveSamples>=eff)
+            }
+        }        
+    }
+    
+    tx = as.character(taxa)
+    if(uniqueNames==TRUE){
+        for (nm in unique(tx)) {
+            ii=which(tx==nm)
+            tx[ii]=paste(tx[ii],seq_along(ii),sep=":")
+        }
+    }
+    padj = p.adjust(p,method=adjustMethod)
+    cnts = obj$counts
+    posIndices = cnts>0
+    
+    np0 = rowSums(posIndices[,groups==0])
+    np1 = rowSums(posIndices[,groups==1])
+
+    nc0 = rowSums(cnts[,groups==0])
+    nc1 = rowSums(cnts[,groups==1])
+
+    if(group==0){
+        srt = order(abs(tb[,by]),decreasing=TRUE)
+    } else if(group==1){
+        srt = order((tb[,by]),decreasing=TRUE)
+    } else if(group==2){
+        srt = order((tb[,by]),decreasing=FALSE)
+    } else if(group==3){
+        srt = order(p,decreasing=FALSE)
+    } else {
+        srt = 1:length(padj)
+    }
+
+    valid = 1:length(padj)
+    if(ncounts>0){
+        np=rowSums(cbind(np0,np1))
+        valid = intersect(valid,which(np>=ncounts))
+    }
+    srt = srt[which(srt%in%valid)][1:min(number,nrow(tb))]
+
+    mat = cbind(np0,np1)
+    mat = cbind(mat,nc0)
+    mat = cbind(mat,nc1)
+    mat = cbind(mat,tb[,coef])
+    mat = cbind(mat,p)
+    mat = cbind(mat,padj)
+    rownames(mat) = tx
+    mat = mat[srt,]
+
+    nm = c("+samples in group 0","+samples in group 1","counts in group 0",
+        "counts in group 1",colnames(tb)[coef],"pvalues","adjPvalues")
+    colnames(mat) = nm
+
+    if(!is.null(file)){
+        nm = c("Taxa",nm)
+        mat2 = cbind(rownames(mat),mat)
+        mat2 = rbind(nm,mat2)
+        write(t(mat2),ncolumns=ncol(mat2),file=file,sep="\t")
+    }
+    return(as.data.frame(mat))
+}
diff --git a/R/aggregateBySample.R b/R/aggregateBySample.R
new file mode 100644
index 0000000..be9a9e7
--- /dev/null
+++ b/R/aggregateBySample.R
@@ -0,0 +1,64 @@
+#' Aggregates a MRexperiment object or counts matrix to by a factor.
+#' 
+#' Using the phenoData information in the MRexperiment, calling aggregateBySample on a
+#' MRexperiment and a particular phenoData column (i.e. 'diet') will aggregate counts
+#' using the aggfun function (default rowMeans). Possible aggfun alternatives
+#' include rowMeans and rowMedians.
+#' 
+#' @param obj A MRexperiment object or count matrix.
+#' @param fct phenoData column name from the MRexperiment object or if count matrix object a vector of labels.
+#' @param aggfun Aggregation function.
+#' @param out Either 'MRexperiment' or 'matrix'
+#' @return An aggregated count matrix or MRexperiment object where the new pData is a vector of `fct` levels.
+#' @aliases aggSamp
+#' @rdname aggregateBySample
+#' @export
+#' @examples
+#' 
+#' data(mouseData)
+#' aggregateBySample(mouseData[1:100,],fct="diet",aggfun=rowSums)
+#' # not run
+#' # aggregateBySample(mouseData,fct="diet",aggfun=matrixStats::rowMedians)
+#' # aggSamp(mouseData,fct='diet',aggfun=rowMaxs)
+#' 
+aggregateBySample<-function(obj,fct,aggfun=rowMeans,out="MRexperiment"){
+	if(class(obj)=="MRexperiment"){
+		mat = MRcounts(obj)
+		if(length(fct)==1) factors = as.character(pData(obj)[,fct])
+		else factors = as.character(fct)
+	} else {
+		mat = obj
+		factors = as.character(fct)
+		if(length(factors)!=ncol(mat)) stop("If input is a count matrix, fct must be a vector of length = ncol(count matrix)")
+	}
+	if(!(out%in%c("MRexperiment","matrix"))){
+		stop("The variable out must either be 'MRexperiment' or 'matrix'")
+	}
+	grps = split(seq_along(factors),factors)
+	
+	newMat = array(NA,dim=c(nrow(obj),length(grps)))
+	for(i in seq_along(grps)){
+		newMat[,i] = aggfun(mat[,grps[[i]],drop=FALSE])
+	}
+	colnames(newMat) = names(grps)
+	rownames(newMat) = rownames(obj)
+	if(out=='matrix') return(newMat)
+	if(out=='MRexperiment'){
+		pd = data.frame(names(grps))
+		colnames(pd) = "phenoData"
+		rownames(pd) = names(grps)
+		pd = as(pd,"AnnotatedDataFrame")
+		if(class(obj)=="MRexperiment"){
+			fd = as(fData(obj),"AnnotatedDataFrame")
+			newObj = newMRexperiment(newMat,featureData=fd,phenoData=pd)
+		} else {
+			newObj = newMRexperiment(newMat,phenoData=pd)
+		}
+		return(newObj)
+	}
+}
+#' @rdname aggregateBySample
+#' @export
+aggSamp<-function(obj,fct,aggfun=rowMeans,out='MRexperiment'){
+	aggregateBySample(obj,fct,aggfun=aggfun,out=out)
+}
diff --git a/R/aggregateByTaxonomy.R b/R/aggregateByTaxonomy.R
new file mode 100644
index 0000000..ffc4645
--- /dev/null
+++ b/R/aggregateByTaxonomy.R
@@ -0,0 +1,77 @@
+#' Aggregates a MRexperiment object or counts matrix to a particular level.
+#' 
+#' Using the featureData information in the MRexperiment, calling aggregateByTaxonomy on a
+#' MRexperiment and a particular featureData column (i.e. 'genus') will aggregate counts
+#' to the desired level using the aggfun function (default colSums). Possible aggfun alternatives
+#' include colMeans and colMedians.
+#' 
+#' @param obj A MRexperiment object or count matrix.
+#' @param lvl featureData column name from the MRexperiment object or if count matrix object a vector of labels.
+#' @param alternate Use the rowname for undefined OTUs instead of aggregating to "no_match".
+#' @param norm Whether to aggregate normalized counts or not.
+#' @param log Whether or not to log2 transform the counts - if MRexperiment object.
+#' @param aggfun Aggregation function.
+#' @param sl scaling value, default is 1000.
+#' @param out Either 'MRexperiment' or 'matrix'
+#' @return An aggregated count matrix.
+#' @aliases aggTax
+#' @rdname aggregateByTaxonomy
+#' @export
+#' @examples
+#' 
+#' data(mouseData)
+#' aggregateByTaxonomy(mouseData[1:100,],lvl="class",norm=TRUE,aggfun=colSums)
+#' # not run
+#' # aggregateByTaxonomy(mouseData,lvl="class",norm=TRUE,aggfun=colMedians)
+#' # aggTax(mouseData,lvl='phylum',norm=FALSE,aggfun=colSums)
+#' 
+aggregateByTaxonomy<-function(obj,lvl,alternate=FALSE,norm=FALSE,log=FALSE,aggfun = colSums,sl=1000,out="MRexperiment"){
+	if(class(obj)=="MRexperiment"){
+		mat = MRcounts(obj,norm=norm,log=log,sl=sl)
+		if(length(lvl)==1) levels = as.character(fData(obj)[,lvl])
+		else levels = as.character(lvl)
+	} else {
+		mat = obj
+		levels = as.character(lvl)
+		if(length(levels)!=nrow(mat)) stop("If input is a count matrix, lvl must be a vector of length = nrow(count matrix)")
+	}
+	if(!(out%in%c("MRexperiment","matrix"))){
+		stop("The variable out must either be 'MRexperiment' or 'matrix'")
+	}
+	
+	nafeatures = is.na(levels)
+	if(length(nafeatures)>0){
+		if(alternate==FALSE){
+			levels[nafeatures] = "no_match"
+		} else {
+			levels[nafeatures] = paste("OTU_",rownames(obj)[nafeatures],sep="")
+		}
+	}
+	grps = split(seq_along(levels),levels)
+	
+	newMat = array(NA,dim=c(length(grps),ncol(obj)))
+	for(i in seq_along(grps)){
+		newMat[i,] = aggfun(mat[grps[[i]],,drop=FALSE])
+	}
+	rownames(newMat) = names(grps)
+	colnames(newMat) = colnames(obj)
+	if(out=='matrix') return(newMat)
+	if(out=='MRexperiment'){
+		taxa = data.frame(names(grps))
+		colnames(taxa) = "Taxa"
+		rownames(taxa) = names(grps)
+		taxa = as(taxa,"AnnotatedDataFrame")
+		if(class(obj)=="MRexperiment"){
+			pd = phenoData(obj)
+			newObj = newMRexperiment(newMat,featureData=taxa,phenoData=pd)
+		} else {
+			newObj = newMRexperiment(newMat,featureData=taxa)
+		}
+		return(newObj)
+	}
+}
+#' @rdname aggregateByTaxonomy
+#' @export
+aggTax<-function(obj,lvl,alternate=FALSE,norm=FALSE,log=FALSE,aggfun = colSums,sl=1000,out='MRexperiment'){
+	aggregateByTaxonomy(obj,lvl,alternate=alternate,norm=norm,log=log,aggfun = aggfun,sl=sl,out=out)
+}
diff --git a/R/allClasses.R b/R/allClasses.R
new file mode 100644
index 0000000..1d0fe7e
--- /dev/null
+++ b/R/allClasses.R
@@ -0,0 +1,308 @@
+setClass("MRexperiment", contains=c("eSet"), representation=representation(expSummary = "environment"),prototype = prototype( new( "VersionedBiobase",versions = c(classVersion("eSet"),MRexperiment = "1.0.0" ))))
+            
+setMethod("[", "MRexperiment", function (x, i, j, ..., drop = FALSE) {
+        obj= callNextMethod()
+        if(!missing(j)){
+            obj at expSummary = new("environment",expSummary=as(expSummary(x)[j,1:2,...,drop=drop],"AnnotatedDataFrame"),cumNormStat=x at expSummary$cumNormStat)
+            if(length(pData(obj))>0){
+              for(i in 1:length(pData(obj))){
+                if(is.factor(pData(obj)[,i])){
+                  pData(obj)[,i] = factor(pData(obj)[,i])
+                } else {
+                  pData(obj)[,i] = pData(obj)[,i]
+                }
+              }
+            }
+        }
+        obj
+})
+setMethod("colSums", signature ="MRexperiment", function (x, ...) {
+    callNextMethod(MRcounts(x),...)
+})
+setMethod("rowSums", signature="MRexperiment", function (x, ...) {
+    callNextMethod(MRcounts(x),...)
+})
+setMethod("rowMeans", signature="MRexperiment", function (x, ...) {
+    callNextMethod(MRcounts(x),...)
+})
+setMethod("colMeans", signature="MRexperiment", function (x, ...) {
+    callNextMethod(MRcounts(x),...)
+})
+
+#' Access the normalization factors in a MRexperiment object
+#'
+#' Function to access the scaling factors, aka the normalization factors, of
+#' samples in a MRexperiment object.
+#'
+#' @name normFactors
+#' @docType methods
+#' @param object a \code{MRexperiment} object
+#' @return Normalization scaling factors
+#' @author Joseph N. Paulson
+#' @examples
+#'
+#' data(lungData)
+#' head(normFactors(lungData))
+#'
+setGeneric("normFactors",function(object){standardGeneric("normFactors")}) 
+setGeneric("normFactors<-",function(object,value){standardGeneric("normFactors<-")})
+
+setMethod("normFactors", signature="MRexperiment",function(object) {
+   nf <- expSummary(object)$normFactors
+   nf <- unlist(nf)
+   names(nf) <- sampleNames(object)
+   nf
+ })
+
+#' Replace the normalization factors in a MRexperiment object
+#'
+#' Function to replace the scaling factors, aka the normalization factors, of
+#' samples in a MRexperiment object.
+#'
+#' @name normFactors<-
+#' @docType methods
+#' @aliases normFactors<-,MRexperiment,numeric-method normFactors<-
+#' @param object a \code{MRexperiment} object
+#' @param value vector of normalization scaling factors
+#' @return Normalization scaling factors
+#' @author Joseph N. Paulson
+#' @examples
+#'
+#' data(lungData)
+#' head(normFactors(lungData)<- rnorm(1))
+#'
+setReplaceMethod("normFactors", signature=c(object="MRexperiment", value="numeric"),
+  function( object, value ) {
+   pData(object at expSummary$expSummary)$normFactors <- value
+   validObject( object )
+   object
+})
+
+#' Access sample depth of coverage from MRexperiment object
+#'
+#' Access the libSize vector represents the column (sample specific) sums of features,
+#' i.e. the total number of reads for a sample or depth of coverage. It is used by
+#' \code{\link{fitZig}}.
+#'
+#' @name libSize
+#' @docType methods
+#' @param object a \code{MRexperiment} object
+#' @return Library sizes
+#' @author Joseph N. Paulson
+#' @examples
+#'
+#' data(lungData)
+#' head(libSize(lungData))
+#'
+setGeneric("libSize",function(object){standardGeneric("libSize")})
+setGeneric("libSize<-",function(object,value){standardGeneric("libSize<-")})
+
+setMethod("libSize", signature="MRexperiment",function(object) {
+   ls <- expSummary(object)$libSize
+   ls <- unlist(ls)
+   names(ls) <- sampleNames(object)
+   ls
+ })
+
+#' Replace the library sizes in a MRexperiment object
+#'
+#' Function to replace the scaling factors, aka the library sizes, of
+#' samples in a MRexperiment object.
+#'
+#' @name libSize<-
+#' @docType methods
+#' @aliases libSize<-,MRexperiment,numeric-method libSize<-
+#' @param object a \code{MRexperiment} object
+#' @param value vector of library sizes
+#' @return vector library sizes
+#' @author Joseph N. Paulson
+#' @examples
+#'
+#' data(lungData)
+#' head(libSize(lungData)<- rnorm(1))
+#'
+setReplaceMethod("libSize", signature=c(object="MRexperiment", value="numeric"),
+  function( object, value ) {
+   pData(object at expSummary$expSummary)$libSize <- value
+   validObject( object )
+   object
+})
+
+#' Create a MRexperiment object
+#' 
+#' This function creates a MRexperiment object from a matrix or data frame of
+#' count data.
+#' 
+#' See \code{\link{MRexperiment-class}} and \code{eSet} (from the Biobase
+#' package) for the meaning of the various slots.
+#' 
+#' @param counts A matrix or data frame of count data. The count data is
+#' representative of the number of reads annotated for a feature (be it gene,
+#' OTU, species, etc). Rows should correspond to features and columns to
+#' samples.
+#' @param phenoData An AnnotatedDataFrame with pertinent sample information.
+#' @param featureData An AnnotatedDataFrame with pertinent feature information.
+#' @param libSize libSize, library size, is the total number of reads for a
+#' particular sample.
+#' @param normFactors normFactors, the normalization factors used in either the
+#' model or as scaling factors of sample counts for each particular sample.
+#' @return an object of class MRexperiment
+#' @author Joseph N Paulson
+#' @examples
+#' 
+#' cnts = matrix(abs(rnorm(1000)),nc=10)
+#' obj <- newMRexperiment(cnts)
+#' 
+newMRexperiment <- function(counts, phenoData=NULL, featureData=NULL,libSize=NULL, normFactors=NULL) {
+    counts= as.matrix(counts)
+
+    if( is.null( featureData ) ){
+      featureData <- annotatedDataFrameFrom(counts, byrow=TRUE)
+    }
+    if( is.null( phenoData ) ){
+      phenoData   <- annotatedDataFrameFrom(counts, byrow=FALSE)
+    }
+    if( is.null( libSize ) ){
+      libSize <- as.matrix(colSums(counts))
+      rownames(libSize) = colnames(counts)
+    }
+    if( is.null( normFactors ) ){
+      normFactors <- as.matrix(rep( NA_real_, length(libSize) ))
+      rownames(normFactors) = rownames(libSize)
+    }
+
+    obj <-new("MRexperiment", assayData = assayDataNew("environment",counts=counts),phenoData = phenoData,featureData = featureData ,expSummary = new("environment",expSummary=annotatedDataFrameFrom(counts,byrow=FALSE),cumNormStat=NULL))
+    obj at expSummary$expSummary$libSize = libSize;
+    obj at expSummary$expSummary$normFactors=normFactors;
+    validObject(obj)
+    obj
+}
+setValidity( "MRexperiment", function( object ) {
+    if( is.null(assayData(object)$counts))
+        return( "There are no counts!" )
+#    if( ncol(MRcounts(object)) != length(normFactors(object)))
+#        return( "Experiment summary got hacked!" )
+#    if( ncol(MRcounts(object)) != length(libSize(object)))
+#        return( "Experiment summary got hacked!" )
+    TRUE
+} )
+#' Accessor for the counts slot of a MRexperiment object
+#' 
+#' The counts slot holds the raw count data representing (along the rows) the
+#' number of reads annotated for a particular feature and (along the columns)
+#' the sample.
+#' 
+#' 
+#' @name MRcounts
+#' @aliases MRcounts,MRexperiment-method MRcounts
+#' @docType methods
+#' @param obj a \code{MRexperiment} object.
+#' @param norm logical indicating whether or not to return normalized counts.
+#' @param log TRUE/FALSE whether or not to log2 transform scale.
+#' @param sl The value to scale by (default=1000).
+#' @return Normalized or raw counts
+#' @author Joseph N. Paulson, jpaulson@@umiacs.umd.edu
+#' @examples
+#' 
+#' data(lungData)
+#' head(MRcounts(lungData))
+#' 
+MRcounts <- function(obj,norm=FALSE,log=FALSE,sl=1000) {
+   stopifnot( is( obj, "MRexperiment" ) )
+   if(!norm){
+    x=assayData(obj)[["counts"]]
+   }
+   else{
+    if(any(is.na(normFactors(obj)))){
+      x=cumNormMat(obj,sl=sl)
+    } else{
+      x=sweep(assayData(obj)[["counts"]],2,as.vector(unlist(normFactors(obj)))/sl,"/")
+    }
+   }
+   if(!log){
+    return(x)
+   } else{
+    return(log2(x+1))
+   }
+}
+#' Access the posterior probabilities that results from analysis
+#' 
+#' Accessing the posterior probabilities following a run through
+#' \code{\link{fitZig}}
+#' 
+#' 
+#' @name posteriorProbs
+#' @aliases posteriorProbs,MRexperiment-method posteriorProbs
+#' @docType methods
+#' @param obj a \code{MRexperiment} object.
+#' @return Matrix of posterior probabilities
+#' @author Joseph N. Paulson
+#' @examples
+#' 
+#' # This is a simple demonstration 
+#' data(lungData)
+#' k = grep("Extraction.Control",pData(lungData)$SampleType)
+#' lungTrim = lungData[,-k]
+#' k = which(rowSums(MRcounts(lungTrim)>0)<30)
+#' lungTrim = cumNorm(lungTrim)
+#' lungTrim = lungTrim[-k,]
+#' smokingStatus = pData(lungTrim)$SmokingStatus
+#' mod = model.matrix(~smokingStatus)
+#' # The maxit is not meant to be 1 - this is for demonstration/speed
+#' settings = zigControl(maxit=1,verbose=FALSE)
+#' fit = fitZig(obj = lungTrim,mod=mod,control=settings)
+#' head(posteriorProbs(lungTrim))
+#' 
+posteriorProbs <- function( obj ) {
+   stopifnot( is( obj, "MRexperiment" ) )
+   assayData(obj)[["z"]]
+}
+
+#' Access MRexperiment object experiment data
+#' 
+#' The expSummary vectors represent the column (sample specific) sums of
+#' features, i.e. the total number of reads for a sample, libSize and also the
+#' normalization factors, normFactor.
+#' 
+#' 
+#' @name expSummary
+#' @aliases expSummary,MRexperiment-method expSummary
+#' @docType methods
+#' @param obj a \code{MRexperiment} object.
+#' @return Experiment summary table
+#' @author Joseph N. Paulson, jpaulson@@umiacs.umd.edu
+#' @examples
+#' 
+#' data(mouseData)
+#' expSummary(mouseData)
+#' 
+expSummary<-function(obj){
+  stopifnot( is( obj, "MRexperiment" ) )
+  pData(obj at expSummary$expSummary)
+}
+#' Check if MRexperiment or matrix and return matrix
+#'
+#' Function to check if object is a MRexperiment
+#' class or matrix 
+#'
+#' @name returnAppropriateObj
+#' @param obj a \code{MRexperiment} or \code{matrix} object
+#' @param norm return a normalized \code{MRexperiment} matrix
+#' @param log return a log transformed \code{MRexperiment} matrix
+#' @param sl scaling value
+#' @return Matrix
+#' @examples
+#'
+#' data(lungData)
+#' head(returnAppropriateObj(lungData,norm=FALSE,log=FALSE))
+#'
+returnAppropriateObj <- function(obj,norm,log,sl=1000) {
+  if(class(obj)=="MRexperiment"){
+    mat = MRcounts(obj,norm=norm,log=log,sl=sl)
+  } else if(class(obj) == "matrix") {
+    mat = obj
+  } else {
+    stop("Object needs to be either a MRexperiment object or matrix")
+  }
+  mat
+}
diff --git a/R/biom2MRexperiment.R b/R/biom2MRexperiment.R
new file mode 100644
index 0000000..d931865
--- /dev/null
+++ b/R/biom2MRexperiment.R
@@ -0,0 +1,41 @@
+#' Biom to MRexperiment objects
+#' 
+#' Wrapper to convert biom files to MRexperiment objects.
+#' 
+#' @param obj The biom object file.
+#' @return A MRexperiment object.
+#' @seealso \code{\link{loadMeta}} \code{\link{loadPhenoData}} \code{\link{newMRexperiment}} \code{\link{loadBiom}}
+#' @examples
+#' 
+#' library(biomformat)
+#' rich_dense_file = system.file("extdata", "rich_dense_otu_table.biom", package = "biomformat")
+#' x = biomformat::read_biom(rich_dense_file)
+#' biom2MRexperiment(x)
+#'
+biom2MRexperiment <- function(obj){
+	requireNamespace("biomformat")
+	mat = as(biomformat::biom_data(obj),"matrix")
+
+	if(! is.null(biomformat::observation_metadata(obj))){
+		len = max(sapply(biomformat::observation_metadata(obj),length))
+		taxa = as.matrix(sapply(biomformat::observation_metadata(obj),function(i){ i[1:len]}))
+		
+		if(dim(taxa)[1]!=dim(mat)[1]){
+			taxa = t(taxa)
+		}
+		rownames(taxa) = rownames(mat)
+		colnames(taxa) = colnames(biomformat::observation_metadata(obj))
+		taxa = as(data.frame(taxa),"AnnotatedDataFrame")
+	} else{
+		taxa = NULL
+	}
+
+	if(! is.null(biomformat::sample_metadata(obj))) {
+		pd = as(biomformat::sample_metadata(obj),"AnnotatedDataFrame")
+	} else{
+		pd = NULL
+	}
+	
+	mrobj = newMRexperiment(counts = mat, phenoData = pd, featureData = taxa)
+	return(mrobj)
+}
diff --git a/R/calculateEffectiveSamples.R b/R/calculateEffectiveSamples.R
new file mode 100644
index 0000000..fe20d29
--- /dev/null
+++ b/R/calculateEffectiveSamples.R
@@ -0,0 +1,14 @@
+#' Estimated effective samples per feature
+#' 
+#' Calculates the number of estimated effective samples per feature from the output
+#' of a fitZig run. The estimated effective samples per feature is calculated as the
+#' sum_1^n (n = number of samples) 1-z_i where z_i is the posterior probability a feature
+#' belongs to the technical distribution.
+#' 
+#' @param obj The output of fitZig run on a MRexperiment object.
+#' @return A list of the estimated effective samples per feature.
+#' @seealso \code{\link{fitZig}} \code{\link{MRcoefs}} \code{\link{MRfulltable}}
+#' 
+calculateEffectiveSamples<-function(obj){
+    rowSums(1-obj$z)
+}
diff --git a/R/correlationTest.R b/R/correlationTest.R
new file mode 100644
index 0000000..37098b7
--- /dev/null
+++ b/R/correlationTest.R
@@ -0,0 +1,119 @@
+#' Correlation of each row of a matrix or MRexperiment object
+#'
+#' Calculates the (pairwise) correlation statistics and associated p-values of a matrix
+#' or the correlation of each row with a vector.
+#'
+#' @param obj A MRexperiment object or count matrix.
+#' @param y Vector of length ncol(obj) to compare to.
+#' @param method One of 'pearson','spearman', or 'kendall'.
+#' @param alternative Indicates the alternative hypothesis and must be one of 'two.sided', 'greater' (positive) or 'less'(negative). You can specify just the initial letter.
+#' @param norm Whether to aggregate normalized counts or not - if MRexperiment object.
+#' @param log Whether or not to log2 transform the counts - if MRexperiment object.
+#' @param cores Number of cores to use.
+#' @param override If the number of rows to test is over a thousand the test will not commence (unless override==TRUE).
+#' @param ... Extra parameters for mclapply.
+#' @return A matrix of size choose(number of rows, 2) by 2. The first column corresponds to the correlation value. The second column the p-value.
+#' @seealso \code{\link{correctIndices}}
+#' @aliases corTest
+#' @export
+#' @examples
+#'
+#' # Pairwise correlation of raw counts
+#' data(mouseData)
+#' cors = correlationTest(mouseData[1:10,],norm=FALSE,log=FALSE)
+#' head(cors)
+#'
+#' mat = MRcounts(mouseData)[1:10,]
+#' cormat = as.matrix(dist(mat)) # Creating a matrix
+#' cormat[cormat>0] = 0 # Creating an empty matrix
+#' ind = correctIndices(nrow(mat))
+#' cormat[upper.tri(cormat)][ind] = cors[,1] 
+#' table(cormat[1,-1] - cors[1:9,1])
+#'
+#' # Correlation of raw counts with a vector (library size in this case)
+#' data(mouseData)
+#' cors = correlationTest(mouseData[1:10,],libSize(mouseData),norm=FALSE,log=FALSE)
+#' head(cors)
+#'
+correlationTest <- function(obj,y=NULL,method="pearson",alternative="two.sided",norm=TRUE,log=TRUE,cores=1,override=FALSE,...){
+	mat = returnAppropriateObj(obj,norm,log)
+	nr = nrow(mat)
+	if(nr > 1000){
+		if(override){
+			show("Good luck! This might take some time.")
+		} else {
+			stop("Many features being considered - to proceed set override to TRUE")
+		}
+	}
+	if(is.null(rownames(mat))){
+		nm = as.character(1:nr)
+	} else { 
+		nm = rownames(mat)
+	}
+	if(is.null(y)){
+		corrAndP = mclapply(1:(nr-1),function(i){
+			vals =(i+1):nr
+			cp = array(NA,dim=c(length(vals),2))
+			rownames(cp) = paste(nm[i],nm[(i+1):nr],sep="-")
+			colnames(cp) = c("correlation","pvalue")
+			for(j in (i+1):nr){	
+				x = as.numeric(mat[i,])
+				y = as.numeric(mat[j,])
+				res = cor.test(x,y,method=method,
+					alternative=alternative)
+				cp[j-i,1] = res$estimate
+				cp[j-i,2] = res$p.value
+			}
+			cp
+		},mc.cores=cores,...)
+	} else {
+		corrAndP = mclapply(1:nr,function(i){
+			res = cor.test(mat[i,],y,method=method,
+				alternative=alternative)
+			cbind(res$estimate,res$p.value)
+		},mc.cores=cores,...)
+	}
+	correlation = unlist(sapply(corrAndP,function(i){i[,1]}))
+	p  = unlist(sapply(corrAndP,function(i){i[,2]}))
+	results = cbind(correlation,p)
+	if(is.null(y)) rownames(results)[nrow(results)] = rownames(corrAndP[[nr-1]])
+	if(!is.null(y)) rownames(results) = rownames(obj)
+	
+	return(results)
+}
+#' Calculate the correct indices for the output of correlationTest
+#'
+#' Consider the upper triangular portion of a matrix of size nxn. Results from the \code{correlationTest} are output
+#' as the combination of two vectors, correlation statistic and p-values. The order of the output is 1vs2, 1vs3, 1vs4, etc.
+#' The correctIndices returns the correct indices to fill a correlation matrix or correlation-pvalue matrix.
+#'
+#' @param n The number of features compared by correlationTest (nrow(mat)).
+#' @return A vector of the indices for an upper triangular matrix.
+#' @seealso \code{\link{correlationTest}}
+#' @export
+#' @examples
+#' 
+#' data(mouseData)
+#' mat = MRcounts(mouseData)[55:60,]
+#' cors = correlationTest(mat)
+#' ind  = correctIndices(nrow(mat))
+#' 
+#' cormat = as.matrix(dist(mat))
+#' cormat[cormat>0] = 0
+#' cormat[upper.tri(cormat)][ind] = cors[,1]
+#' table(cormat[1,-1] - cors[1:5,1])
+#'
+correctIndices <- function(n){
+	if(n==1){
+		return(1)
+	}
+	if(n==2){
+		return(c(1,2))
+	}
+	seq1 <- cumsum(1:(n-1)) - c(0,1:(n-2))
+	seq2 <- sapply(1:(n-2),function(i) {
+		seq1[-c(1:i)]+1*i  
+	})
+	seq <- c(seq1,unlist(seq2))
+	return(seq)
+}
\ No newline at end of file
diff --git a/R/cumNorm.R b/R/cumNorm.R
new file mode 100644
index 0000000..b90691b
--- /dev/null
+++ b/R/cumNorm.R
@@ -0,0 +1,53 @@
+#' Cumulative sum scaling normalization
+#' 
+#' Calculates each column's quantile and calculates the sum up to and including
+#' that quantile.
+#' 
+#' @param obj An MRexperiment object.
+#' @param p The pth quantile.
+#' @return Object with the normalization factors stored as 
+#' a vector of the sum up to and including a sample's pth quantile.
+#' @seealso \code{\link{fitZig}} \code{\link{cumNormStat}}
+#' @examples
+#' 
+#' data(mouseData)
+#' cumNorm(mouseData)
+#' head(normFactors(mouseData))
+#' 
+cumNorm <- function(obj,p=cumNormStatFast(obj)){
+	if(class(obj)=="MRexperiment"){
+		x = MRcounts(obj,norm=FALSE,log=FALSE)
+	} else {
+		stop("Object needs to be a MRexperiment object")
+	}
+	normFactors = calcNormFactors(obj=x,p=p)
+	pData(obj at expSummary$expSummary)$normFactors = normFactors
+	validObject(obj)
+	return(obj)
+}
+
+#' Cumulative sum scaling (css) normalization factors
+#' 
+#' Return a vector of the the sum up to and including a quantile.
+#' 
+#' @param obj An MRexperiment object or matrix.
+#' @param p The pth quantile.
+#' @return Vector of the sum up to and including a sample's pth quantile.
+#' @seealso \code{\link{fitZig}} \code{\link{cumNormStatFast}} \code{\link{cumNorm}}
+#' @examples
+#' 
+#' data(mouseData)
+#' head(calcNormFactors(mouseData))
+#' 
+calcNormFactors <- function(obj,p=cumNormStatFast(obj)){
+	x = returnAppropriateObj(obj,norm=FALSE,log=FALSE)
+	xx = x
+	xx[x == 0] <- NA
+	qs = colQuantiles(xx, probs = p, na.rm = TRUE)
+	normFactors <- sapply(1:ncol(xx), function(i) {
+		xx = (x[, i] - .Machine$double.eps)
+		sum(xx[xx <= qs[i]])
+	})
+	names(normFactors)<-colnames(x)
+	as.data.frame(normFactors)
+}
diff --git a/R/cumNormMat.R b/R/cumNormMat.R
new file mode 100644
index 0000000..0bc43df
--- /dev/null
+++ b/R/cumNormMat.R
@@ -0,0 +1,37 @@
+#' Cumulative sum scaling factors.
+#' 
+#' Calculates each column's quantile and calculates the sum up to and including
+#' that quantile.
+#' 
+#' 
+#' @param obj A matrix or MRexperiment object.
+#' @param p The pth quantile.
+#' @param sl The value to scale by (default=1000).
+#' @return Returns a matrix normalized by scaling counts up to and including
+#' the pth quantile.
+#' @seealso \code{\link{fitZig}} \code{\link{cumNorm}}
+#' @examples
+#' 
+#' data(mouseData)
+#' head(cumNormMat(mouseData))
+#' 
+cumNormMat <-
+function(obj,p= cumNormStatFast(obj),sl = 1000){
+####################################################################################
+#   Calculates each column's quantile
+#    and calculated the sum up to and
+#    including that quantile.
+####################################################################################
+	x = returnAppropriateObj(obj,FALSE,FALSE)
+    xx=x
+	xx[x==0] <- NA
+	
+	qs=colQuantiles(xx,probs=p,na.rm=TRUE)
+	
+	newMat<-sapply(1:ncol(xx), function(i) {
+				   xx=(x[,i]-.Machine$double.eps)
+				   sum(xx[xx<=qs[i]])
+				   })
+	nmat<-sweep(x,2,newMat/sl,"/")
+	return(nmat)
+}
diff --git a/R/cumNormStat.R b/R/cumNormStat.R
new file mode 100644
index 0000000..3905e6a
--- /dev/null
+++ b/R/cumNormStat.R
@@ -0,0 +1,63 @@
+#' Cumulative sum scaling percentile selection
+#' 
+#' Calculates the percentile for which to sum counts up to and scale by.
+#' cumNormStat might be deprecated one day. Deviates from methods in Nature Methods paper
+#' by making use row means for generating reference.
+#' 
+#' @param obj A matrix or MRexperiment object.
+#' @param qFlag Flag to either calculate the proper percentile using
+#' R's step-wise quantile function or approximate function. 
+#' @param pFlag Plot the relative difference of the median deviance from the reference.
+#' @param rel Cutoff for the relative difference from one median difference
+#' from the reference to the next
+#' @param ... Applicable if pFlag == TRUE. Additional plotting parameters.
+#' @return Percentile for which to scale data
+#' @seealso \code{\link{fitZig}} \code{\link{cumNorm}} \code{\link{cumNormStatFast}}
+#' @examples
+#' 
+#' data(mouseData)
+#' p = round(cumNormStat(mouseData,pFlag=FALSE),digits=2)
+#' 
+cumNormStat <-
+function(obj,qFlag = TRUE,pFlag = FALSE,rel=.1,...){
+	mat = returnAppropriateObj(obj,FALSE,FALSE)
+    if(any(colSums(mat)==0)) stop("Warning empty sample")
+    
+	smat = sapply(1:ncol(mat),function(i){sort(mat[,i],decreasing=FALSE)})
+	ref  = rowMeans(smat);
+	
+	yy = mat;
+	yy[yy==0]=NA;
+	
+	ncols = ncol(mat);
+	refS = sort(ref);
+    
+	k = which(refS>0)[1]
+	lo = (length(refS)-k+1)
+
+	if(qFlag == TRUE){
+		diffr = sapply(1:ncols,function(i){
+		refS[k:length(refS)] - quantile(yy[,i],p=seq(0,1,length.out=lo),na.rm=TRUE)
+	})
+	}
+	if(qFlag == FALSE){
+       	diffr = sapply(1:ncols,function(i){
+			refS[k:length(refS)] - approx(sort(yy[,i],decreasing=FALSE),n=lo)$y
+		})
+	}
+	diffr2 = matrixStats::rowMedians(abs(diffr),na.rm=TRUE)
+	if(pFlag ==TRUE){
+        plot(abs(diff(diffr2[diffr2>0]))/diffr2[diffr2>0][-1],type="h",ylab="Relative difference for reference",xaxt="n",...)
+		abline(h=rel)
+		axis(1,at=seq(0,length(diffr2),length.out=5),labels = seq(0,1,length.out=5))
+	}
+	x = which(abs(diff(diffr2))/diffr2[-1]>rel)[1] / length(diffr2)
+	if(x<=0.50){
+		message("Default value being used.")
+		x = 0.50
+	}
+	if(class(obj)=="MRexperiment"){
+		obj at expSummary$cumNormStat = x;		
+	}
+	return(x)
+}
diff --git a/R/cumNormStatFast.R b/R/cumNormStatFast.R
new file mode 100644
index 0000000..32c7cc6
--- /dev/null
+++ b/R/cumNormStatFast.R
@@ -0,0 +1,57 @@
+#' Cumulative sum scaling percentile selection
+#' 
+#' Calculates the percentile for which to sum counts up to and scale by. Faster
+#' version than available in cumNormStat. Deviates from methods described in Nature Methods by
+#' making use of ro means for reference.
+#' 
+#' @param obj A matrix or MRexperiment object.
+#' @param pFlag Plot the median difference quantiles.
+#' @param rel Cutoff for the relative difference from one median difference
+#' from the reference to the next.
+#' @param ... Applicable if pFlag == TRUE. Additional plotting parameters.
+#' @return Percentile for which to scale data
+#' @seealso \code{\link{fitZig}} \code{\link{cumNorm}} \code{\link{cumNormStat}}
+#' @examples
+#' 
+#' data(mouseData)
+#' p = round(cumNormStatFast(mouseData,pFlag=FALSE),digits=2)
+#' 
+cumNormStatFast <-function(obj,pFlag = FALSE,rel=.1,...){
+	mat = returnAppropriateObj(obj,FALSE,FALSE)
+	smat = lapply(1:ncol(mat), function(i) {
+	    sort(mat[which(mat[, i]>0),i], decreasing = TRUE)
+	})
+	leng = max(sapply(smat,length))
+    if(any(sapply(smat,length)==1)) stop("Warning sample with one or zero features")
+    
+    smat2 = array(NA,dim=c(leng,ncol(mat)))
+	for(i in 1:ncol(mat)){
+		smat2[leng:(leng-length(smat[[i]])+1),i] = smat[[i]]
+	}
+
+	rmat2 = sapply(1:ncol(smat2),function(i){
+		quantile(smat2[,i],p=seq(0,1,length.out=nrow(smat2)),na.rm=TRUE)
+	})
+	smat2[is.na(smat2)] = 0
+	ref1 = rowMeans(smat2)
+
+	ncols = ncol(rmat2)
+	diffr = sapply(1:ncols, function(i) {
+		ref1 - rmat2[,i]
+	})
+	diffr1=matrixStats::rowMedians(abs(diffr))
+	if(pFlag==TRUE){
+		plot(abs(diff(diffr1))/diffr1[-1],type="h",...)
+		abline(h=rel)
+		axis(1,at=seq(0,length(diffr1),length.out=5),labels = seq(0,1,length.out=5))
+	}
+	x= which(abs(diff(diffr1))/diffr1[-1] > rel)[1]/length(diffr1)
+	if(x<=0.50){
+		message("Default value being used.")
+		x = 0.50
+	}
+	if(class(obj)=="MRexperiment"){
+		obj at expSummary$cumNormStat = x;		
+	}
+	return(x)
+}
diff --git a/R/deprecated_metagenomeSeq_function.R b/R/deprecated_metagenomeSeq_function.R
new file mode 100644
index 0000000..3eae783
--- /dev/null
+++ b/R/deprecated_metagenomeSeq_function.R
@@ -0,0 +1,23 @@
+#' Depcrecated functions in the metagenomeSeq package.
+#' 
+#' These functions may be removed completely in the next release.
+#' 
+#' @usage deprecated_metagenomeSeq_function(x, value, ...)
+#' @rdname metagenomeSeq-deprecated
+#' @name metagenomeSeq-deprecated
+#' @param x For assignment operators, the object that will undergo a replacement
+#'  (object inside parenthesis).
+#' @param value For assignment operators, the value to replace with 
+#'  (the right side of the assignment).
+#' @param ... For functions other than assignment operators, 
+#'  parameters to be passed to the modern version of the function (see table).
+#' @docType package
+#' @export fitMeta
+#' @aliases deprecated_metagenomeSeq_function fitMeta load_phenoData load_meta load_biom load_metaQ
+#'
+deprecated_metagenomeSeq_function <- function(x, value, ...){return(NULL)}
+fitMeta <- function(...){.Deprecated("fitMeta",package="metagenomeSeq");return(fitLogNormal(...))}
+load_phenoData <- function(...){.Deprecated("load_phenoData",package="metagenomeSeq");return(loadPhenoData(...))}
+load_biom <- function(...){.Deprecated("load_biom",package="metagenomeSeq");return(loadBiom(...))}
+load_meta <- function(...){.Deprecated("load_meta",package="metagenomeSeq");return(loadMeta(...))}
+load_metaQ <- function(...){.Deprecated("load_metaQ",package="metagenomeSeq");return(loadMetaQ(...))}
diff --git a/R/doCountMStep.R b/R/doCountMStep.R
new file mode 100644
index 0000000..79381de
--- /dev/null
+++ b/R/doCountMStep.R
@@ -0,0 +1,70 @@
+#' Compute the Maximization step calculation for features still active.
+#' 
+#' Maximization step is solved by weighted least squares.  The function also
+#' computes counts residuals.
+#' 
+#' Maximum-likelihood estimates are approximated using the EM algorithm where
+#' we treat mixture membership $delta_ij$ = 1 if $y_ij$ is generated from the
+#' zero point mass as latent indicator variables. The density is defined as
+#' $f_zig(y_ij = pi_j(S_j)*f_0(y_ij) +(1-pi_j (S_j)) *
+#' f_count(y_ij;mu_i,sigma_i^2)$. The log-likelihood in this extended model is
+#' $(1-delta_ij) log f_count(y;mu_i,sigma_i^2 )+delta_ij log
+#' pi_j(s_j)+(1-delta_ij)log (1-pi_j (s_j))$. The responsibilities are defined
+#' as $z_ij = pr(delta_ij=1 | data)$.
+#' 
+#' @param z Matrix (m x n) of estimate responsibilities (probabilities that a
+#' count comes from a spike distribution at 0).
+#' @param y Matrix (m x n) of count observations.
+#' @param mmCount Model matrix for the count distribution.
+#' @param stillActive Boolean vector of size M, indicating whether a feature
+#' converged or not.
+#' @param fit2 Previous fit of the count model.
+#' @param dfMethod Either 'default' or 'modified' (by responsibilities)
+#' @return Update matrix (m x n) of estimate responsibilities (probabilities
+#' that a count comes from a spike distribution at 0).
+#' @seealso \code{\link{fitZig}}
+doCountMStep <-
+function(z, y, mmCount, stillActive,fit2=NULL,dfMethod="modified"){
+
+	if (is.null(fit2)){
+		fit=limma::lmFit(y[stillActive,],mmCount,weights = (1-z[stillActive,]))
+		if(dfMethod=="modified"){
+			df = rowSums(1-z[stillActive,,drop=FALSE]) - ncol(mmCount)
+			fit$df[stillActive] = df
+			fit$df.residual[stillActive] = df
+		}
+		countCoef = fit$coefficients
+		countMu=tcrossprod(countCoef, mmCount)
+		residuals=sweep((y[stillActive,,drop=FALSE]-countMu),1,fit$sigma,"/")
+		dat = list(fit = fit, residuals = residuals)
+		return(dat)
+	} else {
+
+		residuals = fit2$residuals
+		fit2 = fit2$fit
+
+		fit=limma::lmFit(y[stillActive,,drop=FALSE],mmCount,weights = (1-z[stillActive,,drop=FALSE]))
+		
+		fit2$coefficients[stillActive,] = fit$coefficients
+		fit2$stdev.unscaled[stillActive,]=fit$stdev.unscaled
+		fit2$sigma[stillActive] = fit$sigma
+		fit2$Amean[stillActive] = fit$Amean
+
+		if(dfMethod=="modified"){
+			df = rowSums(1-z[stillActive,,drop=FALSE]) - ncol(mmCount)
+			fit$df = df
+			fit$df.residual = df
+		}
+		fit2$df[stillActive]    = fit$df
+		fit2$df.residual[stillActive]    = fit$df.residual
+
+		countCoef = fit$coefficients
+		countMu=tcrossprod(countCoef, mmCount)
+		r=sweep((y[stillActive,,drop=FALSE]-countMu),1,fit$sigma,"/")
+		residuals[stillActive,]=r
+
+		dat = list(fit = fit2, residuals=residuals)
+
+		return(dat)
+	}
+}
diff --git a/R/doEStep.R b/R/doEStep.R
new file mode 100644
index 0000000..e965161
--- /dev/null
+++ b/R/doEStep.R
@@ -0,0 +1,33 @@
+#' Compute the Expectation step.
+#' 
+#' Estimates the responsibilities $z_ij = fracpi_j cdot I_0(y_ijpi_j cdot
+#' I_0(y_ij + (1-pi_j) cdot f_count(y_ij
+#' 
+#' Maximum-likelihood estimates are approximated using the EM algorithm where
+#' we treat mixture membership $delta_ij$ = 1 if $y_ij$ is generated from the
+#' zero point mass as latent indicator variables. The density is defined as
+#' $f_zig(y_ij = pi_j(S_j) cdot f_0(y_ij) +(1-pi_j (S_j))cdot
+#' f_count(y_ij;mu_i,sigma_i^2)$. The log-likelihood in this extended model is
+#' $(1-delta_ij) log f_count(y;mu_i,sigma_i^2 )+delta_ij log
+#' pi_j(s_j)+(1-delta_ij)log (1-pi_j (sj))$. The responsibilities are defined
+#' as $z_ij = pr(delta_ij=1 | data)$.
+#' 
+#' @param countResiduals Residuals from the count model.
+#' @param zeroResiduals Residuals from the zero model.
+#' @param zeroIndices Index (matrix m x n) of counts that are zero/non-zero.
+#' @return Updated matrix (m x n) of estimate responsibilities (probabilities
+#' that a count comes from a spike distribution at 0).
+#' @seealso \code{\link{fitZig}}
+doEStep <-
+function(countResiduals,  zeroResiduals, zeroIndices)
+{
+	pi_prop=getPi(zeroResiduals)
+	w1=sweep(zeroIndices, 2, pi_prop, FUN="*")
+
+	countDensity=getCountDensity(countResiduals)
+	w2=sweep(countDensity, 2, 1-pi_prop, FUN="*")
+	z=w1/(w1+w2)
+	z[z>1-1e-6]=1-1e-6
+	z[!zeroIndices]=0
+	z
+}
diff --git a/R/doZeroMStep.R b/R/doZeroMStep.R
new file mode 100644
index 0000000..df55c16
--- /dev/null
+++ b/R/doZeroMStep.R
@@ -0,0 +1,41 @@
+#' Compute the zero Maximization step.
+#' 
+#' Performs Maximization step calculation for the mixture components. Uses
+#' least squares to fit the parameters of the mean of the logistic
+#' distribution. $$ pi_j = sum_i^M frac1Mz_ij $$ Maximum-likelihood estimates
+#' are approximated using the EM algorithm where we treat mixture membership
+#' $delta_ij$ = 1 if $y_ij$ is generated from the zero point mass as latent
+#' indicator variables. The density is defined as $f_zig(y_ij = pi_j(S_j) cdot
+#' f_0(y_ij) +(1-pi_j (S_j))cdot f_count(y_ij;mu_i,sigma_i^2)$. The
+#' log-likelihood in this extended model is $(1-delta_ij) log
+#' f_count(y;mu_i,sigma_i^2 )+delta_ij log pi_j(s_j)+(1-delta_ij)log (1-pi_j
+#' (sj))$. The responsibilities are defined as $z_ij = pr(delta_ij=1 | data)$.
+#' 
+#' 
+#' @param z Matrix (m x n) of estimate responsibilities (probabilities that a
+#' count comes from a spike distribution at 0).
+#' @param zeroIndices Index (matrix m x n) of counts that are zero/non-zero.
+#' @param mmZero The zero model, the model matrix to account for the change in
+#' the number of OTUs observed as a linear effect of the depth of coverage.
+#' @return List of the zero fit (zero mean model) coefficients, variance -
+#' scale parameter (scalar), and normalized residuals of length
+#' sum(zeroIndices).
+#' @seealso \code{\link{fitZig}}
+doZeroMStep <-
+function(z, zeroIndices, mmZero)
+{
+	pi=sapply(1:ncol(zeroIndices), function(j) {
+		if (sum(zeroIndices[,j])==0){
+			return(1e-8)
+		}
+		tmp=mean(z[zeroIndices[,j],j],na.rm=TRUE)
+		ifelse(tmp<=1e-8, 1e-8, ifelse(tmp>=1-(1e-8),1-(1e-8),tmp)) 
+		})
+	zeroLM=lm.fit(mmZero, qlogis(pi))
+	zeroCoef=zeroLM$coef
+
+	r=zeroLM$residuals
+	sigma=sd(r)+(1e-3)
+
+	list(zeroLM=zeroLM, zeroCoef=zeroCoef, sigma=sigma, residuals=r/sigma)
+}
diff --git a/R/exportMat.R b/R/exportMat.R
new file mode 100644
index 0000000..f4629a3
--- /dev/null
+++ b/R/exportMat.R
@@ -0,0 +1,30 @@
+#' Export the normalized MRexperiment dataset as a matrix.
+#' 
+#' This function allows the user to take a dataset of counts and output the
+#' dataset to the user's workspace as a tab-delimited file, etc.
+#' 
+#' 
+#' @aliases exportMatrix exportMat
+#' @param obj A MRexperiment object or count matrix.
+#' @param log Whether or not to log transform the counts - if MRexperiment object.
+#' @param norm Whether or not to normalize the counts - if MRexperiment object.
+#' @param sep Separator for writing out the count matrix.
+#' @param file Output file name.
+#' @return NA
+#' @seealso \code{\link{cumNorm}}
+#' @examples
+#' 
+#' data(lungData)
+#' dataDirectory <- system.file("extdata", package="metagenomeSeq")
+#' exportMat(lungData[,1:5],file=file.path(dataDirectory,"tmp.tsv"))
+#' head(read.csv(file=file.path(dataDirectory,"tmp.tsv"),sep="\t"))
+#' 
+exportMat <-function(obj,log=TRUE,norm=TRUE,sep="\t",file="~/Desktop/matrix.tsv"){
+    mat = returnAppropriateObj(obj,norm,log)
+	oMat = array(NA,dim=c((nrow(mat)+1),(ncol(mat)+1)));
+	oMat[1,2:ncol(oMat)] = colnames(mat);
+	oMat[2:nrow(oMat),2:ncol(oMat)] = mat;
+    oMat[2:nrow(oMat),1] = rownames(mat);
+    oMat[1,1] = "Taxa and Samples";
+	write(t(oMat),file=file,sep=sep,ncolumns=ncol(oMat));
+}
diff --git a/R/exportStats.R b/R/exportStats.R
new file mode 100644
index 0000000..a530b44
--- /dev/null
+++ b/R/exportStats.R
@@ -0,0 +1,42 @@
+#' Various statistics of the count data.
+#' 
+#' A matrix of values for each sample. The matrix consists of sample ids, the
+#' sample scaling factor, quantile value, the number identified features, and library size (depth of coverage).
+#' 
+#' 
+#' @param obj A MRexperiment object with count data.
+#' @param p Quantile value to calculate the scaling factor and quantiles for
+#' the various samples.
+#' @param file Output file name.
+#' @return None.
+#' @seealso \code{\link{cumNorm}} \code{\link{quantile}}
+#' @examples
+#' 
+#' data(lungData)
+#' dataDirectory <- system.file("extdata", package="metagenomeSeq")
+#' exportStats(lungData[,1:5],file=file.path(dataDirectory,"tmp.tsv"))
+#' head(read.csv(file=file.path(dataDirectory,"tmp.tsv"),sep="\t"))
+#' 
+exportStats <-function(obj,p= cumNormStat(obj),file="~/Desktop/res.stats.tsv"){
+	xx=MRcounts(obj)
+	xx[xx==0]=NA
+	qs=colQuantiles(xx,probs=p,na.rm=TRUE)
+
+	xx[xx>0] = 1;
+	xx[is.na(xx)]=0
+			
+	newMat <- array(NA,dim=c(5,ncol(xx)+1));
+	newMat[1,1] = "Subject"
+	newMat[2,1] = "Scaling factor"
+	newMat[3,1] = "Quantile value"
+	newMat[4,1] = "Number of identified features"
+	newMat[5,1] = "Library size"
+
+	newMat[1,2:ncol(newMat)]<-sampleNames(obj);
+	newMat[2,2:ncol(newMat)]<-unlist(normFactors(obj));
+	newMat[3,2:ncol(newMat)]<-qs;
+	newMat[4,2:ncol(newMat)]<-colSums(xx);
+	newMat[5,2:ncol(newMat)]<-unlist(libSize(obj));
+
+	write((newMat),file = file,sep = "\t",ncolumns = 5);
+}
diff --git a/R/filterData.R b/R/filterData.R
new file mode 100644
index 0000000..b2a6b4d
--- /dev/null
+++ b/R/filterData.R
@@ -0,0 +1,21 @@
+#' Filter datasets according to no. features present in features with at least a certain depth.
+#' 
+#' Filter the data based on the number of present features after filtering samples by depth of coverage.
+#' There are many ways to filter the object, this is just one way.
+#' 
+#' @param obj A MRexperiment object or count matrix.
+#' @param present Features with at least 'present' postive samples.
+#' @param depth Sampls with at least this much depth of coverage
+#' @return A MRexperiment object.
+#' @export
+#' @examples
+#' 
+#' data(mouseData)
+#' filterData(mouseData)
+#' 
+filterData <- function(obj,present=1,depth=1000){
+    mat = returnAppropriateObj(obj,norm=FALSE,log=FALSE)>0
+	cols = which(colSums(MRcounts(obj))>=depth)
+	rows = which(rowSums(mat[,cols])>=present)
+	return(obj[rows,cols])
+}
diff --git a/R/fitDO.R b/R/fitDO.R
new file mode 100644
index 0000000..c8e2cfe
--- /dev/null
+++ b/R/fitDO.R
@@ -0,0 +1,64 @@
+#' Wrapper to calculate Discovery Odds Ratios on feature values.
+#' 
+#' This function returns a data frame of p-values, odds ratios, lower and upper
+#' confidence limits for every row of a matrix. The discovery odds ratio is calculated
+#' as using Fisher's exact test on actual counts. The test's hypothesis is whether 
+#' or not the discovery of counts for a feature (of all counts) is found in greater proportion
+#' in a particular group.
+#' 
+#' 
+#' @param obj A MRexperiment object with a count matrix, or a simple count
+#' matrix.
+#' @param cl Group comparison
+#' @param norm Whether or not to normalize the counts - if MRexperiment object.
+#' @param log Whether or not to log2 transform the counts - if MRexperiment object.
+#' @param adjust.method Method to adjust p-values by. Default is "FDR". Options
+#' include "holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr",                                                                                                                            
+#' "none". See \code{\link{p.adjust}} for more details.
+#' @param cores Number of cores to use.
+#' @param ... Extra options for makeCluster
+#' @return Matrix of odds ratios, p-values, lower and upper confidence intervals
+#' @seealso \code{\link{cumNorm}} \code{\link{fitZig}} \code{\link{fitPA}} \code{\link{fitMeta}}
+#' @examples
+#' 
+#' data(lungData)
+#' k = grep("Extraction.Control",pData(lungData)$SampleType)
+#' lungTrim = lungData[,-k]
+#' lungTrim = lungTrim[-which(rowSums(MRcounts(lungTrim)>0)<20),]
+#' res = fitDO(lungTrim,pData(lungTrim)$SmokingStatus);
+#' head(res)
+#' 
+fitDO<-function(obj,cl,norm=TRUE,log=TRUE,adjust.method='fdr',cores=1,...){
+    x = returnAppropriateObj(obj,norm,log)
+    nrows= nrow(x);
+	if(is.null(rownames(x))){rownames(x)=1:nrows}
+
+    sumClass1 = round(sum(x[,cl==levels(cl)[1]]))
+    sumClass2 = round(sum(x[,cl==levels(cl)[2]]))
+    
+    cores <- makeCluster(getOption("cl.cores", cores),...)
+    res = parRapply(cl=cores,x,function(i){
+            tbl = table(1-i,cl)
+            if(sum(dim(tbl))!=4){
+                tbl = array(0,dim=c(2,2));
+                tbl[1,1] = round(sum(i[cl==levels(cl)[1]]))
+                tbl[1,2] = round(sum(i[cl==levels(cl)[2]]))
+                tbl[2,1] = sumClass1-tbl[1,1]
+                tbl[2,2] = sumClass2-tbl[1,2]
+            }
+            ft <- fisher.test(tbl,workspace=8e6,alternative="two.sided",conf.int=TRUE)
+            cbind(p=ft$p.value,o=ft$estimate,cl=ft$conf.int[1],cu=ft$conf.int[2])
+        })
+    stopCluster(cores)
+    nres = nrows*4
+    seqs = seq(1,nres,by=4)
+    p = res[seqs]
+    adjp = p.adjust(p,method=adjust.method)
+    o = res[seqs+1]
+    cl = res[seqs+2]
+    cu = res[seqs+3]
+    res = data.frame(cbind(o,cl,cu,p,adjp))
+    colnames(res) = c("oddsRatio","lower","upper","pvalues","adjPvalues")
+    rownames(res) = rownames(x)
+    return(res)
+}
diff --git a/R/fitFeatureModel.R b/R/fitFeatureModel.R
new file mode 100644
index 0000000..85c6d2e
--- /dev/null
+++ b/R/fitFeatureModel.R
@@ -0,0 +1,73 @@
+#' Computes differential abundance analysis using a zero-inflated log-normal model
+#' 
+#' Wrapper to actually run zero-inflated log-normal model given a MRexperiment object
+#' and model matrix. User can decide to shrink parameter estimates.
+#' 
+#' @param obj A MRexperiment object with count data.
+#' @param mod The model for the count distribution.
+#' @param coef Coefficient of interest to grab log fold-changes.
+#' @param B Number of bootstraps to perform if >1. If >1 performs permutation test.
+#' @param szero TRUE/FALSE, shrink zero component parameters.
+#' @param spos TRUE/FALSE, shrink positive component parameters.
+#' @return A list of objects including:
+#' \itemize{
+#'  \item{call - the call made to fitFeatureModel}
+#'  \item{fitZeroLogNormal  - list of parameter estimates for the zero-inflated log normal model}
+#'  \item{design - model matrix}
+#'  \item{taxa - taxa names}
+#'  \item{counts - count matrix}
+#'  \item{pvalues - calculated p-values}
+#'  \item{permuttedfits - permutted z-score estimates under the null}
+#' }
+#' @seealso \code{\link{cumNorm}}
+#' @examples
+#' 
+#' data(lungData)
+#' lungData = lungData[,-which(is.na(pData(lungData)$SmokingStatus))]
+#' lungData=filterData(lungData,present=30,depth=1)
+#' lungData <- cumNorm(lungData, p=.5)
+#' s <- normFactors(lungData)
+#' pd <- pData(lungData)
+#' mod <- model.matrix(~1+SmokingStatus, data=pd)
+#' lungres1 = fitFeatureModel(lungData,mod)
+#' 
+fitFeatureModel<-function(obj,mod,coef=2,B=1,szero=FALSE,spos=TRUE){
+
+  stopifnot(is(obj, "MRexperiment"))
+  if (any(is.na(normFactors(obj)))) 
+      stop("At least one NA normalization factors")
+  if (any(is.na(libSize(obj)))) 
+      stop("Calculate the library size first!")    
+  if (any(is.na(normFactors(obj)))) {
+      stop("Calculate the normalization factors first!")
+  }
+  nf = normFactors(obj)
+  mmCount = cbind(mod, log(nf/median(nf)))
+  colnames(mmCount)[ncol(mmCount)] = "scalingFactor"
+  
+  if(ncol(mmCount)>3){ stop("Can't analyze currently.") }
+  i = permuttedFits = NULL
+
+  # These pieces get to be a part of the new zero-ln model!
+  fitzeroln = fitZeroLogNormal(obj,mmCount,coef=coef,szero=szero,spos=spos)
+  zscore = fitzeroln$logFC/fitzeroln$se
+
+  if(B>1){
+    permutations = replicate(B,sample(mmCount[,coef]))
+    mmCountPerm  = mmCount
+    
+    permuttedFits = foreach(i = seq(B),.errorhandling="remove",
+      .packages=c("metagenomeSeq","glmnet")) %dopar% {
+        mmCountPerm[,coef] = permutations[,i]
+        permFit = fitZeroLogNormal(obj,mmCountPerm,coef=coef,szero=szero,spos=spos)
+        permFit$logFC/permFit$se
+      }
+    zperm = abs(sapply(permuttedFits,function(i)i))
+    pvals = rowMeans(zperm>=abs(zscore),na.rm=TRUE)
+  } else {
+    pvals = 2*(1-pnorm(abs(zscore)))
+  }
+  res = list(call=match.call(),fitZeroLogNormal=fitzeroln,design=mmCount,
+    taxa=rownames(obj),counts=MRcounts(obj),pvalues=pvals,permuttedFits=permuttedFits)
+  res
+}
\ No newline at end of file
diff --git a/R/fitLogNormal.R b/R/fitLogNormal.R
new file mode 100644
index 0000000..26f7bb2
--- /dev/null
+++ b/R/fitLogNormal.R
@@ -0,0 +1,71 @@
+#' Computes a log-normal linear model and permutation based p-values.
+#' 
+#' Wrapper to perform the permutation test on the t-statistic. This is the original
+#' method employed by metastats (for non-sparse large samples). We include CSS normalization
+#' though (optional) and log2 transform the data. In this method the null distribution is not assumed to be a t-dist.
+#' 
+#' 
+#' @param obj A MRexperiment object with count data.
+#' @param mod The model for the count distribution.
+#' @param useCSSoffset Boolean, whether to include the default scaling
+#' parameters in the model or not.
+#' @param B Number of permutations.
+#' @param coef The coefficient of interest.
+#' @param sl The value to scale by (default=1000).
+#'
+#' @return Call made, fit object from lmFit, t-statistics and p-values for each feature.
+#' @export
+#' @examples
+#' 
+#' # This is a simple demonstration
+#' data(lungData)
+#' k = grep("Extraction.Control",pData(lungData)$SampleType)
+#' lungTrim = lungData[,-k]
+#' k = which(rowSums(MRcounts(lungTrim)>0)<30)
+#' lungTrim = cumNorm(lungTrim)
+#' lungTrim = lungTrim[-k,]
+#' smokingStatus = pData(lungTrim)$SmokingStatus
+#' mod = model.matrix(~smokingStatus)
+#' fit = fitLogNormal(obj = lungTrim,mod=mod,B=1)
+#' 
+fitLogNormal <- function(obj,mod,useCSSoffset=TRUE,B=1000,coef=2,sl=1000){
+    if(class(obj)=="MRexperiment"){
+        mat = MRcounts(obj,norm=FALSE,log=FALSE)
+        mat = log2(mat + 1)
+    } else if(class(obj) == "matrix") {
+        mat = obj
+    } else {
+        stop("Object needs to be either a MRexperiment object or matrix")
+    }
+
+	if(useCSSoffset==TRUE){
+		if(any(is.na(normFactors(obj)))){
+            stop("Calculate the normalization factors first!")
+        }
+		mmCount=cbind(mod,log2(normFactors(obj)/sl +1))}
+	else{ 
+       	mmCount=mod
+   	}
+    
+    # fit of the data
+	fitRes = limma::lmFit(mat,mmCount)	
+
+    # The t-statistic
+    tt <- fitRes$coef[,coef] / fitRes$stdev.unscaled[,coef] / fitRes$sigma
+
+    perms = replicate(B,sample(mmCount[,coef]))
+    mmCount1=mmCount[,-coef]
+    nc = ncol(mmCount)
+
+    tobs<- sapply(1:B,function(i){
+        # This code forces the covariate of interest to be a factor (might not apply)
+        mmCountPerm = cbind(mmCount1,factor(perms[,i]))
+        fit = limma::lmFit(mat,mmCountPerm)
+        ttObs <- fit$coef[,nc] / fit$stdev.unscaled[,nc] / fit$sigma
+        ttObs
+    })
+    p = rowMeans(abs(tobs)>=abs(tt))
+
+	dat = list(call=match.call(),fit=fitRes,t = tt,p = p,type="perm")
+	return(dat)
+}
diff --git a/R/fitPA.R b/R/fitPA.R
new file mode 100644
index 0000000..d827962
--- /dev/null
+++ b/R/fitPA.R
@@ -0,0 +1,61 @@
+#' Wrapper to run fisher's test on presence/absence of a feature.
+#' 
+#' This function returns a data frame of p-values, odds ratios, lower and upper
+#' confidence limits for every row of a matrix.
+#' 
+#' 
+#' @param obj A MRexperiment object with a count matrix, or a simple count
+#' matrix.
+#' @param cl Group comparison
+#' @param thres Threshold for defining presence/absence.
+#' @param adjust.method Method to adjust p-values by. Default is "FDR". Options
+#' include "holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr",
+#' "none". See \code{\link{p.adjust}} for more details.
+#' @param cores Number of cores to use.
+#' @param ... Extra parameters for makeCluster
+#' @return Matrix of odds ratios, p-values, lower and upper confidence intervals
+#' @seealso \code{\link{cumNorm}} \code{\link{fitZig}} \code{\link{fitDO}} \code{\link{fitMeta}}
+#' @examples
+#' 
+#' data(lungData)
+#' k = grep("Extraction.Control",pData(lungData)$SampleType)
+#' lungTrim = lungData[,-k]
+#' lungTrim = lungTrim[-which(rowSums(MRcounts(lungTrim)>0)<20),]
+#' res = fitPA(lungTrim,pData(lungTrim)$SmokingStatus);
+#' head(res)
+#'
+fitPA<-function(obj,cl,thres=0,adjust.method='fdr',cores=1,...){
+    x = returnAppropriateObj(obj,norm=FALSE,log=FALSE)>thres
+    nrows= nrow(x);
+    if(is.null(rownames(x))){rownames(x)=1:nrows}
+
+    nClass1 = sum(cl==levels(cl)[1])
+    nClass2 = sum(cl==levels(cl)[2])
+
+    cores <- makeCluster(getOption("cl.cores", cores),...)
+    res = parRapply(cl=cores,x,function(i){
+            tbl = table(1-i,cl)
+            if(sum(dim(tbl))!=4){
+                tbl = array(0,dim=c(2,2));
+                tbl[1,1] = sum(i[cl==levels(cl)[1]])
+                tbl[1,2] = sum(i[cl==levels(cl)[2]])
+                tbl[2,1] = nClass1-tbl[1,1]
+                tbl[2,2] = nClass2-tbl[1,2]
+            }
+            ft <- fisher.test(tbl,workspace=8e6,alternative="two.sided",conf.int=TRUE)
+            cbind(o=ft$estimate,cl=ft$conf.int[1],cu=ft$conf.int[2],p=ft$p.value)
+        })
+    stopCluster(cores)
+    nres = nrows*4
+    seqs = seq(1,nres,by=4)
+    p = res[seqs+3]
+    adjp = p.adjust(p,method=adjust.method)
+    o = res[seqs]
+    cl = res[seqs+1]
+    cu = res[seqs+2]
+    res = data.frame(cbind(o,cl,cu,p,adjp))
+
+    colnames(res) = c("oddsRatio","lower","upper","pvalues","adjPvalues")
+    rownames(res) = rownames(x)
+    return(res)
+}
diff --git a/R/fitTimeSeries.R b/R/fitTimeSeries.R
new file mode 100644
index 0000000..c3ae47d
--- /dev/null
+++ b/R/fitTimeSeries.R
@@ -0,0 +1,610 @@
+#' Trapezoidal Integration
+#' 
+#' Compute the area of a function with values 'y' at the points 'x'.
+#' Function comes from the pracma package.
+#' 
+#' @param x x-coordinates of points on the x-axis
+#' @param y y-coordinates of function values
+#' @return Approximated integral of the function from 'min(x)' to 'max(x)'. 
+#'  Or a matrix of the same size as 'y'.
+#' @rdname trapz
+#' @export
+#' @examples
+#' 
+#' # Calculate the area under the sine curve from 0 to pi:
+#'  n <- 101
+#'  x <- seq(0, pi, len = n)
+#'  y <- sin(x)
+#'  trapz(x, y)          #=> 1.999835504
+#' 
+#' # Use a correction term at the boundary: -h^2/12*(f'(b)-f'(a))
+#'  h  <- x[2] - x[1]
+#'  ca <- (y[2]-y[1]) / h
+#'  cb <- (y[n]-y[n-1]) / h
+#'  trapz(x, y) - h^2/12 * (cb - ca)  #=> 1.999999969
+#'
+trapz <- function(x,y){
+    if (missing(y)) {
+        if (length(x) == 0) 
+            return(0)
+        y <- x
+        x <- 1:length(x)
+    }
+    if (length(x) == 0) 
+        return(0)
+    if (!(is.numeric(x) || is.complex(x)) || !(is.numeric(y) || 
+        is.complex(y))) 
+        stop("Arguments 'x' and 'y' must be real or complex.")
+    m <- length(x)
+    xp <- c(x, x[m:1])
+    yp <- c(numeric(m), y[m:1])
+    n <- 2 * m
+    p1 <- sum(xp[1:(n - 1)] * yp[2:n]) + xp[n] * yp[1]
+    p2 <- sum(xp[2:n] * yp[1:(n - 1)]) + xp[1] * yp[n]
+    return(0.5 * (p1 - p2))
+}
+
+#' smoothing-splines anova fit
+#' 
+#' Sets up a data-frame with the feature abundance, 
+#' class information, time points, sample ids and returns
+#' the fitted values for the fitted model.
+#' 
+#' @param formula Formula for ssanova. Of the form: abundance ~ ... where ... includes any pData slot value.
+#' @param abundance Numeric vector of abundances.
+#' @param class Class membership (factor of group membership).
+#' @param time Time point vector of relative times (same length as abundance).
+#' @param id Sample / patient id.
+#' @param include Parameters to include in prediction.
+#' @param pd Extra variable.
+#' @param ... Extra parameters for ssanova function (see ?ssanova).
+#' @return \itemize{A list containing:
+#' \item     data        : Inputed data
+#' \item     fit         : The interpolated / fitted values for timePoints
+#' \item     se          : The standard error for CI intervals
+#' \item     timePoints  : The time points interpolated over
+#' }
+#' @seealso \code{\link{cumNorm}} \code{\link{fitTimeSeries}} \code{\link{ssPermAnalysis}} \code{\link{ssPerm}} \code{\link{ssIntervalCandidate}}
+#' @rdname ssFit
+#' @export
+#' @examples
+#'
+#' # Not run
+#'
+ssFit <- function(formula,abundance,class,time,id,include=c("class", "time:class"),pd,...) {
+    df = data.frame(abundance = abundance, class = factor(class),
+       time=time,id = factor(id),pd)
+    
+    # The smoothing splines anova model
+    if(missing(formula)){
+        mod = gss::ssanova(abundance ~ time * class, data=df,...)
+    } else{
+        mod = gss::ssanova(formula,data=df,...)
+    }
+
+    fullTime = seq(min(df$time), max(df$time), by=1)
+    values = data.frame(time=fullTime, class=factor(levels(df[,"class"]))[2])
+    fit = predict(mod, values, include=include, se=TRUE)
+    
+    res = list(data=df, fit=fit$fit, se=fit$se, timePoints=fullTime)
+    return(res)
+}
+
+#' class permutations for smoothing-spline time series analysis
+#' 
+#' Creates a list of permuted class memberships for the time series permuation tests.
+#' 
+#' @param df Data frame containing class membership and sample/patient id label.
+#' @param B Number of permutations.
+#' @return A list of permutted class memberships
+#' @seealso \code{\link{cumNorm}} \code{\link{fitTimeSeries}} \code{\link{ssFit}} \code{\link{ssPermAnalysis}} \code{\link{ssIntervalCandidate}}
+#' @rdname ssPerm
+#' @examples
+#'
+#' # Not run
+#'
+ssPerm <- function(df,B) {
+    dat = data.frame(class=df$class, id=df$id)
+    # id  = table(dat$id)
+    id = table(interaction(dat$class,dat$id))
+    id = id[id>0]
+    classes = unique(dat)[,"class"]
+    permList = lapply(1:B,function(i){
+        rep(sample(classes, replace=FALSE),id)
+    })
+    return(permList) 
+}
+
+#' smoothing-splines anova fits for each permutation
+#' 
+#' Calculates the fit for each permutation and estimates 
+#' the area under the null (permutted) model for interesting time 
+#' intervals of differential abundance.
+#' 
+#' @param data Data used in estimation.
+#' @param formula Formula for ssanova. Of the form: abundance ~ ... where ... includes any pData slot value.
+#' @param permList A list of permutted class memberships
+#' @param intTimes Interesting time intervals.
+#' @param timePoints Time points to interpolate over.
+#' @param include Parameters to include in prediction.
+#' @param ... Options for ssanova
+#' @return A matrix of permutted area estimates for time intervals of interest.
+#' @seealso \code{\link{cumNorm}} \code{\link{fitTimeSeries}} \code{\link{ssFit}} \code{\link{ssPerm}} \code{\link{ssIntervalCandidate}}
+#' @rdname ssPermAnalysis
+#' @export
+#' @examples
+#'
+#' # Not run
+#'
+ssPermAnalysis <- function(data,formula,permList,intTimes,timePoints,include=c("class", "time:class"),...){
+    resPerm=matrix(NA, length(permList), nrow(intTimes))
+    permData=data
+    case = data.frame(time=timePoints, class=factor(levels(data$class)[2]))
+    for (j in 1:length(permList)){
+        
+        permData$class = permList[[j]]
+        # The smoothing splines anova model
+        if(!missing(formula)){
+            permModel = gss::ssanova(formula, data=permData,...)
+        } else{
+            permModel = gss::ssanova(abundance ~ time * class,data=permData,...)
+        }
+
+        permFit = cbind(timePoints, (2*predict(permModel,case,include=include, se=TRUE)$fit))
+            for (i in 1:nrow(intTimes)){
+                permArea=permFit[which(permFit[,1]==intTimes[i,1]) : which(permFit[,1]==intTimes[i, 2]), ]
+                resPerm[j, i]=metagenomeSeq::trapz(x=permArea[,1], y=permArea[,2])
+            }
+        if(j%%100==0) show(j)
+    }
+    return(resPerm)
+}
+
+#' calculate interesting time intervals
+#' 
+#' Calculates time intervals of interest using SS-Anova fitted confidence intervals.
+#' 
+#' @param fit SS-Anova fits.
+#' @param standardError SS-Anova se estimates.
+#' @param timePoints Time points interpolated over.
+#' @param positive Positive region or negative region (difference in abundance is positive/negative).
+#' @param C Value for which difference function has to be larger or smaller than (default 0).
+#' @return Matrix of time point intervals of interest
+#' @seealso \code{\link{cumNorm}} \code{\link{fitTimeSeries}} \code{\link{ssFit}} \code{\link{ssPerm}} \code{\link{ssPermAnalysis}}
+#' @rdname ssIntervalCandidate
+#' @export
+#' @examples
+#'
+#' # Not run
+#'
+ssIntervalCandidate <- function(fit, standardError, timePoints, positive=TRUE,C=0){
+    lowerCI = (2*fit - (1.96*2*standardError))
+    upperCI = (2*fit + (1.96*2*standardError))
+    if (positive){
+        abundanceDifference = which( lowerCI>=0 & abs(lowerCI)>=C )
+    }else{
+        abundanceDifference = which( upperCI<=0 & abs(upperCI)>=C )
+    }
+    if (length(abundanceDifference)>0){
+        intIndex=which(diff(abundanceDifference)!=1)
+        intTime=matrix(NA, (length(intIndex)+1), 4)
+        if (length(intIndex)==0){
+            intTime[1,1]=timePoints[abundanceDifference[1]]
+            intTime[1,2]=timePoints[tail(abundanceDifference, n=1)]
+        }else{
+            i=1
+            while(length(intTime)!=0 & length(intIndex)!=0){
+                intTime[i,1]=timePoints[abundanceDifference[1]]
+                intTime[i,2]=timePoints[abundanceDifference[intIndex[1]]]
+                abundanceDifference=abundanceDifference[-c(1:intIndex[1])]
+                intIndex=intIndex[-1]
+                i=i+1
+            }
+        intTime[i,1] = timePoints[abundanceDifference[1]]
+        intTime[i,2] = timePoints[tail(abundanceDifference, n=1)]
+        }
+    }else{
+        intTime=NULL   
+    }   
+    return(intTime)    
+}
+
+#' Discover differentially abundant time intervals using SS-Anova
+#' 
+#' Calculate time intervals of interest using SS-Anova fitted models.
+#' Fitting is performed uses Smoothing Spline ANOVA (SS-Anova) to find interesting intervals of time. 
+#' Given observations at different time points for two groups, fitSSTimeSeries 
+#' calculates a  function that models the difference in abundance between two 
+#' groups across all time. Using permutations we estimate a null distribution 
+#' of areas for the time intervals of interest and report significant intervals of time.
+#' Use of the function for analyses should cite:
+#' "Finding regions of interest in high throughput genomics data using smoothing splines"
+#' Talukder H, Paulson JN, Bravo HC. (In preparation)
+#' 
+#' @param obj metagenomeSeq MRexperiment-class object.
+#' @param formula Formula for ssanova. Of the form: abundance ~ ... where ... includes any pData slot value.
+#' @param feature Name or row of feature of interest.
+#' @param class Name of column in phenoData of MRexperiment-class object for class memberhip.
+#' @param time Name of column in phenoData of MRexperiment-class object for relative time.
+#' @param id Name of column in phenoData of MRexperiment-class object for sample id.
+#' @param lvl Vector or name of column in featureData of MRexperiment-class object for aggregating counts (if not OTU level).
+#' @param include Parameters to include in prediction.
+#' @param C Value for which difference function has to be larger or smaller than (default 0).
+#' @param B Number of permutations to perform
+#' @param norm When aggregating counts to normalize or not.
+#' @param log Log2 transform.
+#' @param sl Scaling value.
+#' @param ... Options for ssanova
+#' @return List of matrix of time point intervals of interest, Difference in abundance area and p-value, fit, area permutations, and call.
+#' @return A list of objects including:
+#' \itemize{
+#'  \item{timeIntervals - Matrix of time point intervals of interest, area of differential abundance, and pvalue.}
+#'  \item{data  - Data frame of abundance, class indicator, time, and id input.}
+#'  \item{fit - Data frame of fitted values of the difference in abundance, standard error estimates and timepoints interpolated over.}
+#'  \item{perm - Differential abundance area estimates for each permutation.}
+#'  \item{call - Function call.}
+#' }
+#' @rdname fitSSTimeSeries
+#' @seealso \code{\link{cumNorm}} \code{\link{ssFit}} \code{\link{ssIntervalCandidate}} \code{\link{ssPerm}} \code{\link{ssPermAnalysis}} \code{\link{plotTimeSeries}}
+#' @export
+#' @examples
+#'
+#' data(mouseData)
+#' res = fitSSTimeSeries(obj=mouseData,feature="Actinobacteria",
+#'    class="status",id="mouseID",time="relativeTime",lvl='class',B=2)
+#'
+fitSSTimeSeries <- function(obj,formula,feature,class,time,id,lvl=NULL,include=c("class", "time:class"),C=0,B=1000,norm=TRUE,log=TRUE,sl=1000,...) {
+    
+    if(!is.null(lvl)){
+        aggData = aggregateByTaxonomy(obj,lvl,norm=norm,sl=sl)
+        abundance = MRcounts(aggData,norm=FALSE,log=log,sl=1)[feature,]
+    } else { 
+        abundance = MRcounts(obj,norm=norm,log=log,sl=sl)[feature,]
+    }
+    class = pData(obj)[,class]
+    time  = pData(obj)[,time]
+    id    = pData(obj)[,id]
+    if(any(sapply(list(id,time,class),length)==0)){
+        stop("provide class, time, and id names")
+    }
+
+    if(!missing(formula)){
+        prep=ssFit(formula=formula,abundance=abundance,class=class,
+            time=time,id=id,include=include,pd=pData(obj),...)
+    } else {
+        prep=ssFit(abundance=abundance,class=class,time=time,id=id,
+            include=include,pd=pData(obj),...)
+    }
+    indexPos = ssIntervalCandidate(fit=prep$fit, standardError=prep$se, 
+        timePoints=prep$timePoints, positive=TRUE,C=C)
+    indexNeg = ssIntervalCandidate(fit=prep$fit, standardError=prep$se, 
+        timePoints=prep$timePoints, positive=FALSE,C=C)
+    indexAll = rbind(indexPos, indexNeg)
+
+    if(sum(indexAll[,1]==indexAll[,2])>0){
+        indexAll=indexAll[-which(indexAll[,1]==indexAll[,2]),]
+    }
+
+    fit = 2*prep$fit
+    se  = 2*prep$se
+    timePoints = prep$timePoints
+    fits = data.frame(fit = fit, se = se, timePoints = timePoints)
+    
+    if(!is.null(indexAll)){
+      if(length(indexAll)>0){
+        indexAll=matrix(indexAll,ncol=4)
+        colnames(indexAll)=c("Interval start", "Interval end", "Area", "p.value")
+        predArea    = cbind(prep$timePoints, (2*prep$fit))
+        permList    = ssPerm(prep$data,B=B)
+        if(!missing(formula)){
+            permResult  = ssPermAnalysis(data=prep$data,formula=formula,permList=permList,
+                intTimes=indexAll,timePoints=prep$timePoints,include=include,...)
+        } else {
+            permResult  = ssPermAnalysis(data=prep$data,permList=permList,
+                intTimes=indexAll,timePoints=prep$timePoints,include=include,...)
+        }
+        
+        for (i in 1:nrow(indexAll)){
+            origArea=predArea[which(predArea[,1]==indexAll[i,1]):which(predArea[,1]==indexAll[i, 2]), ]
+            actArea=trapz(x=origArea[,1], y=origArea[,2])
+            indexAll[i,3] = actArea
+            if(actArea>0){
+                indexAll[i,4] = 1 - (length(which(actArea>permResult[,i]))+1)/(B+1)
+            }else{
+                indexAll[i,4] = (length(which(actArea>permResult[,i]))+1)/(B+1)
+            }
+        if(indexAll[i,4]==0){ 
+        indexAll[i,4] = 1/(B+1)
+        }
+        }
+
+        res = list(timeIntervals=indexAll,data=prep$data,fit=fits,perm=permResult)
+        return(res)
+      }
+    }else{
+        indexAll = "No statistically significant time intervals detected"
+        res = list(timeIntervals=indexAll,data=prep$data,fit=fits,perm=NULL)
+        return(res)
+    }
+}
+
+#' Discover differentially abundant time intervals
+#' 
+#' Calculate time intervals of significant differential abundance.
+#' Currently only one method is implemented (ssanova). fitSSTimeSeries is called with method="ssanova".
+#' 
+#' @param obj metagenomeSeq MRexperiment-class object.
+#' @param formula Formula for ssanova. Of the form: abundance ~ ... where ... includes any pData slot value.
+#' @param feature Name or row of feature of interest.
+#' @param class Name of column in phenoData of MRexperiment-class object for class memberhip.
+#' @param time Name of column in phenoData of MRexperiment-class object for relative time.
+#' @param id Name of column in phenoData of MRexperiment-class object for sample id.
+#' @param method Method to estimate time intervals of differentially abundant bacteria (only ssanova method implemented currently).
+#' @param lvl Vector or name of column in featureData of MRexperiment-class object for aggregating counts (if not OTU level).
+#' @param include Parameters to include in prediction.
+#' @param C Value for which difference function has to be larger or smaller than (default 0).
+#' @param B Number of permutations to perform.
+#' @param norm When aggregating counts to normalize or not.
+#' @param log Log2 transform.
+#' @param sl Scaling value.
+#' @param ... Options for ssanova
+#' @return List of matrix of time point intervals of interest, Difference in abundance area and p-value, fit, area permutations, and call.
+#' @return A list of objects including:
+#' \itemize{
+#'  \item{timeIntervals - Matrix of time point intervals of interest, area of differential abundance, and pvalue.}
+#'  \item{data  - Data frame of abundance, class indicator, time, and id input.}
+#'  \item{fit - Data frame of fitted values of the difference in abundance, standard error estimates and timepoints interpolated over.}
+#'  \item{perm - Differential abundance area estimates for each permutation.}
+#'  \item{call - Function call.}
+#' }
+#' @rdname fitTimeSeries
+#' @seealso \code{\link{cumNorm}} \code{\link{fitSSTimeSeries}} \code{\link{plotTimeSeries}}
+#' @export
+#' @examples
+#'
+#' data(mouseData)
+#' res = fitTimeSeries(obj=mouseData,feature="Actinobacteria",
+#'    class="status",id="mouseID",time="relativeTime",lvl='class',B=2)
+#'
+fitTimeSeries <- function(obj,formula,feature,class,time,id,method=c("ssanova"),
+                        lvl=NULL,include=c("class", "time:class"),C=0,B=1000,
+                        norm=TRUE,log=TRUE,sl=1000,...) {
+    if(method=="ssanova"){
+        if(requireNamespace("gss")){
+            if(missing(formula)){
+                res = fitSSTimeSeries(obj=obj,feature=feature,class=class,time=time,id=id,
+                        lvl=lvl,C=C,B=B,norm=norm,log=log,sl=sl,include=include,...)
+            } else {
+                res = fitSSTimeSeries(obj=obj,formula=formula,feature=feature,class=class,
+                        time=time,id=id,lvl=lvl,C=C,B=B,norm=norm,log=log,sl=sl,
+                        include=include,...)
+            }
+        }
+    }
+    res = c(res,call=match.call())
+    return(res)
+}
+
+#' Plot difference function for particular bacteria
+#' 
+#' Plot the difference in abundance for significant features.
+#' 
+#' @param res Output of fitTimeSeries function
+#' @param C Value for which difference function has to be larger or smaller than (default 0).
+#' @param xlab X-label.
+#' @param ylab Y-label.
+#' @param main Main label.
+#' @param ... Extra plotting arguments.
+#' @return Plot of difference in abundance for significant features.
+#' @rdname plotTimeSeries
+#' @seealso \code{\link{fitTimeSeries}}
+#' @export
+#' @examples
+#'
+#' data(mouseData)
+#' res = fitTimeSeries(obj=mouseData,feature="Actinobacteria",
+#'    class="status",id="mouseID",time="relativeTime",lvl='class',B=10)
+#' plotTimeSeries(res)
+#'
+plotTimeSeries<-function(res,C=0,xlab="Time",ylab="Difference in abundance",main="SS difference function prediction",...){
+    fit = res$fit$fit
+    se  = res$fit$se
+    timePoints = res$fit$timePoints
+    confInt95 = 1.96
+    sigDiff = res$timeIntervals
+
+    minValue=min(fit-(confInt95*se))-.5
+    maxValue=max(fit+(confInt95*se))+.5
+
+    plot(x=timePoints, y=fit, ylim=c(minValue, maxValue), xlab=xlab, ylab=ylab, main=main, ...)
+
+    for (i in 1:nrow(sigDiff)){
+        begin=sigDiff[i,1]
+        end=sigDiff[i,2]
+        indBegin=which(timePoints==begin)
+        indEnd=which(timePoints==end)
+        x=timePoints[indBegin:indEnd]
+        y=fit[indBegin:indEnd]
+        xx=c(x, rev(x))
+        yy=c(y, rep(0, length(y)))
+        polygon(x=xx, yy, col="grey")
+    }
+    lines(x=timePoints, y=fit, pch="")
+    lines(x=timePoints, y=fit+(confInt95*se), pch="", lty=2)
+    lines(x=timePoints, y=fit-(confInt95*se), pch="", lty=2)
+    abline(h=C)
+}
+
+#' Plot abundances by class
+#' 
+#' Plot the abundance of values for each class using 
+#' a spline approach on the estimated full model.
+#' 
+#' @param res Output of fitTimeSeries function
+#' @param formula Formula for ssanova. Of the form: abundance ~ ... where ... includes any pData slot value.
+#' @param xlab X-label.
+#' @param ylab Y-label.
+#' @param color0 Color of samples from first group.
+#' @param color1 Color of samples from second group.
+#' @param include Parameters to include in prediction.
+#' @param ... Extra plotting arguments.
+#' @return Plot for abundances of each class using a spline approach on estimated null model.
+#' @rdname plotClassTimeSeries
+#' @seealso \code{\link{fitTimeSeries}}
+#' @export
+#' @examples
+#'
+#' data(mouseData)
+#' res = fitTimeSeries(obj=mouseData,feature="Actinobacteria",
+#'    class="status",id="mouseID",time="relativeTime",lvl='class',B=10)
+#' plotClassTimeSeries(res,pch=21,bg=res$data$class,ylim=c(0,8))
+#'
+plotClassTimeSeries<-function(res,formula,xlab="Time",ylab="Abundance",color0="black",
+                            color1="red",include=c("1","class", "time:class"),...){
+    dat = res$data
+    if(missing(formula)){
+        mod = gss::ssanova(abundance ~ time * class, data=dat)
+    } else{
+        mod = gss::ssanova(formula,data=dat)
+    }
+    
+    timePoints = seq(min(dat$time),max(dat$time),by=1)
+    group0 = data.frame(time=timePoints,class=levels(dat$class)[1])
+    group1 = data.frame(time=timePoints,class=levels(dat$class)[2])
+
+    pred0  = predict(mod, newdata=group0,include=include, se=TRUE)
+    pred1  = predict(mod, newdata=group1,include=include, se=TRUE)
+    
+    plot(x=dat$time,y=dat$abundance,xlab=xlab,ylab=ylab,...)
+    lines(x=group0$time,y=pred0$fit,col=color0)
+    lines(x=group0$time,y=pred0$fit+(1.96*pred0$se),lty=2,col=color0)
+    lines(x=group0$time,y=pred0$fit-(1.96*pred0$se),lty=2,col=color0)
+
+    lines(x=group1$time,y=pred1$fit,col=color1)
+    lines(x=group1$time,y=pred1$fit+(1.96*pred1$se),lty=2,col=color1)
+    lines(x=group1$time,y=pred1$fit-(1.96*pred1$se),lty=2,col=color1)
+}
+
+#' Discover differentially abundant time intervals for all bacteria
+#' 
+#' Calculate time intervals of significant differential abundance over all
+#' bacteria of a particularly specified level (lvl). If not lvl is specified,
+#' all OTUs are analyzed. Warning, function can take a while
+#' 
+#' @param obj metagenomeSeq MRexperiment-class object.
+#' @param lvl Vector or name of column in featureData of MRexperiment-class object for aggregating counts (if not OTU level).
+#' @param B Number of permutations to perform.
+#' @param ... Options for \code{\link{fitTimeSeries}}, except feature.
+#' @return List of lists of matrices of time point intervals of interest, Difference in abundance area and p-value, fit, area permutations.
+#' @return A list of lists for which each includes:
+#' \itemize{
+#'  \item{timeIntervals - Matrix of time point intervals of interest, area of differential abundance, and pvalue.}
+#'  \item{data  - Data frame of abundance, class indicator, time, and id input.}
+#'  \item{fit - Data frame of fitted values of the difference in abundance, standard error estimates and timepoints interpolated over.}
+#'  \item{perm - Differential abundance area estimates for each permutation.}
+#'  \item{call - Function call.}
+#' }
+#' @rdname fitMultipleTimeSeries
+#' @seealso \code{\link{cumNorm}} \code{\link{fitSSTimeSeries}} \code{\link{fitTimeSeries}}
+#' @export
+#' @examples
+#'
+#' data(mouseData)
+#' res = fitMultipleTimeSeries(obj=mouseData,lvl='phylum',class="status",
+#'           id="mouseID",time="relativeTime",B=1)
+#'
+fitMultipleTimeSeries <- function(obj,lvl=NULL,B=1,...) {
+    if(is.null(lvl)){
+        bacteria = seq(nrow(obj))
+    } else {
+        if(is.factor(fData(obj)[,lvl])){
+            fData(obj)[,lvl] = as.character(fData(obj)[,lvl])
+        }
+        bacteria = unique(fData(obj)[,lvl])
+    }
+    fits = lapply(bacteria,function(bact){
+        try(fitTimeSeries(obj,lvl=lvl,feature=bact,B=B,...))
+    })
+    names(fits) = bacteria
+    fits = c(fits,call=match.call())
+    return(fits)
+}
+
+#' With a list of fitTimeSeries results, generate
+#' an MRexperiment that can be plotted with metavizr
+#' 
+#' @param obj Output of fitMultipleTimeSeries
+#' @param sampleNames Sample names for plot
+#' @param sampleDescription Description of samples for plot axis label
+#' @param taxonomyLevels Feature names for plot
+#' @param taxonomyHierarchyRoot Root of feature hierarchy for MRexperiment
+#' @param taxonomyDescription Description of features for plot axis label
+#' @param featuresOfInterest The features to select from the fitMultipleTimeSeries output
+#' @return MRexperiment that contains fitTimeSeries data, featureData, and phenoData
+#' @rdname ts2MRexperiment
+#' @seealso \code{\link{fitTimeSeries}} \code{\link{fitMultipleTimeSeries}}
+#' @export
+#' @examples
+#'
+#' data(mouseData)
+#' res = fitMultipleTimeSeries(obj=mouseData,lvl='phylum',class="status",
+#'           id="mouseID",time="relativeTime",B=1)
+#' obj = ts2MRexperiment(res)
+#' obj
+#'
+ts2MRexperiment<-function(obj,sampleNames=NULL,
+                          sampleDescription="timepoints",
+                          taxonomyLevels=NULL,
+                          taxonomyHierarchyRoot="bacteria",
+                          taxonomyDescription="taxonomy",
+                          featuresOfInterest = NULL){
+  if(is.null(obj)){
+    stop("Matrix cannot be null")
+  }
+  if(is.null(sampleNames)){
+    numSamples <- dim(obj[[1]]$fit)[1]
+    sampleNames <- paste("Timepoint", 1:numSamples, sep="_")
+  }
+  
+  if(is.null(featuresOfInterest)){
+    hasFit <- lapply(1:length(obj), function(i) which(!is.null(obj[[i]]$fit)))
+    featuresOfInterest <- which(hasFit == 1)
+  }
+  
+  if(is.null(taxonomyLevels)){
+    numLevels <- length(featuresOfInterest)
+    taxonomyLevels <- names(obj)[featuresOfInterest]
+  }
+
+  numSamples <- length(sampleNames)
+  numLevels <- length(taxonomyLevels)
+  numFeaturesOfInterest <- length(featuresOfInterest)
+
+  rangeSamples <- 1:numSamples
+  rangeFeaturesOfInterest <- 1:numFeaturesOfInterest
+
+  results <- do.call(rbind, lapply(rangeFeaturesOfInterest,function(i){ t(obj[[featuresOfInterest[i]]]$fit)[1,]}))
+
+  dfSamples <- data.frame(x=rangeSamples,row.names=sampleNames)
+  metaDataSamples <-data.frame(labelDescription=sampleDescription)
+  annotatedDFSamples <- AnnotatedDataFrame()
+  pData(annotatedDFSamples) <- dfSamples
+  varMetadata(annotatedDFSamples) <- metaDataSamples
+  validObject(annotatedDFSamples)
+  
+  dfFeatures <- data.frame(taxonomy1=rep(taxonomyHierarchyRoot, numLevels),taxonomy2=taxonomyLevels)
+  metaDataFeatures <-data.frame(labelDescription=paste(taxonomyDescription, 1:2, sep=""))
+  annotatedDFFeatures <- AnnotatedDataFrame()
+  pData(annotatedDFFeatures) <- dfFeatures
+  varMetadata(annotatedDFFeatures) <- metaDataFeatures
+  validObject(annotatedDFFeatures)
+  
+  fitTimeSeriesMRexp <- newMRexperiment(counts=results,
+                                        phenoData=annotatedDFSamples,
+                                        featureData=annotatedDFFeatures)
+  return(fitTimeSeriesMRexp)
+}
+# load("~/Dropbox/Projects/metastats/package/git/metagenomeSeq/data/mouseData.rda")
+# classMatrix = aggregateByTaxonomy(mouseData,lvl='class',norm=TRUE,out='MRexperiment')
+# data(mouseData)
+# fitTimeSeries(obj=mouseData,feature="Actinobacteria",class="status",id="mouseID",time="relativeTime",lvl='class',B=10)
diff --git a/R/fitZeroLogNormal.R b/R/fitZeroLogNormal.R
new file mode 100644
index 0000000..1cb5767
--- /dev/null
+++ b/R/fitZeroLogNormal.R
@@ -0,0 +1,299 @@
+#' Compute the log fold-change estimates for the zero-inflated log-normal model
+#' 
+#' Run the zero-inflated log-normal model given a MRexperiment object
+#' and model matrix. Not for the average user, assumes structure of the model matrix. 
+#' 
+#' @param obj A MRexperiment object with count data.
+#' @param mod The model for the count distribution.
+#' @param coef Coefficient of interest to grab log fold-changes.
+#' @param szero TRUE/FALSE, shrink zero component parameters.
+#' @param spos TRUE/FALSE, shrink positive component parameters.
+#' @return A list of objects including:
+#' \itemize{
+#'  \item{logFC - the log fold-change estimates}
+#'  \item{adjFactor  - the adjustment factor based on the zero component}
+#'  \item{se - standard error estimates}
+#'  \item{fitln - parameters from the log-normal fit}
+#'  \item{fitzero - parameters from the logistic fit}
+#'  \item{zeroRidge - output from the ridge regression}
+#'  \item{posRidge - output from the ridge regression}
+#'  \item{tauPos - estimated tau^2 for positive component}
+#'  \item{tauZero - estimated tau^2 for zero component}
+#'  \item{exclude - features to exclude for various reasons, e.g. all zeros}
+#'  \item{zeroExclude - features to exclude for various reasons, e.g. all zeros}
+#' }
+#' @seealso \code{\link{cumNorm}} \code{\link{fitFeatureModel}}
+fitZeroLogNormal<-function(obj,mod,coef=2,szero=TRUE,spos=TRUE){
+  positiveMod = mod[,-ncol(mod)]
+  zeroMod = mod
+  
+  nf <- normFactors(obj)
+  mat <- MRcounts(obj, norm=TRUE, log=FALSE,sl=median(nf))
+  posIndices = mat>0
+
+  nr = nrow(mat)
+  nc = ncol(mat)
+  exclude = zeroExclude = tauZero = tauPos = posRidge = zeroRidge = NULL
+
+  results = array(NA,dim=c(nr,3))
+  rownames(results) = rownames(mat)
+  colnames(results) = c("logFC","adjFactor","se")
+
+  # calc log-normal component
+  fitln = calcPosComponent(mat,positiveMod,posIndices)
+
+  # Don't calculate shrinkage with special cases
+  zeros2 = which(fitln[,"s2"]==0)
+  rs = rowsum(t(1-(1-posIndices)),positiveMod[,coef])
+  exclude = union(which(rs[1,]<=1),which(rs[2,]<=1))
+  zeroExclude  = which(colSums(rs)>=(nc-3))
+  exclude = union(zeros2,exclude); if(length(exclude)==0) exclude=NULL
+  if(length(zeroExclude)==0) zeroExclude=NULL
+
+  sdensity = density(fitln[,"s2"],na.rm=TRUE)
+  smode = sdensity$x[which.max(sdensity$y)]
+  if(length(zeros2)>0) fitln[zeros2,"s2"] = smode
+
+  # shrink positive
+  if(spos==TRUE){
+    shrinkPos<-calcShrinkParameters(fitln,coef,smode,exclude)
+    tauPos = shrinkPos$tau
+    vpost = shrinkPos$v.post
+    fitln[,"s2"] = vpost
+
+    posRidge = sapply(seq(nr),function(i){
+        k = which(posIndices[i,])
+        y = log(mat[i,k])
+        x = positiveMod[k,]
+        l = vpost[i]/(nrow(x)*tauPos)
+        if(i %in% exclude) return(matrix(rep(NA,ncol(positiveMod))))
+        ridge = glmnet(y=y,x=x,lambda=l,alpha=0)
+        as.matrix(coefficients(ridge)[colnames(positiveMod),])
+    })
+    posFittedCoefficients = t(posRidge)
+    rownames(posFittedCoefficients) = rownames(mat)
+    fitln[rownames(posFittedCoefficients),1:ncol(positiveMod)] = posFittedCoefficients
+  }
+  # calc zero component
+  fitzero=calcZeroComponent(mat,zeroMod,posIndices)
+
+  sdensity = density(fitzero[,"s2"],na.rm=TRUE)
+  smode = sdensity$x[which.max(sdensity$y)]
+  if(length(exclude)>0) fitzero[exclude,"s2"] = smode
+  
+  # shrink zero
+  if(szero==TRUE){
+    shrinkZero<-calcShrinkParameters(fitzero,coef,smode,exclude)
+    tauZero = shrinkZero$tau
+    vpostZero = shrinkZero$v.post
+    fitzero[,"s2"] = vpostZero
+    
+    zeroRidge = sapply(1:nr,function(i){
+      y = posIndices[i,]
+      l = 1/(nc*tauZero)
+      if(i %in% c(zeroExclude,exclude)) return(matrix(rep(NA,ncol(zeroMod))))
+      ridge = glmnet(y=y,x=zeroMod,lambda=l,family="binomial",alpha=0,
+        penalty.factor = c(rep(1,(ncol(zeroMod)-1)),0))
+      as.matrix(coefficients(ridge))[colnames(zeroMod),]
+    })
+    zeroFittedCoefficients = t(zeroRidge)
+    rownames(zeroFittedCoefficients) = rownames(mat)
+    fitzero[rownames(zeroFittedCoefficients),1:ncol(zeroMod)] = zeroFittedCoefficients
+  }
+
+  # calc se
+  se = calcStandardError(zeroMod,fitln,fitzero,coef=coef,exclude=union(exclude,zeroExclude))
+  se[zeroExclude] = sqrt(fitln[zeroExclude,"s2"])
+
+  # calc adjFactor
+  adjFactor = calcZeroAdjustment(fitln,fitzero,zeroMod,coef,exclude=exclude)
+  adjFactor[zeroExclude] = 0
+
+  # calc logFC
+  logFC <- fitln[,coef] + adjFactor
+
+  list(logFC=logFC,adjFactor=adjFactor,se=se,
+    fitln=fitln,fitzero=fitzero,zeroRidge=zeroRidge,posRidge=posRidge,
+    tauPos=tauPos,tauZero=tauZero,exclude=exclude,zeroExclude=zeroExclude)
+}
+#' Positive component
+#' 
+#' Fit the positive (log-normal) component
+#' 
+#' @param mat A matrix of normalized counts
+#' @param mod A model matrix
+#' @param weights Weight matrix for samples and counts
+#' @seealso \code{\link{fitZeroLogNormal}} \code{\link{fitFeatureModel}}
+calcPosComponent<-function(mat,mod,weights){
+  fitln <- lmFit(log(mat),mod,weights=weights)
+  b = coefficients(fitln)
+  df = fitln$df
+  res = residuals(fitln,log(mat))
+  s2 = sapply(seq(nrow(res)),function(i){
+      sum(res[i,which(weights[i,])]^2,na.rm=TRUE)/df[i]
+    })
+  fitln<-data.frame(b=b,s2=s2,df=df)
+  rownames(fitln) = rownames(mat)
+  fitln
+}
+#' Zero component
+#' 
+#' Fit the zero (logisitic) component
+#' 
+#' @param mat A matrix of normalized counts
+#' @param mod A model matrix
+#' @param weights Weight matrix for samples and counts
+#' @seealso \code{\link{fitZeroLogNormal}} \code{\link{fitFeatureModel}}
+calcZeroComponent<-function(mat,mod,weights){
+  fitzero <- sapply(seq(nrow(mat)), function(i) {
+    fit <- glm.fit(mod, weights[i,], family=binomial())
+    cf = coefficients(fit)
+    df = fit$df.residual
+    mc = exp(mod %*% cf)
+    s2 = sum((weights[i, ] - t(mc/(1 + mc)))^2)/df    
+    # s2 = sum(residuals(fit)^2)/df
+    c(beta= cf, s2 = s2, df = df)
+  })
+  fitzero <- data.frame(t(fitzero))
+  rownames(fitzero) = rownames(mat)
+  fitzero
+}
+#' Calculate shrinkage parameters
+#' 
+#' Calculate the shrunken variances and variance of parameters of interest across features.
+#' 
+#' @param fit A matrix of fits as outputted by calcZeroComponent or calcPosComponent
+#' @param coef Coefficient of interest
+#' @param mins2 minimum variance estimate
+#' @param exclude Vector of features to exclude when shrinking
+#' @seealso \code{\link{fitZeroLogNormal}} \code{\link{fitFeatureModel}}
+calcShrinkParameters<-function(fit,coef,mins2,exclude=NULL){
+
+  if(is.null(exclude)){
+    shrunkVar <- limma::squeezeVar(fit[,"s2"], fit[,"df"])
+    v.post = shrunkVar$var.post
+    tau <-var(fit[,coef],na.rm=TRUE)
+  } else {
+    v.post = rep(mins2,nrow(fit))
+    shrunkVar <- limma::squeezeVar(fit[-exclude,"s2"], fit[-exclude,"df"])
+    v.post[-exclude] <- shrunkVar$var.post
+    tau <- var(fit[-exclude,coef],na.rm=TRUE)
+  }
+  list(tau=tau,v.post=v.post)
+}
+#' Calculate the zero-inflated component's adjustment factor
+#' 
+#' Calculate the log ratio of average marginal probabilities for each sample
+#' having a positive count. This becomes the adjustment factor for the log 
+#' fold change. 
+#' 
+#' @param fitln A matrix with parameters from the log-normal fit
+#' @param fitzero A matrix with parameters from the logistic fit
+#' @param mod The zero component model matrix
+#' @param coef Coefficient of interest
+#' @param exclude List of features to exclude
+#' @seealso \code{\link{fitZeroLogNormal}} \code{\link{fitFeatureModel}}
+calcZeroAdjustment<-function(fitln,fitzero,mod,coef,exclude=NULL){
+  b = fitln[,1:(ncol(mod)-1)]
+  beta = fitzero[,1:ncol(mod)]
+  # calculate for zero adjust factor
+  mod1 <- mod
+  mod1[,coef] <- 1
+  theta1 <- mod1 %*% t(beta)
+  p1 <- exp(theta1) / (1+exp(theta1))
+  p1 <- t(p1)
+  if(ncol(b)>2) p1 = p1*exp(t(mod[,3:(ncol(mod)-1)]%*%t(b[,3:ncol(b)])))
+  mean_p1 <- rowMeans(p1)
+
+  mod0 <- mod
+  mod0[,coef] <- 0
+  theta0 <- mod0 %*% t(beta)
+  p0 <- exp(theta0) / (1+exp(theta0))
+  p0 <- t(p0)
+  if(ncol(b)>2) p0 = p0*exp(t(mod[,3:(ncol(mod)-1)]%*%t(b[,3:ncol(b)])))
+  mean_p0 <- rowMeans(p0)
+
+  adjFactor <- log(mean_p1/mean_p0)
+  if(!is.null(exclude)) adjFactor[exclude] = NA
+  adjFactor
+}
+
+#' Calculate the zero-inflated log-normal statistic's standard error
+#' 
+#' Calculat the se for the model. Code modified from
+#' "Adjusting for covariates in zero-inflated gamma and 
+#' zero-inflated log-normal models for semicontinuous data", ED Mills 
+#' 
+#' @param mod The zero component model matrix
+#' @param fitln A matrix with parameters from the log-normal fit
+#' @param fitzero A matrix with parameters from the logistic fit
+#' @param coef Coefficient of interest
+#' @param exclude List of features to exclude
+#' @seealso \code{\link{fitZeroLogNormal}} \code{\link{fitFeatureModel}}
+calcStandardError<-function(mod,fitln,fitzero,coef=2,exclude=NULL){
+  mod0 = mod1 = mod
+  mod1[,coef] <- 1
+  mod0[,coef] <- 0
+  ve = rep(NA,nrow(fitln))
+  features = seq(nrow(fitln))
+  if(length(exclude)>0) features = features[-exclude]
+
+# a) need to speed up
+# b) need to include more covariates
+
+  fullvar = sapply(features,function(i){
+      beta = fitzero[i,1:ncol(mod)]
+      b = fitln[i,1:(ncol(mod)-1)]
+      s = as.numeric(fitln[i,"s2"])
+
+      mu0 = as.vector(exp(mod0[,-ncol(mod)]%*%t(b) + .5*s))
+      mu1 = as.vector(exp(mod1[,-ncol(mod)]%*%t(b) + .5*s))
+
+      # calculate for zero adjust factor
+      theta <- mod %*% t(beta)
+      theta1 <- mod1 %*% t(beta)
+      theta0 <- mod0 %*% t(beta)
+      p  <- t(exp(theta) / (1+exp(theta)))
+      p1 <- t(exp(theta1) / (1+exp(theta1)))
+      p0 <- t(exp(theta0) / (1+exp(theta0)))
+
+      checkInverse <- function(m){
+        class(try(qr.solve(m),silent=T))=="matrix"
+      }
+      
+      Dp2 <- diag(length(p))*as.vector(p*(1-p))
+      infz = t(mod)%*%Dp2%*%mod
+      Dp <- diag(length(p))*as.vector(p)
+      infln = t(mod[,-ncol(mod)])%*%Dp%*%mod[,-ncol(mod)]
+      
+      if(checkInverse(infz)) {
+        invinf_z <-qr.solve(infz)
+      } else {
+        return(NA)
+      }
+      if(checkInverse(infln)) {
+        invinf_ln<-as.numeric(s)*qr.solve(infln)
+      } else {
+        return(NA)
+      }
+      invInfFull = as.matrix( bdiag(invinf_z,invinf_ln, (2*s^2/sum(p))) )
+
+      logRatioBeta0<- (mean(p1*(1-p1)*mu0)/mean(p1*mu0)) - (mean(p0*(1-p0)*mu0)/mean(p0*mu0))
+      logRatioBeta1<-mean(p1*(1-p1)*mu0)/mean(p1*mu0)
+      logRatioBeta2<- (mean(mod[,3]*p1*(1-p1)*mu0)/mean(p1*mu0)) - (mean(mod[,3]*p0*(1-p0)*mu0)/mean(p0*mu0))
+      # logRatioB2<- (mean(mod[,3]*t(p1)*exp(mod0%*%t(b)))/mean(t(p1)*exp(mod0%*%t(b))))-
+      #    (mean(mod[,3]*t(p0)*exp(mod0%*%t(b)))/mean(t(p0)*exp(mod0%*%t(b))))
+      # logRatioFull = t(c(logRatioBeta0,logRatioBeta1,logRatioBeta2,0,1,logRatioB2,0))
+      logRatioFull = t(c(logRatioBeta0,logRatioBeta1,logRatioBeta2,0,1,0))
+      logRatioVar = logRatioFull%*%invInfFull%*%t(logRatioFull)
+      logRatioVar
+    })
+  if(!is.null(exclude)){
+    if(length(features)>0){
+      ve[features] = fullvar
+    }
+  } else {
+    ve = fullvar
+  }
+  sqrt(ve)
+}
diff --git a/R/fitZig.R b/R/fitZig.R
new file mode 100644
index 0000000..d174e6f
--- /dev/null
+++ b/R/fitZig.R
@@ -0,0 +1,274 @@
+#' Computes the weighted fold-change estimates and t-statistics.
+#' 
+#' Wrapper to actually run the Expectation-maximization algorithm and estimate
+#' $f_count$ fits.  Maximum-likelihood estimates are approximated using the EM
+#' algorithm where we treat mixture membership $delta_ij = 1$ if $y_ij$ is
+#' generated from the zero point mass as latent indicator variables. The
+#' density is defined as $f_zig(y_ij = pi_j(S_j)*f_0(y_ij) +(1-pi_j (S_j)) *
+#' f_count(y_ij; mu_i, sigma_i^2)$. The log-likelihood in this extended model
+#' is: $(1-delta_ij) log f_count(y;mu_i,sigma_i^2 )+delta_ij log
+#' pi_j(s_j)+(1-delta_ij) log (1-pi_j (s_j))$. The responsibilities are defined
+#' as $z_ij = pr(delta_ij=1 | data)$.
+#' 
+#' 
+#' @param obj A MRexperiment object with count data.
+#' @param mod The model for the count distribution.
+#' @param zeroMod The zero model, the model to account for the change in the
+#' number of OTUs observed as a linear effect of the depth of coverage.
+#' @param useCSSoffset Boolean, whether to include the default scaling
+#' parameters in the model or not.
+#' @param control The settings for fitZig.
+#' @param useMixedModel Estimate the correlation between duplicate 
+#' features or replicates using duplicateCorrelation.
+#' @param ... Additional parameters for duplicateCorrelation.
+#' @return A list of objects including:
+#' \itemize{
+#' 	\item{call - the call made to fitZig}
+#' 	\item{fit  - 'MLArrayLM' Limma object of the weighted fit}
+#' 	\item{countResiduals - standardized residuals of the fit}
+#' 	\item{z - matrix of the posterior probabilities}
+#' 	\item{eb - output of eBayes, moderated t-statistics, moderated F-statistics, etc}
+#' 	\item{taxa - vector of the taxa names}
+#' 	\item{counts - the original count matrix input}
+#' 	\item{zeroMod - the zero model matrix}
+#' 	\item{zeroCoef - the zero model fitted results}
+#' 	\item{stillActive - convergence}
+#' 	\item{stillActiveNLL - nll at convergence}
+#' 	\item{dupcor - correlation of duplicates}
+#' }
+#' @export
+#' @seealso \code{\link{cumNorm}} \code{\link{zigControl}}
+#' @examples
+#'
+#' # This is a simple demonstration 
+#' data(lungData)
+#' k = grep("Extraction.Control",pData(lungData)$SampleType)
+#' lungTrim = lungData[,-k]
+#' k = which(rowSums(MRcounts(lungTrim)>0)<30)
+#' lungTrim = cumNorm(lungTrim)
+#' lungTrim = lungTrim[-k,]
+#' smokingStatus = pData(lungTrim)$SmokingStatus
+#' mod = model.matrix(~smokingStatus)
+#' # The maxit is not meant to be 1 - this is for demonstration/speed
+#' settings = zigControl(maxit=1,verbose=FALSE)
+#' fit = fitZig(obj = lungTrim,mod=mod,control=settings)
+#' 
+fitZig <- function(obj, 
+                   mod, 
+                   zeroMod=NULL,
+                   useCSSoffset=TRUE,
+                   control=zigControl(),
+                   useMixedModel=FALSE,
+                   ...)
+{
+	stopifnot( is( obj, "MRexperiment" ) )
+	if(any(is.na(normFactors(obj)))) stop("At least one NA normalization factors")
+	if(any(is.na(libSize(obj)))) stop("Calculate the library size first!")
+	
+	y <- MRcounts(obj, norm=FALSE, log=FALSE)
+	nc <- ncol(y) #nsamples
+	nr <- nrow(y) #nfeatures
+
+  # Normalization step
+	Nmatrix <- log2(y + 1)
+		
+  # Initializing the model matrix
+	if (useCSSoffset == TRUE){
+		if (any(is.na(normFactors(obj)))) {
+		  stop("Calculate the normalization factors first!")
+		}
+		mmCount <- cbind(mod, log2(normFactors(obj)/1000 + 1))
+		colnames(mmCount)[ncol(mmCount)] <- "scalingFactor"
+	} else { 
+		mmCount <- mod
+	}
+
+	if (is.null(zeroMod)) {
+	  if (any(is.na(libSize(obj)))) {
+		  stop("Calculate the library size first!") 
+		}
+		
+	  mmZero <- model.matrix(~1+log(libSize(obj)))
+	} else { 
+		mmZero <- zeroMod
+	}
+	
+	dat <- .do_fitZig(Nmatrix, mmCount, mmZero, control=control, useMixedModel=useMixedModel, ...)
+
+	assayData(obj)[["z"]] <- dat$z
+	assayData(obj)[["zUsed"]] <- dat$zUsed
+	dat$zUsed <- NULL
+	
+	dat <- c(dat, list(call=match.call(),taxa=rownames(obj),counts=y))
+	dat
+}
+
+.do_fitZig <- function(y, 
+                       count_model_matrix, 
+                       zero_model_matrix, 
+                       control=zigControl(), 
+                       useMixedModel=FALSE,
+                       ...) 
+{
+  # Initialization
+  tol <- control$tol
+  maxit <- control$maxit
+  verbose <- control$verbose
+  dfMethod <- control$dfMethod
+  pvalMethod <- control$pvalMethod
+  
+  nr <- nrow(y)
+  nc <- ncol(y)
+  
+  zeroIndices <- (y == 0)
+  z <- matrix(0, nrow=nr, ncol=nc)
+  z[zeroIndices] <- 0.5
+  zUsed <- z
+  
+  curIt <- 0
+  nllOld <- rep(Inf, nr)
+  nll <- rep(Inf, nr)
+  nllUSED <- nll
+  stillActive <- rep(TRUE, nr)
+  stillActiveNLL <- rep(1, nr)
+  dupcor <- NULL
+  
+  modRank <- ncol(count_model_matrix)
+  # E-M Algorithm
+  while (any(stillActive) && (curIt < maxit)) {
+    
+    # M-step for count density (each feature independently)
+    if(curIt == 0){
+      fit <- doCountMStep(z, y, count_model_matrix, stillActive, dfMethod=dfMethod)
+    } else {
+      fit <- doCountMStep(z, y, count_model_matrix, stillActive, fit2=fit, dfMethod=dfMethod)
+    }
+    
+    # M-step for zero density (all features together)
+    zeroCoef <- doZeroMStep(z, zeroIndices, zero_model_matrix)
+    
+    # E-step
+    z <- doEStep(fit$residuals, zeroCoef$residuals, zeroIndices)
+    zzdata <- getZ(z, zUsed, stillActive, nll, nllUSED);
+    zUsed <- zzdata$zUsed;
+    
+    # NLL 
+    nll <- getNegativeLogLikelihoods(z, fit$residuals, zeroCoef$residuals)
+    eps <- getEpsilon(nll, nllOld)
+    active <- isItStillActive(eps, tol,stillActive,stillActiveNLL,nll)
+    stillActive <- active$stillActive;
+    stillActiveNLL <- active$stillActiveNLL;
+    if (verbose == TRUE){
+      cat(sprintf("it=%2d, nll=%0.2f, log10(eps+1)=%0.2f, stillActive=%d\n", curIt, mean(nll,na.rm=TRUE), log10(max(eps,na.rm=TRUE)+1), sum(stillActive)))
+    }
+    nllOld <- nll
+    curIt <- curIt + 1
+    
+    if (sum(rowSums((1-z) > 0) <= modRank, na.rm=TRUE) > 0) {
+      k <- which(rowSums((1-z) > 0) <= modRank)
+      stillActive[k] <- FALSE;
+      stillActiveNLL[k] <- nll[k]
+    }
+  }
+  
+  if (useMixedModel == TRUE) {
+    dupcor <- duplicateCorrelation(y, count_model_matrix, weights=(1-z), ...)
+    fit$fit <- limma::lmFit(y, count_model_matrix, weights=(1-z), correlation=dupcor$consensus, ...)
+    countCoef <- fit$fit$coefficients
+    countMu <- tcrossprod(countCoef, count_model_matrix)
+    fit$residuals <- sweep((y-countMu), 1, fit$fit$sigma, "/")
+  }
+  
+  eb <- limma::eBayes(fit$fit)
+  dat <- list(fit=fit$fit, countResiduals=fit$residuals,
+              z=z, zUsed=zUsed, eb=eb, zeroMod=zero_model_matrix, stillActive=stillActive, 
+              stillActiveNLL=stillActiveNLL, zeroCoef=zeroCoef, dupcor=dupcor)
+  dat
+}
+
+# #' Function to perform fitZig bootstrap
+# #' 
+# #' Calculates bootstrap stats
+# #' 
+# #' @param y Log-transformed matrix
+# #' @param y string for the y-axis
+# #' @param norm is the data normalized?
+# #' @param log is the data logged?
+# #' @return vector of x,y labels
+# #' 
+# performBoostrap<-function(fit){
+
+
+# 	zeroIndices=(y==0)
+# 	z=matrix(0,nrow=nr, ncol=nc)
+# 	z[zeroIndices]=0.5
+# 	zUsed = z
+
+# 	curIt=0
+# 	nllOld=rep(Inf, nr)
+# 	nll=rep(Inf, nr)
+# 	nllUSED=nll
+# 	stillActive=rep(TRUE, nr)
+# 	stillActiveNLL=rep(1, nr)
+	
+# 	tt <- fit$fit$coef[,coef] / fit$fit$stdev.unscaled[,coef] / fit$fit$sigma
+# 	perms = replicate(B,sample(mmCount[,coef]))
+# 	mmCount1=mmCount[,-coef]
+
+# # Normalization step
+# 	Nmatrix = log2(y+1)
+		
+# # Initializing the model matrix
+# 	if(useCSSoffset==TRUE){
+# 		if(any(is.na(normFactors(obj)))){stop("Calculate the normalization factors first!")}
+# 		mmCount=cbind(mod,log2(normFactors(obj)/1000 +1))
+# 		colnames(mmCount)[ncol(mmCount)] = "scalingFactor"
+# 	}
+# 	else{ 
+# 		mmCount=mod
+# 	}
+
+# 	if(is.null(zeroMod)){
+# 		if(any(is.na(libSize(obj)))){ stop("Calculate the library size first!") }
+# 			mmZero=model.matrix(~1+log(libSize(obj)))
+# 		} else{ 
+# 			mmZero=zeroMod
+# 		}
+	
+# 	modRank=ncol(mmCount)
+# 	# E-M Algorithm
+# 	while(any(stillActive) && curIt<maxit) {
+	
+# # M-step for count density (each feature independently)
+# 		if(curIt==0){
+# 			fit=doCountMStep(z, Nmatrix, mmCount, stillActive,dfMethod=dfMethod);
+# 		} else {
+# 			fit=doCountMStep(z, Nmatrix, mmCount, stillActive,fit2=fit,dfMethod=dfMethod)
+# 		}
+
+# # M-step for zero density (all features together)
+# 		zeroCoef = doZeroMStep(z, zeroIndices, mmZero)
+			
+# # E-step
+# 		z = doEStep(fit$residuals, zeroCoef$residuals, zeroIndices)
+# 		zzdata<-getZ(z,zUsed,stillActive,nll,nllUSED);
+# 		zUsed = zzdata$zUsed;
+# # NLL 
+# 		nll = getNegativeLogLikelihoods(z, fit$residuals, zeroCoef$residuals)
+# 		eps = getEpsilon(nll, nllOld)
+# 		active = isItStillActive(eps, tol,stillActive,stillActiveNLL,nll)
+# 		stillActive = active$stillActive;
+# 		stillActiveNLL = active$stillActiveNLL;
+# 		if(verbose==TRUE){
+# 			cat(sprintf("it=%2d, nll=%0.2f, log10(eps+1)=%0.2f, stillActive=%d\n", curIt, mean(nll,na.rm=TRUE), log10(max(eps,na.rm=TRUE)+1), sum(stillActive)))
+# 		}
+# 		nllOld=nll
+# 		curIt=curIt+1
+
+# 		if(sum(rowSums((1-z)>0)<=modRank,na.rm=TRUE)>0){
+# 			k = which(rowSums((1-z)>0)<=modRank)
+# 			stillActive[k] = FALSE;
+# 			stillActiveNLL[k] = nll[k]
+# 		}
+# 	}
+# }
diff --git a/R/getCountDensity.R b/R/getCountDensity.R
new file mode 100644
index 0000000..616566e
--- /dev/null
+++ b/R/getCountDensity.R
@@ -0,0 +1,22 @@
+#' Compute the value of the count density function from the count model
+#' residuals.
+#' 
+#' Calculate density values from a normal: $f(x) = 1/(sqrt (2 pi ) sigma )
+#' e^-((x - mu )^2/(2 sigma^2))$.  Maximum-likelihood estimates are
+#' approximated using the EM algorithm where we treat mixture membership
+#' $deta_ij$ = 1 if $y_ij$ is generated from the zero point mass as latent
+#' indicator variables. The density is defined as $f_zig(y_ij = pi_j(S_j) cdot
+#' f_0(y_ij) +(1-pi_j (S_j))cdot f_count(y_ij;mu_i,sigma_i^2)$. The
+#' log-likelihood in this extended model is $(1-delta_ij) log
+#' f_count(y;mu_i,sigma_i^2 )+delta_ij log pi_j(s_j)+(1-delta_ij)log (1-pi_j
+#' (sj))$. The responsibilities are defined as $z_ij = pr(delta_ij=1 | data)$.
+#' 
+#' 
+#' @param residuals Residuals from the count model.
+#' @param log Whether or not we are calculating from a log-normal distribution.
+#' @return Density values from the count model residuals.
+#' @seealso \code{\link{fitZig}}
+getCountDensity <-
+function(residuals, log=FALSE){
+	dnorm(residuals,log=log)
+}
diff --git a/R/getEpsilon.R b/R/getEpsilon.R
new file mode 100644
index 0000000..d9b8403
--- /dev/null
+++ b/R/getEpsilon.R
@@ -0,0 +1,22 @@
+#' Calculate the relative difference between iterations of the negative
+#' log-likelihoods.
+#' 
+#' Maximum-likelihood estimates are approximated using the EM algorithm where
+#' we treat mixture membership $delta_ij$ = 1 if $y_ij$ is generated from the
+#' zero point mass as latent indicator variables. The log-likelihood in this
+#' extended model is $(1-delta_ij) log f_count(y;mu_i,sigma_i^2 )+delta_ij log
+#' pi_j(s_j)+(1-delta_ij)log (1-pi_j (sj))$. The responsibilities are defined
+#' as $z_ij = pr(delta_ij=1 | data)$.
+#' 
+#' 
+#' @param nll Vector of size M with the current negative log-likelihoods.
+#' @param nllOld Vector of size M with the previous iterations negative
+#' log-likelihoods.
+#' @return Vector of size M of the relative differences between the previous
+#' and current iteration nll.
+#' @seealso \code{\link{fitZig}}
+getEpsilon <-
+function(nll, nllOld){
+	eps=(nllOld-nll)/nllOld
+	ifelse(!is.finite(nllOld), Inf, eps)
+}
diff --git a/R/getNegativeLogLikelihoods.R b/R/getNegativeLogLikelihoods.R
new file mode 100644
index 0000000..61f814d
--- /dev/null
+++ b/R/getNegativeLogLikelihoods.R
@@ -0,0 +1,27 @@
+#' Calculate the negative log-likelihoods for the various features given the
+#' residuals.
+#' 
+#' Maximum-likelihood estimates are approximated using the EM algorithm where
+#' we treat mixture membership $delta_ij$ = 1 if $y_ij$ is generated from the
+#' zero point mass as latent indicator variables. The log-likelihood in this
+#' extended model is $(1-delta_ij) log f_count(y;mu_i,sigma_i^2 )+delta_ij log
+#' pi_j(s_j)+(1-delta_ij)log (1-pi_j (sj))$. The responsibilities are defined
+#' as $z_ij = pr(delta_ij=1 | data and current values)$.
+#' 
+#' 
+#' @param z Matrix (m x n) of estimate responsibilities (probabilities that a
+#' count comes from a spike distribution at 0).
+#' @param countResiduals Residuals from the count model.
+#' @param zeroResiduals Residuals from the zero model.
+#' @return Vector of size M of the negative log-likelihoods for the various
+#' features.
+#' @seealso \code{\link{fitZig}}
+getNegativeLogLikelihoods <-
+function(z, countResiduals, zeroResiduals){
+	pi=getPi(zeroResiduals)
+	countDensity=getCountDensity(countResiduals, log=TRUE)
+	res=(1-z) * countDensity
+	res=res+sweep(z, 2, log(pi), FUN="*")
+	res=res+sweep(1-z,2,log(1-pi), FUN="*")
+	-rowSums(res)
+}
diff --git a/R/getPi.R b/R/getPi.R
new file mode 100644
index 0000000..775db7b
--- /dev/null
+++ b/R/getPi.R
@@ -0,0 +1,17 @@
+#' Calculate the mixture proportions from the zero model / spike mass model
+#' residuals.
+#' 
+#' F(x) = 1 / (1 + exp(-(x-m)/s)) (the CDF of the logistic distribution).
+#' Provides the probability that a real-valued random variable X with a given
+#' probability distribution will be found at a value less than or equal to x.
+#' The output are the mixture proportions for the samples given the residuals
+#' from the zero model.
+#' 
+#' 
+#' @param residuals Residuals from the zero model.
+#' @return Mixture proportions for each sample.
+#' @seealso \code{\link{fitZig}}
+getPi <-
+function(residuals){
+	plogis(residuals)
+}
diff --git a/R/getZ.R b/R/getZ.R
new file mode 100644
index 0000000..a10f2c5
--- /dev/null
+++ b/R/getZ.R
@@ -0,0 +1,29 @@
+#' Calculate the current Z estimate responsibilities (posterior probabilities)
+#' 
+#' Calculate the current Z estimate responsibilities (posterior probabilities)
+#' 
+#' 
+#' @param z Matrix (m x n) of estimate responsibilities (probabilities that a
+#' count comes from a spike distribution at 0).
+#' @param zUsed Matrix (m x n) of estimate responsibilities (probabilities that
+#' a count comes from a spike distribution at 0) that are actually used
+#' (following convergence).
+#' @param stillActive A vector of size M booleans saying if a feature is still
+#' active or not.
+#' @param nll Vector of size M with the current negative log-likelihoods.
+#' @param nllUSED Vector of size M with the converged negative log-likelihoods.
+#' @return A list of updated zUsed and nllUSED.
+#' @seealso \code{\link{fitZig}}
+getZ <-
+function(z,zUsed,stillActive,nll,nllUSED){
+
+	nllUSED[stillActive] = nll[stillActive]
+	k =which(nll< (nllUSED))
+	if(length(k)>0){
+		zUsed[k,]=z[k,]
+		nllUSED[k] = nll[k]
+	}
+	zUsed[stillActive,] = z[stillActive,]
+	dat = list(zUsed = zUsed,nllUSED = nllUSED)
+	return(dat);
+}
diff --git a/R/isItStillActive.R b/R/isItStillActive.R
new file mode 100644
index 0000000..d891574
--- /dev/null
+++ b/R/isItStillActive.R
@@ -0,0 +1,24 @@
+#' Function to determine if a feature is still active.
+#'
+#' In the Expectation Maximization routine features posterior probabilities routinely converge based on a tolerance threshold. This function checks
+#' whether or not the feature's negative log-likelihood (measure of the fit) has changed or not.
+#'
+#' @param eps Vector of size M (features) representing the relative difference between the new nll and old nll.
+#' @param tol The threshold tolerance for the difference
+#' @param stillActive A vector of size M booleans saying if a feature is still active or not.
+#' @param stillActiveNLL A vector of size M recording the negative log-likelihoods of the various features, updated for those still active.
+#' @param nll Vector of size M with the current negative log-likelihoods.
+#' @return None.
+#'
+#' @name isItStillActive
+#' @seealso \code{\link{fitZig}}
+#'
+isItStillActive <-
+function(eps, tol,stillActive,stillActiveNLL,nll){
+	stillActive[stillActive]=!is.finite(eps[stillActive]) | eps[stillActive]>tol
+	stillActive[which(is.na(eps))]=FALSE
+
+	stillActiveNLL[stillActive]=nll[stillActive]
+	dat = list(stillActive=stillActive,stillActiveNLL = stillActiveNLL)
+	return(dat)
+}
diff --git a/R/loadBiom.R b/R/loadBiom.R
new file mode 100644
index 0000000..3e7d8e1
--- /dev/null
+++ b/R/loadBiom.R
@@ -0,0 +1,19 @@
+#' Load objects organized in the Biom format.
+#' 
+#' Wrapper to load Biom formatted object. 
+#' 
+#' @param file The biom object filepath.
+#' @return A MRexperiment object.
+#' @seealso \code{\link{loadMeta}} \code{\link{loadPhenoData}} \code{\link{newMRexperiment}} \code{\link{biom2MRexperiment}}
+#' @examples
+#' 
+#' #library(biomformat)
+#' rich_dense_file = system.file("extdata", "rich_dense_otu_table.biom", package = "biomformat")
+#' x = loadBiom(rich_dense_file)
+#' x
+loadBiom <- function(file){
+	requireNamespace("biomformat")
+	x = biomformat::read_biom(file);
+	mrobj = biom2MRexperiment(x);
+	return(mrobj);
+}
diff --git a/R/loadMeta.R b/R/loadMeta.R
new file mode 100644
index 0000000..e2f7d5a
--- /dev/null
+++ b/R/loadMeta.R
@@ -0,0 +1,26 @@
+#' Load a count dataset associated with a study.
+#' 
+#' Load a matrix of OTUs in a tab delimited format
+#' 
+#' 
+#' @aliases loadMeta metagenomicLoader
+#' @param file Path and filename of the actual data file.
+#' @param sep File delimiter.
+#' @return A list with objects 'counts' and 'taxa'.
+#' @seealso \code{\link{loadPhenoData}}
+#' @examples
+#' 
+#' dataDirectory <- system.file("extdata", package="metagenomeSeq")
+#' lung = loadMeta(file.path(dataDirectory,"CHK_NAME.otus.count.csv"))
+#' 
+loadMeta <- function(file,sep="\t")
+{
+	dat2 <- read.table(file,header=FALSE,sep=sep,nrows=1,stringsAsFactors=FALSE);
+	subjects <- as.character(dat2[1,-1]);
+	classes <-c("character",rep("numeric",length(subjects)));
+	dat3 <- read.table(file,header=FALSE,skip=1,sep=sep,colClasses=classes,row.names=1);
+	colnames(dat3) = subjects
+	taxa<- rownames(dat3);
+	obj <- list(counts=as.data.frame(dat3), taxa=as.data.frame(taxa))
+	return(obj);
+}
diff --git a/R/loadMetaQ.R b/R/loadMetaQ.R
new file mode 100644
index 0000000..b8cd7e2
--- /dev/null
+++ b/R/loadMetaQ.R
@@ -0,0 +1,28 @@
+#' Load a count dataset associated with a study set up in a Qiime format.
+#' 
+#' Load a matrix of OTUs in Qiime's format
+#' 
+#' 
+#' @aliases loadMetaQ qiimeLoader
+#' @param file Path and filename of the actual data file.
+#' @return An list with 'counts' containing the count data, 'taxa' containing the otu annotation, and 'otus'.
+#' @seealso \code{\link{loadMeta}} \code{\link{loadPhenoData}}
+#' @examples
+#' 
+#' # see vignette
+#' 
+loadMetaQ <- function(file) {	
+	dat2 <- read.delim(file,header=FALSE,stringsAsFactors=FALSE,nrows=1,skip=1);
+	len = ncol(dat2)
+	subjects = as.character(dat2[1,-c(1,len)]);
+	classes <-c("character",rep("numeric",(len-2)),"character");
+	dat3 <- read.delim(file,header=TRUE,colClasses=classes,skip=1);
+	taxa<- dat3[,len];
+	taxa<-as.matrix(taxa);
+	matrix <- dat3[,-c(1,len)]
+	colnames(matrix) = subjects;
+	otus = dat3[,1];
+	rownames(matrix) = otus;
+	obj <- list(counts=as.data.frame(matrix), taxa=as.data.frame(taxa),otus = as.data.frame(otus))
+	return(obj);
+}
diff --git a/R/loadPhenoData.R b/R/loadPhenoData.R
new file mode 100644
index 0000000..ea5ca7d
--- /dev/null
+++ b/R/loadPhenoData.R
@@ -0,0 +1,52 @@
+#' Load a clinical/phenotypic dataset associated with a study.
+#' 
+#' Load a matrix of metadata associated with a study.
+#' 
+#' 
+#' @aliases loadPhenoData phenoData
+#' @param file Path and filename of the actual clinical file.
+#' @param tran Boolean. If the covariates are along the columns and samples
+#' along the rows, then tran should equal TRUE.
+#' @param sep The separator for the file.
+#' @return The metadata as a dataframe.
+#' @seealso \code{\link{loadMeta}}
+#' @examples
+#' 
+#' dataDirectory <- system.file("extdata", package="metagenomeSeq")
+#' clin = loadPhenoData(file.path(dataDirectory,"CHK_clinical.csv"),tran=TRUE)
+#' 
+loadPhenoData <-function(file,tran=TRUE,sep="\t")
+{
+	dat2 <- read.table(file,header=FALSE,sep=sep);
+
+# no. of subjects 
+	subjects <- array(0,dim=c(ncol(dat2)-1));
+	for(i in 1:length(subjects)) {
+		subjects[i] <- as.character(dat2[1,i+1]);
+	}
+# no. of rows
+	rows <- nrow(dat2);
+	
+# load remaining counts
+	matrix <- array(NA, dim=c(length(subjects),rows-1));
+	covar = array(NA,dim=c(rows-1,1)); 
+	
+	for(i in 1:(rows)-1){
+		for(j in 1:(length(subjects))){ 
+			matrix[j,i] <- as.character(dat2[i+1,j+1]);
+		}
+		covar[i] = as.character(dat2[i+1,1]);
+	}  
+	
+		
+	phenoData<-as.data.frame(matrix);
+	
+	colnames(phenoData) = covar;
+	if(length(unique(subjects))==(length(subjects))){
+		rownames(phenoData) = subjects;
+	}
+    if(tran==TRUE){
+        phenoData = as.data.frame(t(phenoData))
+	}
+	return(phenoData);
+}
diff --git a/R/mergeMRexperiments.R b/R/mergeMRexperiments.R
new file mode 100644
index 0000000..0117530
--- /dev/null
+++ b/R/mergeMRexperiments.R
@@ -0,0 +1,103 @@
+#' Extract the essentials of an MRexperiment.
+#'
+#' @param obj MRexperiment-class object.
+#'
+#' @return \itemize{A list containing:
+#' \item     counts        : Count data
+#' \item     librarySize         : The column sums / library size / sequencing depth 
+#' \item     normFactors          : The normalization scaling factors
+#' \item     pheno  : phenotype table
+#' \item     feat  : feature table
+#' }
+#' 
+#' @examples
+#'
+#' data(mouseData)
+#' head(metagenomeSeq:::extractMR(mouseData))
+#'
+extractMR<-function(obj){
+	mat = MRcounts(obj)
+	ls  = as.vector(libSize(obj))
+	norm= as.vector(normFactors(obj))
+	pd  = pData(obj)
+	fd  = fData(obj)
+	dat = list(counts=mat,librarySize=ls,normFactors=norm,pheno=pd,feat=fd)
+	return(dat)
+}
+
+#' Merge two tables
+#'
+#' @param x Table 1.
+#' @param y Table 2.
+#'
+#' @return Merged table
+#'
+mergeTable<-function(x,y){
+	rows = union(rownames(x),rownames(y))
+	cols = union(colnames(x),colnames(y))
+	fullmat = array(NA,dim=c(length(rows),length(cols)))
+	rownames(fullmat) = rows
+	colnames(fullmat) = cols
+	fullmat[rownames(x),colnames(x)] = as.matrix(x)
+	fullmat[rownames(y),colnames(y)] = as.matrix(y)
+	fullmat
+}
+
+#' Merge two MRexperiment objects together
+#'
+#' This function will take two MRexperiment objects and merge them together finding common
+#' OTUs. If there are OTUs not found in one of the two MRexperiments then a message will
+#' announce this and values will be coerced to zero for the second table.
+#'
+#' @param x MRexperiment-class object 1.
+#' @param y MRexperiment-class object 2.
+#'
+#' @return Merged MRexperiment-class object.
+#' @export
+#'
+#' @examples
+#' data(mouseData)
+#' newobj = mergeMRexperiments(mouseData,mouseData)
+#' newobj
+#' 
+#' # let me know if people are interested in an option to merge by keys instead of row names.
+#' data(lungData)
+#' newobj = mergeMRexperiments(mouseData,lungData)
+#' newobj
+mergeMRexperiments<-function(x,y){
+	xdat = extractMR(x)
+	ydat = extractMR(y)
+	xmat = xdat$counts; ymat = ydat$counts
+	cnames = union(colnames(xmat),colnames(ymat))
+	if(length(cnames)!=(ncol(x)+ncol(y))){
+		message("MRexperiment 1 and 2 share sample ids; adding labels to sample ids.")
+		newXnames = paste(colnames(xmat),"x",sep=".")
+		newYnames = paste(colnames(ymat),"y",sep=".")
+		cnames = union(newXnames,newYnames)
+		colnames(xdat$counts) = 
+			rownames(xdat$pheno) = 
+			names(xdat$normFactors) = 
+			names(xdat$librarySize) = 
+			newXnames
+		colnames(ydat$counts) = 
+			rownames(ydat$pheno) = 
+			names(ydat$normFactors) = 
+			names(ydat$librarySize) = 
+			newYnames
+	}
+	counts = mergeTable(xdat$counts,ydat$counts)
+	pheno  = as.data.frame(mergeTable(xdat$pheno,ydat$pheno))
+	feat   = as.data.frame(mergeTable(xdat$feat,ydat$feat))
+	librarySize = c(xdat$librarySize,ydat$librarySize)
+	normFactors = c(xdat$normFactors,ydat$normFactors)
+	if(any(is.na(counts))){
+		message("There were OTUs not shared between objects. Coercing values to 0.")
+		counts[is.na(counts)] = 0
+	}
+	obj = newMRexperiment(counts=counts,
+					normFactors=normFactors,
+					libSize=librarySize,
+					phenoData = AnnotatedDataFrame(pheno),
+					featureData=AnnotatedDataFrame(feat))
+	return(obj)
+}
diff --git a/R/misc.R b/R/misc.R
new file mode 100644
index 0000000..1f6c931
--- /dev/null
+++ b/R/misc.R
@@ -0,0 +1,70 @@
+#' Table of features unique to a group
+#' 
+#' Creates a table of features, their index, number of positive samples in a group,
+#' and the number of reads in a group. Can threshold features by a minimum no. of reads
+#' or no. of samples. 
+#' 
+#' @param obj Either a MRexperiment object or matrix.
+#' @param cl A vector representing assigning samples to a group.
+#' @param nsamples The minimum number of positive samples.
+#' @param nreads The minimum number of raw reads.
+#' @return Table of features unique to a group
+#' @examples
+#' data(mouseData)
+#' head(uniqueFeatures(mouseData[1:100,],cl=pData(mouseData)[,3]))
+#' 
+uniqueFeatures<-function(obj,cl,nsamples=0,nreads=0){
+	if (class(obj) == "MRexperiment") {
+		mat = MRcounts(obj, norm = FALSE, log = FALSE)
+	}
+	else if (class(obj) == "matrix") {
+		mat = obj
+	}
+	else {
+		stop("Object needs to be either a MRexperiment object or matrix")
+	}
+	res = by(t(mat),cl,colSums)
+	res = do.call("rbind",res)
+	kreads = (colSums(res==0)>0)
+	
+	mat = mat>0
+	resPos = by(t(mat),cl,colSums)
+	resPos = do.call("rbind",resPos)
+	ksamples = (colSums(resPos==0)>0)
+	
+	featureIndices = intersect(which(ksamples),which(kreads))
+	numberReads = t(res[,featureIndices])
+	colnames(numberReads) = paste("Reads in",colnames(numberReads))
+	numberPosSamples = t(resPos[,featureIndices])
+	colnames(numberPosSamples) = paste("Samp. in",colnames(numberPosSamples))
+	featureIndices = featureIndices
+	featureNames = rownames(mat[featureIndices,])
+	
+	df = cbind(featureIndices,numberPosSamples,numberReads)
+	interesting = which(rowSums(numberReads)>=nreads & rowSums(numberPosSamples)>=nsamples)
+	df[interesting,]
+}
+
+#' Function to make labels simpler
+#' 
+#' Beginning to transition to better axes for plots
+#' 
+#' @param x string for the x-axis
+#' @param y string for the y-axis
+#' @param norm is the data normalized?
+#' @param log is the data logged?
+#' @return vector of x,y labels
+#' @examples
+#' metagenomeSeq::makeLabels(norm=TRUE,log=TRUE) 
+makeLabels<-function(x="samples",y="abundance",norm,log){
+	yl = xl = ""
+	if(log == TRUE){
+		yl =  paste(yl,"Log2")
+	}
+	if(norm == TRUE){
+		yl = paste(yl,"normalized")
+	}
+	yl = paste(yl,y)
+	xl = paste(xl,x)
+	return(c(xl,yl))
+}
diff --git a/R/plotBubble.R b/R/plotBubble.R
new file mode 100644
index 0000000..cd8aea9
--- /dev/null
+++ b/R/plotBubble.R
@@ -0,0 +1,96 @@
+#' Basic plot of binned vectors.
+#' 
+#' This function plots takes two vectors, calculates the contingency table and 
+#' plots circles sized by the contingency table value. Optional significance vectors
+#' of the values significant will shade the circles by proportion of significance.
+#' 
+#' 
+#' @param yvector A vector of values represented along y-axis.
+#' @param xvector A vector of values represented along x-axis.
+#' @param sigvector A vector of the names of significant features (names should match x/yvector).
+#' @param nbreaks Number of bins to break yvector and xvector into.
+#' @param ybreak The values to break the yvector at.
+#' @param xbreak The values to break the xvector at.
+#' @param scale Scaling of circle bin sizes.
+#' @param local Boolean to shade by signficant bin numbers (TRUE) or overall proportion (FALSE).
+#' @param ... Additional plot arguments.
+#' @return A matrix of features along rows, and the group membership along columns.
+#' @seealso \code{\link{plotMRheatmap}}
+#' @examples
+#' 
+#' data(mouseData)
+#' mouseData = mouseData[which(rowSums(mouseData)>139),]
+#' sparsity = rowMeans(MRcounts(mouseData)==0)
+#' lor = log(fitPA(mouseData,cl=pData(mouseData)[,3])$oddsRatio)
+#' plotBubble(lor,sparsity,main="lor ~ sparsity")
+#' # Example 2
+#' x = runif(100000)
+#' y = runif(100000)
+#' plotBubble(y,x)
+#'
+plotBubble<-function(yvector,xvector,sigvector=NULL,nbreaks=10, ybreak=quantile(yvector,p=seq(0,1,length.out=nbreaks)),
+    xbreak=quantile(xvector,p=seq(0,1,length.out=nbreaks)),scale=1,local=FALSE,...){
+
+    ybreaks = cut(yvector,breaks=ybreak,include.lowest=TRUE)
+    xbreaks = cut(xvector,breaks=xbreak,include.lowest=TRUE)
+    contTable = lapply(levels(xbreaks),function(i){
+        k = which(xbreaks==i)
+        sapply(levels(ybreaks),function(j){
+            length(which(ybreaks[k]==j))
+            })
+        })
+    names(contTable) = levels(xbreaks)
+    yvec = 1:length(levels(ybreaks))
+    nc = length(yvec)
+
+    if(!is.null(sigvector)){
+        # I am calculating contTable twice if sigvector==TRUE
+        # This can be changed to if else statement to return two rows
+        contSig = lapply(levels(xbreaks),function(i){
+            k = which(xbreaks==i)
+            sapply(levels(ybreaks),function(j){
+                x = sum(names(yvector[k])[which(ybreaks[k]==j)]%in%sigvector)/length(which(ybreaks[k]==j))
+                if(is.na(x)) x = 0
+                x
+            })
+        })
+        if(local==TRUE){
+            contSigTable = sapply(contSig,function(i){i})
+            linMap <- function(x, a, b) approxfun(range(x), c(a, b))(x)
+            if(length(levels(ybreak))!=length(levels(xbreak))) {
+                warning("Not square matrix - this is not implemented currently")
+            }
+            contSigTable = matrix(linMap(contSigTable,a=0,b=1),nrow=length(levels(ybreaks)))
+            for(i in 1:length(levels(ybreaks))){
+                    contSig[[i]] = contSigTable[,i]
+            }
+        }
+    } else {
+        contSig = lapply(levels(xbreaks),function(i){
+            k = which(xbreaks==i)
+            sapply(levels(ybreaks),function(j){
+                1
+            })
+        })
+    }
+
+    medianSizes = median(unlist(contTable))
+    plot(y=yvec,x=rep(1,nc),cex=scale*contTable[[1]]/medianSizes,
+        xlim=c(-0.25,nc+.25),ylim=c(-0.25,nc+.25),bty="n",xaxt="n",yaxt="n",
+        xlab="",ylab="",pch=21,...,bg=rgb(blue=1,red=0,green=0,alpha=contSig[[1]]))
+    for(i in 2:length(contTable)){
+        points(y=yvec,x=rep(i,nc),cex =scale*contTable[[i]]/medianSizes,pch=21,bg=rgb(blue=1,red=0,green=0,alpha=contSig[[i]]))
+    }
+    axis(1,at = 1:nc,labels=levels(xbreaks),las=2,cex.axis=.5)
+    axis(2,at = 1:nc,labels=levels(ybreaks),las=2,cex.axis=.5)
+
+    res = cbind(as.character(ybreaks),as.character(xbreaks))
+    colnames(res) = c("yvector","xvector")
+    rownames(res) = names(yvector)
+    if(is.null(sigvector)){
+        sig = rep(0,nrow(res))
+        sig[which(rownames(res)%in%sigvector)] = 1
+        res = cbind(res,sig)
+    }
+    invisible(res)
+}
diff --git a/R/plotCorr.R b/R/plotCorr.R
new file mode 100644
index 0000000..980933f
--- /dev/null
+++ b/R/plotCorr.R
@@ -0,0 +1,35 @@
+#' Basic correlation plot function for normalized or unnormalized counts.
+#' 
+#' This function plots a heatmap of the "n" features with greatest variance
+#' across rows.
+#' 
+#' 
+#' @param obj A MRexperiment object with count data.
+#' @param n The number of features to plot. This chooses the "n" features with greatest variance.
+#' @param norm Whether or not to normalize the counts - if MRexperiment object.
+#' @param log Whether or not to log2 transform the counts - if MRexperiment object.
+#' @param fun Function to calculate pair-wise relationships. Default is pearson
+#' correlation
+#' @param ... Additional plot arguments.
+#' @return plotted correlation matrix
+#' @seealso \code{\link{cumNormMat}}
+#' @examples
+#' 
+#' data(mouseData)
+#' plotCorr(obj=mouseData,n=200,cexRow = 0.4,cexCol = 0.4,trace="none",dendrogram="none",
+#'          col = colorRampPalette(brewer.pal(9, "RdBu"))(50))
+#' 
+plotCorr <- function(obj,n,norm=TRUE,log=TRUE,fun=cor,...) {
+    mat = returnAppropriateObj(obj,norm,log)
+    otusToKeep <- which(rowSums(mat) > 0)
+    otuVars = rowSds(mat[otusToKeep, ])
+    otuIndices = otusToKeep[order(otuVars, decreasing = TRUE)[1:n]]
+    mat2 = mat[otuIndices, ]
+    cc = as.matrix(fun(t(mat2)))
+    hc = hclust(dist(mat2))
+    otuOrder = hc$order
+    cc = cc[otuOrder, otuOrder]
+    heatmap.2(t(cc),...)
+    invisible(t(cc))
+}
+
diff --git a/R/plotFeature.R b/R/plotFeature.R
new file mode 100644
index 0000000..7f008f0
--- /dev/null
+++ b/R/plotFeature.R
@@ -0,0 +1,73 @@
+#' Basic plot function of the raw or normalized data.
+#' 
+#' This function plots the abundance of a particular OTU by class. The function
+#' is the typical manhattan plot of the abundances.
+#'
+#' 
+#' @param obj A MRexperiment object with count data.
+#' @param otuIndex The row to plot
+#' @param classIndex A list of the samples in their respective groups.
+#' @param col A vector to color samples by.
+#' @param sort Boolean, sort or not.
+#' @param sortby Default is sort by library size, alternative vector for sorting
+#' @param norm Whether or not to normalize the counts - if MRexperiment object.
+#' @param log Whether or not to log2 transform the counts - if MRexperiment object.
+#' @param sl Scaling factor - if MRexperiment and norm=TRUE.
+#' @param ... Additional plot arguments.
+#' @return counts and classindex
+#' @seealso \code{\link{cumNorm}}
+#' @examples
+#' 
+#' data(mouseData)
+#' classIndex=list(Western=which(pData(mouseData)$diet=="Western"))
+#' classIndex$BK=which(pData(mouseData)$diet=="BK")
+#' otuIndex = 8770
+#'
+#' par(mfrow=c(2,1))
+#' dates = pData(mouseData)$date
+#' plotFeature(mouseData,norm=FALSE,log=FALSE,otuIndex,classIndex,
+#' col=dates,sortby=dates,ylab="Raw reads")
+#'
+plotFeature<-function(obj,otuIndex,classIndex,col="black",sort=TRUE,sortby=NULL,norm=TRUE,log=TRUE,sl=1000,...){
+    mat = returnAppropriateObj(obj,norm,log,sl)
+    fmat = mat[otuIndex,]
+    ylmin = min(fmat)
+    ylmax = max(fmat)
+
+    nplots = length(classIndex)
+    nms = names(classIndex)
+
+    counts = lapply(classIndex,function(i){
+        fmat[i]
+        })
+    if(sort==TRUE){
+        if(is.null(sortby)){
+            ord  = lapply(classIndex,function(i){
+                order(colSums(mat[,i]))
+                })
+        } else{
+            ord  = lapply(classIndex,function(i){
+                order(sortby[i])
+                })
+        }
+    } else {
+        ord = lapply(classIndex,function(i){
+            1:length(i)
+            })
+    }
+    if(length(col)>1){
+        col = as.integer(factor(col))
+        col4groups = lapply(1:length(classIndex),function(i){
+                cindex = classIndex[[i]]
+                oindex = ord[[i]]
+                col[cindex[oindex]]
+        })
+    }
+    for(i in 1:nplots){
+        vals = counts[[i]][ord[[i]]]
+        if(exists("col4groups")) colors  = col4groups[[i]]
+        else colors = col
+        plot(vals,xlab=nms[i],type="h",col=colors,ylim=c(ylmin,ylmax),...)
+    }
+    invisible(cbind(counts,ord))
+}
diff --git a/R/plotGenus.R b/R/plotGenus.R
new file mode 100644
index 0000000..5885747
--- /dev/null
+++ b/R/plotGenus.R
@@ -0,0 +1,69 @@
+#' Basic plot function of the raw or normalized data.
+#' 
+#' This function plots the abundance of a particular OTU by class. The function
+#' uses the estimated posterior probabilities to make technical zeros
+#' transparent.
+#' 
+#' 
+#' @aliases genusPlot plotGenus
+#' @param obj An MRexperiment object with count data.
+#' @param otuIndex A list of the otus with the same annotation.
+#' @param classIndex A list of the samples in their respective groups.
+#' @param norm Whether or not to normalize the counts - if MRexperiment object.
+#' @param log Whether or not to log2 transform the counts - if MRexperiment object.
+#' @param no Which of the otuIndex to plot.
+#' @param jitter.factor Factor value for jitter
+#' @param pch Standard pch value for the plot command.
+#' @param labs Whether to include group labels or not. (TRUE/FALSE)
+#' @param xlab xlabel for the plot.
+#' @param ylab ylabel for the plot.
+#' @param jitter Boolean to jitter the count data or not.
+#' @param ... Additional plot arguments.
+#' @return plotted data
+#' @seealso \code{\link{cumNorm}}
+#' @examples
+#' 
+#' data(mouseData)
+#' classIndex=list(controls=which(pData(mouseData)$diet=="BK"))
+#' classIndex$cases=which(pData(mouseData)$diet=="Western")
+#' otuIndex = grep("Strep",fData(mouseData)$family)
+#' otuIndex=otuIndex[order(rowSums(MRcounts(mouseData)[otuIndex,]),decreasing=TRUE)]
+#' plotGenus(mouseData,otuIndex,classIndex,no=1:2,xaxt="n",norm=FALSE,ylab="Strep normalized log(cpt)")
+#' 
+plotGenus <-
+function(obj,otuIndex,classIndex,norm=TRUE,log=TRUE,no=1:length(otuIndex),labs=TRUE,xlab=NULL,ylab=NULL,jitter=TRUE,jitter.factor=1,pch=21,...){
+
+    mat = returnAppropriateObj(obj,norm,log)
+	l=lapply(otuIndex[no], function(i) lapply(classIndex, function(j) {
+        mat[i,j]
+        }))
+
+	l=unlist(l,recursive=FALSE)
+	if(!is.list(l)) stop("l must be a list\n")
+	y=unlist(l)
+	x=rep(seq(along=l),sapply(l,length))
+
+	z = posteriorProbs(obj)
+    #if(!is.null(z)){
+    #    z = 1-z;
+    #    lz=lapply(classIndex,function(j){(z[otuIndex[no],j])})
+    #    z = unlist(lz)
+    #    blackCol=t(col2rgb("black"))
+    #    col=rgb(blackCol,alpha=z)
+    #} else {
+        blackCol=t(col2rgb("black"))
+        col=rgb(blackCol)
+    #}
+    if(jitter) x=jitter(x,jitter.factor)
+    
+    if(is.null(ylab)){ylab="Normalized log(cpt)"}
+    if(is.null(xlab)){xlab="Groups of comparison"}
+
+    plot(x,y,col=col,pch=pch,xlab=xlab,ylab=ylab,xaxt="n",...)
+    if(labs==TRUE){
+        gp = rep(names(classIndex),length(no))
+        axis(1,at=seq(1:length(gp)),gp)
+    }
+
+	invisible(list(x=x,y=y))
+}
diff --git a/R/plotMRheatmap.R b/R/plotMRheatmap.R
new file mode 100644
index 0000000..90dbc93
--- /dev/null
+++ b/R/plotMRheatmap.R
@@ -0,0 +1,37 @@
+#' Basic heatmap plot function for normalized counts.
+#' 
+#' This function plots a heatmap of the 'n' features with greatest variance
+#' across rows (or other statistic).
+#' 
+#' 
+#' @param obj A MRexperiment object with count data.
+#' @param n The number of features to plot. This chooses the 'n' features of greatest positive statistic.
+#' @param norm Whether or not to normalize the counts - if MRexperiment object.
+#' @param log Whether or not to log2 transform the counts - if MRexperiment object.
+#' @param fun Function to select top 'n' features.
+#' @param ... Additional plot arguments.
+#' @return plotted matrix
+#' @seealso \code{\link{cumNormMat}}
+#' @examples
+#' 
+#' data(mouseData)
+#' trials = pData(mouseData)$diet
+#' heatmapColColors=brewer.pal(12,"Set3")[as.integer(factor(trials))];
+#' heatmapCols = colorRampPalette(brewer.pal(9, "RdBu"))(50)
+#' #### version using sd
+#' plotMRheatmap(obj=mouseData,n=200,cexRow = 0.4,cexCol = 0.4,trace="none",
+#'              col = heatmapCols,ColSideColors = heatmapColColors)
+#' #### version using MAD
+#' plotMRheatmap(obj=mouseData,n=50,fun=mad,cexRow = 0.4,cexCol = 0.4,trace="none",
+#'              col = heatmapCols,ColSideColors = heatmapColColors) 
+#'
+plotMRheatmap <- function(obj,n,norm=TRUE,log=TRUE,fun=sd,...) {
+  mat = returnAppropriateObj(obj,norm,log)
+    
+  otusToKeep = which(rowSums(mat)>0);
+  otuStats   = apply(mat[otusToKeep,],1,fun);
+  otuIndices = otusToKeep[order(otuStats,decreasing=TRUE)[1:n]];
+  mat2=mat[otuIndices,];
+  heatmap.2(mat2,...);
+  invisible(mat2)
+}
diff --git a/R/plotOTU.R b/R/plotOTU.R
new file mode 100644
index 0000000..89c02b1
--- /dev/null
+++ b/R/plotOTU.R
@@ -0,0 +1,64 @@
+#' Basic plot function of the raw or normalized data.
+#' 
+#' This function plots the abundance of a particular OTU by class. The function
+#' uses the estimated posterior probabilities to make technical zeros
+#' transparent.
+#' 
+#' 
+#' @param obj A MRexperiment object with count data.
+#' @param otu The row number/OTU to plot.
+#' @param classIndex A list of the samples in their respective groups.
+#' @param log Whether or not to log2 transform the counts - if MRexperiment object.
+#' @param norm Whether or not to normalize the counts - if MRexperiment object.
+#' @param jitter.factor Factor value for jitter.
+#' @param pch Standard pch value for the plot command.
+#' @param labs Whether to include group labels or not. (TRUE/FALSE)
+#' @param xlab xlabel for the plot.
+#' @param ylab ylabel for the plot.
+#' @param jitter Boolean to jitter the count data or not.
+#' @param ... Additional plot arguments.
+#' @return Plotted values
+#' @seealso \code{\link{cumNorm}}
+#' @examples
+#' 
+#' data(mouseData)
+#' classIndex=list(controls=which(pData(mouseData)$diet=="BK"))
+#' classIndex$cases=which(pData(mouseData)$diet=="Western")
+#' # you can specify whether or not to normalize, and to what level
+#' plotOTU(mouseData,otu=9083,classIndex,norm=FALSE,main="9083 feature abundances")
+#' 
+plotOTU <-
+function(obj,otu,classIndex,log=TRUE,norm=TRUE,jitter.factor=1,pch=21,labs=TRUE,xlab=NULL,ylab=NULL,jitter=TRUE,...){
+    mat = returnAppropriateObj(obj,norm,log)
+    
+	l=lapply(classIndex, function(j){
+        mat[otu,j]
+        })
+
+	z = posteriorProbs(obj)
+    y=unlist(l)
+    x=rep(seq(along=l),sapply(l,length))
+
+    if(!is.null(z)){
+        z = 1-z;
+        lz=lapply(classIndex,function(j){(z[otu,j])})
+        z = unlist(lz)
+        blackCol=t(col2rgb("black"))
+        col=rgb(blackCol,alpha=z)
+    } else {
+        blackCol=t(col2rgb("black"))
+        col=rgb(blackCol)
+    }
+    
+	if(jitter) x=jitter(x,jitter.factor)
+    
+    if(is.null(ylab)){ylab="Normalized log(cpt)"}
+    if(is.null(xlab)){xlab="Groups of comparison"}
+
+    plot(x,y,col=col,pch=pch,bg=col,xlab=xlab,ylab=ylab,xaxt="n",...)
+    if(labs==TRUE){
+        gp = names(classIndex)
+        axis(1,at=seq(1:length(gp)),gp)
+    }
+	invisible(list(x=x,y=y))
+}
diff --git a/R/plotOrd.R b/R/plotOrd.R
new file mode 100644
index 0000000..9ff2a3b
--- /dev/null
+++ b/R/plotOrd.R
@@ -0,0 +1,59 @@
+#' Plot of either PCA or MDS coordinates for the distances of normalized or unnormalized counts.
+#' 
+#' This function plots the PCA / MDS coordinates for the "n" features of interest. Potentially uncovering batch
+#' effects or feature relationships.
+#' 
+#' 
+#' @param obj A MRexperiment object or count matrix.
+#' @param tran Transpose the matrix.
+#' @param comp Which components to display
+#' @param usePCA TRUE/FALSE whether to use PCA  or MDS coordinates (TRUE is PCA).
+#' @param useDist TRUE/FALSE whether to calculate distances.
+#' @param distfun Distance function, default is stats::dist
+#' @param dist.method If useDist==TRUE, what method to calculate distances.
+#' @param norm Whether or not to normalize the counts - if MRexperiment object.
+#' @param log Whether or not to log2 the counts - if MRexperiment object.
+#' @param n Number of features to make use of in calculating your distances.
+#' @param ... Additional plot arguments.
+#' @return coordinates
+#' @seealso \code{\link{cumNormMat}}
+#' @examples
+#' 
+#' data(mouseData)
+#' cl = pData(mouseData)[,3]
+#' plotOrd(mouseData,tran=TRUE,useDist=TRUE,pch=21,bg=factor(cl),usePCA=FALSE)
+#' 
+plotOrd<-function(obj,tran=TRUE,comp=1:2,norm=TRUE,log=TRUE,usePCA=TRUE,useDist=FALSE,distfun=stats::dist,dist.method="euclidian",n=NULL,...){
+    mat = returnAppropriateObj(obj,norm,log)
+    if(useDist==FALSE & usePCA==FALSE) stop("Classical MDS requires distances")
+    if(is.null(n)) n = min(nrow(mat),1000)
+    if(length(comp)>2) stop("Can't display more than two components")
+
+    otusToKeep <- which(rowSums(mat)>0)
+    otuVars<-rowSds(mat[otusToKeep,])
+    otuIndices<-otusToKeep[order(otuVars,decreasing=TRUE)[seq_len(n)]]
+    mat <- mat[otuIndices,]
+
+    if(tran==TRUE){
+        mat = t(mat)
+    }
+    if(useDist==TRUE){
+        d <- distfun(mat,method=dist.method)
+    } else{ d = mat }
+    
+    if(usePCA==FALSE){
+        ord = cmdscale(d,k = max(comp))
+        xl = paste("MDS component:",comp[1])
+        yl = paste("MDS component:",comp[2])
+    } else{
+        pcaRes <- prcomp(d)
+        ord <- pcaRes$x
+        vars <- pcaRes$sdev^2
+        vars <- round(vars/sum(vars),5)*100
+        xl <- sprintf("PCA %s: %.2f%% variance",colnames(ord)[comp[1]], vars[comp[1]])
+        yl <- sprintf("PCA %s: %.2f%% variance",colnames(ord)[comp[2]], vars[comp[2]])
+    }
+
+	plot(ord[,comp],ylab=yl,xlab=xl,...)
+    invisible(ord[,comp])
+}
diff --git a/R/plotRare.R b/R/plotRare.R
new file mode 100644
index 0000000..cb712a6
--- /dev/null
+++ b/R/plotRare.R
@@ -0,0 +1,42 @@
+#' Plot of rarefaction effect
+#' 
+#' This function plots the number of observed features vs. the depth of coverage.
+#' 
+#' @param obj A MRexperiment object with count data or matrix.
+#' @param cl Vector of classes for various samples.
+#' @param ... Additional plot arguments.
+#' @return Library size and number of detected features
+#' @seealso \code{\link{plotOrd}}, \code{\link{plotMRheatmap}}, \code{\link{plotCorr}}, \code{\link{plotOTU}}, \code{\link{plotGenus}}
+#' @examples
+#' 
+#' data(mouseData)
+#' cl = factor(pData(mouseData)[,3])
+#' res = plotRare(mouseData,cl=cl,pch=21,bg=cl)
+#' tmp=lapply(levels(cl), function(lv) lm(res[,"ident"]~res[,"libSize"]-1, subset=cl==lv))
+#' for(i in 1:length(levels(cl))){
+#'    abline(tmp[[i]], col=i)
+#' }
+#' legend("topleft", c("Diet 1","Diet 2"), text.col=c(1,2),box.col=NA)
+#'
+plotRare<-function(obj,cl=NULL,...){
+    if(class(obj)=="MRexperiment"){
+        mat = MRcounts(obj,norm=FALSE,log=FALSE)
+        totalCounts = libSize(obj)
+    } else if(class(obj) == "matrix") {
+        mat = obj
+        totalCounts=colSums(mat)
+    } else {
+        stop("Object needs to be either a MRexperiment object or matrix")
+    }
+    numFeatures=colSums(mat!=0)
+    
+    if(is.null(cl)){
+        plot(totalCounts, numFeatures, xlab = "Depth of coverage", ylab = "Number of detected features",...)
+    } else{
+        plot(totalCounts, numFeatures, xlab = "Depth of coverage", ylab = "Number of detected features",col=factor(cl),...)
+    }
+    
+    dat = cbind(totalCounts,numFeatures);
+    colnames(dat) = c("libSize","ident")
+    invisible(dat)
+}
diff --git a/R/zigControl.R b/R/zigControl.R
new file mode 100644
index 0000000..4eada99
--- /dev/null
+++ b/R/zigControl.R
@@ -0,0 +1,29 @@
+#' Settings for the fitZig function
+#'
+#' @param tol The tolerance for the difference in negative log likelihood estimates for a feature to remain active.
+#' @param maxit The maximum number of iterations for the expectation-maximization algorithm.
+#' @param verbose Whether to display iterative step summary statistics or not.
+#' @param dfMethod Either 'default' or 'modified' (by responsibilities).
+#' @param pvalMethod Either 'default' or 'bootstrap'.
+#' @return The value for the tolerance, maximum no. of iterations, and the verbose warning.
+#' @note \code{\link{fitZig}} makes use of zigControl.
+#'
+#' @name zigControl
+#' @aliases settings2
+#' @seealso \code{\link{fitZig}} \code{\link{cumNorm}} \code{\link{plotOTU}}
+#' @examples
+#' control =  zigControl(tol=1e-10,maxit=10,verbose=FALSE)
+#'
+zigControl <-function(tol=1e-4,maxit=10,verbose=TRUE,dfMethod="modified",pvalMethod="default"){
+	# to do: add stop if not
+	DFMETHODS <- c("default", "modified")
+	PMETHODS  <- c("default", "bootstrap")
+	dfMethod  <- DFMETHODS[pmatch(dfMethod, DFMETHODS)]
+	pvalMethod<- PMETHODS[pmatch(pvalMethod,PMETHODS)]
+
+	stopifnot(dfMethod%in%DFMETHODS)
+	stopifnot(pvalMethod%in%PMETHODS)
+
+	set <-list(tol=tol,maxit=maxit,verbose=verbose,dfMethod=dfMethod,pvalMethod=pvalMethod);
+	return(set)	
+}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..2c356d7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,32 @@
+metagenomeSeq
+=============
+
+Statistical analysis for sparse high-throughput sequencing
+
+[![Travis-CI Build Status](https://travis-ci.org/HCBravoLab/metagenomeSeq.svg?branch=master)](https://travis-ci.org/HCBravoLab/metagenomeSeq)
+<a href="http://www.bioconductor.org/packages/devel/bioc/html/metagenomeSeq.html#since"><img border="0" src="http://www.bioconductor.org/shields/years-in-bioc/metagenomeSeq.svg" title="How long since the package was first in a released Bioconductor version (or is it in devel only)."></a> <a href="http://bioconductor.org/packages/stats/bioc/metagenomeSeq.html"><img border="0" src="http://www.bioconductor.org/shields/downloads/metagenomeSeq.svg" title="Percentile (top 5/20/50% or 'availabl [...]
+
+
+metagenomeSeq is designed to determine features (be it Operational Taxanomic Unit (OTU), species, etc.) 
+that are differentially abundant between two or more groups of multiple samples. metagenomeSeq is designed 
+to address the effects of both normalization and undersampling of microbial communities on disease 
+association detection and the testing of feature correlations.
+
+To install the latest release version of metagenomeSeq:
+```S
+source("http://bioconductor.org/biocLite.R")
+biocLite("metagenomeSeq")
+```
+
+To install the latest development version of metagenomeSeq:
+```S
+install.packages("devtools")
+library("devtools")
+install_github("Bioconductor-mirror/metagenomeSeq")
+```
+
+Author: [Joseph Nathaniel Paulson](http://bcb.dfci.harvard.edu/~jpaulson), Hisham Talukder, [Mihai Pop](http://www.cbcb.umd.edu/~mpop), [Hector Corrada Bravo](http://www.cbcb.umd.edu/~hcorrada)
+
+Maintainer: Joseph N. Paulson : jpaulson at jimmy.harvard.edu
+
+Website: www.cbcb.umd.edu/software/metagenomeSeq
diff --git a/build/vignette.rds b/build/vignette.rds
new file mode 100644
index 0000000..5705571
Binary files /dev/null and b/build/vignette.rds differ
diff --git a/data/lungData.rda b/data/lungData.rda
new file mode 100644
index 0000000..65098a3
Binary files /dev/null and b/data/lungData.rda differ
diff --git a/data/mouseData.rda b/data/mouseData.rda
new file mode 100644
index 0000000..048d321
Binary files /dev/null and b/data/mouseData.rda differ
diff --git a/debian/README.test b/debian/README.test
deleted file mode 100644
index 98dc1a1..0000000
--- a/debian/README.test
+++ /dev/null
@@ -1,10 +0,0 @@
-Notes on how this package can be tested.
-────────────────────────────────────────
-
-You can run the test suite by doing
-
-R --no-save <<EOT
-BiocGenerics:::testPackage("metagenomeSeq")
-EOT
-
- -- Andreas Tille <tille at debian.org>  Mon, 16 Jun 2014 16:28:55 +0200
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644
index 5d04434..0000000
--- a/debian/changelog
+++ /dev/null
@@ -1,22 +0,0 @@
-r-bioc-metagenomeseq (1.16.0-2) unstable; urgency=medium
-
-  * Add missing test dependency: r-cran-testthat
-  * debhelper 10
-  * d/watch: version=4
-
- -- Andreas Tille <tille at debian.org>  Sun, 15 Jan 2017 15:46:55 +0100
-
-r-bioc-metagenomeseq (1.16.0-1) unstable; urgency=medium
-
-  * New upstream version
-  * Convert to dh-r
-  * Generic BioConductor homepage
-  * Use testthat for autopkgtest since other unittest is empty
-
- -- Andreas Tille <tille at debian.org>  Fri, 04 Nov 2016 14:55:51 +0100
-
-r-bioc-metagenomeseq (1.14.2-1) unstable; urgency=low
-
-  * Initial release (closes: #835135)
-
- -- Andreas Tille <tille at debian.org>  Mon, 22 Aug 2016 22:15:51 +0200
diff --git a/debian/compat b/debian/compat
deleted file mode 100644
index f599e28..0000000
--- a/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-10
diff --git a/debian/control b/debian/control
deleted file mode 100644
index df914dc..0000000
--- a/debian/control
+++ /dev/null
@@ -1,34 +0,0 @@
-Source: r-bioc-metagenomeseq
-Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.org>
-Uploaders: Andreas Tille <tille at debian.org>
-Section: gnu-r
-Priority: optional
-Build-Depends: debhelper (>= 10),
-               dh-r,
-               r-base-dev,
-               r-bioc-biobase,
-               r-bioc-limma,
-               r-cran-glmnet,
-               r-cran-rcolorbrewer,
-               r-cran-matrixstats,
-               r-cran-foreach,
-               r-cran-matrix,
-               r-cran-gplots
-Standards-Version: 3.9.8
-Vcs-Browser: https://anonscm.debian.org/viewvc/debian-med/trunk/packages/R/r-bioc-metagenomeseq/trunk/
-Vcs-Svn: svn://anonscm.debian.org/debian-med/trunk/packages/R/r-bioc-metagenomeseq/trunk/
-Homepage: https://bioconductor.org/packages/metagenomeSeq/
-
-Package: r-bioc-metagenomeseq
-Architecture: all
-Depends: ${R:Depends},
-         ${misc:Depends}
-Recommends: ${R:Recommends}
-Suggests: ${R:Suggests}
-Description: GNU R statistical analysis for sparse high-throughput sequencing
- MetagenomeSeq is designed to determine features (be it Operational
- Taxanomic Unit (OTU), species, etc.) that are differentially abundant
- between two or more groups of multiple samples. metagenomeSeq is
- designed to address the effects of both normalization and under-sampling
- of microbial communities on disease association detection and the
- testing of feature correlations.
diff --git a/debian/copyright b/debian/copyright
deleted file mode 100644
index 73e629c..0000000
--- a/debian/copyright
+++ /dev/null
@@ -1,106 +0,0 @@
-Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: metagenomeSeq
-Upstream-Contact: Joseph N. Paulson <jpaulson at jimmy.harvard.edu>
-Source: https://bioconductor.org/packages/metagenomeSeq/
-
-Files: *
-Copyright: © 2010-2016 Joseph N. Paulson <jpaulson at jimmy.harvard.edu>
-License: Artistic-2.0
-
-Files: debian/*
-Copyright: 2016 Andreas Tille <tille at debian.org>
-License: Artistic-2.0
-
-License: Artistic-2.0
-			 The "Artistic License"
- .
-				Preamble
- .
- 1. You may make and give away verbatim copies of the source form of the
-    Standard Version of this Package without restriction, provided that
-    you duplicate all of the original copyright notices and associated
-    disclaimers.
- .
- 2. You may apply bug fixes, portability fixes and other modifications
-    derived from the Public Domain or from the Copyright Holder.  A
-    Package modified in such a way shall still be considered the Standard
-    Version.
- .
- 3. You may otherwise modify your copy of this Package in any way,
-    provided that you insert a prominent notice in each changed file stating
-    how and when you changed that file, and provided that you do at least
-    ONE of the following:
- .
-    a) place your modifications in the Public Domain or otherwise make them
-    Freely Available, such as by posting said modifications to Usenet or
-    an equivalent medium, or placing the modifications on a major archive
-    site such as uunet.uu.net, or by allowing the Copyright Holder to include
-    your modifications in the Standard Version of the Package.
- .
-    b) use the modified Package only within your corporation or organization.
- .
-    c) rename any non-standard executables so the names do not conflict
-    with standard executables, which must also be provided, and provide
-    a separate manual page for each non-standard executable that clearly
-    documents how it differs from the Standard Version.
- .
-    d) make other distribution arrangements with the Copyright Holder.
- .
- 4. You may distribute the programs of this Package in object code or
-    executable form, provided that you do at least ONE of the following:
- .
-    a) distribute a Standard Version of the executables and library files,
-    together with instructions (in the manual page or equivalent) on where
-    to get the Standard Version.
- .
-    b) accompany the distribution with the machine-readable source of
-    the Package with your modifications.
- .
-    c) give non-standard executables non-standard names, and clearly
-    document the differences in manual pages (or equivalent), together
-    with instructions on where to get the Standard Version.
- .
-    d) make other distribution arrangements with the Copyright Holder.
- .
- 5. You may charge a reasonable copying fee for any distribution of this
-    Package.  You may charge any fee you choose for support of this Package.
-    You may not charge a fee for this Package itself.  However, you may
-    distribute this Package in aggregate with other (possibly commercial)
-    programs as part of a larger (possibly commercial) software distribution
-    provided that you do not advertise this Package as a product of your
-    own.  You may embed this Package's interpreter within an executable of
-    yours (by linking); this shall be construed as a mere form of
-    aggregation, provided that the complete Standard Version of the
-    interpreter is so embedded.
- .
- 6. The scripts and library files supplied as input to or produced as
-    output from the programs of this Package do not automatically fall under
-    the copyright of this Package, but belong to whoever generated them, and
-    may be sold commercially, and may be aggregated with this Package.  If
-    such scripts or library files are aggregated with this Package via the
-    so-called "undump" or "unexec" methods of producing a binary executable
-    image, then distribution of such an image shall neither be construed as
-    a distribution of this Package nor shall it fall under the restrictions
-    of Paragraphs 3 and 4, provided that you do not represent such an
-    executable image as a Standard Version of this Package.
- .
- 7. C subroutines (or comparably compiled subroutines in other
-    languages) supplied by you and linked into this Package in order to
-    emulate subroutines and variables of the language defined by this
-    Package shall not be considered part of this Package, but are the
-    equivalent of input as in Paragraph 6, provided these subroutines do
-    not change the language in any way that would cause it to fail the
-    regression tests for the language.
- .
- 8. Aggregation of this Package with a commercial distribution is always
-    permitted provided that the use of this Package is embedded; that is,
-    when no overt attempt is made to make this Package's interfaces visible
-    to the end user of the commercial distribution.  Such use shall not be
-    construed as a distribution of this Package.
- .
- 9. The name of the Copyright Holder may not be used to endorse or promote
-    products derived from this software without specific prior written permission.
- .
- 10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-    IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-    WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/debian/docs b/debian/docs
deleted file mode 100644
index 960011c..0000000
--- a/debian/docs
+++ /dev/null
@@ -1,3 +0,0 @@
-tests
-debian/README.test
-debian/tests/run-unit-test
diff --git a/debian/rules b/debian/rules
deleted file mode 100755
index 68d9a36..0000000
--- a/debian/rules
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/make -f
-
-%:
-	dh $@ --buildsystem R
diff --git a/debian/source/format b/debian/source/format
deleted file mode 100644
index 163aaf8..0000000
--- a/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (quilt)
diff --git a/debian/tests/control b/debian/tests/control
deleted file mode 100644
index b044b0c..0000000
--- a/debian/tests/control
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests: run-unit-test
-Depends: @, r-cran-testthat
-Restrictions: allow-stderr
diff --git a/debian/tests/run-unit-test b/debian/tests/run-unit-test
deleted file mode 100644
index ae67c0b..0000000
--- a/debian/tests/run-unit-test
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh -e
-
-oname=metagenomeSeq
-pkg=r-bioc-`echo $oname | tr '[A-Z]' '[a-z]'`
-
-if [ "$ADTTMP" = "" ] ; then
-  ADTTMP=`mktemp -d /tmp/${pkg}-test.XXXXXX`
-  trap "rm -rf $ADTTMP" 0 INT QUIT ABRT PIPE TERM
-fi
-cd $ADTTMP
-cp -a /usr/share/doc/${pkg}/tests/* $ADTTMP
-find . -name "*.gz" -exec gunzip \{\} \;
-LC_ALL=C R --no-save < testthat.R
diff --git a/debian/watch b/debian/watch
deleted file mode 100644
index 8e57cec..0000000
--- a/debian/watch
+++ /dev/null
@@ -1,3 +0,0 @@
-version=4
-opts=downloadurlmangle=s?^(.*)\.\.?http:$1packages/release/bioc? \
- http://www.bioconductor.org/packages/release/bioc/html/metagenomeSeq.html .*/metagenomeSeq_([\d\.]+)\.tar\.gz
diff --git a/inst/CITATION b/inst/CITATION
new file mode 100644
index 0000000..5faf6e7
--- /dev/null
+++ b/inst/CITATION
@@ -0,0 +1,50 @@
+citHeader("Please cite the top for the original statistical method and normalization method implemented in metagenomeSeq and the bottom for the software/vignette guide. Time series analysis/function is described in the third citation.")
+
+citEntry(entry="article",
+         title = "Differential abundance analysis for microbial marker-gene surveys",
+         author = personList( as.person("Joseph N. Paulson"), 
+                              as.person("Oscar Colin Stine"),
+                              as.person("Hector Corrada Bravo"),
+                              as.person("Mihai Pop")),
+         year = 2013,
+         journal = "Nat Meth",
+         volume = "advance online publication",
+         pages = "",
+         doi = "10.1038/nmeth.2658",
+         url = "http://www.nature.com/nmeth/journal/vaop/ncurrent/abs/nmeth.2658.html",
+         textVersion = 
+         paste("JN Paulson, OC Stine, HC Bravo, M Pop. ", 
+               "Differential abundance analysis for microbial marker-gene surveys.",
+	"Nat Meth", "Accepted" ) )
+
+citEntry(entry="manual",
+         title = "metagenomeSeq: Statistical analysis for sparse high-throughput sequncing.",
+         author = personList( as.person("Joseph N. Paulson"), 
+                              as.person("Mihai Pop"),
+                              as.person("Hector Corrada Bravo")),
+         year = 2013,
+         note = "Bioconductor package",
+         url = "http://www.cbcb.umd.edu/software/metagenomeSeq",
+         
+         textVersion = 
+         paste("JN Paulson, H Talukder, M Pop, HC Bravo. ", 
+               "metagenomeSeq: Statistical analysis for sparse high-throughput sequencing. ",
+               "Bioconductor package: ", packageVersion("metagenomeSeq"), ". http://cbcb.umd.edu/software/metagenomeSeq",sep="") )
+
+citEntry(entry="article",
+         title = "Longitudinal differential abundance analysis of marker-gene surveys",
+         author = personList( as.person("Hisham Talukder*"),
+                              as.person("Joseph N. Paulson*"),
+                              as.person("Hector Corrada Bravo")),
+         year = "2014",
+         journal = "XX",
+         volume = "",
+         pages = "",
+         doi = "",
+         url = "",
+         textVersion =
+         paste("H Talukder*, JN Paulson*, HC Bravo.",
+               "Longitudinal differential abundance analysis of marker-gene surveys.",
+        "Submitted") 
+)
+
diff --git a/inst/doc/fitTimeSeries.R b/inst/doc/fitTimeSeries.R
new file mode 100644
index 0000000..762ed2f
--- /dev/null
+++ b/inst/doc/fitTimeSeries.R
@@ -0,0 +1,120 @@
+## ----include=FALSE-------------------------------------------------------
+require(knitr)
+opts_chunk$set(concordance=TRUE,tidy=TRUE)
+
+## ----config,echo=FALSE-----------------------------------------
+options(width = 65)
+options(continue=" ")
+options(warn=-1)
+set.seed(42)
+
+## ----requireMetagenomeSeq,warning=FALSE,message=FALSE----------
+library(metagenomeSeq)
+library(gss)
+
+## ----dataset2,tidy=FALSE---------------------------------------
+data(mouseData)
+mouseData
+
+## ----createMRexperiment1---------------------------------------
+# Creating mock sample replicates
+sampleID = rep(paste("sample",1:10,sep=":"),times=20)
+# Creating mock class membership
+class = rep(c(rep(0,5),rep(1,5)),times=20)
+# Creating mock time
+time = rep(1:20,each=10)
+
+phenotypeData = AnnotatedDataFrame(data.frame(sampleID,class,time))
+# Creating mock abundances
+set.seed(1)
+# No difference
+measurement1 = rnorm(200,mean=100,sd=1)
+# Some difference
+measurement2 = rnorm(200,mean=100,sd=1)
+measurement2[1:5]=measurement2[1:5] + 100
+measurement2[11:15]=measurement2[11:15] + 100
+measurement2[21:25]=measurement2[21:25] + 50
+mat = rbind(measurement1,measurement2)
+colnames(mat) = 1:200
+mat[1:2,1:10]
+
+## ----createMRexperiment2---------------------------------------
+# This is an example of potential lvl's to aggregate by.
+data(mouseData)
+colnames(fData(mouseData))
+
+## ----createMRexperiment3,tidy=FALSE----------------------------
+obj = newMRexperiment(counts=mat,phenoData=phenotypeData)
+obj
+res1 = fitTimeSeries(obj,feature=1,
+              class='class',time='time',id='sampleID',
+              B=10,norm=FALSE,log=FALSE)
+res2 = fitTimeSeries(obj,feature=2,
+              class='class',time='time',id='sampleID',
+              B=10,norm=FALSE,log=FALSE)
+
+
+classInfo = factor(res1$data$class)
+par(mfrow=c(3,1))
+plotClassTimeSeries(res1,pch=21,bg=classInfo)
+plotTimeSeries(res2)
+plotClassTimeSeries(res2,pch=21,bg=classInfo)
+
+## ----timeSeries------------------------------------------------
+res = fitTimeSeries(obj=mouseData,lvl="class",feature="Actinobacteria",class="status",id="mouseID",time="relativeTime",B=10)
+
+# We observe a time period of differential abundance for "Actinobacteria"
+res$timeIntervals
+
+str(res)
+
+## ----timeSeriesAllClasses, tidy=FALSE--------------------------
+classes = unique(fData(mouseData)[,"class"])
+
+timeSeriesFits = lapply(classes,function(i){
+        fitTimeSeries(obj=mouseData,
+            feature=i,
+            class="status",
+            id="mouseID",
+            time="relativeTime",
+            lvl='class',
+            C=.3,# a cutoff for 'interesting' 
+            B=1) # B is the number of permutations and should clearly not be 1
+    })
+names(timeSeriesFits) = classes
+
+# Removing classes of bacteria without a potentially
+# interesting time interval difference.
+timeSeriesFits = sapply(timeSeriesFits,function(i){i[[1]]})[-grep("No",timeSeriesFits)]
+
+# Naming the various interesting time intervals.
+for(i in 1:length(timeSeriesFits)){
+    rownames(timeSeriesFits[[i]]) = 
+      paste(
+        paste(names(timeSeriesFits)[i]," interval",sep=""),
+        1:nrow(timeSeriesFits[[i]]),sep=":"
+      )
+}
+
+# Merging into a table.
+timeSeriesFits = do.call(rbind,timeSeriesFits)
+
+# Correcting for multiple testing.
+pvalues = timeSeriesFits[,"p.value"]
+adjPvalues = p.adjust(pvalues,"bonferroni")
+timeSeriesFits = cbind(timeSeriesFits,adjPvalues)
+
+head(timeSeriesFits)
+
+## ----timeSeriesPlotting----------------------------------------
+par(mfrow=c(2,1))
+plotClassTimeSeries(res,pch=21,
+                    bg=res$data$class,ylim=c(0,8))
+plotTimeSeries(res)
+
+## ----cite------------------------------------------------------
+citation("metagenomeSeq")
+
+## ----sessionInfo-----------------------------------------------
+sessionInfo()
+
diff --git a/inst/doc/fitTimeSeries.Rnw b/inst/doc/fitTimeSeries.Rnw
new file mode 100644
index 0000000..4ca891a
--- /dev/null
+++ b/inst/doc/fitTimeSeries.Rnw
@@ -0,0 +1,278 @@
+%\VignetteIndexEntry{fitTimeSeries: differential abundance analysis through time or location}
+%\VignetteEngine{knitr::knitr}
+\documentclass[a4paper,11pt]{article}
+\usepackage{url}
+\usepackage{afterpage}
+\usepackage{hyperref}
+\usepackage{geometry}
+\usepackage{cite}
+\geometry{hmargin=2.5cm, vmargin=2.5cm}
+\usepackage{graphicx}
+\usepackage{courier}
+\bibliographystyle{unsrt}
+
+\begin{document}
+<<include=FALSE>>=
+require(knitr)
+opts_chunk$set(concordance=TRUE,tidy=TRUE)
+@
+
+\title{{\textbf{\texttt{fitTimeSeries}: Longitudinal differential abundance analysis for marker-gene surveys}}}
+\author{Hisham Talukder, Joseph N. Paulson, Hector Corrada Bravo\\[1em]\\ Applied Mathematics $\&$ Statistics, and Scientific Computation\\ Center for Bioinformatics and Computational Biology\\ University of Maryland, College Park\\[1em]\\ \texttt{jpaulson at umiacs.umd.edu}}
+\date{Modified: February 18, 2015. Compiled: \today}
+\maketitle
+\tableofcontents
+
+\newpage
+
+<<config,echo=FALSE>>=
+options(width = 65)
+options(continue=" ")
+options(warn=-1)
+set.seed(42)
+@
+
+\section{Introduction}
+\textbf{This is a vignette specifically for the fitTimeSeries function. For a full list of functions available in the package:
+help(package=metagenomeSeq). For more information about a particular function call: ?function.}
+
+Smoothing spline regression models~\cite{Wahba:1990} are commonly used to model longitudinal data and form the basis for methods used in a large number of applications ~\cite{networkped1,LongCrisp}. Specifically, an extension of the methodology called Smoothing-Spline ANOVA~\cite{Gu} is capable of directly estimating a smooth function of interest while incorporating other covariates in the model. 
+
+A common approach to detect regions/times of interest in a genome or for differential abundance is to model differences between two groups with respect to the quantitative measurements as smooth functions and perform statistical inference on these models. In particular, widely used methods for region finding using DNA methylation data use local regression methods to estimate these smooth functions. An important aspect of these tools is their ability to incorporate sample characteristics  [...]
+
+\subsection{Problem Formulation}
+We model data in the following form:
+$$
+Y_{itk}= f_i(t,x_{k})+e_{tk}
+$$
+where i represents group factor (diet, health status, etc.), $t$ represents series factor (for example, time or location), $k$ represents replicate observations, $x_{k}$ are covariates for sample $k$ (including an indicator for group 
+membership $I\{k \in i\}$) and $e_{tk}$ are independent $N(0,\sigma^2)$ errors. We assume $f_i$ to be a smooth function, defined in an interval $[a,b]$, that can be parametric, non-parametric or a mixture of both.   
+
+Our goal is to identify intervals where the absolute difference between two groups $\eta_d(t)=f_1(t, \cdot)-f_2(t, \cdot)$ is large, that is, regions, $R_{t_1,t_2}$, where:
+$R_{t_1,t_2}=
+\{t_1,t_2 \in x 
+\textit{ such that } 
+| \eta_{d}(x) | 
+\ge C \}$ 
+and $C$ is a predefined constant threshold.
+
+To identify these areas we use hypothesis testing using the area $A_{t_1,t_2}=\int_{R_{t_1,t_2}}\eta_d(t) dt$ under the estimated function of $\eta_d(t)$ as a statistic with null and alternative hypotheses 
+$$
+  H_0: A_{t_1,t_2} \le K
+$$
+$$
+  H_1: A_{t_1,t_2} >  K
+$$
+with $K$ some fixed threshold.
+
+We employ a permutation-based method to calculate a null distribution of the area statistics $A_(t1,t2)$'s. To do this, 
+the group-membership indicator variables (0-1 binary variable) are randomly permuted $B$ times, e.g., $B=1000$ and the 
+method above is used to estimate the difference function $\eta_d^b$ (in this case simulating the null hypothesis) and an area 
+statistics $A_(t1,t2)^b$ for each random permutation. Estimates $A_(t1,t2)^b$ are then used to construct an empirical 
+estimate of $A_(t1,t2)$ under the null hypothesis. The observed area, $A_(t1,t2)^*$, is compared to the empirical null 
+distribution to calculate a p-value. Figure 1 illustrates the relationship between $R_(t1,t2)$ and $A_(t1,t2)$. The key 
+is to estimate regions $R_(t1,t2)$ where point-wise confidence intervals would be appropriate. 
+
+\section{Data preparation}
+Data should be preprocessed and prepared in tab-delimited files. Measurements are stored in a matrix with samples along the
+columns and features along the rows. For example, given $m$ features and $n$ samples, the entries in a marker-gene or 
+metagenomic count matrix \textbf{C} ($m, n$), $c_{ij}$, are the number of reads annotated for a particular feature $i$ 
+(whether it be OTU, species, genus, etc.) in sample $j$.
+Alternatively, the measurements could be some quantitative measurement such as methylation percentages or CD4 levels.\\
+
+\begin{center}
+$\bordermatrix{ &sample_1&sample_2&\ldots &sample_n\cr feature_1&c_{11} &  c_{12}  & \ldots & c_{1n}\cr feature_2& c_{21}  &  c_{22} & \ldots & c_{2n}\cr \vdots & \vdots & \vdots & \ddots & \vdots\cr feature_m & c_{m1}  &   c_{m2} &\ldots & c_{mn}}$
+\end{center}
+
+Data should be stored in a  file (tab-delimited by default) with sample names along the first row, feature names in the first
+column and should be loaded into R and formatted into a MRexperiment object. To prepare the data please read the section on data preparation in the full metagenomeSeq vignette - \texttt{vignette("metagenomeSeq")}.
+
+\subsection{Example datasets}
+There is a time-series dataset included as an examples in the \texttt{metagenomeSeq} package. Data needs to be in a \texttt{MRexperiment} object format to normalize, run the statistical tests, and visualize. As an example, throughout the vignette we'll use the following datasets. 
+To understand a \texttt{fitTimeSeries}'s usage or included data simply enter ?\texttt{fitTimeSeries}.
+
+<<requireMetagenomeSeq,warning=FALSE,message=FALSE>>=
+library(metagenomeSeq)
+library(gss)
+@
+
+\begin{enumerate}
+\setcounter{enumi}{1}
+\item Humanized gnotobiotic mouse gut \cite{ts_mouse}:
+Twelve germ-free adult male C57BL/6J mice were fed a low-fat, plant polysaccharide-rich diet. Each mouse was gavaged with healthy adult human fecal material. Following the fecal transplant, mice remained on the low-fat, plant polysacchaaride-rich diet for four weeks, following which a subset of 6 were switched to a high-fat and high-sugar diet for eight weeks. Fecal samples for each mouse went through PCR amplification of the bacterial 16S rRNA gene V2 region weekly. Details of experimen [...]
+\url{http://gordonlab.wustl.edu/TurnbaughSE_10_09/STM_2009.html}
+
+\end{enumerate}
+<<dataset2,tidy=FALSE>>=
+data(mouseData)
+mouseData
+@
+
+
+\subsection{Creating a \texttt{MRexperiment} object with other measurements}
+
+For a fitTimeSeries analysis a minimal MRexperiment-object is required and can be created using the function \texttt{newMRexperiment} which takes a count matrix described above and phenoData (annotated data frame).
+\texttt{Biobase} provides functions to create annotated data frames. 
+
+<<createMRexperiment1>>=
+# Creating mock sample replicates
+sampleID = rep(paste("sample",1:10,sep=":"),times=20)
+# Creating mock class membership
+class = rep(c(rep(0,5),rep(1,5)),times=20)
+# Creating mock time
+time = rep(1:20,each=10)
+
+phenotypeData = AnnotatedDataFrame(data.frame(sampleID,class,time))
+# Creating mock abundances
+set.seed(1)
+# No difference
+measurement1 = rnorm(200,mean=100,sd=1)
+# Some difference
+measurement2 = rnorm(200,mean=100,sd=1)
+measurement2[1:5]=measurement2[1:5] + 100
+measurement2[11:15]=measurement2[11:15] + 100
+measurement2[21:25]=measurement2[21:25] + 50
+mat = rbind(measurement1,measurement2)
+colnames(mat) = 1:200
+mat[1:2,1:10]
+@
+
+If phylogenetic information exists for the features and there is a desire to aggregate 
+measurements based on similar annotations choosing the featureData column name in lvl will aggregate measurements using the default parameters in the \texttt{aggregateByTaxonomy} function.
+
+<<createMRexperiment2>>=
+# This is an example of potential lvl's to aggregate by.
+data(mouseData)
+colnames(fData(mouseData))
+@
+
+Here we create the actual MRexperiment to run through fitTimeSeries.
+<<createMRexperiment3,tidy=FALSE>>=
+obj = newMRexperiment(counts=mat,phenoData=phenotypeData)
+obj
+res1 = fitTimeSeries(obj,feature=1,
+              class='class',time='time',id='sampleID',
+              B=10,norm=FALSE,log=FALSE)
+res2 = fitTimeSeries(obj,feature=2,
+              class='class',time='time',id='sampleID',
+              B=10,norm=FALSE,log=FALSE)
+
+
+classInfo = factor(res1$data$class)
+par(mfrow=c(3,1))
+plotClassTimeSeries(res1,pch=21,bg=classInfo)
+plotTimeSeries(res2)
+plotClassTimeSeries(res2,pch=21,bg=classInfo)
+@
+
+\section{Time series analysis}
+Implemented in the \texttt{fitTimeSeries} function is a method for calculating time intervals for which 
+bacteria are differentially abundant. Fitting is performed using Smoothing Splines ANOVA (SS-ANOVA), 
+as implemented in the \texttt{gss} package. Given observations at multiple time points for two groups 
+the method calculates a function modeling the difference in abundance across all time. Using group membership permutations we 
+estimate a null distribution of areas under the difference curve for the time intervals of interest and report significant intervals of time. Here we provide a real example from the microbiome of two groups of mice on different diets.
+
+The gnotobiotic mice come from a longitudinal study ideal for this type of analysis.
+We choose to perform our analysis at the class level and look for 
+differentially abundant time intervals for "Actinobacteria".
+For demonstrations sake we perform only 10 permutations.
+
+If you find the method useful, please cite:
+"Longitudinal differential abundance analysis for marker-gene surveys"
+Talukder H*, Paulson JN*, Bravo HC. (Submitted)
+
+<<timeSeries>>=
+res = fitTimeSeries(obj=mouseData,lvl="class",feature="Actinobacteria",class="status",id="mouseID",time="relativeTime",B=10)
+
+# We observe a time period of differential abundance for "Actinobacteria"
+res$timeIntervals
+
+str(res)
+@
+
+For example, to test every class in the mouse dataset:
+<<timeSeriesAllClasses, tidy=FALSE>>=
+classes = unique(fData(mouseData)[,"class"])
+
+timeSeriesFits = lapply(classes,function(i){
+        fitTimeSeries(obj=mouseData,
+            feature=i,
+            class="status",
+            id="mouseID",
+            time="relativeTime",
+            lvl='class',
+            C=.3,# a cutoff for 'interesting' 
+            B=1) # B is the number of permutations and should clearly not be 1
+    })
+names(timeSeriesFits) = classes
+
+# Removing classes of bacteria without a potentially
+# interesting time interval difference.
+timeSeriesFits = sapply(timeSeriesFits,function(i){i[[1]]})[-grep("No",timeSeriesFits)]
+
+# Naming the various interesting time intervals.
+for(i in 1:length(timeSeriesFits)){
+    rownames(timeSeriesFits[[i]]) = 
+      paste(
+        paste(names(timeSeriesFits)[i]," interval",sep=""),
+        1:nrow(timeSeriesFits[[i]]),sep=":"
+      )
+}
+
+# Merging into a table.
+timeSeriesFits = do.call(rbind,timeSeriesFits)
+
+# Correcting for multiple testing.
+pvalues = timeSeriesFits[,"p.value"]
+adjPvalues = p.adjust(pvalues,"bonferroni")
+timeSeriesFits = cbind(timeSeriesFits,adjPvalues)
+
+head(timeSeriesFits)
+@
+Please see the help page for \texttt{fitTimeSeries} for parameters. Note, only two groups can be compared to each other and the time parameter must be an actual value (currently no support for posix, etc.).
+
+\subsection{Paramaters}
+There are a number of parameters for the \texttt{fitTimeSeries} function. We list and provide a brief discussion below. For
+parameters influencing \texttt{ssanova}, \texttt{aggregateByTaxonomy}, \texttt{MRcounts} type ?function for more details.
+\begin{itemize}
+  \item obj - the metagenomeSeq MRexperiment-class object.
+  \item feature	- Name or row of feature of interest.
+  \item class	- Name of column in phenoData of MRexperiment-class object for class memberhip.
+  \item time	- Name of column in phenoData of MRexperiment-class object for relative time.
+  \item id	- Name of column in phenoData of MRexperiment-class object for sample id.
+  \item method	- Method to estimate time intervals of differentially abundant bacteria (only ssanova method implemented currently).
+  \item lvl	- Vector or name of column in featureData of MRexperiment-class object for aggregating counts (if not OTU level).
+  \item C	 - Value for which difference function has to be larger or smaller than (default 0).
+  \item B	- Number of permutations to perform (default 1000)
+  \item norm	- When aggregating counts to normalize or not. (see MRcounts)
+  \item log	- Log2 transform. (see MRcounts)
+  \item sl	- Scaling value. (see MRcounts)
+  \item ...	- Options for ssanova
+
+\end{itemize}
+
+\section{Visualization of features}
+To help with visualization and analysis of datasets \texttt{metagenomeSeq} has several plotting functions to gain insight of the model fits and the differentially abundant time intervals using \texttt{plotClassTimeSeries} and \texttt{plotTimeSeries} on the result. More plots will be updated.
+<<timeSeriesPlotting>>=
+par(mfrow=c(2,1))
+plotClassTimeSeries(res,pch=21,
+                    bg=res$data$class,ylim=c(0,8))
+plotTimeSeries(res)
+@
+
+\section{Summary}
+
+\texttt{metagenomeSeq}'s \texttt{fitTimeSeries} is a novel methodology for differential abundance testing of longitudinal data. If you make use of the statistical method please cite our paper. If you made use of the manual/software, please cite the manual/software!
+
+\subsection{Citing fitTimeSeries}
+<<cite>>=
+citation("metagenomeSeq")
+@
+
+\subsection{Session Info}
+<<sessionInfo>>=
+sessionInfo()
+@
+
+\bibliography{fitTimeSeries}
+\end{document}
diff --git a/inst/doc/fitTimeSeries.pdf b/inst/doc/fitTimeSeries.pdf
new file mode 100644
index 0000000..be51fe1
Binary files /dev/null and b/inst/doc/fitTimeSeries.pdf differ
diff --git a/inst/doc/metagenomeSeq.R b/inst/doc/metagenomeSeq.R
new file mode 100644
index 0000000..f12d244
--- /dev/null
+++ b/inst/doc/metagenomeSeq.R
@@ -0,0 +1,299 @@
+## ----include=FALSE-------------------------------------------------------
+require(knitr)
+opts_chunk$set(concordance=TRUE,tidy=TRUE)
+
+## ----config,echo=FALSE------------------------------------
+options(width = 60)
+options(continue=" ")
+options(warn=-1)
+set.seed(42)
+
+## ----requireMetagenomeSeq,warning=FALSE,message=FALSE-----
+library(metagenomeSeq)
+
+## ----loadBiom---------------------------------------------
+# reading in a biom file
+library(biomformat)
+biom_file <- system.file("extdata", "min_sparse_otu_table.biom", package = "biomformat")
+b <- read_biom(biom_file)
+biom2MRexperiment(b)
+
+## ----writeBiom,eval=FALSE---------------------------------
+#  data(mouseData)
+#  # options include to normalize or not
+#  b <- MRexperiment2biom(mouseData)
+#  write_biom(b,biom_file="~/Desktop/otu_table.biom")
+
+## ----loadData---------------------------------------------
+dataDirectory <- system.file("extdata", package="metagenomeSeq")
+lung = loadMeta(file.path(dataDirectory,"CHK_NAME.otus.count.csv")) 
+dim(lung$counts)
+
+## ----loadTaxa---------------------------------------------
+taxa = read.delim(file.path(dataDirectory,"CHK_otus.taxonomy.csv"),stringsAsFactors=FALSE)
+
+## ----loadClin---------------------------------------------
+clin = loadPhenoData(file.path(dataDirectory,"CHK_clinical.csv"),tran=TRUE)
+ord = match(colnames(lung$counts),rownames(clin)) 
+clin = clin[ord,]
+head(clin[1:2,])
+
+## ----createMRexperiment1----------------------------------
+phenotypeData = AnnotatedDataFrame(clin)
+phenotypeData
+
+## ----createMRexperiment2----------------------------------
+OTUdata = AnnotatedDataFrame(taxa)
+OTUdata
+
+## ----createMRexperiment3,tidy=FALSE-----------------------
+obj = newMRexperiment(lung$counts,phenoData=phenotypeData,featureData=OTUdata)
+# Links to a paper providing further details can be included optionally.
+# experimentData(obj) = annotate::pmid2MIAME("21680950")
+obj
+
+## ----dataset1,tidy=FALSE----------------------------------
+data(lungData)
+lungData
+
+## ----dataset2,tidy=FALSE----------------------------------
+data(mouseData)
+mouseData
+
+## ----pdata------------------------------------------------
+phenoData(obj)
+head(pData(obj),3)
+
+## ----fdata------------------------------------------------
+featureData(obj)
+head(fData(obj)[,-c(2,10)],3)
+
+## ----MRcounts---------------------------------------------
+head(MRcounts(obj[,1:2]))
+
+## ---------------------------------------------------------
+featuresToKeep = which(rowSums(obj)>=100)
+samplesToKeep = which(pData(obj)$SmokingStatus=="Smoker")
+obj_smokers = obj[featuresToKeep,samplesToKeep]
+obj_smokers
+head(pData(obj_smokers),3)
+
+## ----normFactors------------------------------------------
+head(normFactors(obj))
+normFactors(obj) <- rnorm(ncol(obj))
+head(normFactors(obj))
+
+## ----libSize----------------------------------------------
+head(libSize(obj))
+libSize(obj) <- rnorm(ncol(obj))
+head(libSize(obj))
+
+## ----filterData-------------------------------------------
+data(mouseData)
+filterData(mouseData,present=10,depth=1000)
+
+## ----mergeMRexperiment------------------------------------
+data(mouseData)
+newobj = mergeMRexperiments(mouseData,mouseData)
+newobj
+
+## ----calculateNormFactors---------------------------------
+data(lungData)
+p=cumNormStatFast(lungData)
+
+## ----normalizeData----------------------------------------
+lungData = cumNorm(lungData,p=p)
+
+## ----saveData---------------------------------------------
+mat = MRcounts(lungData,norm=TRUE,log=TRUE)[1:5,1:5]
+exportMat(mat,file=file.path(dataDirectory,"tmp.tsv"))
+
+## ----exportStats------------------------------------------
+exportStats(lungData[,1:5],file=file.path(dataDirectory,"tmp.tsv"))
+head(read.csv(file=file.path(dataDirectory,"tmp.tsv"),sep="\t"))
+
+## ----removeData, echo=FALSE-------------------------------
+system(paste("rm",file.path(dataDirectory,"tmp.tsv")))
+
+## ----fitFeatureModel--------------------------------------
+data(lungData)
+lungData = lungData[,-which(is.na(pData(lungData)$SmokingStatus))]
+lungData=filterData(lungData,present=30,depth=1)
+lungData <- cumNorm(lungData, p=.5)
+pd <- pData(lungData)
+mod <- model.matrix(~1+SmokingStatus, data=pd)
+lungres1 = fitFeatureModel(lungData,mod)
+head(MRcoefs(lungres1))
+
+## ----preprocess,dev='pdf',out.width='.55\\linewidth',out.height='.55\\linewidth',fig.cap='Relative difference for the median difference in counts from the reference.',fig.align='center',warning=FALSE----
+data(lungData)
+controls = grep("Extraction.Control",pData(lungData)$SampleType)
+lungTrim = lungData[,-controls]
+rareFeatures = which(rowSums(MRcounts(lungTrim)>0)<10)
+lungTrim = lungTrim[-rareFeatures,]
+lungp = cumNormStat(lungTrim,pFlag=TRUE,main="Trimmed lung data")
+lungTrim = cumNorm(lungTrim,p=lungp)
+
+## ----zigTesting-------------------------------------------
+smokingStatus = pData(lungTrim)$SmokingStatus
+bodySite = pData(lungTrim)$SampleType
+normFactor = normFactors(lungTrim)
+normFactor = log2(normFactor/median(normFactor) + 1)
+mod = model.matrix(~smokingStatus+bodySite + normFactor)
+settings = zigControl(maxit=10,verbose=TRUE)
+fit = fitZig(obj = lungTrim,mod=mod,useCSSoffset = FALSE, 
+             control=settings)
+
+# The default, useCSSoffset = TRUE, automatically includes the CSS scaling normalization factor.
+
+## ----contrasts--------------------------------------------
+# maxit=1 is for demonstration purposes
+settings = zigControl(maxit=1,verbose=FALSE)
+mod = model.matrix(~bodySite)
+colnames(mod) = levels(bodySite)
+# fitting the ZIG model
+res = fitZig(obj = lungTrim,mod=mod,control=settings)
+# The output of fitZig contains a list of various useful items. hint: names(res).
+# 
+# Probably the most useful is the limma 'MLArrayLM' object called fit.
+zigFit = res$fit
+finalMod = res$fit$design
+
+contrast.matrix = makeContrasts(BAL.A-BAL.B,OW-PSB,levels=finalMod)
+fit2 = contrasts.fit(zigFit, contrast.matrix)
+fit2 = eBayes(fit2)
+topTable(fit2)
+
+# See help pages on decideTests, topTable, topTableF, vennDiagram, etc.
+
+## ----fittedResult,tidy=TRUE-------------------------------
+taxa = 
+  sapply(strsplit(as.character(fData(lungTrim)$taxa),split=";"),
+         function(i){i[length(i)]})
+head(MRcoefs(fit,taxa=taxa,coef=2))
+
+## ----timeSeries-------------------------------------------
+# vignette("fitTimeSeries")
+
+## ----perm-------------------------------------------------
+coeffOfInterest = 2
+res = fitLogNormal(obj = lungTrim, mod = mod, useCSSoffset = FALSE, B = 10, coef = coeffOfInterest)
+
+# extract p.values and adjust for multiple testing
+# res$p are the p-values calculated through permutation
+adjustedPvalues = p.adjust(res$p,method="fdr")
+
+# extract the absolute fold-change estimates
+foldChange = abs(res$fit$coef[,coeffOfInterest])
+
+# determine features still significant and order by the 
+sigList = which(adjustedPvalues <= .05)
+sigList = sigList[order(foldChange[sigList])]
+
+# view the top taxa associated with the coefficient of interest.
+head(taxa[sigList])
+
+## ----presenceAbsence--------------------------------------
+classes = pData(mouseData)$diet
+res = fitPA(mouseData[1:5,],cl=classes)
+# Warning - the p-value is calculating 1 despite a high odd's ratio.
+head(res)
+
+## ----discOdds---------------------------------------------
+classes = pData(mouseData)$diet
+res = fitDO(mouseData[1:100,],cl=classes,norm=FALSE,log=FALSE)
+head(res)
+
+## ----corTest----------------------------------------------
+cors = correlationTest(mouseData[55:60,],norm=FALSE,log=FALSE)
+head(cors)
+
+## ----uniqueFeatures---------------------------------------
+cl = pData(mouseData)[["diet"]]
+uniqueFeatures(mouseData,cl,nsamples = 10,nreads = 100)
+
+## ----aggTax-----------------------------------------------
+obj = aggTax(mouseData,lvl='phylum',out='matrix')
+head(obj[1:5,1:5])
+
+## ----aggSamp----------------------------------------------
+obj = aggSamp(mouseData,fct='mouseID',out='matrix')
+head(obj[1:5,1:5])
+
+## ----interactiveDisplay-----------------------------------
+# Calling display on the MRexperiment object will start a browser session with interactive plots.
+
+# require(interactiveDisplay)
+# display(mouseData)
+
+## ----heatmapData,fig.cap='Left) Abundance heatmap (plotMRheatmap). Right) Correlation heatmap (plotCorr).',dev='pdf',fig.show='hold',out.width='.5\\linewidth', out.height='.5\\linewidth'----
+trials = pData(mouseData)$diet
+heatmapColColors=brewer.pal(12,"Set3")[as.integer(factor(trials))];
+heatmapCols = colorRampPalette(brewer.pal(9, "RdBu"))(50)
+
+# plotMRheatmap
+plotMRheatmap(obj=mouseData,n=200,cexRow = 0.4,cexCol = 0.4,trace="none",
+                col = heatmapCols,ColSideColors = heatmapColColors)
+
+# plotCorr
+plotCorr(obj=mouseData,n=200,cexRow = 0.25,cexCol = 0.25,
+         trace="none",dendrogram="none",col=heatmapCols)
+
+## ----MDSandRareplots,fig.cap='Left) CMDS of features (plotOrd). Right) Rarefaction effect (plotRare).',dev='pdf',fig.show='hold',out.width='.5\\linewidth', out.height='.5\\linewidth'----
+cl = factor(pData(mouseData)$diet)
+
+# plotOrd - can load vegan and set distfun = vegdist and use dist.method="bray"
+plotOrd(mouseData,tran=TRUE,usePCA=FALSE,useDist=TRUE,bg=cl,pch=21)
+
+# plotRare
+res = plotRare(mouseData,cl=cl,pch=21,bg=cl)
+
+# Linear fits for plotRare / legend
+tmp=lapply(levels(cl), function(lv) 
+  lm(res[,"ident"]~res[,"libSize"]-1, subset=cl==lv))
+for(i in 1:length(levels(cl))){
+   abline(tmp[[i]], col=i)
+}
+legend("topleft", c("Diet 1","Diet 2"), text.col=c(1,2),box.col=NA)
+
+## ----plotOTUData,fig.cap='Left) Abundance plot (plotOTU). Right) Multiple OTU abundances (plotGenus).',dev='pdf',fig.show='hold',out.width='.5\\linewidth', out.height='.5\\linewidth',tidy=TRUE----
+head(MRtable(fit,coef=2,taxa=1:length(fData(lungTrim)$taxa)))
+patients=sapply(strsplit(rownames(pData(lungTrim)),split="_"),
+          function(i){
+            i[3]
+          })
+pData(lungTrim)$patients=patients
+classIndex=list(smoker=which(pData(lungTrim)$SmokingStatus=="Smoker"))
+classIndex$nonsmoker=which(pData(lungTrim)$SmokingStatus=="NonSmoker")
+otu = 779
+
+# plotOTU
+plotOTU(lungTrim,otu=otu,classIndex,main="Neisseria meningitidis")
+
+# Now multiple OTUs annotated similarly
+x = fData(lungTrim)$taxa[otu]
+otulist = grep(x,fData(lungTrim)$taxa)
+
+# plotGenus
+plotGenus(lungTrim,otulist,classIndex,labs=FALSE,
+            main="Neisseria meningitidis")
+
+lablist<- c("S","NS")
+axis(1, at=seq(1,6,by=1), labels = rep(lablist,times=3))
+
+## ----plotFeatureData,fig.cap='Plot of raw abundances',dev='pdf',fig.show='hold',out.width='.5\\linewidth', out.height='.5\\linewidth',tidy=TRUE----
+classIndex=list(Western=which(pData(mouseData)$diet=="Western"))
+classIndex$BK=which(pData(mouseData)$diet=="BK")
+otuIndex = 8770
+
+# par(mfrow=c(1,2))
+dates = pData(mouseData)$date
+plotFeature(mouseData,norm=FALSE,log=FALSE,otuIndex,classIndex,
+            col=dates,sortby=dates,ylab="Raw reads")
+
+## ----cite-------------------------------------------------
+citation("metagenomeSeq")
+
+## ----sessionInfo------------------------------------------
+sessionInfo()
+
diff --git a/inst/doc/metagenomeSeq.Rnw b/inst/doc/metagenomeSeq.Rnw
new file mode 100644
index 0000000..2ded587
--- /dev/null
+++ b/inst/doc/metagenomeSeq.Rnw
@@ -0,0 +1,725 @@
+%\VignetteIndexEntry{metagenomeSeq: statistical analysis for sparse high-throughput sequencing}
+%\VignetteEngine{knitr::knitr}
+\documentclass[a4paper,11pt]{article}
+\usepackage{url}
+\usepackage{afterpage}
+\usepackage{hyperref}
+\usepackage{geometry}
+\usepackage{cite}
+\geometry{hmargin=2.5cm, vmargin=2.5cm}
+\usepackage{graphicx}
+\usepackage{courier}
+\bibliographystyle{unsrt}
+
+\begin{document}
+<<include=FALSE>>=
+require(knitr)
+opts_chunk$set(concordance=TRUE,tidy=TRUE)
+@
+
+\title{{\textbf{\texttt{metagenomeSeq}: Statistical analysis for sparse high-throughput sequencing}}}
+\author{Joseph Nathaniel Paulson\\[1em]\\ Applied Mathematics $\&$ Statistics, and Scientific Computation\\ Center for Bioinformatics and Computational Biology\\ University of Maryland, College Park\\[1em]\\ \texttt{jpaulson at umiacs.umd.edu}}
+\date{Modified: October 4, 2016. Compiled: \today}
+\maketitle
+\tableofcontents
+
+\newpage
+
+<<config,echo=FALSE>>=
+options(width = 60)
+options(continue=" ")
+options(warn=-1)
+set.seed(42)
+@
+
+\section{Introduction}
+
+\textbf{This is a vignette for pieces of an association study pipeline. For a full list of functions available in the package: help(package=metagenomeSeq). For more information about a particular function call: ?function.} See \textit{fitFeatureModel} for our latest development.
+
+
+To load the metagenomeSeq library:
+<<requireMetagenomeSeq,warning=FALSE,message=FALSE>>=
+library(metagenomeSeq)
+@
+
+Metagenomics is the study of genetic material targeted directly from an environmental community. 
+Originally focused on exploratory and validation projects, these studies now focus on understanding the differences in microbial communities caused by phenotypic differences. 
+Analyzing high-throughput sequencing data has been a challenge to researchers due to the unique biological and technological biases that are present in marker-gene survey data.
+
+ We present a R package, \texttt{metagenomeSeq}, that implements methods developed to account for previously unaddressed biases specific to high-throughput sequencing microbial marker-gene survey data. Our method implements a novel normalization technique and method to account for sparsity due to undersampling. Other methods include
+ White \textit{et al.}'s Metastats and Segata \textit{et al.}'s LEfSe. The first is a non-parametric permutation test on $t$-statistics and the second is a non-parametric Kruskal-Wallis test followed by subsequent wilcox rank-sum tests on subgroups to guard against positive discoveries of differential abundance driven by potential confounders - neither address normalization nor sparsity.
+
+This vignette describes the basic protocol when using \texttt{metagenomeSeq}. 
+A normalization method able to control for biases in measurements across taxanomic features and a mixture model that implements a zero-inflated Gaussian distribution to account for varying depths of coverage are implemented.
+Using a linear model methodology, it is easy to include confounding sources of variability and interpret results. 
+Additionally, visualization functions are provided to examine discoveries. 
+
+The software was designed to determine features (be it Operational Taxanomic Unit (OTU), species, etc.) that are differentially abundant between two or more groups of multiple samples. 
+The software was also designed to address the effects of both normalization and undersampling of microbial communities on disease association detection and testing of feature correlations.
+
+\begin{figure}
+\centerline{\includegraphics[width=.55\textwidth]{overview.pdf}}
+\caption{General overview. metagenomeSeq requires the user to convert their data into MRexperiment objects. Using those MRexperiment objects, one can normalize their data, run statistical tests (abundance or presence-absence), and visualize or save results.}
+\end{figure}
+
+\newpage
+\section{Data preparation}
+Microbial marker-gene sequence data is preprocessed and counts are algorithmically defined 
+from project-specific sequence data by clustering reads according to read similarity. 
+Given $m$ features and $n$ samples, the elements in a count matrix 
+\textbf{C} ($m, n$), $c_{ij}$, are the number of reads annotated for a particular 
+feature $i$ (whether it be OTU, species, genus, etc.) in sample $j$. \\
+
+
+\begin{center}
+$\bordermatrix{ &sample_1&sample_2&\ldots &sample_n\cr feature_1&c_{11} &  c_{12}  & \ldots & c_{1n}\cr feature_2& c_{21}  &  c_{22} & \ldots & c_{2n}\cr \vdots & \vdots & \vdots & \ddots & \vdots\cr feature_m & c_{m1}  &   c_{m2} &\ldots & c_{mn}}$
+\end{center}
+
+Count data should be stored in a delimited (tab by default) file with sample names
+along the first row and feature names along the first column.
+
+Data is prepared and formatted as a \texttt{MRexperiment} object. For an overview of the internal structure please see Appendix A.
+
+
+\subsection{Biom-Format}
+You can load in BIOM file format data, the output of many commonly used, using the \texttt{loadBiom} function.
+The \texttt{biom2MRexperiment} and \texttt{MRexperiment2biom} functions serve as a gateway between the \texttt{biom-class} object defined in the \textbf{biom} package and a \texttt{MRexperiment-class} object. BIOM format files IO is available thanks to the \texttt{biomformat} package.  
+
+As an example, we show how one can read in a BIOM file and convert it to a \texttt{MRexperiment} object.
+<<loadBiom>>=
+# reading in a biom file
+library(biomformat)
+biom_file <- system.file("extdata", "min_sparse_otu_table.biom", package = "biomformat")
+b <- read_biom(biom_file)
+biom2MRexperiment(b)
+@
+
+As an example, we show how one can write a \texttt{MRexperiment} object out as a BIOM file.
+Here is an example writing out the mouseData \texttt{MRexperiment} object to a BIOM file.
+<<writeBiom,eval=FALSE>>=
+data(mouseData)
+# options include to normalize or not
+b <- MRexperiment2biom(mouseData)
+write_biom(b,biom_file="~/Desktop/otu_table.biom")
+@
+
+\subsection{Loading count data}
+Following preprocessing and annotation of sequencing data \texttt{metagenomeSeq} requires a count matrix with features along rows and samples along the columns.
+\texttt{metagenomeSeq} includes functions for loading delimited files of counts 
+\texttt{loadMeta} and phenodata \texttt{loadPhenoData}.
+
+As an example, a portion of the lung microbiome \cite{charlson} 
+OTU matrix is provided in \texttt{metagenomeSeq}'s library "extdata" folder. 
+The OTU matrix is stored as a tab delimited file.
+\texttt{loadMeta} loads the taxa and counts into a list.
+
+<<loadData>>=
+dataDirectory <- system.file("extdata", package="metagenomeSeq")
+lung = loadMeta(file.path(dataDirectory,"CHK_NAME.otus.count.csv")) 
+dim(lung$counts)
+@
+
+
+\subsection{Loading taxonomy}
+Next we want to load the annotated taxonomy. Check to make sure that your taxa annotations and OTUs are in the same order as your matrix rows.
+
+<<loadTaxa>>=
+taxa = read.delim(file.path(dataDirectory,"CHK_otus.taxonomy.csv"),stringsAsFactors=FALSE)
+@
+
+As our OTUs appear to be in order with the count matrix we loaded earlier, the next step is to load phenodata. 
+
+\textbf{Warning}: features need to have the same names as the rows of the count matrix when we create the MRexperiment object for provenance purposes. 
+
+\subsection{Loading metadata}
+Phenotype data can be optionally loaded into \texttt{R} with \texttt{loadPhenoData}. This function loads the data as a list.
+
+<<loadClin>>=
+clin = loadPhenoData(file.path(dataDirectory,"CHK_clinical.csv"),tran=TRUE)
+ord = match(colnames(lung$counts),rownames(clin)) 
+clin = clin[ord,]
+head(clin[1:2,])
+@
+
+
+\textbf{Warning}: phenotypes must have the same names as the columns on the count matrix when we create the MRexperiment object for provenance purposes. 
+
+\subsection{Creating a \texttt{MRexperiment} object}
+
+Function \texttt{newMRexperiment} takes a count matrix, phenoData (annotated data frame), and featureData (annotated data frame) as input. 
+\texttt{Biobase} provides functions to create annotated data frames. 
+Library sizes (depths of coverage) and normalization factors are also optional inputs.
+
+
+<<createMRexperiment1>>=
+phenotypeData = AnnotatedDataFrame(clin)
+phenotypeData
+@
+
+A feature annotated data frame. In this example it is simply the OTU numbers, but it can as easily be the annotated taxonomy at multiple levels.
+
+<<createMRexperiment2>>=
+OTUdata = AnnotatedDataFrame(taxa)
+OTUdata
+@
+
+
+<<createMRexperiment3,tidy=FALSE>>=
+obj = newMRexperiment(lung$counts,phenoData=phenotypeData,featureData=OTUdata)
+# Links to a paper providing further details can be included optionally.
+# experimentData(obj) = annotate::pmid2MIAME("21680950")
+obj
+@
+
+\subsection{Example datasets}
+There are two datasets included as examples in the \texttt{metagenomeSeq} package. Data needs to be in a \texttt{MRexperiment} object format to normalize, run statistical tests, and visualize. As an example, throughout the vignette we'll use the following datasets. 
+To understand a function's usage or included data simply enter ?functionName.
+
+\begin{enumerate}
+\item Human lung microbiome \cite{charlson}:
+The lung microbiome consists of respiratory flora sampled from six healthy individuals. Three healthy nonsmokers and three healthy smokers. The upper lung tracts were sampled by oral wash and oro-/nasopharyngeal swabs. Samples were taken using two bronchoscopes, serial bronchoalveolar lavage and lower airway protected brushes.
+\end{enumerate}
+<<dataset1,tidy=FALSE>>=
+data(lungData)
+lungData
+@
+
+\begin{enumerate}
+\setcounter{enumi}{1}
+\item Humanized gnotobiotic mouse gut \cite{ts_mouse}:
+Twelve germ-free adult male C57BL/6J mice were fed a low-fat, plant polysaccharide-rich diet. Each mouse was gavaged with healthy adult human fecal material. Following the fecal transplant, mice remained on the low-fat, plant polysacchaaride-rich diet for four weeks, following which a subset of 6 were switched to a high-fat and high-sugar diet for eight weeks. Fecal samples for each mouse went through PCR amplification of the bacterial 16S rRNA gene V2 region weekly. Details of experimen [...]
+\url{http://gordonlab.wustl.edu/TurnbaughSE_10_09/STM_2009.html}
+
+\end{enumerate}
+<<dataset2,tidy=FALSE>>=
+data(mouseData)
+mouseData
+@
+
+\newpage
+\subsection{Useful commands}
+Phenotype information can be accessed with the \verb+phenoData+ and \verb+pData+ methods:
+<<pdata>>=
+phenoData(obj)
+head(pData(obj),3)
+@
+
+Feature information can be accessed with the \verb+featureData+ and \verb+fData+ methods:
+<<fdata>>=
+featureData(obj)
+head(fData(obj)[,-c(2,10)],3)
+@
+\newpage
+The raw or normalized counts matrix can be accessed with the \verb+MRcounts+ function:
+<<MRcounts>>=
+head(MRcounts(obj[,1:2]))
+@
+
+A \texttt{MRexperiment-class} object can be easily subsetted, for example:
+<<>>=
+featuresToKeep = which(rowSums(obj)>=100)
+samplesToKeep = which(pData(obj)$SmokingStatus=="Smoker")
+obj_smokers = obj[featuresToKeep,samplesToKeep]
+obj_smokers
+head(pData(obj_smokers),3)
+@
+
+Alternative normalization scaling factors can be accessed or replaced with the \verb+normFactors+ method:
+<<normFactors>>=
+head(normFactors(obj))
+normFactors(obj) <- rnorm(ncol(obj))
+head(normFactors(obj))
+@
+
+Library sizes (sequencing depths) can be accessed or replaced with the \verb+libSize+ method:
+<<libSize>>=
+head(libSize(obj))
+libSize(obj) <- rnorm(ncol(obj))
+head(libSize(obj))
+@
+
+\newpage
+Additionally, data can be filtered to maintain a threshold of minimum depth or OTU presence:
+<<filterData>>=
+data(mouseData)
+filterData(mouseData,present=10,depth=1000)
+@
+
+Two \texttt{MRexperiment-class} objects can be merged with the \texttt{mergeMRexperiments} function, e.g.:
+
+<<mergeMRexperiment>>=
+data(mouseData)
+newobj = mergeMRexperiments(mouseData,mouseData)
+newobj
+@
+
+
+\newpage
+\section{Normalization}
+Normalization is required due to varying depths of coverage across samples. \texttt{cumNorm} is a normalization method that calculates scaling factors equal to the sum of counts up to a particular quantile.
+
+Denote the $l$th quantile of sample $j$ as $q_j^l$, that is, in sample $j$ there are $l$ taxonomic features with counts smaller than $q_j^l$. For $l= \lfloor .95m \rfloor$ then $q_j^l$ corresponds to the 95th percentile of the count distribution for sample $j$. 
+
+
+Denote $s_j^l= \sum_{(i|c_{ij}\leq q_j^l)}c_{ij}$  as the sum of counts for sample $j$ up to the $l$th quantile. Our normalization chooses a value  $\hat{l}\leq m$ to define a normalization scaling factor for each sample to produce normalized counts $\tilde{c_{ij}}$  = $\frac{c_{ij}}{s_j^{\hat{l}}}N$ where $N$ is an appropriately chosen normalization constant. See Appendix C for more information on how our method calculates the proper percentile.
+
+These normalization factors are stored in the experiment summary slot. Functions to determine the proper percentile \texttt{cumNormStat}, save normalized counts \texttt{exportMat}, or save various sample statistics \texttt{exportStats} are also provided.
+Normalized counts can be called easily by \texttt{cumNormMat(MRexperimentObject)} or \texttt{MRcounts(MRexperimentObject,norm=TRUE,log=FALSE)}.
+
+\subsection{Calculating normalization factors}
+After defining a \texttt{MRexperiment} object, the first step is to calculate the proper percentile by which to normalize counts. There are several options in calculating and visualizing the relative differences in the reference. Figure 3 is an example from the lung dataset.
+
+<<calculateNormFactors>>=
+data(lungData)
+p=cumNormStatFast(lungData)
+@
+
+\noindent
+To calculate the scaling factors we simply run \texttt{cumNorm}
+
+<<normalizeData>>=
+lungData = cumNorm(lungData,p=p)
+@
+
+The user can alternatively choose different percentiles for the normalization scheme by specifying $p$.
+
+There are other functions, including \texttt{normFactors}, \texttt{cumNormMat}, that return the normalization factors or a normalized matrix for a specified percentile. To see a full list of functions please refer to the manual and help pages. 
+
+\subsection{Exporting data}
+To export normalized count matrices:
+<<saveData>>=
+mat = MRcounts(lungData,norm=TRUE,log=TRUE)[1:5,1:5]
+exportMat(mat,file=file.path(dataDirectory,"tmp.tsv"))
+@
+
+\noindent
+To save sample statistics (sample scaling factor, quantile value, number of identified features and library size):
+<<exportStats>>=
+exportStats(lungData[,1:5],file=file.path(dataDirectory,"tmp.tsv"))
+head(read.csv(file=file.path(dataDirectory,"tmp.tsv"),sep="\t"))
+@
+
+
+<<removeData, echo=FALSE>>=
+system(paste("rm",file.path(dataDirectory,"tmp.tsv")))
+@
+
+\newpage
+\section{Statistical testing}
+Now that we have taken care of normalization we can address the effects of under sampling on the detecting differentially abundant features (OTUs, genes, etc). This is our latest development and we recommend \textit{fitFeatureModel} over \textit{fitZig}. \textit{MRcoefs}, \textit{MRtable} and \textit{MRfulltable} are useful summary tables of the model outputs.
+
+\subsection{Zero-inflated Log-Normal mixture model for each feature}
+By reparametrizing our zero-inflation model, we're able to fit a zero-inflated model for each specific OTU separately.
+We currently recommend using the zero-inflated log-normal model as implemented in \textit{fitFeatureModel}.
+
+\subsubsection{Example using fitFeatureModel for differential abundance testing}
+
+Here is an example comparing smoker's and non-smokers lung microbiome.
+
+<<fitFeatureModel>>=
+data(lungData)
+lungData = lungData[,-which(is.na(pData(lungData)$SmokingStatus))]
+lungData=filterData(lungData,present=30,depth=1)
+lungData <- cumNorm(lungData, p=.5)
+pd <- pData(lungData)
+mod <- model.matrix(~1+SmokingStatus, data=pd)
+lungres1 = fitFeatureModel(lungData,mod)
+head(MRcoefs(lungres1))
+@
+
+\subsection{Zero-inflated Gaussian mixture model}
+The depth of coverage in a sample is directly related to how many features are detected in a sample motivating our zero-inflated Gaussian (ZIG) mixture model. Figure 2 is representative of the linear relationship between depth of coverage and OTU identification ubiquitous in marker-gene survey datasets currently available. For a quick overview of the mathematical model see Appendix B.
+
+\begin{figure}
+\centerline{\includegraphics[width=.55\textwidth]{metagenomeSeq_figure1.png}}
+\caption{\footnotesize{The number of unique features is plotted against depth of coverage for samples from the Human Microbiome Project \cite{hmp}. Including the depth of coverage and the interaction of body site and sequencing site we are able to acheive an adjusted $\mathrm{R}^2$ of .94. The zero-inflated Gaussian mixture was developed to account for missing features.}}\label{fig1}
+\end{figure}
+
+Function \texttt{fitZig} performs a complex mathematical optimization routine to estimate probabilities that a zero for a particular feature in a sample is a technical zero or not. The function relies heavily on the \texttt{limma} package \cite{limma}. Design matrices can be created in R by using the \texttt{model.matrix} function and are inputs for \texttt{fitZig}. 
+
+For large survey studies it is often pertinent to include phenotype information or confounders into a design matrix when testing the association between the abundance of taxonomic features and a phenotype phenotype of interest (disease, for
+instance). Our linear model methodology can easily incorporate these
+confounding covariates in a straightforward manner. \texttt{fitZig} output includes weighted fits for each of the $m$ features. Results can be filtered and saved using \texttt{MRcoefs} or \texttt{MRtable}.
+
+\subsubsection{Example using fitZig for differential abundance testing}
+\textbf{Warning}: The user should restrict significant features to those with a minimum number of positive samples. What this means is that one should not claim features are significant unless the effective number of samples is above a particular percentage. For example, fold-change estimates might be unreliable if an entire group does not have a positive count for the feature in question.
+
+
+We recommend the user remove features based on the number of estimated effective samples, please see \texttt{calculateEffectiveSamples}. We recommend removing features with less than the average number of effective samples in all features. In essence, setting eff = .5 when using \texttt{MRcoefs}, \texttt{MRfulltable}, or \texttt{MRtable}. To find features absent from a group the function \texttt{uniqueFeatures} provides a table of the feature ids, the number of positive features and read [...]
+
+In our analysis of the lung microbiome data, we can remove features that are not present in many samples, controls, and calculate the normalization factors. The user needs to decide which metadata should be included in the linear model.
+
+<<preprocess,dev='pdf',out.width='.55\\linewidth',out.height='.55\\linewidth',fig.cap='Relative difference for the median difference in counts from the reference.',fig.align='center',warning=FALSE>>=
+data(lungData)
+controls = grep("Extraction.Control",pData(lungData)$SampleType)
+lungTrim = lungData[,-controls]
+rareFeatures = which(rowSums(MRcounts(lungTrim)>0)<10)
+lungTrim = lungTrim[-rareFeatures,]
+lungp = cumNormStat(lungTrim,pFlag=TRUE,main="Trimmed lung data")
+lungTrim = cumNorm(lungTrim,p=lungp)
+@
+
+After the user defines an appropriate model matrix for hypothesis testing there are optional inputs to \texttt{fitZig}, including settings determined by \texttt{zigControl}. We ask the user to review the help files for both \texttt{fitZig} and \texttt{zigControl}. For this example we include body site as covariates and want to test for the bacteria differentially abundant between smokers and non-smokers.
+
+<<zigTesting>>=
+smokingStatus = pData(lungTrim)$SmokingStatus
+bodySite = pData(lungTrim)$SampleType
+normFactor = normFactors(lungTrim)
+normFactor = log2(normFactor/median(normFactor) + 1)
+mod = model.matrix(~smokingStatus+bodySite + normFactor)
+settings = zigControl(maxit=10,verbose=TRUE)
+fit = fitZig(obj = lungTrim,mod=mod,useCSSoffset = FALSE, 
+             control=settings)
+
+# The default, useCSSoffset = TRUE, automatically includes the CSS scaling normalization factor.
+@
+
+The result, \texttt{fit}, is a list providing detailed estimates of the fits including a 
+\texttt{limma} fit in \texttt{fit\$fit} and an \texttt{ebayes} statistical fit in \texttt{fit\$eb}.
+This data can be analyzed like any \texttt{limma} fit and in this example, the column of 
+the fitted coefficientsrepresents the fold-change for our "smoker" vs. "nonsmoker" analysis. 
+
+Looking at the particular analysis just performed, there appears to be OTUs representing two
+\textit{Prevotella}, two \textit{Neisseria}, a \textit{Porphyromonas} and a \textit{Leptotrichia} that are differentially abundant. One should check that similarly annotated OTUs are not equally differentially abundant in controls. 
+
+Alternatively, the user can input a model with their own normalization factors including them directly in the model matrix and specifying the option \texttt{useCSSoffset = FALSE} in fitZig.
+
+\subsubsection{Multiple groups}
+Assuming there are multiple groups it is possible to make use of Limma's topTable functions for F-tests
+and contrast functions to compare multiple groups and covariates of interest. The output of fitZig includes a 'MLArrayLM' Limma object that can be called on by other functions. When running fitZig by default there is an additional covariate added to the design matrix. The fit and the ultimate design matrix are crucial for contrasts. 
+<<contrasts>>=
+# maxit=1 is for demonstration purposes
+settings = zigControl(maxit=1,verbose=FALSE)
+mod = model.matrix(~bodySite)
+colnames(mod) = levels(bodySite)
+# fitting the ZIG model
+res = fitZig(obj = lungTrim,mod=mod,control=settings)
+# The output of fitZig contains a list of various useful items. hint: names(res).
+# 
+# Probably the most useful is the limma 'MLArrayLM' object called fit.
+zigFit = res$fit
+finalMod = res$fit$design
+
+contrast.matrix = makeContrasts(BAL.A-BAL.B,OW-PSB,levels=finalMod)
+fit2 = contrasts.fit(zigFit, contrast.matrix)
+fit2 = eBayes(fit2)
+topTable(fit2)
+
+# See help pages on decideTests, topTable, topTableF, vennDiagram, etc.
+@
+Further specific details can be found in section 9.3 and beyond of the Limma user guide. The take home message is that to make use of any Limma functions one needs to extract the final model matrix used: \textit{res\$fit\$design} and the MLArrayLM Limma fit object: \textit{res\$fit}.
+
+\subsubsection{Exporting fits}
+Currently functions are being developed to wrap and output results more neatly, but \texttt{MRcoefs}, \texttt{MRtable}, \texttt{MRfulltable} can be used to view coefficient fits and related statistics and export the data with optional output values - see help files to learn how they differ. An important note is that the \texttt{by} variable controls which coefficients are of interest whereas \texttt{coef} determines the display.\\
+
+To only consider features that are found in a large percentage of effectively positive (positive samples + the weight of zero counts included in the Gaussian mixture) use the \textbf{eff} option in the \texttt{MRtables}.
+
+<<fittedResult,tidy=TRUE>>=
+taxa = 
+  sapply(strsplit(as.character(fData(lungTrim)$taxa),split=";"),
+         function(i){i[length(i)]})
+head(MRcoefs(fit,taxa=taxa,coef=2))
+@
+
+\subsection{Time series analysis}
+Implemented in the \texttt{fitTimeSeries} function is a method for calculating time intervals for which bacteria are
+differentially abundant. Fitting is performed using Smoothing Splines ANOVA (SS-ANOVA), as implemented in the \texttt{gss}
+package. Given observations at multiple time points for two groups the method calculates a function modeling the difference 
+in abundance across all time. Using group membership permutations weestimate a null distribution of areas under the difference
+curve for the time intervals of interest and report significant intervals of time. 
+
+Use of the function for analyses should cite:
+"Finding regions of interest in high throughput genomics data using smoothing splines"
+Talukder H, Paulson JN, Bravo HC. (Submitted)
+
+For a description of how to perform a time-series / genome based analysis call the \texttt{fitTimeSeries} vignette.
+<<timeSeries>>=
+# vignette("fitTimeSeries")
+@
+
+\subsection{Log Normal permutation test}
+Included is a standard log normal linear model with permutation based p-values permutation. We show the fit for the same model as above using 10 permutations providing p-value resolution to the tenth. The \texttt{coef} parameter refers to the coefficient of interest to test. We first generate the list of significant features.
+
+<<perm>>=
+coeffOfInterest = 2
+res = fitLogNormal(obj = lungTrim, mod = mod, useCSSoffset = FALSE, B = 10, coef = coeffOfInterest)
+
+# extract p.values and adjust for multiple testing
+# res$p are the p-values calculated through permutation
+adjustedPvalues = p.adjust(res$p,method="fdr")
+
+# extract the absolute fold-change estimates
+foldChange = abs(res$fit$coef[,coeffOfInterest])
+
+# determine features still significant and order by the 
+sigList = which(adjustedPvalues <= .05)
+sigList = sigList[order(foldChange[sigList])]
+
+# view the top taxa associated with the coefficient of interest.
+head(taxa[sigList])
+@
+
+\subsection{Presence-absence testing}
+The hypothesis for the implemented presence-absence test is that the proportion/odds of a given feature present is higher/lower among one group of individuals compared to another, and we want to test whether any difference in the proportions observed is significant. We use Fisher's exact test to create a 2x2 contingency table and calculate p-values, odd's ratios, and confidence intervals.  \texttt{fitPA} calculates the presence-absence for each organism and returns a table of p-values, o [...]
+
+<<presenceAbsence>>=
+classes = pData(mouseData)$diet
+res = fitPA(mouseData[1:5,],cl=classes)
+# Warning - the p-value is calculating 1 despite a high odd's ratio.
+head(res)
+@
+
+\subsection{Discovery odds ratio testing}
+The hypothesis for the implemented discovery test is that the proportion of observed counts for a feature of all counts are comparable between groups. We use Fisher's exact test to create a 2x2 contingency table and calculate p-values, odd's ratios, and confidence intervals.  \texttt{fitDO} calculates the proportion of counts for each organism and returns a table of p-values, odd's ratios, and confidence intervals. The function will accept either a \texttt{MRexperiment} object or matrix.
+
+<<discOdds>>=
+classes = pData(mouseData)$diet
+res = fitDO(mouseData[1:100,],cl=classes,norm=FALSE,log=FALSE)
+head(res)
+@
+
+\subsection{Feature correlations}
+To test the correlations of abundance features, or samples, in a pairwise fashion we have implemented \texttt{correlationTest} and \texttt{correctIndices}. The \texttt{correlationTest} function will calculate basic pearson, spearman, kendall correlation statistics for the rows of the input and report the associated p-values. If a vector of length ncol(obj) it will also calculate the correlation of each row with the associated vector.
+
+<<corTest>>=
+cors = correlationTest(mouseData[55:60,],norm=FALSE,log=FALSE)
+head(cors)
+@
+\textbf{Caution:} http://www.ncbi.nlm.nih.gov/pubmed/23028285
+
+\subsection{Unique OTUs or features}
+To find features absent from any number of classes the function \texttt{uniqueFeatures} provides a table of the feature ids, the number of positive features and reads for each group. Thresholding for the number of positive samples or reads required are options.
+
+<<uniqueFeatures>>=
+cl = pData(mouseData)[["diet"]]
+uniqueFeatures(mouseData,cl,nsamples = 10,nreads = 100)
+@
+
+\newpage
+\section{Aggregating counts}
+Normalization is recommended at the OTU level. However, functions are in place to aggregate 
+the count matrix (normalized or not), based on a particular user defined level. Using the
+featureData information in the MRexperiment object, calling \texttt{aggregateByTaxonomy} or \texttt{aggTax} on a MRexperiment object and declaring particular featureData column name (i.e.
+'genus') will aggregate counts to the desired level with the aggfun function (default colSums). Possible aggfun alternatives include colMeans and colMedians.
+
+<<aggTax>>=
+obj = aggTax(mouseData,lvl='phylum',out='matrix')
+head(obj[1:5,1:5])
+@
+
+Additionally, aggregating samples can be done using the
+phenoData information in the MRexperiment object. Calling \texttt{aggregateBySample} or \texttt{aggsamp} on a MRexperiment object and declaring a particular phenoData column name (i.e.
+'diet') will aggregate counts with the aggfun function (default rowMeans). Possible aggfun alternatives include rowSums and rowMedians.
+
+<<aggSamp>>=
+obj = aggSamp(mouseData,fct='mouseID',out='matrix')
+head(obj[1:5,1:5])
+@
+
+The \texttt{aggregateByTaxonomy},\texttt{aggregateBySample}, \texttt{aggTax} \texttt{aggSamp} functions are flexible enough to put in either 1) a matrix with a vector of labels or 2) a MRexperiment object with a vector of labels or featureData column name. The function can also output either a matrix or MRexperiment object.
+
+\newpage
+\section{Visualization of features}
+
+To help with visualization and analysis of datasets \texttt{metagenomeSeq} has several plotting functions to gain insight of the dataset's overall structure and particular individual features. An initial interactive exploration of the data can be displayed with the \texttt{display} function.
+
+For an overall look at the dataset we provide a number of plots including heatmaps of feature counts: \texttt{plotMRheatmap}, basic feature correlation structures: \texttt{plotCorr}, 
+PCA/MDS coordinates of samples or features: \texttt{plotOrd}, rarefaction effects: \texttt{plotRare} and contingency table
+style plots: \texttt{plotBubble}.
+
+
+Other plotting functions look at particular features such as the abundance for a single feature: \texttt{plotOTU} and \texttt{plotFeature}, or of multiple features at once:
+\texttt{plotGenus}. Plotting multiple OTUs with similar annotations allows for
+additional control of false discoveries.
+
+\subsection{Interactive Display}
+Due to recent advances in the \texttt{interactiveDisplay} package, calling the \texttt{display} function on
+\texttt{MRexperiment} objects will bring up a browser to explore your data through several interactive visualizations.
+For more detailed interactive visualizations one might be interested in the shiny-phyloseq package.
+
+<<interactiveDisplay>>=
+# Calling display on the MRexperiment object will start a browser session with interactive plots.
+
+# require(interactiveDisplay)
+# display(mouseData)
+@
+
+\subsection{Structural overview}
+Many studies begin by comparing the abundance composition across 
+sample or feature phenotypes. Often a first step of data analysis is a 
+heatmap, correlation or co-occurence plot or some other data exploratory method. 
+The following functions have been implemented to provide a first step overview 
+of the data:
+
+
+\begin{enumerate}
+\item \texttt{plotMRheatmap} - heatmap of abundance estimates (Fig. 4 left)
+\item \texttt{plotCorr} - heatmap of pairwise correlations (Fig. 4 right)
+\item \texttt{plotOrd} - PCA/CMDS components (Fig. 5 left)
+\item \texttt{plotRare} - rarefaction effect (Fig. 5 right)
+\item \texttt{plotBubble} - contingency table style plot (see help)
+\end{enumerate}
+
+\noindent
+Each of the above can include phenotypic information in helping to explore the data.
+
+Below we show an example of how to create a heatmap and hierarchical clustering of $\log_2$ 
+transformed counts for the 200 OTUs with the largest overall variance. 
+Red values indicate counts close to zero. Row color labels indicate OTU 
+taxonomic class; column color labels indicate diet (green = high fat, 
+yellow = low fat). Notice the samples cluster by diet in these cases 
+and there are obvious clusters. We then plot a correlation matrix for the same features.
+
+<<heatmapData,fig.cap='Left) Abundance heatmap (plotMRheatmap). Right) Correlation heatmap (plotCorr).',dev='pdf',fig.show='hold',out.width='.5\\linewidth', out.height='.5\\linewidth'>>=
+trials = pData(mouseData)$diet
+heatmapColColors=brewer.pal(12,"Set3")[as.integer(factor(trials))];
+heatmapCols = colorRampPalette(brewer.pal(9, "RdBu"))(50)
+
+# plotMRheatmap
+plotMRheatmap(obj=mouseData,n=200,cexRow = 0.4,cexCol = 0.4,trace="none",
+                col = heatmapCols,ColSideColors = heatmapColColors)
+
+# plotCorr
+plotCorr(obj=mouseData,n=200,cexRow = 0.25,cexCol = 0.25,
+         trace="none",dendrogram="none",col=heatmapCols)
+@
+
+Below is an example of plotting CMDS plots of the data and the rarefaction effect at the OTU level. None of the data is removed (we recommend removing outliers typically).
+<<MDSandRareplots,fig.cap='Left) CMDS of features (plotOrd). Right) Rarefaction effect (plotRare).',dev='pdf',fig.show='hold',out.width='.5\\linewidth', out.height='.5\\linewidth'>>=
+cl = factor(pData(mouseData)$diet)
+
+# plotOrd - can load vegan and set distfun = vegdist and use dist.method="bray"
+plotOrd(mouseData,tran=TRUE,usePCA=FALSE,useDist=TRUE,bg=cl,pch=21)
+
+# plotRare
+res = plotRare(mouseData,cl=cl,pch=21,bg=cl)
+
+# Linear fits for plotRare / legend
+tmp=lapply(levels(cl), function(lv) 
+  lm(res[,"ident"]~res[,"libSize"]-1, subset=cl==lv))
+for(i in 1:length(levels(cl))){
+   abline(tmp[[i]], col=i)
+}
+legend("topleft", c("Diet 1","Diet 2"), text.col=c(1,2),box.col=NA)
+@
+
+\subsection{Feature specific}
+Reads clustered with high similarity represent functional or taxonomic units. 
+However, it is possible that reads from the same organism get clustered into
+multiple OTUs. Following differential abundance analysis. 
+It is important to confirm differential abundance. 
+One way to limit false positives is ensure that the feature is actually abundant (enough positive samples). 
+Another way is to plot the abundances of features similarly annotated.
+
+\begin{enumerate}
+\item \texttt{plotOTU} - abundances of a particular feature by group (Fig. 6 left)
+\item \texttt{plotGenus} - abundances for several features similarly annotated by group (Fig. 6 right)
+\item \texttt{plotFeature} - abundances of a particular feature by group (similar to plotOTU, Fig. 7)
+\end{enumerate}
+
+
+Below we use \texttt{plotOTU} to plot the normalized log(cpt) of a specific OTU annotated as \textit{Neisseria meningitidis}, in particular the 779th row of lungTrim's count matrix. Using \texttt{plotGenus} we plot the normalized log(cpt) of all OTUs annotated as \textit{Neisseria meningitidis}. 
+
+It would appear that \textit{Neisseria meningitidis} is differentially more abundant in nonsmokers.
+<<plotOTUData,fig.cap='Left) Abundance plot (plotOTU). Right) Multiple OTU abundances (plotGenus).',dev='pdf',fig.show='hold',out.width='.5\\linewidth', out.height='.5\\linewidth',tidy=TRUE>>=
+head(MRtable(fit,coef=2,taxa=1:length(fData(lungTrim)$taxa)))
+patients=sapply(strsplit(rownames(pData(lungTrim)),split="_"),
+          function(i){
+            i[3]
+          })
+pData(lungTrim)$patients=patients
+classIndex=list(smoker=which(pData(lungTrim)$SmokingStatus=="Smoker"))
+classIndex$nonsmoker=which(pData(lungTrim)$SmokingStatus=="NonSmoker")
+otu = 779
+
+# plotOTU
+plotOTU(lungTrim,otu=otu,classIndex,main="Neisseria meningitidis")
+
+# Now multiple OTUs annotated similarly
+x = fData(lungTrim)$taxa[otu]
+otulist = grep(x,fData(lungTrim)$taxa)
+
+# plotGenus
+plotGenus(lungTrim,otulist,classIndex,labs=FALSE,
+            main="Neisseria meningitidis")
+
+lablist<- c("S","NS")
+axis(1, at=seq(1,6,by=1), labels = rep(lablist,times=3))
+@
+
+<<plotFeatureData,fig.cap='Plot of raw abundances',dev='pdf',fig.show='hold',out.width='.5\\linewidth', out.height='.5\\linewidth',tidy=TRUE>>=
+classIndex=list(Western=which(pData(mouseData)$diet=="Western"))
+classIndex$BK=which(pData(mouseData)$diet=="BK")
+otuIndex = 8770
+
+# par(mfrow=c(1,2))
+dates = pData(mouseData)$date
+plotFeature(mouseData,norm=FALSE,log=FALSE,otuIndex,classIndex,
+            col=dates,sortby=dates,ylab="Raw reads")
+@
+
+\newpage
+\section{Summary}
+
+\texttt{metagenomeSeq} is specifically designed for sparse high-throughput sequencing experiments that addresses the analysis of differential abundance for marker-gene survey data. The package, while designed for marker-gene survey datasets, may be appropriate for other sparse data sets for which the zero-inflated Gaussian mixture model may apply. If you make use of the statistical method please cite our paper. If you made use of the manual/software, please cite the manual/software!
+
+\subsection{Citing metagenomeSeq}
+<<cite>>=
+citation("metagenomeSeq")
+@
+
+\subsection{Session Info}
+<<sessionInfo>>=
+sessionInfo()
+@
+
+\newpage
+\section{Appendix}
+\subsection{Appendix A: MRexperiment internals}
+The S4 class system in R allows for object oriented definitions. \texttt{metagenomeSeq} makes use of the \texttt{Biobase} package in Bioconductor and their virtual-class, \texttt{eSet}. Building off of \texttt{eSet}, the main S4 class in \texttt{metagenomeSeq} is termed \texttt{MRexperiment}. \texttt{MRexperiment} is a simple extension of \texttt{eSet}, adding a single slot, \texttt{expSummary}.
+
+The experiment summary slot is a data frame that includes the depth of coverage and the normalization factors for each sample. Future datasets can be formated as MRexperiment objects and analyzed with relative ease. A \texttt{MRexperiment} object is created by calling \texttt{newMRexperiment}, passing the counts, phenotype and feature data as parameters.
+
+We do not include normalization factors or library size in the currently available slot specified for the sample specific phenotype data. All matrices are organized in the \texttt{assayData} slot. All phenotype data (disease status, age, etc.) is stored in \texttt{phenoData} and feature data (OTUs, taxanomic assignment to varying levels, etc.) in \texttt{featureData}. Additional slots are available for reproducibility and annotation.
+
+\subsection{Appendix B: Mathematical model}
+
+Defining the class comparison of interest as $k(j)=I\{j \in \mathrm{ group } A\}$. The zero-inflated model is defined for the continuity-corrected $\log_2$ of the count data $y_{ij} = \log_2(c_{ij}+1)$ as a mixture of a point mass at zero $I_{\{0\}}(y_{ij})$ and a count distribution $f_{count}(y_{ij};\mu_i, \sigma_i^2) \sim N(\mu_i, \sigma_i^2)$.
+Given mixture parameters $\pi_{j}$, we have that the density of the zero-inflated Gaussian distribution for feature $i$, in sample $j$ with $S_{j}$ total counts is:
+
+\begin{equation}
+f_{zig}(y_{ij}; \theta ) = \pi_{j}(S_{j}) \cdot I_{\{0\}}(y_{ij})
++ (1-\pi_{j}(S_{j})) \cdot f_{count}(y_{ij};\theta)
+\end{equation}
+
+Maximum-likelihood estimates are approximated using an EM algorithm,
+where we treat mixture membership $\Delta_{ij}=1$ if $y_{ij}$ is
+generated from the zero point mass as latent indicator variables\cite{EM}. We make use of an EM algorithm to account for the linear relationship between sparsity and depth of coverage. The user can specify within the \texttt{fitZig} function a non-default zero model that accounts for more than simply the depth of coverage (e.g. country, age, any metadata associated with sparsity, etc.).
+See Figure 8 for the graphical model.
+
+\begin{figure}
+\centerline{\includegraphics[width=.7\textwidth]{metagenomeSeq_figure2.png}}
+\caption{\footnotesize{Graphical model. Green nodes represent observed variables: $S_j$ is the
+total number of reads in sample $j$; $k_j$ the case-control status
+of sample $j$; and $y_{ij}$ the logged normalized counts for feature $i$ in sample $j$. Yellow nodes represent counts obtained from each mixture component: counts come from either a spike-mass at zero,
+$y_{ij}^0$, or the ``count'' distribution, $y_{ij}^1$. Grey nodes $b_{0i}$, $b_{1i}$ and $\sigma_{i}^2$ represent the
+estimated overall mean, fold-change and variance of the count distribution component for feature $i$. $\pi_j$, is the mixture proportion for sample $j$ which depends on sequencing depth via a linear model defined by parameters $\beta_0$ and $\beta_1$. The expected value of latent indicator variables $\Delta_{ij}$ give the posterior probability of a count being generated from a spike-mass at zero, i.e. $y_{ij}^0$. We assume $M$ features and $N$ samples.}}
+\end{figure}
+
+More information will be included later.  For now, please see the online methods in: 
+
+http://www.nature.com/nmeth/journal/vaop/ncurrent/full/nmeth.2658.html
+
+\subsection{Appendix C: Calculating the proper percentile} To be included: an overview of the two methods implemented for the data driven percentile calculation and more description below.
+
+
+The choice of the appropriate quantile given is crucial for ensuring that the normalization approach does not introduce normalization-related artifacts in the data. At a high level, the count distribution of samples should all be roughly equivalent and independent of each other up to this quantile under the assumption that, at this range, counts are derived from a common distribution.
+
+
+More information will be included later. For now, please see the online methods in: 
+
+http://www.nature.com/nmeth/journal/vaop/ncurrent/full/nmeth.2658.html
+
+\newpage
+\bibliography{metagenomeSeq}
+\end{document}
diff --git a/inst/doc/metagenomeSeq.pdf b/inst/doc/metagenomeSeq.pdf
new file mode 100644
index 0000000..d3f3442
Binary files /dev/null and b/inst/doc/metagenomeSeq.pdf differ
diff --git a/inst/extdata/CHK_NAME.otus.count.csv b/inst/extdata/CHK_NAME.otus.count.csv
new file mode 100644
index 0000000..9d6b87f
--- /dev/null
+++ b/inst/extdata/CHK_NAME.otus.count.csv
@@ -0,0 +1,1001 @@
+OTU	CHK_6467_E3B11_BRONCH2_PREWASH_V1V2	CHK_6467_E3B11_OW_V1V2	CHK_6467_E3B08_OW_V1V2	CHK_6467_E3B07_BAL_A_V1V2	CHK_6467_E3B11_BAL_A_V1V2	CHK_6467_E3B09_OP_V1V2	CHK_6467_E3B08_BRONCH1_PREWASH_V1V2	CHK_6467_E3B11_BRONCH1_POSTWASH_V1V2	CHK_6467_E3B11_OP_V1V2	CHK_6467_E3B10_BRONCH1_TIPSWAB_V1V2	CHK_6467_E3B07_BAL_B_V1V2	CHK_6467_E3B08_BAL_A_V1V2	CHK_6467_E3B11_PSB_V1V2	CHK_6467_SAL1_11_5_209_11_18_V1V2	CHK_6467_E3B10_OW_V1V2	CHK_6467_SAL1_11_4_201_11_18_V1V2	CHK_6467_E3B09_BRONCH1_POSTWASH_ [...]
+1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+3	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+4	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+5	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+6	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+7	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+8	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+9	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+10	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+11	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+12	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+13	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+14	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+15	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+16	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+17	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+18	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+19	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+20	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+21	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+22	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+23	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+24	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+25	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+26	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+27	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+28	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+29	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+30	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+31	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+32	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+33	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+34	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+35	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+36	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+37	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+38	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+39	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+40	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+41	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+42	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+43	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+44	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+45	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+46	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+47	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+48	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+49	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+50	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+51	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+52	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+53	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+54	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+55	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+56	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+57	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+58	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+59	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+60	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+61	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+62	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+63	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+64	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+65	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+66	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+67	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+68	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+69	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+70	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+71	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+72	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+73	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+74	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+75	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+76	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+77	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	36	0	3	0	0	0	0	0	0	4	1	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	1	0	0	10	2	0	4	0	0	0	3	0	0	0	0	0	0	1	0	0	0	1	0	1	1	4	0	0	13
+78	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+79	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	4	0	0	0	0	1	5	0	7	0	0	0	0	0	0	0	0	0	0	1	0	0	0	2	0	0	1	0	0	0	0
+80	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+81	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+82	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+83	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+84	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+85	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+86	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+87	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+88	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+89	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+90	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+91	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	11	0	0	0	0	0	0	0	0	3	0	0	0	0	0	0	0	0	0	0	0	0	0	0	6	0	0	0	0	4	2	0	5	0	0	0	1	0	0	0	0	0	0	1	0	0	0	1	0	0	4	0	0	0	2
+92	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+93	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+94	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+95	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+96	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+97	0	0	0	0	4	0	0	0	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0	10	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	5	0	0	0	0	2	2	0	4	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	1
+98	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+99	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+100	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+101	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+102	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+103	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	9	0	0	0	0	0	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	3	0	0	0	0	3	2	0	6	1	0	0	1	0	0	0	0	0	0	1	0	0	0	2	0	1	2	3	0	0	4
+104	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+105	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+106	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+107	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+108	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+109	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+110	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	4	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	1	0	0	0	0	0	5	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	2	0	0	3
+111	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+112	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+113	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	3	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+114	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+115	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+116	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+117	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+118	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+119	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+120	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+121	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+122	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+123	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+124	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+125	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+126	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+127	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+128	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+129	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+130	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+131	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+132	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+133	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+134	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+135	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+136	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+137	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+138	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+139	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+140	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+141	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+142	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+143	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+144	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+145	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+146	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+147	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+148	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+149	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+151	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+152	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+153	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+154	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+155	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+156	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+157	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+158	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+159	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+160	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	3	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+161	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+162	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+163	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+164	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+165	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+166	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+167	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+168	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+169	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+170	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+171	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+172	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+173	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+174	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+175	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+176	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+177	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+178	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+179	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+180	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+181	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+182	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+183	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+184	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+185	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+186	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+187	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+188	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+189	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+190	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+191	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+192	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+193	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+194	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+195	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+196	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+197	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+198	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	1
+199	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+200	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+201	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+202	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+203	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+204	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+205	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+206	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+207	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+208	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+209	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+210	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+211	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+212	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+213	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+214	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+215	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+216	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+217	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+218	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+219	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+220	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+221	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+222	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+223	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+224	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+225	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+226	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+227	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+228	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+229	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+230	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+231	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+232	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+233	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+234	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+235	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+236	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+237	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+238	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+239	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+240	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+241	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+242	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+243	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+244	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+245	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+246	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+247	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+248	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+249	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+250	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+251	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+252	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+253	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+254	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+255	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+256	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+257	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+258	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+259	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+260	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+261	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+262	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+263	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+264	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+265	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+266	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+267	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2
+268	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+269	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+270	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+271	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+272	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+273	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+274	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+275	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+276	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+277	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+278	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+279	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+280	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+281	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+282	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+283	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+284	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+285	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+286	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+287	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+288	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+289	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+290	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+291	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+292	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+293	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+294	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+295	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+296	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+297	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+298	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+299	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+300	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+301	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+302	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+303	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+304	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+305	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+306	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+307	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+308	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+309	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+310	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+311	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+312	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+313	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+314	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+315	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+316	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+317	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+318	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+319	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+320	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+321	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+322	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+323	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+324	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+325	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+326	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+327	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+328	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+329	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+330	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+331	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+332	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+333	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+334	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+335	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+336	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+337	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+338	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+339	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+340	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+341	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+342	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+343	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+344	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	1	0	0	0
+345	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+346	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+347	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+348	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+349	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+350	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+351	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+352	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+353	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+354	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+355	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+356	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+357	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+358	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+359	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+360	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+361	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+362	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+363	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+364	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+365	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+366	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+367	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+368	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+369	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+370	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+371	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+372	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+373	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+374	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+375	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+376	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+377	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+378	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+379	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+380	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+381	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+382	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+383	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+384	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+385	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+386	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+387	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+388	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+389	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+390	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+391	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+392	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+393	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+394	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+395	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+396	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+397	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+398	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+399	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+400	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+401	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+402	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+403	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+404	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+405	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+406	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+407	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+408	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+409	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+410	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+411	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+412	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+413	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+414	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+415	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+416	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+417	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+418	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+419	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+420	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+421	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+422	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+423	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+424	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+425	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+426	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+427	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+428	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+429	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+430	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+431	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+432	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+433	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+434	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+435	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+436	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+437	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+438	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+439	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+440	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+441	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+442	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+443	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+444	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+445	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+446	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+447	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+448	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+449	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+450	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+451	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+452	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+453	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+454	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+455	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+456	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+457	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	1
+458	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+459	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+460	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+461	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+462	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+463	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+464	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+465	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+466	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+467	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+468	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+469	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+470	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+471	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+472	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+473	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+474	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+475	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+476	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+477	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+478	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+479	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+480	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+481	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+482	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+483	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+484	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+485	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+486	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+487	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+488	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+489	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+490	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+491	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+492	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+493	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+494	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+495	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+496	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+497	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+498	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+499	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+500	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+501	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+502	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+503	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+504	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+505	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+506	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+507	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+508	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+509	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+510	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+511	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+512	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+513	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+514	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+515	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+516	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+517	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+518	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+519	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+520	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+521	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+522	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+523	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+524	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+525	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+526	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+527	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+528	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+529	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+530	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+531	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+532	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+533	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+534	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+535	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	4	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+536	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+537	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+538	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+539	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+540	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+541	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+542	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0
+543	0	7	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0
+544	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+545	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+546	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+547	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+548	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+549	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+550	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+551	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+552	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+553	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+554	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+555	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+556	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+557	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+558	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+559	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+560	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+561	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+562	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+563	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+564	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+565	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+566	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+567	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+568	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+569	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+570	0	1	0	0	28	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	4	0	2	0	1	1	0	0	0	0	0	0	0	3	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	23	6	0	14	10	0	0	1	0	0	0	0	0	0	0	0	0	0	2	0	0	3	0	0	0	1
+571	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+572	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+573	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+574	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+575	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+576	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+577	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	5	0	0	1
+578	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+579	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0
+580	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+581	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+582	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+583	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+584	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+585	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+586	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+587	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+588	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+589	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0
+590	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+591	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	6	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	3	2	0	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	3
+592	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+593	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+594	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+595	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+596	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	3	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0
+597	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+598	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+599	0	0	0	0	3	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	3	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	15	1	0	7	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	1	0	0	0	0
+600	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+601	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+602	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+603	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+604	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+605	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+606	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+607	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+608	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+609	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+610	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+611	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+612	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	3	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+613	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+614	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+615	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+616	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+617	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+618	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+619	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+620	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+621	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+622	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+623	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+624	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+625	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+626	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+627	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+628	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+629	0	0	0	0	3	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+630	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+631	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+632	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+633	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+634	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+635	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+636	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+637	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+638	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+639	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+640	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+641	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+642	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+643	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+644	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+645	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+646	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+647	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+648	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+649	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+650	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+651	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+652	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+653	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+654	0	0	0	0	3	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+655	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+656	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+657	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+658	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+659	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+660	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+661	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+662	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+663	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+664	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+665	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+666	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	1	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	1
+667	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+668	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+669	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+670	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+671	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+672	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+673	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+674	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+675	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+676	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+677	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+678	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+679	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+680	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+681	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+682	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+683	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+684	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+685	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+686	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+687	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+688	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+689	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+690	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+691	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+692	0	0	0	0	3	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+693	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+694	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+695	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+696	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+697	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+698	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+699	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+700	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+701	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+702	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+703	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+704	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+705	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+706	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+707	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+708	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+709	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+710	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+711	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+712	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+713	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+714	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+715	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+716	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+717	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+718	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+719	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+720	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+721	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+722	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+723	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+724	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+725	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+726	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+727	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+728	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+729	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+730	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+731	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+732	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+733	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+734	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+735	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+736	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+737	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+738	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+739	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+740	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+741	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+742	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+743	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+744	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+745	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+746	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+747	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+748	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+749	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+750	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+751	0	0	0	0	4	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	3	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	14	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	1
+752	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+753	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+754	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+755	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+756	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+757	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+758	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+759	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+760	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+761	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+762	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+763	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+764	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+765	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+766	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+767	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+768	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+769	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+770	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+771	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+772	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+773	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+774	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+775	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+776	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+777	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+778	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+779	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+780	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+781	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+782	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+783	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+784	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+785	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+786	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+787	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+788	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+789	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+790	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+791	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+792	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+793	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+794	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+795	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+796	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+797	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+798	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+799	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+800	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+801	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+802	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+803	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+804	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+805	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+806	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+807	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+808	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+809	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+810	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+811	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+812	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+813	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+814	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+815	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+816	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+817	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+818	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+819	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+820	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+821	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+822	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+823	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+824	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+825	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+826	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+827	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+828	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+829	0	0	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	1	0	0	4	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+830	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+831	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+832	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+833	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+834	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+835	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+836	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+837	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+838	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+839	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+840	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+841	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+842	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+843	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+844	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+845	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+846	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+847	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+848	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+849	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+850	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+851	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+852	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+853	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+854	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+855	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+856	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+857	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+858	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+859	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+860	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+861	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+862	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+863	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+864	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+865	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+866	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+867	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+868	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+869	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+870	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+871	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+872	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+873	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+874	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+875	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+876	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+877	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+878	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+879	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+880	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+881	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+882	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+883	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+884	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+885	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+886	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+887	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+888	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+889	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+890	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+891	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+892	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+893	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+894	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+895	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+896	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+897	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+898	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+899	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+900	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+901	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+902	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+903	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+904	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+905	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+906	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0
+907	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+908	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+909	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+910	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+911	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+912	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+913	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+914	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+915	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+916	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	5	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+917	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+918	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+919	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+920	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+921	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+922	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0
+923	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+924	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+925	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+926	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+927	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+928	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+929	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+930	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+931	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+932	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+933	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+934	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+935	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+936	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+937	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+938	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+939	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+940	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+941	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+942	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+943	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+944	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+945	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+946	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+947	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	6	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+948	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+949	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+950	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+951	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+952	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+953	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+954	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+955	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+956	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+957	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+958	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+959	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+960	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+961	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+962	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+963	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+964	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+965	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+966	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+967	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+968	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+969	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0
+970	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+971	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+972	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+973	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+974	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+975	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+976	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+977	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+978	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	3	0	0	0	0	0	0	0	3	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	3	8	0	4	3	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	1	0	0	0	4
+979	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+980	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+981	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+982	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+983	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+984	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+985	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+986	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+987	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+988	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+989	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+990	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+991	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+992	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+993	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+994	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+995	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+996	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+997	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+998	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+999	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+1000	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
diff --git a/inst/extdata/CHK_clinical.csv b/inst/extdata/CHK_clinical.csv
new file mode 100644
index 0000000..29881db
--- /dev/null
+++ b/inst/extdata/CHK_clinical.csv
@@ -0,0 +1,79 @@
+Sample ID	SampleType	SiteSampled	SmokingStatus
+CHK_6467_H201_12_6_281_12_6_V1V2	Extraction.Control	Water	NA
+CHK_6467_H2O1_11_2_223_11_29_V1V2	Extraction.Control	Water	NA
+CHK_6467_H2O1_11_2_280_11_30_V1V2	Extraction.Control	Water	NA
+CHK_6467_H2O1_11_4_222_11_18_V1V2	Extraction.Control	Water	NA
+CHK_6467_H2O1_11_5_208_11_18_V1V2	Extraction.Control	Water	NA
+CHK_6467_SAL1_11_2_224_11_29_V1V2	Extraction.Control	Sterile.Saline	NA
+CHK_6467_SAL1_11_4_201_11_18_V1V2	Extraction.Control	Sterile.Saline	NA
+CHK_6467_SAL1_11_5_209_11_18_V1V2	Extraction.Control	Sterile.Saline	NA
+CHK_6467_SS1_11_2_253_11_30_V1V2	Extraction.Control	Sterile.Swab	NA
+CHK_6467_SS1_11_4_272_11_30_V1V2	Extraction.Control	Sterile.Swab	NA
+CHK_6467_PSBMETAL_12_6_286_12_6_V1V2	Extraction.Control	Sterile.PSB	NA
+CHK_6467_PSBPLASTIC_12_6_285_12_6_V1V2	Extraction.Control	Sterile.PSB	NA
+CHK_6467_E3B06_BRONCH1_PREWASH_V1V2	Bronch1.PreWash	Bronchoscope.Channel	Smoker
+CHK_6467_E3B07_BRONCH1_PREWASH_V1V2	Bronch1.PreWash	Bronchoscope.Channel	NonSmoker
+CHK_6467_E3B08_BRONCH1_PREWASH_V1V2	Bronch1.PreWash	Bronchoscope.Channel	NonSmoker
+CHK_6467_E3B09_BRONCH1_PREWASH_V1V2	Bronch1.PreWash	Bronchoscope.Channel	Smoker
+CHK_6467_E3B10_BRONCH1_PREWASH_V1V2	Bronch1.PreWash	Bronchoscope.Channel	NonSmoker
+CHK_6467_E3B11_BRONCH1_PREWASH_V1V2	Bronch1.PreWash	Bronchoscope.Channel	Smoker
+CHK_6467_E3B06_BRONCH2_PREWASH_V1V2	Bronch2.PreWash	Bronchoscope.Channel	Smoker
+CHK_6467_E3B07_BRONCH2_PREWASH_V1V2	Bronch2.PreWash	Bronchoscope.Channel	NonSmoker
+CHK_6467_E3B08_BRONCH2_PREWASH_V1V2	Bronch2.PreWash	Bronchoscope.Channel	NonSmoker
+CHK_6467_E3B09_BRONCH2_PREWASH_V1V2	Bronch2.PreWash	Bronchoscope.Channel	Smoker
+CHK_6467_E3B10_BRONCH2_PREWASH_V1V2	Bronch2.PreWash	Bronchoscope.Channel	NonSmoker
+CHK_6467_E3B11_BRONCH2_PREWASH_V1V2	Bronch2.PreWash	Bronchoscope.Channel	Smoker
+CHK_6467_E3B06_NP_V1V2	NP.Swab	Nasopharynx	Smoker
+CHK_6467_E3B07_NP_V1V2	NP.Swab	Nasopharynx	NonSmoker
+CHK_6467_E3B08_NP_V1V2	NP.Swab	Nasopharynx	NonSmoker
+CHK_6467_E3B09_NP_V1V2	NP.Swab	Nasopharynx	Smoker
+CHK_6467_E3B10_NP_V1V2	NP.Swab	Nasopharynx	NonSmoker
+CHK_6467_E3B11_NP_V1V2	NP.Swab	Nasopharynx	Smoker
+CHK_6467_E3B06_OP_V1V2	OP.Swab	Oropharynx	Smoker
+CHK_6467_E3B07_OP_V1V2	OP.Swab	Oropharynx	NonSmoker
+CHK_6467_E3B08_OP_V1V2	OP.Swab	Oropharynx	NonSmoker
+CHK_6467_E3B09_OP_V1V2	OP.Swab	Oropharynx	Smoker
+CHK_6467_E3B10_OP_V1V2	OP.Swab	Oropharynx	NonSmoker
+CHK_6467_E3B11_OP_V1V2	OP.Swab	Oropharynx	Smoker
+CHK_6467_E3B06_OW_V1V2	OW	OralCavity	Smoker
+CHK_6467_E3B07_OW_V1V2	OW	OralCavity	NonSmoker
+CHK_6467_E3B08_OW_V1V2	OW	OralCavity	NonSmoker
+CHK_6467_E3B09_OW_V1V2	OW	OralCavity	Smoker
+CHK_6467_E3B10_OW_V1V2	OW	OralCavity	NonSmoker
+CHK_6467_E3B11_OW_V1V2	OW	OralCavity	Smoker
+CHK_6467_E3B06_BRONCH1_TIPSWAB_V1V2	Bronch1.TipSwab	Bronchoscope.Tip	Smoker
+CHK_6467_E3B07_BRONCH1_TIPSWAB_V1V2	Bronch1.TipSwab	Bronchoscope.Tip	NonSmoker
+CHK_6467_E3B08_BRONCH1_TIPSWAB_V1V2	Bronch1.TipSwab	Bronchoscope.Tip	NonSmoker
+CHK_6467_E3B09_BRONCH1_TIPSWAB_V1V2	Bronch1.TipSwab	Bronchoscope.Tip	Smoker
+CHK_6467_E3B10_BRONCH1_TIPSWAB_V1V2	Bronch1.TipSwab	Bronchoscope.Tip	NonSmoker
+CHK_6467_E3B11_BRONCH1_TIPSWAB_V1V2	Bronch1.TipSwab	Bronchoscope.Tip	Smoker
+CHK_6467_E3B06_BRONCH1_POSTWASH_V1V2	Bronch1.PostWash	Bronchoscope.Channel	Smoker
+CHK_6467_E3B07_BRONCH1_POSTWASH_V1V2	Bronch1.PostWash	Bronchoscope.Channel	NonSmoker
+CHK_6467_E3B08_BRONCH1_POSTWASH_V1V2	Bronch1.PostWash	Bronchoscope.Channel	NonSmoker
+CHK_6467_E3B09_BRONCH1_POSTWASH_V1V2	Bronch1.PostWash	Bronchoscope.Channel	Smoker
+CHK_6467_E3B10_BRONCH1_POSTWASH_V1V2	Bronch1.PostWash	Bronchoscope.Channel	NonSmoker
+CHK_6467_E3B11_BRONCH1_POSTWASH_V1V2	Bronch1.PostWash	Bronchoscope.Channel	Smoker
+CHK_6467_E3B06_BAL_1STRETURN_V1V2	BAL.1stReturn	Lung	Smoker
+CHK_6467_E3B07_BAL_1STRETURN_V1V2	BAL.1stReturn	Lung	NonSmoker
+CHK_6467_E3B08_BAL_1STRETURN_V1V2	BAL.1stReturn	Lung	NonSmoker
+CHK_6467_E3B09_BAL_1STRETURN_V1V2	BAL.1stReturn	Lung	Smoker
+CHK_6467_E3B10_BAL_1STRETURN_V1V2	BAL.1stReturn	Lung	NonSmoker
+CHK_6467_E3B11_BAL_1STRETURN_V1V2	BAL.1stReturn	Lung	Smoker
+CHK_6467_E3B06_BAL_A_V1V2	BAL.A	Lung	Smoker
+CHK_6467_E3B07_BAL_A_V1V2	BAL.A	Lung	NonSmoker
+CHK_6467_E3B08_BAL_A_V1V2	BAL.A	Lung	NonSmoker
+CHK_6467_E3B09_BAL_A_V1V2	BAL.A	Lung	Smoker
+CHK_6467_E3B10_BAL_A_V1V2	BAL.A	Lung	NonSmoker
+CHK_6467_E3B11_BAL_A_V1V2	BAL.A	Lung	Smoker
+CHK_6467_E3B06_BAL_B_V1V2	BAL.B	Lung	Smoker
+CHK_6467_E3B07_BAL_B_V1V2	BAL.B	Lung	NonSmoker
+CHK_6467_E3B08_BAL_B_V1V2	BAL.B	Lung	NonSmoker
+CHK_6467_E3B09_BAL_B_V1V2	BAL.B	Lung	Smoker
+CHK_6467_E3B10_BAL_B_V1V2	BAL.B	Lung	NonSmoker
+CHK_6467_E3B11_BAL_B_V1V2	BAL.B	Lung	Smoker
+CHK_6467_E3B06_PSB_V1V2	PSB	Lung.Mucosa	Smoker
+CHK_6467_E3B07_PSB_V1V2	PSB	Lung.Mucosa	NonSmoker
+CHK_6467_E3B08_PSB_V1V2	PSB	Lung.Mucosa	NonSmoker
+CHK_6467_E3B09_PSB_V1V2	PSB	Lung.Mucosa	Smoker
+CHK_6467_E3B10_PSB_V1V2	PSB	Lung.Mucosa	NonSmoker
+CHK_6467_E3B11_PSB_V1V2	PSB	Lung.Mucosa	Smoker
diff --git a/inst/extdata/CHK_otus.taxonomy.csv b/inst/extdata/CHK_otus.taxonomy.csv
new file mode 100644
index 0000000..678848a
--- /dev/null
+++ b/inst/extdata/CHK_otus.taxonomy.csv
@@ -0,0 +1,1001 @@
+OTU	Taxonomy	superkingdom	phylum	class	order	family	genus	species	strain
+1	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter rectus	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter rectus	NA
+2	OTU_2	NA	NA	NA	NA	NA	NA	NA	NA
+3	;cellular organisms;Bacteria;Actinobacteria;Actinobacteria (class);Actinobacteridae;Actinomycetales;Actinomycineae;Actinomycetaceae;Actinomyces;Actinomyces radicidentis	Bacteria	Actinobacteria	Actinobacteria (class)	Actinomycetales	Actinomycetaceae	Actinomyces	Actinomyces radicidentis	NA
+4	OTU_4	NA	NA	NA	NA	NA	NA	NA	NA
+5	OTU_5	NA	NA	NA	NA	NA	NA	NA	NA
+6	OTU_6	NA	NA	NA	NA	NA	NA	NA	NA
+7	OTU_7	NA	NA	NA	NA	NA	NA	NA	NA
+8	OTU_8	NA	NA	NA	NA	NA	NA	NA	NA
+9	OTU_9	NA	NA	NA	NA	NA	NA	NA	NA
+10	OTU_10	NA	NA	NA	NA	NA	NA	NA	NA
+11	OTU_11	NA	NA	NA	NA	NA	NA	NA	NA
+12	OTU_12	NA	NA	NA	NA	NA	NA	NA	NA
+13	OTU_13	NA	NA	NA	NA	NA	NA	NA	NA
+14	OTU_14	NA	NA	NA	NA	NA	NA	NA	NA
+15	OTU_15	NA	NA	NA	NA	NA	NA	NA	NA
+16	OTU_16	NA	NA	NA	NA	NA	NA	NA	NA
+17	OTU_17	NA	NA	NA	NA	NA	NA	NA	NA
+18	OTU_18	NA	NA	NA	NA	NA	NA	NA	NA
+19	OTU_19	NA	NA	NA	NA	NA	NA	NA	NA
+20	OTU_20	NA	NA	NA	NA	NA	NA	NA	NA
+21	OTU_21	NA	NA	NA	NA	NA	NA	NA	NA
+22	OTU_22	NA	NA	NA	NA	NA	NA	NA	NA
+23	OTU_23	NA	NA	NA	NA	NA	NA	NA	NA
+24	OTU_24	NA	NA	NA	NA	NA	NA	NA	NA
+25	OTU_25	NA	NA	NA	NA	NA	NA	NA	NA
+26	OTU_26	NA	NA	NA	NA	NA	NA	NA	NA
+27	OTU_27	NA	NA	NA	NA	NA	NA	NA	NA
+28	OTU_28	NA	NA	NA	NA	NA	NA	NA	NA
+29	OTU_29	NA	NA	NA	NA	NA	NA	NA	NA
+30	OTU_30	NA	NA	NA	NA	NA	NA	NA	NA
+31	OTU_31	NA	NA	NA	NA	NA	NA	NA	NA
+32	OTU_32	NA	NA	NA	NA	NA	NA	NA	NA
+33	OTU_33	NA	NA	NA	NA	NA	NA	NA	NA
+34	OTU_34	NA	NA	NA	NA	NA	NA	NA	NA
+35	OTU_35	NA	NA	NA	NA	NA	NA	NA	NA
+36	OTU_36	NA	NA	NA	NA	NA	NA	NA	NA
+37	OTU_37	NA	NA	NA	NA	NA	NA	NA	NA
+38	OTU_38	NA	NA	NA	NA	NA	NA	NA	NA
+39	OTU_39	NA	NA	NA	NA	NA	NA	NA	NA
+40	OTU_40	NA	NA	NA	NA	NA	NA	NA	NA
+41	OTU_41	NA	NA	NA	NA	NA	NA	NA	NA
+42	OTU_42	NA	NA	NA	NA	NA	NA	NA	NA
+43	OTU_43	NA	NA	NA	NA	NA	NA	NA	NA
+44	OTU_44	NA	NA	NA	NA	NA	NA	NA	NA
+45	OTU_45	NA	NA	NA	NA	NA	NA	NA	NA
+46	OTU_46	NA	NA	NA	NA	NA	NA	NA	NA
+47	OTU_47	NA	NA	NA	NA	NA	NA	NA	NA
+48	OTU_48	NA	NA	NA	NA	NA	NA	NA	NA
+49	OTU_49	NA	NA	NA	NA	NA	NA	NA	NA
+50	OTU_50	NA	NA	NA	NA	NA	NA	NA	NA
+51	OTU_51	NA	NA	NA	NA	NA	NA	NA	NA
+52	OTU_52	NA	NA	NA	NA	NA	NA	NA	NA
+53	OTU_53	NA	NA	NA	NA	NA	NA	NA	NA
+54	OTU_54	NA	NA	NA	NA	NA	NA	NA	NA
+55	OTU_55	NA	NA	NA	NA	NA	NA	NA	NA
+56	OTU_56	NA	NA	NA	NA	NA	NA	NA	NA
+57	OTU_57	NA	NA	NA	NA	NA	NA	NA	NA
+58	OTU_58	NA	NA	NA	NA	NA	NA	NA	NA
+59	OTU_59	NA	NA	NA	NA	NA	NA	NA	NA
+60	OTU_60	NA	NA	NA	NA	NA	NA	NA	NA
+61	OTU_61	NA	NA	NA	NA	NA	NA	NA	NA
+62	OTU_62	NA	NA	NA	NA	NA	NA	NA	NA
+63	OTU_63	NA	NA	NA	NA	NA	NA	NA	NA
+64	OTU_64	NA	NA	NA	NA	NA	NA	NA	NA
+65	OTU_65	NA	NA	NA	NA	NA	NA	NA	NA
+66	OTU_66	NA	NA	NA	NA	NA	NA	NA	NA
+67	OTU_67	NA	NA	NA	NA	NA	NA	NA	NA
+68	OTU_68	NA	NA	NA	NA	NA	NA	NA	NA
+69	OTU_69	NA	NA	NA	NA	NA	NA	NA	NA
+70	OTU_70	NA	NA	NA	NA	NA	NA	NA	NA
+71	OTU_71	NA	NA	NA	NA	NA	NA	NA	NA
+72	OTU_72	NA	NA	NA	NA	NA	NA	NA	NA
+73	OTU_73	NA	NA	NA	NA	NA	NA	NA	NA
+74	OTU_74	NA	NA	NA	NA	NA	NA	NA	NA
+75	OTU_75	NA	NA	NA	NA	NA	NA	NA	NA
+76	OTU_76	NA	NA	NA	NA	NA	NA	NA	NA
+77	OTU_77	NA	NA	NA	NA	NA	NA	NA	NA
+78	OTU_78	NA	NA	NA	NA	NA	NA	NA	NA
+79	OTU_79	NA	NA	NA	NA	NA	NA	NA	NA
+80	OTU_80	NA	NA	NA	NA	NA	NA	NA	NA
+81	OTU_81	NA	NA	NA	NA	NA	NA	NA	NA
+82	OTU_82	NA	NA	NA	NA	NA	NA	NA	NA
+83	OTU_83	NA	NA	NA	NA	NA	NA	NA	NA
+84	OTU_84	NA	NA	NA	NA	NA	NA	NA	NA
+85	OTU_85	NA	NA	NA	NA	NA	NA	NA	NA
+86	OTU_86	NA	NA	NA	NA	NA	NA	NA	NA
+87	OTU_87	NA	NA	NA	NA	NA	NA	NA	NA
+88	OTU_88	NA	NA	NA	NA	NA	NA	NA	NA
+89	OTU_89	NA	NA	NA	NA	NA	NA	NA	NA
+90	OTU_90	NA	NA	NA	NA	NA	NA	NA	NA
+91	OTU_91	NA	NA	NA	NA	NA	NA	NA	NA
+92	OTU_92	NA	NA	NA	NA	NA	NA	NA	NA
+93	OTU_93	NA	NA	NA	NA	NA	NA	NA	NA
+94	OTU_94	NA	NA	NA	NA	NA	NA	NA	NA
+95	OTU_95	NA	NA	NA	NA	NA	NA	NA	NA
+96	OTU_96	NA	NA	NA	NA	NA	NA	NA	NA
+97	OTU_97	NA	NA	NA	NA	NA	NA	NA	NA
+98	OTU_98	NA	NA	NA	NA	NA	NA	NA	NA
+99	OTU_99	NA	NA	NA	NA	NA	NA	NA	NA
+100	OTU_100	NA	NA	NA	NA	NA	NA	NA	NA
+101	OTU_101	NA	NA	NA	NA	NA	NA	NA	NA
+102	OTU_102	NA	NA	NA	NA	NA	NA	NA	NA
+103	OTU_103	NA	NA	NA	NA	NA	NA	NA	NA
+104	OTU_104	NA	NA	NA	NA	NA	NA	NA	NA
+105	OTU_105	NA	NA	NA	NA	NA	NA	NA	NA
+106	OTU_106	NA	NA	NA	NA	NA	NA	NA	NA
+107	OTU_107	NA	NA	NA	NA	NA	NA	NA	NA
+108	OTU_108	NA	NA	NA	NA	NA	NA	NA	NA
+109	OTU_109	NA	NA	NA	NA	NA	NA	NA	NA
+110	OTU_110	NA	NA	NA	NA	NA	NA	NA	NA
+111	OTU_111	NA	NA	NA	NA	NA	NA	NA	NA
+112	OTU_112	NA	NA	NA	NA	NA	NA	NA	NA
+113	OTU_113	NA	NA	NA	NA	NA	NA	NA	NA
+114	OTU_114	NA	NA	NA	NA	NA	NA	NA	NA
+115	OTU_115	NA	NA	NA	NA	NA	NA	NA	NA
+116	OTU_116	NA	NA	NA	NA	NA	NA	NA	NA
+117	OTU_117	NA	NA	NA	NA	NA	NA	NA	NA
+118	OTU_118	NA	NA	NA	NA	NA	NA	NA	NA
+119	OTU_119	NA	NA	NA	NA	NA	NA	NA	NA
+120	OTU_120	NA	NA	NA	NA	NA	NA	NA	NA
+121	OTU_121	NA	NA	NA	NA	NA	NA	NA	NA
+122	OTU_122	NA	NA	NA	NA	NA	NA	NA	NA
+123	OTU_123	NA	NA	NA	NA	NA	NA	NA	NA
+124	OTU_124	NA	NA	NA	NA	NA	NA	NA	NA
+125	OTU_125	NA	NA	NA	NA	NA	NA	NA	NA
+126	OTU_126	NA	NA	NA	NA	NA	NA	NA	NA
+127	OTU_127	NA	NA	NA	NA	NA	NA	NA	NA
+128	OTU_128	NA	NA	NA	NA	NA	NA	NA	NA
+129	OTU_129	NA	NA	NA	NA	NA	NA	NA	NA
+130	OTU_130	NA	NA	NA	NA	NA	NA	NA	NA
+131	OTU_131	NA	NA	NA	NA	NA	NA	NA	NA
+132	OTU_132	NA	NA	NA	NA	NA	NA	NA	NA
+133	OTU_133	NA	NA	NA	NA	NA	NA	NA	NA
+134	OTU_134	NA	NA	NA	NA	NA	NA	NA	NA
+135	OTU_135	NA	NA	NA	NA	NA	NA	NA	NA
+136	OTU_136	NA	NA	NA	NA	NA	NA	NA	NA
+137	OTU_137	NA	NA	NA	NA	NA	NA	NA	NA
+138	OTU_138	NA	NA	NA	NA	NA	NA	NA	NA
+139	OTU_139	NA	NA	NA	NA	NA	NA	NA	NA
+140	OTU_140	NA	NA	NA	NA	NA	NA	NA	NA
+141	OTU_141	NA	NA	NA	NA	NA	NA	NA	NA
+142	OTU_142	NA	NA	NA	NA	NA	NA	NA	NA
+143	OTU_143	NA	NA	NA	NA	NA	NA	NA	NA
+144	OTU_144	NA	NA	NA	NA	NA	NA	NA	NA
+145	OTU_145	NA	NA	NA	NA	NA	NA	NA	NA
+146	OTU_146	NA	NA	NA	NA	NA	NA	NA	NA
+147	OTU_147	NA	NA	NA	NA	NA	NA	NA	NA
+148	OTU_148	NA	NA	NA	NA	NA	NA	NA	NA
+149	OTU_149	NA	NA	NA	NA	NA	NA	NA	NA
+150	OTU_150	NA	NA	NA	NA	NA	NA	NA	NA
+151	OTU_151	NA	NA	NA	NA	NA	NA	NA	NA
+152	OTU_152	NA	NA	NA	NA	NA	NA	NA	NA
+153	OTU_153	NA	NA	NA	NA	NA	NA	NA	NA
+154	OTU_154	NA	NA	NA	NA	NA	NA	NA	NA
+155	OTU_155	NA	NA	NA	NA	NA	NA	NA	NA
+156	OTU_156	NA	NA	NA	NA	NA	NA	NA	NA
+157	OTU_157	NA	NA	NA	NA	NA	NA	NA	NA
+158	OTU_158	NA	NA	NA	NA	NA	NA	NA	NA
+159	OTU_159	NA	NA	NA	NA	NA	NA	NA	NA
+160	OTU_160	NA	NA	NA	NA	NA	NA	NA	NA
+161	OTU_161	NA	NA	NA	NA	NA	NA	NA	NA
+162	OTU_162	NA	NA	NA	NA	NA	NA	NA	NA
+163	OTU_163	NA	NA	NA	NA	NA	NA	NA	NA
+164	OTU_164	NA	NA	NA	NA	NA	NA	NA	NA
+165	OTU_165	NA	NA	NA	NA	NA	NA	NA	NA
+166	OTU_166	NA	NA	NA	NA	NA	NA	NA	NA
+167	OTU_167	NA	NA	NA	NA	NA	NA	NA	NA
+168	;cellular organisms;Bacteria;Firmicutes;Clostridia;Clostridiales;Clostridiales incertae sedis;Clostridiales Family XI. Incertae Sedis;Anaerococcus;Anaerococcus octavius	Bacteria	Firmicutes	Clostridia	Clostridiales	Clostridiales Family XI. Incertae Sedis	Anaerococcus	Anaerococcus octavius	NA
+169	OTU_169	NA	NA	NA	NA	NA	NA	NA	NA
+170	OTU_170	NA	NA	NA	NA	NA	NA	NA	NA
+171	OTU_171	NA	NA	NA	NA	NA	NA	NA	NA
+172	OTU_172	NA	NA	NA	NA	NA	NA	NA	NA
+173	OTU_173	NA	NA	NA	NA	NA	NA	NA	NA
+174	OTU_174	NA	NA	NA	NA	NA	NA	NA	NA
+175	OTU_175	NA	NA	NA	NA	NA	NA	NA	NA
+176	OTU_176	NA	NA	NA	NA	NA	NA	NA	NA
+177	OTU_177	NA	NA	NA	NA	NA	NA	NA	NA
+178	OTU_178	NA	NA	NA	NA	NA	NA	NA	NA
+179	OTU_179	NA	NA	NA	NA	NA	NA	NA	NA
+180	OTU_180	NA	NA	NA	NA	NA	NA	NA	NA
+181	OTU_181	NA	NA	NA	NA	NA	NA	NA	NA
+182	OTU_182	NA	NA	NA	NA	NA	NA	NA	NA
+183	OTU_183	NA	NA	NA	NA	NA	NA	NA	NA
+184	OTU_184	NA	NA	NA	NA	NA	NA	NA	NA
+185	OTU_185	NA	NA	NA	NA	NA	NA	NA	NA
+186	OTU_186	NA	NA	NA	NA	NA	NA	NA	NA
+187	OTU_187	NA	NA	NA	NA	NA	NA	NA	NA
+188	OTU_188	NA	NA	NA	NA	NA	NA	NA	NA
+189	OTU_189	NA	NA	NA	NA	NA	NA	NA	NA
+190	OTU_190	NA	NA	NA	NA	NA	NA	NA	NA
+191	OTU_191	NA	NA	NA	NA	NA	NA	NA	NA
+192	OTU_192	NA	NA	NA	NA	NA	NA	NA	NA
+193	OTU_193	NA	NA	NA	NA	NA	NA	NA	NA
+194	OTU_194	NA	NA	NA	NA	NA	NA	NA	NA
+195	OTU_195	NA	NA	NA	NA	NA	NA	NA	NA
+196	OTU_196	NA	NA	NA	NA	NA	NA	NA	NA
+197	OTU_197	NA	NA	NA	NA	NA	NA	NA	NA
+198	OTU_198	NA	NA	NA	NA	NA	NA	NA	NA
+199	OTU_199	NA	NA	NA	NA	NA	NA	NA	NA
+200	OTU_200	NA	NA	NA	NA	NA	NA	NA	NA
+201	OTU_201	NA	NA	NA	NA	NA	NA	NA	NA
+202	OTU_202	NA	NA	NA	NA	NA	NA	NA	NA
+203	OTU_203	NA	NA	NA	NA	NA	NA	NA	NA
+204	;cellular organisms;Bacteria;Firmicutes;Bacilli;Lactobacillales;Carnobacteriaceae;Granulicatella;Granulicatella elegans	Bacteria	Firmicutes	Bacilli	Lactobacillales	Carnobacteriaceae	Granulicatella	Granulicatella elegans	NA
+205	OTU_205	NA	NA	NA	NA	NA	NA	NA	NA
+206	;cellular organisms;Bacteria;Fusobacteria;Fusobacteria (class);Fusobacteriales;Fusobacteriaceae;Leptotrichia;Leptotrichia sp. oral isolate A39FD	Bacteria	Fusobacteria	Fusobacteria (class)	Fusobacteriales	Fusobacteriaceae	Leptotrichia	Leptotrichia sp. oral isolate A39FD	NA
+207	OTU_207	NA	NA	NA	NA	NA	NA	NA	NA
+208	OTU_208	NA	NA	NA	NA	NA	NA	NA	NA
+209	OTU_209	NA	NA	NA	NA	NA	NA	NA	NA
+210	OTU_210	NA	NA	NA	NA	NA	NA	NA	NA
+211	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Veillonella;Veillonella montpellierensis	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Veillonella	Veillonella montpellierensis	NA
+212	OTU_212	NA	NA	NA	NA	NA	NA	NA	NA
+213	OTU_213	NA	NA	NA	NA	NA	NA	NA	NA
+214	OTU_214	NA	NA	NA	NA	NA	NA	NA	NA
+215	OTU_215	NA	NA	NA	NA	NA	NA	NA	NA
+216	OTU_216	NA	NA	NA	NA	NA	NA	NA	NA
+217	OTU_217	NA	NA	NA	NA	NA	NA	NA	NA
+218	OTU_218	NA	NA	NA	NA	NA	NA	NA	NA
+219	OTU_219	NA	NA	NA	NA	NA	NA	NA	NA
+220	OTU_220	NA	NA	NA	NA	NA	NA	NA	NA
+221	OTU_221	NA	NA	NA	NA	NA	NA	NA	NA
+222	OTU_222	NA	NA	NA	NA	NA	NA	NA	NA
+223	OTU_223	NA	NA	NA	NA	NA	NA	NA	NA
+224	OTU_224	NA	NA	NA	NA	NA	NA	NA	NA
+225	OTU_225	NA	NA	NA	NA	NA	NA	NA	NA
+226	OTU_226	NA	NA	NA	NA	NA	NA	NA	NA
+227	OTU_227	NA	NA	NA	NA	NA	NA	NA	NA
+228	OTU_228	NA	NA	NA	NA	NA	NA	NA	NA
+229	OTU_229	NA	NA	NA	NA	NA	NA	NA	NA
+230	OTU_230	NA	NA	NA	NA	NA	NA	NA	NA
+231	OTU_231	NA	NA	NA	NA	NA	NA	NA	NA
+232	OTU_232	NA	NA	NA	NA	NA	NA	NA	NA
+233	OTU_233	NA	NA	NA	NA	NA	NA	NA	NA
+234	OTU_234	NA	NA	NA	NA	NA	NA	NA	NA
+235	OTU_235	NA	NA	NA	NA	NA	NA	NA	NA
+236	OTU_236	NA	NA	NA	NA	NA	NA	NA	NA
+237	OTU_237	NA	NA	NA	NA	NA	NA	NA	NA
+238	OTU_238	NA	NA	NA	NA	NA	NA	NA	NA
+239	OTU_239	NA	NA	NA	NA	NA	NA	NA	NA
+240	OTU_240	NA	NA	NA	NA	NA	NA	NA	NA
+241	OTU_241	NA	NA	NA	NA	NA	NA	NA	NA
+242	OTU_242	NA	NA	NA	NA	NA	NA	NA	NA
+243	OTU_243	NA	NA	NA	NA	NA	NA	NA	NA
+244	OTU_244	NA	NA	NA	NA	NA	NA	NA	NA
+245	OTU_245	NA	NA	NA	NA	NA	NA	NA	NA
+246	OTU_246	NA	NA	NA	NA	NA	NA	NA	NA
+247	OTU_247	NA	NA	NA	NA	NA	NA	NA	NA
+248	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Veillonella;Veillonella magna	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Veillonella	Veillonella magna	NA
+249	OTU_249	NA	NA	NA	NA	NA	NA	NA	NA
+250	OTU_250	NA	NA	NA	NA	NA	NA	NA	NA
+251	OTU_251	NA	NA	NA	NA	NA	NA	NA	NA
+252	OTU_252	NA	NA	NA	NA	NA	NA	NA	NA
+253	OTU_253	NA	NA	NA	NA	NA	NA	NA	NA
+254	OTU_254	NA	NA	NA	NA	NA	NA	NA	NA
+255	;cellular organisms;Bacteria;Firmicutes;Clostridia;Clostridiales;Eubacteriaceae;Eubacterium;environmental samples;Eubacterium sp. oral clone JN088	Bacteria	Firmicutes	Clostridia	Clostridiales	Eubacteriaceae	Eubacterium	Eubacterium sp. oral clone JN088	NA
+256	OTU_256	NA	NA	NA	NA	NA	NA	NA	NA
+257	OTU_257	NA	NA	NA	NA	NA	NA	NA	NA
+258	OTU_258	NA	NA	NA	NA	NA	NA	NA	NA
+259	OTU_259	NA	NA	NA	NA	NA	NA	NA	NA
+260	OTU_260	NA	NA	NA	NA	NA	NA	NA	NA
+261	OTU_261	NA	NA	NA	NA	NA	NA	NA	NA
+262	OTU_262	NA	NA	NA	NA	NA	NA	NA	NA
+263	OTU_263	NA	NA	NA	NA	NA	NA	NA	NA
+264	OTU_264	NA	NA	NA	NA	NA	NA	NA	NA
+265	OTU_265	NA	NA	NA	NA	NA	NA	NA	NA
+266	OTU_266	NA	NA	NA	NA	NA	NA	NA	NA
+267	OTU_267	NA	NA	NA	NA	NA	NA	NA	NA
+268	;cellular organisms;Bacteria;Firmicutes;Bacilli;Lactobacillales;Enterococcaceae;Enterococcus;Enterococcus sp. DLS 0702	Bacteria	Firmicutes	Bacilli	Lactobacillales	Enterococcaceae	Enterococcus	Enterococcus sp. DLS 0702	NA
+269	OTU_269	NA	NA	NA	NA	NA	NA	NA	NA
+270	OTU_270	NA	NA	NA	NA	NA	NA	NA	NA
+271	OTU_271	NA	NA	NA	NA	NA	NA	NA	NA
+272	OTU_272	NA	NA	NA	NA	NA	NA	NA	NA
+273	OTU_273	NA	NA	NA	NA	NA	NA	NA	NA
+274	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Prevotellaceae;Prevotella;Prevotella genomosp. P6	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Prevotellaceae	Prevotella	Prevotella genomosp. P6	NA
+275	OTU_275	NA	NA	NA	NA	NA	NA	NA	NA
+276	OTU_276	NA	NA	NA	NA	NA	NA	NA	NA
+277	OTU_277	NA	NA	NA	NA	NA	NA	NA	NA
+278	OTU_278	NA	NA	NA	NA	NA	NA	NA	NA
+279	OTU_279	NA	NA	NA	NA	NA	NA	NA	NA
+280	OTU_280	NA	NA	NA	NA	NA	NA	NA	NA
+281	OTU_281	NA	NA	NA	NA	NA	NA	NA	NA
+282	OTU_282	NA	NA	NA	NA	NA	NA	NA	NA
+283	OTU_283	NA	NA	NA	NA	NA	NA	NA	NA
+284	OTU_284	NA	NA	NA	NA	NA	NA	NA	NA
+285	OTU_285	NA	NA	NA	NA	NA	NA	NA	NA
+286	OTU_286	NA	NA	NA	NA	NA	NA	NA	NA
+287	OTU_287	NA	NA	NA	NA	NA	NA	NA	NA
+288	OTU_288	NA	NA	NA	NA	NA	NA	NA	NA
+289	OTU_289	NA	NA	NA	NA	NA	NA	NA	NA
+290	OTU_290	NA	NA	NA	NA	NA	NA	NA	NA
+291	OTU_291	NA	NA	NA	NA	NA	NA	NA	NA
+292	OTU_292	NA	NA	NA	NA	NA	NA	NA	NA
+293	OTU_293	NA	NA	NA	NA	NA	NA	NA	NA
+294	OTU_294	NA	NA	NA	NA	NA	NA	NA	NA
+295	OTU_295	NA	NA	NA	NA	NA	NA	NA	NA
+296	OTU_296	NA	NA	NA	NA	NA	NA	NA	NA
+297	OTU_297	NA	NA	NA	NA	NA	NA	NA	NA
+298	OTU_298	NA	NA	NA	NA	NA	NA	NA	NA
+299	OTU_299	NA	NA	NA	NA	NA	NA	NA	NA
+300	OTU_300	NA	NA	NA	NA	NA	NA	NA	NA
+301	OTU_301	NA	NA	NA	NA	NA	NA	NA	NA
+302	OTU_302	NA	NA	NA	NA	NA	NA	NA	NA
+303	;cellular organisms;Bacteria;Firmicutes;Clostridia;Clostridiales;Clostridiales incertae sedis;Clostridiales Family XI. Incertae Sedis;Peptoniphilus;Peptoniphilus sp. gpac121	Bacteria	Firmicutes	Clostridia	Clostridiales	Clostridiales Family XI. Incertae Sedis	Peptoniphilus	Peptoniphilus sp. gpac121	NA
+304	OTU_304	NA	NA	NA	NA	NA	NA	NA	NA
+305	OTU_305	NA	NA	NA	NA	NA	NA	NA	NA
+306	OTU_306	NA	NA	NA	NA	NA	NA	NA	NA
+307	OTU_307	NA	NA	NA	NA	NA	NA	NA	NA
+308	OTU_308	NA	NA	NA	NA	NA	NA	NA	NA
+309	OTU_309	NA	NA	NA	NA	NA	NA	NA	NA
+310	OTU_310	NA	NA	NA	NA	NA	NA	NA	NA
+311	OTU_311	NA	NA	NA	NA	NA	NA	NA	NA
+312	OTU_312	NA	NA	NA	NA	NA	NA	NA	NA
+313	OTU_313	NA	NA	NA	NA	NA	NA	NA	NA
+314	OTU_314	NA	NA	NA	NA	NA	NA	NA	NA
+315	OTU_315	NA	NA	NA	NA	NA	NA	NA	NA
+316	OTU_316	NA	NA	NA	NA	NA	NA	NA	NA
+317	OTU_317	NA	NA	NA	NA	NA	NA	NA	NA
+318	OTU_318	NA	NA	NA	NA	NA	NA	NA	NA
+319	OTU_319	NA	NA	NA	NA	NA	NA	NA	NA
+320	OTU_320	NA	NA	NA	NA	NA	NA	NA	NA
+321	OTU_321	NA	NA	NA	NA	NA	NA	NA	NA
+322	OTU_322	NA	NA	NA	NA	NA	NA	NA	NA
+323	OTU_323	NA	NA	NA	NA	NA	NA	NA	NA
+324	OTU_324	NA	NA	NA	NA	NA	NA	NA	NA
+325	OTU_325	NA	NA	NA	NA	NA	NA	NA	NA
+326	OTU_326	NA	NA	NA	NA	NA	NA	NA	NA
+327	OTU_327	NA	NA	NA	NA	NA	NA	NA	NA
+328	OTU_328	NA	NA	NA	NA	NA	NA	NA	NA
+329	OTU_329	NA	NA	NA	NA	NA	NA	NA	NA
+330	;cellular organisms;Bacteria;Actinobacteria;Actinobacteria (class);Coriobacteridae;Coriobacteriales;Coriobacterineae;Coriobacteriaceae;Atopobium;Atopobium parvulum	Bacteria	Actinobacteria	Actinobacteria (class)	Coriobacteriales	Coriobacteriaceae	Atopobium	Atopobium parvulum	NA
+331	OTU_331	NA	NA	NA	NA	NA	NA	NA	NA
+332	OTU_332	NA	NA	NA	NA	NA	NA	NA	NA
+333	OTU_333	NA	NA	NA	NA	NA	NA	NA	NA
+334	OTU_334	NA	NA	NA	NA	NA	NA	NA	NA
+335	OTU_335	NA	NA	NA	NA	NA	NA	NA	NA
+336	OTU_336	NA	NA	NA	NA	NA	NA	NA	NA
+337	OTU_337	NA	NA	NA	NA	NA	NA	NA	NA
+338	OTU_338	NA	NA	NA	NA	NA	NA	NA	NA
+339	OTU_339	NA	NA	NA	NA	NA	NA	NA	NA
+340	OTU_340	NA	NA	NA	NA	NA	NA	NA	NA
+341	OTU_341	NA	NA	NA	NA	NA	NA	NA	NA
+342	OTU_342	NA	NA	NA	NA	NA	NA	NA	NA
+343	OTU_343	NA	NA	NA	NA	NA	NA	NA	NA
+344	OTU_344	NA	NA	NA	NA	NA	NA	NA	NA
+345	OTU_345	NA	NA	NA	NA	NA	NA	NA	NA
+346	OTU_346	NA	NA	NA	NA	NA	NA	NA	NA
+347	OTU_347	NA	NA	NA	NA	NA	NA	NA	NA
+348	OTU_348	NA	NA	NA	NA	NA	NA	NA	NA
+349	OTU_349	NA	NA	NA	NA	NA	NA	NA	NA
+350	OTU_350	NA	NA	NA	NA	NA	NA	NA	NA
+351	OTU_351	NA	NA	NA	NA	NA	NA	NA	NA
+352	OTU_352	NA	NA	NA	NA	NA	NA	NA	NA
+353	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Prevotellaceae;Prevotella;Prevotella pallens	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Prevotellaceae	Prevotella	Prevotella pallens	NA
+354	OTU_354	NA	NA	NA	NA	NA	NA	NA	NA
+355	OTU_355	NA	NA	NA	NA	NA	NA	NA	NA
+356	OTU_356	NA	NA	NA	NA	NA	NA	NA	NA
+357	OTU_357	NA	NA	NA	NA	NA	NA	NA	NA
+358	OTU_358	NA	NA	NA	NA	NA	NA	NA	NA
+359	OTU_359	NA	NA	NA	NA	NA	NA	NA	NA
+360	OTU_360	NA	NA	NA	NA	NA	NA	NA	NA
+361	OTU_361	NA	NA	NA	NA	NA	NA	NA	NA
+362	OTU_362	NA	NA	NA	NA	NA	NA	NA	NA
+363	OTU_363	NA	NA	NA	NA	NA	NA	NA	NA
+364	OTU_364	NA	NA	NA	NA	NA	NA	NA	NA
+365	OTU_365	NA	NA	NA	NA	NA	NA	NA	NA
+366	OTU_366	NA	NA	NA	NA	NA	NA	NA	NA
+367	OTU_367	NA	NA	NA	NA	NA	NA	NA	NA
+368	OTU_368	NA	NA	NA	NA	NA	NA	NA	NA
+369	OTU_369	NA	NA	NA	NA	NA	NA	NA	NA
+370	OTU_370	NA	NA	NA	NA	NA	NA	NA	NA
+371	OTU_371	NA	NA	NA	NA	NA	NA	NA	NA
+372	OTU_372	NA	NA	NA	NA	NA	NA	NA	NA
+373	OTU_373	NA	NA	NA	NA	NA	NA	NA	NA
+374	;cellular organisms;Bacteria;Actinobacteria;Actinobacteria (class);Actinobacteridae;Actinomycetales;Micrococcineae;Microbacteriaceae;Frigoribacterium;Frigoribacterium sp. pfB31	Bacteria	Actinobacteria	Actinobacteria (class)	Actinomycetales	Microbacteriaceae	Frigoribacterium	Frigoribacterium sp. pfB31	NA
+375	OTU_375	NA	NA	NA	NA	NA	NA	NA	NA
+376	OTU_376	NA	NA	NA	NA	NA	NA	NA	NA
+377	OTU_377	NA	NA	NA	NA	NA	NA	NA	NA
+378	OTU_378	NA	NA	NA	NA	NA	NA	NA	NA
+379	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Selenomonas;environmental samples;Selenomonas sp. oral clone EW051a	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Selenomonas	Selenomonas sp. oral clone EW051a	NA
+380	OTU_380	NA	NA	NA	NA	NA	NA	NA	NA
+381	OTU_381	NA	NA	NA	NA	NA	NA	NA	NA
+382	OTU_382	NA	NA	NA	NA	NA	NA	NA	NA
+383	OTU_383	NA	NA	NA	NA	NA	NA	NA	NA
+384	OTU_384	NA	NA	NA	NA	NA	NA	NA	NA
+385	OTU_385	NA	NA	NA	NA	NA	NA	NA	NA
+386	OTU_386	NA	NA	NA	NA	NA	NA	NA	NA
+387	OTU_387	NA	NA	NA	NA	NA	NA	NA	NA
+388	OTU_388	NA	NA	NA	NA	NA	NA	NA	NA
+389	OTU_389	NA	NA	NA	NA	NA	NA	NA	NA
+390	OTU_390	NA	NA	NA	NA	NA	NA	NA	NA
+391	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Prevotellaceae;Prevotella;Prevotella pallens	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Prevotellaceae	Prevotella	Prevotella pallens	NA
+392	OTU_392	NA	NA	NA	NA	NA	NA	NA	NA
+393	OTU_393	NA	NA	NA	NA	NA	NA	NA	NA
+394	OTU_394	NA	NA	NA	NA	NA	NA	NA	NA
+395	OTU_395	NA	NA	NA	NA	NA	NA	NA	NA
+396	OTU_396	NA	NA	NA	NA	NA	NA	NA	NA
+397	OTU_397	NA	NA	NA	NA	NA	NA	NA	NA
+398	OTU_398	NA	NA	NA	NA	NA	NA	NA	NA
+399	OTU_399	NA	NA	NA	NA	NA	NA	NA	NA
+400	OTU_400	NA	NA	NA	NA	NA	NA	NA	NA
+401	OTU_401	NA	NA	NA	NA	NA	NA	NA	NA
+402	OTU_402	NA	NA	NA	NA	NA	NA	NA	NA
+403	OTU_403	NA	NA	NA	NA	NA	NA	NA	NA
+404	OTU_404	NA	NA	NA	NA	NA	NA	NA	NA
+405	OTU_405	NA	NA	NA	NA	NA	NA	NA	NA
+406	OTU_406	NA	NA	NA	NA	NA	NA	NA	NA
+407	OTU_407	NA	NA	NA	NA	NA	NA	NA	NA
+408	OTU_408	NA	NA	NA	NA	NA	NA	NA	NA
+409	OTU_409	NA	NA	NA	NA	NA	NA	NA	NA
+410	OTU_410	NA	NA	NA	NA	NA	NA	NA	NA
+411	OTU_411	NA	NA	NA	NA	NA	NA	NA	NA
+412	OTU_412	NA	NA	NA	NA	NA	NA	NA	NA
+413	OTU_413	NA	NA	NA	NA	NA	NA	NA	NA
+414	OTU_414	NA	NA	NA	NA	NA	NA	NA	NA
+415	OTU_415	NA	NA	NA	NA	NA	NA	NA	NA
+416	OTU_416	NA	NA	NA	NA	NA	NA	NA	NA
+417	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Prevotellaceae;Prevotella;Prevotella genomosp. P6	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Prevotellaceae	Prevotella	Prevotella genomosp. P6	NA
+418	OTU_418	NA	NA	NA	NA	NA	NA	NA	NA
+419	OTU_419	NA	NA	NA	NA	NA	NA	NA	NA
+420	OTU_420	NA	NA	NA	NA	NA	NA	NA	NA
+421	OTU_421	NA	NA	NA	NA	NA	NA	NA	NA
+422	OTU_422	NA	NA	NA	NA	NA	NA	NA	NA
+423	OTU_423	NA	NA	NA	NA	NA	NA	NA	NA
+424	OTU_424	NA	NA	NA	NA	NA	NA	NA	NA
+425	OTU_425	NA	NA	NA	NA	NA	NA	NA	NA
+426	OTU_426	NA	NA	NA	NA	NA	NA	NA	NA
+427	OTU_427	NA	NA	NA	NA	NA	NA	NA	NA
+428	OTU_428	NA	NA	NA	NA	NA	NA	NA	NA
+429	OTU_429	NA	NA	NA	NA	NA	NA	NA	NA
+430	OTU_430	NA	NA	NA	NA	NA	NA	NA	NA
+431	OTU_431	NA	NA	NA	NA	NA	NA	NA	NA
+432	OTU_432	NA	NA	NA	NA	NA	NA	NA	NA
+433	OTU_433	NA	NA	NA	NA	NA	NA	NA	NA
+434	OTU_434	NA	NA	NA	NA	NA	NA	NA	NA
+435	OTU_435	NA	NA	NA	NA	NA	NA	NA	NA
+436	OTU_436	NA	NA	NA	NA	NA	NA	NA	NA
+437	OTU_437	NA	NA	NA	NA	NA	NA	NA	NA
+438	OTU_438	NA	NA	NA	NA	NA	NA	NA	NA
+439	OTU_439	NA	NA	NA	NA	NA	NA	NA	NA
+440	OTU_440	NA	NA	NA	NA	NA	NA	NA	NA
+441	OTU_441	NA	NA	NA	NA	NA	NA	NA	NA
+442	OTU_442	NA	NA	NA	NA	NA	NA	NA	NA
+443	OTU_443	NA	NA	NA	NA	NA	NA	NA	NA
+444	OTU_444	NA	NA	NA	NA	NA	NA	NA	NA
+445	OTU_445	NA	NA	NA	NA	NA	NA	NA	NA
+446	OTU_446	NA	NA	NA	NA	NA	NA	NA	NA
+447	OTU_447	NA	NA	NA	NA	NA	NA	NA	NA
+448	OTU_448	NA	NA	NA	NA	NA	NA	NA	NA
+449	OTU_449	NA	NA	NA	NA	NA	NA	NA	NA
+450	OTU_450	NA	NA	NA	NA	NA	NA	NA	NA
+451	OTU_451	NA	NA	NA	NA	NA	NA	NA	NA
+452	OTU_452	NA	NA	NA	NA	NA	NA	NA	NA
+453	OTU_453	NA	NA	NA	NA	NA	NA	NA	NA
+454	OTU_454	NA	NA	NA	NA	NA	NA	NA	NA
+455	OTU_455	NA	NA	NA	NA	NA	NA	NA	NA
+456	OTU_456	NA	NA	NA	NA	NA	NA	NA	NA
+457	OTU_457	NA	NA	NA	NA	NA	NA	NA	NA
+458	OTU_458	NA	NA	NA	NA	NA	NA	NA	NA
+459	OTU_459	NA	NA	NA	NA	NA	NA	NA	NA
+460	OTU_460	NA	NA	NA	NA	NA	NA	NA	NA
+461	;cellular organisms;Bacteria;Firmicutes;Clostridia;Clostridiales;Clostridiales incertae sedis;Clostridiales Family XI. Incertae Sedis;Peptoniphilus;Peptoniphilus sp. gpac121	Bacteria	Firmicutes	Clostridia	Clostridiales	Clostridiales Family XI. Incertae Sedis	Peptoniphilus	Peptoniphilus sp. gpac121	NA
+462	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Porphyromonadaceae;Porphyromonas;Porphyromonas gingivalis	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Porphyromonadaceae	Porphyromonas	Porphyromonas gingivalis	NA
+463	;cellular organisms;Bacteria;Proteobacteria;Gammaproteobacteria;Pasteurellales;Pasteurellaceae;Haemophilus;Haemophilus parainfluenzae	Bacteria	Proteobacteria	Gammaproteobacteria	Pasteurellales	Pasteurellaceae	Haemophilus	Haemophilus parainfluenzae	NA
+464	;cellular organisms;Bacteria;Actinobacteria;Actinobacteria (class);Actinobacteridae;Actinomycetales;Actinomycineae;Actinomycetaceae;Actinomyces;Actinomyces radicidentis	Bacteria	Actinobacteria	Actinobacteria (class)	Actinomycetales	Actinomycetaceae	Actinomyces	Actinomyces radicidentis	NA
+465	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter rectus	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter rectus	NA
+466	OTU_466	NA	NA	NA	NA	NA	NA	NA	NA
+467	OTU_467	NA	NA	NA	NA	NA	NA	NA	NA
+468	OTU_468	NA	NA	NA	NA	NA	NA	NA	NA
+469	OTU_469	NA	NA	NA	NA	NA	NA	NA	NA
+470	OTU_470	NA	NA	NA	NA	NA	NA	NA	NA
+471	OTU_471	NA	NA	NA	NA	NA	NA	NA	NA
+472	OTU_472	NA	NA	NA	NA	NA	NA	NA	NA
+473	OTU_473	NA	NA	NA	NA	NA	NA	NA	NA
+474	OTU_474	NA	NA	NA	NA	NA	NA	NA	NA
+475	OTU_475	NA	NA	NA	NA	NA	NA	NA	NA
+476	OTU_476	NA	NA	NA	NA	NA	NA	NA	NA
+477	OTU_477	NA	NA	NA	NA	NA	NA	NA	NA
+478	OTU_478	NA	NA	NA	NA	NA	NA	NA	NA
+479	OTU_479	NA	NA	NA	NA	NA	NA	NA	NA
+480	OTU_480	NA	NA	NA	NA	NA	NA	NA	NA
+481	OTU_481	NA	NA	NA	NA	NA	NA	NA	NA
+482	OTU_482	NA	NA	NA	NA	NA	NA	NA	NA
+483	OTU_483	NA	NA	NA	NA	NA	NA	NA	NA
+484	OTU_484	NA	NA	NA	NA	NA	NA	NA	NA
+485	OTU_485	NA	NA	NA	NA	NA	NA	NA	NA
+486	OTU_486	NA	NA	NA	NA	NA	NA	NA	NA
+487	OTU_487	NA	NA	NA	NA	NA	NA	NA	NA
+488	OTU_488	NA	NA	NA	NA	NA	NA	NA	NA
+489	OTU_489	NA	NA	NA	NA	NA	NA	NA	NA
+490	OTU_490	NA	NA	NA	NA	NA	NA	NA	NA
+491	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Bacteroidaceae;Bacteroides;Bacteroides sp. CO55	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Bacteroidaceae	Bacteroides	Bacteroides sp. CO55	NA
+492	OTU_492	NA	NA	NA	NA	NA	NA	NA	NA
+493	OTU_493	NA	NA	NA	NA	NA	NA	NA	NA
+494	OTU_494	NA	NA	NA	NA	NA	NA	NA	NA
+495	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter showae	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter showae	NA
+496	OTU_496	NA	NA	NA	NA	NA	NA	NA	NA
+497	OTU_497	NA	NA	NA	NA	NA	NA	NA	NA
+498	OTU_498	NA	NA	NA	NA	NA	NA	NA	NA
+499	OTU_499	NA	NA	NA	NA	NA	NA	NA	NA
+500	OTU_500	NA	NA	NA	NA	NA	NA	NA	NA
+501	OTU_501	NA	NA	NA	NA	NA	NA	NA	NA
+502	OTU_502	NA	NA	NA	NA	NA	NA	NA	NA
+503	OTU_503	NA	NA	NA	NA	NA	NA	NA	NA
+504	OTU_504	NA	NA	NA	NA	NA	NA	NA	NA
+505	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Veillonella;Veillonella parvula	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Veillonella	Veillonella parvula	NA
+506	OTU_506	NA	NA	NA	NA	NA	NA	NA	NA
+507	OTU_507	NA	NA	NA	NA	NA	NA	NA	NA
+508	OTU_508	NA	NA	NA	NA	NA	NA	NA	NA
+509	OTU_509	NA	NA	NA	NA	NA	NA	NA	NA
+510	OTU_510	NA	NA	NA	NA	NA	NA	NA	NA
+511	OTU_511	NA	NA	NA	NA	NA	NA	NA	NA
+512	OTU_512	NA	NA	NA	NA	NA	NA	NA	NA
+513	OTU_513	NA	NA	NA	NA	NA	NA	NA	NA
+514	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Prevotellaceae;Prevotella;Prevotella tannerae	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Prevotellaceae	Prevotella	Prevotella tannerae	NA
+515	OTU_515	NA	NA	NA	NA	NA	NA	NA	NA
+516	OTU_516	NA	NA	NA	NA	NA	NA	NA	NA
+517	OTU_517	NA	NA	NA	NA	NA	NA	NA	NA
+518	OTU_518	NA	NA	NA	NA	NA	NA	NA	NA
+519	OTU_519	NA	NA	NA	NA	NA	NA	NA	NA
+520	OTU_520	NA	NA	NA	NA	NA	NA	NA	NA
+521	OTU_521	NA	NA	NA	NA	NA	NA	NA	NA
+522	OTU_522	NA	NA	NA	NA	NA	NA	NA	NA
+523	OTU_523	NA	NA	NA	NA	NA	NA	NA	NA
+524	OTU_524	NA	NA	NA	NA	NA	NA	NA	NA
+525	OTU_525	NA	NA	NA	NA	NA	NA	NA	NA
+526	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Veillonella;Veillonella ratti	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Veillonella	Veillonella ratti	NA
+527	OTU_527	NA	NA	NA	NA	NA	NA	NA	NA
+528	OTU_528	NA	NA	NA	NA	NA	NA	NA	NA
+529	OTU_529	NA	NA	NA	NA	NA	NA	NA	NA
+530	OTU_530	NA	NA	NA	NA	NA	NA	NA	NA
+531	OTU_531	NA	NA	NA	NA	NA	NA	NA	NA
+532	OTU_532	NA	NA	NA	NA	NA	NA	NA	NA
+533	OTU_533	NA	NA	NA	NA	NA	NA	NA	NA
+534	;cellular organisms;Bacteria;Firmicutes;Bacilli;Lactobacillales;Streptococcaceae;Streptococcus;Streptococcus oligofermentans	Bacteria	Firmicutes	Bacilli	Lactobacillales	Streptococcaceae	Streptococcus	Streptococcus oligofermentans	NA
+535	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter showae	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter showae	NA
+536	OTU_536	NA	NA	NA	NA	NA	NA	NA	NA
+537	OTU_537	NA	NA	NA	NA	NA	NA	NA	NA
+538	OTU_538	NA	NA	NA	NA	NA	NA	NA	NA
+539	OTU_539	NA	NA	NA	NA	NA	NA	NA	NA
+540	OTU_540	NA	NA	NA	NA	NA	NA	NA	NA
+541	OTU_541	NA	NA	NA	NA	NA	NA	NA	NA
+542	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Veillonella;environmental samples;Veillonella genomosp. P1 oral clone MB5_P17	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Veillonella	Veillonella genomosp. P1 oral clone MB5_P17	NA
+543	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter rectus	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter rectus	NA
+544	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter rectus	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter rectus	NA
+545	OTU_545	NA	NA	NA	NA	NA	NA	NA	NA
+546	OTU_546	NA	NA	NA	NA	NA	NA	NA	NA
+547	OTU_547	NA	NA	NA	NA	NA	NA	NA	NA
+548	OTU_548	NA	NA	NA	NA	NA	NA	NA	NA
+549	OTU_549	NA	NA	NA	NA	NA	NA	NA	NA
+550	OTU_550	NA	NA	NA	NA	NA	NA	NA	NA
+551	OTU_551	NA	NA	NA	NA	NA	NA	NA	NA
+552	OTU_552	NA	NA	NA	NA	NA	NA	NA	NA
+553	OTU_553	NA	NA	NA	NA	NA	NA	NA	NA
+554	OTU_554	NA	NA	NA	NA	NA	NA	NA	NA
+555	OTU_555	NA	NA	NA	NA	NA	NA	NA	NA
+556	OTU_556	NA	NA	NA	NA	NA	NA	NA	NA
+557	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter rectus	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter rectus	NA
+558	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter showae	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter showae	NA
+559	OTU_559	NA	NA	NA	NA	NA	NA	NA	NA
+560	OTU_560	NA	NA	NA	NA	NA	NA	NA	NA
+561	OTU_561	NA	NA	NA	NA	NA	NA	NA	NA
+562	OTU_562	NA	NA	NA	NA	NA	NA	NA	NA
+563	OTU_563	NA	NA	NA	NA	NA	NA	NA	NA
+564	OTU_564	NA	NA	NA	NA	NA	NA	NA	NA
+565	OTU_565	NA	NA	NA	NA	NA	NA	NA	NA
+566	OTU_566	NA	NA	NA	NA	NA	NA	NA	NA
+567	OTU_567	NA	NA	NA	NA	NA	NA	NA	NA
+568	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter curvus	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter curvus	NA
+569	OTU_569	NA	NA	NA	NA	NA	NA	NA	NA
+570	OTU_570	NA	NA	NA	NA	NA	NA	NA	NA
+571	OTU_571	NA	NA	NA	NA	NA	NA	NA	NA
+572	OTU_572	NA	NA	NA	NA	NA	NA	NA	NA
+573	OTU_573	NA	NA	NA	NA	NA	NA	NA	NA
+574	OTU_574	NA	NA	NA	NA	NA	NA	NA	NA
+575	OTU_575	NA	NA	NA	NA	NA	NA	NA	NA
+576	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter mucosalis-like bacterium	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter mucosalis-like bacterium	NA
+577	OTU_577	NA	NA	NA	NA	NA	NA	NA	NA
+578	OTU_578	NA	NA	NA	NA	NA	NA	NA	NA
+579	OTU_579	NA	NA	NA	NA	NA	NA	NA	NA
+580	OTU_580	NA	NA	NA	NA	NA	NA	NA	NA
+581	OTU_581	NA	NA	NA	NA	NA	NA	NA	NA
+582	OTU_582	NA	NA	NA	NA	NA	NA	NA	NA
+583	OTU_583	NA	NA	NA	NA	NA	NA	NA	NA
+584	OTU_584	NA	NA	NA	NA	NA	NA	NA	NA
+585	OTU_585	NA	NA	NA	NA	NA	NA	NA	NA
+586	OTU_586	NA	NA	NA	NA	NA	NA	NA	NA
+587	OTU_587	NA	NA	NA	NA	NA	NA	NA	NA
+588	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Porphyromonadaceae;Porphyromonas;environmental samples;Porphyromonas sp. oral clone P4GB_100 P2	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Porphyromonadaceae	Porphyromonas	Porphyromonas sp. oral clone P4GB_100 P2	NA
+589	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter rectus	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter rectus	NA
+590	OTU_590	NA	NA	NA	NA	NA	NA	NA	NA
+591	OTU_591	NA	NA	NA	NA	NA	NA	NA	NA
+592	OTU_592	NA	NA	NA	NA	NA	NA	NA	NA
+593	OTU_593	NA	NA	NA	NA	NA	NA	NA	NA
+594	OTU_594	NA	NA	NA	NA	NA	NA	NA	NA
+595	OTU_595	NA	NA	NA	NA	NA	NA	NA	NA
+596	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter rectus	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter rectus	NA
+597	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter rectus	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter rectus	NA
+598	OTU_598	NA	NA	NA	NA	NA	NA	NA	NA
+599	OTU_599	NA	NA	NA	NA	NA	NA	NA	NA
+600	OTU_600	NA	NA	NA	NA	NA	NA	NA	NA
+601	OTU_601	NA	NA	NA	NA	NA	NA	NA	NA
+602	OTU_602	NA	NA	NA	NA	NA	NA	NA	NA
+603	OTU_603	NA	NA	NA	NA	NA	NA	NA	NA
+604	OTU_604	NA	NA	NA	NA	NA	NA	NA	NA
+605	OTU_605	NA	NA	NA	NA	NA	NA	NA	NA
+606	OTU_606	NA	NA	NA	NA	NA	NA	NA	NA
+607	OTU_607	NA	NA	NA	NA	NA	NA	NA	NA
+608	OTU_608	NA	NA	NA	NA	NA	NA	NA	NA
+609	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter rectus	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter rectus	NA
+610	OTU_610	NA	NA	NA	NA	NA	NA	NA	NA
+611	OTU_611	NA	NA	NA	NA	NA	NA	NA	NA
+612	OTU_612	NA	NA	NA	NA	NA	NA	NA	NA
+613	OTU_613	NA	NA	NA	NA	NA	NA	NA	NA
+614	OTU_614	NA	NA	NA	NA	NA	NA	NA	NA
+615	OTU_615	NA	NA	NA	NA	NA	NA	NA	NA
+616	OTU_616	NA	NA	NA	NA	NA	NA	NA	NA
+617	OTU_617	NA	NA	NA	NA	NA	NA	NA	NA
+618	OTU_618	NA	NA	NA	NA	NA	NA	NA	NA
+619	OTU_619	NA	NA	NA	NA	NA	NA	NA	NA
+620	;cellular organisms;Bacteria;Firmicutes;Erysipelotrichi;Erysipelotrichales;Erysipelotrichaceae;Bulleidia;Bulleidia extructa	Bacteria	Firmicutes	Erysipelotrichi	Erysipelotrichales	Erysipelotrichaceae	Bulleidia	Bulleidia extructa	NA
+621	OTU_621	NA	NA	NA	NA	NA	NA	NA	NA
+622	OTU_622	NA	NA	NA	NA	NA	NA	NA	NA
+623	OTU_623	NA	NA	NA	NA	NA	NA	NA	NA
+624	OTU_624	NA	NA	NA	NA	NA	NA	NA	NA
+625	OTU_625	NA	NA	NA	NA	NA	NA	NA	NA
+626	OTU_626	NA	NA	NA	NA	NA	NA	NA	NA
+627	OTU_627	NA	NA	NA	NA	NA	NA	NA	NA
+628	OTU_628	NA	NA	NA	NA	NA	NA	NA	NA
+629	OTU_629	NA	NA	NA	NA	NA	NA	NA	NA
+630	OTU_630	NA	NA	NA	NA	NA	NA	NA	NA
+631	OTU_631	NA	NA	NA	NA	NA	NA	NA	NA
+632	OTU_632	NA	NA	NA	NA	NA	NA	NA	NA
+633	OTU_633	NA	NA	NA	NA	NA	NA	NA	NA
+634	OTU_634	NA	NA	NA	NA	NA	NA	NA	NA
+635	OTU_635	NA	NA	NA	NA	NA	NA	NA	NA
+636	OTU_636	NA	NA	NA	NA	NA	NA	NA	NA
+637	OTU_637	NA	NA	NA	NA	NA	NA	NA	NA
+638	OTU_638	NA	NA	NA	NA	NA	NA	NA	NA
+639	OTU_639	NA	NA	NA	NA	NA	NA	NA	NA
+640	OTU_640	NA	NA	NA	NA	NA	NA	NA	NA
+641	OTU_641	NA	NA	NA	NA	NA	NA	NA	NA
+642	OTU_642	NA	NA	NA	NA	NA	NA	NA	NA
+643	OTU_643	NA	NA	NA	NA	NA	NA	NA	NA
+644	OTU_644	NA	NA	NA	NA	NA	NA	NA	NA
+645	OTU_645	NA	NA	NA	NA	NA	NA	NA	NA
+646	OTU_646	NA	NA	NA	NA	NA	NA	NA	NA
+647	OTU_647	NA	NA	NA	NA	NA	NA	NA	NA
+648	OTU_648	NA	NA	NA	NA	NA	NA	NA	NA
+649	OTU_649	NA	NA	NA	NA	NA	NA	NA	NA
+650	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Prevotellaceae;Prevotella;Prevotella melaninogenica	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Prevotellaceae	Prevotella	Prevotella melaninogenica	NA
+651	OTU_651	NA	NA	NA	NA	NA	NA	NA	NA
+652	OTU_652	NA	NA	NA	NA	NA	NA	NA	NA
+653	OTU_653	NA	NA	NA	NA	NA	NA	NA	NA
+654	OTU_654	NA	NA	NA	NA	NA	NA	NA	NA
+655	OTU_655	NA	NA	NA	NA	NA	NA	NA	NA
+656	OTU_656	NA	NA	NA	NA	NA	NA	NA	NA
+657	OTU_657	NA	NA	NA	NA	NA	NA	NA	NA
+658	OTU_658	NA	NA	NA	NA	NA	NA	NA	NA
+659	OTU_659	NA	NA	NA	NA	NA	NA	NA	NA
+660	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter mucosalis-like bacterium	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter mucosalis-like bacterium	NA
+661	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter rectus	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter rectus	NA
+662	OTU_662	NA	NA	NA	NA	NA	NA	NA	NA
+663	OTU_663	NA	NA	NA	NA	NA	NA	NA	NA
+664	OTU_664	NA	NA	NA	NA	NA	NA	NA	NA
+665	OTU_665	NA	NA	NA	NA	NA	NA	NA	NA
+666	OTU_666	NA	NA	NA	NA	NA	NA	NA	NA
+667	OTU_667	NA	NA	NA	NA	NA	NA	NA	NA
+668	OTU_668	NA	NA	NA	NA	NA	NA	NA	NA
+669	OTU_669	NA	NA	NA	NA	NA	NA	NA	NA
+670	OTU_670	NA	NA	NA	NA	NA	NA	NA	NA
+671	OTU_671	NA	NA	NA	NA	NA	NA	NA	NA
+672	OTU_672	NA	NA	NA	NA	NA	NA	NA	NA
+673	OTU_673	NA	NA	NA	NA	NA	NA	NA	NA
+674	OTU_674	NA	NA	NA	NA	NA	NA	NA	NA
+675	OTU_675	NA	NA	NA	NA	NA	NA	NA	NA
+676	OTU_676	NA	NA	NA	NA	NA	NA	NA	NA
+677	;cellular organisms;Bacteria;Firmicutes;Bacilli;Bacillales;Staphylococcaceae;Nosocomiicoccus;Nosocomiicoccus ampullae	Bacteria	Firmicutes	Bacilli	Bacillales	Staphylococcaceae	Nosocomiicoccus	Nosocomiicoccus ampullae	NA
+678	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter rectus	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter rectus	NA
+679	OTU_679	NA	NA	NA	NA	NA	NA	NA	NA
+680	OTU_680	NA	NA	NA	NA	NA	NA	NA	NA
+681	OTU_681	NA	NA	NA	NA	NA	NA	NA	NA
+682	OTU_682	NA	NA	NA	NA	NA	NA	NA	NA
+683	OTU_683	NA	NA	NA	NA	NA	NA	NA	NA
+684	OTU_684	NA	NA	NA	NA	NA	NA	NA	NA
+685	OTU_685	NA	NA	NA	NA	NA	NA	NA	NA
+686	;cellular organisms;Bacteria;Actinobacteria;Actinobacteria (class);Actinobacteridae;Actinomycetales;Propionibacterineae;Propionibacteriaceae;Propionibacterium;Propionibacterium acnes	Bacteria	Actinobacteria	Actinobacteria (class)	Actinomycetales	Propionibacteriaceae	Propionibacterium	Propionibacterium acnes	NA
+687	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter mucosalis-like bacterium	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter mucosalis-like bacterium	NA
+688	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter mucosalis-like bacterium	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter mucosalis-like bacterium	NA
+689	OTU_689	NA	NA	NA	NA	NA	NA	NA	NA
+690	OTU_690	NA	NA	NA	NA	NA	NA	NA	NA
+691	OTU_691	NA	NA	NA	NA	NA	NA	NA	NA
+692	OTU_692	NA	NA	NA	NA	NA	NA	NA	NA
+693	OTU_693	NA	NA	NA	NA	NA	NA	NA	NA
+694	OTU_694	NA	NA	NA	NA	NA	NA	NA	NA
+695	OTU_695	NA	NA	NA	NA	NA	NA	NA	NA
+696	OTU_696	NA	NA	NA	NA	NA	NA	NA	NA
+697	OTU_697	NA	NA	NA	NA	NA	NA	NA	NA
+698	OTU_698	NA	NA	NA	NA	NA	NA	NA	NA
+699	OTU_699	NA	NA	NA	NA	NA	NA	NA	NA
+700	OTU_700	NA	NA	NA	NA	NA	NA	NA	NA
+701	OTU_701	NA	NA	NA	NA	NA	NA	NA	NA
+702	OTU_702	NA	NA	NA	NA	NA	NA	NA	NA
+703	OTU_703	NA	NA	NA	NA	NA	NA	NA	NA
+704	OTU_704	NA	NA	NA	NA	NA	NA	NA	NA
+705	OTU_705	NA	NA	NA	NA	NA	NA	NA	NA
+706	OTU_706	NA	NA	NA	NA	NA	NA	NA	NA
+707	OTU_707	NA	NA	NA	NA	NA	NA	NA	NA
+708	OTU_708	NA	NA	NA	NA	NA	NA	NA	NA
+709	OTU_709	NA	NA	NA	NA	NA	NA	NA	NA
+710	OTU_710	NA	NA	NA	NA	NA	NA	NA	NA
+711	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Veillonella;Veillonella rodentium	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Veillonella	Veillonella rodentium	NA
+712	OTU_712	NA	NA	NA	NA	NA	NA	NA	NA
+713	OTU_713	NA	NA	NA	NA	NA	NA	NA	NA
+714	OTU_714	NA	NA	NA	NA	NA	NA	NA	NA
+715	OTU_715	NA	NA	NA	NA	NA	NA	NA	NA
+716	OTU_716	NA	NA	NA	NA	NA	NA	NA	NA
+717	OTU_717	NA	NA	NA	NA	NA	NA	NA	NA
+718	OTU_718	NA	NA	NA	NA	NA	NA	NA	NA
+719	OTU_719	NA	NA	NA	NA	NA	NA	NA	NA
+720	OTU_720	NA	NA	NA	NA	NA	NA	NA	NA
+721	OTU_721	NA	NA	NA	NA	NA	NA	NA	NA
+722	OTU_722	NA	NA	NA	NA	NA	NA	NA	NA
+723	OTU_723	NA	NA	NA	NA	NA	NA	NA	NA
+724	OTU_724	NA	NA	NA	NA	NA	NA	NA	NA
+725	OTU_725	NA	NA	NA	NA	NA	NA	NA	NA
+726	OTU_726	NA	NA	NA	NA	NA	NA	NA	NA
+727	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter mucosalis-like bacterium	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter mucosalis-like bacterium	NA
+728	OTU_728	NA	NA	NA	NA	NA	NA	NA	NA
+729	OTU_729	NA	NA	NA	NA	NA	NA	NA	NA
+730	OTU_730	NA	NA	NA	NA	NA	NA	NA	NA
+731	OTU_731	NA	NA	NA	NA	NA	NA	NA	NA
+732	OTU_732	NA	NA	NA	NA	NA	NA	NA	NA
+733	OTU_733	NA	NA	NA	NA	NA	NA	NA	NA
+734	OTU_734	NA	NA	NA	NA	NA	NA	NA	NA
+735	OTU_735	NA	NA	NA	NA	NA	NA	NA	NA
+736	OTU_736	NA	NA	NA	NA	NA	NA	NA	NA
+737	OTU_737	NA	NA	NA	NA	NA	NA	NA	NA
+738	OTU_738	NA	NA	NA	NA	NA	NA	NA	NA
+739	OTU_739	NA	NA	NA	NA	NA	NA	NA	NA
+740	OTU_740	NA	NA	NA	NA	NA	NA	NA	NA
+741	;cellular organisms;Bacteria;Actinobacteria;Actinobacteria (class);Actinobacteridae;Actinomycetales;Actinomycineae;Actinomycetaceae;Actinomyces;Actinomyces sp. HA3	Bacteria	Actinobacteria	Actinobacteria (class)	Actinomycetales	Actinomycetaceae	Actinomyces	Actinomyces sp. HA3	NA
+742	OTU_742	NA	NA	NA	NA	NA	NA	NA	NA
+743	OTU_743	NA	NA	NA	NA	NA	NA	NA	NA
+744	OTU_744	NA	NA	NA	NA	NA	NA	NA	NA
+745	OTU_745	NA	NA	NA	NA	NA	NA	NA	NA
+746	OTU_746	NA	NA	NA	NA	NA	NA	NA	NA
+747	OTU_747	NA	NA	NA	NA	NA	NA	NA	NA
+748	OTU_748	NA	NA	NA	NA	NA	NA	NA	NA
+749	OTU_749	NA	NA	NA	NA	NA	NA	NA	NA
+750	OTU_750	NA	NA	NA	NA	NA	NA	NA	NA
+751	OTU_751	NA	NA	NA	NA	NA	NA	NA	NA
+752	OTU_752	NA	NA	NA	NA	NA	NA	NA	NA
+753	OTU_753	NA	NA	NA	NA	NA	NA	NA	NA
+754	OTU_754	NA	NA	NA	NA	NA	NA	NA	NA
+755	OTU_755	NA	NA	NA	NA	NA	NA	NA	NA
+756	OTU_756	NA	NA	NA	NA	NA	NA	NA	NA
+757	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Selenomonas;environmental samples;Selenomonas sp. oral clone EW051a	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Selenomonas	Selenomonas sp. oral clone EW051a	NA
+758	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter mucosalis-like bacterium	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter mucosalis-like bacterium	NA
+759	OTU_759	NA	NA	NA	NA	NA	NA	NA	NA
+760	OTU_760	NA	NA	NA	NA	NA	NA	NA	NA
+761	OTU_761	NA	NA	NA	NA	NA	NA	NA	NA
+762	OTU_762	NA	NA	NA	NA	NA	NA	NA	NA
+763	OTU_763	NA	NA	NA	NA	NA	NA	NA	NA
+764	OTU_764	NA	NA	NA	NA	NA	NA	NA	NA
+765	OTU_765	NA	NA	NA	NA	NA	NA	NA	NA
+766	OTU_766	NA	NA	NA	NA	NA	NA	NA	NA
+767	OTU_767	NA	NA	NA	NA	NA	NA	NA	NA
+768	OTU_768	NA	NA	NA	NA	NA	NA	NA	NA
+769	OTU_769	NA	NA	NA	NA	NA	NA	NA	NA
+770	OTU_770	NA	NA	NA	NA	NA	NA	NA	NA
+771	OTU_771	NA	NA	NA	NA	NA	NA	NA	NA
+772	OTU_772	NA	NA	NA	NA	NA	NA	NA	NA
+773	OTU_773	NA	NA	NA	NA	NA	NA	NA	NA
+774	OTU_774	NA	NA	NA	NA	NA	NA	NA	NA
+775	OTU_775	NA	NA	NA	NA	NA	NA	NA	NA
+776	OTU_776	NA	NA	NA	NA	NA	NA	NA	NA
+777	OTU_777	NA	NA	NA	NA	NA	NA	NA	NA
+778	OTU_778	NA	NA	NA	NA	NA	NA	NA	NA
+779	OTU_779	NA	NA	NA	NA	NA	NA	NA	NA
+780	OTU_780	NA	NA	NA	NA	NA	NA	NA	NA
+781	OTU_781	NA	NA	NA	NA	NA	NA	NA	NA
+782	OTU_782	NA	NA	NA	NA	NA	NA	NA	NA
+783	OTU_783	NA	NA	NA	NA	NA	NA	NA	NA
+784	;cellular organisms;Bacteria;Proteobacteria;Gammaproteobacteria;Pasteurellales;Pasteurellaceae;Haemophilus;Haemophilus parainfluenzae	Bacteria	Proteobacteria	Gammaproteobacteria	Pasteurellales	Pasteurellaceae	Haemophilus	Haemophilus parainfluenzae	NA
+785	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Veillonella;Veillonella montpellierensis	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Veillonella	Veillonella montpellierensis	NA
+786	OTU_786	NA	NA	NA	NA	NA	NA	NA	NA
+787	OTU_787	NA	NA	NA	NA	NA	NA	NA	NA
+788	OTU_788	NA	NA	NA	NA	NA	NA	NA	NA
+789	OTU_789	NA	NA	NA	NA	NA	NA	NA	NA
+790	OTU_790	NA	NA	NA	NA	NA	NA	NA	NA
+791	OTU_791	NA	NA	NA	NA	NA	NA	NA	NA
+792	OTU_792	NA	NA	NA	NA	NA	NA	NA	NA
+793	OTU_793	NA	NA	NA	NA	NA	NA	NA	NA
+794	OTU_794	NA	NA	NA	NA	NA	NA	NA	NA
+795	OTU_795	NA	NA	NA	NA	NA	NA	NA	NA
+796	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Veillonella;Veillonella montpellierensis	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Veillonella	Veillonella montpellierensis	NA
+797	;cellular organisms;Bacteria;Actinobacteria;Actinobacteria (class);Coriobacteridae;Coriobacteriales;Coriobacterineae;Coriobacteriaceae;Atopobium;Atopobium parvulum	Bacteria	Actinobacteria	Actinobacteria (class)	Coriobacteriales	Coriobacteriaceae	Atopobium	Atopobium parvulum	NA
+798	OTU_798	NA	NA	NA	NA	NA	NA	NA	NA
+799	OTU_799	NA	NA	NA	NA	NA	NA	NA	NA
+800	OTU_800	NA	NA	NA	NA	NA	NA	NA	NA
+801	OTU_801	NA	NA	NA	NA	NA	NA	NA	NA
+802	OTU_802	NA	NA	NA	NA	NA	NA	NA	NA
+803	OTU_803	NA	NA	NA	NA	NA	NA	NA	NA
+804	OTU_804	NA	NA	NA	NA	NA	NA	NA	NA
+805	OTU_805	NA	NA	NA	NA	NA	NA	NA	NA
+806	OTU_806	NA	NA	NA	NA	NA	NA	NA	NA
+807	OTU_807	NA	NA	NA	NA	NA	NA	NA	NA
+808	OTU_808	NA	NA	NA	NA	NA	NA	NA	NA
+809	OTU_809	NA	NA	NA	NA	NA	NA	NA	NA
+810	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Prevotellaceae;Prevotella;environmental samples;Prevotella sp. oral clone AA020	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Prevotellaceae	Prevotella	Prevotella sp. oral clone AA020	NA
+811	OTU_811	NA	NA	NA	NA	NA	NA	NA	NA
+812	OTU_812	NA	NA	NA	NA	NA	NA	NA	NA
+813	OTU_813	NA	NA	NA	NA	NA	NA	NA	NA
+814	OTU_814	NA	NA	NA	NA	NA	NA	NA	NA
+815	OTU_815	NA	NA	NA	NA	NA	NA	NA	NA
+816	OTU_816	NA	NA	NA	NA	NA	NA	NA	NA
+817	OTU_817	NA	NA	NA	NA	NA	NA	NA	NA
+818	OTU_818	NA	NA	NA	NA	NA	NA	NA	NA
+819	OTU_819	NA	NA	NA	NA	NA	NA	NA	NA
+820	OTU_820	NA	NA	NA	NA	NA	NA	NA	NA
+821	OTU_821	NA	NA	NA	NA	NA	NA	NA	NA
+822	OTU_822	NA	NA	NA	NA	NA	NA	NA	NA
+823	OTU_823	NA	NA	NA	NA	NA	NA	NA	NA
+824	OTU_824	NA	NA	NA	NA	NA	NA	NA	NA
+825	OTU_825	NA	NA	NA	NA	NA	NA	NA	NA
+826	OTU_826	NA	NA	NA	NA	NA	NA	NA	NA
+827	OTU_827	NA	NA	NA	NA	NA	NA	NA	NA
+828	OTU_828	NA	NA	NA	NA	NA	NA	NA	NA
+829	OTU_829	NA	NA	NA	NA	NA	NA	NA	NA
+830	;cellular organisms;Bacteria;Actinobacteria;Actinobacteria (class);Actinobacteridae;Actinomycetales;Micrococcineae;Microbacteriaceae;Frigoribacterium;Frigoribacterium sp. pfB31	Bacteria	Actinobacteria	Actinobacteria (class)	Actinomycetales	Microbacteriaceae	Frigoribacterium	Frigoribacterium sp. pfB31	NA
+831	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Veillonella;Veillonella montpellierensis	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Veillonella	Veillonella montpellierensis	NA
+832	OTU_832	NA	NA	NA	NA	NA	NA	NA	NA
+833	OTU_833	NA	NA	NA	NA	NA	NA	NA	NA
+834	OTU_834	NA	NA	NA	NA	NA	NA	NA	NA
+835	OTU_835	NA	NA	NA	NA	NA	NA	NA	NA
+836	OTU_836	NA	NA	NA	NA	NA	NA	NA	NA
+837	OTU_837	NA	NA	NA	NA	NA	NA	NA	NA
+838	OTU_838	NA	NA	NA	NA	NA	NA	NA	NA
+839	OTU_839	NA	NA	NA	NA	NA	NA	NA	NA
+840	OTU_840	NA	NA	NA	NA	NA	NA	NA	NA
+841	OTU_841	NA	NA	NA	NA	NA	NA	NA	NA
+842	OTU_842	NA	NA	NA	NA	NA	NA	NA	NA
+843	OTU_843	NA	NA	NA	NA	NA	NA	NA	NA
+844	OTU_844	NA	NA	NA	NA	NA	NA	NA	NA
+845	OTU_845	NA	NA	NA	NA	NA	NA	NA	NA
+846	OTU_846	NA	NA	NA	NA	NA	NA	NA	NA
+847	OTU_847	NA	NA	NA	NA	NA	NA	NA	NA
+848	OTU_848	NA	NA	NA	NA	NA	NA	NA	NA
+849	OTU_849	NA	NA	NA	NA	NA	NA	NA	NA
+850	OTU_850	NA	NA	NA	NA	NA	NA	NA	NA
+851	OTU_851	NA	NA	NA	NA	NA	NA	NA	NA
+852	OTU_852	NA	NA	NA	NA	NA	NA	NA	NA
+853	OTU_853	NA	NA	NA	NA	NA	NA	NA	NA
+854	OTU_854	NA	NA	NA	NA	NA	NA	NA	NA
+855	OTU_855	NA	NA	NA	NA	NA	NA	NA	NA
+856	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Prevotellaceae;Prevotella;Prevotella intermedia	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Prevotellaceae	Prevotella	Prevotella intermedia	NA
+857	;cellular organisms;Bacteria;Proteobacteria;Betaproteobacteria;Burkholderiales;Comamonadaceae;Acidovorax;Acidovorax sp. LR17	Bacteria	Proteobacteria	Betaproteobacteria	Burkholderiales	Comamonadaceae	Acidovorax	Acidovorax sp. LR17	NA
+858	OTU_858	NA	NA	NA	NA	NA	NA	NA	NA
+859	OTU_859	NA	NA	NA	NA	NA	NA	NA	NA
+860	OTU_860	NA	NA	NA	NA	NA	NA	NA	NA
+861	OTU_861	NA	NA	NA	NA	NA	NA	NA	NA
+862	OTU_862	NA	NA	NA	NA	NA	NA	NA	NA
+863	OTU_863	NA	NA	NA	NA	NA	NA	NA	NA
+864	OTU_864	NA	NA	NA	NA	NA	NA	NA	NA
+865	OTU_865	NA	NA	NA	NA	NA	NA	NA	NA
+866	OTU_866	NA	NA	NA	NA	NA	NA	NA	NA
+867	OTU_867	NA	NA	NA	NA	NA	NA	NA	NA
+868	OTU_868	NA	NA	NA	NA	NA	NA	NA	NA
+869	OTU_869	NA	NA	NA	NA	NA	NA	NA	NA
+870	OTU_870	NA	NA	NA	NA	NA	NA	NA	NA
+871	OTU_871	NA	NA	NA	NA	NA	NA	NA	NA
+872	OTU_872	NA	NA	NA	NA	NA	NA	NA	NA
+873	OTU_873	NA	NA	NA	NA	NA	NA	NA	NA
+874	OTU_874	NA	NA	NA	NA	NA	NA	NA	NA
+875	OTU_875	NA	NA	NA	NA	NA	NA	NA	NA
+876	OTU_876	NA	NA	NA	NA	NA	NA	NA	NA
+877	OTU_877	NA	NA	NA	NA	NA	NA	NA	NA
+878	OTU_878	NA	NA	NA	NA	NA	NA	NA	NA
+879	OTU_879	NA	NA	NA	NA	NA	NA	NA	NA
+880	OTU_880	NA	NA	NA	NA	NA	NA	NA	NA
+881	OTU_881	NA	NA	NA	NA	NA	NA	NA	NA
+882	OTU_882	NA	NA	NA	NA	NA	NA	NA	NA
+883	OTU_883	NA	NA	NA	NA	NA	NA	NA	NA
+884	OTU_884	NA	NA	NA	NA	NA	NA	NA	NA
+885	OTU_885	NA	NA	NA	NA	NA	NA	NA	NA
+886	OTU_886	NA	NA	NA	NA	NA	NA	NA	NA
+887	OTU_887	NA	NA	NA	NA	NA	NA	NA	NA
+888	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;environmental samples;Campylobacter sp. oral clone BB120	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter sp. oral clone BB120	NA
+889	OTU_889	NA	NA	NA	NA	NA	NA	NA	NA
+890	OTU_890	NA	NA	NA	NA	NA	NA	NA	NA
+891	OTU_891	NA	NA	NA	NA	NA	NA	NA	NA
+892	OTU_892	NA	NA	NA	NA	NA	NA	NA	NA
+893	OTU_893	NA	NA	NA	NA	NA	NA	NA	NA
+894	OTU_894	NA	NA	NA	NA	NA	NA	NA	NA
+895	OTU_895	NA	NA	NA	NA	NA	NA	NA	NA
+896	OTU_896	NA	NA	NA	NA	NA	NA	NA	NA
+897	OTU_897	NA	NA	NA	NA	NA	NA	NA	NA
+898	OTU_898	NA	NA	NA	NA	NA	NA	NA	NA
+899	OTU_899	NA	NA	NA	NA	NA	NA	NA	NA
+900	OTU_900	NA	NA	NA	NA	NA	NA	NA	NA
+901	OTU_901	NA	NA	NA	NA	NA	NA	NA	NA
+902	OTU_902	NA	NA	NA	NA	NA	NA	NA	NA
+903	OTU_903	NA	NA	NA	NA	NA	NA	NA	NA
+904	OTU_904	NA	NA	NA	NA	NA	NA	NA	NA
+905	OTU_905	NA	NA	NA	NA	NA	NA	NA	NA
+906	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;Campylobacter rectus	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter rectus	NA
+907	OTU_907	NA	NA	NA	NA	NA	NA	NA	NA
+908	OTU_908	NA	NA	NA	NA	NA	NA	NA	NA
+909	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Veillonella;Veillonella montpellierensis	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Veillonella	Veillonella montpellierensis	NA
+910	OTU_910	NA	NA	NA	NA	NA	NA	NA	NA
+911	OTU_911	NA	NA	NA	NA	NA	NA	NA	NA
+912	OTU_912	NA	NA	NA	NA	NA	NA	NA	NA
+913	OTU_913	NA	NA	NA	NA	NA	NA	NA	NA
+914	OTU_914	NA	NA	NA	NA	NA	NA	NA	NA
+915	OTU_915	NA	NA	NA	NA	NA	NA	NA	NA
+916	OTU_916	NA	NA	NA	NA	NA	NA	NA	NA
+917	OTU_917	NA	NA	NA	NA	NA	NA	NA	NA
+918	OTU_918	NA	NA	NA	NA	NA	NA	NA	NA
+919	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Prevotellaceae;Prevotella;Prevotella intermedia	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Prevotellaceae	Prevotella	Prevotella intermedia	NA
+920	;cellular organisms;Bacteria;Firmicutes;Bacilli;Lactobacillales;Streptococcaceae;Streptococcus;Streptococcus dysgalactiae group;Streptococcus dysgalactiae	Bacteria	Firmicutes	Bacilli	Lactobacillales	Streptococcaceae	Streptococcus	Streptococcus dysgalactiae	NA
+921	OTU_921	NA	NA	NA	NA	NA	NA	NA	NA
+922	OTU_922	NA	NA	NA	NA	NA	NA	NA	NA
+923	OTU_923	NA	NA	NA	NA	NA	NA	NA	NA
+924	OTU_924	NA	NA	NA	NA	NA	NA	NA	NA
+925	OTU_925	NA	NA	NA	NA	NA	NA	NA	NA
+926	OTU_926	NA	NA	NA	NA	NA	NA	NA	NA
+927	OTU_927	NA	NA	NA	NA	NA	NA	NA	NA
+928	OTU_928	NA	NA	NA	NA	NA	NA	NA	NA
+929	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Prevotellaceae;Prevotella;Prevotella salivae	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Prevotellaceae	Prevotella	Prevotella salivae	NA
+930	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Selenomonas;environmental samples;Selenomonas sp. oral clone EW051a	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Selenomonas	Selenomonas sp. oral clone EW051a	NA
+931	OTU_931	NA	NA	NA	NA	NA	NA	NA	NA
+932	OTU_932	NA	NA	NA	NA	NA	NA	NA	NA
+933	OTU_933	NA	NA	NA	NA	NA	NA	NA	NA
+934	OTU_934	NA	NA	NA	NA	NA	NA	NA	NA
+935	OTU_935	NA	NA	NA	NA	NA	NA	NA	NA
+936	OTU_936	NA	NA	NA	NA	NA	NA	NA	NA
+937	;cellular organisms;Bacteria;Proteobacteria;Gammaproteobacteria;Pasteurellales;Pasteurellaceae;Haemophilus;Haemophilus parainfluenzae	Bacteria	Proteobacteria	Gammaproteobacteria	Pasteurellales	Pasteurellaceae	Haemophilus	Haemophilus parainfluenzae	NA
+938	OTU_938	NA	NA	NA	NA	NA	NA	NA	NA
+939	OTU_939	NA	NA	NA	NA	NA	NA	NA	NA
+940	OTU_940	NA	NA	NA	NA	NA	NA	NA	NA
+941	OTU_941	NA	NA	NA	NA	NA	NA	NA	NA
+942	OTU_942	NA	NA	NA	NA	NA	NA	NA	NA
+943	OTU_943	NA	NA	NA	NA	NA	NA	NA	NA
+944	OTU_944	NA	NA	NA	NA	NA	NA	NA	NA
+945	OTU_945	NA	NA	NA	NA	NA	NA	NA	NA
+946	;cellular organisms;Bacteria;Proteobacteria;delta/epsilon subdivisions;Epsilonproteobacteria;Campylobacterales;Campylobacteraceae;Campylobacter;environmental samples;Campylobacter sp. oral clone BB120	Bacteria	Proteobacteria	Epsilonproteobacteria	Campylobacterales	Campylobacteraceae	Campylobacter	Campylobacter sp. oral clone BB120	NA
+947	OTU_947	NA	NA	NA	NA	NA	NA	NA	NA
+948	OTU_948	NA	NA	NA	NA	NA	NA	NA	NA
+949	OTU_949	NA	NA	NA	NA	NA	NA	NA	NA
+950	OTU_950	NA	NA	NA	NA	NA	NA	NA	NA
+951	OTU_951	NA	NA	NA	NA	NA	NA	NA	NA
+952	OTU_952	NA	NA	NA	NA	NA	NA	NA	NA
+953	OTU_953	NA	NA	NA	NA	NA	NA	NA	NA
+954	OTU_954	NA	NA	NA	NA	NA	NA	NA	NA
+955	OTU_955	NA	NA	NA	NA	NA	NA	NA	NA
+956	OTU_956	NA	NA	NA	NA	NA	NA	NA	NA
+957	OTU_957	NA	NA	NA	NA	NA	NA	NA	NA
+958	OTU_958	NA	NA	NA	NA	NA	NA	NA	NA
+959	OTU_959	NA	NA	NA	NA	NA	NA	NA	NA
+960	OTU_960	NA	NA	NA	NA	NA	NA	NA	NA
+961	OTU_961	NA	NA	NA	NA	NA	NA	NA	NA
+962	OTU_962	NA	NA	NA	NA	NA	NA	NA	NA
+963	OTU_963	NA	NA	NA	NA	NA	NA	NA	NA
+964	OTU_964	NA	NA	NA	NA	NA	NA	NA	NA
+965	OTU_965	NA	NA	NA	NA	NA	NA	NA	NA
+966	OTU_966	NA	NA	NA	NA	NA	NA	NA	NA
+967	OTU_967	NA	NA	NA	NA	NA	NA	NA	NA
+968	OTU_968	NA	NA	NA	NA	NA	NA	NA	NA
+969	OTU_969	NA	NA	NA	NA	NA	NA	NA	NA
+970	OTU_970	NA	NA	NA	NA	NA	NA	NA	NA
+971	OTU_971	NA	NA	NA	NA	NA	NA	NA	NA
+972	OTU_972	NA	NA	NA	NA	NA	NA	NA	NA
+973	OTU_973	NA	NA	NA	NA	NA	NA	NA	NA
+974	OTU_974	NA	NA	NA	NA	NA	NA	NA	NA
+975	OTU_975	NA	NA	NA	NA	NA	NA	NA	NA
+976	OTU_976	NA	NA	NA	NA	NA	NA	NA	NA
+977	OTU_977	NA	NA	NA	NA	NA	NA	NA	NA
+978	OTU_978	NA	NA	NA	NA	NA	NA	NA	NA
+979	OTU_979	NA	NA	NA	NA	NA	NA	NA	NA
+980	OTU_980	NA	NA	NA	NA	NA	NA	NA	NA
+981	;cellular organisms;Bacteria;Firmicutes;Clostridia;Clostridiales;Clostridiales incertae sedis;Clostridiales Family XI. Incertae Sedis;Peptoniphilus;Peptoniphilus sp. gpac121	Bacteria	Firmicutes	Clostridia	Clostridiales	Clostridiales Family XI. Incertae Sedis	Peptoniphilus	Peptoniphilus sp. gpac121	NA
+982	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Prevotellaceae;Prevotella;Prevotella intermedia	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Prevotellaceae	Prevotella	Prevotella intermedia	NA
+983	;cellular organisms;Bacteria;Bacteroidetes/Chlorobi group;Bacteroidetes;Bacteroidia;Bacteroidales;Prevotellaceae;Prevotella;Prevotella intermedia	Bacteria	Bacteroidetes	Bacteroidia	Bacteroidales	Prevotellaceae	Prevotella	Prevotella intermedia	NA
+984	OTU_984	NA	NA	NA	NA	NA	NA	NA	NA
+985	OTU_985	NA	NA	NA	NA	NA	NA	NA	NA
+986	OTU_986	NA	NA	NA	NA	NA	NA	NA	NA
+987	OTU_987	NA	NA	NA	NA	NA	NA	NA	NA
+988	OTU_988	NA	NA	NA	NA	NA	NA	NA	NA
+989	OTU_989	NA	NA	NA	NA	NA	NA	NA	NA
+990	;cellular organisms;Bacteria;Firmicutes;Negativicutes;Selenomonadales;Veillonellaceae;Selenomonas;environmental samples;Selenomonas sp. oral clone BP2-20	Bacteria	Firmicutes	Negativicutes	Selenomonadales	Veillonellaceae	Selenomonas	Selenomonas sp. oral clone BP2-20	NA
+991	OTU_991	NA	NA	NA	NA	NA	NA	NA	NA
+992	OTU_992	NA	NA	NA	NA	NA	NA	NA	NA
+993	OTU_993	NA	NA	NA	NA	NA	NA	NA	NA
+994	OTU_994	NA	NA	NA	NA	NA	NA	NA	NA
+995	OTU_995	NA	NA	NA	NA	NA	NA	NA	NA
+996	OTU_996	NA	NA	NA	NA	NA	NA	NA	NA
+997	OTU_997	NA	NA	NA	NA	NA	NA	NA	NA
+998	;cellular organisms;Bacteria;Firmicutes;Clostridia;Clostridiales;Clostridiales incertae sedis;Clostridiales Family XI. Incertae Sedis;Finegoldia;Finegoldia magna	Bacteria	Firmicutes	Clostridia	Clostridiales	Clostridiales Family XI. Incertae Sedis	Finegoldia	Finegoldia magna	NA
+999	OTU_999	NA	NA	NA	NA	NA	NA	NA	NA
+1000	OTU_1000	NA	NA	NA	NA	NA	NA	NA	NA
diff --git a/inst/extdata/lungfit.rds b/inst/extdata/lungfit.rds
new file mode 100644
index 0000000..e333d3e
Binary files /dev/null and b/inst/extdata/lungfit.rds differ
diff --git a/man/MRcoefs.Rd b/man/MRcoefs.Rd
new file mode 100644
index 0000000..5cd0a16
--- /dev/null
+++ b/man/MRcoefs.Rd
@@ -0,0 +1,72 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/MRcoefs.R
+\name{MRcoefs}
+\alias{MRcoefs}
+\title{Table of top-ranked features from fitZig or fitFeatureModel}
+\usage{
+MRcoefs(obj, by = 2, coef = NULL, number = 10, taxa = obj$taxa,
+  uniqueNames = FALSE, adjustMethod = "fdr", group = 0, eff = 0,
+  numberEff = FALSE, counts = 0, file = NULL)
+}
+\arguments{
+\item{obj}{Output of fitFeatureModel or fitZig.}
+
+\item{by}{Column number or column name specifying which coefficient or
+contrast of the linear model is of interest.}
+
+\item{coef}{Column number(s) or column name(s) specifying which coefficient
+or contrast of the linear model to display.}
+
+\item{number}{The number of bacterial features to pick out.}
+
+\item{taxa}{Taxa list.}
+
+\item{uniqueNames}{Number the various taxa.}
+
+\item{adjustMethod}{Method to adjust p-values by. Default is "FDR". Options
+include "holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr",
+"none". See \code{\link{p.adjust}} for more details.}
+
+\item{group}{One of five choices, 0,1,2,3,4. 0: the sort is ordered by a
+decreasing absolute value coefficient fit. 1: the sort is ordered by the raw
+coefficient fit in decreasing order. 2: the sort is ordered by the raw
+coefficient fit in increasing order. 3: the sort is ordered by the p-value
+of the coefficient fit in increasing order. 4: no sorting.}
+
+\item{eff}{Filter features to have at least a "eff" quantile or number of effective samples.}
+
+\item{numberEff}{Boolean, whether eff should represent quantile (default/FALSE) or number.}
+
+\item{counts}{Filter features to have at least 'counts' counts.}
+
+\item{file}{Name of output file, including location, to save the table.}
+}
+\value{
+Table of the top-ranked features determined by the linear fit's
+coefficient.
+}
+\description{
+Extract a table of the top-ranked features from a linear model fit. This
+function will be updated soon to provide better flexibility similar to
+limma's topTable.
+}
+\examples{
+
+data(lungData)
+k = grep("Extraction.Control",pData(lungData)$SampleType)
+lungTrim = lungData[,-k]
+lungTrim=filterData(lungTrim,present=30)
+lungTrim=cumNorm(lungTrim,p=0.5)
+smokingStatus = pData(lungTrim)$SmokingStatus
+mod = model.matrix(~smokingStatus)
+fit = fitZig(obj = lungTrim,mod=mod)
+head(MRcoefs(fit))
+####
+fit = fitFeatureModel(obj = lungTrim,mod=mod)
+head(MRcoefs(fit))
+
+}
+\seealso{
+\code{\link{fitZig}} \code{\link{fitFeatureModel}} \code{\link{MRtable}} \code{\link{MRfulltable}}
+}
+
diff --git a/man/MRcounts.Rd b/man/MRcounts.Rd
new file mode 100644
index 0000000..028cfcd
--- /dev/null
+++ b/man/MRcounts.Rd
@@ -0,0 +1,37 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/allClasses.R
+\docType{methods}
+\name{MRcounts}
+\alias{MRcounts}
+\alias{MRcounts,MRexperiment-method}
+\title{Accessor for the counts slot of a MRexperiment object}
+\usage{
+MRcounts(obj, norm = FALSE, log = FALSE, sl = 1000)
+}
+\arguments{
+\item{obj}{a \code{MRexperiment} object.}
+
+\item{norm}{logical indicating whether or not to return normalized counts.}
+
+\item{log}{TRUE/FALSE whether or not to log2 transform scale.}
+
+\item{sl}{The value to scale by (default=1000).}
+}
+\value{
+Normalized or raw counts
+}
+\description{
+The counts slot holds the raw count data representing (along the rows) the
+number of reads annotated for a particular feature and (along the columns)
+the sample.
+}
+\examples{
+
+data(lungData)
+head(MRcounts(lungData))
+
+}
+\author{
+Joseph N. Paulson, jpaulson at umiacs.umd.edu
+}
+
diff --git a/man/MRexperiment-class.Rd b/man/MRexperiment-class.Rd
new file mode 100644
index 0000000..2f90009
--- /dev/null
+++ b/man/MRexperiment-class.Rd
@@ -0,0 +1,61 @@
+\name{MRexperiment}
+\Rdversion{1.0}
+\docType{class}
+\alias{MRexperiment-class}
+\alias{[,MRexperiment,ANY,ANY,ANY-method}
+\alias{[,MRexperiment-method}
+\alias{colSums,MRexperiment-method}
+\alias{rowSums,MRexperiment-method}
+\alias{colMeans,MRexperiment-method}
+\alias{rowMeans,MRexperiment-method}
+\alias{libSize,MRexperiment-method}
+\alias{normFactors,MRexperiment-method}
+
+\title{Class "MRexperiment" -- a modified eSet object for the data from high-throughput sequencing experiments}
+\description{This is the main class for metagenomeSeq.}
+\section{Objects from the Class}{
+Objects should be created with calls to \code{\link{newMRexperiment}}.
+}
+\section{Extends}{
+Class \code{eSet} (package 'Biobase'), directly.
+Class \code{VersionedBiobase} (package 'Biobase'), by class "eSet", distance 2.
+Class \code{Versioned} (package 'Biobase'), by class "eSet", distance 3.
+}
+\note{ 
+Note: This is a summary for reference. For an explanation of the actual usage, see the vignette.
+
+MRexperiments are the main class in use by metagenomeSeq. The class extends eSet and provides additional slots which are populated during the analysis pipeline.
+
+MRexperiment dataset are created with calls to \code{\link{newMRexperiment}}.
+MRexperiment datasets contain raw count matrices (integers) accessible through \code{\link{MRcounts}}.
+Similarly, normalized count matrices can be accessed (following normalization) through \code{\link{MRcounts}} by calling norm=TRUE.
+Following an analysis, a matrix of posterior probabilities for counts is accessible through \code{\link{posteriorProbs}}.
+
+The normalization factors used in analysis can be recovered by \code{\link{normFactors}}, as can the library sizes of samples (depths of coverage), \code{\link{libSize}}.
+
+Similarly to other RNASeq bioconductor packages available, the rows of the matrix correspond to a feature (be it OTU, species, gene, etc.) and each column an experimental sample. Pertinent clinical information and potential confounding factors are stored in the phenoData slot (accessed via \code{pData}).
+
+To populate the various slots in an MRexperiment several functions are run.
+1) \code{\link{cumNormStat}} calculates the proper percentile to calculate normalization factors. The cumNormStat slot is populated.
+2) \code{\link{cumNorm}} calculates the actual normalization factors using p = cumNormStat.
+
+Other functions will place subsequent matrices (normalized counts (\code{\link{cumNormMat}}), posterior probabilities (\code{\link{posteriorProbs}}))
+
+As mentioned above, \code{MRexperiment} is derived from the virtual class,\code{eSet} and thereby has a \code{phenoData} slot which allows for sample annotation. In the phenoData data frame factors are stored. The normalization factors and library size information is stored in a slot called expSummary that is an annotated data frame and is repopulated for subsetted data.
+
+}
+
+\section{Methods}{
+	Class-specific methods.
+ \describe{
+	\item{\code{[}}{Subset operation, taking two arguments and
+		indexing the sample and variable. Returns an \code{MRexperiment object}, including relevant
+		metadata. Setting \code{drop=TRUE} generates an error. Subsetting the data, the experiment 
+		summary slot is repopulated and pData is repopulated after calling factor (removing levels not present).}
+  }
+}
+
+\examples{
+# See vignette
+}
+
diff --git a/man/MRexperiment2biom.Rd b/man/MRexperiment2biom.Rd
new file mode 100644
index 0000000..f538de6
--- /dev/null
+++ b/man/MRexperiment2biom.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/MRexperiment2biom.R
+\name{MRexperiment2biom}
+\alias{MRexperiment2biom}
+\title{MRexperiment to biom objects}
+\usage{
+MRexperiment2biom(obj, id = NULL, norm = FALSE, log = FALSE, sl = 1000,
+  qiimeVersion = TRUE)
+}
+\arguments{
+\item{obj}{The MRexperiment object.}
+
+\item{id}{Optional id for the biom matrix.}
+
+\item{norm}{normalize count table}
+
+\item{log}{log2 transform count table}
+
+\item{sl}{scaling factor for normalized counts.}
+
+\item{qiimeVersion}{Format fData according to QIIME specifications (assumes only taxonomy in fData).}
+}
+\value{
+A biom object.
+}
+\description{
+Wrapper to convert MRexperiment objects to biom objects.
+}
+\seealso{
+\code{\link{loadMeta}} \code{\link{loadPhenoData}} \code{\link{newMRexperiment}} \code{\link{loadBiom}} \code{\link{biom2MRexperiment}}
+}
+
diff --git a/man/MRfulltable.Rd b/man/MRfulltable.Rd
new file mode 100644
index 0000000..4cfa883
--- /dev/null
+++ b/man/MRfulltable.Rd
@@ -0,0 +1,77 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/MRfulltable.R
+\name{MRfulltable}
+\alias{MRfulltable}
+\title{Table of top microbial marker gene from linear model fit including sequence
+information}
+\usage{
+MRfulltable(obj, by = 2, coef = NULL, number = 10, taxa = obj$taxa,
+  uniqueNames = FALSE, adjustMethod = "fdr", group = 0, eff = 0,
+  numberEff = FALSE, ncounts = 0, file = NULL)
+}
+\arguments{
+\item{obj}{A list containing the linear model fit produced by lmFit through
+fitZig.}
+
+\item{by}{Column number or column name specifying which coefficient or
+contrast of the linear model is of interest.}
+
+\item{coef}{Column number(s) or column name(s) specifying which coefficient
+or contrast of the linear model to display.}
+
+\item{number}{The number of bacterial features to pick out.}
+
+\item{taxa}{Taxa list.}
+
+\item{uniqueNames}{Number the various taxa.}
+
+\item{adjustMethod}{Method to adjust p-values by. Default is "FDR". Options
+include "holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr",
+"none". See \code{\link{p.adjust}} for more details.}
+
+\item{group}{One of five choices: 0,1,2,3,4. 0: the sort is ordered by a
+decreasing absolute value coefficient fit. 1: the sort is ordered by the raw
+coefficient fit in decreasing order. 2: the sort is ordered by the raw
+coefficient fit in increasing order. 3: the sort is ordered by the p-value
+of the coefficient fit in increasing order. 4: no sorting.}
+
+\item{eff}{Filter features to have at least a "eff" quantile or number of effective samples.}
+
+\item{numberEff}{Boolean, whether eff should represent quantile (default/FALSE) or number.}
+
+\item{ncounts}{Filter features to those with at least 'counts' counts.}
+
+\item{file}{Name of output file, including location, to save the table.}
+}
+\value{
+Table of the top-ranked features determined by the linear fit's
+coefficient.
+}
+\description{
+Extract a table of the top-ranked features from a linear model fit. This
+function will be updated soon to provide better flexibility similar to
+limma's topTable. This function differs from \code{link{MRcoefs}} in that it
+provides other information about the presence or absence of features to help
+ensure significant features called are moderately present.
+}
+\examples{
+
+data(lungData)
+k = grep("Extraction.Control",pData(lungData)$SampleType)
+lungTrim = lungData[,-k]
+lungTrim=filterData(lungTrim,present=30)
+lungTrim=cumNorm(lungTrim,p=0.5)
+smokingStatus = pData(lungTrim)$SmokingStatus
+mod = model.matrix(~smokingStatus)
+fit = fitZig(obj = lungTrim,mod=mod)
+# head(MRfulltable(fit))
+####
+fit = fitFeatureModel(obj = lungTrim,mod=mod)
+# head(MRfulltable(fit))
+
+}
+\seealso{
+\code{\link{fitZig}} \code{\link{fitFeatureModel}} \code{\link{MRcoefs}} \code{\link{MRtable}}
+\code{\link{fitPA}}
+}
+
diff --git a/man/MRtable.Rd b/man/MRtable.Rd
new file mode 100644
index 0000000..9d50411
--- /dev/null
+++ b/man/MRtable.Rd
@@ -0,0 +1,75 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/MRtable.R
+\name{MRtable}
+\alias{MRtable}
+\title{Table of top microbial marker gene from linear model fit including sequence
+information}
+\usage{
+MRtable(obj, by = 2, coef = NULL, number = 10, taxa = obj$taxa,
+  uniqueNames = FALSE, adjustMethod = "fdr", group = 0, eff = 0,
+  numberEff = FALSE, ncounts = 0, file = NULL)
+}
+\arguments{
+\item{obj}{Output of fitFeatureModel or fitZig.}
+
+\item{by}{Column number or column name specifying which coefficient or
+contrast of the linear model is of interest.}
+
+\item{coef}{Column number(s) or column name(s) specifying which coefficient
+or contrast of the linear model to display.}
+
+\item{number}{The number of bacterial features to pick out.}
+
+\item{taxa}{Taxa list.}
+
+\item{uniqueNames}{Number the various taxa.}
+
+\item{adjustMethod}{Method to adjust p-values by. Default is "FDR". Options
+include "holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr",
+"none". See \code{\link{p.adjust}} for more details.}
+
+\item{group}{One of five choices, 0,1,2,3,4. 0: the sort is ordered by a
+decreasing absolute value coefficient fit. 1: the sort is ordered by the raw
+coefficient fit in decreasing order. 2: the sort is ordered by the raw
+coefficient fit in increasing order. 3: the sort is ordered by the p-value
+of the coefficient fit in increasing order. 4: no sorting.}
+
+\item{eff}{Filter features to have at least a "eff" quantile or number of effective samples.}
+
+\item{numberEff}{Boolean, whether eff should represent quantile (default/FALSE) or number.}
+
+\item{ncounts}{Filter features to have at least 'counts' of counts.}
+
+\item{file}{Name of file, including location, to save the table.}
+}
+\value{
+Table of the top-ranked features determined by the linear fit's
+coefficient.
+}
+\description{
+Extract a table of the top-ranked features from a linear model fit. This
+function will be updated soon to provide better flexibility similar to
+limma's topTable. This function differs from \code{link{MRcoefs}} in that it
+provides other information about the presence or absence of features to help
+ensure significant features called are moderately present.
+}
+\examples{
+
+data(lungData)
+k = grep("Extraction.Control",pData(lungData)$SampleType)
+lungTrim = lungData[,-k]
+lungTrim=filterData(lungTrim,present=30)
+lungTrim=cumNorm(lungTrim,p=0.5)
+smokingStatus = pData(lungTrim)$SmokingStatus
+mod = model.matrix(~smokingStatus)
+fit = fitZig(obj = lungTrim,mod=mod)
+head(MRtable(fit))
+####
+fit = fitFeatureModel(obj = lungTrim,mod=mod)
+head(MRtable(fit))
+
+}
+\seealso{
+\code{\link{fitZig}} \code{\link{fitFeatureModel}} \code{\link{MRcoefs}} \code{\link{MRfulltable}}
+}
+
diff --git a/man/aggregateBySample.Rd b/man/aggregateBySample.Rd
new file mode 100644
index 0000000..20d219d
--- /dev/null
+++ b/man/aggregateBySample.Rd
@@ -0,0 +1,39 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/aggregateBySample.R
+\name{aggregateBySample}
+\alias{aggSamp}
+\alias{aggregateBySample}
+\title{Aggregates a MRexperiment object or counts matrix to by a factor.}
+\usage{
+aggregateBySample(obj, fct, aggfun = rowMeans, out = "MRexperiment")
+
+aggSamp(obj, fct, aggfun = rowMeans, out = "MRexperiment")
+}
+\arguments{
+\item{obj}{A MRexperiment object or count matrix.}
+
+\item{fct}{phenoData column name from the MRexperiment object or if count matrix object a vector of labels.}
+
+\item{aggfun}{Aggregation function.}
+
+\item{out}{Either 'MRexperiment' or 'matrix'}
+}
+\value{
+An aggregated count matrix or MRexperiment object where the new pData is a vector of `fct` levels.
+}
+\description{
+Using the phenoData information in the MRexperiment, calling aggregateBySample on a
+MRexperiment and a particular phenoData column (i.e. 'diet') will aggregate counts
+using the aggfun function (default rowMeans). Possible aggfun alternatives
+include rowMeans and rowMedians.
+}
+\examples{
+
+data(mouseData)
+aggregateBySample(mouseData[1:100,],fct="diet",aggfun=rowSums)
+# not run
+# aggregateBySample(mouseData,fct="diet",aggfun=matrixStats::rowMedians)
+# aggSamp(mouseData,fct='diet',aggfun=rowMaxs)
+
+}
+
diff --git a/man/aggregateByTaxonomy.Rd b/man/aggregateByTaxonomy.Rd
new file mode 100644
index 0000000..f958237
--- /dev/null
+++ b/man/aggregateByTaxonomy.Rd
@@ -0,0 +1,49 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/aggregateByTaxonomy.R
+\name{aggregateByTaxonomy}
+\alias{aggTax}
+\alias{aggregateByTaxonomy}
+\title{Aggregates a MRexperiment object or counts matrix to a particular level.}
+\usage{
+aggregateByTaxonomy(obj, lvl, alternate = FALSE, norm = FALSE,
+  log = FALSE, aggfun = colSums, sl = 1000, out = "MRexperiment")
+
+aggTax(obj, lvl, alternate = FALSE, norm = FALSE, log = FALSE,
+  aggfun = colSums, sl = 1000, out = "MRexperiment")
+}
+\arguments{
+\item{obj}{A MRexperiment object or count matrix.}
+
+\item{lvl}{featureData column name from the MRexperiment object or if count matrix object a vector of labels.}
+
+\item{alternate}{Use the rowname for undefined OTUs instead of aggregating to "no_match".}
+
+\item{norm}{Whether to aggregate normalized counts or not.}
+
+\item{log}{Whether or not to log2 transform the counts - if MRexperiment object.}
+
+\item{aggfun}{Aggregation function.}
+
+\item{sl}{scaling value, default is 1000.}
+
+\item{out}{Either 'MRexperiment' or 'matrix'}
+}
+\value{
+An aggregated count matrix.
+}
+\description{
+Using the featureData information in the MRexperiment, calling aggregateByTaxonomy on a
+MRexperiment and a particular featureData column (i.e. 'genus') will aggregate counts
+to the desired level using the aggfun function (default colSums). Possible aggfun alternatives
+include colMeans and colMedians.
+}
+\examples{
+
+data(mouseData)
+aggregateByTaxonomy(mouseData[1:100,],lvl="class",norm=TRUE,aggfun=colSums)
+# not run
+# aggregateByTaxonomy(mouseData,lvl="class",norm=TRUE,aggfun=colMedians)
+# aggTax(mouseData,lvl='phylum',norm=FALSE,aggfun=colSums)
+
+}
+
diff --git a/man/biom2MRexperiment.Rd b/man/biom2MRexperiment.Rd
new file mode 100644
index 0000000..ff9600d
--- /dev/null
+++ b/man/biom2MRexperiment.Rd
@@ -0,0 +1,29 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/biom2MRexperiment.R
+\name{biom2MRexperiment}
+\alias{biom2MRexperiment}
+\title{Biom to MRexperiment objects}
+\usage{
+biom2MRexperiment(obj)
+}
+\arguments{
+\item{obj}{The biom object file.}
+}
+\value{
+A MRexperiment object.
+}
+\description{
+Wrapper to convert biom files to MRexperiment objects.
+}
+\examples{
+
+library(biomformat)
+rich_dense_file = system.file("extdata", "rich_dense_otu_table.biom", package = "biomformat")
+x = biomformat::read_biom(rich_dense_file)
+biom2MRexperiment(x)
+
+}
+\seealso{
+\code{\link{loadMeta}} \code{\link{loadPhenoData}} \code{\link{newMRexperiment}} \code{\link{loadBiom}}
+}
+
diff --git a/man/calcNormFactors.Rd b/man/calcNormFactors.Rd
new file mode 100644
index 0000000..4dbe632
--- /dev/null
+++ b/man/calcNormFactors.Rd
@@ -0,0 +1,29 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/cumNorm.R
+\name{calcNormFactors}
+\alias{calcNormFactors}
+\title{Cumulative sum scaling (css) normalization factors}
+\usage{
+calcNormFactors(obj, p = cumNormStatFast(obj))
+}
+\arguments{
+\item{obj}{An MRexperiment object or matrix.}
+
+\item{p}{The pth quantile.}
+}
+\value{
+Vector of the sum up to and including a sample's pth quantile.
+}
+\description{
+Return a vector of the the sum up to and including a quantile.
+}
+\examples{
+
+data(mouseData)
+head(calcNormFactors(mouseData))
+
+}
+\seealso{
+\code{\link{fitZig}} \code{\link{cumNormStatFast}} \code{\link{cumNorm}}
+}
+
diff --git a/man/calcPosComponent.Rd b/man/calcPosComponent.Rd
new file mode 100644
index 0000000..8750dba
--- /dev/null
+++ b/man/calcPosComponent.Rd
@@ -0,0 +1,22 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitZeroLogNormal.R
+\name{calcPosComponent}
+\alias{calcPosComponent}
+\title{Positive component}
+\usage{
+calcPosComponent(mat, mod, weights)
+}
+\arguments{
+\item{mat}{A matrix of normalized counts}
+
+\item{mod}{A model matrix}
+
+\item{weights}{Weight matrix for samples and counts}
+}
+\description{
+Fit the positive (log-normal) component
+}
+\seealso{
+\code{\link{fitZeroLogNormal}} \code{\link{fitFeatureModel}}
+}
+
diff --git a/man/calcShrinkParameters.Rd b/man/calcShrinkParameters.Rd
new file mode 100644
index 0000000..fe5aed2
--- /dev/null
+++ b/man/calcShrinkParameters.Rd
@@ -0,0 +1,24 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitZeroLogNormal.R
+\name{calcShrinkParameters}
+\alias{calcShrinkParameters}
+\title{Calculate shrinkage parameters}
+\usage{
+calcShrinkParameters(fit, coef, mins2, exclude = NULL)
+}
+\arguments{
+\item{fit}{A matrix of fits as outputted by calcZeroComponent or calcPosComponent}
+
+\item{coef}{Coefficient of interest}
+
+\item{mins2}{minimum variance estimate}
+
+\item{exclude}{Vector of features to exclude when shrinking}
+}
+\description{
+Calculate the shrunken variances and variance of parameters of interest across features.
+}
+\seealso{
+\code{\link{fitZeroLogNormal}} \code{\link{fitFeatureModel}}
+}
+
diff --git a/man/calcStandardError.Rd b/man/calcStandardError.Rd
new file mode 100644
index 0000000..e4da0c9
--- /dev/null
+++ b/man/calcStandardError.Rd
@@ -0,0 +1,28 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitZeroLogNormal.R
+\name{calcStandardError}
+\alias{calcStandardError}
+\title{Calculate the zero-inflated log-normal statistic's standard error}
+\usage{
+calcStandardError(mod, fitln, fitzero, coef = 2, exclude = NULL)
+}
+\arguments{
+\item{mod}{The zero component model matrix}
+
+\item{fitln}{A matrix with parameters from the log-normal fit}
+
+\item{fitzero}{A matrix with parameters from the logistic fit}
+
+\item{coef}{Coefficient of interest}
+
+\item{exclude}{List of features to exclude}
+}
+\description{
+Calculat the se for the model. Code modified from
+"Adjusting for covariates in zero-inflated gamma and 
+zero-inflated log-normal models for semicontinuous data", ED Mills
+}
+\seealso{
+\code{\link{fitZeroLogNormal}} \code{\link{fitFeatureModel}}
+}
+
diff --git a/man/calcZeroAdjustment.Rd b/man/calcZeroAdjustment.Rd
new file mode 100644
index 0000000..fb8dd1e
--- /dev/null
+++ b/man/calcZeroAdjustment.Rd
@@ -0,0 +1,28 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitZeroLogNormal.R
+\name{calcZeroAdjustment}
+\alias{calcZeroAdjustment}
+\title{Calculate the zero-inflated component's adjustment factor}
+\usage{
+calcZeroAdjustment(fitln, fitzero, mod, coef, exclude = NULL)
+}
+\arguments{
+\item{fitln}{A matrix with parameters from the log-normal fit}
+
+\item{fitzero}{A matrix with parameters from the logistic fit}
+
+\item{mod}{The zero component model matrix}
+
+\item{coef}{Coefficient of interest}
+
+\item{exclude}{List of features to exclude}
+}
+\description{
+Calculate the log ratio of average marginal probabilities for each sample
+having a positive count. This becomes the adjustment factor for the log 
+fold change.
+}
+\seealso{
+\code{\link{fitZeroLogNormal}} \code{\link{fitFeatureModel}}
+}
+
diff --git a/man/calcZeroComponent.Rd b/man/calcZeroComponent.Rd
new file mode 100644
index 0000000..7e2e658
--- /dev/null
+++ b/man/calcZeroComponent.Rd
@@ -0,0 +1,22 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitZeroLogNormal.R
+\name{calcZeroComponent}
+\alias{calcZeroComponent}
+\title{Zero component}
+\usage{
+calcZeroComponent(mat, mod, weights)
+}
+\arguments{
+\item{mat}{A matrix of normalized counts}
+
+\item{mod}{A model matrix}
+
+\item{weights}{Weight matrix for samples and counts}
+}
+\description{
+Fit the zero (logisitic) component
+}
+\seealso{
+\code{\link{fitZeroLogNormal}} \code{\link{fitFeatureModel}}
+}
+
diff --git a/man/calculateEffectiveSamples.Rd b/man/calculateEffectiveSamples.Rd
new file mode 100644
index 0000000..9398662
--- /dev/null
+++ b/man/calculateEffectiveSamples.Rd
@@ -0,0 +1,24 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/calculateEffectiveSamples.R
+\name{calculateEffectiveSamples}
+\alias{calculateEffectiveSamples}
+\title{Estimated effective samples per feature}
+\usage{
+calculateEffectiveSamples(obj)
+}
+\arguments{
+\item{obj}{The output of fitZig run on a MRexperiment object.}
+}
+\value{
+A list of the estimated effective samples per feature.
+}
+\description{
+Calculates the number of estimated effective samples per feature from the output
+of a fitZig run. The estimated effective samples per feature is calculated as the
+sum_1^n (n = number of samples) 1-z_i where z_i is the posterior probability a feature
+belongs to the technical distribution.
+}
+\seealso{
+\code{\link{fitZig}} \code{\link{MRcoefs}} \code{\link{MRfulltable}}
+}
+
diff --git a/man/correctIndices.Rd b/man/correctIndices.Rd
new file mode 100644
index 0000000..14e1643
--- /dev/null
+++ b/man/correctIndices.Rd
@@ -0,0 +1,36 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/correlationTest.R
+\name{correctIndices}
+\alias{correctIndices}
+\title{Calculate the correct indices for the output of correlationTest}
+\usage{
+correctIndices(n)
+}
+\arguments{
+\item{n}{The number of features compared by correlationTest (nrow(mat)).}
+}
+\value{
+A vector of the indices for an upper triangular matrix.
+}
+\description{
+Consider the upper triangular portion of a matrix of size nxn. Results from the \code{correlationTest} are output
+as the combination of two vectors, correlation statistic and p-values. The order of the output is 1vs2, 1vs3, 1vs4, etc.
+The correctIndices returns the correct indices to fill a correlation matrix or correlation-pvalue matrix.
+}
+\examples{
+
+data(mouseData)
+mat = MRcounts(mouseData)[55:60,]
+cors = correlationTest(mat)
+ind  = correctIndices(nrow(mat))
+
+cormat = as.matrix(dist(mat))
+cormat[cormat>0] = 0
+cormat[upper.tri(cormat)][ind] = cors[,1]
+table(cormat[1,-1] - cors[1:5,1])
+
+}
+\seealso{
+\code{\link{correlationTest}}
+}
+
diff --git a/man/correlationTest.Rd b/man/correlationTest.Rd
new file mode 100644
index 0000000..e5a604b
--- /dev/null
+++ b/man/correlationTest.Rd
@@ -0,0 +1,61 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/correlationTest.R
+\name{correlationTest}
+\alias{corTest}
+\alias{correlationTest}
+\title{Correlation of each row of a matrix or MRexperiment object}
+\usage{
+correlationTest(obj, y = NULL, method = "pearson",
+  alternative = "two.sided", norm = TRUE, log = TRUE, cores = 1,
+  override = FALSE, ...)
+}
+\arguments{
+\item{obj}{A MRexperiment object or count matrix.}
+
+\item{y}{Vector of length ncol(obj) to compare to.}
+
+\item{method}{One of 'pearson','spearman', or 'kendall'.}
+
+\item{alternative}{Indicates the alternative hypothesis and must be one of 'two.sided', 'greater' (positive) or 'less'(negative). You can specify just the initial letter.}
+
+\item{norm}{Whether to aggregate normalized counts or not - if MRexperiment object.}
+
+\item{log}{Whether or not to log2 transform the counts - if MRexperiment object.}
+
+\item{cores}{Number of cores to use.}
+
+\item{override}{If the number of rows to test is over a thousand the test will not commence (unless override==TRUE).}
+
+\item{...}{Extra parameters for mclapply.}
+}
+\value{
+A matrix of size choose(number of rows, 2) by 2. The first column corresponds to the correlation value. The second column the p-value.
+}
+\description{
+Calculates the (pairwise) correlation statistics and associated p-values of a matrix
+or the correlation of each row with a vector.
+}
+\examples{
+
+# Pairwise correlation of raw counts
+data(mouseData)
+cors = correlationTest(mouseData[1:10,],norm=FALSE,log=FALSE)
+head(cors)
+
+mat = MRcounts(mouseData)[1:10,]
+cormat = as.matrix(dist(mat)) # Creating a matrix
+cormat[cormat>0] = 0 # Creating an empty matrix
+ind = correctIndices(nrow(mat))
+cormat[upper.tri(cormat)][ind] = cors[,1] 
+table(cormat[1,-1] - cors[1:9,1])
+
+# Correlation of raw counts with a vector (library size in this case)
+data(mouseData)
+cors = correlationTest(mouseData[1:10,],libSize(mouseData),norm=FALSE,log=FALSE)
+head(cors)
+
+}
+\seealso{
+\code{\link{correctIndices}}
+}
+
diff --git a/man/cumNorm.Rd b/man/cumNorm.Rd
new file mode 100644
index 0000000..4ba687c
--- /dev/null
+++ b/man/cumNorm.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/cumNorm.R
+\name{cumNorm}
+\alias{cumNorm}
+\title{Cumulative sum scaling normalization}
+\usage{
+cumNorm(obj, p = cumNormStatFast(obj))
+}
+\arguments{
+\item{obj}{An MRexperiment object.}
+
+\item{p}{The pth quantile.}
+}
+\value{
+Object with the normalization factors stored as 
+a vector of the sum up to and including a sample's pth quantile.
+}
+\description{
+Calculates each column's quantile and calculates the sum up to and including
+that quantile.
+}
+\examples{
+
+data(mouseData)
+cumNorm(mouseData)
+head(normFactors(mouseData))
+
+}
+\seealso{
+\code{\link{fitZig}} \code{\link{cumNormStat}}
+}
+
diff --git a/man/cumNormMat.Rd b/man/cumNormMat.Rd
new file mode 100644
index 0000000..8e48230
--- /dev/null
+++ b/man/cumNormMat.Rd
@@ -0,0 +1,33 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/cumNormMat.R
+\name{cumNormMat}
+\alias{cumNormMat}
+\title{Cumulative sum scaling factors.}
+\usage{
+cumNormMat(obj, p = cumNormStatFast(obj), sl = 1000)
+}
+\arguments{
+\item{obj}{A matrix or MRexperiment object.}
+
+\item{p}{The pth quantile.}
+
+\item{sl}{The value to scale by (default=1000).}
+}
+\value{
+Returns a matrix normalized by scaling counts up to and including
+the pth quantile.
+}
+\description{
+Calculates each column's quantile and calculates the sum up to and including
+that quantile.
+}
+\examples{
+
+data(mouseData)
+head(cumNormMat(mouseData))
+
+}
+\seealso{
+\code{\link{fitZig}} \code{\link{cumNorm}}
+}
+
diff --git a/man/cumNormStat.Rd b/man/cumNormStat.Rd
new file mode 100644
index 0000000..1a2c967
--- /dev/null
+++ b/man/cumNormStat.Rd
@@ -0,0 +1,39 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/cumNormStat.R
+\name{cumNormStat}
+\alias{cumNormStat}
+\title{Cumulative sum scaling percentile selection}
+\usage{
+cumNormStat(obj, qFlag = TRUE, pFlag = FALSE, rel = 0.1, ...)
+}
+\arguments{
+\item{obj}{A matrix or MRexperiment object.}
+
+\item{qFlag}{Flag to either calculate the proper percentile using
+R's step-wise quantile function or approximate function.}
+
+\item{pFlag}{Plot the relative difference of the median deviance from the reference.}
+
+\item{rel}{Cutoff for the relative difference from one median difference
+from the reference to the next}
+
+\item{...}{Applicable if pFlag == TRUE. Additional plotting parameters.}
+}
+\value{
+Percentile for which to scale data
+}
+\description{
+Calculates the percentile for which to sum counts up to and scale by.
+cumNormStat might be deprecated one day. Deviates from methods in Nature Methods paper
+by making use row means for generating reference.
+}
+\examples{
+
+data(mouseData)
+p = round(cumNormStat(mouseData,pFlag=FALSE),digits=2)
+
+}
+\seealso{
+\code{\link{fitZig}} \code{\link{cumNorm}} \code{\link{cumNormStatFast}}
+}
+
diff --git a/man/cumNormStatFast.Rd b/man/cumNormStatFast.Rd
new file mode 100644
index 0000000..9f9287e
--- /dev/null
+++ b/man/cumNormStatFast.Rd
@@ -0,0 +1,36 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/cumNormStatFast.R
+\name{cumNormStatFast}
+\alias{cumNormStatFast}
+\title{Cumulative sum scaling percentile selection}
+\usage{
+cumNormStatFast(obj, pFlag = FALSE, rel = 0.1, ...)
+}
+\arguments{
+\item{obj}{A matrix or MRexperiment object.}
+
+\item{pFlag}{Plot the median difference quantiles.}
+
+\item{rel}{Cutoff for the relative difference from one median difference
+from the reference to the next.}
+
+\item{...}{Applicable if pFlag == TRUE. Additional plotting parameters.}
+}
+\value{
+Percentile for which to scale data
+}
+\description{
+Calculates the percentile for which to sum counts up to and scale by. Faster
+version than available in cumNormStat. Deviates from methods described in Nature Methods by
+making use of ro means for reference.
+}
+\examples{
+
+data(mouseData)
+p = round(cumNormStatFast(mouseData,pFlag=FALSE),digits=2)
+
+}
+\seealso{
+\code{\link{fitZig}} \code{\link{cumNorm}} \code{\link{cumNormStat}}
+}
+
diff --git a/man/doCountMStep.Rd b/man/doCountMStep.Rd
new file mode 100644
index 0000000..941d28f
--- /dev/null
+++ b/man/doCountMStep.Rd
@@ -0,0 +1,45 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/doCountMStep.R
+\name{doCountMStep}
+\alias{doCountMStep}
+\title{Compute the Maximization step calculation for features still active.}
+\usage{
+doCountMStep(z, y, mmCount, stillActive, fit2 = NULL, dfMethod = "modified")
+}
+\arguments{
+\item{z}{Matrix (m x n) of estimate responsibilities (probabilities that a
+count comes from a spike distribution at 0).}
+
+\item{y}{Matrix (m x n) of count observations.}
+
+\item{mmCount}{Model matrix for the count distribution.}
+
+\item{stillActive}{Boolean vector of size M, indicating whether a feature
+converged or not.}
+
+\item{fit2}{Previous fit of the count model.}
+
+\item{dfMethod}{Either 'default' or 'modified' (by responsibilities)}
+}
+\value{
+Update matrix (m x n) of estimate responsibilities (probabilities
+that a count comes from a spike distribution at 0).
+}
+\description{
+Maximization step is solved by weighted least squares.  The function also
+computes counts residuals.
+}
+\details{
+Maximum-likelihood estimates are approximated using the EM algorithm where
+we treat mixture membership $delta_ij$ = 1 if $y_ij$ is generated from the
+zero point mass as latent indicator variables. The density is defined as
+$f_zig(y_ij = pi_j(S_j)*f_0(y_ij) +(1-pi_j (S_j)) *
+f_count(y_ij;mu_i,sigma_i^2)$. The log-likelihood in this extended model is
+$(1-delta_ij) log f_count(y;mu_i,sigma_i^2 )+delta_ij log
+pi_j(s_j)+(1-delta_ij)log (1-pi_j (s_j))$. The responsibilities are defined
+as $z_ij = pr(delta_ij=1 | data)$.
+}
+\seealso{
+\code{\link{fitZig}}
+}
+
diff --git a/man/doEStep.Rd b/man/doEStep.Rd
new file mode 100644
index 0000000..93bccc2
--- /dev/null
+++ b/man/doEStep.Rd
@@ -0,0 +1,37 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/doEStep.R
+\name{doEStep}
+\alias{doEStep}
+\title{Compute the Expectation step.}
+\usage{
+doEStep(countResiduals, zeroResiduals, zeroIndices)
+}
+\arguments{
+\item{countResiduals}{Residuals from the count model.}
+
+\item{zeroResiduals}{Residuals from the zero model.}
+
+\item{zeroIndices}{Index (matrix m x n) of counts that are zero/non-zero.}
+}
+\value{
+Updated matrix (m x n) of estimate responsibilities (probabilities
+that a count comes from a spike distribution at 0).
+}
+\description{
+Estimates the responsibilities $z_ij = fracpi_j cdot I_0(y_ijpi_j cdot
+I_0(y_ij + (1-pi_j) cdot f_count(y_ij
+}
+\details{
+Maximum-likelihood estimates are approximated using the EM algorithm where
+we treat mixture membership $delta_ij$ = 1 if $y_ij$ is generated from the
+zero point mass as latent indicator variables. The density is defined as
+$f_zig(y_ij = pi_j(S_j) cdot f_0(y_ij) +(1-pi_j (S_j))cdot
+f_count(y_ij;mu_i,sigma_i^2)$. The log-likelihood in this extended model is
+$(1-delta_ij) log f_count(y;mu_i,sigma_i^2 )+delta_ij log
+pi_j(s_j)+(1-delta_ij)log (1-pi_j (sj))$. The responsibilities are defined
+as $z_ij = pr(delta_ij=1 | data)$.
+}
+\seealso{
+\code{\link{fitZig}}
+}
+
diff --git a/man/doZeroMStep.Rd b/man/doZeroMStep.Rd
new file mode 100644
index 0000000..c187527
--- /dev/null
+++ b/man/doZeroMStep.Rd
@@ -0,0 +1,38 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/doZeroMStep.R
+\name{doZeroMStep}
+\alias{doZeroMStep}
+\title{Compute the zero Maximization step.}
+\usage{
+doZeroMStep(z, zeroIndices, mmZero)
+}
+\arguments{
+\item{z}{Matrix (m x n) of estimate responsibilities (probabilities that a
+count comes from a spike distribution at 0).}
+
+\item{zeroIndices}{Index (matrix m x n) of counts that are zero/non-zero.}
+
+\item{mmZero}{The zero model, the model matrix to account for the change in
+the number of OTUs observed as a linear effect of the depth of coverage.}
+}
+\value{
+List of the zero fit (zero mean model) coefficients, variance -
+scale parameter (scalar), and normalized residuals of length
+sum(zeroIndices).
+}
+\description{
+Performs Maximization step calculation for the mixture components. Uses
+least squares to fit the parameters of the mean of the logistic
+distribution. $$ pi_j = sum_i^M frac1Mz_ij $$ Maximum-likelihood estimates
+are approximated using the EM algorithm where we treat mixture membership
+$delta_ij$ = 1 if $y_ij$ is generated from the zero point mass as latent
+indicator variables. The density is defined as $f_zig(y_ij = pi_j(S_j) cdot
+f_0(y_ij) +(1-pi_j (S_j))cdot f_count(y_ij;mu_i,sigma_i^2)$. The
+log-likelihood in this extended model is $(1-delta_ij) log
+f_count(y;mu_i,sigma_i^2 )+delta_ij log pi_j(s_j)+(1-delta_ij)log (1-pi_j
+(sj))$. The responsibilities are defined as $z_ij = pr(delta_ij=1 | data)$.
+}
+\seealso{
+\code{\link{fitZig}}
+}
+
diff --git a/man/expSummary.Rd b/man/expSummary.Rd
new file mode 100644
index 0000000..61b1469
--- /dev/null
+++ b/man/expSummary.Rd
@@ -0,0 +1,31 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/allClasses.R
+\docType{methods}
+\name{expSummary}
+\alias{expSummary}
+\alias{expSummary,MRexperiment-method}
+\title{Access MRexperiment object experiment data}
+\usage{
+expSummary(obj)
+}
+\arguments{
+\item{obj}{a \code{MRexperiment} object.}
+}
+\value{
+Experiment summary table
+}
+\description{
+The expSummary vectors represent the column (sample specific) sums of
+features, i.e. the total number of reads for a sample, libSize and also the
+normalization factors, normFactor.
+}
+\examples{
+
+data(mouseData)
+expSummary(mouseData)
+
+}
+\author{
+Joseph N. Paulson, jpaulson at umiacs.umd.edu
+}
+
diff --git a/man/exportMat.Rd b/man/exportMat.Rd
new file mode 100644
index 0000000..be8eed0
--- /dev/null
+++ b/man/exportMat.Rd
@@ -0,0 +1,40 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/exportMat.R
+\name{exportMat}
+\alias{exportMat}
+\alias{exportMatrix}
+\title{Export the normalized MRexperiment dataset as a matrix.}
+\usage{
+exportMat(obj, log = TRUE, norm = TRUE, sep = "\\t",
+  file = "~/Desktop/matrix.tsv")
+}
+\arguments{
+\item{obj}{A MRexperiment object or count matrix.}
+
+\item{log}{Whether or not to log transform the counts - if MRexperiment object.}
+
+\item{norm}{Whether or not to normalize the counts - if MRexperiment object.}
+
+\item{sep}{Separator for writing out the count matrix.}
+
+\item{file}{Output file name.}
+}
+\value{
+NA
+}
+\description{
+This function allows the user to take a dataset of counts and output the
+dataset to the user's workspace as a tab-delimited file, etc.
+}
+\examples{
+
+data(lungData)
+dataDirectory <- system.file("extdata", package="metagenomeSeq")
+exportMat(lungData[,1:5],file=file.path(dataDirectory,"tmp.tsv"))
+head(read.csv(file=file.path(dataDirectory,"tmp.tsv"),sep="\\t"))
+
+}
+\seealso{
+\code{\link{cumNorm}}
+}
+
diff --git a/man/exportStats.Rd b/man/exportStats.Rd
new file mode 100644
index 0000000..2a130a1
--- /dev/null
+++ b/man/exportStats.Rd
@@ -0,0 +1,35 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/exportStats.R
+\name{exportStats}
+\alias{exportStats}
+\title{Various statistics of the count data.}
+\usage{
+exportStats(obj, p = cumNormStat(obj), file = "~/Desktop/res.stats.tsv")
+}
+\arguments{
+\item{obj}{A MRexperiment object with count data.}
+
+\item{p}{Quantile value to calculate the scaling factor and quantiles for
+the various samples.}
+
+\item{file}{Output file name.}
+}
+\value{
+None.
+}
+\description{
+A matrix of values for each sample. The matrix consists of sample ids, the
+sample scaling factor, quantile value, the number identified features, and library size (depth of coverage).
+}
+\examples{
+
+data(lungData)
+dataDirectory <- system.file("extdata", package="metagenomeSeq")
+exportStats(lungData[,1:5],file=file.path(dataDirectory,"tmp.tsv"))
+head(read.csv(file=file.path(dataDirectory,"tmp.tsv"),sep="\\t"))
+
+}
+\seealso{
+\code{\link{cumNorm}} \code{\link{quantile}}
+}
+
diff --git a/man/extractMR.Rd b/man/extractMR.Rd
new file mode 100644
index 0000000..734e9be
--- /dev/null
+++ b/man/extractMR.Rd
@@ -0,0 +1,30 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/mergeMRexperiments.R
+\name{extractMR}
+\alias{extractMR}
+\title{Extract the essentials of an MRexperiment.}
+\usage{
+extractMR(obj)
+}
+\arguments{
+\item{obj}{MRexperiment-class object.}
+}
+\value{
+\itemize{A list containing:
+\item     counts        : Count data
+\item     librarySize         : The column sums / library size / sequencing depth 
+\item     normFactors          : The normalization scaling factors
+\item     pheno  : phenotype table
+\item     feat  : feature table
+}
+}
+\description{
+Extract the essentials of an MRexperiment.
+}
+\examples{
+
+data(mouseData)
+head(metagenomeSeq:::extractMR(mouseData))
+
+}
+
diff --git a/man/filterData.Rd b/man/filterData.Rd
new file mode 100644
index 0000000..dd5eddb
--- /dev/null
+++ b/man/filterData.Rd
@@ -0,0 +1,29 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/filterData.R
+\name{filterData}
+\alias{filterData}
+\title{Filter datasets according to no. features present in features with at least a certain depth.}
+\usage{
+filterData(obj, present = 1, depth = 1000)
+}
+\arguments{
+\item{obj}{A MRexperiment object or count matrix.}
+
+\item{present}{Features with at least 'present' postive samples.}
+
+\item{depth}{Sampls with at least this much depth of coverage}
+}
+\value{
+A MRexperiment object.
+}
+\description{
+Filter the data based on the number of present features after filtering samples by depth of coverage.
+There are many ways to filter the object, this is just one way.
+}
+\examples{
+
+data(mouseData)
+filterData(mouseData)
+
+}
+
diff --git a/man/fitDO.Rd b/man/fitDO.Rd
new file mode 100644
index 0000000..43f0004
--- /dev/null
+++ b/man/fitDO.Rd
@@ -0,0 +1,51 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitDO.R
+\name{fitDO}
+\alias{fitDO}
+\title{Wrapper to calculate Discovery Odds Ratios on feature values.}
+\usage{
+fitDO(obj, cl, norm = TRUE, log = TRUE, adjust.method = "fdr",
+  cores = 1, ...)
+}
+\arguments{
+\item{obj}{A MRexperiment object with a count matrix, or a simple count
+matrix.}
+
+\item{cl}{Group comparison}
+
+\item{norm}{Whether or not to normalize the counts - if MRexperiment object.}
+
+\item{log}{Whether or not to log2 transform the counts - if MRexperiment object.}
+
+\item{adjust.method}{Method to adjust p-values by. Default is "FDR". Options
+include "holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr",                                                                                                                            
+"none". See \code{\link{p.adjust}} for more details.}
+
+\item{cores}{Number of cores to use.}
+
+\item{...}{Extra options for makeCluster}
+}
+\value{
+Matrix of odds ratios, p-values, lower and upper confidence intervals
+}
+\description{
+This function returns a data frame of p-values, odds ratios, lower and upper
+confidence limits for every row of a matrix. The discovery odds ratio is calculated
+as using Fisher's exact test on actual counts. The test's hypothesis is whether 
+or not the discovery of counts for a feature (of all counts) is found in greater proportion
+in a particular group.
+}
+\examples{
+
+data(lungData)
+k = grep("Extraction.Control",pData(lungData)$SampleType)
+lungTrim = lungData[,-k]
+lungTrim = lungTrim[-which(rowSums(MRcounts(lungTrim)>0)<20),]
+res = fitDO(lungTrim,pData(lungTrim)$SmokingStatus);
+head(res)
+
+}
+\seealso{
+\code{\link{cumNorm}} \code{\link{fitZig}} \code{\link{fitPA}} \code{\link{fitMeta}}
+}
+
diff --git a/man/fitFeatureModel.Rd b/man/fitFeatureModel.Rd
new file mode 100644
index 0000000..362c50b
--- /dev/null
+++ b/man/fitFeatureModel.Rd
@@ -0,0 +1,53 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitFeatureModel.R
+\name{fitFeatureModel}
+\alias{fitFeatureModel}
+\title{Computes differential abundance analysis using a zero-inflated log-normal model}
+\usage{
+fitFeatureModel(obj, mod, coef = 2, B = 1, szero = FALSE, spos = TRUE)
+}
+\arguments{
+\item{obj}{A MRexperiment object with count data.}
+
+\item{mod}{The model for the count distribution.}
+
+\item{coef}{Coefficient of interest to grab log fold-changes.}
+
+\item{B}{Number of bootstraps to perform if >1. If >1 performs permutation test.}
+
+\item{szero}{TRUE/FALSE, shrink zero component parameters.}
+
+\item{spos}{TRUE/FALSE, shrink positive component parameters.}
+}
+\value{
+A list of objects including:
+\itemize{
+ \item{call - the call made to fitFeatureModel}
+ \item{fitZeroLogNormal  - list of parameter estimates for the zero-inflated log normal model}
+ \item{design - model matrix}
+ \item{taxa - taxa names}
+ \item{counts - count matrix}
+ \item{pvalues - calculated p-values}
+ \item{permuttedfits - permutted z-score estimates under the null}
+}
+}
+\description{
+Wrapper to actually run zero-inflated log-normal model given a MRexperiment object
+and model matrix. User can decide to shrink parameter estimates.
+}
+\examples{
+
+data(lungData)
+lungData = lungData[,-which(is.na(pData(lungData)$SmokingStatus))]
+lungData=filterData(lungData,present=30,depth=1)
+lungData <- cumNorm(lungData, p=.5)
+s <- normFactors(lungData)
+pd <- pData(lungData)
+mod <- model.matrix(~1+SmokingStatus, data=pd)
+lungres1 = fitFeatureModel(lungData,mod)
+
+}
+\seealso{
+\code{\link{cumNorm}}
+}
+
diff --git a/man/fitLogNormal.Rd b/man/fitLogNormal.Rd
new file mode 100644
index 0000000..4c422bf
--- /dev/null
+++ b/man/fitLogNormal.Rd
@@ -0,0 +1,46 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitLogNormal.R
+\name{fitLogNormal}
+\alias{fitLogNormal}
+\title{Computes a log-normal linear model and permutation based p-values.}
+\usage{
+fitLogNormal(obj, mod, useCSSoffset = TRUE, B = 1000, coef = 2,
+  sl = 1000)
+}
+\arguments{
+\item{obj}{A MRexperiment object with count data.}
+
+\item{mod}{The model for the count distribution.}
+
+\item{useCSSoffset}{Boolean, whether to include the default scaling
+parameters in the model or not.}
+
+\item{B}{Number of permutations.}
+
+\item{coef}{The coefficient of interest.}
+
+\item{sl}{The value to scale by (default=1000).}
+}
+\value{
+Call made, fit object from lmFit, t-statistics and p-values for each feature.
+}
+\description{
+Wrapper to perform the permutation test on the t-statistic. This is the original
+method employed by metastats (for non-sparse large samples). We include CSS normalization
+though (optional) and log2 transform the data. In this method the null distribution is not assumed to be a t-dist.
+}
+\examples{
+
+# This is a simple demonstration
+data(lungData)
+k = grep("Extraction.Control",pData(lungData)$SampleType)
+lungTrim = lungData[,-k]
+k = which(rowSums(MRcounts(lungTrim)>0)<30)
+lungTrim = cumNorm(lungTrim)
+lungTrim = lungTrim[-k,]
+smokingStatus = pData(lungTrim)$SmokingStatus
+mod = model.matrix(~smokingStatus)
+fit = fitLogNormal(obj = lungTrim,mod=mod,B=1)
+
+}
+
diff --git a/man/fitMultipleTimeSeries.Rd b/man/fitMultipleTimeSeries.Rd
new file mode 100644
index 0000000..79a19a2
--- /dev/null
+++ b/man/fitMultipleTimeSeries.Rd
@@ -0,0 +1,45 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitTimeSeries.R
+\name{fitMultipleTimeSeries}
+\alias{fitMultipleTimeSeries}
+\title{Discover differentially abundant time intervals for all bacteria}
+\usage{
+fitMultipleTimeSeries(obj, lvl = NULL, B = 1, ...)
+}
+\arguments{
+\item{obj}{metagenomeSeq MRexperiment-class object.}
+
+\item{lvl}{Vector or name of column in featureData of MRexperiment-class object for aggregating counts (if not OTU level).}
+
+\item{B}{Number of permutations to perform.}
+
+\item{...}{Options for \code{\link{fitTimeSeries}}, except feature.}
+}
+\value{
+List of lists of matrices of time point intervals of interest, Difference in abundance area and p-value, fit, area permutations.
+
+A list of lists for which each includes:
+\itemize{
+ \item{timeIntervals - Matrix of time point intervals of interest, area of differential abundance, and pvalue.}
+ \item{data  - Data frame of abundance, class indicator, time, and id input.}
+ \item{fit - Data frame of fitted values of the difference in abundance, standard error estimates and timepoints interpolated over.}
+ \item{perm - Differential abundance area estimates for each permutation.}
+ \item{call - Function call.}
+}
+}
+\description{
+Calculate time intervals of significant differential abundance over all
+bacteria of a particularly specified level (lvl). If not lvl is specified,
+all OTUs are analyzed. Warning, function can take a while
+}
+\examples{
+
+data(mouseData)
+res = fitMultipleTimeSeries(obj=mouseData,lvl='phylum',class="status",
+          id="mouseID",time="relativeTime",B=1)
+
+}
+\seealso{
+\code{\link{cumNorm}} \code{\link{fitSSTimeSeries}} \code{\link{fitTimeSeries}}
+}
+
diff --git a/man/fitPA.Rd b/man/fitPA.Rd
new file mode 100644
index 0000000..28dde21
--- /dev/null
+++ b/man/fitPA.Rd
@@ -0,0 +1,45 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitPA.R
+\name{fitPA}
+\alias{fitPA}
+\title{Wrapper to run fisher's test on presence/absence of a feature.}
+\usage{
+fitPA(obj, cl, thres = 0, adjust.method = "fdr", cores = 1, ...)
+}
+\arguments{
+\item{obj}{A MRexperiment object with a count matrix, or a simple count
+matrix.}
+
+\item{cl}{Group comparison}
+
+\item{thres}{Threshold for defining presence/absence.}
+
+\item{adjust.method}{Method to adjust p-values by. Default is "FDR". Options
+include "holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr",
+"none". See \code{\link{p.adjust}} for more details.}
+
+\item{cores}{Number of cores to use.}
+
+\item{...}{Extra parameters for makeCluster}
+}
+\value{
+Matrix of odds ratios, p-values, lower and upper confidence intervals
+}
+\description{
+This function returns a data frame of p-values, odds ratios, lower and upper
+confidence limits for every row of a matrix.
+}
+\examples{
+
+data(lungData)
+k = grep("Extraction.Control",pData(lungData)$SampleType)
+lungTrim = lungData[,-k]
+lungTrim = lungTrim[-which(rowSums(MRcounts(lungTrim)>0)<20),]
+res = fitPA(lungTrim,pData(lungTrim)$SmokingStatus);
+head(res)
+
+}
+\seealso{
+\code{\link{cumNorm}} \code{\link{fitZig}} \code{\link{fitDO}} \code{\link{fitMeta}}
+}
+
diff --git a/man/fitSSTimeSeries.Rd b/man/fitSSTimeSeries.Rd
new file mode 100644
index 0000000..8292fd0
--- /dev/null
+++ b/man/fitSSTimeSeries.Rd
@@ -0,0 +1,73 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitTimeSeries.R
+\name{fitSSTimeSeries}
+\alias{fitSSTimeSeries}
+\title{Discover differentially abundant time intervals using SS-Anova}
+\usage{
+fitSSTimeSeries(obj, formula, feature, class, time, id, lvl = NULL,
+  include = c("class", "time:class"), C = 0, B = 1000, norm = TRUE,
+  log = TRUE, sl = 1000, ...)
+}
+\arguments{
+\item{obj}{metagenomeSeq MRexperiment-class object.}
+
+\item{formula}{Formula for ssanova. Of the form: abundance ~ ... where ... includes any pData slot value.}
+
+\item{feature}{Name or row of feature of interest.}
+
+\item{class}{Name of column in phenoData of MRexperiment-class object for class memberhip.}
+
+\item{time}{Name of column in phenoData of MRexperiment-class object for relative time.}
+
+\item{id}{Name of column in phenoData of MRexperiment-class object for sample id.}
+
+\item{lvl}{Vector or name of column in featureData of MRexperiment-class object for aggregating counts (if not OTU level).}
+
+\item{include}{Parameters to include in prediction.}
+
+\item{C}{Value for which difference function has to be larger or smaller than (default 0).}
+
+\item{B}{Number of permutations to perform}
+
+\item{norm}{When aggregating counts to normalize or not.}
+
+\item{log}{Log2 transform.}
+
+\item{sl}{Scaling value.}
+
+\item{...}{Options for ssanova}
+}
+\value{
+List of matrix of time point intervals of interest, Difference in abundance area and p-value, fit, area permutations, and call.
+
+A list of objects including:
+\itemize{
+ \item{timeIntervals - Matrix of time point intervals of interest, area of differential abundance, and pvalue.}
+ \item{data  - Data frame of abundance, class indicator, time, and id input.}
+ \item{fit - Data frame of fitted values of the difference in abundance, standard error estimates and timepoints interpolated over.}
+ \item{perm - Differential abundance area estimates for each permutation.}
+ \item{call - Function call.}
+}
+}
+\description{
+Calculate time intervals of interest using SS-Anova fitted models.
+Fitting is performed uses Smoothing Spline ANOVA (SS-Anova) to find interesting intervals of time. 
+Given observations at different time points for two groups, fitSSTimeSeries 
+calculates a  function that models the difference in abundance between two 
+groups across all time. Using permutations we estimate a null distribution 
+of areas for the time intervals of interest and report significant intervals of time.
+Use of the function for analyses should cite:
+"Finding regions of interest in high throughput genomics data using smoothing splines"
+Talukder H, Paulson JN, Bravo HC. (In preparation)
+}
+\examples{
+
+data(mouseData)
+res = fitSSTimeSeries(obj=mouseData,feature="Actinobacteria",
+   class="status",id="mouseID",time="relativeTime",lvl='class',B=2)
+
+}
+\seealso{
+\code{\link{cumNorm}} \code{\link{ssFit}} \code{\link{ssIntervalCandidate}} \code{\link{ssPerm}} \code{\link{ssPermAnalysis}} \code{\link{plotTimeSeries}}
+}
+
diff --git a/man/fitTimeSeries.Rd b/man/fitTimeSeries.Rd
new file mode 100644
index 0000000..c2d8f35
--- /dev/null
+++ b/man/fitTimeSeries.Rd
@@ -0,0 +1,68 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitTimeSeries.R
+\name{fitTimeSeries}
+\alias{fitTimeSeries}
+\title{Discover differentially abundant time intervals}
+\usage{
+fitTimeSeries(obj, formula, feature, class, time, id, method = c("ssanova"),
+  lvl = NULL, include = c("class", "time:class"), C = 0, B = 1000,
+  norm = TRUE, log = TRUE, sl = 1000, ...)
+}
+\arguments{
+\item{obj}{metagenomeSeq MRexperiment-class object.}
+
+\item{formula}{Formula for ssanova. Of the form: abundance ~ ... where ... includes any pData slot value.}
+
+\item{feature}{Name or row of feature of interest.}
+
+\item{class}{Name of column in phenoData of MRexperiment-class object for class memberhip.}
+
+\item{time}{Name of column in phenoData of MRexperiment-class object for relative time.}
+
+\item{id}{Name of column in phenoData of MRexperiment-class object for sample id.}
+
+\item{method}{Method to estimate time intervals of differentially abundant bacteria (only ssanova method implemented currently).}
+
+\item{lvl}{Vector or name of column in featureData of MRexperiment-class object for aggregating counts (if not OTU level).}
+
+\item{include}{Parameters to include in prediction.}
+
+\item{C}{Value for which difference function has to be larger or smaller than (default 0).}
+
+\item{B}{Number of permutations to perform.}
+
+\item{norm}{When aggregating counts to normalize or not.}
+
+\item{log}{Log2 transform.}
+
+\item{sl}{Scaling value.}
+
+\item{...}{Options for ssanova}
+}
+\value{
+List of matrix of time point intervals of interest, Difference in abundance area and p-value, fit, area permutations, and call.
+
+A list of objects including:
+\itemize{
+ \item{timeIntervals - Matrix of time point intervals of interest, area of differential abundance, and pvalue.}
+ \item{data  - Data frame of abundance, class indicator, time, and id input.}
+ \item{fit - Data frame of fitted values of the difference in abundance, standard error estimates and timepoints interpolated over.}
+ \item{perm - Differential abundance area estimates for each permutation.}
+ \item{call - Function call.}
+}
+}
+\description{
+Calculate time intervals of significant differential abundance.
+Currently only one method is implemented (ssanova). fitSSTimeSeries is called with method="ssanova".
+}
+\examples{
+
+data(mouseData)
+res = fitTimeSeries(obj=mouseData,feature="Actinobacteria",
+   class="status",id="mouseID",time="relativeTime",lvl='class',B=2)
+
+}
+\seealso{
+\code{\link{cumNorm}} \code{\link{fitSSTimeSeries}} \code{\link{plotTimeSeries}}
+}
+
diff --git a/man/fitZeroLogNormal.Rd b/man/fitZeroLogNormal.Rd
new file mode 100644
index 0000000..cdb03e4
--- /dev/null
+++ b/man/fitZeroLogNormal.Rd
@@ -0,0 +1,43 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitZeroLogNormal.R
+\name{fitZeroLogNormal}
+\alias{fitZeroLogNormal}
+\title{Compute the log fold-change estimates for the zero-inflated log-normal model}
+\usage{
+fitZeroLogNormal(obj, mod, coef = 2, szero = TRUE, spos = TRUE)
+}
+\arguments{
+\item{obj}{A MRexperiment object with count data.}
+
+\item{mod}{The model for the count distribution.}
+
+\item{coef}{Coefficient of interest to grab log fold-changes.}
+
+\item{szero}{TRUE/FALSE, shrink zero component parameters.}
+
+\item{spos}{TRUE/FALSE, shrink positive component parameters.}
+}
+\value{
+A list of objects including:
+\itemize{
+ \item{logFC - the log fold-change estimates}
+ \item{adjFactor  - the adjustment factor based on the zero component}
+ \item{se - standard error estimates}
+ \item{fitln - parameters from the log-normal fit}
+ \item{fitzero - parameters from the logistic fit}
+ \item{zeroRidge - output from the ridge regression}
+ \item{posRidge - output from the ridge regression}
+ \item{tauPos - estimated tau^2 for positive component}
+ \item{tauZero - estimated tau^2 for zero component}
+ \item{exclude - features to exclude for various reasons, e.g. all zeros}
+ \item{zeroExclude - features to exclude for various reasons, e.g. all zeros}
+}
+}
+\description{
+Run the zero-inflated log-normal model given a MRexperiment object
+and model matrix. Not for the average user, assumes structure of the model matrix.
+}
+\seealso{
+\code{\link{cumNorm}} \code{\link{fitFeatureModel}}
+}
+
diff --git a/man/fitZig.Rd b/man/fitZig.Rd
new file mode 100644
index 0000000..3e965b4
--- /dev/null
+++ b/man/fitZig.Rd
@@ -0,0 +1,75 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitZig.R
+\name{fitZig}
+\alias{fitZig}
+\title{Computes the weighted fold-change estimates and t-statistics.}
+\usage{
+fitZig(obj, mod, zeroMod = NULL, useCSSoffset = TRUE,
+  control = zigControl(), useMixedModel = FALSE, ...)
+}
+\arguments{
+\item{obj}{A MRexperiment object with count data.}
+
+\item{mod}{The model for the count distribution.}
+
+\item{zeroMod}{The zero model, the model to account for the change in the
+number of OTUs observed as a linear effect of the depth of coverage.}
+
+\item{useCSSoffset}{Boolean, whether to include the default scaling
+parameters in the model or not.}
+
+\item{control}{The settings for fitZig.}
+
+\item{useMixedModel}{Estimate the correlation between duplicate 
+features or replicates using duplicateCorrelation.}
+
+\item{...}{Additional parameters for duplicateCorrelation.}
+}
+\value{
+A list of objects including:
+\itemize{
+	\item{call - the call made to fitZig}
+	\item{fit  - 'MLArrayLM' Limma object of the weighted fit}
+	\item{countResiduals - standardized residuals of the fit}
+	\item{z - matrix of the posterior probabilities}
+	\item{eb - output of eBayes, moderated t-statistics, moderated F-statistics, etc}
+	\item{taxa - vector of the taxa names}
+	\item{counts - the original count matrix input}
+	\item{zeroMod - the zero model matrix}
+	\item{zeroCoef - the zero model fitted results}
+	\item{stillActive - convergence}
+	\item{stillActiveNLL - nll at convergence}
+	\item{dupcor - correlation of duplicates}
+}
+}
+\description{
+Wrapper to actually run the Expectation-maximization algorithm and estimate
+$f_count$ fits.  Maximum-likelihood estimates are approximated using the EM
+algorithm where we treat mixture membership $delta_ij = 1$ if $y_ij$ is
+generated from the zero point mass as latent indicator variables. The
+density is defined as $f_zig(y_ij = pi_j(S_j)*f_0(y_ij) +(1-pi_j (S_j)) *
+f_count(y_ij; mu_i, sigma_i^2)$. The log-likelihood in this extended model
+is: $(1-delta_ij) log f_count(y;mu_i,sigma_i^2 )+delta_ij log
+pi_j(s_j)+(1-delta_ij) log (1-pi_j (s_j))$. The responsibilities are defined
+as $z_ij = pr(delta_ij=1 | data)$.
+}
+\examples{
+
+# This is a simple demonstration 
+data(lungData)
+k = grep("Extraction.Control",pData(lungData)$SampleType)
+lungTrim = lungData[,-k]
+k = which(rowSums(MRcounts(lungTrim)>0)<30)
+lungTrim = cumNorm(lungTrim)
+lungTrim = lungTrim[-k,]
+smokingStatus = pData(lungTrim)$SmokingStatus
+mod = model.matrix(~smokingStatus)
+# The maxit is not meant to be 1 - this is for demonstration/speed
+settings = zigControl(maxit=1,verbose=FALSE)
+fit = fitZig(obj = lungTrim,mod=mod,control=settings)
+
+}
+\seealso{
+\code{\link{cumNorm}} \code{\link{zigControl}}
+}
+
diff --git a/man/getCountDensity.Rd b/man/getCountDensity.Rd
new file mode 100644
index 0000000..6d26a07
--- /dev/null
+++ b/man/getCountDensity.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/getCountDensity.R
+\name{getCountDensity}
+\alias{getCountDensity}
+\title{Compute the value of the count density function from the count model
+residuals.}
+\usage{
+getCountDensity(residuals, log = FALSE)
+}
+\arguments{
+\item{residuals}{Residuals from the count model.}
+
+\item{log}{Whether or not we are calculating from a log-normal distribution.}
+}
+\value{
+Density values from the count model residuals.
+}
+\description{
+Calculate density values from a normal: $f(x) = 1/(sqrt (2 pi ) sigma )
+e^-((x - mu )^2/(2 sigma^2))$.  Maximum-likelihood estimates are
+approximated using the EM algorithm where we treat mixture membership
+$deta_ij$ = 1 if $y_ij$ is generated from the zero point mass as latent
+indicator variables. The density is defined as $f_zig(y_ij = pi_j(S_j) cdot
+f_0(y_ij) +(1-pi_j (S_j))cdot f_count(y_ij;mu_i,sigma_i^2)$. The
+log-likelihood in this extended model is $(1-delta_ij) log
+f_count(y;mu_i,sigma_i^2 )+delta_ij log pi_j(s_j)+(1-delta_ij)log (1-pi_j
+(sj))$. The responsibilities are defined as $z_ij = pr(delta_ij=1 | data)$.
+}
+\seealso{
+\code{\link{fitZig}}
+}
+
diff --git a/man/getEpsilon.Rd b/man/getEpsilon.Rd
new file mode 100644
index 0000000..86b93ff
--- /dev/null
+++ b/man/getEpsilon.Rd
@@ -0,0 +1,31 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/getEpsilon.R
+\name{getEpsilon}
+\alias{getEpsilon}
+\title{Calculate the relative difference between iterations of the negative
+log-likelihoods.}
+\usage{
+getEpsilon(nll, nllOld)
+}
+\arguments{
+\item{nll}{Vector of size M with the current negative log-likelihoods.}
+
+\item{nllOld}{Vector of size M with the previous iterations negative
+log-likelihoods.}
+}
+\value{
+Vector of size M of the relative differences between the previous
+and current iteration nll.
+}
+\description{
+Maximum-likelihood estimates are approximated using the EM algorithm where
+we treat mixture membership $delta_ij$ = 1 if $y_ij$ is generated from the
+zero point mass as latent indicator variables. The log-likelihood in this
+extended model is $(1-delta_ij) log f_count(y;mu_i,sigma_i^2 )+delta_ij log
+pi_j(s_j)+(1-delta_ij)log (1-pi_j (sj))$. The responsibilities are defined
+as $z_ij = pr(delta_ij=1 | data)$.
+}
+\seealso{
+\code{\link{fitZig}}
+}
+
diff --git a/man/getNegativeLogLikelihoods.Rd b/man/getNegativeLogLikelihoods.Rd
new file mode 100644
index 0000000..01159fb
--- /dev/null
+++ b/man/getNegativeLogLikelihoods.Rd
@@ -0,0 +1,33 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/getNegativeLogLikelihoods.R
+\name{getNegativeLogLikelihoods}
+\alias{getNegativeLogLikelihoods}
+\title{Calculate the negative log-likelihoods for the various features given the
+residuals.}
+\usage{
+getNegativeLogLikelihoods(z, countResiduals, zeroResiduals)
+}
+\arguments{
+\item{z}{Matrix (m x n) of estimate responsibilities (probabilities that a
+count comes from a spike distribution at 0).}
+
+\item{countResiduals}{Residuals from the count model.}
+
+\item{zeroResiduals}{Residuals from the zero model.}
+}
+\value{
+Vector of size M of the negative log-likelihoods for the various
+features.
+}
+\description{
+Maximum-likelihood estimates are approximated using the EM algorithm where
+we treat mixture membership $delta_ij$ = 1 if $y_ij$ is generated from the
+zero point mass as latent indicator variables. The log-likelihood in this
+extended model is $(1-delta_ij) log f_count(y;mu_i,sigma_i^2 )+delta_ij log
+pi_j(s_j)+(1-delta_ij)log (1-pi_j (sj))$. The responsibilities are defined
+as $z_ij = pr(delta_ij=1 | data and current values)$.
+}
+\seealso{
+\code{\link{fitZig}}
+}
+
diff --git a/man/getPi.Rd b/man/getPi.Rd
new file mode 100644
index 0000000..0402a73
--- /dev/null
+++ b/man/getPi.Rd
@@ -0,0 +1,26 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/getPi.R
+\name{getPi}
+\alias{getPi}
+\title{Calculate the mixture proportions from the zero model / spike mass model
+residuals.}
+\usage{
+getPi(residuals)
+}
+\arguments{
+\item{residuals}{Residuals from the zero model.}
+}
+\value{
+Mixture proportions for each sample.
+}
+\description{
+F(x) = 1 / (1 + exp(-(x-m)/s)) (the CDF of the logistic distribution).
+Provides the probability that a real-valued random variable X with a given
+probability distribution will be found at a value less than or equal to x.
+The output are the mixture proportions for the samples given the residuals
+from the zero model.
+}
+\seealso{
+\code{\link{fitZig}}
+}
+
diff --git a/man/getZ.Rd b/man/getZ.Rd
new file mode 100644
index 0000000..4b1aca2
--- /dev/null
+++ b/man/getZ.Rd
@@ -0,0 +1,33 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/getZ.R
+\name{getZ}
+\alias{getZ}
+\title{Calculate the current Z estimate responsibilities (posterior probabilities)}
+\usage{
+getZ(z, zUsed, stillActive, nll, nllUSED)
+}
+\arguments{
+\item{z}{Matrix (m x n) of estimate responsibilities (probabilities that a
+count comes from a spike distribution at 0).}
+
+\item{zUsed}{Matrix (m x n) of estimate responsibilities (probabilities that
+a count comes from a spike distribution at 0) that are actually used
+(following convergence).}
+
+\item{stillActive}{A vector of size M booleans saying if a feature is still
+active or not.}
+
+\item{nll}{Vector of size M with the current negative log-likelihoods.}
+
+\item{nllUSED}{Vector of size M with the converged negative log-likelihoods.}
+}
+\value{
+A list of updated zUsed and nllUSED.
+}
+\description{
+Calculate the current Z estimate responsibilities (posterior probabilities)
+}
+\seealso{
+\code{\link{fitZig}}
+}
+
diff --git a/man/isItStillActive.Rd b/man/isItStillActive.Rd
new file mode 100644
index 0000000..787bc95
--- /dev/null
+++ b/man/isItStillActive.Rd
@@ -0,0 +1,30 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/isItStillActive.R
+\name{isItStillActive}
+\alias{isItStillActive}
+\title{Function to determine if a feature is still active.}
+\usage{
+isItStillActive(eps, tol, stillActive, stillActiveNLL, nll)
+}
+\arguments{
+\item{eps}{Vector of size M (features) representing the relative difference between the new nll and old nll.}
+
+\item{tol}{The threshold tolerance for the difference}
+
+\item{stillActive}{A vector of size M booleans saying if a feature is still active or not.}
+
+\item{stillActiveNLL}{A vector of size M recording the negative log-likelihoods of the various features, updated for those still active.}
+
+\item{nll}{Vector of size M with the current negative log-likelihoods.}
+}
+\value{
+None.
+}
+\description{
+In the Expectation Maximization routine features posterior probabilities routinely converge based on a tolerance threshold. This function checks
+whether or not the feature's negative log-likelihood (measure of the fit) has changed or not.
+}
+\seealso{
+\code{\link{fitZig}}
+}
+
diff --git a/man/libSize-set.Rd b/man/libSize-set.Rd
new file mode 100644
index 0000000..23e2e87
--- /dev/null
+++ b/man/libSize-set.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/allClasses.R
+\docType{methods}
+\name{libSize<-}
+\alias{libSize<-}
+\alias{libSize<-,MRexperiment,numeric-method}
+\title{Replace the library sizes in a MRexperiment object}
+\usage{
+\S4method{libSize}{MRexperiment,numeric}(object) <- value
+}
+\arguments{
+\item{object}{a \code{MRexperiment} object}
+
+\item{value}{vector of library sizes}
+}
+\value{
+vector library sizes
+}
+\description{
+Function to replace the scaling factors, aka the library sizes, of
+samples in a MRexperiment object.
+}
+\examples{
+
+data(lungData)
+head(libSize(lungData)<- rnorm(1))
+
+}
+\author{
+Joseph N. Paulson
+}
+
diff --git a/man/libSize.Rd b/man/libSize.Rd
new file mode 100644
index 0000000..f88ae8d
--- /dev/null
+++ b/man/libSize.Rd
@@ -0,0 +1,30 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/allClasses.R
+\docType{methods}
+\name{libSize}
+\alias{libSize}
+\title{Access sample depth of coverage from MRexperiment object}
+\usage{
+libSize(object)
+}
+\arguments{
+\item{object}{a \code{MRexperiment} object}
+}
+\value{
+Library sizes
+}
+\description{
+Access the libSize vector represents the column (sample specific) sums of features,
+i.e. the total number of reads for a sample or depth of coverage. It is used by
+\code{\link{fitZig}}.
+}
+\examples{
+
+data(lungData)
+head(libSize(lungData))
+
+}
+\author{
+Joseph N. Paulson
+}
+
diff --git a/man/loadBiom.Rd b/man/loadBiom.Rd
new file mode 100644
index 0000000..dc0ca46
--- /dev/null
+++ b/man/loadBiom.Rd
@@ -0,0 +1,28 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/loadBiom.R
+\name{loadBiom}
+\alias{loadBiom}
+\title{Load objects organized in the Biom format.}
+\usage{
+loadBiom(file)
+}
+\arguments{
+\item{file}{The biom object filepath.}
+}
+\value{
+A MRexperiment object.
+}
+\description{
+Wrapper to load Biom formatted object.
+}
+\examples{
+
+#library(biomformat)
+rich_dense_file = system.file("extdata", "rich_dense_otu_table.biom", package = "biomformat")
+x = loadBiom(rich_dense_file)
+x
+}
+\seealso{
+\code{\link{loadMeta}} \code{\link{loadPhenoData}} \code{\link{newMRexperiment}} \code{\link{biom2MRexperiment}}
+}
+
diff --git a/man/loadMeta.Rd b/man/loadMeta.Rd
new file mode 100644
index 0000000..6a61b23
--- /dev/null
+++ b/man/loadMeta.Rd
@@ -0,0 +1,30 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/loadMeta.R
+\name{loadMeta}
+\alias{loadMeta}
+\alias{metagenomicLoader}
+\title{Load a count dataset associated with a study.}
+\usage{
+loadMeta(file, sep = "\\t")
+}
+\arguments{
+\item{file}{Path and filename of the actual data file.}
+
+\item{sep}{File delimiter.}
+}
+\value{
+A list with objects 'counts' and 'taxa'.
+}
+\description{
+Load a matrix of OTUs in a tab delimited format
+}
+\examples{
+
+dataDirectory <- system.file("extdata", package="metagenomeSeq")
+lung = loadMeta(file.path(dataDirectory,"CHK_NAME.otus.count.csv"))
+
+}
+\seealso{
+\code{\link{loadPhenoData}}
+}
+
diff --git a/man/loadMetaQ.Rd b/man/loadMetaQ.Rd
new file mode 100644
index 0000000..8869e95
--- /dev/null
+++ b/man/loadMetaQ.Rd
@@ -0,0 +1,27 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/loadMetaQ.R
+\name{loadMetaQ}
+\alias{loadMetaQ}
+\alias{qiimeLoader}
+\title{Load a count dataset associated with a study set up in a Qiime format.}
+\usage{
+loadMetaQ(file)
+}
+\arguments{
+\item{file}{Path and filename of the actual data file.}
+}
+\value{
+An list with 'counts' containing the count data, 'taxa' containing the otu annotation, and 'otus'.
+}
+\description{
+Load a matrix of OTUs in Qiime's format
+}
+\examples{
+
+# see vignette
+
+}
+\seealso{
+\code{\link{loadMeta}} \code{\link{loadPhenoData}}
+}
+
diff --git a/man/loadPhenoData.Rd b/man/loadPhenoData.Rd
new file mode 100644
index 0000000..ddfa8cc
--- /dev/null
+++ b/man/loadPhenoData.Rd
@@ -0,0 +1,33 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/loadPhenoData.R
+\name{loadPhenoData}
+\alias{loadPhenoData}
+\alias{phenoData}
+\title{Load a clinical/phenotypic dataset associated with a study.}
+\usage{
+loadPhenoData(file, tran = TRUE, sep = "\\t")
+}
+\arguments{
+\item{file}{Path and filename of the actual clinical file.}
+
+\item{tran}{Boolean. If the covariates are along the columns and samples
+along the rows, then tran should equal TRUE.}
+
+\item{sep}{The separator for the file.}
+}
+\value{
+The metadata as a dataframe.
+}
+\description{
+Load a matrix of metadata associated with a study.
+}
+\examples{
+
+dataDirectory <- system.file("extdata", package="metagenomeSeq")
+clin = loadPhenoData(file.path(dataDirectory,"CHK_clinical.csv"),tran=TRUE)
+
+}
+\seealso{
+\code{\link{loadMeta}}
+}
+
diff --git a/man/lungData.Rd b/man/lungData.Rd
new file mode 100644
index 0000000..d9cbd94
--- /dev/null
+++ b/man/lungData.Rd
@@ -0,0 +1,12 @@
+\name{lungData}
+\docType{data}
+\alias{lungData}
+
+\title{OTU abundance matrix of samples from a smoker/non-smoker study}
+\description{This is a list with a matrix of OTU counts,otu names, taxa annotations for each OTU, and phenotypic data. Samples along the columns and OTUs along the rows.}
+\value{
+MRexperiment-class object of 16S lung samples.
+}
+\usage{lungData}
+\format{A list of OTU matrix, taxa, otus, and phenotypes}
+\references{http://www.ncbi.nlm.nih.gov/pubmed/21680950}
\ No newline at end of file
diff --git a/man/makeLabels.Rd b/man/makeLabels.Rd
new file mode 100644
index 0000000..322bbc6
--- /dev/null
+++ b/man/makeLabels.Rd
@@ -0,0 +1,27 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/misc.R
+\name{makeLabels}
+\alias{makeLabels}
+\title{Function to make labels simpler}
+\usage{
+makeLabels(x = "samples", y = "abundance", norm, log)
+}
+\arguments{
+\item{x}{string for the x-axis}
+
+\item{y}{string for the y-axis}
+
+\item{norm}{is the data normalized?}
+
+\item{log}{is the data logged?}
+}
+\value{
+vector of x,y labels
+}
+\description{
+Beginning to transition to better axes for plots
+}
+\examples{
+metagenomeSeq::makeLabels(norm=TRUE,log=TRUE) 
+}
+
diff --git a/man/mergeMRexperiments.Rd b/man/mergeMRexperiments.Rd
new file mode 100644
index 0000000..8dd56bf
--- /dev/null
+++ b/man/mergeMRexperiments.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/mergeMRexperiments.R
+\name{mergeMRexperiments}
+\alias{mergeMRexperiments}
+\title{Merge two MRexperiment objects together}
+\usage{
+mergeMRexperiments(x, y)
+}
+\arguments{
+\item{x}{MRexperiment-class object 1.}
+
+\item{y}{MRexperiment-class object 2.}
+}
+\value{
+Merged MRexperiment-class object.
+}
+\description{
+This function will take two MRexperiment objects and merge them together finding common
+OTUs. If there are OTUs not found in one of the two MRexperiments then a message will
+announce this and values will be coerced to zero for the second table.
+}
+\examples{
+data(mouseData)
+newobj = mergeMRexperiments(mouseData,mouseData)
+newobj
+
+# let me know if people are interested in an option to merge by keys instead of row names.
+data(lungData)
+newobj = mergeMRexperiments(mouseData,lungData)
+newobj
+}
+
diff --git a/man/mergeTable.Rd b/man/mergeTable.Rd
new file mode 100644
index 0000000..d852ad6
--- /dev/null
+++ b/man/mergeTable.Rd
@@ -0,0 +1,20 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/mergeMRexperiments.R
+\name{mergeTable}
+\alias{mergeTable}
+\title{Merge two tables}
+\usage{
+mergeTable(x, y)
+}
+\arguments{
+\item{x}{Table 1.}
+
+\item{y}{Table 2.}
+}
+\value{
+Merged table
+}
+\description{
+Merge two tables
+}
+
diff --git a/man/metagenomeSeq-deprecated.Rd b/man/metagenomeSeq-deprecated.Rd
new file mode 100644
index 0000000..273b45c
--- /dev/null
+++ b/man/metagenomeSeq-deprecated.Rd
@@ -0,0 +1,30 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/deprecated_metagenomeSeq_function.R
+\docType{package}
+\name{metagenomeSeq-deprecated}
+\alias{deprecated_metagenomeSeq_function}
+\alias{fitMeta}
+\alias{load_biom}
+\alias{load_meta}
+\alias{load_metaQ}
+\alias{load_phenoData}
+\alias{metagenomeSeq-deprecated}
+\alias{metagenomeSeq-deprecated-package}
+\title{Depcrecated functions in the metagenomeSeq package.}
+\usage{
+deprecated_metagenomeSeq_function(x, value, ...)
+}
+\arguments{
+\item{x}{For assignment operators, the object that will undergo a replacement
+(object inside parenthesis).}
+
+\item{value}{For assignment operators, the value to replace with 
+(the right side of the assignment).}
+
+\item{...}{For functions other than assignment operators, 
+parameters to be passed to the modern version of the function (see table).}
+}
+\description{
+These functions may be removed completely in the next release.
+}
+
diff --git a/man/metagenomeSeq-package.Rd b/man/metagenomeSeq-package.Rd
new file mode 100644
index 0000000..de4416d
--- /dev/null
+++ b/man/metagenomeSeq-package.Rd
@@ -0,0 +1,21 @@
+\name{metagenomeSeq-package}
+\docType{package}
+\alias{metagenomeSeq}
+\alias{metagenomeSeq-package}
+\title{Statistical analysis for sparse high-throughput sequencing}
+\description{
+metagenomeSeq is designed to determine features (be it Operational Taxanomic Unit (OTU), species, etc.) that are differentially abundant between two or more groups of multiple samples. metagenomeSeq is designed to address the effects of both normalization and under-sampling of microbial communities on disease association detection and the testing of feature correlations.
+
+A user's guide is available, and can be opened by typing \code{vignette("metagenomeSeq")} 
+
+The metagenomeSeq package implements novel normalization and statistical methodology in the following papers.
+}
+
+\author{
+Paulson, JN <jpaulson at umiacs.umd.edu>; Pop, M; Corrada Bravo, H
+}
+
+\references{
+Paulson, Joseph N., O. Colin Stine, Hector Corrada Bravo, and Mihai Pop. "Differential   abundance analysis for microbial marker-gene surveys." Nature methods (2013).
+}
+\keyword{package}
diff --git a/man/mouseData.Rd b/man/mouseData.Rd
new file mode 100644
index 0000000..87a77dc
--- /dev/null
+++ b/man/mouseData.Rd
@@ -0,0 +1,12 @@
+\name{mouseData}
+\docType{data}
+\alias{mouseData}
+
+\title{OTU abundance matrix of mice samples from a diet longitudinal study}
+\description{This is a list with a matrix of OTU counts, taxa annotations for each OTU, otu names, and vector of phenotypic data. Samples along the columns and OTUs along the rows.}
+\value{
+MRexperiment-class object of 16S mouse samples.
+}
+\usage{mouseData}
+\format{A list of OTU matrix, taxa, otus, and phenotypes}
+\references{http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2894525/}
\ No newline at end of file
diff --git a/man/newMRexperiment.Rd b/man/newMRexperiment.Rd
new file mode 100644
index 0000000..f9982e4
--- /dev/null
+++ b/man/newMRexperiment.Rd
@@ -0,0 +1,46 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/allClasses.R
+\name{newMRexperiment}
+\alias{newMRexperiment}
+\title{Create a MRexperiment object}
+\usage{
+newMRexperiment(counts, phenoData = NULL, featureData = NULL,
+  libSize = NULL, normFactors = NULL)
+}
+\arguments{
+\item{counts}{A matrix or data frame of count data. The count data is
+representative of the number of reads annotated for a feature (be it gene,
+OTU, species, etc). Rows should correspond to features and columns to
+samples.}
+
+\item{phenoData}{An AnnotatedDataFrame with pertinent sample information.}
+
+\item{featureData}{An AnnotatedDataFrame with pertinent feature information.}
+
+\item{libSize}{libSize, library size, is the total number of reads for a
+particular sample.}
+
+\item{normFactors}{normFactors, the normalization factors used in either the
+model or as scaling factors of sample counts for each particular sample.}
+}
+\value{
+an object of class MRexperiment
+}
+\description{
+This function creates a MRexperiment object from a matrix or data frame of
+count data.
+}
+\details{
+See \code{\link{MRexperiment-class}} and \code{eSet} (from the Biobase
+package) for the meaning of the various slots.
+}
+\examples{
+
+cnts = matrix(abs(rnorm(1000)),nc=10)
+obj <- newMRexperiment(cnts)
+
+}
+\author{
+Joseph N Paulson
+}
+
diff --git a/man/normFactors-set.Rd b/man/normFactors-set.Rd
new file mode 100644
index 0000000..5018601
--- /dev/null
+++ b/man/normFactors-set.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/allClasses.R
+\docType{methods}
+\name{normFactors<-}
+\alias{normFactors<-}
+\alias{normFactors<-,MRexperiment,numeric-method}
+\title{Replace the normalization factors in a MRexperiment object}
+\usage{
+\S4method{normFactors}{MRexperiment,numeric}(object) <- value
+}
+\arguments{
+\item{object}{a \code{MRexperiment} object}
+
+\item{value}{vector of normalization scaling factors}
+}
+\value{
+Normalization scaling factors
+}
+\description{
+Function to replace the scaling factors, aka the normalization factors, of
+samples in a MRexperiment object.
+}
+\examples{
+
+data(lungData)
+head(normFactors(lungData)<- rnorm(1))
+
+}
+\author{
+Joseph N. Paulson
+}
+
diff --git a/man/normFactors.Rd b/man/normFactors.Rd
new file mode 100644
index 0000000..1214d3c
--- /dev/null
+++ b/man/normFactors.Rd
@@ -0,0 +1,29 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/allClasses.R
+\docType{methods}
+\name{normFactors}
+\alias{normFactors}
+\title{Access the normalization factors in a MRexperiment object}
+\usage{
+normFactors(object)
+}
+\arguments{
+\item{object}{a \code{MRexperiment} object}
+}
+\value{
+Normalization scaling factors
+}
+\description{
+Function to access the scaling factors, aka the normalization factors, of
+samples in a MRexperiment object.
+}
+\examples{
+
+data(lungData)
+head(normFactors(lungData))
+
+}
+\author{
+Joseph N. Paulson
+}
+
diff --git a/man/plotBubble.Rd b/man/plotBubble.Rd
new file mode 100644
index 0000000..4a02ddd
--- /dev/null
+++ b/man/plotBubble.Rd
@@ -0,0 +1,55 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/plotBubble.R
+\name{plotBubble}
+\alias{plotBubble}
+\title{Basic plot of binned vectors.}
+\usage{
+plotBubble(yvector, xvector, sigvector = NULL, nbreaks = 10,
+  ybreak = quantile(yvector, p = seq(0, 1, length.out = nbreaks)),
+  xbreak = quantile(xvector, p = seq(0, 1, length.out = nbreaks)),
+  scale = 1, local = FALSE, ...)
+}
+\arguments{
+\item{yvector}{A vector of values represented along y-axis.}
+
+\item{xvector}{A vector of values represented along x-axis.}
+
+\item{sigvector}{A vector of the names of significant features (names should match x/yvector).}
+
+\item{nbreaks}{Number of bins to break yvector and xvector into.}
+
+\item{ybreak}{The values to break the yvector at.}
+
+\item{xbreak}{The values to break the xvector at.}
+
+\item{scale}{Scaling of circle bin sizes.}
+
+\item{local}{Boolean to shade by signficant bin numbers (TRUE) or overall proportion (FALSE).}
+
+\item{...}{Additional plot arguments.}
+}
+\value{
+A matrix of features along rows, and the group membership along columns.
+}
+\description{
+This function plots takes two vectors, calculates the contingency table and 
+plots circles sized by the contingency table value. Optional significance vectors
+of the values significant will shade the circles by proportion of significance.
+}
+\examples{
+
+data(mouseData)
+mouseData = mouseData[which(rowSums(mouseData)>139),]
+sparsity = rowMeans(MRcounts(mouseData)==0)
+lor = log(fitPA(mouseData,cl=pData(mouseData)[,3])$oddsRatio)
+plotBubble(lor,sparsity,main="lor ~ sparsity")
+# Example 2
+x = runif(100000)
+y = runif(100000)
+plotBubble(y,x)
+
+}
+\seealso{
+\code{\link{plotMRheatmap}}
+}
+
diff --git a/man/plotClassTimeSeries.Rd b/man/plotClassTimeSeries.Rd
new file mode 100644
index 0000000..cc59e4a
--- /dev/null
+++ b/man/plotClassTimeSeries.Rd
@@ -0,0 +1,46 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitTimeSeries.R
+\name{plotClassTimeSeries}
+\alias{plotClassTimeSeries}
+\title{Plot abundances by class}
+\usage{
+plotClassTimeSeries(res, formula, xlab = "Time", ylab = "Abundance",
+  color0 = "black", color1 = "red", include = c("1", "class",
+  "time:class"), ...)
+}
+\arguments{
+\item{res}{Output of fitTimeSeries function}
+
+\item{formula}{Formula for ssanova. Of the form: abundance ~ ... where ... includes any pData slot value.}
+
+\item{xlab}{X-label.}
+
+\item{ylab}{Y-label.}
+
+\item{color0}{Color of samples from first group.}
+
+\item{color1}{Color of samples from second group.}
+
+\item{include}{Parameters to include in prediction.}
+
+\item{...}{Extra plotting arguments.}
+}
+\value{
+Plot for abundances of each class using a spline approach on estimated null model.
+}
+\description{
+Plot the abundance of values for each class using 
+a spline approach on the estimated full model.
+}
+\examples{
+
+data(mouseData)
+res = fitTimeSeries(obj=mouseData,feature="Actinobacteria",
+   class="status",id="mouseID",time="relativeTime",lvl='class',B=10)
+plotClassTimeSeries(res,pch=21,bg=res$data$class,ylim=c(0,8))
+
+}
+\seealso{
+\code{\link{fitTimeSeries}}
+}
+
diff --git a/man/plotCorr.Rd b/man/plotCorr.Rd
new file mode 100644
index 0000000..7c210e6
--- /dev/null
+++ b/man/plotCorr.Rd
@@ -0,0 +1,40 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/plotCorr.R
+\name{plotCorr}
+\alias{plotCorr}
+\title{Basic correlation plot function for normalized or unnormalized counts.}
+\usage{
+plotCorr(obj, n, norm = TRUE, log = TRUE, fun = cor, ...)
+}
+\arguments{
+\item{obj}{A MRexperiment object with count data.}
+
+\item{n}{The number of features to plot. This chooses the "n" features with greatest variance.}
+
+\item{norm}{Whether or not to normalize the counts - if MRexperiment object.}
+
+\item{log}{Whether or not to log2 transform the counts - if MRexperiment object.}
+
+\item{fun}{Function to calculate pair-wise relationships. Default is pearson
+correlation}
+
+\item{...}{Additional plot arguments.}
+}
+\value{
+plotted correlation matrix
+}
+\description{
+This function plots a heatmap of the "n" features with greatest variance
+across rows.
+}
+\examples{
+
+data(mouseData)
+plotCorr(obj=mouseData,n=200,cexRow = 0.4,cexCol = 0.4,trace="none",dendrogram="none",
+         col = colorRampPalette(brewer.pal(9, "RdBu"))(50))
+
+}
+\seealso{
+\code{\link{cumNormMat}}
+}
+
diff --git a/man/plotFeature.Rd b/man/plotFeature.Rd
new file mode 100644
index 0000000..0643e3c
--- /dev/null
+++ b/man/plotFeature.Rd
@@ -0,0 +1,54 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/plotFeature.R
+\name{plotFeature}
+\alias{plotFeature}
+\title{Basic plot function of the raw or normalized data.}
+\usage{
+plotFeature(obj, otuIndex, classIndex, col = "black", sort = TRUE,
+  sortby = NULL, norm = TRUE, log = TRUE, sl = 1000, ...)
+}
+\arguments{
+\item{obj}{A MRexperiment object with count data.}
+
+\item{otuIndex}{The row to plot}
+
+\item{classIndex}{A list of the samples in their respective groups.}
+
+\item{col}{A vector to color samples by.}
+
+\item{sort}{Boolean, sort or not.}
+
+\item{sortby}{Default is sort by library size, alternative vector for sorting}
+
+\item{norm}{Whether or not to normalize the counts - if MRexperiment object.}
+
+\item{log}{Whether or not to log2 transform the counts - if MRexperiment object.}
+
+\item{sl}{Scaling factor - if MRexperiment and norm=TRUE.}
+
+\item{...}{Additional plot arguments.}
+}
+\value{
+counts and classindex
+}
+\description{
+This function plots the abundance of a particular OTU by class. The function
+is the typical manhattan plot of the abundances.
+}
+\examples{
+
+data(mouseData)
+classIndex=list(Western=which(pData(mouseData)$diet=="Western"))
+classIndex$BK=which(pData(mouseData)$diet=="BK")
+otuIndex = 8770
+
+par(mfrow=c(2,1))
+dates = pData(mouseData)$date
+plotFeature(mouseData,norm=FALSE,log=FALSE,otuIndex,classIndex,
+col=dates,sortby=dates,ylab="Raw reads")
+
+}
+\seealso{
+\code{\link{cumNorm}}
+}
+
diff --git a/man/plotGenus.Rd b/man/plotGenus.Rd
new file mode 100644
index 0000000..88b155a
--- /dev/null
+++ b/man/plotGenus.Rd
@@ -0,0 +1,60 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/plotGenus.R
+\name{plotGenus}
+\alias{genusPlot}
+\alias{plotGenus}
+\title{Basic plot function of the raw or normalized data.}
+\usage{
+plotGenus(obj, otuIndex, classIndex, norm = TRUE, log = TRUE,
+  no = 1:length(otuIndex), labs = TRUE, xlab = NULL, ylab = NULL,
+  jitter = TRUE, jitter.factor = 1, pch = 21, ...)
+}
+\arguments{
+\item{obj}{An MRexperiment object with count data.}
+
+\item{otuIndex}{A list of the otus with the same annotation.}
+
+\item{classIndex}{A list of the samples in their respective groups.}
+
+\item{norm}{Whether or not to normalize the counts - if MRexperiment object.}
+
+\item{log}{Whether or not to log2 transform the counts - if MRexperiment object.}
+
+\item{no}{Which of the otuIndex to plot.}
+
+\item{labs}{Whether to include group labels or not. (TRUE/FALSE)}
+
+\item{xlab}{xlabel for the plot.}
+
+\item{ylab}{ylabel for the plot.}
+
+\item{jitter}{Boolean to jitter the count data or not.}
+
+\item{jitter.factor}{Factor value for jitter}
+
+\item{pch}{Standard pch value for the plot command.}
+
+\item{...}{Additional plot arguments.}
+}
+\value{
+plotted data
+}
+\description{
+This function plots the abundance of a particular OTU by class. The function
+uses the estimated posterior probabilities to make technical zeros
+transparent.
+}
+\examples{
+
+data(mouseData)
+classIndex=list(controls=which(pData(mouseData)$diet=="BK"))
+classIndex$cases=which(pData(mouseData)$diet=="Western")
+otuIndex = grep("Strep",fData(mouseData)$family)
+otuIndex=otuIndex[order(rowSums(MRcounts(mouseData)[otuIndex,]),decreasing=TRUE)]
+plotGenus(mouseData,otuIndex,classIndex,no=1:2,xaxt="n",norm=FALSE,ylab="Strep normalized log(cpt)")
+
+}
+\seealso{
+\code{\link{cumNorm}}
+}
+
diff --git a/man/plotMRheatmap.Rd b/man/plotMRheatmap.Rd
new file mode 100644
index 0000000..a17f0c7
--- /dev/null
+++ b/man/plotMRheatmap.Rd
@@ -0,0 +1,46 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/plotMRheatmap.R
+\name{plotMRheatmap}
+\alias{plotMRheatmap}
+\title{Basic heatmap plot function for normalized counts.}
+\usage{
+plotMRheatmap(obj, n, norm = TRUE, log = TRUE, fun = sd, ...)
+}
+\arguments{
+\item{obj}{A MRexperiment object with count data.}
+
+\item{n}{The number of features to plot. This chooses the 'n' features of greatest positive statistic.}
+
+\item{norm}{Whether or not to normalize the counts - if MRexperiment object.}
+
+\item{log}{Whether or not to log2 transform the counts - if MRexperiment object.}
+
+\item{fun}{Function to select top 'n' features.}
+
+\item{...}{Additional plot arguments.}
+}
+\value{
+plotted matrix
+}
+\description{
+This function plots a heatmap of the 'n' features with greatest variance
+across rows (or other statistic).
+}
+\examples{
+
+data(mouseData)
+trials = pData(mouseData)$diet
+heatmapColColors=brewer.pal(12,"Set3")[as.integer(factor(trials))];
+heatmapCols = colorRampPalette(brewer.pal(9, "RdBu"))(50)
+#### version using sd
+plotMRheatmap(obj=mouseData,n=200,cexRow = 0.4,cexCol = 0.4,trace="none",
+             col = heatmapCols,ColSideColors = heatmapColColors)
+#### version using MAD
+plotMRheatmap(obj=mouseData,n=50,fun=mad,cexRow = 0.4,cexCol = 0.4,trace="none",
+             col = heatmapCols,ColSideColors = heatmapColColors) 
+
+}
+\seealso{
+\code{\link{cumNormMat}}
+}
+
diff --git a/man/plotOTU.Rd b/man/plotOTU.Rd
new file mode 100644
index 0000000..c622766
--- /dev/null
+++ b/man/plotOTU.Rd
@@ -0,0 +1,55 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/plotOTU.R
+\name{plotOTU}
+\alias{plotOTU}
+\title{Basic plot function of the raw or normalized data.}
+\usage{
+plotOTU(obj, otu, classIndex, log = TRUE, norm = TRUE, jitter.factor = 1,
+  pch = 21, labs = TRUE, xlab = NULL, ylab = NULL, jitter = TRUE, ...)
+}
+\arguments{
+\item{obj}{A MRexperiment object with count data.}
+
+\item{otu}{The row number/OTU to plot.}
+
+\item{classIndex}{A list of the samples in their respective groups.}
+
+\item{log}{Whether or not to log2 transform the counts - if MRexperiment object.}
+
+\item{norm}{Whether or not to normalize the counts - if MRexperiment object.}
+
+\item{jitter.factor}{Factor value for jitter.}
+
+\item{pch}{Standard pch value for the plot command.}
+
+\item{labs}{Whether to include group labels or not. (TRUE/FALSE)}
+
+\item{xlab}{xlabel for the plot.}
+
+\item{ylab}{ylabel for the plot.}
+
+\item{jitter}{Boolean to jitter the count data or not.}
+
+\item{...}{Additional plot arguments.}
+}
+\value{
+Plotted values
+}
+\description{
+This function plots the abundance of a particular OTU by class. The function
+uses the estimated posterior probabilities to make technical zeros
+transparent.
+}
+\examples{
+
+data(mouseData)
+classIndex=list(controls=which(pData(mouseData)$diet=="BK"))
+classIndex$cases=which(pData(mouseData)$diet=="Western")
+# you can specify whether or not to normalize, and to what level
+plotOTU(mouseData,otu=9083,classIndex,norm=FALSE,main="9083 feature abundances")
+
+}
+\seealso{
+\code{\link{cumNorm}}
+}
+
diff --git a/man/plotOrd.Rd b/man/plotOrd.Rd
new file mode 100644
index 0000000..7a966c2
--- /dev/null
+++ b/man/plotOrd.Rd
@@ -0,0 +1,51 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/plotOrd.R
+\name{plotOrd}
+\alias{plotOrd}
+\title{Plot of either PCA or MDS coordinates for the distances of normalized or unnormalized counts.}
+\usage{
+plotOrd(obj, tran = TRUE, comp = 1:2, norm = TRUE, log = TRUE,
+  usePCA = TRUE, useDist = FALSE, distfun = stats::dist,
+  dist.method = "euclidian", n = NULL, ...)
+}
+\arguments{
+\item{obj}{A MRexperiment object or count matrix.}
+
+\item{tran}{Transpose the matrix.}
+
+\item{comp}{Which components to display}
+
+\item{norm}{Whether or not to normalize the counts - if MRexperiment object.}
+
+\item{log}{Whether or not to log2 the counts - if MRexperiment object.}
+
+\item{usePCA}{TRUE/FALSE whether to use PCA  or MDS coordinates (TRUE is PCA).}
+
+\item{useDist}{TRUE/FALSE whether to calculate distances.}
+
+\item{distfun}{Distance function, default is stats::dist}
+
+\item{dist.method}{If useDist==TRUE, what method to calculate distances.}
+
+\item{n}{Number of features to make use of in calculating your distances.}
+
+\item{...}{Additional plot arguments.}
+}
+\value{
+coordinates
+}
+\description{
+This function plots the PCA / MDS coordinates for the "n" features of interest. Potentially uncovering batch
+effects or feature relationships.
+}
+\examples{
+
+data(mouseData)
+cl = pData(mouseData)[,3]
+plotOrd(mouseData,tran=TRUE,useDist=TRUE,pch=21,bg=factor(cl),usePCA=FALSE)
+
+}
+\seealso{
+\code{\link{cumNormMat}}
+}
+
diff --git a/man/plotRare.Rd b/man/plotRare.Rd
new file mode 100644
index 0000000..ed8f34a
--- /dev/null
+++ b/man/plotRare.Rd
@@ -0,0 +1,37 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/plotRare.R
+\name{plotRare}
+\alias{plotRare}
+\title{Plot of rarefaction effect}
+\usage{
+plotRare(obj, cl = NULL, ...)
+}
+\arguments{
+\item{obj}{A MRexperiment object with count data or matrix.}
+
+\item{cl}{Vector of classes for various samples.}
+
+\item{...}{Additional plot arguments.}
+}
+\value{
+Library size and number of detected features
+}
+\description{
+This function plots the number of observed features vs. the depth of coverage.
+}
+\examples{
+
+data(mouseData)
+cl = factor(pData(mouseData)[,3])
+res = plotRare(mouseData,cl=cl,pch=21,bg=cl)
+tmp=lapply(levels(cl), function(lv) lm(res[,"ident"]~res[,"libSize"]-1, subset=cl==lv))
+for(i in 1:length(levels(cl))){
+   abline(tmp[[i]], col=i)
+}
+legend("topleft", c("Diet 1","Diet 2"), text.col=c(1,2),box.col=NA)
+
+}
+\seealso{
+\code{\link{plotOrd}}, \code{\link{plotMRheatmap}}, \code{\link{plotCorr}}, \code{\link{plotOTU}}, \code{\link{plotGenus}}
+}
+
diff --git a/man/plotTimeSeries.Rd b/man/plotTimeSeries.Rd
new file mode 100644
index 0000000..a569c4b
--- /dev/null
+++ b/man/plotTimeSeries.Rd
@@ -0,0 +1,41 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitTimeSeries.R
+\name{plotTimeSeries}
+\alias{plotTimeSeries}
+\title{Plot difference function for particular bacteria}
+\usage{
+plotTimeSeries(res, C = 0, xlab = "Time",
+  ylab = "Difference in abundance",
+  main = "SS difference function prediction", ...)
+}
+\arguments{
+\item{res}{Output of fitTimeSeries function}
+
+\item{C}{Value for which difference function has to be larger or smaller than (default 0).}
+
+\item{xlab}{X-label.}
+
+\item{ylab}{Y-label.}
+
+\item{main}{Main label.}
+
+\item{...}{Extra plotting arguments.}
+}
+\value{
+Plot of difference in abundance for significant features.
+}
+\description{
+Plot the difference in abundance for significant features.
+}
+\examples{
+
+data(mouseData)
+res = fitTimeSeries(obj=mouseData,feature="Actinobacteria",
+   class="status",id="mouseID",time="relativeTime",lvl='class',B=10)
+plotTimeSeries(res)
+
+}
+\seealso{
+\code{\link{fitTimeSeries}}
+}
+
diff --git a/man/posteriorProbs.Rd b/man/posteriorProbs.Rd
new file mode 100644
index 0000000..17916bd
--- /dev/null
+++ b/man/posteriorProbs.Rd
@@ -0,0 +1,41 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/allClasses.R
+\docType{methods}
+\name{posteriorProbs}
+\alias{posteriorProbs}
+\alias{posteriorProbs,MRexperiment-method}
+\title{Access the posterior probabilities that results from analysis}
+\usage{
+posteriorProbs(obj)
+}
+\arguments{
+\item{obj}{a \code{MRexperiment} object.}
+}
+\value{
+Matrix of posterior probabilities
+}
+\description{
+Accessing the posterior probabilities following a run through
+\code{\link{fitZig}}
+}
+\examples{
+
+# This is a simple demonstration 
+data(lungData)
+k = grep("Extraction.Control",pData(lungData)$SampleType)
+lungTrim = lungData[,-k]
+k = which(rowSums(MRcounts(lungTrim)>0)<30)
+lungTrim = cumNorm(lungTrim)
+lungTrim = lungTrim[-k,]
+smokingStatus = pData(lungTrim)$SmokingStatus
+mod = model.matrix(~smokingStatus)
+# The maxit is not meant to be 1 - this is for demonstration/speed
+settings = zigControl(maxit=1,verbose=FALSE)
+fit = fitZig(obj = lungTrim,mod=mod,control=settings)
+head(posteriorProbs(lungTrim))
+
+}
+\author{
+Joseph N. Paulson
+}
+
diff --git a/man/returnAppropriateObj.Rd b/man/returnAppropriateObj.Rd
new file mode 100644
index 0000000..8356612
--- /dev/null
+++ b/man/returnAppropriateObj.Rd
@@ -0,0 +1,31 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/allClasses.R
+\name{returnAppropriateObj}
+\alias{returnAppropriateObj}
+\title{Check if MRexperiment or matrix and return matrix}
+\usage{
+returnAppropriateObj(obj, norm, log, sl = 1000)
+}
+\arguments{
+\item{obj}{a \code{MRexperiment} or \code{matrix} object}
+
+\item{norm}{return a normalized \code{MRexperiment} matrix}
+
+\item{log}{return a log transformed \code{MRexperiment} matrix}
+
+\item{sl}{scaling value}
+}
+\value{
+Matrix
+}
+\description{
+Function to check if object is a MRexperiment
+class or matrix
+}
+\examples{
+
+data(lungData)
+head(returnAppropriateObj(lungData,norm=FALSE,log=FALSE))
+
+}
+
diff --git a/man/ssFit.Rd b/man/ssFit.Rd
new file mode 100644
index 0000000..36774c5
--- /dev/null
+++ b/man/ssFit.Rd
@@ -0,0 +1,48 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitTimeSeries.R
+\name{ssFit}
+\alias{ssFit}
+\title{smoothing-splines anova fit}
+\usage{
+ssFit(formula, abundance, class, time, id, include = c("class", "time:class"),
+  pd, ...)
+}
+\arguments{
+\item{formula}{Formula for ssanova. Of the form: abundance ~ ... where ... includes any pData slot value.}
+
+\item{abundance}{Numeric vector of abundances.}
+
+\item{class}{Class membership (factor of group membership).}
+
+\item{time}{Time point vector of relative times (same length as abundance).}
+
+\item{id}{Sample / patient id.}
+
+\item{include}{Parameters to include in prediction.}
+
+\item{pd}{Extra variable.}
+
+\item{...}{Extra parameters for ssanova function (see ?ssanova).}
+}
+\value{
+\itemize{A list containing:
+\item     data        : Inputed data
+\item     fit         : The interpolated / fitted values for timePoints
+\item     se          : The standard error for CI intervals
+\item     timePoints  : The time points interpolated over
+}
+}
+\description{
+Sets up a data-frame with the feature abundance, 
+class information, time points, sample ids and returns
+the fitted values for the fitted model.
+}
+\examples{
+
+# Not run
+
+}
+\seealso{
+\code{\link{cumNorm}} \code{\link{fitTimeSeries}} \code{\link{ssPermAnalysis}} \code{\link{ssPerm}} \code{\link{ssIntervalCandidate}}
+}
+
diff --git a/man/ssIntervalCandidate.Rd b/man/ssIntervalCandidate.Rd
new file mode 100644
index 0000000..373489d
--- /dev/null
+++ b/man/ssIntervalCandidate.Rd
@@ -0,0 +1,34 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitTimeSeries.R
+\name{ssIntervalCandidate}
+\alias{ssIntervalCandidate}
+\title{calculate interesting time intervals}
+\usage{
+ssIntervalCandidate(fit, standardError, timePoints, positive = TRUE, C = 0)
+}
+\arguments{
+\item{fit}{SS-Anova fits.}
+
+\item{standardError}{SS-Anova se estimates.}
+
+\item{timePoints}{Time points interpolated over.}
+
+\item{positive}{Positive region or negative region (difference in abundance is positive/negative).}
+
+\item{C}{Value for which difference function has to be larger or smaller than (default 0).}
+}
+\value{
+Matrix of time point intervals of interest
+}
+\description{
+Calculates time intervals of interest using SS-Anova fitted confidence intervals.
+}
+\examples{
+
+# Not run
+
+}
+\seealso{
+\code{\link{cumNorm}} \code{\link{fitTimeSeries}} \code{\link{ssFit}} \code{\link{ssPerm}} \code{\link{ssPermAnalysis}}
+}
+
diff --git a/man/ssPerm.Rd b/man/ssPerm.Rd
new file mode 100644
index 0000000..fa860a3
--- /dev/null
+++ b/man/ssPerm.Rd
@@ -0,0 +1,28 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitTimeSeries.R
+\name{ssPerm}
+\alias{ssPerm}
+\title{class permutations for smoothing-spline time series analysis}
+\usage{
+ssPerm(df, B)
+}
+\arguments{
+\item{df}{Data frame containing class membership and sample/patient id label.}
+
+\item{B}{Number of permutations.}
+}
+\value{
+A list of permutted class memberships
+}
+\description{
+Creates a list of permuted class memberships for the time series permuation tests.
+}
+\examples{
+
+# Not run
+
+}
+\seealso{
+\code{\link{cumNorm}} \code{\link{fitTimeSeries}} \code{\link{ssFit}} \code{\link{ssPermAnalysis}} \code{\link{ssIntervalCandidate}}
+}
+
diff --git a/man/ssPermAnalysis.Rd b/man/ssPermAnalysis.Rd
new file mode 100644
index 0000000..c121dee
--- /dev/null
+++ b/man/ssPermAnalysis.Rd
@@ -0,0 +1,41 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitTimeSeries.R
+\name{ssPermAnalysis}
+\alias{ssPermAnalysis}
+\title{smoothing-splines anova fits for each permutation}
+\usage{
+ssPermAnalysis(data, formula, permList, intTimes, timePoints,
+  include = c("class", "time:class"), ...)
+}
+\arguments{
+\item{data}{Data used in estimation.}
+
+\item{formula}{Formula for ssanova. Of the form: abundance ~ ... where ... includes any pData slot value.}
+
+\item{permList}{A list of permutted class memberships}
+
+\item{intTimes}{Interesting time intervals.}
+
+\item{timePoints}{Time points to interpolate over.}
+
+\item{include}{Parameters to include in prediction.}
+
+\item{...}{Options for ssanova}
+}
+\value{
+A matrix of permutted area estimates for time intervals of interest.
+}
+\description{
+Calculates the fit for each permutation and estimates 
+the area under the null (permutted) model for interesting time 
+intervals of differential abundance.
+}
+\examples{
+
+# Not run
+
+}
+\seealso{
+\code{\link{cumNorm}} \code{\link{fitTimeSeries}} \code{\link{ssFit}} \code{\link{ssPerm}} \code{\link{ssIntervalCandidate}}
+}
+
diff --git a/man/trapz.Rd b/man/trapz.Rd
new file mode 100644
index 0000000..6321731
--- /dev/null
+++ b/man/trapz.Rd
@@ -0,0 +1,37 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitTimeSeries.R
+\name{trapz}
+\alias{trapz}
+\title{Trapezoidal Integration}
+\usage{
+trapz(x, y)
+}
+\arguments{
+\item{x}{x-coordinates of points on the x-axis}
+
+\item{y}{y-coordinates of function values}
+}
+\value{
+Approximated integral of the function from 'min(x)' to 'max(x)'. 
+ Or a matrix of the same size as 'y'.
+}
+\description{
+Compute the area of a function with values 'y' at the points 'x'.
+Function comes from the pracma package.
+}
+\examples{
+
+# Calculate the area under the sine curve from 0 to pi:
+ n <- 101
+ x <- seq(0, pi, len = n)
+ y <- sin(x)
+ trapz(x, y)          #=> 1.999835504
+
+# Use a correction term at the boundary: -h^2/12*(f'(b)-f'(a))
+ h  <- x[2] - x[1]
+ ca <- (y[2]-y[1]) / h
+ cb <- (y[n]-y[n-1]) / h
+ trapz(x, y) - h^2/12 * (cb - ca)  #=> 1.999999969
+
+}
+
diff --git a/man/ts2MRexperiment.Rd b/man/ts2MRexperiment.Rd
new file mode 100644
index 0000000..f97eeae
--- /dev/null
+++ b/man/ts2MRexperiment.Rd
@@ -0,0 +1,46 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/fitTimeSeries.R
+\name{ts2MRexperiment}
+\alias{ts2MRexperiment}
+\title{With a list of fitTimeSeries results, generate
+an MRexperiment that can be plotted with metavizr}
+\usage{
+ts2MRexperiment(obj, sampleNames = NULL, sampleDescription = "timepoints",
+  taxonomyLevels = NULL, taxonomyHierarchyRoot = "bacteria",
+  taxonomyDescription = "taxonomy", featuresOfInterest = NULL)
+}
+\arguments{
+\item{obj}{Output of fitMultipleTimeSeries}
+
+\item{sampleNames}{Sample names for plot}
+
+\item{sampleDescription}{Description of samples for plot axis label}
+
+\item{taxonomyLevels}{Feature names for plot}
+
+\item{taxonomyHierarchyRoot}{Root of feature hierarchy for MRexperiment}
+
+\item{taxonomyDescription}{Description of features for plot axis label}
+
+\item{featuresOfInterest}{The features to select from the fitMultipleTimeSeries output}
+}
+\value{
+MRexperiment that contains fitTimeSeries data, featureData, and phenoData
+}
+\description{
+With a list of fitTimeSeries results, generate
+an MRexperiment that can be plotted with metavizr
+}
+\examples{
+
+data(mouseData)
+res = fitMultipleTimeSeries(obj=mouseData,lvl='phylum',class="status",
+          id="mouseID",time="relativeTime",B=1)
+obj = ts2MRexperiment(res)
+obj
+
+}
+\seealso{
+\code{\link{fitTimeSeries}} \code{\link{fitMultipleTimeSeries}}
+}
+
diff --git a/man/uniqueFeatures.Rd b/man/uniqueFeatures.Rd
new file mode 100644
index 0000000..1b93f3f
--- /dev/null
+++ b/man/uniqueFeatures.Rd
@@ -0,0 +1,31 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/misc.R
+\name{uniqueFeatures}
+\alias{uniqueFeatures}
+\title{Table of features unique to a group}
+\usage{
+uniqueFeatures(obj, cl, nsamples = 0, nreads = 0)
+}
+\arguments{
+\item{obj}{Either a MRexperiment object or matrix.}
+
+\item{cl}{A vector representing assigning samples to a group.}
+
+\item{nsamples}{The minimum number of positive samples.}
+
+\item{nreads}{The minimum number of raw reads.}
+}
+\value{
+Table of features unique to a group
+}
+\description{
+Creates a table of features, their index, number of positive samples in a group,
+and the number of reads in a group. Can threshold features by a minimum no. of reads
+or no. of samples.
+}
+\examples{
+data(mouseData)
+head(uniqueFeatures(mouseData[1:100,],cl=pData(mouseData)[,3]))
+
+}
+
diff --git a/man/zigControl.Rd b/man/zigControl.Rd
new file mode 100644
index 0000000..944958e
--- /dev/null
+++ b/man/zigControl.Rd
@@ -0,0 +1,38 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/zigControl.R
+\name{zigControl}
+\alias{settings2}
+\alias{zigControl}
+\title{Settings for the fitZig function}
+\usage{
+zigControl(tol = 1e-04, maxit = 10, verbose = TRUE,
+  dfMethod = "modified", pvalMethod = "default")
+}
+\arguments{
+\item{tol}{The tolerance for the difference in negative log likelihood estimates for a feature to remain active.}
+
+\item{maxit}{The maximum number of iterations for the expectation-maximization algorithm.}
+
+\item{verbose}{Whether to display iterative step summary statistics or not.}
+
+\item{dfMethod}{Either 'default' or 'modified' (by responsibilities).}
+
+\item{pvalMethod}{Either 'default' or 'bootstrap'.}
+}
+\value{
+The value for the tolerance, maximum no. of iterations, and the verbose warning.
+}
+\description{
+Settings for the fitZig function
+}
+\note{
+\code{\link{fitZig}} makes use of zigControl.
+}
+\examples{
+control =  zigControl(tol=1e-10,maxit=10,verbose=FALSE)
+
+}
+\seealso{
+\code{\link{fitZig}} \code{\link{cumNorm}} \code{\link{plotOTU}}
+}
+
diff --git a/tests/testthat.R b/tests/testthat.R
new file mode 100644
index 0000000..b82d29f
--- /dev/null
+++ b/tests/testthat.R
@@ -0,0 +1,17 @@
+library("testthat")
+packageVersion("metagenomeSeq")
+# As suggested for opt-out option on testing by users, 
+# recommended by CRAN: http://adv-r.had.co.nz/Testing.html
+# Previously, best practice was to put all test files in inst/tests 
+# and ensure that R CMD check ran them by putting the following code in tests/test-all.R:  
+# >library(testthat)
+# >library(yourpackage)
+# >test_package("yourpackage")
+# Now, recommended practice is to put your tests in tests/testthat, 
+# and ensure R CMD check runs them by putting the following code in tests/test-all.R:
+# >library(testthat)
+# >test_check("yourpackage")
+# The advantage of this new structure is that the user has control over whether or not tests are installed using the –install-tests parameter to 
+# R CMD install, or INSTALL_opts = c(“–install-tests”) argument to install.packages(). I’m not sure why you wouldn’t want to install the tests, 
+# but now you have the flexibility as requested by CRAN maintainers.
+test_check("metagenomeSeq")
diff --git a/tests/testthat/test-fitZig.R b/tests/testthat/test-fitZig.R
new file mode 100644
index 0000000..6a7f773
--- /dev/null
+++ b/tests/testthat/test-fitZig.R
@@ -0,0 +1,58 @@
+################################################################################
+# metagenomeSeq plot functions unit tests
+################################################################################
+library("metagenomeSeq"); library("testthat"); 
+
+test_that("`fitZig` function provides expected values prior to split", {
+  # uses the lung data and pre-calculated fitZig result from 
+  # prior to this separation
+  data(lungData)
+  path = system.file("extdata", package = "metagenomeSeq")
+  fit  = readRDS(file.path(path,"lungfit.rds"))
+  
+  # run the same fit
+  k = grep("Extraction.Control",pData(lungData)$SampleType)
+  lungTrim = lungData[,-k]
+  k = which(rowSums(MRcounts(lungTrim)>0)<30)
+  lungTrim = cumNorm(lungTrim)
+  lungTrim = lungTrim[-k,]
+  smokingStatus = pData(lungTrim)$SmokingStatus
+  mod = model.matrix(~smokingStatus)
+  settings = zigControl(maxit=1,verbose=FALSE)
+  fit2 = fitZig(obj = lungTrim,mod=mod,control=settings)
+  # because the ordering is wrong
+  expect_failure(expect_equal(fit,fit2))
+  # check that they're equal now 
+  fit2 = fit2[names(fit)]
+  expect_equal(fit,fit2)
+})
+
+test_that("`fitZig` function treats a matrix the same", {
+  # uses the lung data and pre-calculated fitZig result from 
+  # prior to this separation
+  data(lungData)
+  path = system.file("extdata", package = "metagenomeSeq")
+  fit  = readRDS(file.path(path,"lungfit.rds"))
+  
+  # run the same fit
+  k = grep("Extraction.Control",pData(lungData)$SampleType)
+  lungTrim = lungData[,-k]
+  k = which(rowSums(MRcounts(lungTrim)>0)<30)
+  lungTrim = cumNorm(lungTrim)
+  lungTrim = lungTrim[-k,]
+  smokingStatus = pData(lungTrim)$SmokingStatus
+  scalingFactor = log2(normFactors(lungTrim)/1000 +1)
+  mod = model.matrix(~smokingStatus)
+  mod = cbind(mod,scalingFactor)
+  settings = zigControl(maxit=1,verbose=FALSE)
+  cnts = MRcounts(lungTrim)
+  fit2 = fitZig(obj = lungTrim,mod=mod,control=settings,useCSSoffset=FALSE)
+  fit2 = fit2[names(fit)]
+
+  # expecting failure because of call
+  expect_failure(expect_equal(fit,fit2))
+  fit2$call = "123"
+  fit$call = "123"
+  # check that they're equal
+  expect_equal(fit,fit2)
+})
diff --git a/tests/testthat/test-norm.R b/tests/testthat/test-norm.R
new file mode 100644
index 0000000..c1ca639
--- /dev/null
+++ b/tests/testthat/test-norm.R
@@ -0,0 +1,35 @@
+################################################################################
+# metagenomeSeq plot functions unit tests
+################################################################################
+library("metagenomeSeq"); library("testthat"); 
+
+test_that("`calcNormFactors` function provides expected values", {
+  # uses the lung data and pre-calculated normalization factors 
+  # for various values of p
+  data(lungData)
+  point25 = c(29,2475,2198,836,722,1820,79,1171,1985,710,145,742,848,89,1981)
+  point = c(43,2475,2198,836,722,1820,119,1171,1985,710,145,742,848,89,1981)
+  point100=as.numeric(unlist(libSize(lungData[,1:15])))
+  expect_equal(as.numeric(unlist(calcNormFactors(lungData[,1:15]))),point)
+  expect_equal(as.numeric(unlist(calcNormFactors(lungData[,1:15],p=.25))),point25)
+  expect_equal(as.numeric(unlist(calcNormFactors(lungData[,1:15],p=1))),point100)
+})
+
+test_that("`cumNorm` returns the same object as defined in the package", {
+  data(lungData); data(mouseData)
+  expect_equal(cumNorm(mouseData,p=.5), mouseData)
+  expect_equal(cumNorm(lungData), lungData)
+})
+
+test_that("`cumNormStat` returns the correct value", {
+  data(lungData); data(mouseData);
+  expect_equal(cumNormStat(lungData),0.7014946)
+  expect_equal(cumNormStat(mouseData),0.5)
+})
+
+test_that("`cumNormStatFast` returns the correct value", {
+  data(lungData); data(mouseData);
+  expect_equal(cumNormStatFast(lungData),0.7014946)
+  expect_equal(cumNormStatFast(mouseData),0.5)
+})
+
diff --git a/vignettes/fitTimeSeries.Rnw b/vignettes/fitTimeSeries.Rnw
new file mode 100644
index 0000000..4ca891a
--- /dev/null
+++ b/vignettes/fitTimeSeries.Rnw
@@ -0,0 +1,278 @@
+%\VignetteIndexEntry{fitTimeSeries: differential abundance analysis through time or location}
+%\VignetteEngine{knitr::knitr}
+\documentclass[a4paper,11pt]{article}
+\usepackage{url}
+\usepackage{afterpage}
+\usepackage{hyperref}
+\usepackage{geometry}
+\usepackage{cite}
+\geometry{hmargin=2.5cm, vmargin=2.5cm}
+\usepackage{graphicx}
+\usepackage{courier}
+\bibliographystyle{unsrt}
+
+\begin{document}
+<<include=FALSE>>=
+require(knitr)
+opts_chunk$set(concordance=TRUE,tidy=TRUE)
+@
+
+\title{{\textbf{\texttt{fitTimeSeries}: Longitudinal differential abundance analysis for marker-gene surveys}}}
+\author{Hisham Talukder, Joseph N. Paulson, Hector Corrada Bravo\\[1em]\\ Applied Mathematics $\&$ Statistics, and Scientific Computation\\ Center for Bioinformatics and Computational Biology\\ University of Maryland, College Park\\[1em]\\ \texttt{jpaulson at umiacs.umd.edu}}
+\date{Modified: February 18, 2015. Compiled: \today}
+\maketitle
+\tableofcontents
+
+\newpage
+
+<<config,echo=FALSE>>=
+options(width = 65)
+options(continue=" ")
+options(warn=-1)
+set.seed(42)
+@
+
+\section{Introduction}
+\textbf{This is a vignette specifically for the fitTimeSeries function. For a full list of functions available in the package:
+help(package=metagenomeSeq). For more information about a particular function call: ?function.}
+
+Smoothing spline regression models~\cite{Wahba:1990} are commonly used to model longitudinal data and form the basis for methods used in a large number of applications ~\cite{networkped1,LongCrisp}. Specifically, an extension of the methodology called Smoothing-Spline ANOVA~\cite{Gu} is capable of directly estimating a smooth function of interest while incorporating other covariates in the model. 
+
+A common approach to detect regions/times of interest in a genome or for differential abundance is to model differences between two groups with respect to the quantitative measurements as smooth functions and perform statistical inference on these models. In particular, widely used methods for region finding using DNA methylation data use local regression methods to estimate these smooth functions. An important aspect of these tools is their ability to incorporate sample characteristics  [...]
+
+\subsection{Problem Formulation}
+We model data in the following form:
+$$
+Y_{itk}= f_i(t,x_{k})+e_{tk}
+$$
+where i represents group factor (diet, health status, etc.), $t$ represents series factor (for example, time or location), $k$ represents replicate observations, $x_{k}$ are covariates for sample $k$ (including an indicator for group 
+membership $I\{k \in i\}$) and $e_{tk}$ are independent $N(0,\sigma^2)$ errors. We assume $f_i$ to be a smooth function, defined in an interval $[a,b]$, that can be parametric, non-parametric or a mixture of both.   
+
+Our goal is to identify intervals where the absolute difference between two groups $\eta_d(t)=f_1(t, \cdot)-f_2(t, \cdot)$ is large, that is, regions, $R_{t_1,t_2}$, where:
+$R_{t_1,t_2}=
+\{t_1,t_2 \in x 
+\textit{ such that } 
+| \eta_{d}(x) | 
+\ge C \}$ 
+and $C$ is a predefined constant threshold.
+
+To identify these areas we use hypothesis testing using the area $A_{t_1,t_2}=\int_{R_{t_1,t_2}}\eta_d(t) dt$ under the estimated function of $\eta_d(t)$ as a statistic with null and alternative hypotheses 
+$$
+  H_0: A_{t_1,t_2} \le K
+$$
+$$
+  H_1: A_{t_1,t_2} >  K
+$$
+with $K$ some fixed threshold.
+
+We employ a permutation-based method to calculate a null distribution of the area statistics $A_(t1,t2)$'s. To do this, 
+the group-membership indicator variables (0-1 binary variable) are randomly permuted $B$ times, e.g., $B=1000$ and the 
+method above is used to estimate the difference function $\eta_d^b$ (in this case simulating the null hypothesis) and an area 
+statistics $A_(t1,t2)^b$ for each random permutation. Estimates $A_(t1,t2)^b$ are then used to construct an empirical 
+estimate of $A_(t1,t2)$ under the null hypothesis. The observed area, $A_(t1,t2)^*$, is compared to the empirical null 
+distribution to calculate a p-value. Figure 1 illustrates the relationship between $R_(t1,t2)$ and $A_(t1,t2)$. The key 
+is to estimate regions $R_(t1,t2)$ where point-wise confidence intervals would be appropriate. 
+
+\section{Data preparation}
+Data should be preprocessed and prepared in tab-delimited files. Measurements are stored in a matrix with samples along the
+columns and features along the rows. For example, given $m$ features and $n$ samples, the entries in a marker-gene or 
+metagenomic count matrix \textbf{C} ($m, n$), $c_{ij}$, are the number of reads annotated for a particular feature $i$ 
+(whether it be OTU, species, genus, etc.) in sample $j$.
+Alternatively, the measurements could be some quantitative measurement such as methylation percentages or CD4 levels.\\
+
+\begin{center}
+$\bordermatrix{ &sample_1&sample_2&\ldots &sample_n\cr feature_1&c_{11} &  c_{12}  & \ldots & c_{1n}\cr feature_2& c_{21}  &  c_{22} & \ldots & c_{2n}\cr \vdots & \vdots & \vdots & \ddots & \vdots\cr feature_m & c_{m1}  &   c_{m2} &\ldots & c_{mn}}$
+\end{center}
+
+Data should be stored in a  file (tab-delimited by default) with sample names along the first row, feature names in the first
+column and should be loaded into R and formatted into a MRexperiment object. To prepare the data please read the section on data preparation in the full metagenomeSeq vignette - \texttt{vignette("metagenomeSeq")}.
+
+\subsection{Example datasets}
+There is a time-series dataset included as an examples in the \texttt{metagenomeSeq} package. Data needs to be in a \texttt{MRexperiment} object format to normalize, run the statistical tests, and visualize. As an example, throughout the vignette we'll use the following datasets. 
+To understand a \texttt{fitTimeSeries}'s usage or included data simply enter ?\texttt{fitTimeSeries}.
+
+<<requireMetagenomeSeq,warning=FALSE,message=FALSE>>=
+library(metagenomeSeq)
+library(gss)
+@
+
+\begin{enumerate}
+\setcounter{enumi}{1}
+\item Humanized gnotobiotic mouse gut \cite{ts_mouse}:
+Twelve germ-free adult male C57BL/6J mice were fed a low-fat, plant polysaccharide-rich diet. Each mouse was gavaged with healthy adult human fecal material. Following the fecal transplant, mice remained on the low-fat, plant polysacchaaride-rich diet for four weeks, following which a subset of 6 were switched to a high-fat and high-sugar diet for eight weeks. Fecal samples for each mouse went through PCR amplification of the bacterial 16S rRNA gene V2 region weekly. Details of experimen [...]
+\url{http://gordonlab.wustl.edu/TurnbaughSE_10_09/STM_2009.html}
+
+\end{enumerate}
+<<dataset2,tidy=FALSE>>=
+data(mouseData)
+mouseData
+@
+
+
+\subsection{Creating a \texttt{MRexperiment} object with other measurements}
+
+For a fitTimeSeries analysis a minimal MRexperiment-object is required and can be created using the function \texttt{newMRexperiment} which takes a count matrix described above and phenoData (annotated data frame).
+\texttt{Biobase} provides functions to create annotated data frames. 
+
+<<createMRexperiment1>>=
+# Creating mock sample replicates
+sampleID = rep(paste("sample",1:10,sep=":"),times=20)
+# Creating mock class membership
+class = rep(c(rep(0,5),rep(1,5)),times=20)
+# Creating mock time
+time = rep(1:20,each=10)
+
+phenotypeData = AnnotatedDataFrame(data.frame(sampleID,class,time))
+# Creating mock abundances
+set.seed(1)
+# No difference
+measurement1 = rnorm(200,mean=100,sd=1)
+# Some difference
+measurement2 = rnorm(200,mean=100,sd=1)
+measurement2[1:5]=measurement2[1:5] + 100
+measurement2[11:15]=measurement2[11:15] + 100
+measurement2[21:25]=measurement2[21:25] + 50
+mat = rbind(measurement1,measurement2)
+colnames(mat) = 1:200
+mat[1:2,1:10]
+@
+
+If phylogenetic information exists for the features and there is a desire to aggregate 
+measurements based on similar annotations choosing the featureData column name in lvl will aggregate measurements using the default parameters in the \texttt{aggregateByTaxonomy} function.
+
+<<createMRexperiment2>>=
+# This is an example of potential lvl's to aggregate by.
+data(mouseData)
+colnames(fData(mouseData))
+@
+
+Here we create the actual MRexperiment to run through fitTimeSeries.
+<<createMRexperiment3,tidy=FALSE>>=
+obj = newMRexperiment(counts=mat,phenoData=phenotypeData)
+obj
+res1 = fitTimeSeries(obj,feature=1,
+              class='class',time='time',id='sampleID',
+              B=10,norm=FALSE,log=FALSE)
+res2 = fitTimeSeries(obj,feature=2,
+              class='class',time='time',id='sampleID',
+              B=10,norm=FALSE,log=FALSE)
+
+
+classInfo = factor(res1$data$class)
+par(mfrow=c(3,1))
+plotClassTimeSeries(res1,pch=21,bg=classInfo)
+plotTimeSeries(res2)
+plotClassTimeSeries(res2,pch=21,bg=classInfo)
+@
+
+\section{Time series analysis}
+Implemented in the \texttt{fitTimeSeries} function is a method for calculating time intervals for which 
+bacteria are differentially abundant. Fitting is performed using Smoothing Splines ANOVA (SS-ANOVA), 
+as implemented in the \texttt{gss} package. Given observations at multiple time points for two groups 
+the method calculates a function modeling the difference in abundance across all time. Using group membership permutations we 
+estimate a null distribution of areas under the difference curve for the time intervals of interest and report significant intervals of time. Here we provide a real example from the microbiome of two groups of mice on different diets.
+
+The gnotobiotic mice come from a longitudinal study ideal for this type of analysis.
+We choose to perform our analysis at the class level and look for 
+differentially abundant time intervals for "Actinobacteria".
+For demonstrations sake we perform only 10 permutations.
+
+If you find the method useful, please cite:
+"Longitudinal differential abundance analysis for marker-gene surveys"
+Talukder H*, Paulson JN*, Bravo HC. (Submitted)
+
+<<timeSeries>>=
+res = fitTimeSeries(obj=mouseData,lvl="class",feature="Actinobacteria",class="status",id="mouseID",time="relativeTime",B=10)
+
+# We observe a time period of differential abundance for "Actinobacteria"
+res$timeIntervals
+
+str(res)
+@
+
+For example, to test every class in the mouse dataset:
+<<timeSeriesAllClasses, tidy=FALSE>>=
+classes = unique(fData(mouseData)[,"class"])
+
+timeSeriesFits = lapply(classes,function(i){
+        fitTimeSeries(obj=mouseData,
+            feature=i,
+            class="status",
+            id="mouseID",
+            time="relativeTime",
+            lvl='class',
+            C=.3,# a cutoff for 'interesting' 
+            B=1) # B is the number of permutations and should clearly not be 1
+    })
+names(timeSeriesFits) = classes
+
+# Removing classes of bacteria without a potentially
+# interesting time interval difference.
+timeSeriesFits = sapply(timeSeriesFits,function(i){i[[1]]})[-grep("No",timeSeriesFits)]
+
+# Naming the various interesting time intervals.
+for(i in 1:length(timeSeriesFits)){
+    rownames(timeSeriesFits[[i]]) = 
+      paste(
+        paste(names(timeSeriesFits)[i]," interval",sep=""),
+        1:nrow(timeSeriesFits[[i]]),sep=":"
+      )
+}
+
+# Merging into a table.
+timeSeriesFits = do.call(rbind,timeSeriesFits)
+
+# Correcting for multiple testing.
+pvalues = timeSeriesFits[,"p.value"]
+adjPvalues = p.adjust(pvalues,"bonferroni")
+timeSeriesFits = cbind(timeSeriesFits,adjPvalues)
+
+head(timeSeriesFits)
+@
+Please see the help page for \texttt{fitTimeSeries} for parameters. Note, only two groups can be compared to each other and the time parameter must be an actual value (currently no support for posix, etc.).
+
+\subsection{Paramaters}
+There are a number of parameters for the \texttt{fitTimeSeries} function. We list and provide a brief discussion below. For
+parameters influencing \texttt{ssanova}, \texttt{aggregateByTaxonomy}, \texttt{MRcounts} type ?function for more details.
+\begin{itemize}
+  \item obj - the metagenomeSeq MRexperiment-class object.
+  \item feature	- Name or row of feature of interest.
+  \item class	- Name of column in phenoData of MRexperiment-class object for class memberhip.
+  \item time	- Name of column in phenoData of MRexperiment-class object for relative time.
+  \item id	- Name of column in phenoData of MRexperiment-class object for sample id.
+  \item method	- Method to estimate time intervals of differentially abundant bacteria (only ssanova method implemented currently).
+  \item lvl	- Vector or name of column in featureData of MRexperiment-class object for aggregating counts (if not OTU level).
+  \item C	 - Value for which difference function has to be larger or smaller than (default 0).
+  \item B	- Number of permutations to perform (default 1000)
+  \item norm	- When aggregating counts to normalize or not. (see MRcounts)
+  \item log	- Log2 transform. (see MRcounts)
+  \item sl	- Scaling value. (see MRcounts)
+  \item ...	- Options for ssanova
+
+\end{itemize}
+
+\section{Visualization of features}
+To help with visualization and analysis of datasets \texttt{metagenomeSeq} has several plotting functions to gain insight of the model fits and the differentially abundant time intervals using \texttt{plotClassTimeSeries} and \texttt{plotTimeSeries} on the result. More plots will be updated.
+<<timeSeriesPlotting>>=
+par(mfrow=c(2,1))
+plotClassTimeSeries(res,pch=21,
+                    bg=res$data$class,ylim=c(0,8))
+plotTimeSeries(res)
+@
+
+\section{Summary}
+
+\texttt{metagenomeSeq}'s \texttt{fitTimeSeries} is a novel methodology for differential abundance testing of longitudinal data. If you make use of the statistical method please cite our paper. If you made use of the manual/software, please cite the manual/software!
+
+\subsection{Citing fitTimeSeries}
+<<cite>>=
+citation("metagenomeSeq")
+@
+
+\subsection{Session Info}
+<<sessionInfo>>=
+sessionInfo()
+@
+
+\bibliography{fitTimeSeries}
+\end{document}
diff --git a/vignettes/fitTimeSeries.bib b/vignettes/fitTimeSeries.bib
new file mode 100644
index 0000000..dde866d
--- /dev/null
+++ b/vignettes/fitTimeSeries.bib
@@ -0,0 +1,40 @@
+ at BOOK{Wahba:1990,
+  AUTHOR =       {G. Wahba},
+  TITLE =        {Spline Models in Statistics},
+  SERIES =       {CBMS-NSF Regional Conference Series},
+  PUBLISHER =    {SIAM},
+  ADDRESS =      {Philadelphia, PA},
+  YEAR =         {1990}
+}
+ at ARTICLE{longcrisp,
+  author =       {H. Jaroslaw and N. Elena and M.L. Nan},
+  title =        {LongCriSP: A test for Bumphunting in Longitudinal data},
+  journal =      {Statistics in Medicine},
+  year =         {2006},
+  volume =       {26},
+  pages =        {1383--1397}
+}
+ at article{bumphunter,
+  title={Bump hunting to identify differentially methylated regions in epigenetic epidemiology studies},
+  author={Jaffe, Andrew E and Murakami, Peter and Lee, Hwajin and Leek, Jeffrey T and Fallin, M Daniele and Feinberg, Andrew P and Irizarry, Rafael A},
+  journal={International journal of epidemiology},
+  volume={41},
+  number={1},
+  pages={200--209},
+  year={2012},
+  publisher={IEA}
+}
+ at book{networkped1,
+  title={Graph-based data analysis: tree-structured covariance estimation, prediction by regularized kernel estimation and aggregate database query processing for probabilistic inference},
+  author={Bravo, H{\'e}ctor Corrada},
+  year={2008},
+  publisher={ProQuest}
+}
+ at BOOK{Gu,
+  author =       {C. Gu},
+  title =        {Smoothing Spline Anova Model},
+  series =       {Springer Series in Statistics},
+  publisher =    {Springer},
+  year =         {2002}
+}
+ at article{ts_mouse, title={The effect of diet on the human gut microbiome: a metagenomic analysis in humanized gnotobiotic mice.}, volume={1}, number={6}, journal={Science translational medicine}, publisher={NIH Public Access}, author={Turnbaugh, Peter J and Ridaura, Vanessa K and Faith, Jeremiah J and Rey, Federico E and Knight, Rob and Gordon, Jeffrey I}, year={2009}, pages={6ra14}}
\ No newline at end of file
diff --git a/vignettes/metagenomeSeq.Rnw b/vignettes/metagenomeSeq.Rnw
new file mode 100644
index 0000000..2ded587
--- /dev/null
+++ b/vignettes/metagenomeSeq.Rnw
@@ -0,0 +1,725 @@
+%\VignetteIndexEntry{metagenomeSeq: statistical analysis for sparse high-throughput sequencing}
+%\VignetteEngine{knitr::knitr}
+\documentclass[a4paper,11pt]{article}
+\usepackage{url}
+\usepackage{afterpage}
+\usepackage{hyperref}
+\usepackage{geometry}
+\usepackage{cite}
+\geometry{hmargin=2.5cm, vmargin=2.5cm}
+\usepackage{graphicx}
+\usepackage{courier}
+\bibliographystyle{unsrt}
+
+\begin{document}
+<<include=FALSE>>=
+require(knitr)
+opts_chunk$set(concordance=TRUE,tidy=TRUE)
+@
+
+\title{{\textbf{\texttt{metagenomeSeq}: Statistical analysis for sparse high-throughput sequencing}}}
+\author{Joseph Nathaniel Paulson\\[1em]\\ Applied Mathematics $\&$ Statistics, and Scientific Computation\\ Center for Bioinformatics and Computational Biology\\ University of Maryland, College Park\\[1em]\\ \texttt{jpaulson at umiacs.umd.edu}}
+\date{Modified: October 4, 2016. Compiled: \today}
+\maketitle
+\tableofcontents
+
+\newpage
+
+<<config,echo=FALSE>>=
+options(width = 60)
+options(continue=" ")
+options(warn=-1)
+set.seed(42)
+@
+
+\section{Introduction}
+
+\textbf{This is a vignette for pieces of an association study pipeline. For a full list of functions available in the package: help(package=metagenomeSeq). For more information about a particular function call: ?function.} See \textit{fitFeatureModel} for our latest development.
+
+
+To load the metagenomeSeq library:
+<<requireMetagenomeSeq,warning=FALSE,message=FALSE>>=
+library(metagenomeSeq)
+@
+
+Metagenomics is the study of genetic material targeted directly from an environmental community. 
+Originally focused on exploratory and validation projects, these studies now focus on understanding the differences in microbial communities caused by phenotypic differences. 
+Analyzing high-throughput sequencing data has been a challenge to researchers due to the unique biological and technological biases that are present in marker-gene survey data.
+
+ We present a R package, \texttt{metagenomeSeq}, that implements methods developed to account for previously unaddressed biases specific to high-throughput sequencing microbial marker-gene survey data. Our method implements a novel normalization technique and method to account for sparsity due to undersampling. Other methods include
+ White \textit{et al.}'s Metastats and Segata \textit{et al.}'s LEfSe. The first is a non-parametric permutation test on $t$-statistics and the second is a non-parametric Kruskal-Wallis test followed by subsequent wilcox rank-sum tests on subgroups to guard against positive discoveries of differential abundance driven by potential confounders - neither address normalization nor sparsity.
+
+This vignette describes the basic protocol when using \texttt{metagenomeSeq}. 
+A normalization method able to control for biases in measurements across taxanomic features and a mixture model that implements a zero-inflated Gaussian distribution to account for varying depths of coverage are implemented.
+Using a linear model methodology, it is easy to include confounding sources of variability and interpret results. 
+Additionally, visualization functions are provided to examine discoveries. 
+
+The software was designed to determine features (be it Operational Taxanomic Unit (OTU), species, etc.) that are differentially abundant between two or more groups of multiple samples. 
+The software was also designed to address the effects of both normalization and undersampling of microbial communities on disease association detection and testing of feature correlations.
+
+\begin{figure}
+\centerline{\includegraphics[width=.55\textwidth]{overview.pdf}}
+\caption{General overview. metagenomeSeq requires the user to convert their data into MRexperiment objects. Using those MRexperiment objects, one can normalize their data, run statistical tests (abundance or presence-absence), and visualize or save results.}
+\end{figure}
+
+\newpage
+\section{Data preparation}
+Microbial marker-gene sequence data is preprocessed and counts are algorithmically defined 
+from project-specific sequence data by clustering reads according to read similarity. 
+Given $m$ features and $n$ samples, the elements in a count matrix 
+\textbf{C} ($m, n$), $c_{ij}$, are the number of reads annotated for a particular 
+feature $i$ (whether it be OTU, species, genus, etc.) in sample $j$. \\
+
+
+\begin{center}
+$\bordermatrix{ &sample_1&sample_2&\ldots &sample_n\cr feature_1&c_{11} &  c_{12}  & \ldots & c_{1n}\cr feature_2& c_{21}  &  c_{22} & \ldots & c_{2n}\cr \vdots & \vdots & \vdots & \ddots & \vdots\cr feature_m & c_{m1}  &   c_{m2} &\ldots & c_{mn}}$
+\end{center}
+
+Count data should be stored in a delimited (tab by default) file with sample names
+along the first row and feature names along the first column.
+
+Data is prepared and formatted as a \texttt{MRexperiment} object. For an overview of the internal structure please see Appendix A.
+
+
+\subsection{Biom-Format}
+You can load in BIOM file format data, the output of many commonly used, using the \texttt{loadBiom} function.
+The \texttt{biom2MRexperiment} and \texttt{MRexperiment2biom} functions serve as a gateway between the \texttt{biom-class} object defined in the \textbf{biom} package and a \texttt{MRexperiment-class} object. BIOM format files IO is available thanks to the \texttt{biomformat} package.  
+
+As an example, we show how one can read in a BIOM file and convert it to a \texttt{MRexperiment} object.
+<<loadBiom>>=
+# reading in a biom file
+library(biomformat)
+biom_file <- system.file("extdata", "min_sparse_otu_table.biom", package = "biomformat")
+b <- read_biom(biom_file)
+biom2MRexperiment(b)
+@
+
+As an example, we show how one can write a \texttt{MRexperiment} object out as a BIOM file.
+Here is an example writing out the mouseData \texttt{MRexperiment} object to a BIOM file.
+<<writeBiom,eval=FALSE>>=
+data(mouseData)
+# options include to normalize or not
+b <- MRexperiment2biom(mouseData)
+write_biom(b,biom_file="~/Desktop/otu_table.biom")
+@
+
+\subsection{Loading count data}
+Following preprocessing and annotation of sequencing data \texttt{metagenomeSeq} requires a count matrix with features along rows and samples along the columns.
+\texttt{metagenomeSeq} includes functions for loading delimited files of counts 
+\texttt{loadMeta} and phenodata \texttt{loadPhenoData}.
+
+As an example, a portion of the lung microbiome \cite{charlson} 
+OTU matrix is provided in \texttt{metagenomeSeq}'s library "extdata" folder. 
+The OTU matrix is stored as a tab delimited file.
+\texttt{loadMeta} loads the taxa and counts into a list.
+
+<<loadData>>=
+dataDirectory <- system.file("extdata", package="metagenomeSeq")
+lung = loadMeta(file.path(dataDirectory,"CHK_NAME.otus.count.csv")) 
+dim(lung$counts)
+@
+
+
+\subsection{Loading taxonomy}
+Next we want to load the annotated taxonomy. Check to make sure that your taxa annotations and OTUs are in the same order as your matrix rows.
+
+<<loadTaxa>>=
+taxa = read.delim(file.path(dataDirectory,"CHK_otus.taxonomy.csv"),stringsAsFactors=FALSE)
+@
+
+As our OTUs appear to be in order with the count matrix we loaded earlier, the next step is to load phenodata. 
+
+\textbf{Warning}: features need to have the same names as the rows of the count matrix when we create the MRexperiment object for provenance purposes. 
+
+\subsection{Loading metadata}
+Phenotype data can be optionally loaded into \texttt{R} with \texttt{loadPhenoData}. This function loads the data as a list.
+
+<<loadClin>>=
+clin = loadPhenoData(file.path(dataDirectory,"CHK_clinical.csv"),tran=TRUE)
+ord = match(colnames(lung$counts),rownames(clin)) 
+clin = clin[ord,]
+head(clin[1:2,])
+@
+
+
+\textbf{Warning}: phenotypes must have the same names as the columns on the count matrix when we create the MRexperiment object for provenance purposes. 
+
+\subsection{Creating a \texttt{MRexperiment} object}
+
+Function \texttt{newMRexperiment} takes a count matrix, phenoData (annotated data frame), and featureData (annotated data frame) as input. 
+\texttt{Biobase} provides functions to create annotated data frames. 
+Library sizes (depths of coverage) and normalization factors are also optional inputs.
+
+
+<<createMRexperiment1>>=
+phenotypeData = AnnotatedDataFrame(clin)
+phenotypeData
+@
+
+A feature annotated data frame. In this example it is simply the OTU numbers, but it can as easily be the annotated taxonomy at multiple levels.
+
+<<createMRexperiment2>>=
+OTUdata = AnnotatedDataFrame(taxa)
+OTUdata
+@
+
+
+<<createMRexperiment3,tidy=FALSE>>=
+obj = newMRexperiment(lung$counts,phenoData=phenotypeData,featureData=OTUdata)
+# Links to a paper providing further details can be included optionally.
+# experimentData(obj) = annotate::pmid2MIAME("21680950")
+obj
+@
+
+\subsection{Example datasets}
+There are two datasets included as examples in the \texttt{metagenomeSeq} package. Data needs to be in a \texttt{MRexperiment} object format to normalize, run statistical tests, and visualize. As an example, throughout the vignette we'll use the following datasets. 
+To understand a function's usage or included data simply enter ?functionName.
+
+\begin{enumerate}
+\item Human lung microbiome \cite{charlson}:
+The lung microbiome consists of respiratory flora sampled from six healthy individuals. Three healthy nonsmokers and three healthy smokers. The upper lung tracts were sampled by oral wash and oro-/nasopharyngeal swabs. Samples were taken using two bronchoscopes, serial bronchoalveolar lavage and lower airway protected brushes.
+\end{enumerate}
+<<dataset1,tidy=FALSE>>=
+data(lungData)
+lungData
+@
+
+\begin{enumerate}
+\setcounter{enumi}{1}
+\item Humanized gnotobiotic mouse gut \cite{ts_mouse}:
+Twelve germ-free adult male C57BL/6J mice were fed a low-fat, plant polysaccharide-rich diet. Each mouse was gavaged with healthy adult human fecal material. Following the fecal transplant, mice remained on the low-fat, plant polysacchaaride-rich diet for four weeks, following which a subset of 6 were switched to a high-fat and high-sugar diet for eight weeks. Fecal samples for each mouse went through PCR amplification of the bacterial 16S rRNA gene V2 region weekly. Details of experimen [...]
+\url{http://gordonlab.wustl.edu/TurnbaughSE_10_09/STM_2009.html}
+
+\end{enumerate}
+<<dataset2,tidy=FALSE>>=
+data(mouseData)
+mouseData
+@
+
+\newpage
+\subsection{Useful commands}
+Phenotype information can be accessed with the \verb+phenoData+ and \verb+pData+ methods:
+<<pdata>>=
+phenoData(obj)
+head(pData(obj),3)
+@
+
+Feature information can be accessed with the \verb+featureData+ and \verb+fData+ methods:
+<<fdata>>=
+featureData(obj)
+head(fData(obj)[,-c(2,10)],3)
+@
+\newpage
+The raw or normalized counts matrix can be accessed with the \verb+MRcounts+ function:
+<<MRcounts>>=
+head(MRcounts(obj[,1:2]))
+@
+
+A \texttt{MRexperiment-class} object can be easily subsetted, for example:
+<<>>=
+featuresToKeep = which(rowSums(obj)>=100)
+samplesToKeep = which(pData(obj)$SmokingStatus=="Smoker")
+obj_smokers = obj[featuresToKeep,samplesToKeep]
+obj_smokers
+head(pData(obj_smokers),3)
+@
+
+Alternative normalization scaling factors can be accessed or replaced with the \verb+normFactors+ method:
+<<normFactors>>=
+head(normFactors(obj))
+normFactors(obj) <- rnorm(ncol(obj))
+head(normFactors(obj))
+@
+
+Library sizes (sequencing depths) can be accessed or replaced with the \verb+libSize+ method:
+<<libSize>>=
+head(libSize(obj))
+libSize(obj) <- rnorm(ncol(obj))
+head(libSize(obj))
+@
+
+\newpage
+Additionally, data can be filtered to maintain a threshold of minimum depth or OTU presence:
+<<filterData>>=
+data(mouseData)
+filterData(mouseData,present=10,depth=1000)
+@
+
+Two \texttt{MRexperiment-class} objects can be merged with the \texttt{mergeMRexperiments} function, e.g.:
+
+<<mergeMRexperiment>>=
+data(mouseData)
+newobj = mergeMRexperiments(mouseData,mouseData)
+newobj
+@
+
+
+\newpage
+\section{Normalization}
+Normalization is required due to varying depths of coverage across samples. \texttt{cumNorm} is a normalization method that calculates scaling factors equal to the sum of counts up to a particular quantile.
+
+Denote the $l$th quantile of sample $j$ as $q_j^l$, that is, in sample $j$ there are $l$ taxonomic features with counts smaller than $q_j^l$. For $l= \lfloor .95m \rfloor$ then $q_j^l$ corresponds to the 95th percentile of the count distribution for sample $j$. 
+
+
+Denote $s_j^l= \sum_{(i|c_{ij}\leq q_j^l)}c_{ij}$  as the sum of counts for sample $j$ up to the $l$th quantile. Our normalization chooses a value  $\hat{l}\leq m$ to define a normalization scaling factor for each sample to produce normalized counts $\tilde{c_{ij}}$  = $\frac{c_{ij}}{s_j^{\hat{l}}}N$ where $N$ is an appropriately chosen normalization constant. See Appendix C for more information on how our method calculates the proper percentile.
+
+These normalization factors are stored in the experiment summary slot. Functions to determine the proper percentile \texttt{cumNormStat}, save normalized counts \texttt{exportMat}, or save various sample statistics \texttt{exportStats} are also provided.
+Normalized counts can be called easily by \texttt{cumNormMat(MRexperimentObject)} or \texttt{MRcounts(MRexperimentObject,norm=TRUE,log=FALSE)}.
+
+\subsection{Calculating normalization factors}
+After defining a \texttt{MRexperiment} object, the first step is to calculate the proper percentile by which to normalize counts. There are several options in calculating and visualizing the relative differences in the reference. Figure 3 is an example from the lung dataset.
+
+<<calculateNormFactors>>=
+data(lungData)
+p=cumNormStatFast(lungData)
+@
+
+\noindent
+To calculate the scaling factors we simply run \texttt{cumNorm}
+
+<<normalizeData>>=
+lungData = cumNorm(lungData,p=p)
+@
+
+The user can alternatively choose different percentiles for the normalization scheme by specifying $p$.
+
+There are other functions, including \texttt{normFactors}, \texttt{cumNormMat}, that return the normalization factors or a normalized matrix for a specified percentile. To see a full list of functions please refer to the manual and help pages. 
+
+\subsection{Exporting data}
+To export normalized count matrices:
+<<saveData>>=
+mat = MRcounts(lungData,norm=TRUE,log=TRUE)[1:5,1:5]
+exportMat(mat,file=file.path(dataDirectory,"tmp.tsv"))
+@
+
+\noindent
+To save sample statistics (sample scaling factor, quantile value, number of identified features and library size):
+<<exportStats>>=
+exportStats(lungData[,1:5],file=file.path(dataDirectory,"tmp.tsv"))
+head(read.csv(file=file.path(dataDirectory,"tmp.tsv"),sep="\t"))
+@
+
+
+<<removeData, echo=FALSE>>=
+system(paste("rm",file.path(dataDirectory,"tmp.tsv")))
+@
+
+\newpage
+\section{Statistical testing}
+Now that we have taken care of normalization we can address the effects of under sampling on the detecting differentially abundant features (OTUs, genes, etc). This is our latest development and we recommend \textit{fitFeatureModel} over \textit{fitZig}. \textit{MRcoefs}, \textit{MRtable} and \textit{MRfulltable} are useful summary tables of the model outputs.
+
+\subsection{Zero-inflated Log-Normal mixture model for each feature}
+By reparametrizing our zero-inflation model, we're able to fit a zero-inflated model for each specific OTU separately.
+We currently recommend using the zero-inflated log-normal model as implemented in \textit{fitFeatureModel}.
+
+\subsubsection{Example using fitFeatureModel for differential abundance testing}
+
+Here is an example comparing smoker's and non-smokers lung microbiome.
+
+<<fitFeatureModel>>=
+data(lungData)
+lungData = lungData[,-which(is.na(pData(lungData)$SmokingStatus))]
+lungData=filterData(lungData,present=30,depth=1)
+lungData <- cumNorm(lungData, p=.5)
+pd <- pData(lungData)
+mod <- model.matrix(~1+SmokingStatus, data=pd)
+lungres1 = fitFeatureModel(lungData,mod)
+head(MRcoefs(lungres1))
+@
+
+\subsection{Zero-inflated Gaussian mixture model}
+The depth of coverage in a sample is directly related to how many features are detected in a sample motivating our zero-inflated Gaussian (ZIG) mixture model. Figure 2 is representative of the linear relationship between depth of coverage and OTU identification ubiquitous in marker-gene survey datasets currently available. For a quick overview of the mathematical model see Appendix B.
+
+\begin{figure}
+\centerline{\includegraphics[width=.55\textwidth]{metagenomeSeq_figure1.png}}
+\caption{\footnotesize{The number of unique features is plotted against depth of coverage for samples from the Human Microbiome Project \cite{hmp}. Including the depth of coverage and the interaction of body site and sequencing site we are able to acheive an adjusted $\mathrm{R}^2$ of .94. The zero-inflated Gaussian mixture was developed to account for missing features.}}\label{fig1}
+\end{figure}
+
+Function \texttt{fitZig} performs a complex mathematical optimization routine to estimate probabilities that a zero for a particular feature in a sample is a technical zero or not. The function relies heavily on the \texttt{limma} package \cite{limma}. Design matrices can be created in R by using the \texttt{model.matrix} function and are inputs for \texttt{fitZig}. 
+
+For large survey studies it is often pertinent to include phenotype information or confounders into a design matrix when testing the association between the abundance of taxonomic features and a phenotype phenotype of interest (disease, for
+instance). Our linear model methodology can easily incorporate these
+confounding covariates in a straightforward manner. \texttt{fitZig} output includes weighted fits for each of the $m$ features. Results can be filtered and saved using \texttt{MRcoefs} or \texttt{MRtable}.
+
+\subsubsection{Example using fitZig for differential abundance testing}
+\textbf{Warning}: The user should restrict significant features to those with a minimum number of positive samples. What this means is that one should not claim features are significant unless the effective number of samples is above a particular percentage. For example, fold-change estimates might be unreliable if an entire group does not have a positive count for the feature in question.
+
+
+We recommend the user remove features based on the number of estimated effective samples, please see \texttt{calculateEffectiveSamples}. We recommend removing features with less than the average number of effective samples in all features. In essence, setting eff = .5 when using \texttt{MRcoefs}, \texttt{MRfulltable}, or \texttt{MRtable}. To find features absent from a group the function \texttt{uniqueFeatures} provides a table of the feature ids, the number of positive features and read [...]
+
+In our analysis of the lung microbiome data, we can remove features that are not present in many samples, controls, and calculate the normalization factors. The user needs to decide which metadata should be included in the linear model.
+
+<<preprocess,dev='pdf',out.width='.55\\linewidth',out.height='.55\\linewidth',fig.cap='Relative difference for the median difference in counts from the reference.',fig.align='center',warning=FALSE>>=
+data(lungData)
+controls = grep("Extraction.Control",pData(lungData)$SampleType)
+lungTrim = lungData[,-controls]
+rareFeatures = which(rowSums(MRcounts(lungTrim)>0)<10)
+lungTrim = lungTrim[-rareFeatures,]
+lungp = cumNormStat(lungTrim,pFlag=TRUE,main="Trimmed lung data")
+lungTrim = cumNorm(lungTrim,p=lungp)
+@
+
+After the user defines an appropriate model matrix for hypothesis testing there are optional inputs to \texttt{fitZig}, including settings determined by \texttt{zigControl}. We ask the user to review the help files for both \texttt{fitZig} and \texttt{zigControl}. For this example we include body site as covariates and want to test for the bacteria differentially abundant between smokers and non-smokers.
+
+<<zigTesting>>=
+smokingStatus = pData(lungTrim)$SmokingStatus
+bodySite = pData(lungTrim)$SampleType
+normFactor = normFactors(lungTrim)
+normFactor = log2(normFactor/median(normFactor) + 1)
+mod = model.matrix(~smokingStatus+bodySite + normFactor)
+settings = zigControl(maxit=10,verbose=TRUE)
+fit = fitZig(obj = lungTrim,mod=mod,useCSSoffset = FALSE, 
+             control=settings)
+
+# The default, useCSSoffset = TRUE, automatically includes the CSS scaling normalization factor.
+@
+
+The result, \texttt{fit}, is a list providing detailed estimates of the fits including a 
+\texttt{limma} fit in \texttt{fit\$fit} and an \texttt{ebayes} statistical fit in \texttt{fit\$eb}.
+This data can be analyzed like any \texttt{limma} fit and in this example, the column of 
+the fitted coefficientsrepresents the fold-change for our "smoker" vs. "nonsmoker" analysis. 
+
+Looking at the particular analysis just performed, there appears to be OTUs representing two
+\textit{Prevotella}, two \textit{Neisseria}, a \textit{Porphyromonas} and a \textit{Leptotrichia} that are differentially abundant. One should check that similarly annotated OTUs are not equally differentially abundant in controls. 
+
+Alternatively, the user can input a model with their own normalization factors including them directly in the model matrix and specifying the option \texttt{useCSSoffset = FALSE} in fitZig.
+
+\subsubsection{Multiple groups}
+Assuming there are multiple groups it is possible to make use of Limma's topTable functions for F-tests
+and contrast functions to compare multiple groups and covariates of interest. The output of fitZig includes a 'MLArrayLM' Limma object that can be called on by other functions. When running fitZig by default there is an additional covariate added to the design matrix. The fit and the ultimate design matrix are crucial for contrasts. 
+<<contrasts>>=
+# maxit=1 is for demonstration purposes
+settings = zigControl(maxit=1,verbose=FALSE)
+mod = model.matrix(~bodySite)
+colnames(mod) = levels(bodySite)
+# fitting the ZIG model
+res = fitZig(obj = lungTrim,mod=mod,control=settings)
+# The output of fitZig contains a list of various useful items. hint: names(res).
+# 
+# Probably the most useful is the limma 'MLArrayLM' object called fit.
+zigFit = res$fit
+finalMod = res$fit$design
+
+contrast.matrix = makeContrasts(BAL.A-BAL.B,OW-PSB,levels=finalMod)
+fit2 = contrasts.fit(zigFit, contrast.matrix)
+fit2 = eBayes(fit2)
+topTable(fit2)
+
+# See help pages on decideTests, topTable, topTableF, vennDiagram, etc.
+@
+Further specific details can be found in section 9.3 and beyond of the Limma user guide. The take home message is that to make use of any Limma functions one needs to extract the final model matrix used: \textit{res\$fit\$design} and the MLArrayLM Limma fit object: \textit{res\$fit}.
+
+\subsubsection{Exporting fits}
+Currently functions are being developed to wrap and output results more neatly, but \texttt{MRcoefs}, \texttt{MRtable}, \texttt{MRfulltable} can be used to view coefficient fits and related statistics and export the data with optional output values - see help files to learn how they differ. An important note is that the \texttt{by} variable controls which coefficients are of interest whereas \texttt{coef} determines the display.\\
+
+To only consider features that are found in a large percentage of effectively positive (positive samples + the weight of zero counts included in the Gaussian mixture) use the \textbf{eff} option in the \texttt{MRtables}.
+
+<<fittedResult,tidy=TRUE>>=
+taxa = 
+  sapply(strsplit(as.character(fData(lungTrim)$taxa),split=";"),
+         function(i){i[length(i)]})
+head(MRcoefs(fit,taxa=taxa,coef=2))
+@
+
+\subsection{Time series analysis}
+Implemented in the \texttt{fitTimeSeries} function is a method for calculating time intervals for which bacteria are
+differentially abundant. Fitting is performed using Smoothing Splines ANOVA (SS-ANOVA), as implemented in the \texttt{gss}
+package. Given observations at multiple time points for two groups the method calculates a function modeling the difference 
+in abundance across all time. Using group membership permutations weestimate a null distribution of areas under the difference
+curve for the time intervals of interest and report significant intervals of time. 
+
+Use of the function for analyses should cite:
+"Finding regions of interest in high throughput genomics data using smoothing splines"
+Talukder H, Paulson JN, Bravo HC. (Submitted)
+
+For a description of how to perform a time-series / genome based analysis call the \texttt{fitTimeSeries} vignette.
+<<timeSeries>>=
+# vignette("fitTimeSeries")
+@
+
+\subsection{Log Normal permutation test}
+Included is a standard log normal linear model with permutation based p-values permutation. We show the fit for the same model as above using 10 permutations providing p-value resolution to the tenth. The \texttt{coef} parameter refers to the coefficient of interest to test. We first generate the list of significant features.
+
+<<perm>>=
+coeffOfInterest = 2
+res = fitLogNormal(obj = lungTrim, mod = mod, useCSSoffset = FALSE, B = 10, coef = coeffOfInterest)
+
+# extract p.values and adjust for multiple testing
+# res$p are the p-values calculated through permutation
+adjustedPvalues = p.adjust(res$p,method="fdr")
+
+# extract the absolute fold-change estimates
+foldChange = abs(res$fit$coef[,coeffOfInterest])
+
+# determine features still significant and order by the 
+sigList = which(adjustedPvalues <= .05)
+sigList = sigList[order(foldChange[sigList])]
+
+# view the top taxa associated with the coefficient of interest.
+head(taxa[sigList])
+@
+
+\subsection{Presence-absence testing}
+The hypothesis for the implemented presence-absence test is that the proportion/odds of a given feature present is higher/lower among one group of individuals compared to another, and we want to test whether any difference in the proportions observed is significant. We use Fisher's exact test to create a 2x2 contingency table and calculate p-values, odd's ratios, and confidence intervals.  \texttt{fitPA} calculates the presence-absence for each organism and returns a table of p-values, o [...]
+
+<<presenceAbsence>>=
+classes = pData(mouseData)$diet
+res = fitPA(mouseData[1:5,],cl=classes)
+# Warning - the p-value is calculating 1 despite a high odd's ratio.
+head(res)
+@
+
+\subsection{Discovery odds ratio testing}
+The hypothesis for the implemented discovery test is that the proportion of observed counts for a feature of all counts are comparable between groups. We use Fisher's exact test to create a 2x2 contingency table and calculate p-values, odd's ratios, and confidence intervals.  \texttt{fitDO} calculates the proportion of counts for each organism and returns a table of p-values, odd's ratios, and confidence intervals. The function will accept either a \texttt{MRexperiment} object or matrix.
+
+<<discOdds>>=
+classes = pData(mouseData)$diet
+res = fitDO(mouseData[1:100,],cl=classes,norm=FALSE,log=FALSE)
+head(res)
+@
+
+\subsection{Feature correlations}
+To test the correlations of abundance features, or samples, in a pairwise fashion we have implemented \texttt{correlationTest} and \texttt{correctIndices}. The \texttt{correlationTest} function will calculate basic pearson, spearman, kendall correlation statistics for the rows of the input and report the associated p-values. If a vector of length ncol(obj) it will also calculate the correlation of each row with the associated vector.
+
+<<corTest>>=
+cors = correlationTest(mouseData[55:60,],norm=FALSE,log=FALSE)
+head(cors)
+@
+\textbf{Caution:} http://www.ncbi.nlm.nih.gov/pubmed/23028285
+
+\subsection{Unique OTUs or features}
+To find features absent from any number of classes the function \texttt{uniqueFeatures} provides a table of the feature ids, the number of positive features and reads for each group. Thresholding for the number of positive samples or reads required are options.
+
+<<uniqueFeatures>>=
+cl = pData(mouseData)[["diet"]]
+uniqueFeatures(mouseData,cl,nsamples = 10,nreads = 100)
+@
+
+\newpage
+\section{Aggregating counts}
+Normalization is recommended at the OTU level. However, functions are in place to aggregate 
+the count matrix (normalized or not), based on a particular user defined level. Using the
+featureData information in the MRexperiment object, calling \texttt{aggregateByTaxonomy} or \texttt{aggTax} on a MRexperiment object and declaring particular featureData column name (i.e.
+'genus') will aggregate counts to the desired level with the aggfun function (default colSums). Possible aggfun alternatives include colMeans and colMedians.
+
+<<aggTax>>=
+obj = aggTax(mouseData,lvl='phylum',out='matrix')
+head(obj[1:5,1:5])
+@
+
+Additionally, aggregating samples can be done using the
+phenoData information in the MRexperiment object. Calling \texttt{aggregateBySample} or \texttt{aggsamp} on a MRexperiment object and declaring a particular phenoData column name (i.e.
+'diet') will aggregate counts with the aggfun function (default rowMeans). Possible aggfun alternatives include rowSums and rowMedians.
+
+<<aggSamp>>=
+obj = aggSamp(mouseData,fct='mouseID',out='matrix')
+head(obj[1:5,1:5])
+@
+
+The \texttt{aggregateByTaxonomy},\texttt{aggregateBySample}, \texttt{aggTax} \texttt{aggSamp} functions are flexible enough to put in either 1) a matrix with a vector of labels or 2) a MRexperiment object with a vector of labels or featureData column name. The function can also output either a matrix or MRexperiment object.
+
+\newpage
+\section{Visualization of features}
+
+To help with visualization and analysis of datasets \texttt{metagenomeSeq} has several plotting functions to gain insight of the dataset's overall structure and particular individual features. An initial interactive exploration of the data can be displayed with the \texttt{display} function.
+
+For an overall look at the dataset we provide a number of plots including heatmaps of feature counts: \texttt{plotMRheatmap}, basic feature correlation structures: \texttt{plotCorr}, 
+PCA/MDS coordinates of samples or features: \texttt{plotOrd}, rarefaction effects: \texttt{plotRare} and contingency table
+style plots: \texttt{plotBubble}.
+
+
+Other plotting functions look at particular features such as the abundance for a single feature: \texttt{plotOTU} and \texttt{plotFeature}, or of multiple features at once:
+\texttt{plotGenus}. Plotting multiple OTUs with similar annotations allows for
+additional control of false discoveries.
+
+\subsection{Interactive Display}
+Due to recent advances in the \texttt{interactiveDisplay} package, calling the \texttt{display} function on
+\texttt{MRexperiment} objects will bring up a browser to explore your data through several interactive visualizations.
+For more detailed interactive visualizations one might be interested in the shiny-phyloseq package.
+
+<<interactiveDisplay>>=
+# Calling display on the MRexperiment object will start a browser session with interactive plots.
+
+# require(interactiveDisplay)
+# display(mouseData)
+@
+
+\subsection{Structural overview}
+Many studies begin by comparing the abundance composition across 
+sample or feature phenotypes. Often a first step of data analysis is a 
+heatmap, correlation or co-occurence plot or some other data exploratory method. 
+The following functions have been implemented to provide a first step overview 
+of the data:
+
+
+\begin{enumerate}
+\item \texttt{plotMRheatmap} - heatmap of abundance estimates (Fig. 4 left)
+\item \texttt{plotCorr} - heatmap of pairwise correlations (Fig. 4 right)
+\item \texttt{plotOrd} - PCA/CMDS components (Fig. 5 left)
+\item \texttt{plotRare} - rarefaction effect (Fig. 5 right)
+\item \texttt{plotBubble} - contingency table style plot (see help)
+\end{enumerate}
+
+\noindent
+Each of the above can include phenotypic information in helping to explore the data.
+
+Below we show an example of how to create a heatmap and hierarchical clustering of $\log_2$ 
+transformed counts for the 200 OTUs with the largest overall variance. 
+Red values indicate counts close to zero. Row color labels indicate OTU 
+taxonomic class; column color labels indicate diet (green = high fat, 
+yellow = low fat). Notice the samples cluster by diet in these cases 
+and there are obvious clusters. We then plot a correlation matrix for the same features.
+
+<<heatmapData,fig.cap='Left) Abundance heatmap (plotMRheatmap). Right) Correlation heatmap (plotCorr).',dev='pdf',fig.show='hold',out.width='.5\\linewidth', out.height='.5\\linewidth'>>=
+trials = pData(mouseData)$diet
+heatmapColColors=brewer.pal(12,"Set3")[as.integer(factor(trials))];
+heatmapCols = colorRampPalette(brewer.pal(9, "RdBu"))(50)
+
+# plotMRheatmap
+plotMRheatmap(obj=mouseData,n=200,cexRow = 0.4,cexCol = 0.4,trace="none",
+                col = heatmapCols,ColSideColors = heatmapColColors)
+
+# plotCorr
+plotCorr(obj=mouseData,n=200,cexRow = 0.25,cexCol = 0.25,
+         trace="none",dendrogram="none",col=heatmapCols)
+@
+
+Below is an example of plotting CMDS plots of the data and the rarefaction effect at the OTU level. None of the data is removed (we recommend removing outliers typically).
+<<MDSandRareplots,fig.cap='Left) CMDS of features (plotOrd). Right) Rarefaction effect (plotRare).',dev='pdf',fig.show='hold',out.width='.5\\linewidth', out.height='.5\\linewidth'>>=
+cl = factor(pData(mouseData)$diet)
+
+# plotOrd - can load vegan and set distfun = vegdist and use dist.method="bray"
+plotOrd(mouseData,tran=TRUE,usePCA=FALSE,useDist=TRUE,bg=cl,pch=21)
+
+# plotRare
+res = plotRare(mouseData,cl=cl,pch=21,bg=cl)
+
+# Linear fits for plotRare / legend
+tmp=lapply(levels(cl), function(lv) 
+  lm(res[,"ident"]~res[,"libSize"]-1, subset=cl==lv))
+for(i in 1:length(levels(cl))){
+   abline(tmp[[i]], col=i)
+}
+legend("topleft", c("Diet 1","Diet 2"), text.col=c(1,2),box.col=NA)
+@
+
+\subsection{Feature specific}
+Reads clustered with high similarity represent functional or taxonomic units. 
+However, it is possible that reads from the same organism get clustered into
+multiple OTUs. Following differential abundance analysis. 
+It is important to confirm differential abundance. 
+One way to limit false positives is ensure that the feature is actually abundant (enough positive samples). 
+Another way is to plot the abundances of features similarly annotated.
+
+\begin{enumerate}
+\item \texttt{plotOTU} - abundances of a particular feature by group (Fig. 6 left)
+\item \texttt{plotGenus} - abundances for several features similarly annotated by group (Fig. 6 right)
+\item \texttt{plotFeature} - abundances of a particular feature by group (similar to plotOTU, Fig. 7)
+\end{enumerate}
+
+
+Below we use \texttt{plotOTU} to plot the normalized log(cpt) of a specific OTU annotated as \textit{Neisseria meningitidis}, in particular the 779th row of lungTrim's count matrix. Using \texttt{plotGenus} we plot the normalized log(cpt) of all OTUs annotated as \textit{Neisseria meningitidis}. 
+
+It would appear that \textit{Neisseria meningitidis} is differentially more abundant in nonsmokers.
+<<plotOTUData,fig.cap='Left) Abundance plot (plotOTU). Right) Multiple OTU abundances (plotGenus).',dev='pdf',fig.show='hold',out.width='.5\\linewidth', out.height='.5\\linewidth',tidy=TRUE>>=
+head(MRtable(fit,coef=2,taxa=1:length(fData(lungTrim)$taxa)))
+patients=sapply(strsplit(rownames(pData(lungTrim)),split="_"),
+          function(i){
+            i[3]
+          })
+pData(lungTrim)$patients=patients
+classIndex=list(smoker=which(pData(lungTrim)$SmokingStatus=="Smoker"))
+classIndex$nonsmoker=which(pData(lungTrim)$SmokingStatus=="NonSmoker")
+otu = 779
+
+# plotOTU
+plotOTU(lungTrim,otu=otu,classIndex,main="Neisseria meningitidis")
+
+# Now multiple OTUs annotated similarly
+x = fData(lungTrim)$taxa[otu]
+otulist = grep(x,fData(lungTrim)$taxa)
+
+# plotGenus
+plotGenus(lungTrim,otulist,classIndex,labs=FALSE,
+            main="Neisseria meningitidis")
+
+lablist<- c("S","NS")
+axis(1, at=seq(1,6,by=1), labels = rep(lablist,times=3))
+@
+
+<<plotFeatureData,fig.cap='Plot of raw abundances',dev='pdf',fig.show='hold',out.width='.5\\linewidth', out.height='.5\\linewidth',tidy=TRUE>>=
+classIndex=list(Western=which(pData(mouseData)$diet=="Western"))
+classIndex$BK=which(pData(mouseData)$diet=="BK")
+otuIndex = 8770
+
+# par(mfrow=c(1,2))
+dates = pData(mouseData)$date
+plotFeature(mouseData,norm=FALSE,log=FALSE,otuIndex,classIndex,
+            col=dates,sortby=dates,ylab="Raw reads")
+@
+
+\newpage
+\section{Summary}
+
+\texttt{metagenomeSeq} is specifically designed for sparse high-throughput sequencing experiments that addresses the analysis of differential abundance for marker-gene survey data. The package, while designed for marker-gene survey datasets, may be appropriate for other sparse data sets for which the zero-inflated Gaussian mixture model may apply. If you make use of the statistical method please cite our paper. If you made use of the manual/software, please cite the manual/software!
+
+\subsection{Citing metagenomeSeq}
+<<cite>>=
+citation("metagenomeSeq")
+@
+
+\subsection{Session Info}
+<<sessionInfo>>=
+sessionInfo()
+@
+
+\newpage
+\section{Appendix}
+\subsection{Appendix A: MRexperiment internals}
+The S4 class system in R allows for object oriented definitions. \texttt{metagenomeSeq} makes use of the \texttt{Biobase} package in Bioconductor and their virtual-class, \texttt{eSet}. Building off of \texttt{eSet}, the main S4 class in \texttt{metagenomeSeq} is termed \texttt{MRexperiment}. \texttt{MRexperiment} is a simple extension of \texttt{eSet}, adding a single slot, \texttt{expSummary}.
+
+The experiment summary slot is a data frame that includes the depth of coverage and the normalization factors for each sample. Future datasets can be formated as MRexperiment objects and analyzed with relative ease. A \texttt{MRexperiment} object is created by calling \texttt{newMRexperiment}, passing the counts, phenotype and feature data as parameters.
+
+We do not include normalization factors or library size in the currently available slot specified for the sample specific phenotype data. All matrices are organized in the \texttt{assayData} slot. All phenotype data (disease status, age, etc.) is stored in \texttt{phenoData} and feature data (OTUs, taxanomic assignment to varying levels, etc.) in \texttt{featureData}. Additional slots are available for reproducibility and annotation.
+
+\subsection{Appendix B: Mathematical model}
+
+Defining the class comparison of interest as $k(j)=I\{j \in \mathrm{ group } A\}$. The zero-inflated model is defined for the continuity-corrected $\log_2$ of the count data $y_{ij} = \log_2(c_{ij}+1)$ as a mixture of a point mass at zero $I_{\{0\}}(y_{ij})$ and a count distribution $f_{count}(y_{ij};\mu_i, \sigma_i^2) \sim N(\mu_i, \sigma_i^2)$.
+Given mixture parameters $\pi_{j}$, we have that the density of the zero-inflated Gaussian distribution for feature $i$, in sample $j$ with $S_{j}$ total counts is:
+
+\begin{equation}
+f_{zig}(y_{ij}; \theta ) = \pi_{j}(S_{j}) \cdot I_{\{0\}}(y_{ij})
++ (1-\pi_{j}(S_{j})) \cdot f_{count}(y_{ij};\theta)
+\end{equation}
+
+Maximum-likelihood estimates are approximated using an EM algorithm,
+where we treat mixture membership $\Delta_{ij}=1$ if $y_{ij}$ is
+generated from the zero point mass as latent indicator variables\cite{EM}. We make use of an EM algorithm to account for the linear relationship between sparsity and depth of coverage. The user can specify within the \texttt{fitZig} function a non-default zero model that accounts for more than simply the depth of coverage (e.g. country, age, any metadata associated with sparsity, etc.).
+See Figure 8 for the graphical model.
+
+\begin{figure}
+\centerline{\includegraphics[width=.7\textwidth]{metagenomeSeq_figure2.png}}
+\caption{\footnotesize{Graphical model. Green nodes represent observed variables: $S_j$ is the
+total number of reads in sample $j$; $k_j$ the case-control status
+of sample $j$; and $y_{ij}$ the logged normalized counts for feature $i$ in sample $j$. Yellow nodes represent counts obtained from each mixture component: counts come from either a spike-mass at zero,
+$y_{ij}^0$, or the ``count'' distribution, $y_{ij}^1$. Grey nodes $b_{0i}$, $b_{1i}$ and $\sigma_{i}^2$ represent the
+estimated overall mean, fold-change and variance of the count distribution component for feature $i$. $\pi_j$, is the mixture proportion for sample $j$ which depends on sequencing depth via a linear model defined by parameters $\beta_0$ and $\beta_1$. The expected value of latent indicator variables $\Delta_{ij}$ give the posterior probability of a count being generated from a spike-mass at zero, i.e. $y_{ij}^0$. We assume $M$ features and $N$ samples.}}
+\end{figure}
+
+More information will be included later.  For now, please see the online methods in: 
+
+http://www.nature.com/nmeth/journal/vaop/ncurrent/full/nmeth.2658.html
+
+\subsection{Appendix C: Calculating the proper percentile} To be included: an overview of the two methods implemented for the data driven percentile calculation and more description below.
+
+
+The choice of the appropriate quantile given is crucial for ensuring that the normalization approach does not introduce normalization-related artifacts in the data. At a high level, the count distribution of samples should all be roughly equivalent and independent of each other up to this quantile under the assumption that, at this range, counts are derived from a common distribution.
+
+
+More information will be included later. For now, please see the online methods in: 
+
+http://www.nature.com/nmeth/journal/vaop/ncurrent/full/nmeth.2658.html
+
+\newpage
+\bibliography{metagenomeSeq}
+\end{document}
diff --git a/vignettes/metagenomeSeq.bib b/vignettes/metagenomeSeq.bib
new file mode 100644
index 0000000..1822098
--- /dev/null
+++ b/vignettes/metagenomeSeq.bib
@@ -0,0 +1,33 @@
+ at article{metastats, title={Statistical Methods for Detecting Differentially Abundant Features in Clinical Metagenomic Samples}, volume={11}, journal={PLOS Comp Bio}, publisher={PLOS}, author={White, James and Nagaranjan, Niranjan and Pop, Mihai}, year={2009}}
+ at article{lefse,
+abstract = {ABSTRACT: This study describes and validates a new method for metagenomic biomarker discovery by way of class comparison, tests of biological consistency and effect size estimation. This addresses the challenge of finding organisms, genes, or pathways that consistently explain the differences between two or more microbial communities which is a central problem to the study of metagenomics. We extensively validate our method on several microbiomes and a convenient online inter [...]
+author = {Segata, Nicola and Izard, Jacques and Waldron, Levi and Gevers, Dirk and Miropolsky, Larisa and Garrett, Wendy S and Huttenhower, Curtis},
+doi = {10.1186/gb-2011-12-6-r60},
+file = {:Users/jnpaulson/Downloads/gb-2011-12-6-r60.pdf:pdf},
+issn = {1465-6914},
+journal = {Genome biology},
+month = jun,
+number = {6},
+pages = {R60},
+pmid = {21702898},
+publisher = {BioMed Central Ltd},
+title = {{Metagenomic biomarker discovery and explanation.}},
+volume = {12},
+year = {2011}
+}
+ at article{ts_mouse, title={The effect of diet on the human gut microbiome: a metagenomic analysis in humanized gnotobiotic mice.}, volume={1}, number={6}, journal={Science translational medicine}, publisher={NIH Public Access}, author={Turnbaugh, Peter J and Ridaura, Vanessa K and Faith, Jeremiah J and Rey, Federico E and Knight, Rob and Gordon, Jeffrey I}, year={2009}, pages={6ra14}}
+ at article{edgeR, title={edgeR: a Bioconductor package for differential expression analysis of digital gene expression data}, volume={26}, number={1}, journal={Bioinformatics}, publisher={Oxford University Press}, author={Robinson, Mark D and McCarthy, Davis J and Smyth, Gordon K}, year={2010}, pages={139--140}}
+
+ at article{deseq, title={Differential expression analysis for sequence count data.}, volume={11}, number={10}, journal={Genome Biology}, publisher={BioMed Central Ltd}, author={Anders, Simon and Huber, Wolfgang}, year={2010}, pages={R106}}
+
+ at article{charlson, title={Topographical Continuity of Bacterial Populations in the Healthy Human Respiratory Tract.}, volume={184}, journal={American Journal of Respiratory and Critical Care Medicine}, publisher={Am Thoracic Soc}, author={Charlson, Emily S and Bittinger, Kyle and Haas, Andrew R and Fitzgerald, Ayannah S and Frank, Ian and Yadav, Anjana and Bushman, Frederic D and Collman, Ronald G}, year={2011}}
+
+ at article{ghodsi, title={DNACLUST: accurate and efficient clustering of phylogenetic marker genes.}, volume={12}, number={1}, journal={BMC Bioinformatics}, publisher={BioMed Central Ltd}, author={Ghodsi, Mohammadreza and Liu, Bo and Pop, Mihai}, year={2011}, pages={271}}
+
+ at article{hmp, title={A framework for human microbiome research}, volume={486}, url={http://www.nature.com/doifinder/10.1038/nature11209}, number={7402}, journal={Nature}, publisher={Nature Publishing Group}, author={HMP, Consortium}, year={2012}}
+
+ at article{recount, title={ReCount: A multi-experiment resource of analysis-ready RNA-seq gene count datasets.}, volume={12}, url={http://www.ncbi.nlm.nih.gov/pubmed/22087737}, number={1}, journal={BMC Bioinformatics}, publisher={BioMed Central Ltd}, author={Frazee, Alyssa C and Langmead, Ben and Leek, Jeffrey T}, year={2011}, pages={449}}
+
+ at book{limma, title={Limma: linear models for microarray data}, number={October}, booktitle={Bioinformatics and Computational Biology Solutions using R and Bioconductor}, publisher={Springer}, author={Smyth, Gordon K}, year={2005}, pages={397--420}}
+
+ at article{EM, title={Maximum likelihood from incomplete data via the EM algorithm}, volume={39}, url={http://www.jstor.org/stable/2984875}, number={1}, journal={Journal of the Royal Statistical Society Series B Methodological}, publisher={JSTOR}, author={Dempster, A P and Laird, N M and Rubin, D B}, year={1977}, pages={1--38}}
\ No newline at end of file
diff --git a/vignettes/metagenomeSeq_figure1.png b/vignettes/metagenomeSeq_figure1.png
new file mode 100644
index 0000000..5739dc6
Binary files /dev/null and b/vignettes/metagenomeSeq_figure1.png differ
diff --git a/vignettes/metagenomeSeq_figure2.png b/vignettes/metagenomeSeq_figure2.png
new file mode 100644
index 0000000..0ec80e6
Binary files /dev/null and b/vignettes/metagenomeSeq_figure2.png differ
diff --git a/vignettes/overview.pdf b/vignettes/overview.pdf
new file mode 100644
index 0000000..8019983
Binary files /dev/null and b/vignettes/overview.pdf differ

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/r-bioc-metagenomeseq.git



More information about the debian-med-commit mailing list