====== Scrinvex ====== * https://github.com/getzlab/scrinvex **Single Cell RNA Intron-Exon Counting** > scrinvex counts intronic, exonic, and junction-spanning reads for each unique barcode encountered in the input bam. Each mapped read is checked against the input gtf to determine if the read lies entirely on introns, exons, or crosses at least one intron/exon junction. Reads with the same UMI are only checked against any given gene once. Subsequent reads with the same UMI will not be checked against any gene that the first read intersected. ===== Initial Installation ===== $ git clone --recursive https://github.com/getzlab/scrinvex.git scrinvex $ cd scrinvex Unfortunately the current version of the scrinvex code (dated __May 7, 2020__) has a few errors and won't compile cleanly. The header file ''rle.h'', which can be found in these two locations: * ''rnaseqc/SeqLib/bwa/rle.h'' * ''rnaseqc/SeqLib/fermi-lite/rle.h'' Needs to be amended to remove the duplicate definition of an array data structure (''rle_auxtab[8]''). You have two options available to fix this: == Option 1 - Manual File Edit == You can open up **both** of those header files in a text editor (vim, nano) and comment out line **33**: const uint8_t rle_auxtab[8]; Comment it out with two forward slashes: //const uint8_t rle_auxtab[8]; == Option 2 - Apply Patch == For more advanced users, a pair of patch files are available below, and can be applied using ''patch -p1 < bwa_rle_patch.diff'' and '''patch -p1 < fermilite_rle.diff'': --- rnaseqc/SeqLib/bwa/rle.h 2025-03-19 10:38:56.280816032 +0000 +++ rnaseqc/SeqLib/bwa/rle.h.new 2025-03-19 10:38:49.667778873 +0000 @@ -30,7 +30,7 @@ *** 43+3 codec *** ******************/ -const uint8_t rle_auxtab[8]; +//const uint8_t rle_auxtab[8]; #define RLE_MIN_SPACE 18 #define rle_nptr(block) ((uint16_t*)(block)) --- rnaseqc/SeqLib/fermi-lite/rle.h 2025-03-19 10:42:14.703929146 +0000 +++ rnaseqc/SeqLib/fermi-lite/rle.h.new 2025-03-19 10:34:51.323440201 +0000 @@ -30,7 +30,7 @@ *** 43+3 codec *** ******************/ -const uint8_t rle_auxtab[8]; +//const uint8_t rle_auxtab[8]; #define RLE_MIN_SPACE 18 #define rle_nptr(block) ((uint16_t*)(block)) ===== Completing The Installation ===== After editing both of the ''rle.h'' header files, you can complete the installation: $ module load GCC $ module load Boost $ cd scrinvex $ make ... ... ... ... $ ls -l scrinvex -rwx------ 1 n12345 rocketloginaccess 4011608 Mar 19 10:38 scrinvex $ file scrinvex scrinvex: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped The ''scrinvex'' binary can be copied anywhere you like and run normally. == Possible Errors == Note, if you do not load the ''Boost'' module, then you will see an error similar to this when attempting to compile: $ make g++ -Wall -std=c++14 -D_GLIBCXX_USE_CXX11_ABI=1 -O3 -I. -Irnaseqc -Irnaseqc/src -Irnaseqc/SeqLib -Irnaseqc/SeqLib/htslib/ -c -o src/scrinvex.o src/scrinvex.cpp src/scrinvex.cpp:13:10: fatal error: boost/filesystem.hpp: No such file or directory 13 | #include | ^~~~~~~~~~~~~~~~~~~~~~ compilation terminated. make: *** [src/scrinvex.o] Error 1 $ Make sure that you have loaded **both** ''GCC'' and ''Boost'' before running ''make''. If you do not edit the ''rle.h'' header files, you will see an error similar to this when attempting to compile: $ make gcc -g -Wall -Wno-unused-function -O2 -DHAVE_PTHREAD -DUSE_MALLOC_WRAPPERS bwashm.o bwase.o bwaseqio.o bwtgap.o bwtaln.o bamlite.o bwape.o kopen.o pemerge.o maxk.o bwtsw2_core.o bwtsw2_main.o bwtsw2_aux.o bwt_lite.o bwtsw2_chain.o fastmap.o bwtsw2_pair.o main.o -o bwa -L. -lbwa -lm -lz -lpthread -lrt /mnt/storage/apps/eb/software/binutils/2.40-GCCcore-12.3.0/bin/ld: ./libbwa.a(rope.o):scrinvex/rnaseqc/SeqLib/bwa/rle.h:33: multiple definition of `rle_auxtab'; ./libbwa.a(bwtindex.o):scrinvex/rnaseqc/SeqLib/bwa/rle.h:33: first defined here /mnt/storage/apps/eb/software/binutils/2.40-GCCcore-12.3.0/bin/ld: ./libbwa.a(rle.o):scrinvex/rnaseqc/SeqLib/bwa/rle.h:33: multiple definition of `rle_auxtab'; ./libbwa.a(bwtindex.o):scrinvex/rnaseqc/SeqLib/bwa/rle.h:33: first defined here collect2: error: ld returned 1 exit status make[3]: *** [bwa] Error 1 make[3]: Leaving directory `scrinvex/rnaseqc/SeqLib/bwa' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `scrinvex/rnaseqc/SeqLib' make[1]: *** [all] Error 2 make[1]: Leaving directory `scrinvex/rnaseqc/SeqLib' make: *** [rnaseqc/SeqLib/lib/libseqlib.a] Error 2 $ Make sure you have edited ''rle.h'' as per __Option 1__ **or** __Option 2__, as detailed above. ===== Running scrinvex ===== You always need to ''module load Boost'' and ''module load GCC'' before running scrinvex in order to have the right C and Boost runtime libraries loaded, but other than that, it appears to have no other special requirements. $ module load GCC $ module load Boost $ ./scrinvex --help ./scrinvex [gtf] [bam] {OPTIONS} SCRINVEX - A Single Cell RNA-Seq QC tool OPTIONS: -h, --help Display this message and quit gtf The input GTF file containing features to check the bam against bam The input SAM/BAM file containing reads to process -o[ouput], --output=[ouput] Path to output file. Default: {current directory}/{bam filename}.scrinvex.tsv -b[barcodes], --barcodes=[barcodes] Path to filtered barcodes.tsv file from cellranger. Only barcodes listed in the file will be used. Default: All barcodes present in bam -q[quality], --quality=[quality] Set the lower bound on read quality for coverage counting. Reads below this quality are skipped. Default: 255 -s[path], --summary=[path] Produce a summary of counts by barcode in a separate file. This includes a count of intergenic reads. If the flag is provided with no arguments, this defaults to {current directory}/{bam filename}.scrinvex.summary.tsv. You may provide a different path as an argument to this flag "--" can be used to terminate flag options and force all following arguments to be treated as positional options $ ---- [[:advanced:software|Back to Advanced Software Topics]]