Next changeset 1:b38b954b92b9 (2024-01-24) |
Commit message:
planemo upload for repository https://github.com/galaxyecology/tools-ecology/tree/master/tools/Ecoregionalization_workflow commit 2a2ae892fa2dbc1eff9c6a59c3ad8f3c27c1c78d |
added:
brt.R cluster_ceamarc.R crea_carte_G.R eco_map.xml 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 3d750279158b brt.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/brt.R Wed Oct 18 09:58:34 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 3d750279158b cluster_ceamarc.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cluster_ceamarc.R Wed Oct 18 09:58:34 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 3d750279158b crea_carte_G.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crea_carte_G.R Wed Oct 18 09:58:34 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 3d750279158b eco_map.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eco_map.xml Wed Oct 18 09:58:34 2023 +0000 |
[ |
@@ -0,0 +1,52 @@ +<tool id="ecoregion_eco_map" name="EcoMap" version="0.1.0+galaxy0" profile="22.05"> + <description>Create map from cluster to visualize ecoregions</description> + <requirements> + <requirement type="package" version="4.2.3">r-base</requirement> + <requirement type="package" version="3.3">r-tmap</requirement> + <requirement type="package" version="1.0_12">r-sf</requirement> + <requirement type="package" version="1.1.1">r-dplyr</requirement> + </requirements> + <command detect_errors="exit_code"><![CDATA[ + Rscript + '$__tool_directory__/crea_carte_G.R' + '$cluster' + '$output' + ]]> + </command> + <inputs> + <param name="cluster" type="data" format="txt" label="Source file (cluster points from previous step)"/> + </inputs> + <outputs> + <data name="output" from_work_dir="ecoregions.png" format="png" label="Map"/> + </outputs> + <tests> + <test> + <param name='cluster' value="points_clus.txt"/> + <output name='output' value="ecoregions.png"/> + </test> + </tests> + <help><![CDATA[ +================== +**What it does ?** +================== + +The clusters obtained in the previous step are projected on a map to obtain the spatial distribution of each ecoregion. + +=================== +**How to use it ?** +=================== + +This script takes as input a file containing for each environmental pixel its associated cluster. See example below. The output of this script is a map representing ecoregions. + ++--------+--------+---------+ +| lat | long | cluster | ++--------+--------+---------+ +| -65.57 | 139.22 | 1 | ++--------+--------+---------+ +| -65.57 | 139.22 | 1 | ++--------+--------+---------+ +| ... | ... | ... | ++--------+--------+---------+ + + ]]></help> +</tool> |
b |
diff -r 000000000000 -r 3d750279158b nb_clust_G.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nb_clust_G.R Wed Oct 18 09:58:34 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 3d750279158b recup_liste_taxon.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/recup_liste_taxon.R Wed Oct 18 09:58:34 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 3d750279158b 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:34 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 3d750279158b 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:34 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 3d750279158b 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:34 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 3d750279158b 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:34 2023 +0000 |
b |
@@ -0,0 +1,7 @@ +Acanthogorgiidae +Actiniaria +Ainigmaptilon_edisto +Alcyonacea +Anthozoa +Thouarella_variabilis +Thouarella_vulpicauda |
b |
diff -r 000000000000 -r 3d750279158b 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:34 2023 +0000 |
b |
@@ -0,0 +1,7 @@ +Acanthogorgiidae +Actiniaria +Ainigmaptilon edisto +Alcyonacea +Anthozoa +Thouarella variabilis +Thouarella vulpicauda |
b |
diff -r 000000000000 -r 3d750279158b test-data/SIH_index_plot.png |
b |
Binary file test-data/SIH_index_plot.png has changed |
b |
diff -r 000000000000 -r 3d750279158b 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:34 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 3d750279158b 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:34 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 3d750279158b 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:34 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 3d750279158b test-data/ecoregions.png |
b |
Binary file test-data/ecoregions.png has changed |
b |
diff -r 000000000000 -r 3d750279158b 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:34 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' |