*/
//_________________________________________________________________________
-// Base class for reading data in order to do prompt gamma correlations
+// Base class for reading data: MonteCarlo, ESD or AOD, of PHOS EMCAL and
+// Central Barrel Tracking detectors.
+// Not all MC particles/tracks/clusters are kept, some kinematical restrictions are done.
+// Mother class of : AliGammaDataReader: Fills ESD data in 3 TClonesArrays (PHOS, EMCAL, CTS)
+// : AliGammaMCReader: Fills Kinematics data in 3 TClonesArrays (PHOS, EMCAL, CTS)
+// : AliGammaMCDataReader: Fills ESD data in 3 TClonesArrays (PHOS, EMCAL, CTS)
+// and MC data in other 3 TClonesArray
//*-- Author: Gustavo Conesa (INFN-LNF)
// --- ROOT system ---
-#include <TParticle.h>
-#include <TFormula.h>
-#include <TClonesArray.h>
-#include "AliStack.h"
#include "TObject.h"
-
-class AliESD ;
-class TH2F ;
+class TClonesArray ;
+class TFormula ;
+class TParticle ;
+class Riostream ;
+//--- AliRoot system ---
+
+class AliStack ;
+class AliESDEvent ;
+class AliLog ;
class AliGammaReader : public TObject {
kChargedUnknown=321
};
- enum datatype_t {kData, kMC, kMCData};
+ enum PhotonStatusType {
+ kPromptPhoton=2,
+ kFragmentPhoton=3,
+ kPi0DecayPhoton=4,
+ kEtaDecayPhoton=5,
+ kOtherDecayPhoton=6,
+ kUnknown=7
+ };
+
+ enum Datatype {kData, kMC, kMCData};
void InitParameters();
- Int_t GetDataType(){ return fDataType ; }
+ Int_t GetDataType() const { return fDataType ; }
void SetDataType(Int_t data ){fDataType = data ; }
- virtual Float_t GetCTSEtaCut() const {return fCTSEtaCut ; }
- virtual Float_t GetEMCALEtaCut() const {return fEMCALEtaCut ; }
- virtual Float_t GetPHOSEtaCut() const {return fPHOSEtaCut ; }
+ virtual Float_t GetCTSEtaCut() const {return fCTSEtaCut ; }
+ virtual Float_t GetEMCALEtaCut() const {return fEMCALEtaCut ; }
+ virtual Float_t GetPHOSEtaCut() const {return fPHOSEtaCut ; }
virtual Float_t GetPhiEMCALCut(Int_t i) { return fPhiEMCALCut[i] ; }
virtual Float_t GetPhiPHOSCut(Int_t i) { return fPhiPHOSCut[i] ; }
virtual Float_t GetNeutralPtCut() { return fNeutralPtCut ; }
virtual Float_t GetChargedPtCut() { return fChargedPtCut ; }
- virtual Float_t GetEMCALIPDistance() { return fEMCALIPDistance ; }
- virtual Float_t GetPHOSIPDistance() { return fPHOSIPDistance ; }
- virtual Float_t GetEMCALMinAngle() { return fEMCALMinAngle ; }
- virtual Float_t GetPHOSMinAngle() { return fPHOSMinAngle ; }
+ virtual Float_t GetEMCALIPDistance() const { return fEMCALIPDistance ; }
+ virtual Float_t GetPHOSIPDistance() const { return fPHOSIPDistance ; }
+ virtual Float_t GetEMCALMinAngle() const { return fEMCALMinAngle ; }
+ virtual Float_t GetPHOSMinAngle() const { return fPHOSMinAngle ; }
virtual Bool_t IsEMCALPIDOn() const {return fEMCALPID ; }
virtual Bool_t IsPHOSPIDOn() const {return fPHOSPID ; }
- virtual Float_t GetEMCALPhotonWeight() { return fEMCALPhotonWeight ; }
- virtual Float_t GetEMCALPi0Weight() { return fEMCALPi0Weight ; }
- virtual Float_t GetEMCALElectronWeight() { return fEMCALElectronWeight ; }
- virtual Float_t GetEMCALChargeWeight() { return fEMCALChargeWeight ; }
- virtual Float_t GetEMCALNeutralWeight() { return fEMCALNeutralWeight ; }
- virtual Float_t GetPHOSPhotonWeight() { return fPHOSPhotonWeight ; }
- virtual Float_t GetPHOSPi0Weight() { return fPHOSPi0Weight ; }
- virtual Float_t GetPHOSElectronWeight() { return fPHOSElectronWeight ; }
- virtual Float_t GetPHOSChargeWeight() { return fPHOSChargeWeight ; }
- virtual Float_t GetPHOSNeutralWeight() { return fPHOSNeutralWeight ; }
-
- virtual Bool_t IsPHOSPIDWeightFormulaOn() { return fPHOSWeightFormula ; }
- virtual TFormula * GetPHOSPhotonWeightFormula() { return fPHOSPhotonWeightFormula ; }
- virtual TFormula * GetPHOSPi0WeightFormula() { return fPHOSPi0WeightFormula ; }
+ virtual Float_t GetEMCALPhotonWeight() const { return fEMCALPhotonWeight ; }
+ virtual Float_t GetEMCALPi0Weight() const { return fEMCALPi0Weight ; }
+ virtual Float_t GetEMCALElectronWeight() const { return fEMCALElectronWeight ; }
+ virtual Float_t GetEMCALChargeWeight() const { return fEMCALChargeWeight ; }
+ virtual Float_t GetEMCALNeutralWeight() const { return fEMCALNeutralWeight ; }
+ virtual Float_t GetPHOSPhotonWeight() const { return fPHOSPhotonWeight ; }
+ virtual Float_t GetPHOSPi0Weight() const { return fPHOSPi0Weight ; }
+ virtual Float_t GetPHOSElectronWeight() const { return fPHOSElectronWeight ; }
+ virtual Float_t GetPHOSChargeWeight() const { return fPHOSChargeWeight ; }
+ virtual Float_t GetPHOSNeutralWeight() const { return fPHOSNeutralWeight ; }
+
+ virtual Bool_t IsPHOSPIDWeightFormulaOn() const { return fPHOSWeightFormula ; }
+ virtual TFormula * GetPHOSPhotonWeightFormula() const { return fPHOSPhotonWeightFormula ; }
+ virtual TFormula * GetPHOSPi0WeightFormula() const { return fPHOSPi0WeightFormula ; }
virtual void Print(const Option_t * opt)const;
virtual void SetPHOSPhotonWeightFormula(TFormula * photon) { fPHOSPhotonWeightFormula = photon; }
virtual void SetPHOSPi0WeightFormula(TFormula * pi0) { fPHOSPi0WeightFormula = pi0; }
- virtual void CreateParticleList(TObject* data, TObject * data2,
- TClonesArray * plCh, TClonesArray * plEMCAL, TClonesArray * plPHOS,
- TClonesArray * parton, TClonesArray * plPrimEMCAL, TClonesArray * plPrimPHOS) {;}
+ virtual Bool_t IsEMCALOn() const { return fSwitchOnEMCAL ; }
+ virtual Bool_t IsPHOSOn() const { return fSwitchOnPHOS ; }
+ virtual Bool_t IsCTSOn() const { return fSwitchOnCTS ; }
+
+ virtual void SwitchOnEMCAL(Bool_t sw) {fSwitchOnEMCAL = sw ; }
+ virtual void SwitchOnPHOS(Bool_t sw) {fSwitchOnPHOS = sw ; }
+ virtual void SwitchOnCTS(Bool_t sw) {fSwitchOnCTS = sw ; }
+
+ virtual void CreateParticleList(TObject* , TObject * ,
+ TClonesArray * , TClonesArray * , TClonesArray *,
+ TClonesArray * , TClonesArray * , TClonesArray * ) {;}
+
protected:
- Int_t fDataType ;
+
+ Int_t fDataType ; //Select MC:Kinematics, Data:ESD/AOD, MCData:Both
+
+ Bool_t fSwitchOnEMCAL ; //Do not consider EMCAL neutral particles/clusters
+ Bool_t fSwitchOnPHOS ;//Do not consider PHOS neutral particles/clusters
+ Bool_t fSwitchOnCTS ;//Do not consider tracks/ charged particles
+
+ //Kinematical cuts
Float_t fCTSEtaCut ;//CTS pseudorapidity acceptance
Float_t fEMCALEtaCut ;//EMCAL pseudorapidity acceptance
Float_t fPHOSEtaCut ;//PHOS pseudorapidity acceptance
Float_t fPhiEMCALCut[2]; //EMCAL phi acceptance
Float_t fPhiPHOSCut[2]; //PHOS phi acceptance
- Float_t fNeutralPtCut; //
- Float_t fChargedPtCut; //
+ Float_t fNeutralPtCut; //pT Threshold on neutral particles
+ Float_t fChargedPtCut; // pT Threshold on charged particles
+ //Overlapping
Float_t fEMCALIPDistance; //Calorimeter IP distance.
Float_t fPHOSIPDistance; //Calorimeter IP distance
Float_t fEMCALMinAngle; //Gamma decay minimum aperture angle for overlapping.
Float_t fPHOSMinAngle; //Gamma decay minimum aperture angle for overlapping.
+ //PID
Bool_t fEMCALPID ;//Fill EMCAL particle lists with particles with corresponding pid
Bool_t fPHOSPID; //Fill PHOS particle lists with particles with corresponding pid
Float_t fEMCALPhotonWeight; //Bayesian PID weight for photons in EMCAL