]>
Commit | Line | Data |
---|---|---|
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 | 27 | ClassImp(AlidNdEtaAnalysisMCSelector) |
28 | ||
dc740de4 | 29 | AlidNdEtaAnalysisMCSelector::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 | ||
43 | AlidNdEtaAnalysisMCSelector::~AlidNdEtaAnalysisMCSelector() | |
44 | { | |
45 | // | |
46 | // Destructor | |
47 | // | |
48 | } | |
49 | ||
16e24ca3 | 50 | void 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 | 72 | void 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 | 81 | Bool_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 | 173 | void 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 | 197 | void 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 | } |