Skip to content

Commit 6b52a81

Browse files
authored
[Common] Extend option to reassociate PV contributors to different collisions (#15929)
1 parent 28a8d2b commit 6b52a81

3 files changed

Lines changed: 16 additions & 6 deletions

File tree

Common/Core/CollisionAssociation.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ enum TrackSelection {
4646
QualityTracksITS = 2
4747
};
4848

49+
enum PVContrReassocOpt {
50+
Disabled = 0,
51+
OnlySameBc = 1,
52+
SameBcAndLowMult = 2
53+
};
54+
4955
} // namespace track_association
5056
} // namespace o2::aod
5157

@@ -59,10 +65,11 @@ class CollisionAssociation
5965
void setNumSigmaForTimeCompat(float nSigma) { mNumSigmaForTimeCompat = nSigma; }
6066
void setTimeMargin(float timeMargin) { mTimeMargin = timeMargin; }
6167
void setTrackSelectionOptionForStdAssoc(int option) { mTrackSelection = option; }
62-
void setUsePvAssociation(bool enable = true) { mUsePvAssociation = enable; }
68+
void setUsePvAssociation(int option = o2::aod::track_association::PVContrReassocOpt::OnlySameBc) { mUsePvAssociation = option; }
6369
void setIncludeUnassigned(bool enable = true) { mIncludeUnassigned = enable; }
6470
void setFillTableOfCollIdsPerTrack(bool fill = true) { mFillTableOfCollIdsPerTrack = fill; }
6571
void setBcWindow(int bcWindow = 115) { mBcWindowForOneSigma = bcWindow; }
72+
void setMaxPvContributorsForLowMultReassoc(int pvContributorsMax) { mMaxPvContributorsForLowMultReassoc = pvContributorsMax; }
6673

