4 this small script dumps the ratio raw-Ex / raw-E where x=0,1,2,3 for converted,
5 uncoverted and electrons from single particle (you need to check the paths).
6 For converted photon is dumps also the radius of conversion.
8 This file and its input are not needed for the tool.
10 The output of this tool is needed to generate single particle from scratch and
11 then to compute the decomposition of the covariance matrix.
16 from array
import array
21 chain = ROOT.TChain(
"egamma")
24 print(
"entries:", chain.GetEntries())
26 selection = {
"unconv":
"(ph_Rconv >= 800 || ph_Rconv <= 0)",
27 "conv":
"(ph_Rconv < 800 && ph_Rconv > 0)",
28 "electron":
"1"}[particle]
30 prefix = {
"unconv":
"ph",
"conv":
"ph",
"electron":
"el"}[particle]
32 layers =
"rawcl_Es0",
"rawcl_Es1",
"rawcl_Es2",
"rawcl_Es3"
33 layers = [prefix +
"_" + v
for v
in layers]
34 title = [
"ratio_Es0_true_E",
38 aetaCalo =
"abs(" + prefix +
"_" +
"cl_etaCalo" +
")"
39 truth_E = prefix +
"_truth_E"
40 ratio_layers = [
"%s / %s" % (layer, truth_E)
for layer
in layers]
41 truth_eta = prefix +
"_truth_eta"
42 truth_pt =
"(%s / cosh(%s))" % (truth_E, truth_eta)
43 matched = (
"abs(({0}_rawcl_Es0 + "
44 "{0}_rawcl_Es1 + {0}_rawcl_Es2 + "
45 "{0}_rawcl_Es3)/{0}_truth_E - 1)<1").
format(prefix)
46 vars_to_plot = ratio_layers
47 selection +=
" && " +
"(" + matched +
")"
49 pt_binning = [0, 5E3, 10E3, 15E3, 20E3,
50 30E3, 35E3, 40E3, 45E3, 50E3, 55E3, 60E3, 65E3,
51 70E3, 75E3, 80E3, 85E3, 90E3,
52 100E3, 110E3, 120E3, 130E3,
53 140E3, 160E3, 180E3, 200E3, 220E3,
54 250E3, 300E3, 350E3, 400E3, 450E3, 500E3, 550E3, 600E3,
55 700E3, 800E3, 900E3, 1000E3,
56 1200E3, 1400E3, 1600E3, 1800E3, 2000E3,
58 aeta_binning = [0, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6,
59 0.7, 0.75, 0.8, 0.85, 0.9, 1.0,
60 1.1, 1.2, 1.3, 1.425, 1.550, 1.6,
61 1.65, 1.7, 1.75, 1.8, 1.9, 2.0, 2.1,
62 2.2, 2.3, 2.35, 2.4, 2.5]
63 pt_binning =
array(
'd', pt_binning)
64 aeta_binning =
array(
'd', aeta_binning)
65 if particle ==
"conv":
66 vars_to_plot.append(
"ph_Rconv")
67 title.append(
"ph_Rconv")
68 vars_to_plot.append(
"ph_zconv")
69 title.append(
"ph_zconv")
71 print(
"plotting counting")
72 histo_name =
"histo_count_%s" % particle
73 histo_count = ROOT.TH2F(histo_name,
"count %s" % particle, len(
74 pt_binning) - 1, pt_binning, len(aeta_binning) - 1, aeta_binning)
75 chain.Draw(aetaCalo +
":" + truth_pt +
">>" + histo_name, selection)
78 for t, v
in zip(title, vars_to_plot):
80 histo_name =
"histo_%s_%s" % (particle, t)
82 sel = selection +
" && abs(ph_zconv) < 5000"
85 histo = ROOT.TProfile2D(histo_name, t, len(
86 pt_binning) - 1, pt_binning, len(aeta_binning) - 1, aeta_binning)
87 arg = v +
":" + aetaCalo +
":" + truth_pt +
">>" + histo_name
88 chain.Draw(arg, sel,
"profcolz")
89 histo.GetXaxis().SetTitle(
"true pT [MeV]")
90 histo.GetYaxis().SetTitle(
"etaCalo")
92 result.append(histo_count)
96 if __name__ ==
"__main__":
97 output_file = ROOT.TFile.Open(
"average_layers.root",
"recreate")
99 "/storage_tmp/atlas/MVA2015/inputs_MC15/"
100 "photon_grid_v5/data-output/*/*.root",
102 result +=
main(
"/storage_tmp/atlas/MVA2015/inputs_MC15/"
103 "photon_grid_v5/data-output/*/*.root",
105 result +=
main(
"/storage_tmp/atlas/MVA2015/inputs_MC15/"
106 "electron_local_v5.1/data-output/mc15_electron.root",