1 /*
2  * header.h
3  *
4  *  Created on: Apr 29, 2013
5  *      Author: amarcketta
6  */
7 
8 #ifndef HEADER_H_
9 #define HEADER_H_
10 
11 #include <cstring>
12 #include <string>
13 #include <iostream>
14 #include <map>
15 #include <vector>
16 #include "output_log.h"
17 
18 using namespace std;
19 extern output_log LOG;
20 
21 enum Type_enum {Integer=0, Float=1, Character=2, String=3, Flag=4};
22 
23 class Field_description
24 {
25 public:
26 	string Field;
27 	string ID;
28 	int idx;
29 	int N_entries;
30 	string N_entries_str;
31 	string Type_str;
32 	Type_enum Type;
33 	string Description;
34 	string Length;
35 	string Assembly;
36 	string Source;
37 	string Version;
38 	string Other;
39 
Field_description()40 	Field_description() : Field(""), ID(""), idx(-1), N_entries(0), N_entries_str(""), Type_str(""), Type(Integer), Description(""), Length(""), Assembly(""), Source(""), Version(""), Other("") {};
~Field_description()41 	~Field_description() {};
42 };
43 
44 class header
45 {
46 public:
47 	unsigned int contig_index;
48 	bool has_contigs;
49 	bool has_genotypes;
50 	bool has_header;
51 	bool has_file_format;
52 	bool has_idx;
53 	vector<string> indv;
54 	vector<string> lines;
55 	vector<Field_description> parsed_lines;
56 	unsigned int N_indv;
57 
58 	map<int, Field_description> INFO_map;
59 	map<int, Field_description> FILTER_map;
60 	map<int, Field_description> FORMAT_map;
61 	map<int, Field_description> CONTIG_map;
62 	map<string, int> CONTIG_reverse_map;
63 	map<string, int> FILTER_reverse_map;
64 	map<string, int> INFO_reverse_map;
65 	map<string, int> FORMAT_reverse_map;
66 
67 	header();
~header()68 	~header() {};
69 
70 	void reprint();
71 	void reparse();
72 	void parse_meta(const string &line, unsigned int &line_index);
73 	void parse_header(const string &line);
74 
75 	int add_INFO_descriptor(const string &in, int index);
76 	int add_FILTER_descriptor(const string &in, int index);
77 	int add_FORMAT_descriptor(const string &in, int index);
78 	void add_CONTIG_descriptor(const string &in, int index);
79 
80 	static void tokenize(const string &in, char token, vector<string> &out);
81 	static void split(const string &in, char token, vector<string> &out);
82 	static int str2int(const string &in, const int missing_value=-1);
83 	static string int2str(const int in, const int missing_value=-1);
84 	static double str2double(const string &in, const double missing_value=-1.0);
85 	static string double2str(const double in, const double missing_value=-1.0);
86 };
87 
88 #endif /* HEADER_H_ */
89