10 #include <gtest/gtest.h>
11 #include <framework/utilities/TestHelpers.h>
12 #include <tracking/trackFindingCDC/testFixtures/TrackFindingCDCTestWithTopology.h>
14 #include <tracking/trackFindingCDC/filters/track/BasicTrackVarSet.h>
15 #include <tracking/trackFindingCDC/eventdata/tracks/CDCTrack.h>
17 #include <cdc/dataobjects/CDCHit.h>
18 #include <cdc/dataobjects/WireID.h>
19 #include <tracking/trackFindingCDC/eventdata/hits/CDCRLWireHit.h>
20 #include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
21 #include <tracking/trackFindingCDC/topology/CDCWireTopology.h>
22 #include <tracking/trackFindingCDC/geometry/Vector3D.h>
27 using namespace TrackFindingCDC;
29 TEST(BasicTrackVarSetCalculation, test_empty_track)
35 const CDCTrack emptyTrack;
37 BasicTrackVarSet trackVarSet;
40 bool returnvalue = trackVarSet.extract(&emptyTrack);
41 EXPECT_EQ(
false, returnvalue);
45 EXPECT_EQ(0, *trackVarSet.find(
"size"));
46 EXPECT_EQ(0, *trackVarSet.find(
"pt"));
48 EXPECT_EQ(0, *trackVarSet.find(
"drift_length_mean"));
49 EXPECT_EQ(0, *trackVarSet.find(
"drift_length_sum"));
50 EXPECT_EQ(0, *trackVarSet.find(
"drift_length_min"));
51 EXPECT_EQ(0, *trackVarSet.find(
"drift_length_max"));
52 EXPECT_EQ(0, *trackVarSet.find(
"drift_length_variance"));
54 EXPECT_EQ(0, *trackVarSet.find(
"adc_mean"));
55 EXPECT_EQ(0, *trackVarSet.find(
"adc_sum"));
56 EXPECT_EQ(0, *trackVarSet.find(
"adc_min"));
57 EXPECT_EQ(0, *trackVarSet.find(
"adc_max"));
58 EXPECT_EQ(0, *trackVarSet.find(
"adc_variance"));
60 EXPECT_EQ(0, *trackVarSet.find(
"empty_s_mean"));
61 EXPECT_EQ(0, *trackVarSet.find(
"empty_s_sum"));
62 EXPECT_EQ(0, *trackVarSet.find(
"empty_s_min"));
63 EXPECT_EQ(0, *trackVarSet.find(
"empty_s_max"));
64 EXPECT_EQ(0, *trackVarSet.find(
"empty_s_variance"));
65 EXPECT_EQ(0, *trackVarSet.find(
"s_range"));
68 TEST_F(TrackFindingCDCTestWithTopology, basicTrackVarSet_test_one_hit_track)
73 const WireID& aWireID = wireTopology.getWire(0, 0, 0).getWireID();
74 double driftLength = 2.0;
75 unsigned short adcCount = 512.0;
76 double arcLength2D = 0.3;
77 const CDCHit aHit(128, adcCount, aWireID);
79 const CDCRLWireHit aRLWireHit(&aWireHit, ERightLeft::c_Unknown);
80 double some_arbitrary_z_coord = 0.0;
81 const Vector3D aRecoPos(aRLWireHit.getRefPos2D(), some_arbitrary_z_coord);
82 const CDCRecoHit3D aCDCHit(aRLWireHit, aRecoPos, arcLength2D);
83 const std::vector<CDCRecoHit3D> aHitVector{aCDCHit};
84 const CDCTrack track(aHitVector);
87 BasicTrackVarSet trackVarSet;
89 trackVarSet.extract(&track);
91 EXPECT_EQ(1, *trackVarSet.find(
"size"));
93 EXPECT_EQ(driftLength, *trackVarSet.find(
"drift_length_mean"));
94 EXPECT_EQ(driftLength, *trackVarSet.find(
"drift_length_sum"));
95 EXPECT_EQ(driftLength, *trackVarSet.find(
"drift_length_min"));
96 EXPECT_EQ(driftLength, *trackVarSet.find(
"drift_length_max"));
98 EXPECT_EQ(-1, *trackVarSet.find(
"drift_length_variance"));
100 EXPECT_EQ(adcCount, *trackVarSet.find(
"adc_mean"));
101 EXPECT_EQ(adcCount, *trackVarSet.find(
"adc_sum"));
102 EXPECT_EQ(adcCount, *trackVarSet.find(
"adc_min"));
103 EXPECT_EQ(adcCount, *trackVarSet.find(
"adc_max"));
105 EXPECT_EQ(-1, *trackVarSet.find(
"adc_variance"));
108 EXPECT_EQ(0, *trackVarSet.find(
"empty_s_mean"));
109 EXPECT_EQ(0, *trackVarSet.find(
"empty_s_sum"));
110 EXPECT_EQ(0, *trackVarSet.find(
"empty_s_min"));
111 EXPECT_EQ(0, *trackVarSet.find(
"empty_s_max"));
112 EXPECT_EQ(0, *trackVarSet.find(
"s_range"));
114 EXPECT_EQ(-1, *trackVarSet.find(
"empty_s_variance"));
117 TEST_F(TrackFindingCDCTestWithTopology, basicTrackVarSet_test_two_hit_track)
123 const WireID& aWireID = wireTopology.getWire(0, 0, 0).getWireID();
124 const WireID& bWireID = wireTopology.getWire(0, 0, 1).getWireID();
125 std::vector<WireID> wireIDs = {aWireID, bWireID};
127 std::vector<double> drift_lengths = {2.0, 3.0};
130 std::vector<unsigned short> adc_counts = {30, 500};
131 std::vector<double> arc_length_2Ds = {2.0, -3.0};
133 std::vector<CDCHit> cdcHits;
134 std::vector<CDCWireHit> cdcWireHits;
135 std::vector<CDCRecoHit3D> cdcRecoHits;
137 for (
size_t i = 0; i < drift_lengths.size(); i++) {
138 cdcHits.emplace_back(128, adc_counts.at(i), wireIDs.at(i));
139 cdcWireHits.emplace_back(&cdcHits.at(i), drift_lengths.at(i));
140 CDCRLWireHit aRLWireHit(&cdcWireHits.at(i), ERightLeft::c_Unknown);
141 Vector3D aRecoPos(aRLWireHit.getRefPos2D(), 0.0);
142 cdcRecoHits.emplace_back(aRLWireHit, aRecoPos, arc_length_2Ds.at(i));
145 const CDCTrack track(cdcRecoHits);
148 BasicTrackVarSet trackVarSet;
149 trackVarSet.extract(&track);
151 EXPECT_EQ(2, *trackVarSet.find(
"size"));
153 EXPECT_EQ(2.5, *trackVarSet.find(
"drift_length_mean"));
154 EXPECT_EQ(5.0, *trackVarSet.find(
"drift_length_sum"));
155 EXPECT_EQ(2.0, *trackVarSet.find(
"drift_length_min"));
156 EXPECT_EQ(3.0, *trackVarSet.find(
"drift_length_max"));
158 EXPECT_NEAR(0.7071, *trackVarSet.find(
"drift_length_variance"), 1e-4);
160 EXPECT_EQ(265, *trackVarSet.find(
"adc_mean"));
161 EXPECT_EQ(530, *trackVarSet.find(
"adc_sum"));
162 EXPECT_EQ(30, *trackVarSet.find(
"adc_min"));
163 EXPECT_EQ(500, *trackVarSet.find(
"adc_max"));
164 EXPECT_NEAR(332.34, *trackVarSet.find(
"adc_variance"), 1e-2);
167 double only_empty_s = -5.0;
168 EXPECT_EQ(only_empty_s, *trackVarSet.find(
"empty_s_mean"));
169 EXPECT_EQ(only_empty_s, *trackVarSet.find(
"empty_s_sum"));
170 EXPECT_EQ(only_empty_s, *trackVarSet.find(
"empty_s_min"));
171 EXPECT_EQ(only_empty_s, *trackVarSet.find(
"empty_s_max"));
172 EXPECT_EQ(only_empty_s, *trackVarSet.find(
"s_range"));
174 EXPECT_EQ(-1, *trackVarSet.find(
"empty_s_variance"));
177 TEST_F(TrackFindingCDCTestWithTopology, basicTrackVarSet_test_empty_s_for_three_hit_track)
182 const WireID& aWireID = wireTopology.getWire(0, 0, 0).getWireID();
183 const WireID& bWireID = wireTopology.getWire(0, 0, 1).getWireID();
184 const WireID& cWireID = wireTopology.getWire(0, 0, 2).getWireID();
185 std::vector<WireID> wireIDs = {aWireID, bWireID, cWireID};
188 std::vector<double> arc_length_2Ds = { -2.0, 0.0, 3.0};
190 std::vector<CDCHit> cdcHits;
191 cdcHits.reserve(wireIDs.size());
192 std::vector<CDCWireHit> cdcWireHits;
193 cdcWireHits.reserve(wireIDs.size());
194 std::vector<CDCRecoHit3D> cdcRecoHits;
195 cdcRecoHits.reserve(wireIDs.size());
197 for (
const WireID& wireID : wireIDs) {
198 cdcHits.emplace_back(128, 0, wireID);
200 for (
const CDCHit& cdcHit : cdcHits) {
201 cdcWireHits.emplace_back(&cdcHit, 0);
203 for (std::size_t i = 0; i < cdcWireHits.size(); i++) {
204 const CDCRLWireHit aRLWireHit(&cdcWireHits.at(i), ERightLeft::c_Unknown);
205 const Vector3D aRecoPos(aRLWireHit.getRefPos2D(), 0.0);
206 cdcRecoHits.emplace_back(aRLWireHit, aRecoPos, arc_length_2Ds.at(i));
209 const CDCTrack track(cdcRecoHits);
212 BasicTrackVarSet trackVarSet;
213 trackVarSet.extract(&track);
215 EXPECT_EQ(3, *trackVarSet.find(
"size"));
217 EXPECT_EQ(2.5, *trackVarSet.find(
"empty_s_mean"));
218 EXPECT_EQ(5.0, *trackVarSet.find(
"empty_s_sum"));
219 EXPECT_EQ(2.0, *trackVarSet.find(
"empty_s_min"));
220 EXPECT_EQ(3.0, *trackVarSet.find(
"empty_s_max"));
221 EXPECT_NEAR(0.7071, *trackVarSet.find(
"empty_s_variance"), 1e-4);