File indexing completed on 2025-06-29 22:57:59
0001 import FWCore.ParameterSet.Config as cms
0002 import FWCore.ParameterSet.VarParsing as VarParsing
0003 import os
0004 import math
0005
0006
0007
0008
0009
0010
0011 options = VarParsing.VarParsing ('analysis')
0012
0013 options.register ('runNumber',
0014 100,
0015 VarParsing.VarParsing.multiplicity.singleton,
0016 VarParsing.VarParsing.varType.int,
0017 "Run Number")
0018
0019 options.register ('buBaseDir',
0020 'ramdisk/',
0021 VarParsing.VarParsing.multiplicity.singleton,
0022 VarParsing.VarParsing.varType.string,
0023 "BU base directory")
0024
0025 options.register ('fffBaseDir',
0026 '.',
0027 VarParsing.VarParsing.multiplicity.singleton,
0028 VarParsing.VarParsing.varType.string,
0029 "FFF base directory")
0030
0031 options.register ('maxLS',
0032 0,
0033 VarParsing.VarParsing.multiplicity.singleton,
0034 VarParsing.VarParsing.varType.int,
0035 "Max LS to generate (0 to disable limit)")
0036
0037 options.register ('eventsPerLS',
0038 105,
0039 VarParsing.VarParsing.multiplicity.singleton,
0040 VarParsing.VarParsing.varType.int,
0041 "Max LS to generate (0 to disable limit)")
0042
0043 options.register ('eventsPerFile',
0044 20,
0045 VarParsing.VarParsing.multiplicity.singleton,
0046 VarParsing.VarParsing.varType.int,
0047 "Number of events per raw file")
0048
0049 options.register ('fedMeanSize',
0050 1024,
0051 VarParsing.VarParsing.multiplicity.singleton,
0052 VarParsing.VarParsing.varType.int,
0053 "Mean size of generated (fake) FED raw payload")
0054
0055 options.register ('frdFileVersion',
0056 1,
0057 VarParsing.VarParsing.multiplicity.singleton,
0058 VarParsing.VarParsing.varType.int,
0059 "Generate raw files with FRD file header with version 1 or separate JSON files with 0")
0060
0061 options.register ('dataType',
0062 "FRD",
0063 VarParsing.VarParsing.multiplicity.singleton,
0064 VarParsing.VarParsing.varType.string,
0065 "Choice between FRD or raw DTH data generation")
0066
0067 options.register ('subsystems',
0068 "",
0069 VarParsing.VarParsing.multiplicity.singleton,
0070 VarParsing.VarParsing.varType.string,
0071 "List of generated subsystem FEDs. Empty means all.")
0072
0073
0074 options.register ('conversionTest',
0075 False,
0076 VarParsing.VarParsing.multiplicity.singleton,
0077 VarParsing.VarParsing.varType.bool,
0078 "Test conversion between new and old format")
0079
0080
0081 options.parseArguments()
0082
0083
0084 try:
0085 os.makedirs(options.fffBaseDir+"/"+options.buBaseDir)
0086 except:pass
0087
0088
0089 cmsswbase = os.path.expandvars("$CMSSW_BASE/")
0090
0091 process = cms.Process("FAKEBU")
0092 if options.maxLS==0:
0093 process.maxEvents = cms.untracked.PSet(
0094 input = cms.untracked.int32(-1)
0095 )
0096 else:
0097 process.maxEvents = cms.untracked.PSet(
0098 input = cms.untracked.int32(options.eventsPerLS * options.maxLS)
0099 )
0100
0101 process.options = cms.untracked.PSet(
0102 )
0103
0104 process.MessageLogger = cms.Service("MessageLogger",
0105 destinations = cms.untracked.vstring( 'cout' ),
0106 cout = cms.untracked.PSet( FwkReport =
0107 cms.untracked.PSet(reportEvery = cms.untracked.int32(1000),
0108 optionalPSet = cms.untracked.bool(True),
0109 limit = cms.untracked.int32(10000000)
0110 ),
0111 threshold = cms.untracked.string( "INFO" )
0112 )
0113 )
0114
0115 process.source = cms.Source("EmptySource",
0116 firstRun= cms.untracked.uint32(options.runNumber),
0117 numberEventsInLuminosityBlock = cms.untracked.uint32(options.eventsPerLS),
0118 numberEventsInRun = cms.untracked.uint32(0)
0119 )
0120
0121 process.EvFDaqDirector = cms.Service("EvFDaqDirector",
0122 runNumber = cms.untracked.uint32(options.runNumber),
0123 baseDir = cms.untracked.string(options.fffBaseDir+"/"+options.buBaseDir),
0124 buBaseDir = cms.untracked.string(options.fffBaseDir+"/"+options.buBaseDir),
0125 directorIsBU = cms.untracked.bool(True),
0126 useFileBroker = cms.untracked.bool(False),
0127 fileBrokerHost = cms.untracked.string("")
0128 )
0129
0130
0131 if options.maxLS==0:
0132 process.EvFBuildingThrottle = cms.Service("EvFBuildingThrottle",
0133 highWaterMark = cms.untracked.double(0.80),
0134 lowWaterMark = cms.untracked.double(0.75),
0135 sleepmSecs = cms.untracked.uint32(500))
0136
0137 process.a = cms.EDAnalyzer("ExceptionGenerator",
0138 defaultAction = cms.untracked.int32(0),
0139 defaultQualifier = cms.untracked.int32(0))
0140
0141 if options.dataType == "FRD":
0142 process.s = cms.EDProducer("DaqFakeReader",
0143 fillRandom = cms.untracked.bool(True),
0144 meanSize = cms.untracked.uint32(options.fedMeanSize),
0145 width = cms.untracked.uint32(int(math.ceil(options.fedMeanSize/2.))),
0146 tcdsFEDID = cms.untracked.uint32(1024),
0147 injectErrPpm = cms.untracked.uint32(0)
0148 )
0149 if options.subsystems:
0150
0151 process.s.subsystems = cms.untracked.vstring(tuple(options.subsystems.split(',')))
0152
0153 process.out = cms.OutputModule("RawStreamFileWriterForBU",
0154 source = cms.InputTag("s"),
0155 numEventsPerFile = cms.uint32(options.eventsPerFile),
0156 frdVersion = cms.uint32(6),
0157 frdFileVersion = cms.uint32(options.frdFileVersion),
0158 )
0159
0160 elif options.dataType == "DTH":
0161 process.s = cms.EDProducer("DTHFakeReader",
0162 fillRandom = cms.untracked.bool(True),
0163 meanSize = cms.untracked.uint32(options.fedMeanSize),
0164 width = cms.untracked.uint32(int(math.ceil(options.fedMeanSize/2.))),
0165 injectErrPpm = cms.untracked.uint32(0),
0166 sourceIdList = cms.untracked.vuint32(66,1511)
0167 )
0168
0169 process.out = cms.OutputModule("RawStreamFileWriterForBU",
0170 source = cms.InputTag("s"),
0171 numEventsPerFile = cms.uint32(options.eventsPerFile),
0172 frdVersion = cms.uint32(0),
0173 frdFileVersion = cms.uint32(0),
0174 sourceIdList = cms.untracked.vuint32(66,1511),
0175 rawProductName = cms.untracked.string("RawDataBuffer")
0176 )
0177
0178 if options.conversionTest:
0179 print("Running conversion TEST")
0180 process.bufToColl = cms.EDProducer("RawBufferToCollection", source = cms.InputTag("s"))
0181 process.collToBuf = cms.EDProducer("RawCollectionToBuffer", source = cms.InputTag("bufToColl"))
0182 process.p = cms.Path(process.s+process.a+process.bufToColl+process.collToBuf)
0183 process.out.source="collToBuf"
0184 else:
0185 process.p = cms.Path(process.s+process.a)
0186
0187 process.ep = cms.EndPath(process.out)