Next changeset 1:fc621f3f8226 (2024-01-24) |
Commit message:
planemo upload for repository https://github.com/galaxyecology/tools-ecology/tree/master/tools/Ecoregionalization_workflow commit 2a2ae892fa2dbc1eff9c6a59c3ad8f3c27c1c78d |
added:
BRT_model.xml brt.R cluster_ceamarc.R crea_carte_G.R nb_clust_G.R recup_liste_taxon.R test-data/1_brts_pred_ceamarc.txt test-data/Data.bio_table.tsv test-data/Data_to_cluster.tsv test-data/List_of_taxa.txt test-data/List_of_taxa_clean.txt test-data/SIH_index_plot.png test-data/Summary_of_taxa_model.csv test-data/ceamarc_env.csv test-data/cnidaria_filtered.csv test-data/ecoregions.png test-data/points_clus.txt |
b |
diff -r 000000000000 -r f0d6938d0451 BRT_model.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BRT_model.xml Wed Oct 18 09:58:51 2023 +0000 |
[ |
@@ -0,0 +1,110 @@ +<tool id="ecoregion_brt_analysis" name="BRT tool prediction" version="0.1.0+galaxy0" profile="22.05"> + <description>for species distribution modelling</description> + <requirements> + <requirement type="package" version="4.3.0">r-base</requirement> + <requirement type="package" version="2.1.8">r-gbm</requirement> + <requirement type="package" version="3.4.2">r-ggplot2</requirement> + <requirement type="package" version="1.3_14">r-dismo</requirement> + </requirements> + <command detect_errors="exit_code"><![CDATA[ + Rscript + '$__tool_directory__/brt.R' + '$enviro' + '$species_files' + '$abioticname' + '$outputpred' + '$outputval' + '$outputspdistri' + '$outputplots' + ]]></command> + <inputs> + <param name="enviro" type="data" format="txt,csv,tabular" label="Environment Data"/> + <param type="data" name="species_files" label="Occurrences Data File" format="tabular,txt,csv" multiple="True" /> + <param name="abioticname" type="text" label="Write the name of your abiotic parameters (comma separated)"/> + </inputs> + <outputs> + <collection name="outputpred" type="list" label="Prediction files"> + <discover_datasets pattern="(?P<designation>.+_brts_pred_ceamarc)\.txt" format="txt"/> + </collection> + <collection name="outputval" type="list" label="Validation files (Taxa, AUC, Tree complexity, Total deviance explained)"> + <discover_datasets pattern="(?P<designation>.+_brts_validation_ceamarc)\.tsv" format="tabular" /> + </collection> + <collection name="outputspdistri" type="list" label="Species distribution prediction maps" > + <discover_datasets pattern="(?P<designation>.+)\.png" format="png" /> + </collection> + <collection name="outputplots" type="list" label="Partial dependence plots" > + <discover_datasets pattern="(?P<designation>.+)\.pdf" format="pdf" /> + </collection> + </outputs> + <tests> + <test> + <param name="enviro" value="ceamarc_env.csv"/> + <param name="species_files" value="cnidaria_filtered.csv"/> + <param name="abioticname" value="Carbo,Grav,Maxbearing,Maxmagnit,Meancurmag,Meansal,Meantheta,Mud,Prof,Rugosity,Sand,Seaice_prod,Sili,Slope,Standcurmag,Standsal,Standtheta"/> + <output_collection name='outputpred' type = "list" count="1"/> + <output_collection name='outputval' type = "list" count="1"/> + <output_collection name='outputspdistri' type = "list" count="2"> + <element name="BRT- Actiniaria _pred_plot"> + <assert_contents> + <has_size value="76065" delta="10000"/> + </assert_contents> + </element> + </output_collection> + <output_collection name='outputplots' type = "list"> + <element name="BRT- Actiniaria " > + <assert_contents> + <has_size value="16042" delta="1000"/> + </assert_contents> + </element> + </output_collection> + </test> + </tests> + <help><![CDATA[ +================== +**What it does ?** +================== + +This Galaxy tool is made to characterize the distribution of each taxon by giving a probability indicator taxon presence for each environmental layer pixel. To do this, the boosted regression trees (BRT) method (Elith *et al*., 2008) is used to fit the relationship between the presence of a single taxon and the environmental conditions where the taxon has been +detected. Two steps are performed in this script: the creation of the taxon distribution model and the use of this model to obtain a predictive index. The prediction index obtained from each BRT model for each pixel of the environmental layers is an approximation of the probability of detection of the presence of the taxon. + +=================== +**How to use it ?** +=================== + +This tool takes in input the environmental data as well as the species occurrence data. See examples of inputs below. You also need to input the list of abiotic parameters (respecting the case, without spaces and separating them by commas). For example : Carbo,Grav,Maxbearing,... +This tool gives in output a file containing the predictions of probability of presence of each taxon for each pixel (latitude, longitude) environmental, a visualization of these pixels for each taxon and graphs showing the percentage of model explanation for each environmental parameter. + +**Example of environmental data input :** +----------------------------------------- + ++------+------+---------+------+--------------+-----+ +| long | lat | Carbo | Grav | Maxbearing | ... | ++------+------+---------+------+--------------+-----+ +|139.22|-65.57| 0.88 |28.59 | 3.67 | ... | ++------+------+---------+------+--------------+-----+ +|139.22|-65.57| 0.88 |28.61 | 3.64 | ... | ++------+------+---------+------+--------------+-----+ +| ... | ... | ... | ... | ... | ... | ++------+------+---------+------+--------------+-----+ + + +**Example of occurence data input :** +------------------------------------- + ++---------+----------+-----------+------------------------+-----------+-----+ +| station | lat | long |Acanthorhabdus_fragilis | Acarnidae | ... | ++---------+----------+-----------+------------------------+-----------+-----+ +| 1 |-65,999946|142,3360535| 0 | 1 | ... | ++---------+----------+-----------+------------------------+-----------+-----+ +| 10 |-66,335407| 141,3028 | 0 | 1 | ... | ++---------+----------+-----------+------------------------+-----------+-----+ +| ... | ... | ... | ... | ... | ... | ++---------+----------+-----------+------------------------+-----------+-----+ + + + + + ]]></help> +</tool> + + |
b |
diff -r 000000000000 -r f0d6938d0451 brt.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/brt.R Wed Oct 18 09:58:51 2023 +0000 |
[ |
@@ -0,0 +1,109 @@ +#16/02/2023 +## Analyse BRT data Ceamarc + +### Clean environment +rm(list = ls(all.names = TRUE)) +options(warn=-1) + +### load packages + +library(dismo, warn.conflicts = FALSE) +library(gbm, warn.conflicts = FALSE) +library(ggplot2, warn.conflicts = FALSE) + + +#load arguments +args = commandArgs(trailingOnly=TRUE) +if (length(args)==0) +{ + stop("This tool needs at least one argument") +}else{ + enviro <- args[1] + species_files <- args[2] + abio_para <- args[3] +} + +### load data + +env = read.table(enviro, header = TRUE, dec = ".", na.strings = "-9999") +pred.vars = strsplit(abio_para, ",")[[1]] +data_files = strsplit(species_files,",") + +#environemental parameters +#Carbo,Grav,Maxbearing,Maxmagnit,Meancurmag,Meansal,Meantheta,Mud,Prof,Rugosity,Sand,Seaice_prod,Sili,Slope,Standcurmag,Standsal,Standtheta + +#Load functions + +make.brt <- function(spe,data,pred.vars,env,nb_file){ + brt_step <- gbm.step(data= data, gbm.x = pred.vars, gbm.y = spe, family = "bernoulli", tree.complexity = 2, learning.rate = 0.0001,max.trees = 10000,plot.main = F) + #plot + if (is.null(brt_step)==FALSE){ + pdf(file = paste("BRT-",spe,".pdf")) + gbm.plot(brt_step, write.title = T,show.contrib = T, y.label = "fitted function",plot.layout = c(3,3)) + dev.off() + #total deviance explained as (Leathwick et al., 2006) + total_deviance <- brt_step$self.statistics$mean.null + cross_validated_residual_deviance <- brt_step$cv.statistics$deviance.mean + total_deviance_explained <- (total_deviance - cross_validated_residual_deviance)/total_deviance + #Validation file + valid = cbind(spe,brt_step$cv.statistics$discrimination.mean,brt_step$gbm.call$tree.complexity,total_deviance_explained) + write.table(valid, paste(nb_file,"_brts_validation_ceamarc.tsv",sep=""), quote=FALSE, dec=".",sep="\t" ,row.names=F, col.names=F,append = T)} + + return(brt_step) + } + +make.prediction.brt <- function(brt_step){ + #predictions + preds <- predict.gbm(brt_step,env,n.trees=brt_step$gbm.call$best.trees, type="response") + preds <- as.data.frame(cbind(env$lat,env$long,preds)) + colnames(preds) <- c("lat","long","Prediction.index") + #carto + ggplot()+ + geom_raster(data = preds , aes(x = long, y = lat, fill = Prediction.index))+ + geom_raster(data = preds , aes(x = long, y = lat, alpha = Prediction.index))+ + scale_alpha(range = c(0,1), guide = "none")+ + scale_fill_viridis_c( + alpha = 1, + begin = 0, + end = 1, + direction = -1, + option = "D", + values = NULL, + space = "Lab", + na.value = "grey50", + guide = "colourbar", + aesthetics = "fill")+ + xlab("Longitude") + ylab("Latitude")+ ggtitle(paste(spe,"Plot of BRT predictions"))+ + theme(plot.title = element_text(size = 10))+ + theme(axis.title.y = element_text(size = 10))+ + theme(axis.title.x = element_text(size = 10))+ + theme(axis.text.y = element_text(size = 10))+ + theme(axis.text.x = element_text(size = 10))+ + theme(legend.text = element_text(size = 10))+ + theme(legend.title = element_text(size = 10))+ + coord_quickmap() + output_directory <- ggsave(paste("BRT-",spe,"_pred_plot.png")) + + #Write prediction in a file + preds <- cbind(preds,spe) + write.table(preds, paste(nb_file,"_brts_pred_ceamarc.txt",sep=""), quote=FALSE, dec=".", row.names=F, col.names=T,append = T) +} + +#### RUN BRT #### +nb_file = 0 + +for (file in data_files[[1]]) { + species_data <- read.table(file, dec = ",", sep = ";", header = TRUE, na.strings = "na", colClasses = "numeric") + nb_file = nb_file + 1 + `%!in%` <- Negate(`%in%`) + sp = list() + for (n in names(species_data)) { + if (n %!in% names(env) && n != 'station'){ + sp = cbind(sp,n) + } + } + + for (spe in sp){ + try(make.prediction.brt(make.brt(spe,species_data,pred.vars,env,nb_file))) + } +} |
b |
diff -r 000000000000 -r f0d6938d0451 cluster_ceamarc.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cluster_ceamarc.R Wed Oct 18 09:58:51 2023 +0000 |
[ |
@@ -0,0 +1,52 @@ +##13/04/2023 +##Seguineau Pauline +### Clustering with Clara algorithm + +#load library +library(cluster) +library(dplyr) +library(tidyverse) + +#load arguments +args = commandArgs(trailingOnly=TRUE) +if (length(args)==0) +{ + stop("This tool needs at least one argument") +}else{ + data <- args[1] + enviro <- args[2] + data.bio <- args[3] + k <- as.numeric(args[4]) + metric <- args[5] + sample <- as.numeric(args[6]) +} + +#load data +env.data <- read.table(enviro, header=TRUE, sep=" ",dec = ".", na.strings = "-9999.00") +data.bio <- read.table(data.bio, header=TRUE, sep="\t") +test3 <- read.table(data, header = TRUE, sep="\t") + +###################################################################################################### +#Make clustering + +k <- k #number of clusters +test5 <- clara(test3, k, metric = metric, samples = sample, sampsize = min(nrow(test3), (nrow(data.bio)/nrow(test3))+2*k)) + +####################################################################################################### +#save results + +png("sih.png") +plot(silhouette(test5)) +dev.off() + +clus <- cbind(data.bio[1:nrow(test3), 1:2],test5$clustering) +names(clus) <- c("lat", "long", "cluster") +clus <- cbind(clus,test3,env.data[,3:19]) + +write.table(clus[1:3], file = "points_clus.txt",quote = FALSE, row.names = FALSE) +write.table(clus, file = "clus.txt",quote = FALSE, row.names = FALSE) + + + + + |
b |
diff -r 000000000000 -r f0d6938d0451 crea_carte_G.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crea_carte_G.R Wed Oct 18 09:58:51 2023 +0000 |
[ |
@@ -0,0 +1,38 @@ +#Author : Seguineau Pauline + + +#Create a map from cluster + +library(sf) +library(tmap) +library(dplyr) + +args = commandArgs(trailingOnly=TRUE) +if (length(args)==0) +{ + stop("This tool needs at least one argument") +}else{ + data <- args[1] +} + +clus <- read.table(data, header=TRUE, na.strings = "na") + +#tmap method + +sf_data <- st_as_sf(clus, coords = c("long", "lat"), crs =4326) + +grouped_data <- sf_data %>% + group_by(cluster) %>% + summarize() + +map <- tm_shape(grouped_data) + + tm_dots(col = "cluster", palette = "Accent", size = 0.1, title = "écorégions")+ + tm_scale_bar(position = c("right","top"))+ + tm_compass(position = c("right","top"))+ + tm_layout(frame = FALSE,legend.position = c("left","bottom"))+ + tm_xlab("Longitude")+ + tm_ylab("Latitude")+ + tm_grid(alpha = 0.2) + +#Save the map +tmap_save(map, "ecoregions.png") |
b |
diff -r 000000000000 -r f0d6938d0451 nb_clust_G.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nb_clust_G.R Wed Oct 18 09:58:51 2023 +0000 |
[ |
@@ -0,0 +1,73 @@ +# Script to determine the optimal number of clusters thanks to the optimization of the SIH index and to produce the files needed in the next step of clustering + +#load packages +library(cluster) +library(dplyr) +library(tidyverse) + +#load arguments +args = commandArgs(trailingOnly=TRUE) +if (length(args)==0) +{ + stop("This tool needs at least one argument") +}else{ + enviro <- args[1] + taxa_list <- args[2] + preds <- args[3] + max_k <- as.numeric(args[4]) + metric <- args[5] + sample <- as.numeric(args[6]) +} + +#load data + +env.data <- read.table(enviro, header = TRUE, dec = ".", na.strings = "-9999.00") + +##List of modelled taxa used for clustering +tv <- read.table(taxa_list, dec=".", sep=" ", header=F, na.strings = "NA") +names(tv) <- c("a") + +################Grouping of taxa if multiple prediction files entered ################ + +data_split = str_split(preds,",") +data.bio = NULL + +for (i in 1:length(data_split[[1]])) { +data.bio1 <- read.table(data_split[[1]][i], dec=".", sep=" ", header=T, na.strings = "NA") +data.bio <- rbind(data.bio,data.bio1) +remove(data.bio1) +} + +names(data.bio) <- c("lat", "long", "pred", "taxon") + +#keep selected taxa +data.bio <- data.bio[which(data.bio$taxon %in% tv$a),] + +write.table(data.bio,file="data_bio.tsv",sep="\t",quote=F,row.names=F) + +#format data + +test3 <- matrix(data.bio$pred , nrow = nrow(env.data), ncol = nrow(data.bio)/nrow(env.data)) +test3 <- data.frame(test3) +names(test3) <- unique(data.bio$taxon) + +write.table(test3, file="data_to_clus.tsv", sep="\t",quote=F,row.names=F) + +#Max number of clusters to test +max_k <- max_k + +# Initialization of vectors to store SIH indices +sih_values <- rep(0, max_k) + +# Calculation of the SIH index for each number of clusters +for (k in 2:max_k) { + # Clara execution + clara_res <- clara(test3, k, metric =metric, samples = sample, sampsize = min(nrow(test3), (nrow(data.bio)/nrow(test3))+2*k)) + # Calculation of the SIH index + sih_values[k] <- clara_res$silinfo$avg.width +} + +# Plot SIH Index Chart by Number of Clusters +png("Indices_SIH.png") +plot(2:max_k, sih_values[2:max_k], type = "b", xlab = "Nombre de clusters", ylab = "Indice SIH") +dev.off() |
b |
diff -r 000000000000 -r f0d6938d0451 recup_liste_taxon.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/recup_liste_taxon.R Wed Oct 18 09:58:51 2023 +0000 |
[ |
@@ -0,0 +1,93 @@ +#This script allows us to create a file telling us for each taxon if we obtained a BRT model. As well as the list of taxa. + +#load packages +library(dplyr, warn.conflicts = FALSE) +library(taxonomyCleanr, warn.conflicts = FALSE) +library(stringr, warn.conflicts = FALSE) + +#load arguments +args = commandArgs(trailingOnly=TRUE) + +if (length(args)==0){ + stop("This tool needs at least one argument") +}else{ + data <- args[1] + preds <- args[2] + enviro <- args[3] +} + +env = read.table(enviro, header=T, na.strings = "na") +occurrence_files = strsplit(data,",") +preds_files = strsplit(preds,",") + +#########functions########## + +`%!in%` <- Negate(`%in%`) + +have_model = data.frame() +pres = 0 + +have.model <- function(taxon_phylum,noms_sp,comptage_sp,brt_phylum){ + for (tax in taxon_phylum) { + if (tax %in% names(noms_sp)){ + pres = sum(comptage_sp[tax]) + } + if (tax %in% brt_phylum$spe ) { + brt = c(tax,"Yes", pres) + have_model = rbind(have_model,brt, make.row.names = F)} + else { + brt = c(tax,"No", pres) + have_model = rbind(have_model,brt, make.row.names = F)} + } + colnames(have_model) = c("Taxa","Model","Occurences") + return(have_model)} + +##########Execution######## +brt = NULL +for (j in 1:length(preds_files[[1]])){ + brt <- rbind(brt,read.table(preds_files[[1]][j], header = TRUE, na.strings = "na")) +} + +for (i in 1:length(occurrence_files[[1]])) { + occurrence <- NULL + cmpt <- NULL + taxon <- list() + + occurrence <- read.table(occurrence_files[[1]][i], dec = ",", sep = ";", header = TRUE, na.strings = "na") + + taxon_names <- names(occurrence) + new_taxon <- taxon_names[!(taxon_names %in% names(env)) & taxon_names != "station"] + taxon <- c(taxon, new_taxon) + + cmpt <- occurrence[, new_taxon] + cmpt <- as.data.frame(cmpt) + + have_model <- have.model(taxon, occurrence, cmpt, brt) +} + +#Taxa for which a model was obtained +have_model2 = subset(have_model, have_model$`Model` != "N") +have_model3 = subset(have_model, have_model$`Model` != "N") + +#Obtain a list of taxa (cleaned) that have obtained a BRT model (file that can be submitted to the match taxa tool of the WoRMS database to obtain their classification and be able to sort duplicates between taxonomic ranks) + +have_model2$Taxa <- as.character(trim_taxa(have_model2$Taxa)) + +#Second clean-up (elimination of all taxa ending in sp1./sp2 etc which represents a duplicate) + +have_model2 <- have_model2 %>% filter(!str_ends(Taxa, "sp.1|sp[0-9]")) +have_model3 <- have_model3 %>% filter(!str_ends(Taxa, "sp.1|sp[0-9]")) +have_model <- have_model %>% filter(!str_ends(Taxa, "sp.1|sp[0-9]")) + +#extraction of the have_model object +write.csv(have_model,file = "have_model.csv", quote = F, row.names = F) + +#getting list of taxa for next if not using worms +list_taxon = have_model3$Taxa +write.table(list_taxon, file= "list_taxa.txt", quote = F, row.names = F, col.names = F) + +#getting the final list to submit to worms +liste_taxon = have_model2$Taxa +write.table(liste_taxon,file = "list_taxa_clean.txt", quote = F, row.names = F, col.names = F) + + |
b |
diff -r 000000000000 -r f0d6938d0451 test-data/1_brts_pred_ceamarc.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/1_brts_pred_ceamarc.txt Wed Oct 18 09:58:51 2023 +0000 |
b |
@@ -0,0 +1,16 @@ +lat long Prediction.index spe +-65.57 139.22 0.841029593071458 Actiniaria +-65.57 139.22 0.84809523959125 Actiniaria +-65.57 139.23 0.84593837029871 Actiniaria +-65.57 139.24 0.845795319302531 Actiniaria +-65.57 139.24 0.845803531789338 Actiniaria +-65.57 139.25 0.838195173926856 Actiniaria +-65.57 139.26 0.836419710602451 Actiniaria +-65.57 139.26 0.836029330691246 Actiniaria +-65.57 139.27 0.835738500636347 Actiniaria +-65.57 139.28 0.835442888556642 Actiniaria +-65.57 139.28 0.84289272242705 Actiniaria +-65.57 139.29 0.843110664350552 Actiniaria +-65.57 139.3 0.837595245997102 Actiniaria +-65.57 139.3 0.791165108348526 Actiniaria +-65.57 139.31 0.790943656953059 Actiniaria |
b |
diff -r 000000000000 -r f0d6938d0451 test-data/Data.bio_table.tsv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Data.bio_table.tsv Wed Oct 18 09:58:51 2023 +0000 |
b |
@@ -0,0 +1,16 @@ +lat long pred taxon +-65.57 139.22 0.841029593071458 Actiniaria +-65.57 139.22 0.84809523959125 Actiniaria +-65.57 139.23 0.84593837029871 Actiniaria +-65.57 139.24 0.845795319302531 Actiniaria +-65.57 139.24 0.845803531789338 Actiniaria +-65.57 139.25 0.838195173926856 Actiniaria +-65.57 139.26 0.836419710602451 Actiniaria +-65.57 139.26 0.836029330691246 Actiniaria +-65.57 139.27 0.835738500636347 Actiniaria +-65.57 139.28 0.835442888556642 Actiniaria +-65.57 139.28 0.84289272242705 Actiniaria +-65.57 139.29 0.843110664350552 Actiniaria +-65.57 139.3 0.837595245997102 Actiniaria +-65.57 139.3 0.791165108348526 Actiniaria +-65.57 139.31 0.790943656953059 Actiniaria |
b |
diff -r 000000000000 -r f0d6938d0451 test-data/Data_to_cluster.tsv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Data_to_cluster.tsv Wed Oct 18 09:58:51 2023 +0000 |
b |
@@ -0,0 +1,16 @@ +Actiniaria +0.841029593071458 +0.84809523959125 +0.84593837029871 +0.845795319302531 +0.845803531789338 +0.838195173926856 +0.836419710602451 +0.836029330691246 +0.835738500636347 +0.835442888556642 +0.84289272242705 +0.843110664350552 +0.837595245997102 +0.791165108348526 +0.790943656953059 |
b |
diff -r 000000000000 -r f0d6938d0451 test-data/List_of_taxa.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/List_of_taxa.txt Wed Oct 18 09:58:51 2023 +0000 |
b |
@@ -0,0 +1,7 @@ +Acanthogorgiidae +Actiniaria +Ainigmaptilon_edisto +Alcyonacea +Anthozoa +Thouarella_variabilis +Thouarella_vulpicauda |
b |
diff -r 000000000000 -r f0d6938d0451 test-data/List_of_taxa_clean.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/List_of_taxa_clean.txt Wed Oct 18 09:58:51 2023 +0000 |
b |
@@ -0,0 +1,7 @@ +Acanthogorgiidae +Actiniaria +Ainigmaptilon edisto +Alcyonacea +Anthozoa +Thouarella variabilis +Thouarella vulpicauda |
b |
diff -r 000000000000 -r f0d6938d0451 test-data/SIH_index_plot.png |
b |
Binary file test-data/SIH_index_plot.png has changed |
b |
diff -r 000000000000 -r f0d6938d0451 test-data/Summary_of_taxa_model.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Summary_of_taxa_model.csv Wed Oct 18 09:58:51 2023 +0000 |
b |
@@ -0,0 +1,8 @@ +Taxa,Model,Occurences +Acanthogorgiidae,No,0 +Actiniaria,Yes,50 +Ainigmaptilon_edisto,No,2 +Alcyonacea,No,43 +Anthozoa,No,62 +Thouarella_variabilis,No,3 +Thouarella_vulpicauda,No,24 |
b |
diff -r 000000000000 -r f0d6938d0451 test-data/ceamarc_env.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/ceamarc_env.csv Wed Oct 18 09:58:51 2023 +0000 |
b |
@@ -0,0 +1,16 @@ +long lat Carbo Grav Maxbearing Maxmagnit Meancurmag Meansal Meantheta Mud Prof Rugosity Sand Seaice_prod Sili Slope Standcurmag Standsal Standtheta long_round lat_round +139.22 -65.57 0.88 28.59 3.67 0.03 0.03 34.62 -0.13 22.72 -441.00 -9999.00 55.76 0.24 3.27 0.28 0.01 0.01 0.18 139,22 -65,57 +139.22 -65.57 0.88 28.61 3.64 0.02 0.03 34.62 -0.13 22.48 -439.00 -9999.00 55.74 0.24 3.29 0.27 0.01 0.01 0.18 139,22 -65,57 +139.23 -65.57 0.92 28.62 3.59 0.02 0.03 34.62 -0.14 22.25 -438.00 -9999.00 56.28 0.25 3.32 0.22 0.01 0.01 0.19 139,23 -65,57 +139.24 -65.57 0.92 28.63 3.51 0.01 0.03 34.62 -0.14 21.95 -436.00 -9999.00 56.57 0.26 3.30 0.08 0.01 0.01 0.19 139,24 -65,57 +139.24 -65.57 0.92 28.64 3.35 0.01 0.03 34.62 -0.14 21.70 -437.00 -9999.00 56.58 0.26 3.28 0.05 0.01 0.01 0.19 139,24 -65,57 +139.25 -65.57 0.93 28.65 3.00 9.6293305978179e-03 0.03 34.62 -0.15 21.44 -436.00 -9999.00 56.63 0.26 3.26 0.29 0.01 0.01 0.19 139,25 -65,57 +139.26 -65.57 0.93 28.63 2.49 8.71255807578564e-03 0.03 34.62 -0.15 21.11 -432.00 -9999.00 56.67 0.26 3.23 0.43 0.01 0.01 0.19 139,26 -65,57 +139.26 -65.57 0.93 28.64 2.01 0.01 0.03 34.62 -0.16 20.83 -429.00 -9999.00 56.71 0.26 3.21 0.37 0.01 0.01 0.19 139,26 -65,57 +139.27 -65.57 0.94 28.65 1.71 0.01 0.03 34.62 -0.16 20.55 -427.00 -9999.00 56.75 0.26 3.19 0.32 0.01 0.01 0.20 139,27 -65,57 +139.28 -65.57 0.94 28.66 1.54 0.01 0.03 34.62 -0.16 20.21 -424.00 -9999.00 56.80 0.26 3.17 0.28 0.01 0.01 0.20 139,28 -65,57 +139.28 -65.57 0.94 28.67 1.44 0.02 0.03 34.62 -0.17 19.74 -422.00 -9999.00 56.84 0.26 3.14 0.26 0.01 0.01 0.20 139,28 -65,57 +139.29 -65.57 0.94 28.68 1.74 0.01 0.03 34.62 -0.17 20.86 -421.00 -9999.00 56.87 0.26 3.13 0.22 0.01 0.01 0.20 139,29 -65,57 +139.30 -65.57 0.95 28.70 3.46 0.01 0.03 34.62 -0.17 21.30 -420.00 -9999.00 56.91 0.26 3.11 0.32 0.01 0.01 0.20 139,30 -65,57 +139.30 -65.57 0.95 28.71 3.91 0.03 0.03 34.62 -0.18 21.01 -414.00 -9999.00 57.18 0.26 3.09 0.59 0.01 0.01 0.21 139,30 -65,57 +139.31 -65.57 0.96 28.72 4.03 0.05 0.03 34.62 -0.18 20.76 -406.00 -9999.00 57.54 0.26 3.07 0.53 0.01 0.01 0.21 139,31 -65,57 |
b |
diff -r 000000000000 -r f0d6938d0451 test-data/cnidaria_filtered.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/cnidaria_filtered.csv Wed Oct 18 09:58:51 2023 +0000 |
b |
@@ -0,0 +1,64 @@ +station;lat;long;Carbo;Grav;Maxbearing;Maxmagnit;Meancurmag;Meansal;Meantheta;Mud;Prof;Rugosity;Sand;Seaice_prod;Sili;Slope;Standcurmag;Standsal;Standtheta;Acanthogorgiidae;Actiniaria;Ainigmaptilon_edisto;Alcyonacea;Anthozoa;Thouarella_variabilis;Thouarella_vulpicauda +1;-65,99;142,33;5,51;12,59;2,03;0,16;0,07;34,6;-1,47;29,8;-233;1;56,16;0,11;3,94;0,05;0,03;0,03;0,24;0;1;0;0;1;0;0 +10;-66,33;141,3;3,17;5,31;5,2;0,18;0,08;34,61;-1,35;21,5;-215;1;67,39;0,17;5,8;0,24;0,03;0,02;0,28;0;1;0;1;1;0;0 +11;-66,56;141,29;3,1;3,28;4,93;0,2;0,08;34,65;-1,73;34,89;-192;1;73,13;0,87;4,48;0,71;0,03;0,04;0,24;0;0;0;1;1;0;0 +12;-66,55;140,82;2,78;3,08;3,74;0,34;0,1;34,59;-1,19;25,83;-217;1;68,37;2,62;4,05;2,57;0,06;0,02;0,24;0;1;0;1;1;1;0 +13;-66,15;140,65;2,06;7,62;5,36;0,21;0,09;34,56;-1,04;13,18;-217;1;71,68;0,07;2,89;0,37;0,04;0,02;0,26;0;1;0;0;1;0;0 +14;-66,33;140,67;2,96;3,12;2,42;0,16;0,08;34,54;-1,02;12,15;-171;1;73,16;0,78;1,17;0,08;0,03;0,01;0,22;0;1;0;0;1;0;0 +15;-66,38;139,8;1,06;1,65;1,87;0,14;0,05;34,64;-1,53;69,08;-855;1;48,44;1,43;13,55;2,94;0,03;0,01;0,06;0;1;0;1;1;0;0 +16;-66,34;139,99;1,34;2,78;1,61;0,15;0,05;34,6;-1,12;41,06;-538;1;54,72;1,23;5,97;3,7;0,03;0,00839;0,08;0;1;0;0;1;0;0 +17;-66,17;139,96;1,71;8,13;4,39;0,31;0,12;34,54;-0,96;17,16;-151;1;61,42;0,54;1,99;0,25;0,05;0,02;0,3;0;1;0;1;1;1;0 +18;-66,16;139,65;1,49;7,75;2,24;0,15;0,06;34,59;-1,01;32,71;-432;1;51,4;0,56;3,35;0,42;0,03;0,01;0,26;0;1;0;1;1;0;1 +19;-66,15;139,31;1,18;8,58;5,7;0,12;0,04;34,61;-1,36;47,4;-674;1;46,41;0,34;9,92;0,31;0,02;0,00722;0,09;0;1;0;0;1;0;0 +2;-65,99;141,32;3,3;14,21;5,01;0,16;0,07;34,6;-1,26;14,05;-235;1;67,07;-0,01;2,09;0,13;0,03;0,03;0,32;0;1;1;1;1;0;1 +20;-66;139,99;1,95;20,59;4,98;0,19;0,09;34,56;-1,05;13,25;-192;1;63,46;0,27;1,92;0,21;0,03;0,03;0,26;0;1;0;0;1;0;0 +21;-66;139,64;2,26;18,21;2,85;0,16;0,07;34,58;-1,04;44,81;-277;1;57,14;0,76;5,88;1,66;0,03;0,01;0,26;0;1;0;0;1;0;0 +22;-66;139,31;1,39;19,2;4,87;0,1;0,04;34,6;-1,05;37,84;-476;1;49,4;0,65;7,09;0,25;0,02;0,00884;0,15;0;1;0;1;1;0;0 +26;-66,52;140,02;1,51;1,47;4,4;0,12;0,05;34,6;-1,11;49,11;-247;1;49,52;2,38;10,29;3,16;0,02;0,00984;0,16;0;1;0;0;1;0;0 +27;-66,02;142,74;2,61;11,58;5,42;0,13;0,05;34,64;-1,73;25,07;-440;1;46,97;0,24;2,19;0,23;0,02;0,03;0,17;0;1;0;1;1;0;1 +28;-65,99;143,02;2,15;11,5;5,37;0,14;0,05;34,64;-1,77;39,29;-467;1;38,66;0,24;2,07;0,32;0,02;0,03;0,12;0;1;0;1;1;0;1 +29;-66,02;143,29;1,77;9,98;5,41;0,14;0,05;34,64;-1,78;62,2;-470;1;38,73;0,33;4,81;0,19;0,02;0,03;0,1;0;1;0;1;1;0;1 +3;-65,99;141,98;5,27;14,32;5,31;0,01;0,06;34,6;-1,4;22,84;-245;1;61,04;-0,00886;3,93;0,15;0,03;0,03;0,25;0;1;0;0;1;0;0 +30;-66;143,68;2,06;9,47;5,42;0,15;0,06;34,61;-1,71;54,73;-429;1;41,27;0,39;1,03;0,22;0,03;0,03;0,19;0;1;0;0;1;0;0 +31;-66,55;144,99;1,05;19,55;5,28;0,12;0,03;34,62;-1,73;35,57;-437;1;39,47;5,14;1,77;0,45;0,02;0,03;0,16;0;0;0;1;1;0;1 +34;-66,33;144,34;1,26;6,31;4,92;0,13;0,04;34,63;-1,77;44,96;-455;1;40,49;1,87;2,96;0,39;0,02;0,03;0,12;0;1;0;1;1;0;1 +35;-66,33;144,01;1,2;4,9;2,11;0,12;0,04;34,64;-1,78;49,09;-511;1;39,41;1,54;4,15;0,32;0,02;0,02;0,1;0;1;0;1;1;0;0 +36;-66,32;143,65;1,12;4,29;2,16;0,12;0,04;34,64;-1,79;53,85;-565;1;38,83;1,26;8,68;0,38;0,02;0,02;0,13;0;1;0;1;1;0;1 +37;-66,55;143,31;1,34;4,32;2,02;0,12;0,04;34,66;-1,82;78,15;-820;1;47,92;2,76;13,57;0,26;0,02;0,03;0,11;0;1;0;0;1;0;0 +38;-66,33;143,31;0,82;3,84;2,2;0,1;0,04;34,65;-1,8;84,13;-703;1;41,01;0,98;16,47;0,25;0,02;0,03;0,12;0;1;0;1;1;1;0 +39;-66,56;143,02;1,67;4,11;1,5;0,13;0,05;34,65;-1,8;47,63;-862;1;56,71;2,22;7,3;0,18;0,02;0,02;0,1;0;1;0;0;1;0;0 +40;-66,65;142,98;1,94;3,93;5,42;0,13;0,04;34,63;-1,75;41,4;-598;1;58,72;3,57;5,71;1,57;0,02;0,03;0,12;0;0;0;1;1;0;1 +41;-66,76;142,65;2,67;2,67;0,14;0,15;0,04;34,65;-1,76;38,32;-598;1;62,33;4,43;6,01;4,29;0,02;0,04;0,16;0;0;0;1;1;0;1 +42;-66,87;142,66;2,92;1,71;5,49;0,13;0,04;34,63;-1,72;47,93;-391;1;62,77;8,27;6,89;1,19;0,02;0,05;0,2;0;0;0;1;1;0;1 +43;-66,74;143,33;2;3,28;4,67;0,19;0,06;34,61;-1,74;62,82;-332;1;54,92;7,42;9,35;3,78;0,03;0,05;0,16;0;1;0;1;1;0;0 +45;-66,75;144;2,19;3,12;5,5;0,16;0,04;34,61;-1,8;42,36;-661;1;43,64;7,49;5,95;4,51;0,03;0,02;0,07;0;1;0;1;1;0;1 +46;-66,87;144,1;2,59;1,31;5,89;0,17;0,05;34,59;-1,78;38,87;-561;1;43,42;10,54;4,09;1,16;0,03;0,04;0,14;0;0;0;1;1;0;1 +48;-66,93;144,65;1,59;0,58;5,75;0,21;0,06;34,6;-1,83;73,19;-407;1;40,23;11,89;10,52;5,23;0,03;0,03;0,09;0;1;0;1;1;0;0 +5;-66,32;142,29;3,03;4,93;5,05;0,2;0,1;34,63;-1,61;39,53;-216;1;61,67;0,27;2,63;0,11;0,04;0,02;0,17;0;0;0;1;1;0;1 +50;-66,75;145,27;1,02;5,5;5,49;0,13;0,04;34,64;-1,77;52,4;-596;1;39,8;9,53;4,66;0,23;0,02;0,03;0,1;0;1;0;1;1;0;1 +51;-66,74;145,48;0,95;6,47;5,5;0,2;0,05;34,62;-1,78;49,32;-535;1;40,91;10,66;3,37;0,55;0,03;0,04;0,11;0;1;0;0;1;0;0 +52;-66,55;145,31;1,04;19,26;5,26;0,09;0,03;34,59;-1,67;36,48;-409;1;42,62;6,4;1,12;0,09;0,01;0,03;0,22;0;1;0;0;1;0;0 +53;-66,33;144,66;1,24;6,73;5,36;0,13;0,04;34,61;-1,71;62,77;-420;1;42,45;2,27;3,99;0,17;0,02;0,04;0,18;0;1;0;0;1;0;0 +54;-65,91;144,02;3,17;12,05;5,16;0,15;0,06;34,57;-0,92;31,38;-375;1;46,27;0,41;2,1;2,62;0,02;0,02;0,4;0;1;1;1;1;0;1 +55;-66,33;145,01;1,12;8,85;5,25;0,12;0,04;34,56;-1,68;40,75;-387;1;44,3;3,06;2,2;0,58;0,02;0,03;0,26;0;1;0;1;1;0;1 +56;-66,56;144,67;1,3;16,82;2,34;0,13;0,04;34,65;-1,79;45,94;-582;1;39,22;4,26;3,93;0,38;0,02;0,03;0,1;0;1;0;0;1;0;0 +57;-66,74;145;1,18;5,21;2,42;0,16;0,05;34,65;-1,8;53,42;-646;1;38,62;7,59;7,28;0,68;0,03;0,03;0,09;0;1;0;0;1;0;0 +58;-66,75;144,67;1,28;4,2;2,34;0,18;0,05;34,65;-1,81;79,28;-837;1;34,69;7,08;12,46;0,61;0,03;0,03;0,08;0;1;0;1;1;0;1 +6;-66,32;142,66;1,83;4,69;1,69;0,1;0,08;34,65;-1,74;18,2;-384;1;58,78;0,43;2,05;0,09;0,03;0,02;0,15;0;1;0;1;1;0;0 +60;-66,56;143,93;1,51;7,74;2,05;0,14;0,05;34,65;-1,82;47,04;-799;1;38,88;3,65;7,36;0,94;0,03;0,03;0,09;0;1;0;1;1;0;0 +61;-66,33;142,97;1,15;4,14;5,31;0,13;0,05;34,64;-1,74;52,04;-644;1;49,19;0,67;9,1;0,82;0,02;0,03;0,16;0;1;0;1;1;0;0 +62;-66,15;143,32;1,06;10,88;2,17;0,12;0,04;34,64;-1,76;59,46;-545;1;37,97;0,52;5,25;0,23;0,02;0,02;0,14;0;1;0;1;1;0;0 +63;-65,85;142,98;3,71;20,11;5,24;0,27;0,11;34,61;-1,22;24,73;-423;1;41,04;0,19;1,03;0,56;0,05;0,02;0,44;0;0;0;1;1;0;1 +65;-65,81;143;3,89;21,43;5,23;0,39;0,13;34,61;-0,67;25,78;-777;1;41,24;0,18;1,56;7,69;0,06;0,02;0,33;0;1;0;1;1;0;1 +66;-65,75;143,04;NA;NA;4,48;NA;NA;NA;NA;NA;NA;NA;NA;NA;NA;NA;NA;NA;NA;0;0;0;1;1;0;0 +7;-66,55;142,64;2,12;4,31;1,77;0,18;0,07;34,66;-1,75;15,34;-255;1;65,49;1,46;1,38;6,15;0,03;0,03;0,18;0;0;0;0;0;0;0 +70;-66,42;140,52;2,3;2,63;5,35;0,08;0,03;34,64;-1,49;20,33;-1109;1;67,5;1,56;3,67;5,9;0,01;0,01;0,05;0;1;0;0;1;0;0 +71;-66,39;140,48;2,22;2,24;5,27;0,06;0,02;34,62;-1,36;19,67;-768;1;67,65;1,36;3,1;7,04;0,01;0,01;0,04;0;1;0;1;1;0;1 +72;-66,34;140,48;2,18;2,6;2,34;0,09;0,04;34,58;-1,14;17,49;-407;1;67,61;1,01;2,1;2,74;0,01;0,01;0,11;0;1;0;1;1;0;0 +79;-65,7;140,56;1,83;25,43;4,77;0,34;0,16;34,6;-0,94;3,7;-506;1;66,84;0,09;1,91;5,63;0,06;0,02;0,38;0;1;0;1;1;0;1 +8;-66,56;142,33;3,36;3,2;1,96;0,16;0,06;34,68;-1,85;67,67;-374;1;60,65;1,04;11,68;1,03;0,03;0,03;0,1;0;1;0;1;1;0;1 +81;-65,65;140,44;1,42;28,49;4,93;0,3;0,15;34,62;-0,81;3,75;-1193;1;66,73;0,13;1,29;5,59;0,05;0,02;0,32;0;0;0;1;1;0;0 +84;-65,45;139,37;0,98;28,81;1,16;0,06;0,03;34,62;-0,21;17,56;-395;NA;58,04;0,28;2,92;0,29;0,01;0,01;0,22;0;0;0;1;1;0;0 +86;-65,47;139,35;0,96;28,78;2,13;0,00947;0,03;34,62;-0,2;18,67;-398;NA;57,91;0,27;2,96;0,26;0,01;0,01;0,22;0;1;0;1;1;0;0 +87;-65,49;139,33;0,95;28,75;4,01;0,05;0,03;34,62;-0,19;20,03;-400;NA;57,77;0,27;3,02;0,42;0,01;0,01;0,21;0;1;0;0;1;0;0 +9;-66,55;141,99;3,19;3,31;5,38;0,17;0,05;34,68;-1,85;40,51;-357;1;65,13;0,81;6,85;3,19;0,03;0,03;0,1;0;0;0;1;1;0;1 |
b |
diff -r 000000000000 -r f0d6938d0451 test-data/ecoregions.png |
b |
Binary file test-data/ecoregions.png has changed |
b |
diff -r 000000000000 -r f0d6938d0451 test-data/points_clus.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/points_clus.txt Wed Oct 18 09:58:51 2023 +0000 |
b |
b'@@ -0,0 +1,155824 @@\n+lat long cluster\n+-65.57 139.22 1\n+-65.57 139.22 1\n+-65.57 139.23 1\n+-65.57 139.24 1\n+-65.57 139.24 1\n+-65.57 139.25 1\n+-65.57 139.26 1\n+-65.57 139.26 1\n+-65.57 139.27 1\n+-65.57 139.28 1\n+-65.57 139.28 1\n+-65.57 139.29 1\n+-65.57 139.3 1\n+-65.57 139.3 1\n+-65.57 139.31 1\n+-65.57 139.32 1\n+-65.57 139.32 1\n+-65.57 139.33 1\n+-65.57 139.34 1\n+-65.57 139.34 1\n+-65.57 139.35 1\n+-65.57 139.36 1\n+-65.57 139.36 1\n+-65.57 139.37 1\n+-65.57 139.38 1\n+-65.57 139.38 1\n+-65.57 139.39 1\n+-65.57 139.4 1\n+-65.57 139.4 1\n+-65.57 139.41 1\n+-65.57 139.42 1\n+-65.57 139.42 2\n+-65.57 139.43 2\n+-65.57 139.44 2\n+-65.57 139.44 1\n+-65.57 139.45 1\n+-65.57 139.46 1\n+-65.57 139.46 1\n+-65.57 139.47 1\n+-65.57 139.48 1\n+-65.57 139.48 1\n+-65.57 139.49 1\n+-65.57 139.5 1\n+-65.57 139.5 1\n+-65.57 139.51 1\n+-65.57 139.52 1\n+-65.57 139.52 1\n+-65.57 139.53 1\n+-65.57 139.54 3\n+-65.57 139.54 3\n+-65.57 139.55 3\n+-65.57 139.56 3\n+-65.57 139.56 3\n+-65.57 139.57 3\n+-65.57 139.58 3\n+-65.57 139.58 3\n+-65.57 139.59 3\n+-65.57 139.6 3\n+-65.57 139.6 3\n+-65.57 139.61 3\n+-65.57 139.62 3\n+-65.57 139.62 3\n+-65.57 139.63 3\n+-65.57 139.64 3\n+-65.57 139.64 3\n+-65.57 139.65 3\n+-65.57 139.66 3\n+-65.57 139.66 3\n+-65.57 139.67 3\n+-65.57 139.68 3\n+-65.57 139.68 3\n+-65.57 139.69 3\n+-65.57 139.7 3\n+-65.57 139.7 3\n+-65.57 139.71 3\n+-65.57 139.72 3\n+-65.57 139.72 3\n+-65.57 139.73 3\n+-65.57 139.74 3\n+-65.57 139.74 3\n+-65.57 139.75 3\n+-65.57 139.76 3\n+-65.57 139.76 3\n+-65.57 139.77 3\n+-65.57 139.78 3\n+-65.57 139.78 3\n+-65.57 139.79 3\n+-65.57 139.8 3\n+-65.57 139.8 3\n+-65.57 139.81 3\n+-65.57 139.82 3\n+-65.57 139.82 3\n+-65.57 139.83 3\n+-65.57 139.84 3\n+-65.57 139.84 3\n+-65.57 139.85 3\n+-65.57 139.85 3\n+-65.57 139.86 3\n+-65.57 139.87 3\n+-65.57 139.87 3\n+-65.57 139.88 3\n+-65.57 139.89 3\n+-65.57 139.89 3\n+-65.57 139.9 3\n+-65.57 139.91 3\n+-65.57 139.91 3\n+-65.57 139.92 3\n+-65.57 139.93 3\n+-65.57 139.93 3\n+-65.57 139.94 3\n+-65.57 139.95 3\n+-65.57 139.95 3\n+-65.57 139.96 3\n+-65.57 139.97 3\n+-65.57 139.97 3\n+-65.57 139.98 3\n+-65.57 139.99 3\n+-65.57 139.99 3\n+-65.57 140 3\n+-65.57 140.01 3\n+-65.57 140.01 3\n+-65.57 140.02 3\n+-65.57 140.03 3\n+-65.57 140.03 3\n+-65.57 140.04 3\n+-65.57 140.05 3\n+-65.57 140.05 3\n+-65.57 140.06 3\n+-65.57 140.07 3\n+-65.57 140.07 3\n+-65.57 140.08 3\n+-65.57 140.09 3\n+-65.57 140.09 3\n+-65.57 140.1 3\n+-65.57 140.11 3\n+-65.57 140.11 3\n+-65.57 140.12 3\n+-65.57 140.13 3\n+-65.57 140.13 3\n+-65.57 140.14 3\n+-65.57 140.15 3\n+-65.57 140.15 3\n+-65.57 140.44 3\n+-65.57 140.45 3\n+-65.57 140.45 3\n+-65.57 140.46 3\n+-65.57 140.47 3\n+-65.57 140.47 3\n+-65.57 140.48 3\n+-65.57 140.49 3\n+-65.57 140.49 3\n+-65.57 140.5 3\n+-65.57 140.51 3\n+-65.57 140.51 3\n+-65.57 140.52 3\n+-65.57 140.53 3\n+-65.57 140.53 3\n+-65.57 140.54 3\n+-65.57 140.55 3\n+-65.57 140.55 3\n+-65.57 140.56 3\n+-65.57 140.57 3\n+-65.57 140.57 3\n+-65.57 140.58 3\n+-65.57 140.59 3\n+-65.57 140.59 3\n+-65.57 140.6 3\n+-65.57 140.61 3\n+-65.57 140.61 3\n+-65.57 140.62 3\n+-65.57 140.63 3\n+-65.57 140.63 3\n+-65.57 140.64 3\n+-65.57 140.65 3\n+-65.57 140.65 3\n+-65.57 140.66 3\n+-65.57 140.67 3\n+-65.57 140.67 3\n+-65.57 140.68 3\n+-65.57 140.69 3\n+-65.57 140.69 3\n+-65.57 140.7 3\n+-65.57 140.71 3\n+-65.57 140.71 3\n+-65.57 140.72 3\n+-65.57 140.73 3\n+-65.57 140.73 3\n+-65.57 140.74 3\n+-65.57 140.75 3\n+-65.57 140.75 3\n+-65.57 140.76 3\n+-65.57 140.76 3\n+-65.57 140.77 3\n+-65.57 140.78 3\n+-65.57 140.78 3\n+-65.57 140.79 3\n+-65.57 140.8 3\n+-65.57 140.8 3\n+-65.57 140.81 3\n+-65.57 140.82 3\n+-65.57 140.82 3\n+-65.57 140.83 3\n+-65.57 140.84 3\n+-65.57 140.84 3\n+-65.57 140.85 3\n+-65.57 140.86 3\n+-65.57 140.86 3\n+-65.57 140.92 3\n+-65.57 140.93 3\n+-65.57 140.94 3\n+-65.57 140.94 3\n+-65.57 140.95 3\n+-65.57 140.96 3\n+-65.57 140.96 3\n+-65.57 140.97 3\n+-65.57 140.98 3\n+-65.57 140.98 3\n+-65.57 140.99 3\n+-65.57 141 3\n+-65.57 141.4 3\n+-65.57 141.4 3\n+-65.57 141.41 3\n+-65.57 141.42 3\n+-65.57 141.42 3\n+-65.57 141.43 3\n+-65.57 141.44 3\n+-65.57 141.44 3\n+-65.57 141.45 3\n+-65.57 141.46 3\n+-65.57 141.46 3\n+-65.57 141.47 3\n+-65.57 141.48 3\n+-65.57 141.48 3\n+-65.57 141.49 3\n+-65.57 1'..b' 2\n+-67.01 144.82 1\n+-67.01 144.83 1\n+-67.01 144.84 1\n+-67.01 144.84 1\n+-67.01 144.85 1\n+-67.01 144.86 1\n+-67.01 144.86 1\n+-67.01 144.87 1\n+-67.01 144.88 1\n+-67.01 144.88 1\n+-67.01 144.89 1\n+-67.01 144.9 5\n+-67.01 144.9 5\n+-67.01 144.91 5\n+-67.01 144.92 5\n+-67.01 144.92 5\n+-67.01 144.93 5\n+-67.01 144.94 5\n+-67.01 144.94 5\n+-67.01 144.95 5\n+-67.01 144.96 5\n+-67.01 144.96 5\n+-67.01 144.97 5\n+-67.01 144.98 5\n+-67.01 144.98 5\n+-67.01 144.99 5\n+-67.01 145 5\n+-67.01 145 5\n+-67.01 145.01 5\n+-67.01 145.02 5\n+-67.01 145.02 5\n+-67.01 145.03 5\n+-67.01 145.04 5\n+-67.01 145.04 5\n+-67.01 145.05 5\n+-67.01 145.06 5\n+-67.01 145.06 5\n+-67.01 145.07 5\n+-67.01 145.08 5\n+-67.01 145.08 5\n+-67.01 145.09 5\n+-67.01 145.1 5\n+-67.01 145.1 5\n+-67.01 145.11 5\n+-67.01 145.12 5\n+-67.01 145.18 5\n+-67.01 145.18 5\n+-67.01 145.19 5\n+-67.01 145.2 5\n+-67.01 145.2 5\n+-67.01 145.21 5\n+-67.01 145.22 5\n+-67.01 145.22 5\n+-67.01 145.23 5\n+-67.01 145.24 5\n+-67.01 145.24 5\n+-67.01 145.25 5\n+-67.01 145.25 5\n+-67.01 145.26 5\n+-67.01 145.27 5\n+-67.01 145.27 5\n+-67.01 145.28 5\n+-67.01 145.29 5\n+-67.01 145.29 5\n+-67.01 145.3 5\n+-67.01 145.31 5\n+-67.01 145.31 5\n+-67.01 145.32 5\n+-67.01 145.33 5\n+-67.01 145.33 5\n+-67.01 145.34 5\n+-67.01 145.35 5\n+-67.01 145.35 5\n+-67.01 145.36 5\n+-67.01 145.37 5\n+-67.01 145.37 5\n+-67.01 145.38 5\n+-67.01 145.39 5\n+-67.01 145.39 5\n+-67.01 145.4 5\n+-67.01 145.41 5\n+-67.01 145.41 5\n+-67.01 145.42 5\n+-67.01 145.43 5\n+-67.01 145.43 5\n+-67.01 145.44 5\n+-67.01 145.45 5\n+-67.01 145.45 5\n+-67.01 145.46 5\n+-67.01 145.47 5\n+-67.01 145.47 5\n+-67.01 145.48 5\n+-67.01 145.49 5\n+-67.01 145.49 5\n+-67.01 145.5 5\n+-67.01 145.51 5\n+-67.01 145.51 5\n+-67.01 145.52 5\n+-67.01 145.53 5\n+-67.01 144.01 2\n+-67.01 144.02 1\n+-67.01 144.03 1\n+-67.01 144.03 1\n+-67.01 144.04 1\n+-67.01 144.05 1\n+-67.01 144.05 1\n+-67.01 144.06 1\n+-67.01 144.07 1\n+-67.01 144.07 1\n+-67.01 144.08 1\n+-67.01 144.09 1\n+-67.01 144.09 2\n+-67.01 144.1 2\n+-67.01 144.11 2\n+-67.01 144.11 2\n+-67.01 144.12 2\n+-67.01 144.13 2\n+-67.01 144.13 2\n+-67.01 144.14 2\n+-67.01 144.15 2\n+-67.01 144.15 2\n+-67.01 144.16 2\n+-67.01 144.64 2\n+-67.01 144.65 2\n+-67.01 144.66 2\n+-67.01 144.66 2\n+-67.01 144.68 2\n+-67.01 144.69 2\n+-67.01 144.7 2\n+-67.01 144.7 2\n+-67.01 144.71 2\n+-67.01 144.72 2\n+-67.01 144.72 2\n+-67.01 144.73 2\n+-67.01 144.74 2\n+-67.01 144.74 2\n+-67.01 144.75 2\n+-67.01 144.76 2\n+-67.01 144.76 2\n+-67.01 144.77 2\n+-67.01 144.78 2\n+-67.01 144.78 2\n+-67.01 144.79 2\n+-67.01 144.8 2\n+-67.01 144.8 2\n+-67.01 144.81 2\n+-67.01 144.82 2\n+-67.01 144.82 2\n+-67.01 144.83 1\n+-67.01 144.84 1\n+-67.01 144.84 1\n+-67.01 144.85 1\n+-67.01 144.86 1\n+-67.01 144.86 1\n+-67.01 144.87 1\n+-67.01 144.88 1\n+-67.01 144.88 1\n+-67.01 144.89 1\n+-67.01 144.9 5\n+-67.01 144.9 5\n+-67.01 144.91 5\n+-67.01 144.92 5\n+-67.01 144.92 5\n+-67.01 144.93 5\n+-67.01 144.94 5\n+-67.01 144.94 5\n+-67.01 144.95 5\n+-67.01 144.96 5\n+-67.01 144.96 5\n+-67.01 144.97 5\n+-67.01 144.98 5\n+-67.01 144.98 5\n+-67.01 144.99 5\n+-67.01 145 5\n+-67.01 145 5\n+-67.01 145.01 5\n+-67.01 145.02 5\n+-67.01 145.02 5\n+-67.01 145.03 5\n+-67.01 145.04 5\n+-67.01 145.06 5\n+-67.01 145.06 5\n+-67.01 145.07 5\n+-67.01 145.08 5\n+-67.01 145.08 5\n+-67.01 145.19 5\n+-67.01 145.2 5\n+-67.01 145.2 5\n+-67.01 145.21 5\n+-67.01 145.22 5\n+-67.01 145.22 5\n+-67.01 145.23 5\n+-67.01 145.24 5\n+-67.01 145.24 5\n+-67.01 145.25 5\n+-67.01 145.25 5\n+-67.01 145.26 5\n+-67.01 145.27 5\n+-67.01 145.27 5\n+-67.01 145.28 5\n+-67.01 145.29 5\n+-67.01 145.29 5\n+-67.01 145.3 5\n+-67.01 145.31 5\n+-67.01 145.31 5\n+-67.01 145.32 5\n+-67.01 145.33 5\n+-67.01 145.33 5\n+-67.01 145.34 5\n+-67.01 145.35 5\n+-67.01 145.35 5\n+-67.01 145.36 5\n+-67.01 145.37 5\n+-67.01 145.37 5\n+-67.01 145.38 5\n+-67.01 145.39 5\n+-67.01 145.39 5\n+-67.01 145.4 5\n+-67.01 145.41 5\n+-67.01 145.41 5\n+-67.01 145.42 5\n+-67.01 145.43 5\n+-67.01 145.43 5\n+-67.01 145.44 5\n+-67.01 145.45 5\n+-67.01 145.45 5\n+-67.01 145.46 5\n+-67.01 145.47 5\n+-67.01 145.47 5\n+-67.01 145.48 5\n+-67.01 145.49 5\n+-67.01 145.49 5\n+-67.01 145.5 5\n+-67.01 145.51 5\n+-67.01 145.51 1\n+-67.01 145.52 1\n+-67.01 145.53 1\n' |