#include <AliESDVZERO.h>
#include <AliAODVZERO.h>
+#include "AliDielectronVarManager.h"
#include "AliDielectronEventCuts.h"
ClassImp(AliDielectronEventCuts)
AliDielectronEventCuts::AliDielectronEventCuts() :
AliAnalysisCuts(),
+ fRun(),
fVtxZmin(0.),
fVtxZmax(0.),
fRequireVtx(kFALSE),
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
//______________________________________________
AliDielectronEventCuts::AliDielectronEventCuts(const char* name, const char* title) :
AliAnalysisCuts(name, title),
+ fRun(),
fVtxZmin(0.),
fVtxZmax(0.),
fRequireVtx(kFALSE),
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
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;
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;
}
//______________________________________________
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;
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;
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;
return kFALSE;
}
*/
-
+
+ // correlation cut Ntrks vs. multV0
if(fparMean && fparSigma) {
Double_t nTrks = ev->GetNumberOfTracks();
Double_t multV0 = 0.0;
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;
}
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++; }