Next changeset 1:e2b0eec4e788 (2020-07-22) |
Commit message:
"planemo upload for repository https://github.com/ColineRoyaux/PAMPA-Galaxy commit 07f1028cc764f920b1e6419c151f04ab4e3600fa" |
added:
CalculateCommunityMetrics.xml FunctExeCalcCommIndexesGalaxy.r FunctPAMPAGalaxy.r pampa_macros.xml test-data/Community_metrics_cropped.tabular test-data/ObservationsSansszcl_cropped.tabular |
b |
diff -r 000000000000 -r ddd5b2e74b8b CalculateCommunityMetrics.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CalculateCommunityMetrics.xml Tue Jul 21 06:00:10 2020 -0400 |
[ |
@@ -0,0 +1,96 @@ +<tool id="pampa_communitymetrics" name="Calculate community metrics" version="@VERSION@"> + <description>calculate community metrics from abundance data</description> + <macros> + <import>pampa_macros.xml</import> + </macros> + <expand macro="Pampa_requirements"/> + <command detect_errors="exit_code"><![CDATA[ + Rscript + '$__tool_directory__/FunctExeCalcCommIndexesGalaxy.r' + '$input' + '$indexes' + '$__tool_directory__/FunctPAMPAGalaxy.r' + '$output_community' + ]]> + </command> + <inputs> + <expand macro="pampa_input_calculate"/> + <param name="indexes" type="select" label="Choose the community metrics you want to compute" help="Presence/absence, Species richness, Simpson and Shannon index are systematically computed." multiple="true"> + <option selected="true" value="all">All</option> + <option value="simpson.l">1-Simpson</option> + <option value="pielou">Pielou</option> + <option value="hill">Hill</option> + </param> + </inputs> + <outputs> + <data name="output_community" from_work_dir="TabCommunityIndexes.tabular" format="tabular"/> + </outputs> + <tests> + <test> + <param name="input" value="ObservationsSansszcl_cropped.tabular"/> + <param name="indexes" value="all"/> + <output name="output_community" value="Community_metrics_cropped.tabular"/> + </test> + </tests> + <help><![CDATA[ +=============================================== +Calculate community metrics from abundance data +=============================================== + +**What it does** + +This tool from PAMPA toolsuite computes community metrics from abundance data: + +- Specific richness +- Shannon index +- Simpson index +- Pielou index +- Hill index +- Relative richness + +| + +**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 every metrics selected computed per observation unit + +| + +**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 ddd5b2e74b8b FunctExeCalcCommIndexesGalaxy.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FunctExeCalcCommIndexesGalaxy.r Tue Jul 21 06:00:10 2020 -0400 |
[ |
@@ -0,0 +1,157 @@ +#Rscript + +##################################################################################################################### +##################################################################################################################### +################################# Calculate community indexes from observation data ################################# +##################################################################################################################### +##################################################################################################################### + +###################### Packages R + +suppressMessages(library(tidyr)) + +###################### Load arguments and declaring variables + +args = commandArgs(trailingOnly=TRUE) +#options(encoding = "UTF-8") + +if (length(args) < 4) { + 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" + index <- args[2] ###### List of selected metrics to calculate + source(args[3]) ###### 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 community metrics table ## Function : calcBiodiv.f ####################### +#################################################################################################### + +######################################################################################################################## +calcBiodiv.f <- function(Data, MPA, unitobs="observation.unit", code.especes="species.code", nombres="number", + indices=index) +{ + ## Purpose: calcul des indices de biodiversité + ## ---------------------------------------------------------------------- + ## Arguments: Data : les données à partir desquelles calculer les + ## indices. Doivent comporter au minimum (colones) : + ## * unités d'observations/sites + ## * espèces présentes + ## * nombre d'individus /espèce/unitobs. + ## refesp : le référentiel espèces. + ## MPA : l'AMP (chaîne de charactères). + ## unitobs : nom de la colone d'unités d'observation. + ## code.especes : nom de la colone d'espèces. + ## nombres : nom de la colone de nombres. + ## indices : liste des indices à calculer + ## (vecteur de caractères) + ## ---------------------------------------------------------------------- + ## Author: Yves Reecht, Date: 29 oct. 2010, 08:58 + + ## Supression de tout ce qui n'a pas d'espèce précisee (peut être du non biotique ou identification >= genre) : + + notspline <- grep("(sp\\.)$|([1-9])$|^(Absencemacrofaune)$|^(NoID)$|^(Acrobranc)$|^(Acrodigit)$|^(Acroencr)$|^(Acrosubm)$|^(Acrotabu)$|^(Adredure)$|^(Adremoll)$|^(Algaturf)$|^(Balimona)$|^(Corablan)$|^(CoradurV)$|^(Coraenal)$|^(Coramor1)$|^(Coramor2)$|^(Coramou)$|^( Dallcora)$|^(Debrcora)$|^(Debris)$|^(Hare)$|^(HexaChar)$|^(MuraCong)$|^(Nacrbran)$|^(Nacrcham)$|^(Nacrencr)$|^(Nacrfoli)$|^(Nacrmass)$|^(Nacrsubm)$|^(Recrcora)$|^(Roche)$|^(Sable)$|^(Vase)$",Data[, code.especes], value=FALSE) + if (length(notspline) != 0) + { + Data <- Data[-notspline, ] + }else{} + + ## Suppression des niveaux de facteur inutilisés : + Data <- dropLevels.f(df=Data) + + + ## Si les données ne sont pas encore agrégées /espèce/unitobs on le fait ici : + if (nrow(Data) > nrow(expand.grid(unique(Data[ , unitobs]), unique(Data[ , code.especes])))) + { + Data <- agregations.generic.f(Data=Data, metrics=nombres, + factors=c(unitobs, code.especes), + listFact=NULL) + }else{} + + df.biodiv <- as.data.frame(as.table(tapply(Data[ , nombres], + Data[ , unitobs], + sum, na.rm=TRUE))) + + colnames(df.biodiv) <- c(unitobs, nombres) + +## ################################################## + ## Richesse spécifique : + Data$pres.abs <- presAbs.f(nombres=Data[ , nombres], logical = FALSE) + + df.biodiv$species.richness <- as.vector(tapply(Data$pres.abs, + Data[ , unitobs], sum, na.rm=TRUE), + "integer") + ## ... as.vector to avoid the class "array". + + ## ################################################## + ## Indices de Simpson et Shannon et dérivés : + + matNombres <- tapply(Data[ , nombres], # Matrice de nombres d'individus /espèce/unitobs. + list(Data[ , unitobs], Data[ , code.especes]), + sum, na.rm=TRUE) + + matNombres[is.na(matNombres)] <- 0 # Vrais zéros + + ## Proportion d'individus de chaque espèce dans l'unitobs : + propIndiv <- sweep(matNombres, 1, + apply(matNombres, 1, sum, na.rm = TRUE), # Nombre d'individus / unitobs ; équiv df.biodiv$nombre. + FUN="/") + + ## Indices de Simpson : + df.biodiv$simpson <- apply(propIndiv^2, 1, sum, na.rm=TRUE) + + if (any(is.element(c("all", "simpson.l"), indices))) + { + df.biodiv$simpson.l <- 1 - df.biodiv$simpson + } + + ## calcul de l'indice de Shannon : + df.biodiv$shannon <- -1 * apply(propIndiv * log(propIndiv), 1, sum, na.rm=TRUE) + + ## calcul de l'indice de Pielou : + if (any(is.element(c("all", "pielou"), indices))) + { + df.biodiv$pielou <- df.biodiv$shannon / log(df.biodiv$species.richness) + } + + ## calcul de l'indice de Hill : + if (any(is.element(c("all", "hill"), indices))) + { + df.biodiv$hill <- (1 - df.biodiv$simpson) / exp(df.biodiv$shannon) + # équiv df.biodiv$l.simpson / exp(df.biodiv$shannon) + } + + + return(df.biodiv) +} + +################# Analysis + +res <- calc.numbers.f(obs, ObsType=ObsType , factors=factors, nbName="number") + +tableCommunityIndexes <- calcBiodiv.f(res, MPA, unitobs="observation.unit", code.especes="species.code", nombres="number", + indices=index) +tableCommunityIndexes <- create.year.point(tableCommunityIndexes) +#Save dataframe in a tabular format + +filenameComm <- "TabCommunityIndexes.tabular" +write.table(tableCommunityIndexes, filenameComm, row.names=FALSE, sep="\t", dec=".",fileEncoding="UTF-8") +cat(paste("\nWrite table with Community indexes. \n--> \"",filenameComm,"\"\n",sep="")) + |
b |
diff -r 000000000000 -r ddd5b2e74b8b FunctPAMPAGalaxy.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FunctPAMPAGalaxy.r Tue Jul 21 06:00:10 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 ddd5b2e74b8b pampa_macros.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pampa_macros.xml Tue Jul 21 06:00:10 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 ddd5b2e74b8b test-data/Community_metrics_cropped.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Community_metrics_cropped.tabular Tue Jul 21 06:00:10 2020 -0400 |
b |
b'@@ -0,0 +1,712 @@\n+"point"\t"year"\t"number"\t"species.richness"\t"simpson"\t"simpson.l"\t"shannon"\t"pielou"\t"hill"\t"observation.unit"\n+"AB_0008"\t"08"\t2.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB080008"\n+"AB_0015"\t"08"\t3\t1\t1\t0\t0\tNA\t0\t"AB080015"\n+"AB_0027"\t"08"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB080027"\n+"AB_0031"\t"08"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB080031"\n+"AB_0037"\t"08"\t1\t1\t1\t0\t0\tNA\t0\t"AB080037"\n+"AB_0042"\t"08"\t1\t1\t1\t0\t0\tNA\t0\t"AB080042"\n+"AB_0057"\t"08"\t1\t1\t1\t0\t0\tNA\t0\t"AB080057"\n+"AB_0076"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090076"\n+"AB_0081"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090081"\n+"AB_0095"\t"09"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB090095"\n+"AB_0097"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090097"\n+"AB_0098"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090098"\n+"AB_0104"\t"09"\t1.2\t1\t1\t0\t0\tNA\t0\t"AB090104"\n+"AB_0105"\t"09"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB090105"\n+"AB_0106"\t"09"\t2\t1\t1\t0\t0\tNA\t0\t"AB090106"\n+"AB_0120"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090120"\n+"AB_0121"\t"09"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB090121"\n+"AB_0122"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090122"\n+"AB_0123"\t"09"\t1.5\t1\t1\t0\t0\tNA\t0\t"AB090123"\n+"AB_0124"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090124"\n+"AB_0125"\t"09"\t3.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB090125"\n+"AB_0126"\t"09"\t4.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB090126"\n+"AB_0127"\t"09"\t1.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB090127"\n+"AB_0132"\t"09"\t1.5\t1\t1\t0\t0\tNA\t0\t"AB090132"\n+"AB_0133"\t"09"\t2\t1\t1\t0\t0\tNA\t0\t"AB090133"\n+"AB_0134"\t"09"\t2\t1\t1\t0\t0\tNA\t0\t"AB090134"\n+"AB_0135"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090135"\n+"AB_0143"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090143"\n+"AB_0148"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090148"\n+"AB_0149"\t"09"\t3\t1\t1\t0\t0\tNA\t0\t"AB090149"\n+"AB_0151"\t"09"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB090151"\n+"AB_0601"\t"09"\t1.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB090601"\n+"AB_0602"\t"09"\t4.66666666666667\t2\t0.86734693877551\t0.13265306122449\t0.257318640543832\t0.371232326640876\t0.10255697699183\t"AB090602"\n+"AB_0603"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090603"\n+"AB_0001"\t"10"\t2\t1\t1\t0\t0\tNA\t0\t"AB100001"\n+"AB_0002"\t"10"\t4.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100002"\n+"AB_0006"\t"10"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100006"\n+"AB_0008"\t"10"\t3.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100008"\n+"AB_0009"\t"10"\t1.5\t1\t1\t0\t0\tNA\t0\t"AB100009"\n+"AB_0010"\t"10"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100010"\n+"AB_0011"\t"10"\t1.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB100011"\n+"AB_0015"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100015"\n+"AB_0017"\t"10"\t3.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100017"\n+"AB_0019"\t"10"\t1.5\t1\t1\t0\t0\tNA\t0\t"AB100019"\n+"AB_0020"\t"10"\t2\t1\t1\t0\t0\tNA\t0\t"AB100020"\n+"AB_0021"\t"10"\t3\t1\t1\t0\t0\tNA\t0\t"AB100021"\n+"AB_0023"\t"10"\t5.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100023"\n+"AB_0024"\t"10"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100024"\n+"AB_0025"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100025"\n+"AB_0028"\t"10"\t3.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100028"\n+"AB_0029"\t"10"\t7\t2\t0.909297052154195\t0.0907029478458048\t0.191444081957717\t0.276195427647939\t0.0748993922015743\t"AB100029"\n+"AB_0031"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100031"\n+"AB_0035"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100035"\n+"AB_0036"\t"10"\t2.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB100036"\n+"AB_0038"\t"10"\t3\t1\t1\t0\t0\tNA\t0\t"AB100038"\n+"AB_0042"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100042"\n+"AB_0046"\t"10"\t4\t1\t1\t0\t0\tNA\t0\t"AB100046"\n+"AB_0047"\t"10"\t2\t1\t1\t0\t0\tNA\t0\t"AB100047"\n+"AB_0048"\t"10"\t2.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB100048"\n+"AB_0049"\t"10"\t1.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB100049"\n+"AB_0052"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100052"\n+"AB_0055"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100055"\n+"AB_0060"\t"10"\t4.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100060"\n+"AB_0061"\t"10"\t2.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB100061"\n+"AB_0062"\t"10"\t3.66666666666667\t2\t0.702479338842975\t0.297520661157025\t0.474139313057837\t0.684038435639042\t0.185182969156178\t"AB100062"\n+"AB_0072"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100072"\n+"AB_0077"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100077"\n+"AB_0078"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100078"\n+"AB_0079"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100079"\n+"AB_0081"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100081"\n+"AB_0082"\t"10"\t2\t1\t1\t0\t0\tNA\t0\t"AB100082"\n+"AB_0085"\t"10"\t2\t1\t1\t0\t0\tNA\t0\t"AB100085"\n+"AB_0086"\t"10"\t3.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100086"\n+"AB_0087"\t"10"\t1.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB100087"\n+"AB_0088"\t"10"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100088"\n+"AB_0089"\t"10"\t3\t1\t1\t0\t'..b'1\t0\t0\tNA\t0\t"PA170043"\n+"PA_0044"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170044"\n+"PA_0050"\t"17"\t2.66666666666667\t2\t0.53125\t0.46875\t0.661563238157982\t0.954434002924965\t0.241895626852958\t"PA170050"\n+"PA_0051"\t"17"\t1\t2\t0.5\t0.5\t0.693147180559945\t1\t0.25\t"PA170051"\n+"PA_0054"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170054"\n+"PA_0055"\t"17"\t2\t2\t0.5\t0.5\t0.693147180559945\t1\t0.25\t"PA170055"\n+"PA_0056"\t"17"\t4.66666666666667\t2\t0.755102040816326\t0.244897959183674\t0.410116318288409\t0.591672778582327\t0.162507688154577\t"PA170056"\n+"PA_0057"\t"17"\t10\t2\t0.935555555555555\t0.0644444444444447\t0.146144746008564\t0.210842300318532\t0.055682102748663\t"PA170057"\n+"PA_0058"\t"17"\t18\t1\t1\t0\t0\tNA\t0\t"PA170058"\n+"PA_0059"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170059"\n+"PA_0060"\t"17"\t6\t2\t0.802469135802469\t0.197530864197531\t0.348832095843032\t0.503258334775646\t0.139360311832599\t"PA170060"\n+"PA_0066"\t"17"\t2\t1\t1\t0\t0\tNA\t0\t"PA170066"\n+"PA_0068"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170068"\n+"PA_0074"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170074"\n+"PA_0079"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170079"\n+"PA_0080"\t"17"\t6.66666666666667\t2\t0.745\t0.255\t0.422709087805991\t0.6098403047164\t0.167093653955113\t"PA170080"\n+"PA_0081"\t"17"\t3\t2\t0.722222222222222\t0.277777777777778\t0.450561208866305\t0.650022421648354\t0.177019558178641\t"PA170081"\n+"PA_0083"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170083"\n+"PA_0084"\t"17"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"PA170084"\n+"PA_0088"\t"17"\t1.5\t1\t1\t0\t0\tNA\t0\t"PA170088"\n+"PA_0091"\t"17"\t1.66666666666667\t2\t0.68\t0.32\t0.500402423538188\t0.721928094887362\t0.194011720513331\t"PA170091"\n+"PA_0093"\t"17"\t1.5\t2\t0.555555555555556\t0.444444444444444\t0.636514168294813\t0.918295834054489\t0.235170526217511\t"PA170093"\n+"PA_0094"\t"17"\t3\t1\t1\t0\t0\tNA\t0\t"PA170094"\n+"PA_0100"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170100"\n+"PE_0007"\t"14"\t1\t1\t1\t0\t0\tNA\t0\t"PE140007"\n+"PE_0025"\t"14"\t1\t1\t1\t0\t0\tNA\t0\t"PE140025"\n+"PE_0029"\t"14"\t1\t1\t1\t0\t0\tNA\t0\t"PE140029"\n+"PE_0031"\t"14"\t1\t1\t1\t0\t0\tNA\t0\t"PE140031"\n+"PE_0033"\t"14"\t1\t1\t1\t0\t0\tNA\t0\t"PE140033"\n+"PE_0035"\t"14"\t2.66666666666667\t2\t0.78125\t0.21875\t0.376770161256437\t0.543564443199596\t0.150078631085047\t"PE140035"\n+"PO_0001"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120001"\n+"PO_0004"\t"12"\t1.5\t1\t1\t0\t0\tNA\t0\t"PO120004"\n+"PO_0007"\t"12"\t2\t1\t1\t0\t0\tNA\t0\t"PO120007"\n+"PO_0018"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120018"\n+"PO_0028"\t"12"\t2\t1\t1\t0\t0\tNA\t0\t"PO120028"\n+"PO_0045"\t"12"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"PO120045"\n+"PO_0048"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120048"\n+"PO_0053"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120053"\n+"PO_0066"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120066"\n+"PO_0092"\t"12"\t6.16666666666667\t1\t1\t0\t0\tNA\t0\t"PO120092"\n+"PO_0094"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120094"\n+"PO_0096"\t"12"\t2\t1\t1\t0\t0\tNA\t0\t"PO120096"\n+"PO_0121"\t"12"\t5\t1\t1\t0\t0\tNA\t0\t"PO120121"\n+"PO_0134"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120134"\n+"PO_0136"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120136"\n+"PO_0200"\t"12"\t2\t1\t1\t0\t0\tNA\t0\t"PO120200"\n+"PO_0203"\t"12"\t3.6\t1\t1\t0\t0\tNA\t0\t"PO120203"\n+"PO_0205"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120205"\n+"PO_0206"\t"12"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"PO120206"\n+"PO_0233"\t"12"\t2\t1\t1\t0\t0\tNA\t0\t"PO120233"\n+"RD_0219"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"RD070219"\n+"RD_0230"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"RD070230"\n+"RD_0031"\t"08"\t2\t1\t1\t0\t0\tNA\t0\t"RD080031"\n+"RD_0103"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"RD090103"\n+"RD_0105"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"RD090105"\n+"RD_0108"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"RD090108"\n+"RD_0109"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"RD090109"\n+"RD_0107"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"RD100107"\n+"RL_0250"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"RL070250"\n+"RL_0145"\t"08"\t1\t1\t1\t0\t0\tNA\t0\t"RL080145"\n+"RL_0078"\t"09"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"RL090078"\n+"RL_0089"\t"09"\t2\t1\t1\t0\t0\tNA\t0\t"RL090089"\n+"RL_0093"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"RL090093"\n+"RL_0066"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"RL100066"\n+"RL_0076"\t"10"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"RL100076"\n+"RS_0169"\t"07"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"RS070169"\n+"RS_0189"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"RS070189"\n+"SI_0078"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"SI070078"\n+"SI_0079"\t"07"\t8.33333333333333\t1\t1\t0\t0\tNA\t0\t"SI070079"\n+"SI_0080"\t"07"\t2\t1\t1\t0\t0\tNA\t0\t"SI070080"\n+"SI_0082"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"SI070082"\n+"SI_0197"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"SI070197"\n+"SI_0222"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"SI070222"\n+"SI_0194"\t"08"\t1\t1\t1\t0\t0\tNA\t0\t"SI080194"\n+"WA_0002"\t"14"\t1\t1\t1\t0\t0\tNA\t0\t"WA140002"\n' |
b |
diff -r 000000000000 -r ddd5b2e74b8b test-data/ObservationsSansszcl_cropped.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/ObservationsSansszcl_cropped.tabular Tue Jul 21 06:00:10 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' |