diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gene_fraction/src/alignment_util.h	Sun Feb 21 23:31:55 2016 -0500
@@ -0,0 +1,96 @@
+#ifndef ALIGNMENT_UTIL_H
+#define ALIGNMENT_UTIL_H
+
+#include <string>
+#include <vector>
+
+#include <boost/algorithm/string.hpp>
+
+#include "int_util.h"
+
+// macro to check if read mapped
+#define READ_UNMAPPED 4
+
+/**
+ * Splits alignment into separate parts
+ */
+std::vector<std::string> split_alignment(std::string &alignment) {
+    	std::vector<std::string> parts;
+
+    	boost::trim_if(alignment, boost::is_any_of("\t "));
+	// split on tab delimeter
+    	boost::split(parts, alignment, boost::is_any_of("\t "), boost::token_compress_on);
+	
+    	return parts;
+}
+
+/**
+ * Validates bit flag
+ */
+bool is_good_flag(const int &bit_flag) {
+    	if( (bit_flag & READ_UNMAPPED) > 0) return false;
+    	return true;
+}
+
+/**
+ * Validates rname
+ */
+bool is_good_rname(const std::string &rname) {
+    	return rname.compare("*") != 0;
+}
+
+/**
+ * Validates pos
+ */
+bool is_good_pos(const int &pos) {
+    	return pos > 0;
+}
+
+/**
+ * Validates cigar
+ */
+bool is_good_cigar(const std::string &cigar) {
+    	return cigar.compare("*") != 0;
+}
+
+/**
+ * Validates seq
+ */
+bool is_good_seq(const std::string &seq) {
+    	return seq.compare("*") != 0;
+}
+
+/**
+ * Validates alignment fields
+ */
+bool fields_are_good(std::vector<std::string> &parts) {
+    	int bit_flag = s_to_i(parts[1]);
+    	int pos = s_to_i(parts[3]);
+
+    	std::string rname = parts[2];
+    	std::string cigar = parts[5];
+    	std::string seq = parts[9];
+
+    	if(!(is_good_flag(bit_flag))) return false;
+    	if(!(is_good_pos(pos))) return false;
+    	if(!(is_good_rname(rname))) return false;
+    	if(!(is_good_cigar(cigar))) return false;
+    	if(!(is_good_seq(seq))) return false;
+
+    	return true;
+}
+
+/**
+ * Stores alignments that pass validity checks
+ */
+bool is_good_alignment(std::string &alignment) {
+    	std::vector<std::string> alignment_parts;
+
+    	alignment_parts = split_alignment(alignment);
+
+    	if(!(fields_are_good(alignment_parts)))
+        	return false;
+    	return true;
+}
+
+#endif /* ALIGNMENT_UTIL_H */