From b590e99d9abac63c94489f224c32993702ef3e53 Mon Sep 17 00:00:00 2001 From: Sasha Bylinkin <37345380+abylinkin@users.noreply.github.com> Date: Sun, 17 Mar 2024 16:38:04 +0100 Subject: [PATCH] Add files via upload --- PWGUD/Core/SGSelector.h | 183 +++++++++++++++++++++++++++------------- 1 file changed, 124 insertions(+), 59 deletions(-) diff --git a/PWGUD/Core/SGSelector.h b/PWGUD/Core/SGSelector.h index db422612f11..d9e30785c2f 100644 --- a/PWGUD/Core/SGSelector.h +++ b/PWGUD/Core/SGSelector.h @@ -20,73 +20,138 @@ #include "PWGUD/Core/UDHelpers.h" #include "PWGUD/Core/SGCutParHolder.h" -template +template struct SelectionResult { int value; // The original integer return value - BC* bc; // Pointer to the BC object + BC* bc; // Pointer to the BC object }; -class SGSelector -{ - public: - SGSelector() : fPDG(TDatabasePDG::Instance()) {} +class SGSelector { +public: + SGSelector() : fPDG(TDatabasePDG::Instance()) {} - template - int Print(SGCutParHolder diffCuts, CC& collision, BCs& bcRange, TCs& tracks, FWs& fwdtracks) - { - LOGF(info, "Size of array %i", collision.size()); - return 1; - } - - template - SelectionResult IsSelected(SGCutParHolder diffCuts, CC& collision, BCs& bcRange, BC& oldbc) - { - // LOGF(info, "Collision %f", collision.collisionTime()); - // LOGF(info, "Number of close BCs: %i", bcRange.size()); - SelectionResult result; - result.bc = &oldbc; - if (collision.numContrib() < diffCuts.minNTracks() || collision.numContrib() > diffCuts.maxNTracks()) { - result.value = 4; - return result; - } - auto newbc = oldbc; - bool gA = true, gC = true; - for (auto const& bc : bcRange) { - if (!udhelpers::cleanFITA(bc, diffCuts.maxFITtime(), diffCuts.FITAmpLimits())) { - if (gA) - newbc = bc; - if (!gA && std::abs(static_cast(bc.globalBC() - oldbc.globalBC())) < std::abs(static_cast(newbc.globalBC() - oldbc.globalBC()))) - newbc = bc; - gA = false; - } - if (!udhelpers::cleanFITC(bc, diffCuts.maxFITtime(), diffCuts.FITAmpLimits())) { - if (gC) - newbc = bc; - if (!gC && std::abs(static_cast(bc.globalBC() - oldbc.globalBC())) < std::abs(static_cast(newbc.globalBC() - oldbc.globalBC()))) - newbc = bc; - gC = false; - } + template + int Print(SGCutParHolder diffCuts, CC& collision, BCs& bcRange, TCs& tracks, FWs& fwdtracks) { + LOGF(info, "Size of array %i", collision.size()); + return 1; } - result.bc = &newbc; - if (!gA && !gC) { - result.value = 3; - return result; - } - // LOGF(info, "Old BC: %i, New BC: %i",oldbc.globalBC(), newbc.globalBC()); - result.value = gA && gC ? 2 : (gA ? 0 : 1); - return result; - } + + template + SelectionResult IsSelected(SGCutParHolder diffCuts, CC& collision, BCs& bcRange, BC& oldbc) { +// LOGF(info, "Collision %f", collision.collisionTime()); +// LOGF(info, "Number of close BCs: %i", bcRange.size()); + SelectionResult result; + result.bc = &oldbc; + if (collision.numContrib() < diffCuts.minNTracks() || collision.numContrib() > diffCuts.maxNTracks()) { + result.value= 4; + return result; + } + auto newbc = oldbc; + auto newznabc = oldbc; + auto newzncbc = oldbc; + bool gA = true, gC = true; + bool gzA = true, gzC = true; + for (auto const& bc : bcRange) { + if (!udhelpers::cleanFITA(bc, diffCuts.maxFITtime(), diffCuts.FITAmpLimits())) { + if (gA) newbc = bc; + if (!gA && std::abs(static_cast(bc.globalBC() - oldbc.globalBC())) < std::abs(static_cast(newbc.globalBC()-oldbc.globalBC()))) newbc = bc; + gA = false; + } + if (!udhelpers::cleanFITC(bc, diffCuts.maxFITtime(), diffCuts.FITAmpLimits())) { + if (gC) newbc = bc; + if (!gC && std::abs(static_cast(bc.globalBC() - oldbc.globalBC())) < std::abs(static_cast(newbc.globalBC()-oldbc.globalBC()))) newbc = bc; + gC = false; + } + } + result.bc = &newbc; + if (!gA && !gC){ + result.value = 3; + return result; + } + for (auto const& bc : bcRange) { + if (bc.has_zdc()) { + auto zdc = bc.zdc(); + if (std::abs(static_cast(zdc.timeZNA())) < 2 && zdc.energyCommonZNA() > 0){ + if (gzA) { + newznabc = bc; + } + if (!gzA && std::abs(static_cast(bc.globalBC() - oldbc.globalBC())) < std::abs(static_cast(newznabc.globalBC()-oldbc.globalBC()))){ + newznabc = bc; + } + gzA = false; + } + if (std::abs(static_cast(zdc.timeZNC())) < 2 && zdc.energyCommonZNC() > 0){ + if (gzC){ + newzncbc = bc; + } + if (!gzC && std::abs(static_cast(bc.globalBC() - oldbc.globalBC())) < std::abs(static_cast(newzncbc.globalBC()-oldbc.globalBC()))){ + newzncbc = bc; + } + gzC = false; + } + } + } + if (gA && gC){ + if (!gzA && !gzC){ + if (std::abs(static_cast(newznabc.globalBC() - oldbc.globalBC())) < std::abs(static_cast(newzncbc.globalBC()-oldbc.globalBC()))){ + newzncbc = newznabc; + newbc = newznabc; + } else { + newznabc = newzncbc; + newbc = newzncbc; + } + } else if (!gzA){ + newzncbc = newznabc; + newbc = newznabc; + } else if (!gzC){ + newznabc = newzncbc; + newbc = newzncbc; + } + } else if (!gA){ + if (!gzA){ + if (newbc.globalBC() == newznabc.globalBC()) { + newzncbc = newznabc; + } else if (std::abs(static_cast(newznabc.globalBC() - oldbc.globalBC())) < std::abs(static_cast(newbc.globalBC()-oldbc.globalBC()))){ + newzncbc = newznabc; + newbc = newznabc; + } else { + newzncbc = newbc; + newznabc = newbc; + } + } else { + newzncbc = newbc; + newznabc = newbc; + } + } else if (!gC){ + if (!gzC){ + if(newbc.globalBC() == newzncbc.globalBC()){ + newznabc = newzncbc; + } else if (std::abs(static_cast(newzncbc.globalBC() - oldbc.globalBC())) < std::abs(static_cast(newbc.globalBC()-oldbc.globalBC()))){ + newznabc = newzncbc; + newbc = newzncbc; + } else { + newzncbc = newbc; + newznabc = newbc; + } + + } else { + newzncbc = newbc; + newznabc = newbc; + } + } + //LOGF(info, "Old BC: %i, New BC: %i",oldbc.globalBC(), newbc.globalBC()); + result.value = gA && gC ? 2 : (gA ? 0 : 1); + return result; +} template - int FwdTrkSelector(TFwdTrack const& fwdtrack) - { - if (fwdtrack.trackType() == 0 || fwdtrack.trackType() == 3) - return 1; - else - return 0; - } + int FwdTrkSelector(TFwdTrack const& fwdtrack) { + if (fwdtrack.trackType() == 0 || fwdtrack.trackType() == 3) return 1; + else return 0; + } - private: - TDatabasePDG* fPDG; +private: + TDatabasePDG* fPDG; }; #endif // PWGUD_CORE_SGSELECTOR_H_ +