00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CGA_TOOLS_COMMAND_MAP2SAM_CONVERTER_HPP_
00016 #define CGA_TOOLS_COMMAND_MAP2SAM_CONVERTER_HPP_ 1
00017
00019
00020 #include "cgatools/core.hpp"
00021 #include "cgatools/util/RangeSet.hpp"
00022 #include "cgatools/reference/CrrFile.hpp"
00023 #include "MapSamUtils.hpp"
00024
00025 #include <boost/array.hpp>
00026 #include <boost/shared_ptr.hpp>
00027 #include <boost/scoped_ptr.hpp>
00028 #include <boost/ptr_container/ptr_vector.hpp>
00029 #include <string>
00030 #include <map>
00031
00032 namespace cgatools { namespace mapping {
00033
00034 class Map2SamConfig {
00035 public:
00036 Map2SamConfig()
00037 :recordsFrom_(0)
00038 ,recordsTo_(std::numeric_limits<size_t>::max())
00039 ,dumpDebugInfo_(true)
00040 ,caveat_(false)
00041 {}
00042
00043 size_t recordsFrom_;
00044 size_t recordsTo_;
00045 bool dumpDebugInfo_;
00046 bool caveat_;
00047
00048 util::StringVector exportRegions_;
00049
00050 std::string exportRootDirName_;
00051 std::string inputReadsBatchId_;
00052 std::string inputReadsFileName_;
00053 std::string inputMappingsFileName_;
00054 std::string referenceFileName_;
00055
00056 std::string outputFileName_;
00057 util::StringVector outputStreamNames_;
00058
00059 std::string commandLine_;
00060
00061 SamGeneratorConfig samGeneratorConfig_;
00062 };
00063
00064 class LibraryData;
00065
00066 class Map2SamConverter
00067 {
00068 public:
00069 typedef boost::shared_ptr<std::istream> InStream;
00070 typedef boost::ptr_vector<SamRecord> SamRecordArray;
00071 static const size_t MAX_SIDES = 2;
00072
00073 Map2SamConverter(const Map2SamConfig &config, std::ostream &outSamFile);
00074 virtual ~Map2SamConverter() {}
00075
00076 virtual void init();
00077 void run();
00078
00079 protected:
00080 SamFileHeaderBlock createHeader();
00081
00082
00083 virtual void writeMappingRecord(const SamRecord &m) const;
00084
00085 void processDnbRecord(const ReadsRecord& readsRecord,
00086 const mapping::MappingsRecords& mappingsRecords) const;
00087
00088 void outputSamMappings(const mapping::ReadsRecord& readsRecord,
00089 SamRecordArray& samMappings) const;
00090
00091 std::string generateDnbId(const mapping::ReadsRecord& readsRecord) const;
00092
00093 void convertBaseMappingsIntoSamMappings(const mapping::ReadsRecord& readsRecord,
00094 SamRecordArray& samMappings, const mapping::MappingsRecords& baseMappingRecords) const;
00095
00099 virtual bool processMappings(const mapping::ReadsRecord& readsRecord,
00100 SamRecordArray& samMappings, const mapping::MappingsRecords& baseMappingRecords) const = 0;
00101
00102 reference::Range getMappingRange(const SamRecord &mapping) const;
00103
00105 size_t getChunkNumber(const std::string &fileName, size_t formatVersion) const;
00106
00107 size_t batchNumber_;
00108 size_t formatVersion_;
00109 std::string slide_;
00110 std::string lane_;
00111 std::string laneId_;
00112
00113 InStream readsFileStream_;
00114 InStream mappingsFileStream_;
00115
00116 boost::shared_ptr<util::DelimitedFile> readsFile_;
00117 boost::shared_ptr<util::DelimitedFile> mappingsFile_;
00118
00119 boost::shared_ptr<LibraryData> library_;
00120
00121 reference::CrrFile reference_;
00122
00123 std::ostream & outSamFile_;
00124
00125 const Map2SamConfig & config_;
00126
00127 boost::scoped_ptr<util::FastRangeSet> exportRegions_;
00128 boost::scoped_ptr<mapping::SamRecordGenerator> mappingSamRecordGenerator_;
00129 };
00130
00131 class BaseMap2SamConverter : public Map2SamConverter
00132 {
00133 public:
00134 BaseMap2SamConverter(const Map2SamConfig &config, std::ostream &outSamFile)
00135 : Map2SamConverter(config, outSamFile) {}
00136
00137 protected:
00141 virtual bool processMappings(const mapping::ReadsRecord& readsRecord,
00142 SamRecordArray& samMappings, const mapping::MappingsRecords& baseMappingRecords) const;
00143
00144 size_t detectPrimaryMapping(const MappingsRecords &mappingsRecords,
00145 bool oneArmOnly, SamRecordArray& samMappings) const;
00146 };
00147
00148
00149 } }
00150
00151 #endif // CGA_TOOLS_COMMAND_MAP2SAM_CONVERTER_HPP_