Commit 0393da18 authored by Eric Coissac's avatar Eric Coissac

Initial commit of the project

parents
Package: MetabarSchool
Type: Package
Title: A Tutorial package on Biodiversity indices and metabarcoding
Version: 1.0
Date: 2019-01-31
Author: Eric Coissac
Maintainer: Eric Coissac <eric.coissac@metabarcoding.org>
Description: More about what it does (maybe more than one line)
License: What license is it under?
exportPattern("^[[:alpha:]]+")
#' @author Eric Coissac
#' @export
H.q = function(x,q=1) {
sum(x * log.q(1/x,q),na.rm = TRUE)
}
#' @author Eric Coissac
#' @export
D.q = function(x,q=1) {
exp.q(H.q(x,q),q)
}
#' @author Eric Coissac
#' @export
H.spectrum = function(x,q=1) {
sapply(q,function(Q) H.q(x,Q))
}
#' @author Eric Coissac
#' @export
D.spectrum = function(x,q=1) {
sapply(q,function(Q) D.q(x,Q))
}
#' @importFrom Rdpack reprompt
#'
NULL
#' Generalized logaritmic function.
#'
#' \deqn{x \longmapsto 1 : \log(x) \approx x-1}
#'
#'
#' @references
#' \insertRef{Tsallis:94:00}{ROBITools2}
#'
#'
#' @author Eric Coissac
#' @export
log.q = function(x,q=1) {
if (q==1)
log(x)
else (x^(1-q)-1)/(1-q)
}
#' Generalized exponential function.
#'
#'
#' @references
#' \insertRef{Tsallis:94:00}{ROBITools2}
#'
#' @author Eric Coissac
#' @export
exp.q = function(x,q=1,base=exp(1)) {
if (q==1)
exp(x)
else
(1 + (1-q)*x)^(1/(1-q))
}
#' @export
mode <- function(x) {
d <- density(x)
d$x[which.max(d$y)]
}
#' @export
tag_bad_pcr = function(samples,counts,plot = TRUE) {
counts = decostand(counts,method = "hellinger")
bc = aggregate(counts,
by=list(factor(as.character(samples))),
mean)
bc.name = as.character(bc[,1])
bc = bc[-1]
rownames(bc)=bc.name
bc = bc[as.character(samples),]
d = sqrt(rowSums((counts - bc)^2))
names(d) = as.character(samples)
d.m = mode(d)
d.sd = sqrt(sum((d[d <= d.m] - d.m)^2)/sum(d <= d.m))
d.max = aggregate(d,
by = list(factor(as.character(samples))),
max)
d.max.names = d.max[,1]
d.max = d.max[,2]
names(d.max) = d.max.names
d.max = d.max[as.character(samples)]
d.len = aggregate(d,
by = list(factor(as.character(samples))),
length)
d.len.names = d.len[,1]
d.len = d.len[,2]
names(d.len) = d.len.names
d.len = d.len[as.character(samples)]
keep = ((d < d.m + (d.sd*2)) | d!=d.max) & d.len > 1
selection = data.frame(samples = as.character(samples),
distance= d,
maximum = d.max,
repeats = d.len,
keep = keep,
stringsAsFactors = FALSE)
rownames(selection)=rownames(counts)
attributes(selection)$dist.mode = d.m
attributes(selection)$dist.sd = d.sd
if (plot) {
hist(d)
abline(v=d.m,lty=2,col="green")
abline(v=d.m + (d.sd*2),lty=2,col="red")
}
return(selection)
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
positive = read.delim("RawData/positifs.uniq.annotated.txt",
sep="\t",
header = TRUE)
columns = names(positive)
columns.info = c("id", "dilution", "species_name", "taxid", "true", "sequence")
columns.counts= columns[grep("^sample\\.",columns)]
positive.count = t(positive[,columns.counts])
motus = as.data.frame(positive[,columns.info])
positive.motus = data.frame(dilution = as.numeric(motus$dilution)/2,
species = as.character(motus$species_name),
taxid = as.integer(motus$taxid),
true = motus$true == "True"
)
samples.names = rownames(positive.count)
samples = t(simplify2array(strsplit(samples.names,split="_")))
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] "sample.TM" "POS" "d16" "1" "a" "A1"
# [2,] "sample.TM" "POS" "d16" "1" "a" "B1"
# [3,] "sample.TM" "POS" "d16" "1" "b" "A2"
# [4,] "sample.TM" "POS" "d16" "1" "b" "B2"
# [5,] "sample.TM" "POS" "d16" "2" "a" "A1"
# [6,] "sample.TM" "POS" "d16" "2" "a" "B1"
samples = as.data.frame(samples[,3:6])
names(samples) = c("dilution","repeats","PCR","Plate")
positive.samples = data.frame(dilution = 32%/%as.integer(substr(as.character(samples$dilution),2,10)),
repeats = interaction(samples[,2:4],drop = TRUE)
)
rownames(positive.samples)= samples.names
rownames(positive.count) = samples.names
rownames(positive.motus) = positive$id
colnames(positive.count) = positive$id
plants.16 = positive.motus[positive.motus$true,][,c(2,3,1)]
plants.16 = plants.16[order(1/plants.16$dilution),]
plants.16$log10.dilution = - seq_len(nrow(plants.16)) / log(10)*log(2)
plants.16$dilution = 1/(2^seq_len(nrow(plants.16)))
usethis::use_data(positive.samples,overwrite = TRUE)
usethis::use_data(positive.motus,overwrite = TRUE)
usethis::use_data(positive.count,overwrite = TRUE)
usethis::use_data(plants.16,overwrite = TRUE)
positive.clean = read.delim("RawData/positifs.uniq.annotated.clean.txt",
sep="\t",
header = TRUE)
columns = names(positive.clean)
columns.info = c("id", "dilution", "species_name", "taxid", "true", "sequence")
columns.counts= columns[grep("^sample\\.",columns)]
positive.clean.count = t(positive.clean[,columns.counts])
motus.clean = as.data.frame(positive.clean[,columns.info])
positive.clean.motus = data.frame(dilution = as.numeric(motus.clean$dilution)/2,
species = as.character(motus.clean$species_name),
taxid = as.integer(motus.clean$taxid),
true = motus.clean$true == "True"
)
samples.names = rownames(positive.clean.count)
samples = t(simplify2array(strsplit(samples.names,split="_")))
samples = as.data.frame(samples[,3:6])
names(samples) = c("dilution","repeats","PCR","Plate")
positive.clean.samples = data.frame(dilution = 32%/%as.integer(substr(as.character(samples$dilution),2,10)),
repeats = interaction(samples[,2:4],drop = TRUE)
)
rownames(positive.clean.samples)= samples.names
rownames(positive.clean.count) = samples.names
rownames(positive.clean.motus) = positive.clean$id
colnames(positive.clean.count) = positive.clean$id
usethis::use_data(positive.clean.samples,overwrite = TRUE)
usethis::use_data(positive.clean.motus,overwrite = TRUE)
usethis::use_data(positive.clean.count,overwrite = TRUE)
#
# Litter/Soil dataset
#
guiana = read.delim("RawData/litiere_ins_cl97_agg_filt_tax.tab",
header = TRUE,
sep="\t")
columns = names(guiana)
columns.info = c("id","best_identity.order_filtered_embl_r136_noenv_INS",
"taxid",
"phylum_name","order_name","class_name","family_name","genus_name","species_name",
"sequence")
columns.counts= columns[grep("^sample\\.",columns)]
samples.names = gsub(pattern = "sample.",
replacement = "",
columns.counts)
guiana.count = t(guiana[,columns.counts])
motus = as.data.frame(guiana[,columns.info])
guiana.motus = data.frame(id = paste("EUK",sprintf("%06d",1:nrow(motus)),sep=""),
best_id = motus$best_identity.order_filtered_embl_r136_noenv_INS,
taxid = as.integer(motus$taxid),
species = factor(as.character(motus$species_name)),
genus = factor(as.character(motus$genus_name)),
family = factor(as.character(motus$family_name)),
class = factor(as.character(motus$class_name)),
order = factor(as.character(motus$order_name)),
phylum = factor(as.character(motus$phylum_name)),
sequence = as.character(motus$sequence),
stringsAsFactors = FALSE
)
samples = read.delim("RawData/Litiere_sample_list.txt",header=TRUE)
guiana.samples = samples[samples.names,]
guiana.samples$sample = as.factor(sub("_r.$","",samples.names))
rownames(guiana.count) = samples.names
colnames(guiana.count) = guiana.motus$id
rownames(guiana.motus) = guiana.motus$id
usethis::use_data(guiana.samples,overwrite = TRUE)
usethis::use_data(guiana.motus,overwrite = TRUE)
usethis::use_data(guiana.count,overwrite = TRUE)
Version: 1.0
RestoreWorkspace: Default
SaveWorkspace: Default
AlwaysSaveHistory: Default
EnableCodeIndexing: Yes
UseSpacesForTab: Yes
NumSpacesForTab: 2
Encoding: ISO-8859-1
RnwWeave: knitr
LaTeX: pdfLaTeX
AutoAppendNewline: Yes
BuildType: Package
PackageUseDevtools: Yes
PackageInstallArgs: --no-multiarch --with-keep.source
File added
File added
File added
File added
File added
File added
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 2031 2071" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.41421;">
<g transform="matrix(1,0,0,1,-192,-982)">
<g id="Main-Plot">
<g>
<g id="Grille">
<g transform="matrix(1.1808,0,0,1,-75.4118,0)">
<g transform="matrix(1,0,0,1.31073,-19.234,-172.262)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,975.279)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,811.344)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,647.41)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,1303.15)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,319.541)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,155.607)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,-8.32717)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,1139.21)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,483.476)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
</g>
<g transform="matrix(3.34494e-16,1.1808,-1,2.83277e-16,3205.71,544.557)">
<g transform="matrix(1,0,0,1.31073,-19.234,-172.262)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,975.279)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,811.344)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,647.41)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,1303.15)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,319.541)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,155.607)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,-8.32717)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,1139.21)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
<g transform="matrix(1,0,0,1.31073,-19.234,483.476)">
<path d="M436.328,1027.97L1919.68,1027.97" style="fill:none;stroke-width:50.1px;stroke:rgb(181,181,181);"/>
</g>
</g>
</g>
</g>
<g id="Manhattan-distance">
<g transform="matrix(1.01074,0,0,1.02216,-24.6851,-56.3204)">
<clipPath id="_clip1">
<path d="M1863.49,1501.96L718.479,1502.83L720.193,2321.91"/>
</clipPath>
<g clip-path="url(#_clip1)">
<g transform="matrix(0.989373,0,0,0.978321,24.4228,55.0994)">
<path d="M731.553,2320.07L1041.96,2321.26L1869.39,1502.84" style="fill:none;stroke-width:20.83px;stroke:rgb(239,159,75);"/>
</g>
</g>
<path d="M1863.49,1501.96L718.479,1502.83L720.193,2321.91" style="fill:none;stroke-width:20.5px;stroke:rgb(239,159,75);"/>
</g>
<g transform="matrix(1,0,0,1,-8.23449,-149.065)">
<path d="M745.363,2464.19L745.61,1981.62L894.445,1981.51L893.831,1816.25L1221.66,1817.42L1222.61,1674.94L1870.55,1673.53" style="fill:none;stroke-width:20.83px;stroke:rgb(239,159,75);"/>
</g>
</g>
<g id="Euclidean-distance" transform="matrix(0.703395,-0.510486,0.510486,0.703395,-942.486,881.423)">
<g transform="matrix(-1.21281,-1.91042e-15,-5.1683e-15,18.1142,3042.18,-42457.3)">
<path d="M723.133,2480.78L2039.58,2480.04" style="fill:none;stroke-width:1.87px;stroke:rgb(31,146,28);"/>
</g>
<g transform="matrix(1.73227,-8.453e-16,7.24543e-16,1.73227,700.347,-1893.39)">
<text x="183.268px" y="2487.83px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">Euclidean distance</text>
</g>
<g transform="matrix(1.40197,1.01747,-1.01747,1.40197,3635.4,-1896.41)">
<text x="183.268px" y="2487.83px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">Manhattan distance</text>
</g>
<g transform="matrix(1.70572,-0.302138,0.302138,1.70572,92.3532,-1423.68)">
<text x="183.268px" y="2487.83px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">Chebyshev distance</text>
</g>
</g>
<g transform="matrix(1,0,0,1,-7.03869,-1.75967)">
<path d="M1869.12,1514.53L1052.81,2325.83L741.235,2322.67" style="fill:none;stroke-width:20.83px;stroke-linecap:butt;stroke:rgb(201,0,157);"/>
</g>
<g id="Point-B" transform="matrix(1,0,0,1,330.868,1784.29)">
<g transform="matrix(1,0,0,1,2.98908,0)">
<ellipse cx="381.618" cy="545.025" rx="28.788" ry="32.295" style="fill:rgb(235,235,235);stroke-width:62.5px;stroke:rgb(0,19,255);"/>
</g>
<g transform="matrix(2.92627,0,0,2.04123,-334.325,-1052.74)">
<text x="229.007px" y="733.807px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">A</text>
</g>
</g>
<g id="Point-B1" transform="matrix(1,0,0,1,1080.14,962.633)">
<g transform="matrix(1,0,0,1,402.614,0)">
<ellipse cx="381.618" cy="545.025" rx="28.788" ry="32.295" style="fill:rgb(235,235,235);stroke-width:62.5px;stroke:rgb(255,0,6);"/>
</g>
<g transform="matrix(2.92627,0,0,2.04123,65.3005,-1052.74)">
<text x="229.007px" y="733.807px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">B</text>
</g>
</g>
<g id="Coordinates">
<g id="B">
<g id="Xb">
<g id="Xb1" transform="matrix(1.40046e-16,-2.28712,1,6.12323e-17,-458.914,3473.11)">
<path d="M254.53,2321.59L898.365,2321.59" style="fill:none;stroke-width:5.9px;stroke-linecap:butt;stroke-dasharray:5.9,5.9,5.9,0;stroke:black;"/>
</g>
<g transform="matrix(20.9725,0,1.97215e-31,20.9725,-12015.1,-59666.6)">
<text x="658.77px" y="2988.33px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:6.548px;fill:black;">x</text>
<text x="662.044px" y="2990.51px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:3.817px;fill:black;">B</text>
</g>
</g>
<g id="Yb">
<g id="Yb1" transform="matrix(2.53289,0,0,0.949467,-314.832,-697.08)">
<path d="M254.53,2321.59L898.365,2321.59" style="fill:none;stroke-width:5.45px;stroke-linecap:butt;stroke-dasharray:5.45,5.45,5.45,0;stroke:black;"/>
</g>
<g transform="matrix(20.9725,0,1.97215e-31,20.9725,-13626.2,-61124.7)">
<text x="658.77px" y="2988.33px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:6.548px;fill:black;">y</text>
<text x="662.044px" y="2990.51px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:3.817px;fill:black;">B</text>
</g>
</g>
</g>
<g id="A">
<g id="Ya">
<g id="Ya1" transform="matrix(0.865442,-6.16298e-33,0,1,109.585,4.54747e-13)">
<path d="M254.53,2321.59L898.365,2321.59" style="fill:none;stroke-width:11.14px;stroke-linecap:butt;stroke-dasharray:11.14,11.14,11.14,0;stroke:black;"/>
</g>
<g transform="matrix(20.9725,0,0,20.9725,-13626.2,-60326.8)">
<text x="658.77px" y="2988.33px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:6.548px;fill:black;">y</text>
<text x="662.044px" y="2990.51px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:3.817px;fill:black;">A</text>
</g>
</g>
<g id="Xa">
<g id="Xa1" transform="matrix(6.08856e-17,-0.994338,1,6.12323e-17,-1605.05,3144.05)">
<path d="M254.53,2321.59L898.365,2321.59" style="fill:black;stroke-width:10.45px;stroke-linecap:butt;stroke-dasharray:10.45,10.45,10.45,0;stroke:black;"/>
</g>
<g transform="matrix(20.9725,0,0,20.9725,-13160.4,-59666.6)">
<text x="658.77px" y="2988.33px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:6.548px;fill:black;">x</text>
<text x="662.044px" y="2990.51px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:3.817px;fill:black;">A</text>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 2021 852" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.41421;">
<g transform="matrix(1,0,0,1,-187,-683)">
<g>
<g>
<g transform="matrix(0.824429,0,0,0.824429,40.8885,111.226)">
<rect x="195.263" y="711.481" width="997.627" height="997.627" style="fill:rgb(235,235,235);stroke-width:20.22px;stroke:black;"/>
</g>
<g>
<g transform="matrix(1,0,0,1,324.539,-65.9235)">
<ellipse cx="477.16" cy="995.163" rx="110.023" ry="109.093" style="fill:rgb(248,0,230);"/>
</g>
<g transform="matrix(1.76539,0,0,1.76539,-62.3224,-805.515)">
<text x="472.748px" y="995.259px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">B</text>
</g>
</g>
<g>
<ellipse cx="477.16" cy="995.163" rx="110.023" ry="109.093" style="fill:rgb(82,110,255);"/>
<g transform="matrix(1.76539,0,0,1.76539,-386.861,-739.592)">
<text x="472.748px" y="995.259px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">A</text>
</g>
</g>
<g>
<g transform="matrix(1,0,0,1,291.652,223.089)">
<ellipse cx="477.16" cy="995.163" rx="110.023" ry="109.093" style="fill:rgb(109,255,87);"/>
</g>
<g transform="matrix(1.76539,0,0,1.76539,-97.6439,-516.503)">
<text x="472.748px" y="995.259px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">D</text>
</g>
</g>
<g transform="matrix(1,0,0,1,-17.2537,10.505)">
<text x="245.684px" y="752.356px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">Environment 1</text>
</g>
<g>
<g transform="matrix(1,0,0,1,-9.40327,285.266)">
<ellipse cx="477.16" cy="995.163" rx="110.023" ry="109.093" style="fill:rgb(255,255,49);"/>
</g>
<g transform="matrix(1.76539,0,0,1.76539,-398.699,-454.326)">
<text x="472.748px" y="995.259px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">C</text>
</g>
</g>
</g>
<g>
<g transform="matrix(0.824429,0,0,0.824429,1209.24,111.226)">
<rect x="195.263" y="711.481" width="997.627" height="997.627" style="fill:rgb(235,235,235);stroke-width:20.22px;stroke:black;"/>
</g>
<g transform="matrix(0.333632,0,0,0.333632,1745.99,939.675)">
<g transform="matrix(1,0,0,1,324.539,-65.9235)">
<ellipse cx="477.16" cy="995.163" rx="110.023" ry="109.093" style="fill:rgb(80,254,255);"/>
</g>
<g transform="matrix(1.76539,0,0,1.76539,-62.3224,-805.515)">
<text x="472.748px" y="995.259px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">G</text>
</g>
</g>
<g transform="matrix(1,0,0,1,1165.64,10.505)">
<text x="245.684px" y="752.356px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">Environment 1</text>
</g>
<g transform="matrix(0.333632,0,0,0.333632,1563.39,529.401)">
<g transform="matrix(1,0,0,1,324.539,-65.9235)">
<ellipse cx="477.16" cy="995.163" rx="110.023" ry="109.093" style="fill:rgb(248,0,230);"/>
</g>
<g transform="matrix(1.76539,0,0,1.76539,-62.3224,-805.515)">
<text x="472.748px" y="995.259px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">B</text>
</g>
</g>
<g transform="matrix(0.333632,0,0,0.333632,1745.51,807.014)">
<g transform="matrix(1,0,0,1,324.539,-65.9235)">
<ellipse cx="477.16" cy="995.163" rx="110.023" ry="109.093" style="fill:rgb(255,201,226);"/>
</g>
<g transform="matrix(1.76539,0,0,1.76539,-62.3224,-805.515)">
<text x="472.748px" y="995.259px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">F</text>
</g>
</g>
<g transform="matrix(0.333632,0,0,0.333632,1711.84,590.465)">
<g transform="matrix(1,0,0,1,324.539,-65.9235)">
<ellipse cx="477.16" cy="995.163" rx="110.023" ry="109.093" style="fill:rgb(255,95,111);"/>
</g>
<g transform="matrix(1.76539,0,0,1.76539,-62.3224,-805.515)">
<text x="472.748px" y="995.259px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:50px;fill:black;">E</text>
</g>