37 const auto& ecal_hits{
event.getCollection<
ldmx::EcalHit>(rec_hit_coll_name_,
39 if (ecal_hits.size() == 0) {
41 ldmx_log(fatal) <<
"No ECal hits found... exiting";
46 ldmx_log(info) <<
"Using CLUE clustering algorithm";
48 cf.cluster(ecal_hits, dc_, rhoc_, deltac_, deltao_, nbr_of_layers_,
50 ldmx_log(debug) <<
"CLUE algorithm finished clustering";
51 std::vector<IntermediateCluster> interm_cluster = cf.getClusters();
52 std::vector<IntermediateCluster> f_interm_cluster =
53 cf.getFirstLayerCentroids();
54 ldmx_log(debug) <<
"Got " << interm_cluster.size() <<
" clusters with "
55 << f_interm_cluster.size() <<
" first layer centroids";
57 auto n_loops = cf.getNLoops();
58 ldmx_log(debug) <<
"Number of clustering loops: " << n_loops;
61 ldmx_log(debug) <<
"Reclustererd initial number of clusters: "
62 << cf.getInitialClusterNbr()
63 <<
", final number of clusters: "
64 << interm_cluster.size();
67 std::vector<ldmx::EcalCluster> ecal_clusters;
68 ldmx_log(debug) <<
"Filling " << interm_cluster.size()
69 <<
" clusters into ecal_clusters";
70 for (
int cluster_indx = 0; cluster_indx < interm_cluster.size();
74 cluster.
setEnergy(interm_cluster[cluster_indx].centroid().E());
75 cluster.
setCentroidXYZ(interm_cluster[cluster_indx].centroid().x(),
76 interm_cluster[cluster_indx].centroid().y(),
77 interm_cluster[cluster_indx].centroid().z());
78 cluster.setFirstLayerCentroidXYZ(
79 f_interm_cluster[cluster_indx].centroid().x(),
80 f_interm_cluster[cluster_indx].centroid().y(),
81 f_interm_cluster[cluster_indx].centroid().z());
82 cluster.
setNHits(interm_cluster[cluster_indx].getHits().size());
83 cluster.
addHits(interm_cluster[cluster_indx].getHits());
84 cluster.addFirstLayerHits(f_interm_cluster[cluster_indx].getHits());
86 float cl_x(0), cl_y(0), cl_z(0), cl_xx(0), cl_yy(0), cl_zz(0);
90 for (
auto hit : interm_cluster[cluster_indx].getHits()) {
91 if (hit->getEnergy() < min_hit_energy_)
continue;
92 cl_w = log(hit->getEnergy()) - log(min_hit_energy_);
93 cl_x += cl_w * hit->getXPos();
94 cl_y += cl_w * hit->getYPos();
95 cl_z += cl_w * hit->getZPos();
96 cl_xx += cl_w * hit->getXPos() * hit->getXPos();
97 cl_yy += cl_w * hit->getYPos() * hit->getYPos();
98 cl_zz += cl_w * hit->getZPos() * hit->getZPos();
108 cl_xx = sqrt(cl_xx - cl_x * cl_x);
109 cl_yy = sqrt(cl_yy - cl_y * cl_y);
110 cl_zz = sqrt(cl_zz - cl_z * cl_z);
112 cluster.setRMSXYZ(cl_xx, cl_yy, cl_zz);
113 cluster.setLayer(interm_cluster[cluster_indx].getLayer());
114 ldmx_log(trace) <<
"Cluster " << cluster_indx
115 <<
" energy: " << cluster.getEnergy()
116 <<
", nHits: " << cluster.getNHits() <<
", centroid: ("
121 << cluster.
getRMSZ() <<
")" <<
", first layer centroid: ("
122 << cluster.getFirstLayerCentroidX() <<
", "
123 << cluster.getFirstLayerCentroidY() <<
", "
124 << cluster.getFirstLayerCentroidZ() <<
")";
126 ecal_clusters.push_back(cluster);
128 ldmx_log(debug) <<
"Filled " << ecal_clusters.size()
129 <<
" clusters into ecal_clusters";
130 event.add(cluster_coll_name_, ecal_clusters);
132 ldmx_log(info) <<
"Using simple clustering algorithm " << algo_name_;
137 if (hit.getEnergy() == 0) {
143 cf.cluster(seed_threshold_, cutoff_);
144 std::vector<IntermediateCluster> interm_cluster = cf.getClusters();
145 std::map<int, double> c_weights = cf.getWeights();
148 algo_result.
set(algo_name_, 3, c_weights.rbegin()->first);
153 std::map<int, double>::iterator it = c_weights.begin();
154 for (it = c_weights.begin(); it != c_weights.end(); it++) {
155 algo_result.
setWeight(it->first, it->second / 100);
158 std::vector<ldmx::EcalCluster> ecal_clusters;
159 for (
int cluster_indx = 0; cluster_indx < interm_cluster.size();
163 cluster.
setEnergy(interm_cluster[cluster_indx].centroid().E());
164 cluster.
setCentroidXYZ(interm_cluster[cluster_indx].centroid().x(),
165 interm_cluster[cluster_indx].centroid().y(),
166 interm_cluster[cluster_indx].centroid().z());
167 cluster.setLayer(interm_cluster[cluster_indx].getLayer());
168 std::cout <<
"Cluster layer: " << cluster.
getLayer() << std::endl;
169 cluster.
setNHits(interm_cluster[cluster_indx].getHits().size());
170 cluster.
addHits(interm_cluster[cluster_indx].getHits());
171 ecal_clusters.push_back(cluster);
174 event.add(cluster_coll_name_, ecal_clusters);
175 event.add(algo_coll_name_, algo_result);