30 #include "AliVVertex.h" 31 #include "AliVEvent.h" 32 #include "AliESDEvent.h" 33 #include "AliAODEvent.h" 34 #include "AliVAODHeader.h" 35 #include "AliAODHeader.h" 36 #include "AliCentrality.h" 37 #include "AliMultSelection.h" 38 #include "AliESDVZERO.h" 39 #include "AliMultiplicity.h" 40 #include "AliMCEvent.h" 43 #include "AliTriggerAnalysis.h" 44 #include "AliCollisionGeometry.h" 45 #include "AliGenEventHeader.h" 46 #include "AliAnalysisUtils.h" 47 #include "AliMultSelection.h" 48 #include "AliNanoAODTrack.h" 49 #include "AliNanoAODHeader.h" 59 fCutNumberOfTracks(kFALSE),
60 fNumberOfTracksMax(INT_MAX),
61 fNumberOfTracksMin(INT_MIN),
63 fRefMultMethod(kTPConly),
64 fUseAliESDtrackCutsRefMult(kFALSE),
65 fRefMultMethodAliESDtrackCuts(AliESDtrackCuts::kTrackletsITSTPC),
70 fStandardTPCcuts(NULL),
71 fStandardGlobalCuts(NULL),
74 fCutPrimaryVertexX(kFALSE),
75 fPrimaryVertexXmax(INT_MAX),
76 fPrimaryVertexXmin(INT_MIN),
77 fCutPrimaryVertexY(kFALSE),
78 fPrimaryVertexYmax(INT_MAX),
79 fPrimaryVertexYmin(INT_MIN),
80 fCutPrimaryVertexZ(kFALSE),
81 fPrimaryVertexZmax(INT_MAX),
82 fPrimaryVertexZmin(INT_MIN),
83 fCutNContributors(kFALSE),
84 fNContributorsMax(INT_MAX),
85 fNContributorsMin(INT_MIN),
89 fCutSPDvertexerAnomaly(kFALSE),
90 fCutSPDTRKVtxZ(kFALSE),
91 fCutTPCmultiplicityOutliers(kFALSE),
92 fCutTPCmultiplicityOutliersAOD(kFALSE),
93 fUseCentralityUnchecked(kFALSE),
94 fCentralityPercentileMethod(kTPConly),
95 fCutZDCtiming(kFALSE),
97 fCutImpactParameter(kFALSE),
98 fImpactParameterMin(0.0),
99 fImpactParameterMax(100.0),
100 fhistTPCvsGlobalMult(0),
111 fCutNumberOfTracks(kFALSE),
112 fNumberOfTracksMax(INT_MAX),
113 fNumberOfTracksMin(INT_MIN),
115 fRefMultMethod(kTPConly),
116 fUseAliESDtrackCutsRefMult(kFALSE),
117 fRefMultMethodAliESDtrackCuts(AliESDtrackCuts::kTrackletsITSTPC),
118 fRefMultMax(INT_MAX),
119 fRefMultMin(INT_MIN),
122 fStandardTPCcuts(
AliFlowTrackCuts::GetStandardTPCStandaloneTrackCuts2010()),
125 fMultSelection(NULL),
126 fCutPrimaryVertexX(kFALSE),
127 fPrimaryVertexXmax(INT_MAX),
128 fPrimaryVertexXmin(INT_MIN),
129 fCutPrimaryVertexY(kFALSE),
130 fPrimaryVertexYmax(INT_MAX),
131 fPrimaryVertexYmin(INT_MIN),
132 fCutPrimaryVertexZ(kFALSE),
133 fPrimaryVertexZmax(INT_MAX),
134 fPrimaryVertexZmin(INT_MIN),
135 fCutNContributors(kFALSE),
136 fNContributorsMax(INT_MAX),
137 fNContributorsMin(INT_MIN),
139 fMeanPtMax(-DBL_MAX),
141 fCutSPDvertexerAnomaly(kFALSE),
142 fCutSPDTRKVtxZ(kFALSE),
143 fCutTPCmultiplicityOutliers(kFALSE),
144 fCutTPCmultiplicityOutliersAOD(kFALSE),
145 fUseCentralityUnchecked(kFALSE),
146 fCentralityPercentileMethod(kTPConly),
147 fCutZDCtiming(kFALSE),
149 fCutImpactParameter(kFALSE),
150 fImpactParameterMin(0.0),
151 fImpactParameterMax(100.0),
152 fhistTPCvsGlobalMult(0),
218 fUtils =
new AliAnalysisUtils();
219 fUtils->SetUseMVPlpSelection(kTRUE);
220 fUtils->SetUseOutOfBunchPileUp(kTRUE);
236 if (
fQA) {
fQA->SetOwner();
fQA->Delete();
delete fQA; }
243 if (
this==&that)
return *
this;
275 fUtils =
new AliAnalysisUtils();
276 fUtils->SetUseMVPlpSelection(kTRUE);
277 fUtils->SetUseOutOfBunchPileUp(kTRUE);
312 AliVEvent* vevent =
dynamic_cast<AliVEvent*
>(obj);
313 AliMCEvent* mcevent =
dynamic_cast<AliMCEvent*
>(objmc);
314 if (vevent)
return PassesCuts(vevent,mcevent);;
321 const AliVVertex* pvtx=
event->GetPrimaryVertex();
328 pvtxx = pvtx->GetX();
329 pvtxy = pvtx->GetY();
330 pvtxz = pvtx->GetZ();
331 ncontrib = pvtx->GetNContributors();
339 Int_t multGlobal = 0;
340 AliVAODHeader* header = (aodevent) ? static_cast<AliVAODHeader*>(aodevent->GetHeader()) : 0x0;
343 if(header && header->InheritsFrom(
"AliNanoAODStorage")){
344 AliNanoAODHeader *nanoAodHeader = (AliNanoAODHeader*) header;
347 Int_t pilepIndex = nanoAodHeader->GetVarIndex(
"cstPileUp");
348 if(nanoAodHeader->GetVar(pilepIndex)==0) pass = kTRUE;
349 if(nanoAodHeader->GetVar(pilepIndex)==1) pass = kFALSE;
360 Int_t nTracks(aodevent->GetNumberOfTracks());
361 for(
Int_t iTracks = 0; iTracks < nTracks; iTracks++) {
362 AliNanoAODTrack* track =
dynamic_cast<AliNanoAODTrack*
>(aodevent->GetTrack(iTracks));
365 if (!track || track->Pt() < .2 || track->Pt() > 5.0 || TMath::Abs(track->Eta()) > .8 || track->GetTPCNcls() < 70 || track->GetTPCsignal() < 10.0)
continue;
366 if (track->TestFilterBit(1) && track->Chi2perNDF() > 0.2) multTPC++;
367 if (!track->TestFilterBit(16) || track->Chi2perNDF() < 0.1)
continue;
370 Double_t bCov[3] = {-99., -99., -99.};
372 AliNanoAODTrack copy(*track);
373 Double_t magField = nanoAodHeader->GetMagneticField();
377 if (track->PropagateToDCA(aodevent->GetPrimaryVertex(), magField, 100., b, bCov) && TMath::Abs(b[0]) < 0.3 && TMath::Abs(b[1]) < 0.3) multGlobal++;
384 if(nanoAodHeader->GetRunNumber() < 209122) {
385 if(!
fData2011 && (multTPC < (-40.3+1.22*multGlobal) || multTPC > (32.1+1.59*multGlobal))) {
388 else if(
fData2011 && (multTPC < (-36.73 + 1.48*multGlobal) || multTPC > (62.87 + 1.78*multGlobal))) pass = kFALSE;
390 if(multTPC < (-18.5+1.15*multGlobal) || multTPC > (200.+1.45*multGlobal)) {
399 QAbefore(1)->Fill(multGlobal,multTPC);
403 AliCentrality* centr = ((AliVAODHeader*)aodevent->GetHeader())->GetCentralityP();
405 Double_t v0Centr = nanoAodHeader->GetCentr(
"V0M");
406 Double_t trkCentr = nanoAodHeader->GetCentr(
"TRK");
408 if(TMath::Abs(v0Centr-trkCentr) > 5) pass = kFALSE;
441 QAafter(1)->Fill(multGlobal,multTPC);
451 fUtils =
new AliAnalysisUtils();
452 fUtils->SetUseMVPlpSelection(kTRUE);
453 fUtils->SetUseOutOfBunchPileUp(kTRUE);
455 if(
fUtils->IsPileUpEvent(aodevent)) pass = kFALSE;
473 if (multTPC > ( 23+1.216*multGlobal)) pass = kFALSE;
474 if (multTPC < (-20+1.087*multGlobal)) pass = kFALSE;
484 Int_t nTracks(aodevent->GetNumberOfTracks());
485 for(
Int_t iTracks = 0; iTracks < nTracks; iTracks++) {
486 AliAODTrack* track =
dynamic_cast<AliAODTrack*
>(aodevent->GetTrack(iTracks));
488 if (!track || track->Pt() < .2 || track->Pt() > 5.0 || TMath::Abs(track->Eta()) > .8 || track->GetTPCNcls() < 70 || !track->GetDetPid() || track->GetDetPid()->GetTPCsignal() < 10.0)
continue;
489 if (track->TestFilterBit(1) && track->Chi2perNDF() > 0.2) multTPC++;
490 if (!track->TestFilterBit(16) || track->Chi2perNDF() < 0.1)
continue;
492 Double_t bCov[3] = {-99., -99., -99.};
493 AliAODTrack copy(*track);
494 if (copy.PropagateToDCA(event->GetPrimaryVertex(),
event->GetMagneticField(), 100., b, bCov) && TMath::Abs(b[0]) < 0.3 && TMath::Abs(b[1]) < 0.3) multGlobal++;
498 if(event->GetRunNumber() < 209122) {
499 if(!
fData2011 && (multTPC < (-40.3+1.22*multGlobal) || multTPC > (32.1+1.59*multGlobal))) pass = kFALSE;
500 else if(
fData2011 && (multTPC < (-36.73 + 1.48*multGlobal) || multTPC > (62.87 + 1.78*multGlobal))) pass = kFALSE;
502 if(multTPC < (-18.5+1.15*multGlobal) || multTPC > (200.+1.45*multGlobal)) pass = kFALSE;
510 QAbefore(1)->Fill(multGlobal,multTPC);
536 AliCentrality* centr = esdevent->GetCentrality();
558 fMultSelection = (AliMultSelection *) esdevent->FindListObject(
"MultSelection");
568 const AliESDVertex* sdpvertex = esdevent->GetPrimaryVertexSPD();
569 if (sdpvertex->GetNContributors()<1) pass=kFALSE;
570 if (sdpvertex->GetDispersion()>0.04) pass=kFALSE;
571 if (sdpvertex->GetZRes()>0.25) pass=kFALSE;
572 const AliESDVertex* tpcvertex = esdevent->GetPrimaryVertexTPC();
573 if (tpcvertex->GetNContributors()<1) pass=kFALSE;
574 const AliMultiplicity* tracklets = esdevent->GetMultiplicity();
575 if (tpcvertex->GetNContributors()<(-10.0+0.25*tracklets->GetNumberOfITSClusters(0)))
582 if (!
fTrigAna.ZDCTimeTrigger(esdevent))
593 if (refMult < fRefMultMin || refMult >=
fRefMultMax )
602 Double_t tVtxZ = aodevent->GetPrimaryVertex()->GetZ();
603 Double_t tSPDVtxZ = aodevent->GetPrimaryVertexSPD()->GetZ();
604 if( TMath::Abs(tVtxZ-tSPDVtxZ) > 0.5 ) pass = kFALSE;
607 AliCentrality* centr = ((AliVAODHeader*)aodevent->GetHeader())->GetCentralityP();
609 Double_t v0Centr = centr->GetCentralityPercentile(
"V0M");
610 Double_t trkCentr = centr->GetCentralityPercentile(
"TRK");
611 if(TMath::Abs(v0Centr-trkCentr) > 5) pass = kFALSE;
631 fMultSelection = (AliMultSelection *) aodevent->FindListObject(
"MultSelection");
634 AliWarning(
"AliMultSelection not found, did you Run AliMultSelectionTask? \n");
647 Int_t ntracks=
event->GetNumberOfTracks();
649 for (
Int_t i=0; i<ntracks; i++)
651 AliVParticle* track =
event->GetTrack(i);
652 if (!track)
continue;
657 meanpt += track->Pt();
661 if (nselected) meanpt=meanpt/nselected;
662 if (meanpt<fMeanPtMin || meanpt >=
fMeanPtMax) pass=kFALSE;
669 AliCollisionGeometry* headerH =
dynamic_cast<AliCollisionGeometry*
>(
dynamic_cast<AliMCEvent*
>(mcevent)->GenEventHeader());
671 gImpactParameter = headerH->ImpactParameter();
679 QAafter(1)->Fill(multGlobal,multTPC);
697 AliCentrality* centr = NULL;
699 centr = esdEvent->GetCentrality();
701 centr = ((AliVAODHeader*)aodEvent->GetHeader())->GetCentralityP();
703 if (!centr)
return -1.;
714 fMultSelection = (AliMultSelection *) esdEvent->FindListObject(
"MultSelection");
716 centrality = lPercentile;
720 fMultSelection = (AliMultSelection *) aodEvent->FindListObject(
"MultSelection");
723 AliWarning(
"AliMultSelection not found, did you Run AliMultSelectionTask? \n");
725 centrality = lPercentile;
769 AliESDVZERO* vzero = NULL;
792 if (!esdevent)
return 0;
793 vzero=esdevent->GetVZEROData();
794 if (!vzero)
return 0;
795 return TMath::Nint(vzero->GetMTotV0A()+vzero->GetMTotV0C());
799 if (!esdevent)
return 0;
800 const AliMultiplicity* mult = esdevent->GetMultiplicity();
802 return mult->GetNumberOfITSClusters(1);
808 for (
Int_t i=0; i<numberOfInputObjects; i++) {
820 Bool_t adddirstatus = TH1::AddDirectoryStatus();
821 TH1::AddDirectory(kFALSE);
823 fQA->SetName(Form(
"%s QA",GetName()));
824 TList* before =
new TList(); before->SetOwner();
825 before->SetName(
"before");
826 TList* after =
new TList(); after->SetOwner();
827 after->SetName(
"after");
830 before->Add(
new TH1F(
"zvertex",
";z;event cout",500,-15.,15.));
831 after->Add(
new TH1F(
"zvertex",
";z;event cout",500,-15.,15.));
832 before->Add(
new TH2F(
"fTPCvsGlobalMult",
"TPC only vs Global track multiplicity;global;TPC only",600,0,3000,600,0,4000));
833 after->Add(
new TH2F(
"fTPCvsGlobalMult",
"TPC only vs Global track multiplicity;global;TPC only",600,0,3000,600,0,4000));
834 TH1::AddDirectory(adddirstatus);
851 if (list->GetEntries()<1)
return 0;
853 while ( (obj = dynamic_cast<AliFlowEventCuts*>(next())) )
855 if (obj==
this)
continue;
857 listwrapper.Add(obj->
GetQA());
858 fQA->Merge(&listwrapper);
Float_t fCentralityPercentileMax
Double_t fPrimaryVertexZmax
AliESDtrackCuts::MultEstTrackType fRefMultMethodAliESDtrackCuts
Float_t GetCentrality(AliVEvent *event, AliMCEvent *mcEvent)
Double_t fPrimaryVertexXmax
Bool_t fData2011
correlation between TPCMult and GlobalMult
TObject * GetInputObject(Int_t i)
Bool_t fCutPrimaryVertexY
Long64_t Merge(TCollection *list)
Bool_t fUseNewCentralityFramework
Bool_t fCutTPCmultiplicityOutliersAOD
static AliFlowTrackCuts * GetStandardGlobalTrackCuts2010()
AliFlowTrackCuts * fStandardTPCcuts
AliFlowTrackCuts * fMeanPtCuts
Double_t fPrimaryVertexYmin
Double_t fPrimaryVertexYmax
AliFlowEventCuts & operator=(const AliFlowEventCuts &someCuts)
Int_t Count(AliVEvent *event=NULL)
AliAnalysisUtils * fUtils
virtual Bool_t IsSelected(TObject *obj, Int_t id=-666)
void SetParamType(trackParameterType paramType)
const char * CentrMethName(refMultMethod method) const
refMultMethod fRefMultMethod
Bool_t PassesCuts(AliVEvent *event, AliMCEvent *mcevent)
Bool_t fCutSPDvertexerAnomaly
Int_t GetNumberOfInputObjects() const
static AliFlowTrackCuts * GetStandardTPCStandaloneTrackCuts()
Int_t RefMult(AliVEvent *event, AliMCEvent *mcEvent=0x0)
static AliFlowTrackCuts * GetStandardTPCStandaloneTrackCuts2010()
Bool_t fCutPrimaryVertexZ
void SetPtMin(Double_t min)
refMultMethod fCentralityPercentileMethod
TH2F * fhistTPCvsGlobalMult
Bool_t fCutPrimaryVertexX
new centrality framework
AliTriggerAnalysis fTrigAna
Double_t fPrimaryVertexZmin
AliMultSelection * fMultSelection
analysis utils object
Bool_t fCutCentralityPercentile
Bool_t fUseAliESDtrackCutsRefMult
Double_t fImpactParameterMax
void SetEvent(AliVEvent *event, AliMCEvent *mcEvent=NULL)
AliFlowTrackCuts * fStandardGlobalCuts
Bool_t fUseCentralityUnchecked
AliFlowTrackCuts * fRefMultCuts
Bool_t fCutNumberOfTracks
static AliFlowEventCuts * StandardCuts()
Double_t fImpactParameterMin
virtual ~AliFlowEventCuts()
Double_t fPrimaryVertexXmin
virtual Bool_t IsSelected(TObject *obj, TObject *objmc)
Float_t fCentralityPercentileMin
Bool_t fCutImpactParameter
Bool_t fCutTPCmultiplicityOutliers
void SetEtaRange(Float_t r1, Float_t r2)