Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
likelihoodrefs.cxx
Go to the documentation of this file.
2#include <vector>
3#include <string>
4
5
6
7// this macro plots the reference distribuions for the Likelihood
8// methods for the various input variables used in TMVA (e.g. running
9// TMVAnalysis.C). Signal and Background are plotted separately
10
11// input: - Input file (result from TMVA),
12// - use of TMVA plotting TStyle
13
14
15void TMVA::likelihoodrefs(TString dataset, TDirectory *lhdir ) {
16 Bool_t newCanvas = kTRUE;
17
18 const UInt_t maxCanvas = 200;
19 TCanvas** c = new TCanvas*[maxCanvas];
20 Int_t width = 670;
21 Int_t height = 380;
22
23 // avoid duplicated printing
24 std::vector<std::string> hasBeenUsed;
25 const TString titName = lhdir->GetName();
26 UInt_t ic = -1;
27
28 TIter next(lhdir->GetListOfKeys());
29 TKey *key;
30 while ((key = TMVAGlob::NextKey(next,"TH1"))) { // loop over all TH1
31 TH1 *h = (TH1*)key->ReadObj();
32 TH1F *b( 0 );
33 TString hname( h->GetName() );
34
35 // avoid duplicated plotting
36 Bool_t found = kFALSE;
37 for (UInt_t j = 0; j < hasBeenUsed.size(); j++) {
38 if (hasBeenUsed[j] == hname.Data()) found = kTRUE;
39 }
40 if (!found) {
41
42 // draw original plots
43 if (hname.EndsWith("_sig_nice")) {
44
45 if (newCanvas) {
46 char cn[20];
47 snprintf( cn, 20, "cv%d_%s", ic+1, titName.Data() );
48 ++ic;
49 TString n = hname;
50 c[ic] = new TCanvas( cn, TString::Format( "%s reference for variable: %s",
51 titName.Data(),(n.ReplaceAll("_sig","")).Data() ),
52 ic*50+50, ic*20, width, height );
53 c[ic]->Divide(2,1);
54 newCanvas = kFALSE;
55 }
56
57 // signal
58 Int_t color = 4;
59 TPad * cPad = (TPad*)c[ic]->cd(1);
60 TString plotname = hname;
61
62 h->SetMaximum(h->GetMaximum()*1.3);
63 h->SetMinimum( 0 );
64 h->SetMarkerColor(color);
65 h->SetMarkerSize( 0.7 );
66 h->SetMarkerStyle( 24 );
67 h->SetLineWidth(1);
68 h->SetLineColor(color);
69 color++;
70 h->Draw("e1");
71 Double_t hSscale = 1.0/(h->GetSumOfWeights()*h->GetBinWidth(1));
72
73 TLegend *legS= new TLegend( cPad->GetLeftMargin(),
74 1-cPad->GetTopMargin()-.14,
75 cPad->GetLeftMargin()+.77,
76 1-cPad->GetTopMargin() );
77 legS->SetBorderSize(1);
78 legS->AddEntry(h,"Input data (signal)","p");
79
80 // background
81 TString bname( hname );
82 b = (TH1F*)lhdir->Get( bname.ReplaceAll("_sig","_bgd") );
83 cPad = (TPad*)c[ic]->cd(2);
84 color = 2;
85 b->SetMaximum(b->GetMaximum()*1.3);
86 b->SetMinimum( 0 );
87 b->SetLineWidth(1);
88 b->SetLineColor(color);
89 b->SetMarkerColor(color);
90 b->SetMarkerSize( 0.7 );
91 b->SetMarkerStyle( 24 );
92 b->Draw("e1");
93 Double_t hBscale = 1.0/(b->GetSumOfWeights()*b->GetBinWidth(1));
94 TLegend *legB= new TLegend( cPad->GetLeftMargin(),
95 1-cPad->GetTopMargin()-.14,
96 cPad->GetLeftMargin()+.77,
97 1-cPad->GetTopMargin() );
98 legB->SetBorderSize(1);
99 legB->AddEntry(b,"Input data (backgr.)","p");
100
101 // register
102 hasBeenUsed.push_back( bname.Data() );
103
104 // the PDFs --------------
105
106 // check for splines
107 h = 0;
108 b = 0;
109 TString pname = hname; pname.ReplaceAll("_nice","");
110 for (int i=0; i<= 5; i++) {
111 TString hspline = pname + TString::Format( "_smoothed_hist_from_spline%i", i );
112 h = (TH1F*)lhdir->Get( hspline );
113 if (h) {
114 b = (TH1F*)lhdir->Get( hspline.ReplaceAll("_sig","_bgd") );
115 break;
116 }
117 }
118
119 // check for KDE
120 if (h == 0 && b == 0) {
121 TString hspline = pname +"_smoothed_hist_from_KDE";
122 h = (TH1F*)lhdir->Get( hspline );
123 if (h) {
124 b = (TH1F*)lhdir->Get( hspline.ReplaceAll("_sig","_bgd") );
125 }
126 }
127
128 // found something ?
129 if (h == 0 || b == 0) {
130 cout << "--- likelihoodrefs.C: did not find spline for histogram: " << pname.Data() << endl;
131 }
132 else {
133
134 Double_t pSscale = 1.0/(h->GetSumOfWeights()*h->GetBinWidth(1));
135 h->Scale( pSscale/hSscale );
136 color = 4;
137 c[ic]->cd(1);
138 h->SetLineWidth(2);
139 h->SetLineColor(color);
140 legS->AddEntry(h,"Estimated PDF (norm. signal)","l");
141 h->Draw("histsame");
142 legS->Draw();
143
144 Double_t pBscale = 1.0/(b->GetSumOfWeights()*b->GetBinWidth(1));
145 b->Scale( pBscale/hBscale );
146 color = 2;
147 c[ic]->cd(2);
148 b->SetLineColor(color);
149 b->SetLineWidth(2);
150 legB->AddEntry(b,"Estimated PDF (norm. backgr.)","l");
151 b->Draw("histsame");
152
153 // draw the legends
154 legB->Draw();
155
156 hasBeenUsed.push_back( pname.Data() );
157 }
158 c[ic]->Update();
159
160 // write to file
161 TString fname = TString::Format( "%s/plots/%s_refs_c%i",dataset.Data(), titName.Data(), ic+1 );
162 TMVAGlob::imgconv( c[ic], fname );
163 //c[ic]->Update();
164
165 newCanvas = kTRUE;
166 hasBeenUsed.push_back( hname.Data() );
167 }
168 }
169 }
170
171 delete [] c; // delete only array
172}
173
174void TMVA::likelihoodrefs(TString dataset, TString fin , Bool_t useTMVAStyle )
175{
176 // set style and remove existing canvas'
177 TMVAGlob::Initialize( useTMVAStyle );
178
179 // checks if file with name "fin" is already open, and if not opens one
180 TFile *file=TMVAGlob::OpenFile( fin );
181
182 // get all titles of the method likelihood
183 TList titles;
184 TString metlike="Method_Likelihood";
185 UInt_t ninst = TMVAGlob::GetListOfTitles(metlike,titles,file->GetDirectory(dataset.Data()));
186 if (ninst==0) {
187 cout << "Could not locate directory 'Method_Likelihood' in file " << fin << endl;
188 return;
189 }
190 // loop over all titles
191 TIter keyIter(&titles);
192 TDirectory *lhdir;
193 TKey *key;
194 while ((key = TMVAGlob::NextKey(keyIter,"TDirectory"))) {
195 lhdir = (TDirectory *)key->ReadObj();
196 likelihoodrefs(dataset, lhdir );
197 }
198}
199
#define b(i)
Definition RSha256.hxx:100
#define c(i)
Definition RSha256.hxx:101
#define h(i)
Definition RSha256.hxx:106
bool Bool_t
Definition RtypesCore.h:63
int Int_t
Definition RtypesCore.h:45
unsigned int UInt_t
Definition RtypesCore.h:46
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
double Double_t
Definition RtypesCore.h:59
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
Option_t Option_t width
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t height
#define snprintf
Definition civetweb.c:1540
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
Definition TAttLine.h:43
Float_t GetLeftMargin() const
Definition TAttPad.h:44
Float_t GetTopMargin() const
Definition TAttPad.h:46
The Canvas class.
Definition TCanvas.h:23
TDirectory * GetDirectory(const char *apath, Bool_t printError=false, const char *funcname="GetDirectory") override
Find a directory named "apath".
Describe directory structure in memory.
Definition TDirectory.h:45
virtual TObject * Get(const char *namecycle)
Return pointer to object identified by namecycle.
virtual TList * GetListOfKeys() const
Definition TDirectory.h:223
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
Definition TFile.h:53
1-D histogram with a float per channel (see TH1 documentation)
Definition TH1.h:621
TH1 is the base class of all histogram classes in ROOT.
Definition TH1.h:59
Book space in a file, create I/O buffers, to fill them, (un)compress them.
Definition TKey.h:28
virtual TObject * ReadObj()
To read a TObject* from the file.
Definition TKey.cxx:762
This class displays a legend box (TPaveText) containing several legend entries.
Definition TLegend.h:23
TLegendEntry * AddEntry(const TObject *obj, const char *label="", Option_t *option="lpf")
Add a new entry to this legend.
Definition TLegend.cxx:317
void Draw(Option_t *option="") override
Draw this legend with its current attributes.
Definition TLegend.cxx:422
A doubly linked list.
Definition TList.h:38
const char * GetName() const override
Returns name of object.
Definition TNamed.h:47
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
Definition TObject.cxx:274
The most important graphics class in the ROOT system.
Definition TPad.h:28
virtual void SetBorderSize(Int_t bordersize=4)
Sets the border size of the TPave box and shadow.
Definition TPave.h:77
Basic string class.
Definition TString.h:139
const char * Data() const
Definition TString.h:376
TString & ReplaceAll(const TString &s1, const TString &s2)
Definition TString.h:704
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Definition TString.cxx:2378
const Int_t n
Definition legend1.C:16
UInt_t GetListOfTitles(TDirectory *rfdir, TList &titles)
Definition tmvaglob.cxx:643
void Initialize(Bool_t useTMVAStyle=kTRUE)
Definition tmvaglob.cxx:176
TKey * NextKey(TIter &keyIter, TString className)
Definition tmvaglob.cxx:364
TFile * OpenFile(const TString &fin)
Definition tmvaglob.cxx:192
void imgconv(TCanvas *c, const TString &fname)
Definition tmvaglob.cxx:212
void likelihoodrefs(TString dataset, TDirectory *lhdir)