Skip to content

Commit 028cd48

Browse files
committed
Fix: fix derived to derived producer
1 parent 58a7b4a commit 028cd48

File tree

3 files changed

+38
-31
lines changed

3 files changed

+38
-31
lines changed

PWGCF/Femto/Core/trackBuilder.h

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -753,8 +753,8 @@ struct TrackBuilderDerivedToDerivedProducts : o2::framework::ProducesGroup {
753753

754754
struct ConfTrackTablesDerivedToDerived : o2::framework::ConfigurableGroup {
755755
std::string prefix = std::string("TrackTables");
756-
o2::framework::Configurable<int> limitTrack1{"limitTrack1", 1, "At least this many tracks of type 1 need to be in the collision"};
757-
o2::framework::Configurable<int> limitTrack2{"limitTrack2", 0, "At least this many tracks of type 2 need to be in the collision"};
756+
o2::framework::Configurable<int> limitTrack1{"limitTrack1", 1, "At least this many tracks of type 1 need to be in the collision. Ignored if set to 0."};
757+
o2::framework::Configurable<int> limitTrack2{"limitTrack2", 0, "At least this many tracks of type 2 need to be in the collision. Ignored if set to 0."};
758758
};
759759

760760
class TrackBuilderDerivedToDerived
@@ -768,43 +768,51 @@ class TrackBuilderDerivedToDerived
768768
{
769769
mLimitTrack1 = config.limitTrack1.value;
770770
mLimitTrack2 = config.limitTrack2.value;
771+
772+
if (mLimitTrack1 == 0 && mLimitTrack2 == 0) {
773+
LOG(fatal) << "Both track limits are 0. Breaking...";
774+
}
771775
}
772776

773777
template <typename T1, typename T2, typename T3, typename T4, typename T5>
774778
bool collisionHasTooFewTracks(T1& col, T2& /*trackTable*/, T3& partitionTrack1, T4& partitionTrack2, T5& cache)
775779
{
776780
auto trackSlice1 = partitionTrack1->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
777781
auto trackSlice2 = partitionTrack2->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
778-
if (trackSlice1.size() >= mLimitTrack1 && trackSlice2.size() >= mLimitTrack2) {
779-
return false;
780-
}
781-
return true;
782+
return trackSlice1.size() < mLimitTrack1 || trackSlice2.size() < mLimitTrack2;
782783
}
783784

784785
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
785786
void processTracks(T1& col, T2& /*trackTable*/, T3& partitionTrack1, T4& partitionTrack2, T5& cache, T6& newTrackTable, T7& newCollisionTable)
786787
{
787788
indexMap.clear();
788-
auto trackSlice1 = partitionTrack1->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
789-
auto trackSlice2 = partitionTrack2->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
790789

791-
for (auto const& track : trackSlice1) {
792-
this->fillTrack(track, newTrackTable, newCollisionTable);
790+
if (mLimitTrack1 > 0) {
791+
auto trackSlice1 = partitionTrack1->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
792+
for (auto const& track : trackSlice1) {
793+
this->fillTrack(track, newTrackTable, newCollisionTable);
794+
}
793795
}
794-
for (auto const& track : trackSlice2) {
795-
this->fillTrack(track, newTrackTable, newCollisionTable);
796+
797+
if (mLimitTrack2 > 0) {
798+
auto trackSlice2 = partitionTrack2->sliceByCached(o2::aod::femtobase::stored::fColId, col.globalIndex(), cache);
799+
for (auto const& track : trackSlice2) {
800+
this->fillTrack(track, newTrackTable, newCollisionTable);
801+
}
796802
}
797803
}
798804

799805
template <typename T1, typename T2, typename T3>
800806
void fillTrack(T1 const& track, T2& trackProducts, T3& collisionProducts)
801807
{
802-
trackProducts.producedTracks(collisionProducts.producedCollision.lastIndex(),
803-
track.signedPt(),
804-
track.eta(),
805-
track.phi());
806-
trackProducts.producedTrackMasks(track.mask());
807-
indexMap.emplace(track.globalIndex(), trackProducts.producedTracks.lastIndex());
808+
if (indexMap.find(track.globalIndex()) == indexMap.end()) { // protect against double filling
809+
trackProducts.producedTracks(collisionProducts.producedCollision.lastIndex(),
810+
track.signedPt(),
811+
track.eta(),
812+
track.phi());
813+
trackProducts.producedTrackMasks(track.mask());
814+
indexMap.emplace(track.globalIndex(), trackProducts.producedTracks.lastIndex());
815+
}
808816
}
809817

810818
template <typename T1, typename T2, typename T3>
@@ -816,7 +824,6 @@ class TrackBuilderDerivedToDerived
816824
} else {
817825
this->fillTrack(daughter, trackProducts, collisionProducts);
818826
int64_t idx = trackProducts.producedTracks.lastIndex();
819-
indexMap.emplace(daughter.globalIndex(), idx);
820827
return idx;
821828
}
822829
}

PWGCF/Femto/Core/v0Builder.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,10 @@ class V0BuilderDerivedToDerived
555555
{
556556
mLimitLambda = config.limitLambda.value;
557557
mLimitK0short = config.limitK0short.value;
558+
559+
if (mLimitLambda == 0 && mLimitK0short == 0) {
560+
LOG(fatal) << "Both lambda limit and k0short limit are 0. Breaking...";
561+
}
558562
}
559563

560564
template <typename T1, typename T2, typename T3, typename T4>

PWGCF/Femto/TableProducer/femtoProducerDerivedToDerived.cxx

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -97,27 +97,23 @@ struct FemtoProducerDerivedToDerived {
9797

9898
void processTracksLambdas(FilteredCollision const& col, Tracks const& tracks, Lambdas const& lambdas)
9999
{
100-
if (trackBuilder.collisionHasTooFewTracks(col, tracks, trackPartition1, trackPartition2, cache) && v0Builder.collisionHasTooFewLambdas(col, lambdas, lambdaPartition, cache)) {
100+
if (trackBuilder.collisionHasTooFewTracks(col, tracks, trackPartition1, trackPartition2, cache) || v0Builder.collisionHasTooFewLambdas(col, lambdas, lambdaPartition, cache)) {
101101
return;
102102
}
103-
if (trackBuilder.collisionHasTooFewTracks(col, tracks, trackPartition1, trackPartition2, cache)) {
104-
collisionBuilder.processCollision(col, collisionBuilderProducts);
105-
trackBuilder.processTracks(col, tracks, trackPartition1, trackPartition2, cache, trackBuilderProducts, collisionBuilderProducts);
106-
v0Builder.processLambdas(col, lambdas, tracks, lambdaPartition, trackBuilder, cache, v0BuilderProducts, trackBuilderProducts, collisionBuilderProducts);
107-
}
103+
collisionBuilder.processCollision(col, collisionBuilderProducts);
104+
trackBuilder.processTracks(col, tracks, trackPartition1, trackPartition2, cache, trackBuilderProducts, collisionBuilderProducts);
105+
v0Builder.processLambdas(col, lambdas, tracks, lambdaPartition, trackBuilder, cache, v0BuilderProducts, trackBuilderProducts, collisionBuilderProducts);
108106
}
109107
PROCESS_SWITCH(FemtoProducerDerivedToDerived, processTracksLambdas, "Process lambdas and tracks", false);
110108

111109
void processTracksK0shorts(FilteredCollision const& col, Tracks const& tracks, K0shorts const& k0shorts)
112110
{
113-
if (trackBuilder.collisionHasTooFewTracks(col, tracks, trackPartition1, trackPartition2, cache) && v0Builder.collisionHasTooFewK0shorts(col, k0shorts, k0shortPartition, cache)) {
111+
if (trackBuilder.collisionHasTooFewTracks(col, tracks, trackPartition1, trackPartition2, cache) || v0Builder.collisionHasTooFewK0shorts(col, k0shorts, k0shortPartition, cache)) {
114112
return;
115113
}
116-
if (trackBuilder.collisionHasTooFewTracks(col, tracks, trackPartition1, trackPartition2, cache)) {
117-
collisionBuilder.processCollision(col, collisionBuilderProducts);
118-
trackBuilder.processTracks(col, tracks, trackPartition1, trackPartition2, cache, trackBuilderProducts, collisionBuilderProducts);
119-
v0Builder.processK0shorts(col, k0shorts, tracks, k0shortPartition, trackBuilder, cache, v0BuilderProducts, trackBuilderProducts, collisionBuilderProducts);
120-
}
114+
collisionBuilder.processCollision(col, collisionBuilderProducts);
115+
trackBuilder.processTracks(col, tracks, trackPartition1, trackPartition2, cache, trackBuilderProducts, collisionBuilderProducts);
116+
v0Builder.processK0shorts(col, k0shorts, tracks, k0shortPartition, trackBuilder, cache, v0BuilderProducts, trackBuilderProducts, collisionBuilderProducts);
121117
}
122118
PROCESS_SWITCH(FemtoProducerDerivedToDerived, processTracksK0shorts, "Process k0short and tracks", false);
123119
};

0 commit comments

Comments
 (0)