"RejectSharedElecGamma",\r
"BackgroundScheme",\r
"NumberOfRotations",\r
+"PtCut",\r
+"DCAcut",\r
+"MassCut",\r
};\r
\r
//________________________________________________________________________\r
fPIDResponse(NULL),\r
fesdTrackCuts(NULL),\r
fEtaCut(0.9),\r
+ fEtaShift(0.0),\r
+ fDoEtaCut(kFALSE),\r
+ fPtCut(0.0),\r
fRadiusCut(1000.0),\r
fPsiPairCut(0.45),\r
fDeltaPhiCutMin(0.),\r
fUseTrackMultiplicityForBG(kFALSE),\r
fBKGMethod(0),\r
fnumberOfRotationEventsForBG(0),\r
+ fDoMassCut(kFALSE),\r
+ fMassCut(999.),\r
fCutString(NULL),\r
hCutIndex(NULL),\r
hdEdxCuts(NULL),\r
hTPCdEdxSignalbefore(NULL),\r
hTPCdEdxSignalafter(NULL),\r
hTOFbefore(NULL),\r
- hTOFafter(NULL)\r
+ hTOFafter(NULL),\r
+ hTrackDCAxybefore(NULL),\r
+ hTrackDCAxyafter(NULL),\r
+ hTrackDCAzbefore(NULL),\r
+ hTrackDCAzafter(NULL)\r
{\r
InitPIDResponse();\r
for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=0;}\r
\r
//fesdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts");\r
// Using standard function for setting Cuts\r
- Bool_t selectPrimaries=kTRUE;\r
+ Bool_t selectPrimaries=kFALSE;\r
fesdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);\r
}\r
\r
fHistograms->Add(hTPCdEdxSignalbefore);\r
AxisBeforedEdxSignal = hTPCdEdxSignalbefore->GetXaxis();\r
\r
-\r
hTOFbefore=new TH2F(Form("Electron_TOF_before %s",cutName.Data()),"TOF electron before" ,150,0.05,20,400,-6,10);\r
fHistograms->Add(hTOFbefore);\r
AxisBeforeTOF = hTOFbefore->GetXaxis();\r
+ \r
+ hTrackDCAxybefore = new TH1F(Form("hTrackDCAxy_before %s",cutName.Data()),"DCAxy of tracks before",2000,-10.0,10.0);\r
+ fHistograms->Add(hTrackDCAxybefore); \r
+ \r
+ hTrackDCAzbefore = new TH1F(Form("hTrackDCAz_before %s",cutName.Data()), "DCAz of tracks before",2000,-10.0,10.0);\r
+ fHistograms->Add(hTrackDCAzbefore); \r
\r
}\r
\r
\r
hTOFafter=new TH2F(Form("Electron_TOF_after %s",cutName.Data()),"TOF electron after" ,150,0.05,20,400,-6,10);\r
fHistograms->Add(hTOFafter);\r
+ \r
+ hTrackDCAxyafter = new TH1F(Form("hTrackDCAxy_after %s",cutName.Data()),"DCAxy of tracks after",2000,-10.0,10.0);\r
+ fHistograms->Add(hTrackDCAxyafter); \r
+ \r
+ hTrackDCAzafter = new TH1F(Form("hTrackDCAz_after %s",cutName.Data()), "DCAz of tracks after",2000,-10.0,10.0);\r
+ fHistograms->Add(hTrackDCAzafter); \r
+ \r
+ \r
\r
TAxis *AxisAfter = hTPCdEdxafter->GetXaxis(); \r
Int_t bins = AxisAfter->GetNbins();\r
///________________________________________________________________________\r
Bool_t AliDalitzElectronCuts::ElectronIsSelectedMC(Int_t labelParticle,AliStack *fMCStack)\r
{ \r
- if( labelParticle < 0 ) return kFALSE;\r
- if( fMCStack->IsPhysicalPrimary(labelParticle) == kFALSE ) return kFALSE;\r
+ if( labelParticle < 0 || labelParticle >= fMCStack->GetNtrack() ) return kFALSE;\r
+ if( fMCStack->IsPhysicalPrimary(labelParticle) == kFALSE ) return kFALSE; //Ask Ana\r
\r
TParticle* particle = fMCStack->Particle(labelParticle);\r
\r
- if( TMath::Abs( particle->GetPdgCode() ) != 11) return kFALSE;\r
- if( TMath::Abs( particle->Eta() ) > fEtaCut ) return kFALSE;\r
+ if( TMath::Abs( particle->GetPdgCode() ) != 11 ) return kFALSE;\r
+ \r
+ if( fDoEtaCut ){\r
+ if( particle->Eta() > (fEtaCut + fEtaShift) || particle->Eta() < (-fEtaCut + fEtaShift) )\r
+ return kFALSE;\r
+ }\r
+ \r
\r
return kTRUE;\r
}\r
///________________________________________________________________________\r
Bool_t AliDalitzElectronCuts::TrackIsSelected(AliESDtrack* lTrack) {\r
// Track Selection for Photon Reconstruction\r
+ \r
+ \r
+ Float_t b[2];\r
+ Float_t bCov[3];\r
+ lTrack->GetImpactParameters(b,bCov);\r
+ if (bCov[0]<=0 || bCov[2]<=0) {\r
+ AliDebug(1, "Estimated b resolution lower or equal zero!");\r
+ bCov[0]=0; bCov[2]=0;\r
+ }\r
\r
\r
+ Float_t dcaToVertexXY = b[0];\r
+ Float_t dcaToVertexZ = b[1];\r
+ \r
+ \r
\r
- if( ! fesdTrackCuts->AcceptTrack(lTrack) ){\r
+ if( hTrackDCAxybefore) hTrackDCAxybefore->Fill(dcaToVertexXY);\r
+ if( hTrackDCAzbefore ) hTrackDCAzbefore->Fill(dcaToVertexZ);\r
+ \r
\r
- return kFALSE;\r
- }\r
\r
- if( TMath::Abs( lTrack->Eta()) > fEtaCut ) {\r
+ if( ! fesdTrackCuts->AcceptTrack(lTrack) ){\r
\r
return kFALSE;\r
}\r
+ \r
+ if( fDoEtaCut ) {\r
+ if( lTrack->Eta() > (fEtaCut + fEtaShift) || lTrack->Eta() < (-fEtaCut + fEtaShift) ) {\r
+ return kFALSE;\r
+ }\r
+ }\r
+ \r
+ \r
+ if( lTrack->Pt() < fPtCut ) {\r
+ \r
+ return kFALSE;\r
+ \r
+ }\r
\r
if( lTrack->GetNcls(1) < fMinClsTPC ) {\r
\r
return kFALSE;\r
}\r
\r
+ if( hTrackDCAxyafter) hTrackDCAxyafter->Fill(dcaToVertexXY);\r
+ if( hTrackDCAzafter ) hTrackDCAzafter->Fill(dcaToVertexZ);\r
\r
\r
return kTRUE;\r
// Initialize Cuts from a given Cut string\r
\r
// out<<"Set Cut Number: "<<analysisCutSelection.Data()<<endl;\r
+ AliInfo(Form("Set ElectronCuts Number: %s",analysisCutSelection.Data()));\r
+ \r
if(analysisCutSelection.Length()!=kNCuts) {\r
AliError(Form("Cut selection has the wrong length! size is %d, number of cuts is %d", analysisCutSelection.Length(), kNCuts));\r
return kFALSE;\r
UpdateCutString(cutID, value);\r
return kTRUE;\r
} else return kFALSE;\r
+ case kptCut: \r
+ if( SetPtCut(value)) {\r
+ fCuts[kptCut] = value;\r
+ UpdateCutString(cutID, value);\r
+ return kTRUE;\r
+ } else return kFALSE;\r
+ \r
+ case kDCACut:\r
+ if( SetDCACut(value)) {\r
+ fCuts[kDCACut] = value;\r
+ UpdateCutString(cutID, value);\r
+ return kTRUE;\r
+ } else return kFALSE;\r
+ \r
+ \r
case kPsiPair:\r
if( SetPsiPairCut(value)) {\r
fCuts[kPsiPair] = value;\r
return kTRUE;\r
} else return kFALSE;\r
\r
+ case kmassCut:\r
+ if( SetMassCut(value)) {\r
+ fCuts[kmassCut] = value;\r
+ UpdateCutString(cutID, value);\r
+ return kTRUE;\r
+ } else return kFALSE;\r
+ \r
case kNCuts:\r
cout << "Error:: Cut id out of range"<< endl;\r
return kFALSE;\r
fPIDnSigmaAbovePionLineTPCHighPt=-10;\r
break;\r
case 7:\r
- fPIDnSigmaAbovePionLineTPC=3.0; // We need a bit less tight cut on dE/dx\r
- fPIDnSigmaAbovePionLineTPCHighPt=-10;\r
+ fPIDnSigmaAbovePionLineTPC = 2.0; // We need a bit less tight cut on dE/dx //Updated from 3.0 and -10 to +2.0 , +2.0 \r
+ fPIDnSigmaAbovePionLineTPCHighPt = 2.0;\r
break;\r
case 8: // 1\r
- fPIDnSigmaAbovePionLineTPC=3.5;\r
- fPIDnSigmaAbovePionLineTPCHighPt=-10;\r
+ fPIDnSigmaAbovePionLineTPC = 1.5; // Updated May-16-2013 from 3.5 and -10 to +1.5, +1\r
+ fPIDnSigmaAbovePionLineTPCHighPt = 1.0;\r
break;\r
case 9: // 1\r
fPIDnSigmaAbovePionLineTPC=1.5;\r
switch(etaCut){\r
case 0: \r
fEtaCut = 100.;\r
+ fDoEtaCut = kFALSE;\r
break;\r
case 1: // 1.4\r
fEtaCut = 1.4;\r
+ fDoEtaCut = kTRUE;\r
break;\r
case 2: // 1.2\r
fEtaCut = 1.2;\r
+ fDoEtaCut = kTRUE;\r
break;\r
case 3: // 0.9\r
fEtaCut = 0.9;\r
+ fDoEtaCut = kTRUE;\r
break;\r
case 4: // 0.8\r
fEtaCut = 0.8;\r
+ fDoEtaCut = kTRUE;\r
break;\r
case 5: // 0.75\r
fEtaCut = 0.75;\r
+ fDoEtaCut = kTRUE;\r
+ break;\r
+ case 6: //0.6\r
+ fEtaCut = 0.6; //changed from 0.4 to 0.6 2013.06.10\r
+ fDoEtaCut = kTRUE;\r
+ break;\r
+ case 7: //0.5\r
+ fEtaCut = 0.5; //changed from 0.3 to 0.5 2013.06.10\r
+ fDoEtaCut = kTRUE;\r
break;\r
default:\r
cout<<"Warning: EtaCut not defined "<<etaCut<<endl;\r
return kTRUE;\r
}\r
\r
+///________________________________________________________________________\r
+Bool_t AliDalitzElectronCuts::SetPtCut(Int_t ptCut)\r
+{ \r
+ // Set Pt Cut\r
+ //0.1GeV, 0.125 GeV, 0.15 GeV\r
+ \r
+ switch(ptCut){\r
+ \r
+ case 0: fPtCut = 0.075; \r
+ break;\r
+ case 1: // 0.1\r
+ fPtCut = 0.1; \r
+ break;\r
+ case 2: // 0.125 GeV\r
+ fPtCut = 0.125; \r
+ break;\r
+ case 3: // 0.15 GeV\r
+ fPtCut = 0.15;\r
+ break;\r
+ default:\r
+ cout<<"Warning: PtCut not defined "<<ptCut<<endl;\r
+ return kFALSE;\r
+ }\r
+ return kTRUE;\r
+}\r
+\r
+\r
+///________________________________________________________________________\r
+Bool_t AliDalitzElectronCuts::SetDCACut(Int_t dcaCut)\r
+{ \r
+ // Set DCA Cut\r
+ \r
+ if( !fesdTrackCuts ) {\r
+\r
+ cout<<"Warning: AliESDtrackCut is not initialized "<<endl;\r
+ return kFALSE;\r
+ }\r
+ \r
+ switch(dcaCut){\r
+ \r
+ case 0: \r
+ //Open cuts//\r
+ fesdTrackCuts->SetMaxDCAToVertexZ(1000);\r
+ fesdTrackCuts->SetMaxDCAToVertexXY(1000);\r
+ fesdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);\r
+ break;\r
+ \r
+ case 1: \r
+ fesdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");\r
+ fesdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);\r
+ \r
+ break;\r
+ case 2: fesdTrackCuts->SetMaxDCAToVertexZ(2);\r
+ fesdTrackCuts->SetMaxDCAToVertexXY(1);\r
+ fesdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);\r
+ break; \r
+ \r
+ default:\r
+ cout<<"Warning: dcaCut not defined "<<dcaCut<<endl;\r
+ return kFALSE;\r
+ }\r
+ return kTRUE;\r
+}\r
+\r
+\r
+\r
+\r
///________________________________________________________________________\r
Bool_t AliDalitzElectronCuts::SetMaxMomPiondEdxTPCCut(Int_t piMaxMomdedxSigmaCut)\r
{ // Set Cut\r
fPIDnSigmaAtLowPAroundKaonLine=0;\r
fPIDnSigmaAtLowPAroundProtonLine=0;\r
fPIDnSigmaAtLowPAroundPionLine=0;\r
+ fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
break;\r
case 1: //\r
fDoKaonRejectionLowP=kTRUE;\r
fPIDnSigmaAtLowPAroundKaonLine=0.5;\r
fPIDnSigmaAtLowPAroundProtonLine=0.5;\r
fPIDnSigmaAtLowPAroundPionLine=0.5;\r
+ fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
break;\r
case 2: //\r
fDoKaonRejectionLowP=kTRUE;\r
fDoProtonRejectionLowP=kTRUE;\r
fDoPionRejectionLowP=kTRUE;\r
- fPIDnSigmaAtLowPAroundKaonLine=1;\r
- fPIDnSigmaAtLowPAroundProtonLine=1;\r
- fPIDnSigmaAtLowPAroundPionLine=1;\r
+ fPIDnSigmaAtLowPAroundKaonLine=1.0;\r
+ fPIDnSigmaAtLowPAroundProtonLine=1.0;\r
+ fPIDnSigmaAtLowPAroundPionLine=1.0;\r
+ fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
break;\r
case 3: //\r
fDoKaonRejectionLowP=kTRUE;\r
fPIDnSigmaAtLowPAroundKaonLine=1.5;\r
fPIDnSigmaAtLowPAroundProtonLine=1.5;\r
fPIDnSigmaAtLowPAroundPionLine=1.5;\r
+ fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
break;\r
case 4: //\r
fDoKaonRejectionLowP=kTRUE;\r
fPIDnSigmaAtLowPAroundKaonLine=2.0;\r
fPIDnSigmaAtLowPAroundProtonLine=2.0;\r
fPIDnSigmaAtLowPAroundPionLine=2.0;\r
+ fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
break;\r
case 5: //\r
fDoKaonRejectionLowP=kTRUE;\r
fPIDnSigmaAtLowPAroundKaonLine=2.0;\r
fPIDnSigmaAtLowPAroundProtonLine=2.0;\r
fPIDnSigmaAtLowPAroundPionLine=2.5;\r
+ fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
break;\r
case 6: //\r
fDoKaonRejectionLowP=kTRUE;\r
fPIDnSigmaAtLowPAroundKaonLine=0.;\r
fPIDnSigmaAtLowPAroundProtonLine=0.;\r
fPIDnSigmaAtLowPAroundPionLine=2.;\r
+ fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
break;\r
case 7: //\r
fDoKaonRejectionLowP=kFALSE;\r
fPIDnSigmaAtLowPAroundKaonLine=0.0;\r
fPIDnSigmaAtLowPAroundProtonLine=0.0;\r
fPIDnSigmaAtLowPAroundPionLine=1.0;\r
+ fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
break;\r
case 8:\r
fDoKaonRejectionLowP=kFALSE;\r
fPIDnSigmaAtLowPAroundKaonLine=0.;\r
fPIDnSigmaAtLowPAroundProtonLine=0.;\r
fPIDnSigmaAtLowPAroundPionLine=0.5; \r
+ fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
break; \r
default:\r
cout<<"Warning: LowPRejectionSigmaCut not defined "<<LowPRejectionSigmaCut<<endl;\r
}\r
return kTRUE;\r
}\r
+\r
+\r
+\r
+///________________________________________________________________________\r
+Bool_t AliDalitzElectronCuts::SetMassCut(Int_t massCut)\r
+{ // Set Cut\r
+ switch(massCut){\r
+ \r
+ case 0:\r
+ fMassCut = 999.;\r
+ fDoMassCut = kFALSE; \r
+ break;\r
+ case 1:\r
+ fMassCut = 0.135; //GeV/c^2\r
+ fDoMassCut = kTRUE;\r
+ break; \r
+ case 2:\r
+ fMassCut = 0.100; //GeV/c^2\r
+ fDoMassCut = kTRUE;\r
+ break;\r
+ case 3:\r
+ fMassCut = 0.075; //GeV/c^2\r
+ fDoMassCut = kTRUE;\r
+ break;\r
+ default:\r
+ cout<<"Warning: MassCut not defined "<<massCut<<endl;\r
+ return kFALSE;\r
+ }\r
+ return kTRUE;\r
+}\r
+\r
///________________________________________________________________________\r
TString AliDalitzElectronCuts::GetCutNumber(){\r
// returns TString with current cut number\r