Last updated: 2025-07-01

Checks: 5 2

Knit directory: locust-comparative-genomics/

This reproducible R Markdown analysis was created with workflowr (version 1.7.1). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.


The R Markdown file has unstaged changes. To know which version of the R Markdown file created these results, you’ll want to first commit it to the Git repo. If you’re still working on the analysis, you can ignore this warning. When you’re finished, you can run wflow_publish to commit the R Markdown file and build the HTML.

Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.

The command set.seed(20221025) was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.

Great job! Recording the operating system, R version, and package versions is critical for reproducibility.

Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.

Using absolute paths to the files within your workflowr project makes it difficult for you and others to run your code on a different machine. Change the absolute path(s) below to the suggested relative path(s) to make your code more reproducible.

absolute relative
/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data data
/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/orthofinder/Schistocerca data/orthofinder/Schistocerca
/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/orthofinder/Polyneoptera data/orthofinder/Polyneoptera
/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/orthofinder/Polyneoptera/Results_I2_iqtree/ data/orthofinder/Polyneoptera/Results_I2_iqtree
/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/overlap/Locusts/Venn_ALL_HEAD_Locusts_overlap_table.csv data/overlap/Locusts/Venn_ALL_HEAD_Locusts_overlap_table.csv
/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/overlap/Locusts/Venn_ALL_THORAX_Locusts_overlap_table.csv data/overlap/Locusts/Venn_ALL_THORAX_Locusts_overlap_table.csv
/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/overlap/DEGs_values_allspecies_June2025.csv data/overlap/DEGs_values_allspecies_June2025.csv
/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/overlap/Candidate_genes_LOCUSTS_June2025.csv data/overlap/Candidate_genes_LOCUSTS_June2025.csv

Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

The results in this page were generated with repository version 510c1f0. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish or wflow_git_commit). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:


Ignored files:
    Ignored:    .DS_Store
    Ignored:    analysis/.DS_Store
    Ignored:    analysis/.Rhistory
    Ignored:    analysis/figure/
    Ignored:    code/.DS_Store
    Ignored:    code/scripts/.DS_Store
    Ignored:    code/scripts/pal2nal.v14/.DS_Store
    Ignored:    data/.DS_Store
    Ignored:    data/DEG_results/.DS_Store
    Ignored:    data/DEG_results/Bulk_RNAseq/.DS_Store
    Ignored:    data/DEG_results/Bulk_RNAseq/americana/.DS_Store
    Ignored:    data/DEG_results/Bulk_RNAseq/cancellata/.DS_Store
    Ignored:    data/DEG_results/Bulk_RNAseq/cubense/.DS_Store
    Ignored:    data/DEG_results/Bulk_RNAseq/gregaria/.DS_Store
    Ignored:    data/DEG_results/Bulk_RNAseq/nitens/.DS_Store
    Ignored:    data/WGCNA/.DS_Store
    Ignored:    data/WGCNA/input/.DS_Store
    Ignored:    data/WGCNA/input/Bulk_RNAseq/.DS_Store
    Ignored:    data/WGCNA/output/.DS_Store
    Ignored:    data/WGCNA/output/Bulk_RNAseq/.DS_Store
    Ignored:    data/behavioral_data/.DS_Store
    Ignored:    data/behavioral_data/Raw_data/.DS_Store
    Ignored:    data/list/.DS_Store
    Ignored:    data/list/Bulk_RNAseq/.DS_Store
    Ignored:    data/list/GO_Annotations/.DS_Store
    Ignored:    data/list/excluded_loci/.DS_Store
    Ignored:    data/orthofinder/.DS_Store
    Ignored:    data/orthofinder/Polyneoptera/.DS_Store
    Ignored:    data/orthofinder/Polyneoptera/Results_I2_iqtree/.DS_Store
    Ignored:    data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups/.DS_Store
    Ignored:    data/orthofinder/Polyneoptera/Results_I2_withDaust/.DS_Store
    Ignored:    data/orthofinder/Polyneoptera/Results_I2_withDaust/Orthogroups/.DS_Store
    Ignored:    data/orthofinder/Schistocerca/.DS_Store
    Ignored:    data/orthofinder/Schistocerca/Results_I2/.DS_Store
    Ignored:    data/orthofinder/Schistocerca/Results_I2/Orthogroups/.DS_Store
    Ignored:    data/overlap/.DS_Store
    Ignored:    data/pathway_enrichment/.DS_Store
    Ignored:    data/readcounts/.DS_Store
    Ignored:    data/readcounts/Bulk_RNAseq/.DS_Store
    Ignored:    data/readcounts/RNAi/.DS_Store

Untracked files:
    Untracked:  data/DEG_results/Bulk_RNAseq/americana/DESeq2_results_sva_HeadLeftJoinThorax_americana.csv
    Untracked:  data/DEG_results/Bulk_RNAseq/americana/DESeq2_results_sva_HeadLeftJoinThorax_americana_togregaria.csv
    Untracked:  data/DEG_results/Bulk_RNAseq/cancellata/DESeq2_results_sva_HeadLeftJoinThorax_cancellata.csv
    Untracked:  data/DEG_results/Bulk_RNAseq/cancellata/DESeq2_results_sva_HeadLeftJoinThorax_cancellata_togregaria.csv
    Untracked:  data/DEG_results/Bulk_RNAseq/cubense/DESeq2_results_sva_HeadLeftJoinThorax_cubense.csv
    Untracked:  data/DEG_results/Bulk_RNAseq/cubense/DESeq2_results_sva_HeadLeftJoinThorax_cubense_togregaria.csv
    Untracked:  data/DEG_results/Bulk_RNAseq/gregaria/DESeq2_results_sva_HeadLeftJoinThorax_gregaria.csv
    Untracked:  data/DEG_results/Bulk_RNAseq/gregaria/DESeq2_results_sva_HeadLeftJoinThorax_gregaria_togregaria.csv
    Untracked:  data/DEG_results/Bulk_RNAseq/nitens/DESeq2_results_sva_HeadLeftJoinThorax_nitens.csv
    Untracked:  data/DEG_results/Bulk_RNAseq/nitens/DESeq2_results_sva_HeadLeftJoinThorax_nitens_togregaria.csv
    Untracked:  data/DEG_results/Bulk_RNAseq/piceifrons/DESeq2_results_sva_HeadLeftJoinThorax_piceifrons.csv
    Untracked:  data/DEG_results/Bulk_RNAseq/piceifrons/DESeq2_results_sva_HeadLeftJoinThorax_piceifrons_togregaria.csv
    Untracked:  data/HYPHY_selection/
    Untracked:  data/RefSeq/
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_HeadThorax_americana.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_HeadThorax_cancellata.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_HeadThorax_cubense.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_HeadThorax_gregaria.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_HeadThorax_nitens.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_HeadThorax_piceifrons.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_Head_americana.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_Head_cancellata.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_Head_cubense.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_Head_gregaria.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_Head_nitens.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_Head_piceifrons.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_Thorax_americana.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_Thorax_cancellata.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_Thorax_cubense.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_Thorax_gregaria.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_Thorax_nitens.rds
    Untracked:  data/WGCNA/input/Bulk_RNAseq/SE_Thorax_piceifrons.rds
    Untracked:  data/WGCNA/output/Bulk_RNAseq/gregaria/
    Untracked:  data/cafe5_results/
    Untracked:  data/list/GO_Annotations/DesertLocustR/
    Untracked:  data/list/GO_Annotations/DesertLocustR_0.1.0.tar.gz
    Untracked:  data/list/GO_Annotations/EggNog_Arthropoda_one2one.emapper.annotations
    Untracked:  data/list/GO_Annotations/GCF_021461385.2_iqSchPice1.1_Arthopoda_one2one.emapper.annotations
    Untracked:  data/list/GO_Annotations/GCF_021461395.2_iqSchAmer2.1_Arthopoda_one2one.emapper.annotations
    Untracked:  data/list/GO_Annotations/GCF_023864275.1_iqSchCanc2.1_Arthopoda_one2one.emapper.annotations
    Untracked:  data/list/GO_Annotations/GCF_023864345.2_iqSchSeri2.2_Arthopoda_one2one.emapper.annotations
    Untracked:  data/list/GO_Annotations/GCF_023897955.1_iqSchGreg1.2_Arthopoda_one2one.emapper.annotations
    Untracked:  data/list/GO_Annotations/GCF_023898315.1_iqSchNite1.1_Arthopoda_one2one.emapper.annotations
    Untracked:  data/list/GO_Annotations/install_depedencies.R
    Untracked:  data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups/Orthogroups_CladeAssignment_WithCopyStatus.tsv
    Untracked:  data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups/Orthogroups_CladeAssignment_WithCopyStatus_cleaned.csv
    Untracked:  data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups/Orthogroups_CladeAssignment_WithCopyStatus_cleaned.txt
    Untracked:  data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups/Orthogroups_CladeAssignment_WithCopyStatus_cleaned.xlsx
    Untracked:  data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups/Orthogroups_SingleCopyOrthologues_selanalysis.txt
    Untracked:  data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups/Orthogroups_SingleCopyOrthologues_selanalysiswide.txt
    Untracked:  data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups/Orthogroups_SingleCopyOrthologues_strict.txt
    Untracked:  data/orthofinder/Schistocerca/Results_I2/Orthogroups/Orthogroups_CladeAssignment_WithCopyStatus.tsv
    Untracked:  data/orthofinder/Schistocerca/Results_I2/Orthogroups/Orthogroups_CladeAssignment_WithCopyStatus_cleaned.txt
    Untracked:  data/orthofinder/Schistocerca/Results_I2/Orthogroups/Orthogroups_CladeAssignment_WithCopyStatus_cleaned.xlsx
    Untracked:  data/orthofinder/Schistocerca/Results_I2/Orthogroups_Schistocerca_May2025.txt
    Untracked:  data/overlap/Bulk_RNAseq/Venn_ALL_HEAD_PAC_overlap_table.csv
    Untracked:  data/overlap/Bulk_RNAseq/Venn_ALL_THORAX_PAC_overlap_table.csv
    Untracked:  data/overlap/Bulk_RNAseq/Venn_Down_THORAX_PAC_overlap_table.csv
    Untracked:  data/overlap/Bulk_RNAseq/Venn_Up_HEAD_PAC_overlap_table.csv
    Untracked:  data/overlap/Bulk_RNAseq/Venn_Up_THORAX_PAC_overlap_table.csv
    Untracked:  data/overlap/Candidate_genes_LOCUSTS_June2025.csv
    Untracked:  data/overlap/DEGs_values_allspecies_June2025.csv
    Untracked:  data/overlap/Locusts/
    Untracked:  data/pathway_enrichment/GO30_enrichment_Head_americana_custom.csv
    Untracked:  data/pathway_enrichment/GO30_enrichment_Head_cancellata_custom.csv
    Untracked:  data/pathway_enrichment/GO30_enrichment_Head_cubense_custom.csv
    Untracked:  data/pathway_enrichment/GO30_enrichment_Head_gregaria_custom.csv
    Untracked:  data/pathway_enrichment/GO30_enrichment_Head_nitens_custom.csv
    Untracked:  data/pathway_enrichment/GO30_enrichment_Head_piceifrons_custom.csv
    Untracked:  data/pathway_enrichment/GO30_enrichment_Thorax_americana_custom.csv
    Untracked:  data/pathway_enrichment/GO30_enrichment_Thorax_cancellata_custom.csv
    Untracked:  data/pathway_enrichment/GO30_enrichment_Thorax_cubense_custom.csv
    Untracked:  data/pathway_enrichment/GO30_enrichment_Thorax_gregaria_custom.csv
    Untracked:  data/pathway_enrichment/GO30_enrichment_Thorax_nitens_custom.csv
    Untracked:  data/pathway_enrichment/GO30_enrichment_Thorax_piceifrons_custom.csv
    Untracked:  data/pathway_enrichment/OLD/
    Untracked:  data/pathway_enrichment/Overlapping_Genes_Head_Locusts.csv
    Untracked:  data/pathway_enrichment/Overlapping_Genes_Thorax_Locusts.csv
    Untracked:  data/pathway_enrichment/REVIGO_results/
    Untracked:  data/pathway_enrichment/americana/
    Untracked:  data/pathway_enrichment/cancellata/
    Untracked:  data/pathway_enrichment/cross_species_GO_terms_BP_ALL.csv
    Untracked:  data/pathway_enrichment/cross_species_GO_terms_CC_ALL.csv
    Untracked:  data/pathway_enrichment/cross_species_GO_terms_MF_ALL.csv
    Untracked:  data/pathway_enrichment/cross_species_GO_terms_matrix_BP.csv
    Untracked:  data/pathway_enrichment/cross_species_GO_terms_matrix_CC.csv
    Untracked:  data/pathway_enrichment/cross_species_GO_terms_matrix_MF.csv
    Untracked:  data/pathway_enrichment/cross_species_top30_GO_terms_BP_ALL.csv
    Untracked:  data/pathway_enrichment/cross_species_top30_GO_terms_CC_ALL.csv
    Untracked:  data/pathway_enrichment/cross_species_top30_GO_terms_MF_ALL.csv
    Untracked:  data/pathway_enrichment/cross_species_top30_GO_terms_matrix_BP.csv
    Untracked:  data/pathway_enrichment/cross_species_top30_GO_terms_matrix_CC.csv
    Untracked:  data/pathway_enrichment/cross_species_top30_GO_terms_matrix_MF.csv
    Untracked:  data/pathway_enrichment/cross_species_top30_heatmap_BP.pdf
    Untracked:  data/pathway_enrichment/cross_species_top30_heatmap_CC.pdf
    Untracked:  data/pathway_enrichment/cross_species_top30_heatmap_MF.pdf
    Untracked:  data/pathway_enrichment/cubense/
    Untracked:  data/pathway_enrichment/gregaria/
    Untracked:  data/pathway_enrichment/nitens/
    Untracked:  data/pathway_enrichment/piceifrons/
    Untracked:  permutedStats-actualModules.RData

