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 // Extra Cuts from the ALICE HFE Group
17 // Container for cuts which are currently not implemented by
18 // the Correction Framework
20 #ifndef ALIHFEEXTRACUTS_H
21 #define ALIHFEEXTRACUTS_H
23 // #ifndef ALICFCUTBASE_H
24 #include "AliCFCutBase.h"
33 class AliHFEextraCuts: public AliCFCutBase{
52 kFoundOverFindable = 0,
53 kFoundOverFindableIter1 = 1,
57 AliHFEextraCuts(const Char_t *name, const Char_t *title);
58 AliHFEextraCuts(const AliHFEextraCuts &c);
59 AliHFEextraCuts &operator=(const AliHFEextraCuts &c);
60 virtual ~AliHFEextraCuts();
62 virtual Bool_t IsSelected(TObject *o);
63 virtual Bool_t IsSelected(TList *) { return kTRUE; };
64 virtual void SetRecEventInfo(const TObject *event);
66 inline void SetClusterRatioTPC(Double_t ratio, ETPCclrDef_t def);
67 inline void SetRequireITSpixel(ITSPixel_t pixel);
68 inline void SetRequireITSdrift(ITSDrift_t drift);
69 inline void SetMinImpactParamR(Double_t impactParam);
70 inline void SetMaxImpactParamR(Double_t impactParam);
71 inline void SetMinImpactParamZ(Double_t impactParam);
72 inline void SetMaxImpactParamZ(Double_t impactParam);
73 inline void SetMinHFEImpactParamR(Float_t ipcutParam[4], Bool_t issigmacut, Bool_t isabs);
74 inline void SetMinTrackletsTRD(Int_t minTracklets, Bool_t exact = kFALSE);
75 inline void SetMinNClustersTPC(Int_t minclusters, ETPCclusterDef_t def);
76 void SetMinNClustersTPCPID(Int_t minclusters) { SETBIT(fRequirements, kMinNClustersTPCPID); fMinNClustersTPCPID = minclusters; }
77 void SetTOFPID(Bool_t tofPid) { tofPid ? SETBIT(fRequirements, kTOFPID) : CLRBIT(fRequirements, kTOFPID); }
78 void SetTOFMISMATCH(Bool_t tofMismatch) { tofMismatch ? SETBIT(fRequirements, kTOFmismatch) : CLRBIT(fRequirements, kTOFmismatch); }
79 void SetTPCPIDCleanUp(Bool_t tpcPIDCleanUp) { tpcPIDCleanUp ? SETBIT(fRequirements, kTPCPIDCleanUp) : CLRBIT(fRequirements, kTPCPIDCleanUp); }
80 void SetMaxImpactParameterRpar(Bool_t maxImpactParameterRpar) { maxImpactParameterRpar ? SETBIT(fRequirements, kMaxImpactParameterRpar) : CLRBIT(fRequirements, kMaxImpactParameterRpar); }
81 void SetFractionOfTPCSharedClusters(Double_t fractionShared) { fFractionTPCShared= fractionShared; SETBIT(fRequirements, kTPCfractionShared); }
82 void SetMinNbITScls(UChar_t minNbITScls) { fMinNbITScls = minNbITScls; SETBIT(fRequirements, kMinNbITScls); }
83 void SetTOFsignalDxz(Double_t tofsignalDx,Double_t tofsignalDz) { fTOFsignalDx=tofsignalDx; fTOFsignalDz=tofsignalDz; SETBIT(fRequirements, kTOFsignalDxy); }
84 void SetRejectKinkDaughter() { SETBIT(fRequirements, kRejectKinkDaughter);};
85 void SetRejectKinkMother() { SETBIT(fRequirements, kRejectKinkMother);};
86 void SetCheckITSstatus(Bool_t check) { fCheck = check; };
87 void SetDebugLevel(Int_t level) { fDebugLevel = level; };
89 Bool_t GetCheckITSstatus() const { return fCheck; };
90 Int_t GetDebugLevel() const { return fDebugLevel; };
91 void GetHFEImpactParameters(AliVTrack *track, Double_t &dcaxy, Double_t &dcansigmaxy); // temporary moved from protected to publich for IP QA
92 void GetHFEImpactParameters(AliVTrack *track, Double_t dcaD[2], Double_t covD[3]);
93 Int_t GetITSstatus(AliVTrack *track, Int_t layer);
94 Bool_t CheckITSstatus(Int_t itsStatus) const;
96 void UnSetRejectKinkDaughter() { CLRBIT(fRequirements, kRejectKinkDaughter);};
97 void UnSetRejectKinkMother() { CLRBIT(fRequirements, kRejectKinkMother);};
101 virtual void AddQAHistograms(TList *qaList);
102 Bool_t CheckRecCuts(AliVTrack *track);
103 Bool_t CheckMCCuts(AliVParticle * /*track*/) const;
104 void FillQAhistosRec(AliVTrack *track, UInt_t when);
105 //void FillQAhistosMC(AliMCParticle *track, UInt_t when);
106 void FillCutCorrelation(ULong64_t survivedCut);
107 void PrintBitMap(Int_t bitmap);
109 // Getter Functions for ESD/AOD compatible mode
110 UInt_t GetTPCncls(AliVTrack *track);
111 Bool_t GetTPCCountSharedMapBitsAboveThreshold(AliVTrack *track);
112 Double_t GetTPCclusterRatio(AliVTrack *track);
113 void GetImpactParameters(AliVTrack *track, Float_t &radial, Float_t &z);
114 //void GetHFEImpactParameters(AliVTrack *track, Double_t &dcaxy, Double_t &dcansigmaxy);
115 void GetHFEImpactParameterCuts(AliVTrack *track, Double_t &hfeimpactRcut, Double_t &hfeimpactnsigmaRcut);
116 void GetMaxImpactParameterCutR(AliVTrack *track, Double_t &maximpactRcut);
117 void GetTOFsignalDxDz(AliVTrack *track, Double_t &tofsignalDx, Double_t &tofsignalDz);
118 Float_t GetTPCsharedClustersRatio(AliVTrack *track);
119 Int_t GetITSNbOfcls(AliVTrack *track);
120 Bool_t IsKinkDaughter(AliVTrack *track);
121 Bool_t IsKinkMother(AliVTrack *track);
125 kMinImpactParamR = 0,
126 kMaxImpactParamR = 1,
127 kMinImpactParamZ = 2,
128 kMaxImpactParamZ = 3,
129 kClusterRatioTPC = 4,
130 kMinTrackletsTRD = 5,
132 kMinHFEImpactParamR = 7,
133 kMinHFEImpactParamNsigmaR = 8,
134 kMinNClustersTPC = 9,
135 kMinNClustersTPCPID = 10,
136 kTPCfractionShared = 11,
141 kMaxImpactParameterRpar = 16,
143 kRejectKinkDaughter = 18,
144 kRejectKinkMother = 19,
156 static const Int_t fgkNQAhistos; // Number of QA histos
157 AliVEvent *fEvent; //! working event
158 ULong64_t fCutCorrelation; // Cut Correlation
159 ULong64_t fRequirements; // Cut Requirements
160 Float_t fImpactParamCut[4]; // Impact Parmameter Cut
161 Float_t fIPcutParam[4]; // Parmameter of impact parameter cut parametrization
162 UInt_t fMinNClustersTPC; // Minimum TPC clusters cut
163 UInt_t fMinNClustersTPCPID; // Minimum TPC PID clusters cut
164 Float_t fClusterRatioTPC; // Ratio of findable vs. found clusters in TPC
165 UChar_t fMinTrackletsTRD; // Min. Number of Tracklets inside TRD
166 UChar_t fMinNbITScls; // Min. Number of ITS clusters
167 Bool_t fTRDtrackletsExact; // Require exact number of tracklets
168 UChar_t fPixelITS; // Cut on ITS Pixels
169 UChar_t fDriftITS; // Cut on ITS Drift
170 UChar_t fTPCclusterDef; // TPC cluster definition Bitmap
171 UChar_t fTPCclusterRatioDef; // TPC cluster ratio definition Bitmap
172 Double_t fFractionTPCShared; // Cut on fraction of shared clusters
173 Bool_t fAbsHFEImpactParamNsigmaR; // flag to use abs ip cut
174 Double_t fTOFsignalDx; // TOF signal dx
175 Double_t fTOFsignalDz; // TOF signal dz
177 Bool_t fCheck; // check
178 TList *fQAlist; //! Directory for QA histograms
179 Int_t fDebugLevel; // Debug Level
181 ClassDef(AliHFEextraCuts, 5) // Additional cuts implemented by the ALICE HFE group
184 //__________________________________________________________
185 void AliHFEextraCuts::SetClusterRatioTPC(Double_t ratio, ETPCclrDef_t def) {
186 SETBIT(fRequirements, kClusterRatioTPC);
187 SETBIT(fTPCclusterRatioDef, def);
188 fClusterRatioTPC = ratio;
191 //__________________________________________________________
192 void AliHFEextraCuts::SetRequireITSpixel(ITSPixel_t pixel) {
193 SETBIT(fRequirements, kPixelITS);
197 //__________________________________________________________
198 void AliHFEextraCuts::SetRequireITSdrift(ITSDrift_t drift) {
199 SETBIT(fRequirements, kDriftITS);
203 //__________________________________________________________
204 void AliHFEextraCuts::SetMinImpactParamR(Double_t impactParam){
205 SETBIT(fRequirements, kMinImpactParamR);
206 fImpactParamCut[0] = impactParam;
209 //__________________________________________________________
210 void AliHFEextraCuts::SetMaxImpactParamR(Double_t impactParam){
211 SETBIT(fRequirements, kMaxImpactParamR);
212 fImpactParamCut[2] = impactParam;
215 //__________________________________________________________
216 void AliHFEextraCuts::SetMinImpactParamZ(Double_t impactParam){
217 SETBIT(fRequirements, kMinImpactParamZ);
218 fImpactParamCut[1] = impactParam;
221 //__________________________________________________________
222 void AliHFEextraCuts::SetMaxImpactParamZ(Double_t impactParam){
223 SETBIT(fRequirements, kMaxImpactParamZ);
224 fImpactParamCut[3] = impactParam;
227 //__________________________________________________________
228 void AliHFEextraCuts::SetMinHFEImpactParamR(Float_t ipcutParam[4], Bool_t isSigmacut, Bool_t isabs){
229 if(isSigmacut) SETBIT(fRequirements, kMinHFEImpactParamNsigmaR);
230 else SETBIT(fRequirements, kMinHFEImpactParamR);
231 fIPcutParam[0]=ipcutParam[0];
232 fIPcutParam[1]=ipcutParam[1];
233 fIPcutParam[2]=ipcutParam[2];
234 fIPcutParam[3]=ipcutParam[3];
235 fAbsHFEImpactParamNsigmaR = isabs;
238 //__________________________________________________________
239 void AliHFEextraCuts::SetMinTrackletsTRD(Int_t minTracklets, Bool_t exact){
240 SETBIT(fRequirements, kMinTrackletsTRD);
241 fMinTrackletsTRD = minTracklets;
242 fTRDtrackletsExact = exact;
245 //__________________________________________________________
246 void AliHFEextraCuts::SetMinNClustersTPC(Int_t minClusters, ETPCclusterDef_t tpcdef){
247 SETBIT(fRequirements, kMinNClustersTPC);
248 SETBIT(fTPCclusterDef, tpcdef);
249 fMinNClustersTPC = minClusters;