1 |
#include "cute/cute.h"
|
2 |
#include "cute/cute_suite.h"
|
3 |
|
4 |
#include "../interface/RecoObjects/Particle.h"
|
5 |
|
6 |
using namespace BAT;
|
7 |
|
8 |
struct TestParticle {
|
9 |
private:
|
10 |
ParticlePointer particle1, particle2, particle3, particleInBarrelRegion, particleInCrack, particleInEndcap;
|
11 |
ParticlePointer zParticle1, zParticle2;
|
12 |
FourVector combinedVector;
|
13 |
|
14 |
public:
|
15 |
TestParticle() :
|
16 |
particle1(new Particle(20., 10., 0., 0.)),
|
17 |
particle2(new Particle(20., -10., 0., 0.)),
|
18 |
particle3(new Particle(*particle1 + *particle2)),
|
19 |
particleInBarrelRegion(new Particle(30., 20., -20., 0.)),
|
20 |
particleInCrack(new Particle(25., 0., 10., -22.)),
|
21 |
particleInEndcap(new Particle(20., 5., 5., -20.)),
|
22 |
zParticle1(new Particle(100., 79., -13., -5.)),
|
23 |
zParticle2(new Particle(100., 99., 13., 5.)),
|
24 |
combinedVector(FourVector(particle1->getFourVector() + particle2->getFourVector())) {
|
25 |
particle1->setD0(180.);
|
26 |
|
27 |
combinedVector = FourVector(particle1->getFourVector() + particle2->getFourVector());
|
28 |
|
29 |
assert(fabs(particleInBarrelRegion->eta()) < 1.4442);
|
30 |
|
31 |
assert(fabs(particleInEndcap->eta()) > 1.5660);
|
32 |
|
33 |
assert(fabs(particleInCrack->eta()) > 1.4442);
|
34 |
assert(fabs(particleInCrack->eta()) < 1.5660);
|
35 |
|
36 |
zParticle1->setCharge(-1);
|
37 |
zParticle2->setCharge(1);
|
38 |
}
|
39 |
|
40 |
void testAsignOperator() {
|
41 |
particle3 = particle1;
|
42 |
ASSERT_EQUAL(particle1->mass(), particle3->mass());
|
43 |
ASSERT_EQUAL(particle1->getFourVector(), particle3->getFourVector());
|
44 |
}
|
45 |
|
46 |
void testPlusOperatorCorrectFourvector() {
|
47 |
ASSERT_EQUAL(particle3->getFourVector(), combinedVector);
|
48 |
}
|
49 |
|
50 |
void testPlusOperatorCorrectMass() {
|
51 |
ASSERT_EQUAL(combinedVector.M(), particle3->mass());
|
52 |
}
|
53 |
|
54 |
void testDeltaEta() {
|
55 |
float deltaEta = fabs(particle1->eta() - particle2->eta());
|
56 |
ASSERT_EQUAL(deltaEta, particle1->deltaEta(particle2));
|
57 |
}
|
58 |
|
59 |
void testDeltaPhi() {
|
60 |
float deltaPhi = particle1->getFourVector().DeltaPhi(particle2->getFourVector());
|
61 |
ASSERT_EQUAL(deltaPhi, particle1->deltaPhi(particle2));
|
62 |
}
|
63 |
|
64 |
void testDeltaR() {
|
65 |
float deltaR = particle1->getFourVector().DeltaR(particle2->getFourVector());
|
66 |
ASSERT_EQUAL(deltaR, particle1->deltaR(particle2));
|
67 |
}
|
68 |
|
69 |
void testIsWithinDR() {
|
70 |
ParticlePointer particle(new Particle(20., 9.99, 0., 0.));
|
71 |
ASSERT_EQUAL(true, particle1->isWithinDeltaR(0.3, particle));
|
72 |
}
|
73 |
|
74 |
void testIsNotWithinDR() {
|
75 |
ParticlePointer particle(new Particle(20., -9.99, 0., 0.));
|
76 |
ASSERT_EQUAL(false, particle1->isWithinDeltaR(0.3, particle));
|
77 |
}
|
78 |
|
79 |
void testStandardConstructor() {
|
80 |
Particle particle;
|
81 |
ASSERT_EQUAL(0., particle.energy());
|
82 |
ASSERT_EQUAL(0., particle.px());
|
83 |
ASSERT_EQUAL(0., particle.py());
|
84 |
ASSERT_EQUAL(0., particle.pz());
|
85 |
ASSERT_EQUAL(0., particle.mass());
|
86 |
ASSERT_EQUAL(0., particle.massFromEnergyAndMomentum());
|
87 |
}
|
88 |
|
89 |
void testFourvectorConstructor() {
|
90 |
Particle particle(5., 4., 0., 0.);
|
91 |
ASSERT_EQUAL(5., particle.energy());
|
92 |
ASSERT_EQUAL(4., particle.px());
|
93 |
ASSERT_EQUAL(0., particle.py());
|
94 |
ASSERT_EQUAL(0., particle.pz());
|
95 |
ASSERT_EQUAL(3., particle.massFromEnergyAndMomentum());
|
96 |
}
|
97 |
|
98 |
void testParticleConstructor() {
|
99 |
Particle particle(*particle1);
|
100 |
ASSERT_EQUAL(particle1->energy(), particle.energy());
|
101 |
ASSERT_EQUAL(particle1->px(), particle.px());
|
102 |
ASSERT_EQUAL(particle1->py(), particle.py());
|
103 |
ASSERT_EQUAL(particle1->pz(), particle.pz());
|
104 |
}
|
105 |
|
106 |
void testSetMass() {
|
107 |
particle1->setMass(200.);
|
108 |
ASSERT_EQUAL(200., particle1->mass());
|
109 |
}
|
110 |
|
111 |
void testDistanceFromInteractionPointAliasD0() {
|
112 |
ASSERT_EQUAL(180., particle1->d0());
|
113 |
}
|
114 |
|
115 |
void testGetMassFromEnergyAndMomentumIfEquals0() {
|
116 |
ASSERT(particle1->mass() != 0);
|
117 |
}
|
118 |
|
119 |
void testParticleIsInBarrelRegion() {
|
120 |
ASSERT(particleInBarrelRegion->isInBarrelRegion());
|
121 |
ASSERT(particleInBarrelRegion->isInEndCapRegion() == false);
|
122 |
ASSERT(particleInBarrelRegion->isInCrack() == false);
|
123 |
|
124 |
}
|
125 |
|
126 |
void testParticleInEndcap() {
|
127 |
ASSERT(particleInEndcap->isInEndCapRegion());
|
128 |
ASSERT(particleInEndcap->isInCrack() == false);
|
129 |
ASSERT(particleInEndcap->isInBarrelRegion() == false);
|
130 |
}
|
131 |
|
132 |
void testParticleInCrack() {
|
133 |
ASSERT(particleInCrack->isInCrack());
|
134 |
ASSERT(particleInCrack->isInEndCapRegion() == false);
|
135 |
ASSERT(particleInCrack->isInBarrelRegion() == false);
|
136 |
}
|
137 |
|
138 |
void testGetEtaRegionCrack() {
|
139 |
ASSERT_EQUAL(0, strcmp("crack", particleInCrack->getEtaRegion()));
|
140 |
}
|
141 |
|
142 |
void testGetEtaRegionBarrel() {
|
143 |
ASSERT_EQUAL(0, strcmp("barrel", particleInBarrelRegion->getEtaRegion()));
|
144 |
}
|
145 |
|
146 |
void testGetEtaRegionEndcap() {
|
147 |
ASSERT_EQUAL(0, strcmp("endcap", particleInEndcap->getEtaRegion()));
|
148 |
}
|
149 |
|
150 |
void testInvarianMassOfTwoParticles() {
|
151 |
TLorentzVector combinedParticle(zParticle1->getFourVector() + zParticle2->getFourVector());
|
152 |
ASSERT_EQUAL_DELTA(combinedParticle.M(), zParticle1->invariantMass(zParticle2), 0.0001);
|
153 |
}
|
154 |
|
155 |
void testInvarianMassOfOneParticles() {
|
156 |
ASSERT_EQUAL_DELTA(2 * zParticle1->mass(), zParticle1->invariantMass(zParticle1), 0.0001);
|
157 |
}
|
158 |
|
159 |
void testRelativePtParallelParticles() {
|
160 |
ASSERT_EQUAL_DELTA(0, particle1->relativePtTo(particle2), 0.001);
|
161 |
}
|
162 |
|
163 |
void testRelativePtOrthogonalParticles() {
|
164 |
TVector3 threeVector = particle1->getFourVector().Vect();
|
165 |
ASSERT_EQUAL_DELTA(threeVector.Mag(), particle1->relativePtTo(particleInCrack), 0.001);
|
166 |
}
|
167 |
|
168 |
void testGetClosest() {
|
169 |
ParticleCollection particles;
|
170 |
particles.push_back(particle1);
|
171 |
particles.push_back(particleInEndcap);
|
172 |
particles.push_back(particle3);
|
173 |
ASSERT_EQUAL(0, particle1->getClosest(particles));
|
174 |
}
|
175 |
|
176 |
void testGetClosest2() {
|
177 |
ParticleCollection particles;
|
178 |
particles.push_back(particleInEndcap);
|
179 |
particles.push_back(particle1);
|
180 |
particles.push_back(particle3);
|
181 |
ASSERT_EQUAL(1, particle1->getClosest(particles));
|
182 |
}
|
183 |
|
184 |
void testCharge() {
|
185 |
ASSERT_EQUAL(-1, zParticle1->charge());
|
186 |
}
|
187 |
|
188 |
void testChargeInCollection() {
|
189 |
ParticleCollection particles;
|
190 |
particle1->setCharge(-1);
|
191 |
particleInEndcap->setCharge(-1);
|
192 |
particles.push_back(particle1);
|
193 |
particles.push_back(particleInEndcap);
|
194 |
particles.push_back(zParticle1);
|
195 |
ASSERT_EQUAL(-1, particles.front()->charge());
|
196 |
}
|
197 |
|
198 |
void testAngle(){
|
199 |
ASSERT_EQUAL_DELTA(3.14159, particle1->angle(particle2), 0.00001);
|
200 |
}
|
201 |
};
|
202 |
|
203 |
extern cute::suite make_suite_TestParticle() {
|
204 |
cute::suite s;
|
205 |
|
206 |
s.push_back(CUTE_SMEMFUN(TestParticle, testPlusOperatorCorrectFourvector));
|
207 |
s.push_back(CUTE_SMEMFUN(TestParticle, testAsignOperator));
|
208 |
s.push_back(CUTE_SMEMFUN(TestParticle, testPlusOperatorCorrectMass));
|
209 |
s.push_back(CUTE_SMEMFUN(TestParticle, testStandardConstructor));
|
210 |
s.push_back(CUTE_SMEMFUN(TestParticle, testFourvectorConstructor));
|
211 |
s.push_back(CUTE_SMEMFUN(TestParticle, testSetMass));
|
212 |
s.push_back(CUTE_SMEMFUN(TestParticle, testDistanceFromInteractionPointAliasD0));
|
213 |
s.push_back(CUTE_SMEMFUN(TestParticle, testGetMassFromEnergyAndMomentumIfEquals0));
|
214 |
s.push_back(CUTE_SMEMFUN(TestParticle, testParticleIsInBarrelRegion));
|
215 |
s.push_back(CUTE_SMEMFUN(TestParticle, testParticleInEndcap));
|
216 |
s.push_back(CUTE_SMEMFUN(TestParticle, testParticleInCrack));
|
217 |
s.push_back(CUTE_SMEMFUN(TestParticle, testParticleConstructor));
|
218 |
|
219 |
s.push_back(CUTE_SMEMFUN(TestParticle, testGetEtaRegionCrack));
|
220 |
s.push_back(CUTE_SMEMFUN(TestParticle, testGetEtaRegionBarrel));
|
221 |
s.push_back(CUTE_SMEMFUN(TestParticle, testGetEtaRegionEndcap));
|
222 |
|
223 |
s.push_back(CUTE_SMEMFUN(TestParticle, testDeltaEta));
|
224 |
s.push_back(CUTE_SMEMFUN(TestParticle, testDeltaPhi));
|
225 |
s.push_back(CUTE_SMEMFUN(TestParticle, testDeltaR));
|
226 |
|
227 |
s.push_back(CUTE_SMEMFUN(TestParticle, testIsWithinDR));
|
228 |
s.push_back(CUTE_SMEMFUN(TestParticle, testIsNotWithinDR));
|
229 |
|
230 |
s.push_back(CUTE_SMEMFUN(TestParticle, testInvarianMassOfTwoParticles));
|
231 |
s.push_back(CUTE_SMEMFUN(TestParticle, testInvarianMassOfOneParticles));
|
232 |
|
233 |
s.push_back(CUTE_SMEMFUN(TestParticle, testRelativePtParallelParticles));
|
234 |
s.push_back(CUTE_SMEMFUN(TestParticle, testRelativePtOrthogonalParticles));
|
235 |
s.push_back(CUTE_SMEMFUN(TestParticle, testGetClosest));
|
236 |
s.push_back(CUTE_SMEMFUN(TestParticle, testGetClosest2));
|
237 |
s.push_back(CUTE_SMEMFUN(TestParticle, testCharge));
|
238 |
s.push_back(CUTE_SMEMFUN(TestParticle, testChargeInCollection));
|
239 |
s.push_back(CUTE_SMEMFUN(TestParticle, testAngle));
|
240 |
|
241 |
return s;
|
242 |
}
|