14 if e.errno == errno.EEXIST
and os.path.isdir(path):
20 return os.path.realpath(os.path.abspath(os.path.expanduser(path)))
26 run_dir = os.path.join(output_dir,
"run")
29 cmssw_dir = os.path.join(os.environ[
"CMSSW_BASE"],
"src")
34 input_files = [
fullPath(f)
for f
in glob.glob(os.path.join(input_dir,
"*_xsecNom.root")) ]
35 num_files = len(input_files)
36 input_files = numpy.array_split(numpy.array(input_files), num_jobs)
40 for sublist
in input_files:
41 if len(sublist) == 0.:
43 job_files = sublist.tolist()
44 run_path = os.path.join(run_dir,
"scan_point_{}.sh".format(num_submitted))
45 with open(run_path,
"w")
as run_file:
46 os.fchmod(run_file.fileno(), 0755)
47 run_file.write(
"#! /bin/bash\n\n")
49 run_file.write(
"DIRECTORY=`pwd`\n")
50 run_file.write(
"cd {}\n".format(cmssw_dir))
51 run_file.write(
". /net/cms2/cms2r0/babymaker/cmsset_default.sh\n")
52 run_file.write(
"eval `scramv1 runtime -sh`\n")
53 run_file.write(
"cd $DIRECTORY\n\n")
55 for ifile
in range(len(job_files)):
57 out_file = os.path.join(output_dir,
"limits_and_significances_{}_{}.txt".format(num_submitted, ifile))
58 cmd =
"./run/scan_point.exe -s -f {} >> {}\n\n".format(f, out_file)
59 run_file.write(
"echo Starting to process file {} of {}\n".format(ifile+1, len(job_files)))
62 subprocess.check_call([
"JobSubmit.csh",run_path])
65 print(
"\nSubmitted {} files in {} jobs. Output will be sent to {}.\n".format(
66 num_files, num_submitted, output_dir))
68 if __name__ ==
"__main__":
69 parser = argparse.ArgumentParser(description=
"Submits batch jobs to compute limits and significances from existing workspaces",
70 formatter_class = argparse.ArgumentDefaultsHelpFormatter)
71 parser.add_argument(
"output_dir", nargs=
"?", default =
"txt",
72 help =
"Directory in which to store computed results.")
73 parser.add_argument(
"input_dir", nargs=
"?", default =
"/net/cms2/cms2r0/babymaker/wspaces/2016_08_10/T1tttt",
74 help =
"Directory containing workspaces to be processed.")
75 parser.add_argument(
"--num_jobs",
"-n", type=int, default=50,
76 help =
"nNumber of jobs into which to split processing of workspaces")
77 args = parser.parse_args()
79 SendLimits(args.input_dir, args.output_dir, args.num_jobs)
def SendLimits(input_dir, output_dir, num_jobs)