]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/vertexingHF/macros/AnalyzeCharmFractionHists.C
Split: removed dirs now in AliPhysics
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / macros / AnalyzeCharmFractionHists.C
diff --git a/PWGHF/vertexingHF/macros/AnalyzeCharmFractionHists.C b/PWGHF/vertexingHF/macros/AnalyzeCharmFractionHists.C
deleted file mode 100644 (file)
index 749fee7..0000000
+++ /dev/null
@@ -1,611 +0,0 @@
-TCanvas *cCompareSimple,*cCompareCum;
-TCanvas *cSubtraction,*cCompareSubtractSimple,*cCompareSubtractCum;
-const Int_t timeWait=500;
-
-void AnalyzeCharmFractionHists(Int_t ptbin,Int_t rebin){
-
-  //
-  // Macro for analyzing the impact parameter distribution of the D0 candidates.
-  //  
-  // andrea.rossi@ts.infn.it
-  //
-  //==========================================================================
-
-
-  DrawHistos("d0D0_PureBack.root","d0D0NoMCSel_SideBand.root","hd0D0",ptbin,rebin);
-  SubtractHist("d0D0_Signal.root","d0D0NoMCSel.root","d0D0NoMCSel_SideBand.root","hd0D0",ptbin,rebin);
-  return;
-
-}
-
-TH1F* CumulativeHist(const TH1F *h1,TString nameHist=0x0){
-  //ASSUME SAME BINNING
-  TString histname="hCumulative";
-  if(!nameHist.IsNull())histname.Append(nameHist.Data());
-  Int_t nbins;
-  Double_t minX,maxX,binwidth,cumul=0.,errcumul=0.;
-  nbins=h1->GetNbinsX();
-  minX=h1->GetBinCenter(1);
-  maxX=h1->GetBinCenter(nbins);
-  binwidth=h1->GetBinWidth(1);
-
-  TH1F *h1copy=new TH1F();
-  *h1copy=*h1;
-  //h1copy->Sumw2();
-
-  TH1F *hCumul=new TH1F(histname.Data(),histname.Data(),nbins,minX-binwidth/2.,maxX+binwidth/2.);
-
-
-  for(Int_t j=1;j<=nbins;j++){
-    cumul+=h1copy->GetBinContent(j);
-    hCumul->SetBinContent(j,cumul);
-  }
-  hCumul->Sumw2();
-  hCumul->Scale(1./h1copy->Integral(1,nbins));
-
-  delete h1copy;
-  return hCumul;
-}
-
-
-///////////////////// HISTOGRAMS COMPARISON   //////////////////////////////////
-//              
-//    Compare the desired histograms. The default case is the comparison
-//    between the d0 distribution for background (from MC) D0 candidates with the
-//    d0 distribution for "side bands" d0 candidates
-//
-///////////////////////////////////////////////////////////////////////////////////
-             
-void DrawHistos(Int_t pt,Int_t rebin=1){
-  TString hist="hd0D0";
-  DrawHistos("","",hist,pt,rebin);
-  return;
-}
-void DrawHistos(TString file1,TString file2,TString hist,Int_t pt,Int_t rebin=1){
-  
-  if(pt>=0){
-    hist.Append("pt");
-    hist+=pt;
-  }
-  TString nameH=hist;
-  Double_t integr1,integr2;
-  if(file1.IsNull())file1="d0D0_PureBack.root";
-  if(file2.IsNull())file2="d0D0NoMCSel_SideBand.root";
-  TFile *fSide=TFile::Open(file2.Data());
-  TFile *fmer=TFile::Open(file1.Data());
-  TH1F *h1=(TH1F*)fmer->Get(hist.Data());
-  nameH.Append("_Gaus");
-  h1->SetName(nameH.Data());
-  nameH=hist;
-  TH1F *h2=(TH1F*)fSide->Get(hist.Data());
-  nameH.Append("_SideBands");
-  h2->SetName(nameH.Data());
-
-  Bool_t satisfied=kFALSE;
-  
-  while(!satisfied){
-    h1->Rebin(rebin);
-    h2->Rebin(rebin);
-    TH1F *hCumul1=CumulativeHist(h1,"_Gaus");
-    hCumul1->SetDrawOption("E4");
-    TH1F *hCumul2=CumulativeHist(h2,"_SideBands");
-    hCumul2->SetDrawOption("E4");
-    
-    
-    TH1F *hDivCumul=new TH1F();
-    *hDivCumul=*hCumul2;
-    //    hDivCumul->Sumw2();
-    hDivCumul->Divide(hCumul1,hCumul2);
-    hDivCumul->SetName("RatioCumulGausSdBands");
-    hDivCumul->SetTitle("Ratio Cumulative Gaus Over SideBands");
-    
-    TH1F *hGausComp=new TH1F();
-    *hGausComp=*h1;
-    nameH=h1->GetName();
-    nameH.Append("Compare");
-    hGausComp->SetName(nameH.Data());
-    hGausComp->SetLineColor(kRed);
-    hGausComp->Sumw2();
-    integr1=hGausComp->Integral();
-    
-    TH1F *hSideComp=new TH1F();
-    *hSideComp=*h2;
-    nameH=h2->GetName();
-    nameH.Append("Compare");
-    hSideComp->SetName(nameH.Data());
-    hSideComp->SetLineColor(kBlue);
-    hSideComp->Sumw2();
-    integr2=hSideComp->Integral();
-    if(integr2>integr1)hSideComp->Scale(integr1/integr2);
-    else hGausComp->Scale(integr2/integr1);
-    
-    TH1F *hDivision=new TH1F();
-    *hDivision=*h1;
-    hDivision->SetName("RatioGausSdBands");
-    hDivision->SetTitle("Ratio Gaus Over Sd Bands");
-    hDivision->Sumw2();
-    hDivision->Divide(hGausComp,hSideComp);
-    
-    
-    cCompareSimple=new TCanvas("cCompareSimple","Comparison of Under Gaus and Under Side Band background",700,700);
-    cCompareSimple->Divide(1,2);
-    cCompareSimple->cd(1);
-    hSideComp->Draw();
-    hGausComp->Draw("Sames");
-    cCompareSimple->Update();
-    TPaveStats *p=hGausComp->FindObject("stats");
-    p->SetTextColor(kRed);
-    p=(TPaveStats*)hSideComp->FindObject("stats");
-    p->SetTextColor(kBlue);
-    cCompareSimple->cd(2);
-    hDivision->Draw();
-    cCompareSimple->Update();
-    
-    cCompareCum=new TCanvas("cCompareCum","Comparison of cumulative function",700,700);
-    
-    cCompareCum->Divide(1,2);
-    
-    cCompareCum->cd(1);
-    
-    hCumul1->SetLineColor(kRed);
-    hCumul2->SetLineColor(kBlue);
-    hCumul1->SetFillColor(kRed);
-    hCumul2->SetFillColor(kBlue);
-    hCumul1->Draw();
-    hCumul2->Draw("Sames");
-    cCompareCum->cd(2);
-    hDivCumul->Draw();
-    cCompareCum->Update();
-    p=(TPaveStats*)hCumul1->FindObject("stats");
-    p->SetTextColor(kRed);
-    p=(TPaveStats*)hCumul2->FindObject("stats");
-    p->SetTextColor(kBlue);
-    cCompareCum->Update();
-    // cCompareCum->cd(2);
-    //hCumul2->Draw();
-    //  cCompareCum->Update();
-  
-    for(Int_t timewait=0;timewait<timeWait;timewait++){
-      cCompareCum->Update();
-      cCompareSimple->Update();    
-    }
-    cout<<"Are you satisfied?"<<endl;
-    cin>>satisfied;
-    
-    if(!satisfied){
-     
-    
-      delete hCumul1;
-      delete hCumul2;
-      delete hDivCumul;
-      delete cCompareCum;
-      delete hSideComp;
-      delete hGausComp;
-      delete cCompareSimple;
-      delete hDivision;
-   
-      cout<<"Rebin"<<endl;
-      cin>>rebin;
-      if(rebin<0)return;
-    }
-  }
-  
-  return;
-  
-}
-
-///////////////////////////////////////   BACKGROUND SUBTRACTION EXAMPLE       ///////////////////
-//
-//
-//   Performs: Signal Imp.Par Distr - B* Normalized Background Imp.Par Distr.(from Side Bands) 
-//             and compare it with the MC Signal Imp. Par distribution. 
-//             The amount of Background B is taken as the true one from the difference between 
-//             the integrals of the "Observed Signal" and the MC Signal d0 distributions.
-//           
-//////////////////////////////////////////////////////////////////////////////////////////////
-
-void SubtractHist(Int_t pt,Int_t rebin=1){
-  SubtractHist("d0D0_Signal.root","d0D0NoMCSel.root","d0D0NoMCSel_SideBand.root","hd0D0",pt,rebin);
-  
-  return;
-}
-
-void SubtractHist(TString fileSignal,TString fileNoMC,TString fileNoMCSB,TString hist,Int_t pt,Int_t rebin){
-  
-  if(pt>=0){
-    hist.Append("pt");
-    hist+=pt;
-  }
-  
-  TString nameH=hist;
-  Double_t integr1,integr2;
-  /*  if(fileNoMC.IsNull())fileNoMC="d0D0merged.root";
-      if(fileNoMCSB.IsNull())fileNoMCSB="d0D0SideBmerged.root";*/
-  if(gSystem->AccessPathName(fileSignal.Data())){
-    Printf("Wrong signal file! \n");
-    return;
-  }
-  if(gSystem->AccessPathName(fileNoMC.Data())){
-    Printf("Wrong d0distr under inv mass peak file! \n");
-    return;
-  }
-  if(gSystem->AccessPathName(fileNoMCSB.Data())){
-    Printf("Wrong  d0distr Side band file! \n");
-    return;
-  }
-
-  TFile *fSide=TFile::Open(fileNoMCSB.Data());
-  TFile *fNoMCSignal=TFile::Open(fileNoMC.Data());
-  
-  TH1F *h1=(TH1F*)fNoMCSignal->Get(hist.Data());
-  nameH.Append("_SelSignal");
-  h1->SetName(nameH.Data());
-  nameH=hist;
-  h1->Sumw2();
-
-
-  TH1F *h2=(TH1F*)fSide->Get(hist.Data());
-  nameH.Append("_SideBands");
-  h2->SetName(nameH.Data());
-  h2->Sumw2();
-
-
-  Double_t integrGaus,integrSB,integrSign;
-  integrGaus=h1->Integral();
-  integrSB=h2->Integral();
-  
-
-  TFile *fSignal=TFile::Open(fileSignal.Data());
-  TH1F *hSign=(TH1F*)fSignal->Get(hist.Data());
-  nameH=hist;
-  nameH.Append("_MCSignal");
-  hSign->SetName(nameH.Data());
-  hSign->Sumw2();
-
-  Double_t integrGaus,integrSB,integrSign;
-  integrGaus=h1->Integral();
-  integrSB=h2->Integral();
-  integrSign=hSign->Integral();
-
-
-   Bool_t satisfied=kFALSE;
-   
-   while(!satisfied){
-     
-     h1->Rebin(rebin);
-     h2->Rebin(rebin);
-     hSign->Rebin(rebin);
-     
-     TH1F *hGausSubtract=new TH1F();
-     *hGausSubtract=*h1;
-     nameH=hist;
-     hist.Append("_Subtracted");
-     hGausSubtract->SetName(hist.Data());
-     //hGausSubtract->Sumw2();
-     hGausSubtract->Add(h1,h2,1.,-1./integrSB*(integrGaus-integrSign));
-     /*     hGausSubtract->Draw();
-           return;*/
-     cSubtraction=new TCanvas("cSubtraction","cSubtraction",600,700);
-     cSubtraction->cd();
-     hGausSubtract->SetLineColor(kRed);
-     hGausSubtract->Draw("E0"); 
-     hSign->SetLineColor(kBlue);
-     hSign->Draw("sames");
-     cSubtraction->Update();
-     TPaveStats *p=hGausSubtract->FindObject("stats");
-     p->SetTextColor(kRed);
-     cSubtraction->Update();
-     p=(TPaveStats*)hSign->FindObject("stats");
-     p->SetTextColor(kBlue);
-     cSubtraction->Update();
-     /*TString strText="Side Band integral: ";
-       strText+=integrSB;
-       TLatex *lat=new TLatex(500.,500.,strText.Data());// *text=p->AddText(strText.Data());
-       lat->Draw();
-       TPaveText *pvInfo = new TPaveText(72.74276,79.18782,92.84497,95.43147,"brNDC");
-       pvInfo->SetName("pvInfo");
-       pvInfo->SetBorderSize(2);
-       pvInfo->SetFillColor(19);
-       pvInfo->SetTextAlign(12);
-       TText *text=p->AddText(strText.Data());
-       pvInfo->Draw();
-       hGausSubtract->GetListOfFunctions()->Add(pvInfo);
-       //     pvInfo->SetParent(hGausSubtract->GetListOfFunctions());
-       
-       //     strText="MCSignal integral: ";
-       //strText+=integrSign;
-       text=p->AddText(strText.Data());
-       strText="Sel Signal integral: ";
-       strText+=integrGaus;
-       text=p->AddText(strText.Data());
-       cSubtraction->Modified();*/
-  
-     
-     TH1F *hCumulGausSubtract=CumulativeHist(hGausSubtract,"_BackSubtr");
-     hCumulGausSubtract->SetDrawOption("E4");
-     TH1F *hCumulSign=CumulativeHist(hSign,"_MCSignal");
-     hCumulSign->SetDrawOption("E4");
-     
-     
-     TH1F *hDivCumul=new TH1F();
-     *hDivCumul=*hCumulSign;
-     hDivCumul->Divide(hCumulGausSubtract,hCumulSign);
-     hDivCumul->SetName("RatioCumulBackSubtr_MCSignal");
-     hDivCumul->SetTitle("Ratio Cumulative BackSubtracted Over MCSignal");
-    
-     TH1F *hGausSubComp=new TH1F();
-     *hGausSubComp=*hGausSubtract;
-     nameH=hGausSubtract->GetName();
-     nameH.Append("Compare");
-     hGausSubComp->SetName(nameH.Data());
-     hGausSubComp->SetLineColor(kRed);
-     integr1=hGausSubComp->Integral();
-     
-     TH1F *hSignComp=new TH1F();
-     *hSignComp=*hSign;
-     nameH=hSign->GetName();
-     nameH.Append("Compare");
-     hSignComp->SetName(nameH.Data());
-     hSignComp->SetLineColor(kBlue);
-     integr2=hSignComp->Integral();
-     if(integr2>integr1)hSignComp->Scale(integr1/integr2);
-     else hGausSubComp->Scale(integr2/integr1);
-     
-     TH1F *hDivision=new TH1F();
-     *hDivision=*hGausSubtract;
-     hDivision->SetName("RatioBackSubtr_Signal");
-     hDivision->SetTitle("Ratio BackSubtracted Over MCSignal");
-     hDivision->Divide(hGausSubComp,hSignComp);
-     
-     
-     cCompareSubtractSimple=new TCanvas("cCompareSubtractSimple","Comparison of BackSubtracted and MCSignal",700,700);
-     cCompareSubtractSimple->Divide(1,2);
-     cCompareSubtractSimple->cd(1);
-     hSignComp->Draw();
-     hGausSubComp->Draw("Sames");
-     cCompareSubtractSimple->cd(2);
-     hDivision->SetLineColor(1);
-     hDivision->Draw();
-     cCompareSubtractSimple->Update();
-     p=(TPaveStats*)hGausSubComp->FindObject("stats");
-     p->SetTextColor(kRed);
-     p=(TPaveStats*)hSignComp->FindObject("stats");
-     p->SetTextColor(kBlue);
-     cCompareSubtractSimple->Update();
-
-     
-     cCompareSubtractCum=new TCanvas("cCompareSubtractCumulative","Comparison of cumulative functions",700,700);
-    
-    cCompareSubtractCum->Divide(1,2);
-    
-    cCompareSubtractCum->cd(1);
-    
-    hCumulGausSubtract->SetLineColor(kRed);
-    hCumulSign->SetLineColor(kBlue);
-    hCumulGausSubtract->SetFillColor(kRed);
-    hCumulSign->SetFillColor(kBlue);
-    hCumulGausSubtract->Draw();
-    hCumulSign->Draw("Sames");
-    cCompareSubtractCum->cd(2);
-    hDivCumul->SetLineColor(1);
-    hDivCumul->Draw();
-
-    cCompareSubtractCum->Update();
-    p=(TPaveStats*)hCumulGausSubtract->FindObject("stats");
-    p->SetTextColor(kRed);
-    p=(TPaveStats*)hCumulSign->FindObject("stats");
-    p->SetTextColor(kBlue);
-    cCompareSubtractCum->Update();
-
-    
-    for(Int_t timewait=0;timewait<timeWait;timewait++){
-      cCompareSubtractCum->Update();
-      cCompareSubtractSimple->Update();  
-      cSubtraction->Update();  
-    }
-
-    cout<<"Are you satisfied?"<<endl;
-    cin>>satisfied;
-    
-    if(!satisfied){
-      cout<<"Rebin"<<endl;
-      cin>>rebin;
-      delete hCumulGausSubtract;
-      delete hCumulSign;
-      delete hDivCumul;
-      delete cCompareSubtractCum;
-      delete hSignComp;
-      delete hGausSubComp;
-      delete cCompareSubtractSimple;
-      delete hDivision;
-    }
-  }
-  
-   printf("Side Band integral: %d \n",integrSB);
-   printf("Selected Signal integral: %d \n",integrGaus);
-   printf("MC Signal integral: %d \n",integrSign);
-   printf(" -> Background = %d \n",integrGaus-integrSign);
-   
-  return;
-  
-}
-
-//////////////////////////////// FIT DISTRIBUTION WITH GAUSSIAN + EXP TAILS    ///////////////////
-//
-//            Fit a istogram with a gaus(mean,sigma) + a*exp(mean2,lambda) function
-//
-/////////////////////////////////////////////////////////////////////////////////////////////////
-void DoFit(TString filename,TString histo,TString gausSide,Int_t ptbin,Int_t rebin=-1){
-
-  TString  histname=histo;
-  TString fileout=histo;
-
-  if(ptbin>=0){
-    histname.Append("pt");
-    histname+=ptbin;
-    fileout.Append("pt");
-    fileout+=ptbin;
-  }
-  else fileout.Append("ptAll");
-  
-  TFile *fIN=TFile::Open(filename.Data());
-  
-  TH1F *h=(TH1F*)fIN->Get(histname.Data());
-
-  Int_t ok=0;  
-  Int_t binL=1,binR=h->GetNbinsX();
-  
-  while(ok!=1){
-    if(rebin>0)h->Rebin(rebin);
-
-    Double_t integr=h->Integral(binL,binR);
-    Double_t binwidth=h->GetBinWidth(10);
-    Double_t minX,maxX;
-    Int_t nbin=h->GetNbinsX();
-    
-    TCanvas *c1=new TCanvas("c1","c1",700,600);
-    c1->cd();
-    //    h->SetFillColor(kRed);
-    h->Draw("");
-    //    c1->SetLogy();
-    c1->Update();
-  
-    TF1 *f=CreateFunc(integr,binwidth);
-    h->Fit(f->GetName(),"RI","",h->GetBinCenter(binL)-binwidth/2.,h->GetBinCenter(binR)+binwidth/2.);
-    c1->Update();
-    
-    cout<<"Is it ok?"<<endl;
-    cin>>ok;
-    if(ok==1){
-      fileout.Append("_");
-      fileout.Append(gausSide.Data());
-      fileout.Append("Fit.root");
-      
-      TFile *fOUT=new TFile(fileout.Data(),"RECREATE");
-      fOUT->cd();
-      c1->Write();
-      h->Write();
-      fOUT->Close();
-      delete c1;
-      delete f;
-    }
-    else if(ok==0){
-      cout<<"rebin value= ";
-      cin>>rebin;
-      cout<<endl;
-      cout<<"Change Interval?"<<endl;
-      cin>>ok;
-      if(ok){
-       cout<<"Lower value= ";
-       cin>>minX;
-       cout<<endl;
-       cout<<"Upper value= ";
-       cin>>maxX;
-       cout<<endl;
-      
-       binL=h->FindBin(minX);
-       binR=h->FindBin(maxX);
-      }
-      ok=0;
-      delete f;
-      delete c1;
-    }
-    else {
-      ok=1;
-      delete f;
-      delete c1;
-    }
-  }
-
-  return;
-}
-
-
-TF1* CreateFunc(Double_t integral,Double_t binw){
-  TF1 *func=new TF1("func","[5]*[6]*((1.-[2])*1./2./[1]*TMath::Exp(-TMath::Abs((x-[0])/[1]))+[2]/TMath::Sqrt(2*TMath::Pi())/[4]*TMath::Exp(-1*(x-[3])*(x-[3])/2./[4]/[4]))");
-
-  func->FixParameter(5,integral);
-  func->SetParName(5,"histInt");
-  func->FixParameter(6,binw);
-  func->SetParName(6,"binW");
-  func->SetParLimits(0,-100,100.);
-  func->SetParName(0,"expMean");
-  func->SetParLimits(1,0.001,1000);
-  func->SetParName(1,"expDecay");
-  func->SetParLimits(2,0.00001,1.);
-  func->SetParName(2,"fracGaus");
-  func->SetParLimits(3,-100,100.);
-  func->SetParName(3,"gausMean");
-  func->SetParLimits(4,5.,200.);
-  func->SetParName(4,"gausSigma");
-
-  func->SetParameter(1,50.);
-  func->SetParameter(4,50.);
-  
-  return func;
-
-}
-
-////////////////////////////////// CHI2 TEST: ////////////////////////
-//                               IN PROGRESS
-//
-///////////////////////////////////////////////////////////////////////////////
-Double_t GetChi2(const TH1F *h1,const TH1F *h2,TH1F *hchi2,Int_t &ndof){//ASSUME SAME BINNING
-  
-  Int_t int1=h1->Integral();
-  Int_t int2=h2->Integral();
-  Int_t nm,nM;
-  TH1F **h=new TH1F*[2];
-  TH1F *hchisq=new TH1F("hChi2","Chi2 histo",1000,0.,10.);
-  
-  if(int2>int1){
-    nM=int2;
-    nm=int1;
-    h[0]=h2;
-    h[1]=h1;
-  }
-  else {
-    nM=int1;
-    nm=int2;
-    h[0]=h1;
-    h[1]=h2;
-  }
-  ndof=0;
-  Int_t nbin=h[0]->GetNbinsX();//ASSUME SAME BINNING
-  
-  Double_t chi2=0.,chi2Sum=0.;
-  Double_t f1,fTrue;
-  for(Int_t j=1;j<=nbin;j++){//THE BINNING IS NOT TAKEN INTO ACCOUNT
-    
-    if(h[1]->GetBinContent(j)==0||h[0]->GetBinContent(j)==0)continue;
-    fTrue=h[0]->GetBinContent(j)/nM;
-    chi2=(h[1]->GetBinContent(j)-fTrue*nm)*(h[1]->GetBinContent(j)-fTrue*nm)/h[1]->GetBinContent(j);
-    hchisq->Fill(chi2);
-    chi2Sum+=chi2;
-    ndof++;
-  }
-  
-  *hchi2=*hchisq;
-  delete hchisq;
-
-  return chi2Sum;
-  
-
-}
-
-void TestChi2(){
-
-
-  TH1F *h1=new TH1F("h1","h1",50,-10.,10.);
-  TH1F *h2=new TH1F("h2","h2",50,-10.,10.);
-  
-  h1->FillRandom("gaus",50000);
-  h2->FillRandom("gaus",80000);
-  TH1F *hchi2=new TH1F();
-  Int_t ndof;
-  Double_t chi2=GetChi2(h1,h2,hchi2,ndof);
-  hchi2->Draw();
-  cout<<"The chi2 is "<<chi2;
-}
\ No newline at end of file