LocARNA-2.0.0
pfold_params.hh
1 #ifndef LOCARNA_PFOLD_PARAMS_HH
2 #define LOCARNA_PFOLD_PARAMS_HH
3 
4 #ifdef HAVE_CONFIG_H
5 #include <config.h>
6 #endif
7 
8 extern "C" {
9 #include <ViennaRNA/data_structures.h>
10 }
11 
12 #include "named_arguments.hh"
13 
14 #include <limits>
15 #include "aux.hh"
16 
17 namespace LocARNA {
18 
32  class PFoldParams {
33  public:
34  struct args {
35  DEFINE_NAMED_ARG_DEFAULT(noLP, bool, false);
36  DEFINE_NAMED_ARG_DEFAULT(stacking, bool, false);
37  DEFINE_NAMED_ARG_DEFAULT(dangling, int, 2);
38  DEFINE_NAMED_ARG_DEFAULT(max_bp_span, int, -1);
39  DEFINE_NAMED_ARG_DEFAULT(ribo, bool, true);
40  DEFINE_NAMED_ARG_DEFAULT(cv_fact, double, 0.6);
41  DEFINE_NAMED_ARG_DEFAULT(nc_fact, double, 0.5);
42 
43  using valid_args = std::tuple<noLP,
44  stacking,
45  dangling,
47  ribo,
48  cv_fact,
49  nc_fact>;
50  };
51 
60  template <typename... Args>
61  PFoldParams(Args... argpack) : md_() {
62  static_assert( type_subset_of< std::tuple<Args...> , typename args::valid_args >::value,
63  "Invalid type in named arguments pack." );
64 
65  auto args = std::make_tuple(argpack...);
66 
67  stacking_ = get_named_arg_opt<args::stacking>(args);
68 
69  vrna_md_set_default(&md_);
70 
71  md_.noLP = get_named_arg_opt<args::noLP>(args) ? 1 : 0;
72 
73  md_.max_bp_span = get_named_arg_opt<args::max_bp_span>(args);
74 
75  md_.dangles = get_named_arg_opt<args::dangling>(args);
76  assert(md_.dangles >= 0);
77  assert(md_.dangles <= 3);
78 
79  md_.compute_bpp = 1;
80 
81  // set ribosum scoring with "best" parameters
82  md_.ribo = get_named_arg_opt<args::ribo>(args) ? 1 : 0;
83  md_.cv_fact = get_named_arg_opt<args::cv_fact>(args); // cfactor
84  md_.nc_fact = get_named_arg_opt<args::nc_fact>(args); // nfactor
85  }
86 
89  PFoldParams(const PFoldParams &pfoldparams):
90  md_(),
91  stacking_(pfoldparams.stacking_)
92  {
93  vrna_md_copy(&md_, &pfoldparams.md_);
94  }
95 
96 
107  const vrna_md_t &
108  model_details() const {
109  return md_;
110  }
111 
112  /* provide read access for selected model details */
113 
119  bool
120  noLP() const {
121  return md_.noLP == 1;
122  }
123 
129  bool
130  stacking() const {
131  return stacking_;
132  }
133 
144  size_t
145  max_bp_span() const {
146  return md_.max_bp_span >= 0 ? md_.max_bp_span
147  : std::numeric_limits<size_t>::max();
148  }
149 
155  int
156  dangling() const {
157  return md_.dangles;
158  }
159  private:
160  vrna_md_t md_;
161  int stacking_;
162  };
163 }
164 
165 #endif // LOCARNA_PFOLD_PARAMS_HH
Parameters for partition folding.
Definition: pfold_params.hh:32
bool stacking() const
Check stacking flag.
Definition: pfold_params.hh:130
PFoldParams(const PFoldParams &pfoldparams)
Definition: pfold_params.hh:89
const vrna_md_t & model_details() const
get ViennaRNA model details structure
Definition: pfold_params.hh:108
int dangling() const
Get dangling value.
Definition: pfold_params.hh:156
size_t max_bp_span() const
Get maximum base pair span.
Definition: pfold_params.hh:145
PFoldParams(Args... argpack)
Definition: pfold_params.hh:61
bool noLP() const
Check no LP flag.
Definition: pfold_params.hh:120
Definition: aligner.cc:15
Definition: pfold_params.hh:34
Definition: named_arguments.hh:56