]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FLOW/AliFlowTasks/AliAnalysisTaskQAflow.cxx
vzero refmult + updates to QA
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowTasks / AliAnalysisTaskQAflow.cxx
CommitLineData
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
37ClassImp(AliAnalysisTaskQAflow)
38
39//________________________________________________________________________
40AliAnalysisTaskQAflow::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//________________________________________________________________________
52AliAnalysisTaskQAflow::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//________________________________________________________________________
67void 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//________________________________________________________________________
128void 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//________________________________________________________________________
314void AliAnalysisTaskQAflow::Terminate(Option_t *)
315{
316
317}
318
319//________________________________________________________________________
320AliAnalysisTaskQAflow::~AliAnalysisTaskQAflow()
321{
322 //dtor
323 delete fTrackCuts;
324 delete fEventCuts;
325}