]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG0/dNdEta/AlidNdEtaAnalysisMCSelector.cxx
adapting dndeta analysis to new AliCorrection schema
[u/mrichter/AliRoot.git] / PWG0 / dNdEta / AlidNdEtaAnalysisMCSelector.cxx
CommitLineData
dc740de4 1/* $Id$ */
2
4dd2ad81 3#include "AlidNdEtaAnalysisMCSelector.h"
4
5#include <TStyle.h>
6#include <TSystem.h>
7#include <TCanvas.h>
8#include <TParticle.h>
9#include <TParticlePDG.h>
10#include <TVector3.h>
5af55649 11#include <TH1F.h>
dc740de4 12#include <TH3F.h>
7029240a 13#include <TTree.h>
16e24ca3 14#include <TFile.h>
4dd2ad81 15
16#include <AliLog.h>
17#include <AliGenEventHeader.h>
7029240a 18#include <AliHeader.h>
0bd1f8a0 19#include <AliStack.h>
4dd2ad81 20
16e24ca3 21#include "dNdEta/dNdEtaAnalysis.h"
74fd10b3 22#include <AliPWG0Helper.h>
23#include <AliCorrection.h>
24#include <AliCorrectionMatrix2D.h>
4dd2ad81 25
dc740de4 26
4dd2ad81 27ClassImp(AlidNdEtaAnalysisMCSelector)
28
dc740de4 29AlidNdEtaAnalysisMCSelector::AlidNdEtaAnalysisMCSelector() :
16e24ca3 30 AliSelectorRL(),
31 fdNdEtaAnalysis(0),
c69449cc 32 fdNdEtaAnalysisTr(0),
33 fdNdEtaAnalysisTrVtx(0),
5af55649 34 fVertex(0),
74fd10b3 35 fPartPt(0),
36 fEvents(0)
4dd2ad81 37{
38 //
39 // Constructor. Initialization of pointers
40 //
41}
42
43AlidNdEtaAnalysisMCSelector::~AlidNdEtaAnalysisMCSelector()
44{
45 //
46 // Destructor
47 //
48}
49
16e24ca3 50void AlidNdEtaAnalysisMCSelector::SlaveBegin(TTree * tree)
51{
52 // The SlaveBegin() function is called after the Begin() function.
53 // When running with PROOF SlaveBegin() is called on each slave server.
54 // The tree argument is deprecated (on PROOF 0 is passed).
55
56 AliSelectorRL::SlaveBegin(tree);
57
58 fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
c69449cc 59 fdNdEtaAnalysisTr = new dNdEtaAnalysis("dndetaTr", "dndetaTr");
60 fdNdEtaAnalysisTrVtx = new dNdEtaAnalysis("dndetaTrVtx", "dndetaTrVtx");
0bd1f8a0 61 fVertex = new TH3F("vertex_check", "vertex_check", 50, -50, 50, 50, -50, 50, 50, -50, 50);
c69449cc 62 for (Int_t i=0; i<3; ++i)
63 {
74fd10b3 64 fPartEta[i] = new TH1F(Form("dndeta_check_%d", i), Form("dndeta_check_%d", i), 60, -6, 6);
c69449cc 65 fPartEta[i]->Sumw2();
66 }
4c351225 67 fPartPt = new TH1F("dndeta_check_pt", "dndeta_check_pt", 1000, 0, 10);
c69449cc 68 fPartPt->Sumw2();
74fd10b3 69 fEvents = new TH1F("dndeta_check_vertex", "dndeta_check_vertex", 40, -20, 20);
16e24ca3 70}
71
944f0536 72void AlidNdEtaAnalysisMCSelector::Init(TTree *tree)
73{
16e24ca3 74 AliSelectorRL::Init(tree);
944f0536 75
4c351225 76 tree->SetBranchStatus("*", 0);
c69449cc 77 tree->SetBranchStatus("fTriggerMask", 1);
78 tree->SetBranchStatus("fSPDVertex*", 1);
944f0536 79}
80
4dd2ad81 81Bool_t AlidNdEtaAnalysisMCSelector::Process(Long64_t entry)
82{
16e24ca3 83 // fill the dNdEtaAnalysis class from the monte carlo
4dd2ad81 84
16e24ca3 85 if (AliSelectorRL::Process(entry) == kFALSE)
4dd2ad81 86 return kFALSE;
87
c69449cc 88 // Check prerequisites
89 if (!fESD)
90 {
91 AliDebug(AliLog::kError, "ESD branch not available");
92 return kFALSE;
93 }
94
0bd1f8a0 95 AliStack* stack = GetStack();
96 if (!stack)
dc740de4 97 {
0bd1f8a0 98 AliDebug(AliLog::kError, "Stack not available");
4dd2ad81 99 return kFALSE;
dc740de4 100 }
101
102 AliHeader* header = GetHeader();
103 if (!header)
104 {
105 AliDebug(AliLog::kError, "Header not available");
106 return kFALSE;
107 }
4dd2ad81 108
c69449cc 109 Bool_t vertexReconstructed = AliPWG0Helper::IsVertexReconstructed(fESD);
110 Bool_t eventTriggered = AliPWG0Helper::IsEventTriggered(fESD);
111
4dd2ad81 112 // get the MC vertex
dc740de4 113 AliGenEventHeader* genHeader = header->GenEventHeader();
4dd2ad81 114
115 TArrayF vtxMC(3);
116 genHeader->PrimaryVertex(vtxMC);
117
0bd1f8a0 118 // loop over mc particles
119 Int_t nPrim = stack->GetNprimary();
4dd2ad81 120
74fd10b3 121 Int_t nAcceptedParticles = 0;
122
0bd1f8a0 123 for (Int_t iMc = 0; iMc < nPrim; ++iMc)
4dd2ad81 124 {
0bd1f8a0 125 TParticle* particle = stack->Particle(iMc);
4dd2ad81 126
127 if (!particle)
128 continue;
129
45e97e28 130 if (AliPWG0Helper::IsPrimaryCharged(particle, nPrim) == kFALSE)
4dd2ad81 131 continue;
132
0bd1f8a0 133 AliDebug(AliLog::kDebug+1, Form("Accepted primary %d, unique ID: %d", iMc, particle->GetUniqueID()));
74fd10b3 134 ++nAcceptedParticles;
dc740de4 135
74fd10b3 136 fdNdEtaAnalysis->FillTrack(vtxMC[2], particle->Eta(), particle->Pt());
dc740de4 137 fVertex->Fill(particle->Vx(), particle->Vy(), particle->Vz());
5af55649 138
c69449cc 139 if (eventTriggered)
140 {
74fd10b3 141 fdNdEtaAnalysisTr->FillTrack(vtxMC[2], particle->Eta(), particle->Pt());
c69449cc 142 if (vertexReconstructed)
74fd10b3 143 fdNdEtaAnalysisTrVtx->FillTrack(vtxMC[2], particle->Eta(), particle->Pt());
c69449cc 144 }
145
74fd10b3 146 if (TMath::Abs(vtxMC[2]) < 20)
c69449cc 147 {
148 fPartEta[0]->Fill(particle->Eta());
149
150 if (vtxMC[2] < 0)
151 fPartEta[1]->Fill(particle->Eta());
152 else
153 fPartEta[2]->Fill(particle->Eta());
154 }
4c351225 155
156 if (TMath::Abs(particle->Eta()) < 0.8)
157 fPartPt->Fill(particle->Pt());
4dd2ad81 158 }
74fd10b3 159
160 fEvents->Fill(vtxMC[2]);
161
162 fdNdEtaAnalysis->FillEvent(vtxMC[2], nAcceptedParticles);
c69449cc 163 if (eventTriggered)
164 {
74fd10b3 165 fdNdEtaAnalysisTr->FillEvent(vtxMC[2], nAcceptedParticles);
c69449cc 166 if (vertexReconstructed)
74fd10b3 167 fdNdEtaAnalysisTrVtx->FillEvent(vtxMC[2], nAcceptedParticles);
c69449cc 168 }
5af55649 169
4dd2ad81 170 return kTRUE;
171}
dc740de4 172
16e24ca3 173void AlidNdEtaAnalysisMCSelector::SlaveTerminate()
174{
175 // The SlaveTerminate() function is called after all entries or objects
176 // have been processed. When running with PROOF SlaveTerminate() is called
177 // on each slave server.
178
179 AliSelectorRL::SlaveTerminate();
180
181 // Add the histograms to the output on each slave server
182 if (!fOutput)
183 {
184 AliDebug(AliLog::kError, Form("ERROR: Output list not initialized."));
185 return;
186 }
187
188 fOutput->Add(fdNdEtaAnalysis);
c69449cc 189 fOutput->Add(fdNdEtaAnalysisTr);
190 fOutput->Add(fdNdEtaAnalysisTrVtx);
4c351225 191 fOutput->Add(fPartPt);
74fd10b3 192 fOutput->Add(fEvents);
c69449cc 193 for (Int_t i=0; i<3; ++i)
194 fOutput->Add(fPartEta[i]);
16e24ca3 195}
196
dc740de4 197void AlidNdEtaAnalysisMCSelector::Terminate()
198{
16e24ca3 199 //
200
201 AliSelectorRL::Terminate();
202
203 fdNdEtaAnalysis = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndeta"));
c69449cc 204 fdNdEtaAnalysisTr = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndetaTr"));
205 fdNdEtaAnalysisTrVtx = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndetaTrVtx"));
4c351225 206 fPartPt = dynamic_cast<TH1F*> (fOutput->FindObject("dndeta_check_pt"));
74fd10b3 207 fEvents = dynamic_cast<TH1F*> (fOutput->FindObject("dndeta_check_vertex"));
c69449cc 208 for (Int_t i=0; i<3; ++i)
209 fPartEta[i] = dynamic_cast<TH1F*> (fOutput->FindObject(Form("dndeta_check_%d", i)));
16e24ca3 210
74fd10b3 211 if (!fdNdEtaAnalysis || !fdNdEtaAnalysisTr || !fdNdEtaAnalysisTrVtx || !fPartPt || !fEvents)
16e24ca3 212 {
4c351225 213 AliDebug(AliLog::kError, Form("ERROR: Histograms not available %p %p", (void*) fdNdEtaAnalysis, (void*) fPartPt));
16e24ca3 214 return;
215 }
216
d09fb536 217 fdNdEtaAnalysis->Finish(0, -1);
c69449cc 218 fdNdEtaAnalysisTr->Finish(0, -1);
219 fdNdEtaAnalysisTrVtx->Finish(0, -1);
220
74fd10b3 221 Int_t events = (Int_t) fdNdEtaAnalysis->GetData()->GetEventCorrection()->GetMeasuredHistogram()->Integral();
c69449cc 222 fPartPt->Scale(1.0/events);
223 fPartPt->Scale(1.0/fPartPt->GetBinWidth(1));
224
225 if (fPartEta[0])
226 {
74fd10b3 227 Int_t events1 = (Int_t) fEvents->Integral(fEvents->GetXaxis()->FindBin(-19.9), fEvents->GetXaxis()->FindBin(-0.001));
228 Int_t events2 = (Int_t) fEvents->Integral(fEvents->GetXaxis()->FindBin(0.001), fEvents->GetXaxis()->FindBin(19.9));
c69449cc 229
230 fPartEta[0]->Scale(1.0 / (events1 + events2));
231 fPartEta[1]->Scale(1.0 / events1);
232 fPartEta[2]->Scale(1.0 / events2);
233
234 for (Int_t i=0; i<3; ++i)
235 fPartEta[i]->Scale(1.0 / fPartEta[i]->GetBinWidth(1));
236
237 new TCanvas("control", "control", 500, 500);
238 for (Int_t i=0; i<3; ++i)
239 {
240 fPartEta[i]->SetLineColor(i+1);
241 fPartEta[i]->Draw((i==0) ? "" : "SAME");
242 }
243 }
d09fb536 244
16e24ca3 245 TFile* fout = new TFile("analysis_mc.root","RECREATE");
246
247 fdNdEtaAnalysis->SaveHistograms();
c69449cc 248 fdNdEtaAnalysisTr->SaveHistograms();
249 fdNdEtaAnalysisTrVtx->SaveHistograms();
250 fPartPt->Write();
16e24ca3 251
252 fout->Write();
253 fout->Close();
dc740de4 254
4c351225 255 if (fPartPt)
256 {
4c351225 257 new TCanvas("control2", "control2", 500, 500);
c69449cc 258 fPartPt->DrawCopy();
4c351225 259 }
74fd10b3 260
261 if (fEvents)
262 {
263 new TCanvas("control3", "control3", 500, 500);
264 fEvents->DrawCopy();
265 }
dc740de4 266}