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