14 void setP4(
const std::vector<const Trackster*>& tracksters,
15 std::vector<TICLCandidate>& ticl_cands,
19 std::tuple<TracksterMomentumPluginBase::LorentzVector, float>
calcP4(
22 const std::vector<reco::CaloCluster>& calo_clusters)
const;
30 energy_from_regression_(ps.getParameter<
bool>(
"energyFromRegression")),
32 layer_clusters_token_(
36 std::vector<TICLCandidate>& ticl_cands,
41 auto vertex_coll = *vertex_h;
43 if (!vertex_coll.empty()) {
44 const auto&
vertex = vertex_coll[0];
53 auto size =
std::min(tracksters.size(), ticl_cands.size());
54 for (
size_t i = 0;
i <
size; ++
i) {
55 const auto* trackster = tracksters[
i];
56 auto ret =
calcP4(*trackster, best_vertex, *layer_clusters_h);
58 auto& ticl_cand = ticl_cands[
i];
59 ticl_cand.setP4(std::get<0>(
ret));
60 ticl_cand.setRawEnergy(std::get<1>(
ret));
67 const std::vector<reco::CaloCluster>& calo_clusters)
const {
68 std::array<double, 3> barycentre{{0., 0., 0.}};
74 auto fraction = n_vertices ? 1.f / n_vertices : 1.f;
77 barycentre[0] += calo_clusters[
idx].x() *
weight;
78 barycentre[1] += calo_clusters[
idx].y() *
weight;
79 barycentre[2] += calo_clusters[
idx].z() *
weight;
82 std::begin(barycentre),
std::end(barycentre), std::begin(barycentre), [&
energy](
double val) ->
double {
87 direction = direction.Unit();
95 return std::tuple(
p4, raw_energy);