1 // $Id: AliAnalysisTaskEmcal.cxx 56756 2012-05-30 05:03:02Z loizides $
3 // Emcal base analysis task.
7 #include "AliAnalysisTaskEmcal.h"
10 #include <TClonesArray.h>
14 #include "AliAnalysisManager.h"
15 #include "AliCentrality.h"
16 #include "AliEMCALGeometry.h"
17 #include "AliESDEvent.h"
18 #include "AliEmcalJet.h"
19 #include "AliEmcalParticle.h"
21 #include "AliMCParticle.h"
22 #include "AliVCluster.h"
23 #include "AliVEventHandler.h"
24 #include "AliVParticle.h"
26 ClassImp(AliAnalysisTaskEmcal)
28 //________________________________________________________________________
29 AliAnalysisTaskEmcal::AliAnalysisTaskEmcal() :
30 AliAnalysisTaskSE("AliAnalysisTaskEmcal"),
48 // Default constructor.
55 //________________________________________________________________________
56 AliAnalysisTaskEmcal::AliAnalysisTaskEmcal(const char *name, Bool_t histo) :
57 AliAnalysisTaskSE(name),
75 // Standard constructor.
82 DefineOutput(1, TList::Class());
86 //________________________________________________________________________
87 AliAnalysisTaskEmcal::~AliAnalysisTaskEmcal()
92 //________________________________________________________________________
93 void AliAnalysisTaskEmcal::UserExec(Option_t *)
95 // Main loop, called for each event.
103 if (!RetrieveEventObjects())
109 if (!FillHistograms())
113 // information for this iteration of the UserExec in the container
114 PostData(1, fOutput);
118 //________________________________________________________________________
119 Bool_t AliAnalysisTaskEmcal::AcceptCluster(AliVCluster *clus, Bool_t acceptMC) const
121 // Return true if cluster is accepted.
126 if (!clus->IsEMCAL())
129 if (!acceptMC && clus->Chi2() == 100)
132 TLorentzVector nPart;
133 clus->GetMomentum(nPart, const_cast<Double_t*>(fVertex));
135 if (nPart.Et() < fClusPtCut)
141 //________________________________________________________________________
142 Bool_t AliAnalysisTaskEmcal::AcceptEmcalPart(AliEmcalParticle *part, Bool_t acceptMC) const
144 // Return true if EMCal particle is accepted.
149 if (fAnaType == kEMCAL && !part->IsEMCAL())
152 if ((part->IsTrack() && part->Pt() < fTrackPtCut) || (part->IsCluster() && part->Pt() < fClusPtCut))
155 if (!acceptMC && part->IsMC())
161 //________________________________________________________________________
162 Bool_t AliAnalysisTaskEmcal::AcceptTrack(AliVTrack *track, Bool_t acceptMC) const
164 // Return true if track is accepted.
169 if (!acceptMC && track->GetLabel() == 100)
172 if (track->Pt() < fTrackPtCut)
178 //_____________________________________________________
179 AliAnalysisTaskEmcal::BeamType AliAnalysisTaskEmcal::GetBeamType()
181 // Get beam type : pp-AA-pA
182 // ESDs have it directly, AODs get it from hardcoded run number ranges
184 AliESDEvent *esd = dynamic_cast<AliESDEvent*>(InputEvent());
186 const AliESDRun *run = esd->GetESDRun();
187 TString beamType = run->GetBeamType();
188 if (beamType == "p-p")
190 else if (beamType == "A-A")
192 else if (beamType == "p-A")
197 Int_t runNumber = InputEvent()->GetRunNumber();
198 if ((runNumber >= 136851 && runNumber <= 139517) || // LHC10h
199 (runNumber >= 166529 && runNumber <= 170593)) // LHC11h
208 //________________________________________________________________________
209 void AliAnalysisTaskEmcal::ExecOnce()
211 // Init the analysis.
213 AliError(Form("%s: Could not retrieve event! Returning!", GetName()));
217 if (!fCaloName.IsNull() && (fAnaType == kEMCAL) && !fCaloClusters) {
218 fCaloClusters = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fCaloName));
219 if (!fCaloClusters) {
220 AliError(Form("%s: Could not retrieve clusters %s!", GetName(), fCaloName.Data()));
223 TClass *cl = fCaloClusters->GetClass();
224 if (!cl->GetBaseClass("AliVCluster") && !cl->GetBaseClass("AliEmcalParticle")) {
225 AliError(Form("%s: Collection %s does not contain AliVCluster nor AliEmcalParticle objects!", GetName(), fCaloName.Data()));
232 if (!fTracksName.IsNull() && !fTracks) {
233 fTracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksName));
235 AliError(Form("%s: Could not retrieve tracks %s!", GetName(), fTracksName.Data()));
238 TClass *cl = fTracks->GetClass();
239 if (!cl->GetBaseClass("AliVParticle") && !cl->GetBaseClass("AliEmcalParticle")) {
240 AliError(Form("%s: Collection %s does not contain AliVParticle nor AliEmcalParticle objects!", GetName(), fTracksName.Data()));
250 //________________________________________________________________________
251 TClonesArray *AliAnalysisTaskEmcal::GetArrayFromEvent(const char *name, const char *clname)
253 // Get array from event.
255 TClonesArray *arr = 0;
257 if (!sname.IsNull()) {
258 arr = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(sname));
260 AliWarning(Form("%s: Could not retrieve array with name %s!", GetName(), name));
267 TString objname(arr->GetClass()->GetName());
269 if (!cls.InheritsFrom(clname)) {
270 AliWarning(Form("%s: Objects of type %s in %s are not inherited from %s!",
271 GetName(), cls.GetName(), name, clname));
277 //________________________________________________________________________
278 Bool_t AliAnalysisTaskEmcal::RetrieveEventObjects()
280 // Retrieve objects from event.
285 InputEvent()->GetPrimaryVertex()->GetXYZ(fVertex);
287 fBeamType = GetBeamType();
289 if (fBeamType == kAA) {
290 AliCentrality *aliCent = InputEvent()->GetCentrality();
292 fCent = aliCent->GetCentralityPercentile("V0M");
293 if (fCent >= 0 && fCent < 10) fCentBin = 0;
294 else if (fCent >= 10 && fCent < 30) fCentBin = 1;
295 else if (fCent >= 30 && fCent < 50) fCentBin = 2;
296 else if (fCent >= 50 && fCent <= 100) fCentBin = 3;
298 AliWarning(Form("%s: Negative centrality: %f. Assuming 99", GetName(), fCent));
302 AliWarning(Form("%s: Could not retrieve centrality information! Assuming 99", GetName()));