1 /***************************************************************************
2 fbellini@cern.ch - last modified on 09/04/2013
4 Macro to add monitoring histograms for track and PID cuts to the rsn task
5 Tuned for monitoring TOF KStar analysis of PbPb 2010 data
7 Options ("opt" argument):
8 - NoTOFSIGMA --> disable the nsigma_TOF vs p histos
9 - NoTPCSIGMA --> disable the nsigma_TPC vs p_TPC histos
10 - NoSIGN --> disable splitting for single track charge
11 - NoTrackQ --> disable track quality monitoring (DCA, nCls) histos
12 /***************************************************************************/
14 void AddMonitorOutput(Bool_t useMCMon = 0, TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *lm=0)
16 // Multiplicity/centrality
17 AliRsnValueEvent *multi = new AliRsnValueEvent("multi",AliRsnValueEvent::kMult);
18 multi->SetBins(0.0, 400.0, 1);
20 AliRsnValueDaughter *axisMomTPC = new AliRsnValueDaughter("pTPC", AliRsnValueDaughter::kPtpc);
21 axisMomTPC->SetBins(0.0, 10.0, 0.01);
22 AliRsnValueDaughter *axisMomP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kP);
23 axisMomP->SetBins(0.0, 10.0, 0.01);
25 AliRsnValueDaughter *axisMomPt = new AliRsnValueDaughter("pt", AliRsnValueDaughter::kPt);
26 axisMomPt->SetBins(0.0,10.0,0.01);
28 AliRsnValueDaughter *axisMomEta = new AliRsnValueDaughter("eta", AliRsnValueDaughter::kEta);
29 axisMomEta->SetBins(-1.0, 1.0, 0.1);
31 AliRsnValueDaughter *axisITScls = new AliRsnValueDaughter("ITScls", AliRsnValueDaughter::kNITSclusters);
32 axisITScls->SetBins(0.0, 10.0, 1.0);
34 AliRsnValueDaughter *axisTPCcls = new AliRsnValueDaughter("TPCcls", AliRsnValueDaughter::kNTPCclusters);
35 axisTPCcls->SetBins(0.0, 300.0, 1.0);
37 AliRsnValueDaughter *axisITSchi2 = new AliRsnValueDaughter("ITSchi2", AliRsnValueDaughter::kITSchi2);
38 axisITSchi2->SetBins(0.0, 10.0, 0.1);
40 AliRsnValueDaughter *axisTPCchi2 = new AliRsnValueDaughter("TPCchi2", AliRsnValueDaughter::kTPCchi2);
41 axisTPCchi2->SetBins(0.0, 10.0, 0.1);
43 AliRsnValueDaughter *axisDCAxy = new AliRsnValueDaughter("DCAxy", AliRsnValueDaughter::kDCAXY);
44 axisDCAxy->SetBins(-2.0, 2.0, 0.1);
46 AliRsnValueDaughter *axisDCAz = new AliRsnValueDaughter("DCAz", AliRsnValueDaughter::kDCAZ);
47 axisDCAz->SetBins(-10.0, 10.0, 0.1);
49 AliRsnValueDaughter *axisCharge = new AliRsnValueDaughter("charge",AliRsnValueDaughter::kCharge);
50 axisCharge->SetBins(-1.5, 1.5, 1.0);
52 AliRsnValueDaughter *axisPhi = new AliRsnValueDaughter("phi", AliRsnValueDaughter::kPhi);
53 axisPhi->SetBins(0.0, 360.0, 1.0);
54 AliRsnValueDaughter *axisPhiOuterTPC = new AliRsnValueDaughter("phiOuterTPC", AliRsnValueDaughter::kPhiOuterTPC);
55 axisPhiOuterTPC->SetBins(0.0, 360.0, 1.0);
58 AliRsnValueDaughter *axisSigTPC = new AliRsnValueDaughter("sTPC", AliRsnValueDaughter::kTPCsignal);
59 axisSigTPC->SetBins(0.0, 500.0, 2.0);
61 AliRsnValueDaughter *axisTPCnsigmaPi = new AliRsnValueDaughter("pi", AliRsnValueDaughter::kTPCnsigmaPi);
62 axisTPCnsigmaPi->SetBins(-10.,10., 0.1);
64 AliRsnValueDaughter *axisTPCnsigmaK = new AliRsnValueDaughter("K", AliRsnValueDaughter::kTPCnsigmaK);
65 axisTPCnsigmaK->SetBins(-10.,10., 0.1);
67 AliRsnValueDaughter *axisTPCnsigmaP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kTPCnsigmaP);
68 axisTPCnsigmaP->SetBins(-10.,10., 0.1);
70 /* tof signal - time */
71 AliRsnValueDaughter *axisSigTOF = new AliRsnValueDaughter("sTOF", AliRsnValueDaughter::kTOFsignal);
72 axisSigTOF->SetBins(10000.0, 50000.0, 250);//in ps
74 AliRsnValueDaughter *axisTOFnsigmaPi = new AliRsnValueDaughter("pi", AliRsnValueDaughter::kTOFnsigmaPi);
75 axisTOFnsigmaPi->SetBins(-10.,10., 0.1);
77 AliRsnValueDaughter *axisTOFnsigmaK = new AliRsnValueDaughter("K", AliRsnValueDaughter::kTOFnsigmaK);
78 axisTOFnsigmaK->SetBins(-10.,10., 0.1);
80 AliRsnValueDaughter *axisTOFnsigmaP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kTOFnsigmaP);
81 axisTOFnsigmaP->SetBins(-10.,10., 0.1);
83 /****************************************************************/
84 /*************** MONITOR AOB ********************/
85 /****************************************************************/
86 AliRsnListOutput *outMonitorPTvsMult = new AliRsnListOutput("PtVsMult",AliRsnListOutput::kHistoDefault);
87 outMonitorPTvsMult->AddValue(axisMomPt);
88 outMonitorPTvsMult->AddValue(multi);
89 if (mon) mon->Add(outMonitorPTvsMult);
90 if (lm) lm->AddOutput(outMonitorPTvsMult);
92 // if (lm) lm->SetTrueMC(kTRUE);
93 /****************************************************************/
94 /*************** MONITOR kinematics ********************/
95 /****************************************************************/
96 // output: TH1D for momentum
97 AliRsnListOutput *outMonitorP = new AliRsnListOutput("P", AliRsnListOutput::kHistoDefault);
98 outMonitorP->AddValue(axisMomP);
99 if (!opt.Contains("NoSIGN")) {
100 outMonitorP->AddValue(axisCharge);
102 if (mon) mon->Add(outMonitorP);
103 if (lm) lm->AddOutput(outMonitorP);
105 // output: TH1D for pt
106 AliRsnListOutput *outMonitorPt = new AliRsnListOutput("Pt", AliRsnListOutput::kHistoDefault);
107 outMonitorPt->AddValue(axisMomPt);
108 if (!opt.Contains("NoSIGN")) {
109 outMonitorPt->AddValue(axisCharge);
111 if (mon) mon->Add(outMonitorPt);
112 if (lm) lm->AddOutput(outMonitorPt);
114 // output: TH1D for pseudorapidity
115 AliRsnListOutput *outMonitorEta = new AliRsnListOutput("Eta", AliRsnListOutput::kHistoDefault);
116 outMonitorEta->AddValue(axisMomEta);
117 if (!opt.Contains("NoSIGN")) {
118 outMonitorEta->AddValue(axisCharge);
120 if (mon) mon->Add(outMonitorEta);
121 if (lm) lm->AddOutput(outMonitorEta);
123 // output: TH2D for phi at vertex
124 AliRsnListOutput *outMonitorPhi = new AliRsnListOutput("Phi", AliRsnListOutput::kHistoDefault);
125 //outMonitorPhi->AddValue(axisMomPt);
126 outMonitorPhi->AddValue(axisPhi);
127 if (!opt.Contains("NoSIGN")) {
128 outMonitorPhi->AddValue(axisCharge);
130 if (mon) mon->Add(outMonitorPhi);
131 if (lm) lm->AddOutput(outMonitorPhi);
133 // output: TH2D for phiOuterTPC at TPC outer radius
134 AliRsnListOutput *outMonitorPhiOuterTPC = new AliRsnListOutput("PhiOuterTPC", AliRsnListOutput::kHistoDefault);
135 //outMonitorPhiOuterTPC->AddValue(axisMomPt);
136 outMonitorPhiOuterTPC->AddValue(axisPhiOuterTPC);
137 if (!opt.Contains("NoSIGN")) {
138 outMonitorPhiOuterTPC->AddValue(axisCharge);
140 if (mon) mon->Add(outMonitorPhiOuterTPC);
141 if (lm) lm->AddOutput(outMonitorPhiOuterTPC);
143 // output: TH2D for phi vs pt
144 AliRsnListOutput *outMonitorPhiVsPt = new AliRsnListOutput("PhiVsPt", AliRsnListOutput::kHistoDefault);
145 outMonitorPhiVsPt->AddValue(axisMomPt);
146 outMonitorPhiVsPt->AddValue(axisPhi);
147 if (!opt.Contains("NoSIGN")) {
148 outMonitorPhiVsPt->AddValue(axisCharge);
150 if (mon) mon->Add(outMonitorPhiVsPt);
151 if (lm) lm->AddOutput(outMonitorPhiVsPt);
153 /****************************************************************/
154 /*************** MONITOR TRACK QUALITY ********************/
155 /****************************************************************/
156 if (!opt.Contains("NoTrackQ")) {
157 // output: 2D histogram of DCAxy vs pt
158 AliRsnListOutput *outMonitorDCAxy = new AliRsnListOutput("DCAxyVsPt", AliRsnListOutput::kHistoDefault);
159 outMonitorDCAxy->AddValue(axisMomPt);
160 outMonitorDCAxy->AddValue(axisDCAxy);
161 if (mon) mon->Add(outMonitorDCAxy);
162 if (lm) lm->AddOutput(outMonitorDCAxy);
164 // output: 2D histogram of DCAz vs P
165 AliRsnListOutput *outMonitorDCAz = new AliRsnListOutput("DCAzVsP", AliRsnListOutput::kHistoDefault);
166 outMonitorDCAz->AddValue(axisMomP);
167 outMonitorDCAz->AddValue(axisDCAz);
168 if (mon) mon->Add(outMonitorDCAz);
169 if (lm) lm->AddOutput(outMonitorDCAz);
171 // output: 2D histogram of ITS cls vs pt
172 AliRsnListOutput *outMonitorITScls = new AliRsnListOutput("ITSclsVsPt", AliRsnListOutput::kHistoDefault);
173 outMonitorITScls->AddValue(axisMomPt);
174 outMonitorITScls->AddValue(axisITScls);
175 if (mon) mon->Add(outMonitorITScls);
176 if (lm) lm->AddOutput(outMonitorITScls);
178 // output: 2D histogram of TPC cls vs. pt
179 AliRsnListOutput *outMonitorTPCcls = new AliRsnListOutput("TPCclsVsPt", AliRsnListOutput::kHistoDefault);
180 outMonitorTPCcls->AddValue(axisMomPt);
181 outMonitorTPCcls->AddValue(axisTPCcls);
182 if (mon) mon->Add(outMonitorTPCcls);
183 if (lm) lm->AddOutput(outMonitorTPCcls);
185 // output: 2D histogram of TPC cls vs. TPC momentum
186 AliRsnListOutput *outMonitorTPCclsVsPtpc = new AliRsnListOutput("TPCclsVsPtpc", AliRsnListOutput::kHistoDefault);
187 outMonitorTPCclsVsPtpc->AddValue(axisMomTPC);
188 outMonitorTPCclsVsPtpc->AddValue(axisTPCcls);
189 if (mon) mon->Add(outMonitorTPCclsVsPtpc);
190 if (lm) lm->AddOutput(outMonitorTPCclsVsPtpc);
192 // output: 2D histogram of ITS chi2 vs pt
193 AliRsnListOutput *outMonitorITSchi2 = new AliRsnListOutput("ITSchi2VsPt", AliRsnListOutput::kHistoDefault);
194 outMonitorITSchi2->AddValue(axisMomPt);
195 outMonitorITSchi2->AddValue(axisITSchi2);
196 if (mon) mon->Add(outMonitorITSchi2);
197 if (lm) lm->AddOutput(outMonitorITSchi2);
199 // output: 2D histogram of TPC chi2 vs. pt
200 AliRsnListOutput *outMonitorTPCchi2 = new AliRsnListOutput("TPCchi2VsPt", AliRsnListOutput::kHistoDefault);
201 outMonitorTPCchi2->AddValue(axisMomPt);
202 outMonitorTPCchi2->AddValue(axisTPCchi2);
203 if (mon) mon->Add(outMonitorTPCchi2);
204 if (lm) lm->AddOutput(outMonitorTPCchi2);
206 // output: 2D histogram of TPC chi2 vs. TPC momentum
207 AliRsnListOutput *outMonitorTPCchi2VsPtpc = new AliRsnListOutput("TPCchi2VsPtpc", AliRsnListOutput::kHistoDefault);
208 outMonitorTPCchi2VsPtpc->AddValue(axisMomTPC);
209 outMonitorTPCchi2VsPtpc->AddValue(axisTPCchi2);
210 if (mon) mon->Add(outMonitorTPCchi2VsPtpc);
211 if (lm) lm->AddOutput(outMonitorTPCchi2VsPtpc);
213 /****************************************************************/
214 /*************** MONITOR TPC ********************/
215 /****************************************************************/
216 if (!opt.Contains("NoTPCSIGMA")) {
217 // output: 2D histogram of TPC signal vs. TPC momentum
218 AliRsnListOutput *outMonitordEdxTPC = new AliRsnListOutput("dEdx_VsPtpc", AliRsnListOutput::kHistoDefault);
219 outMonitordEdxTPC->AddValue(axisMomTPC);
220 outMonitordEdxTPC->AddValue(axisSigTPC);
221 if (mon) mon->Add(outMonitordEdxTPC);
222 if (lm) lm->AddOutput(outMonitordEdxTPC);
224 // output: 2D histogram of TPC nsigma pi vs. TPC momentum
225 AliRsnListOutput *outMonitorTPCnsigmaPi = new AliRsnListOutput("TPC_nsigmaPi_VsPtpc", AliRsnListOutput::kHistoDefault);
226 outMonitorTPCnsigmaPi->AddValue(axisMomTPC);
227 outMonitorTPCnsigmaPi->AddValue(axisTPCnsigmaPi);
228 if (mon) mon->Add(outMonitorTPCnsigmaPi);
229 if (lm) lm->AddOutput(outMonitorTPCnsigmaPi);
231 // output: 2D histogram of TPC nsigma K vs. TPC momentum
232 AliRsnListOutput *outMonitorTPCnsigmaK = new AliRsnListOutput("TPC_nsigmaK_VsPtpc", AliRsnListOutput::kHistoDefault);
233 outMonitorTPCnsigmaK->AddValue(axisMomTPC);
234 outMonitorTPCnsigmaK->AddValue(axisTPCnsigmaK);
235 if (mon) mon->Add(outMonitorTPCnsigmaK);
236 if (lm) lm->AddOutput(outMonitorTPCnsigmaK);
238 // output: 2D histogram of TPC nsigma pro vs. TPC momentum
239 AliRsnListOutput *outMonitorTPCnsigmaP = new AliRsnListOutput("TPC_nsigmaPro_VsPtpc", AliRsnListOutput::kHistoDefault);
240 outMonitorTPCnsigmaP->AddValue(axisMomTPC);
241 outMonitorTPCnsigmaP->AddValue(axisTPCnsigmaP);
242 if (mon) mon->Add(outMonitorTPCnsigmaP);
243 if (lm) lm->AddOutput(outMonitorTPCnsigmaP);
245 /****************************************************************/
246 /*************** MONITOR TOF ********************/
247 /****************************************************************/
248 // // output: 2D histogram of TOF signal vs. momentum
249 // AliRsnListOutput *outMonitorTimeTOF = new AliRsnListOutput("time_VsP", AliRsnListOutput::kHistoDefault);
250 // outMonitorTimeTOF->AddValue(axisMomP);
251 // outMonitorTimeTOF->AddValue(axisSigTOF);
252 // if (mon) mon->Add(outMonitorTimeTOF);
253 // if (lm) lm->AddOutput(outMonitorTimeTOF);
255 // // output: 2D histogram of TOF signal vs. pt
256 // AliRsnListOutput *outMonitorTimeTOFPt = new AliRsnListOutput("time_VsPt", AliRsnListOutput::kHistoDefault);
257 // outMonitorTimeTOFPt->AddValue(axisMomPt);
258 // outMonitorTimeTOFPt->AddValue(axisSigTOF);
259 // if (mon) mon->Add(outMonitorTimeTOFPt);
260 // if (lm) lm->AddOutput(outMonitorTimeTOFPt);
262 if (!opt.Contains("NoTOFSIGMA")) {
263 // output: 2D histogram of TOF Nsigma pi vs. TPC momentum
264 AliRsnListOutput *outMonitorTOFnsigmaPi = new AliRsnListOutput("TOF_nsigmaPi_vsP", AliRsnListOutput::kHistoDefault);
265 outMonitorTOFnsigmaPi->AddValue(axisMomP);
266 outMonitorTOFnsigmaPi->AddValue(axisTOFnsigmaPi);
267 if (mon) mon->Add(outMonitorTOFnsigmaPi);
268 if (lm) lm->AddOutput(outMonitorTOFnsigmaPi);
270 // output: 2D histogram of TOF signal vs. TOF momentum
271 AliRsnListOutput *outMonitorTOFnsigmaK = new AliRsnListOutput("TOF_nsigmaK_vsP", AliRsnListOutput::kHistoDefault);
272 outMonitorTOFnsigmaK->AddValue(axisMomP);
273 outMonitorTOFnsigmaK->AddValue(axisTOFnsigmaK);
274 if (mon) mon->Add(outMonitorTOFnsigmaK);
275 if (lm) lm->AddOutput(outMonitorTOFnsigmaK);
277 // output: 2D histogram of TOF signal vs. TOF momentum
278 AliRsnListOutput *outMonitorTOFnsigmaP = new AliRsnListOutput("TOF_nsigmaPro_vsP", AliRsnListOutput::kHistoDefault);
279 outMonitorTOFnsigmaP->AddValue(axisMomP);
280 outMonitorTOFnsigmaP->AddValue(axisTOFnsigmaP);
281 if (mon) mon->Add(outMonitorTOFnsigmaP);
282 if (lm) lm->AddOutput(outMonitorTOFnsigmaP);
285 /****************************************************************/
286 /*************** MONITOR MC ********************/
287 /****************************************************************/
290 AliRsnValueDaughter *axisMomPMC = new AliRsnValueDaughter("pMC", AliRsnValueDaughter::kP);
291 axisMomPMC->SetUseMCInfo(kTRUE);
292 axisMomPMC->SetBins(0.0,10.0,0.01);
294 AliRsnValueDaughter *axisMomPtMC = new AliRsnValueDaughter("ptMC", AliRsnValueDaughter::kPt);
295 axisMomPtMC->SetUseMCInfo(kTRUE);
296 axisMomPtMC->SetBins(0.0,10.0,0.01);
298 AliRsnValueDaughter *axisEtaMC = new AliRsnValueDaughter("etaMC", AliRsnValueDaughter::kEta);
299 axisEtaMC->SetUseMCInfo(kTRUE);
300 axisEtaMC->SetBins(-1.0,1.0,0.1);
302 // output: 2D histo for kine acceptance
303 AliRsnListOutput *outMonitorPtVsEtaMC = new AliRsnListOutput("Pt_VsEtaMC", AliRsnListOutput::kHistoDefault);
304 outMonitorPtVsEtaMC->AddValue(axisMomPtMC);
305 outMonitorPtVsEtaMC->AddValue(axisEtaMC);
306 if (mon) mon->Add(outMonitorPtVsEtaMC);
307 if (lm) lm->AddOutput(outMonitorPtVsEtaMC);
309 // output: 1D histo pt from MC
310 AliRsnListOutput *outMonitorPtMC = new AliRsnListOutput("PtMC", AliRsnListOutput::kHistoDefault);
311 outMonitorPtMC->AddValue(axisMomPtMC);
312 if (mon) mon->Add(outMonitorPtMC);
313 if (lm) lm->AddOutput(outMonitorPtMC);
315 // output: 1D histo eta from MC
316 AliRsnListOutput *outMonitorEtaMC = new AliRsnListOutput("EtaMC", AliRsnListOutput::kHistoDefault);
317 outMonitorEtaMC->AddValue(axisEtaMC);
318 if (mon) mon->Add(outMonitorEtaMC);
319 if (lm) lm->AddOutput(outMonitorEtaMC);
321 // output: 1D histo pt from MC
322 AliRsnListOutput *outMonitorPtMC = new AliRsnListOutput("PtMC", AliRsnListOutput::kHistoDefault);
323 outMonitorPtMC->AddValue(axisMomPtMC);
324 if (mon) mon->Add(outMonitorPtMC);
325 if (lm) lm->AddOutput(outMonitorPtMC);