]>
Commit | Line | Data |
---|---|---|
cc0afcfc | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | // AliAnalysisTaskQAflow: some simple QA used in flow analysis | |
17 | ||
2948ac5a | 18 | #include "TMath.h" |
19 | #include "TH1D.h" | |
20 | #include "TH2D.h" | |
21 | #include "TSeqCollection.h" | |
22 | #include "TObjArray.h" | |
23 | #include "TObjArray.h" | |
24 | #include "TChain.h" | |
25 | #include "TMCProcess.h" | |
26 | #include "TLorentzVector.h" | |
27 | #include "TDirectory.h" | |
28 | #include "TROOT.h" | |
076df7bf | 29 | #include "TNtuple.h" |
2948ac5a | 30 | |
31 | #include "AliLog.h" | |
32 | #include "AliVParticle.h" | |
33 | #include "AliMCParticle.h" | |
34 | #include "AliStack.h" | |
35 | #include "AliVEvent.h" | |
36 | #include "AliESDEvent.h" | |
37 | #include "AliMCEvent.h" | |
1c4a5bf7 | 38 | #include "AliESDVZERO.h" |
39 | #include "AliESDZDC.h" | |
2948ac5a | 40 | #include "AliESDtrack.h" |
41 | #include "AliFlowTrackCuts.h" | |
42 | #include "AliFlowEventCuts.h" | |
43 | #include "AliMultiplicity.h" | |
44 | #include "AliESDtrackCuts.h" | |
45 | #include "AliVertex.h" | |
076df7bf | 46 | #include "AliFlowEventSimple.h" |
d32716f4 | 47 | #include "AliFlowEvent.h" |
076df7bf | 48 | #include "AliFlowVector.h" |
2948ac5a | 49 | |
d32716f4 | 50 | #include "AliAnalysisTaskSE.h" |
2948ac5a | 51 | #include "AliAnalysisManager.h" |
d32716f4 | 52 | #include "AliInputEventHandler.h" |
2948ac5a | 53 | |
54 | #include "AliAnalysisTaskQAflow.h" | |
55 | ||
56 | ClassImp(AliAnalysisTaskQAflow) | |
57 | ||
58 | //________________________________________________________________________ | |
59 | AliAnalysisTaskQAflow::AliAnalysisTaskQAflow() | |
60 | : AliAnalysisTaskSE(), | |
61 | fOutput(NULL), | |
076df7bf | 62 | fFillNtuple(kFALSE), |
32b846cd | 63 | fDoCorrelations(kFALSE), |
076df7bf | 64 | fNtuple(NULL), |
2948ac5a | 65 | fEventCuts(NULL), |
66 | fTrackCuts(NULL) | |
67 | { | |
68 | // Default constructor | |
69 | } | |
70 | ||
71 | //________________________________________________________________________ | |
72 | AliAnalysisTaskQAflow::AliAnalysisTaskQAflow(const char* name) | |
73 | : AliAnalysisTaskSE(name), | |
74 | fOutput(NULL), | |
076df7bf | 75 | fFillNtuple(kFALSE), |
32b846cd | 76 | fDoCorrelations(kFALSE), |
076df7bf | 77 | fNtuple(NULL), |
2948ac5a | 78 | fEventCuts(NULL), |
79 | fTrackCuts(NULL) | |
80 | { | |
81 | // Constructor | |
076df7bf | 82 | DefineInput(1, AliFlowEventSimple::Class()); |
2948ac5a | 83 | DefineOutput(1, TObjArray::Class()); |
1c4a5bf7 | 84 | DefineOutput(2,TNtuple::Class()); |
2948ac5a | 85 | } |
86 | ||
87 | //________________________________________________________________________ | |
88 | void AliAnalysisTaskQAflow::UserCreateOutputObjects() | |
89 | { | |
90 | // Called once at the beginning | |
91 | fOutput=new TObjArray(); | |
2cdf5762 | 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"); |
2948ac5a | 93 | //TDirectory* before = gDirectory->mkdir("before cuts","before cuts"); |
94 | //TDirectory* after = gDirectory->mkdir("after cuts","after cuts"); | |
95 | TObjArray* before = new TObjArray(); | |
96 | TObjArray* after = new TObjArray(); | |
97 | fOutput->Add(before); | |
98 | fOutput->Add(after); | |
99 | ||
100 | //define histograms | |
101 | ||
102 | TH1* hist; | |
a1c43d26 | 103 | hist = new TH1I("all_tracklet_multiplicity","all tracklets",5000,0,5000); |
2948ac5a | 104 | before->Add(hist); after->Add(hist->Clone()); //0 |
a1c43d26 | 105 | hist = new TH1I("rptrack_multiplicity", "RP selection track multiplicity",5000,0,5000); |
2948ac5a | 106 | before->Add(hist); after->Add(hist->Clone()); //1 |
a1c43d26 | 107 | hist = new TH1I("rprefmult","RP selection refmult",30000, 0,30000); |
2948ac5a | 108 | before->Add(hist); after->Add(hist->Clone()); //2 |
a1c43d26 | 109 | hist = new TH1I("SPD_clusters","SPD clusters",10000,0,10000); |
2948ac5a | 110 | before->Add(hist); after->Add(hist->Clone()); //3 |
a1c43d26 | 111 | hist = new TH1D("primary_vertexZ","primary vertex z",1000,-20,20); |
2948ac5a | 112 | before->Add(hist); after->Add(hist->Clone()); //4 |
113 | hist = new TH1I("ITS_clusters_on_track", "ITS clusters on track", 8, 0, 8); | |
114 | before->Add(hist); after->Add(hist->Clone()); //5 | |
115 | hist = new TH1I("TPC_clusters_on_track", "TPC clusters on track", 159, 1, 160); | |
116 | before->Add(hist); after->Add(hist->Clone()); //6 | |
a1c43d26 | 117 | hist = new TH1D("TPC_chi2_per_cluster","TPC #chi^{2}/cluster",1000,0.0,5.0); |
2948ac5a | 118 | before->Add(hist); after->Add(hist->Clone()); //7 |
119 | hist = new TH1D("DCA_xy","DCA xy", 1000, -5.0, 5.0 ); | |
120 | before->Add(hist); after->Add(hist->Clone()); //8 | |
121 | hist = new TH1D("DCA_z","DCA z", 1000, -5.0, 5.0 ); | |
122 | before->Add(hist); after->Add(hist->Clone()); //9 | |
123 | hist = new TH1D("phi_tracklets","#phi tracklets", 1000, 0.0, TMath::TwoPi() ); | |
124 | before->Add(hist); after->Add(hist->Clone()); //10 | |
125 | hist = new TH1D("phi_tracks","#phi tracks", 1000, 0.0, TMath::TwoPi() ); | |
126 | before->Add(hist); after->Add(hist->Clone()); //11 | |
127 | hist = new TH1D("eta_tracklets","#eta tracklets", 1000, -2.0, 2.0 ); | |
128 | before->Add(hist); after->Add(hist->Clone()); //12 | |
129 | hist = new TH1D("eta_tracks","#eta tracks", 1000, -2.0, 2.0 ); | |
130 | before->Add(hist); after->Add(hist->Clone()); //13 | |
a1c43d26 | 131 | hist = new TH1D("TPC_vertex_z", "TPC vertex z", 1000,-20.0,20.0); |
2948ac5a | 132 | before->Add(hist); after->Add(hist->Clone()); //14 |
74d0740e | 133 | hist = new TH1D("ptyield", "p_{t} spectrum", 10000,0.0,10.0); |
134 | before->Add(hist); after->Add(hist->Clone()); //15 | |
1c4a5bf7 | 135 | hist = new TH1D("ptyieldplus", "p_{t} spectrum +", 10000,0.0,10.0); |
136 | before->Add(hist); after->Add(hist->Clone()); //16 | |
d32716f4 | 137 | hist = new TH1D("ptyieldneg", "p_{t} spectrum -", 10000,0.0,10.0); |
138 | before->Add(hist); after->Add(hist->Clone()); //17 | |
139 | hist = new TH1D("charges", "charge distribution", 5,-2.5,2.5); | |
e90a4b03 | 140 | before->Add(hist); after->Add(hist->Clone()); //18 |
32b846cd | 141 | hist = new TH1D("dphivsdeta", "#Delta#phi separation", 10000,-TMath::PiOver2(),TMath::Pi()+TMath::PiOver2()); |
a1c43d26 | 142 | before->Add(hist); after->Add(hist->Clone()); //19 |
143 | hist = new TH1I("standardTPC_multiplicity", "standard TPC track multiplicity",10000,0,10000); | |
144 | before->Add(hist); after->Add(hist->Clone()); //20 | |
145 | hist = new TH1I("standardV0_multiplicity", "standard V0 multiplicity",30000,0,30000); | |
146 | before->Add(hist); after->Add(hist->Clone()); //21 | |
147 | hist = new TH1I("standardSPD1clusters_multiplicity", "standard SPD1 clusters multiplicity",30000,0,30000); | |
148 | before->Add(hist); after->Add(hist->Clone()); //22 | |
149 | hist = new TH1I("standardSPDtracklets_multiplicity", "standard SPD tracklets multiplicity",30000,0,30000); | |
150 | before->Add(hist); after->Add(hist->Clone()); //23 | |
2948ac5a | 151 | |
152 | //post data here as it doesn't change anyway (the pointer to list anyway) | |
153 | ||
2948ac5a | 154 | PostData(1, fOutput); |
1c4a5bf7 | 155 | PostData(2, fNtuple); |
2948ac5a | 156 | } |
157 | ||
158 | //________________________________________________________________________ | |
159 | void AliAnalysisTaskQAflow::UserExec(Option_t *) | |
160 | { | |
161 | ||
162 | //get teh input data | |
163 | AliESDEvent* event = dynamic_cast<AliESDEvent*>(InputEvent()); | |
164 | if (!event) | |
165 | { | |
166 | AliFatal("no ESD event"); | |
167 | return; | |
168 | } | |
e90a4b03 | 169 | fTrackCuts->SetEvent(event); |
2948ac5a | 170 | |
171 | //TObjArray* before = ((TDirectory*)fOutput->At(0))->GetList(); | |
172 | //TObjArray* after = ((TDirectory*)fOutput->At(1))->GetList(); | |
173 | TObjArray* before = (TObjArray*)fOutput->At(0); | |
174 | TObjArray* after = (TObjArray*)fOutput->At(1); | |
422c61c7 | 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)); | |
185 | ||
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)); | |
2948ac5a | 224 | |
e821bc8b | 225 | Bool_t passevent = fEventCuts->IsSelected(event,0x0); |
32b846cd | 226 | Bool_t isSelectedEventSelection = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB); |
227 | ||
2948ac5a | 228 | AliMultiplicity* tracklets = const_cast<AliMultiplicity*>(event->GetMultiplicity()); |
229 | Int_t ntracklets=0; | |
230 | Int_t nspdclusters=0; | |
076df7bf | 231 | Int_t ntrackletsA=0; |
232 | Int_t ntrackletsC=0; | |
2948ac5a | 233 | if (tracklets) |
234 | { | |
235 | ntracklets = tracklets->GetNumberOfTracklets(); | |
a1c43d26 | 236 | nspdclusters = tracklets->GetNumberOfITSClusters(0,1); |
2948ac5a | 237 | for (Int_t i=0; i<tracklets->GetNumberOfTracklets(); i++) |
238 | { | |
239 | Bool_t pass=fTrackCuts->IsSelected(tracklets,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); | |
076df7bf | 244 | if (eta>0) ntrackletsC++; |
245 | else ntrackletsA++; | |
2948ac5a | 246 | } |
2948ac5a | 247 | } |
a1c43d26 | 248 | |
a1c43d26 | 249 | AliFlowEventCuts stdtpcrefmultcuts; |
250 | stdtpcrefmultcuts.SetRefMultMethod(AliFlowEventCuts::kTPConly); | |
251 | AliFlowEventCuts stdv0refmultcuts; | |
252 | stdv0refmultcuts.SetRefMultMethod(AliFlowEventCuts::kV0); | |
253 | AliFlowEventCuts stdspd1refmult; | |
254 | stdspd1refmult.SetRefMultMethod(AliFlowEventCuts::kSPD1clusters); | |
255 | AliFlowEventCuts stdspdrefmult; | |
256 | stdspdrefmult.SetRefMultMethod(AliFlowEventCuts::kSPDtracklets); | |
257 | ||
32b846cd | 258 | AliFlowEventSimple* flowevent=NULL; |
259 | AliFlowEventSimple* floweventin = dynamic_cast<AliFlowEventSimple*>(GetInputData(1)); | |
260 | if (!floweventin) flowevent = new AliFlowEvent(fTrackCuts,fTrackCuts); | |
261 | else flowevent = new AliFlowEventSimple(*floweventin); | |
262 | ||
263 | Int_t rpmult = flowevent->GetReferenceMultiplicity(); | |
2948ac5a | 264 | Int_t refmult = fEventCuts->RefMult(event); |
a1c43d26 | 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); | |
269 | ||
2948ac5a | 270 | htrackletmultB->Fill(ntracklets); if (passevent) htrackletmultA->Fill(ntracklets); |
32b846cd | 271 | htrackmultB->Fill(rpmult); if (passevent) htrackmultA->Fill(rpmult); |
2948ac5a | 272 | hrefmultB->Fill(refmult); if (passevent) hrefmultA->Fill( refmult); |
a1c43d26 | 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); | |
277 | ||
2948ac5a | 278 | hspdclustersB->Fill(nspdclusters); if (passevent) hspdclustersA->Fill( nspdclusters); |
279 | const AliVertex* vertex = event->GetPrimaryVertex(); | |
076df7bf | 280 | Float_t vtxz=0.0; |
281 | Float_t vtxx=0.0; | |
282 | Float_t vtxy=0.0; | |
2948ac5a | 283 | if (vertex) |
284 | { | |
285 | vtxz = vertex->GetZ(); | |
076df7bf | 286 | vtxx = vertex->GetX(); |
287 | vtxy = vertex->GetY(); | |
2948ac5a | 288 | hprimvtxzB->Fill(vtxz); if (passevent) hprimvtxzA->Fill(vtxz); |
289 | } | |
290 | const AliVertex* vertextpc = event->GetPrimaryVertexTPC(); | |
076df7bf | 291 | Float_t vtxTPCx=0.0; |
292 | Float_t vtxTPCy=0.0; | |
293 | Float_t vtxTPCz=0.0; | |
2948ac5a | 294 | if (vertextpc) |
295 | { | |
076df7bf | 296 | vtxTPCx = vertextpc->GetX(); |
297 | vtxTPCy = vertextpc->GetY(); | |
298 | vtxTPCz = vertextpc->GetZ(); | |
299 | hprimvtxzTPCB->Fill(vtxTPCz); if (passevent) hprimvtxzTPCA->Fill(vtxTPCz); | |
2948ac5a | 300 | } |
d32716f4 | 301 | const AliVertex* vertexspd = event->GetPrimaryVertexSPD(); |
302 | Float_t vtxSPDx=0.0; | |
303 | Float_t vtxSPDy=0.0; | |
304 | Float_t vtxSPDz=0.0; | |
305 | if (vertexspd) | |
306 | { | |
307 | vtxSPDx = vertexspd->GetX(); | |
308 | vtxSPDy = vertexspd->GetY(); | |
309 | vtxSPDz = vertexspd->GetZ(); | |
310 | } | |
1c4a5bf7 | 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(); | |
2cdf5762 | 321 | Float_t meanpt=0.; |
322 | Float_t rawmeanpt=0.; | |
d32716f4 | 323 | Float_t maxpt=0.0; |
076df7bf | 324 | Int_t ntracks=fTrackCuts->GetNumberOfInputObjects(); |
2cdf5762 | 325 | Int_t nselected=0; |
076df7bf | 326 | for (Int_t i=0; i<ntracks; i++) |
2948ac5a | 327 | { |
328 | TObject* obj = fTrackCuts->GetInputObject(i); | |
e90a4b03 | 329 | if (!obj) continue; |
2948ac5a | 330 | Bool_t pass = fTrackCuts->IsSelected(obj,i); |
2cdf5762 | 331 | if (pass) nselected++; |
2948ac5a | 332 | Float_t dcaxy=0.0; |
333 | Float_t dcaz=0.0; | |
334 | Float_t tpcchi2=0.0; | |
335 | Float_t tpcchi2percls=0.0; | |
336 | Int_t ntpccls=0; | |
337 | Int_t nitscls=0; | |
338 | Float_t eta=0.0; | |
339 | Float_t phi=0.0; | |
74d0740e | 340 | Float_t pt=0.0; |
d32716f4 | 341 | Short_t charge=0; |
2948ac5a | 342 | AliESDtrack* track = dynamic_cast<AliESDtrack*>(fTrackCuts->GetTrack()); |
343 | if (track) | |
344 | { | |
345 | track->GetImpactParameters(dcaxy,dcaz); | |
346 | tpcchi2=track->GetTPCchi2(); | |
347 | ntpccls=track->GetTPCNcls(); | |
348 | eta=track->Eta(); | |
349 | phi=track->Phi(); | |
74d0740e | 350 | pt=track->Pt(); |
d32716f4 | 351 | if (pt>maxpt) maxpt=pt; |
1c4a5bf7 | 352 | charge=track->Charge(); |
d32716f4 | 353 | rawmeanpt+=pt; |
354 | if (pass) meanpt+=pt; | |
2948ac5a | 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); | |
74d0740e | 364 | hptyieldB->Fill(pt); if (pass) hptyieldA->Fill(pt); |
1c4a5bf7 | 365 | if (charge>0) {hptyieldplusB->Fill(pt); if (pass) hptyieldplusA->Fill(pt);} |
366 | if (charge<0) {hptyieldnegB->Fill(pt); if (pass) hptyieldnegA->Fill(pt);} | |
e90a4b03 | 367 | hchargesB->Fill(charge); if (pass) hchargesA->Fill(charge); |
32b846cd | 368 | ///////////////////////////////////////////////////////////////////////////// |
369 | //// correlation part /////////////////////// | |
370 | ///////////////////////////////////////// | |
371 | if (fDoCorrelations) | |
a1c43d26 | 372 | { |
32b846cd | 373 | for (Int_t j=i+1; j<ntracks; j++) |
a1c43d26 | 374 | { |
32b846cd | 375 | TObject* obj2 = fTrackCuts->GetInputObject(j); |
376 | if (!obj2) continue; | |
377 | Bool_t pass2 = fTrackCuts->IsSelected(obj2,j); | |
378 | AliESDtrack* track2 = dynamic_cast<AliESDtrack*>(fTrackCuts->GetTrack()); | |
379 | if (track2) | |
380 | { | |
381 | Double_t dphi = phi-track2->Phi(); | |
382 | hphisepB->Fill(dphi); if (pass&&pass2) hphisepA->Fill(dphi); | |
383 | } | |
a1c43d26 | 384 | } |
32b846cd | 385 | }//correlations |
2948ac5a | 386 | } |
387 | } | |
32b846cd | 388 | if (nselected!=0) meanpt = meanpt/nselected; |
2cdf5762 | 389 | if (ntracks!=0) rawmeanpt = rawmeanpt/ntracks; |
d32716f4 | 390 | |
076df7bf | 391 | /////////////////////////////////////////////////////////////////////// |
d32716f4 | 392 | if (fFillNtuple) |
076df7bf | 393 | { |
d32716f4 | 394 | Double_t qx = 0.0; |
395 | Double_t qy = 0.0; | |
2cdf5762 | 396 | Double_t qm = 0.0; |
397 | Double_t qxp = 0.0; | |
398 | Double_t qyp = 0.0; | |
399 | Double_t qmp = 0.0; | |
400 | Double_t qxn = 0.0; | |
401 | Double_t qyn = 0.0; | |
402 | Double_t qmn = 0.0; | |
403 | Double_t qxa = 0.0; | |
404 | Double_t qya = 0.0; | |
405 | Double_t qma = 0.0; | |
406 | Double_t qxb = 0.0; | |
407 | Double_t qyb = 0.0; | |
408 | Double_t qmb = 0.0; | |
2cdf5762 | 409 | |
32b846cd | 410 | AliFlowVector qvec[2]; |
411 | ||
412 | qvec[0] = flowevent->GetQ(2); | |
413 | qx = qvec[0].X(); | |
414 | qy = qvec[0].Y(); | |
415 | qm = qvec[0].GetMult(); | |
416 | flowevent->TagSubeventsByCharge(); | |
417 | flowevent->Get2Qsub(qvec,2); | |
418 | qxp = qvec[0].X(); | |
419 | qyp = qvec[0].Y(); | |
420 | qmp = qvec[0].GetMult(); | |
421 | qxn = qvec[1].X(); | |
422 | qyn = qvec[1].Y(); | |
423 | qmn = qvec[1].GetMult(); | |
424 | flowevent->TagSubeventsInEta(-0.8,-0.1,0.1,0.8); | |
425 | flowevent->Get2Qsub(qvec,2); | |
426 | qxa = qvec[0].X(); | |
427 | qya = qvec[0].Y(); | |
428 | qma = qvec[0].GetMult(); | |
429 | qxb = qvec[1].X(); | |
430 | qyb = qvec[1].Y(); | |
431 | qmb = qvec[1].GetMult(); | |
2cdf5762 | 432 | |
2cdf5762 | 433 | |
434 | Float_t x[45]; | |
32b846cd | 435 | x[0]=meanpt; x[1]=qx; x[2]=qy; x[3]=rpmult; x[4]=refmult; x[5]=(isSelectedEventSelection)?1:0; |
1c4a5bf7 | 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; | |
d32716f4 | 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; | |
444 | x[24]=vtxSPDx; | |
445 | x[25]=vtxSPDy; | |
446 | x[26]=vtxSPDz; | |
447 | x[27]=vtxx; | |
448 | x[28]=vtxy; | |
449 | x[29]=vtxz; | |
450 | x[30]=rawmeanpt; | |
451 | x[31]=maxpt; | |
2cdf5762 | 452 | x[32]=qxp; |
453 | x[33]=qyp; | |
454 | x[34]=qxn; | |
455 | x[35]=qyn; | |
456 | x[36]=qxa; | |
457 | x[37]=qya; | |
458 | x[38]=qxb; | |
459 | x[39]=qyb; | |
460 | x[40]=qm; | |
461 | x[41]=qmp; | |
462 | x[42]=qmn; | |
463 | x[43]=qma; | |
464 | x[44]=qmb; | |
1c4a5bf7 | 465 | fNtuple->Fill(x); |
076df7bf | 466 | }//if flowevent |
32b846cd | 467 | |
468 | delete flowevent; | |
2948ac5a | 469 | } |
470 | ||
471 | //________________________________________________________________________ | |
472 | void AliAnalysisTaskQAflow::Terminate(Option_t *) | |
473 | { | |
474 | ||
475 | } | |
476 | ||
477 | //________________________________________________________________________ | |
478 | AliAnalysisTaskQAflow::~AliAnalysisTaskQAflow() | |
479 | { | |
480 | //dtor | |
481 | delete fTrackCuts; | |
482 | delete fEventCuts; | |
483 | } |