Logo ROOT   6.07/09
Reference Guide
BDT.cxx
Go to the documentation of this file.
1 #include "TMVA/BDT.h"
2 #include <iostream>
3 #include <iomanip>
4 #include <fstream>
5 
6 
7 
8 #include "RQ_OBJECT.h"
9 
10 #include "TROOT.h"
11 #include "TStyle.h"
12 #include "TPad.h"
13 #include "TCanvas.h"
14 #include "TLine.h"
15 #include "TFile.h"
16 #include "TColor.h"
17 #include "TPaveText.h"
18 #include "TObjString.h"
19 #include "TControlBar.h"
20 
21 #include "TGWindow.h"
22 #include "TGButton.h"
23 #include "TGLabel.h"
24 #include "TGNumberEntry.h"
25 
26 #include "TMVA/DecisionTree.h"
27 #include "TMVA/Tools.h"
28 #include "TXMLEngine.h"
29 
30 
31 
33 
35 {
37 }
38 
40 {
42 }
43 
45 {
46  delete this;
47 }
48 
49 TMVA::StatDialogBDT::StatDialogBDT(TString dataset, const TGWindow* p, TString wfile, TString methName, Int_t itree )
50  : fMain( 0 ),
51  fItree(itree),
52  fNtrees(0),
53  fCanvas(0),
54  fInput(0),
55  fButtons(0),
56  fDrawButton(0),
57  fCloseButton(0),
58  fWfile( wfile ),
59  fMethName( methName ),
60  fDataset(dataset)
61 {
62  UInt_t totalWidth = 500;
63  UInt_t totalHeight = 200;
64 
65  fThis = this;
66 
68 
69  // read number of decision trees from weight file
70  GetNtrees();
71 
72  // main frame
73  fMain = new TGMainFrame(p, totalWidth, totalHeight, kMainFrame | kVerticalFrame);
74 
75  TGLabel *sigLab = new TGLabel( fMain, Form( "Decision tree [%i-%i]",0,fNtrees-1 ) );
76  fMain->AddFrame(sigLab, new TGLayoutHints(kLHintsLeft | kLHintsTop,5,5,5,5));
77 
80  fInput->Resize(100,24);
82 
83  fButtons = new TGHorizontalFrame(fMain, totalWidth,30);
84 
85  fCloseButton = new TGTextButton(fButtons,"&Close");
87 
88  fDrawButton = new TGTextButton(fButtons,"&Draw");
90 
92 
93  fMain->SetWindowName("Decision tree");
94  fMain->SetWMPosition(0,0);
97  fMain->MapWindow();
98 
99  fInput->Connect("ValueSet(Long_t)","TMVA::StatDialogBDT",this, "SetItree()");
100 
101  // doesn't seem to exist .. gives an 'error message' and seems to work just fine without ... :)
102  // fDrawButton->Connect("ValueSet(Long_t)","TGNumberEntry",fInput, "Clicked()");
103  fDrawButton->Connect("Clicked()", "TMVA::StatDialogBDT", this, "Redraw()");
104 
105  fCloseButton->Connect("Clicked()", "TMVA::StatDialogBDT", this, "Close()");
106 }
107 
109 {
110  DrawTree(fItree );
111 }
112 
114 {
115  if(!fWfile.EndsWith(".xml") ){
116  std::ifstream fin( fWfile );
117  if (!fin.good( )) { // file not found --> Error
118  cout << "*** ERROR: Weight file: " << fWfile << " does not exist" << endl;
119  return;
120  }
121 
122  TString dummy = "";
123 
124  // read total number of trees, and check whether requested tree is in range
125  Int_t nc = 0;
126  while (!dummy.Contains("NTrees")) {
127  fin >> dummy;
128  nc++;
129  if (nc > 200) {
130  cout << endl;
131  cout << "*** Huge problem: could not locate term \"NTrees\" in BDT weight file: "
132  << fWfile << endl;
133  cout << "==> panic abort (please contact the TMVA authors)" << endl;
134  cout << endl;
135  exit(1);
136  }
137  }
138  fin >> dummy;
139  fNtrees = dummy.ReplaceAll("\"","").Atoi();
140  fin.close();
141  }
142  else{
143  void* doc = TMVA::gTools().xmlengine().ParseFile(fWfile);
144  void* rootnode = TMVA::gTools().xmlengine().DocGetRootElement(doc);
145  void* ch = TMVA::gTools().xmlengine().GetChild(rootnode);
146  while(ch){
147  TString nodeName = TString( TMVA::gTools().xmlengine().GetNodeName(ch) );
148  if(nodeName=="Weights") {
149  TMVA::gTools().ReadAttr( ch, "NTrees", fNtrees );
150  break;
151  }
152  ch = TMVA::gTools().xmlengine().GetNext(ch);
153  }
154  }
155  cout << "--- Found " << fNtrees << " decision trees in weight file" << endl;
156 
157 }
158 
159 ////////////////////////////////////////////////////////////////////////////////
160 /// recursively puts an entries in the histogram for the node and its daughters
161 ///
162 
164  Double_t x, Double_t y,
165  Double_t xscale, Double_t yscale, TString * vars)
166 {
167  Float_t xsize=xscale*1.5;
168  Float_t ysize=yscale/3;
169  if (xsize>0.15) xsize=0.1; //xscale/2;
170  if (n->GetLeft() != NULL){
171  TLine *a1 = new TLine(x-xscale/4,y-ysize,x-xscale,y-ysize*2);
172  a1->SetLineWidth(2);
173  a1->Draw();
174  DrawNode((TMVA::DecisionTreeNode*) n->GetLeft(), x-xscale, y-yscale, xscale/2, yscale, vars);
175  }
176  if (n->GetRight() != NULL){
177  TLine *a1 = new TLine(x+xscale/4,y-ysize,x+xscale,y-ysize*2);
178  a1->SetLineWidth(2);
179  a1->Draw();
180  DrawNode((TMVA::DecisionTreeNode*) n->GetRight(), x+xscale, y-yscale, xscale/2, yscale, vars );
181  }
182 
183  // TPaveText *t = new TPaveText(x-xscale/2,y-yscale/2,x+xscale/2,y+yscale/2, "NDC");
184  TPaveText *t = new TPaveText(x-xsize,y-ysize,x+xsize,y+ysize, "NDC");
185 
186  t->SetBorderSize(1);
187 
188  t->SetFillStyle(1001);
189 
190 
191  Double_t pur=n->GetPurity();
192  t->SetFillColor(fColorOffset+Int_t(pur*100));
193 
194  char buffer[25];
195  sprintf( buffer, "N=%f", n->GetNEvents() );
196  if (n->GetNEvents()>0) t->AddText(buffer);
197  sprintf( buffer, "S/(S+B)=%4.3f", n->GetPurity() );
198  t->AddText(buffer);
199 
200  if (n->GetNodeType() == 0){
201  if (n->GetCutType()){
202  t->AddText(TString(vars[n->GetSelector()]+">"+=::Form("%5.3g",n->GetCutValue())));
203  }else{
204  t->AddText(TString(vars[n->GetSelector()]+"<"+=::Form("%5.3g",n->GetCutValue())));
205  }
206  }
207 
208  t->Draw();
209 
210  return;
211 }
213 {
214  cout << "--- Reading Tree " << itree << " from weight file: " << fWfile << endl;
216  if(!fWfile.EndsWith(".xml") ){
217  std::ifstream fin( fWfile );
218  if (!fin.good( )) { // file not found --> Error
219  cout << "*** ERROR: Weight file: " << fWfile << " does not exist" << endl;
220  return 0;
221  }
222 
223  TString dummy = "";
224 
225  if (itree >= fNtrees) {
226  cout << "*** ERROR: requested decision tree: " << itree
227  << ", but number of trained trees only: " << fNtrees << endl;
228  return 0;
229  }
230 
231  // file header with name
232  while (!dummy.Contains("#VAR")) fin >> dummy;
233  fin >> dummy >> dummy >> dummy; // the rest of header line
234 
235  // number of variables
236  Int_t nVars;
237  fin >> dummy >> nVars;
238 
239  // variable mins and maxes
240  vars = new TString[nVars+1]; // last one is if "fisher cut criterium"
241  for (Int_t i = 0; i < nVars; i++) fin >> vars[i] >> dummy >> dummy >> dummy >> dummy;
242  vars[nVars]="FisherCrit";
243 
244  char buffer[20];
245  char line[256];
246  sprintf(buffer,"Tree %d",itree);
247 
248  while (!dummy.Contains(buffer)) {
249  fin.getline(line,256);
250  dummy = TString(line);
251  }
252 
253  d->Read(fin);
254 
255  fin.close();
256  }
257  else{
258  if (itree >= fNtrees) {
259  cout << "*** ERROR: requested decision tree: " << itree
260  << ", but number of trained trees only: " << fNtrees << endl;
261  return 0;
262  }
263  Int_t nVars;
264  void* doc = TMVA::gTools().xmlengine().ParseFile(fWfile);
265  void* rootnode = TMVA::gTools().xmlengine().DocGetRootElement(doc);
266  void* ch = TMVA::gTools().xmlengine().GetChild(rootnode);
267  while(ch){
268  TString nodeName = TString( TMVA::gTools().xmlengine().GetNodeName(ch) );
269  if(nodeName=="Variables"){
270  TMVA::gTools().ReadAttr( ch, "NVar", nVars);
271  vars = new TString[nVars+1];
272  void* varnode = TMVA::gTools().xmlengine().GetChild(ch);
273  for (Int_t i = 0; i < nVars; i++){
274  TMVA::gTools().ReadAttr( varnode, "Expression", vars[i]);
275  varnode = TMVA::gTools().xmlengine().GetNext(varnode);
276  }
277  vars[nVars]="FisherCrit";
278  }
279  if(nodeName=="Weights") break;
280  ch = TMVA::gTools().xmlengine().GetNext(ch);
281  }
282  ch = TMVA::gTools().xmlengine().GetChild(ch);
283  for (int i=0; i<itree; i++) ch = TMVA::gTools().xmlengine().GetNext(ch);
284  d->ReadXML(ch);
285  }
286  return d;
287 }
288 
289 ////////////////////////////////////////////////////////////////////////////////
290 
292 {
293  TString *vars;
294  TMVA::DecisionTree* d = ReadTree( vars, itree );
295  if (d == 0) return;
296 
297  UInt_t depth = d->GetTotalTreeDepth();
298  Double_t ystep = 1.0/(depth + 1.0);
299 
300  cout << "--- Tree depth: " << depth << endl;
301 
302  TStyle* TMVAStyle = gROOT->GetStyle("Plain"); // our style is based on Plain
303 
304 
305 
306  Double_t r[2] = {1., 0.};
307  Double_t g[2] = {0., 0.};
308  Double_t b[2] = {0., 1.};
309  Double_t stop[2] = {0., 1.0};
310  fColorOffset = TColor::CreateGradientColorTable(2, stop, r, g, b, 100);
311 
312  Int_t MyPalette[100];
313  for (int i=0;i<100;i++) MyPalette[i] = fColorOffset+i;
314  TMVAStyle->SetPalette(100, MyPalette);
315 
316 
317 
318  Int_t canvasColor = TMVAStyle->GetCanvasColor(); // backup
319 
320  TString cbuffer = Form( "Reading weight file: %s", fWfile.Data() );
321  TString tbuffer = Form( "Decision Tree no.: %d", itree );
322  if (!fCanvas) fCanvas = new TCanvas( "c1", cbuffer, 200, 0, 1000, 600 );
323  else fCanvas->Clear();
324  fCanvas->Draw();
325 
326  DrawNode( (TMVA::DecisionTreeNode*)d->GetRoot(), 0.5, 1.-0.5*ystep, 0.25, ystep ,vars);
327 
328  // make the legend
329  Double_t yup=0.99;
330  Double_t ydown=yup-ystep/2.5;
331  Double_t dy= ystep/2.5 * 0.2;
332 
333  TPaveText *whichTree = new TPaveText(0.85,ydown,0.98,yup, "NDC");
334  whichTree->SetBorderSize(1);
335  whichTree->SetFillStyle(1001);
336  whichTree->SetFillColor( TColor::GetColor( "#ffff33" ) );
337  whichTree->AddText( tbuffer );
338  whichTree->Draw();
339 
340  TPaveText *signalleaf = new TPaveText(0.02,ydown ,0.15,yup, "NDC");
341  signalleaf->SetBorderSize(1);
342  signalleaf->SetFillStyle(1001);
343  signalleaf->SetFillColor( getSigColorF() );
344  signalleaf->AddText("Pure Signal Nodes");
345  signalleaf->SetTextColor( getSigColorT() );
346  signalleaf->Draw();
347 
348  ydown = ydown - ystep/2.5 -dy;
349  yup = yup - ystep/2.5 -dy;
350  TPaveText *backgroundleaf = new TPaveText(0.02,ydown,0.15,yup, "NDC");
351  backgroundleaf->SetBorderSize(1);
352  backgroundleaf->SetFillStyle(1001);
353  backgroundleaf->SetFillColor( getBkgColorF() );
354 
355  backgroundleaf->AddText("Pure Backgr. Nodes");
356  backgroundleaf->SetTextColor( getBkgColorT() );
357  backgroundleaf->Draw();
358 
359 
360  fCanvas->Update();
361  TString fname = fDataset+Form("/plots/%s_%i", fMethName.Data(), itree );
362  cout << "--- Creating image: " << fname << endl;
363  TMVAGlob::imgconv( fCanvas, fname );
364 
365  TMVAStyle->SetCanvasColor( canvasColor );
366 }
367 
368 // ========================================================================================
369 
370 
371 // intermediate GUI
372 void TMVA::BDT(TString dataset, const TString& fin )
373 {
374  // --- read the available BDT weight files
375 
376  // destroy all open cavases
378 
379  // checks if file with name "fin" is already open, and if not opens one
380  TFile* file = TMVAGlob::OpenFile( fin );
381 
382  TDirectory* dir = file->GetDirectory(dataset.Data())->GetDirectory( "Method_BDT" );
383  if (!dir) {
384  cout << "*** Error in macro \"BDT.C\": cannot find directory \"Method_BDT\" in file: " << fin << endl;
385  return;
386  }
387 
388  // read all directories
389  TIter next( dir->GetListOfKeys() );
390  TKey *key(0);
391  std::vector<TString> methname;
392  std::vector<TString> path;
393  std::vector<TString> wfile;
394  while ((key = (TKey*)next())) {
395  TDirectory* mdir = dir->GetDirectory( key->GetName() );
396  if (!mdir) {
397  cout << "*** Error in macro \"BDT.C\": cannot find sub-directory: " << key->GetName()
398  << " in directory: " << dir->GetName() << endl;
399  return;
400  }
401 
402  // retrieve weight file name and path
403  TObjString* strPath = (TObjString*)mdir->Get( "TrainingPath" );
404  TObjString* strWFile = (TObjString*)mdir->Get( "WeightFileName" );
405  if (!strPath || !strWFile) {
406  cout << "*** Error in macro \"BDT.C\": could not find TObjStrings \"TrainingPath\" and/or \"WeightFileName\" *** " << endl;
407  cout << "*** Maybe you are using TMVA >= 3.8.15 with an older training target file ? *** " << endl;
408  return;
409  }
410 
411  methname.push_back( key->GetName() );
412  path .push_back( strPath->GetString() );
413  wfile .push_back( strWFile->GetString() );
414  }
415 
416  // create the control bar
417  TControlBar* cbar = new TControlBar( "vertical", "Choose weight file:", 50, 50 );
418  BDT_Global__cbar.push_back(cbar);
419 
420  for (UInt_t im=0; im<path.size(); im++) {
421  TString fname = path[im];
422  if (fname[fname.Length()-1] != '/') fname += "/";
423  fname += wfile[im];
424  TString macro = Form( "TMVA::BDT(\"%s\",0,\"%s\",\"%s\")",dataset.Data(), fname.Data(), methname[im].Data() );
425  cbar->AddButton( fname, macro, "Plot decision trees from this weight file", "button" );
426  }
427 
428  // *** problems with this button in ROOT 5.19 ***
429 #if ROOT_VERSION_CODE < ROOT_VERSION(5,19,0)
430  cbar->AddButton( "Close", Form("BDT_DeleteTBar(%i)", BDT_Global__cbar.size()-1), "Close this control bar", "button" );
431 #endif
432  // **********************************************
433 
434  // set the style
435  cbar->SetTextColor("blue");
436 
437  // draw
438  cbar->Show();
439 }
440 
442 {
443  // destroy all open canvases
446 
447  delete BDT_Global__cbar[i];
448  BDT_Global__cbar[i] = 0;
449 }
450 
451 // input: - No. of tree
452 // - the weight file from which the tree is read
453 void TMVA::BDT(TString dataset, Int_t itree, TString wfile , TString methName , Bool_t useTMVAStyle )
454 {
455  // destroy possibly existing dialog windows and/or canvases
458  if(wfile=="")
459  wfile = dataset+"/weights/TMVAnalysis_test_BDT.weights.txt";
460  // quick check if weight file exist
461  if(!wfile.EndsWith(".xml") ){
462  std::ifstream fin( wfile );
463  if (!fin.good( )) { // file not found --> Error
464  cout << "*** ERROR: Weight file: " << wfile << " does not exist" << endl;
465  return;
466  }
467  }
468  std::cout << "test1";
469  // set style and remove existing canvas'
470  TMVAGlob::Initialize( useTMVAStyle );
471 
472  StatDialogBDT* gGui = new StatDialogBDT(dataset, gClient->GetRoot(), wfile, methName, itree );
473 
474  gGui->DrawTree(itree );
475 
476  gGui->RaiseDialog();
477 }
478 
void Show()
Show control bar.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
Definition: TAttLine.h:49
virtual void Resize(UInt_t w=0, UInt_t h=0)
Resize the frame.
Definition: TGFrame.cxx:587
void DrawTree(Int_t itree)
Definition: BDT.cxx:291
void AddButton(TControlBarButton *button)
Add button.
TGNumberEntry * fInput
Definition: BDT.h:81
TXMLEngine & xmlengine()
Definition: Tools.h:278
void imgconv(TCanvas *c, const TString &fname)
Definition: tmvaglob.cxx:212
A Control Bar is a fully user configurable tool which provides fast access to frequently used operati...
Definition: TControlBar.h:26
Int_t getSigColorT()
Definition: BDT.h:45
void SetTextColor(const char *colorName)
Sets text color for control bar buttons, e.g.
virtual void Draw(Option_t *option="")
Draw this pavetext with its current attributes.
Definition: TPaveText.cxx:211
TGMainFrame * fMain
Definition: BDT.h:75
virtual TList * GetListOfKeys() const
Definition: TDirectory.h:158
virtual TObject * Get(const char *namecycle)
Return pointer to object identified by namecycle.
Definition: TDirectory.cxx:729
Ssiz_t Length() const
Definition: TString.h:390
TLine * line
Collectable string class.
Definition: TObjString.h:32
float Float_t
Definition: RtypesCore.h:53
void BDT(TString dataset, const TString &fin="TMVA.root")
Definition: BDT.cxx:372
void SetWindowName(const char *name=0)
Set window name. This is typically done via the window manager.
Definition: TGFrame.cxx:1746
virtual void Read(std::istream &istr, UInt_t tmva_Version_Code=TMVA_VERSION_CODE)
Read the binary tree from an input stream.
Definition: BinaryTree.cxx:170
UInt_t GetTotalTreeDepth() const
Definition: BinaryTree.h:99
Int_t getBkgColorT()
Definition: BDT.h:46
TFile * OpenFile(const TString &fin)
Definition: tmvaglob.cxx:192
Int_t fItree
Definition: BDT.h:76
void GetNtrees()
Definition: BDT.cxx:113
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
Definition: TFile.h:50
virtual TText * AddText(Double_t x1, Double_t y1, const char *label)
Add a new Text line to this pavetext at given coordinates.
Definition: TPaveText.cxx:160
virtual DecisionTreeNode * GetRight() const
#define gROOT
Definition: TROOT.h:364
void Close()
Definition: BDT.cxx:44
XMLNodePointer_t GetNext(XMLNodePointer_t xmlnode, Bool_t realnode=kTRUE)
return next to xmlnode node if realnode==kTRUE, any special nodes in between will be skipped ...
Basic string class.
Definition: TString.h:137
#define gClient
Definition: TGClient.h:174
Int_t GetNodeType(void) const
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
Definition: TObject.cxx:255
virtual void SetLimits(ELimit limits=TGNumberFormat::kNELNoLimits, Double_t min=0, Double_t max=1)
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
Definition: TAttFill.h:44
virtual DecisionTreeNode * GetLeft() const
Int_t fColorOffset
Definition: BDT.h:98
Int_t fNtrees
Definition: BDT.h:77
virtual DecisionTreeNode * GetRoot() const
Definition: DecisionTree.h:102
void SetCanvasColor(Color_t color=19)
Definition: TStyle.h:334
TMVA::DecisionTree * ReadTree(TString *&vars, Int_t itree)
Definition: BDT.cxx:212
const char * Data() const
Definition: TString.h:349
Tools & gTools()
Definition: Tools.cxx:79
Double_t x[n]
Definition: legend1.C:17
static std::vector< TControlBar * > BDT_Global__cbar
Definition: BDT.h:117
StatDialogBDT(TString dataset, const TGWindow *p, TString wfile, TString methName="BDT", Int_t itree=0)
Definition: BDT.cxx:49
void RaiseDialog()
Definition: BDT.h:71
static void Delete()
Definition: BDT.h:103
Float_t GetPurity(void) const
TString fDataset
Definition: BDT.h:97
Bool_t GetCutType(void) const
void Clear(Option_t *option="")
Remove all primitives from the canvas.
Definition: TCanvas.cxx:678
Book space in a file, create I/O buffers, to fill them, (un)compress them.
Definition: TKey.h:30
TStyle objects may be created to define special styles.
Definition: TStyle.h:43
TGTextButton * fDrawButton
Definition: BDT.h:84
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Non-static method is used to connect from the signal of this object to the receiver slot...
Definition: TQObject.cxx:1137
TString GetString() const
Definition: TObjString.h:50
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
Definition: TString.cxx:2221
TRandom2 r(17)
void Initialize(Bool_t useTMVAStyle=kTRUE)
Definition: tmvaglob.cxx:176
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Definition: TAttFill.h:42
unsigned int UInt_t
Definition: RtypesCore.h:42
char * Form(const char *fmt,...)
A simple line.
Definition: TLine.h:33
Float_t GetNEvents(void) const
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb"...
Definition: TColor.cxx:1706
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:51
void ReadAttr(void *node, const char *, T &value)
Definition: Tools.h:296
virtual void ReadXML(void *node, UInt_t tmva_Version_Code=TMVA_VERSION_CODE)
read attributes from XML
Definition: BinaryTree.cxx:145
void Redraw()
Definition: BDT.cxx:39
virtual TDirectory * GetDirectory(const char *apath, Bool_t printError=false, const char *funcname="GetDirectory")
Find a directory named "apath".
TCanvas * fCanvas
Definition: BDT.h:78
The Canvas class.
Definition: TCanvas.h:41
XMLDocPointer_t ParseFile(const char *filename, Int_t maxbuf=100000)
Parses content of file and tries to produce xml structures.
A Pave (see TPave) with text, lines or/and boxes inside.
Definition: TPaveText.h:27
TGHorizontalFrame * fButtons
Definition: BDT.h:83
static StatDialogBDT * fThis
Definition: BDT.h:112
double Double_t
Definition: RtypesCore.h:55
Describe directory structure in memory.
Definition: TDirectory.h:44
static RooMathCoreReg dummy
Double_t y[n]
Definition: legend1.C:17
TGTextButton * fCloseButton
Definition: BDT.h:85
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add frame to the composite frame using the specified layout hints.
Definition: TGFrame.cxx:1099
TString fWfile
Definition: BDT.h:95
virtual void MapSubwindows()
Map all sub windows that are part of the composite frame.
Definition: TGFrame.cxx:1146
Short_t GetSelector() const
virtual void Draw(Option_t *option="")
Draw a canvas.
Definition: TCanvas.cxx:795
void SetWMPosition(Int_t x, Int_t y)
Give the window manager a window position hint.
Definition: TGFrame.cxx:1837
XMLNodePointer_t GetChild(XMLNodePointer_t xmlnode, Bool_t realnode=kTRUE)
returns first child of xml node
Definition: TXMLEngine.cxx:993
Definition: file.py:1
Int_t getBkgColorF()
Definition: BDT.h:41
virtual void MapWindow()
Definition: TGFrame.h:267
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Definition: TString.h:567
XMLNodePointer_t DocGetRootElement(XMLDocPointer_t xmldoc)
returns root node of document
virtual TDirectory * GetDirectory(const char *namecycle, Bool_t printError=false, const char *funcname="GetDirectory")
Find a directory using apath.
Definition: TDirectory.cxx:338
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
Definition: TRolke.cxx:630
void UpdateCanvases()
Definition: BDT.cxx:108
#define NULL
Definition: Rtypes.h:82
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
Definition: TAttText.h:49
virtual Double_t GetNumber() const
TString fMethName
Definition: BDT.h:96
virtual TGDimension GetDefaultSize() const
std::cout << fWidth << "x" << fHeight << std::endl;
Definition: TGFrame.h:391
virtual void Update()
Update canvas pad buffers.
Definition: TCanvas.cxx:2183
static Int_t CreateGradientColorTable(UInt_t Number, Double_t *Stops, Double_t *Red, Double_t *Green, Double_t *Blue, UInt_t NColors, Float_t alpha=1.)
Static function creating a color table with several connected linear gradients.
Definition: TColor.cxx:2128
void DestroyCanvases()
Definition: tmvaglob.cxx:166
const Int_t n
Definition: legend1.C:16
Color_t GetCanvasColor() const
Definition: TStyle.h:190
Int_t getSigColorF()
Definition: BDT.h:40
void SetPalette(Int_t ncolors=kBird, Int_t *colors=0, Float_t alpha=1.)
See TColor::SetPalette.
Definition: TStyle.cxx:1450
void DrawNode(TMVA::DecisionTreeNode *n, Double_t x, Double_t y, Double_t xscale, Double_t yscale, TString *vars)
recursively puts an entries in the histogram for the node and its daughters
Definition: BDT.cxx:163
void SetItree()
Definition: BDT.cxx:34
virtual void SetBorderSize(Int_t bordersize=4)
Definition: TPave.h:74
Float_t GetCutValue(void) const
void BDT_DeleteTBar(int i)
Definition: BDT.cxx:441