Commit a9bf129b authored by Digp's avatar Digp
Browse files

Deleted old folders

parent 979b28db
Pipeline #3091 skipped
#!/usr/bin/Rscript
## EXAMPLE 2
## Description: From a dataset of DNA-TF, plot the most frequent amino acids
## interacting with phosphate, sugar and base.
## Author: Diego Gallego
## ----------------------------------------------------------------------------
## Preprocess
## ----------------------------------------------------------------------------
## Load necessary packages for the example
library(veriNA3d)
library(bio3d)
plotAA <- function(ta, main) {
color <- rainbow(n=20)
names(color) <- c("ALA", "ARG", "ASN", "ASP", "CYS", "GLN", "GLU", "GLY",
"HIS", "ILE", "LEU", "LYS", "MET", "PHE", "PRO", "SER",
"THR", "TRP", "TYR", "VAL")
par(mar=c(0, 3, 1, 0.6))
a <- barplot(ta[5:1]/sum(ta), xlim=c(0, 0.7), las=2, border=0,
#cex.lab=1, cex.axis=1, font=1, col=color[names(ta[1:5])],
xaxt='n', font=1, col=color[names(ta[5:1])],
cex.names=1.5, main=main, cex.main=1.5, horiz=TRUE)
}
## ----------------------------------------------------------------------------
## Get Raw data
cat("Getting data\n")
## ----------------------------------------------------------------------------
path <- "transcription_factor_pdb/"
pdblist <- dir(path, pattern=".ent.gz")
pdblist <- gsub(".ent.gz", "", pdblist)
## Get structural data
aantinfo <- pipeProtNucData(pdbID=pdblist, path=path,
extension=".ent.gz", cutoff=10, cores=1)
## ----------------------------------------------------------------------------
## Clean data. Raw -> Tidy
cat("Cleaning data\n")
## ----------------------------------------------------------------------------
## Filter to keep only closest contacts using distance < 3 Angstroms
intdata <- aantinfo[aantinfo$distance < 3, ]
## Create objects of interest
P <- c("OP1", "OP2", "OP3")
S <- c("O4'", "O3'", "O5'")
B <- c("N1", "N2", "N3", "N4", "N6", "N7", "O2", "O4", "O6")
ta_P <- sort(table(intdata[intdata$elety_A %in% P, "resid_B"]), decreasing=TRUE)
ta_S <- sort(table(intdata[intdata$elety_A %in% S, "resid_B"]), decreasing=TRUE)
ta_B <- sort(table(intdata[intdata$elety_A %in% B, "resid_B"]), decreasing=TRUE)
## ----------------------------------------------------------------------------
## Exploratory analysis. Plot
cat("Plotting data\n")
## ----------------------------------------------------------------------------
total <- sum(ta_P, ta_S, ta_B)
tiff("example2.tiff", height=10.5, width=16.5, units="cm", res=300)
par(mfrow=c(3, 1), oma=c(4.5, 1, 1, 1))
## Phosphate interactions plot
plotAA(ta_P, main=paste("Phosphate ", round(sum(ta_P)/total*100), "%", sep=""))
## Sugar interactions plot
plotAA(ta_S, main=paste("Sugar ", round(sum(ta_S)/total*100), "%", sep=""))
## Base interactions plot
plotAA(ta_B, main=paste("Base ", round(sum(ta_B)/total*100), "%", sep=""))
axis(side=1, lwd=1.5, cex.axis=2)
title(xlab="Density", cex.lab=2, outer=TRUE)
dev.off()
#!/usr/bin/Rscript
## EXAMPLE 3
## Description: From the whole PDB, create a dataset of RNA structures with Mg
## and a threshold resolution of 2 Angstroms. Then, measure and
## plot the distances between Mg and other atom types.
## Author: Diego Gallego
## ----------------------------------------------------------------------------
## Preprocess
## ----------------------------------------------------------------------------
## Load necessary packages for the example
library(veriNA3d)
library(ggplot2) ## Specific dependency for this example!
library(reshape2) ## Specific dependency for this example!
## ----------------------------------------------------------------------------
## Get Raw data
cat("Getting data\n")
## ----------------------------------------------------------------------------
## From the whole PDB, prepare dataset of interest ============================
## Retrieve ALL entries in the PDB (including latest entries)
pdblist <- queryEntryList(justIDs=FALSE)
## Keep only Nucleic Acid structures solved by diffraction techniques
nalist <- pdblist[which(grepl("nuc", pdblist$type, perl=TRUE) &
pdblist$technique == "diffraction"), "pdbID"]
## Query which structures contain MG
mg <- toupper(unlist(queryAPI(ID="MG", API="ebi", verbose=TRUE,
string1="pdb/compound/in_pdb/", string2="")))
mgnalist <- nalist[which(nalist %in% mg)]
## Query resolution and keep only structures under 2 A
resol <- applyToPDB(mgnalist, queryResol)
mgnalist <- resol[resol[, 2] < 2, 1]
## Check entities in the structures and keep only PDBs with RNA
naent <- applyToPDB(mgnalist, countEntities, as.df=FALSE)
naent <- as.data.frame(do.call(rbind, naent), stringsAsFactors=FALSE)
mgrnalist <- mgnalist[which(naent$RNA > 0)]
## ============================================================================
## Loop over list of PDB IDs
distances <- do.call(rbind, lapply(seq_along(mgrnalist), function(i) {
## Download mmCIF and get entity of Mg
cif <- cifParser(mgrnalist[i])
MG <- cifEntity(cif)[grepl("MAGNE", cifEntity(cif)$pdbx_description), "id"]
## Measure distances between Mg and other entities
return(measureEntityDist(cif, refent=MG, entities="all", cutoff=4, n=NULL))
}))
## ----------------------------------------------------------------------------
## Clean data. Raw -> Tidy
cat("Cleaning data\n")
## ----------------------------------------------------------------------------
Ow <- distances$distance[distances$resid_B == "HOH" & distances$elety_B == "O"]
distances <- distances[distances$resid_B %in% c("A", "C", "G", "U"), ]
Ob <- distances$distance[distances$elety_B %in% c("O2", "O4", "O6")]
Or <- distances$distance[distances$elety_B %in% c("O2'", "O3'", "O4'", "O5'")]
Op <- distances$distance[distances$elety_B %in% c("OP1", "OP2", "OP3")]
Nb <- distances$distance[distances$elety_B %in% c("N1", "N2", "N3", "N7")]
## Data frame with distances per type of aotm
dist <- list(Nb=Nb, Ob=Ob, Or=Or, Op=Op, Ow=Ow)
df <- melt(dist, value.name="Distance"); names(df)[2] <- "atom"
df$atom <- factor(df$atom, levels=c("Ow", "Op", "Or", "Ob", "Nb"))
## ----------------------------------------------------------------------------
## Exploratory analysis. Plot
cat("Plotting data\n")
## ----------------------------------------------------------------------------
tiff("example3.tiff", height=10.5, width=16.5, units="cm", res=300)
colors <- c("#87CEEB", "#6A5ACD", "#F08080", "#DC143C", "#4169E1")
ggplot(df, aes(x=Distance, fill=atom)) + ylab("Frequency") +
scale_fill_manual(values=colors) + scale_y_continuous(breaks=NULL) +
scale_x_continuous(breaks=seq(1.2, 4, 0.4)) +
geom_histogram(binwidth=0.03, color="white") +
theme(panel.grid.minor=element_blank())
dev.off()
## plotM plots a pie chart using ggplot
plotM <- function(x, res, motifs=motifs, motifs2=motifs2) {
df <- data.frame(table(x))
names(df) <- c("motif", "value")
df <- df[order(df$value), ]
fa <- factor(levels(df$motif), levels=c(motifs, motifs2))
pie <- ggplot(df, aes(x="", y=value, fill=motif)) +
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start=0)
blank_theme <- theme_minimal()+
theme(axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.border = element_blank(),
panel.grid=element_blank(),
axis.ticks = element_blank(),
plot.title=element_text(size=14, face="bold"))
pie + scale_fill_manual(values=rainbow(length(levels(fa)))[fa]) + blank_theme +
theme(axis.text.x=element_blank()) + labs(title=res)
}
This image diff could not be displayed because it is too large. You can view the blob instead.
#!/usr/bin/Rscript
## EXAMPLE 4
## Description: Get lists of PDBs containing a 3 RNA modified residues,
## then filter by resolution and execute DSSR. Plot motif in which
## the modified residues are found.
## Author: Diego Gallego
## ----------------------------------------------------------------------------
## Preprocess
## ----------------------------------------------------------------------------
## Load necessary packages for the example
library(veriNA3d)
library(ggplot2) ## Specific dependency for this example!
library(gridExtra) ## Specific dependency for this example!
library(scales) ## Specific dependency for this example!
## Load specific functions for the example
source("dependencies.R")
## ----------------------------------------------------------------------------
## Get Raw data
cat("Getting and cleaning data\n")
## ----------------------------------------------------------------------------
modres <- c("1MA", "6MA", "4SU")
motifs <- c("hairpin-loop", "junction-loop", "ss-non-loop", "internal-loop")
motifs2 <- c("helix")#, "helix-end")
out <- lapply(modres, function(res) {
## Query which structures contain the modres of interest
pdblist <- toupper(unlist(queryAPI(ID=res, API="ebi", verbose=TRUE,
string1="pdb/compound/in_pdb/", string2="")))
## Query resolution and keep only structures under 3 A
resol <- applyToPDB(pdblist, queryResol)
pdblist <- resol[resol[, 2] < 3, 1]
output <- c(); counter <- 0
## Loop over list of PDB IDs
for (i in seq_along(pdblist)) {
tryCatch({
## Execute DSSR
dssrdata <- dssr(pdblist[i])
## ----------------------------------------------------------------------------
## Clean data. Raw -> Tidy
## ----------------------------------------------------------------------------
## Extract data of interest
data <- dssrdata$models$parameters$nts[[1]]
summary <- data$summary[data$nt_name == res]
for (j in seq_along(summary)) {
dat <- unlist(strsplit(summary[j], ","))
ind <- which(dat %in% motifs)
if (length(ind) == 0) {
ind <- which(dat %in% motifs2)
}
if (length(ind) != 0) {
counter <- counter + 1
output[counter] <- dat[ind]
in2 <- which(data$nt_name == res)
## Save neigbouring sequence
write(c(dat[ind],
paste(data$nt_name[(in2-2):(in2+2)], collapse="-")),
file="seq.txt", ncolumns=2, append=T, sep=" ")
}
}
## If DSSR fails with the given structure, do nothing
}, error=function(e) {})
}
return(output)
})
## ----------------------------------------------------------------------------
## Exploratory analysis. Plot
cat("Plotting data\n")
## ----------------------------------------------------------------------------
p <- lapply(1:3, function(i) {
plotM(out[[i]], res=modres[i], motifs=motifs, motifs2=motifs2)
})
tiff("example4.tiff", height=10.5, width=24.75, units="cm", res=300)
grid.arrange(p[[1]], p[[2]], p[[3]], ncol=3)
dev.off()
hairpin-loop C-G-1MA-U-C
hairpin-loop C-G-1MA-U-C
hairpin-loop C-A-1MA-G-U
hairpin-loop C-A-1MA-G-U
hairpin-loop C-G-1MA-U-C
hairpin-loop C-G-1MA-U-C
hairpin-loop C-G-1MA-U-C
hairpin-loop C-G-1MA-U-C
hairpin-loop C-G-1MA-U-C
hairpin-loop C-G-1MA-A-U
hairpin-loop C-G-1MA-U-C
hairpin-loop C-G-1MA-U-C
hairpin-loop C-G-1MA-U-C
hairpin-loop U-G-1MA-A-A
hairpin-loop C-G-1MA-U-C
hairpin-loop C-G-1MA-U-C
hairpin-loop C-G-1MA-U-C
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop C-G-1MA-C-U
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop C-G-1MA-U-C
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop U-G-1MA-A-A
hairpin-loop C-G-1MA-U-C
hairpin-loop U-G-1MA-A-A
hairpin-loop C-A-1MA-G-U
internal-loop U-C-1MA-C-G
ss-non-loop U-C-1MA-C-G
ss-non-loop U-C-1MA-C-G
internal-loop U-C-1MA-C-G
internal-loop U-C-1MA-C-G
hairpin-loop U-G-1MA-A-A
internal-loop U-G-1MA-A-A
hairpin-loop C-G-1MA-U-C
helix DC-DG-6MA-DT-DC
helix DC-DG-6MA-DT-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DA-DC
internal-loop DG-DG-6MA-DT-DC
helix DC-DG-6MA-DT-DC
helix DC-DG-6MA-DT-DC
internal-loop DA-DG-6MA-DT-DC
helix DA-DG-6MA-DT-DC
helix DG-DG-6MA-DT-DC
helix DG-DG-6MA-DT-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DA-DC
helix DA-DG-6MA-DT-DC
helix DA-DG-6MA-DT-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DA-DC
helix DC-DG-6MA-DT-DC
helix DC-DG-6MA-DT-DC
helix DC-DG-6MA-DT-DC
helix DC-DG-6MA-DT-DC
helix DA-DT-6MA-DG-DC
helix DG-DA-6MA-DT-DT
helix DG-DA-6MA-DT-DT
helix DG-DG-6MA-DT-DC
helix DG-DG-6MA-DT-DC
helix DG-DG-6MA-DT-DC
helix DG-DG-6MA-DT-DC
helix DG-DG-6MA-DT-DC
helix DG-DG-6MA-DT-DC
helix DG-DG-6MA-DT-DC
helix DG-DG-6MA-DT-DC
internal-loop DA-DA-6MA-DA-DC
internal-loop DA-DA-6MA-DA-DC
internal-loop DA-DA-6MA-DA-DC
internal-loop DA-DA-6MA-DA-DC
helix DT-DG-6MA-DT-DT
helix DT-DG-6MA-DT-DT
helix DT-DG-6MA-DT-DT
helix DT-DG-6MA-DT-DT
helix DT-DG-6MA-DT-DT
helix DT-DG-6MA-DT-DT
helix DT-DG-6MA-DT-DT
helix DT-DG-6MA-DT-DT
helix DT-DG-6MA-DT-DT
helix DT-DG-6MA-DT-DT
junction-loop G-U-4SU-A-A
junction-loop G-G-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-A-4SU-A-G
ss-non-loop U-A-4SU-C-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop C-G-4SU-A-G
junction-loop C-G-4SU-A-G
junction-loop C-G-4SU-A-G
junction-loop C-G-4SU-A-G
junction-loop C-G-4SU-A-G
junction-loop C-G-4SU-A-G
junction-loop C-G-4SU-A-G
junction-loop C-G-4SU-A-G
junction-loop C-G-4SU-A-G
junction-loop C-G-4SU-A-G
junction-loop G-G-4SU-G-G
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-U-A
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
hairpin-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
ss-non-loop G-G-4SU-G-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-G-4SU-G-G
junction-loop G-U-4SU-G-A
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop A-U-4SU-A-G
junction-loop A-U-4SU-A-G
junction-loop A-U-4SU-A-G
junction-loop A-U-4SU-A-G
junction-loop A-U-4SU-A-G
junction-loop A-U-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-G-4SU-G-G
junction-loop G-G-4SU-G-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop G-A-4SU-A-G
junction-loop A-U-4SU-A-G
junction-loop A-U-4SU-A-G
junction-loop A-U-4SU-A-G
junction-loop A-U-4SU-A-G
junction-loop A-U-4SU-A-G
junction-loop A-U-4SU-A-G
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment