Repository navigation
Conversation
Please consider the following formatting changes to AliceO2Group#18677
|
O2 linter results: ❌ 0 errors, |
|
Error while checking build/O2Physics/o2 for be49428 at 2026-11-13 07:50: Full log here. |
|
Error while checking build/O2Physics/code-check for be49428 at 2026-11-13 07:51: Full log here. |
ariedel-cern
left a comment
There was a problem hiding this comment.
Hi @yakparo ,
many thanks for preparing this PR. There are some issues with the data model of the sigma0 and the builder.
Here are the 2 main points:
- It does not provide useful information to store the index of the daughter lambda and its decay products for the sigma0. I would suggest doing it the way we do it for cascades, where we only store the indices of the daughter tracks. That is all the information necessary for pair cleaning/CPR/CTR.
- Please check how TwoTrackResonance/TwoPhotonResonance builder are implemented. Apply selections on the daughters before they even enter the builder. Applying filters and bitmask by hand is way slower than using the Filter and Partitioning features of the O2 framework
| DECLARE_SOA_INDEX_COLUMN_FULL(Photon, photon, int32_t, FPhotons, "_photon"); ///< row in FPhotons | ||
| // id columns for Lambda daughter tracks | ||
| DECLARE_SOA_INDEX_COLUMN_FULL(PosDau, posDau, int32_t, FTracks, "_PosDau"); //! index column for positive daughter track | ||
| DECLARE_SOA_INDEX_COLUMN_FULL(NegDau, negDau, int32_t, FTracks, "_NegDau"); //! index column for negative daughter track |
There was a problem hiding this comment.
I am not sure all these indices are necessary. For example, for Cascade we only store the indices to the the daughter tracks (the secondary lambda we dont care about much and the when we we do pair cleaning or CPR, we always check on the track level). So I would remove here the index of the lambda
| PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore | ||
| COMPONENT_NAME Analysis) | ||
|
|
||
| o2physics_add_dpl_workflow(femto-sigma0-producer |
There was a problem hiding this comment.
Please rename the task to femto-producer-sigma0 to use the same convention as for the other producer tasks
| sigma0builder::ConfSigma0Tables tables; | ||
| sigma0builder::Sigma0Builder sigma0Builder; | ||
|
|
||
| HistogramRegistry registry{"Sigma0", {}, OutputObjHandlingPolicy::AnalysisObject}; |
There was a problem hiding this comment.
Use a more descriptive name like FemtoProducerSigma0
| // { | ||
| // sigma0Builder.fillSigma0s(products, lambdas, photons, tracks); | ||
| // } | ||
| void process(Lambdas const& lambdas, Photons const& photons, o2::aod::FTracks const& tracks, o2::aod::FCols const& /**/, o2::aod::FColMasks const& /**/, o2::aod::FTrackMasks const& /**/) |
There was a problem hiding this comment.
This does not seem correct. Like this you would pare every lambda with every photon in every collision.
There was a problem hiding this comment.
You have to subscribe to the collision iterate first to group the other tables by the collision index. then you can pare all particle in one collision to search for sigma0 candidates.
| #include "PWGCF/Femto/Core/pairCleaner.h" | ||
| #include "PWGCF/Femto/Core/particleCleaner.h" | ||
| #include "PWGCF/Femto/Core/partitions.h" | ||
| // #include "PWGCF/Femto/Core/photonHistManager.h" |
There was a problem hiding this comment.
Please done leave code commented
| using FSigma0s = FSigma0s_001; | ||
|
|
||
| DECLARE_SOA_TABLE_STAGED_VERSIONED(FSigma0Masks_001, "FSIGMA0MASK", 1, //! sigma0 masks | ||
| femtosigma0s::Mask); |
There was a problem hiding this comment.
Here you should store the bitmask of the daugher lambda and photon
| // Preselect photons once and group their row indices by collision. | ||
| std::unordered_map<int64_t, std::vector<int64_t>> photonRowsPerCollision; | ||
| for (const auto& photon : photons) { | ||
| if (selectPhoton(photon)) { |
There was a problem hiding this comment.
Don't do it like that. Specify a selection bit for the lambda and photon, and then partition them before feeding them to the builder. Please check how the twotrackresonancebuilder or the twophotonresonance builder implements the reconstruction of resonances.
| return; | ||
| } | ||
|
|
||
| mPhotonMask = filter.photonMask.value; |
There was a problem hiding this comment.
Filters for the daughters should be applied outside of the builder with a Filter
| } | ||
|
|
||
| template <typename T> | ||
| bool selectLambda(T const& lambda) |
There was a problem hiding this comment.
Remove, This should all happen, filtering and partioning should happen outside of the builder
| template <typename TProducts, typename TLambda, typename TPhoton, typename TPosDau, typename TNegDau> | ||
| bool buildSigma0(TProducts& products, TLambda const& lambda, TPhoton const& photon, TPosDau const& posDau, TNegDau const& negDau) | ||
| { | ||
| const float lambdaPt = std::abs(lambda.signedPt()); |
There was a problem hiding this comment.
Please use ROOT::Math::PtEtaPhiMVector and then cache pt/eta/phi as class variables. Please check how twotrackresonance producer is implemented
No description provided.