Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-10-07 04:59:03

0001 import json
0002 import yaml
0003 import os
0004 import FWCore.ParameterSet.Config as cms
0005 import FWCore.PythonUtilities.LumiList as LumiList
0006 from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultData_Cosmics_string
0007 from FWCore.ParameterSet.VarParsing import VarParsing
0008 from Alignment.OfflineValidation.TkAlAllInOneTool.utils import _byteify
0009 import pdb
0010 
0011 ###################################################################
0012 # Define process
0013 ###################################################################
0014 process = cms.Process("splitter")
0015 
0016 ###################################################################
0017 # Argument parsing
0018 ###################################################################
0019 options = VarParsing()
0020 options.register("config", "", VarParsing.multiplicity.singleton, VarParsing.varType.string , "AllInOne config")
0021 options.parseArguments()
0022 
0023 ###################################################################
0024 # Read in AllInOne config in JSON format
0025 ###################################################################
0026 if options.config == "":
0027   config = {"validation": {},
0028             "alignment": {}}
0029 else:
0030   with open(options.config, "r") as configFile:
0031     if options.config.endswith(".json"):
0032       config = json.load(configFile)
0033     elif options.config.endswith(".yaml"):
0034       config = yaml.safe_load(configFile)
0035 
0036 ###################################################################
0037 # Read filenames from given TXT file and define input source
0038 ###################################################################
0039 readFiles = []
0040 
0041 if "dataset" in config["validation"]:
0042     with open(config["validation"]["dataset"], "r") as datafiles:
0043         for fileName in datafiles.readlines():
0044             readFiles.append(fileName.replace("\n", ""))
0045 
0046     process.source = cms.Source("PoolSource",
0047                                 fileNames = cms.untracked.vstring(readFiles),
0048                                 skipEvents = cms.untracked.uint32(0)
0049                                )
0050 else:
0051     print(">>>>>>>>>> MTS_cfg.py: msg%-i: dataset not specified! Loading default file -> filesDefaultData_Cosmics_string!")
0052     process.source = cms.Source("PoolSource",
0053                                 fileNames = cms.untracked.vstring(filesDefaultData_Cosmics_string),
0054                                 skipEvents = cms.untracked.uint32(0)
0055                                )
0056 
0057 ###################################################################
0058 # Get good lumi section and load data or handle MC
0059 ###################################################################
0060 if "goodlumi" in config["validation"]:
0061      if os.path.isfile(config["validation"]["goodlumi"]):
0062           goodLumiSecs = cms.untracked.VLuminosityBlockRange(LumiList.LumiList(filename = config["validation"]["goodlumi"]).getCMSSWString().split(','))
0063      else:
0064           print("Does not exist: {}. Continue without good lumi section file.")
0065           goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0066 
0067 else:
0068      goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0069 process.source.lumisToProcess = goodLumiSecs
0070 
0071 ###################################################################
0072 # Runs and events
0073 ###################################################################
0074 runboundary = config["validation"].get("runboundary", 1)
0075 isMultipleRuns=False
0076 if(isinstance(runboundary, (list, tuple))):
0077      isMultipleRuns=True
0078      print("Multiple Runs are selected")
0079 if(isMultipleRuns):
0080      process.source.firstRun = cms.untracked.uint32(runboundary[0])
0081 else:
0082      process.source.firstRun = cms.untracked.uint32(runboundary)
0083 
0084 ###################################################################
0085 # Default set to 1 for unit tests
0086 ###################################################################
0087 process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(config["validation"].get("maxevents", 1)))
0088 
0089 ###################################################################
0090 # Bookeeping
0091 ###################################################################
0092 process.options = cms.untracked.PSet(
0093    wantSummary = cms.untracked.bool(False),
0094    Rethrow = cms.untracked.vstring("ProductNotFound"), # make this exception fatal
0095    fileMode  =  cms.untracked.string('NOMERGE'), # no ordering needed, but calls endRun/beginRun etc. at file boundaries
0096 )
0097 
0098 ###################################################################
0099 # Messages
0100 ###################################################################
0101 process.load("FWCore.MessageLogger.MessageLogger_cfi")
0102 process.MessageLogger.cerr.FwkReport.reportEvery = 1000
0103 process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True)
0104 
0105 ###################################################################
0106 # Basic modules
0107 ###################################################################
0108 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0109 process.load("Configuration.Geometry.GeometryDB_cff")
0110 process.load('Configuration.StandardSequences.Services_cff')
0111 process.load("Configuration.StandardSequences.MagneticField_cff")
0112 
0113 ####################################################################
0114 # Load and Configure Track refitter
0115 ####################################################################
0116 import Alignment.CommonAlignment.tools.trackselectionRefitting as trackselRefit
0117 process.seqTrackselRefit = trackselRefit.getSequence(
0118   process,
0119   config["validation"].get("trackcollection", "ALCARECOTkAlCosmicsCTF0T"),
0120   isPVValidation = False,
0121   TTRHBuilder = config["validation"].get("tthrbuilder", "WithAngleAndTemplate"),
0122   usePixelQualityFlag=config["validation"].get("usePixelQualityFlag", True),
0123   openMassWindow = False,
0124   cosmicsDecoMode = True,
0125   cosmicsZeroTesla=config["validation"].get("cosmicsZeroTesla", False),
0126   momentumConstraint = None,
0127   cosmicTrackSplitting = True,
0128   use_d0cut = False
0129 )
0130 
0131 ####################################################################
0132 # Global tag
0133 ####################################################################
0134 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0135 from Configuration.AlCa.GlobalTag import GlobalTag
0136 process.GlobalTag = GlobalTag(process.GlobalTag, config["alignment"].get("globaltag", "124X_dataRun3_Prompt_v10"))
0137 
0138 ####################################################################
0139 # Load conditions if wished
0140 ####################################################################
0141 if "conditions" in config["alignment"]:
0142   from CalibTracker.Configuration.Common.PoolDBESSource_cfi import poolDBESSource
0143 
0144   for condition in config["alignment"]["conditions"]:
0145     setattr(
0146       process,
0147       "conditionsIn{}".format(condition),
0148       poolDBESSource.clone(
0149         connect = cms.string(str(config["alignment"]["conditions"][condition]["connect"])),
0150         toGet = cms.VPSet(
0151           cms.PSet(
0152             record = cms.string(str(condition)),
0153             tag = cms.string(str(config["alignment"]["conditions"][condition]["tag"]))
0154           )
0155         )
0156       )
0157     )
0158 
0159     setattr(
0160       process,
0161       "prefer_conditionsIn{}".format(condition),
0162       cms.ESPrefer("PoolDBESSource", "conditionsIn{}".format(condition))
0163     )
0164 
0165 ####################################################################
0166 # Configure the Analyzer module
0167 ####################################################################
0168 
0169 process.FittingSmootherRKP5.EstimateCut = -1
0170 process.AlignmentTrackSelector.minHitsPerSubDet.inPIXEL = 2
0171 # Use compressions settings of TFile
0172 # see https://root.cern.ch/root/html534/TFile.html#TFile:SetCompressionSet    tings
0173 # settings = 100 * algorithm + level
0174 # level is from 1 (small) to 9 (large compression)
0175 # algo: 1 (ZLIB), 2 (LMZA)
0176 # see more about compression & performance: https://root.cern.ch/root/html534/guides/users-guide/InputOutput.html#compression-and-performance
0177 compressionSettings = 207
0178 process.cosmicValidation = cms.EDAnalyzer(
0179   "CosmicSplitterValidation",
0180   compressionSettings = cms.untracked.int32(compressionSettings),
0181   ifSplitMuons = cms.bool(False),
0182   checkIfGolden = cms.bool(False),
0183   splitTracks = cms.InputTag("FinalTrackRefitter","","splitter"),
0184   splitGlobalMuons = cms.InputTag("muons","","splitter"),
0185   originalTracks = cms.InputTag("FirstTrackRefitter","","splitter"),
0186   originalGlobalMuons = cms.InputTag("muons","","Rec")
0187 )
0188 
0189 ####################################################################
0190 # Output file
0191 ####################################################################
0192 process.TFileService = cms.Service("TFileService",
0193             fileName = cms.string("{}/MTSValidation_{}_{}.root".format(config.get("output", os.getcwd()), config["alignment"].get("name", ""), config["validation"].get("IOV", 1.))),
0194             closeFileFast = cms.untracked.bool(True),
0195     )
0196 
0197 ####################################################################
0198 # Path
0199 ####################################################################
0200 process.p = cms.Path(process.seqTrackselRefit*process.cosmicValidation)
0201 
0202 print("Done")