2 /**************************************************************************
\r
3 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r
5 * Authors: Svein Lindal, Daniel Lohner *
\r
8 * Permission to use, copy, modify and distribute this software and its *
\r
9 * documentation strictly for non-commercial purposes is hereby granted *
\r
10 * without fee, provided that the above copyright notice appears in all *
\r
11 * copies and that both the copyright notice and this permission notice *
\r
12 * appear in the supporting documentation. The authors make no claims *
\r
13 * about the suitability of this software for any purpose. It is *
\r
14 * provided "as is" without express or implied warranty. *
\r
15 **************************************************************************/
\r
17 ////////////////////////////////////////////////
\r
18 //---------------------------------------------
\r
19 // Class handling all kinds of selection cuts for
\r
20 // Gamma Conversion analysis
\r
21 //---------------------------------------------
\r
22 ////////////////////////////////////////////////
\r
25 #include "AliDalitzElectronCuts.h"
\r
26 #include "AliAODConversionPhoton.h"
\r
27 #include "AliKFVertex.h"
\r
28 #include "AliAODTrack.h"
\r
29 #include "AliESDtrack.h"
\r
30 #include "AliAnalysisManager.h"
\r
31 #include "AliInputEventHandler.h"
\r
32 #include "AliMCEventHandler.h"
\r
33 #include "AliAODHandler.h"
\r
34 #include "AliPIDResponse.h"
\r
37 #include "AliStack.h"
\r
38 #include "TObjString.h"
\r
39 #include "AliAODEvent.h"
\r
40 #include "AliESDEvent.h"
\r
44 using namespace std;
\r
46 ClassImp(AliDalitzElectronCuts)
\r
49 const char* AliDalitzElectronCuts::fgkCutNames[AliDalitzElectronCuts::kNCuts] = {
\r
53 "pidedxSigmaTPCCut",
\r
54 "piMinMomdedxSigmaTPCCut",
\r
55 "piMaxMomdedxSigmaTPCCut",
\r
56 "LowPRejectionSigmaCut",
\r
62 "RejectSharedElecGamma",
\r
64 "NumberOfRotations",
\r
67 //________________________________________________________________________
\r
68 AliDalitzElectronCuts::AliDalitzElectronCuts(const char *name,const char *title) : AliAnalysisCuts(name,title),
\r
71 fesdTrackCuts(NULL),
\r
75 fDeltaPhiCutMin(0.),
\r
76 fDeltaPhiCutMax(0.12),
\r
77 fMinClsTPC(0), // minimum clusters in the TPC
\r
78 fMinClsTPCToF(0), // minimum clusters to findable clusters
\r
79 fDodEdxSigmaITSCut(kFALSE),
\r
80 fDodEdxSigmaTPCCut(kTRUE),
\r
81 fDoTOFsigmaCut(kFALSE), // RRnewTOF
\r
82 fDoRejectSharedElecGamma(kFALSE),
\r
83 fDoPsiPairCut(kFALSE),
\r
84 fPIDnSigmaAboveElectronLineITS(100),
\r
85 fPIDnSigmaBelowElectronLineITS(-100),
\r
86 fPIDnSigmaAboveElectronLineTPC(100),
\r
87 fPIDnSigmaBelowElectronLineTPC(-100),
\r
88 fPIDnSigmaAbovePionLineTPC(0),
\r
89 fPIDnSigmaAbovePionLineTPCHighPt(-100),
\r
90 fTofPIDnSigmaAboveElectronLine(100), // RRnewTOF
\r
91 fTofPIDnSigmaBelowElectronLine(-100), // RRnewTOF
\r
92 fPIDMinPnSigmaAbovePionLineTPC(0),
\r
93 fPIDMaxPnSigmaAbovePionLineTPC(0),
\r
94 fDoKaonRejectionLowP(kFALSE),
\r
95 fDoProtonRejectionLowP(kFALSE),
\r
96 fDoPionRejectionLowP(kFALSE),
\r
97 fPIDnSigmaAtLowPAroundKaonLine(0),
\r
98 fPIDnSigmaAtLowPAroundProtonLine(0),
\r
99 fPIDnSigmaAtLowPAroundPionLine(0),
\r
100 fPIDMinPKaonRejectionLowP(1.5),
\r
101 fPIDMinPProtonRejectionLowP(2.0),
\r
102 fPIDMinPPionRejectionLowP(0.5),
\r
103 fUseCorrectedTPCClsInfo(kFALSE),
\r
104 fUseTOFpid(kFALSE),
\r
105 fRequireTOF(kFALSE),
\r
106 fUseTrackMultiplicityForBG(kFALSE),
\r
108 fnumberOfRotationEventsForBG(0),
\r
112 hITSdEdxbefore(NULL),
\r
113 hITSdEdxafter(NULL),
\r
114 hTPCdEdxbefore(NULL),
\r
115 hTPCdEdxafter(NULL),
\r
116 hTPCdEdxSignalbefore(NULL),
\r
117 hTPCdEdxSignalafter(NULL),
\r
122 for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=0;}
\r
123 fCutString=new TObjString((GetCutNumber()).Data());
\r
125 //fesdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts");
\r
126 // Using standard function for setting Cuts
\r
127 Bool_t selectPrimaries=kTRUE;
\r
128 fesdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
\r
131 //________________________________________________________________________
\r
132 AliDalitzElectronCuts::~AliDalitzElectronCuts() {
\r
134 //Deleting fHistograms leads to seg fault it it's added to output collection of a task
\r
136 // delete fHistograms;
\r
137 // fHistograms = NULL;
\r
139 if(fCutString != NULL){
\r
147 //________________________________________________________________________
\r
148 void AliDalitzElectronCuts::InitCutHistograms(TString name, Bool_t preCut,TString cutNumber){
\r
150 // Initialize Cut Histograms for QA (only initialized and filled if function is called)
\r
152 TString cutName = "";
\r
154 if( cutNumber==""){
\r
155 cutName = GetCutNumber().Data();
\r
158 cutName = cutNumber.Data();
\r
161 if(fHistograms != NULL){
\r
162 delete fHistograms;
\r
165 if(fHistograms==NULL){
\r
166 fHistograms=new TList();
\r
167 if(name=="")fHistograms->SetName(Form("ElectronCuts_%s",cutName.Data()));
\r
168 else fHistograms->SetName(Form("%s_%s",name.Data(),cutName.Data()));
\r
172 hCutIndex=new TH1F(Form("IsElectronSelected %s",cutName.Data()),"IsElectronSelected",10,-0.5,9.5);
\r
173 hCutIndex->GetXaxis()->SetBinLabel(kElectronIn+1,"in");
\r
174 hCutIndex->GetXaxis()->SetBinLabel(kNoTracks+1,"no tracks");
\r
175 hCutIndex->GetXaxis()->SetBinLabel(kTrackCuts+1,"Track cuts");
\r
176 hCutIndex->GetXaxis()->SetBinLabel(kdEdxCuts+1,"dEdx");
\r
177 hCutIndex->GetXaxis()->SetBinLabel(kElectronOut+1,"out");
\r
178 fHistograms->Add(hCutIndex);
\r
183 hdEdxCuts=new TH1F(Form("dEdxCuts %s",cutName.Data()),"dEdxCuts",10,-0.5,9.5);
\r
184 hdEdxCuts->GetXaxis()->SetBinLabel(1,"in");
\r
185 hdEdxCuts->GetXaxis()->SetBinLabel(2,"ITSelectron");
\r
186 hdEdxCuts->GetXaxis()->SetBinLabel(3,"TPCelectron");
\r
187 hdEdxCuts->GetXaxis()->SetBinLabel(4,"TPCpion");
\r
188 hdEdxCuts->GetXaxis()->SetBinLabel(5,"TPCpionhighp");
\r
189 hdEdxCuts->GetXaxis()->SetBinLabel(6,"TPCkaonlowprej");
\r
190 hdEdxCuts->GetXaxis()->SetBinLabel(7,"TPCprotonlowprej");
\r
191 hdEdxCuts->GetXaxis()->SetBinLabel(8,"TPCpionlowprej");
\r
192 hdEdxCuts->GetXaxis()->SetBinLabel(9,"TOFelectron");
\r
193 hdEdxCuts->GetXaxis()->SetBinLabel(10,"out");
\r
194 fHistograms->Add(hdEdxCuts);
\r
198 TAxis *AxisBeforeITS = NULL;
\r
199 TAxis *AxisBeforedEdx = NULL;
\r
200 TAxis *AxisBeforeTOF = NULL;
\r
201 TAxis *AxisBeforedEdxSignal = NULL;
\r
206 hITSdEdxbefore=new TH2F(Form("Electron_ITS_before %s",cutName.Data()),"ITS dEdx electron before" ,150,0.05,20,400,-10,10);
\r
207 fHistograms->Add(hITSdEdxbefore);
\r
208 AxisBeforeITS = hITSdEdxbefore->GetXaxis();
\r
210 hTPCdEdxbefore=new TH2F(Form("Electron_dEdx_before %s",cutName.Data()),"dEdx electron before" ,150,0.05,20,400,-10,10);
\r
211 fHistograms->Add(hTPCdEdxbefore);
\r
212 AxisBeforedEdx = hTPCdEdxbefore->GetXaxis();
\r
214 hTPCdEdxSignalbefore=new TH2F(Form("Electron_dEdxSignal_before %s",cutName.Data()),"dEdx electron signal before" ,150,0.05,20.0,800,0.0,200);
\r
215 fHistograms->Add(hTPCdEdxSignalbefore);
\r
216 AxisBeforedEdxSignal = hTPCdEdxSignalbefore->GetXaxis();
\r
219 hTOFbefore=new TH2F(Form("Electron_TOF_before %s",cutName.Data()),"TOF electron before" ,150,0.05,20,400,-6,10);
\r
220 fHistograms->Add(hTOFbefore);
\r
221 AxisBeforeTOF = hTOFbefore->GetXaxis();
\r
226 hITSdEdxafter=new TH2F(Form("Electron_ITS_after %s",cutName.Data()),"ITS dEdx electron after" ,150,0.05,20,400, -10,10);
\r
227 fHistograms->Add(hITSdEdxafter);
\r
229 hTPCdEdxafter=new TH2F(Form("Electron_dEdx_after %s",cutName.Data()),"dEdx electron after" ,150,0.05,20,400, -10,10);
\r
230 fHistograms->Add(hTPCdEdxafter);
\r
232 hTPCdEdxSignalafter=new TH2F(Form("Electron_dEdxSignal_after %s",cutName.Data()),"dEdx electron signal after" ,150,0.05,20.0,800,0.0,200);
\r
233 fHistograms->Add(hTPCdEdxSignalafter);
\r
235 hTOFafter=new TH2F(Form("Electron_TOF_after %s",cutName.Data()),"TOF electron after" ,150,0.05,20,400,-6,10);
\r
236 fHistograms->Add(hTOFafter);
\r
238 TAxis *AxisAfter = hTPCdEdxafter->GetXaxis();
\r
239 Int_t bins = AxisAfter->GetNbins();
\r
240 Double_t from = AxisAfter->GetXmin();
\r
241 Double_t to = AxisAfter->GetXmax();
\r
242 Double_t *newBins = new Double_t[bins+1];
\r
244 Double_t factor = TMath::Power(to/from, 1./bins);
\r
245 for(Int_t i=1; i<=bins; ++i) newBins[i] = factor * newBins[i-1];
\r
246 AxisAfter->Set(bins, newBins);
\r
247 AxisAfter = hTOFafter->GetXaxis();
\r
248 AxisAfter->Set(bins, newBins);
\r
249 AxisAfter = hITSdEdxafter->GetXaxis();
\r
250 AxisAfter->Set(bins,newBins);
\r
251 AxisAfter = hTPCdEdxSignalafter->GetXaxis();
\r
252 AxisAfter->Set(bins,newBins);
\r
255 AxisBeforeITS->Set(bins, newBins);
\r
256 AxisBeforedEdx->Set(bins, newBins);
\r
257 AxisBeforedEdxSignal->Set(bins,newBins);
\r
258 AxisBeforeTOF->Set(bins, newBins);
\r
264 // Event Cuts and Info
\r
268 //________________________________________________________________________
\r
269 Bool_t AliDalitzElectronCuts::InitPIDResponse(){
\r
271 // Set Pointer to AliPIDResponse
\r
273 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
\r
277 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
\r
278 fPIDResponse = (AliPIDResponse*)inputHandler->GetPIDResponse();
\r
279 if(fPIDResponse)return kTRUE;
\r
285 ///________________________________________________________________________
\r
286 Bool_t AliDalitzElectronCuts::ElectronIsSelectedMC(Int_t labelParticle,AliStack *fMCStack)
\r
288 if( labelParticle < 0 ) return kFALSE;
\r
289 if( fMCStack->IsPhysicalPrimary(labelParticle) == kFALSE ) return kFALSE;
\r
291 TParticle* particle = fMCStack->Particle(labelParticle);
\r
293 if( TMath::Abs( particle->GetPdgCode() ) != 11) return kFALSE;
\r
294 if( TMath::Abs( particle->Eta() ) > fEtaCut ) return kFALSE;
\r
300 ///________________________________________________________________________
\r
301 Bool_t AliDalitzElectronCuts::ElectronIsSelected(AliESDtrack* lTrack)
\r
303 //Selection of Reconstructed electrons
\r
305 if(hCutIndex)hCutIndex->Fill(kElectronIn);
\r
307 if (lTrack == NULL){
\r
308 if(hCutIndex)hCutIndex->Fill(kNoTracks);
\r
312 if ( ! lTrack->GetConstrainedParam() ){
\r
315 AliVTrack * track = dynamic_cast<AliVTrack*>(lTrack);
\r
319 if( !TrackIsSelected(lTrack) ){
\r
320 if(hCutIndex)hCutIndex->Fill(kTrackCuts);
\r
326 if( ! dEdxCuts( track ) ) {
\r
327 if(hCutIndex)hCutIndex->Fill(kdEdxCuts);
\r
332 //Electron passed the cuts
\r
333 if(hCutIndex)hCutIndex->Fill(kElectronOut);
\r
339 ///________________________________________________________________________
\r
340 Bool_t AliDalitzElectronCuts::TrackIsSelected(AliESDtrack* lTrack) {
\r
341 // Track Selection for Photon Reconstruction
\r
345 if( ! fesdTrackCuts->AcceptTrack(lTrack) ){
\r
350 if( TMath::Abs( lTrack->Eta()) > fEtaCut ) {
\r
355 if( lTrack->GetNcls(1) < fMinClsTPC ) {
\r
360 //Findable clusters
\r
365 if (!fUseCorrectedTPCClsInfo ){
\r
366 if(lTrack->GetTPCNclsF()!=0){
\r
368 clsToF = (Double_t)lTrack->GetNcls(1)/(Double_t)lTrack->GetTPCNclsF();
\r
369 }// Ncluster/Nfindablecluster
\r
373 //clsToF = lTrack->GetTPCClusterInfo(2,0,GetFirstTPCRow(photon->GetConversionRadius()));
\r
374 clsToF = lTrack->GetTPCClusterInfo(2,1); //NOTE ask friederike
\r
379 if( clsToF < fMinClsTPCToF){
\r
387 ///________________________________________________________________________
\r
388 Bool_t AliDalitzElectronCuts::dEdxCuts(AliVTrack *fCurrentTrack){
\r
390 // Electron Identification Cuts for Photon reconstruction
\r
392 if(!fPIDResponse){ InitPIDResponse(); }// Try to reinitialize PID Response
\r
393 if(!fPIDResponse){ AliError("No PID Response"); return kFALSE;}// if still missing fatal error
\r
397 //cout<<"dEdxCuts: //////////////////////////////////////////////////////////////////////////"<<endl;
\r
403 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
\r
404 if(hITSdEdxbefore)hITSdEdxbefore->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasITS(fCurrentTrack, AliPID::kElectron));
\r
405 if(hTPCdEdxbefore)hTPCdEdxbefore->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTPC(fCurrentTrack, AliPID::kElectron));
\r
406 if(hTPCdEdxSignalbefore)hTPCdEdxSignalbefore->Fill(fCurrentTrack->P(),TMath::Abs(fCurrentTrack->GetTPCsignal()));
\r
412 if( fDodEdxSigmaITSCut == kTRUE ){
\r
415 if( fPIDResponse->NumberOfSigmasITS(fCurrentTrack,AliPID::kElectron)<fPIDnSigmaBelowElectronLineITS ||
\r
416 fPIDResponse->NumberOfSigmasITS(fCurrentTrack,AliPID::kElectron)> fPIDnSigmaAboveElectronLineITS ){
\r
418 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
\r
424 if(hITSdEdxafter)hITSdEdxafter->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasITS(fCurrentTrack, AliPID::kElectron));
\r
430 if(fDodEdxSigmaTPCCut == kTRUE){
\r
433 // TPC Electron Line
\r
434 if( fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)<fPIDnSigmaBelowElectronLineTPC ||
\r
435 fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)>fPIDnSigmaAboveElectronLineTPC){
\r
437 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
\r
443 if( fCurrentTrack->P()>fPIDMinPnSigmaAbovePionLineTPC && fCurrentTrack->P()<fPIDMaxPnSigmaAbovePionLineTPC ){
\r
444 if(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)>fPIDnSigmaBelowElectronLineTPC &&
\r
445 fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)<fPIDnSigmaAboveElectronLineTPC &&
\r
446 fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kPion)<fPIDnSigmaAbovePionLineTPC){
\r
448 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
\r
454 // High Pt Pion rej
\r
455 if( fCurrentTrack->P()>fPIDMaxPnSigmaAbovePionLineTPC ){
\r
456 if(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)>fPIDnSigmaBelowElectronLineTPC &&
\r
457 fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)<fPIDnSigmaAboveElectronLineTPC&&
\r
458 fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kPion)<fPIDnSigmaAbovePionLineTPCHighPt){
\r
460 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
\r
468 else{ cutIndex+=3; }
\r
471 if( fDoKaonRejectionLowP == kTRUE ){
\r
473 if( fCurrentTrack->P() < fPIDMinPKaonRejectionLowP ){
\r
475 if( TMath::Abs(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kKaon))<fPIDnSigmaAtLowPAroundKaonLine){
\r
477 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
\r
485 if( fDoProtonRejectionLowP == kTRUE ){
\r
487 if( fCurrentTrack->P() < fPIDMinPProtonRejectionLowP ){
\r
488 if( TMath::Abs( fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kProton))<fPIDnSigmaAtLowPAroundProtonLine){
\r
490 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
\r
497 if(fDoPionRejectionLowP == kTRUE){
\r
498 if( fCurrentTrack->P() < fPIDMinPPionRejectionLowP ){
\r
499 if( TMath::Abs( fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kPion)) < fPIDnSigmaAtLowPAroundPionLine ){
\r
501 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
\r
509 if( ( fCurrentTrack->GetStatus() & AliESDtrack::kTOFpid ) && ( !( fCurrentTrack->GetStatus() & AliESDtrack::kTOFmismatch) ) ){
\r
510 if(hTOFbefore) hTOFbefore->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron));
\r
512 if(fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron)>fTofPIDnSigmaAboveElectronLine ||
\r
513 fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron)<fTofPIDnSigmaBelowElectronLine ){
\r
514 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
\r
518 if(hTOFafter)hTOFafter->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron));
\r
520 else if ( fRequireTOF == kTRUE ) {
\r
522 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
\r
527 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
\r
528 if(hTPCdEdxafter)hTPCdEdxafter->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTPC(fCurrentTrack, AliPID::kElectron));
\r
529 if(hTPCdEdxSignalafter)hTPCdEdxSignalafter->Fill(fCurrentTrack->P(),TMath::Abs(fCurrentTrack->GetTPCsignal()));
\r
533 ///________________________________________________________________________
\r
536 AliVTrack *AliDalitzElectronCuts::GetTrack(AliVEvent * event, Int_t label){
\r
537 //Returns pointer to the track with given ESD label
\r
538 //(Important for AOD implementation, since Track array in AOD data is different
\r
539 //from ESD array, but ESD tracklabels are stored in AOD Tracks)
\r
541 AliESDEvent * esdEvent = dynamic_cast<AliESDEvent*>(event);
\r
543 if(label > event->GetNumberOfTracks() ) return NULL;
\r
544 AliESDtrack * track = esdEvent->GetTrack(label);
\r
548 for(Int_t ii=0; ii<event->GetNumberOfTracks(); ii++) {
\r
549 AliVTrack * track = dynamic_cast<AliVTrack*>(event->GetTrack(ii));
\r
552 if(track->GetID() == label) {
\r
559 cout << "track not found " << label << " " << event->GetNumberOfTracks() << endl;
\r
562 ///________________________________________________________________________
\r
563 Bool_t AliDalitzElectronCuts::RejectSharedElecGamma(TList *photons, Int_t indexEle){
\r
566 for(Int_t i = 0;i<photons->GetEntries();i++){
\r
568 AliAODConversionPhoton *photonComp = (AliAODConversionPhoton*) photons->At(i);
\r
570 Int_t posLabel = photonComp->GetTrackLabelPositive();
\r
571 Int_t negLabel = photonComp->GetTrackLabelNegative();
\r
573 if( (photonComp->GetConversionRadius() < fRadiusCut) && (posLabel == indexEle || negLabel == indexEle) ){
\r
581 Double_t AliDalitzElectronCuts::GetPsiPair( const AliESDtrack *trackPos, const AliESDtrack *trackNeg )
\r
584 // This angle is a measure for the contribution of the opening in polar
\r
585 // direction ??0 to the opening angle ?? Pair
\r
587 // Ref. Measurement of photons via conversion pairs with the PHENIX experiment at RHIC
\r
588 // Master Thesis. Thorsten Dahms. 2005
\r
589 // https://twiki.cern.ch/twiki/pub/ALICE/GammaPhysicsPublications/tdahms_thesis.pdf
\r
591 Double_t momPos[3];
\r
592 Double_t momNeg[3];
\r
593 if( trackPos->GetConstrainedPxPyPz(momPos) == 0 ) trackPos->GetPxPyPz( momPos );
\r
594 if( trackNeg->GetConstrainedPxPyPz(momNeg) == 0 ) trackNeg->GetPxPyPz( momNeg );
\r
596 TVector3 posDaughter;
\r
597 TVector3 negDaughter;
\r
599 posDaughter.SetXYZ( momPos[0], momPos[1], momPos[2] );
\r
600 negDaughter.SetXYZ( momNeg[0], momNeg[1], momNeg[2] );
\r
602 Double_t deltaTheta = negDaughter.Theta() - posDaughter.Theta();
\r
603 Double_t openingAngle = posDaughter.Angle( negDaughter ); //TMath::ACos( posDaughter.Dot(negDaughter)/(negDaughter.Mag()*posDaughter.Mag()) );
\r
605 if( openingAngle < 1e-20 ) return 0.;
\r
607 Double_t psiAngle = TMath::ASin( deltaTheta/openingAngle );
\r
612 Bool_t AliDalitzElectronCuts::IsFromGammaConversion( Double_t psiPair, Double_t deltaPhi )
\r
615 // Returns true if it is a gamma conversion according to psi pair value
\r
617 return ( (deltaPhi > fDeltaPhiCutMin && deltaPhi < fDeltaPhiCutMax) &&
\r
618 TMath::Abs(psiPair) < ( fPsiPairCut - fPsiPairCut/fDeltaPhiCutMax * deltaPhi ) );
\r
621 ///________________________________________________________________________
\r
622 Bool_t AliDalitzElectronCuts::UpdateCutString(cutIds cutID, Int_t value) {
\r
623 ///Update the cut string (if it has been created yet)
\r
625 if(fCutString && fCutString->GetString().Length() == kNCuts) {
\r
626 // cout << "Updating cut id in spot number " << cutID << " to " << value << endl;
\r
627 fCutString->SetString(GetCutNumber());
\r
629 // cout << "fCutString not yet initialized, will not be updated" << endl;
\r
632 // cout << fCutString->GetString().Data() << endl;
\r
636 ///________________________________________________________________________
\r
637 Bool_t AliDalitzElectronCuts::InitializeCutsFromCutString(const TString analysisCutSelection ) {
\r
638 // Initialize Cuts from a given Cut string
\r
640 // out<<"Set Cut Number: "<<analysisCutSelection.Data()<<endl;
\r
641 if(analysisCutSelection.Length()!=kNCuts) {
\r
642 AliError(Form("Cut selection has the wrong length! size is %d, number of cuts is %d", analysisCutSelection.Length(), kNCuts));
\r
645 if(!analysisCutSelection.IsDigit()){
\r
646 AliError("Cut selection contains characters");
\r
650 const char *cutSelection = analysisCutSelection.Data();
\r
651 #define ASSIGNARRAY(i) fCuts[i] = cutSelection[i] - '0'
\r
652 for(Int_t ii=0;ii<kNCuts;ii++){
\r
658 AliError("Analysis Cut Selection does not start with 9");
\r
663 // Set Individual Cuts
\r
664 for(Int_t ii=0;ii<kNCuts;ii++){
\r
665 if(!SetCut(cutIds(ii),fCuts[ii]))return kFALSE;
\r
672 ///________________________________________________________________________
\r
673 Bool_t AliDalitzElectronCuts::SetCut(cutIds cutID, const Int_t value) {
\r
674 ///Set individual cut ID
\r
676 //cout << "Updating cut " << fgkCutNames[cutID] << " (" << cutID << ") to " << value << endl;
\r
680 fCuts[kgoodId] = value;
\r
682 cout << "Error:: First value of cut string is wrong, aborting!!" << endl;
\r
688 case kededxSigmaITSCut:
\r
689 if( SetITSdEdxCutElectronLine(value)) { //NOTE SetITSdEdxCutElectronLine: To be implemented
\r
690 fCuts[kededxSigmaITSCut] = value;
\r
691 UpdateCutString(cutID, value);
\r
693 } else return kFALSE;
\r
695 case kededxSigmaTPCCut:
\r
696 if( SetTPCdEdxCutElectronLine(value)) { //NOTE SetITSdEdxCutElectronLine: To be implemented
\r
697 fCuts[kededxSigmaTPCCut] = value;
\r
698 UpdateCutString(cutID, value);
\r
700 } else return kFALSE;
\r
702 case kpidedxSigmaTPCCut:
\r
703 if( SetTPCdEdxCutPionLine(value)) { //NOTE SetITSdEdxCutPionLine: To be implemented
\r
704 fCuts[kpidedxSigmaTPCCut] = value;
\r
705 UpdateCutString(cutID, value);
\r
707 } else return kFALSE;
\r
709 case kpiMinMomdedxSigmaTPCCut:
\r
710 if( SetMinMomPiondEdxTPCCut(value)) {
\r
711 fCuts[kpiMinMomdedxSigmaTPCCut] = value;
\r
712 UpdateCutString(cutID, value);
\r
714 } else return kFALSE;
\r
716 case kpiMaxMomdedxSigmaTPCCut:
\r
717 if( SetMaxMomPiondEdxTPCCut(value)) {
\r
718 fCuts[kpiMaxMomdedxSigmaTPCCut] = value;
\r
719 UpdateCutString(cutID, value);
\r
721 } else return kFALSE;
\r
723 case kLowPRejectionSigmaCut:
\r
724 if( SetLowPRejectionCuts(value) ) {
\r
725 fCuts[kLowPRejectionSigmaCut] = value;
\r
726 UpdateCutString(cutID, value);
\r
728 } else return kFALSE;
\r
731 case kTOFelectronPID:
\r
732 if( SetTOFElectronPIDCut(value)) {
\r
733 fCuts[kTOFelectronPID] = value;
\r
734 UpdateCutString(cutID, value);
\r
736 } else return kFALSE;
\r
738 if( SetITSClusterCut(value) ) {
\r
739 fCuts[kclsITSCut] = value;
\r
740 UpdateCutString(cutID, value);
\r
742 } else return kFALSE;
\r
744 if( SetTPCClusterCut(value)) {
\r
745 fCuts[kclsTPCCut] = value;
\r
746 UpdateCutString(cutID, value);
\r
748 } else return kFALSE;
\r
751 if( SetEtaCut(value)) {
\r
752 fCuts[ketaCut] = value;
\r
753 UpdateCutString(cutID, value);
\r
755 } else return kFALSE;
\r
757 if( SetPsiPairCut(value)) {
\r
758 fCuts[kPsiPair] = value;
\r
759 UpdateCutString(cutID, value);
\r
761 } else return kFALSE;
\r
763 case kRejectSharedElecGamma:
\r
764 if( SetRejectSharedElecGamma(value)) {
\r
765 fCuts[kRejectSharedElecGamma] = value;
\r
766 UpdateCutString(cutID, value);
\r
768 } else return kFALSE;
\r
770 case kBackgroundScheme:
\r
771 if( SetBackgroundScheme(value)) {
\r
772 fCuts[kBackgroundScheme] = value;
\r
773 UpdateCutString(cutID, value);
\r
775 } else return kFALSE;
\r
777 case kNumberOfRotations:
\r
778 if( SetNumberOfRotations(value)) {
\r
779 fCuts[kNumberOfRotations] = value;
\r
780 UpdateCutString(cutID, value);
\r
782 } else return kFALSE;
\r
785 cout << "Error:: Cut id out of range"<< endl;
\r
789 cout << "Error:: Cut id " << cutID << " not recognized "<< endl;
\r
796 ///________________________________________________________________________
\r
798 void AliDalitzElectronCuts::PrintCuts() {
\r
799 // Print out current Cut Selection
\r
800 for(Int_t ic = 0; ic < kNCuts; ic++) {
\r
801 printf("%-30s : %d \n", fgkCutNames[ic], fCuts[ic]);
\r
806 ///________________________________________________________________________
\r
807 Bool_t AliDalitzElectronCuts::SetITSdEdxCutElectronLine(Int_t ededxSigmaCut)
\r
810 switch(ededxSigmaCut){
\r
813 fDodEdxSigmaITSCut = kFALSE;
\r
814 fPIDnSigmaBelowElectronLineITS=-100;
\r
815 fPIDnSigmaAboveElectronLineITS= 100;
\r
818 fDodEdxSigmaITSCut = kTRUE;
\r
819 fPIDnSigmaBelowElectronLineITS=-10;
\r
820 fPIDnSigmaAboveElectronLineITS=10;
\r
823 fDodEdxSigmaITSCut = kTRUE;
\r
824 fPIDnSigmaBelowElectronLineITS=-6;
\r
825 fPIDnSigmaAboveElectronLineITS=7;
\r
828 fDodEdxSigmaITSCut = kTRUE;
\r
829 fPIDnSigmaBelowElectronLineITS=-5;
\r
830 fPIDnSigmaAboveElectronLineITS=5;
\r
833 fDodEdxSigmaITSCut = kTRUE;
\r
834 fPIDnSigmaBelowElectronLineITS=-4;
\r
835 fPIDnSigmaAboveElectronLineITS=5;
\r
838 fDodEdxSigmaITSCut = kTRUE;
\r
839 fPIDnSigmaBelowElectronLineITS=-3;
\r
840 fPIDnSigmaAboveElectronLineITS=5;
\r
843 fDodEdxSigmaITSCut = kTRUE;
\r
844 fPIDnSigmaBelowElectronLineITS=-4;
\r
845 fPIDnSigmaAboveElectronLineITS=4;
\r
848 fDodEdxSigmaITSCut = kTRUE;
\r
849 fPIDnSigmaBelowElectronLineITS=-2.5;
\r
850 fPIDnSigmaAboveElectronLineITS=4;
\r
853 fDodEdxSigmaITSCut = kTRUE;
\r
854 fPIDnSigmaBelowElectronLineITS=-2;
\r
855 fPIDnSigmaAboveElectronLineITS=3.5;
\r
858 cout<<"Warning: ITSdEdxCutElectronLine not defined"<<ededxSigmaCut<<endl;
\r
865 ///________________________________________________________________________
\r
866 Bool_t AliDalitzElectronCuts::SetTPCdEdxCutElectronLine(Int_t ededxSigmaCut)
\r
868 switch(ededxSigmaCut){
\r
870 case 0: fDodEdxSigmaTPCCut = kFALSE;
\r
871 fPIDnSigmaBelowElectronLineTPC=-10;
\r
872 fPIDnSigmaAboveElectronLineTPC=10;
\r
875 fDodEdxSigmaTPCCut = kTRUE;
\r
876 fPIDnSigmaBelowElectronLineTPC=-10;
\r
877 fPIDnSigmaAboveElectronLineTPC=10;
\r
880 fDodEdxSigmaTPCCut = kTRUE;
\r
881 fPIDnSigmaBelowElectronLineTPC=-6;
\r
882 fPIDnSigmaAboveElectronLineTPC=7;
\r
885 fDodEdxSigmaTPCCut = kTRUE;
\r
886 fPIDnSigmaBelowElectronLineTPC=-5;
\r
887 fPIDnSigmaAboveElectronLineTPC=5;
\r
890 fDodEdxSigmaTPCCut = kTRUE;
\r
891 fPIDnSigmaBelowElectronLineTPC=-4;
\r
892 fPIDnSigmaAboveElectronLineTPC=5;
\r
895 fDodEdxSigmaTPCCut = kTRUE;
\r
896 fPIDnSigmaBelowElectronLineTPC=-3;
\r
897 fPIDnSigmaAboveElectronLineTPC=5;
\r
900 fDodEdxSigmaTPCCut = kTRUE;
\r
901 fPIDnSigmaBelowElectronLineTPC=-4;
\r
902 fPIDnSigmaAboveElectronLineTPC=4;
\r
905 fDodEdxSigmaTPCCut = kTRUE;
\r
906 fPIDnSigmaBelowElectronLineTPC=-2.5;
\r
907 fPIDnSigmaAboveElectronLineTPC=4;
\r
910 fDodEdxSigmaTPCCut = kTRUE;
\r
911 fPIDnSigmaBelowElectronLineTPC=-2;
\r
912 fPIDnSigmaAboveElectronLineTPC=3.5;
\r
915 cout<<"Warning: TPCdEdxCutElectronLine not defined"<<ededxSigmaCut<<endl;
\r
922 ///________________________________________________________________________
\r
923 Bool_t AliDalitzElectronCuts::SetTPCdEdxCutPionLine(Int_t pidedxSigmaCut)
\r
926 switch(pidedxSigmaCut){
\r
928 case 0: fPIDnSigmaAbovePionLineTPC= 0;
\r
929 fPIDnSigmaAbovePionLineTPCHighPt=-100;
\r
932 fPIDnSigmaAbovePionLineTPC=-10;
\r
933 fPIDnSigmaAbovePionLineTPCHighPt=-10;
\r
936 fPIDnSigmaAbovePionLineTPC=-1;
\r
937 fPIDnSigmaAbovePionLineTPCHighPt=-10;
\r
940 fPIDnSigmaAbovePionLineTPC=0;
\r
941 fPIDnSigmaAbovePionLineTPCHighPt=-10;
\r
944 fPIDnSigmaAbovePionLineTPC=1;
\r
945 fPIDnSigmaAbovePionLineTPCHighPt=-10;
\r
948 fPIDnSigmaAbovePionLineTPC=2.;
\r
949 fPIDnSigmaAbovePionLineTPCHighPt=-10;
\r
952 fPIDnSigmaAbovePionLineTPC=2.5;
\r
953 fPIDnSigmaAbovePionLineTPCHighPt=-10;
\r
956 fPIDnSigmaAbovePionLineTPC=3.0; // We need a bit less tight cut on dE/dx
\r
957 fPIDnSigmaAbovePionLineTPCHighPt=-10;
\r
960 fPIDnSigmaAbovePionLineTPC=3.5;
\r
961 fPIDnSigmaAbovePionLineTPCHighPt=-10;
\r
964 fPIDnSigmaAbovePionLineTPC=1.5;
\r
965 fPIDnSigmaAbovePionLineTPCHighPt=-1.0;
\r
968 cout<<"Warning: pidedxSigmaCut not defined "<<pidedxSigmaCut<<endl;
\r
974 ///________________________________________________________________________
\r
975 Bool_t AliDalitzElectronCuts::SetMinMomPiondEdxTPCCut(Int_t piMomdedxSigmaCut)
\r
977 switch(piMomdedxSigmaCut){
\r
979 case 0: fPIDMinPnSigmaAbovePionLineTPC=0.;
\r
981 case 1: // 50.0 GeV
\r
982 fPIDMinPnSigmaAbovePionLineTPC=50.;
\r
984 case 2: // 20.0 GeV
\r
985 fPIDMinPnSigmaAbovePionLineTPC=20.;
\r
988 fPIDMinPnSigmaAbovePionLineTPC=1.5;
\r
991 fPIDMinPnSigmaAbovePionLineTPC=1.;
\r
994 fPIDMinPnSigmaAbovePionLineTPC=0.5;
\r
997 fPIDMinPnSigmaAbovePionLineTPC=0.4;
\r
1000 fPIDMinPnSigmaAbovePionLineTPC=0.3;
\r
1002 case 8: // 0.25 GeV
\r
1003 fPIDMinPnSigmaAbovePionLineTPC=0.25;
\r
1006 cout<<"Warning: piMomdedxSigmaCut not defined "<<piMomdedxSigmaCut<<endl;
\r
1011 ///________________________________________________________________________
\r
1012 Bool_t AliDalitzElectronCuts::SetITSClusterCut(Int_t clsITSCut){
\r
1015 if( !fesdTrackCuts ) {
\r
1017 cout<<"Warning: AliESDtrackCut is not initialized "<<endl;
\r
1021 switch(clsITSCut){
\r
1023 case 0: fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kOff);
\r
1025 case 1: fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kFirst);
\r
1026 break; //1 hit first layer of SPD
\r
1027 case 2: fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
\r
1028 break; //1 hit in any layer of SPD
\r
1029 case 3: fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kFirst);
\r
1030 fesdTrackCuts->SetMinNClustersITS(4);
\r
1031 // 4 hits in total in the ITS. At least 1 hit in the first layer of SPD
\r
1033 case 4: fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
\r
1034 fesdTrackCuts->SetMinNClustersITS(3);
\r
1035 // 3 hits in total in the ITS. At least 1 hit in any layer of SPD
\r
1038 cout<<"Warning: clsITSCut not defined "<<clsITSCut<<endl;
\r
1045 ///________________________________________________________________________
\r
1046 Bool_t AliDalitzElectronCuts::SetTPCClusterCut(Int_t clsTPCCut)
\r
1048 switch(clsTPCCut){
\r
1061 case 4: // 0% of findable clusters
\r
1062 fMinClsTPCToF= 0.0;
\r
1063 fUseCorrectedTPCClsInfo=0;
\r
1065 case 5: // 35% of findable clusters
\r
1066 fMinClsTPCToF= 0.35;
\r
1067 fUseCorrectedTPCClsInfo=0;
\r
1069 case 6: // 60% of findable clusters
\r
1070 fMinClsTPCToF= 0.6;
\r
1071 fUseCorrectedTPCClsInfo=0;
\r
1073 case 7: // 70% of findable clusters
\r
1074 fMinClsTPCToF= 0.7;
\r
1075 fUseCorrectedTPCClsInfo=0;
\r
1078 cout<<"Warning: clsTPCCut not defined "<<clsTPCCut<<endl;
\r
1084 ///________________________________________________________________________
\r
1085 Bool_t AliDalitzElectronCuts::SetEtaCut(Int_t etaCut)
\r
1089 case 0: fEtaCut = 100.;
\r
1107 cout<<"Warning: EtaCut not defined "<<etaCut<<endl;
\r
1113 ///________________________________________________________________________
\r
1114 Bool_t AliDalitzElectronCuts::SetMaxMomPiondEdxTPCCut(Int_t piMaxMomdedxSigmaCut)
\r
1116 switch(piMaxMomdedxSigmaCut){
\r
1119 fPIDMaxPnSigmaAbovePionLineTPC=0.;
\r
1121 case 1: // 100. GeV
\r
1122 fPIDMaxPnSigmaAbovePionLineTPC=100.;
\r
1125 fPIDMaxPnSigmaAbovePionLineTPC=5.;
\r
1128 fPIDMaxPnSigmaAbovePionLineTPC=4.;
\r
1130 case 4: // 3.5 GeV
\r
1131 fPIDMaxPnSigmaAbovePionLineTPC=3.5;
\r
1134 fPIDMaxPnSigmaAbovePionLineTPC=3.;
\r
1137 cout<<"Warning: piMaxMomdedxSigmaCut not defined "<<piMaxMomdedxSigmaCut<<endl;
\r
1143 ///________________________________________________________________________
\r
1144 Bool_t AliDalitzElectronCuts::SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut)
\r
1146 switch(LowPRejectionSigmaCut){
\r
1148 fDoKaonRejectionLowP=kFALSE;
\r
1149 fDoProtonRejectionLowP=kFALSE;
\r
1150 fDoPionRejectionLowP=kFALSE;
\r
1151 fPIDnSigmaAtLowPAroundKaonLine=0;
\r
1152 fPIDnSigmaAtLowPAroundProtonLine=0;
\r
1153 fPIDnSigmaAtLowPAroundPionLine=0;
\r
1156 fDoKaonRejectionLowP=kTRUE;
\r
1157 fDoProtonRejectionLowP=kTRUE;
\r
1158 fDoPionRejectionLowP=kTRUE;
\r
1159 fPIDnSigmaAtLowPAroundKaonLine=0.5;
\r
1160 fPIDnSigmaAtLowPAroundProtonLine=0.5;
\r
1161 fPIDnSigmaAtLowPAroundPionLine=0.5;
\r
1164 fDoKaonRejectionLowP=kTRUE;
\r
1165 fDoProtonRejectionLowP=kTRUE;
\r
1166 fDoPionRejectionLowP=kTRUE;
\r
1167 fPIDnSigmaAtLowPAroundKaonLine=1;
\r
1168 fPIDnSigmaAtLowPAroundProtonLine=1;
\r
1169 fPIDnSigmaAtLowPAroundPionLine=1;
\r
1172 fDoKaonRejectionLowP=kTRUE;
\r
1173 fDoProtonRejectionLowP=kTRUE;
\r
1174 fDoPionRejectionLowP=kTRUE;
\r
1175 fPIDnSigmaAtLowPAroundKaonLine=1.5;
\r
1176 fPIDnSigmaAtLowPAroundProtonLine=1.5;
\r
1177 fPIDnSigmaAtLowPAroundPionLine=1.5;
\r
1180 fDoKaonRejectionLowP=kTRUE;
\r
1181 fDoProtonRejectionLowP=kTRUE;
\r
1182 fDoPionRejectionLowP=kTRUE;
\r
1183 fPIDnSigmaAtLowPAroundKaonLine=2.0;
\r
1184 fPIDnSigmaAtLowPAroundProtonLine=2.0;
\r
1185 fPIDnSigmaAtLowPAroundPionLine=2.0;
\r
1188 fDoKaonRejectionLowP=kTRUE;
\r
1189 fDoProtonRejectionLowP=kTRUE;
\r
1190 fDoPionRejectionLowP=kTRUE;
\r
1191 fPIDnSigmaAtLowPAroundKaonLine=2.0;
\r
1192 fPIDnSigmaAtLowPAroundProtonLine=2.0;
\r
1193 fPIDnSigmaAtLowPAroundPionLine=2.5;
\r
1196 fDoKaonRejectionLowP=kTRUE;
\r
1197 fDoProtonRejectionLowP=kTRUE;
\r
1198 fDoPionRejectionLowP=kTRUE;
\r
1199 fPIDnSigmaAtLowPAroundKaonLine=0.;
\r
1200 fPIDnSigmaAtLowPAroundProtonLine=0.;
\r
1201 fPIDnSigmaAtLowPAroundPionLine=2.;
\r
1204 fDoKaonRejectionLowP=kFALSE;
\r
1205 fDoProtonRejectionLowP=kFALSE;
\r
1206 fDoPionRejectionLowP=kTRUE;
\r
1207 fPIDnSigmaAtLowPAroundKaonLine=0.0;
\r
1208 fPIDnSigmaAtLowPAroundProtonLine=0.0;
\r
1209 fPIDnSigmaAtLowPAroundPionLine=1.0;
\r
1212 fDoKaonRejectionLowP=kFALSE;
\r
1213 fDoProtonRejectionLowP=kFALSE;
\r
1214 fDoPionRejectionLowP=kTRUE;
\r
1215 fPIDnSigmaAtLowPAroundKaonLine=0.;
\r
1216 fPIDnSigmaAtLowPAroundProtonLine=0.;
\r
1217 fPIDnSigmaAtLowPAroundPionLine=0.5;
\r
1220 cout<<"Warning: LowPRejectionSigmaCut not defined "<<LowPRejectionSigmaCut<<endl;
\r
1226 ///________________________________________________________________________
\r
1227 Bool_t AliDalitzElectronCuts::SetTOFElectronPIDCut(Int_t TOFelectronPID){
\r
1229 switch(TOFelectronPID){ // RRnewTOF start //////////////////////////////////////////////////////////////////////////
\r
1231 fRequireTOF = kFALSE;
\r
1232 fUseTOFpid = kFALSE;
\r
1233 fTofPIDnSigmaBelowElectronLine=-100;
\r
1234 fTofPIDnSigmaAboveElectronLine=100;
\r
1237 fRequireTOF = kFALSE;
\r
1238 fUseTOFpid = kTRUE;
\r
1239 fTofPIDnSigmaBelowElectronLine=-7;
\r
1240 fTofPIDnSigmaAboveElectronLine=7;
\r
1243 fRequireTOF = kFALSE;
\r
1244 fUseTOFpid = kTRUE;
\r
1245 fTofPIDnSigmaBelowElectronLine=-5;
\r
1246 fTofPIDnSigmaAboveElectronLine=5;
\r
1249 fRequireTOF = kFALSE;
\r
1250 fUseTOFpid = kTRUE;
\r
1251 fTofPIDnSigmaBelowElectronLine=-3;
\r
1252 fTofPIDnSigmaAboveElectronLine=5;
\r
1255 fRequireTOF = kFALSE;
\r
1256 fUseTOFpid = kTRUE;
\r
1257 fTofPIDnSigmaBelowElectronLine=-2;
\r
1258 fTofPIDnSigmaAboveElectronLine=3;
\r
1260 case 5: // -3, 3 TOF mandatory
\r
1261 fRequireTOF = kTRUE;
\r
1262 fUseTOFpid = kTRUE;
\r
1263 fTofPIDnSigmaBelowElectronLine= -3;
\r
1264 fTofPIDnSigmaAboveElectronLine= 3;
\r
1267 cout<<"Warning: TOFElectronCut not defined "<<TOFelectronPID<<endl;
\r
1269 } //////////////////////// RRnewTOF end //////////////////////////////////////////////////////////////////////////
\r
1272 ///_______________________________________________________________________________
\r
1274 Bool_t AliDalitzElectronCuts::SetPsiPairCut(Int_t psiCut) {
\r
1279 fDoPsiPairCut = kFALSE;
\r
1280 fPsiPairCut = 10000.; //
\r
1281 fDeltaPhiCutMin = -1000.;
\r
1282 fDeltaPhiCutMax = 1000.;
\r
1286 fDoPsiPairCut = kTRUE;
\r
1287 fPsiPairCut = 0.45; // Standard
\r
1288 fDeltaPhiCutMin = 0.;
\r
1289 fDeltaPhiCutMax = 0.12;
\r
1292 cout<<"Warning: PsiPairCut not defined "<<fPsiPairCut<<endl;
\r
1299 ///_______________________________________________________________________________
\r
1300 Bool_t AliDalitzElectronCuts::SetRejectSharedElecGamma(Int_t RCut) {
\r
1305 fDoRejectSharedElecGamma = kFALSE;
\r
1306 fRadiusCut = 10000; //
\r
1309 fDoRejectSharedElecGamma = kTRUE;
\r
1310 fRadiusCut = 2.0; // cm
\r
1313 fDoRejectSharedElecGamma = kTRUE;
\r
1314 fRadiusCut = 3.0; // Standard
\r
1317 fDoRejectSharedElecGamma = kTRUE;
\r
1318 fRadiusCut = 4.0; //
\r
1321 fDoRejectSharedElecGamma = kTRUE;
\r
1322 fRadiusCut = 5.0; //
\r
1325 fDoRejectSharedElecGamma = kTRUE;
\r
1326 fRadiusCut = 10.0; //
\r
1329 fDoRejectSharedElecGamma = kTRUE;
\r
1330 fRadiusCut = 15.0; //
\r
1333 cout<<"Warning: PsiPairCut not defined "<<fDoRejectSharedElecGamma<<endl;
\r
1339 ///__________________________________________________________________________
\r
1340 Bool_t AliDalitzElectronCuts::SetBackgroundScheme(Int_t BackgroundScheme){
\r
1343 switch(BackgroundScheme){
\r
1345 case 0: //Rotation
\r
1347 fUseTrackMultiplicityForBG = kFALSE;
\r
1349 case 1: // mixed event with V0 multiplicity
\r
1351 fUseTrackMultiplicityForBG = kFALSE;
\r
1353 case 2: // mixed event with track multiplicity
\r
1354 fUseTrackMultiplicityForBG = kTRUE;
\r
1357 case 3: //Rotation
\r
1358 fUseTrackMultiplicityForBG = kFALSE;
\r
1361 case 4: //Rotation
\r
1362 fUseTrackMultiplicityForBG = kTRUE;
\r
1365 case 5: fUseTrackMultiplicityForBG = kTRUE;
\r
1370 cout<<"Warning: BackgroundScheme not defined "<<BackgroundScheme<<endl;
\r
1376 ///________________________________________________________________________
\r
1377 Bool_t AliDalitzElectronCuts::SetNumberOfRotations(Int_t NumberOfRotations)
\r
1379 switch(NumberOfRotations){
\r
1381 fnumberOfRotationEventsForBG = 5;
\r
1384 fnumberOfRotationEventsForBG = 10;
\r
1387 fnumberOfRotationEventsForBG = 15;
\r
1390 fnumberOfRotationEventsForBG = 20;
\r
1393 fnumberOfRotationEventsForBG = 2;
\r
1396 fnumberOfRotationEventsForBG = 50;
\r
1399 fnumberOfRotationEventsForBG = 80;
\r
1402 fnumberOfRotationEventsForBG = 100;
\r
1405 cout<<"Warning: NumberOfRotations not defined "<<NumberOfRotations<<endl;
\r
1410 ///________________________________________________________________________
\r
1411 TString AliDalitzElectronCuts::GetCutNumber(){
\r
1412 // returns TString with current cut number
\r
1413 TString a(kNCuts);
\r
1414 for(Int_t ii=0;ii<kNCuts;ii++){
\r
1415 a.Append(Form("%d",fCuts[ii]));
\r
1421 ///________________________________________________________________________
\r
1422 AliDalitzElectronCuts* AliDalitzElectronCuts::GetStandardCuts2010PbPb(){
\r
1423 //Create and return standard 2010 PbPb cuts
\r
1424 AliDalitzElectronCuts *cuts=new AliDalitzElectronCuts("StandardCuts2010PbPb","StandardCuts2010PbPb");
\r
1425 if(!cuts->InitializeCutsFromCutString("9069640364102")){
\r
1426 cout<<"Warning: Initialization of Standardcuts2010PbPb failed"<<endl;}
\r
1430 ///________________________________________________________________________
\r
1431 AliDalitzElectronCuts* AliDalitzElectronCuts::GetStandardCuts2010pp(){
\r
1432 //Create and return standard 2010 PbPb cuts
\r
1433 AliDalitzElectronCuts *cuts=new AliDalitzElectronCuts("StandardCuts2010pp","StandardCuts2010pp");
\r
1435 if(!cuts->InitializeCutsFromCutString("9069640364102")){
\r
1436 cout<<"Warning: Initialization of Standardcuts2010pp failed"<<endl;}
\r