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