Skip to content

Commit 70000cf

Browse files
committed
Move conversion_to_histo functions in root_utilities
1 parent e865e15 commit 70000cf

File tree

7 files changed

+116
-68
lines changed

7 files changed

+116
-68
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import numpy as np
2+
from identification_isolation.isolation_parameters import IsolationParameters
3+
from identification_isolation.egamma_isolation import double_slope_relaxation_vs_pt
4+
5+
from root_numpy import array2hist
6+
from rootpy.plotting import Hist
7+
8+
9+
parameters = IsolationParameters()
10+
## General
11+
parameters.name = 'isolation_egamma'
12+
parameters.version = 'automatic'
13+
parameters.signal_file = '/data_CMS/cms/sauvan/L1/2016/V3_new_retunedSK/IsolationValidation/2016C/ZElectron//v_1_2016-08-05/tagAndProbe_isolationValidation_2016C_ZElectron.root'
14+
parameters.signal_tree = 'ntTagAndProbe_IsolationValidation_Stage2_Rebuilt_tree'
15+
parameters.background_file = '/data_CMS/cms/sauvan/L1/2016/V3_new_retunedSK/IsolationNtuples/ZeroBias_2016C_1e34/v_1_2016-08-06/zeroBias_IsolationNtuple.root'
16+
parameters.background_tree = 'ntZeroBias_IsolationNtuple_tree'
17+
parameters.working_directory = '/home/llr/cms/sauvan/DATA/TMP/egamma_isolation_retunedSK/'
18+
## Variable names
19+
parameters.variables.ieta = 'abs(ieta)'
20+
parameters.variables.et = 'et_raw'
21+
parameters.variables.ntt = 'ntt'
22+
parameters.variables.rho = 'rho'
23+
parameters.variables.iso = 'iso'
24+
## Steps
25+
parameters.steps.train_workingpoints = True
26+
parameters.steps.fit_ntt_vs_rho = True
27+
parameters.steps.test_workingpoints = True
28+
parameters.steps.do_compression = True
29+
## eta-pt efficiency shape
30+
parameters.eta_pt_optimization.eta_optimization = 'none'
31+
efficiencies_low_array = np.array([0.80,0.80,0.80,0.80,0.80,0.75,0.80, 0.85])
32+
efficiencies_high_array = np.array([0.92,0.95,0.95,0.95,0.95,0.95,0.95, 0.95])
33+
eta_binning = [0.5, 3.5, 6.5, 9.5, 13.5, 18.5, 22.5, 25.5, 28.5]
34+
efficiencies_low = Hist(eta_binning)
35+
efficiencies_high = Hist(eta_binning)
36+
array2hist(efficiencies_low_array, efficiencies_low)
37+
array2hist(efficiencies_high_array, efficiencies_high)
38+
parameters.eta_pt_optimization.eta_pt_efficiency_shapes = \
39+
double_slope_relaxation_vs_pt(efficiencies_low,\
40+
efficiencies_high,\
41+
threshold_low=56.,\
42+
threshold_high=80.,\
43+
eff_min=0.5,\
44+
max_et=120.)
45+
## LUT Compression
46+
parameters.compression.eta = [0,5,6,9,10,12,13,14,17,18,19,20,23,24,25,26,32]
47+
parameters.compression.et = [0,18,20,22,28,32,37,42,52,63,73,81,87,91,111,151,256]
48+
parameters.compression.ntt = [0,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141,146,151,156,256]

identification_isolation/python/egamma_isolation.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
from batch import batch_launcher
22
from identification_isolation import quantile_regression, correlations, efficiency
33
from identification_isolation.tests import test_efficiency
4-
from object_manipulation.conversion_to_histo import function2th2, function2th3, events2th3
5-
from utilities.root_utilities import graph2array
4+
from utilities.root_utilities import function2th2, function2th3, events2th3, graph2array
65
from identification_isolation.cut_functions import RegressionWithInputMapping, CombinedWorkingPoints
76
import rate
87

