Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 11:57:12

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