Skip to content
Commits on Source (4)
STAR 2.6.1a 2018/08/14
======================
* Process substitution can now be used with zipped VCF files, e.g. --varVCFfile <(zcat vcf.gz)
* Implemented fatal error exception if no SNPs are found in VCF files.
* Implemented --chimOutJunctionFormat 1 option to output some metadata (command lines and basic mapping statistics) at the end of Chimeric.out.junction file.
* The default value of --peOverlapMMp is reduced to 0.01 for less aggressive mate merging.
* Fixed the problem with control characters (ASCII<32) in genome and input read sequences. They used to be converted to N, now they are removed.
* Fixed a bug that caused serious problems with --sjdbInsertSave All option.
* Fixed a bug in merging mates (--peOverlap*) algorithm that was causing rare seg-faults.
* Fixed the GtstrandBit problem.
* Fixed a bug with multiple RG lines when inputting reads in SAM format.
* Fixed a bug causing seg-faults with shared memory and --outStd options.
* Fixed a bug with --outTmpDir and fifo files.
STAR 2.6.0c 2018/05/10
======================
......
......@@ -41,6 +41,7 @@ cd STAR-2.6.0a
# Alternatively, get STAR source using git
git clone https://github.com/alexdobin/STAR.git
```
Compile under Linux
-------------------
......
rna-star (2.6.1a+dfsg-1) unstable; urgency=medium
* New upstream release.
* Fix spelling via patches.
-- Sascha Steinbiss <satta@debian.org> Sat, 18 Aug 2018 16:14:17 +0200
rna-star (2.6.0c+dfsg-1) unstable; urgency=medium
* New upstream release.
......
donotuse_own_htslib.patch
mips_shm_noreserve.patch
reproducible.patch
spelling.patch
Description: fix spelling
Author: Sascha Steinbiss <satta@debian.org>
Forwarded: https://github.com/alexdobin/STAR/pull/475
--- a/extras/doc-latex/parametersDefault.tex
+++ b/extras/doc-latex/parametersDefault.tex
@@ -715,7 +715,7 @@
\optLine{int{\textgreater}=0: the score range for multi-mapping chimeras below the best chimeric score. Only works with --chimMultimapNmax {\textgreater} 1}
\optName{chimNonchimScoreDropMin}
\optValue{20}
- \optLine{int{\textgreater}=0: to trigger chimeric detection, the drop in the best non-chimeric alignment score with respect to the read lenght has to be smaller than this value}
+ \optLine{int{\textgreater}=0: to trigger chimeric detection, the drop in the best non-chimeric alignment score with respect to the read length has to be smaller than this value}
\optName{chimOutJunctionFormat}
\optValue{0}
\optLine{int: formatting type for the Chimeric.out.junction file}
--- a/source/Genome.cpp
+++ b/source/Genome.cpp
@@ -547,7 +547,7 @@
P.winBinNbits = (uint) floor( log2( max( max(4LLU,P.alignIntronMax), (P.alignMatesGapMax==0 ? 1000LLU : P.alignMatesGapMax) ) /4 ) + 0.5);
P.winBinNbits = max( P.winBinNbits, (uint) floor(log2(nGenome/40000+1)+0.5) );
//ISSUE - to be fixed in STAR3: if alignIntronMax>0 but alignMatesGapMax==0, winBinNbits will be defined by alignIntronMax
- P.inOut->logMain << "To accomodate alignIntronMax="<<P.alignIntronMax<<" redefined winBinNbits="<< P.winBinNbits <<endl;
+ P.inOut->logMain << "To accommodate alignIntronMax="<<P.alignIntronMax<<" redefined winBinNbits="<< P.winBinNbits <<endl;
};
--- a/source/ReadAlign_stitchWindowSeeds.cpp
+++ b/source/ReadAlign_stitchWindowSeeds.cpp
@@ -255,7 +255,7 @@
// };
- //check exons lenghts including repeats, do not report a transcript with short exons
+ //check exons lengths including repeats, do not report a transcript with short exons
// for (uint isj=0;isj<trA.nExons-1;isj++) {//check exons for min length, if they precede a junction
// if ( trA.canonSJ[isj]>=0 &&
// ( trA.exons[isj][EX_L] < P.alignSJoverhangMin + trA.shiftSJ[isj][0]
--- a/source/parametersDefault
+++ b/source/parametersDefault
@@ -619,7 +619,7 @@
int>=0: the score range for multi-mapping chimeras below the best chimeric score. Only works with --chimMultimapNmax > 1
chimNonchimScoreDropMin 20
- int>=0: to trigger chimeric detection, the drop in the best non-chimeric alignment score with respect to the read lenght has to be smaller than this value
+ int>=0: to trigger chimeric detection, the drop in the best non-chimeric alignment score with respect to the read length has to be smaller than this value
chimOutJunctionFormat 0
int: formatting type for the Chimeric.out.junction file
--- a/source/stitchWindowAligns.cpp
+++ b/source/stitchWindowAligns.cpp
@@ -93,7 +93,7 @@
};
trA.gLength = tG2+1-trA.gStart;
- //check exons lenghts including repeats, do not report a transcript with short exons
+ //check exons lengths including repeats, do not report a transcript with short exons
for (uint isj=0;isj<trA.nExons-1;isj++) {//check exons for min length, if they are not annotated and precede a junction
if ( trA.canonSJ[isj]>=0 ) {//junction
if (trA.sjAnnot[isj]==1) {//sjdb
No preview for this file type
......@@ -34,7 +34,7 @@
\newcommand{\sechyperref}[1]{\hyperref[#1]{Section \ref{#1}. \nameref{#1}}}
\title{STAR manual 2.6.0a}
\title{STAR manual 2.6.1a}
\author{Alexander Dobin\\
dobin@cshl.edu}
\maketitle
......@@ -273,7 +273,7 @@ The SAM attributes can be specified by the user using \opt{outSAMattributes} \op
\item[]
\optv{NH HI NM MD} have standard meaning as defined in the SAM format specifications.
\item[]
\optv{AS} id the local alignment score (paired for paired-edn reads).
\optv{AS} id the local alignment score (paired for paired-end reads).
\item[]
\optv{nM} is the number of mismatches per (paired) alignment, not to be confused with \optv{NM}, which is the number of mismatches in each mate.
\item[]
......@@ -335,11 +335,11 @@ STAR-Fusion is a software package for detecting fusion transcript from STAR chim
Chimeric alignments can be included together with normal alignments in the main (sorted or unsorted) BAM file(s) using \opt{chimOutType} \optv{WithinBAM}. In these files, formatting of chimeric alignments follows the latest SAM/BAM specifications.
\subsection{Chimeric alignments in \ofilen{Chimeric.out.sam} .}
When chimeric detection is switched on, STAR will output normal alignments into \ofilen{Aligned.*.sam/bam}, and will output chimeric alignments into a separate file \ofilen{Chimeric.out.sam}.
With \opt{chimOutType} \optv{SeparateSAMold} STAR will output normal alignments into \ofilen{Aligned.*.sam/bam}, and will output chimeric alignments into a separate file \ofilen{Chimeric.out.sam}. Note that this option will be deprecated in the future, and the \opt{chimOutType} \optv{WithinBAM} is strongly recommended.
Some reads may be output to both normal SAM/BAM files, and \ofilen{Chimeric.out.sam} for the following reason. STAR will output a non-chimeric alignment into \ofilen{Aligned.out.sam} with soft-clipping a portion of the read. If this portion is long enough, and it maps well and uniquely somewhere else in the genome, there will also be a chimeric alignment output into \ofilen{Chimeric.out.sam}. For instance, if you have a paired-end read where the second mate can be split chimerically into 70 and 30 bases. The 100b of the first mate + 70b of the 2nd mate map non-chimerically,and the mapping length/score are big enough, so they will be output into \ofilen{Aligned.out.sam} file. At the same time, the chimeric segments 100-mate1 + 70-mate2 and 30-mate2 will be output into \ofilen{Chimeric.out.sam}.
\subsection{Chimeric alignments in \ofilen{Chimeric.out.junction}}
In addition to \ofilen{Chimeric.out.sam}, STAR will generate \ofilen{Chimeric.out.junction} file which maybe more convenient for downstream analysis.
By default, or with \opt{chimOutType} \optv{Junctions}, STAR will generate \ofilen{Chimeric.out.junction} file which maybe more convenient for downstream analysis.
The format of this file is as follows. Every line contains one chimerically aligned read, e.g.:
\begin{verbatim}
chr22 23632601 + chr9 133729450 + 1 0 0
......
......@@ -637,7 +637,7 @@
\optValue{0}
\optLine{int{\textgreater}=0: minimum number of overlap bases to trigger mates merging and realignment}
\optName{peOverlapMMp}
\optValue{0.1}
\optValue{0.01}
\optLine{real, {\textgreater}=0 {\&} {\textless}1: maximum proportion of mismatched bases in the overlap area}
\end{optTable}
\optSection{Windows, Anchors, Binning}\label{Windows,_Anchors,_Binning}
......@@ -716,6 +716,13 @@
\optName{chimNonchimScoreDropMin}
\optValue{20}
\optLine{int{\textgreater}=0: to trigger chimeric detection, the drop in the best non-chimeric alignment score with respect to the read lenght has to be smaller than this value}
\optName{chimOutJunctionFormat}
\optValue{0}
\optLine{int: formatting type for the Chimeric.out.junction file}
\begin{optOptTable}
\optOpt{0} \optOptLine{no comment lines/headers}
\optOpt{1} \optOptLine{comment lines at the end of the file: command line and Nreads: total, unique, multi}
\end{optOptTable}
\end{optTable}
\optSection{Quantification of Annotations}\label{Quantification_of_Annotations}
\begin{optTable}
......
......@@ -20,7 +20,7 @@ if ( $7>=0 && $1==$4 && $3==$6 && (($3=="-" && $5>$2 && $5-$2<1000000) || ($3=="
#print $11,$11+cigarGenomicDist($12),$13,$13+cigarGenomicDist($14);
if ( ($3=="+" && $11+endTol>$5 && $13+cigarGenomicDist($14)-endTol<=$2) \
|| ($3=="-" && $13+endTol>$2 && $11+cigarGenomicDist($12)-endTol<=$5) ) {
print $1,($3=="+"?$5:$2),($3=="+"?$2:$5),($3=="+"?"-":"+"),($7==0?0:3-$7),$8,$9;
print $1,($3=="+"?$5:$2),($3=="+"?$2:$5),($3=="+"?"-":"+"),($7==0?0:3-$7),$8,$9,(NF>=15 ? $NF:1);
};
};
};
#
# merges ReadsPerGene.out.tab files from multiple runs into one table
# usage:
# awk -f mergeGeneCounts.awk -v Col=2 /path/to/1st/ReadsPerGene.out.tab /path/to/2nd/ReadsPerGene.out.tab ...
# e.g.
# awk -f mergeGeneCounts.awk -v Col=2 */ReadsPerGene.out.tab
#
# -v Col=<column to add to the table>: depends on the standedness of the table
# advanced parameters
# -v Skip=<number of lines to skip>
# -v Name=<common file name substring to remove from column names>
BEGIN {
FS="\t";
if (Name=="") Name="/ReadsPerGene.out.tab";
if (Skip=="") Skip=0;
if (Col=="") {
print "Specify the column with -v Col=..." > /dev/err;
exit;
};
for (jj=1;jj<=ARGC;jj++)
{# print header line with file names
a=ARGV[jj];
gsub(Name,"",a);
printf ";" a
};
printf "\n";
}
{
if (ARGIND==1) {
L[FNR]=$1; # record gene names (1st column)
} else {
if ($1!=L[FNR]) {
print "File #" ARGIND ": " FILENAME " is not sorted properly, sort all files by the first column" >/dev/err;
};
};
V[FNR,ARGIND]=$2
}
END {
for (ii=1;ii<=length(L);ii++)
{
printf "%s",L[ii];
if (V[ii,1]!="")
for (jj=1;jj<=ARGC;jj++)
printf ";" V[ii,jj];
printf "\n"
}
}
......@@ -21,7 +21,7 @@ if (substr($1,1,1)!="@") {
} else if (C[k+1]=="N") {
sj1=$3 "\t" g "\t" g+L[k]-1;
readSJs[sj1]++;
if (readSJs[sj1]==1) {#only count this junction if it has nto been counted for the same read
if (readSJs[sj1]==1) {#only count this junction if it has not been counted for the same read
SJ[sj1]=1;
if ($5>=mapqU) {
SJu[sj1]++;
......
......@@ -22,7 +22,7 @@ if (substr($1,1,1)!="@") {
sj1=$3 "\t" g "\t" g+L[k]-1;
readSJs[sj1]++;
if (readSJs[sj1]==1) {#only count this junction if it has nto been counted for the same read
if (readSJs[sj1]==1) {#only count this junction if it has not been counted for the same read
SJ[sj1]=1;
if ($5>=mapqU) {
SJu[sj1]++;
......
......@@ -49,6 +49,13 @@ void BAMbinSortByCoordinate(uint32 iBin, uint binN, uint binS, uint nThreads, st
BGZF *bgzfBin;
bgzfBin=bgzf_open((dirBAMsort+"/b"+to_string((uint) iBin)).c_str(),("w"+to_string((long long) P.outBAMcompression)).c_str());
if (bgzfBin==NULL) {
ostringstream errOut;
errOut <<"EXITING because of fatal ERROR: could not open temporary bam file: " << dirBAMsort+"/b"+to_string((uint) iBin) << "\n";
errOut <<"SOLUTION: check that the disk is not full, increase the max number of open files with Linux command ulimit -n before running STAR";
exitWithError(errOut.str(), std::cerr, P.inOut->logMain, EXIT_CODE_PARAMETER, P);
};
outBAMwriteHeader(bgzfBin,P.samHeaderSortedCoord,mapGen.chrNameAll,mapGen.chrLengthAll);
//send ordered aligns to bgzf one-by-one
for (uint ia=0;ia<binN;ia++) {
......
......@@ -6,6 +6,13 @@ void BAMbinSortUnmapped(uint32 iBin, uint nThreads, string dirBAMsort, Parameter
BGZF *bgzfBin;
bgzfBin=bgzf_open((dirBAMsort+"/b"+to_string((uint) iBin)).c_str(),("w"+to_string((long long) P.outBAMcompression)).c_str());
if (bgzfBin==NULL) {
ostringstream errOut;
errOut <<"EXITING because of fatal ERROR: could not open temporary bam file: " << dirBAMsort+"/b"+to_string((uint) iBin) << "\n";
errOut <<"SOLUTION: check that the disk is not full, increase the max number of open files with Linux command ulimit -n before running STAR";
exitWithError(errOut.str(), std::cerr, P.inOut->logMain, EXIT_CODE_PARAMETER, P);
};
outBAMwriteHeader(bgzfBin,P.samHeaderSortedCoord,mapGen.chrNameAll,mapGen.chrLengthAll);
......
......@@ -32,12 +32,12 @@ Genome::Genome (Parameters &Pin ): pGe(Pin.pGe), P(Pin), shmStart(NULL), sharedM
sjdbLength = pGe.sjdbOverhang==0 ? 0 : pGe.sjdbOverhang*2+1;
};
Genome::~Genome()
{
if (sharedMemory != NULL)
delete sharedMemory;
sharedMemory = NULL;
}
// Genome::~Genome()
// {
// if (sharedMemory != NULL)
// delete sharedMemory;
// sharedMemory = NULL;
// }
void Genome::freeMemory(){//free big chunks of memory used by genome and suffix array
......
......@@ -45,8 +45,10 @@ class Genome {
uint genomeInsertL; //total length of the sequence to be inserted on the fly
uint genomeInsertChrIndFirst; //index of the first inserted chromosome
SharedMemory * sharedMemory;
Genome (Parameters &Pin );
~Genome();
//~Genome();
void freeMemory();
void genomeLoad();
......@@ -62,7 +64,6 @@ class Genome {
key_t shmKey;
char *shmStart;
char *G1; //pointer -200 of G
SharedMemory * sharedMemory;
uint OpenStream(string name, ifstream & stream, uint size);
void HandleSharedMemoryException(const SharedMemoryException & exc, uint64 shmSize);
......
......@@ -238,8 +238,10 @@ void Genome::genomeGenerate() {
};
};
GstrandBit = (uint) floor(log(N+P.limitSjdbInsertNsj*sjdbLength)/log(2))+1;
GstrandBit = (char) (uint) floor(log(N+P.limitSjdbInsertNsj*sjdbLength)/log(2))+1;
if (GstrandBit<32) GstrandBit=32; //TODO: use simple access function for SA
P.inOut->logMain <<"Estimated genome size="<<N+P.limitSjdbInsertNsj*sjdbLength<<" "<<N<<" "<<P.limitSjdbInsertNsj*sjdbLength<<"\n";
P.inOut->logMain << "GstrandBit=" << int(GstrandBit) <<"\n";
GstrandMask = ~(1LLU<<GstrandBit);
SA.defineBits(GstrandBit+1,nSA);
......@@ -445,9 +447,6 @@ void Genome::genomeGenerate() {
sjdbInsertJunctions(P, *this, mainGenome1, sjdbLoci);
//write an extra 0 at the end of the array, filling the last bytes that otherwise are not accessible, but will be written to disk
//this is - to avoid valgrind complaints. Note that SApass1 is allocated with plenty of space to spare.
SA.writePacked(nSA,0);
};
pGe.gFileSizes.clear();
......
......@@ -23,12 +23,13 @@ InOutStreams::~InOutStreams() {
logFinal.flush();
outLocalChains.flush();
logStdOutFile.close();
//logStdOutFile.close(); //do not want to close these log files, as some destructors (e.g. ~SharedMemory) might still write there
//logMain.close();
outSAMfile.close();
outChimSAM.close();
outChimJunction.close();
logProgress.close();
logMain.close();
logFinal.close();
outLocalChains.close();
......
......@@ -217,6 +217,7 @@ Parameters::Parameters() {//initalize parameters info
parArray.push_back(new ParameterInfoScalar <uint> (-1, -1, "chimMultimapNmax", &pCh.multimapNmax));
parArray.push_back(new ParameterInfoScalar <uint> (-1, -1, "chimMultimapScoreRange", &pCh.multimapScoreRange));
parArray.push_back(new ParameterInfoScalar <uint> (-1, -1, "chimNonchimScoreDropMin", &pCh.nonchimScoreDropMin));
parArray.push_back(new ParameterInfoVector <int> (-1, -1, "chimOutJunctionFormat", &pCh.outJunctionFormat));
//sjdb
parArray.push_back(new ParameterInfoVector <string> (-1, -1, "sjdbFileChrStartEnd", &pGe.sjdbFileChrStartEnd));
......@@ -453,7 +454,7 @@ void Parameters::inputParameters (int argInN, char* argIn[]) {//input parameters
outFileTmp=outFileNamePrefix +"_STARtmp/";
sysRemoveDir (outFileTmp);
} else {
outFileTmp=outTmpDir;
outFileTmp=outTmpDir + "/";
};
if (mkdir (outFileTmp.c_str(),runDirPerm)!=0) {
......@@ -777,6 +778,60 @@ void Parameters::inputParameters (int argInN, char* argIn[]) {//input parameters
};
};
//two-pass
if (parArray.at(twoPass.pass1readsN_par)->inputLevel>0 && twoPass.mode=="None")
{
ostringstream errOut;
errOut << "EXITING because of fatal PARAMETERS error: --twopass1readsN is defined, but --twoPassMode is not defined\n";
errOut << "SOLUTION: to activate the 2-pass mode, use --twopassMode Basic";
exitWithError(errOut.str(),std::cerr, inOut->logMain, EXIT_CODE_PARAMETER, *this);
};
twoPass.yes=false;
twoPass.pass2=false;
if (twoPass.mode!="None") {//2-pass parameters
if (runMode!="alignReads")
{
ostringstream errOut;
errOut << "EXITING because of fatal PARAMETERS error: 2-pass mapping option can only be used with --runMode alignReads\n";
errOut << "SOLUTION: remove --twopassMode option";
exitWithError(errOut.str(),std::cerr, inOut->logMain, EXIT_CODE_PARAMETER, *this);
};
if (twoPass.mode!="Basic")
{
ostringstream errOut;
errOut << "EXITING because of fatal PARAMETERS error: unrecognized value of --twopassMode="<<twoPass.mode<<"\n";
errOut << "SOLUTION: for the 2-pass mode, use allowed values --twopassMode: Basic";
exitWithError(errOut.str(),std::cerr, inOut->logMain, EXIT_CODE_PARAMETER, *this);
};
if (twoPass.pass1readsN==0)
{
ostringstream errOut;
errOut << "EXITING because of fatal PARAMETERS error: --twopass1readsN = 0 in the 2-pass mode\n";
errOut << "SOLUTION: for the 2-pass mode, specify --twopass1readsN > 0. Use a very large number or -1 to map all reads in the 1st pass.\n";
exitWithError(errOut.str(),std::cerr, inOut->logMain, EXIT_CODE_PARAMETER, *this);
};
if (pGe.gLoad!="NoSharedMemory") {
ostringstream errOut;
errOut << "EXITING because of fatal PARAMETERS error: 2-pass method is not compatible with --genomeLoad "<<pGe.gLoad<<"\n";
errOut << "SOLUTION: re-run STAR with --genomeLoad NoSharedMemory ; this is the only option compatible with --twopassMode Basic .\n";
exitWithError(errOut.str(),std::cerr, inOut->logMain, EXIT_CODE_PARAMETER, *this);
};
twoPass.yes=true;
twoPass.dir=outFileNamePrefix+"_STARpass1/";
sysRemoveDir (twoPass.dir);
if (mkdir (twoPass.dir.c_str(),runDirPerm)!=0) {
ostringstream errOut;
errOut <<"EXITING because of fatal ERROR: could not make pass1 directory: "<< twoPass.dir<<"\n";
errOut <<"SOLUTION: please check the path and writing permissions \n";
exitWithError(errOut.str(), std::cerr, inOut->logMain, EXIT_CODE_PARAMETER, *this);
};
};
// openReadFiles depends on twoPass for reading SAM header
if (runMode=="alignReads" && pGe.gLoad!="Remove" && pGe.gLoad!="LoadAndExit") {//open reads files to check if they are present
openReadsFiles();
......@@ -924,7 +979,7 @@ void Parameters::inputParameters (int argInN, char* argIn[]) {//input parameters
vector<string> vAttr1;
if (outSAMattributes.at(0)=="None") {
} else if (outSAMattributes.at(0)=="All"){
vAttr1={"NH","HI","AS","nM","NM","MD","jM","jI","rB","MC","ch"};
vAttr1={"NH","HI","AS","nM","NM","MD","jM","jI","MC","ch"};
} else if (outSAMattributes.at(0)=="Standard"){
vAttr1={"NH","HI","AS","nM"};
} else {
......@@ -1203,61 +1258,6 @@ void Parameters::inputParameters (int argInN, char* argIn[]) {//input parameters
};
};
//two-pass
if (parArray.at(twoPass.pass1readsN_par)->inputLevel>0 && twoPass.mode=="None")
{
ostringstream errOut;
errOut << "EXITING because of fatal PARAMETERS error: --twopass1readsN is defined, but --twoPassMode is not defined\n";
errOut << "SOLUTION: to activate the 2-pass mode, use --twopassMode Basic";
exitWithError(errOut.str(),std::cerr, inOut->logMain, EXIT_CODE_PARAMETER, *this);
};
twoPass.yes=false;
if (twoPass.mode!="None") {//2-pass parameters
if (runMode!="alignReads")
{
ostringstream errOut;
errOut << "EXITING because of fatal PARAMETERS error: 2-pass mapping option can only be used with --runMode alignReads\n";
errOut << "SOLUTION: remove --twopassMode option";
exitWithError(errOut.str(),std::cerr, inOut->logMain, EXIT_CODE_PARAMETER, *this);
};
if (twoPass.mode!="Basic")
{
ostringstream errOut;
errOut << "EXITING because of fatal PARAMETERS error: unrecognized value of --twopassMode="<<twoPass.mode<<"\n";
errOut << "SOLUTION: for the 2-pass mode, use allowed values --twopassMode: Basic";
exitWithError(errOut.str(),std::cerr, inOut->logMain, EXIT_CODE_PARAMETER, *this);
};
if (twoPass.pass1readsN==0)
{
ostringstream errOut;
errOut << "EXITING because of fatal PARAMETERS error: --twopass1readsN = 0 in the 2-pass mode\n";
errOut << "SOLUTION: for the 2-pass mode, specify --twopass1readsN > 0. Use a very large number or -1 to map all reads in the 1st pass.\n";
exitWithError(errOut.str(),std::cerr, inOut->logMain, EXIT_CODE_PARAMETER, *this);
};
if (pGe.gLoad!="NoSharedMemory") {
ostringstream errOut;
errOut << "EXITING because of fatal PARAMETERS error: 2-pass method is not compatible with --genomeLoad "<<pGe.gLoad<<"\n";
errOut << "SOLUTION: re-run STAR with --genomeLoad NoSharedMemory ; this is the only option compatible with --twopassMode Basic .\n";
exitWithError(errOut.str(),std::cerr, inOut->logMain, EXIT_CODE_PARAMETER, *this);
};
twoPass.yes=true;
twoPass.dir=outFileNamePrefix+"_STARpass1/";
sysRemoveDir (twoPass.dir);
if (mkdir (twoPass.dir.c_str(),runDirPerm)!=0) {
ostringstream errOut;
errOut <<"EXITING because of fatal ERROR: could not make pass1 directory: "<< twoPass.dir<<"\n";
errOut <<"SOLUTION: please check the path and writing permissions \n";
exitWithError(errOut.str(), std::cerr, inOut->logMain, EXIT_CODE_PARAMETER, *this);
};
};
//sjdb insert on the fly
sjdbInsert.pass1=false;
......
......@@ -13,6 +13,8 @@ class ParametersChimeric
uint multimapScoreRange, multimapNmax, nonchimScoreDropMin;
vector<int> outJunctionFormat;
struct
{
vector <string> stringIn;
......