Repository 'pampa_presabs'
hg clone https://toolshed.g2.bx.psu.edu/repos/ecology/pampa_presabs

Changeset 0:c9dfe4e20a45 (2020-07-21)
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'