]> git.donarmstrong.com Git - bamtools.git/blob - src/api/BamWriter.cpp
8bf6f18c5caf31c404d88cb24ca2020996a128e7
[bamtools.git] / src / api / BamWriter.cpp
1 // ***************************************************************************\r
2 // BamWriter.cpp (c) 2009 Michael Str�mberg, Derek Barnett\r
3 // Marth Lab, Department of Biology, Boston College\r
4 // ---------------------------------------------------------------------------\r
5 // Last modified: 4 March 2011 (DB)\r
6 // ---------------------------------------------------------------------------\r
7 // Provides the basic functionality for producing BAM files\r
8 // ***************************************************************************\r
9 \r
10 #include <api/BamAlignment.h>\r
11 #include <api/BamWriter.h>\r
12 #include <api/SamHeader.h>\r
13 #include <api/internal/BamWriter_p.h>\r
14 using namespace BamTools;\r
15 using namespace BamTools::Internal;\r
16 \r
17 #include <iostream>\r
18 using namespace std;\r
19 \r
20 /*! \class BamTools::BamWriter\r
21     \brief Provides write access for generating BAM files.\r
22 */\r
23 /*! \enum BamTools::BamWriter::CompressionMode\r
24     \brief This enum describes the compression behaviors for output BAM files.\r
25 */\r
26 /*! \var BamWriter::CompressionMode BamWriter::Compressed\r
27     \brief Use normal BAM compression\r
28 */\r
29 /*! \var BamWriter::CompressionMode BamWriter::Uncompressed\r
30     \brief Disable BAM compression\r
31 \r
32     Useful in situations where the BAM data is streamed (e.g. piping).\r
33     It would be wasteful to compress, and then immediately decompress\r
34     the data.\r
35 */\r
36 \r
37 /*! \fn BamWriter::BamWriter(void)\r
38     \brief constructor\r
39 */\r
40 BamWriter::BamWriter(void)\r
41     : d(new BamWriterPrivate)\r
42 { }\r
43 \r
44 /*! \fn BamWriter::~BamWriter(void)\r
45     \brief destructor\r
46 */\r
47 BamWriter::~BamWriter(void) {\r
48     delete d;\r
49     d = 0;\r
50 }\r
51 \r
52 /*! \fn BamWriter::Close(void)\r
53     \brief Closes the current BAM file.\r
54     \sa Open()\r
55 */\r
56 void BamWriter::Close(void) {\r
57     d->Close();\r
58 }\r
59 \r
60 /*! \fn bool BamWriter::IsOpen(void) const\r
61     \brief Returns \c true if BAM file is open for writing.\r
62     \sa Open()\r
63 */\r
64 bool BamWriter::IsOpen(void) const {\r
65     return d->IsOpen();\r
66 }\r
67 \r
68 /*! \fn bool BamWriter::Open(const std::string& filename,\r
69                              const std::string& samHeaderText,\r
70                              const RefVector& referenceSequences)\r
71     \brief Opens a BAM file for writing.\r
72 \r
73     Will overwrite the BAM file if it already exists.\r
74 \r
75     \param filename           name of output BAM file\r
76     \param samHeaderText      header data, as SAM-formatted string\r
77     \param referenceSequences list of reference entries\r
78 \r
79     \return \c true if opened successfully\r
80     \sa Close(), IsOpen(), BamReader::GetHeaderText(), BamReader::GetReferenceData()\r
81 */\r
82 bool BamWriter::Open(const std::string& filename,\r
83                      const std::string& samHeaderText,\r
84                      const RefVector& referenceSequences)\r
85 {\r
86     return d->Open(filename, samHeaderText, referenceSequences);\r
87 }\r
88 \r
89 /*! \fn bool BamWriter::Open(const std::string& filename,\r
90                              const SamHeader& samHeader,\r
91                              const RefVector& referenceSequences)\r
92     \brief Opens a BAM file for writing.\r
93 \r
94     This is an overloaded function.\r
95 \r
96     Will overwrite the BAM file if it already exists.\r
97 \r
98     \param filename           name of output BAM file\r
99     \param samHeader          header data, wrapped in SamHeader object\r
100     \param referenceSequences list of reference entries\r
101 \r
102     \return \c true if opened successfully\r
103     \sa Close(), IsOpen(), BamReader::GetHeader(), BamReader::GetReferenceData()\r
104 */\r
105 bool BamWriter::Open(const std::string& filename,\r
106                      const SamHeader& samHeader,\r
107                      const RefVector& referenceSequences)\r
108 {\r
109     return d->Open(filename, samHeader.ToString(), referenceSequences);\r
110 }\r
111 \r
112 /*! \fn void BamWriter::SaveAlignment(const BamAlignment& alignment)\r
113     \brief Saves an alignment to the BAM file.\r
114 \r
115     \param alignment BamAlignment record to save\r
116     \sa BamReader::GetNextAlignment(), BamReader::GetNextAlignmentCore()\r
117 */\r
118 void BamWriter::SaveAlignment(const BamAlignment& alignment) {\r
119     d->SaveAlignment(alignment);\r
120 }\r
121 \r
122 /*! \fn void BamWriter::SetCompressionMode(const CompressionMode& compressionMode)\r
123     \brief Sets the output compression mode.\r
124 \r
125     Default mode is BamWriter::Compressed.\r
126 \r
127     N.B. - Changing the compression mode is disabled on open files (i.e. the request will be ignored).\r
128     Be sure to call this function before opening the BAM file.\r
129 \r
130     \code\r
131         BamWriter writer;\r
132         writer.SetCompressionMode(BamWriter::Uncompressed);\r
133         writer.Open( ... );\r
134         // ...\r
135     \endcode\r
136 \r
137     \param compressionMode desired output compression behavior\r
138     \sa IsOpen(), Open()\r
139 */\r
140 void BamWriter::SetCompressionMode(const CompressionMode& compressionMode) {\r
141     d->SetWriteCompressed( compressionMode == BamWriter::Compressed );\r
142 }\r