23def StandaloneMuonOutputCfg(flags):
24 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
25 result = ComponentAccumulator()
26
27 aod_items = []
28 esd_items = []
29
30 if flags.Input.isMC or flags.Overlay.DataOverlay:
31
32 aod_items += ["xAOD::TruthParticleContainer#MuonTruthParticles"]
33 aod_items += ["xAOD::TruthParticleAuxContainer#MuonTruthParticlesAux."]
34
35
36 aod_items += ["xAOD::MuonSegmentContainer#MuonTruthSegments"]
37 aod_items += ["xAOD::MuonSegmentAuxContainer#MuonTruthSegmentsAux.-localSegPars"]
38
39 from AthenaConfiguration.Enums import Format
40 if (flags.Input.isMC or flags.Overlay.DataOverlay) and flags.Input.Format!=Format.BS:
41
42 if "MuonEntryLayerFilter" not in flags.Input.Collections and \
43 ("MuonEntryLayer" in flags.Input.Collections):
44 result.addEventAlgo(CompFactory.TrackRecordFilter())
45 if "MuonExitLayerFilter" not in flags.Input.Collections and \
46 ("MuonExitLayer" in flags.Input.Collections):
47 result.addEventAlgo(CompFactory.TrackRecordFilter("TrackRecordFilterMuonExitLayer",
48 inputName="MuonExitLayer",
49 outputName="MuonExitLayerFilter"))
50
51 esd_items += ["TrackRecordCollection#MuonEntryLayerFilter"]
52 esd_items += ["TrackRecordCollection#MuonExitLayerFilter"]
53
54
55
56 if flags.Muon.writeSDOs:
57 for item in ["MDT_SDO","RPC_SDO","TGC_SDO","MM_SDO","sTGC_SDO"]:
58 esd_items += [f"xAOD::MuonSimHitContainer#{item}", f"xAOD::MuonSimHitAuxContainer#{item}Aux."]
59
60
61
62 exclude = ["", "mdtTrkPrdLink", "rpcTrkPrdLink", "tgcTrkPrdLink", "segmentFitDriftSign"]
63 contList = [("MdtDriftCircle", "xMdtDriftCircles"),
64 ("MdtTwinDriftCircle", "xMdtTwinDriftCircles"),
65 ("sTgcStrip", "xAODsTgcStrips"),
66 ("sTgcPad", "xAODsTgcPads"),
67 ("sTgcWire", "xAODsTgcWires"),
68 ("MMCluster", "xAODMMClusters"),
69 ("TgcStrip", "xTgcStrips"),
70 ("CombinedMuonStrip", "CombinedMuonPrds")]
71
72 from AthenaConfiguration.Enums import LHCPeriod
73 if flags.GeoModel.Run >= LHCPeriod.Run4:
74 contList += [ ("RpcStrip", "xRpcStrips" ), ("RpcStrip2D", "xRpcBILStrips") ]
75 else:
76 contList += [("RpcStrip", "xRpcMeasurements")]
77
78 for cont_t, cont_name in contList:
79 esd_items+=[f"xAOD::{cont_t}Container#{cont_name}",
80 "xAOD::{cont_t}AuxContainer#{cont_name}Aux{exclude}".format(
81 cont_t = cont_t,cont_name = cont_name,
82 exclude = ".-".join(exclude))]
83
84
85 aod_items += ["xAOD::MuonSegmentContainer#MsSegments"]
86 aod_items += ["xAOD::MuonSegmentAuxContainer#MsSegmentsAux.-localSegPars.-parentSegment.-localSegCov"]
87
88
89 for trk in ["MuonMsAtIpTrackParticles", "MuonMsTrackParticles","MuonSTACOTrackParticles"]:
90 aod_items += [f"xAOD::TrackParticleContainer#{trk}",
91 f"xAOD::TrackParticleAuxContainer#{trk}Aux."]
92
93 if flags.Output.doWriteESD:
94 from ActsConfig.ActsEventCnvConfig import ActsToXAODTrackConverterAlgCfg
95 result.merge(ActsToXAODTrackConverterAlgCfg(flags, name = "MsTracksToXAODTrackConverterAlg",
96 InputActsTracksLocation = "MuonMsTracks",
97 OutputActsTracksLocation="MuonMsTracks"))
98 esd_items += MuonTrackContainersToPersistify("MuonMs")
99 if flags.Muon.buildMETrack:
100 result.merge(ActsToXAODTrackConverterAlgCfg(flags, name = "MsAtIpTracksToXAODTrackConverterAlg",
101 InputActsTracksLocation = "MuonMsAtIpTracks",
102 OutputActsTracksLocation="MuonMsAtIpTracks"))
103 esd_items += MuonTrackContainersToPersistify("MuonMsAtIp")
104
105 aod_items += ["xAOD::MuonContainer#Muons"]
106 aod_items += ["xAOD::MuonAuxContainerR4#MuonsAux."]
107
108 aod_items += ["xAOD::MuonContainer#MuonsLRT"]
109 aod_items += ["xAOD::MuonAuxContainerR4#MuonsLRTAux."]
110
111 esd_items += aod_items
112
113 if flags.Output.doWriteESD:
114 result.merge(OutputStreamCfg(flags, "ESD", esd_items))
115 if flags.Output.doWriteAOD:
116 result.merge(OutputStreamCfg(flags, "AOD", aod_items))
117 return result
118
119