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."]
 
   32     aod_items += [
"xAOD::TrackParticleContainer#MuonSpectrometerTrackParticles"]
 
   33     aod_items += [
"xAOD::TrackParticleAuxContainer#MuonSpectrometerTrackParticlesAux."]
 
   34     aod_items += [
"xAOD::TrackParticleContainer#MuonSpectrometerOnlyTrackParticles"]
 
   35     aod_items += [
"xAOD::TrackParticleAuxContainer#MuonSpectrometerOnlyTrackParticlesAux."]
 
   37     aod_items += [
"xAOD::TrackParticleContainer#MSonlyTracklets"]
 
   38     aod_items += [
"xAOD::TrackParticleAuxContainer#MSonlyTrackletsAux."]
 
   39     aod_items += [
"xAOD::VertexContainer#MSDisplacedVertex"]
 
   40     aod_items += [
"xAOD::VertexAuxContainer#MSDisplacedVertexAux."]
 
   42     if flags.Input.isMC 
or flags.Overlay.DataOverlay:
 
   44         aod_items += [
"xAOD::TruthParticleContainer#MuonTruthParticles"]
 
   45         aod_items += [
"xAOD::TruthParticleAuxContainer#MuonTruthParticlesAux."]
 
   48         aod_items += [
"xAOD::MuonSegmentContainer#MuonTruthSegments"]
 
   49         aod_items += [
"xAOD::MuonSegmentAuxContainer#MuonTruthSegmentsAux.-localSegPars"]
 
   53     esd_items += aod_items
 
   56     if flags.Detector.EnableMM:
 
   57         esd_items += [
"Muon::MMPrepDataContainer#MM_Measurements"]
 
   58         esd_items += [
"xAOD::NSWMMTPRDOContainer#*", 
"xAOD::NSWMMTPRDOAuxContainer#*"]
 
   59     if flags.Detector.EnablesTGC:
 
   60         esd_items += [
"Muon::sTgcPrepDataContainer#STGC_Measurements"]
 
   61         esd_items += [
"Muon::NSW_PadTriggerDataContainer#NSW_PadTrigger_RDO"]
 
   62         esd_items += [
"xAOD::NSWTPRDOContainer#*", 
"xAOD::NSWTPRDOAuxContainer#*"]
 
   65     if flags.Detector.EnableCSC:
 
   66         esd_items += [
"Muon::CscPrepDataContainer#CSC_Clusters"]
 
   67         esd_items += [
"Muon::CscStripPrepDataContainer#CSC_Measurements"]
 
   68     esd_items += [
"Muon::RpcPrepDataContainer#RPC_Measurements"]
 
   69     esd_items += [
"Muon::TgcPrepDataContainer#TGC_MeasurementsAllBCs"]
 
   70     esd_items += [
"Muon::MdtPrepDataContainer#MDT_DriftCircles"]
 
   72     if flags.Muon.writexAODPRD:
 
   73         esd_items += [
"xAOD::MdtDriftCircleContainer#xMdtDriftCircles", 
"xAOD::MdtDriftCircleAuxContainer#xMdtDriftCirclesAux." ]
 
   74         esd_items += [
"xAOD::MdtTwinDriftCircleContainer#xMdtTwinDriftCircles", 
"xAOD::MdtTwinDriftCircleAuxContainer#xMdtTwinDriftCirclesAux." ]
 
   75         esd_items += [
"xAOD::sTgcStripContainer#xAODsTgcStrips", 
"xAOD::sTgcStripAuxContainer#xAODsTgcStripsAux." ]
 
   76         esd_items += [
"xAOD::sTgcPadContainer#xAODsTgcPads", 
"xAOD::sTgcPadAuxContainer#xAODsTgcPadsAux." ]
 
   77         esd_items += [
"xAOD::sTgcWireContainer#xAODsTgcWires", 
"xAOD::sTgcWireAuxContainer#xAODsTgcWiresAux." ]
 
   78         esd_items += [
"xAOD::MMClusterContainer#xAODMMClusters", 
"xAOD::MMClusterAuxContainer#xAODMMClustersAux." ]
 
   79         esd_items += [
"xAOD::TgcStripContainer#xTgcStrips", 
"xAOD::TgcStripAuxContainer#xTgcStripsAux." ]
 
   80         esd_items += [
"xAOD::RpcStripContainer#xRpcStrips", 
"xAOD::RpcStripAuxContainer#xRpcStripsAux." ]
 
   81         esd_items += [
"xAOD::RpcStrip2DContainer#xRpcBILStrips", 
"xAOD::RpcStrip2DAuxContainer#xRpcBILStripsAux." ]
 
   85     esd_items += [
"Muon::TgcCoinDataContainer#TrigT1CoinDataCollection"]
 
   86     esd_items += [
"Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionPriorBC"]
 
   87     esd_items += [
"Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionNextBC"]
 
   88     esd_items += [
"Muon::TgcCoinDataContainer#TrigT1CoinDataCollectionNextNextBC"]
 
   89     esd_items += [
"Muon::RpcCoinDataContainer#RPC_triggerHits"]
 
   90     esd_items += [
"RpcSectorLogicContainer#RPC_SECTORLOGIC"]
 
   93     if flags.Output.doWriteRDO 
