@@ -44,29 +44,34 @@ struct HmpidDeuteron {
4444 Configurable<float > maxDCAxy{" maxDCAxy" , 0 .5f , " maxDCAxy" };
4545 Configurable<float > maxDCAz{" maxDCAz" , 0 .5f , " maxDCAz" };
4646
47- Configurable<float > cutMinMomGlobalTrack{" cutMinMomGlobalTrack" , 1 .5f , " minimum momentum of global track" };
47+ Configurable<float > qMipThreshold{" qMipThreshold" , 120 .0f , " minimum MIP charge required for a real signal" };
48+ Configurable<float > cutDistanceMipTrack{" cutDistanceMipTrack" , 6 .0f , " cut distance between MIP and track" };
4849
4950 Configurable<float > offsetX{" offsetX" , 0 .696712f , " Residuals offset - X direction" };
5051 Configurable<float > offsetY{" offsetY" , 2 .32849f , " Residuals offset - Y direction" };
5152
53+ Configurable<bool > collisionsPbPb{" collisionsPbPb" , false , " Require PbPb collisions" };
54+
55+ Configurable<float > centralityCut{" centralityCut" , 20 .0f , " centrality cut for PbPb collisions" };
56+
5257 // Configurables for plotting
5358 // Momentum
5459 Configurable<int > momNBins{" momNBins" , 490 , " Momentum bins" };
5560 Configurable<float > momMin{" momMin" , 0 .1f , " Momentum min" };
5661 Configurable<float > momMax{" momMax" , 5 .0f , " Momentum max" };
5762
5863 // DeltaR
59- Configurable<int > deltaRNBins{" deltaRNBins" , 500 , " DeltaR bins" };
64+ Configurable<int > deltaRNBins{" deltaRNBins" , 50 , " DeltaR bins" };
6065 Configurable<float > deltaRMin{" deltaRMin" , 0 .0f , " DeltaR min" };
6166 Configurable<float > deltaRMax{" deltaRMax" , 50 .0f , " DeltaR max" };
6267
6368 // nSigma TPC
64- Configurable<int > nSigmaTPCNBins{" nSigmaTPCNBins" , 20 , " nSigmaTPC bins" };
69+ Configurable<int > nSigmaTPCNBins{" nSigmaTPCNBins" , 100 , " nSigmaTPC bins" };
6570 Configurable<float > nSigmaTPCMinPlot{" nSigmaTPCMinPlot" , -5 .0f , " nSigmaTPC min" };
6671 Configurable<float > nSigmaTPCMaxPlot{" nSigmaTPCMaxPlot" , 5 .0f , " nSigmaTPC max" };
6772
6873 // nSigma TOF
69- Configurable<int > nSigmaTOFNBins{" nSigmaTOFNBins" , 20 , " nSigmaTOF bins" };
74+ Configurable<int > nSigmaTOFNBins{" nSigmaTOFNBins" , 100 , " nSigmaTOF bins" };
7075 Configurable<float > nSigmaTOFMinPlot{" nSigmaTOFMinPlot" , -5 .0f , " nSigmaTOF min" };
7176 Configurable<float > nSigmaTOFMaxPlot{" nSigmaTOFMaxPlot" , 5 .0f , " nSigmaTOF max" };
7277
@@ -161,6 +166,17 @@ struct HmpidDeuteron {
161166 registryDA.add (" nSigmaTPC_vs_momHMPID_Cut_DeNeg" , " nSigmaTPC_vs_momHMPID_Cut_DeNeg" , HistType::kTH2F , {axisMom, axisNsigmaTPC});
162167 registryDA.add (" nSigmaTOF_vs_momHMPID_Cut_DeNeg" , " nSigmaTOF_vs_momHMPID_Cut_DeNeg" , HistType::kTH2F , {axisMom, axisNsigmaTOF});
163168
169+ registryDA.add (" nSigmaTOF_vs_momHMPID_TPCOnly_DePos" , " nSigmaTOF_vs_momHMPID_TPCOnly_DePos" , HistType::kTH2F , {axisMom, axisNsigmaTOF});
170+ registryDA.add (" nSigmaTOF_vs_momHMPID_TPCOnly_DeNeg" , " nSigmaTOF_vs_momHMPID_TPCOnly_DeNeg" , HistType::kTH2F , {axisMom, axisNsigmaTOF});
171+
172+ registryDA.add (" nSigmaTOF_vs_momHMPID_TPCOnly_DePos_4cm" , " nSigmaTOF_vs_momHMPID_TPCOnly_DePos_4cm" , HistType::kTH2F , {axisMom, axisNsigmaTOF});
173+ registryDA.add (" nSigmaTOF_vs_momHMPID_TPCOnly_DePos_8cm" , " nSigmaTOF_vs_momHMPID_TPCOnly_DePos_8cm" , HistType::kTH2F , {axisMom, axisNsigmaTOF});
174+ registryDA.add (" nSigmaTOF_vs_momHMPID_TPCOnly_DeNeg_4cm" , " nSigmaTOF_vs_momHMPID_TPCOnly_DeNeg_4cm" , HistType::kTH2F , {axisMom, axisNsigmaTOF});
175+ registryDA.add (" nSigmaTOF_vs_momHMPID_TPCOnly_DeNeg_8cm" , " nSigmaTOF_vs_momHMPID_TPCOnly_DeNeg_8cm" , HistType::kTH2F , {axisMom, axisNsigmaTOF});
176+
177+ registryDA.add (" pidTPC_TOF_p_ch_DePos" , " pidTPC_TOF_p_ch_DePos" , HistType::kTHnSparseF , {axisMom, axisNsigmaTPC, axisNsigmaTOF, axisChamber});
178+ registryDA.add (" pidTPC_TOF_p_ch_DeNeg" , " pidTPC_TOF_p_ch_DeNeg" , HistType::kTHnSparseF , {axisMom, axisNsigmaTPC, axisNsigmaTOF, axisChamber});
179+
164180 // general plots
165181 registryDA.add (" hEta" , " hEta" , kTH1F , {axisEta});
166182 registryDA.add (" hPhi" , " hPhi" , kTH1F , {axisPhi});
@@ -175,6 +191,14 @@ struct HmpidDeuteron {
175191 registryDA.add (Form (" De_Neg_deltaR_%d" , iCh), Form (" De_Neg_deltaR_%d" , iCh), HistType::kTH1F , {axisDeltaR});
176192 registryDA.add (Form (" hEta_%d" , iCh), Form (" hEta_%d" , iCh), HistType::kTH1F , {axisEta});
177193 registryDA.add (Form (" hPhi_%d" , iCh), Form (" hPhi_%d" , iCh), HistType::kTH1F , {axisPhi});
194+
195+ // tracking efficiency hmpid
196+ registryDA.add (Form (" hAllTracks_%d" , iCh), Form (" hAllTracks_%d" , iCh), HistType::kTH1F , {axisMom});
197+ registryDA.add (Form (" hCutQandD_%d" , iCh), Form (" hCutQandD_%d" , iCh), HistType::kTH1F , {axisMom});
198+ registryDA.add (Form (" hAllTracks_Pos_%d" , iCh), Form (" hAllTracks_Pos_%d" , iCh), HistType::kTH1F , {axisMom});
199+ registryDA.add (Form (" hAllTracks_Neg_%d" , iCh), Form (" hAllTracks_Neg_%d" , iCh), HistType::kTH1F , {axisMom});
200+ registryDA.add (Form (" hCutQandD_Pos_%d" , iCh), Form (" hCutQandD_Pos_%d" , iCh), HistType::kTH1F , {axisMom});
201+ registryDA.add (Form (" hCutQandD_Neg_%d" , iCh), Form (" hCutQandD_Neg_%d" , iCh), HistType::kTH1F , {axisMom});
178202 }
179203 }
180204
@@ -216,6 +240,7 @@ struct HmpidDeuteron {
216240 const float dx = hmpid.xMip () - hmpid.xTrack ();
217241 const float dy = hmpid.yMip () - hmpid.yTrack ();
218242 const float dr = std::hypot (dx - offsetX, dy - offsetY);
243+ const float dMipTrack = std::hypot (dx, dy);
219244
220245 const float mass =
221246 std::pow (Nmean * momAbs * std::cos (hmpid.chAngle ()), 2 ) -
@@ -225,6 +250,8 @@ struct HmpidDeuteron {
225250 const bool isPos = momHmpid > 0 ;
226251 const bool isNeg = momHmpid < 0 ;
227252
253+ const bool passQandD = hmpid.chargeMip () > qMipThreshold && dMipTrack < cutDistanceMipTrack;
254+
228255 // -------------------------
229256 // global distributions
230257 // -------------------------
@@ -238,35 +265,171 @@ struct HmpidDeuteron {
238265 }
239266
240267 // -------------------------
241- // RICH chamber maps (0–6)
268+ // Fill plots per chamber
242269 // -------------------------
243- if (chamber == Rich0) {
244- registryDA.fill (HIST (" hEta_0" ), hmpid.etaTrack ());
245- registryDA.fill (HIST (" hPhi_0" ), hmpid.phiTrack ());
246- }
247- if (chamber == Rich1) {
248- registryDA.fill (HIST (" hEta_1" ), hmpid.etaTrack ());
249- registryDA.fill (HIST (" hPhi_1" ), hmpid.phiTrack ());
250- }
251- if (chamber == Rich2) {
252- registryDA.fill (HIST (" hEta_2" ), hmpid.etaTrack ());
253- registryDA.fill (HIST (" hPhi_2" ), hmpid.phiTrack ());
254- }
255- if (chamber == Rich3) {
256- registryDA.fill (HIST (" hEta_3" ), hmpid.etaTrack ());
257- registryDA.fill (HIST (" hPhi_3" ), hmpid.phiTrack ());
258- }
259- if (chamber == Rich4) {
260- registryDA.fill (HIST (" hEta_4" ), hmpid.etaTrack ());
261- registryDA.fill (HIST (" hPhi_4" ), hmpid.phiTrack ());
270+
271+ switch (chamber) {
272+
273+ case Rich0:
274+ registryDA.fill (HIST (" hEta_0" ), hmpid.etaTrack ());
275+ registryDA.fill (HIST (" hPhi_0" ), hmpid.phiTrack ());
276+ registryDA.fill (HIST (" hAllTracks_0" ), momAbs);
277+ if (passQandD) {
278+ registryDA.fill (HIST (" hCutQandD_0" ), momAbs);
279+ }
280+ if (isPos) {
281+ registryDA.fill (HIST (" hAllTracks_Pos_0" ), momAbs);
282+ if (passQandD) {
283+ registryDA.fill (HIST (" hCutQandD_Pos_0" ), momAbs);
284+ }
285+ }
286+ if (isNeg) {
287+ registryDA.fill (HIST (" hAllTracks_Neg_0" ), momAbs);
288+ if (passQandD) {
289+ registryDA.fill (HIST (" hCutQandD_Neg_0" ), momAbs);
290+ }
291+ }
292+ break ;
293+
294+ case Rich1:
295+ registryDA.fill (HIST (" hEta_1" ), hmpid.etaTrack ());
296+ registryDA.fill (HIST (" hPhi_1" ), hmpid.phiTrack ());
297+ registryDA.fill (HIST (" hAllTracks_1" ), momAbs);
298+ if (passQandD) {
299+ registryDA.fill (HIST (" hCutQandD_1" ), momAbs);
300+ }
301+
302+ if (isPos) {
303+ registryDA.fill (HIST (" hAllTracks_Pos_1" ), momAbs);
304+ if (passQandD) {
305+ registryDA.fill (HIST (" hCutQandD_Pos_1" ), momAbs);
306+ }
307+ }
308+ if (isNeg) {
309+ registryDA.fill (HIST (" hAllTracks_Neg_1" ), momAbs);
310+ if (passQandD) {
311+ registryDA.fill (HIST (" hCutQandD_Neg_1" ), momAbs);
312+ }
313+ }
314+ break ;
315+
316+ case Rich2:
317+ registryDA.fill (HIST (" hEta_2" ), hmpid.etaTrack ());
318+ registryDA.fill (HIST (" hPhi_2" ), hmpid.phiTrack ());
319+ registryDA.fill (HIST (" hAllTracks_2" ), momAbs);
320+ if (passQandD) {
321+ registryDA.fill (HIST (" hCutQandD_2" ), momAbs);
322+ }
323+ if (isPos) {
324+ registryDA.fill (HIST (" hAllTracks_Pos_2" ), momAbs);
325+ if (passQandD) {
326+ registryDA.fill (HIST (" hCutQandD_Pos_2" ), momAbs);
327+ }
328+ }
329+ if (isNeg) {
330+ registryDA.fill (HIST (" hAllTracks_Neg_2" ), momAbs);
331+ if (passQandD) {
332+ registryDA.fill (HIST (" hCutQandD_Neg_2" ), momAbs);
333+ }
334+ }
335+ break ;
336+
337+ case Rich3:
338+ registryDA.fill (HIST (" hEta_3" ), hmpid.etaTrack ());
339+ registryDA.fill (HIST (" hPhi_3" ), hmpid.phiTrack ());
340+ registryDA.fill (HIST (" hAllTracks_3" ), momAbs);
341+ if (passQandD) {
342+ registryDA.fill (HIST (" hCutQandD_3" ), momAbs);
343+ }
344+ if (isPos) {
345+ registryDA.fill (HIST (" hAllTracks_Pos_3" ), momAbs);
346+ if (passQandD) {
347+ registryDA.fill (HIST (" hCutQandD_Pos_3" ), momAbs);
348+ }
349+ }
350+ if (isNeg) {
351+ registryDA.fill (HIST (" hAllTracks_Neg_3" ), momAbs);
352+ if (passQandD) {
353+ registryDA.fill (HIST (" hCutQandD_Neg_3" ), momAbs);
354+ }
355+ }
356+ break ;
357+
358+ case Rich4:
359+ registryDA.fill (HIST (" hEta_4" ), hmpid.etaTrack ());
360+ registryDA.fill (HIST (" hPhi_4" ), hmpid.phiTrack ());
361+ registryDA.fill (HIST (" hAllTracks_4" ), momAbs);
362+ if (passQandD) {
363+ registryDA.fill (HIST (" hCutQandD_4" ), momAbs);
364+ }
365+ if (isPos) {
366+ registryDA.fill (HIST (" hAllTracks_Pos_4" ), momAbs);
367+ if (passQandD) {
368+ registryDA.fill (HIST (" hCutQandD_Pos_4" ), momAbs);
369+ }
370+ }
371+ if (isNeg) {
372+ registryDA.fill (HIST (" hAllTracks_Neg_4" ), momAbs);
373+ if (passQandD) {
374+ registryDA.fill (HIST (" hCutQandD_Neg_4" ), momAbs);
375+ }
376+ }
377+ break ;
378+
379+ case Rich5:
380+ registryDA.fill (HIST (" hEta_5" ), hmpid.etaTrack ());
381+ registryDA.fill (HIST (" hPhi_5" ), hmpid.phiTrack ());
382+ registryDA.fill (HIST (" hAllTracks_5" ), momAbs);
383+ if (passQandD) {
384+ registryDA.fill (HIST (" hCutQandD_5" ), momAbs);
385+ }
386+ if (isPos) {
387+ registryDA.fill (HIST (" hAllTracks_Pos_5" ), momAbs);
388+ if (passQandD) {
389+ registryDA.fill (HIST (" hCutQandD_Pos_5" ), momAbs);
390+ }
391+ }
392+ if (isNeg) {
393+ registryDA.fill (HIST (" hAllTracks_Neg_5" ), momAbs);
394+ if (passQandD) {
395+ registryDA.fill (HIST (" hCutQandD_Neg_5" ), momAbs);
396+ }
397+ }
398+ break ;
399+
400+ case Rich6:
401+ registryDA.fill (HIST (" hEta_6" ), hmpid.etaTrack ());
402+ registryDA.fill (HIST (" hPhi_6" ), hmpid.phiTrack ());
403+ registryDA.fill (HIST (" hAllTracks_6" ), momAbs);
404+ if (passQandD) {
405+ registryDA.fill (HIST (" hCutQandD_6" ), momAbs);
406+ }
407+ if (isPos) {
408+ registryDA.fill (HIST (" hAllTracks_Pos_6" ), momAbs);
409+ if (passQandD) {
410+ registryDA.fill (HIST (" hCutQandD_Pos_6" ), momAbs);
411+ }
412+ }
413+ if (isNeg) {
414+ registryDA.fill (HIST (" hAllTracks_Neg_6" ), momAbs);
415+ if (passQandD) {
416+ registryDA.fill (HIST (" hCutQandD_Neg_6" ), momAbs);
417+ }
418+ }
419+ break ;
420+
421+ default :
422+ break ;
262423 }
263- if (chamber == Rich5) {
264- registryDA.fill (HIST (" hEta_5" ), hmpid.etaTrack ());
265- registryDA.fill (HIST (" hPhi_5" ), hmpid.phiTrack ());
424+
425+ // -------------------------
426+ // TPC + TOF PID distributions
427+ // -------------------------
428+ if (isPos) {
429+ registryDA.fill (HIST (" pidTPC_TOF_p_ch_DePos" ), momAbs, hmpid.tpcNSigmaDe (), hmpid.tofNSigmaDe (), chamber);
266430 }
267- if (chamber == Rich6) {
268- registryDA.fill (HIST (" hEta_6" ), hmpid.etaTrack ());
269- registryDA.fill (HIST (" hPhi_6" ), hmpid.phiTrack ());
431+ if (isNeg) {
432+ registryDA.fill (HIST (" pidTPC_TOF_p_ch_DeNeg" ), momAbs, hmpid.tpcNSigmaDe (), hmpid.tofNSigmaDe (), chamber);
270433 }
271434
272435 // -------------------------
@@ -281,12 +444,25 @@ struct HmpidDeuteron {
281444 // post TPC cut
282445 // -------------------------
283446 if (isPos) {
284- registryDA.fill (HIST (" nSigmaTPC_vs_momHMPID_Cut_DePos" ),
285- momAbs, hmpid.tpcNSigmaDe ());
447+ registryDA.fill (HIST (" nSigmaTPC_vs_momHMPID_Cut_DePos" ), momAbs, hmpid. tpcNSigmaDe ());
448+ registryDA. fill ( HIST ( " nSigmaTOF_vs_momHMPID_TPCOnly_DePos " ), momAbs, hmpid.tofNSigmaDe ());
286449 }
287450 if (isNeg) {
288- registryDA.fill (HIST (" nSigmaTPC_vs_momHMPID_Cut_DeNeg" ),
289- momAbs, hmpid.tpcNSigmaDe ());
451+ registryDA.fill (HIST (" nSigmaTPC_vs_momHMPID_Cut_DeNeg" ), momAbs, hmpid.tpcNSigmaDe ());
452+ registryDA.fill (HIST (" nSigmaTOF_vs_momHMPID_TPCOnly_DeNeg" ), momAbs, hmpid.tofNSigmaDe ());
453+ }
454+
455+ if (isPos && chamber == Rich2) {
456+ registryDA.fill (HIST (" nSigmaTOF_vs_momHMPID_TPCOnly_DePos_4cm" ), momAbs, hmpid.tofNSigmaDe ());
457+ }
458+ if (isPos && chamber == Rich4) {
459+ registryDA.fill (HIST (" nSigmaTOF_vs_momHMPID_TPCOnly_DePos_8cm" ), momAbs, hmpid.tofNSigmaDe ());
460+ }
461+ if (isNeg && chamber == Rich2) {
462+ registryDA.fill (HIST (" nSigmaTOF_vs_momHMPID_TPCOnly_DeNeg_4cm" ), momAbs, hmpid.tofNSigmaDe ());
463+ }
464+ if (isNeg && chamber == Rich4) {
465+ registryDA.fill (HIST (" nSigmaTOF_vs_momHMPID_TPCOnly_DeNeg_8cm" ), momAbs, hmpid.tofNSigmaDe ());
290466 }
291467
292468 registryDA.fill (HIST (" hMass_postDeuteron" ), mass);
@@ -316,6 +492,13 @@ struct HmpidDeuteron {
316492 // DEUTERON CANDIDATES AFTER ALL CUTS
317493 // -------------------------
318494
495+ // Pb-Pb collisions centrality requirement
496+ if (collisionsPbPb) {
497+ if (hmpid.centrality () < centralityCut) {
498+ continue ;
499+ }
500+ }
501+
319502 // -------------------------
320503 // deltaR per chamber (Pos/Neg)
321504 // -------------------------
0 commit comments