ESD and AOD calorimeter Information
Calorimeter information in ESDs and AODs
The basic calorimeter information needed for analysis is stored in the ESDs or AODs in the form of CaloClusters and CaloCells (cell = EMCal Tower or PHOS crystal). Also there is some information stored in the AOD/ESD event classes, it will be detailed more in the lines below. There is also an analysis class for the validation of the ESDs/AODs information.
For the calorimeters, the information stored in the ESDs and the AODs is basically the same, there is no filtering, everything is kept but for the time of the cells. Also, most of the methods to retrive the information are similar. One problem is that the ESD/AOD CaloCells and ESD/AOD CaloClusters do not inherit from the same virtual mother class, this could make more easy to have the same code for the same analysis in ESDs and AODs. Below, I will try to detail what are the similarities and differencies.
You can find example macros to run on ESDs or AODs in
$ALICE_ROOT/EMCAL/macros/TestESD.C or TestAOD.C
All the ESDs information is filled via the AliEMCALReconstructor/AliPHOSReconstructor class, in the method FillESD(). The AODs are created via the analysis class
$ALICE_ROOT/ANALYSIS/AliAnalysisTaskESDfilter.cxx,.h
and as already mentioned, for the calorimeters it basically just copies all the information from ESD format to AOD format. In the lines below I will try to explain what is the information stored and how to retrieve it. The location of the classes that I am going to describe below is
$ALICE_ROOT/STEER
Event
AliESDEvent and AliAODEvent are manager classes for the event information retrieval. Regarding the calorimeters they have the following access information (getter) methods (there are the equivalent setters just have a look to the header file of the class):
- ESDs
-
AliESDCaloCluster *GetCaloCluster(Int_t i) : Returns a CaloCluster listed in position "i" in the array of CaloClusters. It can be either PHOS or EMCAL.
-
AliESDCaloCells *GetEMCALCells(); AliESDCaloCells *GetPHOSCells() : Returns the pointer with the CaloCells object for EMCAL or PHOS.
-
Int_t GetEMCALClusters(TRefArray *clusters) ; Int_t GetPHOSClusters(TRefArray *clusters) : Returns an array with only EMCAL clusters or only with PHOS clusters.
-
Int_t GetNumberOfCaloClusters(): Returns the total number of clusters PHOS+EMCAL.
- TArrayF *GetEMCALTriggerPosition() TArrayF *GetEMCALTriggerAmplitudes() TArrayF *GetPHOSTriggerPosition() TArrayF *GetPHOSTriggerAmplitudes() : These methods return the position and energy of the trigger patches. This might change in near future.
-
const TGeoHMatrix* GetPHOSMatrix(Int_t i); const TGeoHMatrix* GetEMCALMatrix(Int_t i): Get the matrices for the transformation of global to local.
-
CAREFUL!!!: The following methods are not anymore functioning, they are there only for backward compatibility reasons:
- Int_t GetNumberOfEMCALClusters(); Int_t GetFirstEMCALCluster(); Int_t GetNumberOfPHOSClusters(); Int_t GetFirstPHOSCluster()
-
- AODs
-
TClonesArray *GetCaloClusters() : Returns the array with CaloClusters PHOS+EMCAL.
-
Int_t GetNCaloClusters() : Returns the number of CaloClusters in the array, PHOS+EMCAL.
-
AliAODCaloCluster *GetCaloCluster(Int_t i): Returns the CaloCluster in position "i", PHOS or EMCAL.
-
Int_t GetEMCALClusters(TRefArray *clusters); Int_t GetPHOSClusters(TRefArray *clusters) : Returns the array with EMCAL or PHOS CaloClusters.
-
AliAODCaloCells *GetEMCALCells(); AliAODCaloCells *GetPHOSCells(): Returns the pointer with the CaloCells object for EMCAL or PHOS.
-
For the moment, in the AODs there is no information regarding the trigger.
-
The transformation matrices are not stored in the AODs, it is foreseen to recover them via the analysis tender.
-
CaloClusters
AliESDCaloCluster and AliAODCaloCluster contain the information of the calorimeter clusters. Note that PHOS and EMCAL CaloClusters are kept in the same TClonesArray (see above). AODs and ESDs inheritance is different, AliESDCaloClusters derive from a TObject, and AliAODCaloClusters derive from AliAODCluster that derives from TObject. The information stored in each CaloCluster is :
- ESDs
-
Int_t GetID(): It returns a unique identifier number for a CaloCluster.
-
Char_t GetClusterType():It returns kPHOSCluster or kEMCALClusterv1. Another way to get the origin of the cluster:
Bool_t IsEMCAL(); Bool_t IsPHOS().
-
Kinematics:
-
void GetPosition(Float_t *pos) : It returns a {x,y,z} array with the global positions of the clusters in centimeters.
-
Double_t E() : It returns the energy of the cluster in GeV units.
-
void GetMomentum(TLorentzVector& p, Double_t * vertexPosition ): It fills a TLorentzVector pointing to the measured vertex of the collision. It also modifies the cluster global positions to have a vector pointing to the vertex, this has to be corrected. Assumes that cluster is neutral. To be used only for analysis with clusters not matched with tracks.
-
-
Shower Shape
-
Double_t GetClusterDisp(): Dispersion of the shower.
-
Double_t GetClusterChi2(): Not filled.
-
Double_t GetM20() Double_t GetM02() : Ellipse axis.
-
UChar_t GetNExMax() : Number or maxima in cluster. Not filled.
-
Double_t *GetPid(): PID weights array, 10 entries corresponding to the ones defined in AliPID.h
-
enum EParticleType { kElectron = 0, kMuon = 1, kPion = 2, kKaon = 3, kProton = 4, kPhoton = 5, kPi0 = 6, kNeutron =7, kKaon0 = 8, kEleCon = 9,kUnknown = 10};
-
-
-
Double_t GetDistToBadChannel() : Distance of the cluster to closest channel declared as kDead, kWarm or kHot.
-
Double_t GetTOF() : Measured Time of Flight of the cluster (PHOS)
-
Track-Cluster matching
-
TArrayI * GetTracksMatched(): List of indexes to the likely matched tracks. Tracks ordered in matching likeliness. If there is no match at all, by default it contains one entry with value -1.
-
Int_t GetTrackMatched(Int_t i): Index of track in position "i" in the list of indeces stored in GetTracksMatched().
-
Int_t GetNTracksMatched() : Total number of likely matched tracks. Size of GetTracksMatched() array.
-
Double_t GetEmcCpvDistance() : PHOS method, not used anymore. Use instead those below.
-
Double_t GetTrackDx(void), Double_t GetTrackDz(void): Distance in x and z to closest track. (Not filled yet in EMCAL)
-
-
MonteCarlo labels:
-
TArrayI * GetLabels(): List of indexes to the MonteCarlo particles that contribute to the cluster. Labels ordered in energy contribution.
-
Int_t GetLabel(): Index of MonteCarlo particle that deposited more energy in the cluster. First entry of GetLabels() array.
-
Int_t GetNLabels() : Total number of MonteCarlo particles that deposited energy. Size of GetLabels() array.
-
-
Cluster cells
-
Int_t GetNCells() : It returns the number of cells that contribute to the cluster.
-
UShort_t *GetCellsAbsId(): It returns the array with absolute id number of the cells contributing to the cluster. Size of the array is given by GetNCells().
-
Double32_t *GetCellsAmplitudeFraction(): For cluster unfolding, it returns an array with the fraction the energy that a cell contributes to the cluster. Only used by PHOS right now.
-
Int_t GetCellAbsId(Int_t i) : It returns the absolute Id number of a cell in the array between 0 and GetNCells()-1.
-
Double_t GetCellAmplitudeFraction(Int_t i) : It returns the amplitude fraction of a cell in the array between 0 and GetNCells()-1.
-
CAUTION! not anymore in use:
-
TArrayS * GetDigitAmplitude(); TArrayS * GetDigitTime(); TArrayS * GetDigitIndex(); Int_t GetNumberOfDigits()
-
-
-
- AODs: Metods listed here are defined either in AliAODCluster or AliAODCaloCluster,
-
Int_t GetID(): It returns a unique identifier number for a CaloCluster.
-
Char_t GetType():It returns kPHOSCharged, kPHOSNeutral or kEMCALClusterv1. Another way to get the origin of the cluster:
Bool_t IsEMCALCluster(); Bool_t IsPHOSCluster().
-
Kinematics:
-
template Bool_t GetPosition(T *pos) : It returns a {x,y,z} array with the global positions of the clusters in centimeters.
-
Double_t E() : It returns the energy of the cluster in GeV units.
-
void GetMomentum(TLorentzVector& p, Double_t * vertexPosition ): It fills a TLorentzVector pointing to the measured vertex of the collision. Vector pointing to the vertex. Assumes that cluster is neutral. To be used only for analysis with clusters not matched with tracks.
-
-
Shower Shape
-
Double_t GetDispersion(): Dispersion of the shower.
-
Double_t Chi2(): Not filled.
-
Double_t GetM20() Double_t GetM02() : Ellipse axis.
-
UChar_t GetNExMax() : Number or maxima in cluster. Not filled.
-
Double_t *PID(): PID weights array, 12 entries corresponding to the ones defined in AliPID.h
-
enum AODCluPID_t {kElectron = 0, kMuon = 1, kPion = 2, kKaon = 3, kProton = 4, kPhoton = 5, kPi0 = 6, kNeutron = 7, kKaon0 = 8, kEleCon = 9, kUnknown = 10, kCharged = 11, kNeutral =12 };
-
AliCluPID_t GetMostProbablePID(): Returns most probably PID.
-
-
-
Double_t GetDistanceToBadChannel() : Distance of the cluster to closest channel declared as kDead, kWarm or kHot.
-
Double_t GetTOF() : Measured Time of Flight of the cluster (PHOS)
-
Track-Cluster matching
-
TObject * GetTrackMatched(Int_t i): References to the list of most likely matched tracks are stored in a TRefArray. This method retrives the one in position "i". Tracks are listed in order of likeliness. The TObject is a AliAODTrack.
-
Int_t GetNTracksMatched() : Total number of likely matched tracks.
-
Double_t GetEmcCpvDistance() : PHOS method, to be replaced.
-
-
MonteCarlo labels:
-
Int_t * GetLabels(): List of indexes to the MonteCarlo particles that contribute to the cluster. Labels ordered in energy contribution.
-
Int_t GetLabel(UInt_t i): Index of MonteCarlo particle that deposited some energy in the cluster, in position "i" in the array GetLabels().
-
Int_t GetNLabel() : Total number of MonteCarlo particles that deposited energy. Size of GetLabels() array.
-
-
Cluster cells
-
Int_t GetNCells() : It returns the number of cells that contribute to the cluster.
-
UShort_t *GetCellsAbsId(): It returns the array with absolute id number of the cells contributing to the cluster. Size of the array is given by GetNCells().
-
Double32_t *GetCellsAmplitudeFraction(): For cluster unfolding, it returns an array with the fraction the energy that a cell contributes to the cluster. Only used by PHOS right now.
-
Int_t GetCellAbsId(Int_t i) : It returns the absolute Id number of a cell in the array between 0 and GetNCells()-1.
-
Double_t GetCellAmplitudeFraction(Int_t i) : It returns the amplitude fraction of a cell in the array between 0 and GetNCells()-1.
-
-
CaloCells
AliESDCaloCells and AliAODCaloCells contain an array with the amplitude or time (not in AODs) of all the cells that fired in the calorimeter during the event. Notice that per event there will be a CaloCell object with EMCAL cells and another one with PHOS cells.
- ESDs:
-
Short_t GetNumberOfCells(): Returns number of cells with some energy.
-
inline Double_t GetCellAmplitude(Short_t cellNumber): Given absolute cell number of a cell (from 0 to NModules*NRows*NColumns - 1), it returns the measured amplitude of the cell in GeV units.
-
inline Double_t GetCellTime(Short_t cellNumber): Given absolute cell number of a cell (from 0 to NModules*NRows*NColumns - 1), it returns the measured time of the cell in second units.
-
inline Double_t GetAmplitude(Short_t pos): Given the position in the array of cells (from 0 to GetNumberOfCells()-1), it returns the amplitude of the cell in GeV units.
-
inline Double_t GetTime(Short_t pos): Given the position in the array of cells (from 0 to GetNumberOfCells()-1), it returns the time of the cell in second units.
-
inline Short_t GetCellNumber(Short_t pos): Given the position in the array of cells (from 0 to GetNumberOfCells()-1), it returns the absolute cell number (from 0 to NModules*NRows*NColumns - 1).
-
Bool_t IsEMCAL(); Bool_t IsPHOS(); Char_t GetType(): Methods to check the origin of the AliESDCaloCell object, kEMCALCell or kPHOSCell.
-
-
AODs:
-
Short_t GetNumberOfCells(): Returns number of cells with some energy.
-
inline Double_t GetCellAmplitude(Short_t cellNumber): Given absolute cell number of a cell (from 0 to NModules*NRows*NColumns - 1), it returns the measured amplitude of the cell in GeV units.
-
inline Double_t GetAmplitude(Short_t pos): Given the position in the array of cells (from 0 to GetNumberOfCells()-1), it returns the amplitude of the cell in GeV units.
-
inline Short_t GetCellNumber(Short_t pos): Given the position in the array of cells (from 0 to GetNumberOfCells()-1), it returns the absolute cell number (from 0 to NModules*NRows*NColumns - 1).
-
inline Short_t GetCellPosition(Short_t cellNumber): Given the absolute cell number (from 0 to NModules*NRows*NColumns - 1) it returns the position in the array of cells (from 0 to GetNumberOfCells()-1). Method not available in ESDs
-
Char_t GetType(): Methods to check the origin of the AliAODCaloCell object, kEMCAL or kPHOS.
-
No time information recorded in AODs.
-
QA validation class
There is an analysis class devoted to the study of the QA checks on the ESDs and AODs. It is explained in this link.