Unstaged changes:
    Modified:   analysis/2_hic-snps-phylogeny.Rmd
    Modified:   analysis/2_orthologs-prediction.Rmd
    Modified:   analysis/2_signatures-selection.Rmd
    Modified:   analysis/3_compiling_tables.Rmd
    Modified:   analysis/3_deseq2-results.Rmd
    Modified:   analysis/3_go-enrichment.Rmd
    Modified:   analysis/3_overlap-venn.Rmd
    Modified:   analysis/3_wgcna-network.Rmd
    Modified:   analysis/4_RNAi_degs.Rmd
    Modified:   data/DEG_results/Bulk_RNAseq/All_species/PCA_VST.png
    Modified:   data/DEG_results/Bulk_RNAseq/All_species/PCA_labelled_VST.png
    Modified:   data/DEG_results/Bulk_RNAseq/GO10_enrichment_Head_americana_custom.csv
    Modified:   data/DEG_results/Bulk_RNAseq/GO10_enrichment_Head_cancellata_custom.csv
    Modified:   data/DEG_results/Bulk_RNAseq/GO10_enrichment_Head_cubense_custom.csv
    Modified:   data/DEG_results/Bulk_RNAseq/GO10_enrichment_Head_gregaria_custom.csv
    Modified:   data/DEG_results/Bulk_RNAseq/GO10_enrichment_Head_nitens_custom.csv
    Modified:   data/DEG_results/Bulk_RNAseq/GO10_enrichment_Head_piceifrons_custom.csv
    Modified:   data/DEG_results/Bulk_RNAseq/GO10_enrichment_Thorax_americana_custom.csv
    Modified:   data/DEG_results/Bulk_RNAseq/GO10_enrichment_Thorax_cancellata_custom.csv
    Modified:   data/DEG_results/Bulk_RNAseq/GO10_enrichment_Thorax_cubense_custom.csv
    Modified:   data/DEG_results/Bulk_RNAseq/GO10_enrichment_Thorax_gregaria_custom.csv
    Modified:   data/DEG_results/Bulk_RNAseq/GO10_enrichment_Thorax_piceifrons_custom.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/americana/DESeq2_sigresults_sva_HeadLeftJoinThorax_americana.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/americana/DESeq2_sigresults_sva_HeadLeftJoinThorax_americana_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/americana/Head/DESeq2_results_Head_americana.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/americana/Head/DESeq2_results_Head_americana_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/americana/Head/DESeq2_sigresults_Head_americana.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/americana/Head/DESeq2_sigresults_Head_americana_togregaria.csv
    Modified:   data/DEG_results/Bulk_RNAseq/americana/Head/heatmap_VST_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/americana/Head/heatmap_VST_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/americana/Head/heatmap_normTransform_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/americana/Head/heatmap_normTransform_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/americana/Head/heatmap_rlog_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/americana/Head/heatmap_rlog_Head_togregaria.pdf
    Deleted:    data/DEG_results/Bulk_RNAseq/americana/Thorax/DESeq2_results_Thorax_americana.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/americana/Thorax/DESeq2_results_Thorax_americana_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/americana/Thorax/DESeq2_sigresults_Thorax_americana.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/americana/Thorax/DESeq2_sigresults_Thorax_americana_togregaria.csv
    Modified:   data/DEG_results/Bulk_RNAseq/americana/Thorax/heatmap_VST_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/americana/Thorax/heatmap_VST_Thorax_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/americana/Thorax/heatmap_normTransform_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/americana/Thorax/heatmap_normTransform_Thorax_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/americana/Thorax/heatmap_rlog_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/americana/Thorax/heatmap_rlog_Thorax_togregaria.pdf
    Deleted:    data/DEG_results/Bulk_RNAseq/cancellata/DESeq2_sigresults_sva_HeadLeftJoinThorax_cancellata.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/cancellata/DESeq2_sigresults_sva_HeadLeftJoinThorax_cancellata_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/cancellata/Head/DESeq2_results_Head_cancellata.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/cancellata/Head/DESeq2_results_Head_cancellata_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/cancellata/Head/DESeq2_sigresults_Head_cancellata.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/cancellata/Head/DESeq2_sigresults_Head_cancellata_togregaria.csv
    Modified:   data/DEG_results/Bulk_RNAseq/cancellata/Head/heatmap_VST_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cancellata/Head/heatmap_VST_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cancellata/Head/heatmap_normTransform_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cancellata/Head/heatmap_normTransform_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cancellata/Head/heatmap_rlog_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cancellata/Head/heatmap_rlog_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cancellata/Thorax/heatmap_VST_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cancellata/Thorax/heatmap_VST_Thorax_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cancellata/Thorax/heatmap_normTransform_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cancellata/Thorax/heatmap_normTransform_Thorax_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cancellata/Thorax/heatmap_rlog_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cancellata/Thorax/heatmap_rlog_Thorax_togregaria.pdf
    Deleted:    data/DEG_results/Bulk_RNAseq/cubense/DESeq2_sigresults_sva_HeadLeftJoinThorax_cubense.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/cubense/DESeq2_sigresults_sva_HeadLeftJoinThorax_cubense_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/cubense/Head/DESeq2_results_Head_cubense.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/cubense/Head/DESeq2_results_Head_cubense_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/cubense/Head/DESeq2_sigresults_Head_cubense.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/cubense/Head/DESeq2_sigresults_Head_cubense_togregaria.csv
    Modified:   data/DEG_results/Bulk_RNAseq/cubense/Head/heatmap_VST_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cubense/Head/heatmap_VST_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cubense/Head/heatmap_normTransform_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cubense/Head/heatmap_normTransform_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cubense/Head/heatmap_rlog_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cubense/Head/heatmap_rlog_Head_togregaria.pdf
    Deleted:    data/DEG_results/Bulk_RNAseq/cubense/Thorax/DESeq2_results_Thorax_cubense.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/cubense/Thorax/DESeq2_results_Thorax_cubense_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/cubense/Thorax/DESeq2_sigresults_Thorax_cubense.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/cubense/Thorax/DESeq2_sigresults_Thorax_cubense_togregaria.csv
    Modified:   data/DEG_results/Bulk_RNAseq/cubense/Thorax/heatmap_VST_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cubense/Thorax/heatmap_VST_Thorax_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cubense/Thorax/heatmap_normTransform_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cubense/Thorax/heatmap_normTransform_Thorax_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cubense/Thorax/heatmap_rlog_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/cubense/Thorax/heatmap_rlog_Thorax_togregaria.pdf
    Deleted:    data/DEG_results/Bulk_RNAseq/davidO/Head/DESeq2_results_Head_davidB_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/davidO/Head/DESeq2_results_Head_davidO_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/davidO/Head/singlecell_brain_phase_DGE_markers.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/davidO/Head/singlecell_opticlobe_phase_DGE_markers.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/gregaria/DESeq2_sigresults_sva_HeadLeftJoinThorax_gregaria_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/gregaria/Head/DESeq2_results_Head_gregaria_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/gregaria/Head/DESeq2_sigresults_Head_gregaria_togregaria.csv
    Modified:   data/DEG_results/Bulk_RNAseq/gregaria/Head/heatmap_VST_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/gregaria/Head/heatmap_VST_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/gregaria/Head/heatmap_normTransform_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/gregaria/Head/heatmap_normTransform_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/gregaria/Head/heatmap_rlog_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/gregaria/Head/heatmap_rlog_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/gregaria/Thorax/heatmap_VST_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/gregaria/Thorax/heatmap_VST_Thorax_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/gregaria/Thorax/heatmap_normTransform_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/gregaria/Thorax/heatmap_normTransform_Thorax_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/gregaria/Thorax/heatmap_rlog_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/gregaria/Thorax/heatmap_rlog_Thorax_togregaria.pdf
    Deleted:    data/DEG_results/Bulk_RNAseq/nitens/DESeq2_sigresults_sva_HeadLeftJoinThorax_nitens.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/nitens/DESeq2_sigresults_sva_HeadLeftJoinThorax_nitens_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/nitens/Head/DESeq2_results_Head_nitens.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/nitens/Head/DESeq2_results_Head_nitens_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/nitens/Head/DESeq2_sigresults_Head_nitens.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/nitens/Head/DESeq2_sigresults_Head_nitens_togregaria.csv
    Modified:   data/DEG_results/Bulk_RNAseq/nitens/Head/heatmap_VST_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/nitens/Head/heatmap_VST_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/nitens/Head/heatmap_normTransform_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/nitens/Head/heatmap_normTransform_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/nitens/Head/heatmap_rlog_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/nitens/Head/heatmap_rlog_Head_togregaria.pdf
    Deleted:    data/DEG_results/Bulk_RNAseq/nitens/Thorax/DESeq2_results_Thorax_nitens.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/nitens/Thorax/DESeq2_results_Thorax_nitens_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/nitens/Thorax/DESeq2_sigresults_Thorax_nitens.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/nitens/Thorax/DESeq2_sigresults_Thorax_nitens_togregaria.csv
    Modified:   data/DEG_results/Bulk_RNAseq/nitens/Thorax/heatmap_VST_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/nitens/Thorax/heatmap_VST_Thorax_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/nitens/Thorax/heatmap_normTransform_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/nitens/Thorax/heatmap_normTransform_Thorax_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/nitens/Thorax/heatmap_rlog_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/nitens/Thorax/heatmap_rlog_Thorax_togregaria.pdf
    Deleted:    data/DEG_results/Bulk_RNAseq/piceifrons/DESeq2_sigresults_sva_HeadLeftJoinThorax_piceifrons.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/piceifrons/DESeq2_sigresults_sva_HeadLeftJoinThorax_piceifrons_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/piceifrons/Head/DESeq2_results_Head_piceifrons.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/piceifrons/Head/DESeq2_results_Head_piceifrons_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/piceifrons/Head/DESeq2_sigresults_Head_piceifrons.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/piceifrons/Head/DESeq2_sigresults_Head_piceifrons_togregaria.csv
    Modified:   data/DEG_results/Bulk_RNAseq/piceifrons/Head/heatmap_VST_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/piceifrons/Head/heatmap_VST_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/piceifrons/Head/heatmap_normTransform_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/piceifrons/Head/heatmap_normTransform_Head_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/piceifrons/Head/heatmap_rlog_Head.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/piceifrons/Head/heatmap_rlog_Head_togregaria.pdf
    Deleted:    data/DEG_results/Bulk_RNAseq/piceifrons/Thorax/DESeq2_results_Thorax_piceifrons.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/piceifrons/Thorax/DESeq2_results_Thorax_piceifrons_togregaria.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/piceifrons/Thorax/DESeq2_sigresults_Thorax_piceifrons.csv
    Deleted:    data/DEG_results/Bulk_RNAseq/piceifrons/Thorax/DESeq2_sigresults_Thorax_piceifrons_togregaria.csv
    Modified:   data/DEG_results/Bulk_RNAseq/piceifrons/Thorax/heatmap_VST_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/piceifrons/Thorax/heatmap_VST_Thorax_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/piceifrons/Thorax/heatmap_normTransform_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/piceifrons/Thorax/heatmap_normTransform_Thorax_togregaria.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/piceifrons/Thorax/heatmap_rlog_Thorax.pdf
    Modified:   data/DEG_results/Bulk_RNAseq/piceifrons/Thorax/heatmap_rlog_Thorax_togregaria.pdf
    Deleted:    data/DEG_results/RNAi/All/HEX1_vs_GFP/DEG_sigresults_HEX1_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/All/HEX2_vs_GFP/DEG_sigresults_HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/All/Hex1_vs_GFP/heatmap_plot_Hex1_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All/Hex1_vs_GFP/volcano_plot_Hex1_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All/Hex2_vs_GFP/heatmap_plot_Hex2_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All/Hex2_vs_GFP/volcano_plot_Hex2_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All/JHMT_vs_GFP/DEG_sigresults_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/All/JHMT_vs_GFP/heatmap_plot_JHMT_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All/JHMT_vs_GFP/volcano_plot_JHMT_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All/MIOX_vs_GFP/DEG_sigresults_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/All/MIOX_vs_GFP/heatmap_plot_MIOX_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All/MIOX_vs_GFP/volcano_plot_MIOX_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/All/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/All/UNCH_vs_GFP/DEG_sigresults_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/All/UNCH_vs_GFP/heatmap_plot_UNCH_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All/UNCH_vs_GFP/volcano_plot_UNCH_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/All/sva_scatter_SV1_SV3.png
    Deleted:    data/DEG_results/RNAi/All/sva_scatter_SV2_SV3.png
    Deleted:    data/DEG_results/RNAi/All/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/All/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/All/sva_stripchart_SV3.png
    Deleted:    data/DEG_results/RNAi/All_GFP/GFP_vs_CONTROL/DEG_sigresults_GFP_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_GFP/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/All_GFP/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/All_GFP/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/All_GFP/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/All_GFP/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/All_GFP_no_rRNA/GFP_vs_CONTROL/DEG_sigresults_GFP_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_GFP_no_rRNA/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/All_GFP_no_rRNA/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/All_GFP_no_rRNA/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/All_GFP_no_rRNA/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/All_GFP_no_rRNA/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/All_control/GFP_vs_CONTROL/DEG_sigresults_GFP_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_control/HEX1_vs_CONTROL/DEG_sigresults_HEX1_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_control/HEX2_vs_CONTROL/DEG_sigresults_HEX2_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_control/JHMT_vs_CONTROL/DEG_sigresults_JHMT_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_control/MIOX_vs_CONTROL/DEG_sigresults_MIOX_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_control/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/All_control/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/All_control/UNCH_vs_CONTROL/DEG_sigresults_UNCH_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_control/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/All_control/sva_scatter_SV1_SV3.png
    Deleted:    data/DEG_results/RNAi/All_control/sva_scatter_SV1_SV4.png
    Deleted:    data/DEG_results/RNAi/All_control/sva_scatter_SV2_SV3.png
    Deleted:    data/DEG_results/RNAi/All_control/sva_scatter_SV2_SV4.png
    Deleted:    data/DEG_results/RNAi/All_control/sva_scatter_SV3_SV4.png
    Deleted:    data/DEG_results/RNAi/All_control/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/All_control/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/All_control/sva_stripchart_SV3.png
    Deleted:    data/DEG_results/RNAi/All_control/sva_stripchart_SV4.png
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/GFP_vs_CONTROL/DEG_sigresults_GFP_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/HEX1_vs_CONTROL/DEG_sigresults_HEX1_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/HEX2_vs_CONTROL/DEG_sigresults_HEX2_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/JHMT_vs_CONTROL/DEG_sigresults_JHMT_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/MIOX_vs_CONTROL/DEG_sigresults_MIOX_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/UNCH_vs_CONTROL/DEG_sigresults_UNCH_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/sva_scatter_SV1_SV3.png
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/sva_scatter_SV2_SV3.png
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/All_control_no_rRNA/sva_stripchart_SV3.png
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/HEX1_vs_GFP/DEG_sigresults_HEX1_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/HEX2_vs_GFP/DEG_sigresults_HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/Hex1_vs_GFP/heatmap_plot_Hex1_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/Hex1_vs_GFP/volcano_plot_Hex1_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/Hex2_vs_GFP/heatmap_plot_Hex2_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/Hex2_vs_GFP/volcano_plot_Hex2_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/JHMT_vs_GFP/DEG_sigresults_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/JHMT_vs_GFP/heatmap_plot_JHMT_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/JHMT_vs_GFP/volcano_plot_JHMT_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/MIOX_vs_GFP/DEG_sigresults_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/MIOX_vs_GFP/heatmap_plot_MIOX_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/MIOX_vs_GFP/volcano_plot_MIOX_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/UNCH_vs_GFP/DEG_sigresults_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/UNCH_vs_GFP/heatmap_plot_UNCH_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/UNCH_vs_GFP/volcano_plot_UNCH_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/All_no_rRNA/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/Head/HEX1_vs_GFP/DEG_sigresults_HEX1_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/HEX2_vs_GFP/DEG_sigresults_HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/Hex1_vs_GFP/heatmap_plot_Hex1_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head/Hex1_vs_GFP/volcano_plot_Hex1_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head/Hex2_vs_GFP/heatmap_plot_Hex2_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head/Hex2_vs_GFP/volcano_plot_Hex2_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head/JHMT_vs_GFP/DEG_sigresults_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/JHMT_vs_GFP/heatmap_plot_JHMT_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head/JHMT_vs_GFP/volcano_plot_JHMT_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head/MIOX_vs_GFP/DEG_sigresults_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/MIOX_vs_GFP/heatmap_plot_MIOX_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head/MIOX_vs_GFP/volcano_plot_MIOX_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head/PCA_vst_Gene_hull.png
    Deleted:    data/DEG_results/RNAi/Head/PCA_vst_Gene_labelled.png
    Deleted:    data/DEG_results/RNAi/Head/UNCH_vs_GFP/DEG_sigresults_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UNCH_vs_GFP/heatmap_plot_UNCH_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head/UNCH_vs_GFP/volcano_plot_UNCH_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP_&_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP_&_JHMT_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP_&_JHMT_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP_&_JHMT_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_JHMT_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_JHMT_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_JHMT_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX1_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX2_vs_GFP_&_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX2_vs_GFP_&_JHMT_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX2_vs_GFP_&_JHMT_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX2_vs_GFP_&_JHMT_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX2_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX2_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/HEX2_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/JHMT_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/JHMT_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/JHMT_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/UpSetR_all_intersections/UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/Head/sva_scatter_SV1_SV3.png
    Deleted:    data/DEG_results/RNAi/Head/sva_scatter_SV2_SV3.png
    Deleted:    data/DEG_results/RNAi/Head/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/Head/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/Head/sva_stripchart_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_GFP/GFP_vs_CONTROL/DEG_sigresults_GFP_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_GFP/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/Head_GFP/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/Head_GFP/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/Head_GFP/sva_scatter_SV1_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_GFP/sva_scatter_SV1_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_GFP/sva_scatter_SV2_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_GFP/sva_scatter_SV2_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_GFP/sva_scatter_SV3_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_GFP/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/Head_GFP/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/Head_GFP/sva_stripchart_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_GFP/sva_stripchart_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_GFP_no_rRNA/GFP_vs_CONTROL/DEG_sigresults_GFP_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_GFP_no_rRNA/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/Head_GFP_no_rRNA/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/Head_GFP_no_rRNA/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/Head_GFP_no_rRNA/sva_scatter_SV1_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_GFP_no_rRNA/sva_scatter_SV1_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_GFP_no_rRNA/sva_scatter_SV2_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_GFP_no_rRNA/sva_scatter_SV2_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_GFP_no_rRNA/sva_scatter_SV3_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_GFP_no_rRNA/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/Head_GFP_no_rRNA/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/Head_GFP_no_rRNA/sva_stripchart_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_GFP_no_rRNA/sva_stripchart_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_control/GFP_vs_CONTROL/DEG_sigresults_GFP_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_control/HEX1_vs_CONTROL/DEG_sigresults_HEX1_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_control/HEX2_vs_CONTROL/DEG_sigresults_HEX2_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_control/JHMT_vs_CONTROL/DEG_sigresults_JHMT_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_control/MIOX_vs_CONTROL/DEG_sigresults_MIOX_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_control/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/Head_control/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/Head_control/UNCH_vs_CONTROL/DEG_sigresults_UNCH_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV1_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV1_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV1_SV5.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV1_SV6.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV1_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV2_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV2_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV2_SV5.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV2_SV6.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV2_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV3_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV3_SV5.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV3_SV6.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV3_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV4_SV5.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV4_SV6.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV4_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV5_SV6.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV5_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_scatter_SV6_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_stripchart_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_stripchart_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_stripchart_SV5.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_stripchart_SV6.png
    Deleted:    data/DEG_results/RNAi/Head_control/sva_stripchart_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/GFP_vs_CONTROL/DEG_sigresults_GFP_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/HEX1_vs_CONTROL/DEG_sigresults_HEX1_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/HEX2_vs_CONTROL/DEG_sigresults_HEX2_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/JHMT_vs_CONTROL/DEG_sigresults_JHMT_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/MIOX_vs_CONTROL/DEG_sigresults_MIOX_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/UNCH_vs_CONTROL/DEG_sigresults_UNCH_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV1_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV1_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV1_SV5.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV1_SV6.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV1_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV2_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV2_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV2_SV5.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV2_SV6.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV2_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV3_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV3_SV5.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV3_SV6.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV3_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV4_SV5.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV4_SV6.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV4_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV5_SV6.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV5_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_scatter_SV6_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_stripchart_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_stripchart_SV4.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_stripchart_SV5.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_stripchart_SV6.png
    Deleted:    data/DEG_results/RNAi/Head_control_no_rRNA/sva_stripchart_SV7.png
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/HEX1_vs_GFP/DEG_sigresults_HEX1_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/HEX2_vs_GFP/DEG_sigresults_HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/Hex1_vs_GFP/heatmap_plot_Hex1_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/Hex1_vs_GFP/volcano_plot_Hex1_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/Hex2_vs_GFP/heatmap_plot_Hex2_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/Hex2_vs_GFP/volcano_plot_Hex2_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/JHMT_vs_GFP/DEG_sigresults_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/JHMT_vs_GFP/heatmap_plot_JHMT_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/JHMT_vs_GFP/volcano_plot_JHMT_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/MIOX_vs_GFP/DEG_sigresults_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/MIOX_vs_GFP/heatmap_plot_MIOX_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/MIOX_vs_GFP/volcano_plot_MIOX_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/PCA_vst_Gene_hull.png
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/PCA_vst_Gene_labelled.png
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UNCH_vs_GFP/DEG_sigresults_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UNCH_vs_GFP/heatmap_plot_UNCH_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UNCH_vs_GFP/volcano_plot_UNCH_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP_&_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP_&_JHMT_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/HEX2_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/HEX2_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/HEX2_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/JHMT_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/JHMT_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/JHMT_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/UpSetR_all_intersections/UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/sva_scatter_SV1_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/sva_scatter_SV2_SV3.png
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/Head_no_rRNA/sva_stripchart_SV3.png
    Deleted:    data/DEG_results/RNAi/Thorax/HEX1_vs_GFP/DEG_sigresults_HEX1_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/HEX2_vs_GFP/DEG_sigresults_HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/Hex1_vs_GFP/heatmap_plot_Hex1_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax/Hex1_vs_GFP/volcano_plot_Hex1_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax/Hex2_vs_GFP/heatmap_plot_Hex2_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax/Hex2_vs_GFP/volcano_plot_Hex2_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax/JHMT_vs_GFP/DEG_sigresults_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/JHMT_vs_GFP/heatmap_plot_JHMT_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax/JHMT_vs_GFP/volcano_plot_JHMT_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax/MIOX_vs_GFP/DEG_sigresults_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/MIOX_vs_GFP/heatmap_plot_MIOX_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax/MIOX_vs_GFP/volcano_plot_MIOX_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax/PCA_vst_Gene_hull.png
    Deleted:    data/DEG_results/RNAi/Thorax/PCA_vst_Gene_labelled.png
    Deleted:    data/DEG_results/RNAi/Thorax/Thorax_raw_counts.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UNCH_vs_GFP/DEG_sigresults_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UNCH_vs_GFP/heatmap_plot_UNCH_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax/UNCH_vs_GFP/volcano_plot_UNCH_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX1_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP_&_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX1_vs_GFP_&_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX1_vs_GFP_&_JHMT_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX1_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX1_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX1_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX2_vs_GFP_&_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX2_vs_GFP_&_JHMT_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX2_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX2_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/HEX2_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/JHMT_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/JHMT_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/UpSetR_all_intersections/UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/Thorax/sva_scatter_SV1_SV3.png
    Deleted:    data/DEG_results/RNAi/Thorax/sva_scatter_SV2_SV3.png
    Deleted:    data/DEG_results/RNAi/Thorax/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/Thorax/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/Thorax/sva_stripchart_SV3.png
    Deleted:    data/DEG_results/RNAi/Thorax_GFP/GFP_vs_CONTROL/DEG_sigresults_GFP_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_GFP/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/Thorax_GFP/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/Thorax_GFP/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/Thorax_GFP/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/Thorax_GFP/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/Thorax_GFP_no_rRNA/GFP_vs_CONTROL/DEG_sigresults_GFP_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_GFP_no_rRNA/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/Thorax_GFP_no_rRNA/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/Thorax_GFP_no_rRNA/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/Thorax_GFP_no_rRNA/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/Thorax_GFP_no_rRNA/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/GFP_vs_CONTROL/DEG_sigresults_GFP_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_control/HEX1_vs_CONTROL/DEG_sigresults_HEX1_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_control/HEX2_vs_CONTROL/DEG_sigresults_HEX2_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_control/JHMT_vs_CONTROL/DEG_sigresults_JHMT_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_control/MIOX_vs_CONTROL/DEG_sigresults_MIOX_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_control/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/UNCH_vs_CONTROL/DEG_sigresults_UNCH_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV1_SV3.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV1_SV4.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV1_SV5.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV1_SV6.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV2_SV3.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV2_SV4.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV2_SV5.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV2_SV6.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV3_SV4.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV3_SV5.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV3_SV6.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV4_SV5.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV4_SV6.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_scatter_SV5_SV6.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_stripchart_SV3.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_stripchart_SV4.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_stripchart_SV5.png
    Deleted:    data/DEG_results/RNAi/Thorax_control/sva_stripchart_SV6.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/GFP_vs_CONTROL/DEG_sigresults_GFP_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/HEX1_vs_CONTROL/DEG_sigresults_HEX1_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/HEX2_vs_CONTROL/DEG_sigresults_HEX2_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/JHMT_vs_CONTROL/DEG_sigresults_JHMT_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/MIOX_vs_CONTROL/DEG_sigresults_MIOX_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/PCA_Tissue_Gene_Label.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/PCA_Tissue_Gene_NoLabel.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/UNCH_vs_CONTROL/DEG_sigresults_UNCH_vs_CONTROL.csv
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV1_SV3.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV1_SV4.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV1_SV5.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV1_SV6.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV2_SV3.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV2_SV4.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV2_SV5.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV2_SV6.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV3_SV4.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV3_SV5.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV3_SV6.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV4_SV5.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV4_SV6.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_scatter_SV5_SV6.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_stripchart_SV3.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_stripchart_SV4.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_stripchart_SV5.png
    Deleted:    data/DEG_results/RNAi/Thorax_control_no_rRNA/sva_stripchart_SV6.png
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/HEX1_vs_GFP/DEG_sigresults_HEX1_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/HEX2_vs_GFP/DEG_sigresults_HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/Hex1_vs_GFP/heatmap_plot_Hex1_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/Hex1_vs_GFP/volcano_plot_Hex1_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/Hex2_vs_GFP/heatmap_plot_Hex2_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/Hex2_vs_GFP/volcano_plot_Hex2_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/JHMT_vs_GFP/DEG_sigresults_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/JHMT_vs_GFP/heatmap_plot_JHMT_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/JHMT_vs_GFP/volcano_plot_JHMT_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/MIOX_vs_GFP/DEG_sigresults_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/MIOX_vs_GFP/heatmap_plot_MIOX_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/MIOX_vs_GFP/volcano_plot_MIOX_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/PCA_vst_Gene_hull.png
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/PCA_vst_Gene_labelled.png
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UNCH_vs_GFP/DEG_sigresults_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UNCH_vs_GFP/heatmap_plot_UNCH_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UNCH_vs_GFP/volcano_plot_UNCH_vs_GFP.tiff
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP_&_HEX2_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP_&_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP_&_JHMT_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/HEX1_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/HEX2_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/HEX2_vs_GFP_&_JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/HEX2_vs_GFP_&_JHMT_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/HEX2_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/HEX2_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/JHMT_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/JHMT_vs_GFP_&_MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/JHMT_vs_GFP_&_MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/JHMT_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/MIOX_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/MIOX_vs_GFP_&_UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/UpSetR_all_intersections/UNCH_vs_GFP.csv
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/sva_scatter_SV1_SV2.png
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/sva_scatter_SV1_SV3.png
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/sva_scatter_SV2_SV3.png
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/sva_stripchart_SV1.png
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/sva_stripchart_SV2.png
    Deleted:    data/DEG_results/RNAi/Thorax_no_rRNA/sva_stripchart_SV3.png
    Deleted:    data/DEG_results/single_cell/singlecell_brain_phase_DGE_markers.csv
    Deleted:    data/DEG_results/single_cell/singlecell_opticlobe_phase_DGE_markers.csv
    Deleted:    data/WGCNA/output/Bulk_RNAseq/SoftThreshold_Head_gregaria.pdf
    Modified:   data/behavioral_data/Sample_phenotypes_WGCNA.csv
    Modified:   data/list/Bulk_RNAseq/All_BulkRNAseq_samples.csv
    Deleted:    data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups/Orthogroups_CladeAssignment_cleaned.txt
    Deleted:    data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups/Orthogroups_CladeAssignment_cleaned.xlsx
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups/Orthogroups_SingleCopyOrthologues.txt
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups/Orthogroups_UnassignedGenes_reprocessed.tsv
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups/Orthogroups_reprocessed.tsv
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups_13species_May2025.txt
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Orthogroups_genesproteinbiotype_13species_annotated_May2025.csv
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Plots_Polyneoptera/VerticalStackedBar_A. simplex.pdf
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Plots_Polyneoptera/VerticalStackedBar_B. rossius.pdf
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Plots_Polyneoptera/VerticalStackedBar_C. secundus.pdf
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Plots_Polyneoptera/VerticalStackedBar_G. bimaculatus.pdf
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Plots_Polyneoptera/VerticalStackedBar_G. longicornis.pdf
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Plots_Polyneoptera/VerticalStackedBar_L. migratoria.pdf
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Plots_Polyneoptera/VerticalStackedBar_P. americana.pdf
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Plots_Polyneoptera/VerticalStackedBar_americana.pdf
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Plots_Polyneoptera/VerticalStackedBar_cancellata.pdf
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Plots_Polyneoptera/VerticalStackedBar_cubense.pdf
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Plots_Polyneoptera/VerticalStackedBar_gregaria.pdf
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Plots_Polyneoptera/VerticalStackedBar_nitens.pdf
    Modified:   data/orthofinder/Polyneoptera/Results_I2_iqtree/Plots_Polyneoptera/VerticalStackedBar_piceifrons.pdf
    Deleted:    data/orthofinder/Schistocerca/Results_I2/Orthogroups_Schistocerca_Jan2025.txt
    Modified:   data/orthofinder/Schistocerca/Results_I2/Orthogroups_genesproteinbiotype_Schistocerca_annotated_May2025.csv
    Modified:   data/orthofinder/Schistocerca/Results_I2/Plots_Schistocerca/VerticalStackedBar_americana.pdf
    Modified:   data/orthofinder/Schistocerca/Results_I2/Plots_Schistocerca/VerticalStackedBar_cancellata.pdf
    Modified:   data/orthofinder/Schistocerca/Results_I2/Plots_Schistocerca/VerticalStackedBar_cubense.pdf
    Modified:   data/orthofinder/Schistocerca/Results_I2/Plots_Schistocerca/VerticalStackedBar_gregaria.pdf
    Modified:   data/orthofinder/Schistocerca/Results_I2/Plots_Schistocerca/VerticalStackedBar_nitens.pdf
    Modified:   data/orthofinder/Schistocerca/Results_I2/Plots_Schistocerca/VerticalStackedBar_piceifrons.pdf
    Deleted:    data/overlap/Bulk_RNAseq/americana/scatter_plot_americana_togregaria.png
    Deleted:    data/overlap/Bulk_RNAseq/americana/venn_diagram_americana_togregaria.png
    Deleted:    data/overlap/Bulk_RNAseq/cubense/scatter_plot_cubense_togregaria.png
    Deleted:    data/overlap/Bulk_RNAseq/cubense/venn_diagram_cubense_togregaria.png
    Deleted:    data/overlap/Bulk_RNAseq/gregaria/scatter_plot_gregaria_togregaria.png
    Deleted:    data/overlap/Bulk_RNAseq/gregaria/venn_diagram_gregaria_togregaria.png
    Deleted:    data/overlap/Bulk_RNAseq/nitens/venn_diagram_nitens_togregaria.png
    Modified:   data/overlap/Bulk_RNAseq/overlapping_genes_head_thorax_americana.csv
    Modified:   data/overlap/Bulk_RNAseq/overlapping_genes_head_thorax_cancellata.csv
    Modified:   data/overlap/Bulk_RNAseq/overlapping_genes_head_thorax_cubense.csv
    Modified:   data/overlap/Bulk_RNAseq/overlapping_genes_head_thorax_piceifrons.csv
    Deleted:    data/overlap/Bulk_RNAseq/piceifrons/scatter_plot_piceifrons_togregaria.png
    Deleted:    data/overlap/Bulk_RNAseq/piceifrons/venn_diagram_piceifrons_togregaria.png
    Modified:   data/overlap/Bulk_RNAseq/scatter_plot_overlapping_genes_americana.png
    Modified:   data/overlap/Bulk_RNAseq/scatter_plot_overlapping_genes_cancellata.png
    Modified:   data/overlap/Bulk_RNAseq/scatter_plot_overlapping_genes_cubense.png
    Modified:   data/overlap/Bulk_RNAseq/scatter_plot_overlapping_genes_piceifrons.png
    Modified:   data/overlap/summaryPolyneoptera_I2_DEGs_Orthogroups_May2025.csv
    Modified:   data/overlap/summaryPolyneoptera_I2_DEGs_Orthogroups_togregaria_May2025.csv
    Modified:   data/overlap/summarySchistocerca_I2_DEGs_Orthogroups_May2025.csv
    Modified:   data/overlap/summarySchistocerca_I2_DEGs_Orthogroups_togregaria_May2025.csv
    Deleted:    data/pathway_enrichment/DESeq2_sigresults_sva_Thorax_cancellata_togregaria.csv
    Deleted:    data/pathway_enrichment/DGE_results_UNCH_vs_GFP.csv
    Deleted:    data/pathway_enrichment/EggNog_Arthropoda_one2one.emapper.annotations
    Deleted:    data/pathway_enrichment/Functional_Enrichment.Rmd
    Deleted:    data/pathway_enrichment/custom_sgregaria_orgdb/org.Sgregaria.eg.db/DESCRIPTION
    Deleted:    data/pathway_enrichment/custom_sgregaria_orgdb/org.Sgregaria.eg.db/NAMESPACE
    Deleted:    data/pathway_enrichment/custom_sgregaria_orgdb/org.Sgregaria.eg.db/R/zzz.R
    Deleted:    data/pathway_enrichment/custom_sgregaria_orgdb/org.Sgregaria.eg.db/inst/extdata/org.Sgregaria.eg.sqlite
    Deleted:    data/pathway_enrichment/custom_sgregaria_orgdb/org.Sgregaria.eg.db/man/org.Sgregaria.egBASE.Rd
    Deleted:    data/pathway_enrichment/custom_sgregaria_orgdb/org.Sgregaria.eg.db/man/org.Sgregaria.egORGANISM.Rd
    Deleted:    data/pathway_enrichment/custom_sgregaria_orgdb/org.Sgregaria.eg.db/man/org.Sgregaria.eg_dbconn.Rd
    Deleted:    data/pathway_enrichment/custom_sgregaria_orgdb/org.Sgregaria.eg.db_v1.tar.gz
    Deleted:    data/pathway_enrichment/sessionInfo.txt

Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.


