87 #ifndef SHORE_ALGO_ALIGN_HPP__
88 #define SHORE_ALGO_ALIGN_HPP__
130 int m_scoringmatrix[256];
135 dp_nuc_scoring(
const dp_nuc_scoring &other);
136 dp_nuc_scoring & operator=(
const dp_nuc_scoring &other);
153 void set_scores(
const int match,
const int mismatch,
const int gap);
155 void set_scores(
const int match,
const int mismatch,
const int gap,
const int ambmatch);
159 void read_scores(
const std::string &fn,
const int defaultscore=-1);
162 int get_best_score()
const;
165 void print(std::ostream &out)
const;
176 std::vector<int> m_matrix;
195 std::vector<size_t> m_globalmax_pos;
198 std::vector<size_t> m_lastrowmax_pos;
201 std::vector<size_t> m_lastcolmax_pos;
226 const_iterator(
const const_iterator &other);
229 const_iterator & operator=(
const const_iterator &other);
236 int get_prev()
const;
240 int get_ref_prev()
const;
244 int get_qry_prev()
const;
271 bool is_begin()
const;
279 size_t get_ref_pos()
const;
284 size_t get_qry_pos()
const;
287 size_t get_field_index()
const;
290 template<
typename RefValue,
typename QryValue,
typename Scoring>
291 int get_best_score(
const RefValue & rv,
const QryValue & qv,
292 const Scoring & scoring,
297 :
public const_iterator
316 iterator(
const iterator &other);
319 iterator & operator=(
const iterator &other);
323 void set(
const int value);
324 void set_ref_last(
const int value);
325 void set_qry_last(
const int value);
326 void set_last(
const int value);
336 void resize(
const size_t ref_size,
const size_t qry_size);
366 const_iterator
last()
const;
378 template<
typename RefIter,
typename QryIter>
379 void print(std::ostream &os,
380 RefIter ir,QryIter iq)
const;
386 template<
typename RefType,
typename QryType>
419 template<
typename RefIter,
typename QryIter,
typename Scoring>
421 RefIter rbeg,
const size_t rsize,
422 QryIter qbeg,
const size_t qsize,
429 template<
typename SeqIter>
445 dp_sequence(
const SeqIter & b,
447 const int of=0,
const size_t sz=0)
448 :beg(b),
end(e),ofs(of),
size(sz)
460 template<
typename RefIter,
typename QryIter=RefIter,
461 typename Scoring=
typename dp_traits<typename std::iterator_traits<RefIter>::value_type,
462 typename std::iterator_traits<QryIter>::value_type>::scoring_type>
525 template<
typename RefIter,
typename QryIter=RefIter,
526 typename Scoring=
typename dp_traits<typename std::iterator_traits<RefIter>::value_type,
527 typename std::iterator_traits<QryIter>::value_type>::scoring_type>
530 dp_sequence<QryIter>,
531 dp_alignment<RefIter,QryIter,Scoring> >,
532 public buffer_chain<dp_alignment<RefIter,QryIter,Scoring> >
536 typedef dp_sequence<QryIter> append_type;
554 dp_sequence<RefIter> m_ref;
557 dp_sequence<QryIter> m_qry;
570 std::vector<AlignmentMode> m_active_modes;
586 void append(
const dp_sequence<QryIter> & query);
601 void set_ref(RefIter rb,RefIter re);
604 const dp_sequence<RefIter>
get_ref()
const;
616 template<
typename RefIter,
typename QryIter=RefIter,
618 typename std::iterator_traits<QryIter>::value_type>::scoring_type>
621 dp_sequence<QryIter>,
622 dp_alignment<RefIter,QryIter,Scoring> >,
623 public buffer_chain<dp_alignment<RefIter,QryIter,Scoring> >
627 typedef dp_sequence<QryIter> append_type;
636 struct alignment_grabber
647 virtual int apply(std::deque<current_type *> & used,
648 std::vector<current_type *> & unused,
655 used.front()->alignment_matrix.get_score(used.front()->right_ends);
658 if(score>=that->m_score)
660 if(score>that->m_score)
662 that->m_unused.insert(that->m_unused.end(),
663 that->m_used.begin(),
665 that->m_used.clear();
668 if(that->m_conf.report_all_best
669 ||that->m_used.empty())
671 used.front()->ref_id=id;
672 that->m_used.push_back(used.front());
675 that->m_unused.push_back(used.front());
678 that->m_unused.push_back(used.front());
683 if(!that->m_unused.empty())
685 unused.push_back(that->m_unused.back());
686 that->m_unused.pop_back();
699 std::vector<dp_aligner_pipe<RefIter,QryIter,Scoring> *> m_aligners;
701 std::deque<current_type *> m_used;
702 std::vector<current_type *> m_unused;
704 std::vector<alignment_grabber *> m_grabbers;
712 void push_activated();
717 void append(
const dp_sequence<QryIter> & query);
732 void add_ref(RefIter rb,RefIter re,
const int id);
845 template<
typename RefIter,
typename QryIter=RefIter,
846 typename Scoring=
typename dp_traits<typename std::iterator_traits<RefIter>::value_type,
847 typename std::iterator_traits<QryIter>::value_type>::scoring_type,
848 typename AlnBuilder=
typename dp_traits<typename std::iterator_traits<RefIter>::value_type,
849 typename std::iterator_traits<QryIter>::value_type>::alignment_builder_type>
851 :
public pipe_facade<dp_backtracer_pipe<RefIter,QryIter,Scoring,AlnBuilder>,
852 dp_alignment<RefIter,QryIter,Scoring>,
870 dp_alignment_matrix::const_iterator iter;
875 trace_state(
const dp_alignment_matrix::const_iterator &it,
877 :iter(it),trace_op(tr)
890 size_t m_trace_index;
901 bool m_trace_aln_unique;
907 std::vector<trace_state> m_trace_stack;
908 std::vector<trace_state> m_trace_stack_save;
911 bool m_assess_leftends_mode;
914 std::vector<bool> m_visited;
915 std::vector<bool> m_visited_save;
918 bool m_trace_all_branches;
920 void set_trace_size(
const size_t size);
924 ExtendedFlag mark_visited(
const dp_alignment_matrix::const_iterator &it);
926 void init_trace(
const dp_alignment_matrix::const_iterator &it);
934 bool continue_trace();
937 void assess_leftends();
954 class dp_trace_filter
961 double threshold_rel;
962 double threshold_abs;
963 bool threshold_global;
964 bool reject_ambiguous;
971 friend class pipeline_core_access;
977 virtual int apply(std::deque<dp_trace *> & used,
978 std::vector<dp_trace *> & unused,
983 dp_trace_filter(
const int best_score,
const config & c);
991 const dp_trace *trace;
1000 class dp_mapper_pipe
1008 dp_aligner_config align_conf;
1011 dp_backtracer_config trace_conf;
1013 dp_trace_filter::config filter_conf;
1022 dp_nuc_scoring m_scoring;
1025 dp_multialigner_pipe<shore::dna_iterator> m_aligner;
1026 dp_backtracer_pipe<shore::dna_iterator> m_tracer;
1027 dp_trace_filter m_filter;
1032 dp_mapping m_current;
1039 dp_mapper_pipe(
const int best_score,
const config &c);
1040 dp_mapper_pipe(
const dp_mapper_pipe & other);
1048 void set_scoring(
const dp_nuc_scoring & matrix);
1051 typedef shore::pipe_box<dp_mapper_pipe> dp_mapper;
1055 class dp_mapping_writer
1063 typedef dp_mapping append_type;
1065 dp_mapping_writer(
const std::string & outfile);
1067 void append(
const dp_mapping & m);
1076 #include "align.i.hpp"
1077 #include "align.t.hpp"
1079 #endif // SHORE_ALGO_ALIGN_HPP__