Next changeset 1:5b45377f6a75 (2020-07-22) |
Commit message:
"planemo upload for repository https://github.com/ColineRoyaux/PAMPA-Galaxy commit 07f1028cc764f920b1e6419c151f04ab4e3600fa" |
added:
CalculatePresAbs.xml FunctExeCalcPresAbsGalaxy.r FunctPAMPAGalaxy.r pampa_macros.xml test-data/ObservationsSansszcl_cropped.tabular test-data/Presence_absence_table_sansszcl_cropped.tabular |
b |
diff -r 000000000000 -r c9dfe4e20a45 CalculatePresAbs.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CalculatePresAbs.xml Tue Jul 21 05:59:49 2020 -0400 |
[ |
@@ -0,0 +1,83 @@ +<tool id="pampa_presabs" name="Calculate presence absence table" version="@VERSION@"> + <description>calculate presence absence table from observation data</description> + <macros> + <import>pampa_macros.xml</import> + </macros> + <expand macro="Pampa_requirements"/> + <command detect_errors="exit_code"><![CDATA[ + Rscript + '$__tool_directory__/FunctExeCalcPresAbsGalaxy.r' + '$input' + '$__tool_directory__/FunctPAMPAGalaxy.r' + '$output_presabs' + ]]> + </command> + <inputs> + <expand macro="pampa_input_calculate"/> + </inputs> + <outputs> + <data name="output_presabs" from_work_dir="TabPresAbs.tabular" format="tabular"/> + </outputs> + <tests> + <test> + <param name="input" value="ObservationsSansszcl_cropped.tabular"/> + <output name="output_presabs" value="Presence_absence_table_sansszcl_cropped.tabular"/> + </test> + </tests> + <help><![CDATA[ +==================================================== +Calculate presence absence table from abundance data +==================================================== + +**What it does** + +This tool from PAMPA toolsuite computes an abundance (max and standard deviation if SVR data) and presence absence table at finest aggregation possible from observation data + +| + +**Input description** + +A tabular file with observation data. Must at least contain three columns 'observation.unit' +which associate year and location or 'year' and 'location', 'species.code' with species ID and 'number' for abundance. + ++------------------+--------------+------------+ +| observation.unit | species.code | number | ++==================+==============+============+ +| site_yearID | speciesID | 4 | ++------------------+--------------+------------+ +| ... | ... | ... | ++------------------+--------------+------------+ + +OR + ++------+----------+--------------+------------+ +| year | location | species.code | number | ++======+==========+==============+============+ +| 2000 |locationID| speciesID | 4 | ++------+----------+--------------+------------+ +| ... | ... | ... | ... | ++------+----------+--------------+------------+ + +The data frame may also contain: + +- 'size.class' field with 'G' representing big individuals in given species, 'M'middle-sized individuals and 'P' small individuals +- 'rotation' field for STAVIRO data + +| + +**Output** + + +A tabular file with presence/absence at finest aggregation available (per observation unit per species OR per observation unit per species per size class) + + +| + +**Source** + +Derived from PAMPA scripts (https://wwz.ifremer.fr/pampa/Meth.-Outils/Outils) written by Yves Reecht. + + ]]></help> + + <expand macro="pampa_bibref" /> +</tool> |
b |
diff -r 000000000000 -r c9dfe4e20a45 FunctExeCalcPresAbsGalaxy.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FunctExeCalcPresAbsGalaxy.r Tue Jul 21 05:59:49 2020 -0400 |
[ |
@@ -0,0 +1,75 @@ +#Rscript + +##################################################################################################################### +##################################################################################################################### +############################ Calculate presence absence table from observation data ################################# +##################################################################################################################### +##################################################################################################################### + +###################### Packages +suppressMessages(library(tidyr)) + +###################### Load arguments and declaring variables + +args = commandArgs(trailingOnly=TRUE) +#options(encoding = "UTF-8") + +if (length(args) < 2) { + stop("At least one argument must be supplied, an input dataset file (.tabular).", call.=FALSE) #si pas d'arguments -> affiche erreur et quitte / if no args -> error and exit1 + +} else { + Importdata<-args[1] ###### Nom du fichier importé avec son extension / file name imported with the file type ".filetype" + source(args[2]) ###### Import functions + +} +#### Data must be a dataframe with at least 3 variables : unitobs representing location and year ("observation.unit"), species code ("species.code") and abundance ("number") + + +#Import des données / Import data +obs<- read.table(Importdata,sep="\t",dec=".",header=TRUE,encoding="UTF-8") # +obs[obs == -999] <- NA +factors <- fact.det.f(Obs=obs) +ObsType <- def.typeobs.f(Obs=obs) +obs <- create.unitobs(data=obs) + +vars_data<-c("observation.unit","species.code","number") +err_msg_data<-"The input dataset doesn't have the right format. It need to have at least the following 3 variables :\n- observation.unit (or point and year)\n- species.code\n- number\n" +check_file(obs,err_msg_data,vars_data,3) + + +#################################################################################################### +#################### Create presence/absence table ## Function : calc.presAbs.f #################### +#################################################################################################### + +calc.presAbs.f <- function(Data, + nbName="number") +{ + ## Purpose: Compute presence absence + ## ---------------------------------------------------------------------- + ## Arguments: Data : temporary metrics table + ## nbName : name of abundance column + ## + ## Output: presence absence vector + ## ---------------------------------------------------------------------- + ## Author: Yves Reecht, Date: 20 déc. 2011, 12:04 modified by Coline ROYAUX 04 june 2020 + + ## Presence - absence : + presAbs <- integer(nrow(Data)) + presAbs[Data[ , nbName] > 0] <- as.integer(1) + presAbs[Data[ , nbName] == 0] <- as.integer(0) + + return(presAbs) +} + + +################# Analysis + +res <- calc.numbers.f(obs, ObsType=ObsType , factors=factors, nbName="number") +res$pres.abs <- calc.presAbs.f(res, nbName="number") +res <- create.year.point(res) + +#Save dataframe in a tabular format +filenamePresAbs <- "TabPresAbs.tabular" +write.table(res, filenamePresAbs, row.names=FALSE, sep="\t", dec=".",fileEncoding="UTF-8") +cat(paste("\nWrite table with presence/absence. \n--> \"",filenamePresAbs,"\"\n",sep="")) + |
b |
diff -r 000000000000 -r c9dfe4e20a45 FunctPAMPAGalaxy.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FunctPAMPAGalaxy.r Tue Jul 21 05:59:49 2020 -0400 |
[ |
b'@@ -0,0 +1,3568 @@\n+#Rscript\n+\n+\n+##################################################################################################################################\n+####################### PAMPA Galaxy tools functions : Calculate metrics, compute GLM and plot #################################\n+##################################################################################################################################\n+\n+#### Based on Yves Reecht R script\n+#### Modified by Coline ROYAUX for integrating within Galaxy-E\n+\n+######################################### start of the function fact.def.f called by FunctExeCalcCommIndexesGalaxy.r and FunctExeCalcPresAbsGalaxy.r\n+####### Define the finest aggregation with the observation table\n+\n+fact.det.f <- function (Obs,\n+ size.class="size.class",\n+ code.especes="species.code",\n+ unitobs="observation.unit")\n+{\n+ if (any(is.element(c(size.class), colnames(obs))) && all(! is.na(obs[, size.class])))\n+ {\n+ factors <- c(unitobs, code.especes, size.class)\n+ }else{\n+ factors <- c(unitobs, code.especes)\n+ }\n+ return(factors)\n+}\n+\n+######################################### end of the function fact.def.f \n+\n+######################################### start of the function def.typeobs.f called by FunctExeCalcCommIndexesGalaxy.r and FunctExeCalcPresAbsGalaxy.r\n+####### Define observation type from colnames\n+\n+def.typeobs.f <- function(Obs)\n+{\n+ if (any(is.element(c("rotation","rot","rotate"),colnames(obs))))\n+ {\n+ ObsType <- "SVR"\n+ }else{\n+ ObsType <- "other"\n+ }\n+ return(ObsType)\n+}\n+######################################### end of the function fact.def.f \n+\n+######################################### start of the function create.unitobs called by FunctExeCalcCommIndexesGalaxy.r and FunctExeCalcPresAbsGalaxy.r\n+####### Create unitobs column when inexistant\n+create.unitobs <- function(data,year="year",point="point", unitobs="observation.unit")\n+{\n+ if (is.element(paste(unitobs),colnames(data)) && all(grepl("[1-2][0|8|9][0-9]{2}_.*",data[,unitobs])==FALSE))\n+ {\n+ unitab <- data\n+\n+ }else{ \n+\n+ unitab <- unite(data,col="observation.unit",c(year,point))\n+ }\n+ return(unitab)\n+}\n+######################################### start of the function create.unitobs\n+\n+######################################### start of the function create.year.point called by FunctExeCalcCommIndexesGalaxy.r and FunctExeCalcPresAbsGalaxy.r\n+####### separate unitobs column when existant\n+create.year.point <- function(data,year="year",point="point", unitobs="observation.unit")\n+{\n+ if (all(grepl("[1-2][0|8|9][0-9]{2}_.*",data[,unitobs]))==TRUE)\n+ {\n+ tab <- separate(data,col=unitobs,into=c(year,point),sep="_")\n+ }else{\n+ tab <- separate(data,col=unitobs,into=c("site1", year,"obs"),sep=c(2,4))\n+ tab <- unite(tab, col=point, c("site1","obs"))\n+\n+ }\n+\n+ tab <- cbind(tab,observation.unit = data[,unitobs])\n+\n+ return(tab)\n+}\n+######################################### start of the function create.unitobs\n+\n+######################################### start of the function check_file called by every Galaxy Rscripts\n+\n+check_file<-function(dataset,err_msg,vars,nb_vars){\n+\n+ ## Purpose: General function to check integrity of input file. Will \n+ ## check numbers and contents of variables(colnames).\n+ ## return an error message and exit if mismatch detected\n+ ## ----------------------------------------------------------------------\n+ ## Arguments: dataset : dataset name\n+ ## err_msg : output error\n+ ## vars : expected name of variables\n+ ## nb_vars : expected number of variables\n+ ## ----------------------------------------------------------------------\n+ ## Author: Alan Amosse, Benjamin Yguel \n+\n+ if(ncol(dataset) < nb_vars){ #checking for r'..b'+ plot(predict(fittedModel), resid(fittedModel, type = "response") , main = "Raw residuals" , ylab = "Residual", xlab = "Predicted")\n+ mtext("Conventional residual plots", outer = T)\n+}\n+\n+\n+\n+\n+#\n+#\n+# if(quantreg == F){\n+#\n+# lines(smooth.spline(simulationOutput$fittedPredictedResponse, simulationOutput$scaledResiduals, df = 10), lty = 2, lwd = 2, col = "red")\n+#\n+# abline(h = 0.5, col = "red", lwd = 2)\n+#\n+# }else{\n+#\n+# #library(gamlss)\n+#\n+# # qrnn\n+#\n+# # http://r.789695.n4.nabble.com/Quantile-GAM-td894280.html\n+#\n+# #require(quantreg)\n+# #dat <- plyr::arrange(dat,pred)\n+# #fit<-quantreg::rqss(resid~qss(pred,constraint="N"),tau=0.5,data = dat)\n+#\n+# probs = c(0.25, 0.50, 0.75)\n+#\n+# w <- p <- list()\n+# for(i in seq_along(probs)){\n+# capture.output(w[[i]] <- qrnn::qrnn.fit(x = as.matrix(simulationOutput$fittedPredictedResponse), y = as.matrix(simulationOutput$scaledResiduals), n.hidden = 4, tau = probs[i], iter.max = 1000, n.trials = 1, penalty = 1))\n+# p[[i]] <- qrnn::qrnn.predict(as.matrix(sort(simulationOutput$fittedPredictedResponse)), w[[i]])\n+# }\n+#\n+#\n+#\n+# #plot(simulationOutput$fittedPredictedResponse, simulationOutput$scaledResiduals, xlab = "Predicted", ylab = "Residual", main = "Residual vs. predicted\\n lines should match", cex.main = 1)\n+#\n+# #lines(sort(simulationOutput$fittedPredictedResponse), as.vector(p[[1]]), col = "red")\n+#\n+# matlines(sort(simulationOutput$fittedPredictedResponse), matrix(unlist(p), nrow = length(simulationOutput$fittedPredictedResponse), ncol = length(p)), col = "red", lty = 1)\n+#\n+# # as.vector(p[[1]])\n+# #\n+# #\n+# # lines(simulationOutput$fittedPredictedResponse,p[[1]], col = "red", lwd = 2)\n+# # abline(h = 0.5, col = "red", lwd = 2)\n+# #\n+# # fit<-quantreg::rqss(resid~qss(pred,constraint="N"),tau=0.25,data = dat)\n+# # lines(unique(dat$pred)[-1],fit$coef[1] + fit$coef[-1], col = "green", lwd = 2, lty =2)\n+# # abline(h = 0.25, col = "green", lwd = 2, lty =2)\n+# #\n+# # fit<-quantreg::rqss(resid~qss(pred,constraint="N"),tau=0.75,data = dat)\n+# # lines(unique(dat$pred)[-1],fit$coef[1] + fit$coef[-1], col = "blue", lwd = 2, lty = 2)\n+# # abline(h = 0.75, col = "blue", lwd = 2, lty =2)\n+# }\n+\n+####################### plot.R\n+\n+####################### random.R\n+\n+#\' Record and restore a random state\n+#\' \n+#\' The aim of this function is to record, manipualate and restor a random state\n+#\' \n+#\' @details This function is intended for two (not mutually exclusive tasks)\n+#\' \n+#\' a) record the current random state\n+#\' \n+#\' b) change the current random state in a way that the previous state can be restored\n+#\' \n+#\' @return a list with various infos about the random state that after function execution, as well as a function to restore the previous state before the function execution\n+#\' \n+#\' @param seed seed argument to set.seed(). NULL = no seed, but random state will be restored. F = random state will not be restored\n+#\' @export\n+#\' @example inst/examples/getRandomStateHelp.R\n+#\' @author Florian Hartig\n+#\' \n+getRandomState <- function(seed = NULL){\n+ \n+ # better to explicitly access the global RS?\n+ # current = get(".Random.seed", .GlobalEnv, ifnotfound = NULL)\n+ \n+ current = mget(".Random.seed", envir = .GlobalEnv, ifnotfound = list(NULL))[[1]]\n+ \n+ if(is.logical(seed) & seed == F){\n+ restoreCurrent <- function(){} \n+ }else{\n+ restoreCurrent <- function(){\n+ if(is.null(current)) rm(".Random.seed", envir = .GlobalEnv) else assign(".Random.seed", current , envir = .GlobalEnv)\n+ } \n+ }\n+\n+ # setting seed\n+ if(is.numeric(seed)) set.seed(seed)\n+\n+ # ensuring that RNG has been initialized\n+ if (is.null(current))runif(1) \n+ \n+ randomState = list(seed, state = get(".Random.seed", globalenv()), kind = RNGkind(), restoreCurrent = restoreCurrent) \n+ return(randomState)\n+}\n+\n+####################### random.R\n+\n+######################################### Package DHARMa\n' |
b |
diff -r 000000000000 -r c9dfe4e20a45 pampa_macros.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pampa_macros.xml Tue Jul 21 05:59:49 2020 -0400 |
b |
@@ -0,0 +1,82 @@ +<macros> + <token name="@VERSION@">0.0.1</token> + <xml name="Pampa_requirements"> + <requirements> + <requirement type="package" version="1.0.2">r-tidyr</requirement> + </requirements> + </xml> + <xml name="GLM_requirements"> + <requirements> + <requirement type="package" version="1.2.2">r-gap</requirement> + <requirement type="package" version="1.0.1">r-glmmtmb</requirement> + <requirement type="package" version="1.4_13">r-multcomp</requirement> + </requirements> + </xml> + <xml name="Plot_requirements"> + <requirements> + <requirement type="package" version="3.1.1">r-ggplot2</requirement> + </requirements> + </xml> + <xml name="pampa_input_calculate"> + <param name="input" type="data" format="tabular" label="Input file" help="Observation data file, with location, year, species and abundance."/> + </xml> + <xml name="pampa_advanced_params_select"> + <param name="advanced" type="select" label="Specify advanced parameters"> + <option value="simple" selected="true">No, use program defaults.</option> + <option value="advanced">Yes, see full parameter list.</option> + </param> + <when value="simple"> + </when> + </xml> + <xml name="pampa_advanced_params_select_GLM"> + <param name="advanced" type="select" label="Specify advanced parameters"> + <option value="simple" selected="true">No, use program defaults.</option> + <option value="advanced">Yes, see full parameter list.</option> + </param> + <when value="simple"> + </when> + <when value="advanced"> + <param name="distrib" type="select" label="Distribution for model"> + <option selected="true" value="None">Auto</option> + <option value="gaussian">Gaussian</option> + <option value="inverse.gaussian">Inverse Gaussian</option> + <option value="poisson">Poisson</option> + <option value="quasipoisson">Quasi-Poisson</option> + <option value="binomial">Binomial</option> + <option value="quasibinomial">Quasi-Binomial</option> + <option value="Gamma">Gamma</option> + </param> + </when> + </xml> + <xml name="pampa_input_GLM"> + <param name="input_metric" type="data" format="tabular" label="Input metrics file" help="Metrics data file, with location, year, and metrics informations that can be used as interest variable."/> + <param name="input_unitobs" type="data" format="tabular" label="Unitobs informations file" help="Unitobs file, with all informations available about unitobs."/> + <param name="varint" type="data_column" data_ref="input_metric" label="Interest variable from metrics file" help= "Choose the field of the interest variable."/> + </xml> + <xml name="pampa_var_GLM"> + <param name="varrep" type="select" label="Response variables" help= "Choose the response variables you want to include in your analysis." multiple="true"> + <option selected="true" value="year">Year</option> + <option selected="true" value="site">Site</option> + <option selected="true" value="habitat">Habitat</option> + </param> + <param name="varrand" type="select" label="Random effect ?" help="Allocate a random effect on site or year makes your model more reliable as random events on a peculiar site or year can affect populations, it takes account of pseudoreplication. However, avoid applying it on a less than 10 levels variable (less than 10 different sites and/or year)." multiple="true"> + <option value="year">Year</option> + <option selected="true" value="site">Site</option> + </param> + </xml> + <xml name="pampa_output_GLM"> + <data name="output_recap" from_work_dir="GLMSummaryFull.txt" format="txt" label="Simple statistics on chosen variables on ${on_string}"/> + <data name="output_rate" from_work_dir="RatingGLM.txt" format="txt" label="Your analysis rating file on ${on_string}"/> + </xml> + <xml name="pampa_bibref"> + <citations> + <citation type="bibtex"> + @unpublished{pampayves, + title={ PAMPA "ressources et biodiversité" scripts }, + author={Yves Reecht}, + url={https://wwz.ifremer.fr/pampa/Meth.-Outils/Outils} + } + </citation> + </citations> + </xml> +</macros> |
b |
diff -r 000000000000 -r c9dfe4e20a45 test-data/ObservationsSansszcl_cropped.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/ObservationsSansszcl_cropped.tabular Tue Jul 21 05:59:49 2020 -0400 |
b |
b'@@ -0,0 +1,2612 @@\n+"observation.unit"\t"rotation"\t"species.code"\t"sexe"\t"taille"\t"size.class"\t"poids"\t"number"\t"min.distance"\t"Dmax"\n+"AS140155"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140081"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140087"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140092"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140097"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140155"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140156"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140156"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140159"\t1\t"Hemifasc"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140159"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140088"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140088"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t23\t5\t-999\n+"AS140088"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140048"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140048"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t13\t5\t-999\n+"AS140048"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140060"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140060"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140061"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t26\t5\t-999\n+"AS140061"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t26\t5\t-999\n+"AS140061"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t28\t5\t-999\n+"AS140054"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140054"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140059"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140059"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140059"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t13\t5\t-999\n+"AS140070"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140081"\t1\t"Hemifasc"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140081"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140081"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140087"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t13\t5\t-999\n+"AS140087"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t23\t5\t-999\n+"AS140087"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t13\t5\t-999\n+"AS140092"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t23\t5\t-999\n+"AS140092"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t13\t5\t-999\n+"AS140092"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t26\t5\t-999\n+"AS140092"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140094"\t1\t"Hemifasc"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140097"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140157"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140157"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140079"\t1\t"Hemifasc"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140079"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t13\t5\t-999\n+"AS140079"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140060"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140060"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140061"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140061"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"AS140059"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"AS140156"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"AS140156"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"AS140159"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t9\t-999\n+"AS140048"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"AS140054"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t7\t-999\n+"AS140059"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"AS140059"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t7\t-999\n+"AS140081"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"AS140087"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t6\t-999\n+"AS140092"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"AS140092"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t7\t-999\n+"AS140157"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t6\t-999\n+"AS140079"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t6\t-999\n+"BE13S032"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"BE13S032"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"BE13S032"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"BE13S050"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t4\t5\t-999\n+"BE13S050"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t4\t5\t-999\n+"BE13S050"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t4\t5\t-999\n+"BE13S050"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t4\t5\t-999\n+"BE13S072"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"BL12P017"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"BL120155"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"BL120076"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"BL120094"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"BL1'..b'"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170080"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170043"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170043"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"PA170056"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"PA170056"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170056"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170016"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170022"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170022"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170084"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"PA170084"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170084"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"PA170084"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170084"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170083"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170088"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"PA170093"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170091"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170091"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170091"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170055"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170051"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170050"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170050"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170050"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170050"\t1\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170050"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170044"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170014"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"PA170014"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170014"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170015"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170013"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170012"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t5\t-999\n+"PA170011"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170011"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170011"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170011"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170005"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t7\t-999\n+"PA170042"\t1\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t7\t-999\n+"PA170042"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t7\t-999\n+"PA170058"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"PA170058"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"PA170058"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t3\t8\t-999\n+"PA170057"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"PA170057"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t10\t-999\n+"PA170057"\t1\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"PA170057"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t8\t-999\n+"PA170057"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"PA170057"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t10\t-999\n+"PA170080"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"PA170080"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t7\t-999\n+"PA170043"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t7\t-999\n+"PA170056"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t8\t-999\n+"PA170056"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t10\t-999\n+"PA170056"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t7\t-999\n+"PA170056"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t6\t-999\n+"PA170016"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t7\t-999\n+"PA170017"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"PA170018"\t1\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t6\t-999\n+"PA170018"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"PA170020"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t2\t7\t-999\n+"PA170020"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t6\t-999\n+"PA170025"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t7\t-999\n+"PA170088"\t1\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t9\t-999\n+"PA170100"\t1\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t10\t-999\n+"PA170094"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t3\t6\t-999\n+"PA170093"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t10\t-999\n+"PA170091"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t6\t-999\n+"PA170091"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t7\t-999\n+"PA170055"\t3\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t6\t-999\n+"PA170014"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t7\t-999\n+"PA170013"\t2\t"Hemifasc"\t-999\t-999\tNA\t-999\t1\t5\t-999\n+"PA170030"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t2\t7\t-999\n+"PA170027"\t3\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t8\t-999\n+"PA170027"\t2\t"Zebrscop"\t-999\t-999\tNA\t-999\t1\t8\t-999\n' |
b |
diff -r 000000000000 -r c9dfe4e20a45 test-data/Presence_absence_table_sansszcl_cropped.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Presence_absence_table_sansszcl_cropped.tabular Tue Jul 21 05:59:49 2020 -0400 |
b |
b'@@ -0,0 +1,2134 @@\n+"point"\t"year"\t"species.code"\t"number"\t"number.max"\t"number.sd"\t"pres.abs"\t"observation.unit"\n+"AB_0008"\t"08"\t"Abalstel"\t0\t0\t0\t0\t"AB080008"\n+"AB_0015"\t"08"\t"Abalstel"\t0\t0\t0\t0\t"AB080015"\n+"AB_0027"\t"08"\t"Abalstel"\t0\t0\t0\t0\t"AB080027"\n+"AB_0031"\t"08"\t"Abalstel"\t0\t0\t0\t0\t"AB080031"\n+"AB_0037"\t"08"\t"Abalstel"\t0\t0\tNA\t0\t"AB080037"\n+"AB_0042"\t"08"\t"Abalstel"\t0\t0\tNA\t0\t"AB080042"\n+"AB_0057"\t"08"\t"Abalstel"\t0\t0\t0\t0\t"AB080057"\n+"AB_0076"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090076"\n+"AB_0081"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090081"\n+"AB_0095"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090095"\n+"AB_0097"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090097"\n+"AB_0098"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090098"\n+"AB_0104"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090104"\n+"AB_0105"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090105"\n+"AB_0106"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090106"\n+"AB_0120"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090120"\n+"AB_0121"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090121"\n+"AB_0122"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090122"\n+"AB_0123"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090123"\n+"AB_0124"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090124"\n+"AB_0125"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090125"\n+"AB_0126"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090126"\n+"AB_0127"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090127"\n+"AB_0132"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090132"\n+"AB_0133"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090133"\n+"AB_0134"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090134"\n+"AB_0135"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090135"\n+"AB_0143"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090143"\n+"AB_0148"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090148"\n+"AB_0149"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090149"\n+"AB_0151"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090151"\n+"AB_0601"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090601"\n+"AB_0602"\t"09"\t"Abalstel"\t0\t0\t0\t0\t"AB090602"\n+"AB_0603"\t"09"\t"Abalstel"\t0\t0\tNA\t0\t"AB090603"\n+"AB_0001"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100001"\n+"AB_0002"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100002"\n+"AB_0006"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100006"\n+"AB_0008"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100008"\n+"AB_0009"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100009"\n+"AB_0010"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100010"\n+"AB_0011"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100011"\n+"AB_0015"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100015"\n+"AB_0017"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100017"\n+"AB_0019"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100019"\n+"AB_0020"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100020"\n+"AB_0021"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100021"\n+"AB_0023"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100023"\n+"AB_0024"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100024"\n+"AB_0025"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100025"\n+"AB_0028"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100028"\n+"AB_0029"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100029"\n+"AB_0031"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100031"\n+"AB_0035"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100035"\n+"AB_0036"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100036"\n+"AB_0038"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100038"\n+"AB_0042"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100042"\n+"AB_0046"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100046"\n+"AB_0047"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100047"\n+"AB_0048"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100048"\n+"AB_0049"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100049"\n+"AB_0052"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100052"\n+"AB_0055"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100055"\n+"AB_0060"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100060"\n+"AB_0061"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100061"\n+"AB_0062"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100062"\n+"AB_0072"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100072"\n+"AB_0077"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100077"\n+"AB_0078"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100078"\n+"AB_0079"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100079"\n+"AB_0081"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100081"\n+"AB_0082"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100082"\n+"AB_0085"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100085"\n+"AB_0086"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100086"\n+"AB_0087"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100087"\n+"AB_0088"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100088"\n+"AB_0089"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100089"\n+"AB_0090"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100090"\n+"AB_0091"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100091"\n+"AB_0092"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100092"\n+"AB_0093"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100093"\n+"AB_0094"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100094"\n+"AB_0095"\t"10"\t"Abalstel"\t0\t0\tNA\t0\t"AB100095"\n+"AB_0096"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100096"\n+"AB_0097"\t"10"\t"Abalstel"\t0\t0\t0\t0\t"AB100097"\n+"'..b'"PA_0044"\t"17"\t"Zebrscop"\t1\t1\tNA\t1\t"PA170044"\n+"PA_0050"\t"17"\t"Zebrscop"\t1\t2\t1\t1\t"PA170050"\n+"PA_0051"\t"17"\t"Zebrscop"\t0.5\t1\t0.707106781186548\t1\t"PA170051"\n+"PA_0054"\t"17"\t"Zebrscop"\t0\t0\tNA\t0\t"PA170054"\n+"PA_0055"\t"17"\t"Zebrscop"\t1\t1\tNA\t1\t"PA170055"\n+"PA_0056"\t"17"\t"Zebrscop"\t4\t5\t1.73205080756888\t1\t"PA170056"\n+"PA_0057"\t"17"\t"Zebrscop"\t9.66666666666667\t17\t6.35085296108588\t1\t"PA170057"\n+"PA_0058"\t"17"\t"Zebrscop"\t18\t25\t6.08276253029822\t1\t"PA170058"\n+"PA_0059"\t"17"\t"Zebrscop"\t0\t0\tNA\t0\t"PA170059"\n+"PA_0060"\t"17"\t"Zebrscop"\t5.33333333333333\t8\t2.51661147842358\t1\t"PA170060"\n+"PA_0066"\t"17"\t"Zebrscop"\t2\t2\tNA\t1\t"PA170066"\n+"PA_0068"\t"17"\t"Zebrscop"\t1\t1\t0\t1\t"PA170068"\n+"PA_0074"\t"17"\t"Zebrscop"\t0\t0\tNA\t0\t"PA170074"\n+"PA_0079"\t"17"\t"Zebrscop"\t1\t1\tNA\t1\t"PA170079"\n+"PA_0080"\t"17"\t"Zebrscop"\t5.66666666666667\t7\t1.52752523165195\t1\t"PA170080"\n+"PA_0081"\t"17"\t"Zebrscop"\t2.5\t4\t2.12132034355964\t1\t"PA170081"\n+"PA_0083"\t"17"\t"Zebrscop"\t1\t1\tNA\t1\t"PA170083"\n+"PA_0084"\t"17"\t"Zebrscop"\t2.33333333333333\t3\t1.15470053837925\t1\t"PA170084"\n+"PA_0088"\t"17"\t"Zebrscop"\t1.5\t2\t0.707106781186548\t1\t"PA170088"\n+"PA_0091"\t"17"\t"Zebrscop"\t1.33333333333333\t2\t0.577350269189626\t1\t"PA170091"\n+"PA_0093"\t"17"\t"Zebrscop"\t1\t1\t0\t1\t"PA170093"\n+"PA_0094"\t"17"\t"Zebrscop"\t3\t3\tNA\t1\t"PA170094"\n+"PA_0100"\t"17"\t"Zebrscop"\t0\t0\tNA\t0\t"PA170100"\n+"PE_0007"\t"14"\t"Zebrscop"\t1\t1\t0\t1\t"PE140007"\n+"PE_0025"\t"14"\t"Zebrscop"\t0\t0\tNA\t0\t"PE140025"\n+"PE_0029"\t"14"\t"Zebrscop"\t0\t0\tNA\t0\t"PE140029"\n+"PE_0031"\t"14"\t"Zebrscop"\t1\t1\t0\t1\t"PE140031"\n+"PE_0033"\t"14"\t"Zebrscop"\t0\t0\t0\t0\t"PE140033"\n+"PE_0035"\t"14"\t"Zebrscop"\t2.33333333333333\t3\t1.15470053837925\t1\t"PE140035"\n+"PO_0001"\t"12"\t"Zebrscop"\t1\t1\tNA\t1\t"PO120001"\n+"PO_0004"\t"12"\t"Zebrscop"\t1.5\t2\t0.707106781186548\t1\t"PO120004"\n+"PO_0007"\t"12"\t"Zebrscop"\t2\t3\t1\t1\t"PO120007"\n+"PO_0018"\t"12"\t"Zebrscop"\t1\t1\tNA\t1\t"PO120018"\n+"PO_0028"\t"12"\t"Zebrscop"\t2\t3\t1.4142135623731\t1\t"PO120028"\n+"PO_0045"\t"12"\t"Zebrscop"\t2.33333333333333\t3\t0.577350269189626\t1\t"PO120045"\n+"PO_0048"\t"12"\t"Zebrscop"\t1\t1\tNA\t1\t"PO120048"\n+"PO_0053"\t"12"\t"Zebrscop"\t1\t1\t0\t1\t"PO120053"\n+"PO_0066"\t"12"\t"Zebrscop"\t1\t1\t0\t1\t"PO120066"\n+"PO_0092"\t"12"\t"Zebrscop"\t6.16666666666667\t8.5\t2.25462487641145\t1\t"PO120092"\n+"PO_0094"\t"12"\t"Zebrscop"\t1\t1\t0\t1\t"PO120094"\n+"PO_0096"\t"12"\t"Zebrscop"\t2\t3\t1\t1\t"PO120096"\n+"PO_0121"\t"12"\t"Zebrscop"\t5\t6\t1.4142135623731\t1\t"PO120121"\n+"PO_0134"\t"12"\t"Zebrscop"\t0\t0\tNA\t0\t"PO120134"\n+"PO_0136"\t"12"\t"Zebrscop"\t1\t1\tNA\t1\t"PO120136"\n+"PO_0200"\t"12"\t"Zebrscop"\t2\t2\tNA\t1\t"PO120200"\n+"PO_0203"\t"12"\t"Zebrscop"\t3.6\t4\t0.565685424949238\t1\t"PO120203"\n+"PO_0205"\t"12"\t"Zebrscop"\t1\t1\tNA\t1\t"PO120205"\n+"PO_0206"\t"12"\t"Zebrscop"\t1.33333333333333\t2\t0.577350269189626\t1\t"PO120206"\n+"PO_0233"\t"12"\t"Zebrscop"\t2\t2\tNA\t1\t"PO120233"\n+"RD_0219"\t"07"\t"Zebrscop"\t0\t0\t0\t0\t"RD070219"\n+"RD_0230"\t"07"\t"Zebrscop"\t0\t0\tNA\t0\t"RD070230"\n+"RD_0031"\t"08"\t"Zebrscop"\t0\t0\tNA\t0\t"RD080031"\n+"RD_0103"\t"09"\t"Zebrscop"\t0\t0\tNA\t0\t"RD090103"\n+"RD_0105"\t"09"\t"Zebrscop"\t0\t0\tNA\t0\t"RD090105"\n+"RD_0108"\t"09"\t"Zebrscop"\t0\t0\tNA\t0\t"RD090108"\n+"RD_0109"\t"09"\t"Zebrscop"\t0\t0\tNA\t0\t"RD090109"\n+"RD_0107"\t"10"\t"Zebrscop"\t0\t0\tNA\t0\t"RD100107"\n+"RL_0250"\t"07"\t"Zebrscop"\t1\t1\tNA\t1\t"RL070250"\n+"RL_0145"\t"08"\t"Zebrscop"\t1\t1\t0\t1\t"RL080145"\n+"RL_0078"\t"09"\t"Zebrscop"\t1.33333333333333\t2\t0.577350269189626\t1\t"RL090078"\n+"RL_0089"\t"09"\t"Zebrscop"\t2\t2\t0\t1\t"RL090089"\n+"RL_0093"\t"09"\t"Zebrscop"\t1\t1\t0\t1\t"RL090093"\n+"RL_0066"\t"10"\t"Zebrscop"\t1\t1\tNA\t1\t"RL100066"\n+"RL_0076"\t"10"\t"Zebrscop"\t1.33333333333333\t2\t0.577350269189626\t1\t"RL100076"\n+"RS_0169"\t"07"\t"Zebrscop"\t2.33333333333333\t3\t0.577350269189626\t1\t"RS070169"\n+"RS_0189"\t"07"\t"Zebrscop"\t1\t1\t0\t1\t"RS070189"\n+"SI_0078"\t"07"\t"Zebrscop"\t1\t1\tNA\t1\t"SI070078"\n+"SI_0079"\t"07"\t"Zebrscop"\t8.33333333333333\t12\t4.04145188432738\t1\t"SI070079"\n+"SI_0080"\t"07"\t"Zebrscop"\t2\t3\t1.4142135623731\t1\t"SI070080"\n+"SI_0082"\t"07"\t"Zebrscop"\t0\t0\tNA\t0\t"SI070082"\n+"SI_0197"\t"07"\t"Zebrscop"\t0\t0\tNA\t0\t"SI070197"\n+"SI_0222"\t"07"\t"Zebrscop"\t0\t0\tNA\t0\t"SI070222"\n+"SI_0194"\t"08"\t"Zebrscop"\t0\t0\t0\t0\t"SI080194"\n+"WA_0002"\t"14"\t"Zebrscop"\t1\t1\t0\t1\t"WA140002"\n' |