### |-------------------------------|----------------------------------|---------------------------------------------------------|------------------------|----------------------------------|-----------------------------------------------| ### | generating single particle events from a given list of types, with momentum, phi and theta from a given range, saving to HepMC | convert `HepMC::GenEvent` to EDM | geometry parsed from XML (TestHCal.xml) by DD4hep using GeoSvc | FTFP_BERT physics list | saving HCal hits | write the EDM output to ROOT file using PODIO | from Gaudi.Configuration import * from Configurables import FCCDataSvc ## Data service podioevent = FCCDataSvc("EventDataSvc") from Configurables import GenAlg, MomentumRangeParticleGun ## Particle Gun using MomentumRangeParticleGun tool and FlatSmearVertex # MomentumRangeParticleGun generates particles of given type(s) within given momentum, phi and theta range # FlatSmearVertex smears the vertex with uniform distribution guntool = MomentumRangeParticleGun() gen = GenAlg("ParticleGun", SignalProvider=guntool, VertexSmearingTool="FlatSmearVertex") gen.hepmc.Path = "hepmc" from Configurables import HepMCToEDMConverter ## Reads an HepMC::GenEvent from the data service and writes a collection of EDM Particles hepmc_converter = HepMCToEDMConverter("Converter") hepmc_converter.hepmc.Path = "hepmc" hepmc_converter.genparticles.Path = "allGenParticles" hepmc_converter.genvertices.Path = "allGenVertices" from Configurables import GeoSvc ## DD4hep geometry service # Parses the given xml file geoservice = GeoSvc( "GeoSvc",
xVertexMean=0. * units.mm, xVertexSigma=0.5 * units.mm, yVertexMean=0 * units.mm, yVertexSigma=0.5 * units.mm, zVertexMean=0* units.mm, zVertexSigma=70*units.mm, tVertexMean = 0 * units.picosecond, tVertexSigma = 30 * units.picosecond) pileuptool = ConstPileUp(numPileUpEvents=2) pileupreader = HepMCFileReader(Filename="/eos/project/f/fccsw-web/testsamples/FCC_minbias_100TeV.dat") from Configurables import PythiaInterface, GenAlg ### PYTHIA algorithm pythia8gentool = PythiaInterface("Pythia8Interface", Filename=pythiafile) pythia8gen = GenAlg("Pythia8", SignalProvider=pythia8gentool, PileUpProvider=pileupreader, VertexSmearingTool=smeartool) pythia8gen.PileUpTool = pileuptool pythia8gen.hepmc.Path = "hepmcevent" from Configurables import HepMCToEDMConverter ### Reads an HepMC::GenEvent from the data service and writes a collection of EDM Particles hepmc_converter = HepMCToEDMConverter("Converter") hepmc_converter.hepmc.Path="hepmcevent" hepmc_converter.genparticles.Path="all_genparticles" hepmc_converter.genvertices.Path="all_genvertices" from Configurables import GenParticleFilter ### Filters generated particles # accept is a list of particle statuses that should be accepted genfilter = GenParticleFilter("StableParticles", accept=[1], OutputLevel=DEBUG)
## Data event model based on Podio from Configurables import FCCDataSvc podioEvent = FCCDataSvc("EventDataSvc") ApplicationMgr().ExtSvc += [podioEvent] ApplicationMgr().OutputLevel = INFO ## Pythia generator from Configurables import PythiaInterface pythia8gentool = PythiaInterface() pythia8gentool.Filename = os.path.join(os.environ.get("FCCSWSHAREDIR", ""), "Generation/data/ee_Z_ddbar.cmd") ## Write the HepMC::GenEvent to the data service from Configurables import GenAlg pythia8gen = GenAlg() pythia8gen.SignalProvider = pythia8gentool pythia8gen.hepmc.Path = "hepmc" ApplicationMgr().TopAlg += [pythia8gen] ### Reads an HepMC::GenEvent from the data service and writes a collection of EDM Particles from Configurables import HepMCToEDMConverter hepmc_converter = HepMCToEDMConverter("Converter") hepmc_converter.hepmc.Path = "hepmc" hepmc_converter.genparticles.Path = "genParticles" hepmc_converter.genvertices.Path = "genVertices" ApplicationMgr().TopAlg += [hepmc_converter] # Define all output tools that convert the Delphes collections to FCC-EDM: from Configurables import DelphesSaveChargedParticles
from Gaudi.Configuration import * from Configurables import HepMCFileReader, GenAlg # reads HepMC text file and write the HepMC::GenEvent to the data service readertool = HepMCFileReader("ReaderTool", Filename="/eos/project/f/fccsw-web/testsamples/testHepMCrandom.dat") reader = GenAlg("Reader", SignalProvider=readertool) reader.hepmc.Path = "hepmc" from Configurables import HepMCToEDMConverter hepmc_converter = HepMCToEDMConverter("Converter") hepmc_converter.hepmc.Path="hepmc" hepmc_converter.genparticles.Path="allGenParticles" hepmc_converter.genvertices.Path="allGenVertices" from Configurables import HepMCDumper hepmc_dump = HepMCDumper("hepmc") hepmc_dump.hepmc.Path="hepmc" from Configurables import GeoSvc geoservice = GeoSvc("GeoSvc", detectors=['file:../data/TestBoxCaloSD_segmentation.xml']) from Configurables import SimG4Svc geantservice = SimG4Svc("SimG4Svc", detector='SimG4DD4hepDetector', physicslist='SimG4TestPhysicsList', actions='SimG4FullSimActions') from Configurables import SimG4Alg, SimG4SaveCalHits savecaltool = SimG4SaveCalHits("saveECalHits", readoutNames = ["ECalHits"]) savecaltool.positionedCaloHits.Path = "positionedCaloHits" savecaltool.caloHits.Path = "caloHits" geantsim = SimG4Alg("SimG4Alg", outputs= ["SimG4SaveCalHits/saveECalHits"]) from Configurables import FCCDataSvc, PodioOutput
print "input = ", pythiafile print "output = ", outputfilename print "maxevents = ", rmaxevents print "==================================" from Gaudi.Configuration import * from Configurables import ApplicationMgr, FCCDataSvc, PodioOutput from GaudiKernel import SystemOfUnits as units #### Data service podioevent = FCCDataSvc("EventDataSvc") from Configurables import HepMCFileReader from Configurables import PythiaInterface, GenAlg ### PYTHIA algorithm pythia8gentool = PythiaInterface("Pythia8Interface", Filename=pythiafile) pythia8gen = GenAlg("Pythia8", SignalProvider=pythia8gentool) pythia8gen.hepmc.Path = "hepmcevent" from Configurables import HepMCToEDMConverter ### Reads an HepMC::GenEvent from the data service and writes a collection of EDM Particles hepmc_converter = HepMCToEDMConverter("Converter") hepmc_converter.hepmc.Path = "hepmcevent" hepmc_converter.genparticles.Path = "GenParticle" hepmc_converter.genvertices.Path = "GenVertex" from CMS_detector_cfg import detservice from papas_cfg import papasalg #output fcc particles to root from Configurables import PodioOutput out = PodioOutput("out", OutputLevel=WARNING, filename=outputfilename)
from Configurables import SimG4SingleParticleGeneratorTool pgun=SimG4SingleParticleGeneratorTool("SimG4SingleParticleGeneratorTool", saveEdm=True, particleName=particle_geant_names[pdg], energyMin=energy * 1000, energyMax=energy * 1000, etaMin=etaMin, etaMax=etaMax, phiMin = phiMin, phiMax = phiMax) geantsim.eventProvider = pgun else: from Configurables import PythiaInterface, GenAlg, GaussSmearVertex smeartool = GaussSmearVertex("GaussSmearVertex") if simargs.useVertexSmearTool: smeartool.xVertexSigma = 0.5*units.mm smeartool.yVertexSigma = 0.5*units.mm smeartool.zVertexSigma = 40*units.mm smeartool.tVertexSigma = 180*units.picosecond pythia8gentool = PythiaInterface("Pythia8",Filename=card) pythia8gen = GenAlg("Pythia8", SignalProvider=pythia8gentool, VertexSmearingTool=smeartool) pythia8gen.hepmc.Path = "hepmc" from Configurables import HepMCToEDMConverter hepmc_converter = HepMCToEDMConverter("Converter", hepmcStatusList=[]) # save all the particles from Pythia hepmc_converter.hepmc.Path="hepmc" hepmc_converter.genparticles.Path="allGenParticles" hepmc_converter.genvertices.Path="GenVertices" from Configurables import GenParticleFilter ### Filters generated particles # accept is a list of particle statuses that should be accepted genfilter = GenParticleFilter("StableParticles", accept=[1], OutputLevel=DEBUG) genfilter.allGenParticles.Path = "allGenParticles" genfilter.filteredGenParticles.Path = "GenParticles" from Configurables import SimG4PrimariesFromEdmTool particle_converter = SimG4PrimariesFromEdmTool("EdmConverter") particle_converter.genParticles.Path = "GenParticles"
## Data service podioevent = FCCDataSvc("EventDataSvc") ApplicationMgr().ExtSvc += [podioevent] from Configurables import MomentumRangeParticleGun guntool = MomentumRangeParticleGun() guntool.ThetaMin = 45 * constants.pi / 180. guntool.ThetaMax = 135 * constants.pi / 180. guntool.PhiMin = 0. guntool.PhiMax = 2. * constants.pi guntool.MomentumMin = 1. * units.GeV guntool.MomentumMax = 1. * units.GeV guntool.PdgCodes = [11] # 11 electron, 13 muon, 22 photon, 111 pi0, 211 pi+ from Configurables import GenAlg gen = GenAlg() gen.SignalProvider = guntool gen.hepmc.Path = "hepmc" ApplicationMgr().TopAlg += [gen] from Configurables import HepMCToEDMConverter ## reads an HepMC::GenEvent from the data service and writes a collection of EDM Particles hepmc_converter = HepMCToEDMConverter("Converter") hepmc_converter.hepmc.Path = "hepmc" hepmc_converter.GenParticles.Path = "GenParticles" ApplicationMgr().TopAlg += [hepmc_converter] ################## Simulation setup # Detector geometry from Configurables import GeoSvc geoservice = GeoSvc("GeoSvc")
ApplicationMgr().OutputLevel = INFO ApplicationMgr().ExtSvc = ['RndmGenSvc'] from Configurables import FCCDataSvc ## Data service podioevent = FCCDataSvc("EventDataSvc") ApplicationMgr().ExtSvc += [podioevent] from Configurables import MomentumRangeParticleGun guntool = MomentumRangeParticleGun() guntool.ThetaMin = 0 guntool.ThetaMax = 2 * constants.pi guntool.PdgCodes = [11] from Configurables import GenAlg gen = GenAlg() gen.SignalProvider = guntool gen.hepmc.Path = "hepmc" ApplicationMgr().TopAlg += [gen] from Configurables import HepMCToEDMConverter ## reads an HepMC::GenEvent from the data service and writes a collection of EDM Particles hepmc_converter = HepMCToEDMConverter("Converter") hepmc_converter.hepmc.Path = "hepmc" hepmc_converter.GenParticles.Path = "GenParticles" ApplicationMgr().TopAlg += [hepmc_converter] # DD4hep geometry service from Configurables import GeoSvc ## parse the given xml file path_to_detectors = os.environ.get("FCCDETECTORS", "")
from Gaudi.Configuration import * from Configurables import GenAlg, MomentumRangeParticleGun, Gaudi__ParticlePropertySvc pgun = MomentumRangeParticleGun( "PGun", PdgCodes=[11], # electron MomentumMin=1, # GeV MomentumMax=1, # GeV ThetaMin=-0.45, # rad ThetaMax=-0.45, # rad PhiMin=1.6, # rad PhiMax=1.6) # rad gen = GenAlg("ParticleGun", SignalProvider=pgun) gen.hepmc.Path = "hepmc" from Configurables import HepMCToEDMConverter hepmc_converter = HepMCToEDMConverter("Converter") hepmc_converter.hepmc.Path = "hepmc" hepmc_converter.genparticles.Path = "allGenParticles" hepmc_converter.genvertices.Path = "allGenVertices" from Configurables import HepMCDumper hepmc_dump = HepMCDumper("hepmc") hepmc_dump.hepmc.Path = "hepmc" from Configurables import GeoSvc geoservice = GeoSvc("GeoSvc", detectors=['file:compact/Box_simpleTrackerSD.xml'], OutputLevel=DEBUG) from Configurables import SimG4Svc