@@ -238,7 +238,7 @@ struct taggingHFE {
238238 Configurable<float > cfg_min_rxy{" cfg_min_rxy" , 0.1 , " minimum V0 rxy in cascade" };
239239 Configurable<float > cfg_min_dcaxy_v0leg{" cfg_min_dcaxy_v0leg" , 0.1 , " min dca XY for v0 legs in cm" };
240240 Configurable<float > cfg_min_dcaxy_bachelor{" cfg_min_dcaxy_bachelor" , 0.05 , " min dca XY for bachelor in cm" };
241- Configurable<float > cfg_min_dcaxy_v0{" cfg_min_dcaxy_v0" , 0.05 , " min dca XY for V0 in cm" };
241+ Configurable<float > cfg_min_dcaxy_v0{" cfg_min_dcaxy_v0" , 0.0 , " min dca XY for V0 in cm" };
242242 } cascadeCut;
243243
244244 struct : ConfigurableGroup {
@@ -311,7 +311,7 @@ struct taggingHFE {
311311 dist01 = std::uniform_real_distribution<float >(0 .0f , 1 .0f );
312312
313313 fitter_eK.setPropagateToPCA (true );
314- fitter_eK.setMaxR (20 .f );
314+ fitter_eK.setMaxR (200 .f );
315315 fitter_eK.setMinParamChange (1e-3 );
316316 fitter_eK.setMinRelChi2Change (0.9 );
317317 fitter_eK.setMaxDZIni (1e9 );
@@ -321,7 +321,7 @@ struct taggingHFE {
321321 fitter_eK.setMatCorrType (matCorr);
322322
323323 fitter_eV0.setPropagateToPCA (true );
324- fitter_eV0.setMaxR (20 .f );
324+ fitter_eV0.setMaxR (200 .f );
325325 fitter_eV0.setMinParamChange (1e-3 );
326326 fitter_eV0.setMinRelChi2Change (0.9 );
327327 fitter_eV0.setMaxDZIni (1e9 );
@@ -331,7 +331,7 @@ struct taggingHFE {
331331 fitter_eV0.setMatCorrType (matCorr);
332332
333333 fitter_eCascade.setPropagateToPCA (true );
334- fitter_eCascade.setMaxR (20 .f );
334+ fitter_eCascade.setMaxR (200 .f );
335335 fitter_eCascade.setMinParamChange (1e-3 );
336336 fitter_eCascade.setMinRelChi2Change (0.9 );
337337 fitter_eCascade.setMaxDZIni (1e9 );
@@ -441,6 +441,7 @@ struct taggingHFE {
441441 fRegistry .add (" Generated/Lc/hsAcc" , " pT-#eta acc.;p_{T,l} (GeV/c);p_{T,#Lambda} (GeV/c);#eta_{l};#eta_{#Lambda};" , kTHnSparseF , {{100 , 0 , 10 }, {100 , 0 , 10 }, {100 , -5 , +5 }, {100 , -5 , +5 }}, false );
442442
443443 fRegistry .add (" Electron/hs" , " hs;p_{T} (GeV/c);#eta;#varphi (rad.)" , kTHnSparseF , {{100 , 0 , 10 }, {40 , -1 , 1 }, {36 , 0 , 2 * M_PI}}, false );
444+ fRegistry .add (" Electron/hDCA" , " DCA xy vs. z;DCA_{xy} (cm);DCA_{z} (cm)" , kTH2F , {{200 , -1 , 1 }, {200 , -1 , 1 }}, false );
444445 fRegistry .add (" Electron/hTPCdEdx" , " TPC dE/dx vs. pin;p_{in} (GeV/c);TPC dE/dx" , kTH2F , {{1000 , 0 , 10 }, {200 , 0 , 200 }}, false );
445446 fRegistry .add (" Electron/hTOFbeta" , " TOF #beta vs. p;p_{pv} (GeV/c);TOF #beta" , kTH2F , {{1000 , 0 , 10 }, {600 , 0 , 1.2 }}, false );
446447 fRegistry .addClone (" Electron/" , " Hadron/" );
@@ -1419,6 +1420,7 @@ struct taggingHFE {
14191420 continue ;
14201421 }
14211422
1423+ auto mcCollision_from_collision = collision.template mcCollision_as <aod::McCollisions>();
14221424 fRegistry .fill (HIST (" Event/hCollisionCounter" ), 0 );
14231425
14241426 const float centralities[3 ] = {collision.centFT0M (), collision.centFT0A (), collision.centFT0C ()};
@@ -1471,8 +1473,8 @@ struct taggingHFE {
14711473 if (mcCollision_ele.getSubGeneratorId () == eventCut.cfgRejectEventGenerator ) {
14721474 continue ;
14731475 }
1474-
14751476 fRegistry .fill (HIST (" Electron/hs" ), trackParCov.getPt (), trackParCov.getEta (), RecoDecay::constrainAngle (trackParCov.getPhi (), 0 , 1U ));
1477+ fRegistry .fill (HIST (" Electron/hDCA" ), dcaXY, dcaZ);
14761478 fRegistry .fill (HIST (" Electron/hTPCdEdx" ), track.tpcInnerParam (), track.mcTunedTPCSignal ());
14771479 fRegistry .fill (HIST (" Electron/hTOFbeta" ), track.p (), mapTOFBetaReassociated[std::make_pair (collision.globalIndex (), track.globalIndex ())]);
14781480
@@ -1491,6 +1493,7 @@ struct taggingHFE {
14911493
14921494 if (isSelectedHadron (collision, track, trackParCov, dcaXY, dcaZ)) { // electrons can be included in hadron sample.
14931495 fRegistry .fill (HIST (" Hadron/hs" ), trackParCov.getPt (), trackParCov.getEta (), RecoDecay::constrainAngle (trackParCov.getPhi (), 0 , 1U ));
1496+ fRegistry .fill (HIST (" Hadron/hDCA" ), dcaXY, dcaZ);
14941497 fRegistry .fill (HIST (" Hadron/hTPCdEdx" ), track.tpcInnerParam (), track.mcTunedTPCSignal ());
14951498 fRegistry .fill (HIST (" Hadron/hTOFbeta" ), track.p (), mapTOFBetaReassociated[std::make_pair (collision.globalIndex (), track.globalIndex ())]);
14961499 if (track.sign () > 0 ) { // K+
@@ -1594,9 +1597,9 @@ struct taggingHFE {
15941597 continue ;
15951598 }
15961599
1597- // if (cascade.dcav0topv(collision.posX(), collision.posY(), collision.posZ()) < cascadeCut.cfg_min_dcaxy_v0) {
1598- // continue;
1599- // }
1600+ if (std::fabs ( cascade.dcav0topv (collision.posX (), collision.posY (), collision.posZ () )) < cascadeCut.cfg_min_dcaxy_v0 ) {
1601+ continue ;
1602+ }
16001603
16011604 fillCascadeHistograms (collision, cascade);
16021605
@@ -1629,7 +1632,8 @@ struct taggingHFE {
16291632 auto mcpos = pos.template mcParticle_as <aod::McParticles>();
16301633 auto mcMother = mcpos.template mothers_as <aod::McParticles>()[0 ];
16311634 bool isMotherFromB = IsFromBeauty (mcMother, mcParticles) > -1 ;
1632- auto mcCollision = mcpos.template mcCollision_as <aod::McCollisions>();
1635+ auto mcCollision_mcpos = mcpos.template mcCollision_as <aod::McCollisions>();
1636+ bool isCorrectCollision = mcCollision_mcpos.globalIndex () == mcCollision_from_collision.globalIndex ();
16331637
16341638 bool is_e_from_dy = std::abs (mcMother.pdgCode ()) == 23 ; // virtual photon is Z in simulation.
16351639 bool is_e_from_jpsi = std::abs (mcMother.pdgCode ()) == 443 ; // e from prompt J/psi is treated as the same as Z. // e from nonprompt J/psi is treated as the same as B.
@@ -1639,9 +1643,13 @@ struct taggingHFE {
16391643 continue ;
16401644 }
16411645
1642- leptonTable (collision.numContrib (), collision.trackOccupancyInTimeRange (), collision.ft0cOccupancyInTimeRange (), mcCollision.getSubGeneratorId (),
1646+ if ((is_e_from_dy || is_e_from_jpsi) && dist01 (engine) > cfgDownSampling) { // random sampling, if necessary
1647+ continue ;
1648+ }
1649+
1650+ leptonTable (collision.numContrib (), collision.trackOccupancyInTimeRange (), collision.ft0cOccupancyInTimeRange (), mcCollision_mcpos.getSubGeneratorId (),
16431651 leptonParCov.getQ2Pt (), leptonParCov.getEta (), dcaXY_lepton, dcaZ_lepton, leptonParCov.getSigmaY2 (), leptonParCov.getSigmaZY (), leptonParCov.getSigmaZ2 (),
1644- isMotherFromB, mcMother.pdgCode ());
1652+ isMotherFromB, mcMother.pdgCode (), isCorrectCollision );
16451653
16461654 // D0 -> e+ nu_e K-, br = 0.03538, ctau = 123.01 um, m = 1864 MeV/c2
16471655 for (const auto & kaonId : kaonMinusIds) {
@@ -1688,10 +1696,6 @@ struct taggingHFE {
16881696 continue ;
16891697 }
16901698
1691- if (!foundCommonMother && dist01 (engine) > cfgDownSampling) { // random sampling, if necessary
1692- continue ;
1693- }
1694-
16951699 float tofNSigmaPi = mapTOFNsigmaPiReassociated[std::make_pair (collision.globalIndex (), kaon.globalIndex ())];
16961700 float tofNSigmaKa = mapTOFNsigmaKaReassociated[std::make_pair (collision.globalIndex (), kaon.globalIndex ())];
16971701 float tofNSigmaPr = mapTOFNsigmaPrReassociated[std::make_pair (collision.globalIndex (), kaon.globalIndex ())];
@@ -1751,10 +1755,6 @@ struct taggingHFE {
17511755 continue ;
17521756 }
17531757
1754- if (!foundCommonMother && dist01 (engine) > cfgDownSampling) { // random sampling, if necessary
1755- continue ;
1756- }
1757-
17581758 float tofNSigmaPi = mapTOFNsigmaPiReassociated[std::make_pair (collision.globalIndex (), kaon.globalIndex ())];
17591759 float tofNSigmaKa = mapTOFNsigmaKaReassociated[std::make_pair (collision.globalIndex (), kaon.globalIndex ())];
17601760 float tofNSigmaPr = mapTOFNsigmaPrReassociated[std::make_pair (collision.globalIndex (), kaon.globalIndex ())];
@@ -2055,7 +2055,8 @@ struct taggingHFE {
20552055 auto mcele = ele.template mcParticle_as <aod::McParticles>();
20562056 auto mcMother = mcele.template mothers_as <aod::McParticles>()[0 ];
20572057 bool isMotherFromB = IsFromBeauty (mcMother, mcParticles) > -1 ;
2058- auto mcCollision = mcele.template mcCollision_as <aod::McCollisions>();
2058+ auto mcCollision_mcele = mcele.template mcCollision_as <aod::McCollisions>();
2059+ bool isCorrectCollision = mcCollision_mcele.globalIndex () == mcCollision_from_collision.globalIndex ();
20592060
20602061 bool is_e_from_dy = std::abs (mcMother.pdgCode ()) == 23 ; // virtual photon is Z in simulation.
20612062 bool is_e_from_jpsi = std::abs (mcMother.pdgCode ()) == 443 ; // e from prompt J/psi is treated as the same as Z. // e from nonprompt J/psi is treated as the same as B. // B+ -> J/psi K+ -> e+ e- K+
@@ -2065,9 +2066,13 @@ struct taggingHFE {
20652066 continue ;
20662067 }
20672068
2068- leptonTable (collision.numContrib (), collision.trackOccupancyInTimeRange (), collision.ft0cOccupancyInTimeRange (), mcCollision.getSubGeneratorId (),
2069+ if ((is_e_from_dy || is_e_from_jpsi) && dist01 (engine) > cfgDownSampling) { // random sampling, if necessary
2070+ continue ;
2071+ }
2072+
2073+ leptonTable (collision.numContrib (), collision.trackOccupancyInTimeRange (), collision.ft0cOccupancyInTimeRange (), mcCollision_mcele.getSubGeneratorId (),
20692074 leptonParCov.getQ2Pt (), leptonParCov.getEta (), dcaXY_lepton, dcaZ_lepton, leptonParCov.getSigmaY2 (), leptonParCov.getSigmaZY (), leptonParCov.getSigmaZ2 (),
2070- isMotherFromB, mcMother.pdgCode ());
2075+ isMotherFromB, mcMother.pdgCode (), isCorrectCollision );
20712076
20722077 for (const auto & kaonId : kaonMinusIds) {
20732078 auto kaon = tracks.rawIteratorAt (kaonId);
@@ -2113,10 +2118,6 @@ struct taggingHFE {
21132118 continue ;
21142119 }
21152120
2116- if (!foundCommonMother && dist01 (engine) > cfgDownSampling) { // random sampling, if necessary
2117- continue ;
2118- }
2119-
21202121 float tofNSigmaPi = mapTOFNsigmaPiReassociated[std::make_pair (collision.globalIndex (), kaon.globalIndex ())];
21212122 float tofNSigmaKa = mapTOFNsigmaKaReassociated[std::make_pair (collision.globalIndex (), kaon.globalIndex ())];
21222123 float tofNSigmaPr = mapTOFNsigmaPrReassociated[std::make_pair (collision.globalIndex (), kaon.globalIndex ())];
@@ -2177,10 +2178,6 @@ struct taggingHFE {
21772178 continue ;
21782179 }
21792180
2180- if (!foundCommonMother && dist01 (engine) > cfgDownSampling) { // random sampling, if necessary
2181- continue ;
2182- }
2183-
21842181 float tofNSigmaPi = mapTOFNsigmaPiReassociated[std::make_pair (collision.globalIndex (), kaon.globalIndex ())];
21852182 float tofNSigmaKa = mapTOFNsigmaKaReassociated[std::make_pair (collision.globalIndex (), kaon.globalIndex ())];
21862183 float tofNSigmaPr = mapTOFNsigmaPrReassociated[std::make_pair (collision.globalIndex (), kaon.globalIndex ())];
0 commit comments