ROOT logo
#include <Riostream.h>
#include <TH1F.h>
#include <TF1.h>
#include <TAttFill.h>
#include <TFile.h>
#include <TCanvas.h>
#include <AliHFMassFitter.h>

//root[0] .L plotHFMassFitterOutput.C+
//root[1] plotHFMassFitterOutput(2)

//input: pt bin you want to plot; path of the HFMassFitterOutput.root file

//three lines of fit:
//grey= background with parameters from the fit on the side-bands
//red= background with parameters from the total fit
//blue= total fit

void plotHFMassFitterOutput(Int_t ptbin, TString path="./"){
  TString stdfilename="HFMassFitterOutput.root";
  stdfilename.Prepend(path);

  cout<<"Opening "<<stdfilename<<endl;
  TFile *fin=new TFile(stdfilename.Data());
  if(!fin->IsOpen()){
    cout<<"File "<<stdfilename<<" not found"<<endl;
    return;
  }
  TString histoname="histMass_";
  histoname+=ptbin;

  TH1F *h=(TH1F*)fin->Get(histoname);
  if(!h) {
    cout<<histoname<<" is not here, sorry!"<<endl;
    histoname="fhistoInvMass";
    h=(TH1F*)fin->Get(histoname);
    if(!h){
      cout<<histoname<<" is not here, sorry!"<<endl;
      cout<<"Write the name of the histo required (e.g. histMassSum<factor>_<ptbin>): ";
      cin>> histoname;
      h=(TH1F*)fin->Get(histoname);
      if(!h){
	cout<<histoname<<" is not in "<<stdfilename<<" check it, please!"<<endl;
	  return;
      }
    } else {
      histoname+=ptbin;
      h->SetName(histoname);
    }
  }


    if(h){
    cout<<histoname<<" will be drawn!"<<endl;
    TCanvas *c1=new TCanvas("c1",histoname);
     //funcbkgfullrange_faint
    cout<<h<<endl;
    (h->GetFunction("funcbkgFullRange"))->SetLineColor(14);
    (h->GetFunction("funcbkgFullRange"))->SetLineStyle(4);

    Double_t xmin,xmax;
    (h->GetFunction("funcbkgFullRange"))->GetRange(xmin,xmax);
    Int_t nfreepar=h->GetFunction("funcbkgFullRange")->GetNumberFreeParameters();
    cout<<"nfreepar = "<<nfreepar<<endl;

    cout<<"Range = ("<<xmin<<", "<<xmax<<")"<<endl;
    cout<<"Bin Width "<<h->GetBinWidth(3)<<endl;
    cout<<"Initial parameters:\n";
    cout<<"par0= "<<h->GetFunction("funcbkgFullRange")->GetParameter(0)<<endl;
    cout<<"par1= "<<h->GetFunction("funcbkgFullRange")->GetParameter(1)<<endl;
    cout<<"par2= "<<h->GetFunction("funcbkgFullRange")->GetParameter(2)<<endl;
    cout<<"Formula= "<<h->GetFunction("funcbkgFullRange")->GetExpFormula()<<endl;

    TF1 *fmass=h->GetFunction("funcmass");
    cout<<"Parametri massa input:\n";
    cout<<"par0= "<<h->GetFunction("funcmass")->GetParameter(0)-h->GetFunction("funcmass")->GetParameter(nfreepar)<<endl;
    cout<<"par1= "<<h->GetFunction("funcmass")->GetParameter(1)<<endl;
    cout<<"par2= "<<h->GetFunction("funcmass")->GetParameter(2)<<endl;

 
    AliHFMassFitter *fitter=new AliHFMassFitter(h,xmin,xmax,1,2,0);
    fitter->SetSideBands(kFALSE);

    //funcbkgfullrange_deep
    
    TF1 *fbkgfullrange_deep=new TF1("fbkgfullrange_deep",fitter,&AliHFMassFitter::FitFunction4Bkg,xmin,xmax,nfreepar,"AliHFMassFitter","FitFunction4Bkg"); 
     
    
    fbkgfullrange_deep->SetParameter(0,(fmass->GetParameter(0)-fmass->GetParameter(nfreepar))); //lin exp pol2 no-bkg
    if(nfreepar>=2) fbkgfullrange_deep->SetParameter(1,fmass->GetParameter(1)); //lin exp pol2
    if(nfreepar==3) fbkgfullrange_deep->SetParameter(2,fmass->GetParameter(2)); //pol2

    fbkgfullrange_deep->SetMinimum(0);

    cout<<"Final parameters:\n";
    cout<<"par0= "<<fbkgfullrange_deep->GetParameter(0)<<"\tcompare with "<<fbkgfullrange_deep->Integral(xmin,xmax)<<endl;
    cout<<"par1= "<<fbkgfullrange_deep->GetParameter(1)<<endl;
    cout<<"par2= "<<fbkgfullrange_deep->GetParameter(2)<<endl;

    c1->cd();
    fbkgfullrange_deep->SetLineStyle(1);
    fbkgfullrange_deep->SetLineColor(2);
    h->Draw();
    fbkgfullrange_deep->Draw("sames");
    fmass->Draw("sames");
  
  } else {
    cout<<histoname<<" is not here, sorry!"<<endl;
    return;
  }
}
 plotHFMassFitterOutput.C:1
 plotHFMassFitterOutput.C:2
 plotHFMassFitterOutput.C:3
 plotHFMassFitterOutput.C:4
 plotHFMassFitterOutput.C:5
 plotHFMassFitterOutput.C:6
 plotHFMassFitterOutput.C:7
 plotHFMassFitterOutput.C:8
 plotHFMassFitterOutput.C:9
 plotHFMassFitterOutput.C:10
 plotHFMassFitterOutput.C:11
 plotHFMassFitterOutput.C:12
 plotHFMassFitterOutput.C:13
 plotHFMassFitterOutput.C:14
 plotHFMassFitterOutput.C:15
 plotHFMassFitterOutput.C:16
 plotHFMassFitterOutput.C:17
 plotHFMassFitterOutput.C:18
 plotHFMassFitterOutput.C:19
 plotHFMassFitterOutput.C:20
 plotHFMassFitterOutput.C:21
 plotHFMassFitterOutput.C:22
 plotHFMassFitterOutput.C:23
 plotHFMassFitterOutput.C:24
 plotHFMassFitterOutput.C:25
 plotHFMassFitterOutput.C:26
 plotHFMassFitterOutput.C:27
 plotHFMassFitterOutput.C:28
 plotHFMassFitterOutput.C:29
 plotHFMassFitterOutput.C:30
 plotHFMassFitterOutput.C:31
 plotHFMassFitterOutput.C:32
 plotHFMassFitterOutput.C:33
 plotHFMassFitterOutput.C:34
 plotHFMassFitterOutput.C:35
 plotHFMassFitterOutput.C:36
 plotHFMassFitterOutput.C:37
 plotHFMassFitterOutput.C:38
 plotHFMassFitterOutput.C:39
 plotHFMassFitterOutput.C:40
 plotHFMassFitterOutput.C:41
 plotHFMassFitterOutput.C:42
 plotHFMassFitterOutput.C:43
 plotHFMassFitterOutput.C:44
 plotHFMassFitterOutput.C:45
 plotHFMassFitterOutput.C:46
 plotHFMassFitterOutput.C:47
 plotHFMassFitterOutput.C:48
 plotHFMassFitterOutput.C:49
 plotHFMassFitterOutput.C:50
 plotHFMassFitterOutput.C:51
 plotHFMassFitterOutput.C:52
 plotHFMassFitterOutput.C:53
 plotHFMassFitterOutput.C:54
 plotHFMassFitterOutput.C:55
 plotHFMassFitterOutput.C:56
 plotHFMassFitterOutput.C:57
 plotHFMassFitterOutput.C:58
 plotHFMassFitterOutput.C:59
 plotHFMassFitterOutput.C:60
 plotHFMassFitterOutput.C:61
 plotHFMassFitterOutput.C:62
 plotHFMassFitterOutput.C:63
 plotHFMassFitterOutput.C:64
 plotHFMassFitterOutput.C:65
 plotHFMassFitterOutput.C:66
 plotHFMassFitterOutput.C:67
 plotHFMassFitterOutput.C:68
 plotHFMassFitterOutput.C:69
 plotHFMassFitterOutput.C:70
 plotHFMassFitterOutput.C:71
 plotHFMassFitterOutput.C:72
 plotHFMassFitterOutput.C:73
 plotHFMassFitterOutput.C:74
 plotHFMassFitterOutput.C:75
 plotHFMassFitterOutput.C:76
 plotHFMassFitterOutput.C:77
 plotHFMassFitterOutput.C:78
 plotHFMassFitterOutput.C:79
 plotHFMassFitterOutput.C:80
 plotHFMassFitterOutput.C:81
 plotHFMassFitterOutput.C:82
 plotHFMassFitterOutput.C:83
 plotHFMassFitterOutput.C:84
 plotHFMassFitterOutput.C:85
 plotHFMassFitterOutput.C:86
 plotHFMassFitterOutput.C:87
 plotHFMassFitterOutput.C:88
 plotHFMassFitterOutput.C:89
 plotHFMassFitterOutput.C:90
 plotHFMassFitterOutput.C:91
 plotHFMassFitterOutput.C:92
 plotHFMassFitterOutput.C:93
 plotHFMassFitterOutput.C:94
 plotHFMassFitterOutput.C:95
 plotHFMassFitterOutput.C:96
 plotHFMassFitterOutput.C:97
 plotHFMassFitterOutput.C:98
 plotHFMassFitterOutput.C:99
 plotHFMassFitterOutput.C:100
 plotHFMassFitterOutput.C:101
 plotHFMassFitterOutput.C:102
 plotHFMassFitterOutput.C:103
 plotHFMassFitterOutput.C:104
 plotHFMassFitterOutput.C:105
 plotHFMassFitterOutput.C:106
 plotHFMassFitterOutput.C:107
 plotHFMassFitterOutput.C:108
 plotHFMassFitterOutput.C:109
 plotHFMassFitterOutput.C:110
 plotHFMassFitterOutput.C:111
 plotHFMassFitterOutput.C:112