diff --git a/Examples/options/tut_detsim_SDT.py b/Examples/options/tut_detsim_SDT.py index 8d490193c7ab07e3cd9df9bef9875bfbcc3866cc..5510a6d9ab18fadf3423f629e31637a62d470060 100644 --- a/Examples/options/tut_detsim_SDT.py +++ b/Examples/options/tut_detsim_SDT.py @@ -64,6 +64,12 @@ gun = GtGunTool("GtGunTool") # gun.EnergyMaxs = [100.] # GeV gun.Particles = ["e-"] + +# gun.PositionXs = [100.] # mm +# gun.PositionYs = [100.] # mm +# gun.PositionZs = [0.] # mm + + gun.EnergyMins = [1.] # GeV gun.EnergyMaxs = [1.] # GeV diff --git a/Generator/src/GtGunTool.cpp b/Generator/src/GtGunTool.cpp index df29f4a2821f0324d574fc71e316bd05f3054447..7ff4dab0195a5a56bb7c614f3f5f2fb472eecc7f 100644 --- a/Generator/src/GtGunTool.cpp +++ b/Generator/src/GtGunTool.cpp @@ -15,7 +15,25 @@ GtGunTool::initialize() { error() << "Please specify the list of particle names/pdgs" << endmsg; return StatusCode::FAILURE; } + + // Position + if (m_positionXs.value().size() + && m_positionXs.value().size() != m_particles.value().size()) { + error() << "Mismatched PositionXs and particles." << endmsg; + return StatusCode::FAILURE; + } + if (m_positionYs.value().size() + && m_positionYs.value().size() != m_particles.value().size()) { + error() << "Mismatched PositionYs and particles." << endmsg; + return StatusCode::FAILURE; + } + if (m_positionZs.value().size() + && m_positionZs.value().size() != m_particles.value().size()) { + error() << "Mismatched PositionZs and particles." << endmsg; + return StatusCode::FAILURE; + } + // Energy if (m_energymins.value().size() != m_particles.value().size()) { error() << "Mismatched energies and particles." << endmsg; return StatusCode::FAILURE; @@ -89,7 +107,16 @@ GtGunTool::mutate(MyHepMC::GenEvent& event) { // mcp.setCharge(); mcp.setTime(0.0); mcp.setMass(mass); - // mcp.setVertex(); + + // Unit is mm + double x = 0; + double y = 0; + double z = 0; + if (i<m_positionXs.value().size()) { x = m_positionXs.value()[i]; } + if (i<m_positionYs.value().size()) { y = m_positionYs.value()[i]; } + if (i<m_positionZs.value().size()) { z = m_positionZs.value()[i]; } + + mcp.setVertex(edm4hep::Vector3d(x,y,z)); // mcp.setEndpoint(); // assume energy is momentum diff --git a/Generator/src/GtGunTool.h b/Generator/src/GtGunTool.h index 388c14d4d555bc4d3b436ebc90fabdca26f22337..0c62f4c386a34ad5468a99052998d4f04cda0611 100644 --- a/Generator/src/GtGunTool.h +++ b/Generator/src/GtGunTool.h @@ -34,6 +34,11 @@ private: Gaudi::Property<std::vector<std::string>> m_particles{this, "Particles"}; + Gaudi::Property<std::vector<double>> m_positionXs{this, "PositionXs"}; + Gaudi::Property<std::vector<double>> m_positionYs{this, "PositionYs"}; + Gaudi::Property<std::vector<double>> m_positionZs{this, "PositionZs"}; + + Gaudi::Property<std::vector<double>> m_energymins{this, "EnergyMins"}; Gaudi::Property<std::vector<double>> m_energymaxs{this, "EnergyMaxs"}; diff --git a/Simulation/DetSimCore/src/G4PrimaryCnvTool.cpp b/Simulation/DetSimCore/src/G4PrimaryCnvTool.cpp index d725aa27dead84d3b95df9fc66c0c990f9189fe4..51c5f91472fae311914c890b764f67e3c8a625f0 100644 --- a/Simulation/DetSimCore/src/G4PrimaryCnvTool.cpp +++ b/Simulation/DetSimCore/src/G4PrimaryCnvTool.cpp @@ -30,6 +30,13 @@ bool G4PrimaryCnvTool::mutate(G4Event* anEvent) { vertex.y*CLHEP::mm, vertex.z*CLHEP::mm, t); + + info() << "Geant4 Primary Vertex: (" + << vertex.x*CLHEP::mm << "," + << vertex.y*CLHEP::mm << "," + << vertex.z*CLHEP::mm << ")" + << endmsg; + // pdg/particle int pdgcode = p.getPDG(); G4ParticleTable* particletbl = G4ParticleTable::GetParticleTable();