21 #include "TSeqCollection.h"
22 #include "TObjArray.h"
23 #include "TObjArray.h"
25 #include "TMCProcess.h"
26 #include "TLorentzVector.h"
27 #include "TDirectory.h"
32 #include "AliVParticle.h"
33 #include "AliMCParticle.h"
35 #include "AliVEvent.h"
36 #include "AliESDEvent.h"
37 #include "AliMCEvent.h"
38 #include "AliESDVZERO.h"
39 #include "AliESDZDC.h"
40 #include "AliESDtrack.h"
43 #include "AliMultiplicity.h"
44 #include "AliESDtrackCuts.h"
45 #include "AliVertex.h"
50 #include "AliAnalysisTaskSE.h"
51 #include "AliAnalysisManager.h"
52 #include "AliInputEventHandler.h"
60 : AliAnalysisTaskSE(),
63 fDoCorrelations(kFALSE),
73 : AliAnalysisTaskSE(name),
76 fDoCorrelations(kFALSE),
82 DefineInput(1, AliFlowEventSimple::Class());
83 DefineOutput(1, TObjArray::Class());
84 DefineOutput(2,TNtuple::Class());
92 fNtuple =
new TNtuple(
"flowQAtree",
"flowQAtree",
"mpt:qx:qy:mul:rmul:phys:vtxtpcx:vtxtpcy:vtxtpcz:ntra:ntrc:mv0a:mv0c:zdcp1:zdcn1:zdcp2:zdcn2:zdcpart1:zdcpart2:t1:t2:t3:t4:t5:vtxspdx:vtxspdy:vtxspdz:vtxx:vtxy:vtxz:rawmeanpt:maxpt:qxp:qyp:qxn:qyn:qxa:qya:qxb:qyb:qm:qmp:qmn:qma:qmb");
95 TObjArray* before =
new TObjArray();
96 TObjArray* after =
new TObjArray();
103 hist =
new TH1I(
"all_tracklet_multiplicity",
"all tracklets",5000,0,5000);
104 before->Add(hist); after->Add(hist->Clone());
105 hist =
new TH1I(
"rptrack_multiplicity",
"RP selection track multiplicity",5000,0,5000);
106 before->Add(hist); after->Add(hist->Clone());
107 hist =
new TH1I(
"rprefmult",
"RP selection refmult",30000, 0,30000);
108 before->Add(hist); after->Add(hist->Clone());
109 hist =
new TH1I(
"SPD_clusters",
"SPD clusters",10000,0,10000);
110 before->Add(hist); after->Add(hist->Clone());
111 hist =
new TH1D(
"primary_vertexZ",
"primary vertex z",1000,-20,20);
112 before->Add(hist); after->Add(hist->Clone());
113 hist =
new TH1I(
"ITS_clusters_on_track",
"ITS clusters on track", 8, 0, 8);
114 before->Add(hist); after->Add(hist->Clone());
115 hist =
new TH1I(
"TPC_clusters_on_track",
"TPC clusters on track", 159, 1, 160);
116 before->Add(hist); after->Add(hist->Clone());
117 hist =
new TH1D(
"TPC_chi2_per_cluster",
"TPC #chi^{2}/cluster",1000,0.0,5.0);
118 before->Add(hist); after->Add(hist->Clone());
119 hist =
new TH1D(
"DCA_xy",
"DCA xy", 1000, -5.0, 5.0 );
120 before->Add(hist); after->Add(hist->Clone());
121 hist =
new TH1D(
"DCA_z",
"DCA z", 1000, -5.0, 5.0 );
122 before->Add(hist); after->Add(hist->Clone());
123 hist =
new TH1D(
"phi_tracklets",
"#phi tracklets", 1000, 0.0, TMath::TwoPi() );
124 before->Add(hist); after->Add(hist->Clone());
125 hist =
new TH1D(
"phi_tracks",
"#phi tracks", 1000, 0.0, TMath::TwoPi() );
126 before->Add(hist); after->Add(hist->Clone());
127 hist =
new TH1D(
"eta_tracklets",
"#eta tracklets", 1000, -2.0, 2.0 );
128 before->Add(hist); after->Add(hist->Clone());
129 hist =
new TH1D(
"eta_tracks",
"#eta tracks", 1000, -2.0, 2.0 );
130 before->Add(hist); after->Add(hist->Clone());
131 hist =
new TH1D(
"TPC_vertex_z",
"TPC vertex z", 1000,-20.0,20.0);
132 before->Add(hist); after->Add(hist->Clone());
133 hist =
new TH1D(
"ptyield",
"p_{t} spectrum", 10000,0.0,10.0);
134 before->Add(hist); after->Add(hist->Clone());
135 hist =
new TH1D(
"ptyieldplus",
"p_{t} spectrum +", 10000,0.0,10.0);
136 before->Add(hist); after->Add(hist->Clone());
137 hist =
new TH1D(
"ptyieldneg",
"p_{t} spectrum -", 10000,0.0,10.0);
138 before->Add(hist); after->Add(hist->Clone());
139 hist =
new TH1D(
"charges",
"charge distribution", 5,-2.5,2.5);
140 before->Add(hist); after->Add(hist->Clone());
141 hist =
new TH1D(
"dphivsdeta",
"#Delta#phi separation", 10000,-TMath::PiOver2(),TMath::Pi()+TMath::PiOver2());
142 before->Add(hist); after->Add(hist->Clone());
143 hist =
new TH1I(
"standardTPC_multiplicity",
"standard TPC track multiplicity",10000,0,10000);
144 before->Add(hist); after->Add(hist->Clone());
145 hist =
new TH1I(
"standardV0_multiplicity",
"standard V0 multiplicity",30000,0,30000);
146 before->Add(hist); after->Add(hist->Clone());
147 hist =
new TH1I(
"standardSPD1clusters_multiplicity",
"standard SPD1 clusters multiplicity",30000,0,30000);
148 before->Add(hist); after->Add(hist->Clone());
149 hist =
new TH1I(
"standardSPDtracklets_multiplicity",
"standard SPD tracklets multiplicity",30000,0,30000);
150 before->Add(hist); after->Add(hist->Clone());
163 AliESDEvent*
event =
dynamic_cast<AliESDEvent*
>(InputEvent());
166 AliFatal(
"no ESD event");
173 TObjArray* before = (TObjArray*)
fOutput->At(0);
174 TObjArray* after = (TObjArray*)
fOutput->At(1);
175 TH1* htrackletmultB =
static_cast<TH1*
>(before->At(0));
176 TH1* htrackletmultA =
static_cast<TH1*
>(after->At(0));
177 TH1* htrackmultB =
static_cast<TH1*
>(before->At(1));
178 TH1* htrackmultA =
static_cast<TH1*
>(after->At(1));
179 TH1* hrefmultB =
static_cast<TH1*
>(before->At(2));
180 TH1* hrefmultA =
static_cast<TH1*
>(after->At(2));
181 TH1* hspdclustersB =
static_cast<TH1*
>(before->At(3));
182 TH1* hspdclustersA =
static_cast<TH1*
>(after->At(3));
183 TH1* hprimvtxzB =
static_cast<TH1*
>(before->At(4));
184 TH1* hprimvtxzA =
static_cast<TH1*
>(after->At(4));
186 TH1* hITSclsB =
static_cast<TH1*
>(before->At(5));
187 TH1* hITSclsA =
static_cast<TH1*
>(after->At(5));
188 TH1* hTPCclsB =
static_cast<TH1*
>(before->At(6));
189 TH1* hTPCclsA =
static_cast<TH1*
>(after->At(6));
190 TH1* hTPCchi2B =
static_cast<TH1*
>(before->At(7));
191 TH1* hTPCchi2A =
static_cast<TH1*
>(after->At(7));
192 TH1* hdcaxyB =
static_cast<TH1*
>(before->At(8));
193 TH1* hdcaxyA =
static_cast<TH1*
>(after->At(8));
194 TH1* hdcazB =
static_cast<TH1*
>(before->At(9));
195 TH1* hdcazA =
static_cast<TH1*
>(after->At(9));
196 TH1* hphitrackletsB =
static_cast<TH1*
>(before->At(10));
197 TH1* hphitrackletsA =
static_cast<TH1*
>(after->At(10));
198 TH1* hphitracksB =
static_cast<TH1*
>(before->At(11));
199 TH1* hphitracksA =
static_cast<TH1*
>(after->At(11));
200 TH1* hetatrackletsB =
static_cast<TH1*
>(before->At(12));
201 TH1* hetatrackletsA =
static_cast<TH1*
>(after->At(12));
202 TH1* hetatracksB =
static_cast<TH1*
>(before->At(13));
203 TH1* hetatracksA =
static_cast<TH1*
>(after->At(13));
204 TH1* hprimvtxzTPCB =
static_cast<TH1*
>(before->At(14));
205 TH1* hprimvtxzTPCA =
static_cast<TH1*
>(after->At(14));
206 TH1* hptyieldB =
static_cast<TH1*
>(before->At(15));
207 TH1* hptyieldA =
static_cast<TH1*
>(after->At(15));
208 TH1* hptyieldplusB =
static_cast<TH1*
>(before->At(16));
209 TH1* hptyieldplusA =
static_cast<TH1*
>(after->At(16));
210 TH1* hptyieldnegB =
static_cast<TH1*
>(before->At(17));
211 TH1* hptyieldnegA =
static_cast<TH1*
>(after->At(17));
212 TH1* hchargesB =
static_cast<TH1*
>(before->At(18));
213 TH1* hchargesA =
static_cast<TH1*
>(after->At(18));
214 TH1* hphisepB =
static_cast<TH1*
>(before->At(19));
215 TH1* hphisepA =
static_cast<TH1*
>(after->At(19));
216 TH1* hstdtpcmultB =
static_cast<TH1*
>(before->At(20));
217 TH1* hstdtpcmultA =
static_cast<TH1*
>(after->At(20));
218 TH1* hstdv0multB =
static_cast<TH1*
>(before->At(21));
219 TH1* hstdv0multA =
static_cast<TH1*
>(after->At(21));
220 TH1* hstdspd1clsmultB =
static_cast<TH1*
>(before->At(22));
221 TH1* hstdspd1clsmultA =
static_cast<TH1*
>(after->At(22));
222 TH1* hstdspdtrmultB =
static_cast<TH1*
>(before->At(23));
223 TH1* hstdspdtrmultA =
static_cast<TH1*
>(after->At(23));
226 Bool_t isSelectedEventSelection = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
228 AliMultiplicity* tracklets =
const_cast<AliMultiplicity*
>(
event->GetMultiplicity());
230 Int_t nspdclusters=0;
235 ntracklets = tracklets->GetNumberOfTracklets();
236 nspdclusters = tracklets->GetNumberOfITSClusters(0,1);
237 for (Int_t i=0; i<tracklets->GetNumberOfTracklets(); i++)
240 Float_t phi=tracklets->GetPhi(i);
241 Float_t eta=tracklets->GetEta(i);
242 hphitrackletsB->Fill(phi);
if (pass) hphitrackletsA->Fill(phi);
243 hetatrackletsB->Fill(eta);
if (pass) hetatrackletsA->Fill(eta);
244 if (eta>0) ntrackletsC++;
265 Int_t refmultv0 = stdv0refmultcuts.
RefMult(event);
266 Int_t refmulttpc = stdtpcrefmultcuts.
RefMult(event);
267 Int_t refmultspdtr = stdspdrefmult.
RefMult(event);
268 Int_t refmultspdcls = stdspd1refmult.
RefMult(event);
270 htrackletmultB->Fill(ntracklets);
if (passevent) htrackletmultA->Fill(ntracklets);
271 htrackmultB->Fill(rpmult);
if (passevent) htrackmultA->Fill(rpmult);
272 hrefmultB->Fill(refmult);
if (passevent) hrefmultA->Fill( refmult);
273 hstdv0multB->Fill(refmultv0);
if (passevent) hstdv0multA->Fill( refmultv0);
274 hstdtpcmultB->Fill(refmulttpc);
if (passevent) hstdtpcmultA->Fill( refmulttpc);
275 hstdspd1clsmultB->Fill(refmultspdcls);
if (passevent) hstdspd1clsmultA->Fill( refmultspdcls);
276 hstdspdtrmultB->Fill(refmultspdtr);
if (passevent) hstdspdtrmultA->Fill( refmultspdtr);
278 hspdclustersB->Fill(nspdclusters);
if (passevent) hspdclustersA->Fill( nspdclusters);
279 const AliVertex* vertex =
event->GetPrimaryVertex();
285 vtxz = vertex->GetZ();
286 vtxx = vertex->GetX();
287 vtxy = vertex->GetY();
288 hprimvtxzB->Fill(vtxz);
if (passevent) hprimvtxzA->Fill(vtxz);
290 const AliVertex* vertextpc =
event->GetPrimaryVertexTPC();
296 vtxTPCx = vertextpc->GetX();
297 vtxTPCy = vertextpc->GetY();
298 vtxTPCz = vertextpc->GetZ();
299 hprimvtxzTPCB->Fill(vtxTPCz);
if (passevent) hprimvtxzTPCA->Fill(vtxTPCz);
301 const AliVertex* vertexspd =
event->GetPrimaryVertexSPD();
307 vtxSPDx = vertexspd->GetX();
308 vtxSPDy = vertexspd->GetY();
309 vtxSPDz = vertexspd->GetZ();
311 AliESDVZERO* vzero=
event->GetVZEROData();
312 AliESDZDC* zdc=
event->GetESDZDC();
313 Float_t mv0a=vzero->GetMTotV0A();
314 Float_t mv0c=vzero->GetMTotV0C();
315 Float_t zdcp1=zdc->GetZDCP1Energy();
316 Float_t zdcn1=zdc->GetZDCN1Energy();
317 Float_t zdcp2=zdc->GetZDCP2Energy();
318 Float_t zdcn2=zdc->GetZDCN2Energy();
319 Float_t zdcpart1=zdc->GetZDCPartSideA();
320 Float_t zdcpart2=zdc->GetZDCPartSideC();
322 Float_t rawmeanpt=0.;
326 for (Int_t i=0; i<ntracks; i++)
331 if (pass) nselected++;
335 Float_t tpcchi2percls=0.0;
345 track->GetImpactParameters(dcaxy,dcaz);
346 tpcchi2=track->GetTPCchi2();
347 ntpccls=track->GetTPCNcls();
351 if (pt>maxpt) maxpt=pt;
352 charge=track->Charge();
354 if (pass) meanpt+=pt;
355 tpcchi2percls= (ntpccls==0)?0.0:tpcchi2/ntpccls;
356 nitscls = track->GetNcls(0);
357 hITSclsB->Fill(nitscls);
if (pass) hITSclsA->Fill( nitscls);
358 hTPCclsB->Fill(ntpccls);
if (pass) hTPCclsA->Fill( ntpccls);
359 hTPCchi2B->Fill(tpcchi2percls);
if (pass) hTPCchi2A->Fill( tpcchi2percls);
360 hdcaxyB->Fill(dcaxy);
if (pass) hdcaxyA->Fill( dcaxy);
361 hdcazB->Fill(dcaz);
if (pass) hdcazA->Fill(dcaz);
362 hetatracksB->Fill(eta);
if (pass) hetatracksA->Fill(eta);
363 hphitracksB->Fill(phi);
if (pass) hphitracksA->Fill(phi);
364 hptyieldB->Fill(pt);
if (pass) hptyieldA->Fill(pt);
365 if (charge>0) {hptyieldplusB->Fill(pt);
if (pass) hptyieldplusA->Fill(pt);}
366 if (charge<0) {hptyieldnegB->Fill(pt);
if (pass) hptyieldnegA->Fill(pt);}
367 hchargesB->Fill(charge);
if (pass) hchargesA->Fill(charge);
373 for (Int_t j=i+1; j<ntracks; j++)
381 Double_t dphi = phi-track2->Phi();
382 hphisepB->Fill(dphi);
if (pass&&pass2) hphisepA->Fill(dphi);
388 if (nselected!=0) meanpt = meanpt/nselected;
389 if (ntracks!=0) rawmeanpt = rawmeanpt/ntracks;
412 qvec[0] = flowevent->
GetQ(2);
435 x[0]=meanpt; x[1]=qx; x[2]=qy; x[3]=rpmult; x[4]=refmult; x[5]=(isSelectedEventSelection)?1:0;
436 x[6]=vtxTPCx; x[7]=vtxTPCy; x[8]=vtxTPCz; x[9]=ntrackletsA; x[10]=ntrackletsC;
437 x[11]=mv0a; x[12]=mv0c; x[13]=zdcp1; x[14]=zdcn1; x[15]=zdcp2; x[16]=zdcn2;
438 x[17]=zdcpart1; x[18]=zdcpart2;
439 x[19]=0;
if (event->IsTriggerClassFired(
"CMBAC-B-NOPF-ALL")) x[19]=1;
440 x[20]=0;
if (event->IsTriggerClassFired(
"CMBS2C-B-NOPF-ALL")) x[20]=1;
441 x[21]=0;
if (event->IsTriggerClassFired(
"CMBS2A-B-NOPF-ALL")) x[21]=1;
442 x[22]=0;
if (event->IsTriggerClassFired(
"CMBAC-A-NOPF-ALL")) x[22]=1;
443 x[23]=0;
if (event->IsTriggerClassFired(
"CMBAC-C-NOPF-ALL")) x[23]=1;
virtual AliFlowVector GetQ(Int_t n=2, TList *weightsList=NULL, Bool_t usePhiWeights=kFALSE, Bool_t usePtWeights=kFALSE, Bool_t useEtaWeights=kFALSE)
TObject * GetInputObject(Int_t i)
void TagSubeventsByCharge()
AliFlowEventCuts * fEventCuts
void SetRefMultMethod(refMultMethod m)
virtual void Terminate(Option_t *)
virtual Bool_t IsSelected(TObject *obj, Int_t id=-666)
virtual void UserCreateOutputObjects()
virtual ~AliAnalysisTaskQAflow()
Int_t GetNumberOfInputObjects() const
Int_t RefMult(AliVEvent *event, AliMCEvent *mcEvent=0x0)
ClassImp(AliAnalysisTaskQAflow) AliAnalysisTaskQAflow
virtual void Get2Qsub(AliFlowVector *Qarray, Int_t n=2, TList *weightsList=NULL, Bool_t usePhiWeights=kFALSE, Bool_t usePtWeights=kFALSE, Bool_t useEtaWeights=kFALSE)
virtual void UserExec(Option_t *option)
Int_t GetReferenceMultiplicity() const
void SetEvent(AliVEvent *event, AliMCEvent *mcEvent=NULL)
AliFlowTrackCuts * fTrackCuts
void TagSubeventsInEta(Double_t etaMinA, Double_t etaMaxA, Double_t etaMinB, Double_t etaMaxB)
virtual Bool_t IsSelected(TObject *obj, TObject *objmc)
AliVParticle * GetTrack() const