/* This file is part of MAUS: http://micewww.pp.rl.ac.uk:8080/projects/maus * * MAUS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MAUS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MAUS. If not, see . */ #include "gtest/gtest.h" #include "Geant4/G4DynamicParticle.hh" #include "Geant4/G4ParticleDefinition.hh" #include "Geant4/G4ParticleTable.hh" #include "Geant4/G4Track.hh" #include "Geant4/G4ClassificationOfNewTrack.hh" #include "src/common_cpp/Simulation/MAUSGeant4Manager.hh" #include "src/common_cpp/Simulation/MAUSTrackingAction.hh" #include "src/common_cpp/Simulation/MAUSStackingAction.hh" namespace MAUS { // config["default_keep_or_kill"] = true; // config["keep_or_kill_particles"] = "{\"neutron\":False}"; // config["kinetic_energy_threshold"] = 0.1; TEST(MAUSStackingActionTest, ConstructorAccessorsTest) { MAUSStackingAction msa; std::map keep_or_kill; keep_or_kill["neutron"] = false; EXPECT_TRUE(msa.GetDefaultKeepOrKill()); EXPECT_EQ(msa.GetPdgPidKeepKill()["neutron"], false); EXPECT_EQ(msa.GetKineticEnergyThreshold(), 0.1); } TEST(MAUSStackingActionTest, AccessorsMutatorsTest) { MAUSStackingAction msa; std::map keep_or_kill; keep_or_kill["proton"] = false; msa.SetDefaultKeepOrKill(false); EXPECT_FALSE(msa.GetDefaultKeepOrKill()); msa.SetPdgPidKeepKill(keep_or_kill); EXPECT_EQ(msa.GetPdgPidKeepKill()["proton"], false); msa.SetKineticEnergyThreshold(2); EXPECT_EQ(msa.GetKineticEnergyThreshold(), 2); } // make a track with 1 MeV KE G4Track* MakeTrack() { G4ParticleDefinition* pd = G4ParticleTable::GetParticleTable()->FindParticle(-13); G4DynamicParticle* dyn = new G4DynamicParticle(pd, G4ThreeVector(0., 0., 1.), 1.); G4Track* track = new G4Track(dyn, 0., G4ThreeVector(0., 0., 0.)); track->SetTrackID(0); MAUSTrackingAction* ta = MAUSGeant4Manager::GetInstance()->GetTracking(); ta->SetTracks(Json::Value(Json::arrayValue)); ta->PreUserTrackingAction(track); return track; } TEST(MAUSStackingActionTest, ClassifyNewTrackTest) { MAUSStackingAction msa; // pid is mu+; ke > 0.1 - not in keep_or_kill - default should be to run G4Track* track_1 = MakeTrack(); msa.SetDefaultKeepOrKill(true); EXPECT_EQ(msa.ClassifyNewTrack(track_1), fWaiting); msa.SetDefaultKeepOrKill(false); EXPECT_EQ(msa.ClassifyNewTrack(track_1), fKill); std::map _keepers = msa.GetPdgPidKeepKill(); _keepers["mu+"] = true; msa.SetPdgPidKeepKill(_keepers); EXPECT_EQ(msa.ClassifyNewTrack(track_1), fWaiting); _keepers["mu+"] = false; msa.SetPdgPidKeepKill(_keepers); msa.SetDefaultKeepOrKill(true); EXPECT_EQ(msa.ClassifyNewTrack(track_1), fKill); _keepers["mu+"] = true; msa.SetPdgPidKeepKill(_keepers); msa.SetKineticEnergyThreshold(1.1); EXPECT_EQ(msa.ClassifyNewTrack(track_1), fKill); msa.SetKineticEnergyThreshold(0.9); EXPECT_EQ(msa.ClassifyNewTrack(track_1), fWaiting); } }