]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/GammaConv/AliConversionCuts.h
removed old software from directory, fixed Addtask macro for main task, applied cover...
[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"
18
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();
113
92efd725 114 void GetCentralityRange(Double_t range[2]){range[0]=10*fCentralityMin;range[1]=10*fCentralityMax;};
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);}
3b77b2d1 138
92efd725 139 static AliVTrack * GetTrack(AliVEvent * event, Int_t label);
e5b6e8a6 140 static AliESDtrack *GetESDTrack(AliESDEvent * event, Int_t label);
141
3b77b2d1 142 ///Cut functions
143 Bool_t SpecificTrackCuts(AliAODTrack * negTrack, AliAODTrack * posTrack,Int_t &cutIndex);
144 Bool_t SpecificTrackCuts(AliESDtrack * negTrack, AliESDtrack * posTrack,Int_t &cutIndex);
145 Bool_t AcceptanceCuts(AliConversionPhotonBase *photon);
146 Bool_t AcceptanceCut(TParticle *particle, TParticle * ePos,TParticle* eNeg);
147 Bool_t dEdxCuts(AliVTrack * track);
148 Bool_t ArmenterosQtCut(AliConversionPhotonBase *photon);
149 Bool_t AsymmetryCut(AliConversionPhotonBase *photon,AliVEvent *event);
150 Bool_t PIDProbabilityCut(AliConversionPhotonBase *photon, AliVEvent * event);
92efd725 151 Bool_t SelectV0Finder(Bool_t onfly){
152 if(onfly == fUseOnFlyV0Finder) return kTRUE;
153 else return kFALSE;
154 }
3b77b2d1 155 Bool_t PhotonCuts(AliConversionPhotonBase *photon,AliVEvent *event);
156 Bool_t CorrectedTPCClusterCut(AliConversionPhotonBase *photon, AliVEvent * event);
92efd725 157 Bool_t PsiPairCut(const AliConversionPhotonBase * photon) const;
158 Bool_t CosinePAngleCut(const AliConversionPhotonBase * photon, AliVEvent * event) const;
159 Bool_t RejectSharedElectronV0s(AliAODConversionPhoton* photon, Int_t nV0, Int_t nV0s);
160 Bool_t RejectToCloseV0s(AliAODConversionPhoton* photon, TList *photons, Int_t nV0);
a280ac15 161 Int_t IsParticleFromBGEvent(Int_t index, AliStack *MCStack);
ca91a3e1 162 void GetNotRejectedParticles(Int_t rejection, TList *HeaderList, AliMCEvent *MCEvent);
163
3b77b2d1 164 // Event Cuts
e5b6e8a6 165 Bool_t IsCentralitySelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent = NULL);
3b77b2d1 166 Double_t GetCentrality(AliVEvent *event);
167 Int_t GetNumberOfContributorsVtx(AliVEvent *event);
168 Bool_t VertexZCut(AliVEvent *fInputEvent);
92efd725 169 Bool_t IsTriggerSelected();
e5b6e8a6 170 Bool_t HasV0AND(){return fHasV0AND;}
171 Bool_t IsSDDFired(){return fIsSDDFired;}
172 Int_t IsSpecialTrigger(){return fSpecialTrigger;}
3b77b2d1 173
174 // Set Individual Cuts
175 Bool_t SetRCut(Int_t RCut);
176 Bool_t SetV0Finder(Int_t v0FinderType);
3b77b2d1 177 Bool_t SetChi2GammaCut(Int_t chi2GammaCut);
178 Bool_t SetTPCdEdxCutPionLine(Int_t pidedxSigmaCut);
179 Bool_t SetTPCdEdxCutElectronLine(Int_t ededxSigmaCut);
180 Bool_t SetSinglePtCut(Int_t singlePtCut);
181 Bool_t SetTPCClusterCut(Int_t clsTPCCut);
182 Bool_t SetEtaCut(Int_t etaCut);
3b77b2d1 183 Bool_t SetMinMomPiondEdxCut(Int_t piMinMomdedxSigmaCut);
184 Bool_t SetMaxMomPiondEdxCut(Int_t piMaxMomdedxSigmaCut);
185 Bool_t SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut);
186 Bool_t SetQtMaxCut(Int_t QtMaxCut);
3b77b2d1 187 Bool_t SetTOFElectronPIDCut(Int_t TOFelectronPID);
188 Bool_t SetTRDElectronCut(Int_t TRDElectronCut);
92efd725 189 Bool_t SetCentralityMin(Int_t useCentrality);
3b77b2d1 190 Bool_t SetIsHeavyIon(Int_t isHeavyIon);
92efd725 191 Bool_t SetCentralityMax(Int_t centralityBin);
3b77b2d1 192 Bool_t SetPhotonAsymmetryCut(Int_t doPhotonAsymmetryCut);
ca91a3e1 193 Bool_t SetRemovePileUp(Int_t removePileUp);
92efd725 194 Bool_t SetMultiplicityMethod(Int_t multiplicityMethod);
e5b6e8a6 195 Int_t SetSelectSpecialTrigger(Int_t selectSpecialTrigger);
3b77b2d1 196 Bool_t SetCosPAngleCut(Int_t cosCut);
197 Bool_t SetPsiPairCut(Int_t psiCut);
92efd725 198 Bool_t SetSharedElectronCut(Int_t sharedElec);
199 Bool_t SetToCloseV0sCut(Int_t toClose);
ca91a3e1 200 Bool_t SetRejectExtraSignalsCut(Int_t extraSignal);
3b77b2d1 201 // Request Flags
202
0a2b2b4b 203 Int_t IsHeavyIon(){return fIsHeavyIon;}
3b77b2d1 204 Int_t GetFirstTPCRow(Double_t radius);
a280ac15 205 Float_t GetWeightForMeson(TString period, Int_t index, AliStack *MCStack);
ca91a3e1 206
92efd725 207 Bool_t UseElecSharingCut(){return fDoSharedElecCut;}
208 Bool_t UseToCloseV0sCut(){return fDoToCloseV0sCut;}
209 Int_t GetMultiplicityMethod(){return fMultiplicityMethod;}
210 Double_t GetEtaCut(){return fEtaCut;}
ca91a3e1 211 Int_t GetSignalRejection(){return fRejectExtraSignals;}
a280ac15 212 Int_t GetNAcceptedHeaders(){return fnHeaders; }
213 TString * GetAcceptedHeaderNames(){return fGeneratorNames;}
214 Int_t * GetAcceptedHeaderStart(){return fNotRejectedStart;}
215 Int_t * GetAcceptedHeaderEnd(){return fNotRejectedEnd;}
ca91a3e1 216 TList* GetAcceptedHeader(){return fHeaderList;}
3b77b2d1 217
218 protected:
219 TList *fHistograms;
ca91a3e1 220 TList *fHeaderList;
3b77b2d1 221 AliPIDResponse *fPIDResponse;
222
92efd725 223
224 Int_t fEventQuality; // EventQuality
3b77b2d1 225 //cuts
226 Double_t fMaxR; //r cut
227 Double_t fMinR; //r cut
228 Double_t fEtaCut; //eta cut
229 Double_t fEtaCutMin; //eta cut
230 Double_t fPtCut; // pt cut
231 Double_t fSinglePtCut; // pt cut for electron/positron
232 Double_t fMaxZ; //z cut
233 Double_t fMinClsTPC; // minimum clusters in the TPC
234 Double_t fMinClsTPCToF; // minimum clusters to findable clusters
235 Double_t fLineCutZRSlope; //linecut
236 Double_t fLineCutZValue; //linecut
237 Double_t fLineCutZRSlopeMin; //linecut
238 Double_t fLineCutZValueMin; //linecut
239 Double_t fChi2CutConversion; //chi2cut
3b77b2d1 240 Double_t fPIDProbabilityCutNegativeParticle;
241 Double_t fPIDProbabilityCutPositiveParticle;
242 Bool_t fDodEdxSigmaCut; // flag to use the dEdxCut based on sigmas
243 Bool_t fDoTOFsigmaCut; // flag to use TOF pid cut RRnewTOF
244 Double_t fPIDTRDEfficiency; // required electron efficiency for TRD PID
245 Bool_t fDoTRDPID; // flag to use TRD pid
246 Double_t fPIDnSigmaAboveElectronLine; // sigma cut
247 Double_t fPIDnSigmaBelowElectronLine; // sigma cut
248 Double_t fTofPIDnSigmaAboveElectronLine; // sigma cut RRnewTOF
249 Double_t fTofPIDnSigmaBelowElectronLine; // sigma cut RRnewTOF
250 Double_t fPIDnSigmaAbovePionLine; // sigma cut
251 Double_t fPIDnSigmaAbovePionLineHighPt; // sigma cut
252 Double_t fPIDMinPnSigmaAbovePionLine; // sigma cut
253 Double_t fPIDMaxPnSigmaAbovePionLine; // sigma cut
254 Double_t fDoKaonRejectionLowP; // Kaon rejection at low p
255 Double_t fDoProtonRejectionLowP; // Proton rejection at low p
256 Double_t fDoPionRejectionLowP; // Pion rejection at low p
257 Double_t fPIDnSigmaAtLowPAroundKaonLine; // sigma cut
258 Double_t fPIDnSigmaAtLowPAroundProtonLine; // sigma cut
259 Double_t fPIDnSigmaAtLowPAroundPionLine; // sigma cut
260 Double_t fPIDMinPKaonRejectionLowP; // Momentum limit to apply kaon rejection
261 Double_t fPIDMinPProtonRejectionLowP; // Momentum limit to apply proton rejection
262 Double_t fPIDMinPPionRejectionLowP; // Momentum limit to apply proton rejection
263 Bool_t fDoQtGammaSelection; // Select gammas using qtMax
264 Bool_t fDoHighPtQtGammaSelection; // RRnew Select gammas using qtMax for high pT
265 Double_t fQtMax; // Maximum Qt from Armenteros to select Gammas
266 Double_t fHighPtQtMax; // RRnew Maximum Qt for High pT from Armenteros to select Gammas
267 Double_t fPtBorderForQt; // RRnew
268 Double_t fXVertexCut; //vertex cut
269 Double_t fYVertexCut; //vertex cut
270 Double_t fZVertexCut; // vertexcut
271 Double_t fNSigmaMass; //nsigma cut
272 Bool_t fUseEtaMinCut; //flag
273 Bool_t fUseOnFlyV0Finder; //flag
274 Bool_t fDoPhotonAsymmetryCut; // flag to use the PhotonAsymetryCut
275 Double_t fMinPPhotonAsymmetryCut; // Min Momentum for Asymmetry Cut
276 Double_t fMinPhotonAsymmetry; // Asymmetry Cut
0a2b2b4b 277 Int_t fIsHeavyIon; // flag for heavy ion
92efd725 278 Int_t fDetectorCentrality; // centrality detecotor V0M or CL1
279 Int_t fModCentralityClass; // allows to select smaller centrality classes
3b77b2d1 280 Double_t fMaxVertexZ; // max z offset of vertex
92efd725 281 Int_t fCentralityMin; // centrality selection lower bin value
282 Int_t fCentralityMax; // centrality selection upper bin value
3b77b2d1 283 Bool_t fUseCorrectedTPCClsInfo; // flag to use corrected tpc cl info
284 Bool_t fUseTOFpid; // flag to use tof pid
92efd725 285 Int_t fMultiplicityMethod; // selected multiplicity method
e5b6e8a6 286 Int_t fSpecialTrigger; // flag
3b77b2d1 287 Bool_t fRemovePileUp; //flag
288 Float_t fOpeningAngle; // min opening angle for meson
289 Float_t fPsiPairCut;
290 Float_t fCosPAngleCut;
92efd725 291 Bool_t fDoToCloseV0sCut; //
ca91a3e1 292 Int_t fRejectExtraSignals;//
92efd725 293 Double_t fminV0Dist; //
294 Bool_t fDoSharedElecCut; //
295 UInt_t fOfflineTriggerMask; // Task processes collision candidates only
e5b6e8a6 296 Bool_t fHasV0AND; // V0AND Offline Trigger
297 Bool_t fIsSDDFired; // SDD FIRED to select with SDD events
92efd725 298 TRandom3 fRandom; //
e5b6e8a6 299 Int_t fElectronArraySize; // Size of electron array
300 Int_t *fElectronLabelArray; //[fElectronArraySize]
2bb2434e 301 Float_t fConversionPointXArray; // Array with conversion Point x
302 Float_t fConversionPointYArray; // Array with conversion Point y
303 Float_t fConversionPointZArray; // Array with conversion Point z
e5b6e8a6 304 Int_t fnHeaders; // Number of Headers
4a0aab28 305 Int_t *fNotRejectedStart; //[fnHeaders]
306 Int_t *fNotRejectedEnd; //[fnHeaders]
307 TString *fGeneratorNames; //[fnHeaders]
0a2b2b4b 308 TObjString *fCutString; // cut number used for analysis
309 AliAnalysisUtils *fUtils;
3b77b2d1 310
311 // Histograms
3b77b2d1 312 TH1F *hdEdxCuts; // bookkeeping for dEdx cuts
313 TH2F *hTPCdEdxbefore; // TPC dEdx before cuts
314 TH2F *hTPCdEdxafter; // TPC dEdx after cuts
e5b6e8a6 315 TH2F *hTPCdEdxSigbefore; // TPC Sigma dEdx before cuts
316 TH2F *hTPCdEdxSigafter; // TPC Sigm dEdx after cuts
317 TH2F *hTOFbefore; // TOF before cuts
318 TH2F *hTOFSigbefore; // TOF Sigma before cuts
319 TH2F *hTOFSigafter; // TOF Sigma after cuts
3b77b2d1 320 TH1F *hTrackCuts; // bookkeeping for track cuts
321 TH1F *hPhotonCuts; // bookkeeping for photon specific cuts
322 TH1F *hInvMassbefore; // e+e- inv mass distribution before cuts
323 TH2F *hArmenterosbefore; // armenteros podolanski plot before cuts
324 TH1F *hInvMassafter; // e+e- inv mass distribution after cuts
325 TH2F *hArmenterosafter; // armenteros podolanski plot after cuts
326 TH1F *hAcceptanceCuts; // bookkeeping for acceptance cuts
327 TH1F *hCutIndex; // bookkeeping for cuts
328 TH1F *hV0EventCuts; // bookkeeping for event selection cuts
329 TH1F *hCentrality; // centrality distribution for selected events
330 TH1F *hVertexZ; // vertex z distribution for selected events
92efd725 331 TH1F *hTriggerClass; //fired offline trigger class
a280ac15 332 TH1F *hTriggerClassSelected; //selected fired offline trigger class
333private:
3b77b2d1 334
1d9e6011 335 ClassDef(AliConversionCuts,3)
3b77b2d1 336};
337
338
339inline void AliConversionCuts::InitAODpidUtil(Int_t type) {
340 if (!fPIDResponse) fPIDResponse = new AliAODpidUtil();
341 Double_t alephParameters[5];
342 // simulation
343 alephParameters[0] = 2.15898e+00/50.;
344 alephParameters[1] = 1.75295e+01;
345 alephParameters[2] = 3.40030e-09;
346 alephParameters[3] = 1.96178e+00;
347 alephParameters[4] = 3.91720e+00;
348 fPIDResponse->GetTOFResponse().SetTimeResolution(80.);
349
350 // data
351 if (type==1){
352 alephParameters[0] = 0.0283086/0.97;
353 alephParameters[1] = 2.63394e+01;
354 alephParameters[2] = 5.04114e-11;
355 alephParameters[3] = 2.12543e+00;
356 alephParameters[4] = 4.88663e+00;
357 fPIDResponse->GetTOFResponse().SetTimeResolution(130.);
358 fPIDResponse->GetTPCResponse().SetMip(50.);
359 }
360
361 fPIDResponse->GetTPCResponse().SetBetheBlochParameters(
362 alephParameters[0],alephParameters[1],alephParameters[2],
363 alephParameters[3],alephParameters[4]);
364
365 fPIDResponse->GetTPCResponse().SetSigma(3.79301e-03, 2.21280e+04);
366}
367
368
369#endif