changeset 0:0e3db3a308c0 draft default tip

Uploaded
author mnhn65mo
date Mon, 06 Aug 2018 09:13:29 -0400
parents
children
files BilanEnrichiPF.R BilanEnrichiPFen.xml BilanEnrichiRP.R BilanEnrichiRPen.xml ClassifEspC2b_180222.learner GroupList_HF.csv IdCorrect_2ndLayer.R IdCorrect_2ndLayer_en.xml IdValid.R IdValiden.xml Referentiel_seuils_C2.csv SpeciesList.csv refPF.csv refRPSeuil50.csv
diffstat 14 files changed, 1695 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BilanEnrichiPF.R	Mon Aug 06 09:13:29 2018 -0400
@@ -0,0 +1,249 @@
+library(data.table)
+library(DT)
+library(htmlwidgets)
+
+f2p <- function(x) #get date-time data from recording file names
+{
+  if (is.data.frame((x)[1])) {pretemps <- vector(length = nrow(x))}
+  op <- options(digits.secs = 3)
+  pretemps <- paste(substr(x, nchar(x) - 18, nchar(x)-4), ".", substr(x, nchar(x) - 2, nchar(x)), sep = "")
+  strptime(pretemps, "%Y%m%d_%H%M%OS",tz="UTC")-7200
+}
+
+args <- commandArgs(trailingOnly = TRUE)
+#print(args)
+EchelleErreur=c("","POSSIBLE","PROBABLE","SUR")
+EchelleNumErreur=c(99,50,10,1)
+
+#for test
+#inputest=list.files("C:/Users/Yves Bas/Documents/GitHub/65MO_Galaxy-E/raw_scripts/Vigie-Chiro/output_IdValid_input_BilanEnrichi/",pattern="IdC2.csv",full.names=T)
+#for (i in 1:length(inputest))
+#{
+#   args=c(inputest[i],"refPF.csv","SpeciesList.csv")
+   
+   
+IdC2=fread(args[1])
+refPF=fread(args[2])
+GroupList=fread(args[3])
+
+if(substr(IdC2$`nom du fichier`[1],2,2)!="a")
+{
+  print("Protocole non conforme, ce script doit etre lance pour un protocole Point Fixe")
+}else{
+  
+
+#compute error risk by species (minimum error among files)
+#to be replaced by glm outputs if I'll have time
+RisqueErreurT=aggregate(IdC2$IdProb,by=list(IdC2$IdExtrap),FUN=function(x) ceiling((1-max(x-0.0001))*100))
+barplot(RisqueErreurT$x,names.arg=RisqueErreurT$Group.1,las=2)
+#compute error risk accoring to observer/validator (a little dirty because it relies on alphabetical order of confidence classes: POSSIBLE < PROBABLE < SUR)
+RisqueErreurOV0=match(IdC2$ConfV,EchelleErreur)
+RisqueErreurOV=aggregate(RisqueErreurOV0,by=list(IdC2$IdExtrap)
+                         ,FUN=max) 
+RisqueErreurOV2=EchelleNumErreur[RisqueErreurOV$x]
+#compute minimum error risk between man and machine
+RisqueErreur=pmin(RisqueErreurT$x,RisqueErreurOV2)
+
+#compute number of files validated per species
+FichValid=aggregate(IdC2$IdV,by=list(IdC2$IdExtrap,IdC2$'nom du fichier')
+                                 ,FUN=function(x) sum(x!="")) 
+NbValid2=aggregate(FichValid$x,by=list(FichValid$Group.1),FUN=function(x) sum(x>0))
+
+DiffC50=vector() # to store the median of confidence difference between unvalidated records and validated ones
+DiffT50=vector() # to store the median of time difference between unvalidated records and validated ones
+for (j in 1:nlevels(as.factor(IdC2$IdExtrap)))
+{
+  IdSp=subset(IdC2
+              ,IdC2$IdExtrap==levels(as.factor(IdC2$IdExtrap))[j])
+  IdSp=IdSp[order(IdSp$IdProb),]
+  IdSpV=subset(IdSp,IdSp$IdV!="")
+  if(nrow(IdSpV)>0)
+  {
+  cuts <- c(-Inf, IdSpV$IdProb[-1]-diff(IdSpV$IdProb)/2, Inf)
+  CorrC=findInterval(IdSp$IdProb, cuts)
+  CorrC2=IdSpV$IdProb[CorrC]
+  DiffC=abs(IdSp$IdProb-CorrC2)
+  DiffC50=c(DiffC50,median(DiffC))
+  
+  IdSp=IdSp[order(IdSp$TimeNum),]
+  IdSpV=subset(IdSp,IdSp$IdV!="")
+  cuts <- c(-Inf, IdSpV$TimeNum[-1]-diff(IdSpV$TimeNum)/2, Inf)
+  CorrT=findInterval(IdSp$TimeNum, cuts)
+  CorrT2=IdSpV$TimeNum[CorrT]
+  DiffT=abs(IdSp$TimeNum-CorrT2)
+  DiffT50=c(DiffT50,median(DiffT))
+  }else{
+    DiffC50=c(DiffC50,Inf)
+    DiffT50=c(DiffT50,Inf)
+  }
+}
+#compute an index of validation effort per species
+EffortV=1/DiffC50/DiffT50
+EffortClass=(EffortV>0.0005)+(EffortV>0.005)+RisqueErreurOV$x
+cbind(RisqueErreurOV,EffortV,DiffC50,DiffT50)
+barplot(EffortClass-1,names.arg=NbValid2$Group.1,las=2)
+ClassEffortV=c("-","FAIBLE","SUFFISANT","SUFFISANT","FORT","FORT")
+EffortClassMot=ClassEffortV[EffortClass]
+
+
+#get date-night
+pourDateNuit=IdC2$TimeNum-12*3600 #bricolage-decalage de 12 heures pour ramener a la date du debut de nuit
+DateNuit=as.Date.POSIXct(pourDateNuit) # date of the beginning of the night
+DateJour=as.Date.POSIXct(IdC2$TimeNum) # date (UTC+0)
+IdC2$DateNuit=DateNuit
+IdC2$DateJour=DateJour
+NbNuit=as.numeric(max(IdC2$DateNuit)-min(IdC2$DateNuit))+1
+
+#compare activity / reference frame
+ActMoy=aggregate(IdC2$`nom du fichier`
+                 ,by=list(IdC2$IdExtrap),FUN=function(x) length(x)/NbNuit)
+ListSpref=match(ActMoy$Group.1,refPF$Espece)
+Subref=refPF[ListSpref]
+QualifAct=vector()
+for (k in 1:nrow(ActMoy))
+{
+  if(is.na(Subref$Q25[k]))
+  {
+    QualifAct=c(QualifAct,NA)
+  }else{
+    cuts=cbind(-Inf,as.numeric(Subref$Q25[k]),as.numeric(Subref$Q75[k])
+               ,as.numeric(Subref$Q98[k]),Inf)
+  
+    QualifAct=c(QualifAct,findInterval(ActMoy$x[k],cuts,left.open=T))
+  }
+}
+ClassAct=c("FAIBLE","MODEREE","FORTE","TRES FORTE")
+QualifActMot=ClassAct[QualifAct]
+
+#compute activity by nights (to be completed)
+#ActNuit=aggregate(IdC2$`nom du fichier`,by=list(IdC2$DateNuit,IdC2$IdExtrap),FUN=length)
+
+#organize the csv summary
+SummPart0=cbind(Esp=levels(as.factor(IdC2$IdExtrap))
+                ,RisqueErreur,NbValid=NbValid2$x,EffortValid=EffortClassMot
+                ,Contacts_Nuit=round(ActMoy$x),Niveau_Activite=QualifActMot)
+
+
+InfoSp=c("GroupFR","NomFR","Scientific name","Esp")
+GroupShort=GroupList[,InfoSp,with=FALSE]
+#GroupShort=GroupList[,..InfoSp]
+SummPart=merge(GroupShort,SummPart0,by="Esp")
+IndexGroupe=c("Autre","Sauterelle","Chauve-souris")
+SummPart$IndexSumm=match(SummPart$GroupFR,IndexGroupe)
+SummPart=SummPart[with(SummPart
+                       ,order(IndexSumm,as.numeric(Contacts_Nuit),decreasing=T)),]
+colnames(SummPart)=c("Code","Groupe","Nom francais","Nom scientifique"
+                     ,"Risque d'erreur (%)","Nb Validations"
+                     ,"Effort de validation","Nb de Contacts par Nuit"
+                     ,"Niveau d'Activite","TriGroupe")
+
+#to do: extend colors to other columns to improve readability
+SummHTML=datatable(SummPart, rownames = FALSE) %>%
+  formatStyle(columns = c("Code","Groupe","Nom francais","Nom scientifique","Risque d'erreur (%)"),valueColumns="Risque d'erreur (%)", 
+              background = styleInterval(c(1, 10, 50), c("white", "khaki", "orange", "orangered"))) %>%
+  formatStyle(columns = "Effort de validation", 
+              background = styleEqual(c("-","FAIBLE","SUFFISANT","FORT"), c("white", "cyan", "royalblue", "darkblue"))) %>%
+  formatStyle(columns = c("Nb de Contacts par Nuit","Niveau d'Activite"),valueColumns="Niveau d'Activite",
+              background = styleEqual(c("FAIBLE","MODEREE","FORTE","TRES FORTE"), c("palegoldenrod", "greenyellow", "limegreen", "darkgreen")))
+
+saveWidget(SummHTML,"output-summary.html")
+write.table(SummPart,"output-summary.tabular",sep="\t",row.names=F)
+
+#compute number of files validated per night/hour
+IdC2$Heure=sapply(IdC2$`nom du fichier`,FUN=function(x) substr(x,nchar(x)-9,nchar(x)-8))
+
+ActNuit=aggregate(IdC2$`nom du fichier`,by=list(IdC2$IdExtrap,IdC2$Session),FUN=length)
+ListSpref=match(ActNuit$Group.1,refPF$Espece)
+Subref=refPF[ListSpref]
+
+
+QualifActN=vector()
+for (k in 1:nrow(ActNuit))
+{
+  if(is.na(Subref$Q25[k]))
+  {
+    QualifActN=c(QualifActN,NA)
+  }else{
+    cuts=cbind(-Inf,as.numeric(Subref$Q25[k]),as.numeric(Subref$Q75[k])
+               ,as.numeric(Subref$Q98[k]),Inf)
+    
+    QualifActN=c(QualifActN,findInterval(ActNuit$x[k],cuts,left.open=T))
+  }
+}
+ActNuit$QualifActN=QualifActN
+
+ActNuitT=dcast(data=ActNuit,formula=Group.1~Group.2
+              ,value.var="x")
+ActNuitT[is.na(ActNuitT)]=0
+RefNuitT=dcast(data=ActNuit,formula=Group.1~Group.2
+               ,value.var="QualifActN")
+ARNuit=merge(ActNuitT,RefNuitT,by="Group.1")
+
+SummPartshort=cbind(SummPart[,c(1:5)],TriGroupe=SummPart[,TriGroupe])
+SummPartN=merge(SummPartshort,ARNuit,by.x="Code",by.y="Group.1")
+SummPartN=SummPartN[order(TriGroupe,decreasing=T),]
+
+test=grepl(".x",colnames(SummPartN))
+colnames(SummPartN)=mapply(FUN=function(x,y) if(y){substr(x,1,2)}else{x}
+                           ,colnames(SummPartN),test)
+ListNuit=subset(colnames(SummPartN),test)
+ListRef=subset(colnames(SummPartN),grepl(".y",colnames(SummPartN)))
+testHide=match(ListRef,colnames(SummPartN))-1
+#to do: extend colors to other columns to improve readability
+SummHTMLN=datatable(SummPartN, rownames = FALSE,options = list(
+  columnDefs = list(list(targets = testHide,visible = FALSE)))) %>%
+  formatStyle(columns = c("Code","Groupe","Nom francais","Nom scientifique","Risque d'erreur (%)"),valueColumns="Risque d'erreur (%)", 
+              background = styleInterval(c(1, 10, 50), c("white", "khaki", "orange", "orangered"))) %>%
+  formatStyle(columns = ListNuit,valueColumns=ListRef, 
+              background = styleEqual(c(1,2,3,4), c("palegoldenrod", "greenyellow", "limegreen", "darkgreen")))
+
+saveWidget(SummHTMLN,"output-nightly.html")
+write.table(SummPartN,"output-nightly.tabular",sep="\t",row.names=F)
+
+
+#summary by hour
+ActMoyH=dcast(data=IdC2,formula=IdExtrap~Heure
+              ,fun.aggregate=length)
+ActMoyHA=aggregate(IdC2$`nom du fichier`
+                   ,by=list(IdC2$IdExtrap,IdC2$Heure)
+                   ,FUN=length)
+
+test=(as.numeric(colnames(ActMoyH))>12)
+ColDebut=subset(colnames(ActMoyH),test)
+ColFin=subset(colnames(ActMoyH),test==F)
+ListH=c(ColDebut,ColFin)
+neworder=c("IdExtrap",ColDebut,ColFin)
+ActMoyH=ActMoyH[,..neworder]
+
+SummPartH=merge(SummPartshort,ActMoyH,by.x="Code",by.y="IdExtrap")
+SummPartH=SummPartH[order(TriGroupe,decreasing=T),]
+
+
+brks <- quantile(ActMoyHA$x, probs = seq(.05, .95, .05), na.rm = TRUE)-1
+clrs <- round(seq(255, 40, length.out = length(brks) + 1), 0) %>%
+{paste0("rgb(255,", ., ",", ., ")")}
+
+
+SummHTMLH=datatable(SummPartH, rownames = FALSE) %>%
+  formatStyle(columns = c("Code","Groupe","Nom francais","Nom scientifique","Risque d'erreur (%)"),valueColumns="Risque d'erreur (%)", 
+              background = styleInterval(c(1, 10, 50), c("white", "khaki", "orange", "orangered"))) %>%
+  formatStyle(columns=ListH, backgroundColor = styleInterval(brks, clrs))
+
+saveWidget(SummHTMLH,"output-hourly.html")
+write.table(SummPartH,"output-hourly.tabular",sep="\t",row.names=F)
+
+
+#saveWidget(SummHTML,paste0(substr(args[1],1,nchar(args[1])-9),"-summary.html"))
+#write.table(SummPart,paste0(substr(args[1],1,nchar(args[1])-9),"-summary.csv"),sep="\t",row.names=F)
+#saveWidget(SummHTMLN,paste0(substr(args[1],1,nchar(args[1])-9),"-nightly.html"))
+#write.table(SummPartN,paste0(substr(args[1],1,nchar(args[1])-9),"-nightly.csv"),sep="\t",row.names=F)
+#saveWidget(SummHTMLH,paste0(substr(args[1],1,nchar(args[1])-9),"-hourly.html"))
+#write.table(SummPartH,paste0(substr(args[1],1,nchar(args[1])-9),"-hourly.csv"),sep="\t",row.names=F)
+
+
+}
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BilanEnrichiPFen.xml	Mon Aug 06 09:13:29 2018 -0400
@@ -0,0 +1,86 @@
+<tool id="BilanEnrichiPF" name="Advanced restitution: summary" version="0.1">
+    <description>from Animal Detection on Acoustic Recordings</description>
+    <requirements>
+        <requirement type="package" version="1.4.3">r-reshape2</requirement> 
+        <requirement type="package" version="1.10.4">r-data.table</requirement>
+        <requirement type="package" version="0.2">r-dt</requirement>
+        <requirement type="package" version="0.9">r-htmlwidgets</requirement>
+        <requirement type="package" version="2.1.1">pandoc</requirement>
+    </requirements>
+    <command detect_errors="exit_code"><![CDATA[
+        Rscript 
+            '$__tool_directory__/BilanEnrichiPF.R' '$IdC2' '$__tool_directory__/refPF.csv' '$__tool_directory__/SpeciesList.csv' 
+ 
+        &&
+        tail -n +2 output-summary.html > tmp && mv tmp output-summary.html &&
+        tail -n +2 output-nightly.html > tmp && mv tmp output-nightly.html &&
+        tail -n +2 output-hourly.html > tmp && mv tmp output-hourly.html
+]]>
+    </command>
+    <inputs>
+        <param name="IdC2" type="data" format="tabular" label="IdValid output"/>
+    </inputs>
+    <outputs>
+        <data name="output_summary_tabular" format="tabular" from_work_dir="output-summary.tabular" label="${tool.name} on ${on_string} Summary"/>
+        <data name="output_summary_html" format="html" from_work_dir="output-summary.html" label="${tool.name} on ${on_string} Summary"/>
+
+        <data name="output_nightly_tabular" format="tabular" from_work_dir="output-nightly.tabular" label="${tool.name} on ${on_string} Nightly"/>
+        <data name="output_nightly_html" format="html" from_work_dir="output-nightly.html" label="${tool.name} on ${on_string} Nightly"/>
+
+        <data name="output_hourly_tabular" format="tabular" from_work_dir="output-hourly.tabular" label="${tool.name} on ${on_string} Hourly"/>
+        <data name="output_hourly_html" format="html" from_work_dir="output-hourly.html" label="${tool.name} on ${on_string} Hourly"/>
+    </outputs>
+
+    <tests>
+        <test>
+            <param name="IdC2" value="BilanEnrichiPF_Test1.tabular"/>
+            <output name="output_tab" file="BilanEnrichiPF_Test1_out_tab.tabular" ftype="tabular"/>
+        </test>
+    </tests>
+
+    <help><![CDATA[
+
+.. class:: infomark 
+
+==========================
+Advanced restitution 
+==========================
+
+**What it does**
+
+The tool treats observations made with the "Point fixe" protocol:  https://www.vigienature-ecole.fr/node/954&gt
+
+**Arguments**
+
+- Input is an observation/participation file corrected by the tools IdCorrect_2ndLayer and IdValid.
+- Outputs are Summary/Nightly/Hourly raw tabulars, and html visualisations.
+
+    ]]></help>
+
+    <citations>
+        <citation type="bibtex">
+            @article{kerbiriou2015vigie,
+            title={Vigie-Chiro: 9 ans de suivi des tendances des esp{\`e}ces communes},
+            author={Kerbiriou, C and Julien, JF and Bas, Y and Marmet, J and Le Viol, I and Lorrilliere, R and Azam, C and Gasc, A and Lois, G},
+            journal={Symbioses, nouvelle s{\'e}rie},
+            number={34},
+            year={2015}
+            }
+        </citation>
+        <citation type="bibtex">
+            @inproceedings{bas2013automatic,
+            title={Automatic echolocation calls identification in Europe vs. Neotropics: more species does not mean more difficult},
+            author={Bas, Yves and Escallon, Antoine and Ferre, Matthieu and Haquart, Alexandre and Rufray, Vincent and Disca, Thierry and Julien, Jean-Fran{\c{c}}ois}
+            }
+        </citation>
+        <citation type="bibtex">
+            @inproceedings{kerbiriou2010long,
+            title={Long term trends monitoring of bats, from biodiversity indicator production to species specialization assessment},
+            author={Kerbiriou, C and Bas, Y and Dufr{\^e}ne, L and Robert, A and Julien, JF},
+            booktitle={24th Annual Meeting of the Society for Conservation Biology, Edmonton, Canada},
+            year={2010}
+            }
+        </citation>
+        <citation type="doi">10.5334/jors.154</citation>  
+    </citations>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BilanEnrichiRP.R	Mon Aug 06 09:13:29 2018 -0400
@@ -0,0 +1,238 @@
+library(data.table)
+library(DT)
+library(htmlwidgets)
+
+args <- commandArgs(trailingOnly = TRUE)
+#print(args)
+EchelleErreur=c("","POSSIBLE","PROBABLE","SUR")
+EchelleNumErreur=c(99,50,10,1)
+
+#for test
+#inputest=list.files("C:/Users/Yves Bas/Documents/GitHub/65MO_Galaxy-E/raw_scripts/Vigie-Chiro/output_IdValid_input_BilanEnrichi/",pattern="IdC2.csv",full.names=T)
+#for (i in 1:length(inputest))
+#{
+#   args=c(inputest[i],"refRPSeuil50.csv","SpeciesList.csv")
+   
+IdC2=fread(args[1])
+refRP=fread(args[2])
+GroupList=fread(args[3])
+
+
+if(substr(IdC2$`nom du fichier`[1],2,2)!="i")
+{
+  print("Protocole non conforme, ce script doit etre lance pour un protocole Routier ou Pedestre")
+}else{
+  
+Routier=grepl("-",substr(IdC2$`nom du fichier`[1],4,7))
+#compute error risk by species (minimum error among files)
+#to be replaced by glm outputs if I'll have time
+RisqueErreurT=aggregate(IdC2$IdProb,by=list(IdC2$IdExtrap),FUN=function(x) ceiling((1-max(x-0.0001))*100))
+barplot(RisqueErreurT$x,names.arg=RisqueErreurT$Group.1,las=2)
+#compute error risk accoring to observer/validator (a little dirty because it relies on alphabetical order of confidence classes: POSSIBLE < PROBABLE < SUR)
+RisqueErreurOV0=match(IdC2$ConfV,EchelleErreur)
+RisqueErreurOV=aggregate(RisqueErreurOV0,by=list(IdC2$IdExtrap)
+                         ,FUN=max) 
+RisqueErreurOV2=EchelleNumErreur[RisqueErreurOV$x]
+#compute minimum error risk between man and machine
+RisqueErreur=pmin(RisqueErreurT$x,RisqueErreurOV2)
+
+#compute number of files validated per species
+FichValid=aggregate(IdC2$IdV,by=list(IdC2$IdExtrap,IdC2$'nom du fichier')
+                                 ,FUN=function(x) sum(x!="")) 
+NbValid2=aggregate(FichValid$x,by=list(FichValid$Group.1),FUN=function(x) sum(x>0))
+
+DiffC50=vector() # to store the median of confidence difference between unvalidated records and validated ones
+DiffT50=vector() # to store the median of time difference between unvalidated records and validated ones
+for (j in 1:nlevels(as.factor(IdC2$IdExtrap)))
+{
+  IdSp=subset(IdC2
+              ,IdC2$IdExtrap==levels(as.factor(IdC2$IdExtrap))[j])
+  IdSp$IdProb[is.na(IdSp$IdProb)]=0
+  IdSp=IdSp[order(IdSp$IdProb),]
+  IdSpV=subset(IdSp,IdSp$IdV!="")
+  if(nrow(IdSpV)>0)
+  {
+  cuts <- c(-Inf, IdSpV$IdProb[-1]-diff(IdSpV$IdProb)/2, Inf)
+  CorrC=findInterval(IdSp$IdProb, cuts)
+  CorrC2=IdSpV$IdProb[CorrC]
+  DiffC=abs(IdSp$IdProb-CorrC2)
+  DiffC50=c(DiffC50,median(DiffC))
+  
+  IdSp=IdSp[order(IdSp$TimeNum),]
+  IdSpV=subset(IdSp,IdSp$IdV!="")
+  cuts <- c(-Inf, IdSpV$TimeNum[-1]-diff(IdSpV$TimeNum)/2, Inf)
+  CorrT=findInterval(IdSp$TimeNum, cuts)
+  CorrT2=IdSpV$TimeNum[CorrT]
+  DiffT=abs(IdSp$TimeNum-CorrT2)
+  DiffT50=c(DiffT50,median(DiffT))
+  }else{
+    DiffC50=c(DiffC50,Inf)
+    DiffT50=c(DiffT50,Inf)
+  }
+}
+#compute an index of validation effort per species
+EffortV=1/DiffC50/DiffT50
+EffortClass=(EffortV>0.0005)+(EffortV>0.005)+RisqueErreurOV$x
+#cbind(RisqueErreurOV,EffortV,DiffC50,DiffT50)
+barplot(EffortClass-1,names.arg=NbValid2$Group.1,las=2)
+ClassEffortV=c("-","FAIBLE","SUFFISANT","SUFFISANT","FORT","FORT")
+EffortClassMot=ClassEffortV[EffortClass]
+
+
+#compare activity / reference frame
+FileInfo=as.data.table(tstrsplit(IdC2$`nom du fichier`,"-"))
+IdC2$Tron=FileInfo$V4
+
+MicTempsInfo=as.data.table(tstrsplit(as.data.frame(FileInfo)[,(ncol(FileInfo))],"_"))
+MicDroit=(as.data.frame(MicTempsInfo)[,(ncol(MicTempsInfo)-2)]=="1")
+IdC2$MicDroit=MicDroit
+
+testTempsFin=aggregate(IdC2$temps_fin,by=list(MicDroit),FUN=max)
+testTempsFin$Direct=(testTempsFin$x>0.5)
+testTF2=sum((testTempsFin$x>0.5))
+if(testTF2>1){stop("Probleme stereo : les 2 canaux semblent etre en enregistrement direct")}
+IdC2M=merge(IdC2,testTempsFin,by.x="MicDroit",by.y="Group.1")
+
+ActMoy=aggregate(IdC2$`nom du fichier`
+                 ,by=list(IdC2M$IdExtrap,IdC2M$Direct),FUN=length)
+ListSpref=match(levels(as.factor(ActMoy$Group.1)),refRP$Espece)
+Subref=refRP[ListSpref]
+if(Routier)
+{
+  Subref=Subref[,c(1:17)]
+}else{
+  Subref=Subref[,c(1,18:33)]
+}
+QualifActE=vector()
+QualifActD=vector()
+
+for (k in 1:nlevels(as.factor(ActMoy$Group.1)))
+{
+  Actsub=subset(ActMoy,ActMoy$Group.1==levels(as.factor(ActMoy$Group.1))[k])
+  if(is.na(Subref[k,2]))
+  {
+    QualifActE=c(QualifActE,NA)
+    QualifActD=c(QualifActD,NA)
+    }else{
+      ActE=subset(Actsub,Actsub$Group.2==F)
+      if(nrow(ActE)==0)
+      {
+        QualifActE=c(QualifActE,NA)
+        
+      }else{
+        cuts=cbind(-Inf,as.numeric(Subref[k,6]),as.numeric(Subref[k,7])
+               ,as.numeric(Subref[k,8]),Inf)
+        QualifActE=c(QualifActE,findInterval(ActE$x,cuts,left.open=T))
+      }
+      ActD=subset(Actsub,Actsub$Group.2==T)
+      if(nrow(ActD)==0)
+      {
+        QualifActD=c(QualifActD,NA)
+        
+      }else{
+        cuts=cbind(-Inf,as.numeric(Subref[k,14]),as.numeric(Subref[k,15])
+                   ,as.numeric(Subref[k,16]),Inf)
+        QualifActD=c(QualifActD,findInterval(ActD$x,cuts,left.open=T))
+      }
+      
+      }
+}
+ClassAct=c("FAIBLE","MODEREE","FORTE","TRES FORTE")
+QualifActMotE=ClassAct[QualifActE]
+QualifActMotD=ClassAct[QualifActD]
+
+#compute activity by nights (to be completed)
+#ActNuit=aggregate(IdC2M$`nom du fichier`,by=list(IdC2M$DateNuit,IdC2M$IdExtrap),FUN=length)
+ActED=dcast(data=ActMoy,formula=Group.1~Group.2,value=x)
+ActED[is.na(ActED)]=0
+#organize the csv summary
+SummPart0=cbind(Esp=levels(as.factor(IdC2M$IdExtrap))
+                ,RisqueErreur,NbValid=NbValid2$x,EffortValid=EffortClassMot)
+
+test=match("FALSE",colnames(ActED))
+if(is.na(test)==F)
+{
+  SummPart0=cbind(SummPart0,Contacts_Expansion=ActED$'FALSE'
+                  ,Niveau_Activite_Expansion=QualifActMotE)
+}else{
+  SummPart0=cbind(SummPart0,Contacts_Expansion=""
+                  ,Niveau_Activite_Expansion="")
+}
+test=match("TRUE",colnames(ActED))
+if(is.na(test)==F)
+{
+  
+  SummPart0=cbind(SummPart0,Contacts_Direct=ActED$'TRUE'
+                ,Niveau_Activite_Direct=QualifActMotD)
+}else{
+  SummPart0=cbind(SummPart0,Contacts_Direct=""
+                  ,Niveau_Activite_Direct="")
+}
+
+InfoSp=c("GroupFR","NomFR","Scientific name","Esp")
+GroupShort=GroupList[,..InfoSp]
+SummPart=merge(GroupShort,SummPart0,by="Esp")
+IndexGroupe=c("Autre","Sauterelle","Chauve-souris")
+SummPart$IndexSumm=match(SummPart$GroupFR,IndexGroupe)
+SummPart=SummPart[with(SummPart
+                       ,order(IndexSumm,as.numeric(Contacts_Direct),as.numeric(Contacts_Expansion),decreasing=T)),]
+colnames(SummPart)=c("Code","Groupe","Nom francais","Nom scientifique"
+                     ,"Risque d'erreur (%)","Nb Validations"
+                     ,"Effort de validation","Nb de Contacts en expansion"
+                     ,"Niveau d'Activite en expansion"
+                     ,"Nb de Contacts en direct"
+                     ,"Niveau d'Activite en direct","TriGroupe")
+
+#to do: extend colors to other columns to improve readability
+SummHTML=datatable(SummPart, rownames = FALSE) %>%
+  formatStyle(columns = c("Code","Groupe","Nom francais","Nom scientifique","Risque d'erreur (%)"),valueColumns="Risque d'erreur (%)", 
+              background = styleInterval(c(1, 10, 50), c("white", "khaki", "orange", "orangered"))) %>%
+  formatStyle(columns = "Effort de validation", 
+              background = styleEqual(c("-","FAIBLE","SUFFISANT","FORT"), c("white", "cyan", "royalblue", "darkblue"))) %>%
+  formatStyle(columns = c("Nb de Contacts en expansion","Niveau d'Activite en expansion"),valueColumns="Niveau d'Activite en expansion", 
+              background = styleEqual(c("FAIBLE","MODEREE","FORTE","TRES FORTE"), c("palegoldenrod", "greenyellow", "limegreen", "darkgreen"))) %>%
+  formatStyle(columns = c("Nb de Contacts en direct","Niveau d'Activite en direct"),valueColumns="Niveau d'Activite en direct", 
+              background = styleEqual(c("FAIBLE","MODEREE","FORTE","TRES FORTE"), c("palegoldenrod", "greenyellow", "limegreen", "darkgreen")))
+
+
+saveWidget(SummHTML,"output-summaryRP.html")
+write.table(SummPart,"output-summaryRP.tabular",row.names=F,sep="\t")
+
+#summary for each point/transect
+
+#compute number of files validated per species
+IdC2M$Canal=sapply(IdC2M$Direct,FUN=function(x) if(x){"Direct"}else{"Expansion"})
+
+ActMoyTA=aggregate(IdC2M$`nom du fichier`,by=list(IdC2M$IdExtrap,IdC2M$Canal,IdC2M$Session),FUN=length)
+ActMoyT=dcast(data=IdC2M,formula=IdExtrap+Canal~Session
+              ,fun.aggregate=length)
+SummPartshort=cbind(SummPart[,c(1:5)],TriGroupe=SummPart[,TriGroupe])
+SummPartTron=merge(SummPartshort,ActMoyT,by.x="Code",by.y="IdExtrap")
+SummPartTron=SummPartTron[order(TriGroupe,decreasing=T),]
+
+ListSession=levels(as.factor(IdC2M$Session))
+brks <- quantile(ActMoyTA$x, probs = seq(.05, .95, .05), na.rm = TRUE)-1
+clrs <- round(seq(255, 40, length.out = length(brks) + 1), 0) %>%
+{paste0("rgb(255,", ., ",", ., ")")}
+
+
+#to do: extend colors to other columns to improve readability
+SummHTMLT=datatable(SummPartTron, rownames = FALSE) %>%
+  formatStyle(columns = c("Code","Groupe","Nom francais","Nom scientifique","Risque d'erreur (%)"),valueColumns="Risque d'erreur (%)", 
+              background = styleInterval(c(1, 10, 50), c("white", "khaki", "orange", "orangered"))) %>%
+  formatStyle(columns=ListSession, backgroundColor = styleInterval(brks, clrs))
+
+saveWidget(SummHTMLT,"output-detailRP.html")
+write.table(SummPartTron,"output-detailRP.tabular",row.names=F,sep="\t")
+
+#saveWidget(SummHTML,paste0(substr(args[1],1,nchar(args[1])-9),"-summary.html"))
+#write.table(SummPart,paste0(substr(args[1],1,nchar(args[1])-9),"-summary.csv"),row.names=F,sep="\t")
+#saveWidget(SummHTMLT,paste0(substr(args[1],1,nchar(args[1])-9),"-detail.html"))
+#write.table(SummPartTron,paste0(substr(args[1],1,nchar(args[1])-9),"-detail.csv"),row.names=F,sep="\t")
+
+
+
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BilanEnrichiRPen.xml	Mon Aug 06 09:13:29 2018 -0400
@@ -0,0 +1,74 @@
+<tool id="BilanEnrichiRP" name="Advanced restitution: raw approach" version="0.1">
+    <description>from Animal Detection on Acoustic Recordings</description>
+    <requirements>
+        <requirement type="package" version="1.4.3">r-reshape2</requirement> 
+        <requirement type="package" version="1.10.4">r-data.table</requirement>
+        <requirement type="package" version="0.2">r-dt</requirement>
+        <requirement type="package" version="0.9">r-htmlwidgets</requirement>
+        <requirement type="package" version="2.1.1">pandoc</requirement>
+    </requirements>
+    <command detect_errors="exit_code"><![CDATA[
+        Rscript 
+            '$__tool_directory__/BilanEnrichiRP.R' '$IdC2' '$__tool_directory__/refRPSeuil50.csv' '$__tool_directory__/SpeciesList.csv' 
+        &&
+        tail -n +2 output-summaryRP.html > tmp && mv tmp output-summaryRP.html &&
+        tail -n +2 output-detailRP.html > tmp && mv tmp output-detailRP.html
+]]>
+    </command>
+    <inputs>
+        <param name="IdC2" type="data" format="tabular" label="IdValid output"/>
+    </inputs>
+    <outputs>
+        <data name="output_summary_tabular" format="tabular" from_work_dir="output-summaryRP.tabular" label="${tool.name} on ${on_string} Summary"/>
+        <data name="output_summary_html" format="html" from_work_dir="output-summaryRP.html" label="${tool.name} on ${on_string} Summary"/>
+        <data name="output_detail_tabular" format="tabular" from_work_dir="output-detailRP.tabular" label="${tool.name} on ${on_string} Detail"/>
+        <data name="output_detail_html" format="html" from_work_dir="output-detailRP.html" label="${tool.name} on ${on_string} Detail"/>
+    </outputs>
+
+    <tests>
+        <test>
+            <param name="IdC2" value="BilanEnrichiPF_Test1.tabular"/>
+            <output name="output_tab" file="BilanEnrichiPF_Test1_out_tab.tabular" ftype="tabular"/>
+        </test>
+    </tests>
+
+    <help><![CDATA[
+**What it does**
+
+The tool analyses the observations made with the "Routier" or "Pedestre" protocols.
+
+**Arguments**
+
+- Input is an observation/participation file corrected by the tools IdCorrect_2ndLayer and IdValid.
+- Outputs are Summary and details raw tabulars, and html visualisations.
+
+
+    ]]></help>
+    
+    <citations>
+        <citation type="bibtex">
+            @article{kerbiriou2015vigie,
+            title={Vigie-Chiro: 9 ans de suivi des tendances des esp{\`e}ces communes},
+            author={Kerbiriou, C and Julien, JF and Bas, Y and Marmet, J and Le Viol, I and Lorrilliere, R and Azam, C and Gasc, A and Lois, G},
+            journal={Symbioses, nouvelle s{\'e}rie},
+            number={34},
+            year={2015}
+            }
+        </citation>
+        <citation type="bibtex">
+            @inproceedings{bas2013automatic,
+            title={Automatic echolocation calls identification in Europe vs. Neotropics: more species does not mean more difficult},
+            author={Bas, Yves and Escallon, Antoine and Ferre, Matthieu and Haquart, Alexandre and Rufray, Vincent and Disca, Thierry and Julien, Jean-Fran{\c{c}}ois}
+            }
+        </citation>
+        <citation type="bibtex">
+            @inproceedings{kerbiriou2010long,
+            title={Long term trends monitoring of bats, from biodiversity indicator production to species specialization assessment},
+            author={Kerbiriou, C and Bas, Y and Dufr{\^e}ne, L and Robert, A and Julien, JF},
+            booktitle={24th Annual Meeting of the Society for Conservation Biology, Edmonton, Canada},
+            year={2010}
+            }
+        </citation>
+        <citation type="doi">10.5334/jors.154</citation>  
+</citations>
+</tool>
Binary file ClassifEspC2b_180222.learner has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GroupList_HF.csv	Mon Aug 06 09:13:29 2018 -0400
@@ -0,0 +1,112 @@
+Nesp;France;Turquie;Espagne;Norfolk;Scientific name;Group;Seuil_grossier;NomFR;GroupFR
+amph;x;x;x;x;Amphibia sp.;frog;0;Amphibien sp.;Autre
+Antius;x;;x;;Antaxius spinibrachius;bush-cricket;0;Antaxie voyageuse;Sauterelle
+Antped;x;;;;Antaxius pedestris;bush-cricket;0.6;Antaxie marbree;Sauterelle
+Antsor;x;;;;Antaxius sorrezensis;bush-cricket;0;Antaxie cevenole;Sauterelle
+Aposp;x;x;x;;Apodemus sp.;other mammal;0;Mulot sp.;Autre
+Barbar;x;x;x;x;Barbastella barbastellus;bat;0.45;Barbastelle d'Europe;Chauve-souris
+Barfis;x;;;;Barbitistes fischeri;bush-cricket;0.25;Barbitiste languedocien;Sauterelle
+Barsan;x;;x;;Barbitistes cf. sanzii;bush-cricket;0;Barbitiste cryptique;Sauterelle
+Barser;x;;x;;Barbitistes serricauda;bush-cricket;0;Barbitiste des bois;Sauterelle
+Bicbic;x;;x;;Bicolorana bicolor;bush-cricket;0.5;Decticelle bicolore;Sauterelle
+chirp;x;;;;chirp;noise;0;chirp;Autre
+Cicorn;x;x;x;;Cicada orni;cicada;0;Cigale grise;Autre
+Condor;x;x;x;x;Conocephalus dorsalis;bush-cricket;0.7;Conocephale des marais;Sauterelle
+Confus;x;;x;x;Conocephalus fuscus;bush-cricket;0.7;Conocephale bigarre;Sauterelle
+criq;x;x;x;x;Acrididae sp.;grasshopper;0;Criquet sp.;Autre
+Cympud;x;;x;;Cymbalophora pudica;moth;0;Ecaille pudique;Autre
+Cyrscu;x;;x;;Cyrtaspis scutatus;bush-cricket;0;Meconeme a bouclier;Sauterelle
+Decalb;x;x;x;;Decticus albifrons;bush-cricket;0;Dectique a front blanc;Sauterelle
+Epheph;x;;x;;Ephippiger ephippiger;bush-cricket;0.7;Ephippigere des vignes;Sauterelle
+Eptana;;x;;;Eptesicus anatolicus;bat;0;Serotine d'Anatolie;Chauve-souris
+Eptisa;;;x;;Eptesicus isabellinus;bat;0;Serotine isabelle;Chauve-souris
+Eptser;x;x;x;x;Eptesicus serotinus;bat;0.35;Serotine commune;Chauve-souris
+Eumbor;x;x;x;;Eumodycogryllus bordigalensis;ground-cricket;0;Grillon bordelais;Autre
+Eupcha;x;x;;;Eupholidoptera chabrieri;bush-cricket;0;Decticelle splendide;Sauterelle
+Hypsav;x;x;x;;Hypsugo savii;bat;0.63;Vespere de Savi;Chauve-souris
+Inssp1;x;;x;x;Insect sp.1;insect;0;Insecte sp. type 1;Autre
+Inssp2;x;;x;x;Insect sp.2;insect;0;Insecte sp. type 2;Autre
+Inssp5;x;;x;x;Insect sp.5;insect;0;Insecte sp. type 5;Autre
+Inssp6;x;;x;x;Insect sp.6;insect;0;Insecte sp. type 6;Autre
+Inssp7;x;;x;x;Insect sp.7;insect;0;Insecte sp. type 7;Autre
+InsTu1;;x;;;Insect sp. from Turkey 1;insect;0;Insecte sp. Tu1;Autre
+Isopyr;x;x;x;;Isophya pyrenea;bush-cricket;0.6;Barbatiste pyreneen;Sauterelle
+Lamsp.;x;x;x;x;Lampyris sp.;beetle;0;Lampyre sp.;Autre
+Lepalb;;x;;;Leptophyes albovittata;bush-cricket;0;Sauterelle rayee;Sauterelle
+Lepbos;x;;;;Leptophyes boscii;bush-cricket;0;Sauterelle sarmate;Sauterelle
+Leppun;x;;x;x;Leptophyes punctatissima;bush-cricket;0.7;Sauterelle ponctuee;Sauterelle
+Llusta;;;x;;Lluciapomaresius stalii;bush-cricket;0;Ephippigere de Stal;Sauterelle
+mamm;x;x;x;x;Mammalia sp.;other mammal;0;Mammifere sp.;Autre
+Metbra;x;;;x;Metrioptera brachyptera;bush-cricket;0;Decticelle des bruyeres;Sauterelle
+Micagr;x;x;x;x;Microtus agrestis;other mammal;0;Campagnol agreste;Autre
+Minsch;x;x;x;;Miniopterus schreibersii;bat;0.57;Minioptere;Chauve-souris
+Mussp;x;x;x;x;Crocidura russula;other mammal;0;Musaraigne sp.;Autre
+Myoalc;x;x;x;x;Myotis alcathoe;bat;0.35;Murin d'Alcathoe;Chauve-souris
+Myobec;x;x;x;x;Myotis bechsteinii;bat;0;Murin de Bechstein;Chauve-souris
+Myobra;x;x;;x;Myotis brandtii;bat;0;Murin de Brandt;Chauve-souris
+Myocap;x;x;x;;Myotis capaccinii;bat;0.69;Murin de Capaccini;Chauve-souris
+Myodas;x;x;;;Myotis dasycneme;bat;0;Murin des marais;Chauve-souris
+Myodau;x;x;x;x;Myotis daubentonii;bat;0.27;Murin de Daubenton;Chauve-souris
+Myoema;x;x;x;x;Myotis emarginatus;bat;0.42;Murin a oreilles echancrees;Chauve-souris
+MyoGT;x;x;x;;Myotis cf. myotis;bat;0.35;Murin de grande taille;Chauve-souris
+Myomys;x;x;x;x;Myotis mystacinus;bat;0.55;Murin a moustaches;Chauve-souris
+Myonat;x;x;;x;Myotis cf. nattereri;bat;0.46;Murin groupe Natterer;Chauve-souris
+noise;x;x;x;x;noise;noise;0;bruit;Autre
+Nyclas;x;x;x;;Nyctalus lasiopterus;bat;0.5;Grande Noctule;Chauve-souris
+Nyclei;x;x;x;x;Nyctalus leisleri;bat;0.42;Noctule de Leisler;Chauve-souris
+Nycnoc;x;x;x;x;Nyctalus noctula;bat;0.5;Noctule commune;Chauve-souris
+Odomac;;;x;;Odontura macphersoni;bush-cricket;0;Sauterelle de MacPherson;Sauterelle
+Phafal;x;x;x;;Phaneroptera falcata;bush-cricket;0;Phaneroptere commun;Sauterelle
+Phanan;x;x;x;;Phaneroptera nana;bush-cricket;0.55;Phaneroptere meridional;Sauterelle
+Phofem;x;x;;;Pholidoptera femorata;bush-cricket;0;Decticelle des friches;Sauterelle
+Phogri;x;x;x;x;Pholidoptera griseoaptera;bush-cricket;0.8;Decticelle cendree;Sauterelle
+piaf;x;x;x;x;Aves sp.;bird;0;Oiseau sp.;Autre
+Pipkuh;x;x;x;x;Pipistrellus kuhlii;bat;0.43;Pipistrelle de Kuhl;Chauve-souris
+Pipnat;x;x;x;x;Pipistrellus nathusii;bat;0.68;Pipistrelle de Nathusius;Chauve-souris
+Pippip;x;x;x;x;Pipistrellus pipistrellus;bat;0.24;Pipistrelle commune;Chauve-souris
+Pippyg;x;x;x;x;Pipistrellus pygmaeus;bat;0.68;Pipistrelle soprane;Chauve-souris
+Plaaff;x;;x;;Platycleis affinis;bush-cricket;0;Decticelle cotiere;Sauterelle
+Plaalb;x;;x;x;Platycleis albopunctata;bush-cricket;0;Decticelle chagrinee;Sauterelle
+Plafal;x;;x;;Platycleis falx;bush-cricket;0;Decticelle a serpe;Sauterelle
+Plaibe;;;x;;Platycleis iberica;bush-cricket;0;Decticelle iberique;Sauterelle
+Plaint;x;;x;;Platycleis intermedia;bush-cricket;0;Decticelle intermediaire;Sauterelle
+Plasab;x;;x;;Platycleis sabulosa;bush-cricket;0;Decticelle des sables;Sauterelle
+Pleaur;x;;x;x;Plecotus auritus;bat;0.3;Oreillard roux;Chauve-souris
+Pleaus;x;;x;x;Plecotus austriacus;bat;0.52;Oreillard gris;Chauve-souris
+Plekol;;x;;;Plecotus kolombatovici;bat;0;Oreillard des Balkans;Chauve-souris
+Plemac;x;x;x;;Plecotus macrobullaris;bat;0.5;Oreillard montagnard;Chauve-souris
+Pteger;x;x;;;Pterolepis germanica;bush-cricket;0;Decticelle orientale;Sauterelle
+Ptegra;;x;x;;Pterolepis grallata;bush-cricket;0;Decticelle a pattes fines;Sauterelle
+Ptepon;x;x;x;;Pterolepis poneli;bush-cricket;0;Decticelle varoise;Sauterelle
+Pycjug;;;x;;Pycnogaster jugicola;bush-cricket;0;Ephippigere droite;Sauterelle
+Ratnor;x;x;x;x;Rattus norvegicus;other mammal;0;Surmulot;Autre
+Rhibla;x;x;;;Rhinolophus blasii;bat;0;Rhinolophe de Blasius;Chauve-souris
+Rhieur;x;x;x;;Rhinolophus euryale;bat;0.2;Rhinolophe euryale;Chauve-souris
+Rhifer;x;x;x;x;Rhinolophus ferrumequinum;bat;0.3;Grand Rhinolophe;Chauve-souris
+Rhihip;x;x;x;x;Rhinolophus hipposideros;bat;0.53;Petit Rhinolophe;Chauve-souris
+Rhimeh;;x;x;;Rhinolophus mehelyi;bat;0;Rinolophe de Mehely;Chauve-souris
+Roeroe;x;x;x;x;Roeseliana roeselii;bush-cricket;0;Decticelle bariolee;Sauterelle
+Rusnit;x;x;x;x;Ruspolia nitidula;bush-cricket;0;Conocephale gracieux;Sauterelle
+SauTu4;;x;;;Tettigoniidae sp. from Turkey 4;bush-cricket;0;Sauterelle sp. Tu4;Sauterelle
+SauTu5;;x;;;Tettigoniidae sp. from Turkey 5;bush-cricket;0;Sauterelle sp. Tu5;Sauterelle
+SauTu6;;x;;;Tettigoniidae sp. from Turkey 6;bush-cricket;0;Sauterelle sp. Tu6;Sauterelle
+SauTu7;;x;;;Tettigoniidae sp. from Turkey 7;bush-cricket;0;Sauterelle sp. Tu7;Sauterelle
+SauTurquiesp1;;x;;;Tettigoniidae sp. from Turkey 1;bush-cricket;0;Sauterelle sp. Tu1;Sauterelle
+SauTurquiesp2;;x;;;Tettigoniidae sp. from Turkey 2;bush-cricket;0;Sauterelle sp. Tu2;Sauterelle
+SauTurquiesp3;;x;;;Tettigoniidae sp. from Turkey 3;bush-cricket;0;Sauterelle sp. Tu3;Sauterelle
+Sepsep;x;;x;;Sepiana sepium;bush-cricket;0;Decticelle echassiere;Sauterelle
+Tadten;x;x;x;;Tadarida teniotis;bat;0.4;Molosse;Chauve-souris
+Tesori;;;;;Tessellana orina;bush-cricket;0;Decticelle orina;Sauterelle
+Testes;x;x;x;;Tessellana tessellata;bush-cricket;0;Decticelle carroyee;Sauterelle
+Tetarg;x;;x;;Tettigetta argentata;cicada;0;Cigale argentee;Autre
+Tetcan;x;x;x;;Tettigonia cantans;bush-cricket;0;Sauterelle cymbaliere;Sauterelle
+Tethis;;;x;;Tettigonia hispanica;bush-cricket;0;Sauterelle hispanique;Sauterelle
+Tetpyg;x;;x;;Tettigetta pygmea;cicada;0;Cigale pygmee;Autre
+Tetvir;x;x;x;x;Tettigonia viridissima;bush-cricket;0;Sauterelle verte;Sauterelle
+Thycor;x;;x;;Thyreonotus corsicus;bush-cricket;0;Decticelle marocaine;Sauterelle
+Tyllil;x;x;x;;Tylopsis lilifolia;bush-cricket;0;Phaneroptere liliace;Sauterelle
+Urorug;x;;x;;Uromenus rugosicollis;bush-cricket;0;Ephippigere carenee;Sauterelle
+Vesmur;x;x;x;;Vespertilio murinus;bat;0.5;Serotine bicolore;Chauve-souris
+Yerbey;x;;;;Yersinella beybienkoi;bush-cricket;0;Decticelle italienne;Sauterelle
+Yerray;x;;x;;Yersinella raymondii;bush-cricket;0;Decticelle frele;Sauterelle
+Zeuabb;x;;x;;Zeuneriana abbreviata;bush-cricket;0;Decticelle aquitaine;Sauterelle
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IdCorrect_2ndLayer.R	Mon Aug 06 09:13:29 2018 -0400
@@ -0,0 +1,181 @@
+library(data.table)
+library(randomForest)
+args <- commandArgs(trailingOnly = TRUE)
+
+set.seed(1) #To test reproductibility
+
+
+#for test
+#inputest=list.files("C:/Users/Yves Bas/Documents/GitHub/65MO_Galaxy-E/raw_scripts/Vigie-Chiro/input_examples",full.names=T,pattern="participation-")
+#for (i in 1:length(inputest))
+#{
+# args=c(inputest[i],"ClassifEspC2b_180222.learner")
+#args[3]=basename(args[1])
+
+filename=args[3]
+if (exists("ClassifEspC2b")==F){load(args[2])}
+
+DataPar=fread(args[1]) #id to be corrected
+DataPar$participation=substr(filename,nchar(filename)-40,nchar(filename)-17)
+test1=duplicated(cbind(DataPar$'nom du fichier',DataPar$tadarida_taxon))
+test2=(DataPar$tadarida_taxon=="empty")
+DataPar=subset(DataPar,(!test1)|(test2))
+DataPar$tadarida_probabilite[DataPar$tadarida_probabilite==""]="0"
+DataPar$tadarida_probabilite=as.numeric(DataPar$tadarida_probabilite)
+
+
+#tableau comptabilisant le nombre de contacts par espèces 
+nbcT=as.matrix(table(DataPar$participation,DataPar$tadarida_taxon))
+
+DataPar$tadarida_probabilite=as.numeric(DataPar$tadarida_probabilite)
+
+#generating input variables for second layer classification
+
+Q25=vector()
+Q50=vector()
+Q75=vector()
+Q90=vector()
+Q95=vector()
+Q98=vector()
+Q100=vector()
+compt=0
+PropSp=nbcT[0,]
+VoteO=DataPar[0,]
+for (j in 1:nlevels(as.factor(DataPar$tadarida_taxon)))
+    {
+      Datasub2=subset(DataPar,DataPar$tadarida_taxon==levels(as.factor(DataPar$tadarida_taxon))[j])
+      
+      Q25=c(Q25,rep(quantile(Datasub2$tadarida_probabilite,0.25),nrow(Datasub2)))
+      Q50=c(Q50,rep(quantile(Datasub2$tadarida_probabilite,0.50),nrow(Datasub2)))
+      Q75=c(Q75,rep(quantile(Datasub2$tadarida_probabilite,0.75),nrow(Datasub2)))
+      Q90=c(Q90,rep(quantile(Datasub2$tadarida_probabilite,0.90),nrow(Datasub2)))
+      Q95=c(Q95,rep(quantile(Datasub2$tadarida_probabilite,0.95),nrow(Datasub2)))
+      Q98=c(Q98,rep(quantile(Datasub2$tadarida_probabilite,0.98),nrow(Datasub2)))
+      Q100=c(Q100,rep(max(Datasub2$tadarida_probabilite),nrow(Datasub2)))
+      Ncont1=nrow(Datasub2)
+      VoteO=rbind(VoteO,Datasub2)
+      PropSp0=nbcT/Ncont1
+      PropSp=rbind(PropSp,PropSp0[rep(seq_len(nrow(PropSp0)),nrow(Datasub2)),])
+      compt=compt+nrow(Datasub2)
+      #print(paste(compt,levels(as.factor(DataPar$tadarida_taxon))[j]))
+    }
+
+VoteC2=cbind(VoteO,PropSp,Q25,Q50,Q75,Q90,Q95,Q98,Q100)
+
+
+#édition des titres de colonne pour identifier les variables de type "proportions d'abondances"
+for (i in 15:(ncol(VoteC2)-7))
+{
+  colnames(VoteC2)[i]=paste0(names(VoteC2)[i],"_prop")
+}
+
+#rajouter les espèces manquantes
+EspForm=subset(row.names(ClassifEspC2b$importance)
+               ,substr(row.names(ClassifEspC2b$importance)
+                       ,nchar(row.names(ClassifEspC2b$importance))-4
+                       ,nchar(row.names(ClassifEspC2b$importance)))
+               =="_prop")
+test=match(EspForm,colnames(VoteC2))
+EspM=subset(EspForm,is.na(test))
+Zeros=matrix(nrow=nrow(VoteC2),ncol=length(EspM))
+Zeros[is.na(Zeros)]=0
+colnames(Zeros)=EspM
+VoteC2=cbind(VoteC2,Zeros)
+
+ListDV=levels(as.factor(DataPar$'nom du fichier'))
+#calcule les probabilités max par espèce et par fichier
+#(utile pour corriger les erreurs dues à la coexistence de taxons dans le même fichier
+#ex: cris sociaux de Pipistrelles identifiées comme autre chose (Noctule, oreillard...))
+MaxI=tapply(DataPar$tadarida_probabilite
+            ,INDEX=list(c(DataPar$'nom du fichier'),c(DataPar$tadarida_taxon))
+            ,FUN=max)
+MaxI2=as.data.frame(cbind(row.names(MaxI),MaxI))
+for (i in 2:ncol(MaxI2))
+{
+  MaxI2[,i]=as.numeric(as.character(MaxI2[,i]))
+}
+MaxI2[is.na(MaxI2)]=0
+
+#édition des titres de colonne pour identifier les variables de type "indices max"
+for (i in 2:(ncol(MaxI2)))
+{
+  colnames(MaxI2)[i]=paste0(names(MaxI2)[i],"_maxI")
+}
+
+
+#rajouter les espèces manquantes
+EspForm=subset(row.names(ClassifEspC2b$importance)
+               ,substr(row.names(ClassifEspC2b$importance)
+                       ,nchar(row.names(ClassifEspC2b$importance))-4
+                       ,nchar(row.names(ClassifEspC2b$importance)))
+               =="_maxI")
+test=match(EspForm,colnames(MaxI2))
+EspM=subset(EspForm,is.na(test))
+Zeros=matrix(nrow=nrow(MaxI2),ncol=length(EspM))
+Zeros[is.na(Zeros)]=0
+colnames(Zeros)=EspM
+MaxI2=cbind(MaxI2,Zeros)
+
+
+
+
+#indice de confiance à l'echelle de l'observation (groupe de cris identifié comme provenant d'une seule espèce par la première couche)
+if(exists("IdS3")){rm(IdS3)}
+for (i in 1:nlevels(as.factor(DataPar$tadarida_taxon)))
+{
+  Idsub=subset(DataPar,DataPar$tadarida_taxon==levels(as.factor(DataPar$tadarida_taxon))[i])
+  IdS2=cbind('nom du fichier'=Idsub$'nom du fichier',tadarida_taxon=Idsub$tadarida_taxon,prob=Idsub$tadarida_probabilite)
+  colnames(IdS2)[3]=paste(levels(as.factor(DataPar$tadarida_taxon))[i])
+  if(exists("IdS3")){IdS3=merge(IdS3,IdS2,all=T)}else{IdS3=IdS2}
+  #print(i)
+}
+
+for (i in 3:ncol(IdS3))
+{
+  IdS3[,i]=as.numeric(as.character(IdS3[,i]))
+}
+
+#édition des titres de colonne pour identifier les variables de type "indices de l'observation"
+for (i in 3:(ncol(IdS3)))
+{
+  colnames(IdS3)[i]=paste0(names(IdS3)[i],"_ValI")
+}
+
+IdS3[is.na(IdS3)]=0
+
+#rajouter les espèces manquantes
+EspForm=subset(row.names(ClassifEspC2b$importance)
+               ,substr(row.names(ClassifEspC2b$importance)
+                       ,nchar(row.names(ClassifEspC2b$importance))-4
+                       ,nchar(row.names(ClassifEspC2b$importance)))
+               =="_ValI")
+test=match(EspForm,colnames(IdS3))
+EspM=subset(EspForm,is.na(test))
+Zeros=matrix(nrow=nrow(IdS3),ncol=length(EspM))
+Zeros[is.na(Zeros)]=0
+colnames(Zeros)=EspM
+IdS3=cbind(IdS3,Zeros)
+
+#on merge les prop d'espèces, les quantiles et les indices par fichiers et par observations
+VoteC3=merge(VoteC2,MaxI2,by.x="nom du fichier",by.y="V1")
+VoteC4=merge(VoteC3,IdS3,by=c("nom du fichier","tadarida_taxon"))
+VoteC4$temps_fin=as.numeric(as.character(VoteC4$temps_fin))
+VoteC4$temps_debut=as.numeric(as.character(VoteC4$temps_debut))
+VoteC4$frequence=as.numeric(as.character(VoteC4$frequence_mediane))
+VoteC4$durseq=VoteC4$temps_fin-VoteC4$temps_debut
+
+ProbEsp_C2b=predict(ClassifEspC2b,VoteC4,type="prob",norm.votes=TRUE)
+ProbEsp_C2bs=predict(ClassifEspC2b,VoteC4,type="response",norm.votes=TRUE)
+
+colnum=match("participation",colnames(VoteC4))
+DataCorrC2=cbind(VoteC4[,1:colnum],ProbEsp_C2b,ProbEsp_C2bs)
+DataCorrC2=DataCorrC2[order(DataCorrC2$tadarida_probabilite,decreasing=T),]
+DataCorrC2=DataCorrC2[order(DataCorrC2$'nom du fichier'),]
+
+DataCorrC2$ProbEsp_C2bs=as.character(DataCorrC2$ProbEsp_C2bs)
+DataCorrC2$ProbEsp_C2bs[is.na(DataCorrC2$ProbEsp_C2bs)]="empty"
+
+fout_name="output.tabular"
+
+write.table(DataCorrC2,file=fout_name,row.names=FALSE,sep="\t")
+#write.table(DataCorrC2,paste0(substr(args[1],nchar(args[1])-40,nchar(args[1])-17),"-DataCorrC2.csv"),row.names=F,sep="\t")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IdCorrect_2ndLayer_en.xml	Mon Aug 06 09:13:29 2018 -0400
@@ -0,0 +1,102 @@
+<tool id="IdCorrect_2ndLayer" name="Tadarida data cleaner" version="0.1">
+    <description>clean data from animal detection on acoustic recordings</description>
+    <requirements>
+        <requirement type="package" version="1.10.4">r-data.table</requirement>
+        <requirement type="package" version="4.6_12">r-randomforest</requirement>
+    </requirements>
+    <command detect_errors="exit_code"><![CDATA[
+        Rscript 
+         '$__tool_directory__/IdCorrect_2ndLayer.R' '$participation_file' 
+
+         #if $learner.condi_learner == "custom":
+             '$learner.user_learner'
+         #else
+             '$__tool_directory__/ClassifEspC2b_180222.learner'
+         #end if
+
+         '${participation_file.name}' 
+         
+         '$output'
+]]>
+    </command>
+    <inputs>
+        <param name="participation_file" type="data" format="csv" label="Participation file"/>
+        <param name="learner" type="data" label="Choose your leaner" format="rdata"/>
+
+        <conditional name="learner">
+            <param name="condi_learner" type="select" label="Select a classifier" help="Default is ClassifEspC2b_180222">
+                <option value="c18">ClassifEspC2b_180222</option>
+                <option value="custom">Custom Classifier</option>
+            </param>
+
+            <when value="c18">
+            </when>
+            <when value="custom">        
+                <param name="user_learner" type="data" label="Choose your classifier" format="rdata"/>
+            </when>
+        </conditional>
+
+    </inputs>
+    <outputs>
+        <data name="output" from_work_dir="output.tabular" format="tabular"/>
+    </outputs>
+    <tests>
+        <test> 
+            <param name="participation_file" value="IdCor2Layer_Test1_obs.csv"/>
+            <param name="condi_learner" value="default_learner"/>
+            <output name="output" file="IdCor2Layer_Test1_out.tabular"/>
+        </test>
+        <test>             
+            <param name="participation_file" value="IdCor2Layer_Test1_obs.csv"/>
+            <param name="condi_learner" value="custom_learner"/>
+            <param name="user_learner" value="ClassifEspC2b_171206.learner"/>
+            <output name="output" file="IdCor2Layer_Test1_out.tabular"/>
+        </test> 
+
+    </tests>
+    <help><![CDATA[
+
+.. class:: infomark 
+
+==========================
+Tadarida data cleaner
+==========================
+
+**What it does**
+
+This tool intend to correct ids from 1st layer of Tadarida software, and improve data output according to context (= the whole output of a sampling session).
+
+**Arguments**
+
+It should be called with 2 consecutive arguments :
+
+- a summary table of TadaridaC output from vigiechiro.herokuapp.com web portal. 
+- the 2nd layer classifier built on validated id in Vigie-Chiro database (eg : "ClassifEspC2b_180222.learner")
+  ]]></help>
+    <citations>
+        <citation type="bibtex">
+            @article{kerbiriou2015vigie,
+            title={Vigie-Chiro: 9 ans de suivi des tendances des esp{\`e}ces communes},
+            author={Kerbiriou, C and Julien, JF and Bas, Y and Marmet, J and Le Viol, I and Lorrilliere, R and Azam, C and Gasc, A and Lois, G},
+            journal={Symbioses, nouvelle s{\'e}rie},
+            number={34},
+            year={2015}
+            }
+        </citation>
+        <citation type="bibtex">
+            @inproceedings{bas2013automatic,
+            title={Automatic echolocation calls identification in Europe vs. Neotropics: more species does not mean more difficult},
+            author={Bas, Yves and Escallon, Antoine and Ferre, Matthieu and Haquart, Alexandre and Rufray, Vincent and Disca, Thierry and Julien, Jean-Fran{\c{c}}ois}
+            }
+        </citation>
+        <citation type="bibtex">
+            @inproceedings{kerbiriou2010long,
+            title={Long term trends monitoring of bats, from biodiversity indicator production to species specialization assessment},
+            author={Kerbiriou, C and Bas, Y and Dufr{\^e}ne, L and Robert, A and Julien, JF},
+            booktitle={24th Annual Meeting of the Society for Conservation Biology, Edmonton, Canada},
+            year={2010}
+            }
+        </citation>
+        <citation type="doi">10.5334/jors.154</citation>  
+</citations>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IdValid.R	Mon Aug 06 09:13:29 2018 -0400
@@ -0,0 +1,180 @@
+library(data.table)
+
+ValidHier=function(x,y) #used to write validator id over observer id
+{
+  if(y==""){x}else{y}
+}
+
+f2p <- function(x) #get date-time data from recording file names
+{
+  if (is.data.frame((x)[1])) {pretemps <- vector(length = nrow(x))}
+  op <- options(digits.secs = 3)
+  pretemps <- paste(substr(x, nchar(x) - 18, nchar(x)-4), ".", substr(x, nchar(x) - 2, nchar(x)), sep = "")
+  strptime(pretemps, "%Y%m%d_%H%M%OS",tz="UTC")-7200
+}
+
+args <- commandArgs(trailingOnly = TRUE)
+
+
+#print(args)
+
+
+#for test
+#inputest=list.files("C:/Users/Yves Bas/Documents/GitHub/65MO_Galaxy-E/raw_scripts/Vigie-Chiro/output_IdCorrect_2ndLayer_input_IdValid/",full.names=T)
+#for (i in 1:length(inputest))
+#{
+#args=c(inputest[i],"Referentiel_seuils_C2.csv")
+#args=c("5857d56d9ebce1000ed89ea7-DataCorrC2.csv","Referentiel_seuils_C2.csv")
+
+
+
+IdCorrect=fread(args[1])
+RefSeuil=fread(args[2])
+#IdV=as.data.frame(subset(IdCorrect,select=observateur_taxon:validateur_probabilite))
+
+#Step 0 :compute id score from 2nd Layer
+test=match("participation",names(IdCorrect))
+IdCorrect$IdScore=apply(as.data.frame(IdCorrect)[,(test+1):(ncol(IdCorrect)-1)],MARGIN=1,FUN=max)
+#compute true success probabilities according to logistic regression issued from "Referentiel_seuils"
+CorrSp=match(IdCorrect$ProbEsp_C2bs,RefSeuil$Espece)
+PSp=RefSeuil$Pente[CorrSp]
+ISp=RefSeuil$Int[CorrSp]
+
+suppressWarnings(IdCorrect$IdProb<-mapply(FUN=function(w,x,y) if((!is.na(y))&(y>0)&(y<1000)) {(exp(y*w+x)/(1+exp(y*w+x)))}else{w} ,IdCorrect$IdScore,ISp,PSp))
+
+
+
+
+#Step 1 :compute id with confidence regarding a hierarchy (validator > observer)
+IdCorrect$IdV=mapply(ValidHier,IdCorrect$observateur_taxon,IdCorrect$validateur_taxon)
+IdCorrect$ConfV=mapply(ValidHier,IdCorrect$observateur_probabilite
+                       ,IdCorrect$validateur_probabilite)
+
+
+#print(paste(args[1],length(subset(IdCorrect$ConfV,IdCorrect$ConfV!=""))))
+
+#Step 2: Get numerictime data
+suppressWarnings(IdCorrect$Session<-NULL)
+suppressWarnings(IdCorrect$TimeNum<-NULL)
+
+if (substr(IdCorrect$`nom du fichier`[1],2,2)=="i") #for car/walk transects
+{
+  FileInfo=as.data.table(tstrsplit(IdCorrect$`nom du fichier`,"-"))
+  IdCorrect$Session=as.numeric(substr(FileInfo$V4,5,nchar(FileInfo$V4)))
+  TimeSec=as.data.table(tstrsplit(FileInfo$V5,"_"))
+  TimeSec=as.data.frame(TimeSec)
+  if(sum(TimeSec[,(ncol(TimeSec)-1)]!="00000")==0) #to deal with double Kaleidoscope treatments
+  {
+    print("NOMS DE FICHIERS NON CONFORMES")
+    print("Vous les avez probablement traiter 2 fois par Kaleidoscope")
+    stop("Merci de nous signaler cette erreur par mail pour correction")
+      }else{
+        IdCorrect$TimeNum=(IdCorrect$Session*800
+        +as.numeric(TimeSec[,(ncol(TimeSec)-1)])
+        +as.numeric(TimeSec[,(ncol(TimeSec))])/1000)
+  }
+  
+}else{
+  if(substr(IdCorrect$`nom du fichier`[1],2,2)=="a") #for stationary recordings
+  {
+    DateRec=as.POSIXlt(f2p(IdCorrect$`nom du fichier`))
+    Nuit=format(as.Date(DateRec-43200*(DateRec$hour<12)),format="%d/%m/%Y")
+    #Nuit[is.na(Nuit)]=0
+    IdCorrect$Session=Nuit
+    IdCorrect$TimeNum=as.numeric(DateRec)
+    
+    }else{
+      print("NOMS DE FICHIERS NON CONFORMES")
+       stop("Ils doivent commencer par Cir (routier/pedestre) ou par Car (points fixes")
+    }
+}
+
+
+
+
+#Step 3 :treat sequentially each species identified by Tadarida-C
+IdExtrap=vector() #to store the id extrapolated from validations
+IdC2=IdCorrect[0,] #to store data in the right order
+TypeE=vector() #to store the type of extrapolation made
+for (j in 1:nlevels(as.factor(IdCorrect$ProbEsp_C2bs)))
+{
+  IdSp=subset(IdCorrect
+              ,IdCorrect$ProbEsp_C2bs==levels(as.factor(IdCorrect$ProbEsp_C2bs))[j])
+  if(sum(IdSp$IdV=="")==(nrow(IdSp))) #case 1 : no validation no change
+  {
+    IdC2=rbind(IdC2,IdSp)
+    IdExtrap=c(IdExtrap,rep(IdSp$ProbEsp_C2bs[1],nrow(IdSp)))
+    TypeE=c(TypeE,rep(0,nrow(IdSp)))
+  }else{ #case 2: some validation
+    Vtemp=subset(IdSp,IdSp$IdV!="")
+      #case2A: validations are homogeneous
+    if(nlevels(as.factor(Vtemp$IdV))==1)
+    {
+      IdC2=rbind(IdC2,IdSp)
+      IdExtrap=c(IdExtrap,rep(Vtemp$IdV[1],nrow(IdSp)))
+      TypeE=c(TypeE,rep(2,nrow(IdSp)))
+    }else{
+      #case 2B: validations are heterogeneous
+      #case 2B1: some validations confirms the species identified by Tadarida and highest confidence are confirmed
+      subVT=subset(Vtemp,Vtemp$IdV==levels(as.factor(IdCorrect$ProbEsp_C2bs))[j])
+      subVF=subset(Vtemp,Vtemp$IdV!=levels(as.factor(IdCorrect$ProbEsp_C2bs))[j])
+      if((nrow(subVT)>0)&(max(subVT$IdProb)>max(subVF$IdProb)))
+      {
+        Vtemp=Vtemp[order(Vtemp$IdProb),]
+        test=(Vtemp$IdV!=Vtemp$ProbEsp_C2bs)
+        Fr1=max(which(test == TRUE)) #find the error with highest indices
+        Thr1=mean(Vtemp$IdProb[(Fr1):(Fr1+1)]) #define first threshold as the median confidence between the first error and the confirmed ID right over it
+        #id over this threshold are considered right
+        IdHC=subset(IdSp,IdSp$IdProb>Thr1)
+        IdC2=rbind(IdC2,IdHC)
+        IdExtrap=c(IdExtrap,rep(Vtemp$IdV[nrow(Vtemp)],nrow(IdHC)))
+        TypeE=c(TypeE,rep(2,nrow(IdHC)))
+        #id under this threshold are attributed to validated id closest in time
+        Vtemp=Vtemp[order(Vtemp$TimeNum),]
+        cuts <- c(-Inf, Vtemp$TimeNum[-1]-diff(Vtemp$TimeNum)/2, Inf)
+        CorrV=findInterval(IdSp$TimeNum, cuts)
+        IdE=Vtemp$IdV[CorrV]
+        IdEL=subset(IdE,IdSp$IdProb<=Thr1)
+        IdLC=subset(IdSp,IdSp$IdProb<=Thr1)
+        IdExtrap=c(IdExtrap,IdEL)
+        TypeE=c(TypeE,rep(1,length(IdEL)))
+        IdC2=rbind(IdC2,IdLC)
+        
+            
+        }else{
+          #case 2B2: all validations concerns errors
+          #id are extrapolated on time only
+          Vtemp=Vtemp[order(Vtemp$TimeNum),]
+          cuts <- c(-Inf, Vtemp$TimeNum[-1]-diff(Vtemp$TimeNum)/2, Inf)
+          CorrV=findInterval(IdSp$TimeNum, cuts)
+          IdE=Vtemp$IdV[CorrV]
+          IdExtrap=c(IdExtrap,IdE)
+          TypeE=c(TypeE,rep(1,length(IdE)))
+          IdC2=rbind(IdC2,IdSp)
+          }
+      }
+    
+    
+  }
+  
+  
+}
+test1=(nrow(IdC2)==length(IdExtrap))
+test2=(nrow(IdC2)==nrow(IdCorrect))
+if((test1==F)|(test2==F))
+{
+  (stop("Erreur de traitement !!!"))
+}
+
+IdC2$IdExtrap=IdExtrap
+IdC2$TypeE=TypeE
+
+
+IdC2=IdC2[order(IdC2$IdProb,decreasing=T),]
+IdC2=IdC2[order(IdC2$ConfV,decreasing=T),]
+IdC2=IdC2[order(IdC2$`nom du fichier`),]
+#discard duplicated species within the same files (= false positives corrected by 2nd layer)
+IdC2=unique(IdC2,by=c("nom du fichier","IdExtrap"))
+
+write.table(IdC2,"output.tabular",row.names=F,sep="\t")
+#write.table(IdC2,paste0(substr(args[1],1,nchar(args[1])-15),"-IdC2.csv"),row.names=F,sep="\t")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IdValiden.xml	Mon Aug 06 09:13:29 2018 -0400
@@ -0,0 +1,71 @@
+<tool id="IdValid" name="Tadarida identifications integration" version="0.1">
+    <description>Integrate identifications from animal detection on acoustic recordings</description>
+    <requirements>
+        <requirement type="package" version="1.10.4">r-data.table</requirement>
+    </requirements>
+    <command detect_errors="exit_code"><![CDATA[
+        Rscript 
+         '$__tool_directory__/IdValid.R' '$inputfile'  '$__tool_directory__/Referentiel_seuils_C2.csv'  '$output'
+]]>
+    </command>
+    <inputs>
+        <param name="inputfile" type="data" format="tabular" label="IdCorrect 2nd layer output"/>
+    </inputs>
+    <outputs>
+        <data name="output" format="tabular" from_work_dir="output.tabular" label="${tool.name} on ${on_string}"/>
+    </outputs>
+
+    <tests>
+        <test>
+            <param name="inputfile" value="IdCor2Layer_Test1_out.tabular"/>
+            <output name="output" file="BilanEnrichiPF_Test1.tabular"/>
+        </test>
+    </tests>
+
+
+    <help><![CDATA[
+
+.. class:: infomark 
+
+=====================================
+Tadarida identifications integration
+=====================================
+
+**What it does**
+
+This tool allows to integrate identifications made by observers and validators and will provide an input for synthesis of participations. 
+
+
+**Arguments**
+
+- The input is a tabular file, output from the tool IdCorrect_2ndLayer.
+- The output is a single tabular file with validated Ids
+
+  ]]></help>
+    <citations>
+        <citation type="bibtex">
+            @article{kerbiriou2015vigie,
+            title={Vigie-Chiro: 9 ans de suivi des tendances des esp{\`e}ces communes},
+            author={Kerbiriou, C and Julien, JF and Bas, Y and Marmet, J and Le Viol, I and Lorrilliere, R and Azam, C and Gasc, A and Lois, G},
+            journal={Symbioses, nouvelle s{\'e}rie},
+            number={34},
+            year={2015}
+            }
+        </citation>
+        <citation type="bibtex">
+            @inproceedings{bas2013automatic,
+            title={Automatic echolocation calls identification in Europe vs. Neotropics: more species does not mean more difficult},
+            author={Bas, Yves and Escallon, Antoine and Ferre, Matthieu and Haquart, Alexandre and Rufray, Vincent and Disca, Thierry and Julien, Jean-Fran{\c{c}}ois}
+            }
+        </citation>
+        <citation type="bibtex">
+            @inproceedings{kerbiriou2010long,
+            title={Long term trends monitoring of bats, from biodiversity indicator production to species specialization assessment},
+            author={Kerbiriou, C and Bas, Y and Dufr{\^e}ne, L and Robert, A and Julien, JF},
+            booktitle={24th Annual Meeting of the Society for Conservation Biology, Edmonton, Canada},
+            year={2010}
+            }
+        </citation>
+        <citation type="doi">10.5334/jors.154</citation>  
+    </citations>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Referentiel_seuils_C2.csv	Mon Aug 06 09:13:29 2018 -0400
@@ -0,0 +1,77 @@
+Espece;Int;Pente;Seuil50;Seuil90;FN50;FN90;FP50;FP90;Int;Pente;Seuil50;Seuil90;FN50;FN90;FP50;FP90;Perftot;PerfP2;ratio;;PerfPFtot;Espece;FN50;FN90;FP50;FP90;Int;Pente;Seuil50;Seuil90
+chirp;-9.796506402;46.92990813;0.209;0.256;0.08;0.12;0.041666667;0;-9.56313307;44.09513566;0.217;0.267;0.08;0.08;0;0;0.060416667;0.04;0.662068966;0.662068966;0.060416667;chirp;0.08;0.12;0.041666667;0;-9.621801388;46.06782011;0.209;0.257
+Rhifer;-5.993856471;15.08754459;0.398;0.543;0.298076923;0.298076923;0.058064516;0.058064516;-5.889843127;16.57369156;0.356;0.488;0.281553398;0.296116505;0.051282051;0.052287582;0.17807072;0.170309884;0.956417115;0.99245238;0.171605094;Rhifer;0.291262136;0.291262136;0.051948052;0.051948052;-5.851562087;15.04050575;0.39;0.536
+Rhihip;-5.969614204;11.40700358;0.524;0.716;0.225;0.35;0.099585062;0.056994819;-5.819466659;11.41414973;0.51;0.703;0.221428571;0.321428571;0.084033613;0.054726368;0.18289497;0.170404281;0.931705672;0.933067009;0.182628128;Rhihip;0.225;0.353571429;0.099585062;0.052356021;-5.790678559;11.13511299;0.521;0.718
+Barbar;-5.673386605;11.75110344;0.483;0.67;0.291366906;0.356115108;0.08372093;0.057894737;-5.564489618;11.74868047;0.474;0.661;0.321285141;0.389558233;0.10106383;0.067484663;0.19727442;0.219847966;1.114427132;1.033526108;0.212716413;Barbar;0.309236948;0.385542169;0.094736842;0.061349693;-5.561291853;11.24861482;0.495;0.69
+Rusnit;-5.761885307;27.00734744;0.214;0.295;0.369491525;0.379661017;0.046153846;0.021390374;-5.999840427;37.36156155;0.161;0.22;0.397959184;0.413265306;0.070866142;0.025423729;0.204174191;0.22687859;1.111201123;1.001041207;0.226642608;Rusnit;0.408163265;0.408163265;0.056910569;0.033333333;-5.880405916;32.26404124;0.183;0.251
+Myonat;-5.634559403;11.86614368;0.475;0.661;0.338645418;0.474103586;0.117021277;0.050359712;-5.528792174;11.69073573;0.473;0.661;0.331950207;0.443983402;0.095505618;0.042857143;0.245032498;0.228574093;0.932831744;0.962409212;0.237501979;Myonat;0.32780083;0.452282158;0.119565217;0.050359712;-5.527766673;11.52009507;0.48;0.671
+Nyclei;-4.935905731;10.51420089;0.47;0.679;0.382882883;0.45045045;0.121794872;0.057915058;-4.867531773;10.39089138;0.469;0.68;0.36097561;0.443902439;0.105802048;0.053941909;0.253260816;0.241155501;0.952202182;1.011251568;0.238472314;Nyclei;0.36097561;0.429268293;0.114864865;0.048780488;-4.875184583;10.49761466;0.465;0.674
+Nycnoc;-5.915598202;13.74409497;0.431;0.591;0.398963731;0.492227979;0.165467626;0.066666667;-6.139379694;17.74192449;0.347;0.47;0.37012987;0.396103896;0.118181818;0.051020408;0.280831501;0.233858998;0.832737772;0.959975533;0.243609332;Nycnoc;0.344155844;0.435064935;0.151260504;0.043956044;-6.179570269;14.61424023;0.423;0.574
+Lamsp.;-7.244082473;21.93899668;0.331;0.431;0.351851852;0.518518519;0.125;0.103448276;-6.954350212;18.69608095;0.372;0.49;0.377358491;0.528301887;0.153846154;0.137931034;0.274704662;0.299359391;1.089749951;1.159077941;0.258273737;Lamsp.;0.339622642;0.471698113;0.125;0.096774194;-7.11431275;21.74802941;0.328;0.429
+Leppun;-4.219470191;9.460363122;0.447;0.679;0.35551142;0.550148957;0.120596206;0.111764706;-4.315732499;9.578325998;0.451;0.68;0.295641932;0.551236749;0.123167155;0.120092379;0.284505322;0.272534554;0.957924272;1.017906068;0.267740376;Leppun;0.293286219;0.542991755;0.126637555;0.108045977;-4.368656949;9.338141008;0.468;0.704
+Pippip;-3.700038171;8.471925149;0.437;0.697;0.318051576;0.58739255;0.14017341;0.119804401;-3.791687392;8.188349216;0.464;0.732;0.288392213;0.583273252;0.143972246;0.120243531;0.291355484;0.283970311;0.974652361;1.004162485;0.282793188;Pippip;0.281903389;0.584715213;0.147989735;0.116564417;-3.82796986;8.341092474;0.459;0.723
+Pleaus;-5.939604546;11.86576121;0.501;0.686;0.351694915;0.555084746;0.172972973;0.110169492;-5.900088719;11.82314875;0.5;0.685;0.308035714;0.571428571;0.171122995;0.127272727;0.297480531;0.294465002;0.989863103;1.016773712;0.289607214;Pleaus;0.330357143;0.540178571;0.175824176;0.112068966;-5.885720467;11.67405029;0.505;0.693
+Cympud;-7.467398698;62.2463892;0.12;0.156;0.461538462;0.512820513;0.16;0.05;-7.06821093;46.59940666;0.152;0.199;0.512820513;0.538461538;0.136363636;0.052631579;0.296089744;0.310069317;1.047213973;1.047213973;0.296089744;Cympud;0.461538462;0.512820513;0.16;0.05;-7.293299422;60.78611347;0.12;0.157
+Tetvir;-3.839332428;10.95821523;0.351;0.551;0.448083624;0.601393728;0.136314068;0.110419907;-3.939088148;11.46248808;0.344;0.536;0.421343146;0.578656854;0.126388889;0.101960784;0.324052832;0.307087418;0.94764615;0.985117137;0.311726806;Tetvir;0.421343146;0.585096596;0.130013831;0.110453649;-3.952681976;11.40274117;0.347;0.54
+Pipkuh;-3.935647122;10.11542846;0.39;0.607;0.447322971;0.57253886;0.131614654;0.1;-3.873786517;9.941049967;0.39;0.611;0.450148075;0.570582428;0.128325509;0.101239669;0.312869121;0.31257392;0.999056472;0.999179586;0.312830571;Pipkuh;0.446199408;0.573543929;0.131578947;0.1;-3.866704605;9.764599849;0.396;0.622
+Minsch;-5.502466359;10.69059862;0.515;0.721;0.439393939;0.579545455;0.2;0.082644628;-5.35750292;9.923424881;0.54;0.762;0.421455939;0.586206897;0.196808511;0.092436975;0.325396006;0.32422708;0.996407684;1.020864571;0.317600482;Minsch;0.429118774;0.559386973;0.194594595;0.087301587;-5.350126413;10.65721406;0.503;0.709
+Pippyg;-4.993728468;8.884931398;0.563;0.81;0.37398374;0.601626016;0.176470588;0.147826087;-4.908838834;8.6498083;0.568;0.822;0.347921225;0.636761488;0.174515235;0.165829146;0.324976608;0.331256774;1.019324978;1.031798922;0.3210478;Pippyg;0.33916849;0.623632385;0.177111717;0.144278607;-4.993509006;8.658151865;0.577;0.831
+Yerray;-5.768708319;15.7866469;0.366;0.505;0.524096386;0.626506024;0.177083333;0.114285714;-5.664644872;17.85467018;0.318;0.441;0.49382716;0.574074074;0.136842105;0.103896104;0.360492864;0.327159861;0.907534915;1.008188606;0.324502637;Yerray;0.487654321;0.580246914;0.161616162;0.068493151;-5.703609328;17.53037583;0.326;0.451
+Hypsav;-5.183551814;10.23704603;0.507;0.721;0.478405316;0.641196013;0.190721649;0.084745763;-5.036273386;10.25479797;0.492;0.706;0.462068966;0.624137931;0.191709845;0.084033613;0.348767185;0.340487589;0.976260391;1.003410792;0.339330204;Hypsav;0.45862069;0.634482759;0.178010471;0.086206897;-5.03785292;9.966892785;0.506;0.726
+Phanan;-4.907304692;12.9540152;0.379;0.549;0.551246537;0.609418283;0.160621762;0.113207547;-4.90266083;13.66282189;0.359;0.52;0.538461538;0.583333333;0.157894737;0.103448276;0.358623532;0.345784471;0.964199056;1.010557338;0.342172045;Phanan;0.528846154;0.573717949;0.164772727;0.101351351;-4.937673415;13.47858367;0.367;0.53
+Eptser;-4.637318472;9.757768523;0.476;0.701;0.409618574;0.645107794;0.208888889;0.097046414;-4.668976424;9.636573944;0.485;0.713;0.389344262;0.696721311;0.219895288;0.09202454;0.340165418;0.34949635;1.027430574;1.014447619;0.344518873;Eptser;0.403688525;0.668032787;0.211382114;0.094972067;-4.661646285;9.610032858;0.486;0.714
+piaf;-5.338582211;11.89500325;0.449;0.634;0.548523207;0.632911392;0.207407407;0.103092784;-5.221324425;12.27010585;0.426;0.605;0.527659574;0.617021277;0.183823529;0.134615385;0.372983698;0.365779941;0.980686136;1.010447805;0.361997858;piaf;0.531914894;0.604255319;0.172932331;0.138888889;-5.203402394;12.81563043;0.407;0.578
+Myobec;-6.727529403;52.83445897;0.128;0.169;0.731707317;0.731707317;0;0;-6.567545871;40.3518877;0.163;0.218;0.731707317;0.780487805;0.153846154;0;0.365853659;0.416510319;1.138461538;1.138461538;0.365853659;Myobec;0.731707317;0.731707317;0;0;-6.549456703;50.64935199;0.13;0.173
+Roeroe;-6.395548233;20.24459737;0.316;0.425;0.509433962;0.688679245;0.235294118;0.23255814;-6.949466798;30.28709394;0.23;0.302;0.583333333;0.766666667;0.242424242;0.125;0.416491366;0.429356061;1.030888262;1.105314481;0.38844697;Roeroe;0.566666667;0.65;0.212121212;0.125;-6.805784278;29.20411398;0.234;0.309
+Testes;-5.044777274;14.11676742;0.358;0.514;0.59223301;0.702265372;0.202531646;0.171171171;-5.180729882;16.00004712;0.324;0.462;0.545081967;0.676229508;0.177777778;0.168421053;0.4170503;0.391877576;0.939641038;0.99471782;0.393958536;Testes;0.56557377;0.655737705;0.203007519;0.151515152;-5.141041553;15.20004489;0.339;0.483
+Micagr;-7.30742752;38.18366444;0.192;0.249;0.567567568;0.648648649;0.2;0.133333333;-6.899576188;28.07090552;0.246;0.325;0.648648649;0.648648649;0.235294118;0.133333333;0.387387387;0.416481187;1.075102599;1.049305715;0.396911197;Micagr;0.567567568;0.648648649;0.238095238;0.133333333;-7.13431494;37.95591797;0.188;0.246
+Myoema;-5.341274303;12.47278151;0.429;0.605;0.526923077;0.719230769;0.245398773;0.098765432;-5.174513053;12.13193446;0.427;0.608;0.523076923;0.734615385;0.253012048;0.148148148;0.397579513;0.414713126;1.043094809;1.043094809;0.397579513;Myoema;0.526923077;0.719230769;0.245398773;0.098765432;-5.168960507;12.10225971;0.428;0.609
+Myodau;-4.917720513;15.43303043;0.319;0.462;0.595061728;0.659259259;0.226415094;0.103896104;-4.875952289;16.95513701;0.288;0.418;0.613941019;0.672922252;0.217391304;0.14084507;0.396158046;0.411274911;1.038158672;1.032239382;0.398429782;Myodau;0.605898123;0.664879357;0.222222222;0.100719424;-4.801623032;15.06157712;0.319;0.465
+Tadten;-5.544484677;17.16108333;0.324;0.452;0.605263158;0.642105263;0.257425743;0.15;-5.350025507;17.95305461;0.299;0.421;0.597883598;0.645502646;0.224489796;0.12987013;0.413698541;0.399436542;0.965525625;0.977931236;0.408450541;Tadten;0.597883598;0.634920635;0.232323232;0.168674699;-5.421962976;18.26248643;0.297;0.418
+Plaint;-5.547518332;17.38455457;0.32;0.446;0.570048309;0.739130435;0.293650794;0.068965517;-5.500372689;17.01768723;0.324;0.453;0.558375635;0.670050761;0.25;0.057971014;0.417948764;0.384099353;0.91901062;0.930534522;0.412772813;Plaint;0.553299492;0.736040609;0.290322581;0.071428571;-5.457312497;17.22904135;0.317;0.445
+Pipnat;-5.131325747;8.792229272;0.584;0.834;0.467787115;0.882352941;0.309090909;0.066666667;-5.166919202;8.992278526;0.575;0.819;0.425867508;0.858044164;0.274900398;0.134615385;0.431474408;0.423356864;0.981186499;1.010412073;0.418994265;Pipnat;0.425867508;0.883280757;0.291828794;0.075;-5.175554764;8.78127701;0.59;0.84
+noise;-3.256587804;10.62476011;0.307;0.514;0.493617021;0.839458414;0.262119504;0.246823956;-3.664800846;13.29531804;0.276;0.441;0.515489467;0.78314746;0.247353224;0.152542373;0.460504724;0.424633131;0.922103746;0.980282532;0.43317423;noise;0.519826518;0.799256506;0.264007597;0.149606299;-3.632179643;14.71461173;0.247;0.397
+Plasab;-6.83258536;44.73730748;0.153;0.202;0.769230769;0.974358974;0.357142857;0.8;-7.062938471;60.87514223;0.117;0.153;0.939393939;1;0.666666667;1;0.72518315;0.901515152;1.243155127;2.07860262;0.433712121;Plasab;0.727272727;0.757575758;0.25;0;-7.049037058;63.43853864;0.112;0.146
+Myomys;-5.507763046;17.82145051;0.31;0.433;0.606498195;0.736462094;0.273333333;0.197802198;-5.432337684;17.72688044;0.307;0.431;0.56133829;0.732342007;0.248407643;0.191011236;0.453523955;0.433274794;0.955351508;0.966865126;0.448123303;Myomys;0.594795539;0.73605948;0.268456376;0.193181818;-5.393767643;17.38505824;0.311;0.437
+Confus;-6.169639483;18.42093366;0.335;0.455;0.676767677;0.848484848;0.36;0.347826087;-6.952751002;47.33694267;0.147;0.194;0.630434783;0.891304348;0.291666667;0.375;0.558269653;0.547101449;0.979994965;1.172490294;0.466614907;Confus;0.630434783;0.760869565;0.260869565;0.214285714;-6.876458914;31.60435878;0.218;0.288
+Ptepon;-7.332424548;64.49138524;0.114;0.148;0.609756098;0.829268293;0.333333333;0.125;-7.082820808;47.05481086;0.151;0.198;0.609756098;0.756097561;0.304347826;0.090909091;0.474339431;0.440277644;0.928191112;0.928191112;0.474339431;Ptepon;0.609756098;0.829268293;0.333333333;0.125;-7.172669627;62.90935519;0.115;0.149
+Phogri;-4.456753937;12.95786701;0.344;0.514;0.701818182;0.887272727;0.305084746;0.261904762;-4.585179837;13.18820322;0.348;0.515;0.620283019;0.849056604;0.268181818;0.272727273;0.539020104;0.502562178;0.932362586;1.004408708;0.500356254;Phogri;0.627358491;0.870283019;0.300884956;0.202898551;-4.630113081;12.87022437;0.36;0.531
+Mussp;-6.750199027;19.24574917;0.351;0.465;0.660714286;0.839285714;0.344827586;0.181818182;-6.582703206;18.68706535;0.353;0.47;0.654545455;0.854545455;0.296296296;0.2;0.506661442;0.501346801;0.989510469;0.993969109;0.504388715;Mussp;0.654545455;0.836363636;0.344827586;0.181818182;-6.596767575;18.89450545;0.35;0.466
+Plaalb;-5.649746181;22.57201572;0.251;0.348;0.652920962;0.828178694;0.391566265;0.253731343;-5.514207527;22.73820373;0.243;0.34;0.692;0.828;0.3984375;0.25862069;0.531599316;0.544264547;1.02382477;1.066594672;0.510282455;Plaalb;0.628;0.812;0.371621622;0.229508197;-5.685222309;23.69551957;0.24;0.333
+Tyllil;-6.829023273;60.99570472;0.112;0.148;0.85;0.875;0.333333333;0;-6.706935787;61.38977365;0.11;0.146;0.85;0.85;0.142857143;0;0.514583333;0.460714286;0.895315211;0.895315211;0.514583333;Tyllil;0.85;0.875;0.333333333;0;-6.659825718;58.57251427;0.114;0.152
+Myoalc;-6.759437431;27.82530968;0.243;0.322;0.728571429;0.771428571;0.269230769;0.304347826;-6.718265713;26.44853222;0.255;0.338;0.720588235;0.75;0.387096774;0.19047619;0.518394649;0.5120403;0.987742256;0.994797389;0.514718178;Myoalc;0.720588235;0.764705882;0.269230769;0.304347826;-6.667536504;27.34986783;0.244;0.325
+Epheph;-5.60465571;21.54293117;0.261;0.363;0.720930233;0.813953488;0.376623377;0.238095238;-5.587189463;21.99282213;0.255;0.354;0.691275168;0.812080537;0.333333333;0.151515152;0.537400584;0.497051047;0.924917208;0.940313072;0.528601656;Epheph;0.704697987;0.798657718;0.38028169;0.230769231;-5.597321386;20.80170383;0.27;0.375
+Rhieur;-6.750800216;25.67017725;0.263;0.349;0.693548387;0.903225806;0.321428571;0.333333333;-6.609080848;23.93395239;0.277;0.368;0.580645161;0.806451613;0.277777778;0.2;0.562884025;0.466218638;0.828267667;0.837617387;0.556600956;Rhieur;0.693548387;0.903225806;0.296296296;0.333333333;-6.580831133;25.27691842;0.261;0.348
+Plaaff;-6.296266962;29.87082452;0.211;0.285;0.806818182;0.897727273;0.484848485;0.307692308;-6.531023615;30.95852806;0.211;0.282;0.796875;0.828125;0.434782609;0.153846154;0.624271562;0.553407191;0.886484704;0.989726233;0.559151786;Plaaff;0.734375;0.859375;0.392857143;0.25;-6.641111541;31.74061749;0.21;0.279
+MyoGT;-6.013132083;13.20420935;0.456;0.622;0.684684685;0.918918919;0.416666667;0.307692308;-5.912227382;13.0765132;0.453;0.621;0.682692308;0.884615385;0.365384615;0.294117647;0.581990644;0.556702489;0.956548862;0.980722839;0.567645074;MyoGT;0.663461538;0.913461538;0.385964912;0.307692308;-5.9330197;13.09016436;0.454;0.622
+Isopyr;-6.361463821;30.07422199;0.212;0.285;0.711711712;0.846846847;0.466666667;0.37037037;-6.19941515;31.5831722;0.197;0.266;0.636363636;0.848484848;0.379310345;0.318181818;0.598898899;0.545585162;0.910980406;0.918905907;0.593733436;Isopyr;0.676767677;0.858585859;0.448275862;0.391304348;-6.310680986;30.80716235;0.205;0.277
+Cyrscu;-6.763537187;55.63798439;0.122;0.162;0.835820896;0.910447761;0.45;0.142857143;-6.635833896;51.68529985;0.129;0.171;0.776119403;0.895522388;0.347826087;0.222222222;0.58478145;0.560422525;0.95834525;0.942783674;0.594433846;Cyrscu;0.850746269;0.910447761;0.473684211;0.142857143;-6.596618154;54.05258862;0.123;0.163
+Urorug;-6.177135085;33.51952723;0.185;0.25;0.73553719;0.842975207;0.396226415;0.366666667;-5.954931596;31.31543234;0.191;0.261;0.765217391;0.860869565;0.413043478;0.384615385;0.58535137;0.605936455;1.035167057;1.009464897;0.600255102;Urorug;0.747826087;0.852173913;0.408163265;0.392857143;-6.093067199;33.74516056;0.181;0.246
+Plemac;-6.927928622;34.32308744;0.202;0.266;0.828571429;0.914285714;0.454545455;0.25;-6.757381994;34.8871726;0.194;0.257;0.8;0.942857143;0.222222222;0.5;0.611850649;0.616269841;1.007222664;1.007222664;0.611850649;Plemac;0.828571429;0.914285714;0.454545455;0.25;-6.730987907;33.76365591;0.2;0.265
+Aposp;-6.427214849;17.75173966;0.363;0.486;0.731343284;0.910447761;0.419354839;0.4;-6.347590193;17.42238048;0.365;0.491;0.712121212;0.924242424;0.457142857;0.375;0.615286471;0.617126623;1.002990725;0.984131778;0.627077224;Aposp;0.712121212;0.909090909;0.387096774;0.5;-6.254850911;17.50488803;0.358;0.483
+Eupsp;-6.449263369;44.83019059;0.144;0.193;0.975609756;0.975609756;0;0;-6.390159464;46.90293532;0.137;0.184;0.975609756;1;0.666666667;NaN;0.487804878;0.880758808;1.805555556;1.33744856;0.658536585;Eupsp;0.975609756;1;0;NaN;-6.269735303;42.02284175;0.15;0.202
+Myocap;-5.595441093;26.84231882;0.209;0.291;0.860927152;0.947019868;0.603773585;0.333333333;-5.509789821;26.97579739;0.205;0.286;0.847682119;0.940397351;0.566037736;0.25;0.686263485;0.651029302;0.948657937;0.970075533;0.671111969;Myocap;0.860927152;0.947019868;0.603773585;0.272727273;-5.426781253;25.87586342;0.21;0.295
+Nyclas;-6.991660694;45.47414128;0.154;0.203;0.821428571;1;0.375;1;-7.19386406;63.34689222;0.114;0.149;0.769230769;0.961538462;0.4;0.666666667;0.799107143;0.699358974;0.875175476;0.904322084;0.773351648;Nyclas;0.807692308;1;0.285714286;1;-6.936656805;47.35606046;0.147;0.193
+Pleaur;-5.970916717;18.61510204;0.321;0.439;0.79245283;0.943396226;0.435897436;0.4;-6.005379095;19.61763268;0.307;0.419;0.797752809;0.988764045;0.454545455;0.666666667;0.642936623;0.726932244;1.130643702;0.934595917;0.777803787;Pleaur;0.853932584;0.988764045;0.518518519;0.75;-5.940304196;19.21162101;0.31;0.424
+Decalb;-6.26328128;41.46237641;0.152;0.205;0.918918919;0.972972973;0.666666667;0.666666667;-6.146747664;47.78079953;0.129;0.175;0.904109589;1;0.5;1;0.806306306;0.851027397;1.055464146;1.078247035;0.789269406;Decalb;0.917808219;0.97260274;0.666666667;0.6;-6.108989447;40.27878201;0.152;0.207
+Eptnil;-7.09881739;39.42396532;0.181;0.236;0.96;1;0.666666667;NaN;-6.900807963;40.69349629;0.17;0.224;1;1;1;NaN;0.875555556;1;1.14213198;1.14213198;0.875555556;Eptnil;0.96;1;0.666666667;NaN;-6.923361423;38.13078002;0.182;0.24
+Inssp7;-7.15594089;89.73266508;0.08;0.105;0.958333333;1;0.75;1;-6.810368524;64.66269367;0.106;0.14;1;1;1;1;0.927083333;1;1.078651685;1.107692308;0.902777778;Inssp7;0.958333333;1;0.75;NaN;-6.988297976;86.69935725;0.081;0.106
+Phofem;-6.284700415;37.71118876;0.167;0.225;0.987804878;1;0.875;1;-6.057110807;32.87618686;0.185;0.252;1;1;1;1;0.96570122;1;1.035516969;1.063400576;0.940379404;Phofem;0.987804878;1;0.833333333;NaN;-6.117618555;36.21632879;0.169;0.23
+amph;-6.613007553;29.60649332;0.224;0.298;1;1;NaN;NaN;-6.453524869;25.19228889;0.257;0.344;1;1;NaN;NaN;1;1;1;1;1;amph;1;1;NaN;NaN;-6.428283677;29.23542026;0.22;0.296
+Antius;-7.209034432;44.45763374;0.163;0.212;1;1;NaN;NaN;-7.093154616;62.64559091;0.114;0.149;1;1;NaN;NaN;1;1;1;1;1;Antius;1;1;NaN;NaN;-7.030447669;42.62283057;0.165;0.217
+Antped;-7.383650573;54.11490894;0.137;0.178;1;1;NaN;NaN;-7.366972966;95.90806245;0.077;0.1;1;1;NaN;NaN;1;1;1;1;1;Antped;1;1;NaN;NaN;-7.338949392;77.28965393;0.095;0.124
+Barfis;-7.280210474;79.98729907;0.092;0.119;1;1;NaN;NaN;-7.119002646;79.79382786;0.09;0.117;1;1;NaN;NaN;1;1;1;1;1;Barfis;1;1;NaN;NaN;-7.164452894;77.53293265;0.093;0.121
+Barser;-6.900683371;57.16826361;0.121;0.16;1;1;NaN;NaN;-6.747200288;67.29234702;0.101;0.133;1;1;NaN;NaN;1;1;1;1;1;Barser;1;1;NaN;NaN;-6.720980361;53.61251354;0.126;0.167
+Bicbic;-7.003205608;-42.11519506;Inf;Inf;1;1;NaN;NaN;-6.840974246;-3251.15631;Inf;Inf;1;1;NaN;NaN;1;1;1;1;1;Bicbic;1;1;NaN;NaN;-6.88877136;-34.19678581;Inf;Inf
+Concon;-7.03108139;9.716391437;0.724;0.95;1;1;NaN;NaN;-6.896771627;28.02818149;0.247;0.325;1;1;NaN;NaN;1;1;1;1;1;Concon;1;1;NaN;NaN;-6.837427338;0.725449539;Inf;Inf
+Corcho;-6.078521756;46.46199314;0.131;0.179;1;1;NaN;NaN;-5.943690586;58.34822938;0.102;0.14;1;1;NaN;NaN;1;1;1;1;1;Corcho;1;1;NaN;NaN;-5.896190668;43.50768289;0.136;0.187
+gril;-7.555488435;57.43438716;0.132;0.17;1;1;NaN;NaN;-7.314404425;53.32962265;0.138;0.179;1;1;NaN;NaN;1;1;1;1;1;gril;1;1;NaN;NaN;-7.374075354;55.22552599;0.134;0.174
+Lyrple;-7.395620042;44.41474239;0.167;0.216;1;1;1;1;-7.224794267;31.41678532;0.23;0.3;1;1;1;1;1;1;1;1;1;Lyrple;1;1;1;1;-7.218299801;43.07791371;0.168;0.219
+Metsau;-7.263224642;32.44449421;0.224;0.292;1;1;NaN;NaN;-7.167714665;52.63620533;0.137;0.178;1;1;NaN;NaN;1;1;1;1;1;Metsau;1;1;NaN;NaN;-7.077134949;26.37920707;0.269;0.352
+Myobra;-7.352433699;50.75933419;0.145;0.189;1;1;NaN;NaN;-7.175938172;49.8921739;0.144;0.188;1;1;NaN;NaN;1;1;1;1;1;Myobra;1;1;NaN;NaN;-7.173365265;48.37787777;0.149;0.194
+Phafal;-7.544411986;62.8376307;0.121;0.156;0.947368421;1;0.8;1;-7.721059773;59.19348597;0.131;0.168;1;1;1;1;0.936842105;1;1.06741573;1;1;Phafal;1;1;1;1;-7.751398334;62.73816799;0.124;0.159
+Ptebon;-7.104430767;-90.42057688;Inf;Inf;1;1;NaN;NaN;-6.864251121;-3122.119677;Inf;Inf;1;1;NaN;NaN;1;1;1;1;1;Ptebon;1;1;NaN;NaN;-6.909678589;-107.7304759;Inf;Inf
+Pteger;-6.806622284;87.05551581;0.079;0.104;1;1;1;1;-6.626389738;84.39747813;0.079;0.105;1;1;1;1;1;1;1;1;1;Pteger;1;1;1;1;-6.671816986;87.04908905;0.077;0.102
+Sepsep;-6.572236956;44.50635929;0.148;0.198;1;1;NaN;NaN;-6.457679388;46.23209872;0.14;0.188;0.970588235;1;0;NaN;1;0.656862745;0.656862745;0.656862745;1;Sepsep;1;1;NaN;NaN;-6.413986714;41.92249556;0.153;0.206
+Tetcan;-6.224979865;31.00464875;0.201;0.272;1;1;NaN;NaN;-6.073393155;34.28510365;0.178;0.242;1;1;NaN;NaN;1;1;1;1;1;Tetcan;1;1;NaN;NaN;-6.040290768;29.26243379;0.207;0.282
+Ratnor;-7.634127214;58.5655848;0.131;0.168;1;1;1;NaN;;;;;;;;;1;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;;;;;;;;;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SpeciesList.csv	Mon Aug 06 09:13:29 2018 -0400
@@ -0,0 +1,214 @@
+Esp;Nesp;France;Turquie;Espagne;Norfolk;Scientific name;Group;NomFR;GroupFR
+Aegcau;piaf;x;x;x;x;Aegithalos caudatus;bird;Mésange à longue queue;Autre
+Alcatt;piaf;x;x;x;x;Alcedo atthis;bird;Martin-pêcheur d'Europe;Autre
+amph;amph;x;x;x;x;Amphibia sp.;frog;Amphibien sp.;Autre
+Antius;Antius;x;;x;;Antaxius spinibrachius;bush-cricket;Antaxie voyageuse;Sauterelle
+Antped;Antped;x;;;;Antaxius pedestris;bush-cricket;Antaxie marbree;Sauterelle
+Antpet;piaf;x;x;;;Anthus petrosus;bird;Pipit maritime;Autre
+Antsor;Antsor;x;;;;Antaxius sorrezensis;bush-cricket;Antaxie cevenole;Sauterelle
+Apoagr;Aposp;x;;;;Apodemus agrarius;other mammal;Mulot rayé;Autre
+Apofla;Aposp;x;x;x;;Apodemus flavicollis;other mammal;Mulot à collier;Autre
+Aposp;Aposp;x;x;x;x;Apodemus sp.;other mammal;Mulot sp.;Autre
+Aposyl;Aposp;x;x;x;x;Apodemus sylvaticus;other mammal;Mulot sylvestre;Autre
+Apuapu;piaf;x;x;x;x;Apus apus;bird;Martinet noir;Autre
+Barbar;Barbar;x;x;x;x;Barbastella barbastellus;bat;Barbastelle d'Europe;Chauve-souris
+Barfis;Barfis;x;;;;Barbitistes fischeri;bush-cricket;Barbitiste languedocien;Sauterelle
+Barsan;Barsan;x;;x;;Barbitistes 'sanzii';bush-cricket;Barbitiste cryptique;Sauterelle
+Barser;Barser;x;;x;;Barbitistes serricauda;bush-cricket;Barbitiste des bois;Sauterelle
+Bicbic;Bicbic;x;;x;;Bicolorana bicolor;bush-cricket;Decticelle bicolore;Sauterelle
+buzz;noise;x;x;x;x;insect wingbeats;noise;bourdonnement;Autre
+car;noise;x;x;x;x;vehicle;noise;véhicule;Autre
+Carcar;piaf;x;x;x;x;Carduelis carduelis;bird;Chardonneret élégant;Autre
+Cerbra;piaf;x;x;x;x;Certhia brachydactyla;bird;Grimpereau des jardins;Autre
+Cetcet;piaf;x;x;x;x;Cettia cettia;bird;Bouscarle de Cetti;Autre
+chirp;chirp;x;;;;chirp;noise;chirp;Autre
+Chlchl;piaf;x;x;x;x;Chloris chloris;bird;Verdier d'Europe;Autre
+Chovag;criq;x;x;x;x;Chorthippus vagans;grasshopper;Criquet des pins;Autre
+Cicatr;Cicatr;x;x;x;;Cicadatra atra;cicada;Cigale noire;Autre
+Cicorn;Cicorn;x;x;x;;Cicada orni;cicada;Cigale grise;Autre
+Cisjun;piaf;x;x;x;x;Cisticola juncidis;bird;Cisticole des joncs;Autre
+Concon;Concon;x;x;x;;Conocephalus conocephalus;bush-cricket;Conocéphale africain;Sauterelle
+Condor;Condor;x;x;x;x;Conocephalus dorsalis;bush-cricket;Conocephale des marais;Sauterelle
+Confus;Confus;x;;x;x;Conocephalus fuscus;bush-cricket;Conocephale bigarre;Sauterelle
+Corcho;Epheph;x;;;;Corsteropleurus chopardi;bush-cricket;Ephippigère corse;Sauterelle
+Cornix;piaf;x;x;x;x;Corvus cornix;bird;Corneille mantelée;Autre
+criq;criq;x;x;x;x;Caelifera sp.;grasshopper;Criquet sp.;Autre
+Crorus;Mussp;x;x;x;x;Crocidura russula;other mammal;Crocidure musette;Autre
+Cyacae;piaf;x;x;x;x;Cyanistes caerulea;bird;Mésange bleue;Autre
+Cympud;Cympud;x;;x;;Cymbalophora pudica;moth;Ecaille pudique;Autre
+Cyrscu;Cyrscu;x;;x;;Cyrtaspis scutatus;bush-cricket;Meconeme a bouclier;Sauterelle
+Decalb;Decalb;x;x;x;;Decticus albifrons;bush-cricket;Dectique a front blanc;Sauterelle
+Denmaj;piaf;x;x;x;x;Dendrocopos major;bird;Pic épeiche;Autre
+elec;noise;x;x;x;x;electronical noise;noise;parasite;Autre
+Embcae;piaf;x;x;x;x;Emberiza caesia;bird;Bruant cendrillard;Autre
+Embcal;piaf;x;x;x;x;Emberiza calandra;bird;Bruant proyer;Autre
+Embcir;piaf;x;x;x;x;Emberiza cirlus;bird;Bruant zizi;Autre
+Embcit;piaf;x;x;x;x;Emberiza citrinella;bird;Bruant jaune;Autre
+Epheph;Epheph;x;;x;;Ephippiger ephippiger;bush-cricket;Ephippigere des vignes;Sauterelle
+Eptana;Eptnil;x;x;;;Eptesicus anatolicus;bat;Serotine d'Anatolie;Chauve-souris
+Eptisa;Eptisa;;;x;;Eptesicus isabellinus;bat;Serotine isabelle;Chauve-souris
+Eptnil;Eptnil;x;;x;;Eptesicus nilssonii;bat;Sérotine boréale;Chauve-souris
+Eptser;Eptser;x;x;x;x;Eptesicus serotinus;bat;Serotine commune;Chauve-souris
+Erirub;piaf;x;x;x;x;Erithacus rubecula;bird;Rougegorge familier;Autre
+Euccho;criq;x;x;x;x;Euchorthippus chopardii;grasshopper;Criquet des bragalous;Autre
+Eumbor;gril;x;x;x;;Eumodycogryllus bordigalensis;ground-cricket;Grillon bordelais;Autre
+Eupcha;Eupsp;x;x;;;Eupholidoptera chabrieri;bush-cricket;Decticelle splendide;Sauterelle
+Eupsp;Eupsp;x;x;;;Eupholidoptera sp.;bush-cricket;Decticelle splendide;Sauterelle
+Euptyr;Eupsp;x;x;x;;Eupholidoptera tyrrhenica;bush-cricket;Decticelle corse;Sauterelle
+Fricoe;piaf;x;x;x;x;Fringilla coelebs;bird;Pinson des arbres;Autre
+gril;gril;x;x;x;x;Gryllidae sp.;ground-cricket;grillon sp.;Autre
+Grycam;gril;x;x;x;;Gryllus campestris;ground-cricket;Grillon champêtre;Autre
+Homsap;mamm;x;x;x;x;Homo sapiens;other mammal;voix;Autre
+Hylmer;amph;x;;x;;Hyla meridionalis;frog;Rainette méridionale;Autre
+Hypsav;Hypsav;x;x;x;;Hypsugo savii;bat;Vespere de Savi;Chauve-souris
+Insp10;Insp10;x;x;x;x;Insect sp.10;insect;Insecte sp. type 10;Autre
+Insp11;Insp11;x;x;x;x;Insect sp.11;insect;Insecte sp. type 11;Autre
+Insp12;Insp12;x;x;x;x;Insect sp.12;insect;Insecte sp. type 12;Autre
+Inssp1;Inssp1;x;;x;x;Insect sp.1;insect;Insecte sp. type 1;Autre
+Inssp2;Inssp2;x;;x;x;Insect sp.2;insect;Insecte sp. type 2;Autre
+Inssp5;Inssp5;x;;x;x;Insect sp.5;insect;Insecte sp. type 5;Autre
+Inssp6;Inssp6;x;;x;x;Insect sp.6;insect;Insecte sp. type 6;Autre
+Inssp7;Inssp7;x;;x;x;Insect sp.7;insect;Insecte sp. type 7;Autre
+Inssp8;Inssp8;x;x;x;x;Insect sp. 8;insect;Insecte sp. type 8;Autre
+Inssp9;Inssp9;x;x;x;x;Insect sp. 9;insect;Insecte sp. type 9;Autre
+InsTu1;InsTu1;;x;;;Insect sp. from Turkey 1;insect;Insecte sp. Tu1;Autre
+Isopyr;Isopyr;x;x;x;;Isophya pyrenea;bush-cricket;Barbatiste pyreneen;Sauterelle
+Lamsp.;Lamsp.;x;x;x;x;Lampyris sp.;beetle;Lampyre sp.;Autre
+Lepalb;Lepalb;x;x;;;Leptophyes albovittata;bush-cricket;Sauterelle rayee;Sauterelle
+Lepbos;Lepbos;x;;;;Leptophyes boscii;bush-cricket;Sauterelle sarmate;Sauterelle
+Leppun;Leppun;x;;x;x;Leptophyes punctatissima;bush-cricket;Sauterelle ponctuee;Sauterelle
+Llusta;Llusta;;;x;;Lluciapomaresius stalii;bush-cricket;Ephippigere de Stal;Sauterelle
+Lopcri;piaf;x;x;x;x;Lophophanes cristatus;bird;Mésange huppée;Autre
+Lusmeg;piaf;x;x;x;x;Luscinia megarhynchos;bird;Rossignol philomèle;Autre
+Lyrple;Lyrple;x;x;x;;Lyristes plebejus;cicada;Cigale commune;Autre
+mamm;mamm;x;x;x;x;Mammalia sp.;other mammal;Mammifere sp.;Autre
+mec;noise;x;x;x;x;mechanical noise;noise;autre bruit;Autre
+Metbra;Metbra;x;;;x;Metrioptera brachyptera;bush-cricket;Decticelle des bruyeres;Sauterelle
+Metsau;Metsau;x;x;x;;Metrioptera saussuriana;bush-cricket;Decticelle des alpages;Sauterelle
+Micagr;Micagr;x;x;x;x;Microtus agrestis;other mammal;Campagnol agreste;Autre
+Minsch;Minsch;x;x;x;;Miniopterus schreibersii;bat;Minioptere;Chauve-souris
+Mmasp1;mamm;x;x;x;x;micromammals sp.1;other mammal;Micromammifère type 1;Autre
+Mmasp2;mamm;x;x;x;x;micromammals sp.2;other mammal;Micromammifère type 2;Autre
+Mmasp3;mamm;x;x;x;x;micromammals sp.3;other mammal;Micromammifère type 3;Autre
+Mmasp4;mamm;x;x;x;x;micromammals sp.4;other mammal;Micromammifère type 4;Autre
+MmaTu1;mamm;x;x;x;;micromammals sp. from Turkey 1;other mammal;Micromammifère de Turquie type 1;Autre
+Motcin;piaf;x;x;x;x;Motacilla cinerea;bird;Bergeronnette des ruisseaux;Autre
+Motfla;piaf;x;x;x;x;Motacilla flava;bird;Bergeronnette printanière;Autre
+Mussp;Mussp;x;x;x;x;Soricidae sp.;other mammal;Musaraigne sp.;Autre
+Myoalc;Myoalc;x;x;x;x;Myotis alcathoe;bat;Murin d'Alcathoe;Chauve-souris
+Myobec;Myobec;x;x;x;x;Myotis bechsteinii;bat;Murin de Bechstein;Chauve-souris
+Myobly;MyoGT;x;x;x;;Myotis blythii;bat;Petit Murin;Chauve-souris
+Myobra;Myomys;x;x;;x;Myotis brandtii;bat;Murin de Brandt;Chauve-souris
+Myocap;Myocap;x;x;x;;Myotis capaccinii;bat;Murin de Capaccini;Chauve-souris
+Myodas;Myodas;x;x;;;Myotis dasycneme;bat;Murin des marais;Chauve-souris
+Myodau;Myodau;x;x;x;x;Myotis daubentonii;bat;Murin de Daubenton;Chauve-souris
+Myoema;Myoema;x;x;x;x;Myotis emarginatus;bat;Murin a oreilles echancrees;Chauve-souris
+MyoGT;MyoGT;x;x;x;x;Myotis cf. myotis;bat;Murin de grande taille;Chauve-souris
+Myomyo;MyoGT;x;x;x;;Myotis myotis;bat;Grand Murin;Chauve-souris
+Myomys;Myomys;x;x;x;x;Myotis mystacinus;bat;Murin a moustaches;Chauve-souris
+Myonat;Myonat;x;x;;x;Myotis nattereri;bat;Murin groupe Natterer;Chauve-souris
+MyospA;Myonat;x;x;x;x;Myotis sp. A ('southern' Natterer);bat;Murin sp. A;Chauve-souris
+noise;noise;x;x;x;x;noise;noise;bruit;Autre
+Nyclas;Nyclas;x;x;x;;Nyctalus lasiopterus;bat;Grande Noctule;Chauve-souris
+Nyclei;Nyclei;x;x;x;x;Nyctalus leisleri;bat;Noctule de Leisler;Chauve-souris
+Nycnoc;Nycnoc;x;x;x;x;Nyctalus noctula;bat;Noctule commune;Chauve-souris
+Odomac;Odomac;;;x;;Odontura macphersoni;bush-cricket;Sauterelle de MacPherson;Sauterelle
+Omovir;criq;x;x;x;x;Omocestus viridulus;grasshopper;Criquet verdelet;Autre
+Oriori;piaf;x;x;x;x;Oriolus oriolus;bird;Loriot d'Europe;Autre
+Ortsp.;Ortsp.;x;x;x;x;Orthoptera sp.;insect;Orthoptère sp.;Autre
+Panbia;piaf;x;x;x;x;Panurus biarmicus;bird;Panure à moustaches;Autre
+Parmaj;piaf;x;x;x;x;Parus major;bird;Mésange charbonnière;Autre
+Pasdom;piaf;x;x;x;x;Passer domesticus;bird;Moineau domestique;Autre
+Pelbed;amph;x;x;x;x;Pelophylax bedriagae;frog;Grenouille de Bedriaga;Autre
+Pelesc;amph;x;;;;Pelophylax esculantus;frog;Grenouille verte;Autre
+Pelgra;amph;x;;x;;Pelophylax grafi;frog;Grenouille de Graf;Autre
+Pelrid;amph;x;x;x;x;Pelophylax ridibundus;frog;Grenouille rieuse;Autre
+Perate;piaf;x;x;x;x;Periparus ater;bird;Mésange noire;Autre
+Phafal;Phafal;x;x;x;;Phaneroptera falcata;bush-cricket;Phaneroptere commun;Sauterelle
+Phanan;Phanan;x;x;x;;Phaneroptera nana;bush-cricket;Phaneroptere meridional;Sauterelle
+Phofem;Phofem;x;x;;;Pholidoptera femorata;bush-cricket;Decticelle des friches;Sauterelle
+Phogri;Phogri;x;x;x;x;Pholidoptera griseoaptera;bush-cricket;Decticelle cendree;Sauterelle
+Phopho;piaf;x;x;x;x;Phoenicurus phoenicurus;bird;Rougequeue à front blanc;Autre
+Phycol;piaf;x;x;x;x;Phylloscopus collybita;bird;Pouillot véloce;Autre
+piaf;piaf;x;x;x;x;Aves sp.;bird;Oiseau sp.;Autre
+Picpic;piaf;x;x;x;x;Pica pica;bird;Pie bavarde;Autre
+Pipkuh;Pipkuh;x;x;x;x;Pipistrellus kuhlii;bat;Pipistrelle de Kuhl;Chauve-souris
+Pipmad;Pipmad;;;;;Pipistrellus madeirensis;bat;Pipistrelle de Madère;Chauve-souris
+Pipnat;Pipnat;x;x;x;x;Pipistrellus nathusii;bat;Pipistrelle de Nathusius;Chauve-souris
+Pippip;Pippip;x;x;x;x;Pipistrellus pipistrellus;bat;Pipistrelle commune;Chauve-souris
+Pippyg;Pippyg;x;x;x;x;Pipistrellus pygmaeus;bat;Pipistrelle soprane;Chauve-souris
+Plaaff;Plaaff;x;;x;;Platycleis affinis;bush-cricket;Decticelle cotiere;Sauterelle
+Plaalb;Plaalb;x;;x;x;Platycleis albopunctata;bush-cricket;Decticelle chagrinee;Sauterelle
+Plafal;Plafal;x;;x;;Platycleis falx;bush-cricket;Decticelle a serpe;Sauterelle
+Plaibe;Plaibe;;;x;;Platycleis iberica;bush-cricket;Decticelle iberique;Sauterelle
+Plaint;Plaint;x;;x;;Platycleis intermedia;bush-cricket;Decticelle intermediaire;Sauterelle
+Plasab;Plasab;x;;x;;Platycleis sabulosa;bush-cricket;Decticelle des sables;Sauterelle
+Pleaur;Pleaur;x;;x;x;Plecotus auritus;bat;Oreillard roux;Chauve-souris
+Pleaus;Pleaus;x;;x;x;Plecotus austriacus;bat;Oreillard gris;Chauve-souris
+Plekol;Plekol;;x;;;Plecotus kolombatovici;bat;Oreillard des Balkans;Chauve-souris
+Plemac;Plemac;x;x;x;;Plecotus macrobullaris;bat;Oreillard montagnard;Chauve-souris
+Poepal;piaf;x;x;x;x;Poecilus palustris;bird;Mésange nonnette;Autre
+Prumod;piaf;x;x;x;x;Prunella modularis;bird;Accenteur mouchet;Autre
+Ptebon;Ptebon;x;;;;Pterolepis bonfilsi;bush-cricket;Decticelle d'Evisa;Sauterelle
+Ptecor;Ptecor;x;;;;Pterolepis corsicana;bush-cricket;Decticelle de Porto-Vecchio;Sauterelle
+Pteger;Pteger;x;x;;;Pterolepis germanica;bush-cricket;Decticelle orientale;Sauterelle
+Ptegra;Ptegra;;x;x;;Pterolepis grallata;bush-cricket;Decticelle a pattes fines;Sauterelle
+Ptehey;gril;x;x;x;;Pteronemobius heydenii;ground-cricket;Grillon des marais;Autre
+Ptepon;Ptepon;x;x;x;;Pterolepis poneli;bush-cricket;Decticelle varoise;Sauterelle
+Pycgos;piaf;x;x;x;;Pycnonotus xanthopygos;bird;Bulbul d'Arabie;Autre
+Pycjug;Pycjug;;;x;;Pycnogaster jugicola;bush-cricket;Ephippigere droite;Sauterelle
+rain;noise;x;x;x;x;rain;noise;pluie;Autre
+Ratnor;Ratnor;x;x;x;x;Rattus norvegicus;other mammal;Surmulot;Autre
+Regign;piaf;x;x;x;x;Regulus ignicapillus;bird;Roitelet triple-bandeau;Autre
+Regreg;piaf;x;x;x;x;Regulus regulus;bird;Roitelet huppé;Autre
+Rhibla;Rhibla;;x;;;Rhinolophus blasii;bat;Rhinolophe de Blasius;Chauve-souris
+Rhieur;Rhieur;x;x;x;;Rhinolophus euryale;bat;Rhinolophe euryale;Chauve-souris
+Rhifer;Rhifer;x;x;x;x;Rhinolophus ferrumequinum;bat;Grand Rhinolophe;Chauve-souris
+Rhihip;Rhihip;x;x;x;x;Rhinolophus hipposideros;bat;Petit Rhinolophe;Chauve-souris
+Rhimeh;Rhimeh;;x;x;;Rhinolophus mehelyi;bat;Rinolophe de Mehely;Chauve-souris
+river;noise;x;x;x;x;watercourse;noise;cours d'eau;Autre
+RodTu1;mamm;x;x;x;;Rodentia sp. from Turkey 1;other mammal;Rongeur de Turquie type 1;Autre
+Roeroe;Roeroe;x;x;x;x;Roeseliana roeselii;bush-cricket;Decticelle bariolee;Sauterelle
+Rusnit;Rusnit;x;x;x;x;Ruspolia nitidula;bush-cricket;Conocephale gracieux;Sauterelle
+SauIn1;SauIn1;;;;;Tettigoniidae sp. from India 1;bush-cricket;Sauterelle sp. In1;Sauterelle
+SauIn2;SauIn2;;;;;Tettigoniidae sp. from India 2;bush-cricket;Sauterelle sp. In2;Sauterelle
+SauIn3;SauIn3;;;;;Tettigoniidae sp. from India 3;bush-cricket;Sauterelle sp. In3;Sauterelle
+SauTu4;SauTu4;;x;;;Tettigoniidae sp. from Turkey 4;bush-cricket;Sauterelle sp. Tu4;Sauterelle
+SauTu5;SauTu5;;x;;;Tettigoniidae sp. from Turkey 5;bush-cricket;Sauterelle sp. Tu5;Sauterelle
+SauTu6;SauTu6;;x;;;Tettigoniidae sp. from Turkey 6;bush-cricket;Sauterelle sp. Tu6;Sauterelle
+SauTu7;SauTu7;;x;;;Tettigoniidae sp. from Turkey 7;bush-cricket;Sauterelle sp. Tu7;Sauterelle
+SauTurquiesp1;SauTurquiesp1;;x;;;Tettigoniidae sp. from Turkey 1;bush-cricket;Sauterelle sp. Tu1;Sauterelle
+SauTurquiesp2;SauTurquiesp2;;x;;;Tettigoniidae sp. from Turkey 2;bush-cricket;Sauterelle sp. Tu2;Sauterelle
+SauTurquiesp3;SauTurquiesp3;;x;;;Tettigoniidae sp. from Turkey 3;bush-cricket;Sauterelle sp. Tu3;Sauterelle
+Sepsep;Sepsep;x;;x;;Sepiana sepium;bush-cricket;Decticelle echassiere;Sauterelle
+Serser;piaf;x;x;x;x;Serinus serinus;bird;Serin cini;Autre
+Siteur;piaf;x;x;x;x;Sitta europaea;bird;Sittelle torchepot;Autre
+Sorcor;Mussp;x;x;x;x;Soricinus coronatus;bush-cricket;Musaraigne couronnée;Autre
+Stralu;piaf;x;x;x;x;Strix aluco;bird;Effraie des clochers;Autre
+Strdec;piaf;x;x;x;;Streptopelia decaocto;bird;Tourterelle turque;Autre
+Stuvul;piaf;x;x;x;x;Sturnus vulgaris;bird;Etourneau sansonnet;Autre
+Sylatr;piaf;x;x;x;x;Sylvia atricapilla;bird;Fauvette à tête noire;Autre
+Sylcom;piaf;x;x;x;x;Sylvia communis;bird;Fauvette grisette;Autre
+Sylmel;piaf;x;x;x;x;Sylvia melanocephala;bird;Fauvette mélanocéphale;Autre
+Tadten;Tadten;x;x;x;;Tadarida teniotis;bat;Molosse;Chauve-souris
+Tesori;Tesori;;;;;Tessellana orina;bush-cricket;Decticelle orina;Sauterelle
+Testes;Testes;x;x;x;;Tessellana tessellata;bush-cricket;Decticelle carroyee;Sauterelle
+Tetarg;Tetarg;x;;x;;Tettigetta argentata;cicada;Cigale argentee;Autre
+Tetcan;Tetcan;x;x;x;;Tettigonia cantans;bush-cricket;Sauterelle cymbaliere;Sauterelle
+Tethis;Tethis;;;x;;Tettigonia hispanica;bush-cricket;Sauterelle hispanique;Sauterelle
+Tetpyg;Tetpyg;x;;x;;Tettigetta pygmea;cicada;Cigale pygmee;Autre
+Tetvir;Tetvir;x;x;x;x;Tettigonia viridissima;bush-cricket;Sauterelle verte;Sauterelle
+Thycor;Thycor;x;;x;;Thyreonotus corsicus;bush-cricket;Decticelle marocaine;Sauterelle
+Trotro;piaf;x;x;x;x;Troglodytes troglodytes;bird;Troglodyte mignon;Autre
+Turmer;piaf;x;x;x;x;Turdus merula;bird;Merle noir;Autre
+Turphi;piaf;x;x;x;x;Turdus philomelos;bird;Grive musicienne;Autre
+Tyllil;Tyllil;x;x;x;;Tylopsis lilifolia;bush-cricket;Phaneroptere liliace;Sauterelle
+Urobre;Urosp;x;;;;Uromenus brevicollis;bush-cricket;Ephippigère d'Algérie;Sauterelle
+Urorug;Urosp;x;;x;;Uromenus rugosicollis;bush-cricket;Ephippigere carenee;Sauterelle
+Urosp;Urosp;x;x;;;Uromenus sp.;bush-cricket;Ephippigère carénée/d'Algérie;Sauterelle
+Vesmur;Vesmur;x;x;x;;Vespertilio murinus;bat;Serotine bicolore;Chauve-souris
+wind;noise;x;x;x;x;wind;noise;vent;Autre
+Yerbey;Yerbey;x;;;;Yersinella beybienkoi;bush-cricket;Decticelle italienne;Sauterelle
+Yerbey;Yerbey;x;;;;Yersinella beybienkoi;bush-cricket;Decticelle italienne;Sauterelle
+Yerray;Yerray;x;;x;;Yersinella raymondii;bush-cricket;Decticelle frele;Sauterelle
+Zeuabb;Zeuabb;x;;x;;Zeuneriana abbreviata;bush-cricket;Decticelle aquitaine;Sauterelle
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/refPF.csv	Mon Aug 06 09:13:29 2018 -0400
@@ -0,0 +1,83 @@
+"","Espece","Q25","Q75","Q98","nbocc","DM25","DM10","DM02"
+"25%","Antius","1","2","20.4","37","1507.76416134834","-264.611728382111","-1373.67915743828"
+"25%","Antped","4.5","11.5","14.72","2","4808.81578743458","4051.92529139519","3648.25036017418"
+"25%","Antsor","1","1","1","1","15191.5848600864","15191.5848600864","15191.5848600864"
+"25%","Barbar","2","17","303.98","2102","3664.81756293774","2332.18326377869","1113.65489628792"
+"25%","Barfis","1","1","1","3","6365.93376266956","4838.54704384803","4023.94079380989"
+"25%","Bicbic","1.5","2.5","2.96","2","10996.9584002495","10901.6431913852","10850.8084133243"
+"25%","chirp","34.75","50.25","57.38","2","-1080.94990348816","-1080.94990348816","-1080.94990348816"
+"25%","Cicorn","1","2.75","3.82","10","-144.126234710217","-601.744369745255","-735.611527109146"
+"25%","Condor","1","1","1","2","5638.88746488095","5109.16003108025","4826.63873305321"
+"25%","Confus","1","9.5","143.36","135","803.39968407154","-464.592767357826","-1264.27222914219"
+"25%","criq","1","1","1","2","749.71511721611","717.207648897171","699.870332460404"
+"25%","Cympud","1","10","205.84","1159","2049.57697588206","-108.215761780739","-1468.71151192665"
+"25%","Cyrscu","1","2","16.54","40","1990.10920786858","-64.0679782867432","-629.767778863907"
+"25%","Decalb","1","3","9.1","20","451.158402323722","-169.394851446152","-1211.11368044853"
+"25%","Epheph","1","13","120.24","179","3024.1285866499","516.397881603242","-1570.94668524743"
+"25%","Eptser","2","10","110","2690","2509.24711275101","1584.50247135162","754.495276994705"
+"25%","Eumbor","2.25","4.75","5.9","2","377.283349037171","234.136240005494","157.791115188599"
+"25%","Eupcha","5.25","9.75","11.82","2","8215.7333689332","8009.95518920422","7900.20682668209"
+"25%","Hypsav","1","9","103.1","1116","2248.41059011221","1301.39321923256","348.390803813934"
+"25%","Inssp1","1","1","1","1","12292.344350338","12292.344350338","12292.344350338"
+"25%","Inssp5","1","1","1.86","8","-728.431448936463","-782.042838144303","-823.320345506668"
+"25%","Inssp6","1","5","40.1199999999999","500","2424.97865229845","914.47767071724","-1035.51150548935"
+"25%","Isopyr","8","22","28.44","2","532.886808037758","368.638544750213","281.039470996856"
+"25%","Lamsp.","1","3.75","47.98","702","2166.80326139927","844.690763473511","-947.457581233978"
+"25%","Lepbos","2","2","2","1","19698.1210539341","19698.1210539341","19698.1210539341"
+"25%","Leppun","41.25","1103","4140.86","990","1104.83912658691","-249.540919065476","-1406.85371873856"
+"25%","mamm","1","1","2.7","16","6183.96875983477","10.0895879268645","-278.111182951928"
+"25%","Micagr","1","1.5","13","47","2238.36066246033","530.938663005829","-16.9136964130399"
+"25%","Minsch","1","6","130.5","826","4206.91477686167","3004.16962945461","1585.87503230571"
+"25%","Mussp","1","1","1","1","1104.1836810112","1104.1836810112","1104.1836810112"
+"25%","Myoalc","1","2.25","14.5999999999999","92","4125.00926113128","2734.64635419845","1854.23125097752"
+"25%","Myobec","2","2","2.92","5","4397.38848257065","3523.56983032227","3057.5332157898"
+"25%","Myobra","5","5","5","1","3503.78706097603","3503.78706097603","3503.78706097603"
+"25%","Myocap","1","6","94.6199999999999","104","2953.33067560195","2095.68971920014","1288.69886338711"
+"25%","Myodas","3.5","4.5","4.96","2","3451.95404314995","2941.47309875488","2669.21659507751"
+"25%","Myodau","1","6","350.199999999996","2395","3523.05388474465","2357.6486802578","1277.44239184379"
+"25%","Myoema","1","3","38.5999999999997","1035","4239.00043714046","2483.71984658241","1362.43170207977"
+"25%","MyoGT","1","3","17.22","1040","4136.37232673169","2922.0745616436","1497.44925053597"
+"25%","Myomys","1","4","37.14","444","4504.9568271041","2929.1723464489","1807.60458549976"
+"25%","Myonat","1","6.75","52.2399999999998","2070","4100.53462767601","2735.82784142494","1745.14204066753"
+"25%","noise","609","3111.25","7235.92","5060","-1766.10768318176","-1789.97119259834","-1797.40886205673"
+"25%","Nyclas","1","5.5","38.68","7","1502.60388588905","1177.01388425827","887.68234380722"
+"25%","Nyclei","2","14","174.68","2780","2101.66658043861","969.221526432037","-496.86254527092"
+"25%","Nycnoc","1","6","123","950","1175.58238327503","418.189396619797","-994.488390636444"
+"25%","Phafal","1","5","31.12","145","2818.22321665287","1387.89198203087","-1076.0002751255"
+"25%","Phanan","5","196.75","1286.22","1390","-461.121517419815","-1228.30023024082","-1652.31356955051"
+"25%","Phofem","1","2.5","49.7200000000001","39","2068.41903162003","-273.422169017792","-1017.87503848076"
+"25%","Phogri","2","36","300","133","3167.28623771667","1046.13571507931","-124.318460326194"
+"25%","piaf","10","121","771.199999999999","4681","-1486.967471838","-1711.17241072654","-1787.89137840271"
+"25%","Pipkuh","7","89","1436","4189","1559.32718348503","1060.77260088921","357.113767185211"
+"25%","Pipnat","1","5","45","1635","3598.21611785888","2652.12113056183","1204.36025017738"
+"25%","Pippip","22","314.5","2862.8","4663","944.2108066082","285.986425304413","-682.368085184098"
+"25%","Pippyg","2","56","1870.14","1850","1208.85102796555","491.482502508163","-473.14840514183"
+"25%","Plaaff","2","39","518.399999999999","961","1186.96142053604","-579.112753868103","-1549.82554960251"
+"25%","Plaalb","2","61.5","935.440000000002","1055","1016.66383886337","-568.569532346726","-1470.19973935128"
+"25%","Plafal","1.25","1.75","1.98","2","4582.26300436258","2749.75668113232","1772.41997540951"
+"25%","Plaint","2","119","2593.2","2231","242.273566842079","-900.83824698925","-1540.14236267566"
+"25%","Plasab","1","10","339.76","455","1074.20996451378","-387.740073204041","-1394.40862154961"
+"25%","Pleaur","1","1","4.76","63","4323.55943703652","2738.44387030601","1156.0819111824"
+"25%","Pleaus","1","4","29","2122","3952.17004132271","2637.71873641015","1691.51609820366"
+"25%","Plemac","3","3","3","1","1603.93373608589","1603.93373608589","1603.93373608589"
+"25%","Pteger","1","8","104.16","624","1705.30042260885","258.537321424484","-1053.9468501854"
+"25%","Ptepon","1","14","185.38","222","1737.58781033754","289.659371685982","-1012.17030680656"
+"25%","Ratnor","1","1.25","1.94","4","6653.59038341046","6487.00690498352","6398.16238315582"
+"25%","Rhieur","1","2.25","2.94","4","7479.47543311119","5479.32757034302","4412.58204353332"
+"25%","Rhifer","1","7","112.68","967","2878.50191009045","1543.43428068161","-210.073269786834"
+"25%","Rhihip","1","5","198.78","762","2793.44169855118","1538.45808842182","-72.6952844524384"
+"25%","Roeroe","1","5","101.56","507","1533.86711502075","-419.310067510605","-1536.84663165092"
+"25%","Rusnit","1","18.25","2461.22","2128","1446.99894690514","-318.348206520081","-1535.67664027214"
+"25%","Sepsep","1","12","209.56","670","1171.77852892875","-410.145421075821","-1551.93597637176"
+"25%","Tadten","1","6","159.48","1165","2972.54510653019","1141.22549757958","-718.695039167404"
+"25%","Testes","2","61","3929.2","2681","856.26694393158","-589.754028081894","-1536.27879407883"
+"25%","Tetarg","1","1","1","1","1427.14018034935","1427.14018034935","1427.14018034935"
+"25%","Tetcan","2.5","4.5","4.96","3","-498.833418250084","-1007.41270055771","-1278.65498445511"
+"25%","Tetpyg","1","1","6.08","33","5812.14534193277","3825.1769472599","691.60439749718"
+"25%","Tetvir","10","915.25","3517.03999999999","4510","-1245.37617117166","-1635.96713280678","-1767.07428184033"
+"25%","Thycor","1","1.5","2.88","4","3827.87814813852","3648.21886131763","3552.40057501316"
+"25%","Tyllil","1","2","9.2","21","2519.41863942146","1398.31712245941","134.294110488891"
+"25%","Urorug","1","29","1204.6","1655","812.486474514008","-663.041796922684","-1598.88818309784"
+"25%","Vesmur","1","2","11","6","3089.2149399519","2337.44215130806","1811.89018826484"
+"25%","Yerray","2","26","1198.96","1822","1648.10248410702","335.5679915905","-1230.61568079949"
+"25%","Zeuabb","1","1","1","1","12984.534954071","12984.534954071","12984.534954071"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/refRPSeuil50.csv	Mon Aug 06 09:13:29 2018 -0400
@@ -0,0 +1,28 @@
+Espece,Q25RE,Q75RE,Q98RE,nboccRE,Q25cRE,Q75cRE,Q98cRE,nbocccRE,Q25RD,Q75RD,Q98RD,nboccRD,Q25cRD,Q75cRD,Q98cRD,nbocccRD,Q25PE,Q75PE,Q98PE,nboccPE,Q25cPE,Q75cPE,Q98cPE,nbocccPE,Q25PD,Q75PD,Q98PD,nboccPD,Q25cPD,Q75cPD,Q98cPD,nbocccPD
+Barbar,1,1,2.3,36,1,1,3,33,1,2,5,283,1,3,7.29999999999998,186,1,2.25,8.5,16,1,2,9.48,14,1,2,7.48,77,1,3.25,8,60
+Confus,1,1,2.07999999999998,147,1,2,5.02,100,1,2,4.88,457,1,4,12.16,222,1,3,6.2,46,1,3.5,8.32,35,1,5,24.2,89,1,7,42.8,56
+Epheph,1,2,6.52,75,1,1.75,25,50,1,2,7.42000000000002,430,1,4,20,200,1,1,4,52,1,2,6,42,1,3,16.1,196,1,5,23.36,117
+Eptser,1,2,7,898,1,4,17,472,1,4,16,1732,3,15,53.6,521,1,3.5,13.32,135,1,5.5,29.76,79,1,5,25.6,261,2,10,59.28,127
+Leppun,1,1,4,410,1,3,19.18,192,1,3,10,1183,2,10,44,305,1,3,11.08,99,1,7.25,28.6,48,2,8,32.9,406,3,24,114.36,128
+Minsch,1,1,3,301,1,2,5,222,1,2,6,28,1,4.25,13.78,12,1,2,9,115,1,4,11,78,1,4,6.68,9,1,5.5,11.4,6
+Myodau,1,1,3.18,42,1,2,4.28,37,1,1,3,224,1,2,5,166,1,4.75,21,86,1,5,36.6,61,1,6.25,33.94,204,2,12,57,111
+MyoGT,1,1,4,473,1,2,7,329,1,1,3,322,1,2,6.53999999999999,224,1,2,7.51999999999998,82,1,3,11.44,65,1,2,4.59999999999999,71,1,2,6.75999999999999,57
+noise,47,66,96,12233,457,650,882.08,1250,56,70,98,11263,563,690,921,1151,23,72,79,4490,259.75,661.5,770.24,474,64,73,85,3994,580,728,813.86,420
+Nyclei,1,1,4,29,1,2,4.6,21,1,2,7,571,1,4,14.78,312,1,2.25,27.1,16,1,2.5,33.3,12,1,3,14.72,115,1,4,27.68,75
+Nycnoc,1,2,3.92,55,1,3,12,33,1,2,6,272,1,4,13.68,159,1,1.25,13.78,12,1,2,14.84,9,1,3,16.6,71,1,3.5,36,51
+Phanan,1,1,3,34,1,3,7.28,19,1,2,9.20000000000005,541,1,5,36.56,212,1,4,22.84,17,1,3,30.6,13,1,7,35,322,1,18.5,97.92,128
+Phogri,1,1,3,526,1,2,8.07999999999998,297,1,1,3.35999999999999,233,1,2,5.68000000000001,167,1,2,11,287,1,5,26.22,140,1,5,26,240,1,13.75,58.9,106
+Pipkuh,1,3,7,3067,2,10,26,876,1,5,17.7799999999997,2762,4,31,82.8399999999999,555,1,5,27.22,890,3,17,59.5999999999997,318,1,5,49.36,783,3,20,114.02,262
+Pipnat,1,1,4,26,1,1.5,8.48,19,1,1,3,291,1,2,5,211,1,1.5,3.8,31,1,2,5,26,1,2,10.52,175,1,3,19.78,112
+Pippip,1,4,12,5675,5,24,67,1033,1,6,18,4155,10,41,106.46,628,2,11,49,1568,6,51,135.88,404,2,14,55.5999999999999,1671,13.5,80,196.56,323
+Pippyg,1,2,6.52000000000001,88,1,2.75,21.9,58,1,1,5.77999999999998,30,1,1,9.6,25,1,3,34.8000000000001,81,1,3,51.22,50,1,5,55.32,47,1,4.5,110.72,27
+Plaalb,1,2,9,261,1,2,13,165,1,2,5,488,1,4,16,210,1,4.25,15.68,84,1,6.5,26.94,54,1,7.5,44,103,2,15.75,49.72,58
+Plaint,1,2.25,22.22,340,1,2,91.0000000000003,161,1,3,11,1270,2,8,47,366,1,4,24.1999999999999,117,1,5,28.7,66,1,6,47.74,364,2,14,109.4,148
+Plasab,1,1,3.7,16,1,2,4.76,13,1,1,2.52,75,1,2,4,53,1,1.5,3.76,7,1,1.5,3.76,7,1,4,34.78,20,1,6.25,35.54,18
+Pleaus,1,1,2,59,1,1,2,57,1,2,3,280,1,2,5,209,1,2,4.02,50,1,3,5,46,1,2,5,155,1,3,8,109
+Roeroe,1,1,1.42,30,1,1,1.42,30,1,1,2,26,1,1.25,2,24,2,2,3.8,6,2,2,3.8,6,1,2,5.28,13,1,2,5.34,12
+Rusnit,2,7,24.4200000000001,2430,4,46,128.36,448,3,14,47,2871,6,91,282.38,488,2,21,66.6,221,3.25,59,155.04,82,2,47,73,242,1,105.5,312.2,91
+Sepsep,1,1,1,7,1,2.25,2.94,4,1,1,3,37,1,2,4,29,1,1,1,1,1,1,1,1,1,3.75,7.66,18,1.5,4,7.74,14
+Testes,1,2,10.66,118,1,2.5,22.6,71,1,6,22,1692,3,29.5,113,371,1,11.5,71,51,1,5.75,286.32,30,1,8,62.04,275,1,24,141.08,113
+Tetvir,1,2,13,1252,1,6,55.6,423,2,12,37.2600000000002,5988,5,73,285,949,1,6,70,440,1,9,178.6,177,2,36.5,73,1703,8,165.5,391,339
+Yerray,1,2,3,33,1,2,10.32,22,1,2,6.08,24,1,10,16.44,8,1,1,1,5,1,1.25,1.94,4,1,2,8.40000000000001,11,1,3.25,13.9,6