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 xCluster[4]={0}, xCharged[7]={0};
207 AliESDtrack *track = 0;
210 for (int iCluster = 0; iCluster < nCluster; iCluster++ )
212 // Retrieve calo cluster information
213 AliESDCaloCluster* caloCluster = ( AliESDCaloCluster* )caloClusters->At( iCluster );
214 Float_t caloE = caloCluster->E();
215 caloCluster->GetPosition(pos);
216 caloPos.SetXYZ(pos[0],pos[1],pos[2]);
218 // look for track that matches calo cluster
219 //track = FindMatch(caloCluster, res); // Marcelo's matching
221 // *********************
223 delta_eta = caloCluster->GetTrackDz();
224 delta_phi = caloCluster->GetTrackDx();
226 if (caloCluster->GetTrackMatchedIndex() > 0) // tender's matching
227 track = fESD->GetTrack(caloCluster->GetTrackMatchedIndex());
230 // if ( !fEsdtrackCutsITSTPC->IsSelected(track) )
232 // *********************
234 // Retrieve track PID
236 maxPid = GetTrackPID(track);
237 xCharged[0] = track->Eta();
238 xCharged[1] = track->Pt(); }
246 Double_t etDep = CalculateTransverseEnergy(caloCluster);
249 //fHistAllRecEtaEDepETDep->Fill(caloE,caloPos.Eta(),etDep);
250 //fHistAllRecEtaETDep->Fill(etDep,caloPos.Eta());
253 xCluster[1] = caloPos.Eta();
254 xCluster[2] = TMath::RadToDeg()*caloPos.Phi();
255 xCluster[3] = caloCluster->GetNCells();
256 fAllRectotETDep += etDep;
260 fHistAllRecETDep->Fill(xCluster,etDep);
261 fHistAllRec->Fill(xCluster);
265 xCharged[3] = caloPos.Eta();
266 xCharged[4] = TMath::RadToDeg()*caloPos.Phi();
267 xCharged[5] = caloCluster->GetNCells();
270 Bool_t isCharged = kFALSE;
272 if (maxPid == AliPID::kProton)
276 fHistProtonRecETDep->Fill(xCharged,etDep);
277 fHistProtonRec->Fill(xCharged);
280 if (track) fHistProtonRecdEdxP->Fill(track->P(),track->GetTPCsignal());
282 if ((res>0.) && (res<fResCut))
284 fProtonMatchtotETDep += etDep;
289 else if (maxPid == AliPID::kPion)
293 fHistPionRecETDep->Fill(xCharged,etDep);
294 fHistPionRec->Fill(xCharged);
297 if (track) fHistPionRecdEdxP->Fill(track->P(),track->GetTPCsignal());
299 if ((res>0.) && (res<fResCut))
301 fPionMatchtotETDep += etDep;
305 else if (maxPid == AliPID::kKaon)
309 fHistKaonRecETDep->Fill(xCharged,etDep);
310 fHistKaonRec->Fill(xCharged);
313 if (track) fHistKaonRecdEdxP->Fill(track->P(),track->GetTPCsignal());
315 if ((res>0.) && (res<fResCut))
318 fKaonMatchtotETDep += etDep;
322 else if (maxPid == AliPID::kMuon)
326 fHistMuonRecETDep->Fill(xCharged,etDep);
327 fHistMuonRec->Fill(xCharged);
329 if (track) fHistMuonRecdEdxP->Fill(track->P(),track->GetTPCsignal());
331 if ((res>0.) && (res<fResCut))
334 fMuonMatchtotETDep += etDep;
338 else if (maxPid == AliPID::kElectron)
342 fHistElectronRecETDep->Fill(xCharged,etDep);
343 fHistElectronRec->Fill(xCharged);
346 if (track) fHistElectronRecdEdxP->Fill(track->P(),track->GetTPCsignal());
348 if ((res>0.) && (res<fResCut))
350 fElectronMatchtotETDep += etDep;
357 fNeutralRectotET += etDep;
360 } // end of loop over clusters
362 fTotEMRectotET = fElectronMatchtotETDep + fNeutralRectotET;
363 fTotChargedMatchtotETDep = fMuonMatchtotETDep + fPionMatchtotETDep + fKaonMatchtotETDep + fProtonMatchtotETDep;
364 fTotalRectotETDep = fTotEMRectotET + fTotChargedMatchtotETDep;
366 fHistAllRectotETDep->Fill(fAllRectotETDep);
368 fHistElectronMatchtotETDep->Fill(fElectronMatchtotETDep);
369 fHistNeutralRectotET->Fill(fNeutralRectotET);
371 fHistTotEMRectotET->Fill(fTotEMRectotET);
373 fHistMuonMatchtotETDep->Fill(fMuonMatchtotETDep);
374 fHistPionMatchtotETDep->Fill(fPionMatchtotETDep);
375 fHistKaonMatchtotETDep->Fill(fKaonMatchtotETDep);
376 fHistProtonMatchtotETDep->Fill(fProtonMatchtotETDep);
377 fHistTotChargedMatchtotETDep->Fill(fTotChargedMatchtotETDep);
379 fHistTotalRectotETDep->Fill(fTotalRectotETDep);
386 void AliAnalysisEmEtReconstructed::Init()
388 AliAnalysisEt::Init();
392 void AliAnalysisEmEtReconstructed::ResetEventValues()
393 { // reset event values
394 AliAnalysisEt::ResetEventValues();
396 // collision geometry defaults for p+p:
399 fElectronMatchtotETDep = 0;
400 fNeutralRectotET = 0;
404 fMuonMatchtotETDep = 0; fPionMatchtotETDep = 0; fKaonMatchtotETDep = 0; fProtonMatchtotETDep = 0;
405 fTotChargedMatchtotETDep = 0;
407 fTotalRectotETDep = 0;
411 void AliAnalysisEmEtReconstructed::CreateHistograms()
412 { // histogram related additions
413 //AliAnalysisEt::CreateHistograms();
416 fHistAllRecETDep = CreateClusterHistoSparse("fHistAllRecETDep_","E_{T}, all particles");
417 fHistAllRec = CreateClusterHistoSparse("fHistAllRec_","counts, all particles");
419 TString histname = "fHistAllRectotETDep_" + fHistogramNameSuffix;
420 fHistAllRectotETDep = new TH1F(histname.Data(),"total ET, all particles",fgNumOfEBins, fgEAxis);
424 fHistElectronRecETDep = CreateChargedPartHistoSparse("fHistElectronRecETDep_","E_{T}, electrons");
425 fHistElectronRec = CreateChargedPartHistoSparse("fHistElectronRec_","counts, electrons");
427 histname = "fHistElectronMatchtotETDep_" + fHistogramNameSuffix;
428 fHistElectronMatchtotETDep = new TH1F(histname.Data(),"total ET, MC primary Electrons",fgNumOfEBins, fgEAxis);
430 histname = "fHistElectronRecdEdxP_" + fHistogramNameSuffix;
431 fHistElectronRecdEdxP = new TH2F(histname,"TPC dEdx vs P",100,0.,10.,100,0.,200.);
433 histname = "fHistNeutralRectotET_" + fHistogramNameSuffix;
434 fHistNeutralRectotET = new TH1F(histname.Data(),"total ET, neutral particles",fgNumOfEBins, fgEAxis);
436 histname = "fHistTotEMRectotET_" + fHistogramNameSuffix;
437 fHistTotEMRectotET = new TH1F(histname.Data(),"total electromagnetic ET",fgNumOfEBins, fgEAxis);
440 fHistMuonRecETDep = CreateChargedPartHistoSparse("fHistMuonRecETDep_","E_{T}, muons");
441 fHistMuonRec = CreateChargedPartHistoSparse("fHistMuonRec_","counts, muons");
443 histname = "fHistMuonMatchtotETDep_" + fHistogramNameSuffix;
444 fHistMuonMatchtotETDep = new TH1F(histname.Data(),"total ET, Muons",fgNumOfEBins, fgEAxis);
446 histname = "fHistMuonRecdEdxP_" + fHistogramNameSuffix;
447 fHistMuonRecdEdxP = new TH2F(histname,"TPC dEdx vs P",100,0.,10.,100,0.,200.);
450 fHistPionRecETDep = CreateChargedPartHistoSparse("fHistPionRecETDep_","E_{T}, pions");
451 fHistPionRec = CreateChargedPartHistoSparse("fHistPionRec_","counts, pions");
453 histname = "fHistPionMatchtotETDep_" + fHistogramNameSuffix;
454 fHistPionMatchtotETDep = new TH1F(histname.Data(),"total ET, Pions",fgNumOfEBins, fgEAxis);
455 histname = "fHistPionRecdEdxP_" + fHistogramNameSuffix;
456 fHistPionRecdEdxP = new TH2F(histname,"TPC dEdx vs P",100,0.,10.,100,0.,200.);
459 fHistKaonRecETDep = CreateChargedPartHistoSparse("fHistKaonRecETDep_","E_{T}, kaons");
460 fHistKaonRec = CreateChargedPartHistoSparse("fHistKaonRec_","counts, kaons");
462 histname = "fHistKaonMatchtotETDep_" + fHistogramNameSuffix;
463 fHistKaonMatchtotETDep = new TH1F(histname.Data(),"total ET, Kaons",fgNumOfEBins, fgEAxis);
465 histname = "fHistKaonRecdEdxP_" + fHistogramNameSuffix;
466 fHistKaonRecdEdxP = new TH2F(histname,"TPC dEdx vs P",100,0.,10.,100,0.,200.);
469 fHistProtonRecETDep = CreateChargedPartHistoSparse("fHistProtonRecETDep_","E_{T}, protons");
470 fHistProtonRec = CreateChargedPartHistoSparse("fHistProtonRec_","counts, protons");
472 histname = "fHistProtonMatchtotETDep_" + fHistogramNameSuffix;
473 fHistProtonMatchtotETDep = new TH1F(histname.Data(),"total ET, Protons",fgNumOfEBins, fgEAxis);
475 histname = "fHistProtonRecdEdxP_" + fHistogramNameSuffix;
476 fHistProtonRecdEdxP = new TH2F(histname,"TPC dEdx vs P",100,0.,10.,100,0.,200.);
478 histname = "fHistTotChargedMatchtotETDep_" + fHistogramNameSuffix;
479 fHistTotChargedMatchtotETDep = new TH1F(histname.Data(),"total ET, charged particles",fgNumOfEBins, fgEAxis);
481 histname = "fHistTotalRectotETDep_" + fHistogramNameSuffix;
482 fHistTotalRectotETDep = new TH1F(histname.Data(),"total ET, all particles",fgNumOfEBins, fgEAxis);
484 histname = "fHistDeltaRZ_" + fHistogramNameSuffix;
485 fHistDeltaRZ = new TH2F(histname,"#Delta#phi vs #Delta#eta (track projection - cluster position)",200,-0.1,0.1,200,-0.1,0.1);
488 void AliAnalysisEmEtReconstructed::FillOutputList(TList *list)
489 {//Function for filling the output list
490 //AliAnalysisEt::FillOutputList(list);
494 list->Add(fHistAllRecETDep);
495 list->Add(fHistAllRec);
497 list->Add(fHistAllRectotETDep);
500 list->Add(fHistElectronRecETDep);
501 list->Add(fHistElectronRec);
503 list->Add(fHistElectronMatchtotETDep);
504 list->Add(fHistElectronRecdEdxP);
507 list->Add(fHistTotEMRectotET);
509 list->Add(fHistMuonRec);
510 list->Add(fHistMuonRecdEdxP);
511 list->Add(fHistMuonMatchtotETDep);
514 list->Add(fHistPionRecETDep);
515 list->Add(fHistPionRec);
517 list->Add(fHistPionMatchtotETDep);
518 list->Add(fHistPionRecdEdxP);
521 list->Add(fHistKaonRecETDep);
522 list->Add(fHistKaonRec);
524 list->Add(fHistKaonMatchtotETDep);
525 list->Add(fHistKaonRecdEdxP);
528 list->Add(fHistProtonRecETDep);
529 list->Add(fHistProtonRec);
531 list->Add(fHistProtonMatchtotETDep);
532 list->Add(fHistProtonRecdEdxP);
534 list->Add(fHistTotChargedMatchtotETDep);
535 list->Add(fHistTotalRectotETDep);
537 list->Add(fHistDeltaRZ);
540 //________________________________________________________________________
541 Double_t AliAnalysisEmEtReconstructed::GetTrackPID(const AliESDtrack *track) const
542 {//Get the default track ID
543 const Double_t *pidWeights = track->PID();
545 Double_t maxpidweight = 0;
549 for (Int_t p =0; p < AliPID::kSPECIES; p++)
551 if (pidWeights[p] > maxpidweight)
553 maxpidweight = pidWeights[p];