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
|