ARB
consensus.h
Go to the documentation of this file.
1 // ================================================================= //
2 // //
3 // File : consensus.h //
4 // Purpose : interface for consensus calculation //
5 // //
6 // Coded by Ralf Westram (coder@reallysoft.de) in September 2015 //
7 // http://www.arb-home.de/ //
8 // //
9 // ================================================================= //
10
11 #ifndef CONSENSUS_H
12 #define CONSENSUS_H
13
14 #ifndef AW_BASE_HXX
15 #include <aw_base.hxx>
16 #endif
17 #ifndef _GLIBCXX_ALGORITHM
18 #include <algorithm>
19 #endif
20
21 #define CAS_INTERNAL -1
22 #define CAS_NTREE 1
23 #define CAS_EDIT4 2
24
25 #ifndef CONSENSUS_AWAR_SOURCE
26 # error you need to define CONSENSUS_AWAR_SOURCE before including consensus.h (allowed values: CAS_NTREE, CAS_EDIT4)
27 #endif
28
30  bool countgaps; // count gaps? (otherwise they are completely ignored)
31  int gapbound; // limit in % for gaps. If more gaps occur -> '-'
32  bool group; // whether to group characters (NUC: using ambiguous IUPAC codes; AMINO: using amino groups)
33  int considbound; // limit in %. Bases occurring that often are used to create ambiguity codes (other bases are ignored). gaps are ignored when checking this limit.
34  int upper; // limit in %. If explicit base (or ambiguity code) occurs that often -> use upper case character
35  int lower; // limit in %. If explicit base (or ambiguity code) occurs that often -> use lower case character. Otherwise use '.'
36
37  static void force_in_range(int low, int& val, int high) {
38  val = std::min(std::max(low, val), high);
39  }
40
41  void make_valid() {
42  force_in_range(0, gapbound, 100);
43  force_in_range(0, considbound, 100);
44  force_in_range(0, upper, 100);
45  force_in_range(0, lower, 100);
46  }
47
48 #if (CONSENSUS_AWAR_SOURCE == CAS_NTREE)
56  {
57  make_valid();
58  }
59 #else
60 # if (CONSENSUS_AWAR_SOURCE == CAS_EDIT4)
68  {
69  make_valid();
70  }
71 # else
72 # if (CONSENSUS_AWAR_SOURCE == CAS_INTERNAL)
73  ConsensusBuildParams(AW_root *awr); // produce link error if used
74 # else
75 # error CONSENSUS_AWAR_SOURCE has invalid value
76 # endif
77 # endif
78 #endif
79
80 #if defined(UNIT_TESTS) // UT_DIFF
81  ConsensusBuildParams() // uses defaults of EDIT4 awars
82  : countgaps(true),
83  gapbound(60),
84  group(1),
85  considbound(30),
86  upper(95),
87  lower(70)
88  {
89  make_valid();
90  }
91 #endif
92 };
93
94 #else
95 #error consensus.h included twice
96 #endif // CONSENSUS_H
#define ED4_AWAR_CONSENSUS_GROUP
Definition: ed4_awars.hxx:47
#define AWAR_CONSENSUS_GAPBOUND
#define ED4_AWAR_CONSENSUS_COUNTGAPS
Definition: ed4_awars.hxx:45
#define AWAR_CONSENSUS_GROUP
static void force_in_range(int low, int &val, int high)
Definition: consensus.h:37
#define ED4_AWAR_CONSENSUS_GAPBOUND
Definition: ed4_awars.hxx:46
#define AWAR_CONSENSUS_CONSIDBOUND
#define ED4_AWAR_CONSENSUS_LOWER
Definition: ed4_awars.hxx:50
#define true