Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-01-09 23:33:05

0001 import json
0002 import os
0003 import FWCore.ParameterSet.Config as cms
0004 import FWCore.PythonUtilities.LumiList as LumiList
0005 from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultMC_NoPU
0006 from FWCore.ParameterSet.VarParsing import VarParsing
0007 
0008 ###################################################################
0009 # Define process 
0010 ###################################################################
0011 process = cms.Process("GenericTrackAndVertexValidation")
0012 
0013 ###################################################################
0014 # Argument parsing
0015 ###################################################################
0016 options = VarParsing()
0017 options.register("config", "", VarParsing.multiplicity.singleton, VarParsing.varType.string , "AllInOne config")
0018 options.parseArguments()
0019 
0020 ###################################################################
0021 # Read in AllInOne config in JSON format
0022 ###################################################################
0023 if options.config == "":
0024     config = {"validation": {},
0025               "alignment": {}}
0026 else:
0027     with open(options.config, "r") as configFile:
0028         config = json.load(configFile)
0029 
0030 ###################################################################
0031 # Read filenames from given TXT file and define input source
0032 ###################################################################
0033 readFiles = []
0034 
0035 if "dataset" in config["validation"]:
0036     with open(config["validation"]["dataset"], "r") as datafiles:
0037         for fileName in datafiles.readlines():
0038             readFiles.append(fileName.replace("\n", ""))
0039 
0040     process.source = cms.Source("PoolSource",
0041                                 fileNames = cms.untracked.vstring(readFiles),
0042                                 skipEvents = cms.untracked.uint32(0)
0043                                 )
0044 else:
0045     print(">>>>>>>>>> GenericV_cfg.py: msg%-i: config not specified! Loading default MC simulation -> filesDefaultMC_NoPU!")
0046     process.source = cms.Source("PoolSource",
0047                                 fileNames = filesDefaultMC_NoPU,
0048                                 skipEvents = cms.untracked.uint32(0)
0049                                 ) 
0050 
0051 ###################################################################
0052 # Get good lumi section and load data or handle MC
0053 ###################################################################
0054 if "goodlumi" in config["validation"]:
0055      if os.path.isfile(config["validation"]["goodlumi"]):
0056           goodLumiSecs = cms.untracked.VLuminosityBlockRange(LumiList.LumiList(filename = config["validation"]["goodlumi"]).getCMSSWString().split(','))
0057      else:
0058           print("Does not exist: {}. Continue without good lumi section file.")
0059           goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0060 
0061 else:
0062      goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0063 
0064 ###################################################################
0065 # Runs and events
0066 ###################################################################
0067 runboundary = config["validation"].get("runboundary", 1)
0068 isMultipleRuns=False
0069 if(isinstance(runboundary, (list, tuple))):
0070      isMultipleRuns=True
0071      print("Multiple Runs are selected")
0072 if(isMultipleRuns):
0073      process.source.firstRun = cms.untracked.uint32(runboundary[0])
0074 else:
0075      process.source.firstRun = cms.untracked.uint32(runboundary)
0076 
0077 ###################################################################
0078 # Default set to 1 for unit tests
0079 ###################################################################
0080 process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(config["validation"].get("maxevents", 1)))
0081 
0082 ###################################################################
0083 # Bookeeping
0084 ###################################################################
0085 process.options = cms.untracked.PSet(
0086     wantSummary = cms.untracked.bool(False),
0087     Rethrow = cms.untracked.vstring("ProductNotFound"), # make this exception fatal
0088     fileMode  =  cms.untracked.string('NOMERGE'), # no ordering needed, but calls endRun/beginRun etc. at file boundaries
0089 )
0090 
0091 ###################################################################
0092 # Messages
0093 ###################################################################
0094 process.load("FWCore.MessageLogger.MessageLogger_cfi")
0095 process.MessageLogger.cerr.FwkReport.reportEvery = 1000
0096 process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True)
0097 
0098 ###################################################################
0099 # Basic modules
0100 ###################################################################
0101 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0102 process.load("Configuration.Geometry.GeometryDB_cff")
0103 process.load('Configuration.StandardSequences.Services_cff')
0104 process.load("Configuration.StandardSequences.MagneticField_cff")
0105 
0106 ####################################################################
0107 # Load and Configure Track refitter
0108 ####################################################################
0109 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0110 process.TrackRefitter.src = config["validation"].get("trackcollection", "generalTracks")
0111 process.TrackRefitter.TTRHBuilder = config["validation"].get("tthrbuilder", "WithAngleAndTemplate")
0112 process.TrackRefitter.NavigationSchool = ""
0113 
0114 ####################################################################
0115 # Global tag
0116 ####################################################################
0117 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0118 from Configuration.AlCa.GlobalTag import GlobalTag
0119 process.GlobalTag = GlobalTag(process.GlobalTag, config["alignment"].get("globaltag", "auto:phase1_2017_realistic"))
0120 
0121 ####################################################################
0122 # Load conditions if wished
0123 ####################################################################
0124 if "conditions" in config["alignment"]:
0125     from CalibTracker.Configuration.Common.PoolDBESSource_cfi import poolDBESSource
0126 
0127     for condition in config["alignment"]["conditions"]:
0128         setattr(process, "conditionsIn{}".format(condition), poolDBESSource.clone(
0129              connect = cms.string(str(config["alignment"]["conditions"][condition]["connect"])),
0130              toGet = cms.VPSet(
0131                         cms.PSet(
0132                                  record = cms.string(str(condition)),
0133                                  tag = cms.string(str(config["alignment"]["conditions"][condition]["tag"]))
0134                         )
0135                      )
0136             )
0137         )
0138 
0139         setattr(process, "prefer_conditionsIn{}".format(condition), cms.ESPrefer("PoolDBESSource", "conditionsIn{}".format(condition)))
0140 
0141 ###################################################################
0142 # TFileService
0143 ###################################################################
0144 process.TFileService = cms.Service("TFileService",
0145                                    fileName = cms.string("{}/GenericValidation.root".format(config.get("output", os.getcwd()))),
0146                                    closeFileFast = cms.untracked.bool(True))
0147 
0148 print("Saving the output at %s" % process.TFileService.fileName.value())
0149 
0150 ###################################################################
0151 # Primary Vertex refit
0152 ###################################################################
0153 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0154 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import offlinePrimaryVertices as _offlinePVs
0155 process.offlinePrimaryVerticesFromRefittedTrks = _offlinePVs.clone(
0156     TrackLabel = "TrackRefitter",
0157     TkFilterParameters = dict(
0158         maxNormalizedChi2 = 20,
0159         minSiliconLayersWithHits = 5,
0160         maxD0Significance = 5.0,
0161         maxD0Error = 1.0,
0162         maxDzError = 1.0,
0163         minPixelLayersWithHits = 2
0164     )
0165 )
0166 
0167 ###################################################################
0168 # The analysis modules
0169 ###################################################################
0170 process.trackanalysis = cms.EDAnalyzer("GeneralPurposeTrackAnalyzer",
0171                                        TkTag  = cms.InputTag("TrackRefitter"),
0172                                        isCosmics = cms.bool(config["validation"].get("isCosmics", False))
0173                                        )
0174 
0175 process.vertexanalysis = cms.EDAnalyzer('GeneralPurposeVertexAnalyzer',
0176                                         ndof = cms.int32(4),
0177                                         vertexLabel = cms.InputTag('offlinePrimaryVerticesFromRefittedTrks'),
0178                                         beamSpotLabel = cms.InputTag('offlineBeamSpot'),
0179                                         Xpos = cms.double(0.1),
0180                                         Ypos = cms.double(0),
0181                                         TkSizeBin = cms.int32(100),
0182                                         TkSizeMin = cms.double(499.5),
0183                                         TkSizeMax = cms.double(-0.5),
0184                                         DxyBin = cms.int32(100),
0185                                         DxyMin = cms.double(5000),
0186                                         DxyMax = cms.double(-5000),
0187                                         DzBin = cms.int32(100),
0188                                         DzMin = cms.double(-2000),
0189                                         DzMax = cms.double(2000),
0190                                         PhiBin = cms.int32(32),
0191                                         PhiBin2D = cms.int32(12),
0192                                         PhiMin = cms.double(-3.1415926535897931),
0193                                         PhiMax = cms.double(3.1415926535897931),
0194                                         EtaBin = cms.int32(26),
0195                                         EtaBin2D = cms.int32(8),
0196                                         EtaMin = cms.double(-2.7),
0197                                         EtaMax = cms.double(2.7))
0198 
0199 process.theValidSequence = cms.Sequence(process.offlineBeamSpot +
0200                                         process.TrackRefitter   +
0201                                         process.offlinePrimaryVerticesFromRefittedTrks +
0202                                         process.trackanalysis   +
0203                                         process.vertexanalysis)
0204 
0205 ###################################################################
0206 # The trigger filter module
0207 ###################################################################
0208 from HLTrigger.HLTfilters.triggerResultsFilter_cfi import *
0209 process.theHLTFilter = triggerResultsFilter.clone(
0210     triggerConditions = cms.vstring(config["validation"].get("triggerBits", "*")),
0211     hltResults = cms.InputTag( "TriggerResults", "", "HLT" ),
0212     l1tResults = cms.InputTag( "" ),
0213     throw = cms.bool(False)
0214 )
0215 
0216 HLTSel = config["validation"].get("HLTselection", False)
0217 
0218 if (HLTSel):
0219     process.p = cms.Path(process.theHLTFilter + process.theValidSequence)
0220 else:
0221     process.p = cms.Path(process.theValidSequence)
0222 
0223 print("Done")