32 #include "Riostream.h" 37 #include "AliMultSelection.h" 38 #include "AliAnalysisUtils.h" 39 #include "AliVVertex.h" 40 #include "AliAODTrack.h" 41 #include "AliAODEvent.h" 42 #include "AliAODHeader.h" 43 #include "AliAODVertex.h" 44 #include "TMatrixDSym.h" 61 fNoOfMultipicityBins(100),
62 fMultipicityBinWidth(1.),
64 fOppositeChargesPOI(kFALSE),
65 fEvaluateDifferential3pCorrelator(kFALSE),
66 fCorrectForDetectorEffects(kFALSE),
67 fPrintOnTheScreen(kTRUE),
68 fCalculateVsM(kFALSE),
69 fShowBinLabelsVsM(kFALSE),
70 fUseParticleWeights(useParticleWeights),
71 fUsePhiWeights(kFALSE),
72 fUsePtWeights(kFALSE),
73 fUseEtaWeights(kFALSE),
74 fRejectPileUp(kFALSE),
75 fRejectPileUpTight(kFALSE),
76 fFillQAHistograms(kFALSE),
77 fTPCvsGlobalTrkBefore(NULL),
78 fTPCvsGlobalTrkAfter(NULL),
83 cout<<
"AliAnalysisTaskMixedHarmonics::AliAnalysisTaskMixedHarmonics(const char *name, Bool_t useParticleWeights)"<<endl;
87 DefineInput(0, AliFlowEventSimple::Class());
89 if(useParticleWeights)
91 DefineInput(1, TList::Class());
95 DefineOutput(1, TList::Class());
100 fMultSelection(NULL),
106 fNoOfMultipicityBins(0),
107 fMultipicityBinWidth(0),
109 fOppositeChargesPOI(kFALSE),
110 fEvaluateDifferential3pCorrelator(kFALSE),
111 fCorrectForDetectorEffects(kFALSE),
112 fPrintOnTheScreen(kFALSE),
113 fCalculateVsM(kFALSE),
114 fShowBinLabelsVsM(kFALSE),
115 fUseParticleWeights(kFALSE),
116 fUsePhiWeights(kFALSE),
117 fUsePtWeights(kFALSE),
118 fUseEtaWeights(kFALSE),
119 fRejectPileUp(kFALSE),
120 fRejectPileUpTight(kFALSE),
121 fFillQAHistograms(kFALSE),
122 fTPCvsGlobalTrkBefore(NULL),
123 fTPCvsGlobalTrkAfter(NULL),
128 cout<<
"AliAnalysisTaskMixedHarmonics::AliAnalysisTaskMixedHarmonics()"<<endl;
142 cout<<
"AliAnalysisTaskMixedHarmonics::UserCreateOutputObjects()"<<endl;
181 Printf(
"ERROR: Could not retrieve histogram list (MH, Task::UserCreateOutputObjects()) !!!!");
192 fTPCvsESDTrk =
new TH2F(
"fTPCvsESDTrk",
"ESDTrk vs TPC(FB128)",1000,0,20000,250,0,5000);
209 Bool_t kPileupEvent = kFALSE;
234 cout<<
"WARNING: No input data (MH, Task::UserExec()) !!!!"<<endl;
264 cout<<
" WARNING: histogram list pointer is empty (MH, Task::Terminate()) !!!!"<<endl;
284 fMultSelection = (AliMultSelection*) InputEvent()->FindListObject(
"MultSelection");
287 printf(
"\n\n **WARNING** ::UserExec() AliMultSelection object not found.\n\n");
300 Int_t isPileup = faod->IsPileupFromSPD(3);
305 if(((AliAODHeader*)faod->GetHeader())->GetRefMultiplicityComb08() < 0) {
309 if(faod->IsIncompleteDAQ()) {
313 if(fabs(centrV0M-centrCL1)> 5.0) {
319 const AliAODVertex* vtTrc = faod->GetPrimaryVertex();
320 const AliAODVertex* vtSPD = faod->GetPrimaryVertexSPD();
322 if(vtTrc->GetNContributors() < 2 || vtSPD->GetNContributors()<1) {
327 double covTrc[6], covSPD[6];
328 vtTrc->GetCovarianceMatrix(covTrc);
329 vtSPD->GetCovarianceMatrix(covSPD);
331 double dz = vtTrc->GetZ() - vtSPD->GetZ();
333 double errTot = TMath::Sqrt(covTrc[5]+covSPD[5]);
334 double errTrc = TMath::Sqrt(covTrc[5]);
335 double nsigTot = dz/errTot;
336 double nsigTrc = dz/errTrc;
338 if(TMath::Abs(dz)>0.2 || TMath::Abs(nsigTot)>10 || TMath::Abs(nsigTrc)>20) {
349 Int_t multITSfb96 = 0;
350 Int_t multITSfb32 = 0;
353 Int_t multGlobal = 0;
354 Int_t multTPCuncut = 0;
356 Int_t multEsd = ((AliAODHeader*)faod->GetHeader())->GetNumberOfESDTracks();
358 const Int_t nTracks = faod->GetNumberOfTracks();
360 for(
Int_t iTracks = 0; iTracks < nTracks; iTracks++) {
362 AliAODTrack* track = (AliAODTrack*)faod->GetTrack(iTracks);
365 if(track->TestFilterBit(128))
367 if(track->TestFilterBit(96))
370 if(track->TestFilterBit(1)) multTPCuncut++;
371 if(track->TestFilterBit(32)) multITSfb32++;
374 if(track->Pt()<0.2 || track->Pt()>5.0 || TMath::Abs(track->Eta())>0.8 || track->GetTPCNcls()<70 || track->GetTPCsignal()<10.0)
376 if(track->TestFilterBit(1) && track->Chi2perNDF()>0.2) multTPCFE++;
377 if(!track->TestFilterBit(16) || track->Chi2perNDF()<0.1)
continue;
380 Double_t bCov[3] = {-99., -99., -99.};
382 AliAODTrack copy(*track);
383 Double_t magField = faod->GetMagneticField();
386 if(track->PropagateToDCA(faod->GetPrimaryVertex(), magField, 100., b, bCov) && TMath::Abs(b[0]) < 0.3 && TMath::Abs(b[1]) < 0.3) multGlobal++;
397 Double_t multESDTPCDif = multEsdn - fPileUpSlopeParm*multTPCn;
418 if(multESDTPCDif > fPileUpConstParm) {
422 if(BisPileup==kFALSE) {
425 if(!
fMultSelection->GetThisEventIsNotPileupInMultBins()) BisPileup=kTRUE;
426 if(!
fMultSelection->GetThisEventHasNoInconsistentVertices()) BisPileup=kTRUE;
427 if(!
fMultSelection->GetThisEventPassesTrackletVsCluster()) BisPileup=kTRUE;
428 if(!
fMultSelection->GetThisEventIsNotIncompleteDAQ()) BisPileup=kTRUE;
429 if(!
fMultSelection->GetThisEventHasGoodVertex2016()) BisPileup=kTRUE;
451 const int kMinPlpContrib = 5;
452 const double kMaxPlpChi2 = 5.0;
453 const double kMinWDist = 15;
455 const AliVVertex* vtPrm = 0;
456 const AliVVertex* vtPlp = 0;
460 if(!(nPlp=faod->GetNumberOfPileupVerticesTracks()))
463 vtPrm = faod->GetPrimaryVertex();
464 if(vtPrm == faod->GetPrimaryVertexSPD())
469 for(
int ipl=0;ipl<nPlp;ipl++) {
470 vtPlp = (
const AliVVertex*)faod->GetPileupVertexTracks(ipl);
471 if (vtPlp->GetNContributors() < kMinPlpContrib)
continue;
472 if (vtPlp->GetChi2perNDF() > kMaxPlpChi2)
continue;
477 double wDst =
GetWDist(vtPrm,vtPlp);
478 if (wDst<kMinWDist)
continue;
489 AliDebug(2,
"\n\n ::GetWDist => One of vertices is not valid\n\n");
492 static TMatrixDSym vVb(3);
494 double dx = v0->GetX()-v1->GetX();
495 double dy = v0->GetY()-v1->GetY();
496 double dz = v0->GetZ()-v1->GetZ();
497 double cov0[6],cov1[6];
498 v0->GetCovarianceMatrix(cov0);
499 v1->GetCovarianceMatrix(cov1);
500 vVb(0,0) = cov0[0]+cov1[0];
501 vVb(1,1) = cov0[2]+cov1[2];
502 vVb(2,2) = cov0[5]+cov1[5];
503 vVb(1,0) = vVb(0,1) = cov0[1]+cov1[1];
504 vVb(0,2) = vVb(1,2) = vVb(2,0) = vVb(2,1) = 0.;
506 if (!vVb.IsValid()) {
507 AliDebug(2,
"Singular Matrix\n");
510 dist = vVb(0,0)*dx*dx + vVb(1,1)*dy*dy + vVb(2,2)*dz*dz
511 + 2*vVb(0,1)*dx*dy + 2*vVb(0,2)*dx*dz + 2*vVb(1,2)*dy*dz;
512 return dist>0 ? TMath::Sqrt(dist) : -1;
Double_t fMultipicityBinWidth
void SetMinMultiplicity(Double_t const mm)
virtual void GetOutputHistograms(TList *outputListHistos)
void SetHarmonic(Int_t const harmonic)
Int_t fNoOfMultipicityBins
AliFlowEventSimple * fEvent
Event selection.
void SetUseEtaWeights(Bool_t const uEtaW)
void SetOppositeChargesPOI(Bool_t const ocp)
TH2F * fTPCvsGlobalTrkBefore
Double_t fMinMultiplicity
AliMultSelection * fMultSelection
Bool_t fUseParticleWeights
void SetWeightsList(TList *const wl)
void SetUsePhiWeights(Bool_t const uPhiW)
TList * GetHistList() const
void SetNoOfMultipicityBins(Int_t const nomb)
AliFlowAnalysisWithMixedHarmonics * fMH
Bool_t fOppositeChargesPOI
virtual void Make(AliFlowEventSimple *anEvent)
TH2F * fTPCvsESDTrk
Global vs TPC tracks for QA.
void SetCorrectForDetectorEffects(Bool_t const cfde)
AliAnalysisUtils * fAnalysisUtil
MultSelection (RUN2 centrality estimator)
void SetPrintOnTheScreen(Bool_t const pots)
virtual void UserExec(Option_t *option)
void SetEvaluateDifferential3pCorrelator(Bool_t const ed3pc)
TList * fWeightsList
Global vs TPC tracks for QA.
void SetMultipicityBinWidth(Double_t const mbw)
virtual void UserCreateOutputObjects()
void SetShowBinLabelsVsM(Bool_t const sblvm)
void SetCalculateVsM(Bool_t const cvm)
Bool_t fEvaluateDifferential3pCorrelator
void SetUsePtWeights(Bool_t const uPtW)
virtual void Terminate(Option_t *)
TH2F * fTPCvsGlobalTrkAfter
Global vs TPC tracks for QA.
Bool_t fCorrectForDetectorEffects
double GetWDist(const AliVVertex *v0, const AliVVertex *v1)
Bool_t PileUpMultiVertex(const AliAODEvent *faod)
AliAnalysisTaskMixedHarmonics()
Bool_t CheckEventIsPileUp(AliAODEvent *faod)