ATLAS Offline Software
makeegammaturnon.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
2 
3 
4 #***************************************************************************
5 # makeplots.py -
6 # -------------------
7 # begin : 28 03 2020
8 # email : tong.qiu@cern.ch
9 # **************************************************************************
10 from __future__ import print_function
11 from __future__ import division
12 import numpy as np
13 from eFEXNTuple import *
14 from plotlib import *
15 import sys
16 
17 def rebin(binning, data):
18  hist, edge = np.histogram(data, binning)
19  newbin = [edge[0]]
20  total_i = 0
21  for i in range(len(hist)):
22  total_i += hist[i]
23  if total_i > 0:
24  newbin.append(edge[i+1])
25  total_i = 0
26  newbin[-1] = binning[-1]
27  return newbin
28 
29 def rebin2(binning, data1, data2):
30  hist1, edge = np.histogram(data1, binning)
31  hist2, edge = np.histogram(data2, binning)
32  newbin = [edge[0]]
33  total_1 = 0
34  total_2 = 0
35  for i in range(len(hist1)):
36  total_1 += hist1[i]
37  total_2 += hist2[i]
38  if total_1 > 0 and total_2 > 0:
39  newbin.append(edge[i+1])
40  total_1 = 0
41  total_2 = 0
42  newbin[-1] = binning[-1]
43  return newbin
44 
45 def turn_on_curve(all_data, selected_data, bins):
46  bins = rebin(bins, all_data)
47  hist_all, edges = np.histogram(all_data, bins)
48  hist_selected, edges = np.histogram(selected_data, bins)
49  bin_centre = [(edges[i] + edges[i+1])/2. for i in range(len(edges)-1)]
50  hist_height = hist_selected / hist_all
51  hist_error = ((hist_selected**0.5 / hist_all)**2. + (hist_all**0.5 * hist_selected / hist_all**2.)**2.)**0.5
52  return (hist_height, bin_centre, hist_error)
53 
54 def main(path):
55  myntuple = eFEXNTupleLoader(path)
56  all_e_ET = []
57  selected_e_ET = []
58  for each in myntuple.entries():
59  each.set_class_type("e")
60  if each.is_in_crack(each.leading_l_id()):
61  continue
62  if abs(each.truth_e_eta[each.leading_l_id()]) > 2.3:
63  continue
64  all_e_ET.append(each.truth_e_ET[each.leading_l_id()])
65  matched_tobs = each.get_eg_matchedtob_id()[each.leading_l_id()]
66  selected = False
67  for i in matched_tobs:
68  if not each.eg_haveseed[i]:
69  continue
70  if each.eg_ET[i] <= 22:
71  continue
72  #if 0.025*(each.eg_wstotnum[i]/each.eg_wstotden[i])**0.5 < 0.045:
73  selected = True
74  break
75  if selected:
76  selected_e_ET.append(each.truth_e_ET[each.leading_l_id()])
77 
78  hist_height, bin_centre, hist_error = turn_on_curve(all_e_ET, selected_e_ET, range(0,100,5))
79  histplot([bin_centre], [hist_height], [hist_error], errorbar_limit=1, filename="egammatrunon")
80 
81 
82 if __name__ == "__main__":
83  if len(sys.argv) > 2:
84  print("Error: too many arguments")
85  print("Example: python makeplots.py PATH/TO/INPUT")
86  exit(1)
87  if len(sys.argv) == 1:
88  print("Error: need the path to the input file")
89  print("Example: python makeplots.py PATH/TO/INPUT")
90  print("Info: Using default input file path")
91  inputfile = "myfile.root"
92  else:
93  inputfile = sys.argv[1]
94  main(inputfile)
makeegammaturnon.main
def main(path)
Definition: makeegammaturnon.py:54
makeegammaturnon.turn_on_curve
def turn_on_curve(all_data, selected_data, bins)
Definition: makeegammaturnon.py:45
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
calibdata.exit
exit
Definition: calibdata.py:236
makeegammaturnon.rebin
def rebin(binning, data)
Definition: makeegammaturnon.py:17
makeegammaturnon.rebin2
def rebin2(binning, data1, data2)
Definition: makeegammaturnon.py:29
plotlib.histplot
def histplot(data_x, data_y, error=None, label=None, **kwargs)
Definition: plotlib.py:18
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
eFEXNTuple.eFEXNTupleLoader
Definition: eFEXNTuple.py:24