File indexing completed on 2023-03-17 10:55:08
0001 from __future__ import print_function
0002 from __future__ import absolute_import
0003 from builtins import range
0004 import FWCore.ParameterSet.Config as cms
0005
0006
0007 import FWCore.ParameterSet.VarParsing as VarParsing
0008 import fnmatch
0009 from future.moves import subprocess
0010 from .dqmPythonTypes import *
0011
0012
0013 from Configuration.Applications.ConfigBuilder import filesFromDASQuery
0014
0015
0016
0017 options = VarParsing.VarParsing("analysis")
0018
0019 options.register("runkey",
0020 "pp_run",
0021 VarParsing.VarParsing.multiplicity.singleton,
0022 VarParsing.VarParsing.varType.string,
0023 "Run Keys of CMS")
0024
0025
0026 options.register('runUniqueKey',
0027 'InValid',
0028 VarParsing.VarParsing.multiplicity.singleton,
0029 VarParsing.VarParsing.varType.string,
0030 "Unique run key from RCMS for Frontier")
0031
0032 options.register('runNumber',
0033 355380,
0034 VarParsing.VarParsing.multiplicity.singleton,
0035 VarParsing.VarParsing.varType.int,
0036 "Run number. This run number has to be present in the dataset configured with the dataset option.")
0037
0038 options.register('dataset',
0039 '/ExpressPhysics/Run2022B-Express-v1/FEVT',
0040 VarParsing.VarParsing.multiplicity.singleton,
0041 VarParsing.VarParsing.varType.string,
0042 "Dataset name like '/ExpressCosmics/Commissioning2021-Express-v1/FEVT'")
0043
0044 options.register('maxLumi',
0045 20,
0046 VarParsing.VarParsing.multiplicity.singleton,
0047 VarParsing.VarParsing.varType.int,
0048 "Only lumisections up to maxLumi are processed.")
0049
0050 options.register('minLumi',
0051 19,
0052 VarParsing.VarParsing.multiplicity.singleton,
0053 VarParsing.VarParsing.varType.int,
0054 "Only lumisections starting from minLumi are processed.")
0055
0056 options.register('lumiPattern',
0057 '*',
0058 VarParsing.VarParsing.multiplicity.singleton,
0059 VarParsing.VarParsing.varType.string,
0060 "Only lumisections with numbers matching lumiPattern are processed.")
0061
0062 options.register('eventsPerLumi',
0063 100,
0064 VarParsing.VarParsing.multiplicity.singleton,
0065 VarParsing.VarParsing.varType.int,
0066 "This number of last events in each lumisection will be processed.")
0067
0068 options.register('BeamSplashRun',
0069 False,
0070 VarParsing.VarParsing.multiplicity.singleton,
0071 VarParsing.VarParsing.varType.bool,
0072 "Set client source settings for beam SPLASH run")
0073
0074
0075
0076 options.register('unitTest',
0077 True,
0078 VarParsing.VarParsing.multiplicity.singleton,
0079 VarParsing.VarParsing.varType.bool,
0080 "Required to avoid the error.")
0081
0082 options.register('noDB',
0083 True,
0084 VarParsing.VarParsing.multiplicity.singleton,
0085 VarParsing.VarParsing.varType.bool,
0086 "Don't upload the BeamSpot conditions to the DB")
0087
0088 options.parseArguments()
0089
0090 print("Querying DAS for files...")
0091 readFiles = cms.untracked.vstring()
0092 secFiles = cms.untracked.vstring()
0093 eventsToProcess = []
0094
0095
0096 for ls in range(options.minLumi, options.maxLumi+1):
0097 if fnmatch.fnmatch(str(ls), options.lumiPattern):
0098 read, sec = filesFromDASQuery("file run=%d dataset=%s lumi=%s" % (options.runNumber, options.dataset, ls))
0099 readFiles.extend(read)
0100 secFiles.extend(sec)
0101
0102
0103 command = "edmFileUtil --events %s | tail -n +9 | head -n -5 | awk '{ print $3 }'" % read[0]
0104 print(command)
0105 events = subprocess.check_output(command, shell=True)
0106 events = events.split(b'\n')
0107 events = filter(lambda x: x != b"", events)
0108 events = map(int, events)
0109 events = sorted(events)
0110 events = events[-options.eventsPerLumi:]
0111 eventsToProcess.append("%s:%s:%s-%s:%s:%s" % (options.runNumber, ls, events[0], options.runNumber, ls, events[-1]))
0112
0113 eventRange = cms.untracked.VEventRange(eventsToProcess)
0114
0115 print("Got %d files." % len(readFiles))
0116
0117 source = cms.Source ("PoolSource",
0118 fileNames = readFiles,
0119 secondaryFileNames = secFiles,
0120 eventsToProcess = eventRange,
0121
0122
0123 inputCommands = cms.untracked.vstring(
0124 'drop *',
0125 'keep FEDRawDataCollection_rawDataCollector_*_*',
0126 'keep GlobalObjectMapRecord_hltGtStage2ObjectMap_*_*',
0127 'keep edmTriggerResults_TriggerResults_*_*'
0128 ),
0129 dropDescendantsOfDroppedBranches = cms.untracked.bool(True)
0130 )
0131 maxEvents = cms.untracked.PSet(
0132 input = cms.untracked.int32(-1)
0133 )
0134
0135 runType = RunType()
0136 if not options.runkey.strip():
0137 options.runkey = "pp_run"
0138
0139 runType.setRunType(options.runkey.strip())