Skip to content

Commit 35f09a6

Browse files
committed
validated MFT mixed event
1 parent 5297bc9 commit 35f09a6

1 file changed

Lines changed: 156 additions & 0 deletions

File tree

PWGHF/HFC/Tasks/taskFlow.cxx

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,8 @@ struct HfTaskFlow {
356356
Preslice<HfCandidatesSelD0> perColD0s = aod::track::collisionId;
357357
Preslice<HfCandidatesSelLc> perColLcs = aod::track::collisionId;
358358
Preslice<FilteredMftTracks> perColMftTracks = o2::aod::fwdtrack::collisionId;
359+
PresliceUnsorted<soa::SmallGroups<aod::BestCollisionsFwd>> perColReassociated2dTracks = o2::aod::fwdtrack::collisionId;
360+
PresliceUnsorted<soa::SmallGroups<aod::BestCollisionsFwd3d>> perColReassociated3dTracks = o2::aod::fwdtrack::collisionId;
359361
Preslice<FilteredTracksWDcaSel> perColTracks = aod::track::collisionId;
360362

361363
// configurables for containers
@@ -1419,6 +1421,16 @@ struct HfTaskFlow {
14191421
registry.fill(HIST("Data/Mft/hAmbiguityOfMftTracks"), MftTrackAmbiguityStep::AllMftTracks);
14201422
}
14211423

1424+
if (sameEvent) {
1425+
if (track1.collisionId() != track2.bestCollisionId()) {
1426+
LOGF(info, "ATTENTION : PAS TRIE");
1427+
}
1428+
} else {
1429+
if (track1.collisionId() == track2.bestCollisionId()) {
1430+
LOGF(info, "ATTENTION : PAS TRIE");
1431+
}
1432+
}
1433+
14221434
auto reassociatedMftTrack = track2.template mfttrack_as<FilteredMftTracks>();
14231435

14241436
if (!isAcceptedMftTrack(reassociatedMftTrack, false)) {
@@ -1901,6 +1913,87 @@ struct HfTaskFlow {
19011913
}
19021914
}
19031915

1916+
template <typename TCollisions, typename TTracksTrig, typename TTracksAssoc, typename TPresliceTrigger, typename TPresliceAssociated>
1917+
void mixCollisionsBis(TCollisions const& collisions, CorrelationContainer::CFStep step,
1918+
TTracksTrig const& tracks1, TTracksAssoc const& tracks2, TPresliceTrigger const& presliceTrigger, TPresliceAssociated const& presliceAssociated,
1919+
OutputObj<CorrelationContainer>& corrContainer, aod::BCsWithTimestamps const&)
1920+
{
1921+
auto getMultiplicity = [this](FilteredCollisionsWSelMult::iterator const& collision) {
1922+
auto multiplicity = getMultiplicityEstimator(collision, false);
1923+
return multiplicity;
1924+
};
1925+
1926+
using MixedBinning = FlexibleBinningPolicy<std::tuple<decltype(getMultiplicity)>, aod::collision::PosZ, decltype(getMultiplicity)>;
1927+
MixedBinning const binningOnVtxAndMult{{getMultiplicity}, {configAxis.binsMixingVertex, configAxis.binsMixingMultiplicity}, true};
1928+
1929+
for (auto const& [collision1, collision2] : soa::selfCombinations(binningOnVtxAndMult, configTask.nMixedEvents, -1, collisions, collisions)) {
1930+
1931+
if (!(isAcceptedCollision(collision1, false))) {
1932+
continue;
1933+
}
1934+
if (!(isAcceptedCollision(collision2, false))) {
1935+
continue;
1936+
}
1937+
if (collision1.globalIndex() == collision2.globalIndex()) {
1938+
continue;
1939+
}
1940+
const auto multiplicity = getMultiplicityEstimator(collision1, false);
1941+
if (multiplicity < configCollision.minMultiplicity || multiplicity > configCollision.maxMultiplicity) {
1942+
return;
1943+
}
1944+
1945+
auto bc = collision1.template bc_as<aod::BCsWithTimestamps>();
1946+
auto slicedTriggerTracks = tracks1.sliceBy(presliceTrigger, collision1.globalIndex());
1947+
auto slicedAssociatedTracks = tracks2.sliceBy(presliceAssociated, collision2.globalIndex());
1948+
1949+
corrContainer->fillEvent(multiplicity, step);
1950+
fillCorrelations(corrContainer, step, slicedTriggerTracks, slicedAssociatedTracks, multiplicity, collision1.posZ(), false, getMagneticField(bc.timestamp()));
1951+
}
1952+
}
1953+
1954+
template <typename TCollisions, typename TTracksTrig, typename TTracksAssoc, typename TPresliceTrigger, typename TPresliceAssociated>
1955+
void mixCollisionsReassociatedMftTracks(TCollisions const& collisions, CorrelationContainer::CFStep step,
1956+
TTracksTrig const& tracks1, TTracksAssoc const& tracks2, TPresliceTrigger const& presliceTrigger, TPresliceAssociated const& presliceAssociated,
1957+
OutputObj<CorrelationContainer>& corrContainer, bool cutAmbiguousTracks)
1958+
{
1959+
auto getMultiplicity = [this](FilteredCollisionsWSelMult::iterator const& collision) {
1960+
auto multiplicity = getMultiplicityEstimator(collision, false);
1961+
return multiplicity;
1962+
};
1963+
1964+
using MixedBinning = FlexibleBinningPolicy<std::tuple<decltype(getMultiplicity)>, aod::collision::PosZ, decltype(getMultiplicity)>;
1965+
MixedBinning const binningOnVtxAndMult{{getMultiplicity}, {configAxis.binsMixingVertex, configAxis.binsMixingMultiplicity}, true};
1966+
1967+
for (auto const& [collision1, collision2] : soa::selfCombinations(binningOnVtxAndMult, configTask.nMixedEvents, -1, collisions, collisions)) {
1968+
1969+
if (!isAcceptedCollision(collision1) || !isAcceptedCollision(collision2)) {
1970+
continue;
1971+
}
1972+
if (collision1.globalIndex() == collision2.globalIndex()) {
1973+
continue;
1974+
}
1975+
const auto multiplicity = getMultiplicityEstimator(collision1, false);
1976+
if (multiplicity < configCollision.minMultiplicity || multiplicity > configCollision.maxMultiplicity) {
1977+
return;
1978+
}
1979+
1980+
// if TPC-MFT cases
1981+
if constexpr (std::is_same_v<FilteredTracksWDcaSel, TTracksTrig>) {
1982+
auto slicedTriggerTracks = tracks1.sliceBy(presliceTrigger, collision1.globalIndex());
1983+
auto slicedAssociatedTracks = tracks2.sliceBy(presliceAssociated, collision2.globalIndex());
1984+
1985+
corrContainer->fillEvent(multiplicity, step);
1986+
fillCorrelationsReassociatedMftTracks(corrContainer, step, slicedTriggerTracks, slicedAssociatedTracks, multiplicity, collision1.posZ(), false, cutAmbiguousTracks);
1987+
} else if ((collision1.has_foundFT0() && collision2.has_foundFT0())) { // if MFT-FT0A cases
1988+
auto slicedTriggerTracks = tracks1.sliceBy(presliceTrigger, collision1.globalIndex());
1989+
const auto& ft0 = collision2.foundFT0();
1990+
1991+
corrContainer->fillEvent(multiplicity, step);
1992+
fillCorrelationsFITReassociatedMftTracks(corrContainer, step, slicedTriggerTracks, ft0, tracks2, multiplicity, collision1.posZ(), false, cutAmbiguousTracks, isFT0A);
1993+
}
1994+
} // end of for loop
1995+
}
1996+
19041997
template <typename TCollisions, typename TTracksTrig, typename TTracksAssoc, typename TPreslice>
19051998
void mixCollisionsFIT(TCollisions const& collisions, CorrelationContainer::CFStep step,
19061999
TTracksTrig const& tracks1, TTracksAssoc const& tracks2, TPreslice const& preslice,
@@ -2857,6 +2950,42 @@ struct HfTaskFlow {
28572950
}
28582951
PROCESS_SWITCH(HfTaskFlow, processMixedTpcMftChCh, "DATA : Process mixed-event correlations for TPC-MFT h-h case", false);
28592952

2953+
void processMixedTpcMftChChBis(FilteredCollisionsWSelMult const& collisions,
2954+
FilteredTracksWDcaSel const& tracks,
2955+
FilteredMftTracks const& mftTracks,
2956+
aod::BCsWithTimestamps const& bcs)
2957+
{
2958+
mixCollisionsBis(collisions, CorrelationContainer::kCFStepReconstructed, tracks, mftTracks, perColTracks, perColMftTracks, mixedEvent, bcs);
2959+
}
2960+
PROCESS_SWITCH(HfTaskFlow, processMixedTpcMftChChBis, "DATA : Process mixed-event correlations for TPC-MFT h-h case", false);
2961+
2962+
void processMixedTpcMftChChReassociated2d(FilteredCollisionsWSelMult const& collisions,
2963+
FilteredTracksWDcaSel const& tracks,
2964+
FilteredMftTracks const& /*mftTracks*/,
2965+
soa::SmallGroups<aod::BestCollisionsFwd> const& reassociated2dMftTracks)
2966+
{
2967+
mixCollisionsReassociatedMftTracks(collisions, CorrelationContainer::kCFStepReconstructed, tracks, reassociated2dMftTracks, perColTracks, perColReassociated2dTracks, mixedEvent, false);
2968+
}
2969+
PROCESS_SWITCH(HfTaskFlow, processMixedTpcMftChChReassociated2d, "DATA : Process mixed-event correlations for TPC-MFT h-h case", false);
2970+
2971+
void processMixedTpcMftChChReassociated3d(FilteredCollisionsWSelMult const& collisions,
2972+
FilteredTracksWDcaSel const& tracks,
2973+
FilteredMftTracks const& /*mftTracks*/,
2974+
soa::SmallGroups<aod::BestCollisionsFwd3d> const& reassociated3dMftTracks)
2975+
{
2976+
mixCollisionsReassociatedMftTracks(collisions, CorrelationContainer::kCFStepReconstructed, tracks, reassociated3dMftTracks, perColTracks, perColReassociated3dTracks, mixedEvent, false);
2977+
}
2978+
PROCESS_SWITCH(HfTaskFlow, processMixedTpcMftChChReassociated3d, "DATA : Process mixed-event correlations for TPC-MFT h-h case", false);
2979+
2980+
void processMixedTpcMftChChNonAmbiguous(FilteredCollisionsWSelMult const& collisions,
2981+
FilteredTracksWDcaSel const& tracks,
2982+
FilteredMftTracks const& /*mftTracks*/,
2983+
soa::SmallGroups<aod::BestCollisionsFwd> const& reassociated2dMftTracks)
2984+
{
2985+
mixCollisionsReassociatedMftTracks(collisions, CorrelationContainer::kCFStepReconstructed, tracks, reassociated2dMftTracks, perColTracks, perColReassociated2dTracks, mixedEvent, true);
2986+
}
2987+
PROCESS_SWITCH(HfTaskFlow, processMixedTpcMftChChNonAmbiguous, "DATA : Process mixed-event correlations for TPC-MFT h-h case", false);
2988+
28602989
// =====================================
28612990
// DATA : process mixed event correlations: TPC-MFT HF-h case for D0
28622991
// =====================================
@@ -2980,6 +3109,33 @@ struct HfTaskFlow {
29803109
}
29813110
PROCESS_SWITCH(HfTaskFlow, processMixedMftFt0aChCh, "DATA : Process mixed-event correlations for MFT-FT0-A h-h case", false);
29823111

3112+
void processMixedMftFt0aChChReassociated2d(FilteredCollisionsWSelMult const& collisions,
3113+
FilteredMftTracks const& /*mftTracks*/,
3114+
soa::SmallGroups<aod::BestCollisionsFwd> const& reassociated2dMftTracks,
3115+
aod::FT0s const& ft0s)
3116+
{
3117+
mixCollisionsReassociatedMftTracks(collisions, CorrelationContainer::kCFStepReconstructed, reassociated2dMftTracks, ft0s, perColReassociated2dTracks, perColReassociated2dTracks, mixedEvent, false);
3118+
}
3119+
PROCESS_SWITCH(HfTaskFlow, processMixedMftFt0aChChReassociated2d, "DATA : Process mixed-event correlations for MFT-FT0-A h-h case", false);
3120+
3121+
void processMixedMftFt0aChChReassociated3d(FilteredCollisionsWSelMult const& collisions,
3122+
FilteredMftTracks const& /*mftTracks*/,
3123+
soa::SmallGroups<aod::BestCollisionsFwd3d> const& reassociated3dMftTracks,
3124+
aod::FT0s const& ft0s)
3125+
{
3126+
mixCollisionsReassociatedMftTracks(collisions, CorrelationContainer::kCFStepReconstructed, reassociated3dMftTracks, ft0s, perColReassociated3dTracks, perColReassociated3dTracks, mixedEvent, false);
3127+
}
3128+
PROCESS_SWITCH(HfTaskFlow, processMixedMftFt0aChChReassociated3d, "DATA : Process mixed-event correlations for MFT-FT0-A h-h case", false);
3129+
3130+
void processMixedMftFt0aChChNonAmbiguous(FilteredCollisionsWSelMult const& collisions,
3131+
FilteredMftTracks const& /*mftTracks*/,
3132+
soa::SmallGroups<aod::BestCollisionsFwd> const& reassociated2dMftTracks,
3133+
aod::FT0s const& ft0s)
3134+
{
3135+
mixCollisionsReassociatedMftTracks(collisions, CorrelationContainer::kCFStepReconstructed, reassociated2dMftTracks, ft0s, perColReassociated2dTracks, perColReassociated2dTracks, mixedEvent, true);
3136+
}
3137+
PROCESS_SWITCH(HfTaskFlow, processMixedMftFt0aChChNonAmbiguous, "DATA : Process mixed-event correlations for MFT-FT0-A h-h case", false);
3138+
29833139
// =====================================
29843140
// DATA : process mixed event correlations: TPC-FT0C ch part. - ch. part. case
29853141
// =====================================

0 commit comments

Comments
 (0)