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
|