File: ChimericPairedEndAligner.h

package info (click to toggle)
snap-aligner 2.0.3%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 6,652 kB
  • sloc: cpp: 41,051; ansic: 5,239; python: 227; makefile: 85; sh: 28
file content (145 lines) | stat: -rw-r--r-- 5,710 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*++

Module Name:

    ChimericPairedEndAligner.h

Abstract:

    A paired-end aligner calls into a different paired-end aligner, and if
    it fails to find an alignment, aligns each of the reads singly.  This handles
    chimeric reads that would otherwise be unalignable.

Authors:

    Bill Bolosky, June, 2013

Environment:

    User mode service.

Revision History:

--*/

#pragma once

#include "PairedEndAligner.h"
#include "BaseAligner.h"
#include "BigAlloc.h"

class ChimericPairedEndAligner : public PairedEndAligner {
public:
    ChimericPairedEndAligner(
        GenomeIndex             *index_,
        unsigned                 maxReadSize,
        unsigned                 maxHits,
        unsigned                 maxK,
        unsigned                 maxSeedsFromCommandLine,
        double                   seedCoverage,
	    unsigned                 minWeightToCheck,
        bool                     forceSpacing_,
        unsigned                 extraSearchDepth_,
        DisabledOptimizations    disabledOptimizations_,
        bool                     useAffineGap,
        bool                     ignoreAlignmentAdjustmentsForOm,
		bool                     altAwareness,
        bool                     emitALTAlignments,
        PairedEndAligner        *underlyingPairedEndAligner_,
		unsigned			     minReadLength_,
        int                      maxSecondaryAlignmentsPerContig,
        int                      maxScoreGapToPreferNonAltAlignment,
        int                      flattenMAPQAtOrBelow_,
        bool                     useSoftClipping_,
        unsigned                 matchReward = 1,
        unsigned                 subPenalty = 4,
        unsigned                 gapOpenPenalty = 6,
        unsigned                 gapExtendPenalty = 1,
        unsigned                 fivePrimeEndBonus = 10,
        unsigned                 threePrimeEndBonus = 5,
        int                      minScoreRealignment_ = 3,
        int                      minScoreGapRealignmentALT_ = 3,
        int                      minAGScoreImprovement_ = 24,
        bool                     enableHammingScoringBaseAligner = false,
        BigAllocator            *allocator = NULL);
    
    virtual ~ChimericPairedEndAligner();
    
    static size_t getBigAllocatorReservation(GenomeIndex * index, unsigned maxReadSize, unsigned maxHits, unsigned seedLen, unsigned maxSeedsFromCommandLine, 
                                             double seedCoverage, unsigned maxEditDistanceToConsider, unsigned maxExtraSearchDepth, unsigned maxCandidatePoolSize,
                                             int maxSecondaryAlignmentsPerContig);

    void *operator new(size_t size, BigAllocator *allocator) {_ASSERT(size == sizeof(ChimericPairedEndAligner)); return allocator->allocate(size);}
    void operator delete(void *ptr, BigAllocator *allocator) {/* do nothing.  Memory gets cleaned up when the allocator is deleted.*/}

    virtual bool align(
        Read                  *read0,
        Read                  *read1,
        PairedAlignmentResult *result,
        PairedAlignmentResult *firatALTResult,
        int                    maxEditDistanceForSecondaryResults,
        _int64                 secondaryResultBufferSize,
        _int64                *nSecondaryResults,
        PairedAlignmentResult *secondaryResults,             // The caller passes in a buffer of secondaryResultBufferSize and it's filled in by AlignRead()
        _int64                 singleSecondaryBufferSize,
        _int64                 maxSecondaryAlignmentsToReturn,
        _int64                *nSingleEndSecondaryResultsForFirstRead,
        _int64                *nSingleEndSecondaryResultsForSecondRead,
        SingleAlignmentResult *singleEndSecondaryResults,     // Single-end secondary alignments for when the paired-end alignment didn't work properly
        _int64                 maxPairedCandidatesForAffineGapBufferSize,
        _int64                *nPairedCandidatesForAffineGap,
        PairedAlignmentResult *pairedCandidatesForAffineGap,
        _int64                 maxSingleCandidatesForAffineGapBufferSize,
        _int64                *nSingleCandidatesForAffineGapFirstRead,
        _int64                *nSingleCandidatesForAffineGapSecondRead,
        SingleAlignmentResult *singleCandidatesForAffineGap,
        int                    maxK
	);

    void *operator new(size_t size) {return BigAlloc(size);}
    void operator delete(void *ptr) {BigDealloc(ptr);}

    virtual _int64 getLocationsScoredWithLandauVishkin() const {
        return underlyingPairedEndAligner->getLocationsScoredWithLandauVishkin() + singleAligner->getLocationsScoredWithLandauVishkin();
    }

    virtual _int64 getLocationsScoredWithAffineGap() const {
        return underlyingPairedEndAligner->getLocationsScoredWithAffineGap() + singleAligner->getLocationsScoredWithAffineGap();
    }

private:
   
    bool        forceSpacing;
    BaseAligner *singleAligner;
    PairedEndAligner *underlyingPairedEndAligner;

    // avoid allocation in aligner calls
    IdPairVector* singleSecondary[2];

    LandauVishkin<1> lv;
    LandauVishkin<-1> reverseLV;

    // AffineGap<1> ag;
    // AffineGap<-1> reverseAG;
    AffineGapVectorized<1> ag;
    AffineGapVectorized<-1> reverseAG;

	GenomeIndex *index;
	unsigned	minReadLength;

    bool emitALTAlignments;
    bool useSoftClipping;

    unsigned maxKSingleEnd;
    unsigned maxKPairedEnd;

    int extraSearchDepth;
    int minScoreRealignment;
    int minScoreGapRealignmentALT;
    int minAGScoreImprovement;
    int flattenMAPQAtOrBelow;

    bool enableHammingScoringBaseAligner;
    bool useAffineGap;

};