Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-10-19 04:58:01

0001 import os
0002 import copy
0003 
0004 _validationName = "PixBary"
0005 
0006 def PixBary(config, validationDir, verbose=False):
0007     ##List with all jobs
0008     jobs = []
0009 
0010     ##Dictionary of lists of all IOVs (can be different per each single job)
0011     IOVs = {}
0012 
0013     ##Start with single jobs
0014     jobType = "single"
0015 
0016     ##Check that a job is defined
0017     if not jobType in config["validations"][_validationName]:
0018         raise LookupError("No '%s' key word in config for %s" %(jobType, _validationName))
0019 
0020     ##Loop over all merge jobs/IOVs which are requested
0021     for jobName, jobConfig in config["validations"][_validationName][jobType].items():
0022         IOV_list = get_IOVs(jobConfig)  # The PixelBarycentre automatically detects IOV changes in the payloads. This list is used to specify the run range(s) to analyze
0023         if(verbose):
0024             print('job: %s IOV_list: %s', jobName, IOV_list)
0025         IOVs[jobName] = IOV_list
0026 
0027         ##Loop over IOVs (ranges of runs, in this case)
0028         for runRange in IOV_list:
0029             IOV = '-'.join(str(i) for i in runRange)
0030 
0031             for alignment, alignmentConfig in config["alignments"].items():
0032                 ##Work directory for each IOV
0033                 workDir = os.path.join(validationDir, _validationName, jobType, jobName, alignment, IOV)
0034 
0035                 ##Write local config
0036                 local = {}
0037                 local["output"] = os.path.join(config["LFS"], config["name"], _validationName, jobType, alignment, jobName, IOV)
0038                 local["alignment"] = copy.deepcopy(alignmentConfig)
0039                 local["alignment"]["label"] = alignment
0040                 local["validation"] = copy.deepcopy(jobConfig)
0041                 local["validation"].pop("alignments")
0042                 local["validation"]["IOV"] = IOV
0043                 if "dataset" in local["validation"]:
0044                     local["validation"]["dataset"] = local["validation"]["dataset"].format(IOV)
0045                 if "goodlumi" in local["validation"]:
0046                     local["validation"]["goodlumi"] = local["validation"]["goodlumi"].format(IOV)
0047 
0048                 ##Write job info
0049                 job = {
0050                     "name": "{}_{}_{}_{}_{}".format(_validationName, alignment, jobType, jobName, IOV),
0051                     "dir": workDir,
0052                     "exe": "cmsRun",
0053                     "cms-config": "{}/src/Alignment/OfflineValidation/python/TkAlAllInOneTool/PixelBaryCentreAnalyzer_cfg.py".format(os.environ["CMSSW_BASE"]),
0054                     "run-mode": "Condor",
0055                     "dependencies": [],
0056                     "config": local,
0057                 }
0058 
0059                 jobs.append(job)
0060 
0061     return jobs
0062 
0063 def get_IOVs(jobConfig):
0064     return [[jobConfig['firstRun'], jobConfig['lastRun']]]