]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGDQ/dielectron/AliDielectronEventCuts.cxx
New train files for Ashutosh's analysis
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronEventCuts.cxx
index 65f3ab0d36ff4ddde12504edaa7a9f984192db8c..322507862d08e8542ae4c7785ec0361af0912701 100644 (file)
@@ -36,6 +36,7 @@ Detailed description
 #include <AliESDVZERO.h>
 #include <AliAODVZERO.h>
 
+#include "AliDielectronVarManager.h"
 #include "AliDielectronEventCuts.h"
 
 ClassImp(AliDielectronEventCuts)
@@ -44,6 +45,7 @@ const char* AliDielectronEventCuts::fgkVtxNames[AliDielectronEventCuts::kVtxTrac
 
 AliDielectronEventCuts::AliDielectronEventCuts() :
   AliAnalysisCuts(),
+  fRun(),
   fVtxZmin(0.),
   fVtxZmax(0.),
   fRequireVtx(kFALSE),
@@ -52,13 +54,17 @@ AliDielectronEventCuts::AliDielectronEventCuts() :
   fCentMin(1.),
   fCentMax(0.),
   fVtxType(kVtxTracks),
+  fRequire13sel(kFALSE),
+  fUtils(),
   fRequireV0and(0),
   fTriggerAnalysis(0x0),
   fkVertex(0x0),
   fkVertexAOD(0x0),
   fparMean(0x0),
   fparSigma(0x0),
-  fcutSigma(3.)
+  fcutSigma(3.),
+  fparMinVtxContributors(0x0),
+  fparMaxVtxContributors(0x0)
 {
   //
   // Default Constructor
@@ -69,6 +75,7 @@ AliDielectronEventCuts::AliDielectronEventCuts() :
 //______________________________________________
 AliDielectronEventCuts::AliDielectronEventCuts(const char* name, const char* title) :
   AliAnalysisCuts(name, title),
+  fRun(),
   fVtxZmin(0.),
   fVtxZmax(0.),
   fRequireVtx(kFALSE),
@@ -77,13 +84,17 @@ AliDielectronEventCuts::AliDielectronEventCuts(const char* name, const char* tit
   fCentMin(1.),
   fCentMax(0.),
   fVtxType(kVtxTracks),
+  fRequire13sel(kFALSE),
+  fUtils(),
   fRequireV0and(0),
   fTriggerAnalysis(0x0),
   fkVertex(0x0),
   fkVertexAOD(0x0),
   fparMean(0x0),
   fparSigma(0x0),
-  fcutSigma(3.)
+  fcutSigma(3.),
+  fparMinVtxContributors(0x0),
+  fparMaxVtxContributors(0x0)
 {
   //
   // Named Constructor
@@ -159,7 +170,12 @@ Bool_t AliDielectronEventCuts::IsSelectedESD(TObject* event)
     Double_t zvtx=fkVertex->GetZv();
     if (zvtx<fVtxZmin||zvtx>fVtxZmax) return kFALSE;
   }
-  
+
+  if(fRequire13sel){
+    if(!fUtils.IsVertexSelected2013pA(ev)) return kFALSE;
+    if(fUtils.IsFirstEventInChunk(ev)) return kFALSE;
+  }
+
   if (fRequireV0and){
     if (!fTriggerAnalysis) fTriggerAnalysis=new AliTriggerAnalysis;
     Bool_t v0AND = kFALSE;
@@ -194,6 +210,18 @@ Bool_t AliDielectronEventCuts::IsSelectedESD(TObject* event)
     if(multV0 > mV0+fcutSigma*sV0 || multV0 < mV0-fcutSigma*sV0) return kFALSE;
   }
 
+  // cut on the number of vertex contributors using TPC versus global vertex
+  if(fparMinVtxContributors && fparMaxVtxContributors) {
+    const AliESDVertex *vtxTPC = ev->GetPrimaryVertexTPC();
+    const AliESDVertex *vtxGbl = ev->GetPrimaryVertex();
+    Double_t nContribTPC = (vtxTPC ? vtxTPC->GetNContributors() : 0);
+    Double_t nContribGbl = (vtxGbl ? vtxGbl->GetNContributors() : 0);
+    Double_t minCut = fparMinVtxContributors->Eval(nContribGbl);
+    Double_t maxCut = fparMaxVtxContributors->Eval(nContribGbl);
+    if(nContribTPC > maxCut || nContribTPC < minCut) return kFALSE;
+  }
+
+
   return kTRUE;
 }
 //______________________________________________
@@ -206,6 +234,14 @@ Bool_t AliDielectronEventCuts::IsSelectedAOD(TObject* event)
   AliAODEvent *ev=dynamic_cast<AliAODEvent*>(event);
   if (!ev) return kFALSE;
 
+  // run rejection
+  Int_t run = ev->GetRunNumber();
+  if(fRun.GetNrows()) {
+    for(Int_t irun=0; irun<fRun.GetNrows(); irun++) {
+      if(fRun(irun)==run) return kFALSE;
+    }
+  }
+
   if (fCentMin<fCentMax){
     AliCentrality *centrality=ev->GetCentrality();
     Double_t centralityF=-1;
@@ -217,7 +253,7 @@ Bool_t AliDielectronEventCuts::IsSelectedAOD(TObject* event)
 
   switch(fVtxType){
   case kVtxTracks:         fkVertexAOD=0x0;                       break;
-  case kVtxTPC:            fkVertexAOD=ev->GetVertex(AliAODVertex::kMainTPC);   break;
+  case kVtxTPC:            fkVertexAOD=AliDielectronVarManager::GetVertex(ev, AliAODVertex::kMainTPC);   break;
   case kVtxSPD:
   case kVtxTracksOrSPD:    fkVertexAOD=ev->GetPrimaryVertexSPD(); break;
   case kVtxAny:            fkVertexAOD=ev->GetPrimaryVertex();    break;
@@ -244,6 +280,11 @@ Bool_t AliDielectronEventCuts::IsSelectedAOD(TObject* event)
     if (zvtx<fVtxZmin||zvtx>fVtxZmax) return kFALSE;
   }
 
+  if(fRequire13sel){
+    if(!fUtils.IsVertexSelected2013pA(ev)) return kFALSE;
+//     if(fUtils.IsFirstEventInChunk(ev)) return kFALSE;
+  }
+
   /*
   if (fRequireV0and){
     //    if (!fTriggerAnalysis) fTriggerAnalysis=new AliTriggerAnalysis;
@@ -271,7 +312,8 @@ Bool_t AliDielectronEventCuts::IsSelectedAOD(TObject* event)
       return kFALSE;
   }
   */
-
+  
+  // correlation cut Ntrks vs. multV0
   if(fparMean && fparSigma) {
     Double_t nTrks  = ev->GetNumberOfTracks();
     Double_t multV0 = 0.0;
@@ -281,6 +323,17 @@ Bool_t AliDielectronEventCuts::IsSelectedAOD(TObject* event)
     if(multV0 > mV0+fcutSigma*sV0 || multV0 < mV0-fcutSigma*sV0) return kFALSE;
   }
 
+  // cut on the number of vertex contributors using TPC versus global vertex
+  if(fparMinVtxContributors && fparMaxVtxContributors) {
+    const AliAODVertex *vtxTPC = ev->GetVertex(AliAODVertex::kMainTPC);
+    const AliAODVertex *vtxGbl = ev->GetPrimaryVertex();
+    Double_t nContribTPC = (vtxTPC ? vtxTPC->GetNContributors() : 0);
+    Double_t nContribGbl = (vtxGbl ? vtxGbl->GetNContributors() : 0);
+    Double_t minCut = fparMinVtxContributors->Eval(nContribGbl);
+    Double_t maxCut = fparMaxVtxContributors->Eval(nContribGbl);
+    if(nContribTPC > maxCut || nContribTPC < minCut) return kFALSE;
+  }
+
   return kTRUE;
 }
 
@@ -307,6 +360,8 @@ void AliDielectronEventCuts::Print(const Option_t* /*option*/) const
     printf("Cut %02d: cut on multiplcity ITS vs. TPC \n", iCut);                   iCut++; }
   if(fparMean&&fparSigma) {
     printf("Cut %02d: multplicity vs. #tracks correlation +-%.1f sigma inclusion \n", iCut, fcutSigma); iCut++; }
+  if(fRequire13sel){
+    printf("Cut %02d: vertex and event selection for 2013 pPb data taking required \n",iCut);   iCut++; } 
   if(fRequireV0and) {
     printf("Cut %02d: require V0and type: %c \n", iCut, fRequireV0and);            iCut++; }