Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 10:40:36

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                   '2017', # 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                   '113X_mc2017_realistic_v4', # 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 
0100 # import of standard configurations
0101 process.load('Configuration.StandardSequences.Services_cff')
0102 process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
0103 process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff')
0104 process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
0105 
0106 ###################################################################
0107 # Tell the program where to find the conditons
0108 connection_map = [
0109     ('Tracker*', 'frontier://PromptProd/CMS_CONDITIONS'),
0110     ('SiPixel*', 'frontier://PromptProd/CMS_CONDITIONS'),
0111     ('SiStrip*', 'frontier://PromptProd/CMS_CONDITIONS'),
0112     ('Beam*', 'frontier://PromptProd/CMS_CONDITIONS'),
0113     ]
0114 
0115 if options.external:
0116     connection_map.extend(
0117         (i.split(':')[0], 'sqlite_file:%s' % i.split(':')[1]) for i in options.external
0118         )
0119 
0120 connection_map.sort(key=lambda x: -1*len(x[0]))
0121 
0122 ###################################################################
0123 # creat the map for the GT toGet
0124 records = []
0125 if options.records:
0126     for record in options.records:
0127         rcd, tag = tuple(record.split(':'))
0128         print("control point:",rcd,tag)
0129         if len(rcd)==0:
0130             print("no overriding will occur")
0131             continue
0132         records.append(
0133             cms.PSet(
0134                 record = cms.string(rcd),
0135                 tag    = cms.string(tag),
0136                 connect = cms.string(best_match(rcd))
0137                 )
0138             )
0139 
0140 ###################################################################
0141 # configure the Global Tag
0142 from Configuration.AlCa.GlobalTag import GlobalTag
0143 process.GlobalTag = GlobalTag(process.GlobalTag, options.GlobalTag, '')
0144 process.GlobalTag.toGet = cms.VPSet(*records)
0145 
0146 '''
0147 process.GlobalTag.toGet = cms.VPSet(
0148     cms.PSet(record = cms.string("TrackerAlignmentRcd"),
0149              tag = cms.string("TrackerAlignment_Upgrade2017_design_v4"),
0150              #tag = cms.string("TrackerAlignment_2017_ultralegacymc_v1"),
0151              connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS")
0152          ),
0153     cms.PSet(record = cms.string("TrackerAlignmentErrorExtendedRcd"),
0154              tag = cms.string("TrackerAlignmentErrorsExtended_Upgrade2017_design_v0"),
0155              #tag = cms.string("TrackerAlignmentExtendedErrors_2017_ultralegacymc_v1"),
0156              connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS")
0157          )
0158 )
0159 '''
0160 
0161 process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(options.maxEvents) )
0162 
0163 #process.load('FWCore.MessageService.MessageLogger_cfi')
0164 #process.MessageLogger.cerr.FwkReport.reportEvery = 1
0165 
0166 ###################################################################
0167 # Messages
0168 ###################################################################
0169 process.load('FWCore.MessageService.MessageLogger_cfi')   
0170 process.MessageLogger.cerr.enable = False
0171 process.MessageLogger.TrackRefitter=dict()
0172 process.MessageLogger.PrimaryVertexProducer=dict()
0173 process.MessageLogger.DiMuonVertexValidation=dict()
0174 process.MessageLogger.DiLeptonHelpCounts=dict()
0175 process.MessageLogger.PlotsVsKinematics=dict()
0176 process.MessageLogger.cout = cms.untracked.PSet(
0177     enable = cms.untracked.bool(True),
0178     threshold = cms.untracked.string("INFO"),
0179     default   = cms.untracked.PSet(limit = cms.untracked.int32(0)),                       
0180     FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1),
0181                                    reportEvery = cms.untracked.int32(100)
0182                                    ),                                                      
0183     DiMuonVertexValidation = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0184     DiLeptonHelpCounts = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0185     enableStatistics = cms.untracked.bool(True)
0186     )
0187 
0188 ###################################################################
0189 # Source
0190 ###################################################################
0191 if(options.FileList):
0192     print('Loading file list from ASCII file')
0193     filelist = FileUtils.loadListFromFile (options.FileList)
0194     readFiles = cms.untracked.vstring( *filelist)
0195 else:
0196     readFiles = cms.untracked.vstring([options.myfile])
0197 
0198 process.source = cms.Source("PoolSource",
0199                             fileNames = readFiles,
0200                             #skipEvents = cms.untracked.uint32(45000)
0201 )
0202 
0203 ###################################################################
0204 # TransientTrack from https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuideTransientTracks
0205 ###################################################################
0206 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0207 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi')
0208 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi')
0209 process.load('TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff')
0210 
0211 ####################################################################
0212 # Get the BeamSpot
0213 ####################################################################
0214 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0215 
0216 ####################################################################
0217 # Track Refitter
0218 ####################################################################
0219 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0220 import RecoTracker.TrackProducer.TrackRefitters_cff
0221 process.TrackRefitter = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone()
0222 process.TrackRefitter.src = "generalTracks"
0223 #process.TrackRefitter.src = "ALCARECOTkAlDiMuonVertexTracks"
0224 process.TrackRefitter.TrajectoryInEvent = True
0225 process.TrackRefitter.NavigationSchool = ''
0226 process.TrackRefitter.TTRHBuilder = "WithAngleAndTemplate"
0227 
0228 ####################################################################
0229 # Sequence
0230 ####################################################################
0231 process.seqTrackselRefit = cms.Sequence(process.offlineBeamSpot*
0232                                         # in case NavigatioSchool is set !=''
0233                                         #process.MeasurementTrackerEvent*
0234                                         process.TrackRefitter)
0235 
0236 ####################################################################
0237 # Re-do vertices
0238 ####################################################################
0239 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import offlinePrimaryVertices
0240 process.offlinePrimaryVerticesFromRefittedTrks = offlinePrimaryVertices.clone()
0241 process.offlinePrimaryVerticesFromRefittedTrks.TrackLabel = cms.InputTag("TrackRefitter")
0242 
0243 ####################################################################
0244 # Output file
0245 ####################################################################
0246 process.TFileService = cms.Service("TFileService",fileName=cms.string("DiMuonVertexValidation_"+options.outputName+"_"+options.myseed+".root"))
0247 
0248 # Additional output definition
0249 process.analysis = cms.EDAnalyzer("DiMuonVertexValidation",
0250                                   useReco = cms.bool(True),
0251                                   ## the two parameters below are mutually exclusive,
0252                                   ## depending if RECO or ALCARECO is used
0253                                   muons  = cms.InputTag('muons'),
0254                                   #muonTracks = cms.InputTag('ALCARECOTkAlDiMuon'),
0255                                   tracks = cms.InputTag('TrackRefitter'),
0256                                   vertices = cms.InputTag('offlinePrimaryVerticesFromRefittedTrks'))
0257 
0258 ####################################################################
0259 # Path
0260 ####################################################################
0261 process.p = cms.Path(process.seqTrackselRefit                        +
0262                      process.offlinePrimaryVerticesFromRefittedTrks  +
0263                      process.analysis
0264                      )