#include "AliAnalysisManager.h"
#include "AliESDInputHandler.h"
+#include "AliESDtrack.h"
+#include "AliESDpid.h"
+#include "AliAODTrack.h"
+#include "AliAODpidUtil.h"
#include "AliRsnCutPIDTOF.h"
AliRsnCutPIDTOF::AliRsnCutPIDTOF
(const char *name, AliPID::EParticleType ref, Double_t min, Double_t max, Bool_t rejectUnmatched) :
AliRsnCut(name, AliRsnCut::kDaughter, min, max),
- fInitialized(kFALSE),
fRejectUnmatched(rejectUnmatched),
fRefType(AliPID::kUnknown),
fRefMass(0.0),
- fESDpid(),
- fAODpid()
+ fESDpid(0x0),
+ fAODpid(0x0)
{
//
// Default constructor.
//_________________________________________________________________________________________________
AliRsnCutPIDTOF::AliRsnCutPIDTOF(const AliRsnCutPIDTOF& copy) :
AliRsnCut(copy),
- fInitialized(kFALSE),
fRejectUnmatched(copy.fRejectUnmatched),
fRefType(AliPID::kUnknown),
fRefMass(0.0),
// which sets the mass accordingly and coherently.
//
- fInitialized = kFALSE;
fRejectUnmatched = copy.fRejectUnmatched;
fESDpid = copy.fESDpid;
fAODpid = copy.fAODpid;
// Cut checker.
//
- // initialize if needed
- if (!fInitialized) Initialize();
-
// coherence check
if (!TargetOK(object)) return kFALSE;
// -- kFALSE --> all unmatched tracks are accepted (it is assumed that other PIDs are done)
if (!IsMatched(vtrack)) {
AliDebug(AliLog::kDebug + 2, "Track is not matched with TOF");
- return (!fRejectUnmatched);
+ if (fRejectUnmatched) return kFALSE;
}
// retrieve real object type and
if (esdTrack) {
// setup the ESD PID object
AliESDEvent *esd = 0x0;
- if (fEvent) {
- esd = fEvent->GetRefESD();
- if (!esd) {
- AliError("Processing an ESD track, but target is not an ESD event");
- return kFALSE;
- }
- } else {
- AliError("NULL event reference");
+ if (fEvent) esd = fEvent->GetRefESD();
+ if (!esd) {
+ AliError("Processing an ESD track, but target is not an ESD event");
return kFALSE;
}
- fESDpid.SetTOFResponse(esd, AliESDpid::kTOF_T0);
+ if (!fESDpid) fESDpid = new AliESDpid;
+ fESDpid->SetTOFResponse(esd, AliESDpid::kTOF_T0);
// get time of flight, reference times and sigma
esdTrack->GetIntegratedTimes(times);
- tof = (Double_t)(esdTrack->GetTOFsignal() - fESDpid.GetTOFResponse().GetStartTime(esdTrack->P()));
- sigma = (Double_t)fESDpid.GetTOFResponse().GetExpectedSigma(esdTrack->P(), ref, fRefMass);
+ tof = (Double_t)(esdTrack->GetTOFsignal() - fESDpid->GetTOFResponse().GetStartTime(esdTrack->P()));
+ sigma = (Double_t)fESDpid->GetTOFResponse().GetExpectedSigma(esdTrack->P(), ref, fRefMass);
// port values to standard AliRsnCut checker
fCutValueD = (tof - ref) / sigma;
return OkRangeD();
} else if (aodTrack) {
// for AOD tracks, all operations are done by the AOD PID utility
- fCutValueD = (Double_t)fAODpid.NumberOfSigmasTOF(aodTrack, fRefType);
+ if (!fAODpid) fAODpid = new AliAODpidUtil;
+ fCutValueD = (Double_t)fAODpid->NumberOfSigmasTOF(aodTrack, fRefType);
return OkRangeD();
} else {
AliDebug(AliLog::kDebug + 2, Form("Impossible to process an object of type '%s'. Cut applicable only to ESD/AOD tracks", fDaughter->GetRef()->ClassName()));
AliInfo(Form("Unmatched tracks are : %s", (fRejectUnmatched ? "rejected" : "accepted")));
}
-//_________________________________________________________________________________________________
-void AliRsnCutPIDTOF::Initialize()
-{
-//
-// Initialize ESD pid object from global one
-//
-
- AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
- AliESDInputHandler *handler = dynamic_cast<AliESDInputHandler*>(mgr->GetInputEventHandler());
- if (handler) {
- AliESDpid *pid = handler->GetESDpid();
- if (pid) fESDpid = (*pid);
- }
-
- fInitialized = kTRUE;
-}