11 std::map<int, l1thgcfirmware::HGCalMulticluster> mapSeedMulticluster;
12 std::vector<l1thgcfirmware::HGCalMulticluster> multiclustersOut;
15 int z_side = clu.zside();
17 double radiusCoefficientA =
configuration.dr_byLayer_coefficientA().empty()
20 double radiusCoefficientB =
23 double minDistSqrd = radiusCoefficientA + radiusCoefficientB * (
configuration.midRadius() -
std::abs(clu.eta()));
24 minDistSqrd *= minDistSqrd;
26 std::vector<std::pair<int, double>> targetSeedsEnergy;
28 unsigned int iseed = 0;
30 if (z_side *
seed.z() < 0) {
35 double seedEnergy =
seed.energy();
37 double d = (clu.x() -
seed.x()) * (clu.x() -
seed.x()) + (clu.y() -
seed.y()) * (clu.y() -
seed.y());
39 if (
d < minDistSqrd) {
43 if (targetSeedsEnergy.empty()) {
44 targetSeedsEnergy.emplace_back(
iseed, seedEnergy);
46 targetSeedsEnergy.at(0).first =
iseed;
47 targetSeedsEnergy.at(0).second = seedEnergy;
53 if (targetSeedsEnergy.empty()) {
54 rejected_clusters.emplace_back(clu);
63 for (
const auto&
energy : targetSeedsEnergy) {
64 double seedWeight = 1;
65 if (mapSeedMulticluster[
energy.first].size() == 0) {
68 mapSeedMulticluster[
energy.first].addConstituent(clu,
true, seedWeight);
73 multiclustersOut.reserve(mapSeedMulticluster.size());
74 for (
const auto& mclu : mapSeedMulticluster)
75 multiclustersOut.emplace_back(mclu.second);
77 return multiclustersOut;
Abs< T >::type abs(const T &t)