File indexing completed on 2025-03-23 23:39:50
0001 import glob
0002 import math
0003 import FWCore.ParameterSet.Config as cms
0004 import FWCore.Utilities.FileUtils as FileUtils
0005 from FWCore.ParameterSet.VarParsing import VarParsing
0006 from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultMC_DoubleMuon_string
0007
0008 options = VarParsing('analysis')
0009 options.register('scenario',
0010 'null',
0011 VarParsing.multiplicity.singleton,
0012 VarParsing.varType.string,
0013 "Name of input misalignment scenario")
0014
0015 options.register('globalTag',
0016 "125X_mcRun3_2022_design_v6",
0017 VarParsing.multiplicity.singleton,
0018 VarParsing.varType.string,
0019 "name of the input Global Tag")
0020
0021 options.register ('myfile',
0022 filesDefaultMC_DoubleMuon_string,
0023 VarParsing.multiplicity.singleton,
0024 VarParsing.varType.string,
0025 "file name")
0026
0027 options.register ('fromRECO',
0028 True,
0029 VarParsing.multiplicity.singleton,
0030 VarParsing.varType.bool,
0031 "start from RECO data-tier, if False it will use TkAlDiMuonAndVertex ALCARECO")
0032
0033 options.register ('FileList',
0034 '',
0035 VarParsing.multiplicity.singleton,
0036 VarParsing.varType.string,
0037 "FileList in DAS format")
0038
0039 options.parseArguments()
0040
0041 if(options.FileList):
0042 print("FileList: ", options.FileList)
0043 else:
0044 print("inputFile: ", options.myfile)
0045 print("outputFile: ", "ZmmNtuple_MC_GEN-SIM_{fscenario}.root".format(fscenario=options.scenario))
0046 print("conditionGT: ", options.globalTag)
0047 print("max events: ", options.maxEvents)
0048
0049 valid_scenarios = ['-10e-6','-8e-6','-6e-6','-4e-6','-2e-6','0','2e-6','4e-6','6e-6','8e-6','10e-6','null']
0050
0051 if options.scenario not in valid_scenarios:
0052 print("Error: Invalid scenario specified. Please choose from the following list: ")
0053 print(valid_scenarios)
0054 exit(1)
0055
0056 process = cms.Process("SagittaBiasNtuplizer")
0057
0058
0059
0060
0061 process.options.numberOfThreads = 8
0062
0063
0064
0065
0066 process.load("FWCore.MessageLogger.MessageLogger_cfi")
0067 process.MessageLogger.cerr.enable = False
0068 process.MessageLogger.SagittaBiasNtuplizer=dict()
0069 process.MessageLogger.cout = cms.untracked.PSet(
0070 enable = cms.untracked.bool(True),
0071 threshold = cms.untracked.string("INFO"),
0072 default = cms.untracked.PSet(limit = cms.untracked.int32(0)),
0073 FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1),
0074 reportEvery = cms.untracked.int32(1000)
0075 ),
0076 SagittaBiasNtuplizer = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0077 enableStatistics = cms.untracked.bool(True)
0078 )
0079
0080
0081
0082
0083 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0084 process.load("Configuration.StandardSequences.Services_cff")
0085 process.load("Configuration.StandardSequences.GeometryRecoDB_cff")
0086 process.load('Configuration.StandardSequences.MagneticField_cff')
0087 process.load("CondCore.CondDB.CondDB_cfi")
0088
0089
0090
0091
0092 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0093 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi')
0094 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi')
0095 process.load('TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff')
0096
0097
0098
0099
0100 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0101 from Configuration.AlCa.GlobalTag import GlobalTag
0102 process.GlobalTag = GlobalTag(process.GlobalTag, options.globalTag, '')
0103 if (options.scenario=='null'):
0104 print("null scenario, do nothing")
0105 pass
0106 elif (options.scenario=='ideal'):
0107 print("ideal scenario, use ideal tags")
0108 process.GlobalTag.toGet = cms.VPSet(cms.PSet(record = cms.string('TrackerAlignmentRcd'),
0109 tag = cms.string("TrackerAlignment_Upgrade2017_design_v4")),
0110 cms.PSet(record = cms.string('TrackerAlignmentErrorExtendedRcd'),
0111 tag = cms.string("TrackerAlignmentErrorsExtended_Upgrade2017_design_v0")),
0112 cms.PSet(record = cms.string('TrackerSurfaceDeformationRcd'),
0113 tag = cms.string("TrackerSurfaceDeformations_zero")))
0114 else :
0115 print("using {} scenario".format(options.scenario))
0116 process.GlobalTag.toGet = cms.VPSet(cms.PSet(connect = cms.string("sqlite_file:/afs/cern.ch/user/m/musich/public/layer_rotation_studies/outputfile_"+options.scenario+".db"),
0117 record = cms.string('TrackerAlignmentRcd'),
0118 tag = cms.string("Alignments")))
0119
0120
0121
0122
0123 if(options.FileList):
0124 print('Loading file list from ASCII file')
0125 filelist = FileUtils.loadListFromFile (options.FileList)
0126 readFiles = cms.untracked.vstring( *filelist)
0127 else:
0128 readFiles = cms.untracked.vstring([options.myfile])
0129
0130 process.source = cms.Source("PoolSource",
0131 fileNames = readFiles)
0132
0133 process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(options.maxEvents))
0134
0135
0136
0137
0138 import Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi
0139 process.MuSkimSelector = Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi.AlignmentTrackSelector.clone(
0140 applyBasicCuts = True,
0141 filter = True,
0142 src = "ALCARECOTkAlDiMuon",
0143 ptMin = 17.,
0144 pMin = 17.,
0145 etaMin = -2.5,
0146 etaMax = 2.5,
0147 d0Min = -2.,
0148 d0Max = 2.,
0149 dzMin = -25.,
0150 dzMax = 25.,
0151 nHitMin = 6,
0152 nHitMin2D = 0)
0153
0154
0155
0156
0157 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0158 import RecoTracker.TrackProducer.TrackRefitters_cff
0159 process.refittedMuons = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone(
0160 src = "ALCARECOTkAlDiMuon",
0161 TrajectoryInEvent = True,
0162 NavigationSchool = '',
0163 TTRHBuilder = "WithAngleAndTemplate")
0164
0165
0166
0167
0168 process.refittedVtxTracks = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone(
0169 src = "ALCARECOTkAlDiMuonVertexTracks",
0170 TrajectoryInEvent = True,
0171 NavigationSchool = '',
0172 TTRHBuilder = "WithAngleAndTemplate")
0173
0174
0175
0176
0177 process.refittedTracks = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone(
0178 src = "generalTracks",
0179 TrajectoryInEvent = True,
0180 NavigationSchool = '',
0181 TTRHBuilder = "WithAngleAndTemplate")
0182
0183
0184
0185
0186 from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import offlinePrimaryVertices
0187 process.offlinePrimaryVerticesFromRefittedTrks = offlinePrimaryVertices.clone()
0188 process.offlinePrimaryVerticesFromRefittedTrks.TrackLabel = "refittedTracks" if options.fromRECO else "refittedVtxTracks"
0189
0190
0191
0192
0193 process.ZtoMMNtuple = cms.EDAnalyzer("SagittaBiasNtuplizer",
0194 useReco = cms.bool(options.fromRECO),
0195 doGen = cms.bool(True),
0196 vertices = cms.InputTag('offlinePrimaryVerticesFromRefittedTrks'),
0197 **({
0198 "muons": cms.InputTag('muons'),
0199 "tracks": cms.InputTag('refittedTracks')
0200 } if options.fromRECO else {
0201 "muonTracks": cms.InputTag('refittedMuons'),
0202 "genParticles": cms.InputTag('TkAlDiMuonAndVertexGenMuonSelector')
0203 }))
0204
0205 process.DiMuonVertexValidation = cms.EDAnalyzer("DiMuonVertexValidation",
0206 useReco = cms.bool(options.fromRECO),
0207 vertices = cms.InputTag('offlinePrimaryVerticesFromRefittedTrks'),
0208 **({
0209 "muons": cms.InputTag('muons'),
0210 "tracks" : cms.InputTag("generalTracks")
0211 } if options.fromRECO else {
0212 "muonTracks": cms.InputTag('refittedMuons'),
0213 "tracks": cms.InputTag('')
0214 }))
0215
0216 from Alignment.OfflineValidation.diMuonValidation_cfi import diMuonValidation as _diMuonValidation
0217 process.DiMuonMassValidation = _diMuonValidation.clone(
0218 TkTag = 'refittedMuons',
0219
0220
0221 Pair_mass_min = 80.,
0222 Pair_mass_max = 120.,
0223 Pair_mass_nbins = 80,
0224 Pair_etaminpos = -2.4,
0225 Pair_etamaxpos = 2.4,
0226 Pair_etaminneg = -2.4,
0227 Pair_etamaxneg = 2.4,
0228
0229 Variable_CosThetaCS_xmin = -1.,
0230 Variable_CosThetaCS_xmax = 1.,
0231 Variable_CosThetaCS_nbins = 20,
0232
0233 Variable_DeltaEta_xmin = -4.8,
0234 Variable_DeltaEta_xmax = 4.8,
0235 Variable_DeltaEta_nbins = 20,
0236
0237 Variable_EtaMinus_xmin = -2.4,
0238 Variable_EtaMinus_xmax = 2.4,
0239 Variable_EtaMinus_nbins = 12,
0240
0241 Variable_EtaPlus_xmin = -2.4,
0242 Variable_EtaPlus_xmax = 2.4,
0243 Variable_EtaPlus_nbins = 12,
0244
0245 Variable_PhiCS_xmin = -math.pi/2.,
0246 Variable_PhiCS_xmax = math.pi/2.,
0247 Variable_PhiCS_nbins = 20,
0248
0249 Variable_PhiMinus_xmin = -math.pi,
0250 Variable_PhiMinus_xmax = math.pi,
0251 Variable_PhiMinus_nbins = 16,
0252
0253 Variable_PhiPlus_xmin = -math.pi,
0254 Variable_PhiPlus_xmax = math.pi,
0255 Variable_PhiPlus_nbins = 16,
0256
0257 Variable_PairPt_xmin = 0.,
0258 Variable_PairPt_xmax = 100.,
0259 Variable_PairPt_nbins = 100)
0260
0261
0262
0263
0264 process.TFileService = cms.Service("TFileService",
0265 fileName = cms.string("ZmmNtuple_MC_GEN-SIM_"+options.scenario+".root"))
0266
0267
0268
0269
0270 process.p1 = cms.Path(
0271 process.offlineBeamSpot *
0272 (process.refittedTracks if options.fromRECO else process.refittedMuons * process.refittedVtxTracks) *
0273 process.offlinePrimaryVerticesFromRefittedTrks *
0274 process.ZtoMMNtuple *
0275 process.DiMuonVertexValidation *
0276 (process.DiMuonMassValidation if not options.fromRECO else cms.Sequence())
0277 )