Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 11:57:19

0001 from __future__ import print_function
0002 from fnmatch import fnmatch
0003 import FWCore.ParameterSet.Config as cms
0004 import FWCore.Utilities.FileUtils as FileUtils
0005 import FWCore.ParameterSet.VarParsing as VarParsing
0006 import sys
0007 
0008 from Configuration.StandardSequences.Eras import eras
0009 from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultMC_DoubleMuon_string
0010 
0011 ###################################################################
0012 def best_match(rcd):
0013 ###################################################################
0014     '''
0015     find out where to best match the input conditions
0016     '''
0017     print(rcd)
0018     for pattern, string in connection_map:
0019         print(pattern, fnmatch(rcd, pattern))
0020         if fnmatch(rcd, pattern):
0021             return string
0022 
0023 options = VarParsing.VarParsing ()
0024 options.register('maxEvents',
0025                  -1,
0026                  VarParsing.VarParsing.multiplicity.singleton,
0027                  VarParsing.VarParsing.varType.int,
0028                  "number of events to process (\"-1\" for all)")
0029 options.register ('era',
0030                   '2022', # default value
0031                   VarParsing.VarParsing.multiplicity.singleton, # singleton or list
0032                   VarParsing.VarParsing.varType.string,         # string, int, or float
0033                   "CMS running era")
0034 
0035 options.register ('GlobalTag',
0036                   'auto:phase1_2022_realistic', # default value
0037                   VarParsing.VarParsing.multiplicity.singleton,
0038                   VarParsing.VarParsing.varType.string,
0039                   "seed number")
0040 
0041 options.register ('records',
0042                   [],
0043                   VarParsing.VarParsing.multiplicity.list, # singleton or list
0044                   VarParsing.VarParsing.varType.string,          # string, int, or float
0045                   "record:tag names to be used/changed from GT")
0046 
0047 options.register ('external',
0048                   [],
0049                   VarParsing.VarParsing.multiplicity.list, # singleton or list
0050                   VarParsing.VarParsing.varType.string,          # string, int, or float
0051                   "record:fle.db picks the following record from this external file")
0052 
0053 options.register ('myseed',
0054                   '1', # default value
0055                   VarParsing.VarParsing.multiplicity.singleton,
0056                   VarParsing.VarParsing.varType.string,
0057                   "seed number")
0058 
0059 options.register ('myfile',
0060                   filesDefaultMC_DoubleMuon_string, # default value
0061                   VarParsing.VarParsing.multiplicity.singleton,
0062                   VarParsing.VarParsing.varType.string,
0063                   "file name")
0064 
0065 options.register ('FileList',
0066                   '', # default value
0067                   VarParsing.VarParsing.multiplicity.singleton, 
0068                   VarParsing.VarParsing.varType.string,
0069                   "FileList in DAS format")
0070 
0071 options.register ('outputName',
0072                   'default', # default value
0073                   VarParsing.VarParsing.multiplicity.singleton, # singleton or list
0074                   VarParsing.VarParsing.varType.string,         # string, int, or float
0075                   "output file")
0076 
0077 options.parseArguments()
0078 
0079 if(options.FileList):
0080     print("FileList:           ", options.FileList)
0081 else:
0082     print("inputFile:          ", options.myfile)
0083 print("outputFile:         ", "DiMuonVertexValidation_{fname}_{fseed}.root".format(fname = options.outputName,fseed=options.myseed))
0084 print("era:                ", options.era)
0085 print("conditionGT:        ", options.GlobalTag)
0086 print("conditionOverwrite: ", options.records)
0087 print("external conditions:", options.external)
0088 print("max events:         ", options.maxEvents)
0089 
0090 if options.era=='2016':
0091     print("===> running era 2016")
0092     process = cms.Process('Analysis',eras.Run2_2016)
0093 elif options.era=='2017':
0094     print("===> running era 2017")
0095     process = cms.Process('Analysis',eras.Run2_2017)
0096 elif options.era=='2018':
0097     print("===> running era 2018")
0098     process = cms.Process('Analysis',eras.Run2_2018)
0099 elif options.era=='2022':
0100     print("===> running era 2022")
0101     process = cms.Process('Analysis',eras.Run3)
0102 elif options.era=='2023':
0103     print("===> running era 2023")
0104     process = cms.Process('Analysis',eras.Run3_2023)
0105 
0106 ###################################################################
0107 # Set the process to run multi-threaded
0108 ###################################################################
0109 process.options.numberOfThreads = 8
0110 
0111 # import of standard configurations
0112 process.load('Configuration.StandardSequences.Services_cff')
0113 process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
0114 process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff')
0115 process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
0116 
0117 ###################################################################
0118 # Tell the program where to find the conditons
0119 connection_map = [
0120     ('Tracker*', 'frontier://PromptProd/CMS_CONDITIONS'),
0121     ('SiPixel*', 'frontier://PromptProd/CMS_CONDITIONS'),
0122     ('SiStrip*', 'frontier://PromptProd/CMS_CONDITIONS'),
0123     ('Beam*', 'frontier://PromptProd/CMS_CONDITIONS'),
0124     ]
0125 
0126 if options.external:
0127     connection_map.extend(
0128         (i.split(':')[0], 'sqlite_file:%s' % i.split(':')[1]) for i in options.external
0129         )
0130 
0131 connection_map.sort(key=lambda x: -1*len(x[0]))
0132 
0133 ###################################################################
0134 # creat the map for the GT toGet
0135 records = []
0136 if options.records:
0137     for record in options.records:
0138         rcd, tag = tuple(record.split(':'))
0139         print("control point:",rcd,tag)
0140         if len(rcd)==0:
0141             print("no overriding will occur")
0142             continue
0143         records.append(
0144             cms.PSet(
0145                 record = cms.string(rcd),
0146                 tag    = cms.string(tag),
0147                 connect = cms.string(best_match(rcd))
0148                 )
0149             )
0150 
0151 ###################################################################
0152 # configure the Global Tag
0153 from Configuration.AlCa.GlobalTag import GlobalTag
0154 process.GlobalTag = GlobalTag(process.GlobalTag, options.GlobalTag, '')
0155 process.GlobalTag.toGet = cms.VPSet(*records)
0156 
0157 '''
0158 process.GlobalTag.toGet = cms.VPSet(
0159     cms.PSet(record = cms.string("TrackerAlignmentRcd"),
0160              tag = cms.string("TrackerAlignment_Upgrade2017_design_v4"),
0161              #tag = cms.string("TrackerAlignment_2017_ultralegacymc_v1"),
0162              connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS")
0163          ),
0164     cms.PSet(record = cms.string("TrackerAlignmentErrorExtendedRcd"),
0165              tag = cms.string("TrackerAlignmentErrorsExtended_Upgrade2017_design_v0"),
0166              #tag = cms.string("TrackerAlignmentExtendedErrors_2017_ultralegacymc_v1"),
0167              connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS")
0168          )
0169 )
0170 '''
0171 
0172 process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(options.maxEvents) )
0173 
0174 #process.load('FWCore.MessageService.MessageLogger_cfi')
0175 #process.MessageLogger.cerr.FwkReport.reportEvery = 1
0176 
0177 ###################################################################
0178 # Messages
0179 ###################################################################
0180 process.load('FWCore.MessageService.MessageLogger_cfi')   
0181 process.MessageLogger.cerr.enable = False
0182 process.MessageLogger.TrackRefitter=dict()
0183 process.MessageLogger.PrimaryVertexProducer=dict()
0184 process.MessageLogger.DiMuonVertexValidation=dict()
0185 process.MessageLogger.DiLeptonHelpCounts=dict()
0186 process.MessageLogger.PlotsVsKinematics=dict()
0187 process.MessageLogger.cout = cms.untracked.PSet(
0188     enable = cms.untracked.bool(True),
0189     threshold = cms.untracked.string("INFO"),
0190     default   = cms.untracked.PSet(limit = cms.untracked.int32(0)),                       
0191     FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1),
0192                                    reportEvery = cms.untracked.int32(100)
0193                                    ),                                                      
0194     DiMuonVertexValidation = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0195     DiLeptonHelpCounts = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0196     enableStatistics = cms.untracked.bool(True)
0197     )
0198 
0199 ###################################################################
0200 # Source
0201 ###################################################################
0202 if(options.FileList):
0203     print('Loading file list from ASCII file')
0204     filelist = FileUtils.loadListFromFile (options.FileList)
0205     readFiles = cms.untracked.vstring( *filelist)
0206 else:
0207     readFiles = cms.untracked.vstring([options.myfile])
0208 
0209 process.source = cms.Source("PoolSource",
0210                             fileNames = readFiles,
0211                             #skipEvents = cms.untracked.uint32(45000)
0212 )
0213 
0214 ###################################################################
0215 # TransientTrack from https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuideTransientTracks
0216 ###################################################################
0217 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0218 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi')
0219 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi')
0220 process.load('TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff')
0221 
0222 ####################################################################
0223 # Get the BeamSpot
0224 ####################################################################
0225 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0226 
0227 ####################################################################
0228 # Track Refitter
0229 ####################################################################
0230 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0231 import RecoTracker.TrackProducer.TrackRefitters_cff
0232 process.TrackRefitter = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone()
0233 process.TrackRefitter.src = "generalTracks"
0234 #process.TrackRefitter.src = "ALCARECOTkAlDiMuonVertexTracks"
0235 process.TrackRefitter.TrajectoryInEvent = True
0236 process.TrackRefitter.NavigationSchool = ''
0237 process.TrackRefitter.TTRHBuilder = "WithAngleAndTemplate"
0238 
0239 ####################################################################
0240 # Sequence
0241 ####################################################################
0242 process.seqTrackselRefit = cms.Sequence(process.offlineBeamSpot*
0243                                         # in case NavigatioSchool is set !=''
0244                                         #process.MeasurementTrackerEvent*
0245                                         process.TrackRefitter)
0246 
0247 ####################################################################
0248 # Re-do vertices
0249 ####################################################################
0250 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import offlinePrimaryVertices
0251 process.offlinePrimaryVerticesFromRefittedTrks = offlinePrimaryVertices.clone()
0252 process.offlinePrimaryVerticesFromRefittedTrks.TrackLabel = cms.InputTag("TrackRefitter")
0253 
0254 ####################################################################
0255 # Output file
0256 ####################################################################
0257 process.TFileService = cms.Service("TFileService",fileName=cms.string("DiMuonVertexValidation_"+options.outputName+"_"+options.myseed+".root"))
0258 
0259 # Additional output definition
0260 process.analysis = cms.EDAnalyzer("DiMuonVertexValidation",
0261                                   useReco = cms.bool(True),
0262                                   ## the two parameters below are mutually exclusive,
0263                                   ## depending if RECO or ALCARECO is used
0264                                   muons  = cms.InputTag('muons'),
0265                                   #muonTracks = cms.InputTag('ALCARECOTkAlDiMuon'),
0266                                   tracks = cms.InputTag('TrackRefitter'),
0267                                   vertices = cms.InputTag('offlinePrimaryVerticesFromRefittedTrks'))
0268 
0269 ####################################################################
0270 # Path
0271 ####################################################################
0272 process.p = cms.Path(process.seqTrackselRefit                        +
0273                      process.offlinePrimaryVerticesFromRefittedTrks  +
0274                      process.analysis
0275                      )