1 #ifndef FREEBAYES_LEFTALIGN_H
2 #define FREEBAYES_LEFTALIGN_H
3 
4 #include <iostream>
5 #include <getopt.h>
6 #include <fstream>
7 #include <iostream>
8 #include <sstream>
9 #include <signal.h>
10 #include <stdlib.h>
11 #include <cmath>
12 #include <algorithm>
13 #include <map>
14 #include <vector>
15 
16 #ifdef HAVE_BAMTOOLS
17 #include "api/BamAlignment.h"
18 #include "api/BamReader.h"
19 #include "api/BamMultiReader.h"
20 #include "api/BamWriter.h"
21 using namespace BamTools;
22 #define GETNEXT(reader, alignment) reader.GetNextAlignment(alignment)
23 #define GETERRORSTRING(reader) reader.GetErrorString()
24 #define ALIGNMENTLENGTH Length
25 #define ISMAPPED IsMapped()
26 #define REFID RefID
27 #define POSITION Position
28 #define REFNAME RefName
29 #define REFLEN RefLength
30 #define REFVEC RefVector
31 #define REFDATA RefData
32 #define BAMALIGN BamAlignment
33 #define QUALITIES Qualities
34 #define QUERYBASES QueryBases
35 #define ALIGNEDBASES AlignedBases.size()
36 #define QNAME Name
37 #define GETREFDATA GetReferenceData()
38 #define GETREFNUM GetReferenceCount()
39 #define GETREFID(name) GetReferenceID(name)
40 #define ENDPOSITION GetEndPosition()
41 #define SEQLEN QueryBases.size()
42 #define MAPPINGQUALITY MapQuality
43 #define CIGAR std::vector<CigarOp>
44 #define GETCIGAR CigarData
45 #define ISDUPLICATE IsDuplicate()
46 #define ISREVERSESTRAND IsReverseStrand()
47 #define ISPAIRED IsPaired()
48 #define ISMATEMAPPED IsMateMapped()
49 #define ISPROPERPAIR IsProperPair()
50 #define CIGLEN Length
51 #define CIGTYPE Type
52 #define BAMREADER BamMultiReader
53 #define BAMSINGLEREADER BamReader
54 #define FILLREADGROUP(rg, align) (align).GetTag("RG", (rg))
55 #define ADDCIGAR push_back
56 #define CIGOP CigarOp
57 #define GETHEADERTEXT GetHeaderText()
58 #define STDIN "stdin"
59 #define WRITEALIGNMENT(writer, alignment) writer.SaveAlignment(alignment)
60 #else
61 
62 #define GETNEXT(reader, alignment) reader.GetNextRecord(alignment)
63 #define MAPPINGQUALITY MapQuality()
64 #define ALIGNMENTLENGTH Length()
65 #define ISMAPPED MappedFlag()
66 #define ISPAIRED PairedFlag()
67 #define ISMATEMAPPED MateMappedFlag()
68 #define ISPROPERPAIR ProperPair()
69 #define ISREVERSESTRAND ReverseFlag()
70 #define SEQLEN Length()
71 #define BAMALIGN SeqLib::BamRecord
72 #define REFID ChrID()
73 #define POSITION Position()
74 #define REFVEC std::vector<SeqLib::HeaderSequence>
75 #define REFDATA SeqLib::HeaderSequence
76 #define REFNAME Name
77 #define REFLEN Length
78 #define QUALITIES Qualities()
79 #define QUERYBASES Sequence()
80 #define ALIGNEDBASES NumAlignedBases()
81 #define QNAME Qname()
82 #define GETREFDATA Header().GetHeaderSequenceVector()
83 #define GETREFNUM Header().NumSequences()
84 #define ENDPOSITION PositionEnd()
85 #define CIGAR SeqLib::Cigar
86 #define BAMREADER SeqLib::BamReader
87 #define BAMSINGLEREADER SeqLib::BamReader
88 #define GETCIGAR GetCigar()
89 #define GETREFID(name) Header().Name2ID(name)
90 #define ISDUPLICATE DuplicateFlag()
91 #define CIGLEN Length()
92 #define CIGTYPE Type()
93 #define ADDCIGAR add
94 #define CIGOP SeqLib::CigarField
95 #define FILLREADGROUP(rg, align) (align).GetZTag("RG", rg)
96 #define GETHEADERTEXT HeaderConcat()
97 #include "SeqLib/BamReader.h"
98 #include "SeqLib/BamWriter.h"
99 #define STDIN "-"
100 #define WRITEALIGNMENT(writer, alignment) writer.WriteRecord(alignment)
101 #endif
102 
103 
104 
105 
106 #include "IndelAllele.h"
107 
108 #ifdef VERBOSE_DEBUG
109 #define LEFTALIGN_DEBUG(msg) \
110     if (debug) { cerr << msg; }
111 #else
112 #define LEFTALIGN_DEBUG(msg)
113 #endif
114 
115 using namespace std;
116 
117 bool leftAlign(BAMALIGN& alignment, string& referenceSequence, bool debug = false);
118 bool stablyLeftAlign(BAMALIGN& alignment, string referenceSequence, int maxiterations = 20, bool debug = false);
119 int countMismatches(BAMALIGN& alignment, string referenceSequence);
120 
121 #endif
122