File indexing completed on 2024-04-06 11:58:37
0001 from CondTools.CTPPS.mappings_PPSObjects_XML_cfi import *
0002 import FWCore.ParameterSet.Config as cms
0003 import os
0004 import re
0005 import subprocess
0006 import sys
0007 import shutil
0008
0009
0010
0011
0012
0013 fromDb = True
0014 if(len(sys.argv)>1 and sys.argv[1].lower()=='false'):
0015 fromDb = False
0016
0017
0018
0019 writeBothRecords = False
0020 if(len(sys.argv)>2 and sys.argv[2].lower()=='true'):
0021 writeBothRecords = True
0022
0023
0024 filesToRead = [totemTiming, timingDiamond, trackingStrip, totemT2]
0025 if(len(sys.argv)>3):
0026 filesToRead = [filesMap[mapName] for mapName in sys.argv[3:]]
0027
0028
0029
0030 test_script = 'test_writeTotemDAQMapping.py'
0031 orig_script = os.path.join(os.path.dirname(os.path.realpath(__file__)),test_script)
0032 shutil.copyfile(orig_script, test_script)
0033 for fileContent in filesToRead:
0034 for fileInfo in fileContent["configuration"]:
0035 with open(test_script, 'r+') as f:
0036 content = f.read()
0037
0038 content = re.sub(r'subSystemName =.*', f'subSystemName = "{fileContent["subSystemName"]}"', content)
0039 content = re.sub(r'process.CondDB.connect =.*', f'process.CondDB.connect = "{fileContent["dbConnect"]}"', content)
0040 content = re.sub(r'process.totemDAQMappingESSourceXML.multipleChannelsPerPayload =.*',
0041 f'process.totemDAQMappingESSourceXML.multipleChannelsPerPayload = {fileContent["multipleChannelsPerPayload"]}',
0042 content)
0043 content = re.sub(r'process.totemDAQMappingESSourceXML.sampicSubDetId =.*',
0044 f'process.totemDAQMappingESSourceXML.sampicSubDetId = {fileInfo["sampicSubDetId"]}',
0045 content)
0046
0047
0048
0049 fileNameExt = "all_" + fileContent["subSystemName"] + "_db.txt" if fromDb else "all_" + fileContent["subSystemName"] +"_xml.txt"
0050 content = re.sub(r'fileName =.*', f'fileName = cms.untracked.string("{fileNameExt}"),' , content)
0051
0052
0053 content = re.sub(r'minIov =.*', f'minIov = {fileInfo["validityRange"].start()}', content)
0054 content = re.sub(r'maxIov =.*', f'maxIov = {fileInfo["validityRange"].end()}', content)
0055 content = re.sub(r'mappingFileNames =.*', f'mappingFileNames = {fileInfo["mappingFileNames"]},', content)
0056 content = re.sub(r'maskFileNames =.*', f'maskFileNames = {fileInfo["maskFileNames"]},', content)
0057
0058 if fromDb:
0059 sourceClass = "PoolDBESSource"
0060 obj = ""
0061 else:
0062 sourceClass = "TotemDAQMappingESSourceXML"
0063 obj = "totemDAQMappingESSourceXML"
0064
0065
0066 dbRecords = ""
0067 if writeBothRecords or fileContent == analysisMask:
0068 dbRecords += "cms.PSet(\nrecord = cms.string('TotemAnalysisMaskRcd'),\n tag = cms.string('AnalysisMask'),\n label = cms.untracked.string(subSystemName)),\n"
0069 replacement = f'process.es_prefer_totemTimingMapping = cms.ESPrefer("{sourceClass}", "{obj}", \
0070 {"TotemAnalysisMaskRcd" if fromDb else "TotemReadoutRcd"}=cms.vstring(f"TotemAnalysisMask/{fileContent["subSystemName"]}"))'
0071
0072 if writeBothRecords or fileContent != analysisMask:
0073 dbRecords += "cms.PSet(\nrecord = cms.string('TotemReadoutRcd'),\n tag = cms.string('DiamondDAQMapping'),\n label = cms.untracked.string(subSystemName))\n"
0074 replacement = f'process.es_prefer_totemTimingMapping = cms.ESPrefer("{sourceClass}", "{obj}", \
0075 TotemReadoutRcd=cms.vstring(f"TotemDAQMapping/{fileContent["subSystemName"]}"))'
0076
0077
0078 enters = "\n\n\n\n" if not writeBothRecords else ""
0079
0080 content = re.sub(r'readMap = cms.untracked.bool.*', f"readMap = cms.untracked.bool({writeBothRecords or fileContent != analysisMask}),", content)
0081 content = re.sub(r'readMask = cms.untracked.bool.*', f"readMask = cms.untracked.bool({writeBothRecords or fileContent == analysisMask}),", content)
0082 content = re.sub(r'toGet = cms.VPSet\(\n((?:.*\n){9})', f"toGet = cms.VPSet(\n"+dbRecords+"))\n"+enters, content)
0083
0084
0085 content = re.sub(r'process.es_prefer_totemTimingMapping =.*', replacement, content)
0086
0087 f.seek(0)
0088 f.write(content)
0089 f.truncate()
0090
0091
0092 subprocess.run(f'cmsRun ./{test_script}' , shell=True)