29 unsigned int total = 0, seed = 0, grow = 0, term = 0, invalid = 0, shared = 0;
31 friend Str &
operator << (Str &
s,
const size_struct & sst)
33 s << sst.total <<
" " << sst.seed <<
" " << sst.grow <<
" " << sst.term <<
" " << sst.invalid <<
" " << sst.shared;
38 struct cluster_info_struct
41 float seed_snr = -9e99;
42 float seed_energy = -9e99;
44 friend Str &
operator << (Str &
s,
const cluster_info_struct & cis)
46 s << cis.size <<
" (" << cis.seed_snr <<
" " << cis.seed_energy <<
")";
64 unsigned int gain_counts[GainConversion::num_gain_values()] = {0};
66 size_struct global_counts, global_cluster_counts;
68 std::vector<int> cluster_max_cell(
clusters->number, -1);
69 std::vector<float> cluster_max_snr(
clusters->number, -9e99);
70 std::vector<float> cluster_max_energy(
clusters->number, -9e99);
72 std::vector<size_struct> cluster_counts(
clusters->number);
74 std::vector<int> shared_cells;
78 if (!cell_info->is_valid(
i))
83 const int gain = cell_info->gain[
i];
84 ++gain_counts[
gain - GainConversion::min_gain_value()];
86 const float energy = cell_info->energy[
i];
88 const float SNR = std::abs(
energy / cell_noise->get_noise(
i,
gain) );
92 const bool is_cluster =
tag.is_part_of_cluster();
94 global_cluster_counts.total += is_cluster;
99 global_cluster_counts.seed += is_cluster;
103 ++global_counts.grow;
104 global_cluster_counts.grow += is_cluster;
108 ++global_counts.term;
109 global_cluster_counts.term += is_cluster;
113 ++global_counts.invalid;
114 global_cluster_counts.invalid += is_cluster;
119 if (
tag.is_shared_between_clusters())
121 shared_cells.push_back(
i);
123 const int cluster =
tag.cluster_index();
124 const int other_cluster =
tag.is_shared_between_clusters() ?
tag.secondary_cluster_index() : cluster;
125 if (!
tag.is_shared_between_clusters() && (SNR > cluster_max_snr[cluster] || (SNR == cluster_max_snr[cluster] &&
i > cluster_max_cell[cluster])))
127 cluster_max_snr[cluster] = SNR;
128 cluster_max_cell[cluster] =
i;
129 cluster_max_energy[cluster] = std::abs(
energy);
131 ++cluster_counts[cluster].total;
132 cluster_counts[other_cluster].total += (cluster != other_cluster);
134 global_cluster_counts.shared +=
tag.is_shared_between_clusters();
135 cluster_counts[cluster].shared +=
tag.is_shared_between_clusters();
136 cluster_counts[other_cluster].shared +=
tag.is_shared_between_clusters();
140 ++cluster_counts[cluster].seed;
141 cluster_counts[other_cluster].seed += (cluster != other_cluster);
145 ++cluster_counts[cluster].grow;
146 cluster_counts[other_cluster].grow += (cluster != other_cluster);
150 ++cluster_counts[cluster].term;
151 cluster_counts[other_cluster].term += (cluster != other_cluster);
155 ++cluster_counts[cluster].invalid;
156 cluster_counts[other_cluster].invalid += (cluster != other_cluster);
161 std::map<int, cluster_info_struct> cluster_sizes;
165 if (cluster_max_cell[
i] >= 0)
167 cluster_sizes[cluster_max_cell[
i]] = cluster_info_struct{cluster_counts[
i], cluster_max_snr[
i], cluster_max_energy[
i]};
171 std::sort(shared_cells.begin(), shared_cells.end());
177 return StatusCode::FAILURE;
187 return StatusCode::FAILURE;
190 out_file <<
"Cell counts: " << global_counts <<
"\n\n";
192 out_file <<
"Cells in clusters count: "<< global_cluster_counts <<
"\n\n";
195 for (
const auto &
it : cluster_sizes)
204 return StatusCode::FAILURE;
209 return StatusCode::SUCCESS;