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