Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-04-17 02:41:45

0001 import os
0002 
0003 import FWCore.ParameterSet.Config as cms
0004 
0005 
0006 
0007 
0008 ##
0009 ## Setup command line options
0010 ##
0011 import FWCore.ParameterSet.VarParsing as VarParsing
0012 import sys
0013 options = VarParsing.VarParsing ('standard')
0014 options.register('sample', 'data1', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, "Input sample")
0015 options.register('globalTag', "None", VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, "Custom global tag")
0016 options.register('measurementName', "workingArea", VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, "Folder in which to store results")
0017 options.register('fileNumber', 1, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.int, "Input file number")
0018 options.register('iterNumber', 0, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.int, "Iteration number")
0019 options.register('lastIter', False, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.bool, "Last iteration")
0020 options.register('alignRcd','', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, "AlignmentRcd")
0021 options.register('conditions',"None", VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, "File with conditions")
0022 options.register('cosmics', False, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.bool, "Cosmic data set")
0023 # get and parse the command line arguments
0024 options.parseArguments()   
0025 
0026 print("Input sample: ", options.sample)
0027 print("Input file number", options.fileNumber)
0028 print("Iteration number: ", options.iterNumber)
0029 print("Last iteration: ", options.lastIter)
0030 print("AlignmentRcd: ", options.alignRcd)
0031 
0032 
0033 
0034 ##
0035 ## Process definition
0036 ##
0037 process = cms.Process("ApeEstimator")
0038 
0039 
0040 process.load("Configuration.Geometry.GeometryRecoDB_cff")
0041 process.load("Configuration.StandardSequences.Services_cff")
0042 process.load("Configuration.StandardSequences.MagneticField_cff")
0043 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
0044 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0045 from Configuration.AlCa.GlobalTag import GlobalTag
0046 from CondCore.CondDB.CondDB_cfi import *
0047 
0048 ##
0049 ## Message Logger
0050 ##
0051 process.load("FWCore.MessageService.MessageLogger_cfi")
0052 process.MessageLogger.SectorBuilder=dict()
0053 process.MessageLogger.ResidualErrorBinning=dict()
0054 process.MessageLogger.HitSelector=dict()
0055 process.MessageLogger.CalculateAPE=dict()
0056 process.MessageLogger.ApeEstimator=dict()
0057 process.MessageLogger.TrackRefitter=dict()
0058 process.MessageLogger.AlignmentTrackSelector=dict()
0059 process.MessageLogger.cerr.threshold = 'WARNING'
0060 process.MessageLogger.cerr.INFO.limit = 0
0061 process.MessageLogger.cerr.default.limit = -1
0062 process.MessageLogger.cerr.SectorBuilder = cms.untracked.PSet(limit = cms.untracked.int32(-1))
0063 process.MessageLogger.cerr.HitSelector = cms.untracked.PSet(limit = cms.untracked.int32(-1))
0064 process.MessageLogger.cerr.CalculateAPE = cms.untracked.PSet(limit = cms.untracked.int32(-1))
0065 process.MessageLogger.cerr.ApeEstimator = cms.untracked.PSet(limit = cms.untracked.int32(-1))
0066 process.MessageLogger.cerr.AlignmentTrackSelector = cms.untracked.PSet(limit = cms.untracked.int32(-1))
0067 process.MessageLogger.cerr.FwkReport.reportEvery = 1000 ## really show only every 1000th
0068 
0069 
0070 ##
0071 ## Process options
0072 ##
0073 process.options = cms.untracked.PSet(
0074     wantSummary = cms.untracked.bool(True),
0075 )
0076 
0077 
0078 
0079 ##
0080 ## Input sample definition
0081 ##
0082 isData1 = isData2 = False
0083 isData = False
0084 isQcd = isWlnu = isZmumu = isZtautau = isZmumu10 = isZmumu20 = isZmumu50 = False
0085 isMc = False
0086 isParticleGunMuon = isParticleGunPion = False
0087 isParticleGun = False
0088 if options.sample == 'data1':
0089     isData = True
0090 elif options.sample == 'data2':
0091     isData = True
0092 elif options.sample == 'data3':
0093     isData = True
0094 elif options.sample == 'data4':
0095     isData = True
0096 elif options.sample == 'qcd':
0097     isMc = True
0098 elif options.sample == 'wlnu':
0099     isMc = True
0100 elif options.sample == 'zmumu':
0101     isMc = True
0102 elif options.sample == 'ztautau':
0103     isMc = True
0104 elif options.sample == 'zmumu10':
0105     isMc = True
0106 elif options.sample == 'zmumu20':
0107     isMc = True
0108 elif options.sample == 'zmumu50':
0109     isMc = True
0110 elif "MC" in options.sample:
0111     isMc = True
0112     print(options.sample)
0113 else:
0114     print('ERROR --- incorrect data sammple: ', options.sample)
0115     exit(8888)
0116 
0117 
0118 ##
0119 ## Input Files
0120 ##
0121 readFiles = cms.untracked.vstring()
0122 process.source = cms.Source ("PoolSource",
0123     fileNames = readFiles
0124 )
0125 readFiles.extend( [
0126     'file:reco.root',
0127 ] )
0128 
0129 
0130 
0131 ##
0132 ## Number of Events (should be after input file)
0133 ##
0134 process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(options.maxEvents) ) # maxEvents is included in options by default
0135 
0136 
0137 
0138 ##
0139 ## Check run and event numbers for Dublicates --- only for real data
0140 ##
0141 process.source.duplicateCheckMode = cms.untracked.string("checkEachRealDataFile")
0142 #process.source.duplicateCheckMode = cms.untracked.string("checkAllFilesOpened")   # default value
0143 
0144 
0145 ##
0146 ## Whole Refitter Sequence
0147 ##
0148 process.load("Alignment.APEEstimation.TrackRefitter_38T_cff")
0149 
0150 if options.globalTag != "None":
0151     process.GlobalTag = GlobalTag(process.GlobalTag, options.globalTag, '')
0152 elif isParticleGun:
0153     process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_design', '')
0154 elif isMc:
0155     #~ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2018_design', '')
0156     process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2018_realistic', '')
0157 elif isData:
0158     process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_data', '')
0159 
0160 if options.conditions != "None":
0161     import importlib
0162     mod = importlib.import_module("Alignment.APEEstimation.conditions.{}".format(options.conditions))
0163     mod.applyConditions(process)
0164 
0165 ## Alignment and APE
0166 ##
0167 ## Choose Alignment (w/o touching APE)
0168 if options.alignRcd=='fromConditions':
0169     pass # Alignment is read from the conditions file in this case
0170 elif options.alignRcd=='design':
0171     pass
0172 elif options.alignRcd == 'globalTag':
0173     pass
0174 elif options.alignRcd == 'useStartGlobalTagForAllConditions':
0175     pass
0176 elif options.alignRcd == '':
0177     pass
0178 else:
0179     print('ERROR --- incorrect alignment: ', options.alignRcd)
0180     exit(8888)
0181 
0182 ## APE
0183 if options.iterNumber!=0:
0184     CondDBAlignmentError = CondDB.clone(connect = cms.string('sqlite_file:'+os.environ['CMSSW_BASE']+'/src/Alignment/APEEstimation/hists/'+options.measurementName+'/apeObjects/apeIter'+str(options.iterNumber-1)+'.db'))
0185     process.myTrackerAlignmentErr = cms.ESSource("PoolDBESSource",
0186         CondDBAlignmentError,
0187         toGet = cms.VPSet(
0188             cms.PSet(
0189                 record = cms.string('TrackerAlignmentErrorExtendedRcd'),
0190                 tag = cms.string('APEs')
0191             )
0192         )
0193     )
0194     process.es_prefer_trackerAlignmentErr = cms.ESPrefer("PoolDBESSource","myTrackerAlignmentErr")
0195 
0196 
0197 ##
0198 ## Beamspot (Use correct Beamspot for simulated Vertex smearing of ParticleGun)
0199 ##
0200 if isParticleGun:
0201     process.load("Alignment.APEEstimation.BeamspotForParticleGun_cff")
0202 
0203 
0204 ##
0205 ## ApeEstimator
0206 ##
0207 from Alignment.APEEstimation.ApeEstimator_cff import *
0208 process.ApeEstimator1 = ApeEstimator.clone(
0209     tjTkAssociationMapTag = "TrackRefitterForApeEstimator",
0210     applyTrackCuts = False,
0211     analyzerMode = False,
0212     calculateApe = True,
0213     Sectors = RecentSectors,
0214 )
0215 
0216 process.ApeEstimator2 = process.ApeEstimator1.clone(
0217   Sectors = ValidationSectors,
0218   analyzerMode = True,
0219   calculateApe = False,
0220 )
0221 process.ApeEstimator3 = process.ApeEstimator2.clone(
0222     zoomHists = False,
0223 )
0224 
0225 process.ApeEstimatorSequence = cms.Sequence(process.ApeEstimator1)
0226 if options.iterNumber==0:
0227   process.ApeEstimatorSequence *= process.ApeEstimator2
0228   process.ApeEstimatorSequence *= process.ApeEstimator3
0229 elif options.lastIter == True:
0230   process.ApeEstimatorSequence *= process.ApeEstimator2
0231 
0232 
0233 
0234 ##
0235 ## Output File Configuration
0236 ##
0237 process.TFileService = cms.Service("TFileService",
0238     fileName = cms.string(os.environ['CMSSW_BASE'] + '/src/Alignment/APEEstimation/hists/'+options.measurementName+'/'+options.sample+str(options.fileNumber)+'.root'),
0239     closeFileFast = cms.untracked.bool(True)
0240 )
0241 
0242 
0243 
0244 ##
0245 ## Path
0246 ##
0247 
0248 if not options.cosmics:
0249     process.p = cms.Path(
0250         process.RefitterHighPuritySequence*
0251         process.ApeEstimatorSequence
0252     )
0253 else:
0254     process.p = cms.Path(
0255         process.RefitterNoPuritySequence* # this sequence doesn't include high purity track criteria
0256         process.ApeEstimatorSequence
0257     )
0258 
0259 
0260