@@ -97,6 +97,7 @@ static int ipause; // pause before maching?
9797static uint32_t qUpto; // max # of queries to read
9898static int gTrim5 ; // amount to trim from 5' end
9999static int gTrim3 ; // amount to trim from 3' end
100+ static pair<int , int > trimReadsExceedingLen; // trim reads exceeding given length from either 3' or 5'-end
100101static int offRate; // keep default offRate
101102static bool solexaQuals; // quality strings are solexa quals, not phred, and subtract 64 (not 33)
102103static bool phred64Quals; // quality chars are phred, but must subtract 64 (not 33)
@@ -288,6 +289,7 @@ static void resetOptions() {
288289 qUpto = 0xffffffff ; // max # of queries to read
289290 gTrim5 = 0 ; // amount to trim from 5' end
290291 gTrim3 = 0 ; // amount to trim from 3' end
292+ trimReadsExceedingLen = pair<int , int >(5 , 0 ); // default: don't do any trimming
291293 offRate = -1 ; // keep default offRate
292294 solexaQuals = false ; // quality strings are solexa quals, not phred, and subtract 64 (not 33)
293295 phred64Quals = false ; // quality chars are phred, but must subtract 64 (not 33)
@@ -643,6 +645,7 @@ static struct option long_options[] = {
643645{(char *)" xeq" , no_argument, 0 , ARG_XEQ},
644646{(char *)" thread-ceiling" , required_argument, 0 , ARG_THREAD_CEILING},
645647{(char *)" thread-piddir" , required_argument, 0 , ARG_THREAD_PIDDIR},
648+ {(char *)" trim-reads-exceeding-len" , required_argument, 0 , ARG_TRIM_READS_EXCEEDING_LEN},
646649{(char *)0 , 0 , 0 , 0 } // terminator
647650};
648651
@@ -736,6 +739,7 @@ static void printUsage(ostream& out) {
736739 << " -u/--upto <int> stop after first <int> reads/pairs (no limit)" << endl
737740 << " -5/--trim5 <int> trim <int> bases from 5'/left end of reads (0)" << endl
738741 << " -3/--trim3 <int> trim <int> bases from 3'/right end of reads (0)" << endl
742+ << " --trim-reads-exceeding-len <3|5:int> trim <int> bases from either 3'/right or 5'/left end of reads (no trimming)" << endl
739743 << " --phred33 qualities are Phred+33 (default)" << endl
740744 << " --phred64 qualities are Phred+64" << endl
741745 << " --int-quals qualities encoded as space-delimited integers" << endl
@@ -1101,6 +1105,17 @@ static void parseOption(int next_option, const char *arg) {
11011105 break ;
11021106 case ' 3' : gTrim3 = parseInt (0 , " -3/--trim3 arg must be at least 0" , arg); break ;
11031107 case ' 5' : gTrim5 = parseInt (0 , " -5/--trim5 arg must be at least 0" , arg); break ;
1108+ case ARG_TRIM_READS_EXCEEDING_LEN:
1109+ trimReadsExceedingLen = parsePair<int >(arg, ' :' );
1110+ if (trimReadsExceedingLen.first != 3 && trimReadsExceedingLen.first != 5 ) {
1111+ cerr << " `--trim-reads-exceeding-len pos:n`: pos must be either 3 or 5" << endl;
1112+ throw 1 ;
1113+ }
1114+ if (trimReadsExceedingLen.second < 0 ) {
1115+ cerr << " `--trim-reads-exceeding-len pos:n`: n must be at least 0" << endl;
1116+ throw 1 ;
1117+ }
1118+ break ;
11041119 case ' h' : printUsage (cout); throw 0 ; break ;
11051120 case ARG_USAGE: printUsage (cout); throw 0 ; break ;
11061121 //
@@ -4717,6 +4732,7 @@ static void driver(
47174732 integerQuals, // true -> qualities are space-separated numbers
47184733 gTrim5 , // amt to hard clip from 5' end
47194734 gTrim3 , // amt to hard clip from 3' end
4735+ trimReadsExceedingLen, // trim reads exceeding given length from either 3' or 5'-end
47204736 fastaContLen, // length of sampled reads for FastaContinuous...
47214737 fastaContFreq, // frequency of sampled reads for FastaContinuous...
47224738 skipReads, // skip the first 'skip' patterns
0 commit comments