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
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
0050 with open(os.path.join(workingFolder, dag_name), "w") as dag_script:
0051 for iteration in range(0, args.maxIterations+1):
0052
0053 firstIter=(iteration==0)
0054 lastIter=(iteration==args.maxIterations)
0055 refitJobs = []
0056 dag_script.write("#iteration {}\n".format(iteration))
0057
0058
0059 for fileNumber in range(1, numFiles+1):
0060
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
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
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()