Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-25 09:32:52

0001 import copy
0002 import os
0003 
0004 def Zmumu(config, validationDir):
0005     ##List with all jobs
0006     jobs = []
0007     zmumuType = "single"
0008 
0009     ##List with all wished IOVs
0010     IOVs = []
0011 
0012     ##Start with single Zmumu jobs
0013     if not zmumuType in config["validations"]["Zmumu"]: 
0014         raise Exception("No 'single' key word in config for Zmumu") 
0015 
0016     for datasetName in config["validations"]["Zmumu"][zmumuType]:
0017         for IOV in config["validations"]["Zmumu"][zmumuType][datasetName]["IOV"]:
0018             ##Save IOV to loop later for merge jobs
0019             if not IOV in IOVs:
0020                 IOVs.append(IOV)
0021 
0022             for alignment in config["validations"]["Zmumu"][zmumuType][datasetName]["alignments"]:
0023                 ##Work directory for each IOV
0024                 workDir = "{}/Zmumu/{}/{}/{}/{}".format(validationDir, zmumuType, datasetName, alignment, IOV)
0025 
0026                 ##Write local config
0027                 local = {}
0028                 local["output"] = "{}/{}/{}/{}/{}/{}".format(config["LFS"], config["name"], zmumuType, alignment, datasetName, IOV)
0029                 local["alignment"] = copy.deepcopy(config["alignments"][alignment])
0030                 local["validation"] = copy.deepcopy(config["validations"]["Zmumu"][zmumuType][datasetName])
0031                 local["validation"].pop("alignments")
0032                 local["validation"]["IOV"] = IOV
0033                 if "goodlumi" in local["validation"]:
0034                     local["validation"]["goodlumi"] = local["validation"]["goodlumi"].format(IOV)
0035 
0036                 ##Write job info
0037                 job = {
0038                     "name": "Zmumu_{}_{}_{}_{}".format(zmumuType, alignment, datasetName, IOV),
0039                     "dir": workDir,
0040                     "exe": "cmsRun",
0041                     "cms-config": "{}/src/Alignment/OfflineValidation/python/TkAlAllInOneTool/Zmumu_cfg.py".format(os.environ["CMSSW_BASE"]),
0042                     "run-mode": "Condor",
0043                     "dependencies": [],
0044                     "config": local, 
0045                 }
0046 
0047                 jobs.append(job)
0048 
0049     ##Do merge Zmumu if wished
0050     if "merge" in config["validations"]["Zmumu"]:
0051         ##List with merge jobs, will be expanded to jobs after looping
0052         mergeJobs = []
0053         zmumuType = "merge"
0054 
0055         ##Loop over all merge jobs/IOVs which are wished
0056         for mergeName in config["validations"]["Zmumu"][zmumuType]:
0057             for IOV in IOVs:
0058                 ##Work directory for each IOV
0059                 workDir = "{}/Zmumu/{}/{}/{}".format(validationDir, zmumuType, mergeName, IOV)
0060 
0061                 ##Write job info
0062                 local = {}
0063 
0064                 job = {
0065                     "name": "Zmumu_{}_{}_{}".format(zmumuType, mergeName, IOV),
0066                     "dir": workDir,
0067                     "exe": "Zmumumerge",
0068                     "run-mode": "Condor",
0069                     "dependencies": [],
0070                     "config": local, 
0071                 }
0072 
0073                 for alignment in config["alignments"]:
0074                     ##Deep copy necessary things from global config
0075                     local.setdefault("alignments", {})
0076                     local["alignments"][alignment] = copy.deepcopy(config["alignments"][alignment])
0077                     local["validation"] = copy.deepcopy(config["validations"]["Zmumu"][zmumuType][mergeName])
0078                     local["output"] = "{}/{}/{}/{}/{}".format(config["LFS"], config["name"], zmumuType, mergeName, IOV)
0079 
0080                 ##Loop over all single jobs
0081                 for singleJob in jobs:
0082                     ##Get single job info and append to merge job if requirements fullfilled
0083                     alignment, datasetName, singleIOV = singleJob["name"].split("_")[2:]    
0084 
0085                     if int(singleIOV) == IOV and datasetName in config["validations"]["Zmumu"][zmumuType][mergeName]["singles"]:
0086                         local["alignments"][alignment]["file"] = singleJob["config"]["output"]
0087                         job["dependencies"].append(singleJob["name"])
0088                         
0089                 mergeJobs.append(job)
0090 
0091         jobs.extend(mergeJobs)
0092 
0093     return jobs