3 #include "AlidNdEtaCorrection.h"
9 #include <AliCorrection.h>
10 #include <AliCorrectionMatrix2D.h>
11 #include <AliCorrectionMatrix3D.h>
13 //____________________________________________________________________
14 ClassImp(AlidNdEtaCorrection)
16 //____________________________________________________________________
17 AlidNdEtaCorrection::AlidNdEtaCorrection()
19 fTrack2ParticleCorrection(0),
20 fVertexRecoCorrection(0),
21 fTriggerBiasCorrectionMBToINEL(0),
22 fTriggerBiasCorrectionMBToNSD(0),
23 fTriggerBiasCorrectionMBToND(0)
25 // default constructor
28 //____________________________________________________________________
29 AlidNdEtaCorrection::AlidNdEtaCorrection(const Char_t* name, const Char_t* title)
30 : TNamed(name, title),
31 fTrack2ParticleCorrection(0),
32 fVertexRecoCorrection(0),
33 fTriggerBiasCorrectionMBToINEL(0),
34 fTriggerBiasCorrectionMBToNSD(0),
35 fTriggerBiasCorrectionMBToND(0)
41 fTrack2ParticleCorrection = new AliCorrection("Track2Particle", "Track2Particle");
42 fVertexRecoCorrection = new AliCorrection("VertexReconstruction", "VertexReconstruction");
44 fTriggerBiasCorrectionMBToINEL = new AliCorrection("TriggerBias_MBToINEL", "TriggerBias_MBToINEL");
45 fTriggerBiasCorrectionMBToNSD = new AliCorrection("TriggerBias_MBToNSD", "TriggerBias_MBToNSD");
46 fTriggerBiasCorrectionMBToND = new AliCorrection("TriggerBias_MBToND", "TriggerBias_MBToND");
49 //____________________________________________________________________
50 AlidNdEtaCorrection::~AlidNdEtaCorrection()
54 if (fTrack2ParticleCorrection) {
55 delete fTrack2ParticleCorrection;
56 fTrack2ParticleCorrection = 0;
59 if (fVertexRecoCorrection) {
60 delete fVertexRecoCorrection;
61 fVertexRecoCorrection = 0;
64 if (fTriggerBiasCorrectionMBToINEL) {
65 delete fTriggerBiasCorrectionMBToINEL;
66 fTriggerBiasCorrectionMBToINEL = 0;
69 if (fTriggerBiasCorrectionMBToNSD) {
70 delete fTriggerBiasCorrectionMBToNSD;
71 fTriggerBiasCorrectionMBToNSD = 0;
74 if (fTriggerBiasCorrectionMBToND) {
75 delete fTriggerBiasCorrectionMBToND;
76 fTriggerBiasCorrectionMBToND = 0;
80 //____________________________________________________________________
82 AlidNdEtaCorrection::Finish() {
86 // divide the histograms in the AliCorrectionMatrix2D objects to get the corrections
88 fTrack2ParticleCorrection->Divide();
89 fVertexRecoCorrection->Divide();
90 fTriggerBiasCorrectionMBToINEL->Divide();
91 fTriggerBiasCorrectionMBToNSD->Divide();
92 fTriggerBiasCorrectionMBToND->Divide();
95 //____________________________________________________________________
96 Long64_t AlidNdEtaCorrection::Merge(TCollection* list)
98 // Merge a list of dNdEtaCorrection objects with this (needed for
100 // Returns the number of merged objects (including this).
108 TIterator* iter = list->MakeIterator();
111 // collections of measured and generated histograms
112 TList* collectionNtrackToNparticle = new TList;
113 TList* collectionVertexReco = new TList;
114 TList* collectionTriggerBiasMBToINEL = new TList;
115 TList* collectionTriggerBiasMBToNSD = new TList;
116 TList* collectionTriggerBiasMBToND = new TList;
119 while ((obj = iter->Next())) {
121 AlidNdEtaCorrection* entry = dynamic_cast<AlidNdEtaCorrection*> (obj);
125 collectionNtrackToNparticle ->Add(entry->fTrack2ParticleCorrection);
126 collectionVertexReco ->Add(entry->fVertexRecoCorrection);
127 collectionTriggerBiasMBToINEL->Add(entry->fTriggerBiasCorrectionMBToINEL);
128 collectionTriggerBiasMBToNSD ->Add(entry->fTriggerBiasCorrectionMBToNSD);
129 collectionTriggerBiasMBToND ->Add(entry->fTriggerBiasCorrectionMBToND);
133 fTrack2ParticleCorrection ->Merge(collectionNtrackToNparticle);
134 fVertexRecoCorrection ->Merge(collectionVertexReco);
135 fTriggerBiasCorrectionMBToINEL ->Merge(collectionTriggerBiasMBToINEL);
136 fTriggerBiasCorrectionMBToNSD ->Merge(collectionTriggerBiasMBToNSD);
137 fTriggerBiasCorrectionMBToND ->Merge(collectionTriggerBiasMBToND);
139 delete collectionNtrackToNparticle;
140 delete collectionVertexReco;
141 delete collectionTriggerBiasMBToINEL;
142 delete collectionTriggerBiasMBToNSD;
143 delete collectionTriggerBiasMBToND;
148 //____________________________________________________________________
149 Bool_t AlidNdEtaCorrection::LoadHistograms(const Char_t* dir)
152 // loads the histograms
153 // if dir is empty a directory with the name of this object is taken (like in SaveHistogram)
159 if (!gDirectory->cd(dir))
162 fTrack2ParticleCorrection ->LoadHistograms();
163 fVertexRecoCorrection ->LoadHistograms();
164 fTriggerBiasCorrectionMBToINEL ->LoadHistograms();
165 fTriggerBiasCorrectionMBToNSD ->LoadHistograms();
166 fTriggerBiasCorrectionMBToND ->LoadHistograms();
168 gDirectory->cd("..");
173 //____________________________________________________________________
174 void AlidNdEtaCorrection::SaveHistograms()
177 // save the histograms
180 gDirectory->mkdir(fName.Data());
181 gDirectory->cd(fName.Data());
183 fTrack2ParticleCorrection ->SaveHistograms();
184 fVertexRecoCorrection ->SaveHistograms();
185 fTriggerBiasCorrectionMBToINEL->SaveHistograms();
186 fTriggerBiasCorrectionMBToNSD ->SaveHistograms();
187 fTriggerBiasCorrectionMBToND ->SaveHistograms();
189 gDirectory->cd("..");
192 //____________________________________________________________________
193 void AlidNdEtaCorrection::DrawHistograms()
196 // call the draw histogram method of the correction
199 fTrack2ParticleCorrection ->DrawHistograms();
200 fVertexRecoCorrection ->DrawHistograms();
201 fTriggerBiasCorrectionMBToINEL->DrawHistograms();
202 fTriggerBiasCorrectionMBToNSD ->DrawHistograms();
203 fTriggerBiasCorrectionMBToND ->DrawHistograms();
206 //____________________________________________________________________
207 void AlidNdEtaCorrection::FillMCParticle(Float_t vtx, Float_t eta, Float_t pt, Bool_t trigger, Bool_t vertex, Int_t processType)
209 // fills a particle in the corrections
210 // it is filled in generated or measured depending of the flags
212 fTriggerBiasCorrectionMBToINEL->GetTrackCorrection()->FillGene(vtx, eta, pt);
214 if (processType != 92 && processType != 93)
215 fTriggerBiasCorrectionMBToNSD->GetTrackCorrection()->FillGene(vtx, eta, pt);
217 if (processType!=92 && processType!=93 && processType!=94)
218 fTriggerBiasCorrectionMBToND->GetTrackCorrection()->FillGene(vtx, eta, pt);
223 fTriggerBiasCorrectionMBToINEL->GetTrackCorrection()->FillMeas(vtx, eta, pt);
224 fTriggerBiasCorrectionMBToNSD->GetTrackCorrection()->FillMeas(vtx, eta, pt);
225 fTriggerBiasCorrectionMBToND->GetTrackCorrection()->FillMeas(vtx, eta, pt);
226 fVertexRecoCorrection->GetTrackCorrection()->FillGene(vtx, eta, pt);
231 fVertexRecoCorrection->GetTrackCorrection()->FillMeas(vtx, eta, pt);
232 fTrack2ParticleCorrection->GetTrackCorrection()->FillGene(vtx, eta, pt);
235 //____________________________________________________________________
236 void AlidNdEtaCorrection::FillTrackedParticle(Float_t vtx, Float_t eta, Float_t pt)
238 // fills a tracked particle in the corrections
240 fTrack2ParticleCorrection->GetTrackCorrection()->FillMeas(vtx, eta, pt);
243 //____________________________________________________________________
244 void AlidNdEtaCorrection::FillEvent(Float_t vtx, Float_t n, Bool_t trigger, Bool_t vertex, Int_t processType)
246 // fills an event int he correction
247 // it is filled in generated or measured depending of the flags
249 fTriggerBiasCorrectionMBToINEL->GetEventCorrection()->FillGene(vtx, n);
251 if (processType != 92 && processType != 93)
252 fTriggerBiasCorrectionMBToNSD->GetEventCorrection()->FillGene(vtx, n);
254 if (processType!=92 && processType!=93 && processType!=94)
255 fTriggerBiasCorrectionMBToND->GetEventCorrection()->FillGene(vtx, n);
260 fTriggerBiasCorrectionMBToINEL->GetEventCorrection()->FillMeas(vtx, n);
261 fTriggerBiasCorrectionMBToNSD->GetEventCorrection()->FillMeas(vtx, n);
262 fTriggerBiasCorrectionMBToND->GetEventCorrection()->FillMeas(vtx, n);
263 fVertexRecoCorrection->GetEventCorrection()->FillGene(vtx, n);
268 fVertexRecoCorrection->GetEventCorrection()->FillMeas(vtx, n);
271 //____________________________________________________________________
272 Float_t AlidNdEtaCorrection::GetMeasuredFraction(CorrectionType correctionType, Float_t ptCutOff, Float_t eta, Bool_t debug)
274 // calculates the fraction of particles measured (some are missed due to the pt cut off)
276 // uses the generated particle histogram from the correction passed, e.g. pass GetTrack2ParticleCorrection()
278 const TH3F* generated = 0;
280 switch (correctionType)
282 case kNone : return -1;
283 case kTrack2Particle : generated = fTrack2ParticleCorrection->GetTrackCorrection()->GetGeneratedHistogram(); break;
284 case kVertexReco : generated = fVertexRecoCorrection->GetTrackCorrection()->GetGeneratedHistogram(); break;
285 case kINEL : generated = fTriggerBiasCorrectionMBToINEL->GetTrackCorrection()->GetGeneratedHistogram(); break;
286 case kNSD: generated = fTriggerBiasCorrectionMBToNSD->GetTrackCorrection()->GetGeneratedHistogram(); break;
287 case kND: generated = fTriggerBiasCorrectionMBToND->GetTrackCorrection()->GetGeneratedHistogram(); break;
290 // find eta borders, if eta is negative assume -0.8 ... 0.8
295 etaBegin = generated->GetYaxis()->FindBin(-0.8);
296 etaEnd = generated->GetYaxis()->FindBin(0.8);
300 etaBegin = generated->GetYaxis()->FindBin(eta);
304 Int_t vertexBegin = generated->GetXaxis()->FindBin(-4.99);
305 Int_t vertexEnd = generated->GetXaxis()->FindBin(4.99);
307 TH1D* ptProj = dynamic_cast<TH1D*> (generated->ProjectionZ(Form("%s_pt", generated->GetName()), vertexBegin, vertexEnd, etaBegin, etaEnd));
308 //printf("GetMeasuredFraction: bin range %d %d %d %d\n", vertexBegin, vertexEnd, etaBegin, etaEnd);
309 ptProj->GetXaxis()->SetTitle(generated->GetZaxis()->GetTitle());
311 Int_t ptBin = ptProj->FindBin(ptCutOff);
312 //printf("GetMeasuredFraction: bin range %d %d\n", ptBin, ptProj->GetNbinsX());
313 Float_t abovePtCut = ptProj->Integral(ptBin, ptProj->GetNbinsX());
314 Float_t all = ptProj->Integral();
319 Float_t fraction = abovePtCut / all;
321 //printf("GetMeasuredFraction: all %f above %f fraction %f\n", all, abovePtCut, fraction);
332 printf("AlidNdEtaCorrection::GetMeasuredFraction: pt cut off = %f, eta = %f, => fraction = %f\n", ptCutOff, eta, fraction);
337 //____________________________________________________________________
338 void AlidNdEtaCorrection::ReduceInformation()
340 // this function deletes the measured and generated histograms from the corrections to reduce the amount of data
343 // these are needed for GetMeasuredFraction(): fTrack2ParticleCorrection->ReduceInformation();
344 fVertexRecoCorrection ->ReduceInformation();
345 fTriggerBiasCorrectionMBToINEL ->ReduceInformation();
346 fTriggerBiasCorrectionMBToNSD ->ReduceInformation();
347 fTriggerBiasCorrectionMBToND ->ReduceInformation();