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