00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CGA_TOOLS_COMMAND_LISTVARIANTS_HPP_
00016 #define CGA_TOOLS_COMMAND_LISTVARIANTS_HPP_ 1
00017
00019
00020 #include "cgatools/core.hpp"
00021 #include "cgatools/command/Command.hpp"
00022 #include "cgatools/variants/Call.hpp"
00023 #include "cgatools/reference/CrrFile.hpp"
00024
00025 #include <set>
00026
00027 namespace cgatools { namespace command {
00028
00029 class ListVariants : public Command
00030 {
00031 public:
00032 class CallOrder
00033 {
00034 public:
00035 bool operator()(const cgatools::variants::Call& lhs,
00036 const cgatools::variants::Call& rhs) const
00037 {
00038 if (lhs.range_ != rhs.range_)
00039 return lhs.range_ < rhs.range_;
00040 return lhs.alleleSeq_ < rhs.alleleSeq_;
00041 }
00042 };
00043
00044 ListVariants(const std::string& name);
00045
00046 protected:
00047 int run(po::variables_map& vm);
00048
00049 private:
00050 void queueCall(
00051 std::set<cgatools::variants::Call, CallOrder>& callSet,
00052 cgatools::variants::Call call);
00053
00054 void retireQueuedCalls(
00055 std::ostream& out,
00056 std::set<cgatools::variants::Call, CallOrder>& callSet);
00057
00058 void purgeQueuedCalls(
00059 std::ostream& out,
00060 std::set<cgatools::variants::Call, CallOrder>& callSet);
00061
00062 void retireCall(
00063 std::ostream& out,
00064 const cgatools::variants::Call& call);
00065
00066 void canonicalizeCall(
00067 cgatools::variants::Call& call) const;
00068
00069 std::string rotateLeft(
00070 const std::string& str,
00071 int32_t count) const;
00072
00073 std::string referenceFileName_;
00074 std::string outputFileName_;
00075
00076 std::vector<std::string> variantFileNames_;
00077 std::vector<std::string> variantListingFileNames_;
00078 bool listLongVariants_;
00079 uint32_t queueBaseCount_;
00080 uint32_t variantId_;
00081 cgatools::variants::Call prevCall_;
00082 cgatools::reference::CrrFile crr_;
00083 };
00084
00085 } }
00086
00087 #endif // CGA_TOOLS_COMMAND_LISTVARIANTS_HPP_