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
1108 cout<<"Warning: EtaCut not defined "<<etaCut<<endl;
\r
1114 ///________________________________________________________________________
\r
1115 Bool_t AliDalitzElectronCuts::SetMaxMomPiondEdxTPCCut(Int_t piMaxMomdedxSigmaCut)
\r
1117 switch(piMaxMomdedxSigmaCut){
\r
1120 fPIDMaxPnSigmaAbovePionLineTPC=0.;
\r
1122 case 1: // 100. GeV
\r
1123 fPIDMaxPnSigmaAbovePionLineTPC=100.;
\r
1126 fPIDMaxPnSigmaAbovePionLineTPC=5.;
\r
1129 fPIDMaxPnSigmaAbovePionLineTPC=4.;
\r
1131 case 4: // 3.5 GeV
\r
1132 fPIDMaxPnSigmaAbovePionLineTPC=3.5;
\r
1135 fPIDMaxPnSigmaAbovePionLineTPC=3.;
\r
1138 cout<<"Warning: piMaxMomdedxSigmaCut not defined "<<piMaxMomdedxSigmaCut<<endl;
\r
1144 ///________________________________________________________________________
\r
1145 Bool_t AliDalitzElectronCuts::SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut)
\r
1147 switch(LowPRejectionSigmaCut){
\r
1149 fDoKaonRejectionLowP=kFALSE;
\r
1150 fDoProtonRejectionLowP=kFALSE;
\r
1151 fDoPionRejectionLowP=kFALSE;
\r
1152 fPIDnSigmaAtLowPAroundKaonLine=0;
\r
1153 fPIDnSigmaAtLowPAroundProtonLine=0;
\r
1154 fPIDnSigmaAtLowPAroundPionLine=0;
\r
1157 fDoKaonRejectionLowP=kTRUE;
\r
1158 fDoProtonRejectionLowP=kTRUE;
\r
1159 fDoPionRejectionLowP=kTRUE;
\r
1160 fPIDnSigmaAtLowPAroundKaonLine=0.5;
\r
1161 fPIDnSigmaAtLowPAroundProtonLine=0.5;
\r
1162 fPIDnSigmaAtLowPAroundPionLine=0.5;
\r
1165 fDoKaonRejectionLowP=kTRUE;
\r
1166 fDoProtonRejectionLowP=kTRUE;
\r
1167 fDoPionRejectionLowP=kTRUE;
\r
1168 fPIDnSigmaAtLowPAroundKaonLine=1;
\r
1169 fPIDnSigmaAtLowPAroundProtonLine=1;
\r
1170 fPIDnSigmaAtLowPAroundPionLine=1;
\r
1173 fDoKaonRejectionLowP=kTRUE;
\r
1174 fDoProtonRejectionLowP=kTRUE;
\r
1175 fDoPionRejectionLowP=kTRUE;
\r
1176 fPIDnSigmaAtLowPAroundKaonLine=1.5;
\r
1177 fPIDnSigmaAtLowPAroundProtonLine=1.5;
\r
1178 fPIDnSigmaAtLowPAroundPionLine=1.5;
\r
1181 fDoKaonRejectionLowP=kTRUE;
\r
1182 fDoProtonRejectionLowP=kTRUE;
\r
1183 fDoPionRejectionLowP=kTRUE;
\r
1184 fPIDnSigmaAtLowPAroundKaonLine=2.0;
\r
1185 fPIDnSigmaAtLowPAroundProtonLine=2.0;
\r
1186 fPIDnSigmaAtLowPAroundPionLine=2.0;
\r
1189 fDoKaonRejectionLowP=kTRUE;
\r
1190 fDoProtonRejectionLowP=kTRUE;
\r
1191 fDoPionRejectionLowP=kTRUE;
\r
1192 fPIDnSigmaAtLowPAroundKaonLine=2.0;
\r
1193 fPIDnSigmaAtLowPAroundProtonLine=2.0;
\r
1194 fPIDnSigmaAtLowPAroundPionLine=2.5;
\r
1197 fDoKaonRejectionLowP=kTRUE;
\r
1198 fDoProtonRejectionLowP=kTRUE;
\r
1199 fDoPionRejectionLowP=kTRUE;
\r
1200 fPIDnSigmaAtLowPAroundKaonLine=0.;
\r
1201 fPIDnSigmaAtLowPAroundProtonLine=0.;
\r
1202 fPIDnSigmaAtLowPAroundPionLine=2.;
\r
1205 fDoKaonRejectionLowP=kFALSE;
\r
1206 fDoProtonRejectionLowP=kFALSE;
\r
1207 fDoPionRejectionLowP=kTRUE;
\r
1208 fPIDnSigmaAtLowPAroundKaonLine=0.0;
\r
1209 fPIDnSigmaAtLowPAroundProtonLine=0.0;
\r
1210 fPIDnSigmaAtLowPAroundPionLine=1.0;
\r
1213 fDoKaonRejectionLowP=kFALSE;
\r
1214 fDoProtonRejectionLowP=kFALSE;
\r
1215 fDoPionRejectionLowP=kTRUE;
\r
1216 fPIDnSigmaAtLowPAroundKaonLine=0.;
\r
1217 fPIDnSigmaAtLowPAroundProtonLine=0.;
\r
1218 fPIDnSigmaAtLowPAroundPionLine=0.5;
\r
1221 cout<<"Warning: LowPRejectionSigmaCut not defined "<<LowPRejectionSigmaCut<<endl;
\r
1227 ///________________________________________________________________________
\r
1228 Bool_t AliDalitzElectronCuts::SetTOFElectronPIDCut(Int_t TOFelectronPID){
\r
1230 switch(TOFelectronPID){ // RRnewTOF start //////////////////////////////////////////////////////////////////////////
\r
1232 fRequireTOF = kFALSE;
\r
1233 fUseTOFpid = kFALSE;
\r
1234 fTofPIDnSigmaBelowElectronLine=-100;
\r
1235 fTofPIDnSigmaAboveElectronLine=100;
\r
1238 fRequireTOF = kFALSE;
\r
1239 fUseTOFpid = kTRUE;
\r
1240 fTofPIDnSigmaBelowElectronLine=-7;
\r
1241 fTofPIDnSigmaAboveElectronLine=7;
\r
1244 fRequireTOF = kFALSE;
\r
1245 fUseTOFpid = kTRUE;
\r
1246 fTofPIDnSigmaBelowElectronLine=-5;
\r
1247 fTofPIDnSigmaAboveElectronLine=5;
\r
1250 fRequireTOF = kFALSE;
\r
1251 fUseTOFpid = kTRUE;
\r
1252 fTofPIDnSigmaBelowElectronLine=-3;
\r
1253 fTofPIDnSigmaAboveElectronLine=5;
\r
1256 fRequireTOF = kFALSE;
\r
1257 fUseTOFpid = kTRUE;
\r
1258 fTofPIDnSigmaBelowElectronLine=-2;
\r
1259 fTofPIDnSigmaAboveElectronLine=3;
\r
1261 case 5: // -3, 3 TOF mandatory
\r
1262 fRequireTOF = kTRUE;
\r
1263 fUseTOFpid = kTRUE;
\r
1264 fTofPIDnSigmaBelowElectronLine= -3;
\r
1265 fTofPIDnSigmaAboveElectronLine= 3;
\r
1268 cout<<"Warning: TOFElectronCut not defined "<<TOFelectronPID<<endl;
\r
1270 } //////////////////////// RRnewTOF end //////////////////////////////////////////////////////////////////////////
\r
1273 ///_______________________________________________________________________________
\r
1275 Bool_t AliDalitzElectronCuts::SetPsiPairCut(Int_t psiCut) {
\r
1280 fDoPsiPairCut = kFALSE;
\r
1281 fPsiPairCut = 10000.; //
\r
1282 fDeltaPhiCutMin = -1000.;
\r
1283 fDeltaPhiCutMax = 1000.;
\r
1287 fDoPsiPairCut = kTRUE;
\r
1288 fPsiPairCut = 0.45; // Standard
\r
1289 fDeltaPhiCutMin = 0.;
\r
1290 fDeltaPhiCutMax = 0.12;
\r
1293 cout<<"Warning: PsiPairCut not defined "<<fPsiPairCut<<endl;
\r
1300 ///_______________________________________________________________________________
\r
1301 Bool_t AliDalitzElectronCuts::SetRejectSharedElecGamma(Int_t RCut) {
\r
1306 fDoRejectSharedElecGamma = kFALSE;
\r
1307 fRadiusCut = 10000; //
\r
1310 fDoRejectSharedElecGamma = kTRUE;
\r
1311 fRadiusCut = 2.0; // cm
\r
1314 fDoRejectSharedElecGamma = kTRUE;
\r
1315 fRadiusCut = 3.0; // Standard
\r
1318 fDoRejectSharedElecGamma = kTRUE;
\r
1319 fRadiusCut = 4.0; //
\r
1322 fDoRejectSharedElecGamma = kTRUE;
\r
1323 fRadiusCut = 5.0; //
\r
1326 fDoRejectSharedElecGamma = kTRUE;
\r
1327 fRadiusCut = 10.0; //
\r
1330 fDoRejectSharedElecGamma = kTRUE;
\r
1331 fRadiusCut = 15.0; //
\r
1334 cout<<"Warning: PsiPairCut not defined "<<fDoRejectSharedElecGamma<<endl;
\r
1340 ///__________________________________________________________________________
\r
1341 Bool_t AliDalitzElectronCuts::SetBackgroundScheme(Int_t BackgroundScheme){
\r
1344 switch(BackgroundScheme){
\r
1346 case 0: //Rotation
\r
1348 fUseTrackMultiplicityForBG = kFALSE;
\r
1350 case 1: // mixed event with V0 multiplicity
\r
1352 fUseTrackMultiplicityForBG = kFALSE;
\r
1354 case 2: // mixed event with track multiplicity
\r
1355 fUseTrackMultiplicityForBG = kTRUE;
\r
1358 case 3: //Rotation
\r
1359 fUseTrackMultiplicityForBG = kFALSE;
\r
1362 case 4: //Rotation
\r
1363 fUseTrackMultiplicityForBG = kTRUE;
\r
1366 case 5: fUseTrackMultiplicityForBG = kTRUE;
\r
1371 cout<<"Warning: BackgroundScheme not defined "<<BackgroundScheme<<endl;
\r
1377 ///________________________________________________________________________
\r
1378 Bool_t AliDalitzElectronCuts::SetNumberOfRotations(Int_t NumberOfRotations)
\r
1380 switch(NumberOfRotations){
\r
1382 fnumberOfRotationEventsForBG = 5;
\r
1385 fnumberOfRotationEventsForBG = 10;
\r
1388 fnumberOfRotationEventsForBG = 15;
\r
1391 fnumberOfRotationEventsForBG = 20;
\r
1394 fnumberOfRotationEventsForBG = 2;
\r
1397 fnumberOfRotationEventsForBG = 50;
\r
1400 fnumberOfRotationEventsForBG = 80;
\r
1403 fnumberOfRotationEventsForBG = 100;
\r
1406 cout<<"Warning: NumberOfRotations not defined "<<NumberOfRotations<<endl;
\r
1411 ///________________________________________________________________________
\r
1412 TString AliDalitzElectronCuts::GetCutNumber(){
\r
1413 // returns TString with current cut number
\r
1414 TString a(kNCuts);
\r
1415 for(Int_t ii=0;ii<kNCuts;ii++){
\r
1416 a.Append(Form("%d",fCuts[ii]));
\r
1422 ///________________________________________________________________________
\r
1423 AliDalitzElectronCuts* AliDalitzElectronCuts::GetStandardCuts2010PbPb(){
\r
1424 //Create and return standard 2010 PbPb cuts
\r
1425 AliDalitzElectronCuts *cuts=new AliDalitzElectronCuts("StandardCuts2010PbPb","StandardCuts2010PbPb");
\r
1426 if(!cuts->InitializeCutsFromCutString("9069640364102")){
\r
1427 cout<<"Warning: Initialization of Standardcuts2010PbPb failed"<<endl;}
\r
1431 ///________________________________________________________________________
\r
1432 AliDalitzElectronCuts* AliDalitzElectronCuts::GetStandardCuts2010pp(){
\r
1433 //Create and return standard 2010 PbPb cuts
\r
1434 AliDalitzElectronCuts *cuts=new AliDalitzElectronCuts("StandardCuts2010pp","StandardCuts2010pp");
\r
1436 if(!cuts->InitializeCutsFromCutString("9069640364102")){
\r
1437 cout<<"Warning: Initialization of Standardcuts2010pp failed"<<endl;}
\r