1 //_________________________________________________________________________
2 // Utility Class for transverse energy studies
3 // Base class for MC analysis
7 //*-- Author: Marcelo G. Munhoz (USP)
8 //_________________________________________________________________________
10 #include "AliAnalysisEmEtReconstructed.h"
11 #include "AliAnalysisEtCuts.h"
12 #include "AliESDtrack.h"
14 #include "AliVEvent.h"
15 #include "AliMCEvent.h"
16 #include "AliESDEvent.h"
18 #include "TParticle.h"
19 #include "AliGenHijingEventHeader.h"
20 #include "AliGenPythiaEventHeader.h"
22 #include "AliESDCaloCluster.h"
23 #include "TGeoGlobalMagField.h"
25 #include "AliEMCALTrack.h"
26 #include "AliESDtrackCuts.h"
27 #include "AliEMCALGeometry.h"
28 #include "AliExternalTrackParam.h"
29 #include "AliTrackerBase.h"
30 #include "TGeoManager.h"
31 #include "AliCentrality.h"
35 ClassImp(AliAnalysisEmEtReconstructed);
39 AliAnalysisEmEtReconstructed::AliAnalysisEmEtReconstructed():AliAnalysisEtReconstructed()
42 ,fElectronMatchtotETDep(0)
46 ,fMuonMatchtotETDep(0), fPionMatchtotETDep(0), fKaonMatchtotETDep(0), fProtonMatchtotETDep(0)
47 ,fTotChargedMatchtotETDep(0)
56 ,fHistAllRectotETDep(0)
58 ,fHistElectronRecETDep(0)
60 ,fHistElectronMatchtotETDep(0)
61 ,fHistElectronRecdEdxP(0)
63 ,fHistNeutralRectotET(0)
65 ,fHistTotEMRectotET(0)
69 ,fHistMuonMatchtotETDep(0)
74 ,fHistPionMatchtotETDep(0)
79 ,fHistKaonMatchtotETDep(0)
82 ,fHistProtonRecETDep(0)
84 ,fHistProtonMatchtotETDep(0)
85 ,fHistProtonRecdEdxP(0)
87 ,fHistTotChargedMatchtotETDep(0)
89 ,fHistTotalRectotETDep(0)
93 fHistogramNameSuffix = TString("EmcalRec");
96 //fResCut = fEmcalTrackDistanceCut;
98 TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", -1., -1., AliMagF::k5kG));
99 //TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", 1., 1., AliMagF::k5kG));
100 TGeoManager::Import("geometry.root");
104 AliAnalysisEmEtReconstructed::~AliAnalysisEmEtReconstructed()
108 delete fHistAllRecETDep;
110 delete fHistAllRectotETDep;
112 delete fHistElectronRecETDep;
113 delete fHistElectronRec;
114 delete fHistElectronMatchtotETDep;
116 delete fHistElectronRecdEdxP;
118 delete fHistNeutralRectotET;
120 delete fHistTotEMRectotET;
122 delete fHistMuonRecETDep;
124 delete fHistMuonMatchtotETDep;
126 delete fHistMuonRecdEdxP;
128 delete fHistPionRecETDep;
130 delete fHistPionMatchtotETDep;
132 delete fHistPionRecdEdxP;
134 delete fHistKaonRecETDep;
136 delete fHistKaonMatchtotETDep;
138 delete fHistKaonRecdEdxP;
140 delete fHistProtonRecETDep;
141 delete fHistProtonRec;
142 delete fHistProtonMatchtotETDep;
144 delete fHistProtonRecdEdxP;
146 delete fHistTotChargedMatchtotETDep;
148 delete fHistTotalRectotETDep;
155 Int_t AliAnalysisEmEtReconstructed::AnalyseEvent(AliVEvent* ev)
156 { // analyse MC and real event info
158 AliError("ERROR: Event does not exist");
162 fESD = dynamic_cast<AliESDEvent*>(ev);
164 AliError("ERROR: Could not retrieve event");
169 // fGeoUt = AliEMCALGeometry::GetInstance("EMCAL_FIRSTYEARV1");//new AliEMCALGeometry("EMCAL_FIRSTYEAR","EMCAL");
170 // //fGeoUt = AliEMCALGeometry::GetInstance("EMCAL_COMPLETEV1");
171 // AliInfo("Creating new AliEMCALGeometry");
173 // //fGeoUt = new AliEMCALGeometry("EMCAL_COMPLETE1","EMCAL");
175 // AliInfo("No fGeoUt!");
178 // if(!fESD->GetEMCALMatrix(0)){
179 // AliInfo("No matrix!");
182 // fGeoUt->SetMisalMatrix(fESD->GetEMCALMatrix(0),0);
187 if(fDataSet==20100){//If this is Pb+Pb
188 AliCentrality *centrality = ev->GetCentrality();
189 if(fNCentBins<21) fCentBin= centrality->GetCentralityClass10(fCentralityMethod);
190 else{ fCentBin= centrality->GetCentralityClass5(fCentralityMethod);}
195 // get all emcal clusters
196 TRefArray* caloClusters = new TRefArray();
197 fESD->GetEMCALClusters( caloClusters );
199 Int_t nCluster = caloClusters->GetEntries();
201 Float_t pos[3] = {0};
202 TVector3 caloPos(0,0,0);
203 TVector3 trackPos(0,0,0);
204 // Double_t res=0, delta_eta=0, delta_phi=0, maxPid=-99;
205 Double_t res=0, maxPid=-99;
206 Double_t xCluster[4]={0}, xCharged[7]={0};
208 AliESDtrack *track = 0;
211 for (int iCluster = 0; iCluster < nCluster; iCluster++ )
213 // Retrieve calo cluster information
214 AliESDCaloCluster* caloCluster = ( AliESDCaloCluster* )caloClusters->At( iCluster );
215 Float_t caloE = caloCluster->E();
216 caloCluster->GetPosition(pos);
217 caloPos.SetXYZ(pos[0],pos[1],pos[2]);
219 // look for track that matches calo cluster
220 //track = FindMatch(caloCluster, res); // Marcelo's matching
222 // *********************
224 // delta_eta = caloCluster->GetTrackDz();
225 // delta_phi = caloCluster->GetTrackDx();
227 if (caloCluster->GetTrackMatchedIndex() > 0) // tender's matching
228 track = fESD->GetTrack(caloCluster->GetTrackMatchedIndex());
231 // if ( !fEsdtrackCutsITSTPC->IsSelected(track) )
233 // *********************
235 // Retrieve track PID
237 maxPid = GetTrackPID(track);
238 xCharged[0] = track->Eta();
239 xCharged[1] = track->Pt(); }
247 Double_t etDep = CorrectForReconstructionEfficiency(*caloCluster);
250 //fHistAllRecEtaEDepETDep->Fill(caloE,caloPos.Eta(),etDep);
251 //fHistAllRecEtaETDep->Fill(etDep,caloPos.Eta());
254 xCluster[1] = caloPos.Eta();
255 xCluster[2] = TMath::RadToDeg()*caloPos.Phi();
256 xCluster[3] = caloCluster->GetNCells();
257 fAllRectotETDep += etDep;
261 fHistAllRecETDep->Fill(xCluster,etDep);
262 fHistAllRec->Fill(xCluster);
266 xCharged[3] = caloPos.Eta();
267 xCharged[4] = TMath::RadToDeg()*caloPos.Phi();
268 xCharged[5] = caloCluster->GetNCells();
271 Bool_t isCharged = kFALSE;
273 if (maxPid == AliPID::kProton)
277 fHistProtonRecETDep->Fill(xCharged,etDep);
278 fHistProtonRec->Fill(xCharged);
281 if (track) fHistProtonRecdEdxP->Fill(track->P(),track->GetTPCsignal());
283 if ((res>0.) && (res<fResCut))
285 fProtonMatchtotETDep += etDep;
290 else if (maxPid == AliPID::kPion)
294 fHistPionRecETDep->Fill(xCharged,etDep);
295 fHistPionRec->Fill(xCharged);
298 if (track) fHistPionRecdEdxP->Fill(track->P(),track->GetTPCsignal());
300 if ((res>0.) && (res<fResCut))
302 fPionMatchtotETDep += etDep;
306 else if (maxPid == AliPID::kKaon)
310 fHistKaonRecETDep->Fill(xCharged,etDep);
311 fHistKaonRec->Fill(xCharged);
314 if (track) fHistKaonRecdEdxP->Fill(track->P(),track->GetTPCsignal());
316 if ((res>0.) && (res<fResCut))
319 fKaonMatchtotETDep += etDep;
323 else if (maxPid == AliPID::kMuon)
327 fHistMuonRecETDep->Fill(xCharged,etDep);
328 fHistMuonRec->Fill(xCharged);
330 if (track) fHistMuonRecdEdxP->Fill(track->P(),track->GetTPCsignal());
332 if ((res>0.) && (res<fResCut))
335 fMuonMatchtotETDep += etDep;
339 else if (maxPid == AliPID::kElectron)
343 fHistElectronRecETDep->Fill(xCharged,etDep);
344 fHistElectronRec->Fill(xCharged);
347 if (track) fHistElectronRecdEdxP->Fill(track->P(),track->GetTPCsignal());
349 if ((res>0.) && (res<fResCut))
351 fElectronMatchtotETDep += etDep;
358 fNeutralRectotET += etDep;
361 } // end of loop over clusters
363 fTotEMRectotET = fElectronMatchtotETDep + fNeutralRectotET;
364 fTotChargedMatchtotETDep = fMuonMatchtotETDep + fPionMatchtotETDep + fKaonMatchtotETDep + fProtonMatchtotETDep;
365 fTotalRectotETDep = fTotEMRectotET + fTotChargedMatchtotETDep;
367 fHistAllRectotETDep->Fill(fAllRectotETDep);
369 fHistElectronMatchtotETDep->Fill(fElectronMatchtotETDep);
370 fHistNeutralRectotET->Fill(fNeutralRectotET);
372 fHistTotEMRectotET->Fill(fTotEMRectotET);
374 fHistMuonMatchtotETDep->Fill(fMuonMatchtotETDep);
375 fHistPionMatchtotETDep->Fill(fPionMatchtotETDep);
376 fHistKaonMatchtotETDep->Fill(fKaonMatchtotETDep);
377 fHistProtonMatchtotETDep->Fill(fProtonMatchtotETDep);
378 fHistTotChargedMatchtotETDep->Fill(fTotChargedMatchtotETDep);
380 fHistTotalRectotETDep->Fill(fTotalRectotETDep);
387 void AliAnalysisEmEtReconstructed::Init()
389 AliAnalysisEt::Init();
393 void AliAnalysisEmEtReconstructed::ResetEventValues()
394 { // reset event values
395 AliAnalysisEt::ResetEventValues();
397 // collision geometry defaults for p+p:
400 fElectronMatchtotETDep = 0;
401 fNeutralRectotET = 0;
405 fMuonMatchtotETDep = 0; fPionMatchtotETDep = 0; fKaonMatchtotETDep = 0; fProtonMatchtotETDep = 0;
406 fTotChargedMatchtotETDep = 0;
408 fTotalRectotETDep = 0;
412 void AliAnalysisEmEtReconstructed::CreateHistograms()
413 { // histogram related additions
414 //AliAnalysisEt::CreateHistograms();
417 fHistAllRecETDep = CreateClusterHistoSparse("fHistAllRecETDep_","E_{T}, all particles");
418 fHistAllRec = CreateClusterHistoSparse("fHistAllRec_","counts, all particles");
420 TString histname = "fHistAllRectotETDep_" + fHistogramNameSuffix;
421 fHistAllRectotETDep = new TH1F(histname.Data(),"total ET, all particles",fgNumOfEBins, fgEAxis);
425 fHistElectronRecETDep = CreateChargedPartHistoSparse("fHistElectronRecETDep_","E_{T}, electrons");
426 fHistElectronRec = CreateChargedPartHistoSparse("fHistElectronRec_","counts, electrons");
428 histname = "fHistElectronMatchtotETDep_" + fHistogramNameSuffix;
429 fHistElectronMatchtotETDep = new TH1F(histname.Data(),"total ET, MC primary Electrons",fgNumOfEBins, fgEAxis);
431 histname = "fHistElectronRecdEdxP_" + fHistogramNameSuffix;
432 fHistElectronRecdEdxP = new TH2F(histname,"TPC dEdx vs P",100,0.,10.,100,0.,200.);
434 histname = "fHistNeutralRectotET_" + fHistogramNameSuffix;
435 fHistNeutralRectotET = new TH1F(histname.Data(),"total ET, neutral particles",fgNumOfEBins, fgEAxis);
437 histname = "fHistTotEMRectotET_" + fHistogramNameSuffix;
438 fHistTotEMRectotET = new TH1F(histname.Data(),"total electromagnetic ET",fgNumOfEBins, fgEAxis);
441 fHistMuonRecETDep = CreateChargedPartHistoSparse("fHistMuonRecETDep_","E_{T}, muons");
442 fHistMuonRec = CreateChargedPartHistoSparse("fHistMuonRec_","counts, muons");
444 histname = "fHistMuonMatchtotETDep_" + fHistogramNameSuffix;
445 fHistMuonMatchtotETDep = new TH1F(histname.Data(),"total ET, Muons",fgNumOfEBins, fgEAxis);
447 histname = "fHistMuonRecdEdxP_" + fHistogramNameSuffix;
448 fHistMuonRecdEdxP = new TH2F(histname,"TPC dEdx vs P",100,0.,10.,100,0.,200.);
451 fHistPionRecETDep = CreateChargedPartHistoSparse("fHistPionRecETDep_","E_{T}, pions");
452 fHistPionRec = CreateChargedPartHistoSparse("fHistPionRec_","counts, pions");
454 histname = "fHistPionMatchtotETDep_" + fHistogramNameSuffix;
455 fHistPionMatchtotETDep = new TH1F(histname.Data(),"total ET, Pions",fgNumOfEBins, fgEAxis);
456 histname = "fHistPionRecdEdxP_" + fHistogramNameSuffix;
457 fHistPionRecdEdxP = new TH2F(histname,"TPC dEdx vs P",100,0.,10.,100,0.,200.);
460 fHistKaonRecETDep = CreateChargedPartHistoSparse("fHistKaonRecETDep_","E_{T}, kaons");
461 fHistKaonRec = CreateChargedPartHistoSparse("fHistKaonRec_","counts, kaons");
463 histname = "fHistKaonMatchtotETDep_" + fHistogramNameSuffix;
464 fHistKaonMatchtotETDep = new TH1F(histname.Data(),"total ET, Kaons",fgNumOfEBins, fgEAxis);
466 histname = "fHistKaonRecdEdxP_" + fHistogramNameSuffix;
467 fHistKaonRecdEdxP = new TH2F(histname,"TPC dEdx vs P",100,0.,10.,100,0.,200.);
470 fHistProtonRecETDep = CreateChargedPartHistoSparse("fHistProtonRecETDep_","E_{T}, protons");
471 fHistProtonRec = CreateChargedPartHistoSparse("fHistProtonRec_","counts, protons");
473 histname = "fHistProtonMatchtotETDep_" + fHistogramNameSuffix;
474 fHistProtonMatchtotETDep = new TH1F(histname.Data(),"total ET, Protons",fgNumOfEBins, fgEAxis);
476 histname = "fHistProtonRecdEdxP_" + fHistogramNameSuffix;
477 fHistProtonRecdEdxP = new TH2F(histname,"TPC dEdx vs P",100,0.,10.,100,0.,200.);
479 histname = "fHistTotChargedMatchtotETDep_" + fHistogramNameSuffix;
480 fHistTotChargedMatchtotETDep = new TH1F(histname.Data(),"total ET, charged particles",fgNumOfEBins, fgEAxis);
482 histname = "fHistTotalRectotETDep_" + fHistogramNameSuffix;
483 fHistTotalRectotETDep = new TH1F(histname.Data(),"total ET, all particles",fgNumOfEBins, fgEAxis);
485 histname = "fHistDeltaRZ_" + fHistogramNameSuffix;
486 fHistDeltaRZ = new TH2F(histname,"#Delta#phi vs #Delta#eta (track projection - cluster position)",200,-0.1,0.1,200,-0.1,0.1);
489 void AliAnalysisEmEtReconstructed::FillOutputList(TList *list)
490 {//Function for filling the output list
491 //AliAnalysisEt::FillOutputList(list);
495 list->Add(fHistAllRecETDep);
496 list->Add(fHistAllRec);
498 list->Add(fHistAllRectotETDep);
501 list->Add(fHistElectronRecETDep);
502 list->Add(fHistElectronRec);
504 list->Add(fHistElectronMatchtotETDep);
505 list->Add(fHistElectronRecdEdxP);
508 list->Add(fHistTotEMRectotET);
510 list->Add(fHistMuonRec);
511 list->Add(fHistMuonRecdEdxP);
512 list->Add(fHistMuonMatchtotETDep);
515 list->Add(fHistPionRecETDep);
516 list->Add(fHistPionRec);
518 list->Add(fHistPionMatchtotETDep);
519 list->Add(fHistPionRecdEdxP);
522 list->Add(fHistKaonRecETDep);
523 list->Add(fHistKaonRec);
525 list->Add(fHistKaonMatchtotETDep);
526 list->Add(fHistKaonRecdEdxP);
529 list->Add(fHistProtonRecETDep);
530 list->Add(fHistProtonRec);
532 list->Add(fHistProtonMatchtotETDep);
533 list->Add(fHistProtonRecdEdxP);
535 list->Add(fHistTotChargedMatchtotETDep);
536 list->Add(fHistTotalRectotETDep);
538 list->Add(fHistDeltaRZ);
541 //________________________________________________________________________
542 Double_t AliAnalysisEmEtReconstructed::GetTrackPID(const AliESDtrack *track) const
543 {//Get the default track ID
544 const Double_t *pidWeights = track->PID();
546 Double_t maxpidweight = 0;
550 for (Int_t p =0; p < AliPID::kSPECIES; p++)
552 if (pidWeights[p] > maxpidweight)
554 maxpidweight = pidWeights[p];