#include "AliAODPid.h"
#include "AliESDtrack.h"
#include "AliLog.h"
#include "AliTPCdEdxInfo.h"
ClassImp(AliAODPid)
AliAODPid::AliAODPid():
fITSsignal(0),
fTPCsignal(0),
fTPCsignalN(0),
fTPCmomentum(0),
fTPCTgl(0),
fTRDnSlices(0),
fTRDntls(0),
fTRDslices(0x0),
fTRDsignal(0),
fTRDChi2(0x0),
fTOFesdsignal(0),
fTPCdEdxInfo(0)
{
for(Int_t i=0; i<AliPID::kSPECIES; i++) fIntTime[i] = 0;
for(Int_t i=0; i<5; i++) fTOFpidResolution[i] = 0.;
for(Int_t i=0; i<6; i++) {
fTRDmomentum[i] = 0.;
fTRDncls[i] = 0;
}
for(Int_t i=0; i<4; i++) fITSdEdxSamples[i] = 0.;
}
AliAODPid::~AliAODPid()
{
delete [] fTRDslices;
fTRDslices = 0;
delete fTPCdEdxInfo;
}
AliAODPid::AliAODPid(const AliAODPid& pid) :
TObject(pid),
fITSsignal(pid.fITSsignal),
fTPCsignal(pid.fTPCsignal),
fTPCsignalN(pid.fTPCsignalN),
fTPCmomentum(pid.fTPCmomentum),
fTPCTgl(pid.fTPCTgl),
fTRDnSlices(pid.fTRDnSlices),
fTRDntls(pid.fTRDntls),
fTRDslices(0x0),
fTRDsignal(pid.fTRDsignal),
fTRDChi2(pid.fTRDChi2),
fTOFesdsignal(pid.fTOFesdsignal),
fTPCdEdxInfo(0x0)
{
SetTRDslices(fTRDnSlices, pid.fTRDslices);
for(Int_t i=0; i<AliPID::kSPECIES; i++) fIntTime[i]=pid.fIntTime[i];
for(Int_t i=0; i<6; i++){
fTRDmomentum[i]=pid.fTRDmomentum[i];
fTRDncls[i] = 0;
}
for(Int_t i=0; i<5; i++) fTOFpidResolution[i]=pid.fTOFpidResolution[i];
for(Int_t i=0; i<4; i++) fITSdEdxSamples[i]=pid.fITSdEdxSamples[i];
if (pid.fTPCdEdxInfo) fTPCdEdxInfo=new AliTPCdEdxInfo(*pid.fTPCdEdxInfo);
}
AliAODPid& AliAODPid::operator=(const AliAODPid& pid)
{
if(this!=&pid) {
TObject::operator=(pid);
fITSsignal = pid.fITSsignal;
for (Int_t i = 0; i < 4; i++) fITSdEdxSamples[i]=pid.fITSdEdxSamples[i];
fTPCsignal = pid.fTPCsignal;
fTPCsignalN = pid.fTPCsignalN;
fTPCmomentum = pid.fTPCmomentum;
fTPCTgl = pid.fTPCTgl;
fTRDsignal = pid.fTRDsignal;
if(fTRDnSlices != pid.fTRDnSlices) {
delete [] fTRDslices;
fTRDslices = 0;
fTRDnSlices = pid.fTRDnSlices;
if(pid.fTRDnSlices > 0) fTRDslices = new Double32_t[fTRDnSlices];
}
if (fTRDslices && pid.fTRDslices)
memcpy(fTRDslices, pid.fTRDslices, fTRDnSlices*sizeof(Double32_t));
fTRDntls = pid.fTRDntls;
for(Int_t i = 0; i < 6; i++){
fTRDmomentum[i] = pid.fTRDmomentum[i];
fTRDncls[i] = pid.fTRDncls[i];
}
fTRDChi2 = pid.fTRDChi2;
fTOFesdsignal=pid.fTOFesdsignal;
for (Int_t i = 0; i < 5; i++) fTOFpidResolution[i]=pid.fTOFpidResolution[i];
for (Int_t i = 0; i < 5; i++) fIntTime[i]=pid.fIntTime[i];
SetTPCdEdxInfo(pid.fTPCdEdxInfo);
}
return *this;
}
void AliAODPid::GetIntegratedTimes(Double_t *timeint, Int_t nspec) const
{
for(Int_t i=0; i<AliPID::kSPECIES; i++) timeint[i]=fIntTime[i];
if (nspec>AliPID::kSPECIES) for (int i=AliPID::kSPECIES;i<AliPID::kSPECIESC;i++) timeint[i]=0;
}
void AliAODPid::SetIntegratedTimes(Double_t timeint[AliPID::kSPECIES])
{
for(Int_t i=0; i<AliPID::kSPECIES; i++) fIntTime[i]=timeint[i];
}
void AliAODPid::SetTOFpidResolution(Double_t tofPIDres[5])
{
for (Int_t i=0; i<5; i++) fTOFpidResolution[i]=tofPIDres[i];
}
void AliAODPid::GetTOFpidResolution(Double_t tofRes[5]) const
{
for (Int_t i=0; i<5; i++) tofRes[i]=fTOFpidResolution[i];
}
void AliAODPid::SetITSdEdxSamples(const Double_t s[4])
{
for (Int_t i=0; i<4; i++) fITSdEdxSamples[i]=s[i];
}
void AliAODPid::GetITSdEdxSamples(Double_t s[4]) const
{
for (Int_t i=0; i<4; i++) s[i]=fITSdEdxSamples[i];
}
void AliAODPid::SetTPCdEdxInfo(AliTPCdEdxInfo * dEdxInfo)
{
if (dEdxInfo==0x0){
delete fTPCdEdxInfo;
fTPCdEdxInfo=0x0;
return;
}
if (!fTPCdEdxInfo) fTPCdEdxInfo=new AliTPCdEdxInfo;
(*fTPCdEdxInfo)=(*dEdxInfo);
}