5 #ifndef ALIGNER_23MM_H_
6 #define ALIGNER_23MM_H_
12 #include "range_source.h"
13 #include "row_chaser.h"
14 #include "range_chaser.h"
15 #include "ref_aligner.h"
18 * Concrete factory for constructing unpaired 2- or 3-mismatch aligners.
20 class Unpaired23mmAlignerV1Factory : public AlignerFactory {
21 typedef RangeSourceDriver<EbwtRangeSource> TRangeSrcDr;
22 typedef CostAwareRangeSourceDriver<EbwtRangeSource> TCostAwareRangeSrcDr;
23 typedef std::vector<TRangeSrcDr*> TRangeSrcDrPtrVec;
25 Unpaired23mmAlignerV1Factory(
26 Ebwt<String<Dna> >& ebwtFw,
27 Ebwt<String<Dna> >* ebwtBw,
32 const HitSinkPerThreadFactory& sinkPtFactory,
37 BitPairReference* refs,
38 vector<String<Dna5> >& os,
49 doFw_(doFw), doRc_(doRc),
51 sinkPtFactory_(sinkPtFactory),
54 cacheLimit_(cacheLimit),
58 maqPenalty_(maqPenalty),
59 qualOrder_(qualOrder),
60 strandFix_(strandFix),
61 rangeMode_(rangeMode),
66 assert(ebwtFw.isInMemory());
67 assert(ebwtBw != NULL);
68 assert(ebwtBw->isInMemory());
72 * Create a new UnpairedExactAlignerV1s.
74 virtual Aligner* create() const {
76 HitSinkPerThread* sinkPt = sinkPtFactory_.create();
77 EbwtSearchParams<String<Dna> >* params =
78 new EbwtSearchParams<String<Dna> >(*sinkPt, os_);
80 const bool seeded = false;
82 EbwtRangeSource *rFw_Bw = new EbwtRangeSource(
83 ebwtBw_, true, 0xffffffff, true, verbose_, quiet_, 0, seeded, maqPenalty_, qualOrder_);
84 EbwtRangeSource *rFw_Fw = new EbwtRangeSource(
85 &ebwtFw_, true, 0xffffffff, false, verbose_, quiet_, 0, seeded, maqPenalty_, qualOrder_);
86 EbwtRangeSource *rFw_BwHalf = new EbwtRangeSource(
87 ebwtBw_, true, 0xffffffff, false, verbose_, quiet_, 2, seeded, maqPenalty_, qualOrder_);
88 EbwtRangeSource *rFw_FwHalf = NULL;
90 rFw_FwHalf = new EbwtRangeSource(
91 &ebwtFw_, true, 0xffffffff, false, verbose_, quiet_, 3, seeded, maqPenalty_, qualOrder_);
94 // Driver wrapper for rFw_Bw
95 EbwtRangeSourceDriver * drFw_Bw = new EbwtRangeSourceDriver(
96 *params, rFw_Bw, true, false, maqPenalty_, qualOrder_, sink_, sinkPt,
97 0, // seedLen (0 = whole read is seed)
98 true, // nudgeLeft (true for Fw index, false for Bw)
99 PIN_TO_HI_HALF_EDGE, // right half is unrevisitable
100 PIN_TO_HI_HALF_EDGE, // trumped by 0-mm
101 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
103 os_, verbose_, quiet_, true, pool_, NULL);
104 // Driver wrapper for rFw_Fw
105 EbwtRangeSourceDriver * drFw_Fw = new EbwtRangeSourceDriver(
106 *params, rFw_Fw, true, false, maqPenalty_, qualOrder_, sink_, sinkPt,
107 0, // seedLen (0 = whole read is seed)
108 false, // nudgeLeft (true for Fw index, false for Bw)
109 PIN_TO_HI_HALF_EDGE, // right half is unrevisitable
110 PIN_TO_HI_HALF_EDGE, // trumped by 0-mm
111 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
113 os_, verbose_, quiet_, true, pool_, NULL);
114 // Driver wrapper for rFw_Fw
115 EbwtRangeSourceDriver * drFw_BwHalf = new EbwtRangeSourceDriver(
116 *params, rFw_BwHalf, true, false, maqPenalty_, qualOrder_, sink_, sinkPt,
117 0, // seedLen (0 = whole read is seed)
118 true, // nudgeLeft (true for Fw index, false for Bw)
119 PIN_TO_BEGINNING, // nothing's unrevisitable
121 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
123 os_, verbose_, quiet_, true, pool_, NULL);
124 // Driver wrapper for rFw_Fw
125 EbwtRangeSourceDriver * drFw_FwHalf = NULL;
127 drFw_FwHalf = new EbwtRangeSourceDriver(
128 *params, rFw_FwHalf, true, false, maqPenalty_, qualOrder_, sink_, sinkPt,
129 0, // seedLen (0 = whole read is seed)
130 false, // nudgeLeft (true for Fw index, false for Bw)
131 PIN_TO_BEGINNING, // nothing's unrevisitable
135 os_, verbose_, quiet_, true, pool_, NULL);
138 TRangeSrcDrPtrVec *drVec = new TRangeSrcDrPtrVec();
140 drVec->push_back(drFw_Bw);
141 drVec->push_back(drFw_Fw);
142 drVec->push_back(drFw_BwHalf);
144 drVec->push_back(drFw_FwHalf);
148 EbwtRangeSource *rRc_Fw = new EbwtRangeSource(
149 &ebwtFw_, false, 0xffffffff, true, verbose_, quiet_, 0, seeded, maqPenalty_, qualOrder_);
150 EbwtRangeSource *rRc_Bw = new EbwtRangeSource(
151 ebwtBw_, false, 0xffffffff, false, verbose_, quiet_, 0, seeded, maqPenalty_, qualOrder_);
152 EbwtRangeSource *rRc_FwHalf = new EbwtRangeSource(
153 &ebwtFw_, false, 0xffffffff, false, verbose_, quiet_, 2, seeded, maqPenalty_, qualOrder_);
154 EbwtRangeSource *rRc_BwHalf = NULL;
156 rRc_BwHalf = new EbwtRangeSource(
157 ebwtBw_, false, 0xffffffff, false, verbose_, quiet_, 3, seeded, maqPenalty_, qualOrder_);
160 // Driver wrapper for rRc_Fw
161 EbwtRangeSourceDriver * drRc_Fw = new EbwtRangeSourceDriver(
162 *params, rRc_Fw, false, false, maqPenalty_, qualOrder_, sink_, sinkPt,
163 0, // seedLen (0 = whole read is seed)
164 true, // nudgeLeft (true for Fw index, false for Bw)
165 PIN_TO_HI_HALF_EDGE, // right half is unrevisitable
166 PIN_TO_HI_HALF_EDGE, // trumped by 0-mm
167 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
169 os_, verbose_, quiet_, true, pool_, NULL);
170 // Driver wrapper for rRc_Bw
171 EbwtRangeSourceDriver * drRc_Bw = new EbwtRangeSourceDriver(
172 *params, rRc_Bw, false, false, maqPenalty_, qualOrder_, sink_, sinkPt,
173 0, // seedLen (0 = whole read is seed)
174 false, // nudgeLeft (true for Fw index, false for Bw)
175 PIN_TO_HI_HALF_EDGE, // right half is unrevisitable
176 PIN_TO_HI_HALF_EDGE, // trumped by 0-mm
177 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
179 os_, verbose_, quiet_, true, pool_, NULL);
180 // Driver wrapper for rRc_Fw
181 EbwtRangeSourceDriver * drRc_FwHalf = new EbwtRangeSourceDriver(
182 *params, rRc_FwHalf, false, false, maqPenalty_, qualOrder_, sink_, sinkPt,
183 0, // seedLen (0 = whole read is seed)
184 true, // nudgeLeft (true for Fw index, false for Bw)
185 PIN_TO_BEGINNING, // nothing's unrevisitable
187 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
189 os_, verbose_, quiet_, true, pool_, NULL);
190 EbwtRangeSourceDriver * drRc_BwHalf = NULL;
192 drRc_BwHalf = new EbwtRangeSourceDriver(
193 *params, rRc_BwHalf, false, false, maqPenalty_, qualOrder_, sink_, sinkPt,
194 0, // seedLen (0 = whole read is seed)
195 false, // nudgeLeft (true for Fw index, false for Bw)
196 PIN_TO_BEGINNING, // nothing's unrevisitable
200 os_, verbose_, quiet_, true, pool_, NULL);
203 drVec->push_back(drRc_Fw);
204 drVec->push_back(drRc_Bw);
205 drVec->push_back(drRc_FwHalf);
207 drVec->push_back(drRc_BwHalf);
210 TCostAwareRangeSrcDr* dr = new TCostAwareRangeSrcDr(strandFix_, drVec, verbose_, quiet_, false);
213 // Set up a RangeChaser
214 RangeChaser<String<Dna> > *rchase =
215 new RangeChaser<String<Dna> >(cacheLimit_, cacheFw_, cacheBw_);
217 return new UnpairedAlignerV2<EbwtRangeSource>(
219 sink_, sinkPtFactory_, sinkPt, os_, refs_,
220 rangeMode_, verbose_, quiet_, INT_MAX, pool_, NULL, NULL);
224 Ebwt<String<Dna> >& ebwtFw_;
225 Ebwt<String<Dna> >* ebwtBw_;
230 const HitSinkPerThreadFactory& sinkPtFactory_;
231 RangeCache *cacheFw_;
232 RangeCache *cacheBw_;
233 const uint32_t cacheLimit_;
235 BitPairReference* refs_;
236 vector<String<Dna5> >& os_;
237 const bool maqPenalty_;
238 const bool qualOrder_;
239 const bool strandFix_;
240 const bool rangeMode_;
247 * Concrete factory for constructing paired 2- or 3-mismatch aligners.
249 class Paired23mmAlignerV1Factory : public AlignerFactory {
250 typedef RangeSourceDriver<EbwtRangeSource> TRangeSrcDr;
251 typedef ListRangeSourceDriver<EbwtRangeSource> TListRangeSrcDr;
252 typedef CostAwareRangeSourceDriver<EbwtRangeSource> TCostAwareRangeSrcDr;
253 typedef std::vector<TRangeSrcDr*> TRangeSrcDrPtrVec;
255 Paired23mmAlignerV1Factory(
256 Ebwt<String<Dna> >& ebwtFw,
257 Ebwt<String<Dna> >* ebwtBw,
264 const HitSinkPerThreadFactory& sinkPtFactory,
271 uint32_t mixedThresh,
272 uint32_t mixedAttemptLim,
277 BitPairReference* refs,
278 vector<String<Dna5> >& os,
295 sinkPtFactory_(sinkPtFactory),
300 dontReconcile_(dontReconcile),
302 mixedThresh_(mixedThresh),
303 mixedAttemptLim_(mixedAttemptLim),
306 cacheLimit_(cacheLimit),
308 refs_(refs), os_(os),
310 maqPenalty_(maqPenalty),
311 qualOrder_(qualOrder),
312 strandFix_(strandFix),
313 rangeMode_(rangeMode),
318 assert(ebwtBw != NULL);
319 assert(ebwtFw.isInMemory());
320 assert(ebwtBw->isInMemory());
324 * Create a new UnpairedExactAlignerV1s.
326 virtual Aligner* create() const {
327 HitSinkPerThread* sinkPt = sinkPtFactory_.createMult(2);
328 HitSinkPerThread* sinkPtSe1 = NULL, * sinkPtSe2 = NULL;
329 EbwtSearchParams<String<Dna> >* params =
330 new EbwtSearchParams<String<Dna> >(*sinkPt, os_);
331 EbwtSearchParams<String<Dna> >* paramsSe1 = NULL, * paramsSe2 = NULL;
333 sinkPtSe1 = sinkPtFactory_.create();
334 sinkPtSe2 = sinkPtFactory_.create();
336 new EbwtSearchParams<String<Dna> >(*sinkPtSe1, os_);
338 new EbwtSearchParams<String<Dna> >(*sinkPtSe2, os_);
341 const bool seeded = false;
348 if(mate1fw_) do1Fw = false;
350 if(mate2fw_) do2Fw = false;
354 if(mate1fw_) do1Rc = false;
356 if(mate2fw_) do2Rc = false;
360 TRangeSrcDrPtrVec *dr1FwVec = new TRangeSrcDrPtrVec();
363 EbwtRangeSource *r1Fw_Bw = new EbwtRangeSource(
364 ebwtBw_, true, 0xffffffff, true, verbose_, quiet_, 0, seeded, maqPenalty_, qualOrder_);
365 EbwtRangeSource *r1Fw_Fw = new EbwtRangeSource(
366 &ebwtFw_, true, 0xffffffff, false, verbose_, quiet_, 0, seeded, maqPenalty_, qualOrder_);
367 EbwtRangeSource *r1Fw_BwHalf = new EbwtRangeSource(
368 ebwtBw_, true, 0xffffffff, false, verbose_, quiet_, 2, seeded, maqPenalty_, qualOrder_);
369 EbwtRangeSource *r1Fw_FwHalf = two_ ? NULL : new EbwtRangeSource(
370 &ebwtFw_, true, 0xffffffff, false, verbose_, quiet_, 3, seeded, maqPenalty_, qualOrder_);
372 // Driver wrapper for rFw_Bw
373 EbwtRangeSourceDriver * dr1Fw_Bw = new EbwtRangeSourceDriver(
374 *params, r1Fw_Bw, true, false, maqPenalty_, qualOrder_, sink_, sinkPt,
375 0, // seedLen (0 = whole read is seed)
376 true, // nudgeLeft (true for Fw index, false for Bw)
377 PIN_TO_HI_HALF_EDGE, // right half is unrevisitable
378 PIN_TO_HI_HALF_EDGE, // trumped by 0-mm
379 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
381 os_, verbose_, quiet_, true, pool_, NULL);
382 // Driver wrapper for rFw_Fw
383 EbwtRangeSourceDriver * dr1Fw_Fw = new EbwtRangeSourceDriver(
384 *params, r1Fw_Fw, true, false, maqPenalty_, qualOrder_, sink_, sinkPt,
385 0, // seedLen (0 = whole read is seed)
386 false, // nudgeLeft (true for Fw index, false for Bw)
387 PIN_TO_HI_HALF_EDGE, // right half is unrevisitable
388 PIN_TO_HI_HALF_EDGE, // trumped by 0-mm
389 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
391 os_, verbose_, quiet_, true, pool_, NULL);
392 // Driver wrapper for rFw_Fw
393 EbwtRangeSourceDriver * dr1Fw_BwHalf = new EbwtRangeSourceDriver(
394 *params, r1Fw_BwHalf, true, false, maqPenalty_, qualOrder_, sink_, sinkPt,
395 0, // seedLen (0 = whole read is seed)
396 true, // nudgeLeft (true for Fw index, false for Bw)
397 PIN_TO_BEGINNING, // nothing's unrevisitable
399 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
401 os_, verbose_, quiet_, true, pool_, NULL);
402 dr1FwVec->push_back(dr1Fw_Bw);
403 dr1FwVec->push_back(dr1Fw_Fw);
404 dr1FwVec->push_back(dr1Fw_BwHalf);
406 // Driver wrapper for rFw_Fw
407 EbwtRangeSourceDriver * dr1Fw_FwHalf = two_ ? NULL : new EbwtRangeSourceDriver(
408 *params, r1Fw_FwHalf, true, false, maqPenalty_, qualOrder_, sink_, sinkPt,
409 0, // seedLen (0 = whole read is seed)
410 false, // nudgeLeft (true for Fw index, false for Bw)
411 PIN_TO_BEGINNING, // nothing's unrevisitable
415 os_, verbose_, quiet_, true, pool_, NULL);
416 dr1FwVec->push_back(dr1Fw_FwHalf);
420 TRangeSrcDrPtrVec *dr1RcVec;
422 dr1RcVec = new TRangeSrcDrPtrVec();
428 EbwtRangeSource *r1Rc_Fw = new EbwtRangeSource(
429 &ebwtFw_, false, 0xffffffff, true, verbose_, quiet_, 0, seeded, maqPenalty_, qualOrder_);
430 EbwtRangeSource *r1Rc_Bw = new EbwtRangeSource(
431 ebwtBw_, false, 0xffffffff, false, verbose_, quiet_, 0, seeded, maqPenalty_, qualOrder_);
432 EbwtRangeSource *r1Rc_FwHalf = new EbwtRangeSource(
433 &ebwtFw_, false, 0xffffffff, false, verbose_, quiet_, 2, seeded, maqPenalty_, qualOrder_);
434 EbwtRangeSource *r1Rc_BwHalf = two_ ? NULL : new EbwtRangeSource(
435 ebwtBw_, false, 0xffffffff, false, verbose_, quiet_, 3, seeded, maqPenalty_, qualOrder_);
437 // Driver wrapper for rRc_Fw
438 EbwtRangeSourceDriver * dr1Rc_Fw = new EbwtRangeSourceDriver(
439 *params, r1Rc_Fw, false, false, maqPenalty_, qualOrder_, sink_, sinkPt,
440 0, // seedLen (0 = whole read is seed)
441 true, // nudgeLeft (true for Fw index, false for Bw)
442 PIN_TO_HI_HALF_EDGE, // right half is unrevisitable
443 PIN_TO_HI_HALF_EDGE, // trumped by 0-mm
444 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
446 os_, verbose_, quiet_, true, pool_, NULL);
447 // Driver wrapper for rRc_Bw
448 EbwtRangeSourceDriver * dr1Rc_Bw = new EbwtRangeSourceDriver(
449 *params, r1Rc_Bw, false, false, maqPenalty_, qualOrder_, sink_, sinkPt,
450 0, // seedLen (0 = whole read is seed)
451 false, // nudgeLeft (true for Fw index, false for Bw)
452 PIN_TO_HI_HALF_EDGE, // right half is unrevisitable
453 PIN_TO_HI_HALF_EDGE, // trumped by 0-mm
454 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
456 os_, verbose_, quiet_, true, pool_, NULL);
457 // Driver wrapper for rRc_Fw
458 EbwtRangeSourceDriver * dr1Rc_FwHalf = new EbwtRangeSourceDriver(
459 *params, r1Rc_FwHalf, false, false, maqPenalty_, qualOrder_, sink_, sinkPt,
460 0, // seedLen (0 = whole read is seed)
461 true, // nudgeLeft (true for Fw index, false for Bw)
464 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
466 os_, verbose_, quiet_, true, pool_, NULL);
467 dr1RcVec->push_back(dr1Rc_Fw);
468 dr1RcVec->push_back(dr1Rc_Bw);
469 dr1RcVec->push_back(dr1Rc_FwHalf);
471 // Driver wrapper for rRc_Bw
472 EbwtRangeSourceDriver * dr1Rc_BwHalf = two_ ? NULL : new EbwtRangeSourceDriver(
473 *params, r1Rc_BwHalf, false, false, maqPenalty_, qualOrder_, sink_, sinkPt,
474 0, // seedLen (0 = whole read is seed)
475 false, // nudgeLeft (true for Fw index, false for Bw)
480 os_, verbose_, quiet_, true, pool_, NULL);
481 dr1RcVec->push_back(dr1Rc_BwHalf);
485 TRangeSrcDrPtrVec *dr2FwVec;
487 dr2FwVec = new TRangeSrcDrPtrVec();
493 EbwtRangeSource *r2Fw_Bw = new EbwtRangeSource(
494 ebwtBw_, true, 0xffffffff, true, verbose_, quiet_, 0, seeded, maqPenalty_, qualOrder_);
495 EbwtRangeSource *r2Fw_Fw = new EbwtRangeSource(
496 &ebwtFw_, true, 0xffffffff, false, verbose_, quiet_, 0, seeded, maqPenalty_, qualOrder_);
497 EbwtRangeSource *r2Fw_BwHalf = new EbwtRangeSource(
498 ebwtBw_, true, 0xffffffff, false, verbose_, quiet_, 2, seeded, maqPenalty_, qualOrder_);
499 EbwtRangeSource *r2Fw_FwHalf = two_ ? NULL : new EbwtRangeSource(
500 &ebwtFw_, true, 0xffffffff, false, verbose_, quiet_, 3, seeded, maqPenalty_, qualOrder_);
502 // Driver wrapper for rFw_Bw
503 EbwtRangeSourceDriver * dr2Fw_Bw = new EbwtRangeSourceDriver(
504 *params, r2Fw_Bw, true, false, maqPenalty_, qualOrder_, sink_, sinkPt,
505 0, // seedLen (0 = whole read is seed)
506 true, // nudgeLeft (true for Fw index, false for Bw)
507 PIN_TO_HI_HALF_EDGE, // right half is unrevisitable
508 PIN_TO_HI_HALF_EDGE, // trumped by 0-mm
509 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
511 os_, verbose_, quiet_, false, pool_, NULL);
512 // Driver wrapper for rFw_Fw
513 EbwtRangeSourceDriver * dr2Fw_Fw = new EbwtRangeSourceDriver(
514 *params, r2Fw_Fw, true, false, maqPenalty_, qualOrder_, sink_, sinkPt,
515 0, // seedLen (0 = whole read is seed)
516 false, // nudgeLeft (true for Fw index, false for Bw)
517 PIN_TO_HI_HALF_EDGE, // right half is unrevisitable
518 PIN_TO_HI_HALF_EDGE, // trumped by 0-mm
519 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
521 os_, verbose_, quiet_, false, pool_, NULL);
522 // Driver wrapper for rFw_Fw
523 EbwtRangeSourceDriver * dr2Fw_BwHalf = new EbwtRangeSourceDriver(
524 *params, r2Fw_BwHalf, true, false, maqPenalty_, qualOrder_, sink_, sinkPt,
525 0, // seedLen (0 = whole read is seed)
526 true, // nudgeLeft (true for Fw index, false for Bw)
527 PIN_TO_BEGINNING, // nothing's unrevisitable
529 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
531 os_, verbose_, quiet_, false, pool_, NULL);
532 dr2FwVec->push_back(dr2Fw_Bw);
533 dr2FwVec->push_back(dr2Fw_Fw);
534 dr2FwVec->push_back(dr2Fw_BwHalf);
536 EbwtRangeSourceDriver * dr2Fw_FwHalf = two_ ? NULL : new EbwtRangeSourceDriver(
537 *params, r2Fw_FwHalf, true, false, maqPenalty_, qualOrder_, sink_, sinkPt,
538 0, // seedLen (0 = whole read is seed)
539 false, // nudgeLeft (true for Fw index, false for Bw)
540 PIN_TO_BEGINNING, // nothing's unrevisitable
544 os_, verbose_, quiet_, false, pool_, NULL);
545 dr2FwVec->push_back(dr2Fw_FwHalf);
549 TRangeSrcDrPtrVec *dr2RcVec;
551 dr2RcVec = new TRangeSrcDrPtrVec();
557 EbwtRangeSource *r2Rc_Fw = new EbwtRangeSource(
558 &ebwtFw_, false, 0xffffffff, true, verbose_, quiet_, 0, seeded, maqPenalty_, qualOrder_);
559 EbwtRangeSource *r2Rc_Bw = new EbwtRangeSource(
560 ebwtBw_, false, 0xffffffff, false, verbose_, quiet_, 0, seeded, maqPenalty_, qualOrder_);
561 EbwtRangeSource *r2Rc_FwHalf = new EbwtRangeSource(
562 &ebwtFw_, false, 0xffffffff, false, verbose_, quiet_, 2, seeded, maqPenalty_, qualOrder_);
563 EbwtRangeSource *r2Rc_BwHalf = two_ ? NULL : new EbwtRangeSource(
564 ebwtBw_, false, 0xffffffff, false, verbose_, quiet_, 3, seeded, maqPenalty_, qualOrder_);
566 // Driver wrapper for rRc_Fw
567 EbwtRangeSourceDriver * dr2Rc_Fw = new EbwtRangeSourceDriver(
568 *params, r2Rc_Fw, false, false, maqPenalty_, qualOrder_, sink_, sinkPt,
569 0, // seedLen (0 = whole read is seed)
570 true, // nudgeLeft (true for Fw index, false for Bw)
571 PIN_TO_HI_HALF_EDGE, // right half is unrevisitable
572 PIN_TO_HI_HALF_EDGE, // trumped by 0-mm
573 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
575 os_, verbose_, quiet_, false, pool_, NULL);
576 // Driver wrapper for rRc_Bw
577 EbwtRangeSourceDriver * dr2Rc_Bw = new EbwtRangeSourceDriver(
578 *params, r2Rc_Bw, false, false, maqPenalty_, qualOrder_, sink_, sinkPt,
579 0, // seedLen (0 = whole read is seed)
580 false, // nudgeLeft (true for Fw index, false for Bw)
581 PIN_TO_HI_HALF_EDGE, // right half is unrevisitable
582 PIN_TO_HI_HALF_EDGE, // trumped by 0-mm
583 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
585 os_, verbose_, quiet_, false, pool_, NULL);
586 // Driver wrapper for rRc_Fw
587 EbwtRangeSourceDriver * dr2Rc_FwHalf = new EbwtRangeSourceDriver(
588 *params, r2Rc_FwHalf, false, false, maqPenalty_, qualOrder_, sink_, sinkPt,
589 0, // seedLen (0 = whole read is seed)
590 true, // nudgeLeft (true for Fw index, false for Bw)
591 PIN_TO_BEGINNING, // nothing's unrevisitable
593 two_ ? PIN_TO_LEN : PIN_TO_HI_HALF_EDGE,
595 os_, verbose_, quiet_, false, pool_, NULL);
596 dr2RcVec->push_back(dr2Rc_Fw);
597 dr2RcVec->push_back(dr2Rc_Bw);
598 dr2RcVec->push_back(dr2Rc_FwHalf);
600 EbwtRangeSourceDriver * dr2Rc_BwHalf = two_ ? NULL : new EbwtRangeSourceDriver(
601 *params, r2Rc_BwHalf, false, false, maqPenalty_, qualOrder_, sink_, sinkPt,
602 0, // seedLen (0 = whole read is seed)
603 false, // nudgeLeft (true for Fw index, false for Bw)
604 PIN_TO_BEGINNING, // nothing's unrevisitable
608 os_, verbose_, quiet_, false, pool_, NULL);
609 dr2RcVec->push_back(dr2Rc_BwHalf);
613 RefAligner<String<Dna5> >* refAligner;
615 refAligner = new TwoMMRefAligner<String<Dna5> >(color_, verbose_, quiet_);
617 refAligner = new ThreeMMRefAligner<String<Dna5> >(color_, verbose_, quiet_);
620 // Set up a RangeChaser
621 RangeChaser<String<Dna> > *rchase =
622 new RangeChaser<String<Dna> >(cacheLimit_, cacheFw_, cacheBw_);
625 PairedBWAlignerV1<EbwtRangeSource> *al = new PairedBWAlignerV1<EbwtRangeSource>(
627 new TCostAwareRangeSrcDr(strandFix_, dr1FwVec, verbose_, quiet_, false),
628 new TCostAwareRangeSrcDr(strandFix_, dr1RcVec, verbose_, quiet_, false),
629 new TCostAwareRangeSrcDr(strandFix_, dr2FwVec, verbose_, quiet_, false),
630 new TCostAwareRangeSrcDr(strandFix_, dr2RcVec, verbose_, quiet_, false),
632 sink_, sinkPtFactory_, sinkPt, mate1fw_, mate2fw_,
633 peInner_, peOuter_, dontReconcile_, symCeil_, mixedThresh_,
634 mixedAttemptLim_, refs_, rangeMode_, verbose_,
635 quiet_, INT_MAX, pool_, NULL);
642 PairedBWAlignerV2<EbwtRangeSource>* al = new PairedBWAlignerV2<EbwtRangeSource>(
643 params, paramsSe1, paramsSe2,
644 new TCostAwareRangeSrcDr(strandFix_, dr1FwVec, verbose_, quiet_, true),
646 sink_, sinkPtFactory_,
647 sinkPt, sinkPtSe1, sinkPtSe2,
650 mixedAttemptLim_, refs_, rangeMode_,
651 verbose_, quiet_, INT_MAX, pool_, NULL);
658 Ebwt<String<Dna> >& ebwtFw_;
659 Ebwt<String<Dna> >* ebwtBw_;
666 const HitSinkPerThreadFactory& sinkPtFactory_;
669 const uint32_t peInner_;
670 const uint32_t peOuter_;
671 const bool dontReconcile_;
672 const uint32_t symCeil_;
673 const uint32_t mixedThresh_;
674 const uint32_t mixedAttemptLim_;
675 RangeCache *cacheFw_;
676 RangeCache *cacheBw_;
677 const uint32_t cacheLimit_;
679 BitPairReference* refs_;
680 vector<String<Dna5> >& os_;
681 const bool reportSe_;
682 const bool maqPenalty_;
683 const bool qualOrder_;
684 const bool strandFix_;
685 const bool rangeMode_;
688 const uint32_t seed_;
691 #endif /* ALIGNER_23MM_H_ */