File indexing completed on 2024-11-06 06:06:10
0001 import math
0002 import glob
0003 import importlib
0004 import FWCore.ParameterSet.Config as cms
0005 from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultData_Comissioning2022_Cosmics_string,filesDefaultMC_DoubleMuonPUPhase_string
0006
0007
0008
0009
0010 import FWCore.ParameterSet.VarParsing as VarParsing
0011 options = VarParsing.VarParsing()
0012 options.register('outFileName',
0013 "test.root",
0014 VarParsing.VarParsing.multiplicity.singleton,
0015 VarParsing.VarParsing.varType.string,
0016 "name of the output file (test.root is default)")
0017
0018 options.register('trackCollection',
0019 "ctfWithMaterialTracksP5",
0020 VarParsing.VarParsing.multiplicity.singleton,
0021 VarParsing.VarParsing.varType.string,
0022 "name of the input track collection")
0023
0024 options.register('globalTag',
0025 "auto:run3_data_prompt",
0026 VarParsing.VarParsing.multiplicity.singleton,
0027 VarParsing.VarParsing.varType.string,
0028 "name of the input Global Tag")
0029
0030 options.register('unitTest',
0031 False,
0032 VarParsing.VarParsing.multiplicity.singleton,
0033 VarParsing.VarParsing.varType.bool,
0034 "is it a unit test?")
0035
0036 options.register('isDiMuonData',
0037 False,
0038 VarParsing.VarParsing.multiplicity.singleton,
0039 VarParsing.VarParsing.varType.bool,
0040 "is it running on DiMuon data?")
0041
0042 options.register('isCosmics',
0043 False,
0044 VarParsing.VarParsing.multiplicity.singleton,
0045 VarParsing.VarParsing.varType.bool,
0046 "is it running on cosmics data?")
0047
0048 options.register('inputData',
0049 "/eos/cms/store/express/Commissioning2022/ExpressCosmics/FEVT/Express-v1/000/350/010/00000/*",
0050 VarParsing.VarParsing.multiplicity.singleton,
0051 VarParsing.VarParsing.varType.string,
0052 "eos directory to read from")
0053
0054 options.register('maxEvents',
0055 -1,
0056 VarParsing.VarParsing.multiplicity.singleton,
0057 VarParsing.VarParsing.varType.int,
0058 "num. events to run")
0059
0060 options.register('Detector',
0061 '2023',
0062 VarParsing.VarParsing.multiplicity.singleton,
0063 VarParsing.VarParsing.varType.string,
0064 "Detector to run upon")
0065
0066 options.parseArguments()
0067
0068
0069 from Configuration.PyReleaseValidation.upgradeWorkflowComponents import upgradeProperties
0070 ConditionsInfo = {}
0071 if 'D' in options.Detector:
0072 ConditionsInfo = upgradeProperties['Run4'][options.Detector]
0073 else:
0074 ConditionsInfo = upgradeProperties[2017][options.Detector]
0075
0076 era_value = ConditionsInfo['Era']
0077 era_module_name = f'Configuration.Eras.Era_{era_value}_cff'
0078 config_name = f'{era_value}'
0079 era_module = importlib.import_module(era_module_name)
0080 era_config = getattr(era_module, config_name, None)
0081
0082 if era_config is not None:
0083
0084 process = cms.Process("AlCaRECOAnalysis", era_config)
0085 else:
0086 print(f"Error: Could not find configuration {config_name} in module {era_module_name}.")
0087
0088
0089
0090
0091 process.load("FWCore.MessageLogger.MessageLogger_cfi")
0092 process.MessageLogger.cerr.enable = False
0093 process.MessageLogger.DMRChecker=dict()
0094 process.MessageLogger.GeneralPurposeTrackAnalyzer=dict()
0095 process.MessageLogger.cout = cms.untracked.PSet(
0096 enable = cms.untracked.bool(True),
0097 threshold = cms.untracked.string("INFO"),
0098 default = cms.untracked.PSet(limit = cms.untracked.int32(0)),
0099 FwkReport = cms.untracked.PSet(limit = cms.untracked.int32(-1),
0100 reportEvery = cms.untracked.int32(1000)
0101 ),
0102 DMRChecker = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0103 GeneralPurposeTrackAnalyzer = cms.untracked.PSet( limit = cms.untracked.int32(-1)),
0104
0105 )
0106
0107
0108
0109
0110 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0111 process.load("Configuration.StandardSequences.Services_cff")
0112 if 'D' in options.Detector:
0113 geom = options.Detector
0114 process.load(f'Configuration.Geometry.GeometryExtended{geom}Reco_cff')
0115 else:
0116 process.load("Configuration.StandardSequences.GeometryRecoDB_cff")
0117
0118 process.load('Configuration.StandardSequences.MagneticField_cff')
0119
0120 process.load("CondCore.CondDB.CondDB_cfi")
0121
0122
0123
0124
0125 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0126 from Configuration.AlCa.GlobalTag import GlobalTag
0127 process.GlobalTag = GlobalTag(process.GlobalTag,options.globalTag if (options.globalTag != '') else ConditionsInfo['GT'], '')
0128
0129
0130
0131
0132 readFiles = cms.untracked.vstring()
0133 process.source = cms.Source("PoolSource",fileNames = readFiles)
0134 the_files=[]
0135 if(options.unitTest):
0136
0137 if('D' in options.Detector) :
0138
0139 readFiles.extend([filesDefaultMC_DoubleMuonPUPhase_string])
0140 else:
0141
0142 readFiles.extend([filesDefaultData_Comissioning2022_Cosmics_string])
0143 else:
0144 file_list = glob.glob(options.inputData)
0145 for f in file_list:
0146 if '/eos/cms' in f:
0147 the_files.append(f.replace("/eos/cms",""))
0148 else:
0149 the_files.append(f.replace("./","file:"))
0150 print(the_files)
0151 readFiles.extend(the_files)
0152
0153 process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32((10 if (options.unitTest) else options.maxEvents)))
0154
0155
0156
0157
0158 process.load("RecoTracker.TrackProducer.MomentumConstraintProducer_cff")
0159 import RecoTracker.TrackProducer.MomentumConstraintProducer_cff
0160 process.AliMomConstraint = RecoTracker.TrackProducer.MomentumConstraintProducer_cff.MyMomConstraint.clone()
0161 process.AliMomConstraint.src = options.trackCollection
0162 process.AliMomConstraint.fixedMomentum = 5.0
0163 process.AliMomConstraint.fixedMomentumError = 0.005
0164
0165
0166
0167
0168 import Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi
0169 process.MuSkimSelector = Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi.AlignmentTrackSelector.clone(
0170 applyBasicCuts = True,
0171 filter = True,
0172 src = options.trackCollection,
0173 ptMin = 17.,
0174 pMin = 17.,
0175 etaMin = -2.5,
0176 etaMax = 2.5,
0177 d0Min = -2.,
0178 d0Max = 2.,
0179 dzMin = -25.,
0180 dzMax = 25.,
0181 nHitMin = 6,
0182 nHitMin2D = 0)
0183
0184
0185
0186
0187 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
0188 import RecoTracker.TrackProducer.TrackRefitters_cff
0189 if options.isCosmics:
0190 process.TrackRefitter1 = process.TrackRefitterP5.clone(
0191 src = options.trackCollection,
0192 TrajectoryInEvent = True,
0193 TTRHBuilder = "WithAngleAndTemplate",
0194 NavigationSchool = "",
0195
0196
0197 )
0198 else:
0199 process.TrackRefitter1 = RecoTracker.TrackProducer.TrackRefitter_cfi.TrackRefitter.clone(
0200 src = options.trackCollection,
0201 TrajectoryInEvent = True,
0202 TTRHBuilder = "WithAngleAndTemplate",
0203 NavigationSchool = "",
0204 )
0205
0206
0207
0208
0209 from CommonTools.RecoAlgos.ptMaxTrackCountFilter_cfi import ptMaxTrackCountFilter
0210 process.myfilter = ptMaxTrackCountFilter.clone(src = cms.InputTag(options.trackCollection),
0211 ptMax = cms.double(10.))
0212
0213 process.preAnaSeq = cms.Sequence()
0214 if(options.unitTest):
0215 print("adding the max pT filter")
0216 process.preAnaSeq = cms.Sequence(process.myfilter)
0217
0218
0219
0220
0221 process.myanalysis = cms.EDAnalyzer("GeneralPurposeTrackAnalyzer",
0222 TkTag = cms.InputTag('TrackRefitter1'),
0223
0224 isCosmics = cms.bool(options.isCosmics))
0225
0226 process.fastdmr = cms.EDAnalyzer("DMRChecker",
0227 TkTag = cms.InputTag('TrackRefitter1'),
0228 isCosmics = cms.bool(options.isCosmics))
0229
0230
0231
0232
0233 process.TFileService = cms.Service("TFileService",
0234 fileName = cms.string(options.outFileName))
0235
0236
0237
0238
0239
0240 process.load("TrackingTools.TransientTrack.TransientTrackBuilder_cfi")
0241 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi')
0242 process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi')
0243 process.load('TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff')
0244
0245 process.DiMuonVertexValidation = cms.EDAnalyzer("DiMuonVertexValidation",
0246 useReco = cms.bool(False),
0247 muonTracks = cms.InputTag('TrackRefitter1'),
0248 tracks = cms.InputTag(''),
0249 vertices = cms.InputTag('offlinePrimaryVertices'))
0250
0251 from Alignment.OfflineValidation.diMuonValidation_cfi import diMuonValidation as _diMuonValidation
0252 process.DiMuonMassValidation = _diMuonValidation.clone(
0253
0254 TkTag = 'TrackRefitter1',
0255
0256 Pair_mass_min = 80.,
0257 Pair_mass_max = 120.,
0258 Pair_mass_nbins = 80,
0259 Pair_etaminpos = -2.4,
0260 Pair_etamaxpos = 2.4,
0261 Pair_etaminneg = -2.4,
0262 Pair_etamaxneg = 2.4,
0263
0264 Variable_CosThetaCS_xmin = -1.,
0265 Variable_CosThetaCS_xmax = 1.,
0266 Variable_CosThetaCS_nbins = 20,
0267
0268 Variable_DeltaEta_xmin = -4.8,
0269 Variable_DeltaEta_xmax = 4.8,
0270 Variable_DeltaEta_nbins = 20,
0271
0272 Variable_EtaMinus_xmin = -2.4,
0273 Variable_EtaMinus_xmax = 2.4,
0274 Variable_EtaMinus_nbins = 12,
0275
0276 Variable_EtaPlus_xmin = -2.4,
0277 Variable_EtaPlus_xmax = 2.4,
0278 Variable_EtaPlus_nbins = 12,
0279
0280 Variable_PhiCS_xmin = -math.pi/2.,
0281 Variable_PhiCS_xmax = math.pi/2.,
0282 Variable_PhiCS_nbins = 20,
0283
0284 Variable_PhiMinus_xmin = -math.pi,
0285 Variable_PhiMinus_xmax = math.pi,
0286 Variable_PhiMinus_nbins = 16,
0287
0288 Variable_PhiPlus_xmin = -math.pi,
0289 Variable_PhiPlus_xmax = math.pi,
0290 Variable_PhiPlus_nbins = 16,
0291
0292 Variable_PairPt_xmin = 0.,
0293 Variable_PairPt_xmax = 100.,
0294 Variable_PairPt_nbins = 100)
0295
0296
0297
0298
0299 process.p1 = cms.Path(process.offlineBeamSpot
0300
0301 * process.TrackRefitter1
0302 * process.myanalysis
0303 * process.fastdmr)
0304
0305
0306
0307
0308 if(options.isDiMuonData):
0309 process.p1.insert(5,process.DiMuonVertexValidation)
0310 process.p1.insert(6,process.DiMuonMassValidation)
0311
0312
0313
0314
0315 if(options.unitTest and not options.isDiMuonData):
0316 process.p1.insert(0, process.preAnaSeq)
0317
0318
0319
0320