Back to home page

Project CMSSW displayed by LXR

 
 

    


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 #Instructions:
0007 #     before running this script make sure that you have access to %fffBaseDir%/ramdisk and %fffBaseDir%/data
0008 #     these parameters can also be changed in startFU.py and startBU.py scripts
0009 #user = os.environ['USER']
0010 
0011 options = VarParsing.VarParsing ('analysis')
0012 
0013 options.register ('runNumber',
0014                   100, # default value
0015                   VarParsing.VarParsing.multiplicity.singleton,
0016                   VarParsing.VarParsing.varType.int,          # string, int, or float
0017                   "Run Number")
0018 
0019 options.register ('buBaseDir',
0020                   'ramdisk/', # default value
0021                   VarParsing.VarParsing.multiplicity.singleton,
0022                   VarParsing.VarParsing.varType.string,          # string, int, or float
0023                   "BU base directory")
0024 
0025 options.register ('fffBaseDir',
0026                   '.', # default value
0027                   VarParsing.VarParsing.multiplicity.singleton,
0028                   VarParsing.VarParsing.varType.string,          # string, int, or float
0029                   "FFF base directory")
0030 
0031 options.register ('maxLS',
0032                   0,
0033                   VarParsing.VarParsing.multiplicity.singleton,
0034                   VarParsing.VarParsing.varType.int,          # string, int, or float
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,          # string, int, or float
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,          # string, int, or float
0047                   "Number of events per raw file")
0048 
0049 options.register ('fedMeanSize',
0050                   1024,
0051                   VarParsing.VarParsing.multiplicity.singleton,
0052                   VarParsing.VarParsing.varType.int,          # string, int, or float
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,          # string, int, or float
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,          # string, int, or float
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,          # string, int, or float
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 #try to create 'ramdisk' directory
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 #throttle when running with no limit
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         #set FED filering
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)