Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 10:40:25

0001 import math 
0002 import json
0003 import os
0004 
0005 import FWCore.ParameterSet.Config as cms
0006 import FWCore.PythonUtilities.LumiList as LumiList
0007 from FWCore.ParameterSet.VarParsing import VarParsing
0008 from Alignment.OfflineValidation.TkAlAllInOneTool.utils import _byteify
0009 
0010 ###################################################################
0011 # Define process
0012 ###################################################################
0013 process = cms.Process("TkAlignmentDiMuonValidation")
0014 
0015 ###################################################################
0016 # Argument parsing
0017 ###################################################################
0018 options = VarParsing()
0019 options.register("config", "", VarParsing.multiplicity.singleton, VarParsing.varType.string , "AllInOne config")
0020 options.parseArguments()
0021 
0022 ##Set validation mode
0023 valiMode = "StandAlone"
0024 
0025 ###################################################################
0026 # Read in AllInOne config in JSON format
0027 ###################################################################
0028 with open(options.config, "r") as configFile:
0029     config = _byteify(json.load(configFile, object_hook=_byteify),ignore_dicts=True)
0030 
0031 ###################################################################
0032 # Read filenames from given TXT file
0033 ###################################################################
0034 readFiles = []
0035 
0036 with open(config["validation"]["dataset"], "r") as datafiles:
0037     for fileName in datafiles.readlines():
0038         readFiles.append(fileName.replace("\n", ""))
0039 
0040 ###################################################################
0041 # Get good lumi section
0042 ###################################################################
0043 if "goodlumi" in config["validation"]:
0044     if os.path.isfile(config["validation"]["goodlumi"]):
0045         goodLumiSecs = cms.untracked.VLuminosityBlockRange(LumiList.LumiList(filename = config["validation"]["goodlumi"]).getCMSSWString().split(','))
0046 
0047     else:
0048         print("Does not exist: {}. Continue without good lumi section file.")
0049         goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0050 
0051 else:
0052     goodLumiSecs = cms.untracked.VLuminosityBlockRange()
0053 
0054 ###################################################################
0055 # Define input source
0056 ###################################################################
0057 process.source = cms.Source("PoolSource",
0058                             fileNames = cms.untracked.vstring(readFiles),
0059                             lumisToProcess = goodLumiSecs,
0060                             skipEvents = cms.untracked.uint32(0)
0061                         )
0062 process.maxEvents = cms.untracked.PSet(
0063     input = cms.untracked.int32(config["validation"].get("maxevents", 2000000))
0064 )
0065 
0066 ###################################################################
0067 # Bookeeping
0068 ###################################################################
0069 process.options = cms.untracked.PSet(
0070    wantSummary = cms.untracked.bool(False),
0071    Rethrow = cms.untracked.vstring("ProductNotFound"),
0072    fileMode  =  cms.untracked.string('NOMERGE'),
0073 )
0074 
0075 ###################################################################
0076 # Standard includes
0077 ###################################################################
0078 process.load("FWCore.MessageService.MessageLogger_cfi")
0079 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0080 process.load("Configuration.StandardSequences.Services_cff")
0081 process.load("Configuration.StandardSequences.GeometryRecoDB_cff")
0082 process.load("Configuration.StandardSequences.MagneticField_cff")
0083 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0084 
0085 ###################################################################
0086 # Messages
0087 ###################################################################
0088 process.load("FWCore.MessageLogger.MessageLogger_cfi")
0089 process.MessageLogger.cerr.FwkReport.reportEvery = 1000
0090 
0091 ###################################################################
0092 # Load and configure Track Refitter
0093 ###################################################################
0094 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0095 import RecoTracker.TrackProducer.TrackRefitters_cff
0096 process.TrackRefitter = process.TrackRefitterP5.clone(
0097     src =  'ALCARECOTkAlZMuMu',
0098     TrajectoryInEvent = True,
0099     TTRHBuilder = "WithAngleAndTemplate",
0100     NavigationSchool = "",
0101 )
0102 
0103 ###################################################################
0104 # Global Tag
0105 ###################################################################
0106 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0107 from Configuration.AlCa.GlobalTag import GlobalTag
0108 process.GlobalTag = GlobalTag(process.GlobalTag, config["alignment"].get("globaltag", "auto:run2_data"))
0109 
0110 ###################################################################
0111 # Load conditions if wished
0112 ###################################################################
0113 import CalibTracker.Configuration.Common.PoolDBESSource_cfi  
0114 if "conditions" in config["alignment"]:
0115     from CalibTracker.Configuration.Common.PoolDBESSource_cfi import poolDBESSource
0116     for condition in config["alignment"]["conditions"]:
0117         setattr(process, "conditionsIn{}".format(condition), poolDBESSource.clone(
0118             connect = cms.string(str(config["alignment"]["conditions"][condition]["connect"])),
0119             toGet = cms.VPSet(cms.PSet(record = cms.string(str(condition)),
0120                                        tag = cms.string(str(config["alignment"]["conditions"][condition]["tag"]))
0121                                       )
0122                               )
0123             )
0124         )
0125 
0126         setattr(process, "prefer_conditionsIn{}".format(condition), cms.ESPrefer("PoolDBESSource", "conditionsIn{}".format(condition)))
0127 
0128 ###################################################################
0129 # The Di Muon Mass Validation module
0130 ###################################################################
0131 from Alignment.OfflineValidation.diMuonValidation_cfi.py import diMuonValidation as _diMuonValidation
0132 process.DiMuonMassValidation = _diMuonValidation.clone(
0133     TkTag = 'TrackRefitter',
0134     # mu mu mass
0135     Pair_mass_min   = 80.,
0136     Pair_mass_max   = 120.,
0137     Pair_mass_nbins = 80,
0138     Pair_etaminpos  = -1,
0139     Pair_etamaxpos  = 1,
0140     Pair_etaminneg  = -1,
0141     Pair_etamaxneg  = 1,
0142     # cosTheta CS
0143     Variable_CosThetaCS_xmin  = -1.,
0144     Variable_CosThetaCS_xmax  =  1.,
0145     Variable_CosThetaCS_nbins = 20,
0146     # DeltaEta
0147     Variable_DeltaEta_xmin  = -4.8,
0148     Variable_DeltaEta_xmax  = 4.8,
0149     Variable_DeltaEta_nbins = 20,
0150     # EtaMinus
0151     Variable_EtaMinus_xmin  = -2.4,
0152     Variable_EtaMinus_xmax  =  2.4,
0153     Variable_EtaMinus_nbins = 12,
0154     # EtaPlus
0155     Variable_EtaPlus_xmin  = -2.4,
0156     Variable_EtaPlus_xmax  =  2.4,
0157     Variable_EtaPlus_nbins = 12,
0158     # Phi CS
0159     Variable_PhiCS_xmin  = -math.pi/2.,
0160     Variable_PhiCS_xmax  =  math.pi/2.,
0161     Variable_PhiCS_nbins = 20,
0162     # Phi Minus
0163     Variable_PhiMinus_xmin  = -math.pi,
0164     Variable_PhiMinus_xmax  =  math.pi,
0165     Variable_PhiMinus_nbins = 16,
0166     # Phi Plus
0167     Variable_PhiPlus_xmin  = -math.pi,
0168     Variable_PhiPlus_xmax  =  math.pi,
0169     Variable_PhiPlus_nbins = 16,
0170     # mu mu pT
0171     Variable_PairPt_xmin  = 0.,
0172     Variable_PairPt_xmax  = 100.,
0173     Variable_PairPt_nbins = 100)
0174 
0175 ###################################################################
0176 # Define sequences depending on validation mode
0177 ###################################################################
0178 if valiMode == "StandAlone":
0179     # Output file
0180     process.TFileService = cms.Service("TFileService",
0181             fileName = cms.string("{}/Zmumu.root".format(config["output"])),
0182             closeFileFast = cms.untracked.bool(True),
0183     )
0184 
0185 process.p = cms.Path(process.offlineBeamSpot*process.TrackRefitter*process.DiMuonMassValidation)