// Author: Markus Oldenburg, CERN
//-------------------------------------------------------------------------
-#include <TRef.h>
+#include <TObject.h>
-#include "AliVirtualParticle.h"
-#include "AliAODVertex.h"
-#include "AliAODTrack.h"
-
-class AliAODCluster : public AliVirtualParticle {
+class AliAODCluster : public TObject {
public:
- enum AODClu_t {kUndef=-1, kPHOSNeutral,kPHOSCharged,
- kEMCALPseudoCluster, kEMCALClusterv1,
- kPMDNeutral, kPMDCharged};
+ enum AODClu_t {kUndef = -1,
+ kPHOSNeutral,
+ kPHOSCharged,
+ kEMCALClusterv1,
+ kPMDNeutral,
+ kPMDCharged};
enum AODCluPID_t {
- kUnknown=0, kPhoton, kPi0, kNeutron, kKaon0, kEleCon, kCharged, kOther};
+ kElectron = 0,
+ kMuon = 1,
+ kPion = 2,
+ kKaon = 3,
+ kProton = 4,
+ kPhoton = 5,
+ kPi0 = 6,
+ kNeutron = 7,
+ kKaon0 = 8,
+ kEleCon = 9,
+ kUnknown = 10,
+ kCharged = 11, //For PMD?
+ kNeutral =12 //For PMD?
+ };
AliAODCluster();
AliAODCluster(Int_t id,
- Int_t label,
+ UInt_t nLabel,
+ Int_t *label,
Double_t energy,
Double_t x[3],
- Double_t covMatrix[10],
- Double_t pid[10],
- AliAODVertex *prodVertex,
- AliAODTrack *primTrack,
- Char_t ttype=kUndef);
+ Double_t pid[13],
+ Char_t ttype=kUndef,
+ UInt_t selectInfo=0);
AliAODCluster(Int_t id,
- Int_t label,
+ UInt_t nLabel,
+ Int_t *label,
Float_t energy,
Float_t x[3],
- Float_t covMatrix[10],
- Float_t pid[10],
- AliAODVertex *prodVertex,
- AliAODTrack *primTrack,
- Char_t ttype=kUndef);
+ Float_t pid[13],
+ Char_t ttype=kUndef,
+ UInt_t selectInfo=0);
virtual ~AliAODCluster();
- AliAODCluster(const AliAODCluster& trk);
- AliAODCluster& operator=(const AliAODCluster& trk);
+ AliAODCluster(const AliAODCluster& clus);
+ AliAODCluster& operator=(const AliAODCluster& clus);
Double_t Chi2() const { return fChi2; }
virtual Double_t E() const { return fEnergy; }
- // make a connection to the PID object, here!!!
- virtual Double_t M() const { return -999.; }
-
- // make a connection to the PID object, here!!!
- virtual Double_t Y() const { return -999.; }
// PID
virtual const Double_t *PID() const { return fPID; }
-
+ AODCluPID_t GetMostProbablePID() const;
+
template <class T> void GetPID(T *pid) const {
- for(Int_t i=0; i<10; ++i) pid[i]=fPID[i];}
+ for(Int_t i=0; i<13; ++i) pid[i]=fPID[i];}
template <class T> void SetPID(const T *pid) {
- if(pid) for(Int_t i=0; i<10; ++i) fPID[i]=pid[i];
- else {for(Int_t i=1; i<10; fPID[i++]=0); fPID[0]=1.;}}
+ if(pid) for(Int_t i=0; i<13; ++i) fPID[i]=pid[i];
+ else {for(Int_t i=0; i<13; fPID[i++]=0) ;} fPID[AliAODCluster::kUnknown]=1.;}
- Int_t GetID() const { return fID; }
- Int_t GetLabel() const { return fLabel; }
+ template <class T> void SetPIDFromESD(const T *pid) {
+ if(pid) {for(Int_t i=0; i<11; ++i) fPID[i]=pid[i]; fPID[11]=0; fPID[12]=0;}
+ else {for(Int_t i=0; i<13; fPID[i++]=0) ;} fPID[AliAODCluster::kUnknown]=1.;}
+
+ Int_t GetID() const { return fID; }
+ Int_t GetLabel(UInt_t i) const;
+ Int_t * GetLabels() const {return fLabel ; }
+ UInt_t GetNLabel() const { return (UInt_t)fNLabel; }
+ Bool_t TestFilterBit(UInt_t filterBit) const { return (Bool_t) ((filterBit & fFilterMap) != 0); }
+ Char_t GetType() const { return fType; }
template <class T> Bool_t GetPosition(T *x) const {
x[0]=fPosition[0]; x[1]=fPosition[1]; x[2]=fPosition[2];
return kTRUE;}
- template <class T> void SetCovMatrix(const T *covMatrix) {
- if(!fCovMatrix) fCovMatrix=new AliAODRedCov<4>();
- fCovMatrix->SetCovMatrix(covMatrix);}
-
- template <class T> Bool_t GetCovMatrix(T *covMatrix) const {
- if(!fCovMatrix) return kFALSE;
- fCovMatrix->GetCovMatrix(covMatrix); return kTRUE;}
-
- void RemoveCovMatrix() {delete fCovMatrix; fCovMatrix=NULL;}
+ Bool_t IsEMCALCluster() {if(fType == kEMCALClusterv1) return kTRUE;
+ else return kFALSE;}
+ Bool_t IsPHOSCluster() {if(fType == kPHOSCharged || fType == kPHOSNeutral) return kTRUE;
+ else return kFALSE;}
- AliAODVertex *GetProdVertex() const { return (AliAODVertex*)fProdVertex.GetObject(); }
- AliAODTrack *GetPrimTrack() const { return (AliAODTrack*)fPrimTrack.GetObject(); }
-
// print
void Print(const Option_t *opt = "") const;
// setters
void SetID(Int_t id) { fID = id; }
- void SetLabel(Int_t label) {fLabel = label; }
-
+ void SetType(AODClu_t ttype) { fType=ttype; }
+ void SetLabel(Int_t *label, UInt_t size);
+ void RemoveLabel();
+
template <class T> void SetPosition(const T *x);
void SetChi2(Double_t chi2) { fChi2 = chi2; }
- void SetProdVertex(TObject *vertex) { fProdVertex = vertex; }
- void SetPrimTrack(TObject *ptrack) { fPrimTrack = ptrack; }
-
- virtual Double_t Px() const {return 0.;}
- virtual Double_t Py() const {return 0.;}
- virtual Double_t Pz() const {return 0.;}
- virtual Double_t Pt() const {return 0.;}
- virtual Double_t P() const {return 0.;}
- virtual Double_t OneOverPt() const {return 0.;}
- virtual Double_t Phi() const {return 0.;}
- virtual Double_t Theta() const {return 0.;}
- virtual Double_t Eta() const {return 0.;}
- virtual Short_t Charge() const {return 0;}
-
private :
// Energy & position
Double32_t fEnergy; // energy
Double32_t fPosition[3]; // position of the cluster
- Double32_t fPID[10]; // [0.,1.,8] pointer to PID object
- Double32_t fChi2; // chi2 of mometum fit
+ Double32_t fChi2; // chi2 (probably not necessary for PMD)
+ Double32_t fPID[13]; // [0.,1.,8] pointer to PID object
- Int_t fID; // unique track ID, points back to the ESD track
- Int_t fLabel; // particle label, points back to MC track
+ Int_t fID; // unique cluster ID, points back to the ESD cluster
+ Int_t fNLabel; // number of original track for this cluster
+ Int_t *fLabel; // [fNLabel] particle label, points back to MC tracks
+ UInt_t fFilterMap; // filter information, one bit per set of cuts
- AliAODRedCov<4> *fCovMatrix; // covariance matrix (x, y, z, E)
- TRef fProdVertex; // vertex of origin
- TRef fPrimTrack; // primary track number associated with this cluster
-
- Char_t fType;
-
+ Char_t fType; // cluster type
- ClassDef(AliAODCluster,1);
+ ClassDef(AliAODCluster,5);
};
#endif