ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/LJMet/MultivariateAnalysis/macros/probas.C
Revision: 1.1
Committed: Thu Nov 20 22:34:50 2008 UTC (16 years, 5 months ago) by kukartse
Content type: text/plain
Branch: MAIN
CVS Tags: V00-03-01, ZMorph_BASE_20100408, gak040610_morphing, V00-02-02, gak011410, gak010310, ejterm2010_25nov2009, V00-02-01, V00-02-00, gak112409, CMSSW_22X_branch_base, segala101609, V00-01-15, V00-01-14, V00-01-13, V00-01-12, V00-01-11, V00-01-10, gak031009, gak030509, gak022309, gak021209, gak040209, gak012809, V00-01-09, V00-01-08, V00-01-07, V00-01-06, V00-01-05, V00-01-04, V00-00-07, V00-00-06, V00-00-05, V00-00-04, V00-01-03, V00-00-02, V00-00-01, HEAD
Branch point for: ZMorph-V00-03-01, CMSSW_22X_branch
Log Message:
created /macros with TMVA scripts in it

File Contents

# User Rev Content
1 kukartse 1.1 #include "tmvaglob.C"
2    
3     // this macro plots the MVA probability distributions (Signal and
4     // Background overlayed) of different MVA methods run in TMVA
5     // (e.g. running TMVAnalysis.C).
6    
7     // input: - Input file (result from TMVA)
8     // - use of TMVA plotting TStyle
9     void probas( TString fin = "TMVA.root", Bool_t useTMVAStyle = kTRUE )
10     {
11     cout << "--- probas.C" << endl;
12     // set style and remove existing canvas'
13     TMVAGlob::Initialize( useTMVAStyle );
14    
15     // switches
16     const Bool_t Draw_CFANN_Logy = kFALSE;
17     const Bool_t Save_Images = kTRUE;
18    
19     // checks if file with name "fin" is already open, and if not opens one
20     TFile* file = TMVAGlob::OpenFile( fin );
21    
22     // define Canvas layout here!
23     Int_t xPad = 1; // no of plots in x
24     Int_t yPad = 1; // no of plots in y
25     Int_t noPad = xPad * yPad ;
26     const Int_t width = 600; // size of canvas
27    
28     // this defines how many canvases we need
29     TCanvas *c = 0;
30    
31     // counter variables
32     Int_t countCanvas = 0;
33    
34     // list of existing MVAs
35     const Int_t nveto = 1;
36     TString suffixSig = "_tr_S";
37     TString suffixBgd = "_tr_B";
38    
39     // search for the right histograms in full list of keys
40     TList methods;
41     UInt_t nmethods = TMVAGlob::GetListOfMethods( methods );
42     if (nmethods==0) {
43     cout << "No methods found!" << endl;
44     return;
45     }
46     TIter next(&methods);
47     TKey *key, *hkey;
48     char fname[200];
49     TH1* sig(0);
50     TH1* bgd(0);
51     while ((key = (TKey*)next())) {
52     TDirectory * mDir = (TDirectory*)key->ReadObj();
53     TList titles;
54     UInt_t ni = TMVAGlob::GetListOfTitles( mDir, titles );
55     TString methodName;
56     TMVAGlob::GetMethodName(methodName,key);
57     if (ni==0) {
58     cout << "No titles found for " << methodName << endl;
59     return;
60     }
61     TIter nextTitle(&titles);
62     TKey *instkey;
63     TDirectory *instDir;
64     while ((instkey = (TKey *)nextTitle())) {
65     instDir = (TDirectory *)instkey->ReadObj();
66     TString instName = instkey->GetName();
67     TList h1hists;
68     UInt_t nhists = TMVAGlob::GetListOfKeys( h1hists, "TH1", instDir );
69     if (nhists==0) cout << "No hists found!" << endl;
70     TIter nextInDir(&h1hists);
71     TString methodTitle;
72     TMVAGlob::GetMethodTitle(methodTitle,instDir);
73     while (hkey = (TKey*)nextInDir()) {
74     TH1 *th1 = (TH1*)hkey->ReadObj();
75     TString hname= th1->GetName();
76     if (hname.Contains( suffixSig ) && !hname.Contains( "Cut") &&
77     !hname.Contains("original") && !hname.Contains("smoothed")) {
78    
79     // retrieve corresponding signal and background histograms
80     TString hnameS = hname;
81     TString hnameB = hname; hnameB.ReplaceAll("_S","_B");
82    
83     sig = (TH1*)instDir->Get( hnameS );
84     bgd = (TH1*)instDir->Get( hnameB );
85    
86     if (sig == 0 || bgd == 0) {
87     cout << "--- probas.C: big troubles in probas.... histogram: " << hname << " not found" << endl;
88     return;
89     }
90    
91     TH1* sigF(0);
92     TH1* bkgF(0);
93     for (int i=0; i<= 5; i++) {
94     TString hspline = hnameS + Form("_smoothed_hist_from_spline%i",i);
95     sigF = (TH1*)instDir->Get( hspline );
96    
97     if (sigF) {
98     bkgF = (TH1*)instDir->Get( hspline.ReplaceAll("_tr_S","_tr_B") );
99     break;
100     }
101     }
102     if ((sigF == NULL || bkgF == NULL) &&!hname.Contains("hist") ) {
103     cout << "--- probas.C: big troubles - did not found histogram " << hspline.Data() << " "
104     << sigF << " " << bkgF << endl;
105     return;
106     }
107     else {
108     // remove the signal suffix
109    
110     // check that exist
111     if (NULL != sigF && NULL != bkgF && NULL!=sig && NULL!=bgd) {
112    
113     TString hname = sig->GetName();
114    
115     // chop off useless stuff
116     sig->SetTitle( TString("TMVA output for classifier: ") + methodTitle );
117    
118     // create new canvas
119     cout << "--- Book canvas no: " << countCanvas << endl;
120     char cn[20];
121     sprintf( cn, "canvas%d", countCanvas+1 );
122     c = new TCanvas( cn, Form("TMVA Output Fit Variables %s",methodTitle.Data()),
123     countCanvas*50+200, countCanvas*20, width, width*0.78 );
124    
125     // set the histogram style
126     TMVAGlob::SetSignalAndBackgroundStyle( sig, bgd );
127     TMVAGlob::SetSignalAndBackgroundStyle( sigF, bkgF );
128    
129     // frame limits (choose judicuous x range)
130     Float_t nrms = 4;
131     cout << "--- mean and RMS (S): " << sig->GetMean() << ", " << sig->GetRMS() << endl;
132     cout << "--- mean and RMS (B): " << bgd->GetMean() << ", " << bgd->GetRMS() << endl;
133     Float_t xmin = TMath::Max( TMath::Min(sig->GetMean() - nrms*sig->GetRMS(),
134     bgd->GetMean() - nrms*bgd->GetRMS() ),
135     sig->GetXaxis()->GetXmin() );
136     Float_t xmax = TMath::Min( TMath::Max(sig->GetMean() + nrms*sig->GetRMS(),
137     bgd->GetMean() + nrms*bgd->GetRMS() ),
138     sig->GetXaxis()->GetXmax() );
139     Float_t ymin = 0;
140     Float_t ymax = TMath::Max( sig->GetMaximum(), bgd->GetMaximum() )*1.5;
141    
142     if (Draw_CFANN_Logy && mvaName[imva] == "CFANN") ymin = 0.01;
143    
144     // build a frame
145     Int_t nb = 500;
146     TH2F* frame = new TH2F( TString("frame") + sig->GetName(), sig->GetTitle(),
147     nb, xmin, xmax, nb, ymin, ymax );
148     frame->GetXaxis()->SetTitle(methodTitle);
149     frame->GetYaxis()->SetTitle("Normalized");
150     TMVAGlob::SetFrameStyle( frame );
151    
152     // eventually: draw the frame
153     frame->Draw();
154    
155     if (Draw_CFANN_Logy && mvaName[imva] == "CFANN") c->SetLogy();
156    
157     // overlay signal and background histograms
158     sig->SetMarkerColor(4);
159     sig->SetMarkerSize( 0.7 );
160     sig->SetMarkerStyle( 20 );
161     sig->SetLineWidth(1);
162    
163     bgd->SetMarkerColor(2);
164     bgd->SetMarkerSize( 0.7 );
165     bgd->SetMarkerStyle( 24 );
166     bgd->SetLineWidth(1);
167    
168     sig->Draw("samee");
169     bgd->Draw("samee");
170    
171     sigF->SetFillStyle( 0 );
172     bkgF->SetFillStyle( 0 );
173     sigF->Draw("samehist");
174     bkgF->Draw("samehist");
175    
176     // redraw axes
177     frame->Draw("sameaxis");
178    
179     // Draw legend
180     TLegend *legend= new TLegend( c->GetLeftMargin(), 1 - c->GetTopMargin() - 0.2,
181     c->GetLeftMargin() + 0.4, 1 - c->GetTopMargin() );
182     legend->AddEntry(sig,"Signal data","P");
183     legend->AddEntry(sigF,"Signal PDF","L");
184     legend->AddEntry(bgd,"Background data","P");
185     legend->AddEntry(bkgF,"Background PDF","L");
186     legend->Draw("same");
187     legend->SetBorderSize(1);
188     legend->SetMargin( 0.3 );
189    
190     // save canvas to file
191     c->Update();
192     TMVAGlob::plot_logo();
193     sprintf( fname, "plots/mva_pdf_%s_c%i", methodTitle.Data(), countCanvas+1 );
194     if (Save_Images) TMVAGlob::imgconv( c, fname );
195     countCanvas++;
196     }
197     }
198     }
199     }
200     }
201     }
202     }