From feb7155e8274df4721c3fa9696fd6e65ca94b260 Mon Sep 17 00:00:00 2001 From: lintao <lintao51@gmail.com> Date: Mon, 7 Dec 2020 22:45:47 +0800 Subject: [PATCH] WIP: only kill the non-primary charged particle the dummy model. --- Simulation/DetSimCore/src/DetSimAlg.cpp | 17 ++++++++++++++++- .../src/DummyFastSimG4Model.cpp | 19 +++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/Simulation/DetSimCore/src/DetSimAlg.cpp b/Simulation/DetSimCore/src/DetSimAlg.cpp index f480ac9c..504f9927 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 6b590cae..8aab0270 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); } -- GitLab