Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
import shlex, shutil, getpass
import FWCore.ParameterSet.Config as cms
import FWCore.ParameterSet.VarParsing as VarParsing

process = cms.Process("ProcessOne")

options = VarParsing.VarParsing("analysis")
options.register ('firstRun',
                  325170,
                  VarParsing.VarParsing.multiplicity.singleton, # singleton or list
                  VarParsing.VarParsing.varType.int,            # string, int, or float
                  "first run to be processed")
options.register ('nLSToProcessPerRun',
                  2000,
                  VarParsing.VarParsing.multiplicity.singleton, # singleton or list
                  VarParsing.VarParsing.varType.int,            # string, int, or float
                  "number of lumisections to process per run")
options.register ('nRunsToProcess',
                  1,
                  VarParsing.VarParsing.multiplicity.singleton, # singleton or list
                  VarParsing.VarParsing.varType.int,            # string, int, or float
                  "total number of Runs to process")
options.register ('inputLumiFile',
                  '/eos/cms/store/group/comm_luminosity/LumiProducerFromBrilcalc/LumiData_2018_20200401.csv',
                  VarParsing.VarParsing.multiplicity.singleton, # singleton or list
                  VarParsing.VarParsing.varType.string,         # string, int, or float
                  "input luminosity file")

options.parseArguments()

##
## MessageLogger
##
process.load('FWCore.MessageService.MessageLogger_cfi')   
process.MessageLogger.cerr.enable = False
process.MessageLogger.SiPixelQualityPlotter =dict()  
process.MessageLogger.cout = cms.untracked.PSet(
    enable = cms.untracked.bool(True),
    threshold = cms.untracked.string("INFO"),
    default   = cms.untracked.PSet(limit = cms.untracked.int32(0)),                       
    FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1),
                                   reportEvery = cms.untracked.int32(1000)
                                   ),                                                      
    SiPixelQualityPlotter           = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
    enableStatistics = cms.untracked.bool(True)
    )

##
## Empty source
##
process.source = cms.Source("EmptySource",
                            firstRun = cms.untracked.uint32(options.firstRun),
                            numberEventsInRun    = cms.untracked.uint32(options.nLSToProcessPerRun),
                            firstLuminosityBlock = cms.untracked.uint32(84),
                            numberEventsInLuminosityBlock = cms.untracked.uint32(1),
                            )

maxEventsToProcess = (options.nRunsToProcess*options.nLSToProcessPerRun) + 1       # the +1 is needed in order to fall on the next run (outside of the range selected and close the last IOV
maxRunsToProcess = (options.firstRun+options.nRunsToProcess)-1
process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(maxEventsToProcess))

## 
## Now do some printing
##

print("===============================================")
print(" First run to be processed: ",options.firstRun)
print(" Last  run to be processed: ",maxRunsToProcess)
print(" n. LS process per Run: ",options.nLSToProcessPerRun)
print(" Total LS to process: ",maxEventsToProcess)
print(" Using Luminosity file: ",options.inputLumiFile)
print("===============================================")

##
## TrackerTopology
##
process.load("Configuration.Geometry.GeometryExtended2017_cff")         # loads the Phase-1 topology
process.load("Geometry.TrackerGeometryBuilder.trackerParameters_cfi")
process.TrackerTopologyEP = cms.ESProducer("TrackerTopologyEP")

##
## Database output service
##
process.load("CondCore.CondDB.CondDB_cfi")

# DB input service: 
process.CondDB.connect = "frontier://FrontierProd/CMS_CONDITIONS"
process.dbInput = cms.ESSource("PoolDBESSource",
                               process.CondDB,
                               toGet = cms.VPSet(cms.PSet(record = cms.string("SiPixelQualityFromDbRcd"),
                                                          #tag = cms.string("SiPixelQuality_byPCL_stuckTBM_v1") ## FED25
                                                          tag = cms.string("SiPixelQuality_byPCL_prompt_v2")  ## Prompt
                                                          #tag = cms.string("SiPixelQuality_v07_offline")      ## Re-Reco
                                                          )
                                                 )
                               )
##
## Clean old files
##
chosenTag=process.dbInput.toGet[0].tag.value()
try:
    shutil.move("SummaryBarrel_"+chosenTag+".png", "SummaryBarrel_"+chosenTag+"_old.png")
    shutil.move("SummaryForward_"+chosenTag+".png", "SummaryForward_"+chosenTag+"_old.png")
except:
    print("No old files to be moved")

##
## The analysis module
##
process.ReadInDB = cms.EDAnalyzer("SiPixelQualityPlotter",
                                  analyzedTag = cms.string(chosenTag),
                                  maxRun = cms.untracked.uint32(maxRunsToProcess),
                                  lumiInputTag = cms.untracked.InputTag("LumiInfo", "brilcalc")
                                  )

##
## The lumi information
##
process.LumiInfo = cms.EDProducer('LumiProducerFromBrilcalc',
                                  lumiFile = cms.string(options.inputLumiFile),
                                  throwIfNotFound = cms.bool(False),
                                  doBunchByBunch = cms.bool(False))

##
## The path
##
process.p = cms.Path(process.LumiInfo*process.ReadInDB)