Logo ROOT   6.18/05
Reference Guide
paracoor.cxx
Go to the documentation of this file.
1#include "TMVA/paracoor.h"
2
3#include "TROOT.h"
4#include "TTree.h"
5#include "TLeaf.h"
6#include "TParallelCoord.h"
7#include "TParallelCoordVar.h"
9
10#include <vector>
11using std::vector;
12
13
14// plot parallel coordinates
15
16void TMVA::paracoor(TString dataset, TString fin , Bool_t useTMVAStyle )
17{
18 // set style and remove existing canvas'
19 TMVAGlob::Initialize( useTMVAStyle );
20
21 // checks if file with name "fin" is already open, and if not opens one
22 TFile* file = TMVAGlob::OpenFile( fin );
23 TTree* tree = (TTree*)file->GetDirectory(dataset.Data())->Get("TestTree");
24 if(!tree) {
25 cout << "--- No TestTree saved in ROOT file. Parallel coordinates will not be plotted" << endl;
26 return;
27 }
28
29 // first get list of leaves in tree
30 TObjArray* leafList = tree->GetListOfLeaves();
31 vector<TString> vars;
32 vector<TString> mvas;
33 for (Int_t iar=0; iar<leafList->GetSize(); iar++) {
34 TLeaf* leaf = (TLeaf*)leafList->At(iar);
35 if (leaf != 0) {
36 TString leafName = leaf->GetName();
37 if (leafName != "type" && leafName != "weight" && leafName != "boostweight" &&
38 leafName != "class" && leafName != "className" && leafName != "classID" &&
39 !leafName.Contains("prob_")) {
40 // is MVA ?
41 if (TMVAGlob::ExistMethodName( leafName,file->GetDirectory(dataset.Data()) )) {
42 mvas.push_back( leafName );
43 }
44 else {
45 vars.push_back( leafName );
46 }
47 }
48 }
49 }
50
51 cout << "--- Found: " << vars.size() << " variables" << endl;
52 cout << "--- Found: " << mvas.size() << " MVA(s)" << endl;
53
54
55 TString type[2] = { "Signal", "Background" };
56 for (UInt_t imva=0; imva<mvas.size(); imva++) {
57 cout << "--- Plotting parallel coordinates for : " << mvas[imva] << " & input variables" << endl;
58
59 for (Int_t itype=0; itype<2; itype++) {
60
61 // create draw option
62 TString varstr = mvas[imva] + ":";
63 for (UInt_t ivar=0; ivar<vars.size(); ivar++) varstr += vars[ivar] + ":";
64 varstr.Resize( varstr.Last( ':' ) );
65
66 // create canvas
67 TString mvashort = mvas[imva]; mvashort.ReplaceAll("MVA_","");
68 auto c1 = new TCanvas( Form( "c1_%i_%s",itype,mvashort.Data() ),
69 Form( "Parallel coordinate representation for %s and input variables (%s events)",
70 mvashort.Data(), type[itype].Data() ),
71 50*(itype), 50*(itype), 750, 500 );
72 tree->Draw( varstr.Data(), Form("classID==%i",1-itype) , "para" );
73 c1->ToggleEditor();
75
76 TParallelCoord* para = (TParallelCoord*)gPad->GetListOfPrimitives()->FindObject( "ParaCoord" );
77 TParallelCoordVar* mvavar = (TParallelCoordVar*)para->GetVarList()->FindObject( mvas[imva] );
78 Double_t minrange = tree->GetMinimum( mvavar->GetName() );
79 Double_t maxrange = tree->GetMaximum( mvavar->GetName() );
80 Double_t width = 0.2*(maxrange - minrange);
81 Double_t x1 = minrange, x2 = x1 + width;
82 TParallelCoordRange* parrange = new TParallelCoordRange( mvavar, x1, x2 );
83 parrange->SetLineColor(4);
84 mvavar->AddRange( parrange );
85
86 para->AddSelection("-1");
87
88 for (Int_t ivar=1; ivar<TMath::Min(Int_t(vars.size()) + 1,3); ivar++) {
89 TParallelCoordVar* var = (TParallelCoordVar*)para->GetVarList()->FindObject( vars[ivar] );
90 minrange = tree->GetMinimum( var->GetName() );
91 maxrange = tree->GetMaximum( var->GetName() );
92 width = 0.2*(maxrange - minrange);
93
94 switch (ivar) {
95 case 0: { x1 = minrange; x2 = x1 + width; break; }
96 case 1: { x1 = 0.5*(maxrange + minrange - width)*0.02; x2 = x1 + width*0.02; break; }
97 case 2: { x1 = maxrange - width; x2 = x1 + width; break; }
98 }
99
100 parrange = new TParallelCoordRange( var, x1, x2 );
101 parrange->SetLineColor( ivar == 0 ? 2 : ivar == 1 ? 5 : 6 );
102 var->AddRange( parrange );
103
104 para->AddSelection( Form("%i",ivar) );
105 }
106
107 c1->Update();
108
109 TString fname = Form( "%s/plots/paracoor_c%i_%s",dataset.Data(), imva, itype == 0 ? "S" : "B" );
110 TMVAGlob::imgconv( c1, fname );
111 }
112 }
113}
114
static const double x2[5]
static const double x1[5]
int Int_t
Definition: RtypesCore.h:41
unsigned int UInt_t
Definition: RtypesCore.h:42
bool Bool_t
Definition: RtypesCore.h:59
double Double_t
Definition: RtypesCore.h:55
include TDocParser_001 C image html pict1_TDocParser_001 png width
Definition: TDocParser.cxx:121
int type
Definition: TGX11.cxx:120
char * Form(const char *fmt,...)
R__EXTERN TStyle * gStyle
Definition: TStyle.h:406
#define gPad
Definition: TVirtualPad.h:286
The Canvas class.
Definition: TCanvas.h:31
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
Definition: TCollection.h:182
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Definition: TFile.h:48
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
Definition: TLeaf.h:49
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
Definition: TList.cxx:575
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:47
An array of TObjects.
Definition: TObjArray.h:37
TObject * At(Int_t idx) const
Definition: TObjArray.h:166
A TParallelCoordRange is a range used for parallel coordinates plots.
virtual void SetLineColor(Color_t col)
Set the selection line color.
TParallelCoord axes.
void AddRange(TParallelCoordRange *range)
Add a range to the current selection on the axis.
Parallel Coordinates class.
void AddSelection(const char *title)
Add a selection.
TList * GetVarList()
Basic string class.
Definition: TString.h:131
const char * Data() const
Definition: TString.h:364
TString & ReplaceAll(const TString &s1, const TString &s2)
Definition: TString.h:687
void Resize(Ssiz_t n)
Resize the string. Truncate or add blanks as necessary.
Definition: TString.cxx:1095
Ssiz_t Last(char c) const
Find last occurrence of a character c.
Definition: TString.cxx:892
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Definition: TString.h:619
void SetOptTitle(Int_t tit=1)
Definition: TStyle.h:312
A TTree represents a columnar dataset.
Definition: TTree.h:71
return c1
Definition: legend1.C:41
void Initialize(Bool_t useTMVAStyle=kTRUE)
Definition: tmvaglob.cxx:176
Bool_t ExistMethodName(TString name, TDirectory *dir=0)
Definition: tmvaglob.cxx:541
TFile * OpenFile(const TString &fin)
Definition: tmvaglob.cxx:192
void imgconv(TCanvas *c, const TString &fname)
Definition: tmvaglob.cxx:212
void paracoor(TString dataset, TString fin="TMVA.root", Bool_t useTMVAStyle=kTRUE)
void mvas(TString dataset, TString fin="TMVA.root", HistType htype=kMVAType, Bool_t useTMVAStyle=kTRUE)
Short_t Min(Short_t a, Short_t b)
Definition: TMathBase.h:180
Definition: file.py:1
Definition: tree.py:1