ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/dhidas/OSUAnalysis/Tools/scripts/getSkimEfficiency.py
Revision: 1.1
Committed: Thu Dec 1 16:28:48 2011 UTC (13 years, 5 months ago) by dhidas
Content type: text/x-python
Branch point for: dhidas, MAIN
Log Message:
Initial revision

File Contents

# User Rev Content
1 dhidas 1.1 from __future__ import division
2    
3     from optparse import OptionParser
4     import sys
5     from fileInfo import *
6     from ROOT import *
7     from mergeROOTFilesWithCompression import getProcess
8    
9     pathToSkimHist = "EventFilter/EventCounter"
10     pathToEventTree = "rootTupleTree/tree"
11    
12     def getSkimmedEvents(files):
13     skimInfo = getSkimInfo(files)
14     skimHist = skimInfo[0]
15    
16     numberOfTotalEvents = skimHist.GetBinContent(1)
17     numberOfEventsPassingHBHENoiseFilter = skimHist.GetBinContent(2)
18     numberOfEventsPassingScrapingVeto = skimHist.GetBinContent(3)
19     numberOfEventsHavingGoodPrimaryVertex = skimHist.GetBinContent(4)
20     numberOfEventsPassingElectronCuts = skimHist.GetBinContent(5)
21     numberOfEventsPassingJetCuts = skimHist.GetBinContent(6)
22    
23     numberOfEventsAfterAllFilters = skimInfo[1]
24     electronSkimEfficiency = numberOfEventsPassingHBHENoiseFilter / numberOfTotalEvents
25     TotalSkimEfficiency = numberOfEventsAfterAllFilters / numberOfTotalEvents
26    
27    
28     dataSetDescription, totals, lastStep = {}, {}, {}
29     dataSetDescription['numberOfEvents'] = numberOfTotalEvents
30     dataSetDescription['numberOfEventsAfterSkim'] = numberOfEventsAfterAllFilters
31     dataSetDescription['totalSkimEfficiency'] = dataSetDescription['numberOfEventsAfterSkim'] / dataSetDescription['numberOfEvents']
32     dataSetDescription['HBHENoiseFilter'] = int(numberOfEventsPassingHBHENoiseFilter)
33     dataSetDescription['ScrapingVeto'] = int(numberOfEventsPassingScrapingVeto)
34     dataSetDescription['GoodPrimaryVertex'] = int(numberOfEventsHavingGoodPrimaryVertex)
35     dataSetDescription['ElectronCuts'] = int(numberOfEventsPassingElectronCuts)
36     dataSetDescription['JetCuts'] = int(numberOfEventsPassingJetCuts)
37    
38    
39     totals['HBHENoiseFilter'] = numberOfEventsPassingHBHENoiseFilter / numberOfTotalEvents
40     totals['ScrapingVeto'] = numberOfEventsPassingScrapingVeto / numberOfTotalEvents
41     totals['GoodPrimaryVertex'] = numberOfEventsHavingGoodPrimaryVertex / numberOfTotalEvents
42     totals['ElectronCuts'] = numberOfEventsPassingElectronCuts / numberOfTotalEvents
43     totals['JetCuts'] = numberOfEventsPassingJetCuts / numberOfTotalEvents
44    
45     lastStep['HBHENoiseFilter'] = numberOfEventsPassingHBHENoiseFilter / numberOfTotalEvents
46     lastStep['ScrapingVeto'] = numberOfEventsPassingScrapingVeto / numberOfEventsPassingHBHENoiseFilter
47     lastStep['GoodPrimaryVertex'] = numberOfEventsHavingGoodPrimaryVertex / numberOfEventsPassingScrapingVeto
48     lastStep['ElectronCuts'] = numberOfEventsPassingElectronCuts / numberOfEventsHavingGoodPrimaryVertex
49     lastStep['JetCuts'] = numberOfEventsPassingJetCuts / numberOfEventsPassingElectronCuts
50    
51     return dataSetDescription, totals, lastStep
52    
53     # return {'total': numberOfTotalEvents,
54     # 'skimmed':numberOfEventsAfterAllFilters,
55     # 'electronSkimEfficiency':electronSkimEfficiency,
56     # 'afterSkimAndNoiseFilter':numberOfEventsAfterAllFilters,
57     # 'totalSkimEfficiency':TotalSkimEfficiency}
58    
59     def getSkimInfo(files):
60     skimHist = None
61     eventBranch = None
62     eventTree = None
63     n_skim = 0
64     TfOpen = TFile.Open
65     gcd = gROOT.cd
66    
67     for file in files:
68     f = TfOpen(file)
69     gcd()
70     eventTree = f.Get(pathToEventTree)
71     if eventTree is None:
72     print 'Could not find tree', pathToEventTree, 'in file', file
73     else:
74     eventBranch = eventTree.GetBranch('Event.Number')
75    
76     if eventBranch is None:
77     print 'Could not find branch', pathToEventTree + '/Event.Number', 'in file', file
78     else:
79     n_skim += eventBranch.GetEntries()
80    
81     if skimHist is None:
82     skimHist = f.Get(pathToSkimHist)
83     if skimHist is None:
84     print 'Could not find histogram', pathToSkimHist, 'in file', file
85     continue
86     else:
87     hist = f.Get(pathToSkimHist)
88     if hist is None:
89     print 'Could not find histogram', pathToSkimHist, 'in file', file
90     continue
91     skimHist.Add(hist)
92     return (skimHist, n_skim)
93    
94    
95     def formatSkimEfficiencies(dataSetDescription, totals, lastStep):
96     print 'Local merged files:', dataSetDescription['path']
97     print
98     print 'Total number of files:', int(dataSetDescription['numberOfFiles'])
99     print
100     print 'Process recognised:', dataSetDescription['process']
101     print
102     print 'Total number of events:', int(dataSetDescription['numberOfEvents'])
103     print
104     print
105     print '| *Filter Name* | *# passing* | *efficiency(total) in %* | *efficiency(last step) in %* |'
106     print '| HBHENoiseFilter | ', dataSetDescription['HBHENoiseFilter'], '| ', totals['HBHENoiseFilter'], '| ', lastStep['HBHENoiseFilter'], '|'
107     print '| ScrapingVeto | ', dataSetDescription['ScrapingVeto'], '| ', totals['ScrapingVeto'], '| ', lastStep['ScrapingVeto'], '|'
108     print '| GoodPrimaryVertex | ', dataSetDescription['GoodPrimaryVertex'], '| ', totals['GoodPrimaryVertex'], '| ', lastStep['GoodPrimaryVertex'], '|'
109     print '| ElectronCuts | ', dataSetDescription['ElectronCuts'], '| ', totals['ElectronCuts'], '| ', lastStep['ElectronCuts'], '|'
110     print '| JetCuts | ', dataSetDescription['JetCuts'], '| ', totals['JetCuts'], '| ', lastStep['JetCuts'], '|'
111     print '| total | ', int(dataSetDescription['numberOfEventsAfterSkim']), '| ',
112     print dataSetDescription['totalSkimEfficiency'], '| --- |'
113    
114    
115    
116     if __name__ == "__main__":
117     args = sys.argv
118     if not len(args) == 2:
119     print "Please specify a folder to merge files in."
120     sys.exit()
121    
122     path = sys.argv[1]
123     files = getROOTFiles(path)
124     dataSetDescription, totals, lastStep = getSkimmedEvents(files)
125     dataSetDescription['numberOfFiles'] = len(files)
126     dataSetDescription['process'] = getProcess(files[0])
127     dataSetDescription['path'] = path
128     formatSkimEfficiencies(dataSetDescription, totals, lastStep)
129    
130     # print '=' * 100
131     # print '{0:70} : {1:15d}'.format('Total number of files', len(files))
132     # print '{0:70} : {1:15s}'.format('Process recognised', getProcess(files[0]))
133     # print '{0:70} : {1:15d}'.format('Total number of events', int(events['total']))
134     # print '{0:70} : {1:15d}'.format('Number of events after electron skim', int(events['skimmed']))
135     # print '{0:70} : {1:15d}'.format('Number of events after electron skim and HBHE noise filter', events['afterSkimAndNoiseFilter'])
136     # print
137     # print '{0:70} : {1:15f}'.format('Electron skim efficiency', events['electronSkimEfficiency'])
138     # print '{0:70} : {1:15f}'.format('Total skim efficiency', events['totalSkimEfficiency'])
139     # print '=' * 100