10 #include <tracking/trackFindingCDC/filters/track/BasicTrackVarSet.h>
12 #include <tracking/trackFindingCDC/eventdata/tracks/CDCTrack.h>
14 #include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
15 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectory3D.h>
16 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectory2D.h>
17 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectorySZ.h>
19 #include <tracking/trackFindingCDC/numerics/ToFinite.h>
21 #include <tracking/trackFindingCDC/utilities/Algorithms.h>
22 #include <tracking/trackFindingCDC/utilities/Functional.h>
26 #include <cdc/dataobjects/CDCHit.h>
29 using namespace TrackFindingCDC;
33 if (not track)
return false;
49 unsigned int size = track->size();
51 std::vector<unsigned int> cont_layer;
52 std::vector<unsigned int> super_layer;
55 drift_length_acc(recoHit.getWireHit().getRefDriftLength());
56 adc_acc(
static_cast<unsigned int>(recoHit.getWireHit().getHit()->getADCCount()));
57 tot_acc(
static_cast<unsigned int>(recoHit.getWireHit().getHit()->getTOT()));
58 cont_layer_acc(
static_cast<unsigned int>(recoHit.getWireHit().getHit()->getICLayer()));
59 super_layer_acc(
static_cast<unsigned int>(recoHit.getWireHit().getISuperLayer()));
60 cont_layer.push_back(
static_cast<unsigned int>(recoHit.getWireHit().getHit()->getICLayer()));
61 super_layer.push_back(
static_cast<unsigned int>(recoHit.getWireHit().getISuperLayer()));
65 unsigned int cont_layer_first = cont_layer.front();
66 unsigned int cont_layer_last = cont_layer.back();
67 unsigned int cont_layer_min = *std::min_element(cont_layer.begin(), cont_layer.end());
68 unsigned int cont_layer_max = *std::max_element(cont_layer.begin(), cont_layer.end());
69 unsigned int cont_layer_count = std::set<unsigned int>(cont_layer.begin(), cont_layer.end()).size();
70 double cont_layer_occupancy = (double)cont_layer_count / (
double)(cont_layer_max - cont_layer_min +
72 unsigned int super_layer_first = super_layer.front();
73 unsigned int super_layer_last = super_layer.back();
74 unsigned int super_layer_min = *std::min_element(super_layer.begin(), super_layer.end());
75 unsigned int super_layer_max = *std::max_element(super_layer.begin(), super_layer.end());
76 unsigned int super_layer_count = std::set<unsigned int>(super_layer.begin(), super_layer.end()).size();
77 double super_layer_occupancy = (double)super_layer_count / (
double)(super_layer_max - super_layer_min + 1);
79 double hits_per_layer = (double)size / (
double)cont_layer_count;
82 double s_range = track->back().getArcLength2D() - track->front().getArcLength2D();
83 double avg_hit_dist = s_range / (double)cont_layer_count;
86 std::vector<double> arc_lengths;
87 auto get_arc_length = [](
const CDCRecoHit3D & recoHit) {
return recoHit.getArcLength2D(); };
88 std::transform(begin(*track), end(*track), back_inserter(arc_lengths), get_arc_length);
90 erase_remove_if(arc_lengths,
IsNaN());
94 if (arc_lengths.size() > 1) {
95 std::vector<double> empty_s_gaps;
96 std::adjacent_difference(begin(arc_lengths), end(arc_lengths), back_inserter(empty_s_gaps));
100 auto empty_s_acc_ref = [&empty_s_acc](
double s) { empty_s_acc(s); };
102 std::for_each(next(begin(empty_s_gaps)), end(empty_s_gaps), empty_s_acc_ref);
105 unsigned int empty_s_size = bacc::count(empty_s_acc);
109 double drift_length_variance = -1;
110 double adc_variance = -1;
111 double tot_variance = -1;
112 double cont_layer_variance = -1;
113 double super_layer_variance = -1;
116 double bessel_corr = (double)size / (size - 1.0);
117 drift_length_variance = std::sqrt(bacc::variance(drift_length_acc) * bessel_corr);
118 adc_variance = std::sqrt(bacc::variance(adc_acc) * bessel_corr);
119 tot_variance = std::sqrt(bacc::variance(tot_acc) * bessel_corr);
120 cont_layer_variance = std::sqrt(bacc::variance(cont_layer_acc) * bessel_corr);
121 super_layer_variance = std::sqrt(bacc::variance(super_layer_acc) * bessel_corr);
123 double empty_s_variance = -1;
124 if (empty_s_size > 1) {
125 double empty_s_bessel_corr = (double)empty_s_size / (empty_s_size - 1.0);
126 empty_s_variance = std::sqrt(bacc::variance(empty_s_acc) * empty_s_bessel_corr);
135 var<
named(
"hits_per_layer")>() = hits_per_layer;
139 var<
named(
"s_range")>() = toFinite(s_range, 0);
140 var<
named(
"avg_hit_dist")>() = toFinite(avg_hit_dist, 0);
141 var<
named(
"has_matching_segment")>() = track->getHasMatchingSegment();
143 var<
named(
"cont_layer_mean")>() = toFinite(bacc::mean(cont_layer_acc), 0);
144 var<
named(
"cont_layer_variance")>() = toFinite(cont_layer_variance, 0);
145 var<
named(
"cont_layer_max")>() = toFinite(cont_layer_max, 0);
146 var<
named(
"cont_layer_min")>() = toFinite(cont_layer_min, 0);
147 var<
named(
"cont_layer_first")>() = toFinite(cont_layer_first, 0);
148 var<
named(
"cont_layer_last")>() = toFinite(cont_layer_last, 0);
149 var<
named(
"cont_layer_max_vs_last")>() = toFinite(cont_layer_max - cont_layer_last, 0);
150 var<
named(
"cont_layer_first_vs_min")>() = toFinite(cont_layer_first - cont_layer_min, 0);
151 var<
named(
"cont_layer_count")>() = toFinite(cont_layer_count, 0);
152 var<
named(
"cont_layer_occupancy")>() = toFinite(cont_layer_occupancy, 0);
154 var<
named(
"super_layer_mean")>() = toFinite(bacc::mean(super_layer_acc), 0);
155 var<
named(
"super_layer_variance")>() = toFinite(super_layer_variance, 0);
156 var<
named(
"super_layer_max")>() = toFinite(super_layer_max, 0);
157 var<
named(
"super_layer_min")>() = toFinite(super_layer_min, 0);
158 var<
named(
"super_layer_first")>() = toFinite(super_layer_first, 0);
159 var<
named(
"super_layer_last")>() = toFinite(super_layer_last, 0);
160 var<
named(
"super_layer_max_vs_last")>() = toFinite(super_layer_max - super_layer_last, 0);
161 var<
named(
"super_layer_first_vs_min")>() = toFinite(super_layer_first - super_layer_min, 0);
162 var<
named(
"super_layer_count")>() = toFinite(super_layer_count, 0);
163 var<
named(
"super_layer_occupancy")>() = toFinite(super_layer_occupancy, 0);
165 var<
named(
"drift_length_mean")>() = toFinite(bacc::mean(drift_length_acc), 0);
166 var<
named(
"drift_length_variance")>() = toFinite(drift_length_variance, 0);
167 var<
named(
"drift_length_max")>() = toFinite(bacc::max(drift_length_acc), 0);
168 var<
named(
"drift_length_min")>() = toFinite(bacc::min(drift_length_acc), 0);
169 var<
named(
"drift_length_sum")>() = toFinite(bacc::sum(drift_length_acc), 0);
171 var<
named(
"adc_mean")>() = toFinite(bacc::mean(adc_acc), 0);
172 var<
named(
"adc_variance")>() = toFinite(adc_variance, 0);
173 var<
named(
"adc_max")>() = toFinite(bacc::max(adc_acc), 0);
174 var<
named(
"adc_min")>() = toFinite(bacc::min(adc_acc), 0);
175 var<
named(
"adc_sum")>() = toFinite(bacc::sum(adc_acc), 0);
177 var<
named(
"tot_mean")>() = toFinite(bacc::mean(tot_acc), 0);
178 var<
named(
"tot_variance")>() = toFinite(tot_variance, 0);
179 var<
named(
"tot_max")>() = toFinite(bacc::max(tot_acc), 0);
180 var<
named(
"tot_min")>() = toFinite(bacc::min(tot_acc), 0);
181 var<
named(
"tot_sum")>() = toFinite(bacc::sum(tot_acc), 0);
183 var<
named(
"empty_s_mean")>() = toFinite(bacc::mean(empty_s_acc), 0);
184 var<
named(
"empty_s_sum")>() = toFinite(bacc::sum(empty_s_acc), 0);
185 var<
named(
"empty_s_variance")>() = toFinite(empty_s_variance, 0);
186 var<
named(
"empty_s_max")>() = toFinite(bacc::max(empty_s_acc), 0);
187 var<
named(
"empty_s_min")>() = toFinite(bacc::min(empty_s_acc), 0);