6 #define CheckDerivedPlots 0
8 TString DerivedPlotName =
"Rarity";
10 void TMVA::compareanapp( TString finAn , TString finApp ,
11 HistType htype ,
bool useTMVAStyle )
13 cout <<
"=== Compare histograms of two files ===" << endl;
14 cout <<
" File-1: " << finAn << endl;
15 cout <<
" File-2: " << finApp << endl;
18 TMVAGlob::Initialize( useTMVAStyle );
21 const Bool_t Draw_CFANN_Logy = kFALSE;
22 const Bool_t Save_Images = kTRUE;
24 TFile* file = TMVAGlob::OpenFile( finAn );
25 TFile* fileApp =
new TFile( finApp );
29 const Int_t width = 600;
32 Int_t countCanvas = 0;
37 while ( (key = (TKey*)next()) ) {
39 TString dirname = ((TDirectory*)key->ReadObj())->GetName();
40 if (dirname.Contains(
"Cuts" )) {
41 cout <<
"--- Found directory: " << dirname <<
" --> ignoring" << endl;
44 cout <<
"--- Found directory: " << dirname
45 <<
" --> going in" << endl;
48 TMVAGlob::GetMethodName(methodName,key);
50 cout <<
"--- Method: " << methodName << endl;
56 TIter nextTitle(&titles);
59 while ( (titkey = TMVAGlob::NextKey(nextTitle,
"TDirectory")) ) {
61 titDir = (TDirectory *)titkey->ReadObj();
63 TMVAGlob::GetMethodTitle(methodTitle,titDir);
64 TString hname =
"MVA_" + methodTitle;
65 if (CheckDerivedPlots) hname += TString(
"_") + DerivedPlotName;
67 TH1* sig =
dynamic_cast<TH1*
>(titDir->Get( hname +
"_S" ));
68 TH1* bgd =
dynamic_cast<TH1*
>(titDir->Get( hname +
"_B" ));
70 if (sig==0 || bgd==0)
continue;
73 sig->SetTitle( Form(
"TMVA output for classifier: %s", methodTitle.Data()) );
74 if (htype == kProbaType)
75 sig->SetTitle( Form(
"TMVA probability for classifier: %s", methodTitle.Data()) );
76 else if (htype == kRarityType)
77 sig->SetTitle( Form(
"TMVA Rarity for classifier: %s", methodTitle.Data()) );
80 TString ctitle = ((htype == TMVA::kMVAType) ?
81 Form(
"TMVA output %s",methodTitle.Data()) :
82 (htype == kProbaType) ?
83 Form(
"TMVA probability %s",methodTitle.Data()) :
84 Form(
"TMVA rarity %s",methodTitle.Data()));
86 TString cname = ((htype == TMVA::kMVAType) ?
87 Form(
"output_%s",methodTitle.Data()) :
88 (htype == kProbaType) ?
89 Form(
"probability_%s",methodTitle.Data()) :
90 Form(
"rarity_%s",methodTitle.Data()));
92 TCanvas* c =
new TCanvas( Form(
"canvas%d", countCanvas+1), ctitle,
93 countCanvas*50+200, countCanvas*20, width, width*0.78 );
96 TMVAGlob::SetSignalAndBackgroundStyle( sig, bgd );
99 TMVAGlob::NormalizeHists( sig, bgd );
103 Float_t xmin = TMath::Max( TMath::Min(sig->GetMean() - nrms*sig->GetRMS(),
104 bgd->GetMean() - nrms*bgd->GetRMS() ),
105 sig->GetXaxis()->GetXmin() );
106 Float_t xmax = TMath::Min( TMath::Max(sig->GetMean() + nrms*sig->GetRMS(),
107 bgd->GetMean() + nrms*bgd->GetRMS() ),
108 sig->GetXaxis()->GetXmax() );
110 Float_t ymax = TMath::Max( sig->GetMaximum(), bgd->GetMaximum() )*1.2 ;
112 if (Draw_CFANN_Logy && methodName ==
"CFANN") ymin = 0.01;
116 TH2F* frame =
new TH2F( TString(
"frame") + methodTitle, sig->GetTitle(),
117 nb, xmin, xmax, nb, ymin, ymax );
118 frame->GetXaxis()->SetTitle(methodTitle);
119 if (htype == kProbaType ) frame->GetXaxis()->SetTitle(
"Signal probability" );
120 else if (htype == kRarityType) frame->GetXaxis()->SetTitle(
"Signal rarity" );
121 frame->GetYaxis()->SetTitle(
"Normalized");
122 TMVAGlob::SetFrameStyle( frame );
127 c->GetPad(0)->SetLeftMargin( 0.105 );
128 frame->GetYaxis()->SetTitleOffset( 1.2 );
130 if (Draw_CFANN_Logy && methodName ==
"CFANN") c->SetLogy();
133 TLegend *legend=
new TLegend( c->GetLeftMargin(), 1 - c->GetTopMargin() - 0.12,
134 c->GetLeftMargin() + 0.3, 1 - c->GetTopMargin() );
135 legend->SetFillStyle( 1 );
136 legend->AddEntry(sig,
"Signal",
"F");
137 legend->AddEntry(bgd,
"Background",
"F");
138 legend->SetBorderSize(1);
139 legend->SetMargin( 0.3 );
140 legend->Draw(
"same");
143 sig->Draw(
"samehist");
144 bgd->Draw(
"samehist");
147 TString hStem(hname);
148 cout <<
"--- Searching for histogram: " << hStem.Data() <<
" in application file" << endl;
150 TH1* testHist = (TH1*)fileApp->Get( hStem );
152 cout <<
"--> Found application histogram: " << testHist->GetName() <<
" --> superimpose it" << endl;
154 TMVAGlob::NormalizeHists( testHist );
155 testHist->SetLineWidth( 3 );
156 testHist->SetLineColor( 1 );
157 testHist->Draw(
"samehist");
161 frame->Draw(
"sameaxis");
164 Int_t nbin = sig->GetNbinsX();
165 Double_t dxu = sig->GetBinWidth(0);
166 Double_t dxo = sig->GetBinWidth(nbin+1);
167 TString uoflow = Form(
"U/O-flow (S,B): (%.1f, %.1f)%% / (%.1f, %.1f)%%",
168 sig->GetBinContent(0)*dxu*100, bgd->GetBinContent(0)*dxu*100,
169 sig->GetBinContent(nbin+1)*dxo*100, bgd->GetBinContent(nbin+1)*dxo*100 );
170 TText* t =
new TText( 0.975, 0.115, uoflow );
172 t->SetTextSize( 0.030 );
173 t->SetTextAngle( 90 );
178 TMVAGlob::plot_logo();
180 if (htype == TMVA::kMVAType) TMVAGlob::imgconv( c, Form(
"plots/mva_%s", methodTitle.Data()) );
181 else if (htype == TMVA::kProbaType) TMVAGlob::imgconv( c, Form(
"plots/proba_%s", methodTitle.Data()) );
182 else TMVAGlob::imgconv( c, Form(
"plots/rarity_%s", methodTitle.Data()) );