AliPhysics  a34469b (a34469b)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskEmcal.h
Go to the documentation of this file.
1 #ifndef ALIANALYSISTASKEMCAL_H
2 #define ALIANALYSISTASKEMCAL_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice */
5 
6 class TClonesArray;
7 class TString;
8 class AliEmcalParticle;
9 class AliMCParticle;
10 class AliVCluster;
11 class AliVTrack;
12 class AliVParticle;
13 class AliVCaloCells;
14 class TH1;
15 class TProfile;
16 class AliEMCALGeometry;
17 class AliGenPythiaEventHeader;
18 class AliVCaloTrigger;
19 class AliAnalysisUtils;
20 class AliEMCALTriggerPatchInfo;
21 class AliAODTrack;
22 class AliEmcalPythiaInfo;
23 class AliESDInputHandler;
24 
25 #include "Rtypes.h"
26 
27 #include "AliParticleContainer.h"
28 #include "AliMCParticleContainer.h"
29 #include "AliTrackContainer.h"
30 #include "AliClusterContainer.h"
31 #include "AliEmcalList.h"
32 
33 #include "AliAnalysisTaskSE.h"
68  public:
69 
74  enum EDataType_t {
78  };
79 
84  enum BeamType {
85  kNA = -1,
86  kpp = 0,
87  kAA = 1,
88  kpA = 2
89  };
90 
95  enum TriggerType {
96  kND = -1,
97  kJ1 = 0,
98  kJ2 = 1,
99  kG1 = 2,
100  kG2 = 3,
101  kL0 = 4
102  };
103 
114  };
115 
123  };
124 
126  AliAnalysisTaskEmcal(const char *name, Bool_t histo=kFALSE);
127  virtual ~AliAnalysisTaskEmcal();
128 
130  AliTrackContainer *AddTrackContainer(const char *n);
138  AliParticleContainer *GetParticleContainer(const char* name) const;
140  AliClusterContainer *GetClusterContainer(const char* name) const;
142  AliMCParticleContainer *GetMCParticleContainer(const char* name) const { return dynamic_cast<AliMCParticleContainer*>(GetParticleContainer(name)); }
144  AliTrackContainer *GetTrackContainer(const char* name) const { return dynamic_cast<AliTrackContainer*>(GetParticleContainer(name)) ; }
145  void RemoveParticleContainer(Int_t i=0) { fParticleCollArray.RemoveAt(i) ; }
146  void RemoveClusterContainer(Int_t i=0) { fClusterCollArray.RemoveAt(i) ; }
147  void SetCaloCellsName(const char *n) { fCaloCellsName = n ; }
149  void SetCaloTriggersName(const char *n) { fCaloTriggersName = n ; }
150  void SetCentRange(Double_t min, Double_t max) { fMinCent = min ; fMaxCent = max ; }
151  void SetCentralityEstimator(const char *c) { fCentEst = c ; }
152  void SetClusPtCut(Double_t cut, Int_t c=0);
153  void SetClusTimeCut(Double_t min, Double_t max, Int_t c=0);
156  void SetHistoBins(Int_t nbins, Double_t min, Double_t max) { fNbins = nbins; fMinBinPt = min; fMaxBinPt = max ; }
157  void SetIsEmbedded(Bool_t i) { fIsEmbedded = i ; }
158  void SetIsPythia(Bool_t i) { fIsPythia = i ; }
161  void SetMinMCLabel(Int_t s) { fMinMCLabel = s ; }
162  void SetMinNTrack(Int_t min) { fMinNTrack = min ; }
165  virtual void SetNCentBins(Int_t n) { fNcentBins = n ; }
167  void SetOffTrigger(UInt_t t) { fOffTrigger = t ; }
168  void SetTrackEtaLimits(Double_t min, Double_t max, Int_t c=0);
169  void SetTrackPhiLimits(Double_t min, Double_t max, Int_t c=0);
170  void SetTrackPtCut(Double_t cut, Int_t c=0);
171  void SetTrigClass(const char *n) { fTrigClass = n ; }
173  void SetUseAliAnaUtils(Bool_t b, Bool_t bRejPilup = kTRUE) { fUseAliAnaUtils = b ; fRejectPileup = bRejPilup ; }
174  void SetVzRange(Double_t min, Double_t max) { fMinVz = min ; fMaxVz = max ; }
179  void SetPythiaInfoName(const char *n) { fPythiaInfoName = n ; }
180  const TString& GetPythiaInfoName() const { return fPythiaInfoName ; }
181  const AliEmcalPythiaInfo *GetPythiaInfo() const { return fPythiaInfo ; }
183  void SetMCFilter() { fMCRejectFilter = kTRUE ; }
184  void ResetMCFilter() { fMCRejectFilter = kFALSE ; }
191 
192  protected:
193  void LoadPythiaInfo(AliVEvent *event);
194  void SetRejectionReasonLabels(TAxis* axis);
195  Bool_t AcceptCluster(AliVCluster *clus, Int_t c = 0) const;
196  Bool_t AcceptTrack(AliVParticle *track, Int_t c = 0) const;
197  void AddObjectToEvent(TObject *obj, Bool_t attempt = kFALSE);
198  AliVParticle *GetAcceptParticleFromArray(Int_t p, Int_t c=0) const;
199  AliVCluster *GetAcceptClusterFromArray(Int_t cl, Int_t c=0) const;
200  TClonesArray *GetArrayFromEvent(const char *name, const char *clname=0);
202  TClonesArray *GetParticleArray(Int_t i=0) const;
203  TClonesArray *GetClusterArray(Int_t i=0) const;
204  Int_t GetNParticles(Int_t i=0) const;
205  Int_t GetNClusters(Int_t i=0) const;
206  AliEMCALTriggerPatchInfo *GetMainTriggerPatch(TriggerCategory triggersel = kTriggerLevel1Jet, Bool_t doOfflinSimple = kFALSE);
207  Bool_t HasTriggerType(TriggerType triggersel);
209  Bool_t PythiaInfoFromFile(const char* currFile, Float_t &fXsec, Float_t &fTrials, Int_t &pthard);
210  Bool_t IsTrackInEmcalAcceptance(AliVParticle* part, Double_t edges=0.9) const;
211 
212  void GeneratePythiaInfoObject(AliMCEvent* mcEvent);
214 
215  // Overloaded AliAnalysisTaskSE methods
217  void UserExec(Option_t *option);
218  Bool_t UserNotify();
219 
220  // Virtual functions, to be overloaded in derived classes
221  virtual void ExecOnce();
222  virtual Bool_t FillGeneralHistograms();
223  virtual Bool_t IsEventSelected();
224  virtual Bool_t RetrieveEventObjects();
225 
231  virtual void RunChanged(Int_t /*newrun*/) {}
232 
238  virtual void UserExecOnce() {}
239 
245  virtual Bool_t FillHistograms() { return kTRUE ; }
246 
254  virtual Bool_t Run() { return kTRUE ; }
255 
256  // Static utilities
257  static void GetEtaPhiDiff(const AliVTrack *t, const AliVCluster *v, Double_t &phidiff, Double_t &etadiff);
258  static Byte_t GetTrackType(const AliVTrack *t);
259  static Byte_t GetTrackType(const AliAODTrack *aodTrack, UInt_t filterBit1, UInt_t filterBit2);
260  static Double_t DeltaPhi(Double_t phia, Double_t phib, Double_t rMin = -TMath::Pi()/2, Double_t rMax = 3*TMath::Pi()/2);
262  static void GenerateFixedBinArray(Int_t n, Double_t min, Double_t max, Double_t* array);
263  static Double_t GetParallelFraction(AliVParticle* part1, AliVParticle* part2);
264  static Double_t GetParallelFraction(const TVector3& vect1, AliVParticle* part2);
265  static AliESDInputHandler* AddESDHandler();
266 
268 
269  // Task configuration
317 
318  // Service fields
320  AliAnalysisUtils *fAliAnalysisUtils;
322  AliEMCALGeometry *fGeom;
323  TClonesArray *fTracks;
324  TClonesArray *fCaloClusters;
325  AliVCaloCells *fCaloCells;
326  AliVCaloTrigger *fCaloTriggers;
327  TClonesArray *fTriggerPatchInfo;
338  AliGenPythiaEventHeader *fPythiaHeader;
344 
345  // Output
353  TProfile *fHistXsection;
360 
361  private:
362  AliAnalysisTaskEmcal(const AliAnalysisTaskEmcal&); // not implemented
363  AliAnalysisTaskEmcal &operator=(const AliAnalysisTaskEmcal&); // not implemented
364 
366  ClassDef(AliAnalysisTaskEmcal, 15) // EMCAL base analysis task
368 };
369 
379 {
380  Double_t dphi = -999;
381  const Double_t tpi = TMath::TwoPi();
382 
383  if (phia < 0) phia += tpi;
384  else if (phia > tpi) phia -= tpi;
385  if (phib < 0) phib += tpi;
386  else if (phib > tpi) phib -= tpi;
387  dphi = phib - phia;
388  if (dphi < rangeMin) dphi += tpi;
389  else if (dphi > rangeMax) dphi -= tpi;
390 
391  return dphi;
392 }
393 
404 {
405  Double_t binWidth = (max-min)/n;
406  array[0] = min;
407  for (Int_t i = 1; i <= n; i++) {
408  array[i] = array[i-1]+binWidth;
409  }
410 }
411 
422 {
423  Double_t *array = new Double_t[n+1];
424  GenerateFixedBinArray(n, min, max, array);
425  return array;
426 }
427 
428 #endif
void SetJetPtFactor(Float_t f)
void SetCentRange(Double_t min, Double_t max)
void SetPythiaInfoName(const char *n)
void SetTrackPtFactor(Float_t f)
Bool_t fGeneratePythiaInfoObject
Generate Pythia info object.
TObjArray fClusterCollArray
cluster collection array
Int_t fNVertSPDCont
!event SPD vertex number of contributors
AliMCParticleContainer * GetMCParticleContainer(const char *name) const
Bool_t fIsPythia
trigger, if it is a PYTHIA production
double Double_t
Definition: External.C:58
TH1 * fHistTrials
!trials from pyxsec.root
static Double_t DeltaPhi(Double_t phia, Double_t phib, Double_t rMin=-TMath::Pi()/2, Double_t rMax=3 *TMath::Pi()/2)
EMCAL Level1 gamma trigger, low threshold.
AliEmcalPythiaInfo * fPythiaInfo
!event parton info
Bool_t AcceptTrack(AliVParticle *track, Int_t c=0) const
EMCAL Level1 jet trigger, low threshold.
Bool_t HasTriggerType(TriggerType triggersel)
Int_t fNTrials
!event trials
void SetMinNTrack(Int_t min)
UInt_t fOffTrigger
offline trigger for event selection
void AdoptParticleContainer(AliParticleContainer *cont)
Double_t fVertexSPD[3]
!event Svertex
Double_t fMinCent
min centrality for event selection
Double_t fTrackPtCut
cut on track pt in event selection
No special treatment for EMCal triggers.
Recalculated jet trigger patch; does not need to be above trigger threshold.
Base task in the EMCAL framework.
Bool_t fLocalInitialized
whether or not the task has been already initialized
Bool_t fUsePtHardBinScaling
Use pt hard bin scaling in merging.
Container with name, TClonesArray and cuts for particles.
void SetUseAliAnaUtils(Bool_t b, Bool_t bRejPilup=kTRUE)
void SetUseSPDTrackletVsClusterBG(Bool_t b)
Double_t fPtHard
!event pt hard
void SetTrackPtCut(Double_t cut, Int_t c=0)
static void GetEtaPhiDiff(const AliVTrack *t, const AliVCluster *v, Double_t &phidiff, Double_t &etadiff)
Double_t fMinBinPt
min pt in histograms
Double_t fEPV0
!event plane V0
void SetUseNewCentralityEstimation(Bool_t b)
Bool_t fGeneralHistograms
whether or not it should fill some general histograms
Bool_t AcceptCluster(AliVCluster *clus, Int_t c=0) const
TCanvas * c
Definition: TestFitELoss.C:172
AliAnalysisTaskEmcal & operator=(const AliAnalysisTaskEmcal &)
Int_t fCentBin
!event centrality bin
TH1 * fHistEventsAfterSel
!total number of events per pt hard bin after selection
void SetTriggerTypeSel(TriggerType t)
Float_t fPtHardAndClusterPtFactor
Factor between ptHard and cluster pT to reject/accept event.
Double_t fMinPtTrackInEmcal
min pt track in emcal
void SetVzRange(Double_t min, Double_t max)
TH1 * fHistEventPlane
!event plane distribution
AliTrackContainer * GetTrackContainer(const char *name) const
TH1 * fHistEvents
!total number of events per pt hard bin
void SetClusPtCut(Double_t cut, Int_t c=0)
AliClusterContainer * AddClusterContainer(const char *n)
Double_t fEPV0C
!event plane V0C
TH1 * fHistCentrality
!event centrality distribution
void SetCaloTriggerPatchInfoName(const char *n)
Container for particles within the EMCAL framework.
Bool_t fIsEmbedded
trigger, embedded signal
void AdoptClusterContainer(AliClusterContainer *cont)
TObjArray fParticleCollArray
particle/track collection array
BeamType
Switch for the beam type.
void SetTrackEtaLimits(Double_t min, Double_t max, Int_t c=0)
AliParticleContainer * GetParticleContainer(Int_t i=0) const
void SetEMCalTriggerMode(EMCalTriggerMode_t m)
TProfile * fHistXsectionAfterSel
!x section from pythia header
TriggerType
Switch for EMCAL trigger types.
EMCalTriggerMode_t fEMCalTriggerMode
EMCal trigger selection mode.
virtual Bool_t FillHistograms()
void SetForceBeamType(BeamType f)
Int_t GetNParticles(Int_t i=0) const
TClonesArray * fCaloClusters
!clusters
Bool_t fUseNewCentralityEstimation
Use new centrality estimation (for 2015 data)
Bool_t IsTrackInEmcalAcceptance(AliVParticle *part, Double_t edges=0.9) const
int Int_t
Definition: External.C:63
TH1 * fHistTriggerClasses
!number of events in each trigger class
unsigned int UInt_t
Definition: External.C:33
float Float_t
Definition: External.C:68
Double_t fMaxVz
max vertex for event selection
void GeneratePythiaInfoObject(AliMCEvent *mcEvent)
AliEMCALGeometry * fGeom
!emcal geometry
The overlap between low and high threshold trigger is assigned to the lower threshold only...
kRecalculated gamma trigger patch; does not need to be above trigger threshold
TString fCaloTriggerPatchInfoName
trigger patch info array name
TString fCaloTriggersName
name of calo triggers collection
AliGenPythiaEventHeader * fPythiaHeader
!event Pythia header
void SetTrackPhiLimits(Double_t min, Double_t max, Int_t c=0)
AliParticleContainer * AddParticleContainer(const char *n)
AliAnalysisUtils * fAliAnalysisUtils
!vertex selection (optional)
BeamType fForceBeamType
forced beam type
Int_t fNcentBins
how many centrality bins
AliClusterContainer * GetClusterContainer(Int_t i=0) const
TriggerType fTriggerTypeSel
trigger type to select based on trigger patches
virtual Bool_t FillGeneralHistograms()
TString fTrigClass
trigger class name for event selection
Float_t fPtHardAndJetPtFactor
Factor between ptHard and jet pT to reject/accept event.
TClonesArray * GetParticleArray(Int_t i=0) const
void SetUsePtHardBinScaling(Bool_t b)
Double_t fMinVz
min vertex for event selection
BeamType fBeamType
!event beam type
Float_t fPtHardAndTrackPtFactor
Factor between ptHard and track pT to reject/accept event.
Double_t fCent
!event centrality
Double_t fMinEventPlane
minimum event plane value
TString fCaloCellsName
name of calo cell collection
Int_t fMCLabelShift
if MC label > fMCLabelShift, MC label -= fMCLabelShift
Int_t GetNClusters(Int_t i=0) const
Int_t fNVertCont
!event vertex number of contributors
Bool_t fMCRejectFilter
enable the filtering of events by tail rejection
unsigned long ULong_t
Definition: External.C:38
void RemoveClusterContainer(Int_t i=0)
Double_t fZvertexDiff
upper limit for distance between primary and SPD vertex
EMCAL Level0 trigger.
EMCAL Level1 jet trigger, high threshold.
void AdoptMCParticleContainer(AliMCParticleContainer *cont)
Int_t fSelectPtHardBin
select one pt hard bin for analysis
AliMCParticleContainer * AddMCParticleContainer(const char *n)
static Double_t GetParallelFraction(AliVParticle *part1, AliVParticle *part2)
virtual Bool_t RetrieveEventObjects()
Bool_t fRejectPileup
Reject pilup using function AliAnalysisUtils::IsPileUpEvent()
void RemoveParticleContainer(Int_t i=0)
TProfile * fHistXsection
!x section from pyxsec.root
Bool_t PythiaInfoFromFile(const char *currFile, Float_t &fXsec, Float_t &fTrials, Int_t &pthard)
void UserExec(Option_t *option)
Int_t fMinMCLabel
minimum MC label value for the tracks/clusters being considered MC particles
virtual void SetNCentBins(Int_t n)
AliVCaloCells * fCaloCells
!cells
void SetTrigClass(const char *n)
TClonesArray * GetArrayFromEvent(const char *name, const char *clname=0)
Enhanced TList-derived class that implements correct merging for pt_hard binned production.
Definition: AliEmcalList.h:23
Double_t fEventPlaneVsEmcal
select events which have a certain event plane wrt the emcal
virtual Bool_t IsEventSelected()
TH1 * fHistPtHard
!pt hard distribution
static Double_t * GenerateFixedBinArray(Int_t n, Double_t min, Double_t max)
AliEmcalList * fOutput
!output list
void SetZvertexDiffValue(Double_t cut)
Double_t fMaxBinPt
max pt in histograms
Int_t fPtHardBin
!event pt hard bin
void SetHistoBins(Int_t nbins, Double_t min, Double_t max)
AliMCParticleContainer * GetMCParticleContainer(Int_t i=0) const
virtual void RunChanged(Int_t)
TClonesArray * fTracks
!tracks
TH1 * fHistTrialsAfterSel
!total number of trials per pt hard bin after selection
void LoadPythiaInfo(AliVEvent *event)
Bool_t fIsEsd
!whether it's an ESD analysis
Double_t fVertex[3]
!event vertex
AliTrackContainer * AddTrackContainer(const char *n)
AliTrackContainer * GetTrackContainer(Int_t i=0) const
EMCalTriggerMode_t
Handling of the EMCAL trigger thresholds.
Bool_t fCreateHisto
whether or not create histograms
Store some informaion about a Pythia eventThis class is used to store some information about a Pythia...
TH1 * fHistEventRejection
!book keep reasons for rejecting event
void SetMakeGeneralHistograms(Bool_t g)
TClonesArray * fTriggerPatchInfo
!trigger patch info array
TClonesArray * GetClusterArray(Int_t i=0) const
void SetNeedEmcalGeom(Bool_t n)
Double_t fEPV0A
!event plane V0A
void SetEventPlaneVsEmcal(Double_t ep)
void SetCaloTriggersName(const char *n)
const AliEmcalPythiaInfo * GetPythiaInfo() const
TString fCentEst
name of V0 centrality estimator
TString fPythiaInfoName
name of pythia info object
const char Option_t
Definition: External.C:48
Int_t fRunNumber
!run number (triggering RunChanged()
EMCAL Level1 gamma trigger, high threshold.
void AddObjectToEvent(TObject *obj, Bool_t attempt=kFALSE)
AliVCaloTrigger * fCaloTriggers
!calo triggers
void SetRejectionReasonLabels(TAxis *axis)
TH1 * fHistZVertex
!z vertex position
Int_t fMinNTrack
minimum nr of tracks in event with pT>fTrackPtCut
static Byte_t GetTrackType(const AliVTrack *t)
void SetGeneratePythiaInfoObject(Bool_t b)
const Int_t nbins
Bool_t fUseAliAnaUtils
used for LHC13* data: z-vtx, Ncontributors, z-vtx resolution cuts
void SetClusTimeCut(Double_t min, Double_t max, Int_t c=0)
bool Bool_t
Definition: External.C:53
ULong_t fTriggers
list of fired triggers
static AliESDInputHandler * AddESDHandler()
Double_t fMaxEventPlane
maximum event plane value
Float_t fXsection
!x-section from pythia header
EDataType_t
Switch for the data type.
void SetCaloCellsName(const char *n)
void SetCentralityEstimator(const char *c)
TH1 * fHistEventCount
!incoming and selected events
Double_t fMaxCent
max centrality for event selection
void SetMinPtTrackInEmcal(Double_t min)
TriggerCategory
Online trigger categories.
AliVParticle * GetAcceptParticleFromArray(Int_t p, Int_t c=0) const
Container structure for EMCAL clusters.
Container for MC-true particles within the EMCAL framework.
Bool_t fNeedEmcalGeom
whether or not the task needs the emcal geometry
AliVCluster * GetAcceptClusterFromArray(Int_t cl, Int_t c=0) const
void SetClusterPtFactor(Float_t f)
const TString & GetPythiaInfoName() const
void AdoptTrackContainer(AliTrackContainer *cont)
Definition: External.C:196
Int_t fNbins
no. of pt bins
Bool_t fTklVsClusSPDCut
Apply tracklet-vs-cluster SPD cut to reject background events in pp.
AliEMCALTriggerPatchInfo * GetMainTriggerPatch(TriggerCategory triggersel=kTriggerLevel1Jet, Bool_t doOfflinSimple=kFALSE)
static Double_t fgkEMCalDCalPhiDivide
phi value used to distinguish between DCal and EMCal