@@ -188,6 +188,7 @@ struct FemtoUniverseProducerTask {
188188 Configurable<std::vector<float >> confTrkDCAzMax{FemtoUniverseTrackSelection::getSelectionName (femto_universe_track_selection::kDCAzMax , " ConfTrk" ), std::vector<float >{0 .2f }, FemtoUniverseTrackSelection::getSelectionHelper (femto_universe_track_selection::kDCAzMax , " Track selection: " )}; // / \todo Reintegrate PID to the general selection container
189189 Configurable<std::vector<float >> confTrkPIDnSigmaMax{FemtoUniverseTrackSelection::getSelectionName (femto_universe_track_selection::kPIDnSigmaMax , " ConfTrk" ), std::vector<float >{3 .5f , 3 .f , 2 .5f }, FemtoUniverseTrackSelection::getSelectionHelper (femto_universe_track_selection::kPIDnSigmaMax , " Track selection: " )};
190190 Configurable<std::vector<int >> confTrkPIDspecies{" confTrkPIDspecies" , std::vector<int >{o2::track::PID::Pion, o2::track::PID::Kaon, o2::track::PID::Proton, o2::track::PID::Deuteron}, " Trk sel: Particles species for PID (Pion=2, Kaon=3, Proton=4, Deuteron=5)" };
191+ Configurable<bool > confIsOnlyMCTrack{" confIsOnlyMCTrack" , false , " Enable filling of only MC Tracks" };
191192 // Numbers from ~/alice/O2/DataFormats/Reconstruction/include/ReconstructionDataFormats/PID.h //static constexpr ID Pion = 2; static constexpr ID Kaon = 3; static constexpr ID Proton = 4; static constexpr ID Deuteron = 5;
192193 } ConfTrkSelection;
193194
@@ -323,9 +324,12 @@ struct FemtoUniverseProducerTask {
323324
324325 // D0/D0bar mesons
325326 struct : o2::framework::ConfigurableGroup {
326- Configurable<float > confD0D0barCandEtaCut{" confD0D0barCandEtaCut" , 0.8 , " max. cand. pseudorapidity" };
327+ Configurable<float > trackD0CandEtaMax{" trackD0CandEtaMax" , 0.8 , " max. track/D0 cand. pseudorapidity" };
328+ Configurable<double > yD0CandGenMax{" yD0CandGenMax" , 0.5 , " max. gen. D0 cand. rapidity" };
329+ Configurable<double > yD0CandMax{" yD0CandMax" , 0.8 , " max. D0 cand. rapidity" };
327330 Configurable<float > trackD0pTGenMin{" trackD0pTGenMin" , 0.0 , " MC Truth, min. pT for tracks and D0/D0bar cand." };
328331 Configurable<float > trackD0pTGenMax{" trackD0pTGenMax" , 24.0 , " MC Truth, max. pT for tracks and D0/D0bar cand." };
332+ Configurable<bool > useYCutD0Cand{" useYCutD0Cand" , true , " True - apply cut on y of D0 cand./false - apply cut on eta" };
329333 Configurable<bool > storeD0D0barDoubleMassHypo{" storeD0D0barDoubleMassHypo" , false , " Store D0/D0bar cand. which pass selection criteria for both, D0 and D0bar" };
330334 Configurable<std::vector<int >> classMlD0D0bar{" classMlD0D0bar" , {0 , 1 , 2 }, " Indexes of ML scores to be stored. Three indexes max." };
331335 } ConfD0Selection;
@@ -1136,9 +1140,6 @@ struct FemtoUniverseProducerTask {
11361140 {
11371141 const auto occupancy = col.trackOccupancyInTimeRange ();
11381142 outputCollExtra (irrate, occupancy);
1139- if (occupancy > ConfGeneral.confTPCOccupancyMax ) {
1140- std::cout << " occupancy" << occupancy << std::endl;
1141- }
11421143 }
11431144
11441145 template <bool isMC, typename TrackType>
@@ -1349,6 +1350,27 @@ struct FemtoUniverseProducerTask {
13491350 }
13501351 }
13511352
1353+ template <typename MCParticlesType>
1354+ void fillTracksMCTruth (MCParticlesType const & mcParticles)
1355+ {
1356+ for (const auto & mc : mcParticles) { // Loop over all MC Truth particles
1357+
1358+ std::vector<int > childIDs = {0 , 0 };
1359+ outputParts (outputCollision.lastIndex (),
1360+ mc.pt (),
1361+ mc.eta (),
1362+ mc.phi (),
1363+ aod::femtouniverseparticle::ParticleType::kMCTruthTrack ,
1364+ 0 ,
1365+ 0 ,
1366+ mc.pdgCode (),
1367+ childIDs,
1368+ 0 ,
1369+ 0 );
1370+ fillMCTruthParticle (mc, aod::femtouniverseparticle::ParticleType::kMCTruthTrack );
1371+ }
1372+ }
1373+
13521374 template <bool isMC, typename CollisionType, typename CascadeType, typename TrackType>
13531375 void fillCascade (CollisionType const & col, CascadeType const & fullCascades, TrackType const &)
13541376 {
@@ -1487,7 +1509,11 @@ struct FemtoUniverseProducerTask {
14871509 continue ;
14881510 }
14891511
1490- if (std::abs (hfCand.eta ()) > ConfD0Selection.confD0D0barCandEtaCut ) {
1512+ if (ConfD0Selection.useYCutD0Cand && std::abs (hfHelper.yD0 (hfCand)) > ConfD0Selection.yD0CandMax ) {
1513+ continue ;
1514+ }
1515+
1516+ if (!(ConfD0Selection.useYCutD0Cand ) && std::abs (hfCand.eta ()) > ConfD0Selection.trackD0CandEtaMax ) {
14911517 continue ;
14921518 }
14931519
@@ -1606,7 +1632,11 @@ struct FemtoUniverseProducerTask {
16061632 continue ;
16071633 }
16081634
1609- if (std::abs (hfCand.eta ()) > ConfD0Selection.confD0D0barCandEtaCut ) {
1635+ if (ConfD0Selection.useYCutD0Cand && std::abs (hfHelper.yD0 (hfCand)) > ConfD0Selection.yD0CandMax ) {
1636+ continue ;
1637+ }
1638+
1639+ if (!(ConfD0Selection.useYCutD0Cand ) && std::abs (hfCand.eta ()) > ConfD0Selection.trackD0CandEtaMax ) {
16101640 continue ;
16111641 }
16121642
@@ -1732,7 +1762,11 @@ struct FemtoUniverseProducerTask {
17321762 continue ;
17331763 }
17341764
1735- if (std::abs (hfCand.eta ()) > ConfD0Selection.confD0D0barCandEtaCut ) {
1765+ if (ConfD0Selection.useYCutD0Cand && std::abs (hfHelper.yD0 (hfCand)) > ConfD0Selection.yD0CandMax ) {
1766+ continue ;
1767+ }
1768+
1769+ if (!(ConfD0Selection.useYCutD0Cand ) && std::abs (hfCand.eta ()) > ConfD0Selection.trackD0CandEtaMax ) {
17361770 continue ;
17371771 }
17381772
@@ -2121,8 +2155,7 @@ struct FemtoUniverseProducerTask {
21212155 std::vector<int > tmpIDtrack;
21222156
21232157 for (const auto & particle : mcParts) {
2124- if (particle.eta () < -ConfFilterCuts.confEtaFilterCut || particle.eta () > ConfFilterCuts.confEtaFilterCut )
2125- continue ;
2158+
21262159 if (particle.pt () < ConfD0Selection.trackD0pTGenMin || particle.pt () > ConfD0Selection.trackD0pTGenMax )
21272160 continue ;
21282161
@@ -2155,9 +2188,18 @@ struct FemtoUniverseProducerTask {
21552188 // / check if we have D0(bar) → π± K∓
21562189 continue ;
21572190 }
2191+
21582192 if (std::abs (particle.pdgCode ()) == Pdg::kD0 ) {
2159- origin = RecoDecay::getCharmHadronOrigin (mcParts, particle);
2160- mcGenFlag = particle.flagMcMatchGen ();
2193+ if (std::abs (particle.y ()) > ConfD0Selection.yD0CandGenMax ) {
2194+ continue ;
2195+ } else {
2196+ origin = RecoDecay::getCharmHadronOrigin (mcParts, particle);
2197+ mcGenFlag = particle.flagMcMatchGen ();
2198+ }
2199+ } else {
2200+ if (std::abs (particle.eta ()) > ConfD0Selection.trackD0CandEtaMax ) {
2201+ continue ;
2202+ }
21612203 }
21622204
21632205 outputParts (outputCollision.lastIndex (),
@@ -2514,7 +2556,11 @@ struct FemtoUniverseProducerTask {
25142556 if (colcheck) {
25152557 auto groupedMCParticles = mcParticles.sliceBy (perMCCollision, mccol.globalIndex ());
25162558 outputCollExtra (1.0 , 1.0 );
2517- fillParticles<decltype (groupedMCParticles), true , true >(groupedMCParticles, recoMcIds); // fills mc particles
2559+ if (!ConfTrkSelection.confIsOnlyMCTrack ) {
2560+ fillParticles<decltype (groupedMCParticles), true , true >(groupedMCParticles, recoMcIds); // fills mc particles
2561+ } else {
2562+ fillTracksMCTruth (groupedMCParticles);
2563+ }
25182564 }
25192565 }
25202566 }
0 commit comments