Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-03-31 22:27:14

0001 import FWCore.ParameterSet.Config as cms
0002 
0003 from Validation.RecoMuon.selectors_cff import *
0004 from Validation.RecoMuon.track_selectors_cff import *
0005 from Validation.RecoMuon.associators_cff import *
0006 from Validation.RecoMuon.histoParameters_cff import *
0007 
0008 import Validation.RecoMuon.MuonTrackValidator_cfi
0009 MTVhlt = Validation.RecoMuon.MuonTrackValidator_cfi.muonTrackValidator.clone(
0010 # DEFAULTS ###################################
0011 #    label_tp = "mix:MergedTrackTruth",
0012 #    label_tp_refvector = False,
0013 #    muonTPSelector = dict(muonTPSet),
0014 ##############################################
0015 label_tp = ("TPmu"),
0016 label_tp_refvector = True,
0017 dirName = 'HLT/Muon/MuonTrack/',
0018 #beamSpot = 'hltOfflineBeamSpot',
0019 ignoremissingtrackcollection=True,
0020 doSummaryPlots = True
0021 )
0022 MTVhlt.muonTPSelector.src = ("TPmu")
0023 ################################################
0024 
0025 #
0026 # The HLT Muon Multi Track Validator
0027 #
0028 
0029 hltMuonMultiTrackValidator = MTVhlt.clone(
0030     associatormap = (
0031         'tpToL2MuonAssociation',
0032         'tpToL2UpdMuonAssociation',
0033         'tpToL3OITkMuonAssociation',
0034         'tpToL3TkMuonAssociation',
0035         'tpToL3FromL1TkMuonAssociation',
0036         'tpToL0L3FromL1TkMuonAssociation',
0037         'tpToL3GlbMuonAssociation',
0038         'tpToL3NoIDMuonAssociation',
0039         'tpToL3MuonAssociation'
0040     ),
0041     label = (
0042         'hltL2Muons',
0043         'hltL2Muons:UpdatedAtVtx',
0044         'hltIterL3OIMuonTrackSelectionHighPurity',
0045         'hltIterL3MuonMerged',
0046         'hltIterL3MuonAndMuonFromL1Merged',
0047         'hltIter0IterL3FromL1MuonTrackSelectionHighPurity',
0048         'hltIterL3GlbMuon',
0049         'hltIterL3MuonsNoIDTracks',
0050         'hltIterL3MuonsTracks'
0051     ),
0052     muonHistoParameters = (
0053         staMuonHistoParameters,
0054         staUpdMuonHistoParameters,
0055         trkMuonHistoParameters,
0056         trkMuonHistoParameters,
0057         trkMuonHistoParameters,
0058         trkMuonHistoParameters,
0059         glbMuonHistoParameters,
0060         glbMuonHistoParameters,
0061         glbMuonHistoParameters
0062     )
0063 )
0064 
0065 #
0066 # The Phase-2 validator
0067 #
0068 
0069 _hltMuonMultiTrackValidator = MTVhlt.clone(
0070     associatormap = (
0071         'Phase2tpToL2SeedAssociation',
0072         'Phase2tpToL2MuonAssociation',
0073         'Phase2tpToL2MuonUpdAssociation',
0074         'Phase2tpToL3IOTkAssociation',
0075         'Phase2tpToL3OITkAssociation',
0076         'Phase2tpToL3TkMergedAssociation',
0077         'Phase2tpToL3GlbMuonMergedAssociation',
0078         'Phase2tpToL3MuonNoIdAssociation',
0079         'Phase2tpToL3MuonIdAssociation'
0080     ),
0081     label = (
0082         'hltPhase2L2MuonSeedTracks',
0083         'hltL2MuonsFromL1TkMuon',
0084         'hltL2MuonsFromL1TkMuon:UpdatedAtVtx',
0085         'hltIter2Phase2L3FromL1TkMuonMerged',
0086         'hltPhase2L3OIMuonTrackSelectionHighPurity',
0087         'hltPhase2L3MuonMerged',
0088         'hltPhase2L3GlbMuon',
0089         'hltPhase2L3MuonNoIdTracks',
0090         'hltPhase2L3MuonIdTracks'
0091     ),
0092     muonHistoParameters = (
0093         staSeedMuonHistoParameters,
0094         staMuonHistoParameters,
0095         staUpdMuonHistoParameters,
0096         trkMuonHistoParameters,
0097         trkMuonHistoParameters,
0098         trkMuonHistoParameters,
0099         glbMuonHistoParameters,
0100         glbMuonHistoParameters,
0101         glbMuonHistoParameters
0102     )
0103 )
0104 
0105 # Customization for Inside-Out / Outside-In first approaches
0106 from Configuration.ProcessModifiers.phase2L2AndL3Muons_cff import phase2L2AndL3Muons
0107 from Configuration.ProcessModifiers.phase2L3MuonsOIFirst_cff import phase2L3MuonsOIFirst
0108 
0109 def _modify_for_IO_first(validator):
0110     validator.associatormap += ['Phase2tpToL2MuonToReuseAssociation', 'Phase2tpToL3IOTkFilteredAssociation']
0111     validator.label += ['hltPhase2L3MuonFilter:L2MuToReuse', 'hltPhase2L3MuonFilter:L3IOTracksFiltered']
0112     validator.muonHistoParameters.extend([staMuonHistoParameters, trkMuonHistoParameters])
0113 
0114 def _modify_for_OI_first(validator):
0115     validator.associatormap += ['Phase2tpToL3OITkFilteredAssociation']
0116     validator.label += ['hltPhase2L3MuonFilter:L3OITracksFiltered']
0117     validator.muonHistoParameters.extend([trkMuonHistoParameters])
0118     
0119 (phase2L2AndL3Muons & ~phase2L3MuonsOIFirst).toModify(_hltMuonMultiTrackValidator, _modify_for_IO_first)
0120 (phase2L2AndL3Muons & phase2L3MuonsOIFirst).toModify(_hltMuonMultiTrackValidator, _modify_for_OI_first)
0121 
0122 # Check that the associators and labels are consistent
0123 # All MTV clones are DQMEDAnalyzers
0124 from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer
0125 # Access all the global variables
0126 global_items = list(globals().items())
0127 for _name, _obj in global_items:
0128     # Find all MTV clones
0129     if isinstance(_obj, DQMEDAnalyzer) and hasattr(_obj, 'label') and hasattr(_obj, 'associatormap') and hasattr(_obj, 'muonHistoParameters'):
0130         # Check that the size of the associators, lables and muonHistoParameters are the same
0131         if (len(_obj.label) != len(_obj.associatormap) or len(_obj.label) != len(_obj.muonHistoParameters)
0132             or len(_obj.associatormap) != len(_obj.muonHistoParameters)):
0133             raise RuntimeError(f"MuonTrackValidatorHLT -- {_name}: associatormap, label and muonHistoParameters must have the same length!")
0134         # Check that the trackCollection used in each associator corresponds to the validator's label
0135         for i in range(0, len(_obj.label)):
0136             # Dynamically import the associators module to have access to procModifiers changes
0137             associators_module = __import__('Validation.RecoMuon.associators_cff', globals(), locals(), ['associators'], 0)
0138             _assoc = getattr(associators_module, _obj.associatormap[i].value()) if isinstance(_obj.associatormap[i], cms.InputTag) else getattr(associators_module, _obj.associatormap[i])
0139             _label = _obj.label[i].value() if isinstance(_obj.label[i], cms.InputTag) else _obj.label[i]
0140             _tracksTag = _assoc.tracksTag.value() if hasattr(_assoc, 'tracksTag') else _assoc.label_tr.value()
0141             if _tracksTag != _label:
0142                 raise RuntimeError(f"MuonTrackValidatorHLT -- {_name}: associatormap and label do not match for index {i}.\n"
0143                                    f"Associator's tracksTag: {_tracksTag}, collection label in the validator: {_label}.\n"
0144                                    "Make sure to have the correct ordering!")
0145 
0146 from Configuration.Eras.Modifier_phase2_muon_cff import phase2_muon
0147 phase2_muon.toReplaceWith(hltMuonMultiTrackValidator, _hltMuonMultiTrackValidator)
0148 
0149 #
0150 # The full Muon HLT validation sequence
0151 #
0152 
0153 muonValidationHLT_seq = cms.Sequence(muonAssociationHLT_seq + hltMuonMultiTrackValidator)
0154 
0155 recoMuonValidationHLT_seq = cms.Sequence(
0156     cms.SequencePlaceholder("TPmu") +
0157     muonValidationHLT_seq
0158 )