6774
template <typename TTracks, typename Slice, typename Assoc, typename RevIndices>
6875
void runStandardAssoc(o2::aod::Collisions const& collisions,
@@ -234,7 +241,7 @@ class CollisionAssociation
234241
float trackTime = 0;
235242
float trackTimeRes = 0;
236243
if constexpr (isCentralBarrel) {
237-
if (mUsePvAssociation && trackInWindow.isPVContributor()) {
244+
if ((mUsePvAssociation == o2::aod::track_association::PVContrReassocOpt::OnlySameBc && trackInWindow.isPVContributor()) || (mUsePvAssociation == o2::aod::track_association::PVContrReassocOpt::SameBcAndLowMult && trackInWindow.isPVContributor() && trackInWindow.collision().numContrib() > mMaxPvContributorsForLowMultReassoc)) {
238245
trackTime = trackInWindow.collision().collisionTime(); // if PV contributor, we assume the time to be the one of the collision
239246
trackTimeRes = o2::constants::lhc::LHCBunchSpacingNS; // 1 BC
240247
} else {
@@ -252,7 +259,7 @@ class CollisionAssociation
252259

253260
float thresholdTime = 0.;
254261
if constexpr (isCentralBarrel) {
255-
if (mUsePvAssociation && trackInWindow.isPVContributor()) {
262+
if ((mUsePvAssociation == o2::aod::track_association::PVContrReassocOpt::OnlySameBc && trackInWindow.isPVContributor()) || (mUsePvAssociation == o2::aod::track_association::PVContrReassocOpt::SameBcAndLowMult && trackInWindow.isPVContributor() && trackInWindow.collision().numContrib() > mMaxPvContributorsForLowMultReassoc)) {
256263
thresholdTime = trackTimeRes;
257264
} else if (TESTBIT(trackInWindow.flags(), o2::aod::track::TrackTimeResIsRange)) {
258265
// the track time resolution is a range, not a gaussian resolution
@@ -306,7 +313,8 @@ class CollisionAssociation
306313
float mNumSigmaForTimeCompat{4.}; // number of sigma for time compatibility
307314
float mTimeMargin{500.}; // additional time margin in ns
308315
int mTrackSelection{o2::aod::track_association::TrackSelection::GlobalTrackWoDCA}; // track selection for central barrel tracks (standard association only)
309-
bool mUsePvAssociation{true}; // use the information of PV contributors
316+
int mUsePvAssociation{1}; // use the information of PV contributors (0: off, 1: reassociate only with collisions in the same BC, 2: reassociate with collisions in the same BC, or within time resolution in case of low mult PVs)
317+
int mMaxPvContributorsForLowMultReassoc{10}; // maximum value of PV contributors to reassociate tracks that are PV contributors to other vertices
310318
bool mIncludeUnassigned{true}; // include tracks that were originally not assigned to any collision
311319
bool mFillTableOfCollIdsPerTrack{false}; // fill additional table with vectors of compatible collisions per track
312320
int mBcWindowForOneSigma{115}; // BC window to be multiplied by the number of sigmas to define maximum window to be considered

Common/TableProducer/fwdtrackToCollisionAssociator.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ struct FwdTrackToCollisionAssociation {
6363
collisionAssociator.setNumSigmaForTimeCompat(nSigmaForTimeCompat);
6464
collisionAssociator.setTimeMargin(timeMargin);
6565
collisionAssociator.setTrackSelectionOptionForStdAssoc(track_association::TrackSelection::None);
66-
collisionAssociator.setUsePvAssociation(false);
66+
collisionAssociator.setUsePvAssociation(track_association::PVContrReassocOpt::Disabled);
6767
collisionAssociator.setIncludeUnassigned(includeUnassigned);
6868
collisionAssociator.setFillTableOfCollIdsPerTrack(fillTableOfCollIdsPerTrack);
6969
collisionAssociator.setBcWindow(bcWindowForOneSigma);

Common/TableProducer/trackToCollisionAssociator.cxx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,11 @@ struct TrackToCollisionAssociation {
3939
Configurable<float> nSigmaForTimeCompat{"nSigmaForTimeCompat", 4.f, "number of sigmas for time compatibility"};
4040
Configurable<float> timeMargin{"timeMargin", 0.f, "time margin in ns added to uncertainty because of uncalibrated TPC"};
4141
Configurable<int> setTrackSelections{"setTrackSelections", 1, "flag to apply track selections: -1=minimal track selection for Run 2 (standard association); 0=none; 1=global track w/o DCA selection; 2=only ITS quality"};
42-
Configurable<bool> usePVAssociation{"usePVAssociation", true, "if the track is a PV contributor, use the collision time for it"};
42+
Configurable<int> usePVAssociation{"usePVAssociation", 1, "use information of PV contribution in reassociation; 0 -> off, 1 -> reassociate only with collisions in the same BC, 2 -> as 1 only for tracks associated to high multiplicity vertices"};
4343
Configurable<bool> includeUnassigned{"includeUnassigned", false, "consider also tracks which are not assigned to any collision"};
4444
Configurable<bool> fillTableOfCollIdsPerTrack{"fillTableOfCollIdsPerTrack", false, "fill additional table with vector of collision ids per track"};
4545
Configurable<int> bcWindowForOneSigma{"bcWindowForOneSigma", 60, "BC window to be multiplied by the number of sigmas to define maximum window to be considered"};
46+
Configurable<int> maxPvContributorsForLowMultReassoc{"maxPvContributorsForLowMultReassoc", 10, "Maximum number of PV contributors to consider a collision at low multiplicity and reassociate tracks even if PV contributors if enabled"};
4647

4748
CollisionAssociation<true> collisionAssociator;
4849

@@ -67,6 +68,7 @@ struct TrackToCollisionAssociation {
6768
collisionAssociator.setIncludeUnassigned(includeUnassigned);
6869
collisionAssociator.setFillTableOfCollIdsPerTrack(fillTableOfCollIdsPerTrack);
6970
collisionAssociator.setBcWindow(bcWindowForOneSigma);
71+
collisionAssociator.setMaxPvContributorsForLowMultReassoc(maxPvContributorsForLowMultReassoc);
7072
}
7173

7274
void processAssocWithTime(Collisions const& collisions, TracksWithSel const& tracksUnfiltered, TracksWithSelFilter const& tracks, AmbiguousTracks const& ambiguousTracks, BCs const& bcs)

0 commit comments

Comments
 (0)