\begin{lstlisting}[style=CStyle]
void TFraction_templete_fit() {


    gStyle->SetOptFit(0100);
    gStyle->SetOptStat("ne");
    
    //Reading Files
    TFile *tfile;
    TFile *datafile;
    TFile *zjetsfile;
    TFile *ttbarfile;
    TFile *ttbarVfile;
    TFile *dibosonfile;
   
    datafile = TFile::Open("TMVEval2.root", "READ");
    if ( datafile->IsOpen() ) cout << "File " << datafile->GetName() << " opened successfully" << endl;
    else {cout << "File not FOUND!!!!" << endl;   return; }
    
    zjetsfile = TFile::Open("TMVEval_Z+jet2.root", "READ");
    if ( zjetsfile->IsOpen() ) cout << "File " << zjetsfile->GetName() << " opened successfully" << endl;
    else {cout << "File not FOUND!!!!" << endl;   return; }
    
    ttbarfile = TFile::Open("TMVEval_ttbar2.root", "READ");
    if ( ttbarfile->IsOpen() ) cout << "File " << ttbarfile->GetName() << " opened successfully" << endl;
    else {cout << "File not FOUND!!!!" << endl;   return; }
 
    ttbarVfile = TFile::Open("TMVEval_ttbarV2.root", "READ");
    if ( ttbarVfile->IsOpen() ) cout << "File " << ttbarVfile->GetName() << " opened successfully" << endl;
    else {cout << "File not FOUND!!!!" << endl;   return; }
      
    dibosonfile = TFile::Open("TMVEval_diboson2.root", "READ");
    if ( dibosonfile->IsOpen() ) cout << "File " << dibosonfile->GetName() << " opened successfully" << endl;
    else {cout << "File not FOUND!!!!" << endl;   return; }
    
    //Reading histograms from the files 
    TH1F *hdata  = (TH1F*) datafile->Get("MLPmethod");
    TH1F *htzjets  = (TH1F*) zjetsfile->Get("MLPmethod");
    TH1F *htttbar  = (TH1F*) ttbarfile->Get("MLPmethod");
    TH1F *htttbarV  = (TH1F*) ttbarVfile->Get("MLPmethod");  
    TH1F *htdiboson  = (TH1F*) dibosonfile->Get("MLPmethod"); 
   
    TH1F *htttbarV_ttbar = (TH1F*) ttbarVfile->Get("MLPmethod"); 
    htttbarV_ttbar->Add(htttbar);
    
    TH1F *htzjets_diboson = (TH1F*) zjetsfile->Get("MLPmethod"); 
    htzjets_diboson->Add(htdiboson);
    
    hdata->Rebin(2);
    htzjets_diboson->Rebin(2);
    htttbarV_ttbar->Rebin(2);
    
   TObjArray *mc = new TObjArray(2);        // MC histograms are put in this array
   mc->Add(htzjets_diboson);
   mc->Add(htttbarV_ttbar);
   
   double frac[2];
   double frac_err[2];
   TFractionFitter* fit = new TFractionFitter(hdata, mc, "V"); // initialise

   fit->Constrain(0,0.80,1);
   fit->Constrain(1,0.05,0.1);  
   
   fit->SetRangeX(1,40);                    
   Int_t status = fit->Fit();               
   std::cout << "fit status: " << status << std::endl;
   if (status == 0) {                       // check on fit status
     TH1F* result = (TH1F*) fit->GetPlot();
     hdata->Draw("E1");
     result->SetLineColor(kBlack);
     result->Draw("same");
    
    double data_int = hdata->Integral(0,40);
     
     fit->GetResult(0, frac[0], frac_err[0]);
     htzjets_diboson->Scale(1/(htzjets_diboson->Integral(0,40)));
     htzjets_diboson->Scale(frac[0]*data_int);
     htzjets_diboson->SetLineColor(kMagenta);
     htzjets_diboson->GetXaxis()->SetTitle("MLP response");
     htzjets_diboson->Draw("same");
     
     fit->GetResult(1, frac[1], frac_err[1]);
     htttbarV_ttbar->Scale(1/(htttbarV_ttbar->Integral(0,40)));
     htttbarV_ttbar->Scale(frac[1]*data_int);
     htttbarV_ttbar->SetLineColor(kRed);
     htttbarV_ttbar->Draw("same");

    auto legend = new TLegend(0.75,0.68,0.98,0.95);
    legend->SetHeader("MVA response",""); // option "C" allows to center the header
    legend->AddEntry(result,"templete fit","l");
    legend->AddEntry(hdata,"data","le1");
    legend->AddEntry(htzjets_diboson,"zjets+diboson","lep");
    legend->AddEntry(htttbarV_ttbar,"ttbarV+ttbar","lep");
    legend->Draw();     
    
    TPaveText *t2=new TPaveText(0.03,0.85,0.4,0.98,"brNDC");
            t2->AddText(Form("Fracitons "));
            t2->AddText(Form("zjets+diboson : %g +- %g ",frac[0],frac_err[0]));
            t2->AddText(Form("ttbarV+ttbar  : %g +- %g ",frac[1],frac_err[1]));
            t2->Draw(); 
            
        TPaveText *t3=new TPaveText(0.15,0.75,0.35,0.83,"brNDC");
            t3->AddText(Form("Chisquare: %g ",fit->GetChisquare ()));
            t3->AddText(Form("NDF: %d ",fit->GetNDF()));
            t3->Draw(); 
     
     cout << "Chisquare: " << fit->GetChisquare () << endl;
     cout << "NDF:       " << fit->GetNDF () << endl;
     cout << endl;
     cout << "Zjets+diboson:" << frac[0] << " +- " << frac_err[0] << "(Real value = 0.914)" << endl;
     cout << "ttbarV+ttbar: " << frac[1] << " +- " << frac_err[1] << "(Real value = 0.086)" << endl;
     cout << endl;

   }

}
\end{lstlisting}