]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/totEt/AliAnalysisEtReconstructed.cxx
never really used and removed before restructuring
[u/mrichter/AliRoot.git] / PWG4 / totEt / AliAnalysisEtReconstructed.cxx
CommitLineData
cf6522d1 1//_________________________________________________________________________
2// Utility Class for transverse energy studies
3// Base class for ESD analysis
4// - reconstruction output
5// implementation file
6//
7//*-- Authors: Oystein Djuvsland (Bergen), David Silvermyr (ORNL)
8//_________________________________________________________________________
2fbf38ac 9
10#include "AliAnalysisEtReconstructed.h"
11#include "AliAnalysisEtCuts.h"
12#include "AliESDtrack.h"
ba136eb4 13#include "AliEMCALTrack.h"
2fbf38ac 14#include "AliESDCaloCluster.h"
15#include "TVector3.h"
ba136eb4 16#include "TGeoGlobalMagField.h"
17#include "AliMagF.h"
2fbf38ac 18#include "AliVEvent.h"
19#include "AliESDEvent.h"
b5821c13 20#include "AliESDtrackCuts.h"
2fbf38ac 21#include "AliVParticle.h"
87efb15c 22#include "TDatabasePDG.h"
23#include "TList.h"
b5821c13 24#include "AliESDpid.h"
2fbf38ac 25#include <iostream>
26#include "TH2F.h"
964c8159 27#include "AliAnalysisHadEtCorrections.h"
0f6416f3 28#include "AliLog.h"
e9da35da 29#include "AliCentrality.h"
0f6416f3 30
31
32
2fbf38ac 33
16abb579 34using namespace std;
35
36ClassImp(AliAnalysisEtReconstructed);
37
38
2fbf38ac 39AliAnalysisEtReconstructed::AliAnalysisEtReconstructed() :
40 AliAnalysisEt()
e9da35da 41 ,fCorrections(0)
87efb15c 42 ,fPidCut(0)
2fbf38ac 43 ,fClusterType(0)
87efb15c 44 ,fHistChargedPionEnergyDeposit(0)
45 ,fHistProtonEnergyDeposit(0)
46 ,fHistAntiProtonEnergyDeposit(0)
47 ,fHistChargedKaonEnergyDeposit(0)
48 ,fHistMuonEnergyDeposit(0)
476828ae 49 ,fHistRemovedEnergy(0)
e9da35da 50 ,fGeomCorrection(1.0)
51 ,fEMinCorrection(1.0)
2fbf38ac 52{
53
54}
55
e9da35da 56AliAnalysisEtReconstructed::~AliAnalysisEtReconstructed()
d0c22dcc 57{//destructor
e9da35da 58 delete fCorrections;
d0c22dcc 59 delete fHistChargedPionEnergyDeposit; /** Energy deposited in calorimeter by charged pions */
60 delete fHistProtonEnergyDeposit; /** Energy deposited in calorimeter by protons */
61 delete fHistAntiProtonEnergyDeposit; /** Energy deposited in calorimeter by anti-protons */
62 delete fHistChargedKaonEnergyDeposit; /** Energy deposited in calorimeter by charged kaons */
63 delete fHistMuonEnergyDeposit; /** Energy deposited in calorimeter by muons */
64
65 delete fHistRemovedEnergy; // removed energy
66
cf6522d1 67}
68
69Int_t AliAnalysisEtReconstructed::AnalyseEvent(AliVEvent* ev)
e9da35da 70{
71 // analyse ESD event
2fbf38ac 72 ResetEventValues();
743ce29f 73
e9da35da 74 if (!ev) {
75 AliFatal("ERROR: Event does not exist");
76 return 0;
77 }
78
2fbf38ac 79 AliESDEvent *event = dynamic_cast<AliESDEvent*>(ev);
e9da35da 80 if (!event) {
81 AliFatal("ERROR: ESD Event does not exist");
82 return 0;
ec956c46 83 }
2fbf38ac 84
743ce29f 85 Int_t cent = -1;
86 if (fCentrality)
87 {
88 cent = fCentrality->GetCentralityClass10("V0M");
89 fCentClass = fCentrality->GetCentralityClass10("V0M");
90 }
91
7d2d1773 92 Double_t protonMass = fgProtonMass;
87efb15c 93
b5821c13 94 //for PID
43056f1b 95 AliESDpid pID;
96 pID.MakePID(event);
6ad010c1 97 TObjArray* list = fEsdtrackCutsTPC->GetAcceptedTracks(event);
43056f1b 98
b5821c13 99 Int_t nGoodTracks = list->GetEntries();
6ad010c1 100 // printf("nGoodTracks %d nCaloClusters %d\n", nGoodTracks, event->GetNumberOfCaloClusters());
101
b5821c13 102 for (Int_t iTrack = 0; iTrack < nGoodTracks; iTrack++)
e9da35da 103 {
104 AliESDtrack *track = dynamic_cast<AliESDtrack*> (list->At(iTrack));
2fbf38ac 105 if (!track)
106 {
e9da35da 107 AliError(Form("ERROR: Could not get track %d", iTrack));
108 continue;
2fbf38ac 109 }
110
111 fMultiplicity++;
112
b5821c13 113
e9da35da 114 Float_t nSigmaPion,nSigmaProton,nSigmaKaon,nSigmaElectron;
115 nSigmaPion = TMath::Abs(pID.NumberOfSigmasTPC(track,AliPID::kPion));
116 nSigmaProton = TMath::Abs(pID.NumberOfSigmasTPC(track,AliPID::kProton));
117 nSigmaKaon = TMath::Abs(pID.NumberOfSigmasTPC(track,AliPID::kKaon));
118 nSigmaElectron = TMath::Abs(pID.NumberOfSigmasTPC(track,AliPID::kElectron));
119 /*
120 bool isPion = (nSigmaPion<3.0 && nSigmaProton>2.0 && nSigmaKaon>2.0);
121 bool isElectron = (nSigmaElectron<2.0 && nSigmaPion>4.0 && nSigmaProton>3.0 && nSigmaKaon>3.0);
122 bool isKaon = (nSigmaPion>3.0 && nSigmaProton>2.0 && nSigmaKaon<2.0);
123 bool isProton = (nSigmaPion>3.0 && nSigmaProton<2.0 && nSigmaKaon>2.0);
124 */
b5821c13 125
2fbf38ac 126 Int_t nItsClusters = dynamic_cast<AliESDtrack*>(track)->GetNcls(0);
127 Int_t nTPCClusters = dynamic_cast<AliESDtrack*>(track)->GetNcls(1);
128
129 Float_t massPart = 0;
130
131 const Double_t *pidWeights = track->PID();
e9da35da 132 Int_t maxpid = -1;
87efb15c 133 Double_t maxpidweight = 0;
e9da35da 134
2fbf38ac 135 if (pidWeights)
136 {
2fbf38ac 137 for (Int_t p =0; p < AliPID::kSPECIES; p++)
138 {
139 if (pidWeights[p] > maxpidweight)
140 {
141 maxpidweight = pidWeights[p];
142 maxpid = p;
143 }
144 }
145 if (maxpid == AliPID::kProton)
146 {
e9da35da 147 //by definition of ET
148 massPart = -protonMass*track->Charge();
2fbf38ac 149 }
150
151 }
152
153 Double_t et = track->E() * TMath::Sin(track->Theta()) + massPart;
e9da35da 154
155 fSparseTracks[0] = maxpid;
156 fSparseTracks[1] = track->Charge();
157 fSparseTracks[2] = track->M();
158 fSparseTracks[3] = et;
159 fSparseTracks[4] = track->Pt();
160 fSparseTracks[5] = track->Eta();
161 fSparseTracks[6] = cent;
162 fSparseHistTracks->Fill(fSparseTracks);
163 //printf("Rec track: iTrack %03d eta %4.3f phi %4.3f nITSCl %d nTPCCl %d\n", iTrack, track->Eta(), track->Phi(), nItsClusters, nTPCClusters); // tmp/debug printout
2fbf38ac 164
4998becf 165 if (TMath::Abs(track->Eta()) < fCuts->GetCommonEtaCut() && CheckGoodVertex(track) && nItsClusters > fCuts->GetReconstructedNItsClustersCut() && nTPCClusters > fCuts->GetReconstructedNTpcClustersCut() )
2fbf38ac 166 {
e9da35da 167 fTotChargedEt += et;
2fbf38ac 168 fChargedMultiplicity++;
e9da35da 169 if (maxpid != -1)
87efb15c 170 {
43056f1b 171 if (maxpid == AliPID::kProton)
87efb15c 172 {
173 fProtonEt += et;
174 }
43056f1b 175 if (maxpid == AliPID::kPion)
176 {
177 fPionEt += et;
178 }
87efb15c 179 if (maxpid == AliPID::kKaon)
180 {
181 fChargedKaonEt += et;
182 }
183 if (maxpid == AliPID::kMuon)
184 {
185 fMuonEt += et;
186 }
187 if (maxpid == AliPID::kElectron)
188 {
189 fElectronEt += et;
190 }
191 }
2fbf38ac 192
193 if (TMath::Abs(track->Eta()) < fEtaCutAcc && track->Phi() < fPhiCutAccMax && track->Phi() > fPhiCutAccMin)
194 {
195 fTotChargedEtAcc += track->E()*TMath::Sin(track->Theta()) + massPart;
e9da35da 196 if (maxpid != -1)
87efb15c 197 {
43056f1b 198 if (maxpid == AliPID::kProton)
87efb15c 199 {
200 fProtonEtAcc += et;
201 }
43056f1b 202 if (maxpid == AliPID::kPion)
203 {
204 fPionEtAcc += et;
205 }
87efb15c 206 if (maxpid == AliPID::kKaon)
207 {
208 fChargedKaonEtAcc += et;
209 }
210 if (maxpid == AliPID::kMuon)
211 {
212 fMuonEtAcc += et;
213 }
214 if (maxpid == AliPID::kElectron)
215 {
216 fElectronEtAcc += et;
217 }
218 }
e9da35da 219
2fbf38ac 220 }
221 }
222
2fbf38ac 223 if (TrackHitsCalorimeter(track, event->GetMagneticField()))
224 {
e9da35da 225 Double_t phi = track->Phi();
226 Double_t pt = track->Pt();
227 // printf("Rec track hit: iTrack %03d phi %4.3f pt %4.3f\n", iTrack, phi, pt); // tmp/debug printout
228 if (track->Charge() > 0) fHistPhivsPtPos->Fill(phi, pt);
229 else fHistPhivsPtNeg->Fill(phi, pt);
2fbf38ac 230 }
e9da35da 231 }
2fbf38ac 232
233 for (Int_t iCluster = 0; iCluster < event->GetNumberOfCaloClusters(); iCluster++)
234 {
235 AliESDCaloCluster* cluster = event->GetCaloCluster(iCluster);
236 if (!cluster)
237 {
e9da35da 238 AliError(Form("ERROR: Could not get cluster %d", iCluster));
2fbf38ac 239 continue;
240 }
e9da35da 241 if (cluster->GetType() != fClusterType) continue;
242
243 //if(cluster->GetTracksMatched() > 0)
244// printf("Rec Cluster: iCluster %03d E %4.3f type %.qd NCells %d, nmatched: %d, distance to closest: %f\n", iCluster, cluster->E(), (int)(cluster->GetType()), cluster->GetNCells(), cluster->GetNTracksMatched(), cluster->GetEmcCpvDistance()); // tmp/debug printout
245
2fbf38ac 246
2fbf38ac 247 if (cluster->E() < fClusterEnergyCut) continue;
e9da35da 248
2fbf38ac 249 Float_t pos[3];
e9da35da 250
2fbf38ac 251 cluster->GetPosition(pos);
e9da35da 252 TVector3 cp(pos);
253
254 Double_t distance = cluster->GetEmcCpvDistance();
255 Int_t trackMatchedIndex = cluster->GetTrackMatchedIndex();
256 if ( cluster->IsEMCAL() ) {
257 distance = CalcTrackClusterDistance(pos, &trackMatchedIndex, event);
258 }
87efb15c 259
e9da35da 260 fSparseClusters[0] = 0;
261 fSparseClusters[1] = 0;
262 fSparseClusters[2] = 0;
263 fSparseClusters[6] = 0;
264 fSparseClusters[7] = 0;
265 fSparseClusters[8] = 0;
266 fSparseClusters[9] = cent;
267 fSparseClusters[10] = 0;
ba136eb4 268
e9da35da 269
270 if (cluster->GetNTracksMatched() > 0 && trackMatchedIndex > -1)
2fbf38ac 271 {
e9da35da 272 AliVTrack *tmptrack = event->GetTrack(trackMatchedIndex);
273 if (!tmptrack)
87efb15c 274 {
e9da35da 275 AliError("Error: track does not exist");
276 return -1;
277 }
278 const Double_t *pidWeights = tmptrack->PID();
279
280 Double_t maxpidweight = 0;
281 Int_t maxpid = 0;
282 Double_t massPart = 0;
283 if (pidWeights)
284 {
285 for (Int_t p =0; p < AliPID::kSPECIES; p++)
286 {
287 if (pidWeights[p] > maxpidweight)
288 {
289 maxpidweight = pidWeights[p];
290 maxpid = p;
291 }
292 }
293 if (maxpid == AliPID::kProton)
294 {
295 //by definition of ET
296 massPart = -protonMass*tmptrack->Charge();
87efb15c 297 }
298 }
e9da35da 299 fSparseClusters[0] = maxpid;
300 fSparseClusters[1] = tmptrack->Charge();
301 fSparseClusters[2] = tmptrack->M();
302 fSparseClusters[6] = tmptrack->E() * TMath::Sin(tmptrack->Theta()) + massPart;;
303 fSparseClusters[7] = tmptrack->Pt();
304 fSparseClusters[8] = tmptrack->Eta();
305 }
87efb15c 306
e9da35da 307 fSparseClusters[10] = distance;
308
309 fHistTMDeltaR->Fill(distance);
310 fHistTMDxDz->Fill(cluster->GetTrackDx(), cluster->GetTrackDz());
311
476828ae 312// Float_t clusteret = cluster->E() * TMath::Sin(cp.Theta());
e9da35da 313
314 Bool_t matched = false;
315
316 if (cluster->IsEMCAL()) matched = distance < fTrackDistanceCut;
317 else matched = (TMath::Abs(cluster->GetTrackDx()) < fTrackDxCut && TMath::Abs(cluster->GetTrackDz()) < fTrackDzCut);
318
319 if (matched)
320 {
321 if (cluster->GetNTracksMatched() > 0 && trackMatchedIndex>=0)
322 {
323 AliVTrack *track = event->GetTrack(trackMatchedIndex);
324 if (!track) {
325 AliError("Error: track does not exist");
326 }
327 else {
328 const Double_t *pidWeights = track->PID();
329
330 Double_t maxpidweight = 0;
331 Int_t maxpid = 0;
332
333 if (pidWeights)
334 {
335 for (Int_t p =0; p < AliPID::kSPECIES; p++)
336 {
337 if (pidWeights[p] > maxpidweight)
338 {
339 maxpidweight = pidWeights[p];
340 maxpid = p;
341 }
342 }
343 if (fCuts->GetHistMakeTreeDeposit() && fTreeDeposit)
344 {
345 fEnergyDeposited = cluster->E();
346 fEnergyTPC = track->E();
347 fCharge = track->Charge();
348 fParticlePid = maxpid;
349 fPidProb = maxpidweight;
350 AliESDtrack *esdTrack = dynamic_cast<AliESDtrack*>(track);
351 if (!esdTrack) {
352 AliError("Error: track does not exist");
353 }
354 else {
355 if (esdTrack) fTrackPassedCut = fEsdtrackCutsTPC->AcceptTrack(esdTrack);
356 fTreeDeposit->Fill();
357 }
358 }
359
360 if (maxpidweight > fPidCut)
361 {
362 Float_t dist = TMath::Sqrt(pos[0]*pos[0] + pos[1]*pos[1]);
363
364 Float_t theta = TMath::ATan(pos[2]/dist)+TMath::Pi()/2;
365
366 Float_t et = cluster->E() * TMath::Sin(theta);
367 if (maxpid == AliPID::kProton)
368 {
369
370 if (track->Charge() == 1)
371 {
372 fBaryonEt += et;
373 fHistProtonEnergyDeposit->Fill(cluster->E(), track->E());
374 }
375 else if (track->Charge() == -1)
376 {
377 fAntiBaryonEt += et;
378 fHistAntiProtonEnergyDeposit->Fill(cluster->E(), track->E());
379 }
380 }
381 else if (maxpid == AliPID::kPion)
382 {
383 fMesonEt += et;
384 fHistChargedPionEnergyDeposit->Fill(cluster->E(), track->E());
385 }
386 else if (maxpid == AliPID::kKaon)
387 {
388 fMesonEt += et;
389 fHistChargedKaonEnergyDeposit->Fill(cluster->E(), track->E());
390 }
391 else if (maxpid == AliPID::kMuon)
392 {
393 fHistMuonEnergyDeposit->Fill(cluster->E(), track->E());
394 }
395 }
396 }
397 }
398 }
399 //continue;
ba136eb4 400 } // distance
e9da35da 401 else
402 {
403 fSparseClusters[0] = AliPID::kPhoton;
404 fSparseClusters[1] = 0;
405
406 if (cluster->E() > fSingleCellEnergyCut && cluster->GetNCells() == fCuts->GetCommonSingleCell()) continue;
407 if (cluster->E() < fClusterEnergyCut) continue;
408 cluster->GetPosition(pos);
2fbf38ac 409
e9da35da 410 // TODO: replace with TVector3, too lazy now...
411
412 float dist = TMath::Sqrt(pos[0]*pos[0] + pos[1]*pos[1]);
413
414 float theta = TMath::ATan(pos[2]/dist)+TMath::Pi()/2;
415 // float eta = TMath::Log(TMath::Abs( TMath::Tan( 0.5 * theta ) ) );
416 fTotNeutralEt += cluster->E() * TMath::Sin(theta);
417 fNeutralMultiplicity++;
418 }
2fbf38ac 419
420 cluster->GetPosition(pos);
2fbf38ac 421
e9da35da 422 // TODO: replace with TVector3
2fbf38ac 423
e9da35da 424 float dist = TMath::Sqrt(pos[0]*pos[0] + pos[1]*pos[1]);
2fbf38ac 425 float theta = TMath::ATan(pos[2]/dist)+TMath::Pi()/2;
e9da35da 426 float eta = TMath::Log(TMath::Abs( TMath::Tan( 0.5 * theta ) ) );
427 fSparseClusters[3] = cluster->E() * TMath::Sin(theta);
428 fSparseClusters[4] = cluster->E();
429 fSparseClusters[5] = eta;
430
431 fSparseHistClusters->Fill(fSparseClusters);
2fbf38ac 432
433 fMultiplicity++;
2fbf38ac 434 }
e9da35da 435 Double_t removedEnergy = GetChargedContribution(fNeutralMultiplicity) + GetNeutralContribution(fNeutralMultiplicity) - GetGammaContribution(fNeutralMultiplicity);
436 fHistRemovedEnergy->Fill(removedEnergy);
437// std::cout << "fTotNeutralEt: " << fTotNeutralEt << ", Contribution from non-removed charged: " << GetChargedContribution(fNeutralMultiplicity) << ", neutral: " << GetNeutralContribution(fNeutralMultiplicity) << ", gammas: " << GetGammaContribution(fNeutralMultiplicity) << ", multiplicity: " << fNeutralMultiplicity<< std::endl;
438 fTotNeutralEt = fGeomCorrection * fEMinCorrection * fTotNeutralEt - removedEnergy;
439 fTotNeutralEtAcc = fTotNeutralEt/fGeomCorrection;
2fbf38ac 440 fTotEt = fTotChargedEt + fTotNeutralEt;
441 fTotEtAcc = fTotChargedEtAcc + fTotNeutralEtAcc;
e9da35da 442 fSparseEt[0] = fTotEt;
443 fSparseEt[1] = fTotNeutralEt;
444 fSparseEt[2] = fTotChargedEtAcc;
445 fSparseEt[3] = fMultiplicity;
446 fSparseEt[4] = fNeutralMultiplicity;
447 fSparseEt[5] = fChargedMultiplicity;
448 fSparseEt[6] = cent;
2fbf38ac 449 // Fill the histograms...
450 FillHistograms();
451
452 return 0;
453}
454
455bool AliAnalysisEtReconstructed::CheckGoodVertex(AliVParticle* track)
cf6522d1 456{ // check vertex
2fbf38ac 457
458 Float_t bxy = 999.;
459 Float_t bz = 999.;
e9da35da 460 if (!track) {
461 AliError("ERROR: no track");
462 return kFALSE;
ec956c46 463 }
1b8c3d66 464 AliESDtrack *esdTrack = dynamic_cast<AliESDtrack*>(track);
e9da35da 465 if (!esdTrack) {
466 AliError("ERROR: no track");
467 return kFALSE;
1b8c3d66 468 }
469 esdTrack->GetImpactParametersTPC(bxy,bz);
ec956c46 470
2fbf38ac 471
e9da35da 472 bool status = (TMath::Abs(track->Xv()) < fCuts->GetReconstructedVertexXCut()) &&
473 (TMath::Abs(track->Yv()) < fCuts->GetReconstructedVertexYCut()) &&
474 (TMath::Abs(track->Zv()) < fCuts->GetReconstructedVertexZCut()) &&
475 (TMath::Abs(bxy) < fCuts->GetReconstructedIPxyCut()) &&
476 (TMath::Abs(bz) < fCuts->GetReconstructedIPzCut());
2fbf38ac 477
4998becf 478 return status;
2fbf38ac 479}
480
481void AliAnalysisEtReconstructed::Init()
cf6522d1 482{ // Init
2fbf38ac 483 AliAnalysisEt::Init();
83d0f02c 484 fPidCut = fCuts->GetReconstructedPidCut();
ba136eb4 485 TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", 1., 1., AliMagF::k5kG));
e9da35da 486 if (!fCorrections) {
487 cout<<"Warning! You have not set corrections. Your code will crash. You have to set the corrections."<<endl;
0f97be4c 488 }
2fbf38ac 489}
490
491bool AliAnalysisEtReconstructed::TrackHitsCalorimeter(AliVParticle* track, Double_t magField)
cf6522d1 492{ // propagate track to detector radius
2fbf38ac 493
e9da35da 494 if (!track) {
495 cout<<"Warning: track empty"<<endl;
496 return kFALSE;
497 }
498 AliESDtrack *esdTrack= dynamic_cast<AliESDtrack*>(track);
499 if (!esdTrack) {
500 AliError("ERROR: no ESD track");
501 return kFALSE;
502 }
503 // Printf("Propagating track: eta: %f, phi: %f, pt: %f", esdTrack->Eta(), esdTrack->Phi(), esdTrack->Pt());
2fbf38ac 504
505 Bool_t prop = esdTrack->PropagateTo(fDetectorRadius, magField);
506
cf6522d1 507 // if (prop) Printf("Track propagated, eta: %f, phi: %f, pt: %f", esdTrack->Eta(), esdTrack->Phi(), esdTrack->Pt());
e9da35da 508 return prop &&
509 TMath::Abs(esdTrack->Eta()) < fEtaCutAcc &&
510 esdTrack->Phi() > fPhiCutAccMin*TMath::Pi()/180. &&
511 esdTrack->Phi() < fPhiCutAccMax*TMath::Pi()/180.;
2fbf38ac 512}
513
87efb15c 514void AliAnalysisEtReconstructed::FillOutputList(TList* list)
ce546038 515{ // add some extra histograms to the ones from base class
87efb15c 516 AliAnalysisEt::FillOutputList(list);
517
518 list->Add(fHistChargedPionEnergyDeposit);
519 list->Add(fHistProtonEnergyDeposit);
520 list->Add(fHistAntiProtonEnergyDeposit);
521 list->Add(fHistChargedKaonEnergyDeposit);
522 list->Add(fHistMuonEnergyDeposit);
e9da35da 523
524 list->Add(fHistRemovedEnergy);
87efb15c 525}
526
527void AliAnalysisEtReconstructed::CreateHistograms()
ce546038 528{ // add some extra histograms to the ones from base class
87efb15c 529 AliAnalysisEt::CreateHistograms();
530
0fa8c632 531 Int_t nbinsEt = 1000;
532 Double_t minEt = 0;
533 Double_t maxEt = 10;
534
535 // possibly change histogram limits
536 if (fCuts) {
e9da35da 537 nbinsEt = fCuts->GetHistNbinsParticleEt();
538 minEt = fCuts->GetHistMinParticleEt();
539 maxEt = fCuts->GetHistMaxParticleEt();
0fa8c632 540 }
541
87efb15c 542 TString histname;
543 histname = "fHistChargedPionEnergyDeposit" + fHistogramNameSuffix;
0fa8c632 544 fHistChargedPionEnergyDeposit = new TH2F(histname.Data(), "Energy deposited by #pi^{+/-}", nbinsEt, minEt, maxEt, nbinsEt, minEt, maxEt);
87efb15c 545 fHistChargedPionEnergyDeposit->SetXTitle("Energy deposited in calorimeter");
546 fHistChargedPionEnergyDeposit->SetYTitle("Energy of track");
e9da35da 547
87efb15c 548 histname = "fHistProtonEnergyDeposit" + fHistogramNameSuffix;
0fa8c632 549 fHistProtonEnergyDeposit = new TH2F(histname.Data(), "Energy deposited by protons", nbinsEt, minEt, maxEt, nbinsEt, minEt, maxEt);
87efb15c 550 fHistProtonEnergyDeposit->SetXTitle("Energy deposited in calorimeter");
551 fHistProtonEnergyDeposit->SetYTitle("Energy of track");
e9da35da 552
87efb15c 553 histname = "fHistAntiProtonEnergyDeposit" + fHistogramNameSuffix;
0fa8c632 554 fHistAntiProtonEnergyDeposit = new TH2F(histname.Data(), "Energy deposited by anti-protons", nbinsEt, minEt, maxEt, nbinsEt, minEt, maxEt);
87efb15c 555 fHistAntiProtonEnergyDeposit->SetXTitle("Energy deposited in calorimeter");
556 fHistAntiProtonEnergyDeposit->SetYTitle("Energy of track");
e9da35da 557
87efb15c 558 histname = "fHistChargedKaonEnergyDeposit" + fHistogramNameSuffix;
0fa8c632 559 fHistChargedKaonEnergyDeposit = new TH2F(histname.Data(), "Energy deposited by K^{+/-}", nbinsEt, minEt, maxEt, nbinsEt, minEt, maxEt);
87efb15c 560 fHistChargedKaonEnergyDeposit->SetXTitle("Energy deposited in calorimeter");
561 fHistChargedKaonEnergyDeposit->SetYTitle("Energy of track");
e9da35da 562
87efb15c 563 histname = "fHistMuonEnergyDeposit" + fHistogramNameSuffix;
0fa8c632 564 fHistMuonEnergyDeposit = new TH2F(histname.Data(), "Energy deposited by #mu^{+/-}", nbinsEt, minEt, maxEt, nbinsEt, minEt, maxEt);
87efb15c 565 fHistMuonEnergyDeposit->SetXTitle("Energy deposited in calorimeter");
566 fHistMuonEnergyDeposit->SetYTitle("Energy of track");
e9da35da 567
568 histname = "fHistRemovedEnergy" + fHistogramNameSuffix;
569 fHistRemovedEnergy = new TH1F(histname.Data(), histname.Data(), 1000, 0, 20);
570 //fHistMuonEnergyDeposit->SetXTitle("Energy deposited in calorimeter");
571 //fHistMuonEnergyDeposit->SetYTitle("Energy of track");
572
573
87efb15c 574
575}
ba136eb4 576
e9da35da 577Double_t
ce546038 578AliAnalysisEtReconstructed::CalcTrackClusterDistance(const Float_t clsPos[3],
e9da35da 579 Int_t *trkMatchId,
580 const AliESDEvent *event)
ba136eb4 581{ // calculate distance between cluster and closest track
582
e9da35da 583 Double_t trkPos[3] = {0,0,0};
ba136eb4 584
e9da35da 585 Int_t bestTrkMatchId = -1;
586 Double_t distance = 9999; // init to a big number
ba136eb4 587
e9da35da 588 Double_t dist = 0;
589 Double_t distX = 0, distY = 0, distZ = 0;
ba136eb4 590
e9da35da 591 for (Int_t iTrack = 0; iTrack < event->GetNumberOfTracks(); iTrack++) {
592 AliESDtrack *track = event->GetTrack(iTrack);
593 if (!track) {
594 AliError(Form("ERROR: Could not get track %d", iTrack));
595 continue;
596 }
ba136eb4 597
e9da35da 598 // check for approx. eta and phi range before we propagate..
599 // TBD
ba136eb4 600
e9da35da 601 AliEMCALTrack *emctrack = new AliEMCALTrack(*track);
602 if (!emctrack->PropagateToGlobal(clsPos[0],clsPos[1],clsPos[2],0.,0.) ) {
603 continue;
604 }
605 emctrack->GetXYZ(trkPos);
606 delete emctrack;
ba136eb4 607
e9da35da 608 distX = clsPos[0]-trkPos[0];
609 distY = clsPos[1]-trkPos[1];
610 distZ = clsPos[2]-trkPos[2];
611 dist = TMath::Sqrt(distX*distX + distY*distY + distZ*distZ);
ba136eb4 612
e9da35da 613 if (dist < distance) {
614 distance = dist;
615 bestTrkMatchId = iTrack;
616 }
617 } // iTrack
618
619 // printf("CalcTrackClusterDistance: bestTrkMatch %d origTrkMatch %d distance %f\n", bestTrkMatchId, *trkMatchId, distance);
620 *trkMatchId = bestTrkMatchId;
621 return distance;
ba136eb4 622}
e9da35da 623