2 // Class AliRsnCutPIDTOF
4 // Implements the PID check with TOF detector,
5 // computed as a compatibility within a given range
6 // expressed in number of sigmas w.r. to expected time.
7 // Uses the default cut checking facilities of AliRsnCut
10 // authors: Martin Vala (martin.vala@cern.ch)
11 // Alberto Pulvirenti (alberto.pulvirenti@ct.infn.it)
14 #include "AliAnalysisManager.h"
15 #include "AliESDInputHandler.h"
17 #include "AliRsnCutPIDTOF.h"
19 ClassImp(AliRsnCutPIDTOF)
21 //_________________________________________________________________________________________________
22 AliRsnCutPIDTOF::AliRsnCutPIDTOF
23 (const char *name, AliPID::EParticleType ref, Double_t min, Double_t max, Bool_t rejectUnmatched) :
24 AliRsnCut(name, AliRsnCut::kDaughter, min, max),
26 fRejectUnmatched(rejectUnmatched),
27 fRefType(AliPID::kUnknown),
33 // Default constructor.
34 // To set the reference PID type, calls the SetRefType method,
35 // which sets the mass accordingly and coherently.
41 //_________________________________________________________________________________________________
42 AliRsnCutPIDTOF::AliRsnCutPIDTOF(const AliRsnCutPIDTOF& copy) :
45 fRejectUnmatched(copy.fRejectUnmatched),
46 fRefType(AliPID::kUnknown),
48 fESDpid(copy.fESDpid),
53 // To set the reference PID type, calls the SetRefType method,
54 // which sets the mass accordingly and coherently.
57 SetRefType(copy.fRefType);
60 //_________________________________________________________________________________________________
61 AliRsnCutPIDTOF& AliRsnCutPIDTOF::operator=(const AliRsnCutPIDTOF& copy)
64 // Assignment operator.
65 // To set the reference PID type, calls the SetRefType method,
66 // which sets the mass accordingly and coherently.
69 fInitialized = kFALSE;
70 fRejectUnmatched = copy.fRejectUnmatched;
71 fESDpid = copy.fESDpid;
72 fAODpid = copy.fAODpid;
74 SetRefType(copy.fRefType);
79 //_________________________________________________________________________________________________
80 Bool_t AliRsnCutPIDTOF::IsSelected(TObject *object)
86 // initialize if needed
87 if (!fInitialized) Initialize();
90 if (!TargetOK(object)) return kFALSE;
92 // reject always non-track objects
93 AliVTrack *vtrack = dynamic_cast<AliVTrack*>(fDaughter->GetRef());
96 AliDebug(AliLog::kDebug + 2, Form("Impossible to process an object of type '%s'. Cut applicable only to ESD/AOD tracks", fDaughter->GetRef()->ClassName()));
100 // checks that track is matched in TOF:
101 // if not, the track is accepted or rejected
102 // depending on the 'fRejectUnmatched' data member:
103 // -- kTRUE --> all unmatched tracks are rejected
104 // -- kFALSE --> all unmatched tracks are accepted (it is assumed that other PIDs are done)
105 if (!IsMatched(vtrack))
107 AliDebug(AliLog::kDebug + 2, "Track is not matched with TOF");
108 return (!fRejectUnmatched);
111 // retrieve real object type and
112 // prepare some useful variables
113 Double_t tof, sigma, times[5];
114 Double_t &ref = times[(Int_t)fRefType];
115 AliESDtrack *esdTrack = fDaughter->GetRefESDtrack();
116 AliAODTrack *aodTrack = fDaughter->GetRefAODtrack();
118 // cut check depends on the object type
121 // setup the ESD PID object
122 AliESDEvent *esd = AliRsnTarget::GetCurrentEvent()->GetRefESD();
125 AliError("Processing an ESD track, but target is not an ESD event");
128 fESDpid.SetTOFResponse(esd, AliESDpid::kTOF_T0);
130 // get time of flight, reference times and sigma
131 esdTrack->GetIntegratedTimes(times);
132 tof = (Double_t)(esdTrack->GetTOFsignal() - fESDpid.GetTOFResponse().GetStartTime(esdTrack->P()));
133 sigma = (Double_t)fESDpid.GetTOFResponse().GetExpectedSigma(esdTrack->P(), ref, fRefMass);
135 // port values to standard AliRsnCut checker
136 fCutValueD = (tof - ref) / sigma;
141 // for AOD tracks, all operations are done by the AOD PID utility
142 fCutValueD = (Double_t)fAODpid.NumberOfSigmasTOF(aodTrack, fRefType);
147 AliDebug(AliLog::kDebug + 2, Form("Impossible to process an object of type '%s'. Cut applicable only to ESD/AOD tracks", fDaughter->GetRef()->ClassName()));
152 //_________________________________________________________________________________________________
153 void AliRsnCutPIDTOF::Print(const Option_t *) const
156 // Print information on this cut
159 AliInfo(Form("Cut name, type : %s %s", GetName(), ClassName()));
160 AliInfo(Form("TOF PID cut range (sigmas): %.3f %.3f", fMinD, fMaxD));
161 AliInfo(Form("Unmatched tracks are : %s", (fRejectUnmatched ? "rejected" : "accepted")));
164 //_________________________________________________________________________________________________
165 void AliRsnCutPIDTOF::Initialize()
168 // Initialize ESD pid object from global one
171 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
172 AliESDInputHandler *handler = dynamic_cast<AliESDInputHandler*>(mgr->GetInputEventHandler());
175 AliESDpid *pid = handler->GetESDpid();
179 fInitialized = kTRUE;