diff --git a/Simulation/DetSimCore/src/DetSimAlg.cpp b/Simulation/DetSimCore/src/DetSimAlg.cpp index f480ac9c1872964ad06b93ae8067cd0ed53134dd..504f99274c5962165632a474a731af00f3b4a864 100644 --- a/Simulation/DetSimCore/src/DetSimAlg.cpp +++ b/Simulation/DetSimCore/src/DetSimAlg.cpp @@ -10,6 +10,8 @@ #include "DetectorConstruction.h" #include "G4PhysListFactory.hh" +#include "G4StepLimiterPhysics.hh" +#include "G4FastSimulationPhysics.hh" #include "PrimaryGeneratorAction.h" #include "ActionInitialization.h" @@ -55,7 +57,20 @@ DetSimAlg::initialize() { } else { G4PhysListFactory *physListFactory = new G4PhysListFactory(); - physicsList = physListFactory->GetReferencePhysList(m_physics_lists_name.value()); + G4VModularPhysicsList* modularPhysicsList = physListFactory->GetReferencePhysList(m_physics_lists_name.value()); + + // register addition physics list + modularPhysicsList->RegisterPhysics(new G4StepLimiterPhysics()); + + // register fastsim physics + G4FastSimulationPhysics* fastsim_physics = new G4FastSimulationPhysics(); + fastsim_physics->BeVerbose(); + fastsim_physics->ActivateFastSimulation("e-"); + fastsim_physics->ActivateFastSimulation("e+"); + fastsim_physics->ActivateFastSimulation("gamma"); + modularPhysicsList->RegisterPhysics(fastsim_physics); + + physicsList = modularPhysicsList; } assert(physicsList); runmgr->SetUserInitialization(physicsList); diff --git a/Simulation/DetSimFastModel/src/DummyFastSimG4Model.cpp b/Simulation/DetSimFastModel/src/DummyFastSimG4Model.cpp index 6b590cae4bffdb559fd1fddb0a8939cc83065979..8aab0270897ecb4326ada89012f8ec5771ee51fd 100644 --- a/Simulation/DetSimFastModel/src/DummyFastSimG4Model.cpp +++ b/Simulation/DetSimFastModel/src/DummyFastSimG4Model.cpp @@ -1,5 +1,8 @@ #include "DummyFastSimG4Model.h" +#include "G4Track.hh" +#include "G4FastTrack.hh" + DummyFastSimG4Model::DummyFastSimG4Model(G4String aModelName, G4Region* aEnvelope) : G4VFastSimulationModel(aModelName, aEnvelope) { @@ -10,13 +13,25 @@ DummyFastSimG4Model::~DummyFastSimG4Model() { } G4bool DummyFastSimG4Model::IsApplicable(const G4ParticleDefinition& aParticle) { - return true; + return aParticle.GetPDGCharge() != 0; } G4bool DummyFastSimG4Model::ModelTrigger(const G4FastTrack& aFastTrack) { - return true; + G4cout << __FILE__ << __LINE__ << ": ModelTrigger." << G4endl; + + bool istrigged = false; + + // only select the secondaries + const G4Track* track = aFastTrack.GetPrimaryTrack(); + // secondaries + if (track->GetParentID() != 0) { + istrigged = true; + } + return istrigged; } void DummyFastSimG4Model::DoIt(const G4FastTrack& aFastTrack, G4FastStep& aFastStep) { + G4cout << __FILE__ << __LINE__ << ": DoIt." << G4endl; + aFastStep.ProposeTrackStatus(fStopAndKill); }