// Alberto Pulvirenti (alberto.pulvirenti@ct.infn.it)
//
+#include "AliESDtrackCuts.h"
+#include "AliAODpidUtil.h"
#include "AliAnalysisManager.h"
#include "AliESDInputHandler.h"
+#include "AliRsnDaughter.h"
+
#include "AliRsnCutPIDITS.h"
ClassImp(AliRsnCutPIDITS)
AliRsnCutPIDITS::AliRsnCutPIDITS
(const char *name, AliPID::EParticleType ref, Double_t min, Double_t max, Bool_t rejectOutside) :
AliRsnCut(name, AliRsnCut::kDaughter, min, max),
- fInitialized(kFALSE),
+ fIsMC(kFALSE),
fRejectOutside(rejectOutside),
fMomMin(0.0),
fMomMax(1E+20),
AliRsnCutPIDITS::AliRsnCutPIDITS
(const AliRsnCutPIDITS& copy) :
AliRsnCut(copy),
- fInitialized(kFALSE),
+ fIsMC(copy.fIsMC),
fRejectOutside(copy.fRejectOutside),
fMomMin(copy.fMomMin),
fMomMax(copy.fMomMax),
AliRsnCut::operator=(copy);
- fInitialized = kFALSE;
+ fIsMC = copy.fIsMC;
fRejectOutside = copy.fRejectOutside;
fMomMin = copy.fMomMin;
fMomMax = copy.fMomMax;
return (*this);
}
-//_________________________________________________________________________________________________
-void AliRsnCutPIDITS::SetMC(Bool_t yn)
-{
-//
-// Properly set the PID response
-//
-
- AliITSPIDResponse itsresponse(yn);
-
- fESDpid.GetITSResponse() = itsresponse;
- fAODpid.GetITSResponse() = itsresponse;
-}
-
//_________________________________________________________________________________________________
Bool_t AliRsnCutPIDITS::IsSelected(TObject *object)
{
// Cut checker.
//
- // initialize if needed
- if (!fInitialized) Initialize();
-
// coherence check
if (!TargetOK(object)) return kFALSE;
// reject not ITS tracks
// status is checked in the same way for all tracks
- AliVTrack *vtrack = dynamic_cast<AliVTrack*>(fDaughter->GetRef());
+ AliVTrack *vtrack = fDaughter->Ref2Vtrack();
if (!vtrack) {
AliDebug(AliLog::kDebug + 2, Form("Impossible to process an object of type '%s'. Cut applicable only to ESD/AOD tracks", fDaughter->GetRef()->ClassName()));
return kFALSE;
// common evaluation variables
Int_t k, nITSpidLayers = 0;
Double_t mom = vtrack->P();
- AliESDtrack *esdTrack = fDaughter->GetRefESDtrack();
- AliAODTrack *aodTrack = fDaughter->GetRefAODtrack();
+ AliESDtrack *esdTrack = fDaughter->Ref2ESDtrack();
+ AliAODTrack *aodTrack = fDaughter->Ref2AODtrack();
// count number of PID layers...
if (esdTrack) {
// assign PID nsigmas to default cut check value
// since bad object types are rejected before, here we have an ESD track or AOD track
- if (esdTrack)
- fCutValueD = fESDpid.GetITSResponse().GetNumberOfSigmas(mom, esdTrack->GetITSsignal(), fRefType, nITSpidLayers, isSA);
- else
- fCutValueD = fAODpid.NumberOfSigmasITS(aodTrack, fRefType);
+ if (esdTrack) {
+ if (!fESDpid) fESDpid = new AliESDpid(fIsMC);
+ fCutValueD = fESDpid->GetITSResponse().GetNumberOfSigmas(mom, esdTrack->GetITSsignal(), fRefType, nITSpidLayers, isSA);
+ } else {
+ if (!fAODpid) fAODpid = new AliAODpidUtil(fIsMC);
+ fCutValueD = fAODpid->NumberOfSigmasITS(aodTrack, fRefType);
+ }
// use AliRsnCut default method to check cut
Bool_t cutCheck = OkRangeD();
AliInfo(Form("--> momentum range : %.3f %.3f", fMomMin, fMomMax));
AliInfo(Form("--> tracks outside range are: %s", (fRejectOutside ? "rejected" : "accepted")));
}
-
-//_________________________________________________________________________________________________
-void AliRsnCutPIDITS::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();
- fESDpid = (*pid);
- }
-
- fInitialized = kTRUE;
-}