4 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
5 from AthenaConfiguration.ComponentFactory
import CompFactory
8 from MuonConfig.MuonSegmentFindingConfig
import MuonSegmentFindingCfg
9 from MuonConfig.MuonTrackBuildingConfig
import MuonTrackBuildingCfg
10 from xAODTrackingCnv.xAODTrackingCnvConfig
import MuonStandaloneTrackParticleCnvAlgCfg
13 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
17 from TrkEventCnvTools.TrkEventCnvToolsConfig
import (
18 TrkEventCnvSuperToolCfg)
22 if flags.Detector.EnableMM
or flags.Detector.EnablesTGC:
23 aod_items += [
"xAOD::TrackParticleContainer#EMEO_MuonSpectrometerTrackParticles"]
24 aod_items += [
"xAOD::TrackParticleAuxContainer#EMEO_MuonSpectrometerTrackParticlesAux."]
25 aod_items += [
"xAOD::MuonSegmentContainer#xAODNSWSegments"]
26 aod_items += [
"xAOD::MuonSegmentAuxContainer#xAODNSWSegmentsAux."]
28 aod_items += [
"xAOD::MuonSegmentContainer#NCB_MuonSegments"]
29 aod_items += [
"xAOD::MuonSegmentAuxContainer#NCB_MuonSegmentsAux."]
31 if flags.Muon.scheduleActsReco:
32 aod_items += [
"xAOD::MuonSegmentContainer#MuonSegmentsFromR4"]
33 aod_items += [
"xAOD::MuonSegmentAuxContainer#MuonSegmentsFromR4Aux.-localSegPars.-parentSegment"]
36 aod_items += [
"xAOD::TrackParticleContainer#MuonSpectrometerTrackParticles"]
37 aod_items += [
"xAOD::TrackParticleAuxContainer#MuonSpectrometerTrackParticlesAux."]
38 aod_items += [
"xAOD::TrackParticleContainer#MuonSpectrometerOnlyTrackParticles"]
39 aod_items += [
"xAOD::TrackParticleAuxContainer#MuonSpectrometerOnlyTrackParticlesAux."]
41 aod_items += [
"xAOD::TrackParticleContainer#MSonlyTracklets"]
42 aod_items += [
"xAOD::TrackParticleAuxContainer#MSonlyTrackletsAux."]
43 aod_items += [
"xAOD::VertexContainer#MSDisplacedVertex"]
44 aod_items += [
"xAOD::VertexAuxContainer#MSDisplacedVertexAux."]
46 if flags.Input.isMC
or flags.Overlay.DataOverlay:
48 aod_items += [
"xAOD::TruthParticleContainer#MuonTruthParticles"]
49 aod_items += [
"xAOD::TruthParticleAuxContainer#MuonTruthParticlesAux."]
52 aod_items += [
"xAOD::MuonSegmentContainer#MuonTruthSegments"]
53 aod_items += [
"xAOD::MuonSegmentAuxContainer#MuonTruthSegmentsAux.-localSegPars"]
57 esd_items += aod_items
60 if flags.Detector.EnableMM:
61 esd_items += [
"Muon::MMPrepDataContainer#MM_Measurements"]
62 esd_items += [
"xAOD::NSWMMTPRDOContainer#*",
"xAOD::NSWMMTPRDOAuxContainer#*"]
63 if flags.Detector.EnablesTGC:
64 esd_items += [
"Muon::sTgcPrepDataContainer#STGC_Measurements"]
65 esd_items += [
"Muon::NSW_PadTriggerDataContainer#NSW_PadTrigger_RDO"]
66 esd_items += [
"xAOD::NSWTPRDOContainer#*",
"xAOD::NSWTPRDOAuxContainer#*"]
69 if flags.Detector.EnableCSC:
70 esd_items += [
"Muon::CscPrepDataContainer#CSC_Clusters"]
71 esd_items += [
"Muon::CscStripPrepDataContainer#CSC_Measurements"]
72 esd_items += [
"Muon::RpcPrepDataContainer#RPC_Measurements"]
73 esd_items += [
"Muon::TgcPrepDataContainer#TGC_MeasurementsAllBCs"]
74 esd_items += [
"Muon::MdtPrepDataContainer#MDT_DriftCircles"]
76 if flags.Muon.writexAODPRD:
77 esd_items += [
"xAOD::MdtDriftCircleContainer#xMdtDriftCircles",
"xAOD::MdtDriftCircleAuxContainer#xMdtDriftCirclesAux." ]
78 esd_items += [
"xAOD::MdtTwinDriftCircleContainer#xMdtTwinDriftCircles",
"xAOD::MdtTwinDriftCircleAuxContainer#xMdtTwinDriftCirclesAux." ]
79 esd_items += [
"xAOD::sTgcStripContainer#xAODsTgcStrips",
"xAOD::sTgcStripAuxContainer#xAODsTgcStripsAux." ]
80 esd_items += [
"xAOD::sTgcPadContainer#xAODsTgcPads",
"xAOD::sTgcPadAuxContainer#xAODsTgcPadsAux." ]
81 esd_items += [
"xAOD::sTgcWireContainer#xAODsTgcWires",
"xAOD::sTgcWireAuxContainer#xAODsTgcWiresAux." ]
82 esd_items += [
"xAOD::MMClusterContainer#xAODMMClusters",
"xAOD::MMClusterAuxContainer#xAODMMClustersAux." ]
83 esd_items += [
"xAOD::TgcStripContainer#xTgcStrips",
"xAOD::TgcStripAuxContainer#xTgcStripsAux." ]
84 esd_items += [
"xAOD::RpcStripContainer#xRpcStrips",
"xAOD::RpcStripAuxContainer#xRpcStripsAux." ]
85 esd_items += [
"xAOD::RpcStrip2DContainer#xRpcBILStrips",
"xAOD::RpcStrip2DAuxContainer#xRpcBILStripsAux." ]
90 esd_items += [
"Muon::TgcCoinDataContainer#TrigT1CoinDataCollection"]
91 esd_items += [
"Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionPriorBC"]
92 esd_items += [
"Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionNextBC"]
93 esd_items += [
"Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionNextNextBC"]
94 esd_items += [
"Muon::RpcCoinDataContainer#RPC_triggerHits"]
95 esd_items += [
"RpcSectorLogicContainer#RPC_SECTORLOGIC"]
98 if flags.Output.doWriteRDO
or flags.Muon.doWriteRpcRDO:
99 esd_items += [
"RpcPadContainer#RPCPAD"]
102 esd_items += [
"Trk::SegmentCollection#NCB_TrackMuonSegments"]
105 esd_items += [
"TrackCollection#MuonSpectrometerTracks"]
106 if flags.Muon.runCommissioningChain:
107 esd_items += [
"TrackCollection#EMEO_MuonSpectrometerTracks"]
108 if flags.Detector.EnableMM
or flags.Detector.EnablesTGC:
109 esd_items += [
"Trk::SegmentCollection#TrackMuonNSWSegments"]
113 esd_items += [
"TrackRecordCollection#MuonEntryLayerFilter"]
114 esd_items += [
"TrackRecordCollection#MuonExitLayerFilter"]
116 esd_items += [
"PRD_MultiTruthCollection#MDT_TruthMap",
117 "PRD_MultiTruthCollection#RPC_TruthMap",
"PRD_MultiTruthCollection#TGC_TruthMap"]
118 if flags.Detector.EnableCSC:
119 esd_items += [
"PRD_MultiTruthCollection#CSC_TruthMap"]
120 if flags.Detector.EnablesTGC:
121 esd_items += [
"PRD_MultiTruthCollection#STGC_TruthMap"]
122 if flags.Detector.EnableMM:
123 esd_items += [
"PRD_MultiTruthCollection#MM_TruthMap"]
126 esd_items += [
"DetailedTrackTruthCollection#MuonSpectrometerTracksTruth"]
127 esd_items += [
"TrackTruthCollection#MuonSpectrometerTracksTruth"]
129 if flags.Muon.writeSDOs:
130 if flags.Detector.EnableCSC: esd_items+=[
"CscSimDataCollection#CSC_SDO"]
131 esd_items+=[
"MuonSimDataCollection#MDT_SDO"]
132 esd_items+=[
"MuonSimDataCollection#RPC_SDO"]
133 esd_items+=[
"MuonSimDataCollection#TGC_SDO"]
134 if flags.Detector.EnablesTGC: esd_items+=[
"MuonSimDataCollection#sTGC_SDO"]
135 if flags.Detector.EnableMM: esd_items+=[
"MuonSimDataCollection#MM_SDO"]
137 if flags.Muon.writexAODPRD:
138 for item
in [
"MDT_SDO",
"RPC_SDO",
"TGC_SDO",
"MM_SDO",
"sTGC_SDO"]:
139 esd_items += [f
"xAOD::MuonSimHitContainer#{item}", f
"xAOD::MuonSimHitAuxContainer#{item}Aux."]
141 if flags.Output.doWriteESD:
143 if flags.Output.doWriteAOD:
150 from MuonConfig.MuonPrepDataConvConfig
import MuonPrepDataConvCfg
151 from MuonConfig.MuonRecToolsConfig
import MuonTrackScoringToolCfg
152 from MuonConfig.MuonGeometryConfig
import MuonIdHelperSvcCfg
153 from MuonConfig.MuonRecToolsConfig
import MuonEDMHelperSvcCfg
154 from TrkConfig.TrkTrackSummaryToolConfig
import MuonTrackSummaryToolCfg
155 from TrkConfig.AtlasExtrapolatorConfig
import AtlasExtrapolatorCfg
166 if flags.Muon.runCommissioningChain:
168 "MuonStandaloneTrackParticleCnvAlg_EMEO",
169 TrackContainerName=
"EMEO_MuonSpectrometerTracks",
170 xAODTrackParticlesFromTracksContainerName=
"EMEO_MuonSpectrometerTrackParticles"))
174 if flags.Input.isMC
or flags.Overlay.DataOverlay:
176 if "MuonEntryLayerFilter" not in flags.Input.Collections
and \
177 (
"MuonEntryLayer" in flags.Input.Collections):
178 result.addEventAlgo(CompFactory.TrackRecordFilter())
179 if "MuonExitLayerFilter" not in flags.Input.Collections
and \
180 (
"MuonExitLayer" in flags.Input.Collections):
181 result.addEventAlgo(CompFactory.TrackRecordFilter(
"TrackRecordFilterMuonExitLayer",
182 inputName=
"MuonExitLayer",
183 outputName=
"MuonExitLayerFilter"))
186 track_cols = [
"MuonSpectrometerTracks"]
187 track_colstp = [
"MuonSpectrometerTrackParticles"]
188 if flags.Muon.runCommissioningChain:
189 track_cols += [
"EMEO_MuonSpectrometerTracks"]
190 track_colstp += [
"EMEO_MuonSpectrometerTrackParticles"]
192 from MuonConfig.MuonTruthAlgsConfig
import MuonDetailedTrackTruthMakerCfg
194 TrackCollectionNames=track_cols))
196 if not flags.Muon.scheduleActsReco:
197 for i
in range(len(track_cols)):
198 from TrkConfig.TrkTruthAlgsConfig
import TrackTruthSelectorCfg, TrackParticleTruthAlgCfg
201 TrackParticleName=track_colstp[i]))
205 if flags.Muon.makePRDs:
206 if not flags.Muon.usePhaseIIGeoSetup:
207 from MuonConfig.MuonTruthAlgsConfig
import MuonTruthAlgsCfg
210 from MuonTruthAlgsR4.MuonTruthAlgsConfig
import MuonTruthAlgsCfg
213 if flags.Muon.doMSVertex:
214 msvertexrecotool = CompFactory.Muon.MSVertexRecoTool(
215 MyExtrapolator=result.popToolsAndMerge(
217 TGCKey=
'TGC_MeasurementsAllBCs' if not flags.Muon.useTGCPriorNextBC
else 'TGC_Measurements')
218 the_alg = CompFactory.MSVertexRecoAlg(
219 name=
"MSVertexRecoAlg", MSVertexRecoTool=msvertexrecotool)
221 result.addEventAlgo(the_alg)
226 result.addPublicTool(result.popToolsAndMerge(
229 result.addPublicTool(result.popToolsAndMerge(
233 if flags.Output.doWriteESD
or flags.Output.doWriteAOD:
241 from MuonConfig.MuonConfigUtils
import SetupMuonStandaloneConfigFlags
244 from MuonConfig.MuonConfigUtils
import SetupMuonStandaloneCA
251 from SGComps.AddressRemappingConfig
import InputRenameCfg
253 "MuonSpectrometerTracks",
"MuonSpectrometerTracks_old"))
255 cfg.printConfig(withDetails=
True)
259 oldRemaps = cfg.getService(
"AddressRemappingSvc").TypeKeyRenameMaps
260 cfg.getService(
"AddressRemappingSvc").TypeKeyRenameMaps = [
261 remap
for remap
in oldRemaps
if "Trk::SegmentCollection" not in remap]
263 f =
open(
"MuonReconstruction.pkl",
"wb")
267 from MuonConfig.MuonConfigUtils
import executeTest
275 This config (made for r24.0 in Nov 2024) is used to:
276 1] Switch setup of the segment making in the NSW to loosen constrain on the IP
277 2] Adapt and switch off various criteria in TrackSteering/building to be able to reconstruct track from the non-standards (non-collision background) segments
281 cfg.getEventAlgo(
"MuonSegmentMaker").NSWSegmentMaker.SeedMMStereos=
False
282 cfg.getEventAlgo(
"MuonSegmentMaker").NSWSegmentMaker.IPConstraint=
False
286 cfg.getEventAlgo(
"MuonCreatorAlg").MuonCreatorTool.RequireMSOEforSA=
False
287 cfg.getEventAlgo(
"MuonCreatorAlg").MuonCreatorTool.RequireCaloForSA=
False
289 cfg.getEventAlgo(
"MuonCombinedMuonCandidateAlg").MuonCandidateTool.ExtrapolationStrategy=1
292 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.SegSeedQCut = -2
293 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.Seg2ndQCut = -2
294 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.SegOtherQCut = -2
295 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.UseTightSegmentMatching =
False
297 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.DoTrackSegmentMatching =
False
298 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.MooBuilderTool.CandidateMatchingTool.DoTrackSegmentMatching =
False
299 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.DoTrackSegmentMatching =
False
301 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.CandidateMatchingTool.DoTrackSegmentMatching =
False
303 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.TrackRefinementTool.CandidateMatchingTool.DoTrackSegmentMatching =
False
306 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.CandidateMatchingTool.SegmentMatchingTool.UseEndcapExtrapolationMatching =
False
307 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.CandidateMatchingTool.SegmentMatchingTool.doThetaMatching =
False
308 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.CandidateMatchingTool.SegmentMatchingTool.doPhiMatching =
False
311 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.SegmentMatchingTool.UseEndcapExtrapolationMatching =
False
312 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.SegmentMatchingTool.doThetaMatching =
False
313 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.SegmentMatchingTool.doPhiMatching =
False
315 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.MooBuilderTool.CandidateMatchingTool.SegmentMatchingTool.UseEndcapExtrapolationMatching =
False
316 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.MooBuilderTool.CandidateMatchingTool.SegmentMatchingTool.doThetaMatching =
False
317 cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.MooBuilderTool.CandidateMatchingTool.SegmentMatchingTool.doPhiMatching =
False
321 if __name__ ==
"__main__":