1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 // Cut container class for the ALICE HFE group
17 // Serves also as interface to the correction Framework
18 // Provides a set of standard cuts
27 #ifndef ALIHFEEXTRACUTS_H
28 #include "AliHFEextraCuts.h"
40 class AliHFEcuts : public TNamed{
44 kStepRecKineITSTPC = 1,
50 kNcutStepsRecTrack = 7
57 kStepHFEcutsSecvtx = 0,
58 kNcutStepsSecvtxTrack = 1
62 kStepMCGeneratedZOutNoPileUpCentralityFine = 1,
63 kStepMCGeneratedEventCut = 2,
64 kStepMCInAcceptance = 3,
68 kEventStepGenerated = 0,
69 kEventStepRecNoCut = 1,
70 kEventStepRecNoPileUp = 2,
71 kEventStepRecCentralityOk = 3,
73 kEventStepReconstructed = 5,
78 AliHFEcuts(const Char_t *name, const Char_t *title);
79 AliHFEcuts(const AliHFEcuts &c);
80 AliHFEcuts &operator=(const AliHFEcuts &c);
81 void Copy(TObject &o) const;
82 Long64_t Merge(const TCollection *list);
85 void Initialize(AliCFManager *cfm);
88 Bool_t CheckParticleCuts(UInt_t step, TObject *o);
89 Bool_t CheckEventCuts(const char*namestep, TObject *o);
90 void SetRecEvent(const AliVEvent *ev);
91 void SetMCEvent(const AliMCEvent *ev);
93 TList *GetQAhistograms() const { return fHistQA; }
95 void SetQAOn() {SetBit(kDebugMode, kTRUE); };
96 void UnsetQA() {SetBit(kDebugMode, kFALSE); };
97 Bool_t IsQAOn() const { return TestBit(kDebugMode); };
98 void SetAOD() { SetBit(kAOD, kTRUE); }
99 void SetESD() { SetBit(kAOD, kFALSE); }
100 Bool_t IsAOD() const { return TestBit(kAOD); }
101 Bool_t IsESD() const { return !TestBit(kAOD); }
104 static const Char_t *MCCutName(UInt_t step){
105 if(step >= kNcutStepsMCTrack) return fgkUndefined;
106 return fgkMCCutName[step];
108 static const Char_t *RecoCutName(UInt_t step){
109 if(step >= kNcutStepsRecTrack) return fgkUndefined;
110 return fgkRecoCutName[step];
112 static const Char_t *DECutName(UInt_t step){
113 if(step >= kNcutStepsDETrack) return fgkUndefined;
114 return fgkDECutName[step];
116 static const Char_t *SecvtxCutName(UInt_t step){
117 if(step >= kNcutStepsSecvtxTrack) return fgkUndefined;
118 return fgkSecvtxCutName[step];
120 static const Char_t *EventCutName(UInt_t step){
121 if(step >= kNcutStepsEvent) return fgkUndefined;
122 return fgkEventCutName[step];
126 Bool_t IsRequireITSpixel() const { return TESTBIT(fRequirements, kITSPixel); };
127 Bool_t IsRequireMaxImpactParam() const { return TESTBIT(fRequirements, kMaxImpactParam); };
128 Bool_t IsRequirePrimary() const { return TESTBIT(fRequirements, kPrimary); };
129 Bool_t IsRequireProdVertex() const { return TESTBIT(fRequirements, kProductionVertex); };
130 Bool_t IsRequireSigmaToVertex() const { return TESTBIT(fRequirements, kSigmaToVertex); };
131 Bool_t IsRequireDCAToVertex() const {return TESTBIT(fRequirements, kDCAToVertex); };
132 Bool_t IsRequireKineMCCuts() const {return TESTBIT(fRequirements, kKineMCCuts); };
133 Double_t GetVertexRange() const {return fVertexRangeZ; };
134 Int_t GetMinTrackletsTRD() const { return fMinTrackletsTRD; }
137 inline void SetCutITSpixel(UChar_t cut);
138 void SetCheckITSLayerStatus(Bool_t checkITSLayerStatus) { fCheckITSLayerStatus = checkITSLayerStatus; }
139 void SetMinNClustersTPC(UChar_t minClustersTPC) { fMinClustersTPC = minClustersTPC; }
140 void SetMinNClustersTPCPID(UChar_t minClustersTPC) { fMinClustersTPCPID = minClustersTPC; }
141 void SetMinNClustersITS(UChar_t minClustersITS) { fMinClustersITS = minClustersITS; }
142 void SetMinNTrackletsTRD(UChar_t minNtrackletsTRD, Bool_t exact = kFALSE) { fMinTrackletsTRD = minNtrackletsTRD; fTRDtrackletsExact = exact; }
143 void SetMaxChi2perClusterITS(Double_t chi2) { fMaxChi2clusterITS = chi2; };
144 void SetMaxChi2perClusterTPC(Double_t chi2) { fMaxChi2clusterTPC = chi2; };
145 inline void SetMaxImpactParam(Double_t radial, Double_t z);
146 inline void SetIPcutParam(Float_t p0, Float_t p1, Float_t p2, Float_t p3, Bool_t isipsigma, Bool_t isabs);
147 void SetMinRatioTPCclusters(Double_t minRatioTPC) { fMinClusterRatioTPC = minRatioTPC; };
148 void SetPtRange(Double_t ptmin, Double_t ptmax){fPtRange[0] = ptmin; fPtRange[1] = ptmax;};
149 inline void SetProductionVertex(Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax);
150 inline void SetSigmaToVertex(Double_t sig);
151 inline void SetSigmaToVertexXY(Double_t sig);
152 inline void SetSigmaToVertexZ(Double_t sig);
153 void SetTPCmodes(AliHFEextraCuts::ETPCclusterDef_t clusterDef, AliHFEextraCuts::ETPCclrDef_t ratioDef) {
154 fTPCclusterDef= clusterDef;
155 fTPCratioDef = ratioDef;
157 void SetVertexRange(Double_t zrange){fVertexRangeZ = zrange;};
158 void SetTOFPIDStep(Bool_t tofPidStep) {fTOFPIDStep = tofPidStep;};
159 void SetTOFMISMATCHStep(Bool_t tofMismatchStep) {fTOFMISMATCHStep = tofMismatchStep;};
160 void SetTPCPIDCleanUpStep(Bool_t tpcPIDCleanUpStep) {fTPCPIDCLEANUPStep = tpcPIDCleanUpStep;};
161 void SetUseMixedVertex(Bool_t useMixedVertex) {fUseMixedVertex = useMixedVertex;};
162 void SetFractionOfSharedTPCClusters(Double_t fractionOfSharedTPCClusters) {fFractionOfSharedTPCClusters = fractionOfSharedTPCClusters;};
163 void SetMaxImpactParameterRpar(Bool_t maxImpactParameterRpar) { fMaxImpactParameterRpar = maxImpactParameterRpar; };
165 inline void CreateStandardCuts();
168 void SetAdditionalStatusRequirement(Long_t requirement) {fAdditionalStatusRequirement = requirement;}
169 void SetRequireDCAToVertex() { SETBIT(fRequirements, kDCAToVertex); CLRBIT(fRequirements, kSigmaToVertex); };
170 void SetRequireIsPrimary() { SETBIT(fRequirements, kPrimary); };
171 void SetRequireITSPixel() { SETBIT(fRequirements, kITSPixel); }
172 void UnsetRequireITSPixel() { CLRBIT(fRequirements, kITSPixel); }
173 void SetRequireProdVertex() { SETBIT(fRequirements, kProductionVertex); };
174 void SetRequireSigmaToVertex() { SETBIT(fRequirements, kSigmaToVertex); CLRBIT(fRequirements, kDCAToVertex); };
175 void UnsetVertexRequirement() { CLRBIT(fRequirements, kDCAToVertex); CLRBIT(fRequirements, kSigmaToVertex); }
176 void SetRequireKineMCCuts() { SETBIT(fRequirements, kKineMCCuts); };
178 void SetDebugLevel(Int_t level) { fDebugLevel = level; };
179 Int_t GetDebugLevel() const { return fDebugLevel; };
183 kDebugMode = BIT(14),
188 kProductionVertex = 1,
195 void SetParticleGenCutList();
196 void SetAcceptanceCutList();
197 void SetRecKineITSTPCCutList();
198 void SetRecPrimaryCutList();
199 void SetHFElectronITSCuts();
200 void SetHFElectronTOFCuts();
201 void SetHFElectronTPCCuts();
202 void SetHFElectronTRDCuts();
203 void SetHFElectronDcaCuts();
204 void SetEventCutList(Int_t istep);
206 static const Char_t* fgkMCCutName[kNcutStepsMCTrack]; // Cut step names for MC single Track cuts
207 static const Char_t* fgkRecoCutName[kNcutStepsRecTrack]; // Cut step names for Rec single Track cuts
208 static const Char_t* fgkDECutName[kNcutStepsDETrack]; // Cut step names for impact parameter cuts
209 static const Char_t* fgkSecvtxCutName[kNcutStepsSecvtxTrack]; // Cut step names for secondary vertexing cuts
210 static const Char_t* fgkEventCutName[kNcutStepsEvent]; // Cut step names for Event cuts
211 static const Char_t* fgkUndefined; // Name for undefined (overflow)
213 ULong64_t fRequirements; // Bitmap for requirements
214 AliHFEextraCuts::ETPCclusterDef_t fTPCclusterDef; // TPC cluster definition
215 AliHFEextraCuts::ETPCclrDef_t fTPCratioDef; // TPC cluster ratio Definition
216 Double_t fDCAtoVtx[2]; // DCA to Vertex
217 Double_t fProdVtx[4]; // Production Vertex
218 Double_t fPtRange[2]; // pt range
219 UChar_t fMinClustersTPC; // Min.Number of TPC clusters
220 UChar_t fMinClustersTPCPID; // Min.Number of TPC clusters
221 UChar_t fMinClustersITS; // Min.Number of TPC clusters
222 UChar_t fMinTrackletsTRD; // Min. Number of TRD tracklets
223 UChar_t fCutITSPixel; // Cut on ITS pixel
224 Bool_t fCheckITSLayerStatus; // Check ITS layer status
225 Double_t fMaxChi2clusterITS; // Max Chi2 per ITS cluster
226 Double_t fMaxChi2clusterTPC; // Max Chi2 per TPC cluster
227 Double_t fMinClusterRatioTPC; // Min. Ratio findable / found TPC clusters
228 Double_t fSigmaToVtx[3]; // Sigma To Vertex
229 Double_t fVertexRangeZ; // Vertex Range reconstructed
230 Bool_t fTRDtrackletsExact; // Require exact number of tracklets
231 Bool_t fTOFPIDStep; // TOF matching step efficiency
232 Bool_t fTOFMISMATCHStep; // TOF mismatch step
233 Bool_t fTPCPIDCLEANUPStep; // TPC PIC cleanup step
234 Bool_t fUseMixedVertex; // Use primary vertex from track only as before
235 Float_t fIPCutParams[4]; // Parameters of impact parameter cut parametrization
236 Bool_t fIsIPSigmacut; // if IP cut or IP sigma cut
237 Bool_t fIsIPAbs; // if abs IP sigma cut
238 Double_t fFractionOfSharedTPCClusters; // Fraction of shared TPC clusters
239 Bool_t fMaxImpactParameterRpar; // Max impact parameter
240 Long_t fAdditionalStatusRequirement; // Additional status bit requirement
243 TList *fHistQA; //! QA Histograms
244 TObjArray *fCutList; //! List of cut objects(Correction Framework Manager)
246 Int_t fDebugLevel; // Debug Level
248 ClassDef(AliHFEcuts, 2) // Container for HFE cuts
251 //__________________________________________________________________
252 void AliHFEcuts::SetProductionVertex(Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax){
253 // Set the production vertex constraint
254 SetRequireProdVertex();
261 //__________________________________________________________________
262 void AliHFEcuts::SetSigmaToVertex(Double_t sig){
263 SetRequireSigmaToVertex();
264 fSigmaToVtx[0] = sig;
267 //__________________________________________________________________
268 void AliHFEcuts::SetSigmaToVertexXY(Double_t sig){
269 SetRequireSigmaToVertex();
270 fSigmaToVtx[1] = sig;
273 //__________________________________________________________________
274 void AliHFEcuts::SetSigmaToVertexZ(Double_t sig){
275 SetRequireSigmaToVertex();
276 fSigmaToVtx[2] = sig;
279 //__________________________________________________________________
280 void AliHFEcuts::SetMaxImpactParam(Double_t radial, Double_t z){
281 SetRequireDCAToVertex();
282 fDCAtoVtx[0] = radial;
286 //__________________________________________________________________
287 void AliHFEcuts::SetIPcutParam(Float_t p0, Float_t p1, Float_t p2, Float_t p3, Bool_t isipsigma, Bool_t isabs){
288 // Set parameters for impact parameter cut parametrization
289 fIPCutParams[0] = p0;
290 fIPCutParams[1] = p1;
291 fIPCutParams[2] = p2;
292 fIPCutParams[3] = p3;
293 fIsIPSigmacut = isipsigma;
297 //__________________________________________________________________
298 void AliHFEcuts::SetCutITSpixel(UChar_t cut){
299 SetRequireITSPixel();
303 //__________________________________________________________________
304 void AliHFEcuts::CreateStandardCuts(){
306 // Standard Cuts defined by the HFE Group
308 SetRequireProdVertex();
313 //SetRequireDCAToVertex();
314 //fDCAtoVtx[0] = 0.5;
315 //fDCAtoVtx[1] = 1.5;
316 fMinClustersTPC = 80;
318 fMinTrackletsTRD = 0;
319 SetRequireITSPixel();
320 fCutITSPixel = AliHFEextraCuts::kFirst;
321 fMaxChi2clusterITS = -1.;
322 fMaxChi2clusterTPC = 4.;
323 fMinClusterRatioTPC = 0.6;
326 SetRequireKineMCCuts();