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()) );