Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-06-13 03:23:09

0001 import helpers
0002 import os
0003 import shutil
0004 import argparse
0005 import glob
0006 import condorTemplates
0007 
0008 def main():
0009     parser = argparse.ArgumentParser(description="Automatically run APE measurements")
0010     parser.add_argument("--workingArea", action="store", dest="workingArea",
0011                           help="Config file that configures measurement")
0012     parser.add_argument("--dataDir", action="store", dest="dataDir",
0013                           help="Path of files")
0014     parser.add_argument("--fileName", action="store", dest="fileName",
0015                           help="Filenames")
0016     parser.add_argument("--measName", action="store", dest="measName",
0017                           help="Measurement name")
0018     parser.add_argument("--maxIterations", action="store", dest="maxIterations", default=15, type=int,
0019                           help="Max Iterations")
0020     parser.add_argument("--maxEvents", action="store", dest="maxEvents", default=-1, type=int,
0021                           help="Max Events")
0022     parser.add_argument("--isBaseline", action="store", dest="isBaseline",
0023                           help="Baseline measurement")
0024     parser.add_argument("--baselineName", action="store", dest="baselineName",
0025                           help="Baseline measurement")
0026     parser.add_argument("--isCosmics", action="store", dest="isCosmics", 
0027                           help="Is cosmics dataset")
0028     parser.add_argument("--globalTag", action="store", dest="globalTag", 
0029                           help="global Tag")
0030                           
0031     
0032     args = parser.parse_args()
0033     # argparser can't handle bool arguments
0034     args.isBaseline = (args.isBaseline == "True")
0035     args.isCosmics = (args.isCosmics == "True")
0036     
0037     
0038     files = glob.glob(os.path.join(args.dataDir, "{}_*.root".format(args.fileName)))
0039     files.sort()
0040     numFiles = len(files)
0041     
0042     base = os.environ['CMSSW_BASE']
0043     
0044     workingFolder = os.path.join(args.workingArea,args.measName)
0045     dag_name = "measurement.dag"
0046     if args.isBaseline:
0047         dag_name = "baseline.dag"
0048         
0049     # set up dag script
0050     with open(os.path.join(workingFolder, dag_name), "w") as dag_script:
0051         for iteration in range(0, args.maxIterations+1):
0052             # in the last iteration (usually iteration 15) additional plots are produced
0053             firstIter=(iteration==0)
0054             lastIter=(iteration==args.maxIterations)
0055             refitJobs = []
0056             dag_script.write("#iteration {}\n".format(iteration))
0057             
0058             # refit jobs
0059             for fileNumber in range(1, numFiles+1):
0060                 # for each file, a refit job is started, the results are merged in the next step once all refit jobs are finished
0061                 refitJob = "refit_{}_iter{}_{}".format(args.measName, iteration, fileNumber)
0062                 refitJobs.append(refitJob)
0063                 refitJobFile = os.path.join(workingFolder,"refit_iter{}_{}.sub".format(iteration, fileNumber))
0064                 fileLocation = os.path.join(args.dataDir, "{}_{}.root".format(args.fileName,fileNumber))
0065                 with open(refitJobFile, "w") as refitJobSub:
0066                     refitJobSub.write(condorTemplates.refitterSubTemplate.format(
0067                                                             base=base, 
0068                                                             workingArea=args.workingArea,
0069                                                             fileLocation=fileLocation,
0070                                                             globalTag=args.globalTag,
0071                                                             measName=args.measName,
0072                                                             fileNumber=fileNumber,
0073                                                             iteration=iteration,
0074                                                             lastIter=lastIter,
0075                                                             isCosmics=args.isCosmics,
0076                                                             maxEvents=args.maxEvents))
0077                     
0078                 dag_script.write("JOB {} {}\n".format(refitJob, refitJobFile))
0079             
0080             # If this is not the first iteration, the refit jobs need to wait for the previous iteration to finish
0081             if not firstIter:
0082                 iterationJobPrev = "iteration_{}_iter{}".format(args.measName, (iteration-1))
0083                 dag_script.write("PARENT {} CHILD {}\n".format(iterationJobPrev, " ".join(refitJobs)))
0084             
0085             # finish iteration job
0086             iterationJob = "iteration_{}_iter{}".format(args.measName, iteration)
0087             iterationJobFile = os.path.join(workingFolder, "iteration_iter{}.sub".format(iteration))
0088             with open(iterationJobFile, "w") as iterationJobSub:
0089                 iterationJobSub.write(condorTemplates.iterationSubTemplate.format(
0090                                                             base=base,
0091                                                             workingArea=args.workingArea,
0092                                                             measName=args.measName,
0093                                                             numFiles=numFiles,
0094                                                             iteration=iteration,
0095                                                             isBaseline=args.isBaseline,
0096                                                             baselineName=args.baselineName
0097                                                             ))
0098             
0099             dag_script.write("JOB {} {}\n".format(iterationJob, iterationJobFile))
0100             dag_script.write("PARENT {} CHILD {}\n".format(" ".join(refitJobs),iterationJob))
0101             dag_script.write("\n")
0102     
0103    
0104 
0105 
0106 if __name__ == "__main__":
0107     main()