Mercurial > repos > chrisd > testing
comparison gene_fraction/src/alignment_util.h @ 0:f95150c37d38 draft default tip
planemo upload for repository https://github.com/ChrisD11/Tools commit ddc95e5d6b5f2c0a5340c0bc384aa822db8856d5
author | chrisd |
---|---|
date | Sun, 21 Feb 2016 23:31:55 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f95150c37d38 |
---|---|
1 #ifndef ALIGNMENT_UTIL_H | |
2 #define ALIGNMENT_UTIL_H | |
3 | |
4 #include <string> | |
5 #include <vector> | |
6 | |
7 #include <boost/algorithm/string.hpp> | |
8 | |
9 #include "int_util.h" | |
10 | |
11 // macro to check if read mapped | |
12 #define READ_UNMAPPED 4 | |
13 | |
14 /** | |
15 * Splits alignment into separate parts | |
16 */ | |
17 std::vector<std::string> split_alignment(std::string &alignment) { | |
18 std::vector<std::string> parts; | |
19 | |
20 boost::trim_if(alignment, boost::is_any_of("\t ")); | |
21 // split on tab delimeter | |
22 boost::split(parts, alignment, boost::is_any_of("\t "), boost::token_compress_on); | |
23 | |
24 return parts; | |
25 } | |
26 | |
27 /** | |
28 * Validates bit flag | |
29 */ | |
30 bool is_good_flag(const int &bit_flag) { | |
31 if( (bit_flag & READ_UNMAPPED) > 0) return false; | |
32 return true; | |
33 } | |
34 | |
35 /** | |
36 * Validates rname | |
37 */ | |
38 bool is_good_rname(const std::string &rname) { | |
39 return rname.compare("*") != 0; | |
40 } | |
41 | |
42 /** | |
43 * Validates pos | |
44 */ | |
45 bool is_good_pos(const int &pos) { | |
46 return pos > 0; | |
47 } | |
48 | |
49 /** | |
50 * Validates cigar | |
51 */ | |
52 bool is_good_cigar(const std::string &cigar) { | |
53 return cigar.compare("*") != 0; | |
54 } | |
55 | |
56 /** | |
57 * Validates seq | |
58 */ | |
59 bool is_good_seq(const std::string &seq) { | |
60 return seq.compare("*") != 0; | |
61 } | |
62 | |
63 /** | |
64 * Validates alignment fields | |
65 */ | |
66 bool fields_are_good(std::vector<std::string> &parts) { | |
67 int bit_flag = s_to_i(parts[1]); | |
68 int pos = s_to_i(parts[3]); | |
69 | |
70 std::string rname = parts[2]; | |
71 std::string cigar = parts[5]; | |
72 std::string seq = parts[9]; | |
73 | |
74 if(!(is_good_flag(bit_flag))) return false; | |
75 if(!(is_good_pos(pos))) return false; | |
76 if(!(is_good_rname(rname))) return false; | |
77 if(!(is_good_cigar(cigar))) return false; | |
78 if(!(is_good_seq(seq))) return false; | |
79 | |
80 return true; | |
81 } | |
82 | |
83 /** | |
84 * Stores alignments that pass validity checks | |
85 */ | |
86 bool is_good_alignment(std::string &alignment) { | |
87 std::vector<std::string> alignment_parts; | |
88 | |
89 alignment_parts = split_alignment(alignment); | |
90 | |
91 if(!(fields_are_good(alignment_parts))) | |
92 return false; | |
93 return true; | |
94 } | |
95 | |
96 #endif /* ALIGNMENT_UTIL_H */ |