5#include <FairRootManager.h>
18 std::string_view inputMult,
19 std::string_view inputCluster,
20 std::string_view output)
21 : FairTask(
"R3BNeulandNeutronsRValue")
32 auto* ioman = FairRootManager::Instance();
58 for (
size_t index = 0; index <
cluster_buffer_.size() && index < mult; index++)
66 std::sort(clusters.begin(),
69 { return one.GetRECluster(fEkinRefMeV) < other.GetRECluster(fEkinRefMeV); });
74 auto timewiseFirstCluster = std::min_element(clusters.begin(),
77 { return one.GetT() < other.GetT(); });
79 std::rotate(clusters.begin(), timewiseFirstCluster, timewiseFirstCluster + 1);
84 static constexpr auto threshold = 2.5;
85 clusters.erase(std::remove_if(clusters.begin(),
93 static constexpr auto threshold = 0.05;
94 clusters.erase(std::remove_if(clusters.begin(),
97 { return std::abs(cluster.GetEToF() - fEkinRefMeV) / fEkinRefMeV > threshold; }),
103 std::map<const R3BNeulandCluster*, bool> marked;
105 for (
const auto& cluster : clusters)
107 marked[&cluster] =
false;
110 for (
const auto& one_cluster : clusters)
112 for (
const auto& other_cluster : clusters)
114 if (&one_cluster != &other_cluster && one_cluster.GetT() < other_cluster.GetT() &&
117 marked[&other_cluster] =
true;
124 clusters.begin(), clusters.end(), [&](
const R3BNeulandCluster& cluster) { return marked.at(&cluster); }),
ClassImp(R3B::Neuland::Cal2HitPar)
static void FilterClustersByEnergyDeposit(std::vector< R3BNeulandCluster > &)
void Exec(Option_t *) override
void SortClustersByRValue(std::vector< R3BNeulandCluster > &) const
auto Init() -> InitStatus override
static void PrioritizeTimeWiseFirstCluster(std::vector< R3BNeulandCluster > &)
std::string fInputMultName
R3B::InputVectorConnector< R3BNeulandCluster > fClusters
static void FilterClustersByElasticScattering(std::vector< R3BNeulandCluster > &)
R3BNeulandNeutronsRValue(double EkinRefMeV, std::string_view inputMult="NeulandMultiplicity", std::string_view inputCluster="NeulandClusters", std::string_view output="NeulandNeutrons")
std::vector< R3BNeulandCluster > cluster_buffer_
const R3BNeulandMultiplicity * fMultiplicity
R3B::OutputVectorConnector< R3BNeulandNeutron > fNeutrons
void FilterClustersByKineticEnergy(std::vector< R3BNeulandCluster > &) const
bool IsElastic(const R3BNeulandCluster *, const R3BNeulandCluster *)