20{
21 int max_var=0;
22
23 std::vector<MVAUtils::index_t> right;
24 {
25
26 std::stack<const TMVA::DecisionTreeNode *> parent;
27 std::stack<MVAUtils::index_t> parentIndex;
28 parentIndex.push(-1);
29 parent.push(nullptr);
31 int i = -1;
32 while (currNode) {
33 ++i;
34 right.push_back(-1);
35 if (!currNode->GetLeft()) {
36
37 auto currParent = parent.top();
38 auto currParentIndex = parentIndex.top();
39
40 if (currParentIndex >= 0) {
41 right[currParentIndex] = i + 1 - currParentIndex;
42 currNode = currParent->GetCutType() ? currParent->GetLeft() : currParent->GetRight();
43 } else {
44 currNode = nullptr;
45 }
47 parentIndex.pop();
48 } else {
49
51 parentIndex.push(i);
52 currNode = currNode->GetCutType() ? currNode->GetRight() : currNode->GetLeft();
53 }
54 }
55 }
56
57 {
58 std::stack<const TMVA::DecisionTreeNode *>
parent;
59
61
64 std::vector<MVAUtils::NodeTMVA> nodes;
65 while (currNode) {
67 if (!currNode->GetLeft()){
68
69 nodes.emplace_back(-1,
70 isRegression ?
71 currNode->GetResponse() : useYesNoLeaf ? currNode->GetNodeType() : currNode->GetPurity(),
72 right[i]);
73 auto currParent =
parent.top();
74
75 if (currParent) {
76 currNode = currParent->GetCutType() ? currParent->GetLeft() : currParent->GetRight();
77 } else {
78 currNode = nullptr;
79 }
81 } else {
82
84
85 if (currNode->GetSelector() >max_var) { max_var = currNode->GetSelector(); }
86
87 nodes.emplace_back(currNode->GetSelector(), currNode->GetCutValue(), right[i]);
88
89 currNode = currNode->GetCutType() ? currNode->GetRight() : currNode->GetLeft();
90 }
91 }
93 }
95}
void setNVars(const int max_var)
void newTree(const std::vector< Node_t > &nodes, float weight)