annotate BEDTools-Version-2.14.3/src/utils/BamTools/src/api/BamWriter.cpp @ 0:dfcd8b6c1bda

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