ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/OSUT3Analysis/Configuration/scripts/makeBNTreePlot.py
Revision: 1.12
Committed: Wed Jun 12 09:15:32 2013 UTC (11 years, 10 months ago) by wulsin
Content type: text/x-python
Branch: MAIN
Changes since 1.11: +2 -1 lines
Log Message:
Add split time print outs

File Contents

# User Rev Content
1 jbrinson 1.1 #!/usr/bin/env python
2 wulsin 1.3
3     # Must specify options with -l argument, e.g.:
4     # > makeBNTreePlot.py -l sampleBNTreePlotConfig.py
5    
6    
7 jbrinson 1.1 import sys
8     import os
9     import re
10     from optparse import OptionParser
11     from array import *
12     from decimal import *
13 wulsin 1.7 import subprocess
14 jbrinson 1.1
15     from OSUT3Analysis.Configuration.configurationOptions import *
16     from OSUT3Analysis.Configuration.processingUtilities import *
17    
18 wulsin 1.9 from ROOT import TChain, TCut, TDirectory, TFile, TH1D, TH2D, TStopwatch, TTree, gROOT
19 wulsin 1.4
20     gROOT.SetBatch(True) # This is to prevent pop-up graphical windows
21 jbrinson 1.1
22 wulsin 1.7
23     def MakeCondorSubmitFile(arguments, dataset):
24     p = subprocess.Popen(["which", "makeBNTreePlot.py"], stdout=subprocess.PIPE)
25     executable = p.communicate()[0] # read the stdout of the command
26     workdir = os.getcwd() + "/"
27     outdir = "condor/"+arguments.condorDir+"/"+dataset+"/"
28     out = open(outdir+"/condorBNTree.sub", "w")
29     out.write("Executable = " + executable + " \n")
30     out.write("Universe = vanilla \n")
31     out.write("Getenv = True \n")
32     out.write("Arguments = -D " + dataset + " -l " + arguments.localConfig + " -c " + arguments.condorDir + " \n")
33     out.write("Output = " + workdir + outdir + "condorBNTree_$(Process).out \n")
34     out.write("Error = " + workdir + outdir + "condorBNTree_$(Process).err \n")
35     out.write("Log = " + workdir + outdir + "condorBNTree_$(Process).log \n")
36     out.write("+IsLocalJob = true \n")
37     out.write("Rank = TARGET.IsLocalSlot \n")
38     out.write("Queue 1 \n")
39     out.close()
40    
41    
42     def RunOnCondor(arguments, split_datasets):
43     print "Running jobs on condor, instead of interactively."
44     ## print "Found condorDir = %s" % (condorDir)
45     ## print "Found split_datasets = "
46     ## print split_datasets
47    
48     for dataset in split_datasets:
49     MakeCondorSubmitFile(arguments, dataset)
50 wulsin 1.8 cmd = "condor_submit condor/"+arguments.condorDir+"/"+dataset+"/condorBNTree.sub"
51     os.system(cmd)
52     print "Submitting job: %s " % cmd
53 wulsin 1.10
54     print "Once condor jobs have finished, merge the composite datasets and then make plots with:"
55     print " makeBNTreePlot.py -q -l " + arguments.localConfig + " -c " + arguments.condorDir
56     print " makePlots.py -l " + arguments.localConfig + " -c " + arguments.condorDir
57 wulsin 1.7
58     return
59    
60    
61 wulsin 1.11 watch = TStopwatch()
62     watch1 = TStopwatch()
63    
64 jbrinson 1.1
65     parser = OptionParser()
66     parser = set_commandline_arguments(parser)
67     (arguments, args) = parser.parse_args()
68    
69     if not arguments.localConfig:
70     sys.exit(" You must specify a localOptions.py file with -l")
71 wulsin 1.6 if arguments.localConfig:
72 jbrinson 1.1 sys.path.append(os.getcwd())
73     exec("from " + arguments.localConfig.rstrip('.py') + " import *")
74     if not arguments.condorDir:
75     sys.exit(" You must specify a condor directory with -c")
76     if arguments.condorDir:
77     condor_dir = "condor/%s" % arguments.condorDir
78    
79 wulsin 1.7 if arguments.datasetName: # If datasetName is specified on command line, then override the value from localConfig
80     datasets = [
81     arguments.datasetName,
82     ]
83    
84 jbrinson 1.2 #save a list of composite datasets
85     composite_datasets = get_composite_datasets(datasets, composite_dataset_definitions)
86     #save a list of datasets with composite datasets split up
87     split_datasets = split_composite_datasets(datasets, composite_dataset_definitions)
88    
89 wulsin 1.10 if arguments.quickMerge and arguments.runOnCondor:
90     print "Cannot use -q (--quickMerge) and -C (--runOnCondor) options simultaneously. Please choose one or the other."
91     exit()
92    
93 wulsin 1.7 if arguments.runOnCondor:
94     RunOnCondor(arguments, split_datasets)
95 wulsin 1.10 exit()
96 wulsin 1.7
97 jbrinson 1.2 #write new histogram to dataset
98 wulsin 1.10 if not arguments.quickMerge:
99     for dataset in split_datasets:
100     for hist in input_histograms:
101     #chain trees together
102     ch = TChain("OSUAnalysis/"+hist['channel']+"/BNTree_"+hist['channel'])
103     ch.Add(condor_dir + "/" + dataset + "/hist_*.root")
104 wulsin 1.12 print ("Looping over chain with # entries = %f; split time = " % ch.GetEntries()),
105 wulsin 1.11 watch1.Stop(); watch1.Print(); watch1.Start()
106 wulsin 1.10
107     outputFile = TFile(condor_dir + "/" + dataset + ".root", "UPDATE")
108     if not outputFile or outputFile.IsZombie(): print "Could not open file: %s/%s.root" % (condor_dir, dataset)
109     outputFile.cd("OSUAnalysis/"+hist['channel'])
110    
111     deleteString = hist['histName'] + ";*" # delete all existing instances of the object
112     currentDir = outputFile.GetDirectory("OSUAnalysis/"+hist['channel']);
113     if not currentDir: print "Could not find directory OSUAnalysis/%s in file %s" % (hist['channel'], outputFile.GetName())
114     currentDir.Delete(deleteString);
115     if 'nbinsY' in hist: # only make a 2D histogram if the key "nbinsY" is defined
116     h = TH2D(hist['histName'], hist['histName'],
117     hist['nbins'], hist['xMin'], hist['xMax'],
118     hist['nbinsY'], hist['yMin'], hist['yMax'])
119     else:
120     h = TH1D(hist['histName'], hist['histName'], hist['nbins'], hist['xMin'], hist['xMax'])
121     h.Sumw2() # Needed to get weights correct.
122     cut = TCut(hist['cutString'])
123     ch.Draw(hist['varToPlot']+">>"+hist['histName'], cut)
124     h.Write()
125     outputFile.Close()
126     print "Histogram " + hist['histName'] + " has been added to " + condor_dir + "/"+ dataset + ".root"
127 jbrinson 1.2
128     #merge output if composite dataset
129     for composite_dataset in composite_datasets:
130     component_datasets_list = ""
131     component_dataset_file_path = ""
132     for component_dataset in composite_dataset_definitions[composite_dataset]:
133     component_dataset_dir = "%s/%s" % (condor_dir,component_dataset)
134     component_dataset_file_path = component_dataset_dir + ".root"
135     if os.path.isfile(component_dataset_file_path):
136     component_datasets_list += " " + component_dataset_file_path
137     composite_dataset_dir = "%s/%s" % (condor_dir,composite_dataset)
138     command = "mergeHists -p %s %s" % (composite_dataset_dir, component_datasets_list)
139     print "Merging output for composite dataset: " + composite_dataset
140     os.system(command)
141    
142 wulsin 1.12 print ("Total time: "),
143 jbrinson 1.1 watch.Stop()
144     watch.Print()
145 jbrinson 1.2
146 jbrinson 1.1
147