AliPhysics  aaf9c62 (aaf9c62)
AliDalitzElectronCuts.cxx
Go to the documentation of this file.
1 
2 /**************************************************************************
3  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * *
5  * Authors: Svein Lindal, Daniel Lohner *
6  * Version 1.0 *
7  * *
8  * Permission to use, copy, modify and distribute this software and its *
9  * documentation strictly for non-commercial purposes is hereby granted *
10  * without fee, provided that the above copyright notice appears in all *
11  * copies and that both the copyright notice and this permission notice *
12  * appear in the supporting documentation. The authors make no claims *
13  * about the suitability of this software for any purpose. It is *
14  * provided "as is" without express or implied warranty. *
15  **************************************************************************/
16 
18 //---------------------------------------------
19 // Class handling all kinds of selection cuts for
20 // Gamma Conversion analysis
21 //---------------------------------------------
23 
24 
25 #include "AliDalitzElectronCuts.h"
26 #include "AliAODConversionPhoton.h"
27 #include "AliKFVertex.h"
28 #include "AliAODTrack.h"
29 #include "AliESDtrack.h"
30 #include "AliAnalysisManager.h"
31 #include "AliInputEventHandler.h"
32 #include "AliMCEventHandler.h"
33 #include "AliAODHandler.h"
34 #include "AliPIDResponse.h"
35 #include "TH1.h"
36 #include "TH2.h"
37 #include "AliMCEvent.h"
38 #include "TObjString.h"
39 #include "AliAODEvent.h"
40 #include "AliESDEvent.h"
41 #include "TList.h"
42 class iostream;
43 
44 using namespace std;
45 
46 ClassImp(AliDalitzElectronCuts)
47 
48 
49 const char* AliDalitzElectronCuts::fgkCutNames[AliDalitzElectronCuts::kNCuts] = {
50  "MaxChi2TPCConstrainedGlobal",
51  "ededxSigmaITSCut",
52  "ededxSigmaTPCCut",
53  "pidedxSigmaTPCCut",
54  "piMinMomdedxSigmaTPCCut",
55  "piMaxMomdedxSigmaTPCCut",
56  "LowPRejectionSigmaCut",
57  "kTOFelectronPID",
58  "clsITSCut",
59  "clsTPCCut",
60  "EtaCut",
61  "PsiPair",
62  "RejectSharedElecGamma",
63  "MaxChi2PerClusterTPC",
64  "MaxChi2PerClusterITS",
65  "PtCut",
66  "DCAcut",
67  "MassCut",
68  "Weights",
69  "VPhotonMCPSmearing"
70 };
71 
72 //________________________________________________________________________
73 AliDalitzElectronCuts::AliDalitzElectronCuts(const char *name,const char *title) : AliAnalysisCuts(name,title),
74  fHistograms(NULL),
75  fPIDResponse(NULL),
76  fesdTrackCuts(NULL),
77  fEtaCut(0.9),
78  fDoEtaCut(kFALSE),
79  fPtMinCut(0.0),
80  fPtMaxCut(9999),
81  fRadiusCut(1000.0),
82  fPsiPairCut(0.45),
83  fDeltaPhiCutMin(0.),
84  fDeltaPhiCutMax(0.12),
85  fMinClsTPC(0), // minimum clusters in the TPC
86  fMinClsTPCToF(0), // minimum clusters to findable clusters
87  fDodEdxSigmaITSCut(kFALSE),
88  fDodEdxSigmaTPCCut(kTRUE),
89  fDoTOFsigmaCut(kFALSE), // RRnewTOF
90  fDoRejectSharedElecGamma(kFALSE),
91  fDoPsiPairCut(kFALSE),
92  fPIDnSigmaAboveElectronLineITS(100),
93  fPIDnSigmaBelowElectronLineITS(-100),
94  fPIDnSigmaAboveElectronLineTPC(100),
95  fPIDnSigmaBelowElectronLineTPC(-100),
96  fPIDnSigmaAbovePionLineTPC(0),
97  fPIDnSigmaAbovePionLineTPCHighPt(-100),
98  fTofPIDnSigmaAboveElectronLine(100), // RRnewTOF
99  fTofPIDnSigmaBelowElectronLine(-100), // RRnewTOF
100  fPIDMinPnSigmaAbovePionLineTPC(0),
101  fPIDMaxPnSigmaAbovePionLineTPC(0),
102  fDoKaonRejectionLowP(kFALSE),
103  fDoProtonRejectionLowP(kFALSE),
104  fDoPionRejectionLowP(kFALSE),
105  fPIDnSigmaAtLowPAroundKaonLine(0),
106  fPIDnSigmaAtLowPAroundProtonLine(0),
107  fPIDnSigmaAtLowPAroundPionLine(0),
108  fPIDMinPKaonRejectionLowP(1.5),
109  fPIDMinPProtonRejectionLowP(2.0),
110  fPIDMinPPionRejectionLowP(0.5),
111  fUseCorrectedTPCClsInfo(kFALSE),
112  fUseCrossedRows(kFALSE),
113  fUseTOFpid(kFALSE),
114  fRequireTOF(kFALSE),
115  fDoMassCut(kFALSE),
116  fDoMassMinCut(kFALSE),
117  fMassCutLowPt(999.),
118  fMassCutHighPt(999.),
119  fMassCutPtMin(-100.0),
120  fMassMinCut(-999.),
121  fDoWeights(kFALSE),
122  fUseVPhotonMCPSmearing(kFALSE),
123  fUseElectronMCPSmearing(kFALSE),
124  fCutString(NULL),
125  fCutStringRead(""),
126  hCutIndex(NULL),
127  hdEdxCuts(NULL),
128  hITSdEdxbefore(NULL),
129  hITSdEdxafter(NULL),
130  hTPCdEdxbefore(NULL),
131  hTPCdEdxafter(NULL),
132  hTPCdEdxSignalbefore(NULL),
133  hTPCdEdxSignalafter(NULL),
134  hTOFbefore(NULL),
135  hTOFafter(NULL),
136  hTrackDCAxyPtbefore(NULL),
137  hTrackDCAxyPtafter(NULL),
138  hTrackDCAzPtbefore(NULL),
139  hTrackDCAzPtafter(NULL),
140  hTrackNFindClsPtTPCbefore(NULL),
141  hTrackNFindClsPtTPCafter(NULL),
142  hTrackPosEtabeforeDedx(NULL),
143  hTrackNegEtabeforeDedx(NULL),
144  hTrackPosEtaafterDedx(NULL),
145  hTrackNegEtaafterDedx(NULL)
146  {
147  InitPIDResponse();
148  for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=0;}
149  fCutString=new TObjString((GetCutNumber()).Data());
150 
151  //fesdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts");
152  // Using standard function for setting Cuts
153  Bool_t selectPrimaries=kFALSE;
154  fesdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
155 }
156 
157 //________________________________________________________________________
159  // Destructor
160  //Deleting fHistograms leads to seg fault it it's added to output collection of a task
161  // if(fHistograms)
162  // delete fHistograms;
163  // fHistograms = NULL;
164 
165  if(fCutString != NULL){
166  delete fCutString;
167  fCutString = NULL;
168  }
169 }
170 
171 //________________________________________________________________________
173 
174  // Initialize Cut Histograms for QA (only initialized and filled if function is called)
175  TH1::AddDirectory(kFALSE);
176  TString cutName = "";
177  if( cutNumber==""){
178  cutName = GetCutNumber().Data();
179  } else {
180  cutName = cutNumber.Data();
181  }
182 
183  if(fHistograms != NULL){
184  delete fHistograms;
185  fHistograms=NULL;
186  }
187  if(fHistograms==NULL){
188  fHistograms=new TList();
189  if(name=="")fHistograms->SetName(Form("ElectronCuts_%s",cutName.Data()));
190  else fHistograms->SetName(Form("%s_%s",name.Data(),cutName.Data()));
191  }
192 
193  Int_t kDedxSignalbins = 200;
194  const Int_t kDCABins=62;
195 
196  Double_t binsDCADummy[63]={-3.0, -2.7, -2.4, -2.1, -1.8, -1.5, -1.2, -0.9, -0.6, -0.3, -0.25, -0.2, -0.19, -0.18, -0.17, -0.16, -0.15, -0.14, -0.13, -0.12, -0.11, -0.10, -0.09, -0.08, -0.07, -0.06, -0.05, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.25, 0.3, 0.6, 0.9, 1.2, 1.5, 1.8, 2.1, 2.4, 2.7, 3.0};
197 
198  const Int_t kPtBins=110;
199  Double_t binsPtDummy[kPtBins+1];
200  const Int_t kPBins = 109;
201  Double_t binsPDummy[kPBins+1];
202  binsPtDummy[0]=0.0;
203  binsPDummy[0]=0.05;
204 
205  for(Int_t i=1;i<kPtBins+1;i++){
206  if(binsPtDummy[i-1]+0.05<1.01)
207  binsPtDummy[i]=binsPtDummy[i-1]+0.05;
208  else
209  binsPtDummy[i]=binsPtDummy[i-1]+0.1;
210  }
211  for(Int_t i=1; i <kPBins+1;i++){
212  if( binsPDummy[i-1]+0.05<1.01)
213  binsPDummy[i] = binsPDummy[i-1]+0.05;
214  else
215  binsPDummy[i] = binsPDummy[i-1]+0.1;
216  }
217 
218  hCutIndex=new TH1F(Form("IsElectronSelected %s",cutName.Data()),"IsElectronSelected",10,-0.5,9.5);
219  hCutIndex->GetXaxis()->SetBinLabel(kElectronIn+1,"in");
220  hCutIndex->GetXaxis()->SetBinLabel(kNoTracks+1,"no tracks");
221  hCutIndex->GetXaxis()->SetBinLabel(kTrackCuts+1,"Track cuts");
222  hCutIndex->GetXaxis()->SetBinLabel(kdEdxCuts+1,"dEdx");
223  hCutIndex->GetXaxis()->SetBinLabel(kElectronOut+1,"out");
224  fHistograms->Add(hCutIndex);
225 
226  // dEdx Cuts
227  hdEdxCuts=new TH1F(Form("dEdxCuts %s",cutName.Data()),"dEdxCuts",10,-0.5,9.5);
228  hdEdxCuts->GetXaxis()->SetBinLabel(1,"in");
229  hdEdxCuts->GetXaxis()->SetBinLabel(2,"ITSelectron");
230  hdEdxCuts->GetXaxis()->SetBinLabel(3,"TPCelectron");
231  hdEdxCuts->GetXaxis()->SetBinLabel(4,"TPCpion");
232  hdEdxCuts->GetXaxis()->SetBinLabel(5,"TPCpionhighp");
233  hdEdxCuts->GetXaxis()->SetBinLabel(6,"TPCkaonlowprej");
234  hdEdxCuts->GetXaxis()->SetBinLabel(7,"TPCprotonlowprej");
235  hdEdxCuts->GetXaxis()->SetBinLabel(8,"TPCpionlowprej");
236  hdEdxCuts->GetXaxis()->SetBinLabel(9,"TOFelectron");
237  hdEdxCuts->GetXaxis()->SetBinLabel(10,"out");
238  fHistograms->Add(hdEdxCuts);
239 
240  TAxis *AxisBeforeITS = NULL;
241  TAxis *AxisBeforedEdx = NULL;
242  TAxis *AxisBeforeTOF = NULL;
243  TAxis *AxisBeforedEdxSignal = NULL;
244 
245  if(preCut){
246  hITSdEdxbefore=new TH2F(Form("Electron_ITS_before %s",cutName.Data()),"ITS dEdx electron before" ,kPBins,binsPDummy,200,-10,10);
248  AxisBeforeITS = hITSdEdxbefore->GetXaxis();
249 
250  hTPCdEdxbefore=new TH2F(Form("Electron_dEdx_before %s",cutName.Data()),"dEdx electron before" ,kPBins,binsPDummy,200,-10,10);
252  AxisBeforedEdx = hTPCdEdxbefore->GetXaxis();
253 
254  hTPCdEdxSignalbefore=new TH2F(Form("Electron_dEdxSignal_before %s",cutName.Data()),"dEdx electron signal before" ,kPBins,binsPDummy,kDedxSignalbins,0.0,200);
256  AxisBeforedEdxSignal = hTPCdEdxSignalbefore->GetXaxis();
257 
258  hTOFbefore=new TH2F(Form("Electron_TOF_before %s",cutName.Data()),"TOF electron before" ,kPBins,binsPDummy,200,-10,10);
259  fHistograms->Add(hTOFbefore);
260  AxisBeforeTOF = hTOFbefore->GetXaxis();
261 
262  hTrackDCAxyPtbefore = new TH2F(Form("hTrack_DCAxy_Pt_before %s",cutName.Data()),"DCAxy Vs Pt of tracks before",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
264 
265  hTrackDCAzPtbefore = new TH2F(Form("hTrack_DCAz_Pt_before %s",cutName.Data()), "DCAz Vs Pt of tracks before",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
267 
268  hTrackNFindClsPtTPCbefore = new TH2F(Form("hTrack_NFindCls_Pt_TPC_before %s",cutName.Data()),"Track: N Findable Cls TPC Vs Pt before",60,0,1.5,kPtBins,binsPtDummy);
270  }
271 
272  hITSdEdxafter=new TH2F(Form("Electron_ITS_after %s",cutName.Data()),"ITS dEdx electron after" ,kPBins,binsPDummy,200, -10,10);
274 
275  hTPCdEdxafter=new TH2F(Form("Electron_dEdx_after %s",cutName.Data()),"dEdx electron after" ,kPBins,binsPDummy,200, -10,10);
277 
278  hTPCdEdxSignalafter=new TH2F(Form("Electron_dEdxSignal_after %s",cutName.Data()),"dEdx electron signal after" ,kPBins,binsPDummy,kDedxSignalbins,0.0,200);
280 
281  hTOFafter=new TH2F(Form("Electron_TOF_after %s",cutName.Data()),"TOF electron after" ,kPBins,binsPDummy,200,-6,10);
282  fHistograms->Add(hTOFafter);
283 
284  hTrackDCAxyPtafter = new TH2F(Form("hTrack_DCAxy_Pt_after %s",cutName.Data()),"DCAxy Vs Pt of tracks after",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
286 
287  hTrackDCAzPtafter = new TH2F(Form("hTrack_DCAz_Pt_after %s",cutName.Data()), "DCAz Vs Pt of tracks after",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
289 
290  hTrackNFindClsPtTPCafter = new TH2F(Form("hTrack_NFindCls_Pt_TPC_after %s",cutName.Data()),"Track: N Findable Cls TPC Vs Pt after",60,0,1.5,kPtBins,binsPtDummy);
292 
293  hTrackPosEtabeforeDedx = new TH1F(Form("hTrack_Pos_Eta_before_Dedx %s",cutName.Data()),"hTrack_Pos_Eta_before_Dedx",600,-1.5,1.5);
295 
296  hTrackNegEtabeforeDedx = new TH1F(Form("hTrack_Neg_Eta_before_Dedx %s",cutName.Data()),"hTrack_Neg_Eta_before_Dedx",600,-1.5,1.5);
298 
299  hTrackPosEtaafterDedx = new TH1F(Form("hTrack_Pos_Eta_after_Dedx %s",cutName.Data()),"hTrack_Pos_Eta_after_Dedx",600,-1.5,1.5);
301 
302  hTrackNegEtaafterDedx = new TH1F(Form("hTrack_Neg_Eta_afterDedx %s",cutName.Data()),"hTrack_Neg_Eta_after_Dedx",600,-1.5,1.5);
304 
305  TAxis *AxisAfter = hTPCdEdxafter->GetXaxis();
306  Int_t bins = AxisAfter->GetNbins();
307  Double_t from = AxisAfter->GetXmin();
308  Double_t to = AxisAfter->GetXmax();
309  Double_t *newBins = new Double_t[bins+1];
310  newBins[0] = from;
311  Double_t factor = TMath::Power(to/from, 1./bins);
312  for(Int_t i=1; i<=bins; ++i) newBins[i] = factor * newBins[i-1];
313  AxisAfter->Set(bins, newBins);
314  AxisAfter = hTOFafter->GetXaxis();
315  AxisAfter->Set(bins, newBins);
316  AxisAfter = hITSdEdxafter->GetXaxis();
317  AxisAfter->Set(bins,newBins);
318  AxisAfter = hTPCdEdxSignalafter->GetXaxis();
319  AxisAfter->Set(bins,newBins);
320 
321  if(preCut){
322  AxisBeforeITS->Set(bins, newBins);
323  AxisBeforedEdx->Set(bins, newBins);
324  AxisBeforedEdxSignal->Set(bins,newBins);
325  AxisBeforeTOF->Set(bins, newBins);
326  }
327  delete [] newBins;
328 
329  TH1::AddDirectory(kTRUE);
330 
331  // Event Cuts and Info
332 }
333 
334 
335 //________________________________________________________________________
337 
338  // Set Pointer to AliPIDResponse
339  AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
340  if(man) {
341  AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
342  fPIDResponse = (AliPIDResponse*)inputHandler->GetPIDResponse();
343  if(fPIDResponse)return kTRUE;
344 
345  }
346 
347  return kFALSE;
348 }
350 Bool_t AliDalitzElectronCuts::ElectronIsSelectedMC(Int_t labelParticle,AliMCEvent *mcEvent)
351 {
352  if( labelParticle < 0 || labelParticle >= mcEvent->GetNumberOfTracks() ) return kFALSE;
353  //if( mcEvent->IsPhysicalPrimary(labelParticle) == kFALSE ) return kFALSE; //Ask Ana
354 
355  TParticle* particle = mcEvent->Particle(labelParticle);
356 
357  if( TMath::Abs( particle->GetPdgCode() ) != 11 ) return kFALSE;
358 
359  if( fDoEtaCut ){
360  if( particle->Eta() > fEtaCut || particle->Eta() < -fEtaCut )
361  return kFALSE;
362  }
363 
364  return kTRUE;
365 }
366 
367 
370 {
371  //Selection of Reconstructed electrons
372  Float_t b[2];
373  Float_t bCov[3];
374  lTrack->GetImpactParameters(b,bCov);
375 
376  if (bCov[0]<=0 || bCov[2]<=0) {
377  AliDebug(1, "Estimated b resolution lower or equal zero!");
378  bCov[0]=0; bCov[2]=0;
379  }
380 
381  Float_t dcaToVertexXY = b[0];
382  Float_t dcaToVertexZ = b[1];
383  Double_t clsToF = GetNFindableClustersTPC(lTrack);
384 
385  if( hTrackDCAxyPtbefore) hTrackDCAxyPtbefore->Fill(dcaToVertexXY,lTrack->Pt());
386  if( hTrackDCAzPtbefore ) hTrackDCAzPtbefore->Fill( dcaToVertexZ, lTrack->Pt());
387  if( hTrackNFindClsPtTPCbefore ) hTrackNFindClsPtTPCbefore->Fill( clsToF, lTrack->Pt());
388 
389  if(hCutIndex)hCutIndex->Fill(kElectronIn);
390  if (lTrack == NULL){
391  if(hCutIndex)hCutIndex->Fill(kNoTracks);
392  return kFALSE;
393  }
394 
395  if ( ! lTrack->GetConstrainedParam() ){
396  return kFALSE;
397  }
398  AliVTrack * track = dynamic_cast<AliVTrack*>(lTrack);
399 
400  // Track Cuts
401  if( !TrackIsSelected(lTrack) ){
402  if(hCutIndex)hCutIndex->Fill(kTrackCuts);
403  return kFALSE;
404  }
405 
406  if( lTrack->GetSign() > 0.0 ){
407  if (hTrackPosEtabeforeDedx) hTrackPosEtabeforeDedx->Fill(lTrack->Eta());
408  } else{
409  if(hTrackNegEtabeforeDedx) hTrackNegEtabeforeDedx->Fill(lTrack->Eta());
410 
411  }
412 
413  // dEdx Cuts
414  if( ! dEdxCuts( track ) ) {
415  if(hCutIndex)hCutIndex->Fill(kdEdxCuts);
416  return kFALSE;
417  }
418 
419  if( lTrack->GetSign() > 0.0 ){
420  if( hTrackPosEtaafterDedx) hTrackPosEtaafterDedx->Fill(lTrack->Eta());
421  } else{
422  if( hTrackNegEtaafterDedx) hTrackNegEtaafterDedx->Fill(lTrack->Eta());
423  }
424 
425  //Electron passed the cuts
426  if(hCutIndex)hCutIndex->Fill(kElectronOut);
427 
428  if( hTrackDCAxyPtafter) hTrackDCAxyPtafter->Fill(dcaToVertexXY,lTrack->Pt());
429  if( hTrackDCAzPtafter ) hTrackDCAzPtafter->Fill(dcaToVertexZ,lTrack->Pt());
430  if( hTrackNFindClsPtTPCafter ) hTrackNFindClsPtTPCafter->Fill( clsToF, lTrack->Pt());
431 
432 
433  return kTRUE;
434 }
435 
438  // Track Selection for Photon Reconstruction
439  Double_t clsToF = GetNFindableClustersTPC(lTrack);
440  if( ! fesdTrackCuts->AcceptTrack(lTrack) ){
441  return kFALSE;
442  }
443 
444  if( fDoEtaCut ) {
445  if( lTrack->Eta() > fEtaCut || lTrack->Eta() < -fEtaCut ) {
446  return kFALSE;
447  }
448  }
449 
450  if( lTrack->Pt() < fPtMinCut || lTrack->Pt() > fPtMaxCut ) {
451  return kFALSE;
452  }
453 
454  if( clsToF < fMinClsTPCToF){
455  return kFALSE;
456  }
457  return kTRUE;
458 }
460 Bool_t AliDalitzElectronCuts::dEdxCuts(AliVTrack *fCurrentTrack){
461 
462  // Electron Identification Cuts for Photon reconstruction
463  if(!fPIDResponse){ InitPIDResponse(); }// Try to reinitialize PID Response
464  if(!fPIDResponse){ AliError("No PID Response"); return kFALSE;}// if still missing fatal error
465 
466  //cout<<"dEdxCuts: //////////////////////////////////////////////////////////////////////////"<<endl;
467  Int_t cutIndex=0;
468  if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
469  if(hITSdEdxbefore)hITSdEdxbefore->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasITS(fCurrentTrack, AliPID::kElectron));
470  if(hTPCdEdxbefore)hTPCdEdxbefore->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTPC(fCurrentTrack, AliPID::kElectron));
471  if(hTPCdEdxSignalbefore)hTPCdEdxSignalbefore->Fill(fCurrentTrack->P(),TMath::Abs(fCurrentTrack->GetTPCsignal()));
472  cutIndex++;
473 
474  if( fDodEdxSigmaITSCut == kTRUE ){
475  if( fPIDResponse->NumberOfSigmasITS(fCurrentTrack,AliPID::kElectron)<fPIDnSigmaBelowElectronLineITS ||
476  fPIDResponse->NumberOfSigmasITS(fCurrentTrack,AliPID::kElectron)> fPIDnSigmaAboveElectronLineITS ){
477  if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
478  return kFALSE;
479  }
480  }
481 
482  if(hITSdEdxafter)hITSdEdxafter->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasITS(fCurrentTrack, AliPID::kElectron));
483  cutIndex++;
484 
485  if(fDodEdxSigmaTPCCut == kTRUE){
486  // TPC Electron Line
487  if( fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)<fPIDnSigmaBelowElectronLineTPC ||
488  fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)>fPIDnSigmaAboveElectronLineTPC){
489  if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
490  return kFALSE;
491  }
492  cutIndex++;
493 
494  // TPC Pion Line
495  if( fCurrentTrack->P()>fPIDMinPnSigmaAbovePionLineTPC && fCurrentTrack->P()<fPIDMaxPnSigmaAbovePionLineTPC ){
496  if(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)>fPIDnSigmaBelowElectronLineTPC &&
497  fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)<fPIDnSigmaAboveElectronLineTPC &&
498  fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kPion)<fPIDnSigmaAbovePionLineTPC){
499  if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
500  return kFALSE;
501  }
502  }
503  cutIndex++;
504 
505  // High Pt Pion rej
506  if( fCurrentTrack->P()>fPIDMaxPnSigmaAbovePionLineTPC ){
507  if(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)>fPIDnSigmaBelowElectronLineTPC &&
508  fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)<fPIDnSigmaAboveElectronLineTPC&&
509  fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kPion)<fPIDnSigmaAbovePionLineTPCHighPt){
510  if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
511  return kFALSE;
512  }
513  }
514  cutIndex++;
515  } else{ cutIndex+=3; }
516 
517 
518  if( fDoKaonRejectionLowP == kTRUE ){
519  if( fCurrentTrack->P() < fPIDMinPKaonRejectionLowP ){
520  if( TMath::Abs(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kKaon))<fPIDnSigmaAtLowPAroundKaonLine){
521  if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
522  return kFALSE;
523  }
524  }
525  }
526  cutIndex++;
527 
528  if( fDoProtonRejectionLowP == kTRUE ){
529  if( fCurrentTrack->P() < fPIDMinPProtonRejectionLowP ){
530  if( TMath::Abs( fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kProton))<fPIDnSigmaAtLowPAroundProtonLine){
531  if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
532  return kFALSE;
533  }
534  }
535  }
536  cutIndex++;
537 
538  if(fDoPionRejectionLowP == kTRUE){
539  if( fCurrentTrack->P() < fPIDMinPPionRejectionLowP ){
540  if( TMath::Abs( fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kPion)) < fPIDnSigmaAtLowPAroundPionLine ){
541  if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
542  return kFALSE;
543  }
544  }
545  }
546  cutIndex++;
547 
548 
549  if( ( fCurrentTrack->GetStatus() & AliESDtrack::kTOFpid ) && ( !( fCurrentTrack->GetStatus() & AliESDtrack::kTOFmismatch) ) ){
550  if(hTOFbefore) hTOFbefore->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron));
551  if(fUseTOFpid){
552  if(fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron)>fTofPIDnSigmaAboveElectronLine ||
553  fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron)<fTofPIDnSigmaBelowElectronLine ){
554  if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
555  return kFALSE;
556  }
557  }
558  if(hTOFafter)hTOFafter->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron));
559  } else if ( fRequireTOF == kTRUE ) {
560  if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
561  return kFALSE;
562  }
563  cutIndex++;
564 
565  if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
566  if(hTPCdEdxafter)hTPCdEdxafter->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTPC(fCurrentTrack, AliPID::kElectron));
567  if(hTPCdEdxSignalafter)hTPCdEdxSignalafter->Fill(fCurrentTrack->P(),TMath::Abs(fCurrentTrack->GetTPCsignal()));
568 
569  return kTRUE;
570 }
571 
573 
574 
575 AliVTrack *AliDalitzElectronCuts::GetTrack(AliVEvent * event, Int_t label){
576  //Returns pointer to the track with given ESD label
577  //(Important for AOD implementation, since Track array in AOD data is different
578  //from ESD array, but ESD tracklabels are stored in AOD Tracks)
579 
580  AliESDEvent * esdEvent = dynamic_cast<AliESDEvent*>(event);
581  if(esdEvent) {
582  if(label > event->GetNumberOfTracks() ) return NULL;
583  AliESDtrack * track = esdEvent->GetTrack(label);
584  return track;
585  } else {
586  for(Int_t ii=0; ii<event->GetNumberOfTracks(); ii++) {
587  AliVTrack * track = dynamic_cast<AliVTrack*>(event->GetTrack(ii));
588  if(track) {
589  if(track->GetID() == label) {
590  return track;
591  }
592  }
593  }
594  }
595 
596  cout << "track not found " << label << " " << event->GetNumberOfTracks() << endl;
597  return NULL;
598 }
601  for(Int_t i = 0;i<photons->GetEntries();i++){
602 
603  AliAODConversionPhoton *photonComp = (AliAODConversionPhoton*) photons->At(i);
604  Int_t posLabel = photonComp->GetTrackLabelPositive();
605  Int_t negLabel = photonComp->GetTrackLabelNegative();
606 
607  if( (photonComp->GetConversionRadius() < fRadiusCut) && (posLabel == indexEle || negLabel == indexEle) ){
608  return kFALSE;
609  }
610  }
611 
612  return kTRUE;
613 }
614 
615 Bool_t AliDalitzElectronCuts::MassCut(Double_t pi0CandidatePt , Double_t vphotonCandidateMass){
616 
617  if( pi0CandidatePt < fMassCutPtMin ){
618  if( vphotonCandidateMass < fMassCutLowPt ){
619  return kTRUE;
620  }
621  } else {
622  if( vphotonCandidateMass < fMassCutHighPt ){
623  return kTRUE;
624  }
625  }
626  return kFALSE;
627 }
628 
630  Double_t clsToF=0;
631  if( fUseCrossedRows == kFALSE ) {
632  if ( !fUseCorrectedTPCClsInfo ){
633  if(lTrack->GetTPCNclsF()!=0){
634  clsToF = (Double_t)lTrack->GetNcls(1)/(Double_t)lTrack->GetTPCNclsF();
635  }// Ncluster/Nfindablecluster
636  } else {
637  //clsToF = lTrack->GetTPCClusterInfo(2,0,GetFirstTPCRow(photon->GetConversionRadius()));
638  clsToF = lTrack->GetTPCClusterInfo(2,0); //NOTE ask friederike
639  }
640  } else {
641  Float_t nCrossedRowsTPC = lTrack->GetTPCCrossedRows();
642  clsToF = 1.0;
643  if ( lTrack->GetTPCNclsF()>0 ) {
644  clsToF = nCrossedRowsTPC / lTrack->GetTPCNclsF();
645  }
646  }
647  return clsToF;
648 }
649 
650 
652 {
653 //
654 // Returns true if it is a gamma conversion according to psi pair value
655 //
656  return ( (deltaPhi > fDeltaPhiCutMin && deltaPhi < fDeltaPhiCutMax) &&
657  TMath::Abs(psiPair) < ( fPsiPairCut - fPsiPairCut/fDeltaPhiCutMax * deltaPhi ) );
658 }
659 
663  if(fCutString && fCutString->GetString().Length() == kNCuts) {
664  fCutString->SetString(GetCutNumber());
665  } else {
666  return kFALSE;
667  }
668  return kTRUE;
669 }
670 
673  fCutStringRead = Form("%s",analysisCutSelection.Data());
674 
675  // Initialize Cuts from a given Cut string
676 
677 // out<<"Set Cut Number: "<<analysisCutSelection.Data()<<endl;
678  AliInfo(Form("Set ElectronCuts Number: %s",analysisCutSelection.Data()));
679 
680  if(analysisCutSelection.Length()!=kNCuts) {
681  AliError(Form("Cut selection has the wrong length! size is %d, number of cuts is %d", analysisCutSelection.Length(), kNCuts));
682  return kFALSE;
683  }
684  if(!analysisCutSelection.IsAlnum()){
685  AliError("Cut selection is not alphanumeric");
686  return kFALSE;
687  }
688 
689  TString analysisCutSelectionLowerCase = Form("%s",analysisCutSelection.Data());
690  analysisCutSelectionLowerCase.ToLower();
691  const char *cutSelection = analysisCutSelectionLowerCase.Data();
692  #define ASSIGNARRAY(i) fCuts[i] = ((int)cutSelection[i]>=(int)'a') ? cutSelection[i]-'a'+10 : cutSelection[i]-'0'
693  for(Int_t ii=0;ii<kNCuts;ii++){
694  ASSIGNARRAY(ii);
695  }
696 
697 
698  // Set Individual Cuts
699  for(Int_t ii=0;ii<kNCuts;ii++){
700  if(!SetCut(cutIds(ii),fCuts[ii]))return kFALSE;
701  }
702 
703  //PrintCuts();
704  return kTRUE;
705 }
709 
710  cout << "Updating cut " << fgkCutNames[cutID] << " (" << cutID << ") to " << value << endl;
711  switch (cutID) {
713  if( SetMaxChi2TPCConstrainedGlobal( value ) ){
715  UpdateCutString();
716  return kTRUE;
717  } else return kFALSE;
718 
719  case kededxSigmaITSCut:
720  if( SetITSdEdxCutElectronLine(value)) { //NOTE SetITSdEdxCutElectronLine: To be implemented
721  fCuts[kededxSigmaITSCut] = value;
722  UpdateCutString();
723  return kTRUE;
724  } else return kFALSE;
725 
726  case kededxSigmaTPCCut:
727  if( SetTPCdEdxCutElectronLine(value)) { //NOTE SetITSdEdxCutElectronLine: To be implemented
728  fCuts[kededxSigmaTPCCut] = value;
729  UpdateCutString();
730  return kTRUE;
731  } else return kFALSE;
732 
733  case kpidedxSigmaTPCCut:
734  if( SetTPCdEdxCutPionLine(value)) { //NOTE SetITSdEdxCutPionLine: To be implemented
735  fCuts[kpidedxSigmaTPCCut] = value;
736  UpdateCutString();
737  return kTRUE;
738  } else return kFALSE;
739 
741  if( SetMinMomPiondEdxTPCCut(value)) {
743  UpdateCutString();
744  return kTRUE;
745  } else return kFALSE;
746 
748  if( SetMaxMomPiondEdxTPCCut(value)) {
750  UpdateCutString();
751  return kTRUE;
752  } else return kFALSE;
753 
755  if( SetLowPRejectionCuts(value) ) {
756  fCuts[kLowPRejectionSigmaCut] = value;
757  UpdateCutString();
758  return kTRUE;
759  } else return kFALSE;
760 
761 
762  case kTOFelectronPID:
763  if( SetTOFElectronPIDCut(value)) {
764  fCuts[kTOFelectronPID] = value;
765  UpdateCutString();
766  return kTRUE;
767  } else return kFALSE;
768  case kclsITSCut:
769  if( SetITSClusterCut(value) ) {
770  fCuts[kclsITSCut] = value;
771  UpdateCutString();
772  return kTRUE;
773  } else return kFALSE;
774  case kclsTPCCut:
775  if( SetTPCClusterCut(value)) {
776  fCuts[kclsTPCCut] = value;
777  UpdateCutString();
778  return kTRUE;
779  } else return kFALSE;
780 
781  case ketaCut:
782  if( SetEtaCut(value)) {
783  fCuts[ketaCut] = value;
784  UpdateCutString();
785  return kTRUE;
786  } else return kFALSE;
787  case kptCut:
788  if( SetPtCut(value)) {
789  fCuts[kptCut] = value;
790  UpdateCutString();
791  return kTRUE;
792  } else return kFALSE;
793 
794  case kDCACut:
795  if( SetDCACut(value)) {
796  fCuts[kDCACut] = value;
797  UpdateCutString();
798  return kTRUE;
799  } else return kFALSE;
800 
801 
802  case kPsiPair:
803  if( SetPsiPairCut(value)) {
804  fCuts[kPsiPair] = value;
805  UpdateCutString();
806  return kTRUE;
807  } else return kFALSE;
808 
810  if( SetRejectSharedElecGamma(value)) {
811  fCuts[kRejectSharedElecGamma] = value;
812  UpdateCutString();
813  return kTRUE;
814  } else return kFALSE;
815 
817  if( SetMaxChi2PerClusterTPC(value)) {
818  fCuts[kMaxChi2PerClusterTPC] = value;
819  UpdateCutString();
820  return kTRUE;
821  } else return kFALSE;
822 
824  if( SetMaxChi2PerClusterITS(value)) {
825  fCuts[kMaxChi2PerClusterITS] = value;
826  UpdateCutString();
827  return kTRUE;
828  } else return kFALSE;
829 
830  case kmassCut:
831  if( SetMassCut(value)) {
832  fCuts[kmassCut] = value;
833  UpdateCutString();
834  return kTRUE;
835  } else return kFALSE;
836  case kWeights:
837  if( SetDoWeights(value)) {
838  fCuts[kWeights] = value;
839  UpdateCutString();
840  return kTRUE;
841  } else return kFALSE;
842 
844  if( SetUseVPhotonMCPmearing(value)) {
845  fCuts[kuseVPhotonMCPSmearing] = value;
846  UpdateCutString();
847  return kTRUE;
848  } else return kFALSE;
849 
850  case kNCuts:
851  cout << "Error:: Cut id out of range"<< endl;
852  return kFALSE;
853  }
854 
855  cout << "Error:: Cut id " << cutID << " not recognized "<< endl;
856  return kFALSE;
857 
858  //PrintCuts();
859 
860 }
861 
863 
865  // Print out current Cut Selection
866  for(Int_t ic = 0; ic < kNCuts; ic++) {
867  printf("%-30s : %d \n", fgkCutNames[ic], fCuts[ic]);
868  }
869 
870 }
873 {
874  if( !fesdTrackCuts ) {
875  cout<<"Warning: AliESDtrackCut is not initialized "<<endl;
876  return kFALSE;
877  }
878 
879  switch( maxChi2 ){
880  case 0: fesdTrackCuts->SetMaxChi2TPCConstrainedGlobal(1e10);
881  break;
882  case 1: fesdTrackCuts->SetMaxChi2TPCConstrainedGlobal(25.);
883  break;
884  case 2: fesdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36.);
885  break;
886  case 3: fesdTrackCuts->SetMaxChi2TPCConstrainedGlobal(49.);
887  break;
888  case 4: fesdTrackCuts->SetMaxChi2TPCConstrainedGlobal(100.);
889  break;
890  default: cout<<"Warning: maxChi2 is not defined"<<maxChi2<<endl;
891  return kFALSE;
892  }
893 
894  return kTRUE;
895 }
898  // Set Cut
899  switch(ededxSigmaCut){
900  case 0:
901  fDodEdxSigmaITSCut = kFALSE;
904  break;
905  case 1: // -10,10
906  fDodEdxSigmaITSCut = kTRUE;
909  break;
910  case 2: // -6,7
911  fDodEdxSigmaITSCut = kTRUE;
914  break;
915  case 3: // -5,5
916  fDodEdxSigmaITSCut = kTRUE;
919  break;
920  case 4: // -4,5
921  fDodEdxSigmaITSCut = kTRUE;
924  break;
925  case 5: // -3,5
926  fDodEdxSigmaITSCut = kTRUE;
929  break;
930  case 6: // -4,4
931  fDodEdxSigmaITSCut = kTRUE;
934  break;
935  case 7: // -2.5,4
936  fDodEdxSigmaITSCut = kTRUE;
939  break;
940  case 8: // -2,3.5
941  fDodEdxSigmaITSCut = kTRUE;
944  break;
945  default:
946  cout<<"Warning: ITSdEdxCutElectronLine not defined"<<ededxSigmaCut<<endl;
947  return kFALSE;
948  }
949  return kTRUE;
950 }
951 
954  // Set Cut
955  switch(ededxSigmaCut){
956  case 0: fDodEdxSigmaTPCCut = kFALSE;
959  break;
960  case 1: // -10,10
961  fDodEdxSigmaTPCCut = kTRUE;
964  break;
965  case 2: // -6,7
966  fDodEdxSigmaTPCCut = kTRUE;
969  break;
970  case 3: // -5,5
971  fDodEdxSigmaTPCCut = kTRUE;
974  break;
975  case 4: // -4,5
976  fDodEdxSigmaTPCCut = kTRUE;
979  break;
980  case 5: // -3,5
981  fDodEdxSigmaTPCCut = kTRUE;
984  break;
985  case 6: // -4,4
986  fDodEdxSigmaTPCCut = kTRUE;
989  break;
990  case 7: // -2.5,4
991  fDodEdxSigmaTPCCut = kTRUE;
994  break;
995  case 8: // -2,3.5
996  fDodEdxSigmaTPCCut = kTRUE;
999  break;
1000  default:
1001  cout<<"Warning: TPCdEdxCutElectronLine not defined"<<ededxSigmaCut<<endl;
1002  return kFALSE;
1003  }
1004  return kTRUE;
1005 }
1006 
1009  // Set Cut
1010  switch(pidedxSigmaCut){
1011  case 0: fPIDnSigmaAbovePionLineTPC= 0;
1013  break;
1014  case 1: // -10
1015  fPIDnSigmaAbovePionLineTPC=3.0; //Update Sep-05-2013 from -10 to 3
1017  break;
1018  case 2: // 1
1019  fPIDnSigmaAbovePionLineTPC=2; //Update Sep-09-2013 from -1 to 2
1020  fPIDnSigmaAbovePionLineTPCHighPt=-1; //Update Sep-09-2013 from -10 to -1
1021  break;
1022  case 3: // 0
1023  fPIDnSigmaAbovePionLineTPC=2; //Update Sep-09-2013 from 0 to 2
1024  fPIDnSigmaAbovePionLineTPCHighPt=0; //Update Sep-09-2013 from -10 to 0
1025  break;
1026  case 4: // 1
1029  break;
1030  case 5: // 1
1033  break;
1034  case 6: // 1
1037  break;
1038  case 7:
1039  fPIDnSigmaAbovePionLineTPC = 2.0; // We need a bit less tight cut on dE/dx //Updated from 3.0 and -10 to +2.0 , +2.0
1041  break;
1042  case 8: // 1
1043  fPIDnSigmaAbovePionLineTPC = 1.5; // Updated May-16-2013 from 3.5 and -10 to +1.5, +1
1045  break;
1046  case 9: // 1
1049  break;
1050  default:
1051  cout<<"Warning: pidedxSigmaCut not defined "<<pidedxSigmaCut<<endl;
1052  return kFALSE;
1053  }
1054  return kTRUE;
1055 }
1056 
1059 { // Set Cut
1060  switch(piMomdedxSigmaCut){
1061  case 0: fPIDMinPnSigmaAbovePionLineTPC=0.;
1062  break;
1063  case 1: // 50.0 GeV
1065  break;
1066  case 2: // 20.0 GeV
1068  break;
1069  case 3: // 1.5 GeV
1071  break;
1072  case 4: // 1. GeV
1074  break;
1075  case 5: // 0.5 GeV
1077  break;
1078  case 6: // 0.4 GeV
1080  break;
1081  case 7: // 0.3 GeV
1083  break;
1084  case 8: // 0.25 GeV
1086  break;
1087  default:
1088  cout<<"Warning: piMomdedxSigmaCut not defined "<<piMomdedxSigmaCut<<endl;
1089  return kFALSE;
1090  }
1091  return kTRUE;
1092 }
1095 
1096  if( !fesdTrackCuts ) {
1097  cout<<"Warning: AliESDtrackCut is not initialized "<<endl;
1098  return kFALSE;
1099  }
1100 
1101  switch(clsITSCut){
1102  case 0:
1103  fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kOff);
1104  break;
1105  case 1:
1106  fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kFirst);
1107  break; //1 hit first layer of SPD
1108  case 2:
1109  fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
1110  break; //1 hit in any layer of SPD
1111  case 3:
1112  fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kFirst);
1113  fesdTrackCuts->SetMinNClustersITS(4);
1114  // 4 hits in total in the ITS. At least 1 hit in the first layer of SPD
1115  break;
1116  case 4:
1117  fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
1118  fesdTrackCuts->SetMinNClustersITS(3);
1119  // 3 hits in total in the ITS. At least 1 hit in any layer of SPD
1120  break;
1121  case 5:
1122  fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
1123  fesdTrackCuts->SetMinNClustersITS(4);
1124  // 4 hits in total in the ITS. At least 1 hit in any layer of SPD
1125  break;
1126  case 6:
1127  fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
1128  fesdTrackCuts->SetMinNClustersITS(5);
1129  // 5 hits in total in the ITS. At least 1 hit in any layer of SPD
1130  break;
1131  case 7:
1132  fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kOff);
1133  fesdTrackCuts->SetMinNClustersITS(4);
1134  break;
1135  case 8:
1136  fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kBoth);
1137  break;
1138  case 9: fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kBoth);
1139  fesdTrackCuts->SetMinNClustersITS(4);
1140  break;
1141 
1142  default:
1143  cout<<"Warning: clsITSCut not defined "<<clsITSCut<<endl;
1144  return kFALSE;
1145  }
1146 
1147  return kTRUE;
1148 }
1149 
1152 { // Set Cut
1153 
1154  //Update function for systematics 2015-10-08
1155  switch(clsTPCCut){
1156  case 0: // 0
1157  fMinClsTPC= 0.;
1158  fMinClsTPCToF = 0.;
1159  fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
1160  fesdTrackCuts->SetMinNCrossedRowsTPC(fMinClsTPC);
1161  break;
1162 
1163  case 1: // 70
1164  fMinClsTPC= 70.;
1165  fMinClsTPCToF = 0.7;
1166  if( fUseCrossedRows ){
1167  fesdTrackCuts->SetMinNCrossedRowsTPC(fMinClsTPC);
1168  fesdTrackCuts->SetMinNClustersTPC(0);
1169  } else {
1170  fesdTrackCuts->SetMinNCrossedRowsTPC(0);
1171  fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
1173  }
1174  break;
1175  case 2: // 80
1176  fMinClsTPC = 70.;
1177  fMinClsTPCToF = 0.9;
1178  if( fUseCrossedRows ){
1179  fesdTrackCuts->SetMinNCrossedRowsTPC(fMinClsTPC);
1180  fesdTrackCuts->SetMinNClustersTPC(0);
1181  } else {
1182  fesdTrackCuts->SetMinNCrossedRowsTPC(0);
1183  fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
1185  }
1186  break;
1187  case 3: // Changed 2014-02-04 before fMinClsTPC = 50.;
1188  fMinClsTPC = 70;
1189  fMinClsTPCToF = 0.8;
1190  if( fUseCrossedRows ){
1191  fesdTrackCuts->SetMinNCrossedRowsTPC(fMinClsTPC);
1192  fesdTrackCuts->SetMinNClustersTPC(0);
1193  } else {
1194  fesdTrackCuts->SetMinNCrossedRowsTPC(0);
1195  fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
1197  }
1198  //fUseCrossedRows = kTRUE;
1199  break;
1200  case 4: // 0% of findable clusters
1201  fMinClsTPC = 90;
1202  fMinClsTPCToF = 0.8;
1203  if( fUseCrossedRows ){
1204  fesdTrackCuts->SetMinNCrossedRowsTPC(fMinClsTPC);
1205  fesdTrackCuts->SetMinNClustersTPC(0);
1206  } else {
1207  fesdTrackCuts->SetMinNCrossedRowsTPC(0);
1208  fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
1210  }
1211  break;
1212  case 5: // 35% of findable clusters
1213  fMinClsTPC = 70;
1214  fMinClsTPCToF = 0.35;
1215  if( fUseCrossedRows ){
1216  fesdTrackCuts->SetMinNCrossedRowsTPC(fMinClsTPC);
1217  fesdTrackCuts->SetMinNClustersTPC(0);
1218  } else {
1219  fesdTrackCuts->SetMinNCrossedRowsTPC(0);
1220  fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
1222  }
1223  break;
1224  case 6: // 60% of findable clusters
1225  fMinClsTPC = 70;
1226  fMinClsTPCToF = 0.60;
1227  if( fUseCrossedRows ){
1228  fesdTrackCuts->SetMinNCrossedRowsTPC(fMinClsTPC);
1229  fesdTrackCuts->SetMinNClustersTPC(0);
1230  } else {
1231  fesdTrackCuts->SetMinNCrossedRowsTPC(0);
1232  fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
1234  }
1235  break;
1236  case 7: // 60% Changed 2014-02-04 before fMinClsTPC = 0.7 fUseCorrectedTPCClsInfo = 0
1237  // Changed 2014-02-04 before fMinClsTPC = 50.;
1238  fMinClsTPC = 90;
1239  fMinClsTPCToF = 0.35;
1240  if( fUseCrossedRows ){
1241  fesdTrackCuts->SetMinNCrossedRowsTPC(fMinClsTPC);
1242  fesdTrackCuts->SetMinNClustersTPC(0);
1243  } else {
1244  fesdTrackCuts->SetMinNCrossedRowsTPC(0);
1245  fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
1247  }
1248  break;
1249 
1250  case 8: fMinClsTPC = 0;
1251  fMinClsTPCToF = 0.35;
1252  if( fUseCrossedRows ){
1253  fesdTrackCuts->SetMinNCrossedRowsTPC(fMinClsTPC);
1254  fesdTrackCuts->SetMinNClustersTPC(0);
1255  } else {
1256  fesdTrackCuts->SetMinNCrossedRowsTPC(0);
1257  fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
1259  }
1260  break;
1261 
1262  case 9: // 35% of findable clusters
1263  fMinClsTPC = 70;
1264  fMinClsTPCToF = 0.35;
1265  if( fUseCrossedRows ){
1266  fesdTrackCuts->SetMinNCrossedRowsTPC(fMinClsTPC);
1267  fesdTrackCuts->SetMinNClustersTPC(0);
1268  } else {
1269  fesdTrackCuts->SetMinNCrossedRowsTPC(0);
1270  fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
1272  }
1273  break;
1274 
1275  default:
1276  cout<<"Warning: clsTPCCut not defined "<<clsTPCCut<<endl;
1277  return kFALSE;
1278  }
1279  return kTRUE;
1280 }
1281 
1284 {
1285  // Set eta Cut
1286  switch(etaCut){
1287  case 0:
1288  fEtaCut = 100.;
1289  fDoEtaCut = kFALSE;
1290  break;
1291  case 1: // 1.4
1292  fEtaCut = 1.4;
1293  fDoEtaCut = kTRUE;
1294  break;
1295  case 2: // 1.2
1296  fEtaCut = 1.2;
1297  fDoEtaCut = kTRUE;
1298  break;
1299  case 3: // 0.9
1300  fEtaCut = 0.9;
1301  fDoEtaCut = kTRUE;
1302  break;
1303  case 4: // 0.8
1304  fEtaCut = 0.8;
1305  fDoEtaCut = kTRUE;
1306  break;
1307  case 5: // 0.75
1308  fEtaCut = 0.75;
1309  fDoEtaCut = kTRUE;
1310  break;
1311  case 6: //0.6
1312  fEtaCut = 0.6; //changed from 0.4 to 0.6 2013.06.10
1313  fDoEtaCut = kTRUE;
1314  break;
1315  case 7: //0.5
1316  fEtaCut = 0.5; //changed from 0.3 to 0.5 2013.06.10
1317  fDoEtaCut = kTRUE;
1318  break;
1319  case 8: fEtaCut = 0.4;
1320  fDoEtaCut = kTRUE;
1321  break;
1322  case 9: fEtaCut = 0.65;
1323  fDoEtaCut = kTRUE;
1324  break;
1325  default:
1326  cout<<"Warning: EtaCut not defined "<<etaCut<<endl;
1327  return kFALSE;
1328  }
1329  return kTRUE;
1330 }
1331 
1334 {
1335  // Set Pt Cut
1336  //0.1GeV, 0.125 GeV, 0.15 GeV
1337  switch(ptCut){
1338  case 0: fPtMinCut = 0.075;
1339  fPtMaxCut = 9999;
1340  break;
1341  case 1: // 0.1
1342  fPtMinCut = 0.1;
1343  fPtMaxCut = 9999;
1344  break;
1345  case 2: // 0.125 GeV
1346  fPtMinCut = 0.125;
1347  fPtMaxCut = 9999;
1348  break;
1349  case 3: // 0.15 GeV
1350  fPtMinCut = 0.15;
1351  fPtMaxCut = 9999;
1352  break;
1353  // 0.5 - 0.7
1354  case 4:
1355  fPtMinCut = 0.5;
1356  fPtMaxCut = 0.7;
1357  break;
1358  case 5: // 0.175 GeV
1359  fPtMinCut = 0.175;
1360  fPtMaxCut = 9999;
1361  break;
1362  // 50 MeV
1363  case 6:
1364  fPtMinCut = 0.05;
1365  fPtMaxCut = 9999;
1366  break;
1367  default:
1368  cout<<"Warning: PtCut not defined "<<ptCut<<endl;
1369  return kFALSE;
1370  }
1371  return kTRUE;
1372 }
1373 
1374 
1377 {
1378  // Set DCA Cut
1379  if( !fesdTrackCuts ) {
1380  cout<<"Warning: AliESDtrackCut is not initialized "<<endl;
1381  return kFALSE;
1382  }
1383 
1384  switch(dcaCut){
1385 
1386  case 0: //Open cuts//
1387  fesdTrackCuts->SetMaxDCAToVertexZ(1000);
1388  fesdTrackCuts->SetMaxDCAToVertexXY(1000);
1389  break;
1390  case 1:
1391  fesdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01"); //Standard 2010
1392  fesdTrackCuts->SetMaxDCAToVertexZ(2);
1393  break;
1394  case 2:
1395  fesdTrackCuts->SetMaxDCAToVertexZ(2);
1396  fesdTrackCuts->SetMaxDCAToVertexXY(1);
1397  break;
1398  case 3:
1399  fesdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0105+0.0350/pt^1.1"); //Standard 2011
1400  fesdTrackCuts->SetMaxDCAToVertexZ(2);
1401  break;
1402  case 4:
1403  fesdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0525+0.175/pt^1.1");
1404  fesdTrackCuts->SetMaxDCAToVertexZ(2);
1405  break;
1406  case 5:
1407  fesdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
1408  fesdTrackCuts->SetMaxDCAToVertexZ(1);
1409  break;
1410  case 6:
1411  fesdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
1412  fesdTrackCuts->SetMaxDCAToVertexZ(5);
1413  break;
1414  case 7:
1415  fesdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0105+0.0350/pt^1.1"); //Standard 2011
1416  fesdTrackCuts->SetMaxDCAToVertexZ(1);
1417  break;
1418  case 8:
1419  fesdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0105+0.0350/pt^1.1"); //Standard 2011
1420  fesdTrackCuts->SetMaxDCAToVertexZ(5);
1421  break;
1422  default:
1423  cout<<"Warning: dcaCut not defined "<<dcaCut<<endl;
1424  return kFALSE;
1425  }
1426  return kTRUE;
1427 }
1428 
1431 { // Set Cut
1432  switch(piMaxMomdedxSigmaCut){
1433  case 0:
1435  break;
1436  case 1: // 100. GeV
1438  break;
1439  case 2: // 5. GeV
1441  break;
1442  case 3: // 4. GeV
1444  break;
1445  case 4: // 3.5 GeV
1447  break;
1448  case 5: // 3. GeV
1450  break;
1451  default:
1452  cout<<"Warning: piMaxMomdedxSigmaCut not defined "<<piMaxMomdedxSigmaCut<<endl;
1453  return kFALSE;
1454  }
1455  return kTRUE;
1456 }
1457 
1460 { // Set Cut
1461  switch(LowPRejectionSigmaCut){
1462  case 0: //
1463  fDoKaonRejectionLowP=kFALSE;
1464  fDoProtonRejectionLowP=kFALSE;
1465  fDoPionRejectionLowP=kFALSE;
1470  break;
1471  case 1: //
1472  fDoKaonRejectionLowP=kTRUE;
1473  fDoProtonRejectionLowP=kTRUE;
1474  fDoPionRejectionLowP=kTRUE;
1479  break;
1480  case 2: //
1481  fDoKaonRejectionLowP=kTRUE;
1482  fDoProtonRejectionLowP=kTRUE;
1483  fDoPionRejectionLowP=kTRUE;
1488  break;
1489  case 3: //
1490  fDoKaonRejectionLowP=kTRUE;
1491  fDoProtonRejectionLowP=kTRUE;
1492  fDoPionRejectionLowP=kTRUE;
1497  break;
1498  case 4: //
1499  fDoKaonRejectionLowP=kTRUE;
1500  fDoProtonRejectionLowP=kTRUE;
1501  fDoPionRejectionLowP=kTRUE;
1506  break;
1507  case 5: //
1508  fDoKaonRejectionLowP=kTRUE;
1509  fDoProtonRejectionLowP=kTRUE;
1510  fDoPionRejectionLowP=kTRUE;
1515  break;
1516  case 6: //
1517  fDoKaonRejectionLowP=kTRUE;
1518  fDoProtonRejectionLowP=kTRUE;
1519  fDoPionRejectionLowP=kTRUE;
1524  break;
1525  case 7: //
1526  fDoKaonRejectionLowP=kFALSE;
1527  fDoProtonRejectionLowP=kFALSE;
1528  fDoPionRejectionLowP=kTRUE;
1533  break;
1534  case 8:
1535  fDoKaonRejectionLowP=kFALSE;
1536  fDoProtonRejectionLowP=kFALSE;
1537  fDoPionRejectionLowP=kTRUE;
1542  break;
1543  default:
1544  cout<<"Warning: LowPRejectionSigmaCut not defined "<<LowPRejectionSigmaCut<<endl;
1545  return kFALSE;
1546  }
1547  return kTRUE;
1548 }
1549 
1552  // Set Cut
1553  switch(TOFelectronPID){ // RRnewTOF start //////////////////////////////////////////////////////////////////////////
1554  case 0: // no cut
1555  fRequireTOF = kFALSE;
1556  fUseTOFpid = kFALSE;
1559  break;
1560  case 1: // -7,7
1561  fRequireTOF = kFALSE;
1562  fUseTOFpid = kTRUE;
1565  break;
1566  case 2: // -5,5
1567  fRequireTOF = kFALSE;
1568  fUseTOFpid = kTRUE;
1571  break;
1572  case 3: // -3,5
1573  fRequireTOF = kFALSE;
1574  fUseTOFpid = kTRUE;
1577  break;
1578  case 4: // -2,3
1579  fRequireTOF = kFALSE;
1580  fUseTOFpid = kTRUE;
1583  break;
1584  case 5: // -3, 3 TOF mandatory
1585  fRequireTOF = kTRUE;
1586  fUseTOFpid = kTRUE;
1589  break;
1590  default:
1591  cout<<"Warning: TOFElectronCut not defined "<<TOFelectronPID<<endl;
1592  return kFALSE;
1593  }
1594  return kTRUE;
1595 }
1597 
1599  switch(psiCut) {
1600  case 0:
1601  fDoPsiPairCut = kFALSE;
1602  fPsiPairCut = 10000.; //
1603  fDeltaPhiCutMin = -1000.;
1604  fDeltaPhiCutMax = 1000.;
1605  break;
1606  case 1:
1607  fDoPsiPairCut = kTRUE;
1608  fPsiPairCut = 0.45; // Standard
1609  fDeltaPhiCutMin = 0.0;
1610  fDeltaPhiCutMax = 0.12;
1611  break;
1612  case 2:
1613  fDoPsiPairCut = kTRUE;
1614  fPsiPairCut = 0.60;
1615  fDeltaPhiCutMin = 0.0;
1616  fDeltaPhiCutMax = 0.12;
1617  break;
1618  case 3:
1619  fDoPsiPairCut = kTRUE;
1620  fPsiPairCut = 0.52;
1621  fDeltaPhiCutMin = 0.0;
1622  fDeltaPhiCutMax = 0.12;
1623  break;
1624  case 4:
1625  fDoPsiPairCut = kTRUE;
1626  fPsiPairCut = 0.30;
1627  fDeltaPhiCutMin = 0.0;
1628  fDeltaPhiCutMax = 0.12;
1629  break;
1630  case 5:
1631  fDoPsiPairCut = kTRUE;
1632  fPsiPairCut = 0.60;
1633  fDeltaPhiCutMin = 0.0;
1634  fDeltaPhiCutMax = 0.06;
1635  break;
1636  case 6:
1637  fDoPsiPairCut = kTRUE;
1638  fPsiPairCut = 0.65;
1639  fDeltaPhiCutMin = 0.0;
1640  fDeltaPhiCutMax = 0.14;
1641  break;
1642  default:
1643  cout<<"Warning: PsiPairCut not defined "<<fPsiPairCut<<endl;
1644  return kFALSE;
1645  }
1646  return kTRUE;
1647 }
1648 
1651  switch(RCut) {
1652  case 0:
1653  fDoRejectSharedElecGamma = kFALSE;
1654  fRadiusCut = 10000; //
1655  break;
1656  case 1:
1657  fDoRejectSharedElecGamma = kTRUE;
1658  fRadiusCut = 2.0; // cm
1659  break;
1660  case 2:
1661  fDoRejectSharedElecGamma = kTRUE;
1662  fRadiusCut = 3.0; // Standard
1663  break;
1664  case 3:
1665  fDoRejectSharedElecGamma = kTRUE;
1666  fRadiusCut = 4.0; //
1667  break;
1668  case 4:
1669  fDoRejectSharedElecGamma = kTRUE;
1670  fRadiusCut = 5.0; //
1671  break;
1672  case 5:
1673  fDoRejectSharedElecGamma = kTRUE;
1674  fRadiusCut = 10.0; //
1675  break;
1676  case 6:
1677  fDoRejectSharedElecGamma = kTRUE;
1678  fRadiusCut = 15.0; //
1679  break;
1680  default:
1681  cout<<"Warning: PsiPairCut not defined "<<fDoRejectSharedElecGamma<<endl;
1682  return kFALSE;
1683  }
1684  return kTRUE;
1685 }
1688 
1689  if( !fesdTrackCuts ) {
1690  cout<<"Warning: AliESDtrackCuts is not initialized "<<endl;
1691  return kFALSE;
1692  }
1693 
1694  // Set Cut
1695  switch(maxChi2){
1696  case 0:
1697  fesdTrackCuts->SetMaxChi2PerClusterTPC(1e10);
1698  break;
1699  case 1:
1700  fesdTrackCuts->SetMaxChi2PerClusterTPC(3.);
1701  break;
1702  case 2:
1703  fesdTrackCuts->SetMaxChi2PerClusterTPC(4.);
1704  break;
1705  case 3:
1706  fesdTrackCuts->SetMaxChi2PerClusterTPC(5.);
1707  break;
1708  default:
1709  cout<<"Warning: SetMaxChi2PerClusterTPC not defined "<<maxChi2<<endl;
1710  return kFALSE;
1711  }
1712  return kTRUE;
1713 }
1714 
1717 { // Set Cut
1718  if( !fesdTrackCuts ) {
1719  cout<<"Warning: AliESDtrackCuts is not initialized "<<endl;
1720  return kFALSE;
1721  }
1722 
1723  switch(maxChi2){
1724  case 0:
1725  fesdTrackCuts->SetMaxChi2PerClusterITS(1e10);
1726  break;
1727  case 1:
1728  fesdTrackCuts->SetMaxChi2PerClusterITS(25.);
1729  break;
1730  case 2:
1731  fesdTrackCuts->SetMaxChi2PerClusterITS(36.);
1732  break;
1733  case 3:
1734  fesdTrackCuts->SetMaxChi2PerClusterITS(49.);
1735  break;
1736  default:
1737  cout<<"Warning: SetMaxChi2PerClusterITS not defined "<<maxChi2<<endl;
1738  return kFALSE;
1739  }
1740  return kTRUE;
1741 }
1742 
1745 { // Set Cut
1746  switch(opc){
1747  case 0:
1748  fDoWeights = kFALSE;
1749  break;
1750  case 1:
1751  fDoWeights = kTRUE;
1752  break;
1753  default:
1754  cout<<"Warning: Weights option not defined "<<opc<<endl;
1755  return kFALSE;
1756  }
1757  return kTRUE;
1758 }
1761 { // Set Cut
1762  switch(massCut){
1763  case 0:
1764  fMassCutPtMin = -999.; //GeV
1765  fMassCutLowPt = 999.; //GeV/c^2
1766  fMassCutHighPt = 999.; //GeV/c^2
1767  fMassMinCut = -999;
1768  fDoMassCut = kFALSE;
1769  fDoMassMinCut = kFALSE;
1770  break;
1771  case 1:
1772  //fMassCut = 0.135; //GeV/c^2
1773  fMassCutPtMin = -999.; //GeV
1774  fMassCutLowPt = 0.135; //GeV/c^2
1775  fMassCutHighPt = 0.135; //GeV/c^2
1776  fMassMinCut = -999;
1777  fDoMassCut = kTRUE;
1778  fDoMassMinCut = kFALSE;
1779  break;
1780  case 2:
1781  //fMassCut = 0.100; //GeV/c^2
1782  fMassCutPtMin = -999.; //GeV
1783  fMassCutLowPt = 0.100; //GeV/c^2
1784  fMassCutHighPt = 0.100; //GeV/c^2
1785  fMassMinCut = -999;
1786  fDoMassCut = kTRUE;
1787  fDoMassMinCut = kFALSE;
1788  break;
1789  case 3:
1790  fMassCutPtMin = 1.0; //GeV
1791  fMassCutLowPt = 0.015; //GeV/c^2
1792  fMassCutHighPt = 0.035; //GeV/c^2
1793  fMassMinCut = 0.002;
1794  fDoMassCut = kTRUE;
1795  fDoMassMinCut = kTRUE;
1796  break;
1797  case 4:
1798  //fMassCut = 0.050; //GeV/c^2
1799  fMassCutPtMin = -999.; //GeV
1800  fMassCutLowPt = 0.050; //GeV/c^2
1801  fMassCutHighPt = 0.050; //GeV/c^2
1802  fMassMinCut = -999;
1803  fDoMassCut = kTRUE;
1804  fDoMassMinCut = kFALSE;
1805  break;
1806  case 5:
1807  fMassCutPtMin = -999.; //GeV
1808  fMassCutLowPt = 0.035; //GeV/c^2
1809  fMassCutHighPt = 0.035; //GeV/c^2
1810  fMassMinCut = -999;
1811  fDoMassCut = kTRUE;
1812  fDoMassMinCut = kFALSE;
1813  break;
1814  case 6:
1815  fMassCutPtMin = -999.; //GeV
1816  fMassCutLowPt = 0.015; //GeV/c^2
1817  fMassCutHighPt = 0.015; //GeV/c^2
1818  fMassMinCut = -999;
1819  fDoMassCut = kTRUE;
1820  fDoMassMinCut = kFALSE;
1821  break;
1822  case 7:
1823  fMassCutPtMin = 1.0; //GeV
1824  fMassCutLowPt = 0.015; //GeV/c^2
1825  fMassCutHighPt = 0.035; //GeV/c^2
1826  fMassMinCut = -999;
1827  fDoMassCut = kTRUE;
1828  fDoMassMinCut = kFALSE;
1829  break;
1830  case 8:
1831  fMassCutPtMin = 1.0; //GeV
1832  fMassCutLowPt = 0.015; //GeV/c^2
1833  fMassCutHighPt = 0.050; //GeV/c^2
1834  fMassMinCut = -999;
1835  fDoMassCut = kTRUE;
1836  fDoMassMinCut = kFALSE;
1837  break;
1838  case 9:
1839  fMassCutPtMin = 1.0; //GeV
1840  fMassCutLowPt = 0.025; //GeV/c^2
1841  fMassCutHighPt = 0.035; //GeV/c^2
1842  fMassMinCut = -999;
1843  fDoMassCut = kTRUE;
1844  fDoMassMinCut = kFALSE;
1845  break;
1846  case 10:
1847  fMassCutPtMin = 0.547; //GeV
1848  fMassCutLowPt = 0.025; //GeV/c^2
1849  fMassCutHighPt = 0.035; //GeV/c^2
1850  fMassMinCut = -999;
1851  fDoMassCut = kTRUE;
1852  fDoMassMinCut = kFALSE;
1853  break;
1854  default:
1855  cout<<"Warning: MassCut not defined "<<massCut<<endl;
1856  return kFALSE;
1857  }
1858  return kTRUE;
1859 }
1861 {// Set Cut
1862  switch(useMCPSmearing){
1863  case 0:
1864  fUseVPhotonMCPSmearing=kFALSE;
1865  fUseElectronMCPSmearing=kFALSE;
1866  break;
1867  case 1:
1868  fUseVPhotonMCPSmearing=kTRUE;
1869  fUseElectronMCPSmearing=kFALSE;
1870  break;
1871  case 2:
1872  fUseVPhotonMCPSmearing=kFALSE;
1874  break;
1875  default: cout<<"Warning: Virtual Photon SMearing not defined "<<useMCPSmearing<<endl;
1876  return kFALSE;
1877 
1878  }
1879  return kTRUE;
1880 }
1881 
1882 
1885  // returns TString with current cut number
1886  return fCutStringRead;
1887 }
1888 
1889 
1892  //Create and return standard 2010 PbPb cuts
1893  AliDalitzElectronCuts *cuts=new AliDalitzElectronCuts("StandardCuts2010PbPb","StandardCuts2010PbPb");
1894  if(!cuts->InitializeCutsFromCutString("9069640364102")){
1895  cout<<"Warning: Initialization of Standardcuts2010PbPb failed"<<endl;}
1896  return cuts;
1897 }
1898 
1901  //Create and return standard 2010 PbPb cuts
1902  AliDalitzElectronCuts *cuts=new AliDalitzElectronCuts("StandardCuts2010pp","StandardCuts2010pp");
1903 
1904  if(!cuts->InitializeCutsFromCutString("9069640364102")){
1905  cout<<"Warning: Initialization of Standardcuts2010pp failed"<<endl;}
1906  return cuts;
1907 }
1908 
Bool_t SetMaxChi2PerClusterITS(Int_t maxChi2)
Bool_t ElectronIsSelectedMC(Int_t labelParticle, AliMCEvent *mcEvent)
static AliDalitzElectronCuts * GetStandardCuts2010pp()
Bool_t SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut)
double Double_t
Definition: External.C:58
Bool_t SetDCACut(Int_t dcaCut)
Bool_t MassCut(Double_t pi0CandidatePt, Double_t vphotonCandidateMass)
Bool_t SetPtCut(Int_t ptCut)
Definition: External.C:236
const char * title
Definition: MakeQAPdf.C:27
Bool_t SetRejectSharedElecGamma(Int_t RCut)
#define ASSIGNARRAY(i)
Bool_t SetTPCClusterCut(Int_t clsTPCCut)
Bool_t RejectSharedElecGamma(TList *photons, Int_t indexEle)
AliESDtrackCuts * fesdTrackCuts
Bool_t SetTPCdEdxCutPionLine(Int_t pidedxSigmaCut)
int Int_t
Definition: External.C:63
float Float_t
Definition: External.C:68
Bool_t SetUseVPhotonMCPmearing(Int_t useMCPSmearing)
Bool_t SetMaxMomPiondEdxTPCCut(Int_t piMomdedxSigmaCut)
Bool_t SetMaxChi2TPCConstrainedGlobal(Int_t maxChi2)
Bool_t SetTPCdEdxCutElectronLine(Int_t ededxSigmaCut)
Bool_t SetITSdEdxCutElectronLine(Int_t ededxSigmaCut)
AliDalitzElectronCuts(const char *name="ElectronCuts", const char *title="Electron Cuts")
Bool_t SetEtaCut(Int_t etaCut)
static AliVTrack * GetTrack(AliVEvent *event, Int_t label)
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Bool_t dEdxCuts(AliVTrack *track)
Cut functions.
Bool_t ElectronIsSelected(AliESDtrack *lTrack)
Double_t GetNFindableClustersTPC(AliESDtrack *lTrack)
Bool_t SetMaxChi2PerClusterTPC(Int_t maxChi2)
static const char * fgkCutNames[kNCuts]
Bool_t IsFromGammaConversion(Double_t psiPair, Double_t deltaPhi)
Bool_t SetITSClusterCut(Int_t clsITSCut)
Bool_t SetMassCut(Int_t massCut)
static AliDalitzElectronCuts * GetStandardCuts2010PbPb()
bool Bool_t
Definition: External.C:53
Bool_t TrackIsSelected(AliESDtrack *lTrack)
Bool_t SetCut(cutIds cutID, Int_t cut)
Bool_t InitializeCutsFromCutString(const TString analysisCutSelection)
Bool_t SetMinMomPiondEdxTPCCut(Int_t piMomdedxSigmaCut)
Bool_t SetPsiPairCut(Int_t psiCut)
void InitCutHistograms(TString name="", Bool_t preCut=kTRUE, TString cutName="")
Double_t GetConversionRadius() const
Bool_t SetTOFElectronPIDCut(Int_t TOFelectronPID)