{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import uproot\t\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits import mplot3d\n", "import awkward as ak\n", "from scipy.optimize import curve_fit\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "31630" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# file = uproot.open(\"tracking_losses_ntuple_Bd2KstEE.root:PrDebugTrackingLosses.PrDebugTrackingTool/Tuple;1\")\n", "file = uproot.open(\n", " \"tracking_losses_ntuple_B_default.root:PrDebugTrackingLosses.PrDebugTrackingTool/Tuple;1\"\n", ")\n", "\n", "# selektiere nur elektronen von B->K*ee\n", "allcolumns = file.arrays()\n", "found = allcolumns[\n", " (allcolumns.isElectron) & (~allcolumns.lost) & (allcolumns.fromSignal)\n", "] # B: 9056\n", "lost = allcolumns[\n", " (allcolumns.isElectron) & (allcolumns.lost) & (allcolumns.fromSignal)\n", "] # B: 1466\n", "\n", "ak.num(found, axis=0) + ak.num(lost, axis=0)\n", "# ak.count(found, axis=None)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# found\n", "\n", "brem_e_f = found[\"brem_photons_pe\"]\n", "brem_z_f = found[\"brem_vtx_z\"]\n", "brem_x_f = found[\"brem_vtx_x\"]\n", "e_f = found[\"energy\"]\n", "length_f = found[\"brem_vtx_z_length\"]\n", "\n", "brem_f = ak.ArrayBuilder()\n", "\n", "for itr in range(ak.num(found, axis=0)):\n", " brem_f.begin_record()\n", " # [:,\"energy\"] energy\n", " brem_f.field(\"energy\").append(e_f[itr])\n", " # [:,\"photon_length\"] number of vertices\n", " brem_f.field(\"photon_length\").integer(length_f[itr])\n", " # [:,\"brem_photons_pe\",:] photon energy\n", " brem_f.field(\"brem_photons_pe\").append(brem_e_f[itr])\n", " # [:,\"brem_vtx_z\",:] brem vtx z\n", " brem_f.field(\"brem_vtx_x\").append(brem_x_f[itr])\n", " brem_f.field(\"brem_vtx_z\").append(brem_z_f[itr])\n", " brem_f.end_record()\n", "\n", "brem_f = ak.Array(brem_f)\n", "\n", "# lost\n", "\n", "brem_e_l = lost[\"brem_photons_pe\"]\n", "brem_z_l = lost[\"brem_vtx_z\"]\n", "brem_x_l = lost[\"brem_vtx_x\"]\n", "e_l = lost[\"energy\"]\n", "length_l = lost[\"brem_vtx_z_length\"]\n", "\n", "brem_l = ak.ArrayBuilder()\n", "\n", "for itr in range(ak.num(lost, axis=0)):\n", " brem_l.begin_record()\n", " # [:,\"energy\"] energy\n", " brem_l.field(\"energy\").append(e_l[itr])\n", " # [:,\"photon_length\"] number of vertices\n", " brem_l.field(\"photon_length\").integer(length_l[itr])\n", " # [:,\"brem_photons_pe\",:] photon energy\n", " brem_l.field(\"brem_photons_pe\").append(brem_e_l[itr])\n", " # [:,\"brem_vtx_z\",:] brem vtx z\n", " brem_l.field(\"brem_vtx_x\").append(brem_x_l[itr])\n", " brem_l.field(\"brem_vtx_z\").append(brem_z_l[itr])\n", " brem_l.end_record()\n", "\n", "brem_l = ak.Array(brem_l)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "photon_cut = 0\n", "photon_cut_ratio = 0.1\n", "\n", "cut_brem_found = ak.ArrayBuilder()\n", "\n", "for itr in range(ak.num(brem_f, axis=0)):\n", " cut_brem_found.begin_record()\n", " cut_brem_found.field(\"energy\").real(brem_f[itr, \"energy\"])\n", "\n", " tmp_energy = brem_f[itr, \"energy\"]\n", "\n", " cut_brem_found.field(\"brem_photons_pe\")\n", " cut_brem_found.begin_list()\n", " for jentry in range(brem_f[itr, \"photon_length\"]):\n", " if (\n", " brem_f[itr, \"brem_vtx_z\", jentry] > 5000\n", " or brem_f[itr, \"brem_photons_pe\", jentry] < photon_cut\n", " or brem_f[itr, \"brem_photons_pe\", jentry] < photon_cut_ratio * tmp_energy\n", " ):\n", " continue\n", " else:\n", " cut_brem_found.real(brem_f[itr, \"brem_photons_pe\", jentry])\n", " tmp_energy -= brem_f[itr, \"brem_photons_pe\", jentry]\n", " cut_brem_found.end_list()\n", "\n", " tmp_energy = brem_f[itr, \"energy\"]\n", "\n", " cut_brem_found.field(\"brem_vtx_x\")\n", " cut_brem_found.begin_list()\n", " for jentry in range(brem_f[itr, \"photon_length\"]):\n", " if (\n", " brem_f[itr, \"brem_vtx_z\", jentry] > 5000\n", " or brem_f[itr, \"brem_photons_pe\", jentry] < photon_cut\n", " or brem_f[itr, \"brem_photons_pe\", jentry] < photon_cut_ratio * tmp_energy\n", " ):\n", " continue\n", " else:\n", " cut_brem_found.real(brem_f[itr, \"brem_vtx_x\", jentry])\n", " tmp_energy -= brem_f[itr, \"brem_photons_pe\", jentry]\n", " cut_brem_found.end_list()\n", "\n", " tmp_energy = brem_f[itr, \"energy\"]\n", "\n", " cut_brem_found.field(\"brem_vtx_z\")\n", " cut_brem_found.begin_list()\n", " for jentry in range(brem_f[itr, \"photon_length\"]):\n", " if (\n", " brem_f[itr, \"brem_vtx_z\", jentry] > 5000\n", " or brem_f[itr, \"brem_photons_pe\", jentry] < photon_cut\n", " or brem_f[itr, \"brem_photons_pe\", jentry] < photon_cut_ratio * tmp_energy\n", " ):\n", " continue\n", " else:\n", " cut_brem_found.real(brem_f[itr, \"brem_vtx_z\", jentry])\n", " tmp_energy -= brem_f[itr, \"brem_photons_pe\", jentry]\n", " cut_brem_found.end_list()\n", "\n", " cut_brem_found.end_record()\n", "\n", "tuple_found = ak.Array(cut_brem_found)\n", "\n", "cut_brem_lost = ak.ArrayBuilder()\n", "\n", "for itr in range(ak.num(brem_l, axis=0)):\n", " cut_brem_lost.begin_record()\n", " cut_brem_lost.field(\"energy\").real(brem_l[itr, \"energy\"])\n", "\n", " tmp_energy = brem_l[itr, \"energy\"]\n", "\n", " cut_brem_lost.field(\"brem_photons_pe\")\n", " cut_brem_lost.begin_list()\n", " for jentry in range(brem_l[itr, \"photon_length\"]):\n", " if (\n", " brem_l[itr, \"brem_vtx_z\", jentry] > 5000\n", " or brem_l[itr, \"brem_photons_pe\", jentry] < photon_cut\n", " or brem_l[itr, \"brem_photons_pe\", jentry] < photon_cut_ratio * tmp_energy\n", " ):\n", " continue\n", " else:\n", " cut_brem_lost.real(brem_l[itr, \"brem_photons_pe\", jentry])\n", " tmp_energy -= brem_l[itr, \"brem_photons_pe\", jentry]\n", " cut_brem_lost.end_list()\n", "\n", " tmp_energy = brem_l[itr, \"energy\"]\n", "\n", " cut_brem_lost.field(\"brem_vtx_x\")\n", " cut_brem_lost.begin_list()\n", " for jentry in range(brem_l[itr, \"photon_length\"]):\n", " if (\n", " brem_l[itr, \"brem_vtx_z\", jentry] > 5000\n", " or brem_l[itr, \"brem_photons_pe\", jentry] < photon_cut\n", " or brem_l[itr, \"brem_photons_pe\", jentry] < photon_cut_ratio * tmp_energy\n", " ):\n", " continue\n", " else:\n", " cut_brem_lost.real(brem_l[itr, \"brem_vtx_x\", jentry])\n", " tmp_energy -= brem_l[itr, \"brem_photons_pe\", jentry]\n", " cut_brem_lost.end_list()\n", "\n", " tmp_energy = brem_l[itr, \"energy\"]\n", "\n", " cut_brem_lost.field(\"brem_vtx_z\")\n", " cut_brem_lost.begin_list()\n", " for jentry in range(brem_l[itr, \"photon_length\"]):\n", " if (\n", " brem_l[itr, \"brem_vtx_z\", jentry] > 5000\n", " or brem_l[itr, \"brem_photons_pe\", jentry] < photon_cut\n", " or brem_l[itr, \"brem_photons_pe\", jentry] < photon_cut_ratio * tmp_energy\n", " ):\n", " continue\n", " else:\n", " cut_brem_lost.real(brem_l[itr, \"brem_vtx_z\", jentry])\n", " tmp_energy -= brem_l[itr, \"brem_photons_pe\", jentry]\n", " cut_brem_lost.end_list()\n", "\n", " cut_brem_lost.end_record()\n", "\n", "tuple_lost = ak.Array(cut_brem_lost)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
{energy: 3.26e+04,\n", " brem_photons_pe: [1.26e+04, 4.49e+03],\n", " brem_vtx_x: [-33.8, -133],\n", " brem_vtx_z: [601, 2.33e+03]}\n", "---------------------------------------\n", "type: {\n", " energy: float64,\n", " brem_photons_pe: var * float64,\n", " brem_vtx_x: var * float64,\n", " brem_vtx_z: var * float64\n", "}" ], "text/plain": [ "
{energy: 2.12e+04,\n", " brem_photons_pe: [],\n", " brem_vtx_x: [],\n", " brem_vtx_z: []}\n", "-----------------------------------\n", "type: {\n", " energy: float64,\n", " brem_photons_pe: var * float64,\n", " brem_vtx_x: var * float64,\n", " brem_vtx_z: var * float64\n", "}" ], "text/plain": [ "