00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CGA_TOOLS_COMMAND_EVIDENCE2SAM_HPP_
00016 #define CGA_TOOLS_COMMAND_EVIDENCE2SAM_HPP_ 1
00017
00019
00020 #include "cgatools/core.hpp"
00021 #include "cgatools/command/Command.hpp"
00022 #include "cgatools/util/RangeSet.hpp"
00023
00024 namespace cgatools { namespace command {
00025
00026 class Evidence2SamConfig {
00027 public:
00028 Evidence2SamConfig()
00029 :keepDuplicates_(false)
00030 ,addMateSequenceAndScore_(false)
00031 ,addAlleleId_(false)
00032 ,verboseOutput_(false)
00033 {}
00034
00035 bool keepDuplicates_;
00036 bool addMateSequenceAndScore_;
00037 bool addAlleleId_;
00038 bool verboseOutput_;
00039
00040 util::RangeSet::StringVector exportRegions_;
00041
00042 std::string evidenceDnbsFileName_;
00043 std::string inputLibFileName_;
00044 std::string referenceFileName_;
00045 std::string outputFileName_;
00046
00047 std::string commandLine_;
00048 };
00049
00050 class Evidence2Sam : public Command
00051 {
00052 public:
00053 Evidence2Sam(const std::string& name);
00054
00055 protected:
00056 int run(po::variables_map& vm);
00057
00058 private:
00059 Evidence2SamConfig config_;
00060 };
00061
00063 class Cigar {
00064 friend std::ostream& operator<< (std::ostream& out, const Cigar& cigar);
00065 public:
00066 class CigarElement {
00067 public:
00068 CigarElement(char type, size_t length)
00069 : type_(type), length_(length) {}
00070 int getSequenceLength() const;
00071 char type_;
00072 size_t length_;
00073 };
00074 typedef std::vector<CigarElement> ParsedCigar;
00075
00076 Cigar() {}
00077
00078 Cigar(const std::string &cigar, bool mergeNeighbours = false, bool removeZeros = false)
00079 {
00080 parse(cigar,mergeNeighbours,removeZeros);
00081 }
00082
00083 void parse(const std::string &cigar, bool mergeNeighbours, bool removeZeros);
00084
00086 size_t getSequenceLength() const;
00088 size_t getReferenceLength() const;
00089
00090 const ParsedCigar& getParsedCigar() const {return parsedCigar_;}
00091
00092 void push_back(const CigarElement &e) {parsedCigar_.push_back(e);}
00094 void add_back(const CigarElement &e);
00095
00096 CigarElement &operator[](size_t i) {return parsedCigar_[i];}
00097 CigarElement &back() {return parsedCigar_.back();}
00098
00099 size_t size() const {return parsedCigar_.size();}
00100
00101 void trancatePaddings();
00102 protected:
00103 ParsedCigar parsedCigar_;
00104 };
00105
00106 class SamSequenceSplitter {
00107 public:
00108 SamSequenceSplitter(const Cigar& extCigar, const std::string& dnbSequence,
00109 const std::string& dnbScore, bool negativeStrand);
00110
00111 Cigar srcExtCigar_;
00112 std::string srcSequence_;
00113 std::string srcScores_;
00114
00115 Cigar cigar_;
00116 std::stringstream sequence_;
00117 std::stringstream scores_;
00118
00119 Cigar tagCigar_;
00120 std::stringstream tagSequence_;
00121 std::stringstream tagScores_;
00122 protected:
00123 void convert();
00124 };
00125
00126 } }
00127
00128 #endif // CGA_TOOLS_COMMAND_EVIDENCE2SAM_HPP_