Skip to content

Commit fe8f5fb

Browse files
authored
Merge pull request #2 from blue-moon22/v2.3.4
Speed up
2 parents 7569eef + f803c3d commit fe8f5fb

2 files changed

Lines changed: 51 additions & 25 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@ make
5555

5656
### USAGE
5757
```
58-
pal-mem -f1 <paired-end fasta file 1> -f2 <paired-end fasta file 2> -l <minimum length> -m <maximum length> -o <output prefix> [options]
58+
pal-mem -f1 <paired-end fasta file 1> -f2 <paired-end fasta file 2> -o <output prefix> [options]
5959
```
6060
OR
6161
```
62-
pal-mem -fu <single fasta file> -l <minimum length> -m <maximum length> -o <output prefix> [options]
62+
pal-mem -fu <single fasta file> -o <output prefix> [options]
6363
```
6464

6565
Type *pal-mem -h* for a list of options.

pal-mem.cpp

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,14 @@ void helperReportMem(uint64_t &currRPos, uint64_t &currQPos, uint64_t totalRBits
181181
}else {
182182
lRef-=matchSize;
183183
lQue-=matchSize;
184+
if (matchSize > static_cast<uint64_t>(commonData::maxMemLen)) {
185+
if (lRef?(lRef - RefNpos.left <= commonData::lenBuffer):!lRef) {
186+
rRMEM = RefNpos.right;
187+
lRMEM = RefNpos.left;
188+
}
189+
return;
190+
}
191+
184192
if (mismatch) {
185193
if (matchSize==2)
186194
break;
@@ -190,6 +198,18 @@ void helperReportMem(uint64_t &currRPos, uint64_t &currQPos, uint64_t totalRBits
190198
}
191199
}
192200

201+
/* Ignore reverse complements of the same ORF, i.e. where matching prefix/suffix of reference/query
202+
* Also excludes N mismatches
203+
*/
204+
if (lRef?(lRef - RefNpos.left <= commonData::lenBuffer):!lRef) {
205+
rRMEM = RefNpos.right;
206+
lRMEM = RefNpos.left;
207+
return;
208+
}
209+
210+
if (lQue?(lQue - QueryNpos.left <= commonData::lenBuffer):!lQue)
211+
return;
212+
193213
if (totalRBits-lRef+2 < static_cast<uint64_t>(commonData::minMemLen))
194214
return;
195215

@@ -259,9 +279,25 @@ void helperReportMem(uint64_t &currRPos, uint64_t &currQPos, uint64_t totalRBits
259279
currQ <<= matchSize;
260280
rRef+=matchSize;
261281
rQue+=matchSize;
282+
if (matchSize > static_cast<uint64_t>(commonData::maxMemLen)) {
283+
if ((RefNpos.right - rRef) <= commonData::lenBuffer) {
284+
rRMEM = RefNpos.right;
285+
lRMEM = RefNpos.left;
286+
}
287+
return;
288+
}
262289
}
263290
} // loop until extension reached to the right
264291

292+
if ((RefNpos.right - rRef) <= commonData::lenBuffer) {
293+
rRMEM = RefNpos.right;
294+
lRMEM = RefNpos.left;
295+
return;
296+
}
297+
298+
if ((QueryNpos.right - rQue) <= commonData::lenBuffer)
299+
return;
300+
265301
/* Adjust rRef and rQue locations */
266302

267303
if (rRef > RefNpos.right){
@@ -282,32 +318,22 @@ void helperReportMem(uint64_t &currRPos, uint64_t &currQPos, uint64_t totalRBits
282318
rQue=totalQBits;
283319
}
284320

285-
/* Ignore reverse complements of the same ORF, i.e. where matching prefix/suffix of reference/query
286-
* Also excludes N mismatches
287-
*/
288-
if ((lRef?(lRef - RefNpos.left <= commonData::lenBuffer):!lRef) || ((RefNpos.right - rRef) <= commonData::lenBuffer)) {
321+
if (((RefNpos.right - rRef) <= commonData::lenBuffer) || (lRef?(lRef - RefNpos.left <= commonData::lenBuffer):!lRef)) {
289322
rRMEM = RefNpos.right;
290323
lRMEM = RefNpos.left;
291324
return;
292-
}
293-
294-
/* if current rRef/rQue plus matchSize smaller than minMEMLength, then simply return.
295-
* Note that one less character is compared due to a mismatch
296-
*/
297-
if ((rRef-lRef < static_cast<uint64_t>(commonData::minMemLen)) || (rRef-lRef > static_cast<uint64_t>(commonData::maxMemLen))) {
298-
if ((lRef?(lRef - RefNpos.left <= commonData::lenBuffer):!lRef) || ((RefNpos.right - rRef) <= commonData::lenBuffer)) {
299-
rRMEM = RefNpos.right;
300-
lRMEM = RefNpos.left;
301-
}
302-
return;
303-
}
304-
305-
if (!((lQue?(lQue - QueryNpos.left <= commonData::lenBuffer):!lQue) || ((QueryNpos.right + 2 - rQue) <= commonData::lenBuffer))) {
306-
lQtmp = ((QueryNpos.left == 1)?(QueryNpos.left + (QueryNpos.right - rQue) - 1):(QueryNpos.left + (QueryNpos.right - rQue)));
307-
rQtmp = ((QueryNpos.left == 1)?(QueryNpos.left + (QueryNpos.right - lQue) - 1):(QueryNpos.left + (QueryNpos.right - lQue)));
308-
arrayTmpFile.getInvertedRepeats(lQtmp, rQtmp, QueryFile, rRef, lRef, RefFile, vecSeqInfo);
309-
rQMEM = QueryNpos.right;
310325
}
326+
327+
if (((QueryNpos.right - rQue) <= commonData::lenBuffer) || (lQue?(lQue - QueryNpos.left <= commonData::lenBuffer):!lQue))
328+
return;
329+
330+
if (rRef-lRef > static_cast<uint64_t>(commonData::maxMemLen) || rRef-lRef < static_cast<uint64_t>(commonData::minMemLen))
331+
return;
332+
333+
lQtmp = ((QueryNpos.left == 1)?(QueryNpos.left + (QueryNpos.right - rQue) - 1):(QueryNpos.left + (QueryNpos.right - rQue)));
334+
rQtmp = ((QueryNpos.left == 1)?(QueryNpos.left + (QueryNpos.right - lQue) - 1):(QueryNpos.left + (QueryNpos.right - lQue)));
335+
arrayTmpFile.getInvertedRepeats(lQtmp, rQtmp, QueryFile, rRef, lRef, RefFile, vecSeqInfo);
336+
rQMEM = QueryNpos.right;
311337
}
312338

313339
void reportMEM(Knode* &refHash, uint64_t totalBases, uint64_t totalQBases, seqFileReadInfo &RefFile, seqFileReadInfo &QueryFile, tmpFilesInfo &arrayTmpFile, vector<seqData> &vecSeqInfo)
@@ -494,7 +520,7 @@ void checkCommandLineOptions(uint32_t &options)
494520
void print_help_msg()
495521
{
496522
cout << endl;
497-
cout << "pal-MEM Version 2.1.0, Mar. 7, 2021" << endl;
523+
cout << "pal-MEM Version 2.3.4, Feb. 26, 2022" << endl;
498524
cout << "Adapted from E-MEM Version 1.0.2, Dec. 12, 2017, by Nilesh Khiste and Lucian Ilie" << endl;
499525
cout << endl;
500526
cout << "pal-MEM outputs two fasta files and a tab-delimited file. One fasta file contains reads" << endl;

0 commit comments

Comments
 (0)