Line data Source code
1 : #include "CRPropa.h" 2 : #include "gtest/gtest.h" 3 : 4 : namespace crpropa { 5 : 6 : /* 7 : * Functional test which calculates the particle's gyroradius in a uniform field 8 : * r_g = R / (B*c) = 1 EV / (1 nG * c) \approx 1.08*Mpc 9 : */ 10 2 : TEST(testFunctionalGroups, gyroradius) { 11 : double energy = 1*EeV; 12 : double field = 1*nG; 13 : 14 1 : ParticleState p; 15 1 : p.setId(nucleusId(1, 1)); 16 1 : p.setEnergy(energy); 17 1 : p.setPosition(Vector3d(0, 0, 0)); 18 1 : p.setDirection(Vector3d(0, 0, 1)); 19 : 20 1 : ref_ptr<Candidate> c = new Candidate(p); 21 1 : ref_ptr<PropagationCK> propa = new PropagationCK(new UniformMagneticField(Vector3d(field, 0, 0))); 22 1 : ref_ptr<ParticleCollector> collector = new ParticleCollector(); 23 1 : collector->setClone(true); 24 1 : ref_ptr<ModuleList> sim = new ModuleList(); 25 : 26 : Vector3d pos; 27 : double max_y = 0; 28 : 29 1 : sim->add(propa); 30 1 : sim->add(new MaximumTrajectoryLength(10*Mpc)); 31 1 : sim->add(collector); 32 : 33 1 : sim->run(c); 34 : 35 16 : for (ParticleCollector::iterator itr = collector->begin(); itr != collector->end(); ++itr){ 36 15 : pos = (*(itr->get())).current.getPosition(); 37 15 : if (max_y < pos.getY()) 38 : max_y = pos.getY(); 39 : } 40 : 41 1 : EXPECT_NEAR(max_y/2.0, energy/(field * c_light * eplus), 0.01*Mpc); 42 : 43 1 : } 44 : 45 0 : int main(int argc, char **argv) { 46 0 : ::testing::InitGoogleTest(&argc, argv); 47 0 : return RUN_ALL_TESTS(); 48 : } 49 : 50 : } // namespace crpropa