26 #ifndef SHORE_ALIGNMENT_PROCESSING_HPP__
27 #define SHORE_ALIGNMENT_PROCESSING_HPP__
48 class serialization_core_access;
55 std::deque<std::string> m_ids;
56 std::deque<int> m_chromosomes;
57 std::deque<long> m_positions;
58 std::deque<size_t> m_sizes;
59 std::deque<shore::Strand> m_strands;
60 std::deque<int> m_hits;
61 std::deque<std::string> m_alignments;
62 std::deque<int> m_mismatches;
63 std::deque<int> m_indexes;
64 std::deque<shore::alignment::InsertState> m_pe_states;
65 std::deque<std::string> m_quals1;
66 std::deque<std::string> m_quals2;
67 std::deque<std::string> m_quals3;
70 std::deque<int> m_mapquals;
71 std::deque<std::string> m_readgroups;
72 std::deque<int> m_num_reads;
73 std::deque<shore::read::PeOrientation> m_oris;
74 std::deque<int> m_rnext_chromosomes;
75 std::deque<long> m_rnext_positions;
76 std::deque<shore::Strand> m_rnext_strands;
111 bool has_data()
const;
129 std::multiset<shore::alignment,FtOrd_t> m_rbuf;
143 bool has_data()
const;
197 std::deque<pos> m_limits;
204 std::deque<double> m_window;
213 pf_core(
const size_t w=24);
214 virtual ~pf_core() {}
216 void set_verbose(
const bool v)
222 virtual void flush();
225 bool has_limit()
const;
241 std::map<shore::refseq_coor,size_t> m_revlimits;
255 void set_verbose(
const bool v,
const bool w)
262 bool has_data()
const;
267 double get_lmax()
const {
return m_lmax; }
270 inline std::ostream&
operator<<(std::ostream& os,
const poissonifier::pf_core::pos& p)
272 os<<
"chr="<<p.c.chromosome<<
"; pos="<<p.c.position
290 std::vector<int> m_seqmap;
303 bool has_data()
const;
319 typedef std::pair<shore::Strand,std::pair<shore::refseq_coor,std::string> > key_type;
325 std::string m_currentid;
331 std::set<key_type> m_current_alignments1;
332 std::set<key_type> m_current_alignments2;
338 void clearbesthit1();
339 void clearbesthit2();
352 bool has_data()
const;
386 template<
class Archive>
387 void serialize(Archive& ar,
const unsigned int version)
398 typedef bool(*cmp_t)(
const element &,
const element &);
400 std::map<element,size_t,cmp_t> m_stats;
402 static bool cmp(
const element &e1,
const element &e2);
417 void save(std::ostream &out)
const;
418 void save(
const std::string &outfile)
const;
420 void load(
const std::string &statsfile);
424 void update(
const std::string &statsfile,
const std::string &mapfile,
425 const std::string &reffile=std::string());
442 shore::alignment,shore::alignment>
463 shore::alignment,shore::read>
471 std::vector<std::string> m_current_ids;
474 bool m_remove_redundant;
491 shore::alignment,std::vector<shore::alignment> >
498 typedef std::pair<shore::Strand,std::string> pairkey_t;
502 typedef std::pair<std::vector<shore::alignment>,
bool> paircollect_t;
506 std::deque<paircollect_t> m_pairwait_q;
508 std::map<shore::refseq_coor,std::map<pairkey_t,size_t> > m_nextones;
510 bool m_find_all_concordant;
511 long m_find_unique_distance;
534 std::vector<shore::alignment>,shore::alignment>
548 void prepare(
const std::vector<shore::alignment> &a);
550 void append(
const std::vector<shore::alignment> &a);
582 shore::alignment,shore::alignment>
586 class outofrange_exception
587 :
public std::exception
601 std::pair<size_t,size_t> hitrange;
603 std::pair<size_t,size_t> edrange;
607 std::set<size_t> lengths;
609 std::set<std::pair<shore::alignment::InsertState,int> > peflags;
620 bool position_sorted;
625 const char*
const D=
"strand,T",
626 const char*
const F=
"duplicate-estimation,F",
627 const char*
const N=
"read-lengths,N",
628 const char*
const X=
"p3fix,X",
629 const char*
const B=
"duplicates,B",
630 const char*
const R=
"region,R",
631 const char*
const M=
"mm-range,M",
632 const char*
const H=
"hits-range,H",
633 const char*
const pe=
"peflags",
634 const char*
const jh=
"join-happy",
635 const char*
const ju=
"join-unique");
639 bool operator==(
const config& c2)
const
643 &&(join_happy==c2.join_happy)
644 &&(join_unique==c2.join_unique)
645 &&(hitrange==c2.hitrange)
646 &&(edrange==c2.edrange)
647 &&(strand==c2.strand)
648 &&(lengths==c2.lengths)
649 &&(peflags==c2.peflags)
650 &&(duplicates==c2.duplicates)
651 &&(posrange==c2.posrange)
652 &&(wpoiss==c2.wpoiss);
655 bool is_default()
const
657 return (*
this)==(config());
665 const config m_defaults;
698 struct flt_duplicates
704 double m_duplicacy_f;
706 std::map<shore::refseq_coor,double> m_duplicacy_r;
708 flt_duplicates(
const config& c);
716 void connect_rangefilter(T &
source)
718 if(!m_rangefilter.empty())
720 source|m_rangefilter;
721 connect_pejoin(m_rangefilter);
723 else connect_pejoin(source);
727 void connect_pejoin(T &source)
729 if(m_conf.join_happy||(m_conf.join_unique>0))
731 source|m_pairfinder|m_pairjoiner;
732 connect_filter1(m_pairjoiner);
734 else connect_filter1(source);
738 void connect_filter1(T &source)
740 if(!m_firstfilter.empty())
742 source|m_firstfilter;
743 m_firstfilter.failures()|m_failures;
744 connect_3primex(m_firstfilter);
746 else connect_3primex(source);
750 void connect_3primex(T &source)
755 connect_dup(m_3primex);
757 else connect_dup(source);
761 void connect_dup(T &source)
766 m_dupfilter->duplicates()|m_failures;
767 connect_last(m_dupfilter);
769 else connect_last(source);
773 void connect_last(T &source)
775 if(!m_lastfilter.empty())
777 source|m_lastfilter|m_extractor;
778 m_lastfilter.failures()|m_failures;
780 else source|m_extractor;
804 shore::alignment,shore::alignment>
821 bool m_discard_qual_other;
823 IDStyle m_readid_style;
828 std::vector<std::pair<bool,int> > m_tokbuf;
832 std::map<std::string,int> *m_readid_map;
836 template<
typename Iter>
837 void condense_quality(Iter beg,Iter
end)
const
839 for(
size_t i=0;(beg!=
end)&&(i<m_tokbuf.size());++i)
842 if(m_tokbuf[i].first)
846 int qmin=uint8_t(*beg);
847 int qmax=uint8_t(*beg);
849 for(
int j=0;(beg!=
end)&&(j<m_tokbuf[i].second);
852 const int qcur=uint8_t(*beg);
854 if((qcur>(qmin+m_qgrid))
855 ||(qcur<(qmax-m_qgrid)))
867 qmin=std::min(qmin,qcur);
868 qmax=std::max(qmax,qcur);
880 for(
int j=0;(beg!=
end)&&(j<m_tokbuf[i].second);
892 const bool discard_qual_other=
false,
893 const IDStyle readid_style=ID_PRESERVE,
894 std::map<std::string,int> *
const readid_map=0);
897 S_MAKE_ENUM_TRAITS(alignment_condenser_pipe::IDStyle)
901 #endif // SHORE_ALIGNMENT_PROCESSING_HPP__