These are the previous versions of the repository in which changes were made to the R Markdown (analysis/3_compiling_tables.Rmd) and HTML (docs/3_compiling_tables.html) files. If you’ve configured a remote Git repository (see ?wflow_git_remote), click on the hyperlinks in the table below to view the files as they were in that past version.

File Version Author Date Message
html 3e696d6 Maeva TECHER 2025-06-05 Adding ortho heatmap
Rmd 4e391c3 Maeva TECHER 2025-05-30 add new analysis orthology, synteny
html 4e391c3 Maeva TECHER 2025-05-30 add new analysis orthology, synteny
Rmd 9451c02 Maeva TECHER 2025-03-03 adding GO enrich
html 9451c02 Maeva TECHER 2025-03-03 adding GO enrich
Rmd 3746422 Maeva TECHER 2025-02-12 Add RNAi
html 3746422 Maeva TECHER 2025-02-12 Add RNAi

Load the libraries

# Load necessary libraries
library("tidyr")          # Data transformation (pivot_wider)
library("readr")          # Efficient CSV reading/writing
library("stringr")        # String manipulation
library("purrr")          # Functional programming (handling missing files)
library("tibble")         # Improved dataframe handling
library("forcats")        # Factor manipulation (optional, if needed for ordering)
library("tidyverse")
library("kableExtra")
library("DT")
library("dplyr")          # Data manipulation
library("ComplexHeatmap")
library("circlize")
library("ggplot2")
library("patchwork")  # for side-by-side plots

# Path for all species
workDir <- "/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data"
allspecies_path <- file.path(workDir, "/list/13polyneoptera_geneid_ncbi.csv")
allspecies_df <- read.table(allspecies_path, sep = ",", header = TRUE, quote = "", fill = TRUE, stringsAsFactors = FALSE)
species_list <- c("gregaria", "piceifrons", "cancellata", "americana", "cubense", "nitens")
species_order <- c( "gregaria", "nitens", "cancellata",  "piceifrons", "americana", "cubense")

