-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathHMMConfiguration.cpp
67 lines (56 loc) · 2.18 KB
/
HMMConfiguration.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "HMMConfiguration.h"
#include <iostream>
#ifndef JSON_IS_AMALGAMATION
# define JSON_IS_AMALGAMATION
#endif
#include "include/json/json.h"
#define READ_CONFIG(name, as){\
configuration.name = root.get(#name, configuration.name).as();\
}
using namespace hiddenMarkovModel;
HMMConfiguration::HMMConfiguration():
verbose(false),
verboseOutputTransition(true),
verboseOutputEmission(false),
pauseAfterIteration(false),
minSelfTransition(0),
minEmission(1e-6),
doEmissionUpdate(true),
doTransitionUpdate(true),
binningCount(300),
maxIterations(100),
abortStateChanges(5),
useMinimalBinningRange(false),
lowerBinningRangeLimit(0),
upperBinningRangeLimit(1)
{};
HMMConfiguration HMMConfiguration::fromFile(std::istream &file){
Json::Value root;
Json::Reader reader;
HMMConfiguration configuration;
if (reader.parse(file, root)){
if (root.isMember("verbose") && root["verbose"].isObject()){
configuration.verbose = root["verbose"].get("enabled", configuration.verbose).asBool();
configuration.verboseOutputTransition = root["verbose"].get("outputTransition", configuration.verboseOutputTransition).asBool();
configuration.verboseOutputEmission = root["verbose"].get("outputEmission", configuration.verboseOutputEmission).asBool();
}
READ_CONFIG(pauseAfterIteration, asBool);
READ_CONFIG(minSelfTransition, asDouble);
READ_CONFIG(minEmission, asDouble);
READ_CONFIG(doEmissionUpdate, asBool);
READ_CONFIG(doTransitionUpdate, asBool);
READ_CONFIG(binningCount, asUInt);
READ_CONFIG(maxIterations, asUInt);
READ_CONFIG(abortStateChanges, asUInt);
if (root.isMember("minimalBinningRange") && root["minimalBinningRange"].isObject()){
configuration.useMinimalBinningRange = root["minimalBinningRange"].get("enabled", configuration.verbose).asBool();
configuration.lowerBinningRangeLimit = root["minimalBinningRange"].get("lowerLimit", configuration.lowerBinningRangeLimit).asDouble();
configuration.upperBinningRangeLimit = root["minimalBinningRange"].get("upperLimit", configuration.upperBinningRangeLimit).asDouble();
}
}
else {
std::cerr << "Failed to parse configuration" << std::endl
<< reader.getFormattedErrorMessages();
}
return configuration;
}