@@ -85,54 +85,37 @@ struct DedxAnalysis {
8585 Configurable<float > maxDCAxy{" maxDCAxy" , 0 .1f , " maxDCAxy" };
8686 Configurable<float > maxDCAz{" maxDCAz" , 0 .1f , " maxDCAz" };
8787 Configurable<bool > eventSelection{" eventSelection" , true , " event selection" };
88+ Configurable<bool > calibrationMode{" calibrationMode" , false , " calibration mode" };
8889 // Histograms names
89- static constexpr std::string_view kArmenteros [5 ] = {" Armenteros" , " Armenteros_K0S" , " Armenteros_Lambda" , " Armenteros_AntiLambda" , " Armenteros_Gamma" };
90- static constexpr std::string_view kQtvsAlpha [5 ] = {" Qt_vs_alpha" , " Qt_vs_alpha_K0S" , " Qt_vs_alpha_Lambda" , " Qt_vs_alpha_AntiLambda" , " Qt_vs_alpha_Gamma" };
91- static constexpr std::string_view kDedxvsMomentum [2 ] = {" dEdx_vs_Momentum_all_beforeCalibration" , " dEdx_vs_Momentum_AfterCalibration" };
92- static constexpr std::string_view kDedxvsMomentumV0 [3 ] = {" dEdx_vs_Momentum_Pi_v0" , " dEdx_vs_Momentum_Pr_v0" , " dEdx_vs_Momentum_El_v0" };
93- static constexpr std::string_view kInvMass [4 ] = {" InvMass_K0S" , " InvMass_Lambda" , " InvMass_AntiLambda" , " InvMass_Gamma" };
90+ static constexpr std::string_view kDedxvsMomentum [4 ] = {" dEdx_vs_Momentum_all" , " dEdx_vs_Momentum_Pi_v0" , " dEdx_vs_Momentum_Pr_v0" , " dEdx_vs_Momentum_El_v0" };
9491 static constexpr double EtaCut[9 ] = {-0.8 , -0.6 , -0.4 , -0.2 , 0.0 , 0.2 , 0.4 , 0.6 , 0.8 };
95- static constexpr double Correction[8 ] = {54.3344 , 55.1277 , 56.0811 , 56.7974 , 56.9533 , 56.4622 , 55.8873 , 55.1449 };
92+ static constexpr double Correction[8 ] = {56.0452 , 56.632 , 57.2627 , 57.8265 , 57.8403 , 57.5441 , 57.2386 , 56.7532 };
9693
9794 void init (InitContext const &)
9895 {
99-
100- // MIP for pions
101- registryDeDx.add (
102- " hdEdxMIP_vs_eta" , " dE/dx" , HistType::kTH2F ,
103- {{100 , -0.8 , 0.8 , " #eta" }, {100 , 0.0 , 600.0 , " dE/dx MIP (a. u.)" }});
104- registryDeDx.add (
105- " hdEdxMIP_vs_phi" , " dE/dx" , HistType::kTH2F ,
106- {{100 , 0.0 , 6.4 , " #phi" }, {100 , 0.0 , 600.0 , " dE/dx MIP (a. u.)" }});
107- registryDeDx.add (
108- " hdEdxMIP_vs_eta_AfterCorr" , " dE/dx" , HistType::kTH2F ,
109- {{100 , -0.8 , 0.8 , " #eta" }, {100 , 0.0 , 600.0 , " dE/dx MIP (a. u.)" }});
110- // //////////////////////////////
111- registryDeDx.add (kInvMass [0 ].data (), " mass" , HistType::kTH1F ,
112- {{100 , 400 , 600 , " m (MeV/c)" }});
113- registryDeDx.add (kInvMass [1 ].data (), " mass" , HistType::kTH1F ,
114- {{100 , 1.08 , 1.25 , " m (GeV/c)" }});
115- registryDeDx.add (kInvMass [2 ].data (), " mass" , HistType::kTH1F ,
116- {{100 , 1.08 , 1.25 , " m (GeV/c)" }});
117- registryDeDx.add (kInvMass [3 ].data (), " mass" , HistType::kTH1F ,
118- {{100 , 0.9 , 2.0 , " m (MeV/c)" }});
119- // Armenteros plot and De/Dx for eta cut inclusive
120- for (int i = 0 ; i < 5 ; ++i) {
121- registryDeDx.add (kArmenteros [i].data (), kQtvsAlpha [i].data (), HistType::kTH2F ,
122- {{100 , -1 ., 1 ., " #alpha (a. u.)" }, {100 , 0.0 , 0.3 , " q_T (GeV/c)" }});
123- }
124- for (int i = 0 ; i < 2 ; ++i) {
125- registryDeDx.add (kDedxvsMomentum [i].data (), " dE/dx" , HistType::kTH3F ,
126- {{100 , -20.0 , 20.0 , " #it{p}/Z (GeV/c)" }, {100 , 0.0 , 600.0 , " dE/dx (a. u.)" }, {100 , -0.8 , 0.8 , " #eta" }});
127- }
128-
129- // De/Dx for v0 particles
130- for (int i = 0 ; i < 3 ; ++i) {
131-
132- registryDeDx.add (kDedxvsMomentumV0 [i].data (), " dE/dx" , HistType::kTH3F ,
133- {{100 , -20.0 , 20.0 , " #it{p}/Z (GeV/c)" }, {100 , 0.0 , 600.0 , " dE/dx (a. u.)" }, {100 , -0.8 , 0.8 , " #eta" }});
96+ if (calibrationMode) {
97+ // MIP for pions
98+ registryDeDx.add (
99+ " hdEdxMIP_vs_eta" , " dE/dx" , HistType::kTH2F ,
100+ {{8 , -0.8 , 0.8 , " #eta" }, {100 , 0.0 , 600.0 , " dE/dx MIP (a. u.)" }});
101+ registryDeDx.add (
102+ " hdEdxMIP_vs_phi" , " dE/dx" , HistType::kTH2F ,
103+ {{100 , 0.0 , 6.4 , " #phi" }, {100 , 0.0 , 600.0 , " dE/dx MIP (a. u.)" }});
104+
105+ } else {
106+ registryDeDx.add (
107+ " hdEdxMIP_vs_eta_calibrated" , " dE/dx" , HistType::kTH2F ,
108+ {{8 , -0.8 , 0.8 , " #eta" }, {10 , 30.0 , 70.0 , " dE/dx MIP (a. u.)" }});
109+ registryDeDx.add (
110+ " hdEdxMIP_vs_phi" , " dE/dx" , HistType::kTH2F ,
111+ {{100 , 0.0 , 6.4 , " #phi" }, {10 , 30.0 , 70.0 , " dE/dx MIP (a. u.)" }});
112+
113+ // De/Dx for ch and v0 particles
114+ for (int i = 0 ; i < 4 ; ++i) {
115+ registryDeDx.add (kDedxvsMomentum [i].data (), " dE/dx" , HistType::kTH3F ,
116+ {{100 , -20 , 20 , " #it{p}/Z (GeV/c)" }, {100 , 0.0 , 600.0 , " dE/dx (a. u.)" }, {8 , -0.8 , 0.8 , " #eta" }});
117+ }
134118 }
135-
136119 // Event Counter
137120 registryDeDx.add (" histRecVtxZData" , " collision z position" , HistType::kTH1F , {{100 , -20.0 , +20.0 , " z_{vtx} (cm)" }});
138121 }
@@ -322,186 +305,157 @@ struct DedxAnalysis {
322305 continue ;
323306 float signedP = trk.sign () * trk.tpcInnerParam ();
324307
325- // DeDx all particles before calibration
326- registryDeDx.fill (HIST (kDedxvsMomentum [0 ]), signedP, trk.tpcSignal (), trk.eta ());
327-
328- // //////////////////////////////
329-
330308 // MIP for pions
331309 if (trk.tpcInnerParam () >= 0.25 && trk.tpcInnerParam () <= 0.35 ) {
332- registryDeDx.fill (HIST (" hdEdxMIP_vs_eta" ), trk.eta (), trk.tpcSignal ());
333- registryDeDx.fill (HIST (" hdEdxMIP_vs_phi" ), trk.phi (), trk.tpcSignal ());
334- // After calibration
335-
336- for (int i = 0 ; i < 8 ; ++i) {
337- if (trk.eta () > EtaCut[i] && trk.eta () < EtaCut[i + 1 ]) {
338- registryDeDx.fill (HIST (" hdEdxMIP_vs_eta_AfterCorr" ), trk.eta (), trk.tpcSignal () * 50 / Correction[i]);
310+ if (calibrationMode) {
311+ registryDeDx.fill (HIST (" hdEdxMIP_vs_eta" ), trk.eta (), trk.tpcSignal ());
312+ registryDeDx.fill (HIST (" hdEdxMIP_vs_phi" ), trk.phi (), trk.tpcSignal ());
313+ } else {
314+ registryDeDx.fill (HIST (" hdEdxMIP_vs_phi" ), trk.phi (), trk.tpcSignal ());
315+ for (int i = 0 ; i < 8 ; ++i) {
316+ if (trk.eta () > EtaCut[i] && trk.eta () < EtaCut[i + 1 ]) {
317+ registryDeDx.fill (HIST (" hdEdxMIP_vs_eta_calibrated" ), trk.eta (), trk.tpcSignal () * 50 / Correction[i]);
318+ }
339319 }
340320 }
341321 }
342322
343- // After calibration
344- for (int i = 0 ; i < 8 ; ++i) {
345- if (trk.eta () > EtaCut[i] && trk.eta () < EtaCut[i + 1 ]) {
346- registryDeDx.fill (HIST (kDedxvsMomentum [1 ]), signedP, trk.tpcSignal () * 50 / Correction[i], trk.eta ());
323+ if (!calibrationMode) {
324+ for (int i = 0 ; i < 8 ; ++i) {
325+ if (trk.eta () > EtaCut[i] && trk.eta () < EtaCut[i + 1 ]) {
326+ registryDeDx.fill (HIST (kDedxvsMomentum [0 ]), signedP, trk.tpcSignal () * 50 / Correction[i], trk.eta ());
327+ }
347328 }
348329 }
349330 }
350331
351332 // Loop over Reconstructed V0s
352- for (const auto & v0 : fullV0s) {
353-
354- // Standard V0 Selections
355- if (!passedV0Selection (v0, collision)) {
356- continue ;
357- }
358-
359- if (v0.dcaV0daughters () > dcaV0DaughtersMax) {
360- continue ;
361- }
362-
363- // Positive and Negative Tracks
364- const auto & posTrack = v0.posTrack_as <PIDTracks>();
365- const auto & negTrack = v0.negTrack_as <PIDTracks>();
333+ if (!calibrationMode) {
334+ for (const auto & v0 : fullV0s) {
366335
367- if (!posTrack.passedTPCRefit ())
368- continue ;
369- if (!negTrack.passedTPCRefit ())
370- continue ;
371-
372- float signedPpos = posTrack.sign () * posTrack.tpcInnerParam ();
373- float signedPneg = negTrack.sign () * negTrack.tpcInnerParam ();
374-
375- float pxV0 = v0.px ();
376- float pyV0 = v0.py ();
377- float pzV0 = v0.pz ();
378- float pV0 = std::sqrt (pxV0 * pxV0 + pyV0 * pyV0 + pzV0 * pzV0);
379-
380- float pxPos = posTrack.px ();
381- float pyPos = posTrack.py ();
382- float pzPos = posTrack.pz ();
383-
384- float pxNeg = negTrack.px ();
385- float pyNeg = negTrack.py ();
386- float pzNeg = negTrack.pz ();
336+ // Standard V0 Selections
337+ if (!passedV0Selection (v0, collision)) {
338+ continue ;
339+ }
387340
388- const float gammaMass = 2 * MassElectron; // GeV/c^2
341+ if (v0.dcaV0daughters () > dcaV0DaughtersMax) {
342+ continue ;
343+ }
389344
390- // -------------------Armenteros plots--------
345+ // Positive and Negative Tracks
346+ const auto & posTrack = v0.posTrack_as <PIDTracks>();
347+ const auto & negTrack = v0.negTrack_as <PIDTracks>();
391348
392- float plPos = (pxPos * pxV0 + pyPos * pyV0 + pzPos * pzV0) / pV0;
393- float plNeg = (pxNeg * pxV0 + pyNeg * pyV0 + pzNeg * pzV0) / pV0;
349+ if (!posTrack.passedTPCRefit ())
350+ continue ;
351+ if (!negTrack.passedTPCRefit ())
352+ continue ;
394353
395- float alpha = (plPos - plNeg) / (plPos + plNeg);
396- float pPos = std::sqrt (pxPos * pxPos + pyPos * pyPos + pzPos * pzPos);
397- float qt = std::sqrt (pPos * pPos - plPos * plPos);
354+ float signedPpos = posTrack.sign () * posTrack.tpcInnerParam ();
355+ float signedPneg = negTrack.sign () * negTrack.tpcInnerParam ();
398356
399- registryDeDx.fill (HIST (kArmenteros [0 ]), alpha, qt);
357+ float pxPos = posTrack.px ();
358+ float pyPos = posTrack.py ();
359+ float pzPos = posTrack.pz ();
400360
401- // -------------------------------------------
361+ float pxNeg = negTrack.px ();
362+ float pyNeg = negTrack.py ();
363+ float pzNeg = negTrack.pz ();
402364
403- // K0s Selection
404- if (passedK0Selection (v0, negTrack, posTrack, collision)) {
405- float ePosPi = posTrack.energy (MassPionCharged);
406- float eNegPi = negTrack.energy (MassPionCharged);
365+ const float gammaMass = 2 * MassElectron; // GeV/c^2
407366
408- float invMass = std::sqrt ((eNegPi + ePosPi) * (eNegPi + ePosPi) - ((pxNeg + pxPos) * (pxNeg + pxPos) + (pyNeg + pyPos) * (pyNeg + pyPos) + (pzNeg + pzPos) * (pzNeg + pzPos)));
367+ // K0s Selection
368+ if (passedK0Selection (v0, negTrack, posTrack, collision)) {
369+ float ePosPi = posTrack.energy (MassPionCharged);
370+ float eNegPi = negTrack.energy (MassPionCharged);
409371
410- if (std::abs (invMass - MassK0Short) > 0.01 ) {
411- continue ;
412- }
372+ float invMass = std::sqrt ((eNegPi + ePosPi) * (eNegPi + ePosPi) - ((pxNeg + pxPos) * (pxNeg + pxPos) + (pyNeg + pyPos) * (pyNeg + pyPos) + (pzNeg + pzPos) * (pzNeg + pzPos)));
413373
414- registryDeDx.fill (HIST (kInvMass [0 ]), invMass * 1000 );
415- registryDeDx.fill (HIST (kArmenteros [1 ]), alpha, qt);
374+ if (std::abs (invMass - MassK0Short) > 0.01 ) {
375+ continue ;
376+ }
416377
417- for (int i = 0 ; i < 8 ; ++i) {
418- if (negTrack.eta () > EtaCut[i] && negTrack.eta () < EtaCut[i + 1 ]) {
378+ for (int i = 0 ; i < 8 ; ++i) {
379+ if (negTrack.eta () > EtaCut[i] && negTrack.eta () < EtaCut[i + 1 ]) {
419380
420- registryDeDx.fill (HIST (kDedxvsMomentumV0 [ 0 ]), signedPneg, negTrack.tpcSignal () * 50 / Correction[i], negTrack.eta ());
421- }
422- if (posTrack.eta () > EtaCut[i] && posTrack.eta () < EtaCut[i + 1 ]) {
381+ registryDeDx.fill (HIST (kDedxvsMomentum [ 1 ]), signedPneg, negTrack.tpcSignal () * 50 / Correction[i], negTrack.eta ());
382+ }
383+ if (posTrack.eta () > EtaCut[i] && posTrack.eta () < EtaCut[i + 1 ]) {
423384
424- registryDeDx.fill (HIST (kDedxvsMomentumV0 [0 ]), signedPpos, posTrack.tpcSignal () * 50 / Correction[i], posTrack.eta ());
385+ registryDeDx.fill (HIST (kDedxvsMomentum [1 ]), signedPpos, posTrack.tpcSignal () * 50 / Correction[i], posTrack.eta ());
386+ }
425387 }
426388 }
427- }
428389
429- // Lambda Selection
430- if (passedLambdaSelection (v0, negTrack, posTrack, collision)) {
431- float ePosPr = posTrack.energy (MassProton);
432- float eNegPi = negTrack.energy (MassPionCharged);
390+ // Lambda Selection
391+ if (passedLambdaSelection (v0, negTrack, posTrack, collision)) {
433392
434- float invMass = std::sqrt ((eNegPi + ePosPr) * (eNegPi + ePosPr) - ((pxNeg + pxPos) * (pxNeg + pxPos) + (pyNeg + pyPos) * (pyNeg + pyPos) + (pzNeg + pzPos) * (pzNeg + pzPos)));
393+ float ePosPr = posTrack.energy (MassProton);
394+ float eNegPi = negTrack.energy (MassPionCharged);
435395
436- if (std::abs (invMass - MassLambda) > 0.01 ) {
437- continue ;
438- }
396+ float invMass = std::sqrt ((eNegPi + ePosPr) * (eNegPi + ePosPr) - ((pxNeg + pxPos) * (pxNeg + pxPos) + (pyNeg + pyPos) * (pyNeg + pyPos) + (pzNeg + pzPos) * (pzNeg + pzPos)));
439397
440- registryDeDx.fill (HIST (kInvMass [1 ]), invMass);
441- registryDeDx.fill (HIST (kArmenteros [2 ]), alpha, qt);
398+ if (std::abs (invMass - MassLambda) > 0.01 ) {
399+ continue ;
400+ }
442401
443- for (int i = 0 ; i < 8 ; ++i) {
444- if (negTrack.eta () > EtaCut[i] && negTrack.eta () < EtaCut[i + 1 ]) {
402+ for (int i = 0 ; i < 8 ; ++i) {
403+ if (negTrack.eta () > EtaCut[i] && negTrack.eta () < EtaCut[i + 1 ]) {
445404
446- registryDeDx.fill (HIST (kDedxvsMomentumV0 [ 0 ]), signedPneg, negTrack.tpcSignal () * 50 / Correction[i], negTrack.eta ());
447- }
448- if (posTrack.eta () > EtaCut[i] && posTrack.eta () < EtaCut[i + 1 ]) {
405+ registryDeDx.fill (HIST (kDedxvsMomentum [ 1 ]), signedPneg, negTrack.tpcSignal () * 50 / Correction[i], negTrack.eta ());
406+ }
407+ if (posTrack.eta () > EtaCut[i] && posTrack.eta () < EtaCut[i + 1 ]) {
449408
450- registryDeDx.fill (HIST (kDedxvsMomentumV0 [1 ]), signedPpos, posTrack.tpcSignal () * 50 / Correction[i], posTrack.eta ());
409+ registryDeDx.fill (HIST (kDedxvsMomentum [2 ]), signedPpos, posTrack.tpcSignal () * 50 / Correction[i], posTrack.eta ());
410+ }
451411 }
452412 }
453- }
454413
455- // AntiLambda Selection
456- if (passedAntiLambdaSelection (v0, negTrack, posTrack, collision)) {
414+ // AntiLambda Selection
415+ if (passedAntiLambdaSelection (v0, negTrack, posTrack, collision)) {
457416
458- float ePosPi = posTrack.energy (MassPionCharged);
459- float eNegPr = negTrack.energy (MassProton);
417+ float ePosPi = posTrack.energy (MassPionCharged);
418+ float eNegPr = negTrack.energy (MassProton);
460419
461- float invMass = std::sqrt ((eNegPr + ePosPi) * (eNegPr + ePosPi) - ((pxNeg + pxPos) * (pxNeg + pxPos) + (pyNeg + pyPos) * (pyNeg + pyPos) + (pzNeg + pzPos) * (pzNeg + pzPos)));
462-
463- if (std::abs (invMass - MassLambda) > 0.01 ) {
464- continue ;
465- }
420+ float invMass = std::sqrt ((eNegPr + ePosPi) * (eNegPr + ePosPi) - ((pxNeg + pxPos) * (pxNeg + pxPos) + (pyNeg + pyPos) * (pyNeg + pyPos) + (pzNeg + pzPos) * (pzNeg + pzPos)));
466421
467- registryDeDx.fill (HIST (kInvMass [2 ]), invMass);
468- registryDeDx.fill (HIST (kArmenteros [3 ]), alpha, qt);
422+ if (std::abs (invMass - MassLambda) > 0.01 ) {
423+ continue ;
424+ }
469425
470- for (int i = 0 ; i < 8 ; ++i) {
471- if (negTrack.eta () > EtaCut[i] && negTrack.eta () < EtaCut[i + 1 ]) {
426+ for (int i = 0 ; i < 8 ; ++i) {
427+ if (negTrack.eta () > EtaCut[i] && negTrack.eta () < EtaCut[i + 1 ]) {
472428
473- registryDeDx.fill (HIST (kDedxvsMomentumV0 [ 1 ]), signedPneg, negTrack.tpcSignal () * 50 / Correction[i], negTrack.eta ());
474- }
475- if (posTrack.eta () > EtaCut[i] && posTrack.eta () < EtaCut[i + 1 ]) {
429+ registryDeDx.fill (HIST (kDedxvsMomentum [ 2 ]), signedPneg, negTrack.tpcSignal () * 50 / Correction[i], negTrack.eta ());
430+ }
431+ if (posTrack.eta () > EtaCut[i] && posTrack.eta () < EtaCut[i + 1 ]) {
476432
477- registryDeDx.fill (HIST (kDedxvsMomentumV0 [0 ]), signedPpos, posTrack.tpcSignal () * 50 / Correction[i], posTrack.eta ());
433+ registryDeDx.fill (HIST (kDedxvsMomentum [1 ]), signedPpos, posTrack.tpcSignal () * 50 / Correction[i], posTrack.eta ());
434+ }
478435 }
479436 }
480- }
481-
482- // Gamma Selection
483- if (passedGammaSelection (v0, negTrack, posTrack, collision)) {
484437
485- float ePosEl = posTrack. energy (MassElectron);
486- float eNegEl = negTrack. energy (MassElectron);
438+ // Gamma Selection
439+ if ( passedGammaSelection (v0, negTrack, posTrack, collision)) {
487440
488- float invMass = std::sqrt ((eNegEl + ePosEl) * (eNegEl + ePosEl) - ((pxNeg + pxPos) * (pxNeg + pxPos) + (pyNeg + pyPos) * (pyNeg + pyPos) + (pzNeg + pzPos) * (pzNeg + pzPos)));
441+ float ePosEl = posTrack.energy (MassElectron);
442+ float eNegEl = negTrack.energy (MassElectron);
489443
490- if (std::abs (invMass - gammaMass) > 0.0015 ) {
491- continue ;
492- }
444+ float invMass = std::sqrt ((eNegEl + ePosEl) * (eNegEl + ePosEl) - ((pxNeg + pxPos) * (pxNeg + pxPos) + (pyNeg + pyPos) * (pyNeg + pyPos) + (pzNeg + pzPos) * (pzNeg + pzPos)));
493445
494- registryDeDx.fill (HIST (kInvMass [3 ]), invMass * 1000 );
495- registryDeDx.fill (HIST (kArmenteros [4 ]), alpha, qt);
446+ if (std::abs (invMass - gammaMass) > 0.0015 ) {
447+ continue ;
448+ }
496449
497- for (int i = 0 ; i < 8 ; ++i) {
498- if (negTrack.eta () > EtaCut[i] && negTrack.eta () < EtaCut[i + 1 ]) {
450+ for (int i = 0 ; i < 8 ; ++i) {
451+ if (negTrack.eta () > EtaCut[i] && negTrack.eta () < EtaCut[i + 1 ]) {
499452
500- registryDeDx.fill (HIST (kDedxvsMomentumV0 [ 2 ]), signedPneg, negTrack.tpcSignal () * 50 / Correction[i], negTrack.eta ());
501- }
502- if (posTrack.eta () > EtaCut[i] && posTrack.eta () < EtaCut[i + 1 ]) {
453+ registryDeDx.fill (HIST (kDedxvsMomentum [ 3 ]), signedPneg, negTrack.tpcSignal () * 50 / Correction[i], negTrack.eta ());
454+ }
455+ if (posTrack.eta () > EtaCut[i] && posTrack.eta () < EtaCut[i + 1 ]) {
503456
504- registryDeDx.fill (HIST (kDedxvsMomentumV0 [2 ]), signedPpos, posTrack.tpcSignal () * 50 / Correction[i], posTrack.eta ());
457+ registryDeDx.fill (HIST (kDedxvsMomentum [3 ]), signedPpos, posTrack.tpcSignal () * 50 / Correction[i], posTrack.eta ());
458+ }
505459 }
506460 }
507461 }
0 commit comments