identification_isolation/python/quantile_regression.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from sklearn import cross_validation
1010

1111

12-
from object_manipulation.conversion_to_histo import function2th2
12+
from utilities.root_utilities import function2th2
1313
from identification_isolation import efficiency
1414

1515
from rootpy.plotting import Hist2D, Hist3D
+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__all__ = ['conversion_to_histo', 'luts']
1+
__all__ = ['luts']

object_manipulation/python/conversion_to_histo.py

-64
This file was deleted.

utilities/python/root_utilities.py

+65
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,71 @@
11
import numpy as np
2+
from rootpy.plotting import Hist2D, Hist3D
3+
from root_numpy import fill_hist
24

5+
# convert a ROOT TGraph (without errors) to a Numpy array
36
def graph2array(graph):
47
xs = np.array([graph.GetX()[p] for p in range(graph.GetN())])
58
ys = np.array([graph.GetY()[p] for p in range(graph.GetN())])
69
return np.column_stack((xs,ys))
10+
11+
12+
# 'function' must be able to take an array of (2D) array as input
13+
def function2th2(function, binsx, binsy, titlex='', titley=''):
14+
histo = Hist2D(*(binsx+binsy))
15+
histo.SetXTitle(titlex)
16+
histo.SetYTitle(titley)
17+
# Prepare array of inputs, one entry for each bin
18+
values = []
19+
for bx in histo.bins_range(0):
20+
x = histo.GetXaxis().GetBinCenter(bx)
21+
for by in histo.bins_range(1):
22+
y = histo.GetYaxis().GetBinCenter(by)
23+
values.append([x,y])
24+
# Call function for each value
25+
results = function(np.array(values))
26+
for result,value in zip(results, values):
27+
bx = histo.GetXaxis().FindBin(value[0])
28+
by = histo.GetYaxis().FindBin(value[1])
29+
histo[bx,by].value = result
30+
return histo
31+
32+
33+
34+
# 'function' must be able to take an array of (3D) array as input
35+
def function2th3(function, binsx, binsy, binsz, titlex='', titley='', titlez=''):
36+
histo = Hist3D(*(binsx+binsy+binsz))
37+
histo.SetXTitle(titlex)
38+
histo.SetYTitle(titley)
39+
histo.SetZTitle(titlez)
40+
# Prepare array of inputs, one entry for each bin
41+
values = []
42+
for bx in histo.bins_range(0):
43+
x = histo.GetXaxis().GetBinCenter(bx)
44+
for by in histo.bins_range(1):
45+
y = histo.GetYaxis().GetBinCenter(by)
46+
for bz in histo.bins_range(2):
47+
z = histo.GetZaxis().GetBinCenter(bz)
48+
values.append([x,y,z])
49+
# Call function for each value
50+
results = function(np.array(values))
51+
for result,value in zip(results, values):
52+
bx = histo.GetXaxis().FindBin(value[0])
53+
by = histo.GetYaxis().FindBin(value[1])
54+
bz = histo.GetZaxis().FindBin(value[2])
55+
histo[bx,by,bz].value = result
56+
return histo
57+
58+
59+
def events2th3(inputs, values, binsx, binsy, binsz, titlex='', titley='', titlez=''):
60+
# Histo used to fill values
61+
histo = Hist3D(*(binsx+binsy+binsz))
62+
# Histo used to count entries
63+
histo_count = Hist3D(*(binsx+binsy+binsz))
64+
histo.SetXTitle(titlex)
65+
histo.SetYTitle(titley)
66+
histo.SetZTitle(titlez)
67+
fill_hist(histo, inputs, values)
68+
fill_hist(histo_count, inputs)
69+
# Compute mean values in bins
70+
histo.Divide(histo_count)
71+
return histo

0 commit comments

Comments
 (0)