https://github.com/aimergdiaz/sociovirology_lab
In this laboratory practice, we will investigate how variations in viral genetics lead to a differential impact on plant growth and defense trade-off using the compatible Nicotiana benthamiana / Turnip Mosaic Virus pathosystem.
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
✓DOI references
Found 1 DOI reference(s) in README -
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (6.8%) to scientific vocabulary
Repository
In this laboratory practice, we will investigate how variations in viral genetics lead to a differential impact on plant growth and defense trade-off using the compatible Nicotiana benthamiana / Turnip Mosaic Virus pathosystem.
Basic Info
- Host: GitHub
- Owner: AimerGDiaz
- License: gpl-3.0
- Language: TeX
- Default Branch: main
- Size: 481 MB
Statistics
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
Growth & Defense trade-off in Nicotiana benthamiana and Turnip Mosaic
Virus interaction
Introduction
Plant viruses occur globally and have a profound impact on plant evolution, population structure, and agricultural practices. As obligate biotrophs, these intracellular nanorganisms depend entirely on their hosts survival to complete their replication cycle, propagate, and disperse. In response, plants have evolved an array of defenses to counteract viral infection, often leading to a trade-off between growth and defense. This trade-off is central to plant-virus interactions, as mounting a defense response frequently comes at the cost of reduced growth and reproduction [1]. Understanding how plants prioritize growth or defense in viral infection context is essential to developing effective crop protection methods, making it a pressing issue in agricultural research.
In this laboratory practice, we will investigate how variations in viral genetics lead to a differential impact on plant growth and defense trade-off using the compatible Nicotiana benthamiana / Turnip Mosaic Virus pathosystem.
Nicotiana benthamiana, a species susceptible to a wide range of viruses, serves as an important model organism for research in molecular plant sciences and genetics. The single-stranded RNA virus Turnip Mosaic Virus (TuMV) is a widespread plant pathogen known to infect a broad range of host species, causing significant agricultural losses. Today We will infect N. benthamiana plants with two TuMV constructs: TuMV-6K2-GFP (6K2G) and TuMV-HCPro expressing free GFP (HCG) to evaluate the growth-defense trade-off. These constructs allow us to assess how specific viral proteins influence the growth and defense balance. By infecting individual plants with each construct and with a mix of both constructs, we aim to determine which virus and growth effects prevail under mixed infections. As a negative control, plants will be infiltrated with Agrobacterium expressing free GFP to account for agroinfiltration effects.
The two viral constructs of our growth impact contest are:
TuMV 6K2-GFP (6K2G) construct developed by [2]
TuMV HCPro expressing free GFP (HCG) construct developed by [3]
We will then determine disease symptoms by evaluating at 15 days post-infection the degree of GFP expression using a UV torch in plant leaves and quantifying viral accumulation to compare these traits between the two viral strains as well with the combinatory treatment exploring the relationships between TuMV genetics and their growth impact on N. benthamiana
Results
Relative fresh weight
``` r TuMVFW <- read.csv("Data/BI1293FWRelative.csv", sep = ",", header = T) TuMVFW$Construct <- factor(TuMV_FW$Construct, levels = c("Mock","GFP", "Hcpro","6K2", "HCproX6K2"))
Average per contruct
averageweights <- ddply(TuMVFW, .(Construct), summarize, AvgWeight = mean(FW.g.))
averageweightscontrol <- subset(averageweights, Construct == "Mock")
Relative weigth to GFP average
TuMVFW$RelativeWeight <- TuMVFW$FW.g. / averageweightscontrol$AvgWeight
colors <- c( "6K2" = "#67001F", "HCproX6K2" = "#CE1256", "Hcpro" = "#DF65B0" , "GFP" = "#C994C7", "Mock" = "black")
Plot
TuMVFWplot <- ggplot(TuMVFW, aes(x=Construct, y=RelativeWeight,fill = Construct)) + geombar(position = positiondodge(width = 0.9), stat = 'summary' ) + geomerrorbar(position = positiondodge(width = 0.9),stat = 'summary', width = 0.4,alpha = 0.5) + geomjitter( stat = 'identity', shape = 16, position = positionjitterdodge(0.15), size = 0.8, alpha = 0.5, color = "grey20") + labs(title = "Disease severity in fresh weight loss of 15dpi Plants", y = "Relative Fresh weight (mg)", x = "Agroinfiltration construct" ) + scalefillmanual(values = colors) + themeclassic(basesize = 14) + theme(axis.text.x = elementtext(angle = 90), legend.position = "bottom", plot.title = elementtext(hjust = 0.5))
Adding signifance test
comparisons <- list( c( "Mock", "Hcpro"), c("Mock","GFP"), c( "Mock","6K2"), c("Mock","HCproX6K2"), c("6K2","HCproX6K2"))
TuMVFWplotsig <- TuMVFWplot + statcomparemeans(comparisons = comparisons, method = "t.test", label = "p.signif") TuMVFWplotsig ```
## No summary function supplied, defaulting to `mean_se()`
## No summary function supplied, defaulting to `mean_se()`
<!-- -->
r
ggsave(device = svg, "Results/FreshWeight_TuMV.svg", plot = TuMV_FW_plot_sig, width=8, height=6)
## No summary function supplied, defaulting to `mean_se()`
## No summary function supplied, defaulting to `mean_se()`
Why is the lab called Sociovirology ?
GFP and Viral titers preliminar analysis
``` r qPCRsraw <- read.table( "Data/NbTuMVGFPCP6K2.csv", sep = ",", header = T) qPCRsfil <- qPCRsraw[qPCRsraw$Cq != "N/A",] qPCRsfil$Cq <- as.numeric(qPCRsfil$Cq) qPCRsfilavg <- ddply(qPCRsfil, .(Primer, Genotype,Replicate), summarize, AvgCt = mean(Cq) ) qPCRsPP2A <- qPCRsfilavg[qPCRsfilavg$Primer =="PP2A",] qPCRsTarget <- qPCRsfilavg[qPCRsfilavg$Primer !="PP2A",]
qPCRsDCt <- merge(x = qPCRsPP2A , y = qPCRsTarget, by =c("Genotype","Replicate")) qPCRsDCt$DCt <- qPCRsDCt$AvgCt.y - qPCRsDCt$AvgCt.x
qPCRsDCt$log2DDCt <- 2^-( qPCRsDCt$DCt )
qPCRsDCt$Primer.y <- factor(qPCRsDCt$Primer.y , levels = c("GFP","6K2-GFP","TuMV CP")) TuMVtitters <- ggplot(qPCRsDCt, aes(x = Genotype, y = log2DDCt, fill = Genotype , group = Genotype)) + geombar(position = positiondodge(width = 0.9), stat = 'summary', fun.data = meanse, alpha = 0.6) + geomerrorbar(position = positiondodge(width = 0.9), stat = 'summary', fun.data = meanse, width = 0.4) + facetwrap(~ Primer.y , scales = "free") + ylab("Relative expression to PP2A") + xlab("Gene expressed") + geompoint(position = positiondodge(width = 0.9), alpha = 0.5, size = 0.8, color = "grey20" ) + themeclassic(basesize = 14) + theme(axis.text.x = elementtext(angle = 90,size = 14)) TuMV_titters ```
<!-- -->
Lab practice 2024: GFP and Viral titers
``` r qPCRsraw <- read.table( "Data/AllResults.csv", sep = "\t", header = T)
qPCRsfilavg <- ddply(qPCRsraw, .(Primer, Construct,SampleGroup), summarize, AvgCt = mean(CQ), SdCt = sd(CQ) )
qPCRsavgsd <- merge(qPCRsraw,qPCRsfilavg, by =c("Primer","Construct","SampleGroup") )
write.csv(qPCRsfilavg, "Results/qPCRsavgsd") qPCRsPP2A <- qPCRsfilavg[qPCRsfil_avg$Primer =="PP2A",]
PP2ACQ<- ggplot(qPCRsPP2A, aes(x = SampleGroup, y = AvgCt, fill = Construct , group = Construct)) + geombar(position = positiondodge(width = 0.9), stat = 'summary', fun.data = meanse, alpha = 0.6) + geomerrorbar(position = positiondodge(width = 0.9), stat = 'summary', fun.data = meanse, width = 0.4) + facetwrap(~ Construct , scales = "free") + geompoint(position = positiondodge(width = 0.9), alpha = 0.5, size = 0.8, color = "grey20" ) + themeclassic(basesize = 14) PP2ACQ ```
<!-- -->
r
ggsave(device = svg, "Results/PP2A_CQ.svg", plot = PP2A_CQ, width=10, height=6)
qPCRs_avg_sd_fil <- qPCRs_avg_sd[!grepl("6K2_ERV|HX6_FEM|HX6_5",qPCRs_avg_sd$Sample_Group),]
qPCRs_PP2A_fil <- qPCRs_avg_sd_fil[qPCRs_avg_sd_fil$Primer =="PP2A",]
PP2A_CQ_fil <-ggplot(qPCRs_PP2A_fil, aes(x = Sample_Group, y = Avg_Ct, fill = Construct , group = Construct)) +
geom_bar(position = position_dodge(width = 0.9), stat = 'summary', fun.data = mean_se, alpha = 0.6) +
geom_errorbar(position = position_dodge(width = 0.9),
stat = 'summary', fun.data = mean_se, width = 0.4) + facet_wrap(~ Construct , scales = "free") + geom_point(position = position_dodge(width = 0.9), alpha = 0.5, size = 0.8, color = "grey20" ) + theme_classic(base_size = 14)
PP2A_CQ_fil
<!-- -->
``` r ggsave(device = svg, "Results/PP2ACQfil.svg", plot = PP2ACQfil, width=10, height=6)
qPCRsTarget <- qPCRsavgsdfil[qPCRsavgsd_fil$Primer !="PP2A",]
qPCRsTargetCQ<- ggplot(qPCRsTarget, aes(x = SampleGroup, y = AvgCt, fill = Construct , group = Construct)) + geombar(position = positiondodge(width = 0.9), stat = 'summary', fun.data = meanse, alpha = 0.6) + geomerrorbar(position = positiondodge(width = 0.9), stat = 'summary', fun.data = meanse, width = 0.4) + facetwrap(~ Construct , scales = "free") ggsave(device = svg, "Results/qPCRsTargetCQ.svg", plot = qPCRsTargetCQ, width=10, height=6)
qPCRsfilavg <- qPCRsfilavg[!grepl("6K2ERV|HX6FEM|HX65",qPCRsfilavg$SampleGroup),] write.csv(qPCRsfilavg, "Results/qPCRsavgsd_filtered.csv")
qPCRsfilPP2A <- qPCRsfilavg[qPCRsfilavg$Primer =="PP2A",] qPCRsfilTarget <- qPCRsfilavg[qPCRsfilavg$Primer !="PP2A",]
qPCRsDCt <- merge(x = qPCRsfilPP2A , y = qPCRsfilTarget, by =c("Construct","SampleGroup"))
qPCRsDCt$DCt <- qPCRsDCt$AvgCt.y - qPCRsDCt$Avg_Ct.x
qPCRsDCt$RelExpr <- 2^-( qPCRsDCt$DCt )
qPCRsDCt$Primer.y <- mgsub(pattern = c("6K2","CP"), replacement = c("6K2-GFP","TuMV-CP"), x = qPCRsDCt$Primer.y ) qPCRsDCt$Construct <- gsub(pattern = "HX6", "6K2xDHC", qPCRsDCt$Construct)
qPCRsDCt$Construct <- factor(qPCRsDCt$Construct , levels = c("GFP","HCPro","6K2","6K2xDHC")) qPCRsDCt$Primer.y <- factor(qPCRsDCt$Primer.y , levels = c("GFP","6K2-GFP","TuMV-CP"))
TuMVRENoCP <- ggplot(qPCRsDCt[qPCRsDCt$Primer.y != "TuMV-CP",], aes(x = Construct, y = RelExpr, fill = Construct , group = Construct)) + geombar(position = positiondodge(width = 0.9), stat = 'summary', fun.data = meanse, alpha = 0.6) + geomerrorbar(position = positiondodge(width = 0.9), stat = 'summary', fun.data = meanse, width = 0.4) + facetwrap(~ Primer.y , scales = "free") + ylab("Relative expression to PP2A") + xlab("Plant agroinfiltrated") + geomtextrepel( color ="red", aes(label = SampleGroup, hjust = -0.05, vjust = -0.05)) + geompoint(position = positiondodge(width = 0.9), alpha = 0.5, size = 0.8, color = "grey20" ) + themeclassic(basesize = 14) + theme(axis.text.x = elementtext(angle = 90,size = 14), legend.title = elementblank(),legend.position = "none") ggsave(device = svg, "Results/TuMVRENoCP.svg", plot = TuMVRENoCP, width=10, height=6) TuMVRENoCP ```
<!-- -->
r
TuMV_RE_CP <- ggplot(qPCRs_DCt[qPCRs_DCt$Primer.y == "TuMV-CP",], aes(x = Construct, y = log2(RelExpr), fill = Construct , group = Construct)) +
geom_bar(position = position_dodge(width = 0.9), stat = 'summary', fun.data = mean_se, alpha = 0.6) +
geom_errorbar(position = position_dodge(width = 0.9),
stat = 'summary', fun.data = mean_se, width = 0.4) + facet_wrap(~ Primer.y , scales = "free") + ylab("Relative expression to PP2A") + xlab("Plant agroinfiltrated") +
geom_text_repel( color ="red",
aes(label = Sample_Group, hjust = -0.05, vjust = -0.05)) +
geom_point(position = position_dodge(width = 0.9), alpha = 0.5, size = 0.8, color = "grey20" ) + theme_classic(base_size = 14) +
theme(axis.text.x = element_text(angle = 90,size = 14), legend.title = element_blank(),legend.position = "none")
ggsave(device = svg, "Results/TuMV_RE_CP.svg", plot = TuMV_RE_CP, width=10, height=6)
TuMV_RE_CP
<!-- -->
r
ggsave(device = svg, "Results/qPCRs_DDCt_plot.svg", plot = qPCRs_DDCt_plot, width=10, height=6)
ggsave(device = svg, "Results/qPCRs_DDCt_others_plot.svg", plot = qPCRs_DDCt_plot_others, width=10, height=6)
>
Which virus prevailed in the contest ?
``` r TuMVRECP <- ggplot(qPCRsDCt[qPCRsDCt$Primer.y == "TuMV-CP",], aes(x = Construct, y = log2(RelExpr), fill = Construct , group = Construct)) + geombar(position = positiondodge(width = 0.9), stat = 'summary', fun.data = meanse, alpha = 0.6) + geomerrorbar(position = positiondodge(width = 0.9), stat = 'summary', fun.data = meanse, width = 0.4) + facetwrap(~ Primer.y , scales = "free") + ylab("Log2 Relative expression to PP2A") + xlab("Plant agroinfiltrated") + geompoint(position = positiondodge(width = 0.9), alpha = 0.5, size = 0.8, color = "grey20" ) + themeclassic(basesize = 14) + theme(axis.text.x = elementtext(angle = 90,size = 14), legend.title = element_blank(),legend.position = "none")
comparisons <- list( c("GFP","HCPro"), c("HCPro", "6K2xDHC"), c( "HCPro", "6K2"), c("6K2", "6K2xDHC"))
qPCRsDCtsigplot <- TuMVRECP + statcomparemeans(comparisons = comparisons, method = "t.test", label = "p.signif") qPCRsDCtsigplot ```
<!-- -->
r
ggsave(device = svg, "Results/TuMV_RE_CP_Sig.svg", plot = qPCRs_DCt_sig_plot, width=10, height=6)
Correlation analysis
r
library("ggstatsplot", quietly = T)
## You can cite this package as:
## Patil, I. (2021). Visualizations with statistical details: The 'ggstatsplot' approach.
## Journal of Open Source Software, 6(61), 3167, doi:10.21105/joss.03167
``` r
GFPphenotypeexpression <- read.table( "Data/BI1293GFPperCMcor.csv", sep = ",", header = T)
Corplot <- ggplot(data = GFPphenotypeexpression, aes(x = CQ.GFP, y = AreaGFP.cm2.)) + geompoint() +
statcor( method = "pearson", digits = 2)+
geomtextrepel( color ="red",
aes(label = Construct, hjust = -0.05, vjust = -0.05)) +
themeclassic(basesize = 14) +
theme(axis.text.x = elementtext(angle = 45, vjust = 1, hjust=1, size = 10),
axis.text.y = element_text(size = 10))
Cor_plot ```
<!-- -->
r
#ggstatsplot::ggscatterstats(data = GFP_phenotype_expression, x = CQ.GFP, y = GFP.cm2, bf.message = F) + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
References
Owner
- Name: Aimer_G_Diaz
- Login: AimerGDiaz
- Kind: user
- Repositories: 2
- Profile: https://github.com/AimerGDiaz
GitHub Events
Total
- Push event: 21
- Create event: 2
Last Year
- Push event: 21
- Create event: 2