ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/dhidas/OSUAnalysis/Tools/scripts/getSkimEfficiencyOv3.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     numberOfEventsPassingMuonCuts = skimHist.GetBinContent(6)
22     numberOfEventsPassingJetCuts = skimHist.GetBinContent(7)
23    
24     numberOfEventsAfterAllFilters = skimInfo[1]
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['MuonCuts'] = int(numberOfEventsPassingMuonCuts)
37     dataSetDescription['JetCuts'] = int(numberOfEventsPassingJetCuts)
38    
39    
40     totals['HBHENoiseFilter'] = numberOfEventsPassingHBHENoiseFilter / numberOfTotalEvents
41     totals['ScrapingVeto'] = numberOfEventsPassingScrapingVeto / numberOfTotalEvents
42     totals['GoodPrimaryVertex'] = numberOfEventsHavingGoodPrimaryVertex / numberOfTotalEvents
43     totals['ElectronCuts'] = numberOfEventsPassingElectronCuts / numberOfTotalEvents
44     totals['MuonCuts'] = numberOfEventsPassingMuonCuts / numberOfTotalEvents
45     totals['JetCuts'] = numberOfEventsPassingJetCuts / numberOfTotalEvents
46    
47     lastStep['HBHENoiseFilter'] = numberOfEventsPassingHBHENoiseFilter / numberOfTotalEvents
48     lastStep['ScrapingVeto'] = numberOfEventsPassingScrapingVeto / numberOfEventsPassingHBHENoiseFilter
49     lastStep['GoodPrimaryVertex'] = numberOfEventsHavingGoodPrimaryVertex / numberOfEventsPassingScrapingVeto
50     lastStep['ElectronCuts'] = numberOfEventsPassingElectronCuts / numberOfEventsHavingGoodPrimaryVertex
51     lastStep['MuonCuts'] = numberOfEventsPassingMuonCuts / numberOfEventsHavingGoodPrimaryVertex
52     lastStep['JetCuts'] = numberOfEventsPassingJetCuts / numberOfEventsHavingGoodPrimaryVertex
53    
54     return dataSetDescription, totals, lastStep
55    
56     # return {'total': numberOfTotalEvents,
57     # 'skimmed':numberOfEventsAfterAllFilters,
58     # 'electronSkimEfficiency':electronSkimEfficiency,
59     # 'afterSkimAndNoiseFilter':numberOfEventsAfterAllFilters,
60     # 'totalSkimEfficiency':TotalSkimEfficiency}
61    
62     def getSkimInfo(files):
63     skimHist = None
64     eventBranch = None
65     eventTree = None
66     n_skim = 0
67     TfOpen = TFile.Open
68     gcd = gROOT.cd
69    
70     for file in files:
71     f = TfOpen(file)
72     gcd()
73     eventTree = f.Get(pathToEventTree)
74     if eventTree is None:
75     print 'Could not find tree', pathToEventTree, 'in file', file
76     else:
77     eventBranch = eventTree.GetBranch('Event.Number')
78    
79     if eventBranch is None:
80     print 'Could not find branch', pathToEventTree + '/Event.Number', 'in file', file
81     else:
82     n_skim += eventBranch.GetEntries()
83    
84     if skimHist is None:
85     skimHist = f.Get(pathToSkimHist)
86     if skimHist is None:
87     print 'Could not find histogram', pathToSkimHist, 'in file', file
88     continue
89     else:
90     hist = f.Get(pathToSkimHist)
91     if hist is None:
92     print 'Could not find histogram', pathToSkimHist, 'in file', file
93     continue
94     skimHist.Add(hist)
95     return (skimHist, n_skim)
96    
97    
98     def formatSkimEfficiencies(dataSetDescription, totals, lastStep):
99     print 'Local merged files:', dataSetDescription['path']
100     print
101     print 'Total number of files:', int(dataSetDescription['numberOfFiles'])
102     print
103     print 'Process recognised:', dataSetDescription['process']
104     print
105     print 'Total number of events:', int(dataSetDescription['numberOfEvents'])
106     print
107     print
108     print '| *Filter Name* | *# passing* | *efficiency(total) in %* | *efficiency(last step) in %* |'
109     print '| HBHENoiseFilter | ', dataSetDescription['HBHENoiseFilter'], '| ', totals['HBHENoiseFilter'], '| ', lastStep['HBHENoiseFilter'], '|'
110     print '| ScrapingVeto | ', dataSetDescription['ScrapingVeto'], '| ', totals['ScrapingVeto'], '| ', lastStep['ScrapingVeto'], '|'
111     print '| GoodPrimaryVertex | ', dataSetDescription['GoodPrimaryVertex'], '| ', totals['GoodPrimaryVertex'], '| ', lastStep['GoodPrimaryVertex'], '|'
112     print '| ElectronCuts | ', dataSetDescription['ElectronCuts'], '| ', totals['ElectronCuts'], '| ', lastStep['ElectronCuts'], '|'
113     print '| MuonCuts | ', dataSetDescription['MuonCuts'], '| ', totals['MuonCuts'], '| ', lastStep['MuonCuts'], '|'
114     # print '| JetCuts | ', dataSetDescription['JetCuts'], '| ', totals['JetCuts'], '| ', lastStep['JetCuts'], '|'
115     print '| Combined e or mu cuts | ', dataSetDescription['JetCuts'], '| ', totals['JetCuts'], '| ', lastStep['JetCuts'], '|'
116     print '| total | ', int(dataSetDescription['numberOfEventsAfterSkim']), '| ',
117     print dataSetDescription['totalSkimEfficiency'], '| --- |'
118    
119    
120    
121     if __name__ == "__main__":
122     args = sys.argv
123     if not len(args) == 2:
124     print "Please specify a folder to merge files in."
125     sys.exit()
126    
127     path = sys.argv[1]
128     files = getROOTFiles(path)
129     dataSetDescription, totals, lastStep = getSkimmedEvents(files)
130     dataSetDescription['numberOfFiles'] = len(files)
131     dataSetDescription['process'] = getProcess(files[0])
132     dataSetDescription['path'] = path
133     formatSkimEfficiencies(dataSetDescription, totals, lastStep)
134    
135     # print '=' * 100
136     # print '{0:70} : {1:15d}'.format('Total number of files', len(files))
137     # print '{0:70} : {1:15s}'.format('Process recognised', getProcess(files[0]))
138     # print '{0:70} : {1:15d}'.format('Total number of events', int(events['total']))
139     # print '{0:70} : {1:15d}'.format('Number of events after electron skim', int(events['skimmed']))
140     # print '{0:70} : {1:15d}'.format('Number of events after electron skim and HBHE noise filter', events['afterSkimAndNoiseFilter'])
141     # print
142     # print '{0:70} : {1:15f}'.format('Electron skim efficiency', events['electronSkimEfficiency'])
143     # print '{0:70} : {1:15f}'.format('Total skim efficiency', events['totalSkimEfficiency'])
144     # print '=' * 100