]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGGA/GammaConv/AliDalitzElectronCuts.cxx
Conversion Task able to run on AOD's, added different trigger selection, implemented...
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliDalitzElectronCuts.cxx
index 6ea8e0bb5963ed9608c3483e88e492430e6d940d..c6f6dc8fa8d097d9806dcde722646ffaad1aeaa5 100644 (file)
@@ -62,6 +62,9 @@ const char* AliDalitzElectronCuts::fgkCutNames[AliDalitzElectronCuts::kNCuts] =
 "RejectSharedElecGamma",\r
 "BackgroundScheme",\r
 "NumberOfRotations",\r
+"PtCut",\r
+"DCAcut",\r
+"MassCut",\r
 };\r
 \r
 //________________________________________________________________________\r
@@ -70,6 +73,9 @@ AliDalitzElectronCuts::AliDalitzElectronCuts(const char *name,const char *title)
     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
@@ -106,6 +112,8 @@ AliDalitzElectronCuts::AliDalitzElectronCuts(const char *name,const char *title)
     fUseTrackMultiplicityForBG(kFALSE),\r
     fBKGMethod(0),\r
     fnumberOfRotationEventsForBG(0),\r
+    fDoMassCut(kFALSE),\r
+    fMassCut(999.),\r
     fCutString(NULL),\r
     hCutIndex(NULL),\r
     hdEdxCuts(NULL),\r
@@ -116,7 +124,11 @@ AliDalitzElectronCuts::AliDalitzElectronCuts(const char *name,const char *title)
     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
@@ -124,7 +136,7 @@ AliDalitzElectronCuts::AliDalitzElectronCuts(const char *name,const char *title)
 \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
@@ -215,10 +227,15 @@ void AliDalitzElectronCuts::InitCutHistograms(TString name, Bool_t preCut,TStrin
        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
@@ -234,6 +251,14 @@ void AliDalitzElectronCuts::InitCutHistograms(TString name, Bool_t preCut,TStrin
 \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
@@ -285,13 +310,18 @@ Bool_t AliDalitzElectronCuts::InitPIDResponse(){
 ///________________________________________________________________________\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
@@ -339,18 +369,44 @@ Bool_t AliDalitzElectronCuts::ElectronIsSelected(AliESDtrack* lTrack)
 ///________________________________________________________________________\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
@@ -380,6 +436,8 @@ Bool_t AliDalitzElectronCuts::TrackIsSelected(AliESDtrack* lTrack) {
     return kFALSE;\r
     }\r
 \r
+    if( hTrackDCAxyafter) hTrackDCAxyafter->Fill(dcaToVertexXY);\r
+    if( hTrackDCAzafter ) hTrackDCAzafter->Fill(dcaToVertexZ);\r
 \r
 \r
    return kTRUE;\r
@@ -638,6 +696,8 @@ Bool_t AliDalitzElectronCuts::InitializeCutsFromCutString(const TString analysis
    // 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
@@ -753,6 +813,21 @@ Bool_t AliDalitzElectronCuts::SetCut(cutIds cutID, const Int_t value) {
                        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
@@ -781,6 +856,13 @@ Bool_t AliDalitzElectronCuts::SetCut(cutIds cutID, const Int_t value) {
                        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
@@ -953,12 +1035,12 @@ Bool_t AliDalitzElectronCuts::SetTPCdEdxCutPionLine(Int_t pidedxSigmaCut)
                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
@@ -1088,21 +1170,35 @@ Bool_t AliDalitzElectronCuts::SetEtaCut(Int_t etaCut)
        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
@@ -1111,6 +1207,73 @@ Bool_t AliDalitzElectronCuts::SetEtaCut(Int_t etaCut)
        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
@@ -1152,6 +1315,7 @@ Bool_t AliDalitzElectronCuts::SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut)
                fPIDnSigmaAtLowPAroundKaonLine=0;\r
                fPIDnSigmaAtLowPAroundProtonLine=0;\r
                fPIDnSigmaAtLowPAroundPionLine=0;\r
+               fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
                break;\r
        case 1:  //\r
                fDoKaonRejectionLowP=kTRUE;\r
@@ -1160,14 +1324,16 @@ Bool_t AliDalitzElectronCuts::SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut)
                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
@@ -1176,6 +1342,7 @@ Bool_t AliDalitzElectronCuts::SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut)
                fPIDnSigmaAtLowPAroundKaonLine=1.5;\r
                fPIDnSigmaAtLowPAroundProtonLine=1.5;\r
                fPIDnSigmaAtLowPAroundPionLine=1.5;\r
+               fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
                break;\r
        case 4:  //\r
                fDoKaonRejectionLowP=kTRUE;\r
@@ -1184,6 +1351,7 @@ Bool_t AliDalitzElectronCuts::SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut)
                fPIDnSigmaAtLowPAroundKaonLine=2.0;\r
                fPIDnSigmaAtLowPAroundProtonLine=2.0;\r
                fPIDnSigmaAtLowPAroundPionLine=2.0;\r
+               fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
                break;\r
        case 5:  //\r
                fDoKaonRejectionLowP=kTRUE;\r
@@ -1192,6 +1360,7 @@ Bool_t AliDalitzElectronCuts::SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut)
                fPIDnSigmaAtLowPAroundKaonLine=2.0;\r
                fPIDnSigmaAtLowPAroundProtonLine=2.0;\r
                fPIDnSigmaAtLowPAroundPionLine=2.5;\r
+               fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
                break;\r
        case 6:  //\r
                fDoKaonRejectionLowP=kTRUE;\r
@@ -1200,6 +1369,7 @@ Bool_t AliDalitzElectronCuts::SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut)
                fPIDnSigmaAtLowPAroundKaonLine=0.;\r
                fPIDnSigmaAtLowPAroundProtonLine=0.;\r
                fPIDnSigmaAtLowPAroundPionLine=2.;\r
+               fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
                break;\r
        case 7: //\r
                fDoKaonRejectionLowP=kFALSE;\r
@@ -1208,6 +1378,7 @@ Bool_t AliDalitzElectronCuts::SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut)
                fPIDnSigmaAtLowPAroundKaonLine=0.0;\r
                fPIDnSigmaAtLowPAroundProtonLine=0.0;\r
                fPIDnSigmaAtLowPAroundPionLine=1.0;\r
+               fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLineTPC;\r
                break;\r
        case 8:\r
                fDoKaonRejectionLowP=kFALSE;\r
@@ -1216,6 +1387,7 @@ Bool_t AliDalitzElectronCuts::SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut)
                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
@@ -1408,6 +1580,37 @@ Bool_t AliDalitzElectronCuts::SetNumberOfRotations(Int_t NumberOfRotations)
     }\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