1. Compiling orthologs and DEGs

Schistocerca-based I2

STRATEGY 1: to gregaria

This table summarize the DEGs as well as the orthogroups it belongs using the DEGs mapped to gregaria.

# Load Orthogroup information
ortho_dir <- "/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/orthofinder/Schistocerca"
input_file <- file.path(ortho_dir, "Results_I2/Orthogroups_genesproteinbiotype_Schistocerca_annotated_May2025.csv")
ortholog_df <- read.csv(input_file, header = TRUE, stringsAsFactors = FALSE)

# Replace NA values in the Orthogroup column with "Unassigned"
#ortholog_df$Orthogroup[is.na(ortholog_df$Orthogroup)] <- "Unassigned"

# Ensure correct column names
#if ("gene_id" %in% colnames(ortholog_df)) {
#    colnames(ortholog_df)[colnames(ortholog_df) == "gene_id"] <- "GeneID"
#}

# Keep only relevant columns and ensure uniqueness
ortholog_df <- ortholog_df %>%
    dplyr::select(GeneID, GeneType, Orthogroup, Orthogroup_Type, Description, Species) %>%
    dplyr::distinct(GeneID, .keep_all = TRUE)

# Define species list
species_list <- c("gregaria", "piceifrons", "cancellata", "americana", "cubense", "nitens")

# Initialize an empty data frame for summary
summary_table <- data.frame()

# Loop through each species
for (species in species_list) {
    message(paste("Processing:", species))
    
    # Load DESeq2 results for Head and Thorax
    head_file <- file.path(workDir, "DEG_results/Bulk_RNAseq/", paste0(species, "/Head/DESeq2_sigresults_sva_Head_", species,"_togregaria.csv"))
    thorax_file <- file.path(workDir, "DEG_results/Bulk_RNAseq/", paste0(species, "/Thorax/DESeq2_sigresults_sva_Thorax_", species,"_togregaria.csv"))
    
    # Check if files exist
    if (!file.exists(head_file) || !file.exists(thorax_file)) {
        message(paste("Missing DESeq2 results for:", species))
        next
    }
    
    head_data <- read.csv(head_file, stringsAsFactors = FALSE)
    thorax_data <- read.csv(thorax_file, stringsAsFactors = FALSE)
    
    # Ensure GeneID column exists
    if (!"GeneID" %in% colnames(head_data) && "X" %in% colnames(head_data)) {
        colnames(head_data)[colnames(head_data) == "X"] <- "GeneID"
    }
    if (!"GeneID" %in% colnames(thorax_data) && "X" %in% colnames(thorax_data)) {
        colnames(thorax_data)[colnames(thorax_data) == "X"] <- "GeneID"
    }
    
    # Convert GeneID to character
    head_data$GeneID <- as.character(head_data$GeneID)
    thorax_data$GeneID <- as.character(thorax_data$GeneID)
    ortholog_df$GeneID <- as.character(ortholog_df$GeneID)
    
    # Merge with Orthogroups and ensure Orthogroup is always character
    head_merged <- left_join(head_data, ortholog_df, by = "GeneID") %>%
        mutate(Orthogroup = as.character(ifelse(is.na(Orthogroup), "Unassigned", Orthogroup)))

    thorax_merged <- left_join(thorax_data, ortholog_df, by = "GeneID") %>%
        mutate(Orthogroup = as.character(ifelse(is.na(Orthogroup), "Unassigned", Orthogroup)))
    
    # Classify DEGs and add Tissue + Species columns
    head_merged <- head_merged %>%
        mutate(
            Status = case_when(
                padj < 0.05 & log2FoldChange > 1 ~ "Upregulated",
                padj < 0.05 & log2FoldChange < -1 ~ "Downregulated",
                TRUE ~ "Not Significant"
            ),
            Tissue = "Head",   # Add Tissue column
            Species = species  # Add Species column (Fix!)
        ) %>%
        dplyr::select(GeneID, GeneType, Description, Orthogroup, Orthogroup_Type, Tissue, Species, Status)  # Ensure Species column is included

    thorax_merged <- thorax_merged %>%
        mutate(
            Status = case_when(
                padj < 0.05 & log2FoldChange > 1 ~ "Upregulated",
                padj < 0.05 & log2FoldChange < -1 ~ "Downregulated",
                TRUE ~ "Not Significant"
            ),
            Tissue = "Thorax",  # Add Tissue column
            Species = species   # Add Species column (Fix!)
        ) %>%
        dplyr::select(GeneID, GeneType, Description, Orthogroup, Orthogroup_Type, Tissue, Species, Status)  # Ensure Species column is included
    
    # Combine results
    summary_table <- bind_rows(summary_table, head_merged, thorax_merged)
}

# Pivot table to show Up/Down/Not Significant per species
summary_table_pivot <- summary_table %>%
  pivot_wider(names_from = c(Species, Tissue), values_from = Status, values_fill = "Not Detected")

# Create a searchable DataTable with color formatting
datatable(
  summary_table_pivot, 
  options = list(
    pageLength = 50,  # Show only the first 50 rows by default
    scrollX = TRUE,  # Enable horizontal scrolling if needed
    autoWidth = TRUE,  # Adjust column width automatically
    searchHighlight = TRUE  # Highlight search results
  ),
  rownames = FALSE,
  class = "compact"  # Applies a smaller font size
) %>%
  formatStyle(
    columns = names(summary_table_pivot)[-c(1,2)],  # Exclude Orthogroup and GeneID from color formatting
    backgroundColor = styleEqual(
      c("Upregulated", "Downregulated"), 
      c("lightcoral", "lightblue")  # Red for Upregulated, Blue for Downregulated
    ),
    color = styleEqual(
      c("Upregulated", "Downregulated"), 
      c("white", "black")  # White text for Upregulated, Black text for Downregulated
    )
  )
# Save as CSV
output_file <- file.path(workDir, "overlap/summarySchistocerca_I2_DEGs_Orthogroups_togregaria_May2025.csv")
write.csv(summary_table_pivot, output_file, row.names = FALSE)

message(paste("Summary table saved at:", output_file))

STRATEGY 2: to own RefSeq

This table summarize the DEGs as well as the orthogroups it belongs. Here

# Load Orthogroup information
ortho_dir <- "/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/orthofinder/Schistocerca"
input_file <- file.path(ortho_dir, "Results_I2/Orthogroups_genesproteinbiotype_Schistocerca_annotated_May2025.csv")
ortholog_df <- read.csv(input_file, header = TRUE, stringsAsFactors = FALSE)

# Replace NA values in the Orthogroup column with "Unassigned"
ortholog_df$Orthogroup[is.na(ortholog_df$Orthogroup)] <- "Unassigned"

# Ensure correct column names
if ("gene_id" %in% colnames(ortholog_df)) {
    colnames(ortholog_df)[colnames(ortholog_df) == "gene_id"] <- "GeneID"
}

# Keep only relevant columns and ensure uniqueness
ortholog_df <- ortholog_df %>%
    dplyr::select(GeneID, GeneType, Orthogroup, Orthogroup_Type, Description, Species) %>%
    dplyr::distinct(GeneID, .keep_all = TRUE)

# Define species list
species_list <- c("gregaria", "piceifrons", "cancellata", "americana", "cubense", "nitens")

# Initialize an empty data frame for summary
summary_table <- data.frame()

# Loop through each species
for (species in species_list) {
    message(paste("Processing:", species))
    
    # Load DESeq2 results for Head and Thorax
    head_file <- file.path(workDir, "DEG_results/Bulk_RNAseq/", paste0(species, "/Head/DESeq2_sigresults_sva_Head_", species,".csv"))
    thorax_file <- file.path(workDir, "DEG_results/Bulk_RNAseq/", paste0(species, "/Thorax/DESeq2_sigresults_sva_Thorax_", species,".csv"))
    
    # Check if files exist
    if (!file.exists(head_file) || !file.exists(thorax_file)) {
        message(paste("Missing DESeq2 results for:", species))
        next
    }
    
    head_data <- read.csv(head_file, stringsAsFactors = FALSE)
    thorax_data <- read.csv(thorax_file, stringsAsFactors = FALSE)
    
    # Ensure GeneID column exists
    if (!"GeneID" %in% colnames(head_data) && "X" %in% colnames(head_data)) {
        colnames(head_data)[colnames(head_data) == "X"] <- "GeneID"
    }
    if (!"GeneID" %in% colnames(thorax_data) && "X" %in% colnames(thorax_data)) {
        colnames(thorax_data)[colnames(thorax_data) == "X"] <- "GeneID"
    }
    
    # Convert GeneID to character
    head_data$GeneID <- as.character(head_data$GeneID)
    thorax_data$GeneID <- as.character(thorax_data$GeneID)
    ortholog_df$GeneID <- as.character(ortholog_df$GeneID)
    
    # Merge with Orthogroups and ensure Orthogroup is always character
    head_merged <- left_join(head_data, ortholog_df, by = "GeneID") %>%
        mutate(Orthogroup = as.character(ifelse(is.na(Orthogroup), "Unassigned", Orthogroup)))

    thorax_merged <- left_join(thorax_data, ortholog_df, by = "GeneID") %>%
        mutate(Orthogroup = as.character(ifelse(is.na(Orthogroup), "Unassigned", Orthogroup)))
    
    # Classify DEGs and add Tissue + Species columns
    head_merged <- head_merged %>%
        mutate(
            Status = case_when(
                padj < 0.05 & log2FoldChange > 1 ~ "Upregulated",
                padj < 0.05 & log2FoldChange < -1 ~ "Downregulated",
                TRUE ~ "Not Significant"
            ),
            Tissue = "Head",   # Add Tissue column
            Species = species  # Add Species column (Fix!)
        ) %>%
        dplyr::select(GeneID, GeneType, Description, Orthogroup,Orthogroup_Type, Tissue, Species, Status)  # Ensure Species column is included

    thorax_merged <- thorax_merged %>%
        mutate(
            Status = case_when(
                padj < 0.05 & log2FoldChange > 1 ~ "Upregulated",
                padj < 0.05 & log2FoldChange < -1 ~ "Downregulated",
                TRUE ~ "Not Significant"
            ),
            Tissue = "Thorax",  # Add Tissue column
            Species = species   # Add Species column (Fix!)
        ) %>%
        dplyr::select(GeneID, GeneType, Description, Orthogroup,Orthogroup_Type, Tissue, Species, Status)  # Ensure Species column is included
    
    # Combine results
    summary_table <- bind_rows(summary_table, head_merged, thorax_merged)
}

# Pivot table to show Up/Down/Not Significant per species
summary_table_pivot_Schisto <- summary_table %>%
  pivot_wider(names_from = c(Species, Tissue), values_from = Status, values_fill = "Not Detected")

# Create a searchable DataTable with color formatting
datatable(
  summary_table_pivot_Schisto, 
  options = list(
    pageLength = 50,  # Show only the first 50 rows by default
    scrollX = TRUE,  # Enable horizontal scrolling if needed
    autoWidth = TRUE,  # Adjust column width automatically
    searchHighlight = TRUE  # Highlight search results
  ),
  rownames = FALSE,
  class = "compact"  # Applies a smaller font size
) %>%
  formatStyle(
    columns = names(summary_table_pivot_Schisto)[-c(1,2)],  # Exclude Orthogroup and GeneID from color formatting
    backgroundColor = styleEqual(
      c("Upregulated", "Downregulated"), 
      c("lightcoral", "lightblue")  # Red for Upregulated, Blue for Downregulated
    ),
    color = styleEqual(
      c("Upregulated", "Downregulated"), 
      c("white", "black")  # White text for Upregulated, Black text for Downregulated
    )
  )
# Save as CSV
output_file <- file.path(workDir, "overlap/summarySchistocerca_I2_DEGs_Orthogroups_May2025.csv")
write.csv(summary_table_pivot_Schisto, output_file, row.names = FALSE)

message(paste("Summary table saved at:", output_file))

Polyneoptera-based I2

STRATEGY 1: to gregaria

This table summarize the DEGs as well as the orthogroups it belongs using the DEGs mapped to gregaria.

# Load Orthogroup information
ortho_dir <- "/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/orthofinder/Polyneoptera"
input_file <- file.path(ortho_dir, "Results_I2_iqtree/Orthogroups_genesproteinbiotype_13species_annotated_May2025.csv")
ortholog_df <- read.csv(input_file, header = TRUE, stringsAsFactors = FALSE)

# Replace NA values in the Orthogroup column with "Unassigned"
ortholog_df$Orthogroup[is.na(ortholog_df$Orthogroup)] <- "Unassigned"

# Ensure correct column names
#if ("gene_id" %in% colnames(ortholog_df)) {
#    colnames(ortholog_df)[colnames(ortholog_df) == "gene_id"] <- "GeneID"
#}

# Keep only relevant columns and ensure uniqueness
ortholog_df <- ortholog_df %>%
    dplyr::select(GeneID, GeneType, Orthogroup, Orthogroup_Type, Description, Species) %>%
    dplyr::distinct(GeneID, .keep_all = TRUE)

# Define species list
species_list <- c("gregaria", "piceifrons", "cancellata", "americana", "cubense", "nitens")

# Initialize an empty data frame for summary
summary_table <- data.frame()

# Loop through each species
for (species in species_list) {
    message(paste("Processing:", species))
    
    # Load DESeq2 results for Head and Thorax
    head_file <- file.path(workDir, "DEG_results/Bulk_RNAseq/", paste0(species, "/Head/DESeq2_sigresults_sva_Head_", species,"_togregaria.csv"))
    thorax_file <- file.path(workDir, "DEG_results/Bulk_RNAseq/", paste0(species, "/Thorax/DESeq2_sigresults_sva_Thorax_", species,"_togregaria.csv"))
    
    # Check if files exist
    if (!file.exists(head_file) || !file.exists(thorax_file)) {
        message(paste("Missing DESeq2 results for:", species))
        next
    }
    
    head_data <- read.csv(head_file, stringsAsFactors = FALSE)
    thorax_data <- read.csv(thorax_file, stringsAsFactors = FALSE)
    
    # Ensure GeneID column exists
    if (!"GeneID" %in% colnames(head_data) && "X" %in% colnames(head_data)) {
        colnames(head_data)[colnames(head_data) == "X"] <- "GeneID"
    }
    if (!"GeneID" %in% colnames(thorax_data) && "X" %in% colnames(thorax_data)) {
        colnames(thorax_data)[colnames(thorax_data) == "X"] <- "GeneID"
    }
    
    # Convert GeneID to character
    head_data$GeneID <- as.character(head_data$GeneID)
    thorax_data$GeneID <- as.character(thorax_data$GeneID)
    ortholog_df$GeneID <- as.character(ortholog_df$GeneID)
    
    # Merge with Orthogroups and ensure Orthogroup is always character
    head_merged <- left_join(head_data, ortholog_df, by = "GeneID") %>%
        mutate(Orthogroup = as.character(ifelse(is.na(Orthogroup), "Unassigned", Orthogroup)))

    thorax_merged <- left_join(thorax_data, ortholog_df, by = "GeneID") %>%
        mutate(Orthogroup = as.character(ifelse(is.na(Orthogroup), "Unassigned", Orthogroup)))
    
    # Classify DEGs and add Tissue + Species columns
    head_merged <- head_merged %>%
        mutate(
            Status = case_when(
                padj < 0.05 & log2FoldChange > 1 ~ "Upregulated",
                padj < 0.05 & log2FoldChange < -1 ~ "Downregulated",
                TRUE ~ "Not Significant"
            ),
            Tissue = "Head",   # Add Tissue column
            Species = species  # Add Species column (Fix!)
        ) %>%
        dplyr::select(GeneID, GeneType, Description, Orthogroup, Orthogroup_Type, Tissue, Species, Status)  # Ensure Species column is included

    thorax_merged <- thorax_merged %>%
        mutate(
            Status = case_when(
                padj < 0.05 & log2FoldChange > 1 ~ "Upregulated",
                padj < 0.05 & log2FoldChange < -1 ~ "Downregulated",
                TRUE ~ "Not Significant"
            ),
            Tissue = "Thorax",  # Add Tissue column
            Species = species   # Add Species column (Fix!)
        ) %>%
        dplyr::select(GeneID, GeneType, Description, Orthogroup, Orthogroup_Type, Tissue, Species, Status)  # Ensure Species column is included
    
    # Combine results
    summary_table <- bind_rows(summary_table, head_merged, thorax_merged)
}

ortho_dir <- "/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/orthofinder/Polyneoptera/Results_I2_iqtree/"
clade_path <- file.path(ortho_dir, "Orthogroups/Orthogroups_CladeAssignment_WithCopyStatus_cleaned.txt")
gene_counts_clade <- read_table(clade_path)

clade_info <- gene_counts_clade %>%
  select(Orthogroup, Assigned_Clade)

# Pivot table to show Up/Down/Not Significant per species
summary_table_pivot <- summary_table %>%
  pivot_wider(names_from = c(Species, Tissue), values_from = Status, values_fill = "Not Detected")%>%
  left_join(clade_info, by = "Orthogroup")

