1
/* This file is part of MAUS: http://micewww.pp.rl.ac.uk:8080/projects/maus
3
* MAUS is free software: you can redistribute it and/or modify
4
* it under the terms of the GNU General Public License as published by
5
* the Free Software Foundation, either version 3 of the License, or
6
* (at your option) any later version.
8
* MAUS is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
13
* You should have received a copy of the GNU General Public License
14
* along with MAUS. If not, see <http://www.gnu.org/licenses/>.
18
#include "gtest/gtest.h"
19
#include "src/common_cpp/Recon/Global/MCTruthTools.hh"
23
class MCTruthToolsTest : public ::testing::Test {
26
virtual ~MCTruthToolsTest() {}
27
virtual void SetUp() {
28
_mc_event = new MCEvent;
30
ThreeVector position(0.0, 0.0, 0.0);
32
TOFChannelId* tof_channel_id = new TOFChannelId;
33
tof_channel_id->SetStation(1);
34
tof_channel_id->SetPlane(0);
36
tof_hit.SetChannelId(tof_channel_id);
37
TOFHit tof1_1_hit(tof_hit);
38
position.setZ(1000.0);
39
tof1_1_hit.SetPosition(position);
40
tof_channel_id->SetPlane(1);
41
TOFHit tof1_2_hit(tof_hit);
42
position.setZ(1010.0);
43
tof1_2_hit.SetPosition(position);
44
tof_channel_id->SetStation(2);
45
TOFHit tof2_2_hit(tof_hit);
46
position.setZ(4000.0);
47
tof2_2_hit.SetPosition(position);
48
TOFHitArray* tof_hit_array = new TOFHitArray
49
{tof1_1_hit, tof1_2_hit, tof2_2_hit}; // NOLINT(readability/braces)
50
_mc_event->SetTOFHits(tof_hit_array);
52
SciFiChannelId* scifi_channel_id = new SciFiChannelId;
53
scifi_channel_id->SetTrackerNumber(1);
54
scifi_channel_id->SetStationNumber(1);
55
scifi_channel_id->SetPlaneNumber(1);
57
scifi_hit.SetChannelId(scifi_channel_id);
58
SciFiHit tracker1_1_1_hit(scifi_hit);
59
position.setZ(3200.0);
60
tracker1_1_1_hit.SetPosition(position);
61
scifi_channel_id->SetStationNumber(2);
62
scifi_channel_id->SetPlaneNumber(2);
63
SciFiHit tracker1_2_2_hit(scifi_hit);
64
position.setZ(3230.0);
65
tracker1_2_2_hit.SetPosition(position);
66
scifi_channel_id->SetStationNumber(5);
67
scifi_channel_id->SetPlaneNumber(0);
68
SciFiHit tracker1_5_0_hit(scifi_hit);
69
position.setZ(3300.0);
70
tracker1_5_0_hit.SetPosition(position);
71
SciFiHitArray* scifi_hit_array = new SciFiHitArray
72
{tracker1_1_1_hit, tracker1_2_2_hit, tracker1_5_0_hit}; // NOLINT(readability/braces)
73
_mc_event->SetSciFiHits(scifi_hit_array);
76
position.SetZ(3500.0);
77
kl_hit1.SetPosition(position);
79
position.SetZ(3502.0);
80
kl_hit2.SetPosition(position);
81
KLHitArray* kl_hit_array = new KLHitArray {kl_hit1, kl_hit2}; // NOLINT(readability/braces)
82
_mc_event->SetKLHits(kl_hit_array);
85
position.SetZ(3700.0);
86
emr_hit1.SetPosition(position);
88
position.SetZ(3720.0);
89
emr_hit2.SetPosition(position);
90
EMRHitArray* emr_hit_array = new EMRHitArray {emr_hit1, emr_hit2}; // NOLINT(readability/braces)
91
_mc_event->SetEMRHits(emr_hit_array);
93
virtual void TearDown() {
101
TEST_F(MCTruthToolsTest, GetMCDetectors) {
102
auto mc_detectors = MCTruthTools::GetMCDetectors(_mc_event);
103
size_t num_exist = 0;
104
for (auto detector_iter = mc_detectors.begin();
105
detector_iter != mc_detectors.end(); detector_iter++) {
106
if (detector_iter->second) {
111
EXPECT_EQ(num_exist, 11);
112
EXPECT_TRUE(mc_detectors.at(DataStructure::Global::kTOF1));
113
EXPECT_TRUE(mc_detectors.at(DataStructure::Global::kTOF1_1));
114
EXPECT_TRUE(mc_detectors.at(DataStructure::Global::kTOF1_2));
115
EXPECT_TRUE(mc_detectors.at(DataStructure::Global::kTracker1));
116
EXPECT_TRUE(mc_detectors.at(DataStructure::Global::kTracker1_1));
117
EXPECT_TRUE(mc_detectors.at(DataStructure::Global::kTracker1_2));
118
EXPECT_TRUE(mc_detectors.at(DataStructure::Global::kTracker1_5));
119
EXPECT_TRUE(mc_detectors.at(DataStructure::Global::kTOF2));
120
EXPECT_TRUE(mc_detectors.at(DataStructure::Global::kTOF2_2));
121
EXPECT_TRUE(mc_detectors.at(DataStructure::Global::kCalorimeter));
122
EXPECT_TRUE(mc_detectors.at(DataStructure::Global::kEMR));
125
TEST_F(MCTruthToolsTest, GetTOFHits) {
126
EXPECT_EQ(MCTruthTools::GetTOFHits(_mc_event,
127
DataStructure::Global::kTOF1_1)->size(), 1);
128
EXPECT_EQ(MCTruthTools::GetTOFHits(_mc_event,
129
DataStructure::Global::kTOF1_2)->size(), 1);
130
EXPECT_EQ(MCTruthTools::GetTOFHits(_mc_event,
131
DataStructure::Global::kTOF1)->size(), 2);
132
EXPECT_EQ(MCTruthTools::GetTOFHits(_mc_event,
133
DataStructure::Global::kTOF2_1)->size(), 0);
134
EXPECT_EQ(MCTruthTools::GetTOFHits(_mc_event,
135
DataStructure::Global::kTOF2_2)->size(), 1);
138
TEST_F(MCTruthToolsTest, GetTrackerHits) {
139
EXPECT_EQ(MCTruthTools::GetTrackerHits(_mc_event,
140
DataStructure::Global::kTracker0)->size(), 0);
141
EXPECT_EQ(MCTruthTools::GetTrackerHits(_mc_event,
142
DataStructure::Global::kTracker1_1)->size(), 1);
143
EXPECT_EQ(MCTruthTools::GetTrackerHits(_mc_event,
144
DataStructure::Global::kTracker1_2)->size(), 1);
145
EXPECT_EQ(MCTruthTools::GetTrackerHits(_mc_event,
146
DataStructure::Global::kTracker1_3)->size(), 0);
147
EXPECT_EQ(MCTruthTools::GetTrackerHits(_mc_event,
148
DataStructure::Global::kTracker1_5)->size(), 1);
149
EXPECT_EQ(MCTruthTools::GetTrackerHits(_mc_event,
150
DataStructure::Global::kTracker1)->size(), 3);
153
TEST_F(MCTruthToolsTest, GetTrackerPlaneHit) {
154
SciFiHit* hit1_1_1 = MCTruthTools::GetTrackerPlaneHit(_mc_event, 1, 1, 1);
155
SciFiHit* hit1_2_2 = MCTruthTools::GetTrackerPlaneHit(_mc_event, 1, 2, 2);
156
SciFiHit* hit0_4_1 = MCTruthTools::GetTrackerPlaneHit(_mc_event, 0, 4, 1);
158
EXPECT_EQ(hit1_1_1->GetChannelId()->GetTrackerNumber(), 1);
159
EXPECT_EQ(hit1_1_1->GetChannelId()->GetStationNumber(), 1);
160
EXPECT_EQ(hit1_1_1->GetChannelId()->GetPlaneNumber(), 1);
161
EXPECT_EQ(hit1_2_2->GetChannelId()->GetTrackerNumber(), 1);
162
EXPECT_EQ(hit1_2_2->GetChannelId()->GetStationNumber(), 2);
163
EXPECT_EQ(hit1_2_2->GetChannelId()->GetPlaneNumber(), 2);
164
EXPECT_FALSE(hit0_4_1);
167
TEST_F(MCTruthToolsTest, GetNearestZHit) {
168
TOFHitArray* tof_hits = _mc_event->GetTOFHits();
169
KLHitArray* kl_hits = _mc_event->GetKLHits();
170
EMRHitArray* emr_hits = _mc_event->GetEMRHits();
172
TLorentzVector position(0.0, 0.0, 1011.0, 0.0);
173
TOFHit tof_hit = MCTruthTools::GetNearestZHit(tof_hits, position);
174
EXPECT_FLOAT_EQ(tof_hit.GetPosition().z(), 1010.0);
176
position.SetZ(3500.8);
177
KLHit kl_hit = MCTruthTools::GetNearestZHit(kl_hits, position);
178
EXPECT_FLOAT_EQ(kl_hit.GetPosition().z(), 3500.0);
180
position.SetZ(3711.0);
181
EMRHit emr_hit = MCTruthTools::GetNearestZHit(emr_hits, position);
182
EXPECT_FLOAT_EQ(emr_hit.GetPosition().z(), 3720.0);