Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #
0002 # Production configuration for FullSim: muon track validation using MuonAssociatorByHits
0003 #
0004 import FWCore.ParameterSet.Config as cms
0005 
0006 from Validation.RecoMuon.selectors_cff import *
0007 from Validation.RecoMuon.track_selectors_cff import *
0008 from Validation.RecoMuon.associators_cff import *
0009 from Validation.RecoMuon.histoParameters_cff import *
0010 
0011 from Validation.RecoMuon.RecoMuonValidator_cff import *
0012 from Validation.RecoMuon.RecoDisplacedMuonValidator_cff import *
0013 
0014 import Validation.RecoMuon.MuonTrackValidator_cfi
0015 MTV = Validation.RecoMuon.MuonTrackValidator_cfi.muonTrackValidator.clone(
0016 # DEFAULTS ###################################
0017 #    label_tp = "mix:MergedTrackTruth",
0018 #    label_tp_refvector = False,
0019 #    muonTPSelector = cms.PSet(muonTPSet),
0020 ##############################################
0021     label_tp = ("TPmu"),
0022     label_tp_refvector = True
0023 )
0024 MTV.muonTPSelector.src = ("TPmu")
0025 ##############################################
0026 
0027 trkMuonTrackVTrackAssoc = MTV.clone(
0028     associatormap = ('tpToTkmuTrackAssociation',),
0029     associators = ('trackAssociatorByHits',),
0030     #label = ('generalTracks',),
0031     label = ('probeTracks',),
0032     label_tp = ("TPtrack"),
0033     muonHistoParameters = (trkMuonHistoParameters,)
0034 )
0035 trkMuonTrackVTrackAssoc.muonTPSelector.src = ("TPtrack")
0036 # MuonAssociatorByHits used for all track collections
0037 
0038 trkProbeTrackVMuonAssoc = MTV.clone(
0039     associatormap = ('tpToTkMuonAssociation',),
0040     #label = ('generalTracks',),
0041     label = ('probeTracks',),
0042     label_tp = ("TPtrack"),
0043     muonHistoParameters = (trkMuonHistoParameters,)
0044 )
0045 trkProbeTrackVMuonAssoc.muonTPSelector.src = ("TPtrack")
0046 
0047 # The Muon Multi Track Validator
0048 
0049 muonMultiTrackValidator = MTV.clone(
0050     associatormap = (
0051         'tpToStaSeedAssociation',
0052         'tpToStaMuonAssociation',
0053         'tpToStaUpdMuonAssociation',
0054         'tpToGlbMuonAssociation',
0055         'tpTorecoMuonMuonAssociation'
0056     ),
0057     label = (
0058         'seedsOfSTAmuons',
0059         'standAloneMuons',
0060         'standAloneMuons:UpdatedAtVtx',
0061         'globalMuons',
0062         'recoMuonTracks'
0063     ),
0064     muonHistoParameters = (
0065         staSeedMuonHistoParameters,
0066         staMuonHistoParameters,
0067         staUpdMuonHistoParameters,
0068         glbMuonHistoParameters,
0069         glbMuonHistoParameters
0070     ),
0071     doSummaryPlots = True
0072 )
0073 
0074 muonMultiTrackValidator_phase2 = muonMultiTrackValidator.clone()
0075 muonMultiTrackValidator_phase2.associatormap = ('tpToStaUpdMuonAssociation','tpToGlbMuonAssociation','tpTorecoMuonMuonAssociation')
0076 muonMultiTrackValidator_phase2.label = ('standAloneMuons:UpdatedAtVtx','globalMuons','recoMuonTracks')
0077 muonMultiTrackValidator_phase2.muonHistoParameters = (staUpdMuonHistoParameters,glbMuonHistoParameters,glbMuonHistoParameters)
0078 
0079 # The Muon Multi Track Validator for refitted muons
0080 
0081 muonMultiTrackValidatorRefit = MTV.clone(
0082     associatormap = (
0083         'tpToStaRefitMuonAssociation',
0084         'tpToStaRefitUpdMuonAssociation'
0085     ),
0086     label = (
0087         'refittedStandAloneMuons',
0088         'refittedStandAloneMuons:UpdatedAtVtx'
0089     ),
0090     muonHistoParameters = (
0091         staMuonHistoParameters,
0092         staUpdMuonHistoParameters
0093     )
0094 )
0095 
0096 # The Muon Multi Track Validator for displaced muons
0097 
0098 displacedTrackVMuonAssoc = MTV.clone(
0099     associatormap = ('tpToDisplacedTrkMuonAssociation',),
0100     label = ('displacedTracks',),
0101     label_tp = ("TPtrack"),
0102     muonTPSelector = displacedMuonTPSet,
0103     muonHistoParameters = (displacedTrkMuonHistoParameters,)
0104 )
0105 displacedTrackVMuonAssoc.muonTPSelector.src = ("TPtrack")
0106 
0107 displacedMuonMultiTrackValidator = MTV.clone(
0108     associatormap = (
0109         'tpToDisplacedStaSeedAssociation',
0110         'tpToDisplacedStaMuonAssociation',
0111         'tpToDisplacedGlbMuonAssociation',
0112     ),
0113     label = (
0114         'seedsOfDisplacedSTAmuons',
0115         'displacedStandAloneMuons',
0116         'displacedGlobalMuons'
0117     ),
0118     muonTPSelector = displacedMuonTPSet,
0119     muonHistoParameters = (
0120         displacedStaSeedMuonHistoParameters,
0121         displacedStaMuonHistoParameters,
0122         displacedGlbMuonHistoParameters
0123     )
0124 )
0125 displacedMuonMultiTrackValidator.muonTPSelector.src = ("TPmu")
0126 
0127 displacedMuonMultiTrackValidator_phase2 = displacedMuonMultiTrackValidator.clone()
0128 displacedMuonMultiTrackValidator_phase2.associatormap = ('tpToDisplacedStaMuonAssociation','tpToDisplacedGlbMuonAssociation')
0129 displacedMuonMultiTrackValidator_phase2.label = ('displacedStandAloneMuons','displacedGlobalMuons')
0130 displacedMuonMultiTrackValidator_phase2.muonHistoParameters = (displacedStaMuonHistoParameters,displacedGlbMuonHistoParameters)
0131 
0132 # The Muon Multi Track Validator for TeV muons
0133 
0134 tevMuonMultiTrackValidator = MTV.clone(
0135     associatormap = (
0136         'tpToTevFirstMuonAssociation',
0137         'tpToTevPickyMuonAssociation',
0138         'tpToTevDytMuonAssociation',
0139         'tpToTunePMuonAssociation'
0140     ),
0141     label = (
0142         'tevMuons:firstHit',
0143         'tevMuons:picky',
0144         'tevMuons:dyt',
0145         'tunepMuonTracks'
0146     ),
0147     muonHistoParameters = (
0148         glbMuonHistoParameters,
0149         glbMuonHistoParameters,
0150         glbMuonHistoParameters,
0151         glbMuonHistoParameters
0152     )
0153 )
0154 
0155 tevMuonMultiTrackValidator_phase2 = MTV.clone(
0156     associatormap = ('tpToTunePMuonAssociation',),
0157     label = ('tunepMuonTracks',),
0158     muonHistoParameters = (glbMuonHistoParameters,)
0159 )
0160 
0161 pfMuonTrackVMuonAssoc = MTV.clone(
0162     associatormap = ('tpToPFMuonAssociation',),
0163     label = ('pfMuonTracks',),
0164     label_tp = ("TPpfmu"),
0165     muonHistoParameters = (glbMuonHistoParameters,)
0166 )
0167 pfMuonTrackVMuonAssoc.muonTPSelector.src = ("TPpfmu")
0168 
0169 gemMuonTrackVMuonAssoc = MTV.clone(
0170     associatormap = ('tpToGEMMuonMuonAssociation',),
0171     label = ('extractGemMuons',),
0172     muonHistoParameters = (gemMuonHistoParameters,)
0173 )
0174 
0175 me0MuonTrackVMuonAssoc = MTV.clone(
0176     associatormap = ('tpToME0MuonMuonAssociation',),
0177     label = ('extractMe0Muons',),
0178     muonTPSelector = me0MuonTPSet,
0179     muonHistoParameters = (me0MuonHistoParameters,)
0180 )
0181 me0MuonTrackVMuonAssoc.muonTPSelector.src = ("TPmu")
0182 
0183 MTVcosmic = Validation.RecoMuon.MuonTrackValidator_cfi.muonTrackValidator.clone(
0184 # DEFAULTS ###################################
0185 #    label_tp = "mix:MergedTrackTruth",
0186 #    label_tp_refvector = False,
0187 ##############################################
0188     parametersDefiner = 'CosmicParametersDefinerForTP',
0189     muonTPSelector = cosmicMuonTPSet
0190 )
0191 ##############################################
0192 
0193 cosmic2LegMuonMultiTrackValidator = MTVcosmic.clone(
0194     associatormap = (
0195         'tpToTkCosmicSelMuonAssociation',
0196         'tpToStaCosmicSelMuonAssociation',
0197         'tpToGlbCosmicSelMuonAssociation'
0198     ),
0199     label = (
0200         'ctfWithMaterialTracksP5LHCNavigation',
0201         'cosmicMuons',
0202         'globalCosmicMuons'
0203     ),
0204     BiDirectional_RecoToSim_association = False,
0205     muonHistoParameters = (
0206         trkCosmicMuonHistoParameters,
0207         staCosmicMuonHistoParameters,
0208         glbCosmicMuonHistoParameters
0209     )
0210 )
0211 
0212 cosmic1LegMuonMultiTrackValidator = MTVcosmic.clone(
0213     associatormap = (
0214         'tpToTkCosmic1LegSelMuonAssociation',
0215         'tpToStaCosmic1LegSelMuonAssociation',
0216         'tpToGlbCosmic1LegSelMuonAssociation',
0217     ),
0218     label = (
0219         'ctfWithMaterialTracksP5',
0220         'cosmicMuons1Leg',
0221         'globalCosmicMuons1Leg'
0222     ),
0223     muonHistoParameters = (
0224         trkCosmic1LegMuonHistoParameters,
0225         staCosmic1LegMuonHistoParameters,
0226         glbCosmic1LegMuonHistoParameters
0227     )
0228 )
0229 
0230 # Check that the associators and labels are consistent
0231 # All MTV clones are DQMEDAnalyzers
0232 from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer
0233 # Access all the global variables
0234 global_items = list(globals().items())
0235 for _name, _obj in global_items:
0236     # Find all MTV clones
0237     if isinstance(_obj, DQMEDAnalyzer) and hasattr(_obj, 'label') and hasattr(_obj, 'associatormap') and hasattr(_obj, 'muonHistoParameters'):
0238         # Check that the size of the associators, lables and muonHistoParameters are the same
0239         if (len(_obj.label) != len(_obj.associatormap) or len(_obj.label) != len(_obj.muonHistoParameters)
0240             or len(_obj.associatormap) != len(_obj.muonHistoParameters)):
0241             raise RuntimeError(f"MuonTrackValidator -- {_name}: associatormap, label and muonHistoParameters must have the same length!")
0242         # Check that the trackCollection used in each associator corresponds to the validator's label
0243         for i in range(0, len(_obj.label)):
0244             # Dynamically import the associators module to have access to procModifiers changes
0245             associators_module = __import__('Validation.RecoMuon.associators_cff', globals(), locals(), ['associators'], 0)
0246             _assoc = getattr(associators_module, _obj.associatormap[i].value()) if isinstance(_obj.associatormap[i], cms.InputTag) else getattr(associators_module, _obj.associatormap[i])
0247             _label = _obj.label[i].value() if isinstance(_obj.label[i], cms.InputTag) else _obj.label[i]
0248             _tracksTag = _assoc.tracksTag.value() if hasattr(_assoc, 'tracksTag') else _assoc.label_tr.value()
0249             if _tracksTag != _label:
0250                 raise RuntimeError(f"MuonTrackValidator -- {_name}: associatormap and label do not match for index {i}.\n"
0251                                    f"Associator's tracksTag: {_tracksTag}, collection label in the validator: {_label}.\n"
0252                                    "Make sure to have the correct ordering!")
0253 
0254 ##################################################################################
0255 # Muon validation sequences using MuonTrackValidator
0256 #
0257 muonValidation_seq = cms.Sequence(muonAssociation_seq 
0258                                   +trkMuonTrackVTrackAssoc
0259                                   +trkProbeTrackVMuonAssoc 
0260                                   +muonMultiTrackValidator 
0261                                   +pfMuonTrackVMuonAssoc
0262 )
0263 
0264 muonValidationTEV_seq = cms.Sequence(muonAssociationTEV_seq 
0265                                      +tevMuonMultiTrackValidator
0266 )
0267 
0268 muonValidationRefit_seq = cms.Sequence(muonAssociationRefit_seq 
0269                                        +muonMultiTrackValidatorRefit
0270 )
0271 
0272 muonValidationDisplaced_seq = cms.Sequence(muonAssociationDisplaced_seq 
0273                                            +displacedTrackVMuonAssoc 
0274                                            +displacedMuonMultiTrackValidator
0275 )
0276 
0277 muonValidationCosmic_seq = cms.Sequence(muonAssociationCosmic_seq 
0278                                         +cosmic2LegMuonMultiTrackValidator 
0279                                         +cosmic1LegMuonMultiTrackValidator
0280 )
0281 
0282 gemMuonValidation = cms.Sequence(extractGemMuonsTracks_seq 
0283                                  +tpToGEMMuonMuonAssociation 
0284                                  +gemMuonTrackVMuonAssoc
0285 )
0286 
0287 me0MuonValidation = cms.Sequence(extractMe0MuonsTracks_seq 
0288                                  +tpToME0MuonMuonAssociation 
0289                                  +me0MuonTrackVMuonAssoc
0290 )
0291 
0292 ##########################################################################
0293 # The full offline muon validation sequence
0294 #
0295 recoMuonValidation = cms.Sequence(TPtrack_seq 
0296                                   +TPmu_seq 
0297                                   +TPpfmu_seq 
0298                                   +muonValidation_seq 
0299                                   +muonValidationTEV_seq 
0300                                   +muonValidationRefit_seq 
0301                                   +muonValidationDisplaced_seq 
0302                                   +muonValidationRMV_seq 
0303                                   +muonValidationRDMV_seq
0304 )
0305 
0306 # no displaced muons in fastsim
0307 from Configuration.Eras.Modifier_fastSim_cff import fastSim
0308 fastSim.toReplaceWith(recoMuonValidation, cms.Sequence(cms.SequencePlaceholder("TPtrack") + cms.SequencePlaceholder("TPmu") + cms.SequencePlaceholder("TPpfmu") + muonValidation_seq + muonValidationTEV_seq + muonValidationRefit_seq + muonValidationRMV_seq))
0309 
0310 # sequence for cosmic muons
0311 recoCosmicMuonValidation = cms.Sequence(muonValidationCosmic_seq)
0312 
0313 # Phase 2 reduced sequence
0314 recoMuonValidation_reduced_seq = cms.Sequence(muonAssociationReduced_seq 
0315                                               +trkProbeTrackVMuonAssoc
0316                                               +muonMultiTrackValidator_phase2
0317                                               +tevMuonMultiTrackValidator_phase2
0318                                               +pfMuonTrackVMuonAssoc 
0319                                               +displacedTrackVMuonAssoc
0320                                               +displacedMuonMultiTrackValidator_phase2
0321 )
0322 
0323 #
0324 # sequences for muon upgrades
0325 #
0326 _run3_muonValidation = recoMuonValidation.copy()
0327 _run3_muonValidation += gemMuonValidation
0328 
0329 _phase2_muonValidation = cms.Sequence(TPtrack_seq 
0330                                       +TPmu_seq 
0331                                       +TPpfmu_seq 
0332                                       +recoMuonValidation_reduced_seq
0333                                       +gemMuonValidation
0334                                       +me0MuonValidation
0335 )
0336 
0337 _phase2_ge0_muonValidation =  cms.Sequence(TPtrack_seq 
0338                                            +TPmu_seq 
0339                                            +TPpfmu_seq 
0340                                            +recoMuonValidation_reduced_seq
0341                                            +gemMuonValidation
0342 )
0343 
0344 from Configuration.Eras.Modifier_run3_GEM_cff import run3_GEM
0345 run3_GEM.toReplaceWith(recoMuonValidation, _run3_muonValidation)
0346 from Configuration.Eras.Modifier_phase2_muon_cff import phase2_muon
0347 phase2_muon.toReplaceWith(recoMuonValidation, _phase2_muonValidation)
0348 from Configuration.Eras.Modifier_phase2_GE0_cff import phase2_GE0
0349 phase2_GE0.toReplaceWith(recoMuonValidation, _phase2_ge0_muonValidation)