]> git.donarmstrong.com Git - bamtools.git/blob - src/api/SamHeader.h
3ff4946dc18fe6d57f08c3629c6609ff783ae6c2
[bamtools.git] / src / api / SamHeader.h
1 // ***************************************************************************
2 // SamHeader.h (c) 2010 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 direct read/write access to the SAM header data fields.
9 // ***************************************************************************
10
11 #ifndef SAM_HEADER_H
12 #define SAM_HEADER_H
13
14 #include <api/api_global.h>
15 #include <api/SamReadGroupDictionary.h>
16 #include <api/SamSequenceDictionary.h>
17 #include <string>
18 #include <vector>
19
20 namespace BamTools {
21
22 struct API_EXPORT SamHeader {
23
24     // ctor & dtor
25     SamHeader(const std::string& headerText = "");
26     SamHeader(const SamHeader& other);
27     ~SamHeader(void);
28
29     // query/modify entire SamHeader
30     void Clear(void);                                   // clears all header contents
31     bool IsValid(bool verbose = false) const;           // returns true if SAM header is well-formed
32     void SetHeaderText(const std::string& headerText);  // replaces data fields with contents of SAM-formatted text
33     std::string ToString(void) const;                   // returns the printable, SAM-formatted header text
34
35     // convenience query methods
36     bool HasVersion(void) const;            // returns true if header contains format version entry
37     bool HasSortOrder(void) const;          // returns true if header contains sort order entry
38     bool HasGroupOrder(void) const;         // returns true if header contains group order entry
39     bool HasSequences(void) const;          // returns true if header contains any sequence entries
40     bool HasReadGroups(void) const;         // returns true if header contains any read group entries
41     bool HasProgramName(void) const;        // returns true if header contains program name
42     bool HasProgramVersion(void) const;     // returns true if header contains program version
43     bool HasProgramCommandLine(void) const; // returns true if header contains program command line
44     bool HasComments(void) const;           // returns true if header contains comments
45
46     // data members
47
48     // header metadata (@HD line)
49     std::string Version;                // VN:<Version>
50     std::string SortOrder;              // SO:<SortOrder>
51     std::string GroupOrder;             // GO:<GroupOrder>
52
53     // header sequences (@SQ entries)
54     SamSequenceDictionary Sequences;
55
56     // header read groups (@RG entries)
57     SamReadGroupDictionary ReadGroups;
58
59     // header program data (@PG entries)
60     std::string ProgramName;            // ID:<ProgramName>
61     std::string ProgramVersion;         // VN:<ProgramVersion>
62     std::string ProgramCommandLine;     // CL:<ProgramCommandLine>
63
64     // header comments (@CO entries)
65     std::vector<std::string> Comments;
66 };
67
68 } // namespace BamTools
69
70 #endif // SAM_HEADER_H