def MuonSegmentFittingToolCfg(flags, **kwargs): # declareProperty("SLPropagator", m_slPropagator); # declareProperty("SLFitter", m_slTrackFitter); # declareProperty("CurvedFitter", m_curvedTrackFitter); # declareProperty("TrackCleaner", m_trackCleaner); # declareProperty("UpdatePrecisionCoordinate", m_updatePrecisionCoordinate = false ); result = ComponentAccumulator() # FIXME! Add this. # acc, propagator = AtlasRungeKuttaPropagatorCfg(flags) # result.merge(acc) # kwargs.setdefault("SLPropagator", propagator) acc = MCTBFitterCfg(flags, name="SLFitter", StraightLine=True) slfitter = acc.getPrimary() acc.addPublicTool(slfitter) result.merge(acc) kwargs.setdefault("SLFitter", slfitter) acc = MCTBFitterCfg(flags, name="CurvedFitter") fitter = acc.getPrimary() acc.addPublicTool(fitter) result.merge(acc) kwargs.setdefault("CurvedFitter", fitter) acc = MuonTrackCleanerCfg(flags) cleaner = acc.getPrimary() acc.addPublicTool(cleaner) result.merge(acc) kwargs.setdefault("TrackCleaner", cleaner) result.setPrivateTools(Muon__MuonSegmentFittingTool(**kwargs)) return result
def MuonClusterSegmentFinderToolCfg(flags, **kwargs): #m_slTrackFitter("Trk::GlobalChi2Fitter/MCTBSLFitter"), #m_ambiTool("Trk::SimpleAmbiguityProcessorTool/MuonAmbiProcessor"), #m_trackToSegmentTool("Muon::MuonTrackToSegmentTool/MuonTrackToSegmentTool"), #m_printer("Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"), #m_edmHelperSvc("Muon::MuonEDMHelperSvc/MuonEDMHelperSvc"), #m_trackCleaner("Muon::MuonTrackCleaner/MuonTrackCleaner") { #declareProperty("SLFitter", m_slTrackFitter); #declareProperty("SegmentAmbiguityTool",m_ambiTool); #declareProperty("TrackToSegmentTool", m_trackToSegmentTool); #declareProperty("TrackCleaner", m_trackCleaner); result = ComponentAccumulator() acc = MCTBFitterCfg(flags, name="SLFitter", StraightLine=True) slfitter = acc.getPrimary() result.addPublicTool(slfitter) result.merge(acc) kwargs.setdefault("SLFitter", slfitter) acc = MuonTrackCleanerCfg(flags) cleaner = acc.getPrimary() result.addPublicTool(cleaner) kwargs.setdefault("TrackCleaner", cleaner) result.merge(acc) acc = MuonTrackSummaryToolCfg(flags) track_summary = acc.getPrimary() result.addPublicTool(track_summary) kwargs.setdefault('TrackSummaryTool', track_summary) result.merge(acc) acc = MuonAmbiProcessorCfg(flags, name='MuonAmbiProcessor') ambi = acc.popPrivateTools() acc.addPublicTool(ambi) result.merge(acc) kwargs.setdefault("SegmentAmbiguityTool", ambi) # FIXME - remaining tools result.setPrivateTools(Muon__MuonClusterSegmentFinderTool(**kwargs)) return result
def MooTrackBuilderCfg(flags, name="MooTrackBuilderTemplate", **kwargs): Muon__MooTrackBuilder = CompFactory.Muon.MooTrackBuilder Trk__STEP_Propagator = CompFactory.Trk.STEP_Propagator from MuonConfig.MuonRIO_OnTrackCreatorConfig import MdtDriftCircleOnTrackCreatorCfg, TriggerChamberClusterOnTrackCreatorCfg from MuonConfig.MuonRecToolsConfig import MuonTrackToSegmentToolCfg from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg # Based on this: https://gitlab.cern.ch/atlas/athena/blob/release/22.0.3/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MooreTools.py#L221 # ignoring all the name_prefix stuff for the moment, since I'm not sure it's necessary any more. result = MooTrackFitterCfg(flags) moo_track_fitter = result.getPrimary() result.addPublicTool(moo_track_fitter) kwargs.setdefault("Fitter", moo_track_fitter) # Now setup SL fitter (MooSLTrackFitter as defined here: # https://gitlab.cern.ch/atlas/athena/blob/release/22.0.3/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecExampleConfigDb.py#L203) acc = MCTBFitterCfg(flags, name='MCTBSLFitter', StraightLine=True) mctbslfitter = acc.getPrimary() result.addPublicTool(mctbslfitter) result.merge(acc) # Just take the default configuration, as per https://gitlab.cern.ch/atlas/athena/blob/release/22.0.3/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecExampleConfigDb.py#L56 # FIXME - this should be updated once there is a proper CA implementation for the STEP_Propagator prop = Trk__STEP_Propagator(name='MuonStraightLinePropagator') result.addPublicTool(prop) # TODO - check why Fitter and FitterPreFit are identical acc = MooTrackFitterCfg(flags, name="MooSLTrackFitter", Fitter=mctbslfitter, FitterPreFit=mctbslfitter, Propagator=prop, ReducedChi2Cut=10.0, SLFit=True) moo_sl_track_fitter = acc.getPrimary() result.addPublicTool(moo_sl_track_fitter) result.merge(acc) kwargs.setdefault("SLFitter", moo_sl_track_fitter) kwargs.setdefault( "RecalibrateMDTHitsOnTrack", ((not flags.Muon.doSegmentT0Fit) and flags.Beam.Type == 'collisions')) acc = MuonSeededSegmentFinderCfg(flags) muon_seeded_segment_finder = acc.getPrimary() result.addPublicTool(muon_seeded_segment_finder) result.merge(acc) kwargs.setdefault("SeededSegmentFinder", muon_seeded_segment_finder) acc = MdtDriftCircleOnTrackCreatorCfg(flags) mdt_dcot_creator = acc.getPrimary() kwargs.setdefault("MdtRotCreator", mdt_dcot_creator) result.merge(acc) acc = TriggerChamberClusterOnTrackCreatorCfg(flags) muon_comp_cluster_creator = acc.getPrimary() kwargs.setdefault("CompetingClustersCreator", muon_comp_cluster_creator) result.merge(acc) acc = MuonSTEP_PropagatorCfg(flags) muon_prop = acc.getPrimary() kwargs.setdefault("Propagator", muon_prop) result.merge(acc) acc = MuonChamberHoleRecoveryToolCfg(flags) hole_recovery_tool = acc.getPrimary() result.addPublicTool(hole_recovery_tool) result.merge(acc) kwargs.setdefault("HitRecoveryTool", hole_recovery_tool) kwargs.setdefault("ChamberHoleRecoveryTool", hole_recovery_tool) # FIXME? Remove duplicate from cxx? acc = MagneticFieldSvcCfg(flags) result.merge(acc) acc = MuonTrackToSegmentToolCfg(flags) track_to_segment_tool = acc.getPrimary() kwargs.setdefault("TrackToSegmentTool", track_to_segment_tool) result.merge(acc) kwargs.setdefault("Printer", MuonEDMPrinterTool(flags)) # FIXME - remove ErrorOptimisationTool from cxx? # declareProperty("ErrorOptimisationTool","" ); acc = MuPatCandidateToolCfg(flags) cand_tool = acc.getPrimary() result.merge(acc) kwargs.setdefault("CandidateTool", cand_tool) acc = MooCandidateMatchingToolCfg(flags) track_segment_matching_tool = acc.getPrimary() result.merge(acc) kwargs.setdefault("CandidateMatchingTool", track_segment_matching_tool) from MuonConfig.MuonRecToolsConfig import MuonTrackSummaryToolCfg acc = MuonTrackSummaryToolCfg(flags) track_summary = acc.getPrimary() result.merge(acc) kwargs.setdefault("TrackSummaryTool", track_summary) builder = Muon__MooTrackBuilder(name, **kwargs) result.setPrivateTools(builder) return result
def MooTrackFitterCfg(flags, name='MooTrackFitter', **kwargs): # Based on https://gitlab.cern.ch/atlas/athena/blob/release/22.0.3/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MooreTools.py#L179 # (Tons of explicit configuration missing from there though) Muon__MooTrackFitter = CompFactory.Muon.MooTrackFitter MuonSegmentMomentum = CompFactory.MuonSegmentMomentum from MuonConfig.MuonRecToolsConfig import MuonPhiHitSelector, MuonTrackToSegmentToolCfg, MuonTrackSummaryHelperToolCfg, MuPatHitToolCfg from MuonConfig.MuonRIO_OnTrackCreatorConfig import MdtDriftCircleOnTrackCreatorCfg result = MCTBFitterCfg(flags) mctb_fitter = result.getPrimary() result.addPublicTool(mctb_fitter) kwargs.setdefault("Fitter", mctb_fitter) kwargs.setdefault("FitterPreFit", mctb_fitter) # FIXME MuPatHitTool currently isn't configured, but should be. MuPatHitToolCfg acc = MuPatHitToolCfg(flags) mu_pat_hit_tool = acc.getPrimary() result.addPublicTool(mu_pat_hit_tool) result.merge(acc) kwargs.setdefault("HitTool", mu_pat_hit_tool) acc = MuonSTEP_PropagatorCfg(flags) muon_prop = acc.getPrimary() result.addPublicTool(muon_prop) result.merge(acc) kwargs.setdefault("Propagator", muon_prop) # kwargs.setdefault("SLFit" , ) # Was "not jobproperties.BField.allToroidOn()" but do not have access to Field here. kwargs.setdefault("ReducedChi2Cut", flags.Muon.Chi2NDofCut) momentum_estimator = "" if flags.Beam.Type == 'cosmics': momentum_estimator = MuonSegmentMomentum(DoCosmics=True) else: acc = MuonSegmentMomentumFromFieldCfg(flags) momentum_estimator = acc.getPrimary() result.merge(acc) result.addPublicTool(momentum_estimator) kwargs.setdefault("SegmentMomentum", momentum_estimator) kwargs.setdefault("MuonPrinterTool", MuonEDMPrinterTool(flags)) acc = MuonTrackToSegmentToolCfg(flags) track_to_segment_tool = acc.getPrimary() kwargs.setdefault("TrackToSegmentTool", track_to_segment_tool) result.merge(acc) acc = MdtDriftCircleOnTrackCreatorCfg(flags) mdt_dcot_creator = acc.getPrimary() kwargs.setdefault("MdtRotCreator", mdt_dcot_creator) result.merge(acc) kwargs.setdefault("PhiHitSelector", MuonPhiHitSelector(flags)) acc = MuonTrackCleanerCfg(flags) track_cleaner = acc.getPrimary() result.merge(acc) result.addPublicTool(track_cleaner) kwargs.setdefault("TrackCleaner", track_cleaner) # Leaving "SegmentInOverlapTool" as default, which is what happens in the current configuration. acc = MuonTrackSummaryHelperToolCfg(flags) track_summary_helper = acc.getPrimary() result.merge(acc) kwargs.setdefault("TrackSummaryTool", track_summary_helper) kwargs.setdefault("CleanPhiHits", True) kwargs.setdefault("UsePreciseHits", True) kwargs.setdefault("UsePrefit", False) kwargs.setdefault("SeedAtStartOfTrack", False) fitter = Muon__MooTrackFitter(name, **kwargs) result.setPrivateTools(fitter) return result