or flags.Muon.doWriteRpcRDO:
 
   94         esd_items += [
"RpcPadContainer#RPCPAD"]
 
   97     esd_items += [
"Trk::SegmentCollection#NCB_TrackMuonSegments"]
 
  100     esd_items += [
"TrackCollection#MuonSpectrometerTracks"]
 
  101     if flags.Muon.runCommissioningChain:
 
  102         esd_items += [
"TrackCollection#EMEO_MuonSpectrometerTracks"]
 
  103     if flags.Detector.EnableMM 
or flags.Detector.EnablesTGC:
 
  104         esd_items += [
"Trk::SegmentCollection#TrackMuonNSWSegments"]
 
  108         esd_items += [
"TrackRecordCollection#MuonEntryLayerFilter"]
 
  109         esd_items += [
"TrackRecordCollection#MuonExitLayerFilter"]
 
  111         esd_items += [
"PRD_MultiTruthCollection#MDT_TruthMap",
 
  112                       "PRD_MultiTruthCollection#RPC_TruthMap", 
"PRD_MultiTruthCollection#TGC_TruthMap"]
 
  113         if flags.Detector.EnableCSC:
 
  114             esd_items += [
"PRD_MultiTruthCollection#CSC_TruthMap"]
 
  115         if flags.Detector.EnablesTGC:
 
  116             esd_items += [
"PRD_MultiTruthCollection#STGC_TruthMap"]
 
  117         if flags.Detector.EnableMM:
 
  118             esd_items += [
"PRD_MultiTruthCollection#MM_TruthMap"]
 
  121         esd_items += [
"DetailedTrackTruthCollection#MuonSpectrometerTracksTruth"]
 
  122         esd_items += [
"TrackTruthCollection#MuonSpectrometerTracksTruth"]
 
  124         if flags.Muon.writeSDOs:
 
  125             if flags.Detector.EnableCSC: esd_items+=[
"CscSimDataCollection#CSC_SDO"]
 
  126             esd_items+=[
"MuonSimDataCollection#MDT_SDO"]
 
  127             esd_items+=[
"MuonSimDataCollection#RPC_SDO"]
 
  128             esd_items+=[
"MuonSimDataCollection#TGC_SDO"]
 
  129             if flags.Detector.EnablesTGC: esd_items+=[
"MuonSimDataCollection#sTGC_SDO"]
 
  130             if flags.Detector.EnableMM: esd_items+=[
"MuonSimDataCollection#MM_SDO"]
 
  132     if flags.Output.doWriteESD:
 
  134     if flags.Output.doWriteAOD:
 
  141     from MuonConfig.MuonPrepDataConvConfig 
import MuonPrepDataConvCfg
 
  142     from MuonConfig.MuonRecToolsConfig 
import MuonTrackScoringToolCfg
 
  143     from MuonConfig.MuonGeometryConfig 
import MuonIdHelperSvcCfg
 
  144     from MuonConfig.MuonRecToolsConfig 
import MuonEDMHelperSvcCfg
 
  145     from TrkConfig.TrkTrackSummaryToolConfig 
import MuonTrackSummaryToolCfg
 
  146     from TrkConfig.AtlasExtrapolatorConfig 
import AtlasExtrapolatorCfg
 
  157     if flags.Muon.runCommissioningChain:
 
  159                                                           "MuonStandaloneTrackParticleCnvAlg_EMEO",
 
  160                                                           TrackContainerName=
"EMEO_MuonSpectrometerTracks",
 
  161                                                           xAODTrackParticlesFromTracksContainerName=
"EMEO_MuonSpectrometerTrackParticles"))
 
  165     if flags.Input.isMC  
or flags.Overlay.DataOverlay:
 
  167         if "MuonEntryLayerFilter" not in flags.Input.Collections 
and \
 
  168             (
"MuonEntryLayer" in flags.Input.Collections):
 
  169             result.addEventAlgo(CompFactory.TrackRecordFilter())
 
  170         if "MuonExitLayerFilter" not in flags.Input.Collections 
and \
 
  171             (
"MuonExitLayer" in flags.Input.Collections):
 
  172             result.addEventAlgo(CompFactory.TrackRecordFilter(
"TrackRecordFilterMuonExitLayer",
 
  173                                                               inputName=
"MuonExitLayer",
 
  174                                                               outputName=
"MuonExitLayerFilter"))
 
  177         track_cols = [
"MuonSpectrometerTracks"]
 
  178         track_colstp = [
"MuonSpectrometerTrackParticles"]
 
  179         if flags.Muon.runCommissioningChain:
 
  180             track_cols += [
"EMEO_MuonSpectrometerTracks"]
 
  181             track_colstp += [
"EMEO_MuonSpectrometerTrackParticles"]
 
  183         from MuonConfig.MuonTruthAlgsConfig 
import MuonDetailedTrackTruthMakerCfg
 
  185                                                     TrackCollectionNames=track_cols))
 
  187         for i 
