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