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

WIP: support custom position in particle gun.

parent da1c5412
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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
......
......@@ -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"};
......
......@@ -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();
......
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