1 // $Id: AliAnalysisTaskEmcal.cxx $
3 // Emcal base analysis task.
7 #include "AliAnalysisTaskEmcal.h"
11 #include <TClonesArray.h>
14 #include "AliAnalysisManager.h"
15 #include "AliCentrality.h"
16 #include "AliVCluster.h"
17 #include "AliVParticle.h"
18 #include "AliEmcalJet.h"
19 #include "AliVEventHandler.h"
21 #include "AliEMCALGeometry.h"
23 ClassImp(AliAnalysisTaskEmcal)
25 //________________________________________________________________________
26 AliAnalysisTaskEmcal::AliAnalysisTaskEmcal() :
27 AliAnalysisTaskSE("AliAnalysisTaskEmcal"),
35 fTracksName("Tracks"),
36 fCaloName("CaloClusters"),
53 // Default constructor.
60 //________________________________________________________________________
61 AliAnalysisTaskEmcal::AliAnalysisTaskEmcal(const char *name) :
62 AliAnalysisTaskSE(name),
70 fTracksName("Tracks"),
71 fCaloName("CaloClusters"),
88 // Standard constructor.
94 // Output slot #1 writes into a TH1 container
95 DefineOutput(1, TList::Class());
98 //________________________________________________________________________
99 AliAnalysisTaskEmcal::~AliAnalysisTaskEmcal()
104 //________________________________________________________________________
105 void AliAnalysisTaskEmcal::UserCreateOutputObjects()
107 // User create outputs.
110 //________________________________________________________________________
111 void AliAnalysisTaskEmcal::RetrieveEventObjects()
113 // Retrieve objects from event.
118 InputEvent()->GetPrimaryVertex()->GetXYZ(fVertex);
120 AliCentrality *aliCent = InputEvent()->GetCentrality();
122 fCent = aliCent->GetCentralityPercentile("V0M");
123 if (fCent >= 0 && fCent < 10) fCentBin = 0;
124 else if (fCent >= 10 && fCent < 30) fCentBin = 1;
125 else if (fCent >= 30 && fCent < 50) fCentBin = 2;
126 else if (fCent >= 50 && fCent <= 100) fCentBin = 3;
128 AliWarning(Form("Negative centrality: %f. Assuming 99", fCent));
133 AliWarning(Form("Could not retrieve centrality information! Assuming 99"));
137 if ((!fCaloName.IsNull()) && (fAnaType == kEMCAL)) {
138 fCaloClusters = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fCaloName));
139 if (!fCaloClusters) {
140 AliWarning(Form("Could not retrieve clusters %s!", fCaloName.Data()));
144 if (!fTracksName.IsNull()) {
145 fTracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksName));
147 AliWarning(Form("Could not retrieve tracks %s!", fTracksName.Data()));
151 if (!fJetsName.IsNull()) {
152 fJets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fJetsName));
154 AliWarning(Form("Could not retrieve jets %s!", fJetsName.Data()));
159 //________________________________________________________________________
160 void AliAnalysisTaskEmcal::Init()
162 // Init the analysis.
164 if (fAnaType == kTPC) {
165 SetEtaLimits(-0.9, 0.9);
166 SetPhiLimits(-10, 10);
168 else if (fAnaType == kEMCAL) {
169 AliEMCALGeometry *geom = AliEMCALGeometry::GetInstance();
171 AliFatal("Can not create geometry");
174 SetEtaLimits(geom->GetArm1EtaMin(), geom->GetArm1EtaMax());
175 SetPhiLimits(geom->GetArm1PhiMin() * TMath::DegToRad(), geom->GetArm1PhiMax() * TMath::DegToRad());
178 AliWarning("Analysis type not recognized! Assuming kTPC...");
186 //________________________________________________________________________
187 Bool_t AliAnalysisTaskEmcal::IsJetTrack(AliEmcalJet* jet, Int_t itrack, Bool_t sorted) const
189 // Return true if track is in jet.
191 for (Int_t i = 0; i < jet->GetNumberOfTracks(); i++) {
192 Int_t ijettrack = jet->TrackAt(i);
193 if (sorted && ijettrack > itrack)
195 if (ijettrack == itrack)
201 //________________________________________________________________________
202 Bool_t AliAnalysisTaskEmcal::IsJetCluster(AliEmcalJet* jet, Int_t iclus, Bool_t sorted) const
204 // Return true if cluster is in jet.
206 for (Int_t i = 0; i < jet->GetNumberOfClusters(); i++) {
207 Int_t ijetclus = jet->ClusterAt(i);
208 if (sorted && ijetclus > iclus)
210 if (ijetclus == iclus)
216 //________________________________________________________________________
217 Bool_t AliAnalysisTaskEmcal::AcceptJet(AliEmcalJet *jet) const
219 // Return true if jet is accepted.
221 if (jet->Pt() <= fJetPtCut)
223 if (jet->Area() <= fJetAreaCut)
225 if (fAnaType == kEMCAL && !jet->IsInsideEmcal())
228 return (Bool_t)(jet->Eta() > fMinEta && jet->Eta() < fMaxEta && jet->Phi() > fMinPhi && jet->Phi() < fMaxPhi);
231 //________________________________________________________________________
232 Bool_t AliAnalysisTaskEmcal::AcceptCluster(AliVCluster* clus, Bool_t acceptMC) const
234 // Return true if cluster is accepted.
236 if (!acceptMC && clus->Chi2() == 100)
239 TLorentzVector nPart;
240 clus->GetMomentum(nPart, const_cast<Double_t*>(fVertex));
242 if (nPart.Et() < fPtCut)
248 //________________________________________________________________________
249 Bool_t AliAnalysisTaskEmcal::AcceptTrack(AliVParticle* track, Bool_t acceptMC) const
251 // Return true if track is accepted.
253 if (!acceptMC && track->GetLabel() == 100)
256 if (track->Pt() < fPtCut)
259 return (Bool_t)(track->Eta() > fMinEta && track->Eta() < fMaxEta && track->Phi() > fMinPhi && track->Phi() < fMaxPhi);
262 //________________________________________________________________________
263 void AliAnalysisTaskEmcal::UserExec(Option_t *)
265 // Main loop, called for each event.
270 RetrieveEventObjects();
274 // information for this iteration of the UserExec in the container
275 PostData(1, fOutput);
278 //________________________________________________________________________
279 void AliAnalysisTaskEmcal::Terminate(Option_t *)
281 // Called once at the end of the analysis.