babymaker  e95a6a9342d4604277fe7cc6149b6b5b24447d89
skim_ntuple.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 os
7 
8 import ROOT
9 
10 import utilities
11 
12 def expandCut(cut):
13  pass_ra2b="globalTightHalo2016Filter==1&&HBHENoiseFilter==1&&HBHEIsoNoiseFilter==1&&eeBadScFilter==1"
14  if cut=="standard":
15  return "nleps>=1&&st>500&&met>100"
16  elif cut=="stdnj5":
17  return "nleps>=1&&(ht+Sum$(leps_pt))>500&&met>150&&njets>=5"
18  elif cut=="met150":
19  return "nleps>=1&&st>500&&met>150&&met<=200&&njets>=5"
20  elif cut=="higtight":
21  return "met>200&&nvleps==0&&njets>=4&&njets<=5&&nbt>=2&&!low_dphi&&hig_drmax<2.2"
22  elif cut=="abcd":
23  return "nleps==1&&st>500&&max(met,met_tru)>200&&njets>=6&&nbm>=1&&mj14>250&&nveto==0"
24  elif cut=="baseline":
25  return "nleps==1&&st>500&&met>200&&njets>=6&&nbm>=1"
26  elif cut=="sys_abcd":
27  return "nleps==1&&max(ht,Max$(sys_ht))>500&&max(met,Max$(sys_met))>200&&max(njets,Max$(sys_njets))>=6&&max(nbm,Max$(sys_nbm))>=1&&max(mj,Max$(sys_mj))>250"
28  elif cut=="zisr":
29  return "nvleps==2&&nleps>=1&&Max$(leps_pt)>30&&((elelv_m>80&&elelv_m<100)||(mumuv_m>80&&mumuv_m<100))"
30  elif cut=="dy_ht300":
31  return "nvleps==2&&nleps>=1&&Max$(leps_pt)>30&&((elelv_m>80&&elelv_m<100)||(mumuv_m>80&&mumuv_m<100))&&ht>300"
32  elif cut=="ttisr":
33  return "nvleps==2&&nleps>=1&&max(Max$(mus_pt*(mus_tight&&mus_reliso<.1)),Max$(els_pt*(els_tight&&els_reliso<.1)))>30&&nbm==2"
34  elif cut=="wisr":
35  return "met>100&&max(Max$(mus_pt*(mus_tight&&mus_reliso<.1)),Max$(els_pt*(els_tight&&els_reliso<.1)))>30&&nbl==0"
36  elif cut=="wisrht200":
37  return "ht>200&&met>100&&max(Max$(mus_pt*(mus_tight&&mus_reliso<.1)),Max$(els_pt*(els_tight&&els_reliso<.1)))>30&&nbl==0"
38  elif cut=="ttdilep_ht300":
39  return "nels==1&&nmus==1&&Max$(leps_pt)>30&&ht>300&&met>100&&nbm>=1"
40  elif cut=="qcd":
41  return "ht>1000&&met<50&&(nvmus+nvels)==0"
42  elif cut=="qcd_njet10":
43  return "ht>1000&&met<50&&(nvmus+nvels)==0&&njets>=10"
44  elif cut=="mm_std":
45  return "Sum$(mm_nleps>=1&&mm_ht>500.&&mm_met>200.)>0"
46  elif cut=="mm_std_nj5mj250":
47  return "Sum$(mm_nleps>=1&&mm_ht>500&&mm_met>200&&mm_njets>=5&&mm_mj14_lep>250)>0||Sum$(mm_nleps>=1&&mm_ht>500&&mm_met>200&&mm_njets>=5&&mm_mj14_nolep>250)>0"
48  elif cut=="ra2_qcd":
49  return pass_ra2b+"&&(@Electrons.size()+@Muons.size())==0&&NJets>=3"
50  elif cut=="ra2_ht300":
51  return pass_ra2b+"&&HT>300"
52  elif cut=="ra2_eht300":
53  return pass_ra2b+"&&Max$(Electrons.Pt()*(abs(Electrons.Eta())<2))>35&&HT>300"
54  elif cut=="ra2_zmht200":
55  return pass_ra2b+"&&@ZCandidates.size()>=1&&MHT>200"
56  else:
57  return cut
58 
59 def skimFiles(in_files, out_file, cut, keep_existing):
60  in_files = [ utilities.fullPath(in_file) for in_file in in_files ]
61  out_file = utilities.fullPath(out_file)
62 
63  utilities.ensureDir(os.path.dirname(out_file))
64 
65  cut = expandCut(cut)
66 
67  print("INPUT FILES:",in_files,"\n")
68  print("OUTPUT FILE:",out_file,"\n")
69  print(" CUT:",cut,"\n")
70 
71  if keep_existing and os.path.exists(out_file):
72  print("Keeping pre-existing "+out_file+"\n")
73  return
74 
75  in_tree = ROOT.TChain("tree", "tree")
76  for in_file in in_files:
77  in_tree.Add(in_file)
78 
79  with utilities.ROOTFile(out_file, "recreate") as out:
80  out_tree = in_tree.CopyTree(cut)
81  out_tree.Write()
82 
83 if __name__ == "__main__":
84  parser = argparse.ArgumentParser(description="Skims non-SMS ntuples.",
85  formatter_class=argparse.ArgumentDefaultsHelpFormatter)
86  parser.add_argument("cut", help="Skim cut to apply.")
87  parser.add_argument("out_file", help="File in which to save skim.")
88  parser.add_argument("in_files", nargs="+", help="Files to skim.")
89  parser.add_argument("-k","--keep_existing", action="store_true",
90  help="Do not overwrite output file if it already exists.")
91  args = parser.parse_args()
92 
93  skimFiles(args.in_files, args.out_file, args.cut, args.keep_existing)
def skimFiles(in_files, out_file, cut, keep_existing)
Definition: skim_ntuple.py:59
def ensureDir(path)
Definition: utilities.py:37
def expandCut(cut)
Definition: skim_ntuple.py:12
def fullPath(path)
Definition: utilities.py:34