1 // ***************************************************************************
2 // bamtools_pileup_engine.h (c) 2010 Derek Barnett, Erik Garrison
3 // Marth Lab, Department of Biology, Boston College
4 // ---------------------------------------------------------------------------
5 // Last modified: 10 October 2011
6 // ---------------------------------------------------------------------------
7 // Provides pileup at position functionality for various tools.
8 // ***************************************************************************
10 #ifndef BAMTOOLS_PILEUP_ENGINE_H
11 #define BAMTOOLS_PILEUP_ENGINE_H
13 #include "utils/utils_global.h"
15 #include <api/BamAlignment.h>
20 // contains auxiliary data about a single BamAlignment
21 // at current position considered
22 struct UTILS_EXPORT PileupAlignment {
25 BamAlignment Alignment;
26 int32_t PositionInAlignment;
27 bool IsCurrentDeletion;
36 PileupAlignment(const BamAlignment& al)
38 , PositionInAlignment(-1)
39 , IsCurrentDeletion(false)
40 , IsNextDeletion(false)
41 , IsNextInsertion(false)
44 , IsSegmentBegin(false)
49 // contains all data at a position
50 struct UTILS_EXPORT PileupPosition {
55 std::vector<PileupAlignment> PileupAlignments;
58 PileupPosition(const int& refId = 0,
59 const int& position = 0,
60 const std::vector<PileupAlignment>& alignments = std::vector<PileupAlignment>())
63 , PileupAlignments(alignments)
67 class UTILS_EXPORT PileupVisitor {
70 PileupVisitor(void) { }
71 virtual ~PileupVisitor(void) { }
74 virtual void Visit(const PileupPosition& pileupData) =0;
77 class UTILS_EXPORT PileupEngine {
84 bool AddAlignment(const BamAlignment& al);
85 void AddVisitor(PileupVisitor* visitor);
89 struct PileupEnginePrivate;
90 PileupEnginePrivate* d;
93 } // namespace BamTools
95 #endif // BAMTOOLS_PILEUP_ENGINE_H