1#include <gtest/gtest.h>
13 class BeamPhotonTest :
public ::testing::Test {
15 void setParticle(
Beam& beam,
const std::string& name) {
19 void setEnergy(
Beam& beam,
double value) {
23 void setGamma(
Beam& beam,
double value) {
27 void setPC(
Beam& beam,
double value) {
31 void setMass(
Beam& beam,
double value) {
35 void setCharge(
Beam& beam,
double value) {
39 void setSources(
Beam& beam,
const std::string& value) {
43 void setNALLOC(
Beam& beam,
double value) {
47 void makeValidPhotonBeam(
Beam& beam) {
48 setParticle(beam,
"PHOTON");
54 TEST_F(BeamPhotonTest, PhotonParticlePropertiesAreRegistered) {
61 TEST_F(BeamPhotonTest, PhotonBeamAcceptsEnergyOnlyDefinition) {
63 makeValidPhotonBeam(beam);
65 EXPECT_NO_THROW(beam.
execute());
67 EXPECT_DOUBLE_EQ(beam.
getMass(), 0.0);
71 TEST_F(BeamPhotonTest, PhotonBeamRequiresEnergy) {
73 setParticle(beam,
"PHOTON");
79 TEST_F(BeamPhotonTest, PhotonBeamRejectsGamma) {
81 makeValidPhotonBeam(beam);
87 TEST_F(BeamPhotonTest, PhotonBeamRejectsMomentum) {
89 makeValidPhotonBeam(beam);
95 TEST_F(BeamPhotonTest, PhotonBeamRejectsExplicitMassAndCharge) {
97 makeValidPhotonBeam(beam);
103 makeValidPhotonBeam(beam2);
104 setCharge(beam2, 1.0);
109 TEST_F(BeamPhotonTest, PhotonBeamRejectsSources) {
111 makeValidPhotonBeam(beam);
112 setSources(beam,
"srcs");
117 class BeamPolarizationTest :
public BeamPhotonTest {
119 void setPolarization(
Beam& beam,
const std::vector<double>& pol) {
122 void makeMuonBeam(
Beam& beam) {
123 setParticle(beam,
"MUON");
124 setEnergy(beam, 0.5);
125 setNALLOC(beam, 1.0);
126 setSources(beam,
"src");
130 TEST_F(BeamPolarizationTest, MuonBeamDefaultPolarizationIsZero) {
134 EXPECT_NO_THROW(beam.
execute());
136 ASSERT_EQ(pol.size(), 3u);
137 EXPECT_DOUBLE_EQ(pol[0], 0.0);
138 EXPECT_DOUBLE_EQ(pol[1], 0.0);
139 EXPECT_DOUBLE_EQ(pol[2], 0.0);
142 TEST_F(BeamPolarizationTest, MuonNonzeroPolarizationAccepted) {
146 setPolarization(beam, {0.0, 0.0, 1.0});
148 EXPECT_NO_THROW(beam.
execute());
152 TEST_F(BeamPolarizationTest, MuonZeroPolarizationEnablesSpinTracking) {
156 setPolarization(beam, {0.0, 0.0, 0.0});
158 EXPECT_NO_THROW(beam.
execute());
162 TEST_F(BeamPolarizationTest, MuonWithoutPolarizationHasSpinOff) {
167 EXPECT_NO_THROW(beam.
execute());
171 TEST_F(BeamPolarizationTest, PolarizationMagnitudeGreaterThanOneIsRejected) {
174 setPolarization(beam, {0.8, 0.8, 0.8});
179 TEST_F(BeamPolarizationTest, PolarizationWrongLengthIsRejected) {
182 setPolarization(beam, {0.0, 1.0});
187 TEST_F(BeamPolarizationTest, NonMuonSpeciesRejectsNonzeroPolarization) {
189 setParticle(beam,
"PION");
190 setEnergy(beam, 1.0);
191 setNALLOC(beam, 1.0);
192 setSources(beam,
"src");
193 setPolarization(beam, {0.0, 0.0, 1.0});
198 TEST_F(BeamPolarizationTest, NonMuonSpeciesRejectsZeroPolarization) {
201 setParticle(beam,
"PION");
202 setEnergy(beam, 1.0);
203 setNALLOC(beam, 1.0);
204 setSources(beam,
"src");
205 setPolarization(beam, {0.0, 0.0, 0.0});
210 TEST_F(BeamPolarizationTest, NonMuonSpeciesAcceptedWhenPolarizationUnset) {
213 setParticle(beam,
"PION");
214 setEnergy(beam, 1.0);
215 setNALLOC(beam, 1.0);
216 setSources(beam,
"src");
218 EXPECT_NO_THROW(beam.
execute());
TEST_F(MonitorTest, GetType)
bool hasPolarization() const
virtual void execute()
Check the BEAM data.
double getCharge() const
Return the charge number in elementary charge.
bool isPhoton() const
True if this beam is configured as a photon beam.
double getMass() const
Return Particle's rest mass in GeV.
std::vector< double > getPolarization() const
virtual Attribute * findAttribute(const std::string &name)
Find an attribute by name.
static std::string getParticleTypeString(const ParticleType &type)
static double getParticleMass(const ParticleType &type)
static double getParticleCharge(const ParticleType &type)
static ParticleType getParticleType(const std::string &str)
void setRealArray(Attribute &attr, const std::vector< double > &value)
Set array value.
void setString(Attribute &attr, const std::string &val)
Set string value.
void setReal(Attribute &attr, double val)
Set real value.
void setPredefinedString(Attribute &attr, const std::string &val)
Set predefined string value.