1919#include " PWGCF/Femto/Core/mcBuilder.h"
2020#include " PWGCF/Femto/Core/partitions.h"
2121#include " PWGCF/Femto/Core/trackBuilder.h"
22+ #include " PWGCF/Femto/Core/twoTrackResonanceBuilder.h"
2223#include " PWGCF/Femto/Core/v0Builder.h"
2324#include " PWGCF/Femto/DataModel/FemtoTables.h"
2425
@@ -47,6 +48,8 @@ struct FemtoProducerDerivedToDerived {
4748 using FemtoTracksWithMass = o2::soa::Join<FemtoTracks, o2::aod::FTrackMass>;
4849 using FemtoLambdas = o2::soa::Join<o2::aod::FLambdas, o2::aod::FLambdaMasks>;
4950 using FemtoK0shorts = o2::soa::Join<o2::aod::FK0shorts, o2::aod::FK0shortMasks>;
51+ using FemtoRho0s = o2::soa::Join<o2::aod::FRho0s, o2::aod::FRho0Masks>;
52+ using FemtoPhis = o2::soa::Join<o2::aod::FPhis, o2::aod::FPhiMasks>;
5053 using FemtoXis = o2::soa::Join<o2::aod::FXis, o2::aod::FXiMasks>;
5154 using FemtoOmegas = o2::soa::Join<o2::aod::FOmegas, o2::aod::FOmegaMasks>;
5255 using FemtoSigma = o2::soa::Join<o2::aod::FSigmas, o2::aod::FSigmaMasks>;
@@ -93,6 +96,19 @@ struct FemtoProducerDerivedToDerived {
9396 o2::framework::Partition<FemtoK0shorts> k0shortPartition = MAKE_K0SHORT_PARTITION (k0shortSelection1);
9497 o2::framework::Preslice<FemtoK0shorts> perColK0shorts = o2::aod::femtobase::stored::fColId ;
9598
99+ // two-track resonance builder
100+ twotrackresonancebuilder::TwoTrackResonanceBuilderDerivedToDerived resonanceBuilder;
101+ twotrackresonancebuilder::TwoTrackResonanceBuilderDerivedToDerivedProducts resonanceBuilderProducts;
102+ twotrackresonancebuilder::ConfTwoTrackResonanceTablesDerivedToDerived confResonanceBuilder;
103+
104+ twotrackresonancebuilder::ConfRho0Selection rho0Selection;
105+ o2::framework::Partition<FemtoRho0s> rho0Partition = MAKE_RESONANCE_0_PARTITON (rho0Selection);
106+ o2::framework::Preslice<FemtoRho0s> perColRho0s = o2::aod::femtobase::stored::fColId ;
107+
108+ twotrackresonancebuilder::ConfPhiSelection phiSelection;
109+ o2::framework::Partition<FemtoPhis> phiPartition = MAKE_RESONANCE_0_PARTITON (phiSelection);
110+ o2::framework::Preslice<FemtoPhis> perColPhis = o2::aod::femtobase::stored::fColId ;
111+
96112 // kink builder
97113 kinkbuilder::KinkBuilderDerivedToDerived kinkBuilder;
98114 kinkbuilder::KinkBuilderDerivedToDerivedProducts kinkBuilderProducts;
@@ -143,6 +159,7 @@ struct FemtoProducerDerivedToDerived {
143159 static_cast <int >(doprocessTracksXis) + static_cast <int >(doprocessTracksOmegas) +
144160 static_cast <int >(doprocessTracksK0shorts) + static_cast <int >(doprocessTracksSigma) +
145161 static_cast <int >(doprocessTracksSigmaPlus) +
162+ static_cast <int >(doprocessTracksRho0) + static_cast <int >(doprocessTracksPhi) +
146163 static_cast <int >(doprocessTracksMc) + static_cast <int >(doprocessTracksSigmaMc) +
147164 static_cast <int >(doprocessTracksSigmaPlusMc);
148165 if (activeProcesses != 1 ) {
@@ -153,6 +170,7 @@ struct FemtoProducerDerivedToDerived {
153170 v0Builder.init (confV0Builder);
154171 cascadeBuilder.init (confCascadeBuilder);
155172 kinkBuilder.init (confKinkBuilder);
173+ resonanceBuilder.init (confResonanceBuilder);
156174 mcBuilder.init (confMcBuilder);
157175 }
158176
@@ -274,6 +292,30 @@ struct FemtoProducerDerivedToDerived {
274292 }
275293 PROCESS_SWITCH (FemtoProducerDerivedToDerived, processTracksSigmaPlus, " Process sigmaPlus and tracks" , false );
276294
295+ void processTracksRho0 (FilteredFemtoCollision const & col, FemtoTracks const & tracks, FemtoRho0s const & rho0s)
296+ {
297+ if (trackBuilder.collisionHasTooFewTracks (col, tracks, trackPartition1, trackPartition2, cache) || resonanceBuilder.collisionHasTooFewRho0s (col, rho0s, rho0Partition, cache)) {
298+ return ;
299+ }
300+ trackBuilder.reset (tracks);
301+ collisionBuilder.processCollision (col, collisionBuilderProducts);
302+ trackBuilder.processTracks (col, tracks, trackPartition1, trackPartition2, cache, trackBuilderProducts, collisionBuilderProducts);
303+ resonanceBuilder.processRho0s (col, rho0s, tracks, rho0Partition, trackBuilder, cache, resonanceBuilderProducts, trackBuilderProducts, collisionBuilderProducts);
304+ }
305+ PROCESS_SWITCH (FemtoProducerDerivedToDerived, processTracksRho0, " Process rho0 and tracks" , false );
306+
307+ void processTracksPhi (FilteredFemtoCollision const & col, FemtoTracks const & tracks, FemtoPhis const & phis)
308+ {
309+ if (trackBuilder.collisionHasTooFewTracks (col, tracks, trackPartition1, trackPartition2, cache) || resonanceBuilder.collisionHasTooFewPhis (col, phis, phiPartition, cache)) {
310+ return ;
311+ }
312+ trackBuilder.reset (tracks);
313+ collisionBuilder.processCollision (col, collisionBuilderProducts);
314+ trackBuilder.processTracks (col, tracks, trackPartition1, trackPartition2, cache, trackBuilderProducts, collisionBuilderProducts);
315+ resonanceBuilder.processPhis (col, phis, tracks, phiPartition, trackBuilder, cache, resonanceBuilderProducts, trackBuilderProducts, collisionBuilderProducts);
316+ }
317+ PROCESS_SWITCH (FemtoProducerDerivedToDerived, processTracksPhi, " Process phi and tracks" , false );
318+
277319 // mc processing
278320 // // NOTE: unlike the other process functions, this one subscribes to the full
279321 // collision table and iterates manually. The MC index maps are keyed by source
0 commit comments