]> git.donarmstrong.com Git - bamtools.git/blob - src/api/SamHeader.cpp
Added SAM header-handling classes for read/write/validate.
[bamtools.git] / src / api / SamHeader.cpp
1 // ***************************************************************************
2 // SamHeader.cpp (c) 2010 Derek Barnett
3 // Marth Lab, Department of Biology, Boston College
4 // All rights reserved.
5 // ---------------------------------------------------------------------------
6 // Last modified: 23 December 2010 (DB)
7 // ---------------------------------------------------------------------------
8 // Provides functionality for querying/manipulating SAM header data
9 // **************************************************************************
10
11 #include <api/SamHeader.h>
12 #include <api/internal/SamFormatParser_p.h>
13 #include <api/internal/SamFormatPrinter_p.h>
14 #include <api/internal/SamHeaderValidator_p.h>
15 using namespace BamTools;
16 using namespace BamTools::Internal;
17 using namespace std;
18
19 SamHeader::SamHeader(const string& headerText)
20     : Version("")
21     , SortOrder("")
22     , GroupOrder("")
23     , ProgramName("")
24     , ProgramVersion("")
25     , ProgramCommandLine("")
26 {
27     SamFormatParser parser(*this);
28     parser.Parse(headerText);
29 }
30
31 SamHeader::~SamHeader(void) {
32     Clear();
33 }
34
35 void SamHeader::Clear(void) {
36     Version.clear();
37     SortOrder.clear();
38     GroupOrder.clear();
39     Sequences.Clear();
40     ReadGroups.Clear();
41     ProgramName.clear();
42     ProgramVersion.clear();
43     ProgramCommandLine.clear();
44     Comments.clear();
45 }
46
47 // retrieve the SAM header, with any local modifications
48 string SamHeader::ToString(void) const {
49     SamFormatPrinter printer(*this);
50     return printer.ToString();
51 }
52
53 // query if header contains @HD ID:<Version>
54 bool SamHeader::HasVersion(void) const {
55     return (!Version.empty());
56 }
57
58 // query if header contains @HD SO:<SortOrder>
59 bool SamHeader::HasSortOrder(void) const {
60     return (!SortOrder.empty());
61 }
62
63 // query if header contains @HD GO:<GroupOrder>
64 bool SamHeader::HasGroupOrder(void) const {
65     return (!GroupOrder.empty());
66 }
67
68 // query if header contains @SQ entries
69 bool SamHeader::HasSequences(void) const {
70     return (!Sequences.IsEmpty());
71 }
72
73 // query if header contains @RG entries
74 bool SamHeader::HasReadGroups(void) const {
75     return (!ReadGroups.IsEmpty());
76 }
77
78 // query if header contains @PG ID:<ProgramName>
79 bool SamHeader::HasProgramName(void) const {
80     return (!ProgramName.empty());
81 }
82
83 // query if header contains @HD VN:<ProgramVersion>
84 bool SamHeader::HasProgramVersion(void) const {
85     return (!ProgramVersion.empty());
86 }
87
88 // query if header contains @HD CL:<ProgramCommandLine>
89 bool SamHeader::HasProgramCommandLine(void) const {
90     return (!ProgramCommandLine.empty());
91 }
92
93 // query if header contains @CO entries
94 bool SamHeader::HasComments(void) const {
95     return (!Comments.empty());
96 }
97
98 // validation
99 bool SamHeader::IsValid(bool verbose) const {
100     SamHeaderValidator validator(*this);
101     return validator.Validate(verbose);
102 }