Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:22:29

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