]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliAODCluster.cxx
PID functionality revised. Code clean-up.
[u/mrichter/AliRoot.git] / STEER / AliAODCluster.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 //-------------------------------------------------------------------------
19 //     AOD cluster base class
20 //     Author: Markus Oldenburg, CERN
21 //-------------------------------------------------------------------------
22
23 #include "AliAODCluster.h"
24
25 ClassImp(AliAODCluster)
26
27 //______________________________________________________________________________
28 AliAODCluster::AliAODCluster() : 
29   AliVirtualParticle(),
30   fEnergy(0),
31   fChi2(-999.),
32   fID(-999),
33   fLabel(-999),
34   fCovMatrix(NULL),
35   fProdVertex(0x0),
36   fPrimTrack(NULL),
37   fType(kUndef)
38 {
39   // default constructor
40
41   SetPosition((Float_t*)NULL);
42   SetPID((Float_t*)NULL);
43 }
44
45 //______________________________________________________________________________
46 AliAODCluster::AliAODCluster(Int_t id,
47                              Int_t label, 
48                              Double_t energy,
49                              Double_t x[3],
50                              Double_t covMatrix[10],
51                              Double_t pid[9],
52                              AliAODVertex *prodVertex,
53                              AliAODTrack *primTrack,
54                              Char_t ttype) :
55   AliVirtualParticle(),
56   fEnergy(energy),
57   fChi2(-999.),
58   fID(id),
59   fLabel(label),
60   fCovMatrix(NULL),
61   fProdVertex(prodVertex),
62   fPrimTrack(primTrack),
63   fType(ttype)
64 {
65   // constructor
66  
67   SetPosition(x);
68   if(covMatrix) SetCovMatrix(covMatrix);
69   SetPID(pid);
70
71 }
72
73 //______________________________________________________________________________
74 AliAODCluster::AliAODCluster(Int_t id,
75                              Int_t label, 
76                              Float_t energy,
77                              Float_t x[3],
78                              Float_t covMatrix[10],
79                              Float_t pid[9],
80                              AliAODVertex *prodVertex,
81                              AliAODTrack *primTrack,
82                              Char_t ttype) :
83   AliVirtualParticle(),
84   fEnergy(energy),
85   fChi2(-999.),
86   fID(id),
87   fLabel(label),
88   fCovMatrix(NULL),
89   fProdVertex(prodVertex),
90   fPrimTrack(primTrack),
91   fType(ttype)
92 {
93   // constructor
94  
95   SetPosition(x);
96   if(covMatrix) SetCovMatrix(covMatrix);
97   SetPID(pid);
98
99 }
100
101
102 //______________________________________________________________________________
103 AliAODCluster::~AliAODCluster() 
104 {
105   // destructor
106   delete fCovMatrix;
107 }
108
109
110 //______________________________________________________________________________
111 AliAODCluster::AliAODCluster(const AliAODCluster& clus) :
112   AliVirtualParticle(clus),
113   fEnergy(clus.fEnergy),
114   fChi2(clus.fChi2),
115   fID(clus.fID),
116   fLabel(clus.fLabel),
117   fCovMatrix(NULL),
118   fProdVertex(clus.fProdVertex),
119   fPrimTrack(clus.fPrimTrack),
120   fType(clus.fType)
121 {
122   // Copy constructor
123
124   clus.GetPosition(fPosition);
125   if(clus.fCovMatrix) fCovMatrix=new AliAODRedCov<4>(*clus.fCovMatrix);
126   SetPID(clus.fPID);
127
128 }
129
130 //______________________________________________________________________________
131 AliAODCluster& AliAODCluster::operator=(const AliAODCluster& clus)
132 {
133   // Assignment operator
134   if(this!=&clus) {
135
136     AliVirtualParticle::operator=(clus);
137
138     clus.GetPosition(fPosition);
139     clus.GetPID(fPID);
140
141     fEnergy = clus.fEnergy;
142     fChi2 = clus.fChi2;
143
144     fID = clus.fID;
145     fLabel = clus.fLabel;    
146     
147     delete fCovMatrix;
148     if(clus.fCovMatrix) fCovMatrix=new AliAODRedCov<4>(*clus.fCovMatrix);
149     else fCovMatrix=NULL;
150     fProdVertex = clus.fProdVertex;
151     fPrimTrack = clus.fPrimTrack;
152
153     fType = clus.fType;
154   }
155
156   return *this;
157 }
158
159 //______________________________________________________________________________
160 template <class T> void AliAODCluster::SetPosition(const T *x) 
161 {
162   // set the position
163
164   if (x) {
165       fPosition[0] = x[0];
166       fPosition[1] = x[1];
167       fPosition[2] = x[2];
168   } else {
169
170     fPosition[0] = -999.;
171     fPosition[1] = -999.;
172     fPosition[2] = -999.;
173   }
174 }
175
176 //______________________________________________________________________________
177 AliAODCluster::AODCluPID_t AliAODCluster::GetMostProbablePID() const 
178 {
179   // Returns the most probable PID array element.
180   
181   Int_t nPID = 9;
182   if (fPID) {
183     AODCluPID_t loc = kUnknown;
184     Double_t max = 0.;
185     Bool_t allTheSame = kTRUE;
186     
187     for (Int_t iPID = 0; iPID < nPID; iPID++) {
188       if (fPID[iPID] >= max) {
189         if (fPID[iPID] > max) {
190           allTheSame = kFALSE;
191           max = fPID[iPID];
192           loc = (AODCluPID_t)iPID;
193         } else {
194           allTheSame = kTRUE;
195         }
196       }
197     }
198     
199     return allTheSame ? kUnknown : loc;
200   } else {
201     return kUnknown;
202   }
203 }
204
205 //______________________________________________________________________________
206 void AliAODCluster::Print(Option_t* /* option */) const
207 {
208   // prints information about AliAODCluster
209
210   printf("Object name: %s   Cluster type: %s\n", GetName(), GetTitle()); 
211   printf("    energy = %f\n", E());
212   printf("      chi2 = %f\n", Chi2());
213   printf(" PID object: %p\n", PID());
214 }
215