babymaker  e95a6a9342d4604277fe7cc6149b6b5b24447d89
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
send_slim_ntuples.py
Go to the documentation of this file.
1 #! /usr/bin/env python
2 
3 from __future__ import print_function
4 
5 import argparse
6 import glob
7 import os
8 import subprocess
9 import utilities
10 import shutil
11 
12 def sendSlimJob(skim, slim, overwrite, out_dir):
13  mc_dir = os.path.dirname(skim)
14  skim_name = os.path.basename(skim)
15  slim_name = os.path.splitext(os.path.basename(slim))[0]
16  if out_dir == None:
17  out_dir = os.path.join(mc_dir, "merged_"+slim_name+"_"+skim_name).replace("_skim_","_")
18  else:
19  out_dir = os.path.join(out_dir, "merged_"+slim_name+"_"+skim_name).replace("_skim_","_")
20  run_dir = os.path.join(out_dir, "run")
21  utilities.ensureDir(run_dir)
22 
24  total_jobs = 0
25  for tag in tags:
26  #if "TTJets_SingleLeptFromT_" not in tag: continue
27  in_files = os.path.join(skim,"*"+tag+"*.root")
28  out_name = "mergedbaby_"+tag+"_"+skim_name+"_"+slim_name+"_nfiles_"+str(len(glob.glob(in_files)))
29  out_file = os.path.join(out_dir,out_name+".root")
30  run_file = os.path.join(run_dir,out_name+".sh")
31 
32  if os.path.exists(out_file) and not overwrite:
33  print("Keeping pre-existing "+out_file)
34  continue
35  with open(run_file, "wb") as f:
36  f.write("#! /bin/bash\n\n")
37  #f.write("python/cache.py -c "+slim+" "+out_file+" -e python/slim_ntuple.py "+slim+" "+out_file+" "+in_files+"\n")
38  f.write("python/slim_ntuple.py "+slim+" "+out_file+" "+in_files+"\n")
39  os.fchmod(f.fileno(),0755)
40  subprocess.call(["JobSubmit.csh","run/wrapper.sh",run_file])
41  total_jobs += 1
42 
43  return total_jobs
44 
45 def sendSlimJobs(input_dir, skims, slims, overwrite, output_dir):
46  input_dir = utilities.fullPath(input_dir)
47  if skims == []: skims = ["*"]
48  skims = [ utilities.fullPath(skim) for sublist in skims for skim in glob.glob(os.path.join(input_dir, "skim_"+sublist)) ]
49  slims = [ utilities.fullPath(slim) for sublist in slims for slim in glob.glob(sublist)]
50 
51  total_jobs = 0
52  for slim in slims:
53  for skim in skims:
54  total_jobs += sendSlimJob(skim, slim, overwrite, output_dir)
55 
56  print("Submitted "+str(total_jobs)+" jobs.")
57 
58 if __name__ == "__main__":
59  parser = argparse.ArgumentParser(description="Submits jobs to slim and merge ntuples.",
60  formatter_class=argparse.ArgumentDefaultsHelpFormatter)
61  parser.add_argument("-i","--input_dir", default="/net/cms2/cms2r0/babymaker/babies/2016_06_14/mc",
62  help="Directory containing skim directories with ntuples.")
63  parser.add_argument("-k","--skims", default=["*"], nargs="+",
64  help="List of skimmed subdirectories to slim. Prefix \"skim_\" is automatically added.")
65  parser.add_argument("-l","--slims", default=["txt/slim_rules/*.txt"], nargs="+",
66  help="List of slims to generate.")
67  parser.add_argument("--overwrite", action="store_true",
68  help="Remake slimmed output file even if it already exists")
69  parser.add_argument("--output_dir", default=None,
70  help="Directory in which to put slimmed subdirectories. Uses input directory if omitted.")
71  args = parser.parse_args()
72 
73  sendSlimJobs(args.input_dir, args.skims, args.slims, args.overwrite, args.output_dir)
def ensureDir(path)
Definition: utilities.py:37
def findBaseSampleNames(folder)
Finding basename for each dataset.
Definition: utilities.py:12
def sendSlimJobs(input_dir, skims, slims, overwrite, output_dir)
def fullPath(path)
Definition: utilities.py:34
def sendSlimJob(skim, slim, overwrite, out_dir)