# Create a searchable DataTable with color formatting
datatable(
  summary_table_pivot, 
  options = list(
    pageLength = 50,  # Show only the first 50 rows by default
    scrollX = TRUE,  # Enable horizontal scrolling if needed
    autoWidth = TRUE,  # Adjust column width automatically
    searchHighlight = TRUE  # Highlight search results
  ),
  rownames = FALSE,
  class = "compact"  # Applies a smaller font size
) %>%
  formatStyle(
    columns = names(summary_table_pivot)[-c(1,2)],  # Exclude Orthogroup and GeneID from color formatting
    backgroundColor = styleEqual(
      c("Upregulated", "Downregulated"), 
      c("lightcoral", "lightblue")  # Red for Upregulated, Blue for Downregulated
    ),
    color = styleEqual(
      c("Upregulated", "Downregulated"), 
      c("white", "black")  # White text for Upregulated, Black text for Downregulated
    )
  )
# Save as CSV
output_file <- file.path(workDir, "overlap/summaryPolyneoptera_I2_DEGs_Orthogroups_togregaria_May2025.csv")
write.csv(summary_table_pivot, output_file, row.names = FALSE)

message(paste("Summary table saved at:", output_file))

STRATEGY 2: to own RefSeq

This table summarize the DEGs as well as the orthogroups it belongs using the DEGs mapped to own RefSeq.

# Load Orthogroup information
ortho_dir <- "/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/orthofinder/Polyneoptera"
input_file <- file.path(ortho_dir, "Results_I2_iqtree/Orthogroups_genesproteinbiotype_13species_annotated_May2025.csv")
ortholog_df <- read.csv(input_file, header = TRUE, stringsAsFactors = FALSE)

# Replace NA values in the Orthogroup column with "Unassigned"
ortholog_df$Orthogroup[is.na(ortholog_df$Orthogroup)] <- "Unassigned"

# Ensure correct column names
if ("gene_id" %in% colnames(ortholog_df)) {
    colnames(ortholog_df)[colnames(ortholog_df) == "gene_id"] <- "GeneID"
}

# Keep only relevant columns and ensure uniqueness
ortholog_df <- ortholog_df %>%
    dplyr::select(GeneID, GeneType, Orthogroup, Orthogroup_Type, Description, Species) %>%
    dplyr::distinct(GeneID, .keep_all = TRUE)

# Define species list
species_list <- c("gregaria", "piceifrons", "cancellata", "americana", "cubense", "nitens")

# Initialize an empty data frame for summary
summary_table <- data.frame()

# Loop through each species
for (species in species_list) {
    message(paste("Processing:", species))
    
    # Load DESeq2 results for Head and Thorax
    head_file <- file.path(workDir, "DEG_results/Bulk_RNAseq/", paste0(species, "/Head/DESeq2_sigresults_sva_Head_", species,".csv"))
    thorax_file <- file.path(workDir, "DEG_results/Bulk_RNAseq/", paste0(species, "/Thorax/DESeq2_sigresults_sva_Thorax_", species,".csv"))
    
    # Check if files exist
    if (!file.exists(head_file) || !file.exists(thorax_file)) {
        message(paste("Missing DESeq2 results for:", species))
        next
    }
    
    head_data <- read.csv(head_file, stringsAsFactors = FALSE)
    thorax_data <- read.csv(thorax_file, stringsAsFactors = FALSE)
    
    # Ensure GeneID column exists
    if (!"GeneID" %in% colnames(head_data) && "X" %in% colnames(head_data)) {
        colnames(head_data)[colnames(head_data) == "X"] <- "GeneID"
    }
    if (!"GeneID" %in% colnames(thorax_data) && "X" %in% colnames(thorax_data)) {
        colnames(thorax_data)[colnames(thorax_data) == "X"] <- "GeneID"
    }
    
    # Convert GeneID to character
    head_data$GeneID <- as.character(head_data$GeneID)
    thorax_data$GeneID <- as.character(thorax_data$GeneID)
    ortholog_df$GeneID <- as.character(ortholog_df$GeneID)
    
    # Merge with Orthogroups and ensure Orthogroup is always character
    head_merged <- left_join(head_data, ortholog_df, by = "GeneID") %>%
        mutate(Orthogroup = as.character(ifelse(is.na(Orthogroup), "Unassigned", Orthogroup)))

    thorax_merged <- left_join(thorax_data, ortholog_df, by = "GeneID") %>%
        mutate(Orthogroup = as.character(ifelse(is.na(Orthogroup), "Unassigned", Orthogroup)))
    
    # Classify DEGs and add Tissue + Species columns
    head_merged <- head_merged %>%
        mutate(
            Status = case_when(
                padj < 0.05 & log2FoldChange > 1 ~ "Upregulated",
                padj < 0.05 & log2FoldChange < -1 ~ "Downregulated",
                TRUE ~ "Not Significant"
            ),
            Tissue = "Head",   # Add Tissue column
            Species = species  # Add Species column (Fix!)
        ) %>%
        dplyr::select(GeneID, GeneType, Description, Orthogroup, Orthogroup_Type, Tissue, Species, Status)  # Ensure Species column is included

    thorax_merged <- thorax_merged %>%
        mutate(
            Status = case_when(
                padj < 0.05 & log2FoldChange > 1 ~ "Upregulated",
                padj < 0.05 & log2FoldChange < -1 ~ "Downregulated",
                TRUE ~ "Not Significant"
            ),
            Tissue = "Thorax",  # Add Tissue column
            Species = species   # Add Species column (Fix!)
        ) %>%
        dplyr::select(GeneID, GeneType, Description, Orthogroup, Orthogroup_Type, Tissue, Species, Status)  # Ensure Species column is included
    
    # Combine results
    summary_table <- bind_rows(summary_table, head_merged, thorax_merged)
}

ortho_dir <- "/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/orthofinder/Polyneoptera/Results_I2_iqtree"
clade_path <- file.path(ortho_dir, "Orthogroups/Orthogroups_CladeAssignment_WithCopyStatus_cleaned.txt")
gene_counts_clade <- read_table(clade_path)

clade_info <- gene_counts_clade %>%
  select(Orthogroup, Assigned_Clade)

# Pivot table to show Up/Down/Not Significant per species
summary_table_pivot_Polyneoptera <- summary_table %>%
  pivot_wider(names_from = c(Species, Tissue), values_from = Status, values_fill = "Not Detected")%>%
  left_join(clade_info, by = "Orthogroup")

# Create a searchable DataTable with color formatting
datatable(
  summary_table_pivot_Polyneoptera, 
  options = list(
    pageLength = 50,  # Show only the first 50 rows by default
    scrollX = TRUE,  # Enable horizontal scrolling if needed
    autoWidth = TRUE,  # Adjust column width automatically
    searchHighlight = TRUE  # Highlight search results
  ),
  rownames = FALSE,
  class = "compact"  # Applies a smaller font size
) %>%
  formatStyle(
    columns = names(summary_table_pivot_Polyneoptera)[-c(1,2)],  # Exclude Orthogroup and GeneID from color formatting
    backgroundColor = styleEqual(
      c("Upregulated", "Downregulated"), 
      c("lightcoral", "lightblue")  # Red for Upregulated, Blue for Downregulated
    ),
    color = styleEqual(
      c("Upregulated", "Downregulated"), 
      c("white", "black")  # White text for Upregulated, Black text for Downregulated
    )
  )
# Save as CSV
output_file <- file.path(workDir, "overlap/summaryPolyneoptera_I2_DEGs_Orthogroups_May2025.csv")
write.csv(summary_table_pivot_Polyneoptera, output_file, row.names = FALSE)

message(paste("Summary table saved at:", output_file))

This table below is for exporting the possible candidate genes overlapping for LOCUSTS with their DEGs counts:

# === Step 1: Load both datasets ===
orthogroup_head <- read_csv("/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/overlap/Locusts/Venn_ALL_HEAD_Locusts_overlap_table.csv") %>%
  filter(Species %in% c("Spice", "Sgreg", "Scanc"))

orthogroup_thorax <- read_csv("/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/overlap/Locusts/Venn_ALL_THORAX_Locusts_overlap_table.csv") %>%
  filter(Species %in% c("Spice", "Sgreg", "Scanc"))

deg_df <- read_csv("/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/overlap/DEGs_values_allspecies_June2025.csv")  

# === Merge expression data with orthogroup info for Head ===
head_df <- orthogroup_head %>%
  left_join(deg_df %>% select(GeneID, starts_with("baseMean_Head"):starts_with("padj_Head")), by = "GeneID")

# === Same for Thorax ===
thorax_df <- orthogroup_thorax %>%
  left_join(deg_df %>% select(GeneID, starts_with("baseMean_Thorax"):starts_with("padj_Thorax")), by = "GeneID")

# === Full join to combine — keeps all GeneIDs ===
combined_df <- full_join(head_df, thorax_df, by = "GeneID", suffix = c("_Head", "_Thorax"))

# === Optional: reorder columns to your preferred layout ===
combined_df <- combined_df %>%
  relocate(GeneID, starts_with("Orthogroup"), starts_with("protein_id"), starts_with("Description"),
           starts_with("Species"), starts_with("GeneType"), starts_with("Accession"),
           starts_with("Begin"), starts_with("End"), starts_with("RefSeq"),
           starts_with("baseMean_Head"), starts_with("log2FoldChange_Head"),
           starts_with("lfcSE_Head"), starts_with("stat_Head"),
           starts_with("pvalue_Head"), starts_with("padj_Head"),
           starts_with("baseMean_Thorax"), starts_with("log2FoldChange_Thorax"),
           starts_with("lfcSE_Thorax"), starts_with("stat_Thorax"),
           starts_with("pvalue_Thorax"), starts_with("padj_Thorax"))

# === Write output ===
write_csv(combined_df, "/Users/maevatecher/Documents/GitHub/locust-comparative-genomics/data/overlap/Candidate_genes_LOCUSTS_June2025.csv")

We will go ahead and use only the STRATEGY 2 from the downstream analysis.

2. Layering gene families with DEGs informations

Schistocerca-based I2

Head-tissue

First we check what is the maximum of copy per one orthogroup that can be upregulated or downregulated in a same species:

# === STEP 1: Reshape summary_table_pivot into long format ===
deg_long <- summary_table_pivot_Schisto %>%
  pivot_longer(
    cols = ends_with(c("_Head", "_Thorax")),
    names_to = "Sample",
    values_to = "Status"
  ) %>%
  separate(Sample, into = c("Species", "Tissue"), sep = "_") %>%
  filter(Status %in% c("Upregulated", "Downregulated"))

# === STEP 2: Count DEGs per Orthogroup × Species × Tissue × Status ===
deg_summary_counts <- deg_long %>%
  filter(Orthogroup != "Unassigned") %>%  # Exclude unassigned orthogroups
  group_by(Orthogroup, Orthogroup_Type, Species, Tissue, Status) %>%
  summarise(CopyCount = n(), .groups = "drop") %>%
  mutate(CopyCount = as.integer(CopyCount))

# === STEP 3: Define plotting function ==
plot_deg_distribution_split <- function(tissue_name) {
  
  # Filter the full plot data
  plot_df <- deg_summary_counts %>%
    filter(Tissue == tissue_name) %>%
    dplyr::count(Species, Status, CopyCount)

  # Panel 1: Single-copy orthogroups
  plot_single <- ggplot(filter(plot_df, CopyCount == 1),
                        aes(x = Status, y = n, fill = Status)) +
    geom_bar(stat = "identity", position = "dodge", width = 0.8, alpha = 0.8) +
    facet_wrap(~Species, ncol = 1) +
    geom_text(aes(label = n), vjust = -0.3, size = 4) +
    labs(
      title = paste("Single-copy DEGs (", tissue_name, ")", sep = ""),
      x = NULL,
      y = "Orthogroup count"
    ) +
    coord_cartesian(ylim = c(0, 600)) +
    scale_fill_manual(values = c("Upregulated" = "red", "Downregulated" = "blue")) +
    theme_minimal(base_size = 13) +
    theme(
      panel.grid.minor = element_blank(),
      legend.position = "none",
      strip.text = element_text(face = "bold")
    )

  # Panel 2: Multi-copy orthogroups, y limited to 40
  plot_multi <- ggplot(filter(plot_df, CopyCount > 1),
                       aes(x = CopyCount, y = n, fill = Status)) +
    geom_bar(stat = "identity", position = position_dodge(0.9), width = 0.8, alpha = 0.8) +
    geom_text(aes(label = ifelse(n < 100, n, "")),
              position = position_dodge(width = 0.9),
              vjust = -0.3, size = 4) +
    facet_wrap(~Species, ncol = 1) +
    labs(
      title = paste("Multi-copy DEGs (", tissue_name, ")", sep = ""),
      x = "Copy count",
      y = NULL
    ) +
    coord_cartesian(ylim = c(0, 35)) +
    scale_x_continuous(breaks = 2:15) +
    scale_fill_manual(values = c("Upregulated" = "red", "Downregulated" = "blue")) +
    theme_minimal(base_size = 13) +
    theme(
      panel.grid.minor  = element_blank(),
      legend.position = "top",
      strip.text = element_text(face = "bold")
    )

  # Combine plots side by side
  plot_single + plot_multi + plot_layout(widths = c(1, 2))
}

plot_deg_distribution_split("Head")

We found the maximum of copies upregulated genes in one orthogroup is 6 and 9 downregulated. So we decide to make a cap at 5 for plotting.

As a first control, we want to make sure that within an orthogroup, if we have multi-copies of DEG, they would behave the same. If not, and some copies are upregulated while other are downregulated, then we will separate these orthogroups and check them later.

# --- Step 1: Prepare input data ---
summary_df <- summary_table_pivot_Schisto %>%
  filter(Orthogroup != "Unassigned")

species_order <- c("gregaria_Head", "nitens_Head", "cancellata_Head", "piceifrons_Head",  
                   "americana_Head", "cubense_Head")

long_df <- summary_df %>%
  pivot_longer(cols = ends_with("_Head"), names_to = "Sample", values_to = "Status") %>%
  filter(Sample %in% species_order)

# Step 1: Filter for Up/Down only
contrast_df <- long_df %>%
  filter(Status %in% c("Upregulated", "Downregulated")) %>%
  group_by(Orthogroup, Sample) %>%
  summarise(
    n_up = sum(Status == "Upregulated"),
    n_down = sum(Status == "Downregulated"),
    .groups = "drop"
  ) %>%
  filter(n_up > 0 & n_down > 0)

# View result: orthogroups with both up and downregulation in the same sample
print(contrast_df)
# A tibble: 11 × 4
   Orthogroup Sample           n_up n_down
   <chr>      <chr>           <int>  <int>
 1 OG0000002  piceifrons_Head     1      2
 2 OG0000014  piceifrons_Head     1      1
 3 OG0000095  piceifrons_Head     1      1
 4 OG0000097  cancellata_Head     1      1
 5 OG0000154  americana_Head      1      1
 6 OG0000154  piceifrons_Head     1      4
 7 OG0000160  americana_Head      1      1
 8 OG0000163  cancellata_Head     1      1
 9 OG0000290  cancellata_Head     1      3
10 OG0000560  gregaria_Head       2      1
11 OG0001343  cancellata_Head     1      1

We have 35 groups for which there are contrasting patterns, so we will separate them for the heatmap:

