ClassImp(AliAODCluster)
//______________________________________________________________________________
-AliAODCluster::AliAODCluster() :
- AliVParticle(),
+AliAODCluster::AliAODCluster() :
+ AliVCluster(),
fEnergy(0),
fChi2(-999.),
fID(-999),
- fLabel(-999),
- fType(kUndef),
- fCovMatrix(NULL),
- fProdVertex(0x0),
- fPrimTrack(NULL)
+ fNLabel(0),
+ fLabel(0x0),
+ fFilterMap(0),
+ fType(kUndef)
{
// default constructor
- SetPosition((Float_t*)NULL);
- SetPID((Float_t*)NULL);
+ SetPosition(NULL);
+ SetPID(NULL);
}
//______________________________________________________________________________
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[9],
- AliAODVertex *prodVertex,
- AliAODTrack *primTrack,
- Char_t ttype) :
- AliVParticle(),
+ Double_t pid[13],
+ Char_t ttype,
+ UInt_t selectInfo) :
+ AliVCluster(),
fEnergy(energy),
fChi2(-999.),
fID(id),
- fLabel(label),
- fType(ttype),
- fCovMatrix(NULL),
- fProdVertex(prodVertex),
- fPrimTrack(primTrack)
+ fNLabel(0),
+ fLabel(0x0),
+ fFilterMap(selectInfo),
+ fType(ttype)
{
// constructor
- SetPosition(x);
- if(covMatrix) SetCovMatrix(covMatrix);
- SetPID(pid);
-
+ if(x) {for (Int_t i = 0; i < 3 ; i++) SetPositionAt(x[i] ,i);}
+ if(pid) {for (Int_t i = 0; i < 13 ; i++) SetPIDAt (pid[i],i);}
+ SetLabel(label, nLabel);
}
//______________________________________________________________________________
AliAODCluster::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[9],
- AliAODVertex *prodVertex,
- AliAODTrack *primTrack,
- Char_t ttype) :
- AliVParticle(),
+ Float_t pid[13],
+ Char_t ttype,
+ UInt_t selectInfo) :
+ AliVCluster(),
fEnergy(energy),
fChi2(-999.),
fID(id),
- fLabel(label),
- fType(ttype),
- fCovMatrix(NULL),
- fProdVertex(prodVertex),
- fPrimTrack(primTrack)
+ fNLabel(0),
+ fLabel(0x0),
+ fFilterMap(selectInfo),
+ fType(ttype)
{
// constructor
-
- SetPosition(x);
- if(covMatrix) SetCovMatrix(covMatrix);
- SetPID(pid);
-
+ if(x) {for (Int_t i = 0; i < 3 ; i++) SetPositionAt(x[i] ,i);}
+ if(pid) {for (Int_t i = 0; i < 13 ; i++) SetPIDAt (pid[i],i);}
+ SetLabel(label, nLabel);
}
AliAODCluster::~AliAODCluster()
{
// destructor
- delete fCovMatrix;
+
+ RemoveLabel();
+}
+
+//______________________________________________________________________________
+void AliAODCluster::Clear(const Option_t*)
+{
+ // Clear
+
+ RemoveLabel();
}
//______________________________________________________________________________
AliAODCluster::AliAODCluster(const AliAODCluster& clus) :
- AliVParticle(clus),
+ AliVCluster(clus),
fEnergy(clus.fEnergy),
fChi2(clus.fChi2),
fID(clus.fID),
- fLabel(clus.fLabel),
- fType(clus.fType),
- fCovMatrix(NULL),
- fProdVertex(clus.fProdVertex),
- fPrimTrack(clus.fPrimTrack)
+ fNLabel(0),
+ fLabel(0x0),
+ fFilterMap(clus.fFilterMap),
+ fType(clus.fType)
{
// Copy constructor
- clus.GetPosition(fPosition);
- if(clus.fCovMatrix) fCovMatrix=new AliAODRedCov<4>(*clus.fCovMatrix);
- SetPID(clus.fPID);
+ if(fPosition) {for(Int_t i = 0; i < 3 ; i++) fPosition[i] = clus.fPosition[i];}
+ if(fPID) {for(Int_t i = 0; i < 13 ; i++) fPID[i] = clus.fPID[i];}
+ SetLabel(clus.fLabel, clus.fNLabel);
}
//______________________________________________________________________________
{
// Assignment operator
if(this!=&clus) {
-
- AliVParticle::operator=(clus);
-
- clus.GetPosition(fPosition);
- clus.GetPID(fPID);
-
+
+ if(fPosition) {for(Int_t i = 0; i < 3 ; i++) fPosition[i] = clus.fPosition[i];}
+ if(fPID) {for(Int_t i = 0; i < 13 ; i++) fPID[i] = clus.fPID[i];}
+
fEnergy = clus.fEnergy;
fChi2 = clus.fChi2;
fID = clus.fID;
- fLabel = clus.fLabel;
+ SetLabel(clus.fLabel, clus.fNLabel);
+ fFilterMap = clus.fFilterMap;
fType = clus.fType;
-
- delete fCovMatrix;
- if(clus.fCovMatrix) fCovMatrix=new AliAODRedCov<4>(*clus.fCovMatrix);
- else fCovMatrix=NULL;
-
- fProdVertex = clus.fProdVertex;
- fPrimTrack = clus.fPrimTrack;
}
return *this;
}
//______________________________________________________________________________
-template <class T> void AliAODCluster::SetPosition(const T *x)
+void AliAODCluster::SetPosition(Float_t *x)
{
// set the position
-
+
if (x) {
- fPosition[0] = x[0];
- fPosition[1] = x[1];
- fPosition[2] = x[2];
+ fPosition[0] = x[0];
+ fPosition[1] = x[1];
+ fPosition[2] = x[2];
} else {
-
fPosition[0] = -999.;
fPosition[1] = -999.;
fPosition[2] = -999.;
}
//______________________________________________________________________________
-AliAODCluster::AODCluPID_t AliAODCluster::GetMostProbablePID() const
+UShort_t AliAODCluster::GetMostProbablePID() const
{
// Returns the most probable PID array element.
- Int_t nPID = 9;
+ Int_t nPID = 13;
+ UShort_t unknown = AliVCluster::kUnknown;
+
if (fPID) {
- AODCluPID_t loc = kUnknown;
+ UShort_t loc = unknown;
Double_t max = 0.;
Bool_t allTheSame = kTRUE;
for (Int_t iPID = 0; iPID < nPID; iPID++) {
if (fPID[iPID] >= max) {
- if (fPID[iPID] > max) {
- allTheSame = kFALSE;
- max = fPID[iPID];
- loc = (AODCluPID_t)iPID;
- } else {
- allTheSame = kTRUE;
- }
+ if (fPID[iPID] > max) {
+ allTheSame = kFALSE;
+ max = fPID[iPID];
+ loc = (UShort_t)iPID;
+ } else {
+ allTheSame = kTRUE;
+ }
}
}
- return allTheSame ? kUnknown : loc;
+ return allTheSame ? unknown : loc;
+ } else {
+ return unknown;
+ }
+}
+
+//______________________________________________________________________________
+void AliAODCluster::SetLabel(Int_t *label, UInt_t size)
+{
+ if (label && size>0) {
+ if (size != (UInt_t)fNLabel) {
+ RemoveLabel();
+ fNLabel = size;
+ fLabel = new Int_t[fNLabel];
+ }
+
+ for (Int_t i = 0; i < fNLabel; i++) {
+ fLabel[i] = label[i];
+ }
} else {
- return kUnknown;
+ RemoveLabel();
}
+
+ return;
+}
+
+//______________________________________________________________________________
+Int_t AliAODCluster::GetLabelAt(UInt_t i) const
+{
+ if (fLabel && i < (UInt_t)fNLabel) {
+ return fLabel[i];
+ } else {
+ return -999;
+ }
+}
+
+//______________________________________________________________________________
+void AliAODCluster::RemoveLabel()
+{
+ delete[] fLabel;
+ fLabel = 0x0;
+ fNLabel = 0;
+
+ return;
}
//______________________________________________________________________________
{
// prints information about AliAODCluster
- printf("Object name: %s Cluster type: %s\n", GetName(), GetTitle());
- printf(" energy = %f\n", E());
- printf(" chi2 = %f\n", Chi2());
- printf(" PID object: %p\n", PID());
+ printf("Cluster type: %d\n", GetType());
+ printf(" energy = %f\n", E());
+ printf(" chi2 = %f\n", Chi2());
+ const Double_t *pid = GetPID();
+ printf("PID weights: photon %0.2f, pi0 %0.2f, electron %0.2f, conversion electron %0.2f\n, hadrons: pion %0.2f, kaon %0.2f, proton %0.2f , neutron %0.2f, kaon %0.2f \n",
+ pid[AliVCluster::kPhoton], pid[AliVCluster::kPi0],
+ pid[AliVCluster::kElectron], pid[AliVCluster::kEleCon],
+ pid[AliVCluster::kPion], pid[AliVCluster::kKaon], pid[AliVCluster::kProton],
+ pid[AliVCluster::kNeutron], pid[AliVCluster::kKaon0]);
}
-