]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/GammaConv/AliConversionCuts.h
removed ^M end of lines
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliConversionCuts.h
CommitLineData
3b77b2d1 1#ifndef ALICONVERSIONCUTS_H
2#define ALICONVERSIONCUTS_H
3
4// Class handling all kinds of selection cuts for Gamma Conversion analysis
5// Authors: Svein Lindal, Daniel Lohner *
6
7#include "AliAODpidUtil.h"
8#include "AliConversionPhotonBase.h"
9#include "AliAODConversionMother.h"
10#include "AliAODTrack.h"
11#include "AliESDtrack.h"
12#include "AliVTrack.h"
13#include "AliAODTrack.h"
14#include "AliStack.h"
15#include "AliAnalysisCuts.h"
d008165e 16#include "TH1F.h"
0a2b2b4b 17#include "AliAnalysisUtils.h"
11c1e680 18#include "AliAnalysisManager.h"
3b77b2d1 19
20class AliESDEvent;
21class AliAODEvent;
22class AliConversionPhotonBase;
23class AliKFVertex;
24class TH1F;
25class TH2F;
26class AliPIDResponse;
27class AliAnalysisCuts;
28class iostream;
29class TList;
30class AliAnalysisManager;
31
3b77b2d1 32using namespace std;
33
34class AliConversionCuts : public AliAnalysisCuts {
35
36 public:
37
38
39 enum cutIds {
ca91a3e1 40 kisHeavyIon,
41 kCentralityMin,
42 kCentralityMax,
43 kselectV0AND,
44 kmultiplicityMethod,
45 kremovePileUp,
46 kExtraSignals,
3b77b2d1 47 kv0FinderType,
ca91a3e1 48 ketaCut,
49 kRCut,
3b77b2d1 50 ksinglePtCut,
51 kclsTPCCut,
ca91a3e1 52 kededxSigmaCut,
53 kpidedxSigmaCut,
54 kpiMomdedxSigmaCut,
3b77b2d1 55 kpiMaxMomdedxSigmaCut,
ca91a3e1 56 kLowPRejectionSigmaCut,
3b77b2d1 57 kTOFelectronPID,
ca91a3e1 58 kQtMaxCut,
59 kchi2GammaCut,
3b77b2d1 60 kPsiPair,
ca91a3e1 61 kdoPhotonAsymmetryCut,
3b77b2d1 62 kCosPAngle,
ca91a3e1 63 kElecShare,
64 kToCloseV0s,
3b77b2d1 65 kNCuts
66 };
67
d008165e 68 enum photonCuts {
69 kPhotonIn=0,
70 kOnFly,
71 kNoTracks,
72 kTrackCuts,
73 kdEdxCuts,
92efd725 74 kConvPointFail,
d008165e 75 kPhotonCuts,
76 kPhotonOut
77 };
78
79
3b77b2d1 80 Bool_t SetCutIds(TString cutString);
81 Int_t fCuts[kNCuts];
82 Bool_t SetCut(cutIds cutID, Int_t cut);
e5b6e8a6 83 Bool_t UpdateCutString();
3b77b2d1 84
85
86 static const char * fgkCutNames[kNCuts];
87
92efd725 88 Double_t GetCosineOfPointingAngle(const AliConversionPhotonBase * photon, AliVEvent * event) const;
3b77b2d1 89
90
91 Bool_t InitializeCutsFromCutString(const TString analysisCutSelection);
92efd725 92 void SelectCollisionCandidates(UInt_t offlineTriggerMask = AliVEvent::kMB) {fOfflineTriggerMask = offlineTriggerMask;}
93 void FillElectonLabelArray(AliAODConversionPhoton* photon, Int_t nV0);
ca91a3e1 94 void SetAcceptedHeader(TList *HeaderList){fHeaderList = HeaderList;}
e5b6e8a6 95 TString *GetFoundHeader(){return fGeneratorNames;}
ca91a3e1 96
92efd725 97 Int_t GetEventQuality(){return fEventQuality;}
e5b6e8a6 98 Bool_t GetIsFromPileup(){return fRemovePileUp;}
99
3b77b2d1 100 AliConversionCuts(const char *name="V0Cuts", const char * title="V0 Cuts");
a280ac15 101 AliConversionCuts(const AliConversionCuts&);
102 AliConversionCuts& operator=(const AliConversionCuts&);
1d9e6011 103
3b77b2d1 104 virtual ~AliConversionCuts(); //virtual destructor
105
a280ac15 106 static AliConversionCuts * GetStandardCuts2010PbPb();
107 static AliConversionCuts * GetStandardCuts2010pp();
108
3b77b2d1 109 virtual Bool_t IsSelected(TObject* /*obj*/){return kTRUE;}
110 virtual Bool_t IsSelected(TList* /*list*/) {return kTRUE;}
111
112 TString GetCutNumber();
11c1e680 113
92efd725 114 void GetCentralityRange(Double_t range[2]){range[0]=10*fCentralityMin;range[1]=10*fCentralityMax;};
11c1e680 115
3b77b2d1 116 // Cut Selection
92efd725 117 Bool_t EventIsSelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent);
e5b6e8a6 118 Int_t IsEventAcceptedByConversionCut(AliConversionCuts *ReaderCuts, AliVEvent *InputEvent, AliMCEvent *MCEvent, Bool_t isHeavyIon);
d008165e 119 Bool_t PhotonIsSelected(AliConversionPhotonBase * photon, AliVEvent * event);
92efd725 120 Bool_t PhotonIsSelectedMC(TParticle *particle,AliStack *fMCStack,Bool_t checkForConvertedGamma=kTRUE);
2bb2434e 121 Bool_t ElectronIsSelectedMC(TParticle *particle,AliStack *fMCStack);
3b77b2d1 122 Bool_t TracksAreSelected(AliVTrack * negTrack, AliVTrack * posTrack);
123 Bool_t MesonIsSelected(AliAODConversionMother *pi0,Bool_t IsSignal=kTRUE);
92efd725 124 Bool_t MesonIsSelectedMC(TParticle *fMCMother,AliStack *fMCStack, Bool_t bMCDaughtersInAcceptance=kFALSE);
3b77b2d1 125
126 void InitAODpidUtil(Int_t type);
3b77b2d1 127 Bool_t InitPIDResponse();
128
129 void SetPIDResponse(AliPIDResponse * pidResponse) {fPIDResponse = pidResponse;}
130 AliPIDResponse * GetPIDResponse() { return fPIDResponse;}
131
132 void PrintCuts();
133
92efd725 134 void InitCutHistograms(TString name="",Bool_t preCut = kTRUE);
135 void SetFillCutHistograms(TString name="",Bool_t preCut = kTRUE){if(!fHistograms){InitCutHistograms(name,preCut);};}
3b77b2d1 136 TList *GetCutHistograms(){return fHistograms;}
d008165e 137 void FillPhotonCutIndex(Int_t photoncut){if(hCutIndex)hCutIndex->Fill(photoncut);}
11c1e680 138 void SetEtaShift(Double_t etaShift) {
139 fEtaShift = etaShift;
140 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut + etaShift)));
141 if(fEtaCutMin > -0.1)
142 fLineCutZRSlopeMin = tan(2*atan(exp(-fEtaCutMin + etaShift)));
143 fDoEtaShift = kTRUE;
144 }
145 Double_t GetEtaShift() {return fEtaShift;}
146 Bool_t GetDoEtaShift(){return fDoEtaShift;}
147 void DoEtaShift(Bool_t doEtaShift){fDoEtaShift = doEtaShift;}
148 void ForceEtaShift(Int_t forcedShift){
149 fForceEtaShift = forcedShift;
150 if(forcedShift>0)fDoEtaShift = kTRUE;
151 }
152 Int_t IsEtaShiftForced() {return fForceEtaShift;}
3b77b2d1 153
92efd725 154 static AliVTrack * GetTrack(AliVEvent * event, Int_t label);
e5b6e8a6 155 static AliESDtrack *GetESDTrack(AliESDEvent * event, Int_t label);
156
3b77b2d1 157 ///Cut functions
158 Bool_t SpecificTrackCuts(AliAODTrack * negTrack, AliAODTrack * posTrack,Int_t &cutIndex);
159 Bool_t SpecificTrackCuts(AliESDtrack * negTrack, AliESDtrack * posTrack,Int_t &cutIndex);
160 Bool_t AcceptanceCuts(AliConversionPhotonBase *photon);
161 Bool_t AcceptanceCut(TParticle *particle, TParticle * ePos,TParticle* eNeg);
162 Bool_t dEdxCuts(AliVTrack * track);
163 Bool_t ArmenterosQtCut(AliConversionPhotonBase *photon);
164 Bool_t AsymmetryCut(AliConversionPhotonBase *photon,AliVEvent *event);
165 Bool_t PIDProbabilityCut(AliConversionPhotonBase *photon, AliVEvent * event);
92efd725 166 Bool_t SelectV0Finder(Bool_t onfly){
167 if(onfly == fUseOnFlyV0Finder) return kTRUE;
168 else return kFALSE;
169 }
3b77b2d1 170 Bool_t PhotonCuts(AliConversionPhotonBase *photon,AliVEvent *event);
171 Bool_t CorrectedTPCClusterCut(AliConversionPhotonBase *photon, AliVEvent * event);
92efd725 172 Bool_t PsiPairCut(const AliConversionPhotonBase * photon) const;
173 Bool_t CosinePAngleCut(const AliConversionPhotonBase * photon, AliVEvent * event) const;
174 Bool_t RejectSharedElectronV0s(AliAODConversionPhoton* photon, Int_t nV0, Int_t nV0s);
175 Bool_t RejectToCloseV0s(AliAODConversionPhoton* photon, TList *photons, Int_t nV0);
a280ac15 176 Int_t IsParticleFromBGEvent(Int_t index, AliStack *MCStack);
ca91a3e1 177 void GetNotRejectedParticles(Int_t rejection, TList *HeaderList, AliMCEvent *MCEvent);
178
3b77b2d1 179 // Event Cuts
e5b6e8a6 180 Bool_t IsCentralitySelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent = NULL);
3b77b2d1 181 Double_t GetCentrality(AliVEvent *event);
182 Int_t GetNumberOfContributorsVtx(AliVEvent *event);
183 Bool_t VertexZCut(AliVEvent *fInputEvent);
92efd725 184 Bool_t IsTriggerSelected();
e5b6e8a6 185 Bool_t HasV0AND(){return fHasV0AND;}
186 Bool_t IsSDDFired(){return fIsSDDFired;}
187 Int_t IsSpecialTrigger(){return fSpecialTrigger;}
3b77b2d1 188
189 // Set Individual Cuts
190 Bool_t SetRCut(Int_t RCut);
191 Bool_t SetV0Finder(Int_t v0FinderType);
3b77b2d1 192 Bool_t SetChi2GammaCut(Int_t chi2GammaCut);
193 Bool_t SetTPCdEdxCutPionLine(Int_t pidedxSigmaCut);
194 Bool_t SetTPCdEdxCutElectronLine(Int_t ededxSigmaCut);
195 Bool_t SetSinglePtCut(Int_t singlePtCut);
196 Bool_t SetTPCClusterCut(Int_t clsTPCCut);
197 Bool_t SetEtaCut(Int_t etaCut);
3b77b2d1 198 Bool_t SetMinMomPiondEdxCut(Int_t piMinMomdedxSigmaCut);
199 Bool_t SetMaxMomPiondEdxCut(Int_t piMaxMomdedxSigmaCut);
200 Bool_t SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut);
201 Bool_t SetQtMaxCut(Int_t QtMaxCut);
3b77b2d1 202 Bool_t SetTOFElectronPIDCut(Int_t TOFelectronPID);
203 Bool_t SetTRDElectronCut(Int_t TRDElectronCut);
92efd725 204 Bool_t SetCentralityMin(Int_t useCentrality);
3b77b2d1 205 Bool_t SetIsHeavyIon(Int_t isHeavyIon);
92efd725 206 Bool_t SetCentralityMax(Int_t centralityBin);
3b77b2d1 207 Bool_t SetPhotonAsymmetryCut(Int_t doPhotonAsymmetryCut);
ca91a3e1 208 Bool_t SetRemovePileUp(Int_t removePileUp);
92efd725 209 Bool_t SetMultiplicityMethod(Int_t multiplicityMethod);
e5b6e8a6 210 Int_t SetSelectSpecialTrigger(Int_t selectSpecialTrigger);
3b77b2d1 211 Bool_t SetCosPAngleCut(Int_t cosCut);
212 Bool_t SetPsiPairCut(Int_t psiCut);
92efd725 213 Bool_t SetSharedElectronCut(Int_t sharedElec);
214 Bool_t SetToCloseV0sCut(Int_t toClose);
ca91a3e1 215 Bool_t SetRejectExtraSignalsCut(Int_t extraSignal);
11c1e680 216
217
3b77b2d1 218 // Request Flags
219
0a2b2b4b 220 Int_t IsHeavyIon(){return fIsHeavyIon;}
3b77b2d1 221 Int_t GetFirstTPCRow(Double_t radius);
a280ac15 222 Float_t GetWeightForMeson(TString period, Int_t index, AliStack *MCStack);
ca91a3e1 223
92efd725 224 Bool_t UseElecSharingCut(){return fDoSharedElecCut;}
225 Bool_t UseToCloseV0sCut(){return fDoToCloseV0sCut;}
226 Int_t GetMultiplicityMethod(){return fMultiplicityMethod;}
227 Double_t GetEtaCut(){return fEtaCut;}
ca91a3e1 228 Int_t GetSignalRejection(){return fRejectExtraSignals;}
a280ac15 229 Int_t GetNAcceptedHeaders(){return fnHeaders; }
230 TString * GetAcceptedHeaderNames(){return fGeneratorNames;}
231 Int_t * GetAcceptedHeaderStart(){return fNotRejectedStart;}
232 Int_t * GetAcceptedHeaderEnd(){return fNotRejectedEnd;}
ca91a3e1 233 TList* GetAcceptedHeader(){return fHeaderList;}
11c1e680 234
235
3b77b2d1 236 protected:
237 TList *fHistograms;
ca91a3e1 238 TList *fHeaderList;
3b77b2d1 239 AliPIDResponse *fPIDResponse;
240
92efd725 241
242 Int_t fEventQuality; // EventQuality
3b77b2d1 243 //cuts
244 Double_t fMaxR; //r cut
245 Double_t fMinR; //r cut
246 Double_t fEtaCut; //eta cut
247 Double_t fEtaCutMin; //eta cut
248 Double_t fPtCut; // pt cut
249 Double_t fSinglePtCut; // pt cut for electron/positron
250 Double_t fMaxZ; //z cut
251 Double_t fMinClsTPC; // minimum clusters in the TPC
252 Double_t fMinClsTPCToF; // minimum clusters to findable clusters
253 Double_t fLineCutZRSlope; //linecut
254 Double_t fLineCutZValue; //linecut
255 Double_t fLineCutZRSlopeMin; //linecut
256 Double_t fLineCutZValueMin; //linecut
257 Double_t fChi2CutConversion; //chi2cut
3b77b2d1 258 Double_t fPIDProbabilityCutNegativeParticle;
259 Double_t fPIDProbabilityCutPositiveParticle;
260 Bool_t fDodEdxSigmaCut; // flag to use the dEdxCut based on sigmas
261 Bool_t fDoTOFsigmaCut; // flag to use TOF pid cut RRnewTOF
262 Double_t fPIDTRDEfficiency; // required electron efficiency for TRD PID
263 Bool_t fDoTRDPID; // flag to use TRD pid
264 Double_t fPIDnSigmaAboveElectronLine; // sigma cut
265 Double_t fPIDnSigmaBelowElectronLine; // sigma cut
266 Double_t fTofPIDnSigmaAboveElectronLine; // sigma cut RRnewTOF
267 Double_t fTofPIDnSigmaBelowElectronLine; // sigma cut RRnewTOF
268 Double_t fPIDnSigmaAbovePionLine; // sigma cut
269 Double_t fPIDnSigmaAbovePionLineHighPt; // sigma cut
270 Double_t fPIDMinPnSigmaAbovePionLine; // sigma cut
271 Double_t fPIDMaxPnSigmaAbovePionLine; // sigma cut
272 Double_t fDoKaonRejectionLowP; // Kaon rejection at low p
273 Double_t fDoProtonRejectionLowP; // Proton rejection at low p
274 Double_t fDoPionRejectionLowP; // Pion rejection at low p
275 Double_t fPIDnSigmaAtLowPAroundKaonLine; // sigma cut
276 Double_t fPIDnSigmaAtLowPAroundProtonLine; // sigma cut
277 Double_t fPIDnSigmaAtLowPAroundPionLine; // sigma cut
278 Double_t fPIDMinPKaonRejectionLowP; // Momentum limit to apply kaon rejection
279 Double_t fPIDMinPProtonRejectionLowP; // Momentum limit to apply proton rejection
280 Double_t fPIDMinPPionRejectionLowP; // Momentum limit to apply proton rejection
281 Bool_t fDoQtGammaSelection; // Select gammas using qtMax
282 Bool_t fDoHighPtQtGammaSelection; // RRnew Select gammas using qtMax for high pT
283 Double_t fQtMax; // Maximum Qt from Armenteros to select Gammas
284 Double_t fHighPtQtMax; // RRnew Maximum Qt for High pT from Armenteros to select Gammas
285 Double_t fPtBorderForQt; // RRnew
286 Double_t fXVertexCut; //vertex cut
287 Double_t fYVertexCut; //vertex cut
288 Double_t fZVertexCut; // vertexcut
289 Double_t fNSigmaMass; //nsigma cut
290 Bool_t fUseEtaMinCut; //flag
291 Bool_t fUseOnFlyV0Finder; //flag
292 Bool_t fDoPhotonAsymmetryCut; // flag to use the PhotonAsymetryCut
293 Double_t fMinPPhotonAsymmetryCut; // Min Momentum for Asymmetry Cut
294 Double_t fMinPhotonAsymmetry; // Asymmetry Cut
0a2b2b4b 295 Int_t fIsHeavyIon; // flag for heavy ion
92efd725 296 Int_t fDetectorCentrality; // centrality detecotor V0M or CL1
297 Int_t fModCentralityClass; // allows to select smaller centrality classes
3b77b2d1 298 Double_t fMaxVertexZ; // max z offset of vertex
92efd725 299 Int_t fCentralityMin; // centrality selection lower bin value
300 Int_t fCentralityMax; // centrality selection upper bin value
3b77b2d1 301 Bool_t fUseCorrectedTPCClsInfo; // flag to use corrected tpc cl info
302 Bool_t fUseTOFpid; // flag to use tof pid
92efd725 303 Int_t fMultiplicityMethod; // selected multiplicity method
e5b6e8a6 304 Int_t fSpecialTrigger; // flag
3b77b2d1 305 Bool_t fRemovePileUp; //flag
306 Float_t fOpeningAngle; // min opening angle for meson
307 Float_t fPsiPairCut;
308 Float_t fCosPAngleCut;
92efd725 309 Bool_t fDoToCloseV0sCut; //
ca91a3e1 310 Int_t fRejectExtraSignals;//
92efd725 311 Double_t fminV0Dist; //
312 Bool_t fDoSharedElecCut; //
313 UInt_t fOfflineTriggerMask; // Task processes collision candidates only
e5b6e8a6 314 Bool_t fHasV0AND; // V0AND Offline Trigger
315 Bool_t fIsSDDFired; // SDD FIRED to select with SDD events
92efd725 316 TRandom3 fRandom; //
e5b6e8a6 317 Int_t fElectronArraySize; // Size of electron array
318 Int_t *fElectronLabelArray; //[fElectronArraySize]
2bb2434e 319 Float_t fConversionPointXArray; // Array with conversion Point x
320 Float_t fConversionPointYArray; // Array with conversion Point y
321 Float_t fConversionPointZArray; // Array with conversion Point z
e5b6e8a6 322 Int_t fnHeaders; // Number of Headers
4a0aab28 323 Int_t *fNotRejectedStart; //[fnHeaders]
324 Int_t *fNotRejectedEnd; //[fnHeaders]
325 TString *fGeneratorNames; //[fnHeaders]
0a2b2b4b 326 TObjString *fCutString; // cut number used for analysis
327 AliAnalysisUtils *fUtils;
11c1e680 328 Double_t fEtaShift;
329 Bool_t fDoEtaShift;
330 Int_t fForceEtaShift;
3b77b2d1 331
332 // Histograms
3b77b2d1 333 TH1F *hdEdxCuts; // bookkeeping for dEdx cuts
334 TH2F *hTPCdEdxbefore; // TPC dEdx before cuts
335 TH2F *hTPCdEdxafter; // TPC dEdx after cuts
e5b6e8a6 336 TH2F *hTPCdEdxSigbefore; // TPC Sigma dEdx before cuts
337 TH2F *hTPCdEdxSigafter; // TPC Sigm dEdx after cuts
338 TH2F *hTOFbefore; // TOF before cuts
339 TH2F *hTOFSigbefore; // TOF Sigma before cuts
340 TH2F *hTOFSigafter; // TOF Sigma after cuts
3b77b2d1 341 TH1F *hTrackCuts; // bookkeeping for track cuts
342 TH1F *hPhotonCuts; // bookkeeping for photon specific cuts
343 TH1F *hInvMassbefore; // e+e- inv mass distribution before cuts
344 TH2F *hArmenterosbefore; // armenteros podolanski plot before cuts
345 TH1F *hInvMassafter; // e+e- inv mass distribution after cuts
346 TH2F *hArmenterosafter; // armenteros podolanski plot after cuts
347 TH1F *hAcceptanceCuts; // bookkeeping for acceptance cuts
348 TH1F *hCutIndex; // bookkeeping for cuts
349 TH1F *hV0EventCuts; // bookkeeping for event selection cuts
350 TH1F *hCentrality; // centrality distribution for selected events
351 TH1F *hVertexZ; // vertex z distribution for selected events
92efd725 352 TH1F *hTriggerClass; //fired offline trigger class
a280ac15 353 TH1F *hTriggerClassSelected; //selected fired offline trigger class
354private:
3b77b2d1 355
1d9e6011 356 ClassDef(AliConversionCuts,3)
3b77b2d1 357};
358
359
360inline void AliConversionCuts::InitAODpidUtil(Int_t type) {
361 if (!fPIDResponse) fPIDResponse = new AliAODpidUtil();
362 Double_t alephParameters[5];
363 // simulation
364 alephParameters[0] = 2.15898e+00/50.;
365 alephParameters[1] = 1.75295e+01;
366 alephParameters[2] = 3.40030e-09;
367 alephParameters[3] = 1.96178e+00;
368 alephParameters[4] = 3.91720e+00;
369 fPIDResponse->GetTOFResponse().SetTimeResolution(80.);
370
371 // data
372 if (type==1){
373 alephParameters[0] = 0.0283086/0.97;
374 alephParameters[1] = 2.63394e+01;
375 alephParameters[2] = 5.04114e-11;
376 alephParameters[3] = 2.12543e+00;
377 alephParameters[4] = 4.88663e+00;
378 fPIDResponse->GetTOFResponse().SetTimeResolution(130.);
379 fPIDResponse->GetTPCResponse().SetMip(50.);
380 }
381
382 fPIDResponse->GetTPCResponse().SetBetheBlochParameters(
383 alephParameters[0],alephParameters[1],alephParameters[2],
384 alephParameters[3],alephParameters[4]);
385
386 fPIDResponse->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04);
387}
388
389
390#endif