From c172e8671c7003aaf1d57ec1967b5d48b99b6c04 Mon Sep 17 00:00:00 2001 From: lintao <lintao51@gmail.com> Date: Fri, 9 Aug 2019 14:09:29 +0800 Subject: [PATCH] Add a dummy Primary Generator Action. --- Simulation/DetSimCore/CMakeLists.txt | 1 + Simulation/DetSimCore/src/DetSimAlg.cpp | 8 ++-- .../DetSimCore/src/PrimaryGeneratorAction.cpp | 42 +++++++++++++++++++ .../DetSimCore/src/PrimaryGeneratorAction.h | 18 ++++++++ 4 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 Simulation/DetSimCore/src/PrimaryGeneratorAction.cpp create mode 100644 Simulation/DetSimCore/src/PrimaryGeneratorAction.h diff --git a/Simulation/DetSimCore/CMakeLists.txt b/Simulation/DetSimCore/CMakeLists.txt index f8a022fa..5ed403b8 100644 --- a/Simulation/DetSimCore/CMakeLists.txt +++ b/Simulation/DetSimCore/CMakeLists.txt @@ -11,6 +11,7 @@ include(${Geant4_USE_FILE}) set(DetSimCore_srcs src/DetSimAlg.cpp src/DetectorConstruction.cpp + src/PrimaryGeneratorAction.cpp ) gaudi_add_module(DetSimCore ${DetSimCore_srcs} diff --git a/Simulation/DetSimCore/src/DetSimAlg.cpp b/Simulation/DetSimCore/src/DetSimAlg.cpp index d7b29b32..a5b44538 100644 --- a/Simulation/DetSimCore/src/DetSimAlg.cpp +++ b/Simulation/DetSimCore/src/DetSimAlg.cpp @@ -6,6 +6,7 @@ #include "G4PhysListFactory.hh" +#include "PrimaryGeneratorAction.h" DECLARE_COMPONENT(DetSimAlg) @@ -33,8 +34,9 @@ DetSimAlg::initialize() { return StatusCode::FAILURE; } + // Detector Construction runmgr->SetUserInitialization(new DetectorConstruction()); - + // Physics List G4VUserPhysicsList *physicsList = nullptr; if (m_physics_lists_name.value() == "CEPC") { @@ -44,8 +46,8 @@ DetSimAlg::initialize() { } assert(physicsList); runmgr->SetUserInitialization(physicsList); - - runmgr->SetUserAction((G4VUserPrimaryGeneratorAction*)0); + // Primary Generator Action + runmgr->SetUserAction(new PrimaryGeneratorAction()); // after set up the user initialization and user actions, start the initialization. m_detsimsvc->initializeRM(); diff --git a/Simulation/DetSimCore/src/PrimaryGeneratorAction.cpp b/Simulation/DetSimCore/src/PrimaryGeneratorAction.cpp new file mode 100644 index 00000000..6454963b --- /dev/null +++ b/Simulation/DetSimCore/src/PrimaryGeneratorAction.cpp @@ -0,0 +1,42 @@ +#include "PrimaryGeneratorAction.h" + +#include "G4Event.hh" +#include "G4ParticleTable.hh" +#include "G4IonTable.hh" +#include "G4ParticleDefinition.hh" + + +PrimaryGeneratorAction::PrimaryGeneratorAction() { + +} + +PrimaryGeneratorAction::~PrimaryGeneratorAction() { + +} + +void +PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) { + // Generate Vertex (G4PrimaryVertex) and Particle (G4PrimaryParticle). + + // Following is an example: + double x = 0.0; + double y = 0.0; + double z = 0.0; + double t = 0.0; + G4PrimaryVertex* g4vtx = new G4PrimaryVertex(x, y, z, t); + + + G4int pdgcode = 22; + // check the pdgid + G4ParticleTable* particletbl = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* particle_def = particletbl->FindParticle(pdgcode); + + double px = 0.0; + double py = 0.0; + double pz = 0.0; + G4PrimaryParticle* g4prim=new G4PrimaryParticle(particle_def, px, py, pz); + g4vtx->SetPrimary(g4prim); + + anEvent->AddPrimaryVertex(g4vtx); +} + diff --git a/Simulation/DetSimCore/src/PrimaryGeneratorAction.h b/Simulation/DetSimCore/src/PrimaryGeneratorAction.h new file mode 100644 index 00000000..fa34d7a4 --- /dev/null +++ b/Simulation/DetSimCore/src/PrimaryGeneratorAction.h @@ -0,0 +1,18 @@ +#ifndef PrimaryGeneratorAction_h +#define PrimaryGeneratorAction_h + +#include "G4VUserPrimaryGeneratorAction.hh" + +class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction +{ +public: + PrimaryGeneratorAction(); + ~PrimaryGeneratorAction(); + +public: + void GeneratePrimaries(G4Event* anEvent); + +}; + +#endif + -- GitLab