ROOT logo
/***************************************************************
 processFemtoQA.C
 Post Processing of Femto QA task in Analysis QA train
 Author: Maciej Szymanski, maszyman@cern.ch
***************************************************************/

enum collidingSystem {
  PbPb,
  pPb,
  pp
};

Double_t calculateNormalizationFactor(TH1D *num,TH1D *den, Double_t qlo=0.3,Double_t qhi=0.4)
{
  Double_t binlo = num->GetXaxis()->FindFixBin(qlo);
  Double_t binhi = num->GetXaxis()->FindFixBin(qhi);
  Double_t integralNum = num->Integral(binlo, binhi);
  Double_t integralDen = den->Integral(binlo, binhi);
  return integralDen / integralNum;
}

void processFemtoQA(const char *filePath = "AnalysisResults.root",
                    const char *listname = "femtolist",
                    const char *suffix = "png",
                    enum collidingSystem system = PbPb) {

  TFile *_file = new TFile(filePath,"read");
  TList* _femtolist = (TList*)_file->Get(Form("PWG2FEMTO/%s",listname));

  // 1D pion correlation function low kT
  TH1D* numCFlowkT = (TH1D*)_femtolist->FindObject("NumcqinvpimtpcM0kT0");
  TH1D* denCFlowkT = (TH1D*)_femtolist->FindObject("DencqinvpimtpcM0kT0");
  Double_t norm = calculateNormalizationFactor(numCFlowkT,denCFlowkT,0.4,0.45 );
  numCFlowkT->Divide(denCFlowkT);
  numCFlowkT->Scale(norm);
  numCFlowkT->SetXTitle("q_{inv} (GeV/c)");
  numCFlowkT->SetYTitle("C(q_{inv})");
  numCFlowkT->GetXaxis()->SetRangeUser(0,0.5);
  numCFlowkT->GetYaxis()->SetRangeUser(0.5,2.5);

  // 1D pion correlation function high kT
  TH1D* numCFhighkT = (TH1D*)_femtolist->FindObject("NumcqinvpimtpcM0kT3");
  TH1D* denCFhighkt = (TH1D*)_femtolist->FindObject("DencqinvpimtpcM0kT3");
  Double_t norm = calculateNormalizationFactor(numCFhighkT,denCFhighkt,0.4,0.45 );
  numCFhighkT->Divide(denCFhighkt);
  numCFhighkT->Scale(norm);
  numCFhighkT->SetXTitle("q_{inv} (GeV/c)");
  numCFhighkT->SetYTitle("C(q_{inv})");
  numCFhighkT->SetTitle(Form());
  numCFhighkT->GetXaxis()->SetRangeUser(0,0.5);
  numCFhighkT->GetYaxis()->SetRangeUser(0.5,2.5);

  // delta eta - delta phi* low kT
  TH2D* numPhiEtalowkT = (TH2D*)_femtolist->FindObject("NumRadDPhistarEtapimtpcM0kT0");
  TH2D* denPhiEtalowkT = (TH2D*)_femtolist->FindObject("DenRadDPhistarEtapimtpcM0kT0");
  numPhiEtalowkT->Divide(denPhiEtalowkT);
  numPhiEtalowkT->SetXTitle("#Delta #phi*");
  numPhiEtalowkT->SetYTitle("#Delta #eta");
  numPhiEtalowkT->SetTitle(Form());

  // delta eta - delta phi* high kT
  TH2D* numPhiEtahighkT = (TH2D*)_femtolist->FindObject("NumRadDPhistarEtapimtpcM0kT3");
  TH2D* denPhiEtahighkt = (TH2D*)_femtolist->FindObject("DenRadDPhistarEtapimtpcM0kT3");
  numPhiEtahighkT->Divide(denPhiEtahighkt);
  numPhiEtahighkT->SetXTitle("#Delta #phi*");
  numPhiEtahighkT->SetYTitle("#Delta #eta");
  numPhiEtahighkT->SetTitle(Form());

  // qinv vs. separation at TPC entrance low kT
  TH2D* numQinvEtpclowkT = (TH2D*)_femtolist->FindObject("NumDTPCPhistarEtapimtpcM0kT0");
  TH2D* denQinvEtpclowkT = (TH2D*)_femtolist->FindObject("DenDTPCPhistarEtapimtpcM0kT0");
  numQinvEtpclowkT->Divide(denQinvEtpclowkT);
  numQinvEtpclowkT->SetXTitle("q_{inv} (GeV/c)");
  numQinvEtpclowkT->SetYTitle("separation at TPC entrance");
  numQinvEtpclowkT->SetTitle(Form());

  // qinv vs. separation at TPC entrance high kT
  TH2D* numQinvEtpchighkT = (TH2D*)_femtolist->FindObject("NumDTPCPhistarEtapimtpcM0kT3");
  TH2D* denQinvEtpchighkt = (TH2D*)_femtolist->FindObject("DenDTPCPhistarEtapimtpcM0kT3");
  numQinvEtpchighkT->Divide(denQinvEtpchighkt);
  numQinvEtpchighkT->SetXTitle("q_{inv} (GeV/c)");
  numQinvEtpchighkT->SetYTitle("separation at TPC entrance");
  numQinvEtpchighkT->SetTitle(Form());

  if ( system == PbPb ) {
    numCFlowkT->SetTitle("#pi^{-}#pi^{-} 0-10%, 0.2 < k_{T} < 0.3 GeV/c");
    numCFhighkT->SetTitle("#pi^{-}#pi^{-} 0-10%, 0.6 < k_{T} < 0.7 GeV/c");
  }
  else if ( system == pPb ) {
    numCFlowkT->SetTitle("#pi^{-}#pi^{-} 0-20%, 0.2 < k_{T} < 0.3 GeV/c");
    numCFhighkT->SetTitle("#pi^{-}#pi^{-} 0-20%, 0.6 < k_{T} < 0.7 GeV/c");
  }
  else if ( system == pp ) {
    numCFlowkT->SetTitle("#pi^{-}#pi^{-} N_{ch} 50-150, 0.2 < k_{T} < 0.3 GeV/c");
    numCFhighkT->SetTitle("#pi^{-}#pi^{-} N_{ch} 50-150, 0.6 < k_{T} < 0.7 GeV/c");
  }

  gStyle->SetOptStat(0);
  TCanvas* _can = new TCanvas("Femto QA","Femto QA");
  _can->Divide(2,3);
  _can->cd(1);
  numCFlowkT->Draw();
  _can->cd(2);
  numCFhighkT->Draw();
  _can->cd(3);
  numPhiEtalowkT->Draw("colz");
  _can->cd(4);
  numPhiEtahighkT->Draw("colz");
  _can->cd(5);
  numQinvEtpclowkT->Draw("colz");
  _can->cd(6);
  numQinvEtpchighkT->Draw("colz");

  _can->SaveAs(Form("fig_cf_FemtoQA.%s",suffix));

  _file->Close();

  delete _file;
  delete _can;
}
 processFemtoQA.C:1
 processFemtoQA.C:2
 processFemtoQA.C:3
 processFemtoQA.C:4
 processFemtoQA.C:5
 processFemtoQA.C:6
 processFemtoQA.C:7
 processFemtoQA.C:8
 processFemtoQA.C:9
 processFemtoQA.C:10
 processFemtoQA.C:11
 processFemtoQA.C:12
 processFemtoQA.C:13
 processFemtoQA.C:14
 processFemtoQA.C:15
 processFemtoQA.C:16
 processFemtoQA.C:17
 processFemtoQA.C:18
 processFemtoQA.C:19
 processFemtoQA.C:20
 processFemtoQA.C:21
 processFemtoQA.C:22
 processFemtoQA.C:23
 processFemtoQA.C:24
 processFemtoQA.C:25
 processFemtoQA.C:26
 processFemtoQA.C:27
 processFemtoQA.C:28
 processFemtoQA.C:29
 processFemtoQA.C:30
 processFemtoQA.C:31
 processFemtoQA.C:32
 processFemtoQA.C:33
 processFemtoQA.C:34
 processFemtoQA.C:35
 processFemtoQA.C:36
 processFemtoQA.C:37
 processFemtoQA.C:38
 processFemtoQA.C:39
 processFemtoQA.C:40
 processFemtoQA.C:41
 processFemtoQA.C:42
 processFemtoQA.C:43
 processFemtoQA.C:44
 processFemtoQA.C:45
 processFemtoQA.C:46
 processFemtoQA.C:47
 processFemtoQA.C:48
 processFemtoQA.C:49
 processFemtoQA.C:50
 processFemtoQA.C:51
 processFemtoQA.C:52
 processFemtoQA.C:53
 processFemtoQA.C:54
 processFemtoQA.C:55
 processFemtoQA.C:56
 processFemtoQA.C:57
 processFemtoQA.C:58
 processFemtoQA.C:59
 processFemtoQA.C:60
 processFemtoQA.C:61
 processFemtoQA.C:62
 processFemtoQA.C:63
 processFemtoQA.C:64
 processFemtoQA.C:65
 processFemtoQA.C:66
 processFemtoQA.C:67
 processFemtoQA.C:68
 processFemtoQA.C:69
 processFemtoQA.C:70
 processFemtoQA.C:71
 processFemtoQA.C:72
 processFemtoQA.C:73
 processFemtoQA.C:74
 processFemtoQA.C:75
 processFemtoQA.C:76
 processFemtoQA.C:77
 processFemtoQA.C:78
 processFemtoQA.C:79
 processFemtoQA.C:80
 processFemtoQA.C:81
 processFemtoQA.C:82
 processFemtoQA.C:83
 processFemtoQA.C:84
 processFemtoQA.C:85
 processFemtoQA.C:86
 processFemtoQA.C:87
 processFemtoQA.C:88
 processFemtoQA.C:89
 processFemtoQA.C:90
 processFemtoQA.C:91
 processFemtoQA.C:92
 processFemtoQA.C:93
 processFemtoQA.C:94
 processFemtoQA.C:95
 processFemtoQA.C:96
 processFemtoQA.C:97
 processFemtoQA.C:98
 processFemtoQA.C:99
 processFemtoQA.C:100
 processFemtoQA.C:101
 processFemtoQA.C:102
 processFemtoQA.C:103
 processFemtoQA.C:104
 processFemtoQA.C:105
 processFemtoQA.C:106
 processFemtoQA.C:107
 processFemtoQA.C:108
 processFemtoQA.C:109
 processFemtoQA.C:110
 processFemtoQA.C:111
 processFemtoQA.C:112
 processFemtoQA.C:113
 processFemtoQA.C:114
 processFemtoQA.C:115
 processFemtoQA.C:116
 processFemtoQA.C:117
 processFemtoQA.C:118
 processFemtoQA.C:119
 processFemtoQA.C:120
 processFemtoQA.C:121