LocARNA-2.0.0
aligner_params.hh
1 #ifndef LOCARNA_ALIGNER_PARAMS_HH
2 #define LOCARNA_ALIGNER_PARAMS_HH
3 
4 #ifdef HAVE_CONFIG_H
5 #include <config.h>
6 #endif
7 
8 #include "scoring_fwd.hh"
9 #include "named_arguments.hh"
10 #include "free_endgaps.hh"
11 
12 #include <vector>
13 #include <string>
14 
15 namespace LocARNA {
16 
18  template <typename Tuple1, typename Tuple2>
20 
21  template <typename... Ts, typename... Us>
22  struct tuple_cat_type<std::tuple<Ts...>,std::tuple<Us...>> {using type = std::tuple<Ts...,Us...>;};
23 
24  template <typename Tuple1, typename Tuple2>
25  using tuple_cat_type_t = typename tuple_cat_type<Tuple1,Tuple2>::type;
26 
27 
28  class Scoring;
29  class Sequence;
30  class ArcMatches;
31  class AnchorConstraints;
32  class TraceController;
34 
35  template <typename T>
36  class AlignerP;
37 
49  class AlignerParams {
50  public:
51  DEFINE_NAMED_ARG_FEATURE(seqA, const Sequence *);
52  DEFINE_NAMED_ARG_FEATURE(seqB, const Sequence *);
53  DEFINE_NAMED_ARG_FEATURE(scoring, const Scoring *);
54  DEFINE_NAMED_ARG_FEATURE(trace_controller, const TraceController *);
55 
56  DEFINE_NAMED_ARG_DEFAULT_FEATURE(no_lonely_pairs, bool, false);
57  DEFINE_NAMED_ARG_DEFAULT_FEATURE(struct_local, bool, false);
58  DEFINE_NAMED_ARG_DEFAULT_FEATURE(sequ_local, bool, false);
59  DEFINE_NAMED_ARG_DEFAULT_FEATURE(free_endgaps, FreeEndgaps, FreeEndgaps("----"));
60  DEFINE_NAMED_ARG_DEFAULT_FEATURE(DO_TRACE, bool, true);
61  DEFINE_NAMED_ARG_DEFAULT_FEATURE(max_diff_am, int, -1);
62  DEFINE_NAMED_ARG_DEFAULT_FEATURE(max_diff_at_am, int, -1);
63  DEFINE_NAMED_ARG_DEFAULT_FEATURE(stacking, bool, false);
64  DEFINE_NAMED_ARG_DEFAULT_FEATURE(constraints, const AnchorConstraints *, nullptr);
65 
66  using valid_args = std::tuple<seqA,
67  seqB,
68  scoring,
69  no_lonely_pairs,
70  struct_local,
71  sequ_local,
72  free_endgaps,
73  DO_TRACE,
74  trace_controller,
75  max_diff_am,
76  max_diff_at_am,
77  stacking,
78  constraints>;
79 
83  template <class... Args>
84  AlignerParams(Args... argpack) {
85  static_assert( type_subset_of<
86  std::tuple<Args...>,
87  valid_args>::value,
88  "Invalid type in named arguments pack." );
89  construct(std::make_tuple(argpack...));
90  }
91 
92  protected:
93  AlignerParams() {}
94 
95  template <class ArgTuple>
96  void
97  construct(const ArgTuple &args) {
98 
99  //mandatory
100  seqA_ = get_named_arg<seqA>(args);
101  seqB_ = get_named_arg<seqB>(args);
102  scoring_ = get_named_arg<scoring>(args);
103  trace_controller_ = get_named_arg<trace_controller>(args);
104 
105  //optional
106  no_lonely_pairs_ = get_named_arg_opt<no_lonely_pairs>(args);
107  struct_local_ = get_named_arg_opt<struct_local>(args);
108  sequ_local_ = get_named_arg_opt<sequ_local>(args);
109  free_endgaps_ = get_named_arg_opt<free_endgaps>(args);
110  DO_TRACE_ = get_named_arg_opt<DO_TRACE>(args);
111  max_diff_am_ = get_named_arg_opt<max_diff_am>(args);
112  max_diff_at_am_ = get_named_arg_opt<max_diff_at_am>(args);
113  stacking_ = get_named_arg_opt<stacking>(args);
114  constraints_ = get_named_arg_opt<constraints>(args);
115  }
116  };
117 
121  template <typename T>
122  class AlignerPParams : public AlignerParams {
123  public:
124  using pf_score_t = T;
125 
126  DEFINE_NAMED_ARG_DEFAULT_FEATURE(min_am_prob, double, 0);
127  DEFINE_NAMED_ARG_DEFAULT_FEATURE(min_bm_prob, double, 0);
128  DEFINE_NAMED_ARG_DEFAULT_FEATURE(pf_scale, pf_score_t, 1.0);
129 
130  using valid_args = tuple_cat_type_t<
131  AlignerParams::valid_args,
132  std::tuple<min_am_prob,
133  min_bm_prob,
134  pf_scale>>;
135 
139  template <class... Args>
140  AlignerPParams(Args... argpack)
141  : AlignerParams() {
142  static_assert( type_subset_of<
143  std::tuple<Args...> ,
144  tuple_cat_type_t<valid_args, AlignerParams::valid_args>
145  >::value,
146  "Invalid type in named arguments pack." );
147 
148  auto args = std::make_tuple(argpack...);
149 
150  AlignerParams::construct(args);
151 
152  min_am_prob_ = get_named_arg_opt<min_am_prob>(args);
153  min_bm_prob_ = get_named_arg_opt<min_bm_prob>(args);
154  pf_scale_ = get_named_arg_opt<pf_scale>(args);
155  }
156  };
157 
161  class AlignerNParams : public AlignerParams {
162  public:
163  DEFINE_NAMED_ARG_FEATURE(sparsification_mapperA, const SparsificationMapper *);
164  DEFINE_NAMED_ARG_FEATURE(sparsification_mapperB, const SparsificationMapper *);
165 
166  using valid_args = tuple_cat_type_t<
167  AlignerParams::valid_args,
168  std::tuple<AlignerNParams::sparsification_mapperA,
169  AlignerNParams::sparsification_mapperB>>;
170 
174  template <class... Args>
175  AlignerNParams(Args... argpack)
176  : AlignerParams() {
177  static_assert( type_subset_of<
178  std::tuple<Args...> ,
179  tuple_cat_type_t<valid_args, AlignerParams::valid_args>
180  >::value,
181  "Invalid type in named arguments pack." );
182 
183  auto args = std::make_tuple(argpack...);
184 
185  AlignerParams::construct(args);
186  sparsification_mapperA_ = get_named_arg<sparsification_mapperA>(args);
187  sparsification_mapperB_ = get_named_arg<sparsification_mapperB>(args);
188  }
189  };
190 } // end namespace LocARNA
191 
192 #endif // LOCARNA_ALIGNER_PARAMS_HH
parameters for AlignerN
Definition: aligner_params.hh:161
AlignerNParams(Args... argpack)
Definition: aligner_params.hh:175
parameters for AlignerP
Definition: aligner_params.hh:122
AlignerPParams(Args... argpack)
Definition: aligner_params.hh:140
Computes partition function of alignment, arc match and base match probabilities.
Definition: aligner_p.hh:54
Parameter for alignment by Aligner.
Definition: aligner_params.hh:49
AlignerParams(Args... argpack)
Definition: aligner_params.hh:84
Represents anchor constraints between two sequences.
Definition: anchor_constraints.hh:66
Maintains the relevant arc matches and their scores.
Definition: arc_matches.hh:116
Description of free end gaps.
Definition: free_endgaps.hh:15
Provides methods for the scoring of alignments.
Definition: scoring.hh:271
"Sequence View" of multiple alignment as array of column vectors
Definition: sequence.hh:17
Represents the mapping for sparsification.
Definition: sparsification_mapper.hh:30
Controls the matrix cells valid for traces.
Definition: trace_controller.hh:200
const bool DO_TRACE
Switch on/off trace back.
Definition: locarna.cc:52
Definition: aligner.cc:15
type of two concattenated tuples
Definition: aligner_params.hh:19
Definition: named_arguments.hh:56