119 fCutValue(
n.fCutValue ),
120 fCutType (
n.fCutType ),
121 fSelector(
n.fSelector ),
122 fResponse(
n.fResponse ),
124 fNodeType(
n.fNodeType ),
125 fPurity (
n.fPurity),
126 fIsTerminalNode(
n.fIsTerminalNode )
159 if (GetNFisherCoeff() == 0){
161 result = (
e.GetValueFast(this->GetSelector()) >= this->GetCutValue() );
181 if (!this->GoesRight(
e))
return kTRUE;
193 if ( ( this->GetNSigEvents() + this->GetNBkgEvents() ) > 0 ) {
194 fPurity = this->GetNSigEvents() / ( this->GetNSigEvents() + this->GetNBkgEvents());
197 Log() << kINFO <<
"Zero events in purity calculation , return purity=0.5" <<
Endl;
198 std::ostringstream
oss;
211 os <<
"< *** " << std::endl;
212 os <<
" d: " << this->GetDepth()
213 << std::setprecision(6)
214 <<
"NCoef: " << this->GetNFisherCoeff();
215 for (
Int_t i=0; i< (
Int_t) this->GetNFisherCoeff(); i++) { os <<
"fC"<<i<<
": " << this->GetFisherCoeff(i);}
216 os <<
" ivar: " << this->GetSelector()
217 <<
" cut: " << this->GetCutValue()
218 <<
" cType: " << this->GetCutType()
219 <<
" s: " << this->GetNSigEvents()
220 <<
" b: " << this->GetNBkgEvents()
221 <<
" nEv: " << this->GetNEvents()
222 <<
" suw: " << this->GetNSigEvents_unweighted()
223 <<
" buw: " << this->GetNBkgEvents_unweighted()
224 <<
" nEvuw: " << this->GetNEvents_unweighted()
225 <<
" sepI: " << this->GetSeparationIndex()
226 <<
" sepG: " << this->GetSeparationGain()
227 <<
" nType: " << this->GetNodeType()
230 os <<
"My address is " << (
Longptr_t)
this <<
", ";
231 if (this->GetParent() !=
NULL) os <<
" parent at addr: " << (
Longptr_t)this->GetParent();
232 if (this->GetLeft() !=
NULL) os <<
" left daughter at addr: " << (
Longptr_t)this->GetLeft();
233 if (this->GetRight() !=
NULL) os <<
" right daughter at addr: " << (
Longptr_t)this->GetRight();
235 os <<
" **** > " << std::endl;
243 os << this->GetDepth()
244 << std::setprecision(6)
245 <<
" " << this->GetPos()
246 <<
"NCoef: " << this->GetNFisherCoeff();
247 for (
Int_t i=0; i< (
Int_t) this->GetNFisherCoeff(); i++) {os <<
"fC"<<i<<
": " << this->GetFisherCoeff(i);}
248 os <<
" ivar: " << this->GetSelector()
249 <<
" cut: " << this->GetCutValue()
250 <<
" cType: " << this->GetCutType()
251 <<
" s: " << this->GetNSigEvents()
252 <<
" b: " << this->GetNBkgEvents()
253 <<
" nEv: " << this->GetNEvents()
254 <<
" suw: " << this->GetNSigEvents_unweighted()
255 <<
" buw: " << this->GetNBkgEvents_unweighted()
256 <<
" nEvuw: " << this->GetNEvents_unweighted()
257 <<
" sepI: " << this->GetSeparationIndex()
258 <<
" sepG: " << this->GetSeparationGain()
259 <<
" res: " << this->GetResponse()
260 <<
" rms: " << this->GetRMS()
261 <<
" nType: " << this->GetNodeType();
262 if (this->GetCC() > 10000000000000.) os <<
" CC: " << 100000. << std::endl;
263 else os <<
" CC: " << this->GetCC() << std::endl;
265 if (this->GetLeft() !=
NULL) this->GetLeft() ->PrintRec(os);
266 if (this->GetRight() !=
NULL) this->GetRight()->PrintRec(os);
287 this->SetDepth(
depth);
323 this->SetCutValue(
cutVal);
327 this->SetNSigEvents(
nsig);
328 this->SetNBkgEvents(
nbkg);
329 this->SetNEvents(
nEv);
351 SetNSigEvents_unweighted(0);
352 SetNBkgEvents_unweighted(0);
353 SetNEvents_unweighted(0);
354 SetSeparationIndex(-1);
355 SetSeparationGain(-1);
358 if (this->GetLeft() !=
NULL) ((
DecisionTreeNode*)(this->GetLeft()))->ClearNodeAndAllDaughters();
359 if (this->GetRight() !=
NULL) ((
DecisionTreeNode*)(this->GetRight()))->ClearNodeAndAllDaughters();
367 SetNBValidation( 0.0 );
368 SetNSValidation( 0.0 );
372 if(GetLeft() !=
NULL && GetRight() !=
NULL) {
373 GetLeft()->ResetValidationData();
374 GetRight()->ResetValidationData();
382 os <<
"----------------------" << std::endl
383 <<
"|~T_t| " << GetNTerminal() << std::endl
384 <<
"R(t): " << GetNodeR() << std::endl
385 <<
"R(T_t): " << GetSubTreeR() << std::endl
386 <<
"g(t): " << GetAlpha() << std::endl
387 <<
"G(t): " << GetAlphaMinSubtree() << std::endl;
394 this->PrintPrune(os);
395 if(this->GetLeft() !=
NULL && this->GetRight() !=
NULL) {
406 if (fTrainInfo) fTrainInfo->fCC =
cc;
407 else Log() << kFATAL <<
"call to SetCC without trainingInfo" <<
Endl;
417 else Log() << kFATAL <<
"You asked for Min of the event sample in node for variable "
418 <<
ivar <<
" that is out of range" <<
Endl;
429 else Log() << kFATAL <<
"You asked for Max of the event sample in node for variable "
430 <<
ivar <<
" that is out of range" <<
Endl;
440 if (
ivar >= fTrainInfo->fSampleMin.size()) fTrainInfo->fSampleMin.resize(
ivar+1);
450 if( ! fTrainInfo )
return;
451 if (
ivar >= fTrainInfo->fSampleMax.size() )
452 fTrainInfo->fSampleMax.resize(
ivar+1);
463 if (
gTools().HasAttr(node,
"NCoef")){
465 this->SetNFisherCoeff(
nCoef);
467 for (
Int_t i=0; i< (
Int_t) this->GetNFisherCoeff(); i++) {
469 this->SetFisherCoeff(i,tmp);
472 this->SetNFisherCoeff(0);
480 if(
gTools().HasAttr(node,
"purity") ) {
498 for (
Int_t i=0; i< (
Int_t) this->GetNFisherCoeff(); i++)
520 if ((
Int_t) fFisherCoeff.size()<
ivar+1) fFisherCoeff.resize(
ivar+1) ;
554 fgTmva_Version_Code = code;
562 return fgTmva_Version_Code;
bool Bool_t
Boolean (0=false, 1=true) (bool)
int Int_t
Signed integer 4 bytes (int)
long Longptr_t
Integer large enough to hold a pointer (platform-dependent)
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int)
float Float_t
Float 4 bytes (float)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void on
void Print(GNN_Data &d, std::string txt="")
#define TMVA_VERSION(a, b, c)
void SetCC(Double_t cc)
Set CC, if traininfo defined, otherwise Log Fatal.
DTNodeTrainingInfo * fTrainInfo
virtual ~DecisionTreeNode()
destructor
void SetParent(Node *p) override
static void SetIsTraining(bool on)
void PrintPrune(std::ostream &os) const
printout of the node (can be read in with ReadDataRecord)
void PrintRecPrune(std::ostream &os) const
recursive printout of the node and its daughters
void SetFisherCoeff(Int_t ivar, Double_t coeff)
set fisher coefficients
Bool_t GoesLeft(const Event &) const override
test event if it descends the tree at this node to the left
static UInt_t fgTmva_Version_Code
set only when read from weightfile
void SetLeft(Node *l) override
void SetSampleMax(UInt_t ivar, Float_t xmax)
set the maximum of variable ivar from the training sample that pass/end up in this node,...
void ClearNodeAndAllDaughters()
clear the nodes (their S/N, Nevents etc), just keep the structure of the tree
static void SetTmvaVersionCode(UInt_t code)
void SetPurity(void)
return the S/(S+B) (purity) for the node REM: even if nodes with purity 0.01 are very PURE background...
void ReadAttributes(void *node, UInt_t tmva_Version_Code=262657) override
void AddContentToNode(std::stringstream &s) const override
adding attributes to tree node (well, was used in BinarySearchTree, and somehow I guess someone progr...
void AddAttributesToNode(void *node) const override
add attribute to xml
DecisionTreeNode()
constructor of an essentially "empty" node floating in space
void Print(std::ostream &os) const override
print the node
static UInt_t GetTmvaVersionCode()
void ReadContent(std::stringstream &s) override
reading attributes from tree node (well, was used in BinarySearchTree, and somehow I guess someone pr...
Bool_t GoesRight(const Event &) const override
test event if it descends the tree at this node to the right
void ResetValidationData()
temporary stored node values (number of events, etc.) that originate not from the training but from t...
void SetRight(Node *r) override
Bool_t ReadDataRecord(std::istream &is, UInt_t tmva_Version_Code=262657) override
Read the data block.
static bool fgIsTraining
static variable to flag training phase in which we need fTrainInfo
void PrintRec(std::ostream &os) const override
recursively print the node and its daughters (--> print the 'tree')
Float_t GetSampleMax(UInt_t ivar) const
return the maximum of variable ivar from the training sample that pass/end up in this node,...
Float_t GetSampleMin(UInt_t ivar) const
return the minimum of variable ivar from the training sample that pass/end up in this node,...
void SetSampleMin(UInt_t ivar, Float_t xmin)
set the minimum of variable ivar from the training sample that pass/end up in this node,...
ostringstream derivative to redirect and format output
Node for the BinarySearch or Decision Trees.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
create variable transformations
MsgLogger & Endl(MsgLogger &ml)