7 : dr_(conf.getParameter<double>(
"dR_multicluster")),
8 dr_byLayer_coefficientA_(conf.existsAs<
std::vector<double>>(
"dR_multicluster_byLayer_coefficientA")
9 ? conf.getParameter<
std::vector<double>>(
"dR_multicluster_byLayer_coefficientA")
10 :
std::vector<double>()),
11 dr_byLayer_coefficientB_(conf.existsAs<
std::vector<double>>(
"dR_multicluster_byLayer_coefficientB")
12 ? conf.getParameter<
std::vector<double>>(
"dR_multicluster_byLayer_coefficientB")
13 :
std::vector<double>()),
14 ptC3dThreshold_(conf.getParameter<double>(
"minPt_multicluster")),
15 cluster_association_input_(conf.getParameter<
string>(
"cluster_association")),
27 <<
"Multicluster dR: " <<
dr_ <<
"\nMulticluster minimum transverse-momentum: " <<
ptC3dThreshold_;
29 id_ = std::unique_ptr<HGCalTriggerClusterIdentificationBase>{
40 const std::vector<std::pair<GlobalPoint, double>>&
seeds)
const {
41 std::map<int, l1t::HGCalMulticluster> mapSeedMulticluster;
42 std::vector<l1t::HGCalMulticluster> multiclustersTmp;
44 for (
const auto& clu : clustersPtrs) {
47 double radiusCoefficientA =
49 double radiusCoefficientB =
52 double minDist = radiusCoefficientA + radiusCoefficientB * (
kMidRadius_ -
std::abs(clu->eta()));
54 std::vector<pair<int, double>> targetSeedsEnergy;
60 if (z_side * seedPosition.
z() < 0)
66 targetSeedsEnergy.emplace_back(
iseed, seedEnergy);
70 if (targetSeedsEnergy.empty()) {
71 targetSeedsEnergy.emplace_back(
iseed, seedEnergy);
73 targetSeedsEnergy.at(0).first =
iseed;
74 targetSeedsEnergy.at(0).second = seedEnergy;
80 if (targetSeedsEnergy.empty())
83 double totalTargetSeedEnergy = 0;
84 for (
const auto&
energy : targetSeedsEnergy) {
85 totalTargetSeedEnergy +=
energy.second;
88 for (
const auto&
energy : targetSeedsEnergy) {
89 double seedWeight = 1;
91 seedWeight =
energy.second / totalTargetSeedEnergy;
92 if (mapSeedMulticluster[
energy.first].size() == 0) {
95 mapSeedMulticluster[
energy.first].addConstituent(clu,
true, seedWeight);
100 for (
const auto& mclu : mapSeedMulticluster)
101 multiclustersTmp.emplace_back(mclu.second);
103 return multiclustersTmp;
107 const std::vector<std::pair<GlobalPoint, double>>& seedPositionsEnergy,
111 std::vector<l1t::HGCalMulticluster> multiclustersTmp =
clusterSeedMulticluster(clustersPtrs, seedPositionsEnergy);
119 for (
auto& multicluster : multiclusters_in) {
122 double sumPt = multicluster.sumPt();
125 multicluster.setP4(multiclusterP4);
131 multicluster.setHwQual(
id_->decision(multicluster));
133 multicluster.saveHOverE();
135 multiclusters_out.
push_back(0, multicluster);