#include "AliAODCluster.h"
ClassImp(AliAODCluster)
AliAODCluster::AliAODCluster() :
AliVCluster(),
fEnergy(0),
fChi2(-999.),
fID(-999),
fNLabel(0),
fLabel(0x0),
fFilterMap(0),
fType(kUndef),
fMCEnergyFraction(0.)
{
SetPosition(NULL);
SetPID(NULL);
}
AliAODCluster::AliAODCluster(Int_t id,
UInt_t nLabel,
Int_t *label,
Double_t energy,
Double_t x[3],
Double_t pid[13],
Char_t ttype,
UInt_t selectInfo) :
AliVCluster(),
fEnergy(energy),
fChi2(-999.),
fID(id),
fNLabel(0),
fLabel(0x0),
fFilterMap(selectInfo),
fType(ttype),
fMCEnergyFraction(0.)
{
for (Int_t i = 0; i < 3; i++) fPosition[i] = 0.;
for (Int_t i = 0; i < 13; i++) fPID[i] = 0;
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,
UInt_t nLabel,
Int_t *label,
Float_t energy,
Float_t x[3],
Float_t pid[13],
Char_t ttype,
UInt_t selectInfo) :
AliVCluster(),
fEnergy(energy),
fChi2(-999.),
fID(id),
fNLabel(0),
fLabel(0x0),
fFilterMap(selectInfo),
fType(ttype),
fMCEnergyFraction(0.)
{
for (Int_t i = 0; i < 3; i++) fPosition[i] = 0.;
for (Int_t i = 0; i < 13; i++) fPID[i] = 0;
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()
{
RemoveLabel();
}
void AliAODCluster::Clear(const Option_t*)
{
RemoveLabel();
}
AliAODCluster::AliAODCluster(const AliAODCluster& clus) :
AliVCluster(clus),
fEnergy(clus.fEnergy),
fChi2(clus.fChi2),
fID(clus.fID),
fNLabel(0),
fLabel(0x0),
fFilterMap(clus.fFilterMap),
fType(clus.fType),
fMCEnergyFraction(clus.fMCEnergyFraction)
{
for(Int_t i = 0; i < 3 ; i++) fPosition[i] = clus.fPosition[i];
for(Int_t i = 0; i < 13 ; i++) fPID[i] = clus.fPID[i];
SetLabel(clus.fLabel, clus.fNLabel);
}
AliAODCluster& AliAODCluster::operator=(const AliAODCluster& clus)
{
if(this!=&clus) {
for(Int_t i = 0; i < 3 ; i++) fPosition[i] = clus.fPosition[i];
for(Int_t i = 0; i < 13 ; i++) fPID[i] = clus.fPID[i];
fEnergy = clus.fEnergy;
fChi2 = clus.fChi2;
fID = clus.fID;
SetLabel(clus.fLabel, clus.fNLabel);
fFilterMap = clus.fFilterMap;
fType = clus.fType;
fMCEnergyFraction = clus.fMCEnergyFraction;
}
return *this;
}
void AliAODCluster::SetPosition(Float_t *x)
{
if (x) {
fPosition[0] = x[0];
fPosition[1] = x[1];
fPosition[2] = x[2];
} else {
fPosition[0] = -999.;
fPosition[1] = -999.;
fPosition[2] = -999.;
}
}
UShort_t AliAODCluster::GetMostProbablePID() const
{
Int_t nPID = 13;
UShort_t unknown = AliVCluster::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 = (UShort_t)iPID;
} else {
allTheSame = kTRUE;
}
}
}
return allTheSame ? unknown : loc;
}
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 {
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;
}
void AliAODCluster::Print(Option_t* ) const
{
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]);
}