Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-11-25 02:29:47

0001 
0002 import FWCore.ParameterSet.Config as cms
0003 import FWCore.ParameterSet.VarParsing as VarParsing
0004 import sys
0005 
0006 options = VarParsing.VarParsing()
0007 
0008 options.register('producerType',
0009                  'static_DDD', #default value
0010                  VarParsing.VarParsing.multiplicity.singleton,
0011                  VarParsing.VarParsing.varType.string,
0012                  "MF producer to use. Valid values: 'static_DDD', 'static_DD4hep', 'fromDB', 'fromDB_DD4hep'")
0013 
0014 options.register('era',
0015                  'RunII', #default value
0016                  VarParsing.VarParsing.multiplicity.singleton,
0017                  VarParsing.VarParsing.varType.string,
0018                  "'RunI'or 'RunII'")
0019 
0020 options.register('current',
0021                  18000, #default value
0022                  VarParsing.VarParsing.multiplicity.singleton,
0023                  VarParsing.VarParsing.varType.float,
0024                  "Magnet current (nominal values: 18164=3.8T; 16730=3.5T; 14340=3T; 9500=2T; -1=loop in different IOVs, to test switching currents in the same job")
0025 
0026 options.parseArguments()
0027 
0028 
0029 process = cms.Process("MAGNETICFIELDTEST")
0030 
0031 process.source = cms.Source("EmptySource")
0032 
0033 process.maxEvents = cms.untracked.PSet(
0034     input = cms.untracked.int32(1)
0035 )
0036 
0037 REFERENCEFILE = 'none'
0038 
0039 if options.current < 0 : # Test switching of maps in the same job, simulating different IOVs with different currents in runInfo
0040     # Note that this currently crashes with producerType='fromDB_DD4hep' when a different geometry has to be created in the switch, due a limitation of DD4hep.
0041     
0042     # FIXME: Only build the map and print the field at IP - no regression is actually run. To do that we would need to set up a mechanism to specify the
0043     # reference file file to be picked for each current at runtime.
0044     REFERENCEFILE = ''
0045 
0046     if options.producerType == 'static_DDD' or options.producerType == 'static_DD4hep' :
0047         sys.exit('Invalid configuration: current=-1 mode is not supported with static prouducers')
0048     process.source.numberEventsInLuminosityBlock =cms.untracked.uint32(1)
0049 
0050     if options.era=='RunI':
0051         process.source.firstLuminosityBlockForEachRun = cms.untracked.VLuminosityBlockID(
0052             cms.LuminosityBlockID(10,1),
0053             cms.LuminosityBlockID(20,2),
0054             cms.LuminosityBlockID(30,3),
0055             cms.LuminosityBlockID(40,4),
0056             cms.LuminosityBlockID(50,5),
0057             )
0058 
0059         process.riSource = cms.ESSource("EmptyESSource", recordName = cms.string("RunInfoRcd"),
0060                                         iovIsRunNotTime = cms.bool(True),
0061                                         firstValid = cms.vuint32(10,20,30,40,50))
0062 
0063         process.add_( cms.ESProducer("RunInfoTestESProducer",
0064                                      runInfos = cms.VPSet(cms.PSet(run = cms.int32(10), avg_current = cms.double(18000.)),
0065                                                           cms.PSet(run = cms.int32(20), avg_current = cms.double(16000.)),
0066                                                           cms.PSet(run = cms.int32(30), avg_current = cms.double(14000.)),
0067                                                           cms.PSet(run = cms.int32(40), avg_current = cms.double(10000.)),
0068                                                           cms.PSet(run = cms.int32(50), avg_current = cms.double(0.)),
0069                                                           ) ) )
0070     else :
0071         process.source.firstLuminosityBlockForEachRun = cms.untracked.VLuminosityBlockID(
0072             cms.LuminosityBlockID(300001,1),
0073             cms.LuminosityBlockID(300002,2),
0074             cms.LuminosityBlockID(300003,3),
0075             cms.LuminosityBlockID(300004,4),
0076             cms.LuminosityBlockID(300005,5),
0077             )
0078         process.add_( cms.ESProducer("RunInfoTestESProducer",
0079                                      runInfos = cms.VPSet(cms.PSet(run = cms.int32(300001), avg_current = cms.double(18000.)),
0080                                                           cms.PSet(run = cms.int32(300002), avg_current = cms.double(16000.)),
0081                                                           cms.PSet(run = cms.int32(300003), avg_current = cms.double(14000.)),
0082                                                           cms.PSet(run = cms.int32(300004), avg_current = cms.double(10000.)),
0083                                                           cms.PSet(run = cms.int32(300005), avg_current = cms.double(0.)),
0084                                                           ) ) )
0085         
0086 
0087     process.maxEvents.input = len(process.source.firstLuminosityBlockForEachRun)
0088 
0089 
0090 if options.current > 18765 or (options.current <= 4779 and options.current>0) :
0091     sys.exit('ERROR: invalid current value: ' +  str(options.current))
0092 elif options.current > 17543 :
0093     if options.era == 'RunII' :
0094         REFERENCEFILE = 'MagneticField/Engine/data/Regression/referenceField_160812_RII_3_8T.bin'
0095     elif options.era == 'RunI' :
0096         REFERENCEFILE = 'MagneticField/Engine/data/Regression/referenceField_160812_RI_3_8T.bin'
0097     else: 
0098         sys.exit('ERROR: Invalid era: ' + options.era)
0099 elif options.current > 15617 :
0100     REFERENCEFILE = 'MagneticField/Engine/data/Regression/referenceField_160812_3_5T.bin'
0101 elif options.current > 11987 :
0102     REFERENCEFILE = 'MagneticField/Engine/data/Regression/referenceField_160812_3T.bin'
0103 elif options.current > 4779 :
0104     REFERENCEFILE = 'MagneticField/Engine/data/Regression/referenceField_71212_2T.bin'
0105 
0106 
0107 if options.producerType == 'static_DDD':
0108     if options.current > 17543 :
0109         process.load("MagneticField.Engine.volumeBasedMagneticField_160812_cfi") # 3.8T, RII
0110         if options.era == 'RunI' :
0111             process.VolumeBasedMagneticFieldESProducer.version = cms.string('grid_160812_3_8t_Run1') # 3.8T, RII
0112     elif options.current > 15617 :
0113         process.load("MagneticField.Engine.volumeBasedMagneticField_160812_cfi")
0114         process.VolumeBasedMagneticFieldESProducer.version = cms.string('grid_160812_3_5t') # 3.5T
0115         process.ParametrizedMagneticFieldProducer.parameters.BValue = cms.string('3_5T')
0116     elif options.current > 11987 :
0117         process.load("MagneticField.Engine.volumeBasedMagneticField_160812_cfi")
0118         process.VolumeBasedMagneticFieldESProducer.version = cms.string('grid_160812_3t')
0119         process.ParametrizedMagneticFieldProducer.parameters.BValue = cms.string('3_0T')
0120     elif options.current > 4779 :
0121         process.load("MagneticField.Engine.volumeBasedMagneticField_71212_cfi") #2.0T
0122 
0123 
0124 elif options.producerType == 'static_DD4hep' :
0125     process.load("MagneticField.Engine.volumeBasedMagneticField_dd4hep_160812_cfi") 
0126     if options.current > 17543 :
0127         if options.era == 'RunI' :
0128             process.VolumeBasedMagneticFieldESProducer.version = cms.string('grid_160812_3_8t_Run1') # 3.8T, RII
0129     elif options.current > 15617 :
0130         process.VolumeBasedMagneticFieldESProducer.version = cms.string('grid_160812_3_5t') # 3.5T
0131         process.ParametrizedMagneticFieldProducer.parameters.BValue = cms.string('3_5T')
0132     elif options.current > 11987 :
0133         process.VolumeBasedMagneticFieldESProducer.version = cms.string('grid_160812_3t')
0134         process.ParametrizedMagneticFieldProducer.parameters.BValue = cms.string('3_0T')
0135     elif options.current > 4779 :
0136         sys.exit('ERROR: Unsupported current for static_DD4hep: ' + str(options.current))
0137 
0138 
0139 elif options.producerType == 'fromDB' or options.producerType == 'fromDB_DD4hep':
0140     if options.producerType == 'fromDB':
0141         process.load("Configuration.StandardSequences.MagneticField_cff")
0142     elif options.producerType == 'fromDB_DD4hep':
0143         process.load("MagneticField.Engine.volumeBasedMagneticFieldFromDB_dd4hep_cfi")
0144 
0145     process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
0146     from Configuration.AlCa.GlobalTag import GlobalTag
0147     process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_data', '') # Note: testing the proper set-up of data and MC iovs is beyond the scope of this script.
0148 
0149     if options.era == 'RunII' :
0150         process.source.firstRun = cms.untracked.uint32(300000)
0151     elif options.era == 'RunI' :
0152         process.source.firstRun = cms.untracked.uint32(100)
0153 
0154     # Note that this tests the map and the valueOverride method, but not the mechanism using the actual RunInfo, one mor set of tests could be added for this purpose.
0155     if options.current > 17543:
0156         process.VolumeBasedMagneticFieldESProducer.valueOverride = -1 #3.8T is the default
0157     elif options.current > 15617 :
0158         process.VolumeBasedMagneticFieldESProducer.valueOverride = 17000 #3.5 T
0159     elif options.current > 11987 :
0160         process.VolumeBasedMagneticFieldESProducer.valueOverride = 14000 #3 T
0161     elif options.current > 4779 :
0162         process.VolumeBasedMagneticFieldESProducer.valueOverride = 10000 #2 T
0163 
0164 
0165 
0166 else :
0167     print('\nERROR: invalid producerType', producerType,'\n')
0168 
0169 
0170 print('\nRegression for MF built with', options.producerType, 'era:', options.era, 'current:', options.current,'\n')
0171 
0172 
0173 process.testMagneticField = cms.EDAnalyzer("testMagneticField",
0174 
0175 ## Uncomment to write down the reference file
0176 #   outputTable = cms.untracked.string("newtable.bin"),
0177 
0178 ## Use the specified reference file to compare with
0179     inputTable = cms.untracked.string(REFERENCEFILE),
0180 
0181 ## Valid input file types: "xyz", "rpz_m", "xyz_m", "TOSCA" 
0182     inputTableType = cms.untracked.string("xyz"),
0183 
0184 ## Resolution used for validation, number of points
0185     resolution     = cms.untracked.double(0.0001),
0186         numberOfPoints = cms.untracked.int32(1000000),
0187 
0188 ## Size of testing volume (cm):
0189     InnerRadius = cms.untracked.double(0),    #  default: 0 
0190     OuterRadius = cms.untracked.double(900),  #  default: 900 
0191         minZ  = cms.untracked.double(-2400),      #  default: -2400 
0192         maxZ  = cms.untracked.double(2400)        #  default: 2400 
0193 
0194 )
0195 
0196 process.p1 = cms.Path(process.testMagneticField)
0197 
0198