in range(len(track_cols)):
 
  188             from TrkConfig.TrkTruthAlgsConfig 
import TrackTruthSelectorCfg, TrackParticleTruthAlgCfg
 
  192                                                   TrackParticleName=track_colstp[i]))
 
  196         if flags.Muon.makePRDs:
 
  197             if not flags.Muon.usePhaseIIGeoSetup:
 
  198                 from MuonConfig.MuonTruthAlgsConfig 
import MuonTruthAlgsCfg
 
  201                 from MuonTruthAlgsR4.MuonTruthAlgsConfig 
import MuonTruthAlgsCfg
 
  204     if flags.Muon.doMSVertex:
 
  205         msvertexrecotool = CompFactory.Muon.MSVertexRecoTool(
 
  206             MyExtrapolator=result.popToolsAndMerge(
 
  208             TGCKey=
'TGC_MeasurementsAllBCs' if not flags.Muon.useTGCPriorNextBC 
else 'TGC_Measurements')
 
  209         the_alg = CompFactory.MSVertexRecoAlg(
 
  210             name=
"MSVertexRecoAlg", MSVertexRecoTool=msvertexrecotool)
 
  212         result.addEventAlgo(the_alg)
 
  217     result.addPublicTool(result.popToolsAndMerge(
 
  220     result.addPublicTool(result.popToolsAndMerge(
 
  224     if flags.Output.doWriteESD 
or flags.Output.doWriteAOD:
 
  232         from MuonConfig.MuonConfigUtils 
import SetupMuonStandaloneConfigFlags
 
  235     from MuonConfig.MuonConfigUtils 
import SetupMuonStandaloneCA
 
  242     from SGComps.AddressRemappingConfig 
import InputRenameCfg
 
  244               "MuonSpectrometerTracks", 
"MuonSpectrometerTracks_old"))
 
  246     cfg.printConfig(withDetails=
True)
 
  250     oldRemaps = cfg.getService(
"AddressRemappingSvc").TypeKeyRenameMaps
 
  251     cfg.getService(
"AddressRemappingSvc").TypeKeyRenameMaps = [
 
  252         remap 
for remap 
in oldRemaps 
if "Trk::SegmentCollection" not in remap]
 
  254     f = 
open(
"MuonReconstruction.pkl", 
"wb")
 
  258     from MuonConfig.MuonConfigUtils 
import executeTest
 
  266         This config (made for r24.0 in Nov 2024) is used to: 
  267         1] Switch setup of the segment making in the NSW to loosen constrain on the IP 
  268         2] Adapt and switch off various criteria in TrackSteering/building to be able to reconstruct track from the non-standards (non-collision background) segments  
  272    cfg.getEventAlgo(
"MuonSegmentMaker").NSWSegmentMaker.SeedMMStereos=
False 
  273    cfg.getEventAlgo(
"MuonSegmentMaker").NSWSegmentMaker.IPConstraint=
False 
  277    cfg.getEventAlgo(
"MuonCreatorAlg").MuonCreatorTool.RequireMSOEforSA=
False 
  278    cfg.getEventAlgo(
"MuonCreatorAlg").MuonCreatorTool.RequireCaloForSA=
False 
  280    cfg.getEventAlgo(
"MuonCombinedMuonCandidateAlg").MuonCandidateTool.ExtrapolationStrategy=1
 
  283    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.SegSeedQCut = -2
 
  284    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.Seg2ndQCut  = -2
 
  285    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.SegOtherQCut  = -2 
 
  286    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.UseTightSegmentMatching  = 
False 
  288    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.DoTrackSegmentMatching = 
False 
  289    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.MooBuilderTool.CandidateMatchingTool.DoTrackSegmentMatching = 
False 
  290    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.DoTrackSegmentMatching = 
False 
  292    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.CandidateMatchingTool.DoTrackSegmentMatching = 
False 
  294    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.TrackRefinementTool.CandidateMatchingTool.DoTrackSegmentMatching = 
False 
  297    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.CandidateMatchingTool.SegmentMatchingTool.UseEndcapExtrapolationMatching = 
False 
  298    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.CandidateMatchingTool.SegmentMatchingTool.doThetaMatching = 
False 
  299    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.CandidateMatchingTool.SegmentMatchingTool.doPhiMatching   = 
False 
  302    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.SegmentMatchingTool.UseEndcapExtrapolationMatching = 
False 
  303    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.SegmentMatchingTool.doThetaMatching = 
False 
  304    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.TrackBuilderTool.CandidateMatchingTool.SegmentMatchingTool.doPhiMatching   = 
False 
  306    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.MooBuilderTool.CandidateMatchingTool.SegmentMatchingTool.UseEndcapExtrapolationMatching = 
False 
  307    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.MooBuilderTool.CandidateMatchingTool.SegmentMatchingTool.doThetaMatching = 
False 
  308    cfg.getEventAlgo(
"MuPatTrackBuilder").TrackSteering.MooBuilderTool.CandidateMatchingTool.SegmentMatchingTool.doPhiMatching   = 
False 
  312 if __name__ == 
"__main__":