Skip to content
Snippets Groups Projects
Commit 4a7c3ea2 authored by lintao@ihep.ac.cn's avatar lintao@ihep.ac.cn
Browse files

WIP: add an implementation of primary cnv tool.

parent d46dc0b4
No related branches found
No related tags found
No related merge requests found
......@@ -14,6 +14,7 @@ set(DetSimCore_srcs
src/DetSimSvc.cpp
src/DetectorConstruction.cpp
src/PrimaryGeneratorAction.cpp
src/G4PrimaryCnvTool.cpp
src/ActionInitialization.cpp
src/RunAction.cpp
src/EventAction.cpp
......
......@@ -54,7 +54,11 @@ DetSimAlg::initialize() {
assert(physicsList);
runmgr->SetUserInitialization(physicsList);
// Primary Generator Action
runmgr->SetUserAction(new PrimaryGeneratorAction());
if (!m_prim_cnvtool) {
error() << "Failed to get the primary cnvtool." << endmsg;
return StatusCode::FAILURE;
}
runmgr->SetUserAction(new PrimaryGeneratorAction(m_prim_cnvtool));
// User Actions
for (auto anaelem: m_ana_elems.value()) {
......
......@@ -9,6 +9,7 @@
#include <GaudiKernel/ToolHandle.h>
#include <DetSimInterface/IDetSimSvc.h>
#include <DetSimInterface/IG4PrimaryCnvTool.h>
#include <DetSimInterface/IAnaElemTool.h>
#include <DetSimInterface/IDetElemTool.h>
......@@ -24,6 +25,7 @@ private:
SmartIF<IDetSimSvc> m_detsimsvc;
ToolHandleArray<IAnaElemTool> m_anaelemtools;
ToolHandle<IDetElemTool> m_root_detelem;
ToolHandle<IG4PrimaryCnvTool> m_prim_cnvtool{"G4PrimaryCnvTool", this};
private:
......
#include "G4PrimaryCnvTool.h"
#include "G4Event.hh"
DECLARE_COMPONENT(G4PrimaryCnvTool)
bool G4PrimaryCnvTool::mutate(G4Event* anEvent) {
return true;
}
#ifndef G4PrimaryCnvTool_h
#define G4PrimaryCnvTool_h
#include "GaudiKernel/AlgTool.h"
#include "DetSimInterface/IG4PrimaryCnvTool.h"
class G4PrimaryCnvTool: public extends<AlgTool, IG4PrimaryCnvTool> {
public:
using extends::extends;
bool mutate(G4Event* anEvent) override;
};
#endif
......@@ -6,7 +6,9 @@
#include "G4ParticleDefinition.hh"
PrimaryGeneratorAction::PrimaryGeneratorAction() {
PrimaryGeneratorAction::PrimaryGeneratorAction(ToolHandle<IG4PrimaryCnvTool>& cnvtool)
: G4VUserPrimaryGeneratorAction(),
tool(cnvtool) {
}
......@@ -17,6 +19,10 @@ PrimaryGeneratorAction::~PrimaryGeneratorAction() {
void
PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) {
// Generate Vertex (G4PrimaryVertex) and Particle (G4PrimaryParticle).
if (tool) {
tool->mutate(anEvent);
}
// Following is an example:
double x = 0.0;
......
#ifndef PrimaryGeneratorAction_h
#define PrimaryGeneratorAction_h
#include <GaudiKernel/ToolHandle.h>
#include "G4VUserPrimaryGeneratorAction.hh"
#include <DetSimInterface/IG4PrimaryCnvTool.h>
class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
{
public:
PrimaryGeneratorAction();
PrimaryGeneratorAction(ToolHandle<IG4PrimaryCnvTool>& cnvtool);
~PrimaryGeneratorAction();
public:
void GeneratePrimaries(G4Event* anEvent);
private:
ToolHandle<IG4PrimaryCnvTool> tool;
};
#endif
......
......@@ -16,7 +16,7 @@ public:
virtual ~IG4PrimaryCnvTool() {};
virtual mutate(G4Event* anEvent) = 0;
virtual bool mutate(G4Event* anEvent) = 0;
};
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment