]>
Commit | Line | Data |
---|---|---|
2948ac5a | 1 | #include "TMath.h" |
2 | #include "TH1D.h" | |
3 | #include "TH2D.h" | |
4 | #include "TSeqCollection.h" | |
5 | #include "TObjArray.h" | |
6 | #include "TObjArray.h" | |
7 | #include "TChain.h" | |
8 | #include "TMCProcess.h" | |
9 | #include "TLorentzVector.h" | |
10 | #include "TDirectory.h" | |
11 | #include "TROOT.h" | |
076df7bf | 12 | #include "TNtuple.h" |
2948ac5a | 13 | |
14 | #include "AliLog.h" | |
15 | #include "AliVParticle.h" | |
16 | #include "AliMCParticle.h" | |
17 | #include "AliStack.h" | |
18 | #include "AliVEvent.h" | |
19 | #include "AliESDEvent.h" | |
20 | #include "AliMCEvent.h" | |
1c4a5bf7 | 21 | #include "AliESDVZERO.h" |
22 | #include "AliESDZDC.h" | |
2948ac5a | 23 | #include "AliESDtrack.h" |
24 | #include "AliFlowTrackCuts.h" | |
25 | #include "AliFlowEventCuts.h" | |
26 | #include "AliMultiplicity.h" | |
27 | #include "AliESDtrackCuts.h" | |
28 | #include "AliVertex.h" | |
076df7bf | 29 | #include "AliFlowEventSimple.h" |
30 | #include "AliFlowVector.h" | |
2948ac5a | 31 | |
32 | #include "AliAnalysisTask.h" | |
33 | #include "AliAnalysisManager.h" | |
34 | ||
35 | #include "AliAnalysisTaskQAflow.h" | |
36 | ||
37 | ClassImp(AliAnalysisTaskQAflow) | |
38 | ||
39 | //________________________________________________________________________ | |
40 | AliAnalysisTaskQAflow::AliAnalysisTaskQAflow() | |
41 | : AliAnalysisTaskSE(), | |
42 | fOutput(NULL), | |
076df7bf | 43 | fFillNtuple(kFALSE), |
44 | fNtuple(NULL), | |
2948ac5a | 45 | fEventCuts(NULL), |
46 | fTrackCuts(NULL) | |
47 | { | |
48 | // Default constructor | |
49 | } | |
50 | ||
51 | //________________________________________________________________________ | |
52 | AliAnalysisTaskQAflow::AliAnalysisTaskQAflow(const char* name) | |
53 | : AliAnalysisTaskSE(name), | |
54 | fOutput(NULL), | |
076df7bf | 55 | fFillNtuple(kFALSE), |
56 | fNtuple(NULL), | |
2948ac5a | 57 | fEventCuts(NULL), |
58 | fTrackCuts(NULL) | |
59 | { | |
60 | // Constructor | |
076df7bf | 61 | DefineInput(1, AliFlowEventSimple::Class()); |
2948ac5a | 62 | DefineOutput(1, TObjArray::Class()); |
1c4a5bf7 | 63 | DefineOutput(2,TNtuple::Class()); |
2948ac5a | 64 | } |
65 | ||
66 | //________________________________________________________________________ | |
67 | void AliAnalysisTaskQAflow::UserCreateOutputObjects() | |
68 | { | |
69 | // Called once at the beginning | |
70 | fOutput=new TObjArray(); | |
1c4a5bf7 | 71 | fNtuple = new TNtuple("flowQAtree","flowQAtree","mpt:qx:qy:mul:rmul:trg:vtxx:vtxy:vtxz:ntra:ntrc:mv0a:mv0c:zdcp1:zdcn1:zdcp2:zdcn2:zdcpart1:zdcpart2"); |
2948ac5a | 72 | //TDirectory* before = gDirectory->mkdir("before cuts","before cuts"); |
73 | //TDirectory* after = gDirectory->mkdir("after cuts","after cuts"); | |
74 | TObjArray* before = new TObjArray(); | |
75 | TObjArray* after = new TObjArray(); | |
76 | fOutput->Add(before); | |
77 | fOutput->Add(after); | |
78 | ||
79 | //define histograms | |
80 | ||
81 | TH1* hist; | |
82 | hist = new TH1I("tracklet_multiplicity","tracklet multiplicity",1000,0,20000); | |
83 | before->Add(hist); after->Add(hist->Clone()); //0 | |
84 | hist = new TH1I("track_multiplicity", "standard TPC track multiplicity",1000,0,10000); | |
85 | before->Add(hist); after->Add(hist->Clone()); //1 | |
86 | hist = new TH1I("refmult","refmult",1000, 0,10000); | |
87 | before->Add(hist); after->Add(hist->Clone()); //2 | |
88 | hist = new TH1I("SPD_clusters","SPD clusters",1000,0,100000); | |
89 | before->Add(hist); after->Add(hist->Clone()); //3 | |
90 | hist = new TH1D("primary_vertexZ","primary vertex z",100,-20,20); | |
91 | before->Add(hist); after->Add(hist->Clone()); //4 | |
92 | hist = new TH1I("ITS_clusters_on_track", "ITS clusters on track", 8, 0, 8); | |
93 | before->Add(hist); after->Add(hist->Clone()); //5 | |
94 | hist = new TH1I("TPC_clusters_on_track", "TPC clusters on track", 159, 1, 160); | |
95 | before->Add(hist); after->Add(hist->Clone()); //6 | |
96 | hist = new TH1D("TPC_chi2_per_cluster","TPC #chi^{2}/cluster",100,0.0,5.0); | |
97 | before->Add(hist); after->Add(hist->Clone()); //7 | |
98 | hist = new TH1D("DCA_xy","DCA xy", 1000, -5.0, 5.0 ); | |
99 | before->Add(hist); after->Add(hist->Clone()); //8 | |
100 | hist = new TH1D("DCA_z","DCA z", 1000, -5.0, 5.0 ); | |
101 | before->Add(hist); after->Add(hist->Clone()); //9 | |
102 | hist = new TH1D("phi_tracklets","#phi tracklets", 1000, 0.0, TMath::TwoPi() ); | |
103 | before->Add(hist); after->Add(hist->Clone()); //10 | |
104 | hist = new TH1D("phi_tracks","#phi tracks", 1000, 0.0, TMath::TwoPi() ); | |
105 | before->Add(hist); after->Add(hist->Clone()); //11 | |
106 | hist = new TH1D("eta_tracklets","#eta tracklets", 1000, -2.0, 2.0 ); | |
107 | before->Add(hist); after->Add(hist->Clone()); //12 | |
108 | hist = new TH1D("eta_tracks","#eta tracks", 1000, -2.0, 2.0 ); | |
109 | before->Add(hist); after->Add(hist->Clone()); //13 | |
110 | hist = new TH1D("TPC_vertex_z", "TPC vertex z", 100,-20.0,20.0); | |
111 | before->Add(hist); after->Add(hist->Clone()); //14 | |
74d0740e | 112 | hist = new TH1D("ptyield", "p_{t} spectrum", 10000,0.0,10.0); |
113 | before->Add(hist); after->Add(hist->Clone()); //15 | |
1c4a5bf7 | 114 | hist = new TH1D("ptyieldplus", "p_{t} spectrum +", 10000,0.0,10.0); |
115 | before->Add(hist); after->Add(hist->Clone()); //16 | |
116 | hist = new TH1D("ptyieldneg", "p_{t} spectrum +", 10000,0.0,10.0); | |
117 | before->Add(hist); after->Add(hist->Clone()); //17 | |
2948ac5a | 118 | |
119 | //post data here as it doesn't change anyway (the pointer to list anyway) | |
120 | ||
121 | //restore dir add status | |
6f59a2c4 | 122 | PostData(0, fNtuple); |
2948ac5a | 123 | PostData(1, fOutput); |
1c4a5bf7 | 124 | PostData(2, fNtuple); |
2948ac5a | 125 | } |
126 | ||
127 | //________________________________________________________________________ | |
128 | void AliAnalysisTaskQAflow::UserExec(Option_t *) | |
129 | { | |
130 | ||
131 | //get teh input data | |
132 | AliESDEvent* event = dynamic_cast<AliESDEvent*>(InputEvent()); | |
133 | if (!event) | |
134 | { | |
135 | AliFatal("no ESD event"); | |
136 | return; | |
137 | } | |
138 | ||
139 | //TObjArray* before = ((TDirectory*)fOutput->At(0))->GetList(); | |
140 | //TObjArray* after = ((TDirectory*)fOutput->At(1))->GetList(); | |
141 | TObjArray* before = (TObjArray*)fOutput->At(0); | |
142 | TObjArray* after = (TObjArray*)fOutput->At(1); | |
143 | TH1* htrackletmultB = dynamic_cast<TH1*>(before->At(0)); | |
144 | TH1* htrackletmultA = dynamic_cast<TH1*>(after->At(0)); | |
145 | TH1* htrackmultB = dynamic_cast<TH1*>(before->At(1)); | |
146 | TH1* htrackmultA = dynamic_cast<TH1*>(after->At(1)); | |
147 | TH1* hrefmultB = dynamic_cast<TH1*>(before->At(2)); | |
148 | TH1* hrefmultA = dynamic_cast<TH1*>(after->At(2)); | |
149 | TH1* hspdclustersB = dynamic_cast<TH1*>(before->At(3)); | |
150 | TH1* hspdclustersA = dynamic_cast<TH1*>(after->At(3)); | |
151 | TH1* hprimvtxzB = dynamic_cast<TH1*>(before->At(4)); | |
152 | TH1* hprimvtxzA = dynamic_cast<TH1*>(after->At(4)); | |
153 | ||
154 | TH1* hITSclsB = dynamic_cast<TH1*>(before->At(5)); | |
155 | TH1* hITSclsA = dynamic_cast<TH1*>(after->At(5)); | |
156 | TH1* hTPCclsB = dynamic_cast<TH1*>(before->At(6)); | |
157 | TH1* hTPCclsA = dynamic_cast<TH1*>(after->At(6)); | |
158 | TH1* hTPCchi2B = dynamic_cast<TH1*>(before->At(7)); | |
159 | TH1* hTPCchi2A = dynamic_cast<TH1*>(after->At(7)); | |
160 | TH1* hdcaxyB = dynamic_cast<TH1*>(before->At(8)); | |
161 | TH1* hdcaxyA = dynamic_cast<TH1*>(after->At(8)); | |
162 | TH1* hdcazB = dynamic_cast<TH1*>(before->At(9)); | |
163 | TH1* hdcazA = dynamic_cast<TH1*>(after->At(9)); | |
164 | TH1* hphitrackletsB = dynamic_cast<TH1*>(before->At(10)); | |
165 | TH1* hphitrackletsA = dynamic_cast<TH1*>(after->At(10)); | |
166 | TH1* hphitracksB = dynamic_cast<TH1*>(before->At(11)); | |
167 | TH1* hphitracksA = dynamic_cast<TH1*>(after->At(11)); | |
168 | TH1* hetatrackletsB = dynamic_cast<TH1*>(before->At(12)); | |
169 | TH1* hetatrackletsA = dynamic_cast<TH1*>(after->At(12)); | |
170 | TH1* hetatracksB = dynamic_cast<TH1*>(before->At(13)); | |
171 | TH1* hetatracksA = dynamic_cast<TH1*>(after->At(13)); | |
172 | TH1* hprimvtxzTPCB = dynamic_cast<TH1*>(before->At(14)); | |
173 | TH1* hprimvtxzTPCA = dynamic_cast<TH1*>(after->At(14)); | |
74d0740e | 174 | TH1* hptyieldB = dynamic_cast<TH1*>(before->At(15)); |
175 | TH1* hptyieldA = dynamic_cast<TH1*>(after->At(15)); | |
1c4a5bf7 | 176 | TH1* hptyieldplusB = dynamic_cast<TH1*>(before->At(16)); |
177 | TH1* hptyieldplusA = dynamic_cast<TH1*>(after->At(16)); | |
178 | TH1* hptyieldnegB = dynamic_cast<TH1*>(before->At(17)); | |
179 | TH1* hptyieldnegA = dynamic_cast<TH1*>(after->At(17)); | |
2948ac5a | 180 | |
181 | AliMultiplicity* tracklets = const_cast<AliMultiplicity*>(event->GetMultiplicity()); | |
182 | Int_t ntracklets=0; | |
183 | Int_t nspdclusters=0; | |
076df7bf | 184 | Int_t nspd1clusters=0; |
185 | Int_t ntrackletsA=0; | |
186 | Int_t ntrackletsC=0; | |
2948ac5a | 187 | if (tracklets) |
188 | { | |
189 | ntracklets = tracklets->GetNumberOfTracklets(); | |
190 | nspdclusters = tracklets->GetNumberOfITSClusters(0,1); | |
076df7bf | 191 | nspd1clusters = tracklets->GetNumberOfITSClusters(1); |
2948ac5a | 192 | for (Int_t i=0; i<tracklets->GetNumberOfTracklets(); i++) |
193 | { | |
194 | Bool_t pass=fTrackCuts->IsSelected(tracklets,i); | |
195 | Float_t phi=tracklets->GetPhi(i); | |
196 | Float_t eta=tracklets->GetEta(i); | |
197 | hphitrackletsB->Fill(phi); if (pass) hphitrackletsA->Fill(phi); | |
198 | hetatrackletsB->Fill(eta); if (pass) hetatrackletsA->Fill(eta); | |
076df7bf | 199 | if (eta>0) ntrackletsC++; |
200 | else ntrackletsA++; | |
2948ac5a | 201 | } |
2948ac5a | 202 | } |
0e3a89af | 203 | //Int_t trackmult = AliESDtrackCuts::GetReferenceMultiplicity(event,kTRUE); |
204 | AliFlowEventCuts newcuts; | |
205 | newcuts.SetRefMultCuts(fTrackCuts); | |
206 | Int_t trackmult = newcuts.RefMult(event); | |
2948ac5a | 207 | Int_t refmult = fEventCuts->RefMult(event); |
208 | Bool_t passevent = fEventCuts->IsSelected(event); | |
209 | htrackletmultB->Fill(ntracklets); if (passevent) htrackletmultA->Fill(ntracklets); | |
210 | htrackmultB->Fill(trackmult); if (passevent) htrackmultA->Fill( trackmult); | |
211 | hrefmultB->Fill(refmult); if (passevent) hrefmultA->Fill( refmult); | |
212 | hspdclustersB->Fill(nspdclusters); if (passevent) hspdclustersA->Fill( nspdclusters); | |
213 | const AliVertex* vertex = event->GetPrimaryVertex(); | |
076df7bf | 214 | Float_t vtxz=0.0; |
215 | Float_t vtxx=0.0; | |
216 | Float_t vtxy=0.0; | |
2948ac5a | 217 | if (vertex) |
218 | { | |
219 | vtxz = vertex->GetZ(); | |
076df7bf | 220 | vtxx = vertex->GetX(); |
221 | vtxy = vertex->GetY(); | |
2948ac5a | 222 | hprimvtxzB->Fill(vtxz); if (passevent) hprimvtxzA->Fill(vtxz); |
223 | } | |
224 | const AliVertex* vertextpc = event->GetPrimaryVertexTPC(); | |
076df7bf | 225 | Float_t vtxTPCx=0.0; |
226 | Float_t vtxTPCy=0.0; | |
227 | Float_t vtxTPCz=0.0; | |
2948ac5a | 228 | if (vertextpc) |
229 | { | |
076df7bf | 230 | vtxTPCx = vertextpc->GetX(); |
231 | vtxTPCy = vertextpc->GetY(); | |
232 | vtxTPCz = vertextpc->GetZ(); | |
233 | hprimvtxzTPCB->Fill(vtxTPCz); if (passevent) hprimvtxzTPCA->Fill(vtxTPCz); | |
2948ac5a | 234 | } |
1c4a5bf7 | 235 | AliESDVZERO* vzero=event->GetVZEROData(); |
236 | AliESDZDC* zdc=event->GetESDZDC(); | |
237 | Float_t mv0a=vzero->GetMTotV0A(); | |
238 | Float_t mv0c=vzero->GetMTotV0C(); | |
239 | Float_t zdcp1=zdc->GetZDCP1Energy(); | |
240 | Float_t zdcn1=zdc->GetZDCN1Energy(); | |
241 | Float_t zdcp2=zdc->GetZDCP2Energy(); | |
242 | Float_t zdcn2=zdc->GetZDCN2Energy(); | |
243 | Float_t zdcpart1=zdc->GetZDCPartSideA(); | |
244 | Float_t zdcpart2=zdc->GetZDCPartSideC(); | |
2948ac5a | 245 | fTrackCuts->SetEvent(event); |
076df7bf | 246 | Float_t meanpt=0; |
247 | Int_t ntracks=fTrackCuts->GetNumberOfInputObjects(); | |
248 | for (Int_t i=0; i<ntracks; i++) | |
2948ac5a | 249 | { |
250 | TObject* obj = fTrackCuts->GetInputObject(i); | |
251 | Bool_t pass = fTrackCuts->IsSelected(obj,i); | |
252 | Float_t dcaxy=0.0; | |
253 | Float_t dcaz=0.0; | |
254 | Float_t tpcchi2=0.0; | |
255 | Float_t tpcchi2percls=0.0; | |
256 | Int_t ntpccls=0; | |
257 | Int_t nitscls=0; | |
258 | Float_t eta=0.0; | |
259 | Float_t phi=0.0; | |
74d0740e | 260 | Float_t pt=0.0; |
1c4a5bf7 | 261 | Double_t charge=0.0; |
2948ac5a | 262 | AliESDtrack* track = dynamic_cast<AliESDtrack*>(fTrackCuts->GetTrack()); |
263 | if (track) | |
264 | { | |
265 | track->GetImpactParameters(dcaxy,dcaz); | |
266 | tpcchi2=track->GetTPCchi2(); | |
267 | ntpccls=track->GetTPCNcls(); | |
268 | eta=track->Eta(); | |
269 | phi=track->Phi(); | |
74d0740e | 270 | pt=track->Pt(); |
1c4a5bf7 | 271 | charge=track->Charge(); |
74d0740e | 272 | meanpt+=pt; |
2948ac5a | 273 | tpcchi2percls= (ntpccls==0)?0.0:tpcchi2/ntpccls; |
274 | nitscls = track->GetNcls(0); | |
275 | hITSclsB->Fill(nitscls); if (pass) hITSclsA->Fill( nitscls); | |
276 | hTPCclsB->Fill(ntpccls); if (pass) hTPCclsA->Fill( ntpccls); | |
277 | hTPCchi2B->Fill(tpcchi2percls); if (pass) hTPCchi2A->Fill( tpcchi2percls); | |
278 | hdcaxyB->Fill(dcaxy); if (pass) hdcaxyA->Fill( dcaxy); | |
279 | hdcazB->Fill(dcaz); if (pass) hdcazA->Fill(dcaz); | |
280 | hetatracksB->Fill(eta); if (pass) hetatracksA->Fill(eta); | |
281 | hphitracksB->Fill(phi); if (pass) hphitracksA->Fill(phi); | |
74d0740e | 282 | hptyieldB->Fill(pt); if (pass) hptyieldA->Fill(pt); |
1c4a5bf7 | 283 | if (charge>0) {hptyieldplusB->Fill(pt); if (pass) hptyieldplusA->Fill(pt);} |
284 | if (charge<0) {hptyieldnegB->Fill(pt); if (pass) hptyieldnegA->Fill(pt);} | |
2948ac5a | 285 | } |
286 | } | |
076df7bf | 287 | meanpt = meanpt/ntracks; |
288 | ||
289 | /////////////////////////////////////////////////////////////////////// | |
290 | //the ntuple part///////////// | |
291 | AliFlowEventSimple* flowevent = dynamic_cast<AliFlowEventSimple*>(GetInputData(1)); | |
292 | if (flowevent && fFillNtuple) | |
293 | { | |
294 | AliFlowVector qvec = flowevent->GetQ(2); | |
295 | Double_t qx = qvec.X(); | |
296 | Double_t qy = qvec.Y(); | |
297 | TString triggers = event->GetFiredTriggerClasses(); | |
298 | Int_t trig=0; | |
1c4a5bf7 | 299 | if (triggers.Contains("CMBAC-B-NOPF-ALL")) trig+=1; |
076df7bf | 300 | if (triggers.Contains("CMBS2C-B-NOPF-ALL")) trig+=10; |
301 | if (triggers.Contains("CMBS2A-B-NOPF-ALL")) trig+=100; | |
1c4a5bf7 | 302 | if (triggers.Contains("C0VBA-B-NOPF-ALL")) trig+=1000; |
303 | if (triggers.Contains("C0VBC-B-NOPF-ALL")) trig+=10000; | |
304 | Float_t x[19]; | |
305 | x[0]=meanpt; x[1]=qx; x[2]=qy; x[3]=trackmult; x[4]=refmult; x[5]=trig; | |
306 | x[6]=vtxTPCx; x[7]=vtxTPCy; x[8]=vtxTPCz; x[9]=ntrackletsA; x[10]=ntrackletsC; | |
307 | x[11]=mv0a; x[12]=mv0c; x[13]=zdcp1; x[14]=zdcn1; x[15]=zdcp2; x[16]=zdcn2; | |
308 | x[17]=zdcpart1; x[18]=zdcpart2; | |
309 | fNtuple->Fill(x); | |
076df7bf | 310 | }//if flowevent |
2948ac5a | 311 | } |
312 | ||
313 | //________________________________________________________________________ | |
314 | void AliAnalysisTaskQAflow::Terminate(Option_t *) | |
315 | { | |
316 | ||
317 | } | |
318 | ||
319 | //________________________________________________________________________ | |
320 | AliAnalysisTaskQAflow::~AliAnalysisTaskQAflow() | |
321 | { | |
322 | //dtor | |
323 | delete fTrackCuts; | |
324 | delete fEventCuts; | |
325 | } |