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

Changeset 0:32849c52aa54 (2023-10-18)
Next changeset 1:edb8d19735a6 (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.xml
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 32849c52aa54 brt.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/brt.R Wed Oct 18 09:59:19 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 32849c52aa54 cluster.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cluster.xml Wed Oct 18 09:59:19 2023 +0000
[
@@ -0,0 +1,132 @@
+<tool id="ecoregion_clara_cluster" name="ClaraClust" version="0.1.0+galaxy0" profile="22.05">
+    <description>Make cluster from BRT prediction with Clara algorithm</description>
+    <requirements>
+       <requirement type="package" version="4.2.3">r-base</requirement>
+       <requirement type="package" version="2.1.4">r-cluster</requirement>
+       <requirement type="package" version="1.1.1">r-dplyr</requirement>
+       <requirement type="package" version="2.0.0">r-tidyverse</requirement>
+    </requirements>
+    <command detect_errors="exit_code"><![CDATA[
+    Rscript
+        '$__tool_directory__/cluster_ceamarc.R'
+        '$predictionmatrix'
+        '$envfile'
+        '$predictionfile'
+        '$k'
+        '$metric'
+        '$sample'
+        '$output1'
+        '$output2'
+        '$output3'
+    ]]></command>
+    <inputs>
+      <param name="predictionmatrix" type="data" format="tabular" label="Prediction matrix (data to cluster from Cluster Estimate tool) "/>
+      <param name="envfile" type="data" format="txt,csv,tabular" label="Environmental file"/>
+      <param name="predictionfile" type="data" format="tabular" label="Prediction file (data.bio table from Cluster Estimate tool)"/>
+      <param name="k" type="integer" label="Number of Cluster wanted" min= "1" value="2"/>
+      <param name="metric" type="select" label="What metric to use to calculate dissimilarities between observations ?">
+             <option value = "manhattan">manhattan</option>
+             <option value = "euclidean">euclidean</option>
+             <option value = "jaccard">jaccard</option>
+      </param>
+      <param name="sample" type="integer" label= "The number of samples to be drawn from the dataset" min="5" value="10"/>
+    </inputs>
+    <outputs>
+      <data name="output1" from_work_dir="sih.png" format="png" label="SIH plot"/>
+      <data name="output2" from_work_dir="points_clus.txt" format="txt" label="Cluster points"/>
+      <data name="output3" from_work_dir="clus.txt" format="txt" label="Cluster info"/>
+    </outputs>
+    <tests>
+        <test>
+            <param name="predictionmatrix" value="Data_to_cluster.tsv"/>
+            <param name="envfile" value="ceamarc_env.csv"/>
+            <param name="predictionfile" value="Data.bio_table.tsv"/>
+            <param name='k' value="2"/>
+            <param name='metric' value="manhattan"/>
+            <param name='sample' value="10"/>
+            <output name='output1'>
+                <assert_contents>
+                 <has_size value="8128" delta="500"/>
+             </assert_contents>
+            </output>
+            <output name='output2'>
+                <assert_contents>
+                    <has_size value="255" delta="1000" />
+                </assert_contents>
+            </output>
+            <output name='output3' >
+                <assert_contents>
+                    <has_size value="2008" delta="1000000" />
+                </assert_contents>
+            </output>
+        </test>
+    </tests>
+    <help><![CDATA[
+==================    
+**What it does ?**
+==================
+
+This tool is made to partition the pixels of the environmental layers according to the associated values of the BRT prediction index. Due to the large size of the datasets, the Clara function of the Cluster package was used to apply the Partitioning Around Medoids (PAM) algorithm on a representative sample of the data. This speeds up the clustering process and makes the calculation more efficient. 
+
+
+===================         
+**How to use it ?**
+===================
+
+The tool takes as input the prediction matrix obtained in the previous step of the workflow, the prediction file and the file containing the environmental parameters. See example below. You must fill in the metric used to calculate the dissimilarities between the observations:
+
+- Manhattan (distance between two real-valued vectors) : default metric in this workflow
+
+- euclidean (shortest distance between two points)
+
+- jaccard 
+
+The sample size that will be used to perform clustering must be re-signed. A fairly high value representative of the data is recommended. It is important to note that using too small a sample may result in loss of information compared to using the entire data set. 
+And finally enter the number of clusters that the clara function will use to partition the data.
+
+The tool will produce three outputs: two data files and a graph. The first file (rather large) contains all the information related to the clusters created, that is, in column: the latitude, the longitude, the corresponding cluster number and for each taxon the prediction value. The second file is the one that we will use in the following workflow: the file containing the latitude and longitude of the environmental pixel and the associated cluster number. This file will later be called a cluster file. 
+Finally, the tool will produce a plot silhouette. A silhouette graph is a representation used to visualize the silhouette index of each observation in a clustered data set. It makes it possible to assess the quality of clusters and determine their coherence and separation. In a silhouette graph, each observation is represented by a horizontal bar whose length is proportional to its silhouette index. The longer the bar, the better the consistency of the observation with its cluster and the separation from other clusters. The silhouette index ranges from -1 to 1. Values close to 1 indicate that objects are well grouped and separated from other clusters, while values close to -1 indicate that objects are poorly grouped and may be closer to other clusters. A value close to 0 indicates a situation where objects are located at the border between two clusters
+neighbors.
+
+**Example of the prediction matrix :**
+
++--------------------+--------------------------+--------------------+-----+
+|    Acarnidae      | Antarctotetilla_grandis  | Antarctotetilla_sp | ... |
++--------------------+--------------------------+--------------------+-----+
+| 0.186146570494706  |    0.239854021968922     |  0.525876102108555 | ... |
++--------------------+--------------------------+--------------------+-----+ 
+| 0.18639581256804   |    0.240065974372315     |  0.525876102108555 | ... |
++--------------------+--------------------------+--------------------+-----+
+|        ...         |            ...           |         ...        | ... |
++--------------------+--------------------------+--------------------+-----+
+
+
+**Example of the prediction file :**
+
++-----------+----------+-----------------------+-------------+
+|    lat    |   long   |   Prediction.index    |     spe     |
++-----------+----------+-----------------------+-------------+
+|  -65.57   |  139.22  |   0.122438487221909   |  Acarnidae  |
++-----------+----------+-----------------------+-------------+
+|  -65.57   |  139.32  |   0.119154535627801   |  Acarnidae  |
++-----------+----------+-----------------------+-------------+
+|   ...     |   ...    |         ...           |     ...     |
++-----------+----------+-----------------------+-------------+
+
+
+**Example of the environmental parameters :**
+
+
++------+------+---------+------+--------------+-----+
+| 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     | ... |
++------+------+---------+------+--------------+-----+
+| ...  | ...  |   ...   | ...  |     ...      | ... |
++------+------+---------+------+--------------+-----+
+
+
+    ]]></help>
+</tool>
b
diff -r 000000000000 -r 32849c52aa54 cluster_ceamarc.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cluster_ceamarc.R Wed Oct 18 09:59:19 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 32849c52aa54 crea_carte_G.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/crea_carte_G.R Wed Oct 18 09:59:19 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 32849c52aa54 nb_clust_G.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nb_clust_G.R Wed Oct 18 09:59:19 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 32849c52aa54 recup_liste_taxon.R
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/recup_liste_taxon.R Wed Oct 18 09:59:19 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 32849c52aa54 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:59:19 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 32849c52aa54 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:59:19 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 32849c52aa54 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:59:19 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 32849c52aa54 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:59:19 2023 +0000
b
@@ -0,0 +1,7 @@
+Acanthogorgiidae
+Actiniaria
+Ainigmaptilon_edisto
+Alcyonacea
+Anthozoa
+Thouarella_variabilis
+Thouarella_vulpicauda
b
diff -r 000000000000 -r 32849c52aa54 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:59:19 2023 +0000
b
@@ -0,0 +1,7 @@
+Acanthogorgiidae
+Actiniaria
+Ainigmaptilon edisto
+Alcyonacea
+Anthozoa
+Thouarella variabilis
+Thouarella vulpicauda
b
diff -r 000000000000 -r 32849c52aa54 test-data/SIH_index_plot.png
b
Binary file test-data/SIH_index_plot.png has changed
b
diff -r 000000000000 -r 32849c52aa54 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:59:19 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 32849c52aa54 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:59:19 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 32849c52aa54 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:59:19 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 32849c52aa54 test-data/ecoregions.png
b
Binary file test-data/ecoregions.png has changed
b
diff -r 000000000000 -r 32849c52aa54 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:59:19 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'