8 from AthenaConfiguration.ComponentFactory
import CompFactory
9 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
10 from AthenaConfiguration.Enums
import BeamType, Format
13 from TrkConfig.TrkGlobalChi2FitterConfig
import MCTBFitterCfg, MCTBSLFitterCfg, MCTBSLFitterMaterialFromTrackCfg
14 from MuonConfig.MuonRecToolsConfig
import MuonAmbiProcessorCfg, MuonTrackCleanerCfg, MuonEDMPrinterToolCfg
15 from MuonConfig.MuonCondAlgConfig
import MuonStationIntersectCondAlgCfg
16 from TrkConfig.AtlasExtrapolatorConfig
import MuonStraightLineExtrapolatorCfg
17 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig
import MdtCalibWindowNumber
22 kwargs.setdefault(
"UseTightAssociation",flags.Beam.Type
is BeamType.Collisions)
23 kwargs.setdefault(
"UseCosmics", flags.Beam.Type
is not BeamType.Collisions )
24 the_tool = CompFactory.MuonCombinePatternTool(name,**kwargs)
25 result.setPrivateTools(the_tool)
30 if flags.Beam.Type
is not BeamType.Collisions:
31 kwargs.setdefault(
"UseCosmics",
True)
32 kwargs.setdefault(
"NumberOfMaximaPerIterations", 1)
33 the_tool = CompFactory.MuonHoughPatternTool(name,**kwargs)
34 result.setPrivateTools(the_tool)
38 if flags.Beam.Type
is BeamType.Collisions:
39 kwargs.setdefault(
"MDT_TDC_cut",
False)
40 kwargs.setdefault(
"RecordAll",
False)
43 kwargs.setdefault(
"DoSummary", flags.Muon.printSummary)
44 the_tool = CompFactory.Muon.MuonHoughPatternFinderTool(name,**kwargs)
45 result.setPrivateTools(the_tool)
53 doSegmentT0Fit = kwargs.pop(
'doSegmentT0Fit', flags.Muon.doSegmentT0Fit)
55 kwargs.setdefault(
"FinderDebugLevel", 0)
57 if doSegmentT0Fit
and not (flags.Muon.MuonTrigger
and flags.Beam.Type
in [BeamType.SingleBeam, BeamType.Cosmics]):
58 kwargs.setdefault(
"AssociationRoadWidth", 3.)
59 kwargs.setdefault(
"MDTAssocationPullcut", 3.)
60 kwargs.setdefault(
"RecoverMdtOutliers",
False)
63 if flags.Beam.Type
in [BeamType.SingleBeam, BeamType.Cosmics]
or flags.Input.isMC
is False:
64 kwargs.setdefault(
"AssociationRoadWidth", 2.)
65 kwargs.setdefault(
"MDTAssocationPullcut", 4.)
66 kwargs.setdefault(
"RecoverMdtOutliers",
True )
69 if flags.Muon.enableCurvedSegmentFinding:
70 kwargs.setdefault(
"DoCurvedSegmentFinder",
True)
71 result.setPrivateTools(CompFactory.Muon.MdtMathSegmentFinder(name=name,**kwargs))
75 from TrkConfig.TrkExRungeKuttaPropagatorConfig
import RungeKuttaPropagatorCfg
77 kwargs.setdefault(
"SLPropagator",
78 result.popPrivateTools())
79 kwargs.setdefault(
"SLFitter",
81 kwargs.setdefault(
"CurvedFitter",
85 result.setPrivateTools(CompFactory.Muon.MuonSegmentFittingTool(name,**kwargs))
90 kwargs.setdefault(
"FloatSegDirection", flags.Beam.Type
is BeamType.Cosmics)
91 result.setPrivateTools(CompFactory.TrkDriftCircleMath.MdtSegmentT0Fitter(name, **kwargs))
95 name='DCMathSegmentMaker',
99 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig
import MdtDriftCircleOnTrackCreatorCfg, TriggerChamberClusterOnTrackCreatorCfg, MdtCalibToolForRotsCfg
100 from MuonCombinedConfig.MuonCombinedRecToolsConfig
import MuonSegmentSelectionToolCfg
117 from MuonConfig.MuonRecToolsConfig
import MuonEDMHelperSvcCfg
119 kwargs.setdefault(
"RefitSegment",
True)
120 kwargs.setdefault(
"AssumePointingPhi", flags.Beam.Type
is not BeamType.Cosmics)
121 kwargs.setdefault(
"OutputFittedT0",
True)
125 kwargs.setdefault(
"UsePreciseError",
True)
126 kwargs.setdefault(
"SinAngleCut", 0.4)
128 doSegmentT0Fit = doSegmentT0Fit
or flags.Beam.Type
in [BeamType.SingleBeam, BeamType.Cosmics]
129 if flags.Beam.Type
in [BeamType.SingleBeam, BeamType.Cosmics]:
130 kwargs.setdefault(
"SinAngleCut", 0.9)
131 kwargs.setdefault(
"AddUnassociatedPhiHits",
True)
132 kwargs.setdefault(
"RecoverBadRpcCabling",
True)
133 kwargs.setdefault(
"CurvedErrorScaling",
False)
134 elif not flags.Input.isMC:
135 kwargs.setdefault(
"AddUnassociatedPhiHits",
True)
136 kwargs.setdefault(
"RecoverBadRpcCabling",
True)
138 if flags.Muon.updateSegmentSecondCoordinate:
139 kwargs.setdefault(
"UpdatePhiUsingPhiHits",
True)
141 if flags.Muon.enableCurvedSegmentFinding:
142 kwargs.setdefault(
"CurvedErrorScaling",
False)
143 kwargs.setdefault(
"PreciseErrorScale", 1)
144 kwargs.setdefault(
"UsePreciseError",
True)
154 kwargs.setdefault(
"EDMPrinter", edm_printer )
157 name=
"MdtDriftCircleOnTrackCreatorAdjustableT0",
160 DoTofCorrection=
True,
162 kwargs.setdefault(
"MdtCreatorT0", result.getPrimaryAndMerge(mdt_dcot_CA))
163 kwargs.setdefault(
"MdtSegmentFinder", result.getPrimaryAndMerge(
MdtMathSegmentFinderCfg(flags, name=
'MdtMathT0FitSegmentFinder', doSegmentT0Fit=
True)))
165 kwargs.setdefault(
"MdtCreatorT0",
"")
168 kwargs.setdefault(
"SegmentFitter", result.getPrimaryAndMerge(
MuonSegmentFittingToolCfg(flags, name=
"MuonSegmentFittingTool")))
172 dc_segment_maker = CompFactory.Muon.DCMathSegmentMaker(name=name, **kwargs)
173 result.setPrivateTools(dc_segment_maker)
179 CscAlignmentTool=CompFactory.CscAlignmentTool
180 etaposAlignConsts = [
181 0.0, -0.0902347, -0.0984321, -0.141175,
182 0.0, -0.166412, -0.150399, -0.18592,
183 0.0, -0.0544449, 0.101448, -0.0433321,
184 0.0, -0.047769, -0.156247, -0.0854826,
185 0.0, -0.0970101, -0.227578, -0.301079,
186 0.0, -0.152912, -0.365218, -0.314042,
187 0.0, 0.0338696, -0.264766, -0.224567,
188 0.0, -0.107372, -0.16099, -0.13508,
189 0.0, -0.0663979, -0.0312645, -0.130711,
190 0.0, -0.249974, -0.269372, -0.353648,
191 0.0, -0.194175, 0.0238348, -0.188433,
192 0.0, 0.0977346, 0.0492461, 0.150434,
193 0.0, 0.0444637, -0.0871214, -0.0627541,
194 0.0, 0.0347245, -0.0226186, -0.0826478,
195 0.0, -0.00408879, -0.0638005, -0.206868,
196 0.0, 0.0331328, 0.0402103, 0.118611,
197 0.0, -0.0634537, -0.0516743, 0.0045364,
198 0.0, -0.0957718, -0.235246, -0.439811,
199 0.0, -0.163504, -0.0129115, 0.00140143,
200 0.0, -0.182903, -0.0503858, -0.207799,
201 0.0, -0.0970927, 0, 0.124744,
202 0.0, -0.0169602, -0.0527447, 0.0319154,
203 0.0, -0.176499, -0.196542, -0.0846979,
204 0.0, 0.0589994, 0.0131431, 0.0461769,
205 0.0, -0.0237507, -0.0307316, 0.144429,
206 0.0, -0.0144483, -0.0328234, -0.00553684,
207 0.0, 0.113188, -0.176182, 0.0635706,
208 0.0, -0.109776, -0.727705, -0.756824,
209 0.0, -0.0553061, -0.056162, -0.0336955,
210 0.0, -0.070077, -0.127203, -0.140082,
211 0.0, -0.0844368, -0.0735331, -0.016667,
212 0.0, 0.0426443, -0.153659, -0.129711,
215 phiposAlignConsts = [
249 kwargs.setdefault(
"phiposAlignConsts", phiposAlignConsts)
250 kwargs.setdefault(
"etaposAlignConsts", etaposAlignConsts)
251 kwargs.setdefault(
"useAlignment", flags.Input.isMC
is False and flags.Muon.Align.UseILines
is False )
258 QratCscClusterFitter=CompFactory.QratCscClusterFitter
261 0.000000, 0.000000, 0.000000, 0.000000, 0.0699381, 0.178291, 0.271303, 0.345611,
262 0.400738, 0.452451, 0.493772, 0.526792, 0.553845, 0.580111, 0.603337, 0.624749,
263 0.646065, 0.663924, 0.681897, 0.701345, 0.716067, 0.730324, 0.743168, 0.760598,
264 0.773341, 0.786406, 0.798358, 0.811339, 0.820949, 0.832676, 0.843917, 0.85412,
265 0.863914, 0.873229, 0.88251, 0.892856, 0.903296, 0.910067, 0.917892, 0.928028,
266 0.93461, 0.943679, 0.951617, 0.958326, 0.964428, 0.97341, 0.978204, 0.987075,
270 0.000000, 0.000000, 0.000000, 0.000000, 0.0290177, 0.0834867, 0.188683, 0.269967,
271 0.334887, 0.393036, 0.440317, 0.481884, 0.51725, 0.545107, 0.56959, 0.592327,
272 0.614087, 0.635344, 0.655252, 0.672766, 0.690929, 0.707293, 0.722742, 0.738323,
273 0.753562, 0.76749, 0.780983, 0.79354, 0.806521, 0.818085, 0.829987, 0.841443,
274 0.853723, 0.863393, 0.87431, 0.883139, 0.892962, 0.902803, 0.911276, 0.921417,
275 0.929387, 0.938106, 0.947072, 0.954406, 0.961692, 0.97055, 0.978517, 0.985133,
278 kwargs.setdefault(
"qratcor_csl_eta",qratcor_csl_eta)
279 kwargs.setdefault(
"qratcor_css_eta",qratcor_css_eta)
281 kwargs.setdefault(
"CscAlignmentTool", csc_align_tool )
287 CalibCscStripFitter=CompFactory.CalibCscStripFitter
288 from MuonConfig.MuonCalibrationConfig
import CscCalibToolCfg
290 kwargs.setdefault(
"cscCalibTool", result.popPrivateTools() )
295 CscClusterUtilTool=CompFactory.CscClusterUtilTool
298 kwargs.setdefault(
"strip_fitter", result.popPrivateTools() )
301 kwargs.setdefault(
"precision_fitter", acc.popPrivateTools() )
307 CscSegmentUtilTool=CompFactory.CscSegmentUtilTool
308 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig
import CscClusterOnTrackCreatorCfg
311 csc_cluster_creator = result.popPrivateTools()
312 kwargs.setdefault(
"rot_creator", csc_cluster_creator )
318 Csc2dSegmentMaker=CompFactory.Csc2dSegmentMaker
320 if 'segmentTool' not in kwargs:
322 csc_segment_util_tool = acc.getPrimary()
323 result.addPublicTool(csc_segment_util_tool)
324 kwargs.setdefault(
'segmentTool', csc_segment_util_tool)
330 result.setPrivateTools(csc_segment_maker)
337 kwargs.setdefault(
"segmentTool", result.getPrimary() )
339 result.setPrivateTools(CompFactory.Csc4dSegmentMaker(name=name, **kwargs))
344 from MuonConfig.MuonRecToolsConfig
import MuonTrackToSegmentToolCfg
345 from TrkConfig.TrkTrackSummaryToolConfig
import MuonTrackSummaryToolCfg
347 kwargs.setdefault(
"IPConstraint", flags.Beam.Type
is BeamType.Collisions)
348 kwargs.setdefault(
'SegmentAmbiguityTool', result.popToolsAndMerge(
MuonAmbiProcessorCfg(flags) ) )
352 if flags.Beam.Type
is not BeamType.Collisions:
353 kwargs.setdefault(
"MmOccupancyBinWidth", 2048)
355 kwargs.setdefault(
'TrackCleaner', result.popToolsAndMerge(
MuonTrackCleanerCfg(flags, name=
'MuonTrackCleaner_seg',seg=
True) ) )
356 kwargs.setdefault(
'TrackSummaryTool', result.popToolsAndMerge(
MuonTrackSummaryToolCfg(flags, name=
'MuonTrackSummary') ) )
358 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig
import MuonClusterOnTrackCreatorCfg
361 result.setPrivateTools(CompFactory.Muon.MuonNSWSegmentFinderTool(name,**kwargs))
365 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig
import MuonClusterOnTrackCreatorCfg, MdtDriftCircleOnTrackCreatorCfg
371 the_tool = CompFactory.Muon.MuonPRDSelectionTool(name, **kwargs)
372 result.setPrivateTools(the_tool)
378 layer_hough_tool = CompFactory.Muon.MuonLayerHoughTool(name, **kwargs)
379 result.setPrivateTools(layer_hough_tool)
385 if not flags.Detector.EnableMDT:
386 kwargs.setdefault(
"MdtPrepDataContainer",
"")
387 if not flags.Detector.EnableRPC:
388 kwargs.setdefault(
"RpcPrepDataContainer",
"")
389 if not flags.Detector.EnableTGC:
390 kwargs.setdefault(
"TgcPrepDataContainer",
"")
392 kwargs.setdefault(
'TgcPrepDataContainer',
'TGC_MeasurementsAllBCs' if not flags.Muon.useTGCPriorNextBC
else 'TGC_Measurements')
393 kwargs.setdefault(
"CscPrepDataContainer",
"CSC_Clusters" if flags.Detector.EnableCSC
else "")
394 kwargs.setdefault(
"sTgcPrepDataContainer",
"STGC_Measurements" if flags.Detector.EnablesTGC
else "")
395 kwargs.setdefault(
'TgcPrepDataContainer',
'TGC_MeasurementsAllBCs' if not flags.Muon.useTGCPriorNextBC
else 'TGC_Measurements')
396 kwargs.setdefault(
"MMPrepDataContainer",
"MM_Measurements" if flags.Detector.EnableMM
else "")
398 kwargs.setdefault(
"PrintSummary", flags.Muon.printSummary)
402 name =
"MuonLayerHoughTool"))
if flags.Beam.Type
is not BeamType.Cosmics
else \
404 kwargs.setdefault(
"MuonLayerScanTool", hough_tool)
406 the_alg = CompFactory.MuonLayerHoughAlg(name = name,**kwargs)
407 result.addEventAlgo( the_alg, primary =
True )
412 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig
import MuonClusterOnTrackCreatorCfg, MdtDriftCircleOnTrackCreatorCfg, MdtCalibToolForRotsCfg
415 if not flags.Detector.EnableRPC:
416 kwargs.setdefault(
"RpcPrepDataContainer",
"")
417 if not flags.Detector.EnableTGC:
418 kwargs.setdefault(
"TgcPrepDataContainer",
"")
420 if "MdtCreator" not in kwargs:
423 if not flags.Input.isMC
and flags.Beam.Type
is BeamType.Collisions:
424 if flags.Muon.doSegmentT0Fit:
429 CreateTubeHit =
False,
431 TimeWindowSetting = timeWindowSetting))
437 kwargs.setdefault(
'MdtCreator', result.popToolsAndMerge(acc))
441 kwargs.setdefault(
'TgcPrepDataContainer',
'TGC_MeasurementsAllBCs' if not flags.Muon.useTGCPriorNextBC
else 'TGC_Measurements')
443 if flags.Beam.Type
is BeamType.Cosmics:
444 kwargs.setdefault(
"AngleCutPhi", 1e9)
445 kwargs.setdefault(
"DropDistance", 100000000.)
447 result.setPrivateTools( CompFactory.Muon.MuonPatternCalibration(name, **kwargs) )
451 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig
import MuonClusterOnTrackCreatorCfg
454 kwargs.setdefault(
"doStgcSegments", flags.Detector.EnablesTGC)
455 kwargs.setdefault(
"doMMSegments", flags.Detector.EnableMM)
456 kwargs.setdefault(
"doMdtSegments",
False)
457 kwargs.setdefault(
"CSC_clusterkey",
"CSC_Clusters" if flags.Detector.EnableCSC
else "")
459 kwargs.setdefault(
"SegmentCollectionName",
"NCB_TrackMuonSegments")
461 kwargs.setdefault(
"NSWSegmentCollectionName",
"")
462 kwargs.setdefault(
"SegmentQuality", 1)
466 if flags.Detector.EnableCSC:
468 name=
'CscSegmentUtilTool_NCB',
473 name=
'Csc2dSegmentMaker_NCB',
474 segmentTool=csc_segment_util_tool))
477 name=
'Csc4dSegmentMaker_NCB',
478 segmentTool=csc_segment_util_tool))
480 kwargs.setdefault(
"Csc2dSegmentMaker", csc_2d_segment_maker)
481 kwargs.setdefault(
"Csc4dSegmentMaker", csc_4d_segment_maker)
483 if flags.Detector.EnablesTGC
or flags.Detector.EnableMM:
487 result.addPublicTool(extrapolator)
488 cleaner = result.popToolsAndMerge(
MuonTrackCleanerCfg(flags, name=
'MuonTrackCleaner_seg',seg=
True) )
490 name =
"MuonNSWSegmentFinderTool",
491 TrackCleaner = cleaner,
492 SeedMMStereos =
False,
493 IPConstraint =
False,
494 CaloConstraint =
True))
495 kwargs.setdefault(
"NSWSegmentMaker", segment_finder)
496 the_alg = CompFactory.MuonSegmentFinderAlg(name, **kwargs)
497 result.addEventAlgo(the_alg, primary =
True)
501 from MuonConfig.MuonRIO_OnTrackCreatorToolConfig
import MuonClusterOnTrackCreatorCfg
509 kwargs.setdefault(
'SegmentMaker', segment_maker)
512 if flags.Detector.EnableMM
or flags.Detector.EnablesTGC:
517 result.addPublicTool(extrapolator)
518 cleaner = result.popToolsAndMerge(
MuonTrackCleanerCfg(flags, name=
'MuonTrackCleaner_seg',seg=
True) )
519 segment_finder = result.getPrimaryAndMerge(
MuonNSWSegmentFinderToolCfg(flags, name =
"MuonNSWSegmentFinderTool", TrackCleaner = cleaner))
520 kwargs.setdefault(
"NSWSegmentMaker", segment_finder)
523 if flags.Detector.EnableCSC:
527 kwargs.setdefault(
"CSC_clusterkey",
"")
529 kwargs.setdefault(
"PrintSummary", flags.Muon.printSummary)
530 kwargs.setdefault(
"doStgcSegments", flags.Detector.EnablesTGC)
531 kwargs.setdefault(
"doMMSegments", flags.Detector.EnableMM)
533 kwargs.setdefault(
"SegmentCollectionName",
"TrackMuonSegments" if flags.Muon.segmentOrigin !=
"TruthTracking" else "ThirdChainSegments")
535 the_alg = CompFactory.MuonSegmentFinderAlg( name, **kwargs)
536 result.addEventAlgo(the_alg)
541 kwargs.setdefault(
"SegmentCollectionName",
"TrackMuonSegments")
543 kwargs.setdefault(
"FilteredCollectionName",
"TrackMuonSegmentsEMEO")
544 the_alg = CompFactory.MuonSegmentFilterAlg(name, **kwargs)
545 result.addEventAlgo(the_alg)
550 from MuonCombinedConfig.MuonCombinedRecToolsConfig
import MuonSegmentConverterToolCfg
552 the_alg = CompFactory.xAODMaker.MuonSegmentCnvAlg(name, **kwargs)
553 result.addEventAlgo(the_alg, primary =
True)
559 Returns a CA setting up Muon Segment Finding
560 @param setup_bytestream if True and if Format.BS, sets up reading from bytestream. If False, disables setting up BS, even if Format.BS is True
566 from MuonConfig.MuonGeometryConfig
import MuonGeoModelCfg
568 from MuonConfig.MuonRecToolsConfig
import MuonEDMHelperSvcCfg
574 if flags.Input.Format
is Format.BS:
575 from MuonConfig.MuonBytestreamDecodeConfig
import MuonByteStreamDecodersCfg
578 if flags.Input.Format
is Format.BS
or 'StreamRDO' in flags.Input.ProcessingTags:
579 from MuonConfig.MuonRdoDecodeConfig
import MuonRDOtoPRDConvertorsCfg
588 if flags.Muon.runCommissioningChain:
591 if flags.Beam.Type
is BeamType.Collisions:
594 SegmentContainerName=
"NCB_TrackMuonSegments",
595 xAODContainerName=
"NCB_MuonSegments") )
597 if flags.Detector.EnableMM
or flags.Detector.EnablesTGC:
599 SegmentContainerName=
"TrackMuonNSWSegments",
600 xAODContainerName=
"xAODNSWSegments"))
603 if __name__==
"__main__":
606 from MuonConfig.MuonConfigUtils
import SetupMuonStandaloneConfigFlags, SetupMuonStandaloneOutput, SetupMuonStandaloneCA
617 AddressRemappingSvc, ProxyProviderSvc=CompFactory.getComps(
"AddressRemappingSvc",
"ProxyProviderSvc",)
620 pps.ProviderNames += [
'AddressRemappingSvc' ]
621 ars.TypeKeyRenameMaps += [
'%s#%s->%s' % (
"Trk::SegmentCollection",
"TrackMuonSegments",
"TrackMuonSegments_old") ]
622 ars.TypeKeyRenameMaps += [
'%s#%s->%s' % (
"Trk::SegmentCollection",
"NCB_TrackMuonSegments",
"NCB_TrackMuonSegments_old") ]
627 itemsToRecord = [
"Trk::SegmentCollection#TrackMuonSegments",
"Trk::SegmentCollection#NCB_TrackMuonSegments"]
632 f=
open(
"MuonSegmentFinding.pkl",
"wb")
636 if not args.config_only:
638 if not sc.isSuccess():
640 sys.exit(
"Execution failed")