]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG0/dNdEta/makeCorrection2.C
AliPWG0depHelper: function to find mother among the primaries
[u/mrichter/AliRoot.git] / PWG0 / dNdEta / makeCorrection2.C
1 /* $Id$ */
2
3 //
4 // Script to make correction maps for dndeta measurements using the
5 // dNdEtaCorrection class.
6 //
7 // implementation with TSelector
8 //
9
10 #include "../CreateESDChain.C"
11 #include "../PWG0Helper.C"
12
13 void makeCorrection2(Char_t* dataDir, Int_t nRuns=20, Int_t offset = 0, Bool_t debug = kFALSE, Bool_t aProof = kFALSE, const Char_t* option = "", const Char_t* proofConnect = "proof01@lxb6046")
14 {
15   if (aProof)
16     connectProof(proofConnect);
17
18   TString libraries("libEG;libGeom;libESD;libPWG0base;libVMC;libMinuit;libSTEER;libPWG0dep;libEVGEN;libFASTSIM;libmicrocern;libpdf;libpythia6;libEGPythia6;libAliPythia6");
19   TString packages("PWG0base;PWG0dep");
20
21   if (!prepareQuery(libraries, packages, kTRUE))
22     return;
23
24   gROOT->ProcessLine(".L CreateCuts.C");
25
26   AliESDtrackCuts* esdTrackCuts = CreateTrackCuts();
27   if (!esdTrackCuts)
28   {
29     printf("ERROR: esdTrackCuts could not be created\n");
30     return;
31   }
32
33   TList inputList;
34   inputList.Add(esdTrackCuts);
35
36   TChain* chain = CreateESDChain(dataDir, nRuns, offset);
37
38   TString selector("AlidNdEtaCorrectionSelector.cxx++");
39   if (debug != kFALSE)
40     selector += "g";
41
42   Int_t result = executeQuery(chain, &inputList, selector, option);
43 }
44
45 void VerifyCorrection(Int_t draw = 0, const char* correctionMapFile = "correction_map.root", const char* correctionMapFolder = "dndeta_correction", const char* analysisDir = "dndetaESD", const char* checkDir = "dndetaMC")
46 {
47   gSystem->Load("libPWG0base");
48
49   AlidNdEtaCorrection* dNdEtaCorrection = new AlidNdEtaCorrection(correctionMapFolder, correctionMapFolder);
50   dNdEtaCorrection->LoadHistograms(correctionMapFile, correctionMapFolder);
51   dNdEtaCorrection->SetName("dndeta_correction");
52   dNdEtaCorrection->SetTitle("dndeta_correction");
53
54   TFile::Open(correctionMapFile);
55
56   dNdEtaAnalysis* fdNdEtaAnalysis = new dNdEtaAnalysis(analysisDir, analysisDir);
57   fdNdEtaAnalysis->LoadHistograms();
58
59   // correct with track2particle
60   TH3F* hist = fdNdEtaAnalysis->GetHistogram();
61   for (Int_t x=1; x<=hist->GetNbinsX(); ++x)
62     for (Int_t y=1; y<=hist->GetNbinsY(); ++y)
63       for (Int_t z=1; z<=hist->GetNbinsZ(); ++z)
64       {
65         Float_t correction = dNdEtaCorrection->GetTrack2ParticleCorrection(hist->GetXaxis()->GetBinCenter(x), hist->GetYaxis()->GetBinCenter(y), hist->GetZaxis()->GetBinCenter(z));
66         Float_t value = hist->GetBinContent(x, y, z);
67
68         hist->SetBinContent(x, y, z, correction * value);
69       }
70
71   fdNdEtaAnalysis->Finish(dNdEtaCorrection, 0.3);
72
73   dNdEtaAnalysis* fdNdEtaAnalysisMC = new dNdEtaAnalysis(checkDir, checkDir);
74   fdNdEtaAnalysisMC->LoadHistograms();
75
76   fdNdEtaAnalysisMC->Finish(0, 0.3);
77
78   if (draw == 0)
79     fdNdEtaAnalysis->DrawHistograms();
80   else if (draw == 1)
81     fdNdEtaAnalysisMC->DrawHistograms();
82   else
83   {
84     for (Int_t i=0; i<dNdEtaAnalysis::kVertexBinning; ++i)
85       fdNdEtaAnalysis->GetdNdEtaHistogram(i)->Divide(fdNdEtaAnalysisMC->GetdNdEtaHistogram(i));
86
87     fdNdEtaAnalysis->DrawHistograms();
88   }
89 }