]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliAODCluster.h
AliAODNeutral renamed to AliAODCluster
[u/mrichter/AliRoot.git] / STEER / AliAODCluster.h
1 #ifndef AliAODCluster_H
2 #define AliAODCluster_H
3 /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 //-------------------------------------------------------------------------
9 //     AOD cluster base class
10 //     Author: Markus Oldenburg, CERN
11 //-------------------------------------------------------------------------
12
13 #include <TRef.h>
14
15 #include "AliVirtualParticle.h"
16 #include "AliAODVertex.h"
17 #include "AliAODTrack.h"
18
19 class AliAODCluster : public AliVirtualParticle {
20
21  public:
22   
23   enum AODClu_t {kUndef=-1, kPHOSNeutral,kPHOSCharged,
24                  kEMCALPseudoCluster, kEMCALClusterv1,
25                  kPMDNeutral, kPMDCharged};
26
27   enum AODCluPID_t {
28     kUnknown=0, kPhoton, kPi0, kNeutron, kKaon0, kEleCon, kCharged, kOther};
29
30   AliAODCluster();
31   AliAODCluster(Int_t id,
32                 Int_t label,
33                 Double_t energy,
34                 Double_t x[3],
35                 Double_t covMatrix[10],
36                 Double_t pid[10],
37                 AliAODVertex *prodVertex,
38                 AliAODTrack *primTrack,
39                 Char_t ttype=kUndef);
40
41    AliAODCluster(Int_t id,
42                  Int_t label,
43                  Float_t energy,
44                  Float_t x[3],
45                  Float_t covMatrix[10],
46                  Float_t pid[10],
47                  AliAODVertex *prodVertex,
48                  AliAODTrack *primTrack,
49                  Char_t ttype=kUndef);
50
51   virtual ~AliAODCluster();
52   AliAODCluster(const AliAODCluster& trk); 
53   AliAODCluster& operator=(const AliAODCluster& trk);
54
55   Double_t Chi2() const { return fChi2; }
56
57   virtual Double_t E() const { return fEnergy; }
58   // make a connection to the PID object, here!!!
59   virtual Double_t M() const { return -999.; }
60   
61   // make a connection to the PID object, here!!!
62   virtual Double_t Y() const { return -999.; }
63
64   // PID
65   virtual const Double_t *PID() const { return fPID; }
66
67   template <class T> void GetPID(T *pid) const {
68     for(Int_t i=0; i<10; ++i) pid[i]=fPID[i];}
69  
70   template <class T> void SetPID(const T *pid) {
71     if(pid) for(Int_t i=0; i<10; ++i) fPID[i]=pid[i];
72     else {for(Int_t i=1; i<10; fPID[i++]=0); fPID[0]=1.;}}
73
74   Int_t GetID() const { return fID; }
75   Int_t GetLabel() const { return fLabel; } 
76
77   template <class T> Bool_t GetPosition(T *x) const {
78     x[0]=fPosition[0]; x[1]=fPosition[1]; x[2]=fPosition[2];
79     return kTRUE;}
80
81   template <class T> void SetCovMatrix(const T *covMatrix) {
82     if(!fCovMatrix) fCovMatrix=new AliAODRedCov<4>();
83     fCovMatrix->SetCovMatrix(covMatrix);}
84
85   template <class T> Bool_t GetCovMatrix(T *covMatrix) const {
86     if(!fCovMatrix) return kFALSE;
87     fCovMatrix->GetCovMatrix(covMatrix); return kTRUE;}
88
89   void RemoveCovMatrix() {delete fCovMatrix; fCovMatrix=NULL;}
90
91   AliAODVertex *GetProdVertex() const { return (AliAODVertex*)fProdVertex.GetObject(); }
92   AliAODTrack *GetPrimTrack() const { return (AliAODTrack*)fPrimTrack.GetObject(); }
93   
94   // print
95   void  Print(const Option_t *opt = "") const;
96
97   // setters
98   void SetID(Int_t id) { fID = id; }
99   void SetLabel(Int_t label) {fLabel = label; }
100
101   template <class T> void SetPosition(const T *x);
102
103   void SetChi2(Double_t chi2) { fChi2 = chi2; }
104
105   void SetProdVertex(TObject *vertex) { fProdVertex = vertex; }
106   void SetPrimTrack(TObject *ptrack) { fPrimTrack = ptrack; }
107
108   virtual Double_t Px() const {return 0.;}
109   virtual Double_t Py() const {return 0.;}
110   virtual Double_t Pz() const {return 0.;}
111   virtual Double_t Pt() const {return 0.;}
112   virtual Double_t P() const {return 0.;}
113   virtual Double_t OneOverPt() const {return 0.;}
114   virtual Double_t Phi() const {return 0.;}
115   virtual Double_t Theta() const {return 0.;}
116   virtual Double_t Eta() const {return 0.;}
117   virtual Short_t Charge() const {return 0.;}
118
119  private :
120
121   // Energy & position
122   Double32_t    fEnergy;         // energy
123   Double32_t    fPosition[3];    // position of the cluster
124
125   Double32_t    fPID[10];        // [0.,1.,8] pointer to PID object
126   Double32_t    fChi2;           // chi2 of mometum fit
127
128   Int_t         fID;             // unique track ID, points back to the ESD track
129   Int_t         fLabel;          // particle label, points back to MC track
130   
131   AliAODRedCov<4> *fCovMatrix;      // covariance matrix (x, y, z, E)
132   TRef          fProdVertex;     // vertex of origin
133   TRef          fPrimTrack;      // primary track number associated with this cluster
134
135   Char_t       fType;
136
137
138   ClassDef(AliAODCluster,1);
139 };
140
141 #endif