-
-
Save DannyArends/04d87f5590090dfe0dc6b42e5e1bbe15 to your computer and use it in GitHub Desktop.
# Add yourself to the sudo group | |
su - | |
usermod -aG sudo danny | |
exit | |
# Install the virtual box guest additions | |
cd /media/cdrom0 | |
sudo sh ./VBoxLinuxAdditions.run | |
# Install R and deps | |
sudo apt install r-base | |
sudo nano /etc/apt/sources.list | |
sudo apt install libssl-dev | |
sudo apt install libxml2-dev | |
sudo apt install libcurl4-openssl-dev | |
# Install R packages | |
sudo R | |
if (!require("BiocManager", quietly = TRUE)) | |
install.packages("BiocManager") | |
BiocManager::install("GenomicFeatures") | |
BiocManager::install("preprocessCore") | |
q("no") | |
# Install Trimmomatic | |
sudo apt install git | |
sudo apt install ant | |
mkdir software | |
cd software | |
git clone https://github.com/usadellab/Trimmomatic.git | |
cd Trimmomatic | |
ant | |
# Install STAR | |
git clone https://github.com/alexdobin/STAR.git | |
cd STAR/source | |
# [UPDATE 2024] - Checkout an older version of STAR | |
git checkout ee50484 | |
make | |
# Install picard | |
git clone https://github.com/broadinstitute/picard.git | |
cd picard | |
# [UPDATED 2024] - Checkout an older version of PICARD | |
git checkout 5db8017 | |
./gradlew shadowJar | |
# Install HTSlib / samtools / bcftools | |
sudo apt install autoconf | |
git clone https://github.com/samtools/htslib.git | |
git clone https://github.com/samtools/samtools.git | |
git clone https://github.com/samtools/bcftools.git | |
# Install HTSlib | |
cd htslib | |
git submodule update --init --recursive | |
autoreconf -i | |
./configure | |
make | |
# Install samtools | |
cd samtools | |
autoheader | |
autoconf -Wno-syntax | |
./configure | |
make | |
# Install bcftools | |
cd bcftools | |
autoheader | |
autoconf -Wno-syntax | |
./configure | |
make | |
# GATK install | |
wget https://github.com/broadinstitute/gatk/releases/download/4.2.6.1/gatk-4.2.6.1.zip | |
unzip gatk-4.2.6.1.zip | |
# SRA | |
wget https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/3.0.0/sratoolkit.3.0.0-centos_linux64-cloud.tar.gz | |
mkdir sratoolkit | |
tar -xzf sratoolkit.3.0.0-centos_linux64-cloud.tar.gz –C sratoolkit | |
./sratoolkit/usr/local/ncbi/sra-tools/bin/vdb-config --interactive | |
# Make symbolic links | |
mkdir bin | |
cd bin | |
ln -s /home/danny/software/STAR/source/STAR STAR | |
ln -s /home/danny/software/htslib/bgzip bgzip | |
ln -s /home/danny/software/samtools/samtools samtools | |
ln -s /home/danny/software/bcftools/bcftools bcftools | |
ln -s /home/danny/software/sratoolkit/usr/local/ncbi/sra-tools/bin/fasterq-dump fasterq-dump | |
#Update the bashrc file | |
nano ~/.bashrc | |
# Add at the end: | |
export PATH="$HOME/bin:$PATH" | |
# Additional link: | |
ln -s /home/danny/software/htslib/tabix tabix | |
# Additional R package: | |
sudo R | |
install.packages("ggplot2") | |
install.packages("gplots") | |
install.packages("gsalib") | |
q("no") | |
wget https://data.broadinstitute.org/igv/projects/downloads/2.14/IGV_Linux_2.14.1_WithJava.zip | |
unzip IGV_Linux_2.14.1_WithJava.zip |
# | |
# Download Saccharomyces Cerevisiae genome | |
# copyright (c) 2022 - Danny Arends | |
# | |
uri <- "ftp.ensembl.org/pub/release-108/fasta/saccharomyces_cerevisiae/dna/" | |
base <- "Saccharomyces_cerevisiae.R64-1-1.dna.chromosome." | |
chrs <- c(as.character(as.roman(seq(1:16))), "Mito") | |
# Download | |
for(chr in chrs){ | |
fname <- paste0(base, chr, ".fa.gz") | |
# Download command | |
cmd <- paste0("wget ", uri, fname) | |
#cat(cmd, "\n") | |
system(cmd) | |
} | |
# Create an empty the file | |
cat("", file = "Saccharomyces_cerevisiae.R64-1-1.dna.primary_assembly.fa") | |
for(chr in chrs){ | |
fname <- paste0(base, chr, ".fa.gz") | |
# Extract and merge into a fast file | |
cmd <- paste0("zcat ", fname, " >> Saccharomyces_cerevisiae.R64-1-1.dna.primary_assembly.fa") | |
#cat(cmd, "\n") | |
system(cmd) | |
} | |
# Compress the fasta file using bgzip (keep original) | |
cmd <- paste0("bgzip -k Saccharomyces_cerevisiae.R64-1-1.dna.primary_assembly.fa") | |
#cat(cmd, "\n") | |
system(cmd) | |
# Delete the chromosomes | |
for(chr in chrs){ | |
fname <- paste0(base, chr, ".fa.gz") | |
# Extract and merge into a fast file | |
cmd <- paste0("rm ", fname) | |
#cat(cmd, "\n") | |
system(cmd) | |
} |
# Get the reference transcriptome and GTF for STAR | |
wget http://ftp.ensembl.org/pub/release-108/gtf/saccharomyces_cerevisiae/Saccharomyces_cerevisiae.R64-1-1.108.gtf.gz | |
gunzip -k Saccharomyces_cerevisiae.R64-1-1.108.gtf.gz | |
wget http://ftp.ensembl.org/pub/release-108/variation/vcf/saccharomyces_cerevisiae/saccharomyces_cerevisiae.vcf.gz | |
# Index the genome using samtools | |
samtools faidx Saccharomyces_cerevisiae.R64-1-1.dna.primary_assembly.fa.gz | |
# Generate genome/transcriptome index using STAR | |
STAR --runThreadN 2 --runMode genomeGenerate \ | |
--genomeDir ~/genome/STAR \ | |
--genomeSAindexNbases 10 \ | |
--sjdbGTFfile ~/genome/Saccharomyces_cerevisiae.R64-1-1.108.gtf \ | |
--genomeFastaFiles ~/genome/Saccharomyces_cerevisiae.R64-1-1.dna.primary_assembly.fa | |
# Get the reference SNPs and index using tabix | |
tabix saccharomyces_cerevisiae.vcf.gz | |
# Index the genome using picard | |
java -Xmx4g -jar /home/danny/software/picard/build/libs/picard.jar CreateSequenceDictionary \ | |
-R Saccharomyces_cerevisiae.R64-1-1.dna.primary_assembly.fa.gz |
# | |
# Align SRA reads to the Saccharomyces Cerevisiae genome | |
# copyright (c) 2022 - Danny Arends | |
# | |
execute <- function(x, outputfile = NA, intern = FALSE, quitOnError = FALSE){ | |
if(!is.na(outputfile) && file.exists(outputfile)){ | |
cat("Output for step exists, skipping this step\n"); | |
invisible("") | |
} | |
cat("----", x, "\n"); res <- system(x, intern = intern); cat(">>>>", res[1], "\n") | |
if(res[1] >= 1){ | |
cat("Error external process did not finish\n\n"); | |
if(quitOnError) q("no") | |
} | |
} | |
input.dir <- "/home/danny/data/raw" | |
input.base <- "SRR13978643" #Get from the command line | |
output.dir <- paste0("/home/danny/data/output/", input.base,".aln") | |
genome.path <- "/home/danny/genome/STAR" | |
ref.fa.gz <- "/home/danny/genome/Saccharomyces_cerevisiae.R64-1-1.dna.primary_assembly.fa.gz" | |
ref.snps <- "/home/danny/genome/saccharomyces_cerevisiae.vcf.gz" | |
# Create an output folder | |
if(!file.exists(input.dir)){ dir.create(input.dir, recursive = TRUE) } | |
if(!file.exists(output.dir)){ dir.create(output.dir, recursive = TRUE) } | |
# STEP 0 - SRA Download and Compress | |
setwd(input.dir) | |
execute(paste0("fasterq-dump -p --split-files ", input.base), paste0(input.base, "_1.fastq")) | |
execute(paste0("bgzip ", input.base, "_1.fastq"), paste0(input.base, "_1.fastq.gz")) | |
execute(paste0("bgzip ", input.base, "_2.fastq"), paste0(input.base, "_2.fastq.gz")) | |
# STEP 1 - READ Trimming | |
trim.files <- c( | |
paste0(input.dir, "/", input.base,"_1.fastq.gz"), | |
paste0(input.dir, "/", input.base,"_2.fastq.gz"), | |
paste0(output.dir, "/", input.base,"_1.P.fastq.gz"), | |
paste0(output.dir, "/", input.base,"_1.U.fastq.gz"), | |
paste0(output.dir, "/", input.base,"_2.P.fastq.gz"), | |
paste0(output.dir, "/", input.base,"_2.U.fastq.gz") | |
) | |
trim.path <- "/home/danny/software/Trimmomatic" | |
trim.exec <- paste0("java -jar ", trim.path, "/dist/jar/trimmomatic-0.40-rc1.jar") | |
trim.opts <- paste0("ILLUMINACLIP:",trim.path,"/adapters/TruSeq3-PE-2.fa:2:30:10") | |
trim.opts <- paste0(trim.opts, " LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36") | |
trim.cmd <- paste0(trim.exec, " PE ", paste0(trim.files, collapse=" "), " ", trim.opts) | |
execute(trim.cmd, trim.files[3]) | |
# STEP 1.1 - UNZIP for STAR | |
execute(paste0("gunzip -k ", trim.files[3]), gsub(".fastq.gz", ".fastq", trim.files[3])) | |
execute(paste0("gunzip -k ", trim.files[5]), gsub(".fastq.gz", ".fastq", trim.files[5])) | |
files.in <- gsub(".fastq.gz", ".fastq", trim.files[c(3,5)]) | |
# STEP 2 - Alignment using STAR | |
star.outbase <- paste0(output.dir, "/", input.base) | |
star.bam <- paste0(star.outbase, "Aligned.sortedByCoord.out.bam") | |
star.exec <- "STAR --runMode alignReads" | |
star.opts <- paste0("--genomeDir ", genome.path, " --outSAMtype BAM SortedByCoordinate") | |
star.in <- paste0("--readFilesIn ", paste0(files.in, collapse=" ")) | |
star.out <- paste0("--outFileNamePrefix ", star.outbase) | |
star.cmd <- paste0(star.exec, " ", star.in, " ", star.opts, " ", star.out) | |
execute(star.cmd, star.bam) | |
# STEP 2.1 - Create a samtools index | |
execute(paste0("samtools index ", star.bam), paste0(star.bam, ".bai")) | |
# STEP 2.2 - Create mapping and coverage statistics | |
execute(paste0("samtools flagstats ", star.bam)) | |
execute(paste0("samtools coverage ", star.bam)) | |
#STEP 3 - Remove duplicate reads using picard tools | |
p.bam <- paste0(star.outbase, "Aligned.sortedByCoord.RD.out.bam") | |
metrics.out <- paste0(star.outbase, "_metrics.txt") | |
p.exec <- "java -Xmx4g -jar /home/danny/software/picard/build/libs/picard.jar" | |
p.in <- paste0("-I ", star.bam) | |
p.out <- paste0("-O ", p.bam, " -M ", metrics.out) | |
p.opts <- paste0("--REMOVE_DUPLICATES true") | |
p.cmd <- paste0(p.exec, " MarkDuplicates ", p.opts," ", p.in, " ", p.out) | |
execute(p.cmd, p.bam) | |
# STEP 3.1 - Create a samtools index | |
execute(paste0("samtools index ", p.bam), paste0(p.bam, ".bai")) | |
# STEP 3.2 - Create mapping and coverage statistics | |
execute(paste0("samtools flagstats ", p.bam)) | |
execute(paste0("samtools coverage ", p.bam)) | |
# STEP 4 - Add read group (1) and sample run, library, and name | |
rg.bam <- paste0(star.outbase, "Aligned.sortedByCoord.RD.RG.out.bam") | |
rg.opts <- paste0("-PL ILLUMINA -PU run -LB ", gsub("SRR", "", input.base), " -SM ", input.base) | |
p.cmd <- paste0(p.exec, " AddOrReplaceReadGroups -I ", p.bam, " -O ", rg.bam, " ", rg.opts) | |
execute(p.cmd) | |
# STEP 4.1 - Create a samtools index | |
execute(paste0("samtools index ", rg.bam), paste0(rg.bam, ".bai")) | |
# STEP 5 - GATK prep | |
gatk.exec <- "java -Xmx4g -jar /home/danny/software/gatk-4.2.6.1/gatk-package-4.2.6.1-local.jar" | |
gatk.opts <- paste0("-R ", ref.fa.gz, " --known-sites ", ref.snps) | |
# STEP 5.1 - GATK BaseRecalibrator | |
gatk.cov1 <- paste0(star.outbase, "_cov1.txt") | |
gatk.cmd <- paste0(gatk.exec, " BaseRecalibrator ", gatk.opts, " -I ", rg.bam, " -O ", gatk.cov1) | |
execute(gatk.cmd, gatk.cov1) | |
# STEP 5.2 - GATK ApplyBQSR | |
recal.bam <- paste0(star.outbase, "Aligned.sortedByCoord.RD.RG.RC.out.bam") | |
gatk.cmd <- paste0(gatk.exec, " ApplyBQSR -R ", ref.fa.gz, " -bqsr ", gatk.cov1, " -I ", rg.bam, " -O ", recal.bam) | |
execute(gatk.cmd, recal.bam) | |
# STEP 5.3 - GATK BaseRecalibrator | |
gatk.cov2 <- paste0(star.outbase, "_cov2.txt") | |
gatk.cmd <- paste0(gatk.exec, " BaseRecalibrator ", gatk.opts, " -I ", recal.bam, " -O ", gatk.cov2) | |
execute(gatk.cmd, gatk.cov2) | |
# STEP 5.4 - GATK AnalyzeCovariates | |
recal.plot <- paste0(star.outbase, "AnalyzeCovariates.pdf") | |
gatk.cmd <- paste0(gatk.exec, " AnalyzeCovariates -before ", gatk.cov1, " -after ", gatk.cov2, " -plots ", recal.plot) | |
execute(gatk.cmd) | |
# STEP 6 - Index the recalibrated bam files | |
execute(paste0("samtools index ", recal.bam), paste0(recal.bam, ".bai")) | |
# STEP 6.1 - Create mapping and coverage statistics | |
execute(paste0("samtools flagstats ", recal.bam)) | |
execute(paste0("samtools coverage ", recal.bam)) | |
q("no") |
Hi Danny, In the
buildGenome.sh
, theuri
uses the release-107, whereas in theprepGenome.sh
, we used the release-108, was this intentional?
@sunilnahata No, both should be 108, the issue is the 108 version was released during last week when I was still working on the code, I'll update it to make sure both are the same
Hi Danny, In the
buildGenome.sh
, theuri
uses the release-107, whereas in theprepGenome.sh
, we used the release-108, was this intentional?No, both should be 108, the issue is the 108 version was released during last week when I was still working on the code, I'll update it to make sure both are the same
Oh, alright. Thanks again for your session today, it was quite a learning experience.
Hi Danny,
I think there is a misplaced = sign in the "--genomeDir=" option in the following line
star.opts <- paste0("--genomeDir=", genome.path, " --outSAMtype BAM SortedByCoordinate")
It was throwing me an error. I removed it and put a space instead and it worked.
Hi Danny, I think there is a misplaced = sign in the "--genomeDir=" option in the following line star.opts <- paste0("--genomeDir=", genome.path, " --outSAMtype BAM SortedByCoordinate") It was throwing me an error. I removed it and put a space instead and it worked.
This is indeed weird, IIRC it shouldn't matter if there is an = separating the command-line option name and the value, but t's better for consistency to have them all without. Looking through my old code I see many instances of using an = and I've never encountered an issue with it. according to the getopt specs, they should be equivalent (https://en.wikipedia.org/wiki/Getopt).
Anyway, fixed it to be consistent
Hi Danny, I think there is a misplaced = sign in the "--genomeDir=" option in the following line star.opts <- paste0("--genomeDir=", genome.path, " --outSAMtype BAM SortedByCoordinate") It was throwing me an error. I removed it and put a space instead and it worked.
This is indeed weird, IIRC it shouldn't matter if there is an = separating the command-line option name and the value, but t's better for consistency to have them all without. Looking through my old code I see many instances of using an = and I've never encountered an issue with it. according to the getopt specs, they should be equivalent (https://en.wikipedia.org/wiki/Getopt).
Anyway, fixed it to be consistent
Yeah. It seems like Picard also changed its syntax. They now require = sign instead of the space for specifying the options. Ideally it shouldn't matter. I don't know why they're doing this. Anyways, thanks a lot for these tutorials. They're really helpful.
Hi Danny! If my raw files are on my computer, how can i input it into debian and how should i modify the execute code? Thank you so much!!
Hi Danny! If my raw files are on my computer, how can i input it into debian and how should i modify the execute code? Thank you so much!!
You can mount a shared folder in Virtualbox and copy / read the files from there. First install the "VirtualBox Guest Additions tool" (We did this in line 7 - 8), then close the virtual box and add a shared folder:
- Select / Navigate to Machine > Settings.
- In the “Settings” window, switch to the “Shared Folders” tab.
- Click the “Add” button to create a new shared folder.
Hi Danny! If my raw files are on my computer, how can i input it into debian and how should i modify the execute code? Thank you so much!!
You can mount a shared folder in Virtualbox and copy / read the files from there. First install the "VirtualBox Guest Additions tool" (We did this in line 7 - 8), then close the virtual box and add a shared folder:
- Select / Navigate to Machine > Settings.
- In the “Settings” window, switch to the “Shared Folders” tab.
- Click the “Add” button to create a new shared folder.
I tried that in debian but it showed me (sh: 0: cannot open ./VBoxLinuxAdditions.run: No such file)
If the file is not found it, means that you didn't mount the VirtualBox additions CD. See the process explained at 35 minutes into the video. In short: download the additions CD, mount the CD, then execute lines 1 through 8
After that shutdown the machine and add a shared folder, as described in my previous comment.
If the file is not found it, means that you didn't mount the VirtualBox additions CD. See the process explained at 35 minutes into the video. In short: download the additions CD, mount the CD, then execute lines 1 through 8
After that shutdown the machine and add a shared folder, as described in my previous comment.
Thanks! i will take a look! Really appreciate your help!
Dear Danny, Thank you for the video.
I am trying to run step 3 (Remove duplicate reads using picard tools) of this lecture, but it's showing an error message at 1:30:00 of the video. I have tried to look for a solution online, but none is providing a solution to the problem. I would appreciate your help. Thank you.
[Sun Jan 14 14:55:18 CST 2024] Executing as rufus@debian on Linux 6.1.0-17-amd64 amd64; OpenJDK 64-Bit Server VM 17.0.9+9-Debian-1deb12u1; Deflater: Intel; Inflater: Intel; Provider GCS is available; Picard version: Version:3.1.1-8-ga638ce92a-SNAPSHOT
INFO 2024-01-14 14:55:18 MarkDuplicates Start of doWork freeMemory: 38556984; totalMemory: 50331648; maxMemory: 4294967296
INFO 2024-01-14 14:55:18 MarkDuplicates Reading input file and constructing read end information.
INFO 2024-01-14 14:55:18 MarkDuplicates Will retain up to 15561475 data points before spilling to disk.
WARNING 2024-01-14 14:55:19 AbstractOpticalDuplicateFinderCommandLineProgram A field field parsed out of a read name was expected to contain an integer and did not. Read name: SRR13978643.342872. Cause: String 'SRR13978643.342872' did not start with a parsable number.
[Sun Jan 14 14:55:19 CST 2024] picard.sam.markduplicates.MarkDuplicates done. Elapsed time: 0.02 minutes.
Runtime.totalMemory()=241172480
To get help, see http://broadinstitute.github.io/picard/index.html#GettingHelp
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "htsjdk.samtools.SAMReadGroupRecord.getReadGroupId()" because the return value of "htsjdk.samtools.SAMRecord.getReadGroup()" is null
at picard.sam.markduplicates.MarkDuplicates.buildSortedReadEndLists(MarkDuplicates.java:558)
at picard.sam.markduplicates.MarkDuplicates.doWork(MarkDuplicates.java:270)
at picard.cmdline.CommandLineProgram.instanceMain(CommandLineProgram.java:280)
at picard.cmdline.PicardCommandLine.instanceMain(PicardCommandLine.java:105)
at picard.cmdline.PicardCommandLine.main(PicardCommandLine.java:115)
1
Error external process did not finish
Hi, you managed to solve the error, I have the same problem, how did you solve it?
Thank you very much, the problem is essentially a matter of some SAMTOOLS updates, be careful, the version that did not work for me is:
3.1.1-16-g5b0b4c014-SNAPSHOT, the version that works is: 2.18.27-SNAPSHOT installed in docker taken from the following link: https://hub.docker.com/r/agrf/picard
Thanks for the support.
@Chris091089 I am encountering the same error which you faced and resolve earlier. I tried to download picard version 2.18.27-SNAPSHOT from your shared link. But it ended up in the following error:
Using default tag: latest
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
did you encounter the same issue. If yes, please help. I would be more than thankful for this favour.
Dear all,
I have edited the 0_installSoftware.sh script to checkout the correct version of PICARD and STAR, this should fix the:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "htsjdk.samtools.SAMReadGroupRecord.getReadGroupId()" because the return value of "htsjdk.samtools.SAMRecord.getReadGroup()" is null
error encountered by some of you
Hi @DannyArends ,
I'm done with PICARD duplictate error by upgrading picard & java. And I'm already thankful to you for helping. But when I try to run this command ./igv.sh my IGV viewer is not opening. I wonder if you can help me to sort it. When I run command it shows this:
echo Using bundled JDK.
WARNING: package com.sun.java.swing.plaf.windows not in java.desktop
WARNING: package sun.awt.windows not in java.desktop
openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment Temurin-11.0.13+8 (build 11.0.13+8)
OpenJDK 64-Bit Server VM Temurin-11.0.13+8 (build 11.0.13+8, mixed mode)
INFO [Apr 22,2024 08:59] [Globals] Development mode is enabled
SEVERE [Apr 22,2024 08:59] [DefaultExceptionHandler] Unhandled exception
SEVERE [Apr 22,2024 08:59] [DefaultExceptionHandler] java.awt.AWTError: Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.
at java.desktop/sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at java.desktop/sun.awt.X11GraphicsEnvironment$1.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.desktop/sun.awt.X11GraphicsEnvironment.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Unknown Source)
at java.desktop/java.awt.GraphicsEnvironment$LocalGE.createGE(Unknown Source)
at java.desktop/java.awt.GraphicsEnvironment$LocalGE.(Unknown Source)
at java.desktop/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(Unknown Source)
at java.desktop/sun.awt.X11.XToolkit.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Unknown Source)
at java.desktop/java.awt.Toolkit$2.run(Unknown Source)
at java.desktop/java.awt.Toolkit$2.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.desktop/java.awt.Toolkit.getDefaultToolkit(Unknown Source)
at java.desktop/java.awt.Toolkit.getEventQueue(Unknown Source)
at java.desktop/java.awt.EventQueue.invokeLater(Unknown Source)
at java.desktop/javax.swing.SwingUtilities.invokeLater(Unknown Source)
at org.igv/org.broad.igv.ui.Main.main(Main.java:124)
@aqibafarman this is an issue with the X11 display under Linux not being setup properly and happens when you use a linux which runs in headless mode. E.g. while logging into a server or cluster remotely or when are you using WSL2 instead of a virtual box. The easiest is to transfer the files to windows and use the IGV under window.
@DannyArends Thanks for letting me know. I am using WSL. But, I will work on your suggestion.
@aqibafarman this is an issue with the X11 display under Linux not being setup properly and happens when you use a linux which runs in headless mode. E.g. while logging into a server or cluster remotely or when are you using WSL2 instead of a virtual box. The easiest is to transfer the files to windows and use the IGV under window.
@Olamzq @Chris091089
I have also encountered the same error. you can add the following code at line 76 to the '3_pipeline.R' section to resolve the problem
#Pre-step 3 if you are encountering ReadGroup error at STEP 3
k.bam <- paste0(star.outbase, "AOrRRGroups.out.bam")
ketrics.out <- paste0(star.outbase, "_ketrics.txt")
k.exec <- "java -Xmx4g -jar /home/soheil/software/picard/picard.jar" #modify the path of your picard file
k.in <- paste0(" I=", star.bam)
k.out <- paste0(" O=", k.bam)
k.opts <- paste0("RGID=4 RGLB=lib1 RGPL=illumina RGPU=unit1 RGSM=20")
k.cmd <- paste0(k.exec, " AddOrReplaceReadGroups ", k.in, " ", k.out, " ", k.opts)
execute(k.cmd, k.bam)
#If you added this to your script, then you have to replace another line of code also, which is currently line 82, to the following one:
p.in <- paste0("-I ", k.bam)
Hope it helps. Thanks for your support.
Hello,
when I do:
git clone https://github.com/broadinstitute/picard.git
I see:
Cloning into 'picard'...
remote: Enumerating objects: 172774, done.
remote: Counting objects: 100% (13107/13107), done.
remote: Compressing objects: 100% (2794/2794), done.
remote: Total 172774 (delta 10304), reused 12378 (delta 9838), pack-reused 159667 (from 1)
Receiving objects: 100% (172774/172774), 247.45 MiB | 4.35 MiB/s, done.
Resolving deltas: 100% (140451/140451), done.
Updating files: 100% (6568/6568), done.
then I do:
cd picard/
git checkout 5db8017
and afterwards see:
Note: switching to '5db8017'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at 5db80177e Fix temporary directory hijacking or temporary directory information disclosure (#1829)
then I do:
./gradlew shadowJar
and see:
Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details
java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7
at org.codehaus.groovy.vmplugin.VMPluginFactory.(VMPluginFactory.java:43)
at org.codehaus.groovy.reflection.GroovyClassValueFactory.(GroovyClassValueFactory.java:35)
at org.codehaus.groovy.reflection.ClassInfo.(ClassInfo.java:109)
at org.codehaus.groovy.reflection.ReflectionCache.getCachedClass(ReflectionCache.java:95)
at org.codehaus.groovy.reflection.ReflectionCache.(ReflectionCache.java:39)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerMethods(MetaClassRegistryImpl.java:209)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.(MetaClassRegistryImpl.java:107)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.(MetaClassRegistryImpl.java:85)
at groovy.lang.GroovySystem.(GroovySystem.java:36)
at org.codehaus.groovy.runtime.InvokerHelper.(InvokerHelper.java:86)
at groovy.lang.GroovyObjectSupport.getDefaultMetaClass(GroovyObjectSupport.java:59)
at groovy.lang.GroovyObjectSupport.(GroovyObjectSupport.java:32)
at org.gradle.internal.extensibility.DefaultExtraPropertiesExtension.(DefaultExtraPropertiesExtension.java:29)
at org.gradle.internal.extensibility.DefaultConvention.(DefaultConvention.java:48)
at org.gradle.api.internal.plugins.DefaultConvention.(DefaultConvention.java:28)
at org.gradle.internal.extensibility.ExtensibleDynamicObject.(ExtensibleDynamicObject.java:60)
at org.gradle.internal.instantiation.MixInExtensibleDynamicObject.(MixInExtensibleDynamicObject.java:34)
at org.gradle.initialization.DefaultSettings_Decorated.getAsDynamicObject(Unknown Source)
at org.gradle.initialization.SettingsFactory.createSettings(SettingsFactory.java:58)
at org.gradle.initialization.ScriptEvaluatingSettingsProcessor.process(ScriptEvaluatingSettingsProcessor.java:61)
at org.gradle.initialization.PropertiesLoadingSettingsProcessor.process(PropertiesLoadingSettingsProcessor.java:38)
at org.gradle.initialization.SettingsEvaluatedCallbackFiringSettingsProcessor.process(SettingsEvaluatedCallbackFiringSettingsProcessor.java:34)
at org.gradle.initialization.RootBuildCacheControllerSettingsProcessor.process(RootBuildCacheControllerSettingsProcessor.java:36)
at org.gradle.initialization.BuildOperationSettingsProcessor$2.call(BuildOperationSettingsProcessor.java:50)
at org.gradle.initialization.BuildOperationSettingsProcessor$2.call(BuildOperationSettingsProcessor.java:47)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.initialization.BuildOperationSettingsProcessor.process(BuildOperationSettingsProcessor.java:47)
at org.gradle.initialization.DefaultSettingsLoader.findSettingsAndLoadIfAppropriate(DefaultSettingsLoader.java:104)
at org.gradle.initialization.DefaultSettingsLoader.findAndLoadSettings(DefaultSettingsLoader.java:45)
at org.gradle.initialization.SettingsAttachingSettingsLoader.findAndLoadSettings(SettingsAttachingSettingsLoader.java:35)
at org.gradle.internal.composite.CommandLineIncludedBuildSettingsLoader.findAndLoadSettings(CommandLineIncludedBuildSettingsLoader.java:34)
at org.gradle.internal.composite.ChildBuildRegisteringSettingsLoader.findAndLoadSettings(ChildBuildRegisteringSettingsLoader.java:47)
at org.gradle.internal.composite.CompositeBuildSettingsLoader.findAndLoadSettings(CompositeBuildSettingsLoader.java:35)
at org.gradle.initialization.DefaultSettingsPreparer.prepareSettings(DefaultSettingsPreparer.java:36)
at org.gradle.initialization.BuildOperatingFiringSettingsPreparer$LoadBuild.doLoadBuild(BuildOperatingFiringSettingsPreparer.java:59)
at org.gradle.initialization.BuildOperatingFiringSettingsPreparer$LoadBuild.run(BuildOperatingFiringSettingsPreparer.java:54)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.initialization.BuildOperatingFiringSettingsPreparer.prepareSettings(BuildOperatingFiringSettingsPreparer.java:42)
at org.gradle.initialization.DefaultGradleLauncher.prepareSettings(DefaultGradleLauncher.java:190)
at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:134)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:126)
at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:106)
at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:60)
at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:57)
at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:85)
at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:78)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:189)
at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:78)
at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:57)
at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:63)
at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:51)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:45)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:50)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47)
at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:78)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:59)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:36)
at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68)
at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:68)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:27)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.ExceptionInInitializerError: Exception org.codehaus.groovy.GroovyBugError [in thread "Daemon worker"]
at org.codehaus.groovy.vmplugin.v7.Java7.(Java7.java:45)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:347)
at java.base/java.lang.Class.newInstance(Class.java:645)
at org.codehaus.groovy.vmplugin.VMPluginFactory.createPlugin(VMPluginFactory.java:57)
at org.codehaus.groovy.vmplugin.VMPluginFactory.(VMPluginFactory.java:39)
... 129 moreFAILURE: Build failed with an exception.
- What went wrong:
Could not initialize class org.codehaus.groovy.reflection.ReflectionCacheException java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7 [in thread "Daemon worker"]
Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.Get more help at https://help.gradle.org
BUILD FAILED in 10s
How to fix this?
Thank you
Hi Danny,
I am currently a master's student in bioinformatics and have watched all your RNA-seq analysis videos. I found them incredibly insightful and greatly appreciate the effort you put into them. I have a question regarding RNA-seq data analysis: if you have any Linux command codes related to the analysis, could you please upload them to your GitHub repository? I would like to practice on my Linux machine.
Hi Danny, I am currently a master's student in bioinformatics and have watched all your RNA-seq analysis videos. I found them incredibly insightful and greatly appreciate the effort you put into them. I have a question regarding RNA-seq data analysis: if you have any Linux command codes related to the analysis, could you please upload them to your GitHub repository? I would like to practice on my Linux machine.
Hey @aberakenea, the shell commands generated by R, are specific to Linux (the sh bash). That is why we run them in a Debian virtual machine under Windows. The scripts should work without much modification on e.g. Ubuntu or CentOS as long as the shell used to run them is the bash / sh shell.
Hi Danny,
In the
buildGenome.sh
, theuri
uses the release-107, whereas in theprepGenome.sh
, we used the release-108, was this intentional?