# --- Step 2: Count Up/Down per OG × Sample and classify ---
deg_counts <- long_df %>%
  group_by(Orthogroup, Sample) %>%
  summarize(
    Up = sum(Status == "Upregulated", na.rm = TRUE),
    Down = sum(Status == "Downregulated", na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(
    Category = case_when(
      Up > 0 & Down > 0 ~ "Both",
      Up > 0 & Down == 0 ~ "Up",
      Down > 0 & Up == 0 ~ "Down",
      TRUE ~ "None"
    ),
    Value = case_when(
      Category == "Both" ~ 999,
      Category == "Up" ~ pmin(Up, 5),
      Category == "Down" ~ -pmin(Down, 5),
      TRUE ~ 0
    )
  )

# --- Step 3: Identify contrasting orthogroups ---
contrasting_orthogroups <- deg_counts %>%
  filter(Category == "Both") %>%
  pull(Orthogroup) %>%
  unique()

# --- Step 4: Classify OGs by copy number ---
orthogroup_classification <- deg_counts %>%
  pivot_longer(cols = c(Up, Down), names_to = "Direction", values_to = "Count") %>%
  group_by(Orthogroup) %>%
  summarise(MaxCopy = max(Count), .groups = "drop") %>%
  mutate(Category = if_else(MaxCopy > 1, "Multi", "Single"))

# --- Step 5: Separate Single and Multi (excluding contrasting OGs from Multi) ---
deg_counts_single <- deg_counts %>%
  filter(Orthogroup %in% orthogroup_classification$Orthogroup[
    orthogroup_classification$Category == "Single"])

deg_counts_multi <- deg_counts %>%
  filter(
    Orthogroup %in% orthogroup_classification$Orthogroup[
      orthogroup_classification$Category == "Multi"],
    !Orthogroup %in% contrasting_orthogroups
  )

# --- Step 6: Prepare heatmap matrices ---
mat_single <- deg_counts_single %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[species_order, , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]

mat_multi <- deg_counts_multi %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[species_order, , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]

mat_contrast <- deg_counts %>%
  filter(Orthogroup %in% contrasting_orthogroups) %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[species_order, , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]

# --- Step 7: Define color scale ---
deg_colors <- c(
  "-5" = "#00008B",
  "-4" = "#2133A3",
  "-3" = "#4367BB",
  "-2" = "#659AD3",
  "-1" = "#87CEEB",
   "0" = "white",
   "1" = "#FC9272",
   "2" = "#E36D58",
   "3" = "#CA493F",
   "4" = "#B12426",
   "5" = "#99000D", 
  "999" = "purple"
)

col_fun <- circlize::colorRamp2(
  breaks = as.numeric(names(deg_colors)),
  colors = unname(deg_colors)
)

# --- Step 8: Create heatmap objects (not drawn yet) ---
ht_single <- Heatmap(mat_single,
  name = "DEG Count",
  col = col_fun,
  cluster_rows = FALSE,
  cluster_columns = TRUE,
  row_split = factor(rownames(mat_single), levels = species_order),
  row_gap = unit(4, "mm"),
  row_title = "Single-copy DEGs",
  column_title = "Single-copy DEG Orthogroups",
  show_column_names = FALSE,
  row_names_gp = gpar(fontsize = 10)
)


ht_multi <- Heatmap(mat_multi,
  name = "DEG Count",
  col = col_fun,
  cluster_rows = FALSE,
  cluster_columns = TRUE,
  row_split = factor(rownames(mat_multi), levels = species_order),
  row_gap = unit(4, "mm"),
  row_title = "Multi-copy DEGs",
  column_title = "Multi-copy DEG Orthogroups (No Conflict)",
  show_column_names = FALSE,
  row_names_gp = gpar(fontsize = 10)
)


ht_contrast <-Heatmap(mat_contrast,
  name = "DEG Count",
  col = col_fun,
  cluster_rows = FALSE,
  cluster_columns = TRUE,
  row_split = factor(rownames(mat_contrast), levels = species_order),
  row_gap = unit(4, "mm"),
  row_title = "Contrasting DEGs",
  column_title = "Orthogroups with both Up and Down in same species",
  show_column_names = FALSE,
  row_names_gp = gpar(fontsize = 10)
)

# --- Step 9: Custom legends ---
legend_ramp <- Legend(
  col_fun = circlize::colorRamp2(-5:5, deg_colors[as.character(-5:5)]),
  title = "DEG copy number",
  at = -5:5,
  labels = as.character(-5:5),
  legend_height = unit(3, "cm")
)

legend_contrast <- Legend(
  labels = "Both",
  title = "Contrasting",
  legend_gp = gpar(fill = "purple"),
  grid_height = unit(0.3, "cm")
)

leg_combined <- packLegend(legend_ramp, legend_contrast)

# --- Step 10: Draw combined plot with custom legend ---
draw(ht_single, annotation_legend_list = list(legend_ramp))

draw(ht_multi, annotation_legend_list = list(legend_ramp))

draw(ht_contrast, annotation_legend_list = list(leg_combined))

Thorax-tissue

# === STEP 1: Reshape summary_table_pivot into long format ===
deg_long <- summary_table_pivot_Schisto %>%
  pivot_longer(
    cols = ends_with(c("_Head", "_Thorax")),
    names_to = "Sample",
    values_to = "Status"
  ) %>%
  separate(Sample, into = c("Species", "Tissue"), sep = "_") %>%
  filter(Status %in% c("Upregulated", "Downregulated"))

# === STEP 2: Count DEGs per Orthogroup × Species × Tissue × Status ===
deg_summary_counts <- deg_long %>%
  filter(Orthogroup != "Unassigned") %>%  # Exclude unassigned orthogroups
  group_by(Orthogroup, Orthogroup_Type, Species, Tissue, Status) %>%
  summarise(CopyCount = n(), .groups = "drop") %>%
  mutate(CopyCount = as.integer(CopyCount))

# === STEP 3: Define plotting function ==
plot_deg_distribution_split <- function(tissue_name) {
  # Filter the full plot data
  plot_df <- deg_summary_counts %>%
    filter(Tissue == tissue_name) %>%
    dplyr::count(Species, Status, CopyCount)

  # Panel 1: Single-copy orthogroups
  plot_single <- ggplot(filter(plot_df, CopyCount == 1),
                        aes(x = Status, y = n, fill = Status)) +
    geom_bar(stat = "identity", position = "dodge", width = 0.8, alpha = 0.8) +
    facet_wrap(~Species, ncol = 1) +
    geom_text(aes(label = n), vjust = -0.3, size = 4) +
    labs(
      title = paste("Single-copy DEGs (", tissue_name, ")", sep = ""),
      x = NULL,
      y = "Orthogroup count"
    ) +
    coord_cartesian(ylim = c(0, 600)) +
    scale_fill_manual(values = c("Upregulated" = "red", "Downregulated" = "blue")) +
    theme_minimal(base_size = 13) +
    theme(
      panel.grid.minor = element_blank(),
      legend.position = "none",
      strip.text = element_text(face = "bold")
    )

  # Panel 2: Multi-copy orthogroups, y limited to 40
  plot_multi <- ggplot(filter(plot_df, CopyCount > 1),
                       aes(x = CopyCount, y = n, fill = Status)) +
    geom_bar(stat = "identity", position = position_dodge(0.9), width = 0.8, alpha = 0.8) +
    geom_text(aes(label = ifelse(n < 100, n, "")),
              position = position_dodge(width = 0.9),
              vjust = -0.3, size = 4) +
    facet_wrap(~Species, ncol = 1) +
    labs(
      title = paste("Multi-copy DEGs (", tissue_name, ")", sep = ""),
      x = "Copy count",
      y = NULL
    ) +
    coord_cartesian(ylim = c(0, 35)) +
    scale_x_continuous(breaks = 2:15) +
    scale_fill_manual(values = c("Upregulated" = "red", "Downregulated" = "blue")) +
    theme_minimal(base_size = 13) +
    theme(
      panel.grid.minor  = element_blank(),
      legend.position = "top",
      strip.text = element_text(face = "bold")
    )

  # Combine plots side by side
  plot_single + plot_multi + plot_layout(widths = c(1, 2))
}

plot_deg_distribution_split("Thorax")

# --- Step 1: Prepare input data ---
summary_df <- summary_table_pivot_Schisto %>%
  filter(Orthogroup != "Unassigned")

species_order <- c("gregaria_Thorax", "cancellata_Thorax", "piceifrons_Thorax",  
                   "americana_Thorax", "cubense_Thorax")

long_df <- summary_df %>%
  pivot_longer(cols = ends_with("_Thorax"), names_to = "Sample", values_to = "Status") %>%
  filter(Sample %in% species_order)

# Step 1: Filter for Up/Down only
contrast_df <- long_df %>%
  filter(Status %in% c("Upregulated", "Downregulated")) %>%
  group_by(Orthogroup, Sample) %>%
  summarise(
    n_up = sum(Status == "Upregulated"),
    n_down = sum(Status == "Downregulated"),
    .groups = "drop"
  ) %>%
  filter(n_up > 0 & n_down > 0)

# View result: orthogroups with both up and downregulation in the same sample
print(contrast_df)
# A tibble: 11 × 4
   Orthogroup Sample             n_up n_down
   <chr>      <chr>             <int>  <int>
 1 OG0000002  piceifrons_Thorax     3      1
 2 OG0000008  piceifrons_Thorax     1      2
 3 OG0000069  piceifrons_Thorax     4      1
 4 OG0000076  gregaria_Thorax       1      1
 5 OG0000084  piceifrons_Thorax     1      1
 6 OG0000097  cancellata_Thorax     1      1
 7 OG0000142  americana_Thorax      1      1
 8 OG0000163  cancellata_Thorax     1      1
 9 OG0000178  gregaria_Thorax       1      1
10 OG0000245  cubense_Thorax        1      2
11 OG0000290  cancellata_Thorax     1      2

We have 37 groups for which there are contrasting patterns, so we will separate them for the heatmap:

# --- Step 2: Count Up/Down per OG × Sample and classify ---
deg_counts <- long_df %>%
  group_by(Orthogroup, Sample) %>%
  summarize(
    Up = sum(Status == "Upregulated", na.rm = TRUE),
    Down = sum(Status == "Downregulated", na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(
    Category = case_when(
      Up > 0 & Down > 0 ~ "Both",
      Up > 0 & Down == 0 ~ "Up",
      Down > 0 & Up == 0 ~ "Down",
      TRUE ~ "None"
    ),
    Value = case_when(
      Category == "Both" ~ 999,
      Category == "Up" ~ pmin(Up, 5),
      Category == "Down" ~ -pmin(Down, 5),
      TRUE ~ 0
    )
  )

# --- Step 3: Identify contrasting orthogroups ---
contrasting_orthogroups <- deg_counts %>%
  filter(Category == "Both") %>%
  pull(Orthogroup) %>%
  unique()

# --- Step 4: Classify OGs by copy number ---
orthogroup_classification <- deg_counts %>%
  pivot_longer(cols = c(Up, Down), names_to = "Direction", values_to = "Count") %>%
  group_by(Orthogroup) %>%
  summarise(MaxCopy = max(Count), .groups = "drop") %>%
  mutate(Category = if_else(MaxCopy > 1, "Multi", "Single"))

# --- Step 5: Separate Single and Multi (excluding contrasting OGs from Multi) ---
deg_counts_single <- deg_counts %>%
  filter(Orthogroup %in% orthogroup_classification$Orthogroup[
    orthogroup_classification$Category == "Single"])

deg_counts_multi <- deg_counts %>%
  filter(
    Orthogroup %in% orthogroup_classification$Orthogroup[
      orthogroup_classification$Category == "Multi"],
    !Orthogroup %in% contrasting_orthogroups
  )

# --- Step 6: Prepare heatmap matrices ---
mat_single <- deg_counts_single %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[species_order, , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]

mat_multi <- deg_counts_multi %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[species_order, , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]

mat_contrast <- deg_counts %>%
  filter(Orthogroup %in% contrasting_orthogroups) %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[species_order, , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]

# --- Step 7: Define color scale ---
deg_colors <- c(
  "-5" = "#00008B",
  "-4" = "#2133A3",
  "-3" = "#4367BB",
  "-2" = "#659AD3",
  "-1" = "#87CEEB",
   "0" = "white",
   "1" = "#FC9272",
   "2" = "#E36D58",
   "3" = "#CA493F",
   "4" = "#B12426",
   "5" = "#99000D", 
  "999" = "purple"
)

col_fun <- circlize::colorRamp2(
  breaks = as.numeric(names(deg_colors)),
  colors = unname(deg_colors)
)

# --- Step 8: Create heatmap objects (not drawn yet) ---
ht_single <- Heatmap(mat_single,
  name = "DEG Count",
  col = col_fun,
  cluster_rows = FALSE,
  cluster_columns = TRUE,
  row_split = factor(rownames(mat_single), levels = species_order),
  row_gap = unit(4, "mm"),
  row_title = "Single-copy DEGs",
  column_title = "Single-copy DEG Orthogroups",
  show_column_names = FALSE,
  row_names_gp = gpar(fontsize = 10)
)


ht_multi <- Heatmap(mat_multi,
  name = "DEG Count",
  col = col_fun,
  cluster_rows = FALSE,
  cluster_columns = TRUE,
  row_split = factor(rownames(mat_multi), levels = species_order),
  row_gap = unit(4, "mm"),
  row_title = "Multi-copy DEGs",
  column_title = "Multi-copy DEG Orthogroups (No Conflict)",
  show_column_names = FALSE,
  row_names_gp = gpar(fontsize = 10)
)


ht_contrast <-Heatmap(mat_contrast,
  name = "DEG Count",
  col = col_fun,
  cluster_rows = FALSE,
  cluster_columns = TRUE,
  row_split = factor(rownames(mat_contrast), levels = species_order),
  row_gap = unit(4, "mm"),
  row_title = "Contrasting DEGs",
  column_title = "Orthogroups with both Up and Down in same species",
  show_column_names = FALSE,
  row_names_gp = gpar(fontsize = 10)
)

# --- Step 9: Custom legends ---
legend_ramp <- Legend(
  col_fun = circlize::colorRamp2(-5:5, deg_colors[as.character(-5:5)]),
  title = "DEG copy number",
  at = -5:5,
  labels = as.character(-5:5),
  legend_height = unit(3, "cm")
)

legend_contrast <- Legend(
  labels = "Both",
  title = "Contrasting",
  legend_gp = gpar(fill = "purple"),
  grid_height = unit(0.3, "cm")
)

leg_combined <- packLegend(legend_ramp, legend_contrast)

# --- Step 10: Draw combined plot with custom legend ---
draw(ht_single, annotation_legend_list = list(legend_ramp))

draw(ht_multi, annotation_legend_list = list(legend_ramp))

draw(ht_contrast, annotation_legend_list = list(leg_combined))

Polyneoptera-based I2

Head-tissue

First we check what is the maximum number of gene copies within an orthogroup that can be upregulated or downregulated in the same species:

# === STEP 1: Reshape summary_table_pivot into long format ===
deg_long <- summary_table_pivot_Polyneoptera %>%
  pivot_longer(
    cols = ends_with(c("_Head", "_Thorax")),
    names_to = "Sample",
    values_to = "Status"
  ) %>%
  separate(Sample, into = c("Species", "Tissue"), sep = "_") %>%
  filter(Status %in% c("Upregulated", "Downregulated"))

# === STEP 2: Count DEGs per Orthogroup × Species × Tissue × Status ===
deg_summary_counts <- deg_long %>%
  filter(Orthogroup != "Unassigned") %>%  # Exclude unassigned orthogroups
  group_by(Orthogroup, Orthogroup_Type, Species, Tissue, Status) %>%
  summarise(CopyCount = n(), .groups = "drop") %>%
  mutate(CopyCount = as.integer(CopyCount))

species_order <- c("gregaria","cancellata", "piceifrons", "americana", "cubense","nitens")

# === STEP 3: Define plotting function ==
plot_deg_distribution_split <- function(tissue_name) {

    # Filter the full plot data
  plot_df <- deg_summary_counts %>%
    filter(Tissue == tissue_name) %>%
    mutate(Species = factor(Species, levels = species_order)) %>%
    dplyr::count(Species, Status, CopyCount)

  # Panel 1: Single-copy orthogroups
  plot_single <- ggplot(filter(plot_df, CopyCount == 1),
                        aes(x = Status, y = n, fill = Status)) +
    geom_bar(stat = "identity", position = "dodge", width = 0.8) +
    facet_wrap(~Species, ncol = 1) +
    geom_text(aes(label = ifelse(n < 50, n, "")), vjust = -0.3, size = 4)+
    labs(
      title = paste("Single-copy DEGs (", tissue_name, ")", sep = ""),
      x = NULL,
      y = "Number of Orthogroups"
    ) +
    coord_cartesian(ylim = c(0, 600)) +
    scale_fill_manual(values = c("Upregulated" = "red", "Downregulated" = "blue")) +
    theme_minimal(base_size = 13) +
theme(
  panel.grid.major.x = element_blank(),
  panel.grid.minor.x = element_blank(),
  panel.grid.major.y = element_line(),
  panel.grid.minor.y = element_blank(),
  legend.position = "none",
  strip.text = element_text(face = "bold.italic", size = 14),
  axis.text.x = element_text(face = "bold", size = 14, colour = "black")  # <-- added
)


  # Panel 2: Multi-copy orthogroups, y limited to 40
  plot_multi <- ggplot(filter(plot_df, CopyCount > 1),
                       aes(x = CopyCount, y = n, fill = Status)) +
    geom_bar(stat = "identity", position = position_dodge(0.9), width = 0.8) +
    geom_text(aes(label = ifelse(n < 50, n, "")),
          position = position_dodge(width = 0.9),
          vjust = -0.3, size = 4)+
    facet_wrap(~Species, ncol = 1) +
    labs(
      title = paste("Multi-copy DEGs (", tissue_name, ")", sep = ""),
      x = "Number of gene copies",
      y = NULL
    ) +
    coord_cartesian(ylim = c(0, 35)) +
    scale_x_continuous(breaks = 2:9,limits = c(1.5, 9.5))+
    scale_fill_manual(values = c("Upregulated" = "red", "Downregulated" = "blue")) +
    theme_minimal(base_size = 13) +
theme(
  panel.grid.major.x = element_blank(),
  panel.grid.minor.x = element_blank(),
  panel.grid.major.y = element_line(),
  panel.grid.minor.y = element_blank(),  
  legend.position = "top",
  strip.text = element_text(face = "bold.italic", size = 14),
  axis.text.x = element_text(face = "bold", size = 14, colour = "black")   # <-- added
)

  # Combine plots side by side
  plot_single + plot_multi + plot_layout(widths = c(1, 2))
}

plot_deg_distribution_split("Head")

We found the maximum of copies upregulated genes in one orthogroup is 6 and 9 downregulated. So we decide to make a cap at 5 for plotting.

As a first control, we want to make sure that within an orthogroup, if we have multi-copies of DEG, they would behave the same. If not, and some copies are upregulated while other are downregulated, then we will separate these orthogroups and check them later.

# --- Step 1: Prepare input data ---
summary_df <- summary_table_pivot_Polyneoptera %>%
  filter(Orthogroup != "Unassigned")

species_order <- c("gregaria_Head", "nitens_Head", "cancellata_Head", "piceifrons_Head",
                   "americana_Head", "cubense_Head")

long_df <- summary_df %>%
  pivot_longer(cols = ends_with("_Head"), names_to = "Sample", values_to = "Status") %>%
  filter(Sample %in% species_order)

# Step 1: Filter for Up/Down only
contrast_df <- long_df %>%
  filter(Status %in% c("Upregulated", "Downregulated")) %>%
  group_by(Orthogroup, Sample) %>%
  summarise(
    n_up = sum(Status == "Upregulated"),
    n_down = sum(Status == "Downregulated"),
    .groups = "drop"
  ) %>%
  filter(n_up > 0 & n_down > 0)

# View result: orthogroups with both up and downregulation in the same sample
print(contrast_df)
# A tibble: 35 × 4
   Orthogroup Sample           n_up n_down
   <chr>      <chr>           <int>  <int>
 1 OG0000000  americana_Head      1      4
 2 OG0000000  piceifrons_Head     1      1
 3 OG0000013  cancellata_Head     2      1
 4 OG0000014  americana_Head      1      1
 5 OG0000014  cancellata_Head     2      1
 6 OG0000014  gregaria_Head       6      2
 7 OG0000015  gregaria_Head       2      1
 8 OG0000019  piceifrons_Head     1      3
 9 OG0000035  gregaria_Head       2      1
10 OG0000048  cancellata_Head     1      1
# ℹ 25 more rows

We have 35 groups for which there are contrasting patterns, so we will separate them for the heatmap:

# --- Step 2: Count Up/Down per OG × Sample and classify ---
deg_counts <- long_df %>%
  group_by(Orthogroup, Orthogroup_Type, Sample) %>%
  summarize(
    Up = sum(Status == "Upregulated", na.rm = TRUE),
    Down = sum(Status == "Downregulated", na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(
    Category = case_when(
      Up > 0 & Down > 0 ~ "Both",
      Up > 0 & Down == 0 ~ "Up",
      Down > 0 & Up == 0 ~ "Down",
      TRUE ~ "None"
    ),
    Value = case_when(
      Category == "Both" ~ 999,
      Category == "Up" ~ pmin(Up, 5),
      Category == "Down" ~ -pmin(Down, 5),
      TRUE ~ 0
    )
  )

# --- Step 3: Identify contrasting orthogroups ---
contrasting_orthogroups <- deg_counts %>%
  filter(Category == "Both") %>%
  pull(Orthogroup) %>%
  unique()

# --- Step 4: Classify OGs by copy number ---
#orthogroup_classification <- deg_counts %>%
#  pivot_longer(cols = c(Up, Down), names_to = "Direction", values_to = "Count") %>%
#  group_by(Orthogroup) %>%
#  summarise(MaxCopy = max(Count), .groups = "drop") %>%
#  mutate(Category = if_else(MaxCopy > 1, "Multi", "Single"))

# --- Step 5: Re-encode Single-copy OGs to strict -1/0/1 only ---
#deg_counts_single <- deg_counts %>%
#  filter(Orthogroup %in% orthogroup_classification$Orthogroup[
#    orthogroup_classification$Category == "Single"]) %>%
#  mutate(
#    Value = case_when(
#      Up > 0 & Down == 0 ~ 1,
#      Down > 0 & Up == 0 ~ -1,
#      TRUE ~ 0  # Includes 'Both' and 'None'
#    )
#  )

#deg_counts_multi <- deg_counts %>%
#  filter(
#    Orthogroup %in% orthogroup_classification$Orthogroup[
#      orthogroup_classification$Category == "Multi"],
#    !Orthogroup %in% contrasting_orthogroups
#  )

# --- Step 4: Classify Single, Multi, and Contrasting OGs using Orthogroup_Type ---
single_OGs <- deg_counts %>% filter(Orthogroup_Type == "SingleCopy")
multi_OGs  <- deg_counts %>%
  filter(Orthogroup_Type == "MultiCopy" & !Orthogroup %in% contrasting_orthogroups)
contrast_OGs <- deg_counts %>% filter(Orthogroup %in% contrasting_orthogroups)

# --- Step 5: Re-encode Single-copy OGs to strict -1/0/1 only ---
deg_counts_single <- single_OGs %>%
  mutate(Value = case_when(
    Up > 0 & Down == 0 ~ 1,
    Down > 0 & Up == 0 ~ -1,
    TRUE ~ 0  # includes Both and None
  ))

deg_counts_multi <- multi_OGs
deg_counts_contrast <- contrast_OGs

# --- Step 6: Prepare heatmap matrices ---
mat_single <- deg_counts_single %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[species_order, , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]
# To make sure we have only -1 and 1 values
#unique(as.vector(mat_single))

mat_multi <- deg_counts_multi %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[species_order, , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]

mat_contrast <- deg_counts_contrast %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[species_order, , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]

# --- Step 7: Define color scale ---
deg_colors <- c(
  "-5" = "#00008B", "-4" = "#2133A3", "-3" = "#4367BB", "-2" = "#659AD3", "-1" = "#87CEEB",
   "0" = "white",
   "1" = "#FC9272", "2" = "#E36D58", "3" = "#CA493F", "4" = "#B12426", "5" = "#99000D",
 "999" = "purple"
)

col_fun <- circlize::colorRamp2(
  breaks = as.numeric(names(deg_colors)),
  colors = unname(deg_colors)
)

col_fun_single <- structure(
  c("#87CEEB", "white", "#FC9272"),
  names = c("-1", "0", "1")
)


# --- Step X: Define clade colors and mapping ---
clade_levels <- c("Polyneoptera", "Orthoptera", "Caelifera", "Schistocerca", "Species_specific")

clade_colors <- c(
  "Polyneoptera"     = "#FFF24C",
  "Orthoptera"       = "#FFBC2F",
  "Caelifera"        = "#12B759",
  "Schistocerca"     = "#72BFFF",
  "Species_specific" = "#854800"
)

get_clade_annotation <- function(matrix_columns) {
  orthogroup_clades <- gene_counts_clade %>%
    select(Orthogroup, Assigned_Clade) %>%
    filter(Orthogroup %in% matrix_columns) %>%
    distinct()
  clade_vector <- setNames(orthogroup_clades$Assigned_Clade, orthogroup_clades$Orthogroup)
  clade_vector[matrix_columns]
}

# --- Step 8: Function for ordered heatmap creation ---
create_clade_split_heatmap <- function(mat, clade_vector, row_title, col_title, col_fun_input) {
  clade_factor <- factor(clade_vector, levels = clade_levels, ordered = TRUE)
  
  Heatmap(
    mat,
    name = "DEG Count",
    col = col_fun_input,  # Use the passed color function
    cluster_rows = FALSE,
    cluster_columns = TRUE,
    column_split = clade_factor,
    column_title = col_title,
    row_split = factor(rownames(mat), levels = species_order),
    row_gap = unit(4, "mm"),
    top_annotation = HeatmapAnnotation(
      Clade = clade_factor,
      col = list(Clade = clade_colors),
      show_annotation_name = TRUE,
      annotation_name_side = "left"
    ),
    cluster_column_slices = FALSE,
    row_title = row_title,
    show_column_names = FALSE,
    row_names_gp = gpar(fontsize = 10)
  )
}

# --- Step 9: Generate heatmaps using unified function ---
ht_single <- create_clade_split_heatmap(mat_single, get_clade_annotation(colnames(mat_single)),
                                         "Single-copy DEGs (Head)", "Faceted by lineage clade", col_fun_single)
ht_multi <- create_clade_split_heatmap(mat_multi, get_clade_annotation(colnames(mat_multi)),
                                        "Multi-copy DEGs (Head)", "Faceted by lineage clade", col_fun)
ht_contrast <- create_clade_split_heatmap(mat_contrast, get_clade_annotation(colnames(mat_contrast)),
                                           "Contrasting DEGs (Head)", "Faceted by lineage clade", col_fun)

# --- Step 10: Custom legends ---
legend_ramp <- Legend(
  col_fun = circlize::colorRamp2(-5:5, deg_colors[as.character(-5:5)]),
  title = "DEG copy number",
  at = -5:5,
  labels = as.character(-5:5),
  legend_height = unit(3, "cm")
)

legend_contrast <- Legend(
  labels = "Both",
  title = "Contrasting",
  legend_gp = gpar(fill = "purple"),
  grid_height = unit(0.3, "cm")
)

leg_combined <- packLegend(legend_ramp, legend_contrast)

legend_single <- Legend(
  at = c(-1, 0, 1),
  labels = c("Down", "None", "Up"),
  title = "Single-copy DEG",
  legend_gp = gpar(fill = c("#87CEEB", "white", "#FC9272")),
  grid_height = unit(0.4, "cm")
)

# --- Step 11: Draw combined plots ---
draw(ht_single, annotation_legend_list = list(legend_single))

draw(ht_multi, annotation_legend_list = list(legend_ramp))

draw(ht_contrast, annotation_legend_list = list(leg_combined))

Thorax-tissue

First we check what is the maximum of copy per one orthogroup that can be upregulated or downregulated in a same species:

# === STEP 1: Reshape summary_table_pivot into long format ===
deg_long <- summary_table_pivot_Polyneoptera %>%
  pivot_longer(
    cols = ends_with(c("_Head", "_Thorax")),
    names_to = "Sample",
    values_to = "Status"
  ) %>%
  separate(Sample, into = c("Species", "Tissue"), sep = "_") %>%
  filter(Status %in% c("Upregulated", "Downregulated"))

# === STEP 2: Count DEGs per Orthogroup × Species × Tissue × Status ===
deg_summary_counts <- deg_long %>%
  filter(Orthogroup != "Unassigned") %>%  # Exclude unassigned orthogroups
  group_by(Orthogroup, Orthogroup_Type, Species, Tissue, Status) %>%
  summarise(CopyCount = n(), .groups = "drop") %>%
  mutate(CopyCount = as.integer(CopyCount))

species_order <- c("gregaria","cancellata", "piceifrons", "americana", "cubense","nitens")

# === STEP 3: Define plotting function ==
plot_deg_distribution_split <- function(tissue_name) {

    # Filter the full plot data
  plot_df <- deg_summary_counts %>%
    filter(Tissue == tissue_name) %>%
    mutate(Species = factor(Species, levels = species_order)) %>%
    dplyr::count(Species, Status, CopyCount)

  # Panel 1: Single-copy orthogroups
  plot_single <- ggplot(filter(plot_df, CopyCount == 1),
                        aes(x = Status, y = n, fill = Status)) +
    geom_bar(stat = "identity", position = "dodge", width = 0.8) +
    facet_wrap(~Species, ncol = 1) +
    geom_text(aes(label = ifelse(n < 50, n, "")), vjust = -0.3, size = 4)+
    labs(
      title = paste("Single-copy DEGs (", tissue_name, ")", sep = ""),
      x = NULL,
      y = "Number of Orthogroups"
    ) +
    coord_cartesian(ylim = c(0, 600)) +
    scale_fill_manual(values = c("Upregulated" = "red", "Downregulated" = "blue")) +
    theme_minimal(base_size = 13) +
theme(
  panel.grid.major.x = element_blank(),
  panel.grid.minor.x = element_blank(),
  panel.grid.major.y = element_line(),
  panel.grid.minor.y = element_blank(),
  legend.position = "none",
  strip.text = element_text(face = "bold.italic", size = 14),
  axis.text.x = element_text(face = "bold", size = 14, colour = "black")  # <-- added
)


  # Panel 2: Multi-copy orthogroups, y limited to 40
  plot_multi <- ggplot(filter(plot_df, CopyCount > 1),
                       aes(x = CopyCount, y = n, fill = Status)) +
    geom_bar(stat = "identity", position = position_dodge(0.9), width = 0.8) +
    geom_text(aes(label = ifelse(n < 50, n, "")),
          position = position_dodge(width = 0.9),
          vjust = -0.3, size = 4)+
    facet_wrap(~Species, ncol = 1) +
    labs(
      title = paste("Multi-copy DEGs (", tissue_name, ")", sep = ""),
      x = "Number of gene copies",
      y = NULL
    ) +
    coord_cartesian(ylim = c(0, 35)) +
    scale_x_continuous(breaks = 2:9,limits = c(1.5, 9.5))+
    scale_fill_manual(values = c("Upregulated" = "red", "Downregulated" = "blue")) +
    theme_minimal(base_size = 13) +
theme(
  panel.grid.major.x = element_blank(),
  panel.grid.minor.x = element_blank(),
  panel.grid.major.y = element_line(),
  panel.grid.minor.y = element_blank(),  
  legend.position = "top",
  strip.text = element_text(face = "bold.italic", size = 14),
  axis.text.x = element_text(face = "bold", size = 14, colour = "black")   # <-- added
)

  # Combine plots side by side
  plot_single + plot_multi + plot_layout(widths = c(1, 2))
}

plot_deg_distribution_split("Thorax")

We found the maximum of copies upregulated genes in one orthogroup is 6 and 9 downregulated. So we decide to make a cap at 5 for plotting.

As a first control, we want to make sure that within an orthogroup, if we have multi-copies of DEG, they would behave the same. If not, and some copies are upregulated while other are downregulated, then we will separate these orthogroups and check them later.

# --- Step 1: Prepare input data ---
summary_df <- summary_table_pivot_Polyneoptera %>%
  filter(Orthogroup != "Unassigned")

species_order <- c("gregaria_Thorax", "cancellata_Thorax", "piceifrons_Thorax",
                   "americana_Thorax", "cubense_Thorax")

long_df <- summary_df %>%
  pivot_longer(cols = ends_with("_Thorax"), names_to = "Sample", values_to = "Status") %>%
  filter(Sample %in% species_order)

# Step 1: Filter for Up/Down only
contrast_df <- long_df %>%
  filter(Status %in% c("Upregulated", "Downregulated")) %>%
  group_by(Orthogroup, Sample) %>%
  summarise(
    n_up = sum(Status == "Upregulated"),
    n_down = sum(Status == "Downregulated"),
    .groups = "drop"
  ) %>%
  filter(n_up > 0 & n_down > 0)

# View result: orthogroups with both up and downregulation in the same sample
print(contrast_df)
# A tibble: 37 × 4
   Orthogroup Sample             n_up n_down
   <chr>      <chr>             <int>  <int>
 1 OG0000000  cancellata_Thorax     3      5
 2 OG0000001  gregaria_Thorax       4      1
 3 OG0000003  cancellata_Thorax     3      1
 4 OG0000003  piceifrons_Thorax     1      2
 5 OG0000013  cancellata_Thorax     3      1
 6 OG0000013  piceifrons_Thorax     2      2
 7 OG0000014  americana_Thorax      2      2
 8 OG0000014  cancellata_Thorax     3      3
 9 OG0000014  gregaria_Thorax       7      2
10 OG0000014  piceifrons_Thorax     7      1
# ℹ 27 more rows

We have 37 groups for which there are contrasting patterns, so we will separate them for the heatmap:

# --- Step 2: Count Up/Down per OG × Sample and classify ---
deg_counts <- long_df %>%
  group_by(Orthogroup, Orthogroup_Type, Sample) %>%
  summarize(
    Up = sum(Status == "Upregulated", na.rm = TRUE),
    Down = sum(Status == "Downregulated", na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(
    Category = case_when(
      Up > 0 & Down > 0 ~ "Both",
      Up > 0 & Down == 0 ~ "Up",
      Down > 0 & Up == 0 ~ "Down",
      TRUE ~ "None"
    ),
    Value = case_when(
      Category == "Both" ~ 999,
      Category == "Up" ~ pmin(Up, 5),
      Category == "Down" ~ -pmin(Down, 5),
      TRUE ~ 0
    )
  )

# --- Step 3: Identify contrasting orthogroups ---
contrasting_orthogroups <- deg_counts %>%
  filter(Category == "Both") %>%
  pull(Orthogroup) %>%
  unique()

# --- Step 4: Classify OGs by copy number ---
#orthogroup_classification <- deg_counts %>%
#  pivot_longer(cols = c(Up, Down), names_to = "Direction", values_to = "Count") %>%
#  group_by(Orthogroup) %>%
#  summarise(MaxCopy = max(Count), .groups = "drop") %>%
#  mutate(Category = if_else(MaxCopy > 1, "Multi", "Single"))

# --- Step 5: Re-encode Single-copy OGs to strict -1/0/1 only ---
#deg_counts_single <- deg_counts %>%
#  filter(Orthogroup %in% orthogroup_classification$Orthogroup[
#    orthogroup_classification$Category == "Single"]) %>%
#  mutate(
#    Value = case_when(
#      Up > 0 & Down == 0 ~ 1,
#      Down > 0 & Up == 0 ~ -1,
#      TRUE ~ 0  # Includes 'Both' and 'None'
#    )
#  )

#deg_counts_multi <- deg_counts %>%
#  filter(
#    Orthogroup %in% orthogroup_classification$Orthogroup[
#      orthogroup_classification$Category == "Multi"],
#    !Orthogroup %in% contrasting_orthogroups
#  )

# --- Step 4: Classify Single, Multi, and Contrasting OGs using Orthogroup_Type ---
single_OGs <- deg_counts %>% filter(Orthogroup_Type == "SingleCopy")
multi_OGs  <- deg_counts %>%
  filter(Orthogroup_Type == "MultiCopy" & !Orthogroup %in% contrasting_orthogroups)
contrast_OGs <- deg_counts %>% filter(Orthogroup %in% contrasting_orthogroups)

# --- Step 5: Re-encode Single-copy OGs to strict -1/0/1 only ---
deg_counts_single <- single_OGs %>%
  mutate(Value = case_when(
    Up > 0 & Down == 0 ~ 1,
    Down > 0 & Up == 0 ~ -1,
    TRUE ~ 0  # includes Both and None
  ))

deg_counts_multi <- multi_OGs
deg_counts_contrast <- contrast_OGs

# --- Step 6: Prepare heatmap matrices ---
mat_single <- deg_counts_single %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[species_order, , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]
# To make sure we have only -1 and 1 values
#unique(as.vector(mat_single))

mat_multi <- deg_counts_multi %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[species_order, , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]

mat_contrast <- deg_counts_contrast %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[species_order, , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]

# --- Step 7: Define color scale ---
deg_colors <- c(
  "-5" = "#00008B", "-4" = "#2133A3", "-3" = "#4367BB", "-2" = "#659AD3", "-1" = "#87CEEB",
   "0" = "white",
   "1" = "#FC9272", "2" = "#E36D58", "3" = "#CA493F", "4" = "#B12426", "5" = "#99000D",
 "999" = "purple"
)

col_fun <- circlize::colorRamp2(
  breaks = as.numeric(names(deg_colors)),
  colors = unname(deg_colors)
)

col_fun_single <- structure(
  c("#87CEEB", "white", "#FC9272"),
  names = c("-1", "0", "1")
)


# --- Step X: Define clade colors and mapping ---
clade_levels <- c("Polyneoptera", "Orthoptera", "Caelifera", "Schistocerca", "Species_specific")

clade_colors <- c(
  "Polyneoptera"     = "#FFF24C",
  "Orthoptera"       = "#FFBC2F",
  "Caelifera"        = "#12B759",
  "Schistocerca"     = "#72BFFF",
  "Species_specific" = "#854800"
)

get_clade_annotation <- function(matrix_columns) {
  orthogroup_clades <- gene_counts_clade %>%
    select(Orthogroup, Assigned_Clade) %>%
    filter(Orthogroup %in% matrix_columns) %>%
    distinct()
  clade_vector <- setNames(orthogroup_clades$Assigned_Clade, orthogroup_clades$Orthogroup)
  clade_vector[matrix_columns]
}

# --- Step 8: Function for ordered heatmap creation ---
create_clade_split_heatmap <- function(mat, clade_vector, row_title, col_title, col_fun_input) {
  clade_factor <- factor(clade_vector, levels = clade_levels, ordered = TRUE)
  
  Heatmap(
    mat,
    name = "DEG Count",
    col = col_fun_input,  # Use the passed color function
    cluster_rows = FALSE,
    cluster_columns = TRUE,
    column_split = clade_factor,
    column_title = col_title,
    row_split = factor(rownames(mat), levels = species_order),
    row_gap = unit(4, "mm"),
    top_annotation = HeatmapAnnotation(
      Clade = clade_factor,
      col = list(Clade = clade_colors),
      show_annotation_name = TRUE,
      annotation_name_side = "left"
    ),
    cluster_column_slices = FALSE,
    row_title = row_title,
    show_column_names = FALSE,
    row_names_gp = gpar(fontsize = 10)
  )
}

# --- Step 9: Generate heatmaps using unified function ---
ht_single <- create_clade_split_heatmap(mat_single, get_clade_annotation(colnames(mat_single)),
                                         "Single-copy DEGs (Thorax)", "Faceted by lineage clade", col_fun_single)
ht_multi <- create_clade_split_heatmap(mat_multi, get_clade_annotation(colnames(mat_multi)),
                                        "Multi-copy DEGs (Thorax)", "Faceted by lineage clade", col_fun)
ht_contrast <- create_clade_split_heatmap(mat_contrast, get_clade_annotation(colnames(mat_contrast)),
                                           "Contrasting DEGs (Thorax)", "Faceted by lineage clade", col_fun)

# --- Step 10: Custom legends ---
legend_ramp <- Legend(
  col_fun = circlize::colorRamp2(-5:5, deg_colors[as.character(-5:5)]),
  title = "DEG copy number",
  at = -5:5,
  labels = as.character(-5:5),
  legend_height = unit(3, "cm")
)

legend_contrast <- Legend(
  labels = "Both",
  title = "Contrasting",
  legend_gp = gpar(fill = "purple"),
  grid_height = unit(0.3, "cm")
)

leg_combined <- packLegend(legend_ramp, legend_contrast)

legend_single <- Legend(
  at = c(-1, 0, 1),
  labels = c("Down", "None", "Up"),
  title = "Single-copy DEG",
  legend_gp = gpar(fill = c("#87CEEB", "white", "#FC9272")),
  grid_height = unit(0.4, "cm")
)

# --- Step 11: Draw combined plots ---
draw(ht_single, annotation_legend_list = list(legend_single))

draw(ht_multi, annotation_legend_list = list(legend_ramp))

draw(ht_contrast, annotation_legend_list = list(leg_combined))

Combined

# === STEP 1: Reshape summary_table_pivot into long format ===
summary_df <- summary_table_pivot_Polyneoptera %>%
  filter(Orthogroup != "Unassigned")

species_order <- c(
  "gregaria_Head", "gregaria_Thorax", "cancellata_Head", "cancellata_Thorax",
  "piceifrons_Head", "piceifrons_Thorax", "americana_Head", "americana_Thorax", 
  "cubense_Head", "cubense_Thorax", "nitens_Head"
)

# Convert wide table to long format
long_df <- summary_df %>%
  pivot_longer(
    cols = ends_with("_Head") | ends_with("_Thorax"),
    names_to = "Sample", values_to = "Status"
  ) %>%
  filter(Sample %in% species_order) %>%
  as_tibble()


# === STEP 2: Define dominant Orthogroup_Type per OG ===
orthogroup_type_map <- long_df %>%
  filter(!is.na(Orthogroup_Type)) %>%
  dplyr::count(Orthogroup, Orthogroup_Type) %>%
  group_by(Orthogroup) %>%
  slice_max(order_by = n, n = 1, with_ties = FALSE) %>%
  ungroup()

# === STEP 3: Count DEGs per Orthogroup × Sample ===
deg_counts <- long_df %>%
  filter(Status %in% c("Upregulated", "Downregulated")) %>%
  group_by(Orthogroup, Sample) %>%
  summarise(
    Up = sum(Status == "Upregulated"),
    Down = sum(Status == "Downregulated"),
    .groups = "drop"
  ) %>%
  mutate(
    Category = case_when(
      Up > 0 & Down > 0 ~ "Both",
      Up > 0 ~ "Up",
      Down > 0 ~ "Down",
      TRUE ~ "None"
    ),
    Value = case_when(
      Category == "Both" ~ 999,
      Category == "Up" ~ pmin(Up, 5),
      Category == "Down" ~ -pmin(Down, 5),
      TRUE ~ 0
    )
  ) %>%
  # Join the cleaned Orthogroup_Type info
  left_join(orthogroup_type_map, by = "Orthogroup")



# Subset to Single-copy only
deg_counts_single <- deg_counts %>%
  filter(Orthogroup_Type == "SingleCopy") %>%
  filter(Value != 999) %>%  # remove contrasting
  mutate(Value = case_when(
    Up > 0 ~ 1,
    Down > 0 ~ -1,
    TRUE ~ 0
  ))

# MULTI-copy: keep only Value ≠ 999
deg_counts_multi <- deg_counts %>%
  filter(
    Orthogroup %in% orthogroup_classification$Orthogroup[
      orthogroup_classification$Category == "Multi"],
    !Orthogroup %in% contrasting_orthogroups
  )

# Create matrix: Sample × Orthogroup
mat_single <- deg_counts_single %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[species_order, , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]

# MULTI matrix
mat_multi <- deg_counts_multi %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[intersect(rownames(.), species_order), , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]

# Identify the contrasting orthogroups across all samples
contrasting_orthogroups <- deg_counts %>%
  filter(Category == "Both") %>%
 pull(Orthogroup) %>%
  unique()

# --- Step 4: Classify OGs by copy number ---
orthogroup_classification <- deg_counts %>%
  pivot_longer(cols = c(Up, Down), names_to = "Direction", values_to = "Count") %>%
  group_by(Orthogroup) %>%
  summarise(MaxCopy = max(Count), .groups = "drop") %>%
  mutate(Category = if_else(MaxCopy > 1, "Multi", "Single"))

# Filter deg_counts for *all* values of those orthogroups
deg_counts_contrast <- deg_counts %>%
  filter(Orthogroup %in% contrasting_orthogroups)

# Now build the matrix
mat_contrast <- deg_counts_contrast %>%
  select(Orthogroup, Sample, Value) %>%
  pivot_wider(names_from = Orthogroup, values_from = Value, values_fill = 0) %>%
  column_to_rownames("Sample") %>%
  .[intersect(species_order, rownames(.)), , drop = FALSE] %>%
  .[, colSums(abs(.)) > 0, drop = FALSE]


# --- Step 7: Define color scale ---
deg_colors <- c(
  "-5" = "#00008B", "-4" = "#2133A3", "-3" = "#4367BB", "-2" = "#659AD3", "-1" = "#87CEEB",
   "0" = "white",
   "1" = "#FC9272", "2" = "#E36D58", "3" = "#CA493F", "4" = "#B12426", "5" = "#99000D",
 "999" = "purple"
)

col_fun <- circlize::colorRamp2(
  breaks = as.numeric(names(deg_colors)),
  colors = unname(deg_colors)
)

col_fun_single <- circlize::colorRamp2(
  breaks = c(-1, 0, 1),
  colors = c("#87CEEB", "white", "#FC9272")
)


legend_single <- Legend(
  at = c(-1, 0, 1),
  labels = c("Down", "None", "Up"),
  title = "Single-copy DEG",
  legend_gp = gpar(fill = c("#87CEEB", "white", "#FC9272")),
  grid_height = unit(0.4, "cm")
)

# Define clade levels/colors
clade_levels <- c("Polyneoptera", "Orthoptera", "Caelifera", "Schistocerca", "Species_specific")
clade_colors <- c(
  "Polyneoptera"     = "#FFF24C",
  "Orthoptera"       = "#FFBC2F",
  "Caelifera"        = "#12B759",
  "Schistocerca"     = "#72BFFF",
  "Species_specific" = "#854800"
)

get_clade_annotation <- function(matrix_columns) {
  orthogroup_clades <- gene_counts_clade %>%
    select(Orthogroup, Assigned_Clade) %>%
    filter(Orthogroup %in% matrix_columns) %>%
    distinct()
  clade_vector <- setNames(orthogroup_clades$Assigned_Clade, orthogroup_clades$Orthogroup)
  clade_vector[matrix_columns]
}

# --- Step 8: Function for ordered heatmap creation ---
create_clade_split_heatmap <- function(mat, clade_vector, row_title, col_title, col_fun_input) {
  clade_factor <- factor(clade_vector, levels = clade_levels, ordered = TRUE)
  
  Heatmap(
    mat,
    name = "DEG Count",
    col = col_fun_input,  # Use the passed color function
    cluster_rows = FALSE,
    cluster_columns = TRUE,
    column_split = clade_factor,
    column_title = col_title,
    row_split = factor(rownames(mat), levels = species_order),
    row_gap = unit(2, "mm"),
    top_annotation = HeatmapAnnotation(
      Clade = clade_factor,
      col = list(Clade = clade_colors),
      show_annotation_name = TRUE,
      annotation_name_side = "left"),
    cluster_column_slices = FALSE,
    row_title = row_title,
    show_column_names = FALSE,
    row_names_gp = gpar(fontsize = 10)
  )
}

# --- Step 9: Generate heatmaps using unified function ---
ht_single <- create_clade_split_heatmap(mat_single, get_clade_annotation(colnames(mat_single)),
                                         "Single-copy DEGs (Combined)", "Faceted by lineage clade", col_fun_single)
ht_multi <- create_clade_split_heatmap(mat_multi, get_clade_annotation(colnames(mat_multi)),
                                        "Multi-copy DEGs (Combined)", "Faceted by lineage clade", col_fun)
ht_contrast <- create_clade_split_heatmap(
  mat_contrast,
  get_clade_annotation(colnames(mat_contrast)),
  "Contrasting DEGs (Combined)",
  "Faceted by lineage clade",
  col_fun
)


# --- Step 10: Custom legends ---
legend_ramp <- Legend(
  col_fun = circlize::colorRamp2(-5:5, deg_colors[as.character(-5:5)]),
  title = "DEG copy number",
  at = -5:5,
  labels = as.character(-5:5),
  legend_height = unit(3, "cm")
)

legend_contrast <- Legend(
  labels = "Both",
  at = 999,
  title = "Contrasting",
  legend_gp = gpar(fill = "purple"),
  grid_height = unit(0.4, "cm")
)


leg_combined <- packLegend(legend_ramp, legend_contrast)

legend_single <- Legend(
  at = c(-1, 0, 1),
  labels = c("Down", "None", "Up"),
  title = "Single-copy DEG",
  legend_gp = gpar(fill = c("#87CEEB", "white", "#FC9272")),
  grid_height = unit(0.4, "cm")
)

# --- Step 11: Draw combined plots ---
draw(ht_single, annotation_legend_list = list(legend_single))

draw(ht_multi, annotation_legend_list = list(legend_ramp))

draw(ht_contrast, annotation_legend_list = list(leg_combined))


sessionInfo()
R version 4.4.2 (2024-10-31)
Platform: aarch64-apple-darwin20
Running under: macOS Sequoia 15.5

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Asia/Tokyo
tzcode source: internal

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
 [1] patchwork_1.3.1       circlize_0.4.16       ComplexHeatmap_2.22.0
 [4] DT_0.33               kableExtra_1.4.0      lubridate_1.9.4      
 [7] dplyr_1.1.4           ggplot2_3.5.2         tidyverse_2.0.0      
[10] forcats_1.0.0         tibble_3.3.0          purrr_1.0.4          
[13] stringr_1.5.1         readr_2.1.5           tidyr_1.3.1          

loaded via a namespace (and not attached):
 [1] tidyselect_1.2.1    viridisLite_0.4.2   farver_2.1.2       
 [4] fastmap_1.2.0       promises_1.3.3      digest_0.6.37      
 [7] timechange_0.3.0    lifecycle_1.0.4     cluster_2.1.8.1    
[10] Cairo_1.6-2         magrittr_2.0.3      compiler_4.4.2     
[13] rlang_1.1.6         sass_0.4.10         tools_4.4.2        
[16] utf8_1.2.6          yaml_2.3.10         knitr_1.50         
[19] labeling_0.4.3      htmlwidgets_1.6.4   bit_4.6.0          
[22] xml2_1.3.8          RColorBrewer_1.1-3  workflowr_1.7.1    
[25] withr_3.0.2         BiocGenerics_0.52.0 stats4_4.4.2       
[28] git2r_0.36.2        colorspace_2.1-1    scales_1.4.0       
[31] iterators_1.0.14    dichromat_2.0-0.1   cli_3.6.5          
[34] rmarkdown_2.29      crayon_1.5.3        generics_0.1.4     
[37] rstudioapi_0.17.1   tzdb_0.5.0          rjson_0.2.23       
[40] cachem_1.1.0        parallel_4.4.2      matrixStats_1.5.0  
[43] vctrs_0.6.5         jsonlite_2.0.0      IRanges_2.40.1     
[46] hms_1.1.3           GetoptLong_1.0.5    S4Vectors_0.44.0   
[49] bit64_4.6.0-1       clue_0.3-66         magick_2.8.7       
[52] systemfonts_1.2.3   crosstalk_1.2.1     foreach_1.5.2      
[55] jquerylib_0.1.4     glue_1.8.0          codetools_0.2-20   
[58] stringi_1.8.7       gtable_0.3.6        shape_1.4.6.1      
[61] later_1.4.2         pillar_1.10.2       htmltools_0.5.8.1  
[64] R6_2.6.1            textshaping_1.0.1   doParallel_1.0.17  
[67] rprojroot_2.0.4     vroom_1.6.5         evaluate_1.0.4     
[70] png_0.1-8           httpuv_1.6.16       bslib_0.9.0        
[73] Rcpp_1.0.14         svglite_2.2.1       whisker_0.4.1      
[76] xfun_0.52           fs_1.6.6            pkgconfig_2.0.3    
[79] GlobalOptions_0.1.2