Back to home page

Project CMSSW displayed by LXR

 
 

    


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 # Script which reads data from DB/XML and writes them to file
0010 # Run with python3
0011 
0012 # Data can be read from SQLite(Db) or from XML
0013 fromDb = True
0014 if(len(sys.argv)>1 and sys.argv[1].lower()=='false'):
0015   fromDb = False
0016   
0017   
0018 # If True Mask and Mapping records will be read and wrote to file; If False only one of them will be processed
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 # For each file change the variable values in the config so that they match the selected XML file and then run the config
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             # replace values specific for selected detector
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             # replace name of output file and add adequate suffix to it ('_db' or '_xml')
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             # replace values specific for selected files
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             # replace records which needs to be get from DBSource (one or two of them)
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             # replace values in ESPrefer to read data from DB or from XML
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)