Skip to content
Snippets Groups Projects
Commit ba53c7ef authored by Carl Gwilliam's avatar Carl Gwilliam
Browse files

Merge branch 'signal_generation' into 'master'

Allow shift in x or y for simulation

See merge request !226
parents ce687fe4 f7d336b8
No related branches found
No related tags found
1 merge request!226Allow shift in x or y for simulation
Pipeline #3974765 passed
...@@ -11,19 +11,21 @@ except ImportError: ...@@ -11,19 +11,21 @@ except ImportError:
from AthenaPython.PyAthena import HepMC as HepMC from AthenaPython.PyAthena import HepMC as HepMC
class ShiftLOS(PyAthena.Alg): class ShiftLOS(PyAthena.Alg):
def __init__(self, name="ShiftLOS", InputMCEventKey="BeamTruthEvent", OutputMCEventKey="BeamTruthEventShifted", xcross = 0, ycross = 0): def __init__(self, name="ShiftLOS", InputMCEventKey="BeamTruthEvent", OutputMCEventKey="BeamTruthEventShifted", xcross = 0, ycross = 0, xshift = 0, yshift = 0):
super(ShiftLOS,self).__init__(name=name) super(ShiftLOS,self).__init__(name=name)
self.InputMCEventKey = InputMCEventKey self.InputMCEventKey = InputMCEventKey
self.OutputMCEventKey = OutputMCEventKey self.OutputMCEventKey = OutputMCEventKey
self.xcross = xcross * 1e-6 self.xcross = xcross * 1e-6
self.ycross = ycross * 1e-6 self.ycross = ycross * 1e-6
self.distance = 480*m # Assumes 480m is 0 of FASER coordinate system self.xshift = xshift
self.yshift = yshift
self.distance = 480 * m # Assumes 480m is 0 of FASER coordinate system
return return
def shift_vertices(self, evt): def shift_vertices(self, evt):
# Don't need to shift if at IP # Don't need to shift if at IP unless request explicit shift
if not self.distance: if not self.distance and not self.xshift and not self.yshift:
return evt return evt
# Loop over all vertices # Loop over all vertices
...@@ -41,7 +43,14 @@ class ShiftLOS(PyAthena.Alg): ...@@ -41,7 +43,14 @@ class ShiftLOS(PyAthena.Alg):
self.msg.debug(f"Shifting x by {self.xcross} over {dz}: {pos.x()} -> {x} ") self.msg.debug(f"Shifting x by {self.xcross} over {dz}: {pos.x()} -> {x} ")
elif self.ycross: elif self.ycross:
y += dz * self.ycross y += dz * self.ycross
self.msg.debug(f"Shifting y by {self.ycross} over {dz}: {pos.y()} -> {y} ") self.msg.debug(f"Shifting y by {self.ycross} over {dz}: {pos.y()} -> {y} ")
if self.xshift:
x += self.xshift
self.msg.debug(f"Shifting x by {self.xshift}: {pos.x()} -> {x} ")
elif self.yshift:
y += self.yshift
self.msg.debug(f"Shifting x by {self.yshift}: {pos.y()} -> {y} ")
v.set_position(HepMC.FourVector(x, y, z, pos.t())) v.set_position(HepMC.FourVector(x, y, z, pos.t()))
...@@ -50,6 +59,9 @@ class ShiftLOS(PyAthena.Alg): ...@@ -50,6 +59,9 @@ class ShiftLOS(PyAthena.Alg):
def boost_particles(self, evt): def boost_particles(self, evt):
if self.xcross == self.ycross == 0:
return evt
pxsum, pysum = 0,0 pxsum, pysum = 0,0
pxsum_orig, pysum_orig = 0,0 pxsum_orig, pysum_orig = 0,0
...@@ -79,9 +91,7 @@ class ShiftLOS(PyAthena.Alg): ...@@ -79,9 +91,7 @@ class ShiftLOS(PyAthena.Alg):
def execute(self): def execute(self):
self.msg.debug(f"Exectuing {self.getName()}") self.msg.debug(f"Exectuing {self.getName()}")
print (self.xcross, self.ycross) if not self.xcross and not self.ycross and not self.xshift and not self.yshift:
if not self.xcross and not self.ycross:
return StatusCode.Success return StatusCode.Success
self.msg.debug(f"Reading {self.InputMCEventKey}") self.msg.debug(f"Reading {self.InputMCEventKey}")
...@@ -116,6 +126,8 @@ if __name__ == "__main__": ...@@ -116,6 +126,8 @@ if __name__ == "__main__":
parser.add_argument("--OutputMCEventKey", "-o", default = "BeamTruthEventShifted", help = "Name of Output MC collection") parser.add_argument("--OutputMCEventKey", "-o", default = "BeamTruthEventShifted", help = "Name of Output MC collection")
parser.add_argument("--xcross", "-x", default = 0, type = float, help = "Crossing angle of LHC beam in x [urad]") parser.add_argument("--xcross", "-x", default = 0, type = float, help = "Crossing angle of LHC beam in x [urad]")
parser.add_argument("--ycross", "-y", default = 0, type = float, help = "Crossing angle of LHC beam in y [urad]") parser.add_argument("--ycross", "-y", default = 0, type = float, help = "Crossing angle of LHC beam in y [urad]")
parser.add_argument("--xshift", default = 0, type = float, help = "Shift of LHC beam in x [mm]")
parser.add_argument("--yshift", default = 0, type = float, help = "Shift of LHC beam in y [mm]")
parser.add_argument("--nevents", "-n", default = -1, type = int, help = "Number of events to process") parser.add_argument("--nevents", "-n", default = -1, type = int, help = "Number of events to process")
args = parser.parse_args() args = parser.parse_args()
...@@ -150,7 +162,8 @@ if __name__ == "__main__": ...@@ -150,7 +162,8 @@ if __name__ == "__main__":
from AthenaConfiguration.ComponentFactory import CompFactory from AthenaConfiguration.ComponentFactory import CompFactory
acc = ComponentAccumulator() acc = ComponentAccumulator()
alg = ShiftLOS("ShiftLOS", InputMCEventKey=args.InputMCEventKey, OutputMCEventKey=args.OutputMCEventKey, xcross = args.xcross, ycross = args.ycross) alg = ShiftLOS("ShiftLOS", InputMCEventKey=args.InputMCEventKey, OutputMCEventKey=args.OutputMCEventKey,
xcross = args.xcross, ycross = args.ycross, xshift = args.xshift, yshift = args.yshift)
alg.OutputLevel = INFO alg.OutputLevel = INFO
acc.addEventAlgo(alg) acc.addEventAlgo(alg)
cfg.merge(acc) cfg.merge(acc)
......
...@@ -18,7 +18,9 @@ def ShiftLOSCfg(ConfigFlags, **kwargs) : ...@@ -18,7 +18,9 @@ def ShiftLOSCfg(ConfigFlags, **kwargs) :
shift.InputMCEventKey = kwargs.setdefault("InputMCEventKey", "BeamTruthEvent") shift.InputMCEventKey = kwargs.setdefault("InputMCEventKey", "BeamTruthEvent")
shift.OutputMCEventKey = kwargs.setdefault("OutputMCEventKey", "BeamTruthEventShifted") shift.OutputMCEventKey = kwargs.setdefault("OutputMCEventKey", "BeamTruthEventShifted")
shift.xcross = kwargs.setdefault("xcross", 0) shift.xcross = kwargs.setdefault("xcross", 0)
shift.ycross = kwargs.setdefault("ycross", 0) shift.ycross = kwargs.setdefault("ycross", 0)
shift.xshift = kwargs.setdefault("xshift", 0)
shift.yshift = kwargs.setdefault("yshift", 0)
cfg.addEventAlgo(shift, sequenceName = "AthBeginSeq", primary = True) # to run *before* G4 cfg.addEventAlgo(shift, sequenceName = "AthBeginSeq", primary = True) # to run *before* G4
return cfg return cfg
...@@ -44,7 +44,9 @@ if __name__ == '__main__': ...@@ -44,7 +44,9 @@ if __name__ == '__main__':
ConfigFlags.Sim.IncludeParentsInG4Event = True # Controls whether BeamTruthEvent is written to output HITS file ConfigFlags.Sim.IncludeParentsInG4Event = True # Controls whether BeamTruthEvent is written to output HITS file
ConfigFlags.addFlag("Sim.Gun",{"Generator" : "SingleParticle"}) # Property bag for particle gun keyword:argument pairs ConfigFlags.addFlag("Sim.Gun",{"Generator" : "SingleParticle"}) # Property bag for particle gun keyword:argument pairs
ConfigFlags.addFlag("Sim.Beam.xangle", 0) # Potential beam crossing angles ConfigFlags.addFlag("Sim.Beam.xangle", 0) # Potential beam crossing angles
ConfigFlags.addFlag("Sim.Beam.yangle", 0) ConfigFlags.addFlag("Sim.Beam.yangle", 0)
ConfigFlags.addFlag("Sim.Beam.xshift", 0) # Potential beam shift
ConfigFlags.addFlag("Sim.Beam.yshift", 0)
ConfigFlags.GeoModel.FaserVersion = "FASERNU-02" # Geometry set-up ConfigFlags.GeoModel.FaserVersion = "FASERNU-02" # Geometry set-up
ConfigFlags.IOVDb.GlobalTag = "OFLCOND-FASER-02" # Conditions set-up ConfigFlags.IOVDb.GlobalTag = "OFLCOND-FASER-02" # Conditions set-up
...@@ -131,12 +133,15 @@ if __name__ == '__main__': ...@@ -131,12 +133,15 @@ if __name__ == '__main__':
# Shift LOS # Shift LOS
# #
if ConfigFlags.Sim.Beam.xangle or ConfigFlags.Sim.Beam.yangle: if (ConfigFlags.Sim.Beam.xangle or ConfigFlags.Sim.Beam.yangle or
ConfigFlags.Sim.Beam.xshift or ConfigFlags.Sim.Beam.yshift):
MCEventKey = "BeamTruthEventShifted" MCEventKey = "BeamTruthEventShifted"
import McParticleEvent.Pythonizations import McParticleEvent.Pythonizations
from GeneratorUtils.ShiftLOSConfig import ShiftLOSCfg from GeneratorUtils.ShiftLOSConfig import ShiftLOSCfg
cfg.merge(ShiftLOSCfg(ConfigFlags, OutputMCEventKey = MCEventKey, cfg.merge(ShiftLOSCfg(ConfigFlags, OutputMCEventKey = MCEventKey,
xcross = ConfigFlags.Sim.Beam.xangle, ycross = ConfigFlags.Sim.Beam.yangle)) xcross = ConfigFlags.Sim.Beam.xangle, ycross = ConfigFlags.Sim.Beam.yangle,
xshift = ConfigFlags.Sim.Beam.xshift, yshift = ConfigFlags.Sim.Beam.yshift))
else: else:
MCEventKey = "BeamTruthEvent" MCEventKey = "BeamTruthEvent"
......
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