1 ////////////////////////////////////////////////////////////////////////////////
3 // AliFemtoCutMonitorV0 //
5 ////////////////////////////////////////////////////////////////////////////////
6 #include "AliFemtoCutMonitorV0.h"
11 #include "AliFemtoModelHiddenInfo.h"
13 AliFemtoCutMonitorV0::AliFemtoCutMonitorV0():
18 fDcaV0ToPrimVertex(0),
19 fDcaPosToPrimVertex(0),
20 fDcaNegToPrimVertex(0),
29 fTOFtimePosDaughter(0),
30 fTOFtimeNegDaughter(0),
36 // Default constructor
37 fLambdaMass = new TH1F("LambdaMass", "Mass Assuming Lambda Hypothesis", 10000, 0, 5);
38 fAntiLambdaMass = new TH1F("AntiLambdaMass", "Mass Assuming AntiLambda Hypothesis", 10000, 0, 5);
39 fK0ShortMass= new TH1F("K0ShortMass", "Mass Assuming K0 short Hypothesis", 500, 0, 5);
40 fDcaDaughters = new TH1F("DcaDaughters", "DCA Daughters", 500, 0, 2);
41 fDcaV0ToPrimVertex = new TH1F("DcaV0ToPrimVertex", "DCA V0 to primary vertex", 500, 0, 3);
42 fDcaPosToPrimVertex = new TH1F("DcaPosToPrimVertex", "DCA V0 to primary vertex", 500, 0, 3);
43 fDcaNegToPrimVertex = new TH1F("DcaNegToPrimVertex", "DCA V0 to primary vertex", 500, 0, 3);
44 fCosPointingAngle = new TH1F("CosPointingAngle","Cosinus Pointing Angle",500,0,1);
45 fDecayLength = new TH1F("DecayLength","V0 Decay Length",100,0,100);
46 fEtaV0 = new TH1F("EtaV0", "|Eta| distribution of V0s", 500, 0.0, 8.);
47 fPtV0 = new TH1F("PtV0", "Pt distribution of V0s", 500, 0.0, 8.);
48 fPtPosDaughter = new TH1F("PtPosDaughter", "Pt distribution of positive daughters", 500, 0.0, 5.);
49 fPtNegDaughter = new TH1F("PtNegDaughter", "Pt distribution of negative daughters", 500, 0.0, 5.);
51 fdEdxPosDaughter = new TH2D("dEdxPosDaughter","dEdx of positive daughters",200, 0.1, 4.0, 250, 0.0, 500.0);
52 fdEdxNegDaughter = new TH2D("dEdxNegDaughter","dEdx of negative daughters",200, 0.1, 4.0, 250, 0.0, 500.0);
53 fTOFtimePosDaughter = new TH2D("TOFtimePosDaughter","TOF time of positive daughters",100,0.,1.1,100,0.,3.0);
54 fTOFtimeNegDaughter = new TH2D("TOFtimeNegDaughter","TOF time of negative daughters",100,0.,1.1,100,0.,3.0);
56 fnsigmaPosL = new TH1D("fnsigmaPosL","Number of sigmas of positive Lambda daughters",200,-8,8);
57 fnsigmaNegL = new TH1D("fnsigmaNegL","Number of sigmas of negative Lambda daughters",200,-8,8);
58 fnsigmaPosAL = new TH1D("fnsigmaPosAL","Number of sigmas of positive AntiLambda daughters",200,-8,8);
59 fnsigmaNegAL = new TH1D("fnsigmaNegAL","Number of sigmas of negative AntiLambda daughters",200,-8,8);
62 fAntiLambdaMass->Sumw2();
63 fK0ShortMass->Sumw2();
64 fDcaDaughters->Sumw2();
65 fDcaV0ToPrimVertex->Sumw2();
66 fDcaPosToPrimVertex->Sumw2();
67 fDcaNegToPrimVertex->Sumw2();
68 fCosPointingAngle->Sumw2();
69 fDecayLength->Sumw2();
71 fPtPosDaughter->Sumw2();
72 fPtNegDaughter->Sumw2();
73 fdEdxPosDaughter->Sumw2();
74 fdEdxNegDaughter->Sumw2();
75 fTOFtimePosDaughter->Sumw2();
76 fTOFtimeNegDaughter->Sumw2();
79 fnsigmaPosAL->Sumw2();
80 fnsigmaNegAL->Sumw2();
83 AliFemtoCutMonitorV0::AliFemtoCutMonitorV0(const char *aName):
89 fDcaV0ToPrimVertex(0),
90 fDcaPosToPrimVertex(0),
91 fDcaNegToPrimVertex(0),
100 fTOFtimePosDaughter(0),
101 fTOFtimeNegDaughter(0),
107 // Normal constructor
109 snprintf(name, 200, "LambdaMass%s", aName);
110 fLambdaMass = new TH1F(name, "Mass Assuming Lambda Hypothesis", 10000, 0, 5);
111 snprintf(name, 200, "AntiLambdaMass%s", aName);
112 fAntiLambdaMass = new TH1F(name, "Mass Assuming AntiLambda Hypothesis", 10000, 0, 5);
113 snprintf(name, 200, "K0ShortMass%s", aName);
114 fK0ShortMass = new TH1F(name, "Mass Assuming K0 short Hypothesis", 500, 0, 5);
115 snprintf(name, 200, "DcaDaughters%s", aName);
116 fDcaDaughters = new TH1F(name, "DCA Daughters", 500, 0, 2);
117 snprintf(name, 200, "DcaV0ToPrimVertex%s", aName);
118 fDcaV0ToPrimVertex = new TH1F(name, "DCA V0 to primary vertex", 500, 0, 3);
119 snprintf(name, 200, "DcaPosToPrimVertex%s", aName);
120 fDcaPosToPrimVertex = new TH1F(name, "DCA pos. daughter V0 to primary vertex", 500, 0, 3);
121 snprintf(name, 200, "DcaNegToPrimVertex%s", aName);
122 fDcaNegToPrimVertex = new TH1F(name, "DCA neg. daughter V0 to primary vertex", 500, 0, 3);
123 snprintf(name, 200, "CosPointingAngle%s", aName);
124 fCosPointingAngle = new TH1F(name,"Cosinus Pointing Angle",500,0,1);
125 snprintf(name, 200, "DecayLength%s", aName);
126 fDecayLength = new TH1F(name,"Decay Length",100,0,100);
127 snprintf(name, 200, "EtaV0%s", aName);
128 fEtaV0 = new TH1F(name, "|Eta| distribution of V0s", 500, 0.0, 1.);
129 snprintf(name, 200, "PtV0%s", aName);
130 fPtV0 = new TH1F(name, "Pt distribution of V0s", 500, 0.0, 8.);
131 snprintf(name, 200, "fPtPosDaughter%s", aName);
132 fPtPosDaughter = new TH1F(name, "Pt distribution of positive daughters", 500, 0.0, 5.);
133 snprintf(name, 200, "fPtNegDaughter%s", aName);
134 fPtNegDaughter = new TH1F(name, "Pt distribution of negative daughters", 500, 0.0, 5.);
135 snprintf(name, 200, "fdEdxPosDaughter%s", aName);
136 fdEdxPosDaughter = new TH2D(name,"dEdx of positive daughters",200, 0.1, 4.0, 250, 0.0, 500.0);
137 snprintf(name, 200, "fdEdxNegDaughter%s", aName);
138 fdEdxNegDaughter = new TH2D(name,"dEdx of negative daughters",200, 0.1, 4.0, 250, 0.0, 500.0);
139 snprintf(name, 200, "fTOFtimePosDaughter%s", aName);
140 fTOFtimePosDaughter = new TH2D(name,"TOF time of positive daughters",190, 0.1, 2.0, 400, -4000.0, 4000.0);
141 snprintf(name, 200, " fTOFtimeNegDaughter%s", aName);
142 fTOFtimeNegDaughter = new TH2D(name,"TOF time of negative daughters",190, 0.1, 2.0, 400, -4000.0, 4000.0);
143 snprintf(name, 200, " fnsigmaPosL%s", aName);
144 fnsigmaPosL = new TH1D(name,"Number of sigmas of positive Lambda daughters",200,-10,10);
145 snprintf(name, 200, " fnsigmaNegL%s", aName);
146 fnsigmaNegL = new TH1D(name,"Number of sigmas of negative Lambda daughters",200,-10,10);
147 snprintf(name, 200, " fnsigmaPosAL%s", aName);
148 fnsigmaPosAL = new TH1D(name,"Number of sigmas of positive AntiLambda daughters",200,-10,10);
149 snprintf(name, 200, " fnsigmaNegAL%s", aName);
150 fnsigmaNegAL = new TH1D(name,"Number of sigmas of negative AntiLambda daughters",200,-10,10);
152 fLambdaMass->Sumw2();
153 fAntiLambdaMass->Sumw2();
154 fK0ShortMass->Sumw2();
155 fDcaDaughters->Sumw2();
156 fDcaV0ToPrimVertex->Sumw2();
157 fDcaPosToPrimVertex->Sumw2();
158 fDcaNegToPrimVertex->Sumw2();
159 fCosPointingAngle->Sumw2();
160 fDecayLength->Sumw2();
162 fPtPosDaughter->Sumw2();
163 fPtNegDaughter->Sumw2();
164 fdEdxPosDaughter->Sumw2();
165 fdEdxNegDaughter->Sumw2();
166 fTOFtimePosDaughter->Sumw2();
167 fTOFtimeNegDaughter->Sumw2();
168 fnsigmaPosL->Sumw2();
169 fnsigmaNegL->Sumw2();
170 fnsigmaPosAL->Sumw2();
171 fnsigmaNegAL->Sumw2();
174 AliFemtoCutMonitorV0::AliFemtoCutMonitorV0(const AliFemtoCutMonitorV0 &aCut):
175 AliFemtoCutMonitor(),
180 fDcaV0ToPrimVertex(0),
181 fDcaPosToPrimVertex(0),
182 fDcaNegToPrimVertex(0),
183 fCosPointingAngle(0),
191 fTOFtimePosDaughter(0),
192 fTOFtimeNegDaughter(0),
199 if (fLambdaMass) delete fLambdaMass;
200 fLambdaMass = new TH1F(*aCut.fLambdaMass);
201 if (fAntiLambdaMass) delete fAntiLambdaMass;
202 fAntiLambdaMass = new TH1F(*aCut.fAntiLambdaMass);
203 if (fK0ShortMass) delete fK0ShortMass;
204 fK0ShortMass = new TH1F(*aCut.fK0ShortMass);
205 if (fDcaDaughters) delete fDcaDaughters;
206 fDcaDaughters = new TH1F(*aCut.fDcaDaughters);
207 if (fDcaV0ToPrimVertex) delete fDcaV0ToPrimVertex;
208 fDcaV0ToPrimVertex = new TH1F(*aCut.fDcaV0ToPrimVertex);
209 if (fDcaPosToPrimVertex) delete fDcaPosToPrimVertex;
210 fDcaPosToPrimVertex = new TH1F(*aCut.fDcaPosToPrimVertex);
211 if (fDcaNegToPrimVertex) delete fDcaNegToPrimVertex;
212 fDcaNegToPrimVertex = new TH1F(*aCut.fDcaNegToPrimVertex);
213 if(fCosPointingAngle) delete fCosPointingAngle;
214 fCosPointingAngle = new TH1F(*aCut.fCosPointingAngle);
215 if(fDecayLength) delete fDecayLength;
216 fDecayLength = new TH1F(*aCut.fDecayLength);
217 if(fEtaV0) delete fEtaV0;
218 fEtaV0 = new TH1F(*aCut.fEtaV0);
219 if(fPtV0) delete fPtV0;
220 fPtV0 = new TH1F(*aCut.fPtV0);
221 if(fPtPosDaughter) delete fPtPosDaughter;
222 fPtPosDaughter = new TH1F(*aCut.fPtPosDaughter);
223 if(fPtNegDaughter) delete fPtNegDaughter;
224 fPtNegDaughter = new TH1F(*aCut.fPtNegDaughter);
225 if(fdEdxPosDaughter) delete fdEdxPosDaughter;
226 fdEdxNegDaughter = new TH2D(*aCut.fdEdxNegDaughter);
227 if(fdEdxNegDaughter) delete fdEdxNegDaughter;
228 fdEdxNegDaughter = new TH2D(*aCut.fdEdxNegDaughter);
229 if(fTOFtimePosDaughter) delete fTOFtimePosDaughter;
230 fTOFtimePosDaughter = new TH2D(*aCut.fTOFtimePosDaughter);
231 if(fTOFtimeNegDaughter) delete fTOFtimeNegDaughter;
232 fTOFtimeNegDaughter = new TH2D(*aCut.fTOFtimeNegDaughter);
233 if(fnsigmaPosL) delete fnsigmaPosL;
234 fnsigmaPosL = new TH1D(*aCut.fnsigmaPosL);
235 if(fnsigmaNegL) delete fnsigmaNegL;
236 fnsigmaNegL = new TH1D(*aCut.fnsigmaNegL);
237 if(fnsigmaPosAL) delete fnsigmaPosAL;
238 fnsigmaPosAL = new TH1D(*aCut.fnsigmaPosAL);
239 if(fnsigmaNegAL) delete fnsigmaNegAL;
240 fnsigmaNegAL = new TH1D(*aCut.fnsigmaNegAL);
242 fLambdaMass->Sumw2();
243 fAntiLambdaMass->Sumw2();
244 fK0ShortMass->Sumw2();
245 fDcaDaughters->Sumw2();
246 fDcaV0ToPrimVertex->Sumw2();
247 fDcaPosToPrimVertex->Sumw2();
248 fDcaNegToPrimVertex->Sumw2();
249 fCosPointingAngle->Sumw2();
250 fDecayLength->Sumw2();
252 fPtPosDaughter->Sumw2();
253 fPtNegDaughter->Sumw2();
254 fdEdxPosDaughter->Sumw2();
255 fdEdxNegDaughter->Sumw2();
256 fTOFtimePosDaughter->Sumw2();
257 fTOFtimeNegDaughter->Sumw2();
258 fnsigmaPosL->Sumw2();
259 fnsigmaNegL->Sumw2();
260 fnsigmaPosAL->Sumw2();
261 fnsigmaNegAL->Sumw2();
264 AliFemtoCutMonitorV0::~AliFemtoCutMonitorV0()
268 delete fAntiLambdaMass;
270 delete fDcaDaughters;
271 delete fDcaV0ToPrimVertex;
272 delete fDcaPosToPrimVertex;
273 delete fDcaNegToPrimVertex;
274 delete fCosPointingAngle;
278 delete fPtPosDaughter;
279 delete fPtNegDaughter;
280 delete fdEdxPosDaughter;
281 delete fdEdxNegDaughter;
282 delete fTOFtimePosDaughter;
283 delete fTOFtimeNegDaughter;
290 AliFemtoCutMonitorV0& AliFemtoCutMonitorV0::operator=(const AliFemtoCutMonitorV0& aCut)
292 // assignment operator
296 if (fLambdaMass) delete fLambdaMass;
297 fLambdaMass = new TH1F(*aCut.fLambdaMass);
298 if (fAntiLambdaMass) delete fAntiLambdaMass;
299 fAntiLambdaMass = new TH1F(*aCut.fAntiLambdaMass);
300 if (fK0ShortMass) delete fK0ShortMass;
301 fK0ShortMass = new TH1F(*aCut.fK0ShortMass);
302 if (fDcaDaughters) delete fDcaDaughters;
303 fDcaDaughters = new TH1F(*aCut.fDcaDaughters);
304 if (fDcaV0ToPrimVertex) delete fDcaV0ToPrimVertex;
305 fDcaV0ToPrimVertex = new TH1F(*aCut.fDcaV0ToPrimVertex);
306 if (fDcaPosToPrimVertex) delete fDcaPosToPrimVertex;
307 fDcaPosToPrimVertex = new TH1F(*aCut.fDcaPosToPrimVertex);
308 if (fDcaNegToPrimVertex) delete fDcaNegToPrimVertex;
309 fDcaNegToPrimVertex = new TH1F(*aCut.fDcaNegToPrimVertex);
310 if(fCosPointingAngle) delete fCosPointingAngle;
311 fCosPointingAngle = new TH1F(*aCut.fCosPointingAngle);
312 if(fDecayLength) delete fDecayLength;
313 fDecayLength = new TH1F(*aCut.fDecayLength);
314 if(fEtaV0) delete fEtaV0;
315 fEtaV0 = new TH1F(*aCut.fEtaV0);
316 if(fPtV0) delete fPtV0;
317 fPtV0 = new TH1F(*aCut.fPtV0);
318 if(fPtPosDaughter) delete fPtPosDaughter;
319 fPtPosDaughter = new TH1F(*aCut.fPtPosDaughter);
320 if(fPtNegDaughter) delete fPtNegDaughter;
321 fPtNegDaughter = new TH1F(*aCut.fPtNegDaughter);
322 if(fdEdxPosDaughter) delete fdEdxPosDaughter;
323 fdEdxNegDaughter = new TH2D(*aCut.fdEdxNegDaughter);
324 if(fdEdxNegDaughter) delete fdEdxNegDaughter;
325 fdEdxNegDaughter = new TH2D(*aCut.fdEdxNegDaughter);
326 if(fTOFtimePosDaughter) delete fTOFtimePosDaughter;
327 fTOFtimePosDaughter = new TH2D(*aCut.fTOFtimePosDaughter);
328 if(fTOFtimeNegDaughter) delete fTOFtimeNegDaughter;
329 fTOFtimeNegDaughter = new TH2D(*aCut.fTOFtimeNegDaughter);
330 if(fnsigmaPosL) delete fnsigmaPosL;
331 fnsigmaPosL = new TH1D(*aCut.fnsigmaPosL);
332 if(fnsigmaNegL) delete fnsigmaNegL;
333 fnsigmaNegL = new TH1D(*aCut.fnsigmaNegL);
334 if(fnsigmaPosAL) delete fnsigmaPosAL;
335 fnsigmaPosAL = new TH1D(*aCut.fnsigmaPosAL);
336 if(fnsigmaNegAL) delete fnsigmaNegAL;
337 fnsigmaNegAL = new TH1D(*aCut.fnsigmaNegAL);
339 fLambdaMass->Sumw2();
340 fAntiLambdaMass->Sumw2();
341 fK0ShortMass->Sumw2();
342 fDcaDaughters->Sumw2();
343 fDcaV0ToPrimVertex->Sumw2();
344 fDcaPosToPrimVertex->Sumw2();
345 fDcaNegToPrimVertex->Sumw2();
346 fCosPointingAngle->Sumw2();
347 fDecayLength->Sumw2();
349 fPtPosDaughter->Sumw2();
350 fPtNegDaughter->Sumw2();
351 fdEdxPosDaughter->Sumw2();
352 fdEdxNegDaughter->Sumw2();
353 fTOFtimePosDaughter->Sumw2();
354 fTOFtimeNegDaughter->Sumw2();
355 fnsigmaPosL->Sumw2();
356 fnsigmaNegL->Sumw2();
357 fnsigmaPosAL->Sumw2();
358 fnsigmaNegAL->Sumw2();
363 AliFemtoString AliFemtoCutMonitorV0::Report(){
364 // Prepare report from the execution
365 string stemp = "*** AliFemtoCutMonitorV0 report";
366 AliFemtoString returnThis = stemp;
370 void AliFemtoCutMonitorV0::Fill(const AliFemtoV0* aV0)
372 // Fill momentum resolution histograms for the particle
373 fLambdaMass->Fill(aV0->MassLambda());
374 fAntiLambdaMass->Fill(aV0->MassAntiLambda());
375 fK0ShortMass->Fill(aV0->MassK0Short());
376 fDcaDaughters->Fill(aV0->DcaV0Daughters());
377 fDcaV0ToPrimVertex->Fill(aV0->DcaV0ToPrimVertex());
378 fDcaPosToPrimVertex->Fill(aV0->DcaPosToPrimVertex());
379 fDcaNegToPrimVertex->Fill(aV0->DcaNegToPrimVertex());
380 fCosPointingAngle->Fill(aV0->CosPointingAngle());
381 fDecayLength->Fill(aV0->DecayLengthV0());
382 fEtaV0->Fill(aV0->EtaV0());
383 fPtV0->Fill(aV0->PtV0());
384 fPtPosDaughter->Fill(aV0->PtPos());
385 fPtNegDaughter->Fill(aV0->PtNeg());
386 fdEdxPosDaughter->Fill(aV0->GetTPCMomentumPos(),aV0->DedxPos());
387 fdEdxNegDaughter->Fill(aV0->GetTPCMomentumNeg(),aV0->DedxNeg());
389 fTOFtimePosDaughter->Fill(aV0->PtPos(),aV0->TOFProtonTimePos()); //true only for lambdas
390 fTOFtimeNegDaughter->Fill(aV0->PtNeg(),aV0->TOFPionTimeNeg());
392 fnsigmaPosL->Fill(aV0->PosNSigmaTPCP());
393 fnsigmaNegL->Fill(aV0->NegNSigmaTPCPi());
394 fnsigmaNegAL->Fill(aV0->NegNSigmaTPCP());
395 fnsigmaPosAL->Fill(aV0->PosNSigmaTPCPi());
398 void AliFemtoCutMonitorV0::Write()
400 // Write out the relevant histograms
401 fLambdaMass->Write();
402 fAntiLambdaMass->Write();
403 fK0ShortMass->Write();
404 fDcaDaughters->Write();
405 fDcaV0ToPrimVertex->Write();
406 fDcaPosToPrimVertex->Write();
407 fDcaNegToPrimVertex->Write();
408 fCosPointingAngle->Write();
409 fDecayLength->Write();
412 fPtPosDaughter->Write();
413 fPtNegDaughter->Write();
414 fdEdxPosDaughter->Write();
415 fdEdxNegDaughter->Write();
416 fTOFtimePosDaughter->Write();
417 fTOFtimeNegDaughter->Write();
418 fnsigmaPosL->Write();
419 fnsigmaNegL->Write();
420 fnsigmaPosAL->Write();
421 fnsigmaNegAL->Write();
424 TList *AliFemtoCutMonitorV0::GetOutputList()
426 // Get the list of histograms to write
427 TList *tOutputList = new TList();
428 tOutputList->Add(fLambdaMass);
429 tOutputList->Add(fAntiLambdaMass);
430 tOutputList->Add(fK0ShortMass);
431 tOutputList->Add(fDcaDaughters);
432 tOutputList->Add(fDcaV0ToPrimVertex);
433 tOutputList->Add(fDcaPosToPrimVertex);
434 tOutputList->Add(fDcaNegToPrimVertex);
435 tOutputList->Add(fCosPointingAngle);
436 tOutputList->Add(fDecayLength);
437 tOutputList->Add(fEtaV0);
438 tOutputList->Add(fPtV0);
439 tOutputList->Add(fPtPosDaughter);
440 tOutputList->Add(fPtNegDaughter);
441 tOutputList->Add(fdEdxPosDaughter);
442 tOutputList->Add(fdEdxNegDaughter);
443 tOutputList->Add(fTOFtimePosDaughter);
444 tOutputList->Add(fTOFtimeNegDaughter);
445 tOutputList->Add(fnsigmaPosL);
446 tOutputList->Add(fnsigmaNegL);
447 tOutputList->Add(fnsigmaPosAL);
448 tOutputList->Add(fnsigmaNegAL);