95 Double_t totalSquaredError = 0;
99 totalSquaredError += (*it)->getTotalError();
109 Double_t bestNodeErrorReduction = -1;
110 Node* nodeToSplit = 0;
121 if( (*it)->getErrorReduction() > bestNodeErrorReduction )
123 bestNodeErrorReduction = (*it)->getErrorReduction();
131 if(nodeToSplit == 0)
return;
191 if(left == 0 || right == 0)
return;
220 if(nextNode == 0)
return node;
238 if(left==0 || right==0)
return;
278 if(left==0 || right==0)
return;
285 std::cout <<
"ERROR: negative split variable for nonterminal node." << std::endl;
286 std::cout <<
"rankVarRecursive Split Variable = " << sv << std::endl;
308 template <
typename T>
312 std::stringstream
ss;
334 TXMLEngine* xml =
new TXMLEngine();
344 XMLDocPointer_t
xmldoc = xml->NewDoc();
345 xml->DocSetRootElement(xmldoc, root);
348 xml->SaveDoc(xmldoc, c);
351 xml->FreeDoc(xmldoc);
362 if(l==0 || r==0)
return;
365 XMLNodePointer_t left = xml->NewChild(np, 0,
"left");
366 XMLNodePointer_t right = xml->NewChild(np, 0,
"right");
382 TXMLEngine* xml =
new TXMLEngine;
385 XMLDocPointer_t
xmldoc = xml->ParseFile(filename);
393 XMLNodePointer_t mainnode = xml->DocGetRootElement(xmldoc);
399 xml->FreeDoc(xmldoc);
409 XMLAttrPointer_t attr = xml->GetFirstAttr(xnode);
410 std::vector<std::string> splitInfo(3);
411 for(
unsigned int i=0;
i<3;
i++)
413 splitInfo[
i] = xml->GetAttrValue(attr);
414 attr = xml->GetNextAttr(attr);
418 std::stringstream converter;
423 converter << splitInfo[0];
424 converter >> splitVar;
428 converter << splitInfo[1];
429 converter >> splitVal;
433 converter << splitInfo[2];
444 XMLNodePointer_t xleft = xml->GetChild(xnode);
445 XMLNodePointer_t xright = xml->GetNext(xleft);
448 if(xleft == 0 || xright == 0)
return;
Node * filterEvent(Event *e)
void filterEventsRecursive(Node *node)
void rankVariablesRecursive(Node *node, std::vector< Double_t > &v)
void loadFromXML(const char *filename)
void setSplitValue(Double_t sSplitValue)
void setTerminalNodes(std::list< Node * > &sTNodes)
Node * filterEventToDaughter(Event *e)
std::list< Node * > terminalNodes
void buildTree(Int_t nodeLimit)
void saveToXMLRecursive(TXMLEngine *xml, Node *node, XMLNodePointer_t np)
void theMiracleOfChildBirth()
void getSplitValues(std::vector< std::vector< Double_t >> &v)
Node * getRightDaughter()
void getSplitValuesRecursive(Node *node, std::vector< std::vector< Double_t >> &v)
void setRootNode(Node *sRootNode)
void filterEventsToDaughters()
Node * filterEventRecursive(Node *node, Event *e)
std::vector< std::vector< Event * > > & getEvents()
void setEvents(std::vector< std::vector< Event * > > &sEvents)
Double_t getErrorReduction()
void setFitValue(Double_t sFitValue)
std::list< Node * > & getTerminalNodes()
void addXMLAttributes(TXMLEngine *xml, Node *node, XMLNodePointer_t np)
void filterEvents(std::vector< Event * > &tEvents)
void setSplitVariable(Int_t sSplitVar)
void rankVariables(std::vector< Double_t > &v)
edm::TrieNode< PDet > Node
void saveToXML(const char *filename)
std::string numToStr(T num)
void loadFromXMLRecursive(TXMLEngine *xml, XMLNodePointer_t node, Node *tnode)
Int_t getNumTerminalNodes()