#include "AliPIDValues.h"
#include "AliDetectorPID.h"
ClassImp(AliDetectorPID)
AliDetectorPID::AliDetectorPID() :
TObject(),
fArrNsigmas("AliPIDValues",AliPIDResponse::kNdetectors),
fArrRawProbabilities("AliPIDValues",AliPIDResponse::kNdetectors)
{
}
AliDetectorPID::AliDetectorPID(const AliDetectorPID &pid) :
TObject(pid),
fArrNsigmas(pid.fArrNsigmas),
fArrRawProbabilities(pid.fArrRawProbabilities)
{
}
AliDetectorPID::~AliDetectorPID()
{
fArrNsigmas.Delete();
fArrRawProbabilities.Delete();
}
AliDetectorPID& AliDetectorPID::operator= (const AliDetectorPID &pid)
{
if (this==&pid) return *this;
TObject::operator=(pid);
fArrNsigmas.Clear();
fArrRawProbabilities.Clear();
AliPIDValues *val=0x0;
for (Int_t idet=0; idet<(Int_t)AliPIDResponse::kNdetectors; ++idet){
val=static_cast<AliPIDValues*>(pid.fArrNsigmas.UncheckedAt(idet));
if (val) new (fArrNsigmas[idet]) AliPIDValues(*val);
val=static_cast<AliPIDValues*>(pid.fArrRawProbabilities.UncheckedAt(idet));
if (val) new (fArrRawProbabilities[idet]) AliPIDValues(*val);
}
return *this;
}
void AliDetectorPID::SetRawProbability(AliPIDResponse::EDetector det, const Double_t prob[],
Int_t nspecies, AliPIDResponse::EDetPidStatus status)
{
AliPIDValues *val=static_cast<AliPIDValues*>(fArrRawProbabilities.UncheckedAt(det));
if (!val)
val=new (fArrRawProbabilities[(Int_t)det]) AliPIDValues;
val->SetValues(prob,nspecies,status);
}
void AliDetectorPID::SetNumberOfSigmas(AliPIDResponse::EDetector det, const Double_t nsig[], Int_t nspecies,
AliPIDResponse::EDetPidStatus status)
{
AliPIDValues *val=static_cast<AliPIDValues*>(fArrNsigmas.UncheckedAt(det));
if (!val)
val=new (fArrNsigmas[(Int_t)det]) AliPIDValues;
val->SetValues(nsig,nspecies);
val->SetPIDStatus(status);
}
AliPIDResponse::EDetPidStatus AliDetectorPID::GetRawProbability(AliPIDResponse::EDetector det, Double_t prob[], Int_t nspecies) const
{
AliPIDValues *val=static_cast<AliPIDValues*>(fArrRawProbabilities.UncheckedAt((Int_t)det));
if (!val) {
for (Int_t i=0; i<nspecies; ++i) prob[i]=1.;
return AliPIDResponse::kDetNoSignal;
}
return val->GetValues(prob,nspecies);
}
AliPIDResponse::EDetPidStatus AliDetectorPID::GetNumberOfSigmas(AliPIDResponse::EDetector det, Double_t nsig[], Int_t nspecies) const
{
AliPIDValues *val=static_cast<AliPIDValues*>(fArrNsigmas.UncheckedAt((Int_t)det));
if (!val) {
for (Int_t i=0; i<nspecies; ++i) nsig[i]=-999.;
return AliPIDResponse::kDetNoSignal;
}
return val->GetValues(nsig,nspecies);
}
Double_t AliDetectorPID::GetRawProbability(AliPIDResponse::EDetector det, AliPID::EParticleType type) const
{
AliPIDValues *val=static_cast<AliPIDValues*>(fArrRawProbabilities.UncheckedAt((Int_t)det));
if (!val) {
return 0.;
}
return val->GetValue(type);
}
Double_t AliDetectorPID::GetNumberOfSigmas(AliPIDResponse::EDetector det, AliPID::EParticleType type) const
{
AliPIDValues *val=static_cast<AliPIDValues*>(fArrNsigmas.UncheckedAt((Int_t)det));
if (!val) {
return -999.;
}
return val->GetValue(type);
}
AliPIDResponse::EDetPidStatus AliDetectorPID::GetRawProbability(AliPIDResponse::EDetector det, AliPID::EParticleType type, Double_t &prob) const
{
AliPIDValues *val=static_cast<AliPIDValues*>(fArrRawProbabilities.UncheckedAt((Int_t)det));
if (!val) {
prob=0.;
return AliPIDResponse::kDetNoSignal;
}
prob=val->GetValue(type);
return val->GetPIDStatus();
}
AliPIDResponse::EDetPidStatus AliDetectorPID::GetNumberOfSigmas(AliPIDResponse::EDetector det, AliPID::EParticleType type, Double_t &nsig) const
{
AliPIDValues *val=static_cast<AliPIDValues*>(fArrNsigmas.UncheckedAt((Int_t)det));
if (!val) {
nsig=-999.;
return AliPIDResponse::kDetNoSignal;
}
nsig=val->GetValue(type);
return val->GetPIDStatus();
}
AliPIDResponse::EDetPidStatus AliDetectorPID::GetPIDStatus(AliPIDResponse::EDetector det) const
{
AliPIDValues *val=static_cast<AliPIDValues*>(fArrRawProbabilities.UncheckedAt((Int_t)det));
if (!val) val=static_cast<AliPIDValues*>(fArrNsigmas.UncheckedAt((Int_t)det));
if (val) return val->GetPIDStatus();
return AliPIDResponse::kDetNoSignal;
}