35def CommonSimulationCfg(flags, log):
36
37 if not flags.Input.Files:
38
39 from AthenaConfiguration.MainServicesConfig import MainEvgenServicesCfg
40 cfg = MainEvgenServicesCfg(flags)
41
42 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
43 cfg.merge(EventInfoCnvAlgCfg(flags, name="xAODMaker::EventInfoCnvAlg", disableBeamSpot = True))
44
45
46
47
48 cfg.getService("EventSelector").FirstLB = flags.Input.LumiBlockNumbers[0]
49 cfg.getService("EventSelector").OverrideRunNumber = True
50 from AthenaKernel.EventIdOverrideConfig import EvtIdModifierSvcCfg
51 cfg.merge(EvtIdModifierSvcCfg(flags))
52 if flags.Beam.Type is BeamType.Cosmics:
53
54 from CosmicGenerator.CosmicGeneratorConfig import CosmicGeneratorCfg
55 cfg.merge(CosmicGeneratorCfg(flags))
56 else:
57
58 fragment = flags.Sim.GenerationConfiguration
59 if fragment and fragment != 'NONE':
60 executeFromFragment(fragment, flags, cfg)
61 log.info("On-the-fly generation using ParticleGun!")
62 else:
63 log.error("No input file or on-the-fly generation configuration provided!")
64 else:
65
66 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
67 cfg = MainServicesCfg(flags)
68 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
69 cfg.merge(PoolReadCfg(flags))
70 if flags.Sim.ReadTR or flags.Sim.CavernBackground is CavernBackground.Read:
71
72 from TrackRecordGenerator.TrackRecordGeneratorConfig import Input_TrackRecordGeneratorCfg
73 cfg.merge(Input_TrackRecordGeneratorCfg(flags))
74 if flags.Sim.ISF.ReSimulation:
75
76 if "xAOD::EventInfo#EventInfo" not in flags.Input.TypedCollections:
77 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
78 cfg.merge(EventInfoCnvAlgCfg(flags))
79 else:
80 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoUpdateFromContextAlgCfg
81 cfg.merge(EventInfoUpdateFromContextAlgCfg(flags))
82 from McEventCollectionFilter.McEventCollectionFilterConfig import TruthResetAlgCfg
83 cfg.merge(TruthResetAlgCfg(flags))
84 cfg.addSequence(CompFactory.AthSequencer('SimSequence'), parentName='AthAlgSeq')
85 cfg.addSequence(CompFactory.AthSequencer('CopyHitSequence'), parentName='AthAlgSeq')
86
87 if flags.Sim.ISF.ReSimulation:
88
89 from ISF_Algorithms.ISF_AlgorithmsConfig import SimEventFilterCfg, InvertedSimEventFilterCfg, RenameHitCollectionsCfg
90 cfg.merge(SimEventFilterCfg(flags, sequenceName='SimSequence'))
91 cfg.merge(InvertedSimEventFilterCfg(flags, sequenceName='CopyHitSequence'))
92 cfg.merge(RenameHitCollectionsCfg(flags, sequenceName='CopyHitSequence'))
93 evSel = cfg.getService("EventSelector")
94 evSel.CollectionType = "RootCollection"
95 else:
96
97
98 from BeamEffects.BeamEffectsAlgConfig import BeamEffectsAlgCfg
99 cfg.merge(BeamEffectsAlgCfg(flags))
100 if flags.Input.Files:
101
102 if "xAOD::EventInfo#EventInfo" not in flags.Input.TypedCollections:
103 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
104 cfg.merge(EventInfoCnvAlgCfg(flags))
105 else:
106 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoUpdateFromContextAlgCfg
107 cfg.merge(EventInfoUpdateFromContextAlgCfg(flags))
108 else:
109
110 pass
111
112 if flags.Beam.Type is BeamType.TestBeam:
113 from TBDetDescrAlg.TBDetDescrAlgConfig import TBDetDescrLoaderCfg
114 cfg.merge(TBDetDescrLoaderCfg(flags))
115 AcceptAlgNames=[]
116 if flags.Sim.ISFRun:
117
118 from ISF_Config.ISF_MainConfig import ISF_KernelCfg
119 cfg.merge(ISF_KernelCfg(flags))
120 AcceptAlgNames = ['ISF_Kernel_' + flags.Sim.ISF.Simulator.value]
121 if flags.Sim.ISF.ReSimulation:
122 AcceptAlgNames += ['RenameHitCollections']
123 else:
124 if not flags.Sim.UseG4Workers:
125 AcceptAlgNames = ['G4AtlasAlg']
126
127 from G4AtlasAlg.G4AtlasAlgConfig import G4AtlasAlgCfg
128 cfg.merge(G4AtlasAlgCfg(flags))
129 else:
130 AcceptAlgNames = ['G4RunAlg']
131
132 from G4AtlasAlg.G4RunAlgConfig import G4RunAlgCfg
133 cfg.merge(G4RunAlgCfg(flags))
134 from SimulationConfig.SimEnums import LArParameterization
135 if flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
136 cfg.getEventAlgo("ISF_CollectionMerger").InputLArEMBHits.data.sort()
137 cfg.getEventAlgo("ISF_CollectionMerger").InputLArEMECHits.data.sort()
138 cfg.getEventAlgo("ISF_CollectionMerger").InputLArFCALHits.data.sort()
139 cfg.getEventAlgo("ISF_CollectionMerger").InputLArHECHits.data.sort()
140 cfg.getEventAlgo("ISF_CollectionMerger").InputTileHits.data.sort()
141 cfg.getEventAlgo("ISF_CollectionMerger").InputMBTSHits.data.sort()
142
143 from SimulationConfig.SimEnums import CalibrationRun
144 if flags.Sim.CalibrationRun in [CalibrationRun.LAr, CalibrationRun.LArTile, CalibrationRun.LArTileZDC]:
145 from LArG4SD.LArG4SDToolConfig import DeadMaterialCalibrationHitMergerCfg
146 cfg.merge(DeadMaterialCalibrationHitMergerCfg(flags))
147
148 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg, outputStreamName
149 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
150
151 if flags.Output.HITSFileName:
152 from SimuJobTransforms.SimOutputConfig import getStreamHITS_ItemList
153 cfg.merge( OutputStreamCfg(flags,"HITS", ItemList=getStreamHITS_ItemList(flags), disableEventTag=False, AcceptAlgs=AcceptAlgNames) )
154 cfg.merge(SetupMetaDataForStreamCfg(flags, "HITS", AcceptAlgs=AcceptAlgNames, createMetadata=[MetadataCategory.IOVMetaData]))
155 if flags.Sim.ISF.ReSimulation:
156 cfg.getEventAlgo(outputStreamName("HITS")).TakeItemsFromInput=False
157
158 if flags.Output.EVNT_TRFileName:
159 from SimuJobTransforms.SimOutputConfig import getStreamEVNT_TR_ItemList
160 cfg.merge( OutputStreamCfg(flags,"EVNT_TR", ItemList=getStreamEVNT_TR_ItemList(flags), disableEventTag=True, AcceptAlgs=AcceptAlgNames) )
161 cfg.merge(SetupMetaDataForStreamCfg(flags, "EVNT_TR", AcceptAlgs=AcceptAlgNames, createMetadata=[MetadataCategory.IOVMetaData]))
162
163 return cfg