9 void TMVA::mvaweights( TString fin , Bool_t useTMVAStyle )
12 TMVAGlob::Initialize( useTMVAStyle );
15 TStyle *TMVAStyle = gROOT->GetStyle(
"Plain");
16 TMVAStyle->SetTitleW(0.94);
17 TMVAStyle->SetTitleH(.06);
19 TString varx =
"var3";
20 TString vary =
"var4";
23 const Bool_t Save_Images = kTRUE;
26 TFile* file = TMVAGlob::OpenFile( fin );
28 cout <<
"Cannot open flie: " << fin << endl;
33 const Int_t width = 500;
39 Int_t countCanvas = 0;
42 TTree *tree = (TTree*)file->Get(
"TestTree" );
45 TObjArray* branches = tree->GetListOfBranches();
46 for (Int_t imva=0; imva<branches->GetEntries(); imva++) {
47 TBranch* b = (TBranch*)(*branches)[imva];
48 TString methodS = b->GetName();
49 cout <<
"Use MVA output of Method " << methodS <<endl;
51 if (!methodS.BeginsWith(
"MVA_") || methodS.EndsWith(
"_Proba"))
continue;
52 if (methodS.Contains(
"Cuts") )
continue;
55 cout <<
"--- Found variable: \"" << methodS <<
"\"" << endl;
58 TString cname = Form(
"TMVA output %s",methodS.Data());
59 c =
new TCanvas( Form(
"canvas%d", countCanvas+1), cname,
60 countCanvas*50+200, countCanvas*20, width, width*1.0 );
64 Float_t xmin = tree->GetMinimum( varx );
65 Float_t xmax = tree->GetMaximum( varx );
66 Float_t ymin = tree->GetMinimum( vary );
67 Float_t ymax = tree->GetMaximum( vary );
70 TH2F* frame =
new TH2F(
"frame",
"frame", nbin, xmin, xmax, nbin, ymin, ymax );
71 TH2F* frameS =
new TH2F(
"DataS",
"DataS", nbin, xmin, xmax, nbin, ymin, ymax );
72 TH2F* frameB =
new TH2F(
"DataB",
"DataB", nbin, xmin, xmax, nbin, ymin, ymax );
73 TH2F* frameRS =
new TH2F(
"DataRS",
"DataRS", nbin, xmin, xmax, nbin, ymin, ymax );
74 TH2F* frameRB =
new TH2F(
"DataRB",
"DataRB", nbin, xmin, xmax, nbin, ymin, ymax );
77 TH2F* refS =
new TH2F(
"RefS",
"RefS", nbinC, xmin, xmax, nbinC, ymin, ymax );
78 TH2F* refB =
new TH2F(
"RefB",
"RefB", nbinC, xmin, xmax, nbinC, ymin, ymax );
80 Float_t mvaMin = tree->GetMinimum( Form(
"MVA_%s", methodS.Data() ) );
81 Float_t mvaMax = tree->GetMaximum( Form(
"MVA_%s", methodS.Data() ) );
84 TString expr = Form(
"((MVA_%s-(%f))/(%f-(%f)))", methodS.Data(), mvaMin, mvaMax, mvaMin );
85 cout <<
"Expression = " << expr << endl;
86 tree->Project(
"DataS", Form(
"%s:%s", vary.Data(), varx.Data() ),
87 Form(
"%s*(type==1)", expr.Data() ) );
88 tree->Project(
"DataB", Form(
"%s:%s", vary.Data(), varx.Data() ),
89 Form(
"%s*(type==0)", expr.Data() ) );
90 tree->Project(
"DataRS", Form(
"%s:%s", vary.Data(), varx.Data() ),
92 tree->Project(
"DataRB", Form(
"%s:%s", vary.Data(), varx.Data() ),
94 tree->Project(
"RefS", Form(
"%s:%s", vary.Data(), varx.Data() ),
95 "type==1",
"", 500000 );
96 tree->Project(
"RefB", Form(
"%s:%s", vary.Data(), varx.Data() ),
97 "type==0",
"", 500000, 10000 );
99 Float_t zminS = frameS->GetMinimum();
100 Float_t zmaxS = frameS->GetMaximum();
101 Float_t zminB = frameB->GetMinimum();
102 Float_t zmaxB = frameB->GetMaximum();
104 for (Int_t i=1; i<=nbin; i++) {
105 for (Int_t j=1; j<=nbin; j++) {
107 Float_t z = frameS->GetBinContent( i, j );
108 z = (z - zminS)/(zmaxS - zminS);
109 Float_t zr = frameRS->GetBinContent( i, j );
112 frameS->SetBinContent( i, j, z );
115 z = frameB->GetBinContent( i, j );
116 z = (z - zminB)/(zmaxB - zminB);
118 zr = frameRB->GetBinContent( i, j );
121 frameB->SetBinContent( i, j, z );
124 zminS = frameS->GetMinimum();
125 zmaxS = frameS->GetMaximum();
126 zminB = frameB->GetMinimum();
127 zmaxB = frameB->GetMaximum();
129 for (Int_t i=1; i<=nbin; i++) {
130 for (Int_t j=1; j<=nbin; j++) {
132 Float_t z = frameS->GetBinContent( i, j );
133 z = 1*(z - zminS)/(zmaxS - zminS) - 0;
134 frameS->SetBinContent( i, j, z );
137 z = frameB->GetBinContent( i, j );
138 z = 1*(z - zminB)/(zmaxB - zminB) - 0;
139 frameB->SetBinContent( i, j, z );
142 frame ->SetMinimum( -1.0 );
143 frame ->SetMaximum( +1.0 );
144 frameS->SetMinimum( -1.0 );
145 frameS->SetMaximum( +1.0 );
146 frameB->SetMinimum( -1.0 );
147 frameB->SetMaximum( +1.0 );
150 frame->SetTitle( Form(
"Signal and background distributions weighted by %s output",
152 frame->SetTitleSize( 0.08 );
153 frame->GetXaxis()->SetTitle( varx );
154 frame->GetYaxis()->SetTitle( vary );
157 frame->SetLabelSize( 0.04,
"X" );
158 frame->SetLabelSize( 0.04,
"Y" );
159 frame->SetTitleSize( 0.05,
"X" );
160 frame->SetTitleSize( 0.05,
"Y" );
161 frame->GetYaxis()->SetTitleOffset( 1.05);
162 frame->GetYaxis()->SetTitleOffset( 1.30 );
165 const Int_t nlevels = 3;
166 Double_t levelsS[nlevels];
167 Double_t levelsB[nlevels];
174 frameS->SetContour( nlevels, levelsS );
175 frameB->SetContour( nlevels, levelsB );
177 frameS->SetLineColor( 104 );
178 frameS->SetFillColor( 104 );
179 frameS->SetLineWidth( 3 );
180 frameB->SetLineColor( 102 );
181 frameB->SetFillColor( 102 );
182 frameB->SetLineWidth( 3 );
185 refS->SetMarkerSize( 0.2 );
186 refS->SetMarkerColor( 104 );
188 refB->SetMarkerSize( 0.2 );
189 refB->SetMarkerColor( 102 );
191 const Int_t nlevelsR = 1;
192 Double_t levelsRS[nlevelsR];
193 Double_t levelsRB[nlevelsR];
194 levelsRS[0] = refS->GetMaximum()*0.3;
196 levelsRB[0] = refB->GetMaximum()*0.3;
198 refS->SetContour( nlevelsR, levelsRS );
199 refB->SetContour( nlevelsR, levelsRB );
201 refS->SetLineColor( 104 );
202 refS->SetFillColor( 104 );
203 refS->SetLineWidth( 3 );
204 refB->SetLineColor( 102 );
205 refB->SetFillColor( 102 );
206 refB->SetLineWidth( 3 );
212 frameS->Draw(
"contsame" );
213 refS->Draw(
"cont3same" );
214 refB->Draw(
"cont3same" );
220 TMVAGlob::imgconv( c, Form(
"plots/mvaweights_%s", methodS.Data()) );