diff snp_caller/src/Alignment.h @ 0:0fd352f62446 draft default tip

planemo upload for repository https://github.com/ChrisD11/Duplicon commit 3ee0594c692faac542ffa58f4339d79b9b8aefbd-dirty
author chrisd
date Sun, 21 Feb 2016 06:05:24 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/snp_caller/src/Alignment.h	Sun Feb 21 06:05:24 2016 -0500
@@ -0,0 +1,91 @@
+#ifndef ALIGNMENT_H
+#define ALIGNMENT_H
+
+#include <string>
+#include <vector>
+#include <algorithm>
+
+struct bit_flag {
+    /* SAM flags in English */
+    bool read_paired =                              false;
+    bool read_mapped_in_proper_pair =               false;
+    bool read_unmapped =                            false;
+    bool mate_unmapped =                            false;
+    bool read_reverse_strand =                      false;
+    bool mate_reverse_strand =                      false;
+    bool first_in_pair =                            false;
+    bool second_in_pair =                           false;
+};
+
+struct alignment_fields {
+	std::string QNAME;
+	int FLAG;
+	std::string RNAME;
+	int POS;
+	std::string MAPQ;
+	std::string CIGAR;
+	std::string RNEXT;
+	int PNEXT;
+	int TLEN;
+	std::string SEQ;
+	std::string QUAL;
+};
+
+class Alignment {
+public:
+	Alignment(std::string alignment);
+	void fill_alignment_fields(const std::string &alignment);
+	void fill_bit_flag(const int &flag);
+	bool fill_xa_field(const std::string &alignment);
+	std::vector<std::pair<int,char> > get_cigar();
+
+	inline std::string alignment() const	{ return _alignment; };
+	inline std::string qname() const	{ return field.QNAME; };
+	inline std::string rname() const	{ return field.RNAME; };
+	inline std::string mapq() const		{ return field.MAPQ; };
+	inline std::string cigar() const	{ return field.CIGAR; };
+	inline std::string seq() const		{ return field.SEQ; };
+	inline std::string rnext() const	{ return field.RNEXT; };
+	inline int flag() const			{ return field.FLAG; };
+	inline int pos() const			{ return field.POS; };
+	inline int pnext() const		{ return field.PNEXT; };
+	inline int tlen() const			{ return field.TLEN; };
+
+    	inline bool read_paired() const                         { return b_flag.read_paired; };
+    	inline bool read_mapped_in_proper_pair() const          { return b_flag.read_mapped_in_proper_pair; };
+    	inline bool read_unmapped() const                       { return b_flag.read_unmapped; };
+    	inline bool mate_unmapped() const                       { return b_flag.mate_unmapped; };
+    	inline bool read_reverse_strand() const                 { return b_flag.read_reverse_strand; }
+    	inline bool mate_reverse_strand() const                 { return b_flag.mate_reverse_strand; };
+    	inline bool first_in_pair() const                       { return b_flag.first_in_pair; };
+    	inline bool second_in_pair() const                      { return b_flag.second_in_pair; };
+
+	inline void set_rname(std::string rname) {
+		field.RNAME = rname;
+	}
+	inline void set_cigar(std::string cigar) {
+		field.CIGAR = cigar;
+	}
+	inline void set_pos(int pos) {
+		field.POS = pos;
+	}
+
+	struct xa_fields {
+        	std::string rname;
+        	std::string cigar;
+        	int pos;
+        	int edit;
+	};
+
+	std::vector<xa_fields> alternate_hits;
+private:
+	std::vector<std::pair<int,char> > get_cigar_operations(const std::string &cigar);
+
+	std::string _alignment;
+
+	alignment_fields field;
+
+	bit_flag b_flag;
+};
+
+#endif // ALIGNMENT_H