~christopher-hunt08/maus/maus_integrated_kalman

« back to all changes in this revision

Viewing changes to tests/cpp_unit/Recon/Global/MCTruthToolsTest.cc

merging in changes in merge branch

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* This file is part of MAUS: http://micewww.pp.rl.ac.uk:8080/projects/maus
 
2
 *
 
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.
 
7
 *
 
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.
 
12
 *
 
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/>.
 
15
 *
 
16
 */
 
17
 
 
18
#include "gtest/gtest.h"
 
19
#include "src/common_cpp/Recon/Global/MCTruthTools.hh"
 
20
 
 
21
namespace MAUS {
 
22
 
 
23
class MCTruthToolsTest : public ::testing::Test {
 
24
 protected:
 
25
  MCTruthToolsTest()  {}
 
26
  virtual ~MCTruthToolsTest() {}
 
27
  virtual void SetUp()    {
 
28
    _mc_event = new MCEvent;
 
29
 
 
30
    ThreeVector position(0.0, 0.0, 0.0);
 
31
 
 
32
    TOFChannelId* tof_channel_id = new TOFChannelId;
 
33
    tof_channel_id->SetStation(1);
 
34
    tof_channel_id->SetPlane(0);
 
35
    TOFHit tof_hit;
 
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);
 
51
 
 
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);
 
56
    SciFiHit scifi_hit;
 
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);
 
74
 
 
75
    KLHit kl_hit1;
 
76
    position.SetZ(3500.0);
 
77
    kl_hit1.SetPosition(position);
 
78
    KLHit kl_hit2;
 
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);
 
83
 
 
84
    EMRHit emr_hit1;
 
85
    position.SetZ(3700.0);
 
86
    emr_hit1.SetPosition(position);
 
87
    EMRHit emr_hit2;
 
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);
 
92
  }
 
93
  virtual void TearDown() {
 
94
    delete _mc_event;
 
95
  }
 
96
 
 
97
 public:
 
98
  MCEvent* _mc_event;
 
99
};
 
100
 
 
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) {
 
107
      num_exist++;
 
108
    }
 
109
  }
 
110
 
 
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));
 
123
}
 
124
 
 
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);
 
136
}
 
137
 
 
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);
 
151
}
 
152
 
 
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);
 
157
 
 
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);
 
165
}
 
166
 
 
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();
 
171
 
 
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);
 
175
 
 
176
  position.SetZ(3500.8);
 
177
  KLHit kl_hit = MCTruthTools::GetNearestZHit(kl_hits, position);
 
178
  EXPECT_FLOAT_EQ(kl_hit.GetPosition().z(), 3500.0);
 
179
 
 
180
  position.SetZ(3711.0);
 
181
  EMRHit emr_hit = MCTruthTools::GetNearestZHit(emr_hits, position);
 
182
  EXPECT_FLOAT_EQ(emr_hit.GetPosition().z(), 3720.0);
 
183
}
 
184
 
 
185
} // ~namespace MAUS