// AODTracks
TClonesArray* tracks = fAODEvent->GetTracks();
+ Int_t tofLabel[3];
if(tracks){
for(int it = 0; it < fAODEvent->GetNTracks();++it){
AliAODTrack *track = fAODEvent->GetTrack(it);
label *= -1;
sign = -1;
}
-
+
if (label >= AliMCEvent::BgLabelOffset()) label = mcEvent->BgLabelToIndex(label);
if(label > np || track->GetLabel() == 0){
AliWarning(Form("Wrong ESD track label %5d (%5d)",track->GetLabel(), label));
AliWarning(Form("New label not found for %5d (%5d)",track->GetLabel(), label));
}
track->SetLabel(sign*fMCEventH->GetNewLabel(label));
+
+ track->GetTOFLabel(tofLabel);
+
+ for (Int_t i =0; i < 3; i++) {
+ label = tofLabel[i]; // esd label
+ Int_t nlabel = label; // new label
+ if (label < 0) continue;
+ if (label >= AliMCEvent::BgLabelOffset()) nlabel = mcEvent->BgLabelToIndex(label);
+ if(nlabel > np || label == 0) {
+ AliWarning(Form("Wrong TOF label %5d (%5d)", label, nlabel));
+ }
+ if(fMCEventH->GetNewLabel(label) == 0){
+ AliWarning(Form("New TOF label not found for %5d",label ));
+ }
+ tofLabel[i] = fMCEventH->GetNewLabel(label);
+ }
+ track->SetTOFLabel(tofLabel);
}
}
fChi2MatchTrigger(0.),
fFlags(0),
fLabel(-999),
+ fTOFLabel(),
fITSMuonClusterMap(0),
fMUONtrigHitsMapTrg(0),
fMUONtrigHitsMapTrk(0),
fTrackPhiOnEMCal(-999),
fTrackEtaOnEMCal(-999),
fTPCsignalTuned(0),
+ fTOFsignalTuned(99999),
fAODEvent(NULL)
{
// default constructor
SetXYAtDCA(-999., -999.);
SetPxPyPzAtDCA(-999., -999., -999.);
SetPID((Float_t*)NULL);
+ for (Int_t i = 0; i < 3; i++) {fTOFLabel[i] = -1;}
}
//______________________________________________________________________________
fChi2MatchTrigger(0.),
fFlags(0),
fLabel(label),
+ fTOFLabel(),
fITSMuonClusterMap(0),
fMUONtrigHitsMapTrg(0),
fMUONtrigHitsMapTrk(0),
fTrackPhiOnEMCal(-999),
fTrackEtaOnEMCal(-999),
fTPCsignalTuned(0),
+ fTOFsignalTuned(99999),
fAODEvent(NULL)
{
// constructor
if(covMatrix) SetCovMatrix(covMatrix);
SetPID(pid);
SetITSClusterMap(itsClusMap);
+ for (Int_t i=0;i<3;i++) {fTOFLabel[i]=-1;}
}
//______________________________________________________________________________
fChi2MatchTrigger(0.),
fFlags(0),
fLabel(label),
+ fTOFLabel(),
fITSMuonClusterMap(0),
fMUONtrigHitsMapTrg(0),
fMUONtrigHitsMapTrk(0),
fTrackPhiOnEMCal(-999),
fTrackEtaOnEMCal(-999),
fTPCsignalTuned(0),
+ fTOFsignalTuned(99999),
fAODEvent(NULL)
{
// constructor
if(covMatrix) SetCovMatrix(covMatrix);
SetPID(pid);
SetITSClusterMap(itsClusMap);
+ for (Int_t i=0;i<3;i++) {fTOFLabel[i]=-1;}
}
//______________________________________________________________________________
fChi2MatchTrigger(trk.fChi2MatchTrigger),
fFlags(trk.fFlags),
fLabel(trk.fLabel),
+ fTOFLabel(),
fITSMuonClusterMap(trk.fITSMuonClusterMap),
fMUONtrigHitsMapTrg(trk.fMUONtrigHitsMapTrg),
fMUONtrigHitsMapTrk(trk.fMUONtrigHitsMapTrk),
fTrackPhiOnEMCal(trk.fTrackPhiOnEMCal),
fTrackEtaOnEMCal(trk.fTrackEtaOnEMCal),
fTPCsignalTuned(trk.fTPCsignalTuned),
+ fTOFsignalTuned(trk.fTOFsignalTuned),
fAODEvent(trk.fAODEvent)
{
// Copy constructor
if(trk.fDetPid) fDetPid=new AliAODPid(*trk.fDetPid);
SetPID(trk.fPID);
if (trk.fDetectorPID) fDetectorPID = new AliDetectorPID(*trk.fDetectorPID);
+ for (Int_t i = 0; i < 3; i++) {fTOFLabel[i] = trk.fTOFLabel[i];}
}
//______________________________________________________________________________
fTrackPhiOnEMCal = trk.fTrackPhiOnEMCal;
fTrackEtaOnEMCal = trk.fTrackEtaOnEMCal;
fTPCsignalTuned = trk.fTPCsignalTuned;
+ fTOFsignalTuned = trk.fTOFsignalTuned;
delete fCovMatrix;
if(trk.fCovMatrix) fCovMatrix=new AliAODRedCov<6>(*trk.fCovMatrix);
delete fDetectorPID;
fDetectorPID=0x0;
if (trk.fDetectorPID) fDetectorPID = new AliDetectorPID(*trk.fDetectorPID);
+ for (Int_t i = 0; i < 3; i++) {fTOFLabel[i] = trk.fTOFLabel[i];}
}
return *this;
}
}
+void AliAODTrack::SetTOFLabel(const Int_t *p) {
+ // Sets (in TOF)
+ for (Int_t i = 0; i < 3; i++) fTOFLabel[i]=p[i];
+}
+
+//_______________________________________________________________________
+void AliAODTrack::GetTOFLabel(Int_t *p) const {
+ // Gets (in TOF)
+ for (Int_t i=0; i<3; i++) p[i]=fTOFLabel[i];
+}
+
//______________________________________________________________________________
AliAODTrack::AODTrkPID_t AliAODTrack::GetMostProbablePID() const
{
virtual Bool_t XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
Double_t Chi2perNDF() const { return fChi2perNDF; }
- UShort_t GetTPCNcls() const {
- UShort_t cl = fTPCFitMap.CountBits();
- if(cl==0)cl = fTPCClusterMap.CountBits();// backward compatibility
+
+ UShort_t GetTPCnclsS(Int_t i0=0,Int_t i1=159) const {
+ UShort_t cl = fTPCSharedMap.CountBits(i0)-fTPCSharedMap.CountBits(i1);
return cl;
}
+ UShort_t GetTPCncls(Int_t i0=0,Int_t i1=159) const {
+ UShort_t cl = fTPCFitMap.CountBits(i0)-fTPCFitMap.CountBits(i1);
+ if(cl==0)cl = fTPCClusterMap.CountBits(i0)-fTPCClusterMap.CountBits(i1);// backward compatibility
+ return cl;
+ }
+
+ UShort_t GetTPCNcls() const { return GetTPCncls(); }
+
virtual Double_t M() const { return M(GetMostProbablePID()); }
Double_t M(AODTrkPID_t pid) const;
virtual Double_t E() const { return E(GetMostProbablePID()); }
Int_t GetID() const { return (Int_t)fID; }
Int_t GetLabel() const { return fLabel; }
+ void GetTOFLabel(Int_t *p) const;
+
+
Char_t GetType() const { return fType;}
Bool_t IsPrimaryCandidate() const;
Bool_t GetUsedForVtxFit() const { return TestBit(kUsedForVtxFit); }
virtual AliTPCdEdxInfo* GetTPCdEdxInfo() const {return fDetPid?fDetPid->GetTPCdEdxInfo():0;}
Double_t GetTPCmomentum() const { return fDetPid?fDetPid->GetTPCmomentum():0.; }
Double_t GetTOFsignal() const { return fDetPid?fDetPid->GetTOFsignal():0.; }
+ Double_t GetTOFsignalTunedOnData() const { return fTOFsignalTuned;}
+ void SetTOFsignalTunedOnData(Double_t signal) {fTOFsignalTuned = signal;}
Double_t GetHMPIDsignal() const;
Double_t GetHMPIDoccupancy() const;
void SetID(Short_t id) { fID = id; }
void SetLabel(Int_t label) { fLabel = label; }
-
+ void SetTOFLabel(const Int_t* p);
template <typename T> void SetPosition(const T *x, Bool_t isDCA = kFALSE);
void SetDCA(Double_t d, Double_t z);
void SetUsedForVtxFit(Bool_t used = kTRUE) { used ? SetBit(kUsedForVtxFit) : ResetBit(kUsedForVtxFit); }
ULong_t fFlags; // reconstruction status flags
Int_t fLabel; // track label, points back to MC track
-
+ Int_t fTOFLabel[3]; // TOF label
UInt_t fITSMuonClusterMap; // map of ITS and muon clusters, one bit per layer
// (ITS: bit 1-8, muon trigger: bit 9-16, muon tracker: bit 17-26, muon match trigger: bit 31-32)
UInt_t fMUONtrigHitsMapTrg; // Muon trigger hits map from trigger
Double_t fTrackEtaOnEMCal; // eta of track after being propagated to 430cm
Double_t fTPCsignalTuned; //! TPC signal tuned on data when using MC
+ Double_t fTOFsignalTuned; //! TOF signal tuned on data when using MC
const AliAODEvent* fAODEvent; //!
- ClassDef(AliAODTrack, 19);
+ ClassDef(AliAODTrack, 20);
};
inline Bool_t AliAODTrack::IsPrimaryCandidate() const
track->SetTPCsignalTunedOnData(dedx);
return dedx;
}
+//_________________________________________________________________________
+Float_t AliAODpidUtil::GetTOFsignalTunedOnData(const AliVTrack *t) const {
+ AliAODTrack *track = (AliAODTrack *) t;
+ Double_t tofSignal = track->GetTOFsignalTunedOnData();
+
+ if(tofSignal < 99999) return (Float_t)tofSignal; // it has been already set
+ AliAODPid *pidObj = track->GetDetPid();
+ tofSignal = pidObj->GetTOFsignal() + fTOFResponse.GetTailRandomValue();
+ track->SetTOFsignalTunedOnData(tofSignal);
+ return (Float_t)tofSignal;
+}
//_________________________________________________________________________
Float_t AliAODpidUtil::GetSignalDeltaTOFold(const AliVParticle *vtrack, AliPID::EParticleType type, Bool_t ratio/*=kFALSE*/) const
//
AliAODTrack *track=(AliAODTrack*)vtrack;
-
AliAODPid *pidObj = track->GetDetPid();
if (!pidObj) return -9999.;
- Double_t tofTime=pidObj->GetTOFsignal();
+ Double_t tofTime = 99999;
+ if (fTuneMConData && ((fTuneMConDataMask & kDetTOF) == kDetTOF) ) tofTime = (Double_t)this->GetTOFsignalTunedOnData((AliVTrack*)vtrack);
+ else tofTime=pidObj->GetTOFsignal();
const Double_t expTime=fTOFResponse.GetExpectedSignal((AliVTrack*)vtrack,type);
Double_t sigmaTOFPid[AliPID::kSPECIES];
pidObj->GetTOFpidResolution(sigmaTOFPid);
Double_t sigTOF=0.;
AliAODPid *pidObj = track->GetDetPid();
if (!pidObj) return -999.;
- Double_t tofTime=pidObj->GetTOFsignal();
+ Double_t tofTime = 99999;
+ if (fTuneMConData && ((fTuneMConDataMask & kDetTOF) == kDetTOF) ) tofTime = (Double_t)this->GetTOFsignalTunedOnData((AliVTrack*)vtrack);
+ else tofTime=pidObj->GetTOFsignal();
Double_t expTime=fTOFResponse.GetExpectedSignal((AliVTrack*)vtrack,type);
Double_t sigmaTOFPid[AliPID::kSPECIES];
pidObj->GetTOFpidResolution(sigmaTOFPid);
Float_t GetTPCsignalTunedOnData(const AliVTrack *t) const;
+ Float_t GetTOFsignalTunedOnData(const AliVTrack *t) const;
protected:
virtual Float_t GetSignalDeltaTOFold(const AliVParticle *track, AliPID::EParticleType type, Bool_t ratio=kFALSE) const;
else *fTracksMatched = array;
}
void AddLabels(TArrayI & array) {
- if(!fLabels)fLabels = new TArrayI(array) ;
+ if(!fLabels)fLabels = new TArrayI(array) ;
else *fLabels = array;
}
+ void SetLabel(Int_t *array, UInt_t size)
+ {
+ if(fLabels) delete fLabels ;
+ fLabels = new TArrayI(size,array);
+ }
+
TArrayI * GetTracksMatched() const {return fTracksMatched;}
TArrayI * GetLabelsArray() const {return fLabels;}
Int_t * GetLabels() const {if (fLabels) return fLabels->GetArray(); else return 0;}
return dedx;
}
//_________________________________________________________________________
+Float_t AliESDpid::GetTOFsignalTunedOnData(const AliVTrack *t) const {
+ AliESDtrack *track = (AliESDtrack *) t;
+ Double_t tofSignal = track->GetTOFsignalTunedOnData();
+
+ if(tofSignal < 99999) return (Float_t)tofSignal; // it has been already set
+
+ tofSignal = t->GetTOFsignal() + fTOFResponse.GetTailRandomValue();
+ track->SetTOFsignalTunedOnData(tofSignal);
+ return (Float_t)tofSignal;
+}
+//_________________________________________________________________________
void AliESDpid::MakeTPCPID(AliESDtrack *track) const
{
//
AliVTrack *vtrack=(AliVTrack*)track;
const Double_t expTime = fTOFResponse.GetExpectedSignal(vtrack,type);
- const Double_t tofTime=vtrack->GetTOFsignal() - fTOFResponse.GetStartTime(vtrack->P());
+ Double_t tofTime = 99999;
+ if (fTuneMConData && ((fTuneMConDataMask & kDetTOF) == kDetTOF) ) tofTime = (Double_t)this->GetTOFsignalTunedOnData((AliVTrack*)vtrack);
+ else tofTime=vtrack->GetTOFsignal();
+ tofTime = tofTime - fTOFResponse.GetStartTime(vtrack->P());
Double_t delta=-9999.;
if (!ratio) delta=tofTime-expTime;
//
AliVTrack *vtrack=(AliVTrack*)track;
+ Double_t tofTime = 99999;
+ if (fTuneMConData && ((fTuneMConDataMask & kDetTOF) == kDetTOF) ) tofTime = (Double_t)this->GetTOFsignalTunedOnData((AliVTrack*)vtrack);
+ else tofTime=vtrack->GetTOFsignal();
Double_t expTime = fTOFResponse.GetExpectedSignal(vtrack,type);
- return (vtrack->GetTOFsignal() - fTOFResponse.GetStartTime(vtrack->P()) - expTime)/fTOFResponse.GetExpectedSigma(vtrack->P(),expTime,AliPID::ParticleMassZ(type));
+ return (tofTime - fTOFResponse.GetStartTime(vtrack->P()) - expTime)/fTOFResponse.GetExpectedSigma(vtrack->P(),expTime,AliPID::ParticleMassZ(type));
}
Float_t GetNMaxSigmaTOFTPCMismatch() const {return fRangeTOFMismatch;}
Float_t GetTPCsignalTunedOnData(const AliVTrack *t) const;
+ Float_t GetTOFsignalTunedOnData(const AliVTrack *t) const;
void SetEventHandler(AliVEventHandler *event){fEventHandler=event;};
protected:
fTRDQuality(0),
fTRDBudget(0),
fTOFsignal(99999),
+ fTOFsignalTuned(99999),
fTOFsignalToT(99999),
fTOFsignalRaw(99999),
fTOFsignalDz(999),
fTRDQuality(track.fTRDQuality),
fTRDBudget(track.fTRDBudget),
fTOFsignal(track.fTOFsignal),
+ fTOFsignalTuned(track.fTOFsignalTuned),
fTOFsignalToT(track.fTOFsignalToT),
fTOFsignalRaw(track.fTOFsignalRaw),
fTOFsignalDz(track.fTOFsignalDz),
fTRDQuality(0),
fTRDBudget(0),
fTOFsignal(99999),
+ fTOFsignalTuned(99999),
fTOFsignalToT(99999),
fTOFsignalRaw(99999),
fTOFsignalDz(999),
fTRDQuality(0),
fTRDBudget(0),
fTOFsignal(99999),
+ fTOFsignalTuned(99999),
fTOFsignalToT(99999),
fTOFsignalRaw(99999),
fTOFsignalDz(999),
fTRDQuality = source.fTRDQuality;
fTRDBudget = source.fTRDBudget;
fTOFsignal = source.fTOFsignal;
+ fTOFsignalTuned = source.fTOFsignalTuned;
fTOFsignalToT = source.fTOFsignalToT;
fTOFsignalRaw = source.fTOFsignalRaw;
fTOFsignalDz = source.fTOFsignalDz;
Int_t GetTOFcluster() const {return fTOFindex;}
void SetTOFcluster(Int_t index) {fTOFindex=index;}
void SetTOFCalChannel(Int_t index) {fTOFCalChannel=index;}
+ void SetTOFsignalTunedOnData(Double_t signal){fTOFsignalTuned=signal;}
+ Double_t GetTOFsignalTunedOnData() const {return fTOFsignalTuned;}
// HMPID methodes +++++++++++++++++++++++++++++++++ (kir)
void SetHMPIDsignal(Double_t theta) {fHMPIDsignal=theta;}
Double32_t fTRDBudget; // trd material budget
Double32_t fTOFsignal; // detector's PID signal
+ Double32_t fTOFsignalTuned; //! detector's PID signal tuned on data when using MC
Double32_t fTOFsignalToT; // detector's ToT signal
Double32_t fTOFsignalRaw; // detector's uncorrected time signal
Double32_t fTOFsignalDz; // local z of track's impact on the TOF pad
static bool fgkOnlineMode; //! indicate the online mode to skip some of the functionality
AliESDtrack & operator=(const AliESDtrack & );
- ClassDef(AliESDtrack,66) //ESDtrack
+ ClassDef(AliESDtrack,67) //ESDtrack
};
fEMCALPIDParams(NULL),
fCurrentEvent(NULL),
fCurrCentrality(0.0),
-fTuneMConData(kFALSE)
+fTuneMConData(kFALSE),
+fTuneMConDataMask(kDetTOF|kDetTPC)
{
//
// default ctor
fEMCALPIDParams(NULL),
fCurrentEvent(NULL),
fCurrCentrality(0.0),
-fTuneMConData(kFALSE)
+fTuneMConData(kFALSE),
+fTuneMConDataMask(kDetTOF|kDetTPC)
{
//
// copy ctor
}
Int_t recopass = fRecoPass;
- if (fTuneMConData)
+ if (fTuneMConData && ((fTuneMConDataMask & kDetTPC) == kDetTPC) )
recopass = fRecoPassUser;
TString defaultObj = Form("Default_%s_pass%d", dataType.Data(), recopass);
if (fIsMC && !fTuneMConData) period=fMCperiodTPC;
Int_t recopass = fRecoPass;
- if(fTuneMConData) recopass = fRecoPassUser;
+ if (fTuneMConData && ((fTuneMConDataMask & kDetTPC) == kDetTPC) ) recopass = fRecoPassUser;
AliInfo(Form("Searching splines for: %s %s PASS%d %s",datatype.Data(),period.Data(),recopass,fBeamType.Data()));
Bool_t found=kFALSE;
// the following call is needed in order to fill the transient data member
// fTPCsignalTuned which is used in the TPCPIDResponse to judge
// if using tuned on data
- if (fTuneMConData)
- this->GetTPCsignalTunedOnData(track);
+ if (fTuneMConData && ((fTuneMConDataMask & kDetTPC) == kDetTPC) ) this->GetTPCsignalTunedOnData(track);
return fTPCResponse.GetNumberOfSigmas(track, type, AliTPCPIDResponse::kdEdxDefault, fUseTPCEtaCorrection);
}
// the following call is needed in order to fill the transient data member
// fTPCsignalTuned which is used in the TPCPIDResponse to judge
// if using tuned on data
- if (fTuneMConData)
+ if (fTuneMConData && ((fTuneMConDataMask & kDetTPC) == kDetTPC) )
this->GetTPCsignalTunedOnData(track);
val=fTPCResponse.GetSignalDelta(track, type, AliTPCPIDResponse::kdEdxDefault, fUseTPCEtaCorrection, ratio);
//
AliVTrack *track=(AliVTrack*)vtrack;
val=GetSignalDeltaTOFold(track, type, ratio);
-
return GetTOFPIDStatus(track);
}
Double_t dedx=track->GetTPCsignal();
Bool_t mismatch=kTRUE/*, heavy=kTRUE*/;
- if(fTuneMConData) dedx = this->GetTPCsignalTunedOnData(track);
+ if (fTuneMConData && ((fTuneMConDataMask & kDetTPC) == kDetTPC) ) dedx = this->GetTPCsignalTunedOnData(track);
Double_t bethe = 0.;
Double_t sigma = 0.;
void SetTOFResponse(AliVEvent *vevent,EStartTimeType_t option);
virtual Float_t GetTPCsignalTunedOnData(const AliVTrack *t) const {return t->GetTPCsignal();};
+ virtual Float_t GetTOFsignalTunedOnData(const AliVTrack *t) const {return t->GetTOFsignal();};
Bool_t IsTunedOnData() const {return fTuneMConData;};
void SetTunedOnData(Bool_t flag=kTRUE,Int_t recoPass=0){fTuneMConData = flag; if(recoPass>0) fRecoPassUser = recoPass;};
+ Int_t GetTunedOnDataMask() const {return fTuneMConDataMask;};
+ void SetTunedOnDataMask(Int_t detMask) {fTuneMConDataMask = detMask;}
AliPIDResponse(const AliPIDResponse &other);
AliPIDResponse& operator=(const AliPIDResponse &other);
EDetPidStatus GetComputeTRDProbability (const AliVTrack *track, Int_t nSpecies, Double_t p[],AliTRDPIDResponse::ETRDPIDMethod PIDmethod=AliTRDPIDResponse::kLQ1D) const;
EDetPidStatus GetTOFPIDStatus(const AliVTrack *track) const;
+ Bool_t fTuneMConData; // switch to force the MC to be similar to data
+ Int_t fTuneMConDataMask; // select for which detectors enable MC tuning on data
+
+
private:
Bool_t fIsMC; // If we run on MC data
Bool_t fCachePID;
Float_t fCurrCentrality; //! current centrality
- Bool_t fTuneMConData; // switch to force the MC to be similar to data (dE/dx)
void ExecNewRun();
#include "TMath.h"
#include "AliLog.h"
+#include "TF1.h"
#include "AliTOFPIDResponse.h"
ClassImp(AliTOFPIDResponse)
+TF1 *AliTOFPIDResponse::fTOFtailResponse = NULL; // function to generate a TOF tail
+
//_________________________________________________________________________
AliTOFPIDResponse::AliTOFPIDResponse():
fSigma(0),
fPar[2] = 0.002;
fPar[3] = 40.0;
+ if(!fTOFtailResponse){
+ fTOFtailResponse = new TF1("fTOFtail","[0]*TMath::Exp(-(x-[1])*(x-[1])/2/[2]/[2])* (x < [1]+[3]*[2]) + (x > [1]+[3]*[2])*[0]*TMath::Exp(-(x-[1]-[3]*[2]*0.5)*[3]/[2] * 0.0111)*0.01818",-1000,1000);
+ fTOFtailResponse->SetParameter(0,1);
+ fTOFtailResponse->SetParameter(1,-25);
+ fTOFtailResponse->SetParameter(2,1);
+ fTOFtailResponse->SetParameter(3,1.1);
+ fTOFtailResponse->SetNpx(10000);
+ }
+
+
// Reset T0 info
ResetT0info();
SetMomBoundary();
return GetT0binMask(ibin);
}
+//_________________________________________________________________________
+Double_t AliTOFPIDResponse::GetTailRandomValue() const // generate a random value to add a tail to TOF time (for MC analyses)
+{
+ if(fTOFtailResponse)
+ return fTOFtailResponse->GetRandom();
+ else
+ return 0.0;
+}
#include "AliVTrack.h"
class AliTOFPIDParams;
+class TF1;
class AliTOFPIDResponse : public TObject {
public:
Double_t GetMismatchProbability(Double_t p,Double_t mass) const;
+ Double_t GetTailRandomValue() const; // generate a random value to add a tail to TOF time (for MC analyses)
+
void SetT0event(Float_t *t0event){for(Int_t i=0;i < fNmomBins;i++) fT0event[i] = t0event[i];};
void SetT0resolution(Float_t *t0resolution){for(Int_t i=0;i < fNmomBins;i++) fT0resolution[i] = t0resolution[i];};
void ResetT0info(){ for(Int_t i=0;i < fNmomBins;i++){ fT0event[i] = 0.0; fT0resolution[i] = 0.0; fMaskT0[i] = 0;} };
Int_t fMaskT0[fNmomBins]; // mask withthe T0 used (0x1=T0-TOF,0x2=T0A,0x3=TOC) for p bins
Float_t fPar[4]; // parameter for expected times resolution
- ClassDef(AliTOFPIDResponse,4) // TOF PID class
+ static TF1 *fTOFtailResponse; // function to generate a TOF tail
+
+ ClassDef(AliTOFPIDResponse,5) // TOF PID class
};
#endif
virtual UShort_t GetTPCsignalN() const {return 0 ;}
virtual Double_t GetTPCmomentum() const {return 0.;}
virtual Double_t GetTOFsignal() const {return 0.;}
+ virtual Double_t GetTOFsignalTunedOnData() const {return 0.;}
virtual Double_t GetHMPIDsignal() const {return 0.;}
virtual Double_t GetTRDsignal() const {return 0.;}