This commit is contained in:
cetin 2024-01-17 15:59:39 +01:00
parent e8abd5f360
commit be4cb32e98
6 changed files with 1022 additions and 468 deletions

View File

@ -3,4 +3,7 @@
"python.analysis.completeFunctionParens": true,
"python.analysis.enablePytestExtra": false,
"python.analysis.extraCommitChars": true,
"notebook.formatOnCellExecution": true,
"notebook.formatOnSave.enabled": true,
"editor.defaultFormatter": "ms-python.black-formatter",
}

381
trackinglosses_bak.ipynb Normal file
View File

@ -0,0 +1,381 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"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": null,
"metadata": {},
"outputs": [],
"source": [
"\"\"\"\n",
"# found\n",
"\n",
"brem_e = electrons[\"brem_photons_pe\"]\n",
"brem_z = electrons[\"brem_vtx_z\"]\n",
"brem_x = electrons[\"brem_vtx_x\"]\n",
"e = electrons[\"energy\"]\n",
"length = electrons[\"brem_vtx_z_length\"]\n",
"\n",
"\n",
"\n",
"brem_f = ak.ArrayBuilder()\n",
"\n",
"for itr in range(ak.num(found, axis=0)):\n",
" brem_f.begin_record()\n",
" brem_f.field(\"lost\").boolean()\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)\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\"\"\"\n",
"photon_cut = 0\n",
"photon_cut_ratio = 0.2\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)\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"electrons_lost = ak.ArrayBuilder()\n",
"\n",
"for jelec in range(ak.num(tuple_lost, axis=0)):\n",
" electrons_lost.begin_record()\n",
" electrons_lost.field(\"energy\").real(tuple_lost[jelec, \"energy\"])\n",
"\n",
" tmp_velo = 0\n",
" tmp_richut = 0\n",
" for jphoton in range(ak.num(tuple_lost[jelec][\"brem_photons_pe\"], axis=0)):\n",
" if tuple_lost[jelec, \"brem_vtx_z\", jphoton] <= 800:\n",
" tmp_velo += tuple_lost[jelec, \"brem_photons_pe\", jphoton]\n",
" elif (tuple_lost[jelec, \"brem_vtx_z\", jphoton] > 800) and (\n",
" tuple_lost[jelec, \"brem_vtx_z\", jphoton] <= 3000\n",
" ):\n",
" tmp_richut += tuple_lost[jelec, \"brem_photons_pe\", jphoton]\n",
"\n",
" electrons_lost.field(\"velo\").real(tmp_velo)\n",
"\n",
" electrons_lost.field(\"rich\").real(tmp_richut)\n",
" \n",
" if (tmp_velo==0) and (tmp_richut==0):\n",
" electrons_lost.field(\"quality\").integer(0)\n",
" else:\n",
" electrons_lost.field(\"quality\").integer(1)\n",
"\n",
" electrons_lost.end_record()\n",
"\n",
"electrons_lost = ak.Array(electrons_lost)\n",
"\n",
"electrons_found = ak.ArrayBuilder()\n",
"\n",
"for jelec in range(ak.num(tuple_found, axis=0)):\n",
" electrons_found.begin_record()\n",
" electrons_found.field(\"energy\").real(tuple_found[jelec, \"energy\"])\n",
"\n",
" tmp_velo = 0\n",
" tmp_richut = 0\n",
" for jphoton in range(ak.num(tuple_found[jelec][\"brem_photons_pe\"], axis=0)):\n",
" if tuple_found[jelec, \"brem_vtx_z\", jphoton] <= 850:\n",
" tmp_velo += tuple_found[jelec, \"brem_photons_pe\", jphoton]\n",
" elif (tuple_found[jelec, \"brem_vtx_z\", jphoton] > 850) and (\n",
" tuple_found[jelec, \"brem_vtx_z\", jphoton] <= 3000\n",
" ):\n",
" tmp_richut += tuple_found[jelec, \"brem_photons_pe\", jphoton]\n",
"\n",
" electrons_found.field(\"velo\").real(tmp_velo)\n",
"\n",
" electrons_found.field(\"rich\").real(tmp_richut)\n",
" \n",
" if (tmp_velo==0) and (tmp_richut==0):\n",
" electrons_found.field(\"quality\").integer(0)\n",
" else:\n",
" electrons_found.field(\"quality\").integer(1)\n",
"\n",
" electrons_found.end_record()\n",
"\n",
"electrons_found = ak.Array(electrons_found)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"def ratio(nominator, denom):\n",
" denominator = ak.num(denom[\"energy\"], axis=0)\n",
" return nominator / denominator\n",
"\n",
"\n",
"def eff(found, lost):\n",
" return found / (found + lost)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"n_elec_lost = ak.num(tuple_lost, axis=0)\n",
"\n",
"velo_lost = 0\n",
"\n",
"richut_lost = 0\n",
"\n",
"for jelec in range(ak.num(tuple_lost, axis=0)):\n",
" veloemitted = False\n",
" richemitted = False\n",
" for jphoton in range(ak.num(tuple_lost[jelec][\"brem_photons_pe\"], axis=0)):\n",
" if (tuple_lost[jelec, \"brem_vtx_z\", jphoton] <= 770) and (veloemitted == False):\n",
" velo_lost += 1\n",
" veloemitted = True\n",
" elif (\n",
" (tuple_lost[jelec, \"brem_vtx_z\", jphoton] > 770)\n",
" and (tuple_lost[jelec, \"brem_vtx_z\", jphoton] <= 3000)\n",
" and (richemitted == False)\n",
" ):\n",
" richut_lost += 1\n",
" richemitted = True\n",
"\n",
"print(\"ratio of lost electrons emitting in Velo: \", ratio(velo_lost, brem[brem.lost]))\n",
"print(\"ratio of lost electrons emitting in Rich1+UT: \", ratio(richut_lost, brem[brem.lost]))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# efficiency berechnen als found in velo oder rich über alle elektronen\n",
"# dann kann man zusammenrechnen mit velo, rich, und allen anderen elektronen\n",
"\n",
"num_velo_found = 0\n",
"num_rich_found = 0\n",
"for itr in range(ak.num(electrons_found, axis=0)):\n",
" if (electrons_found[itr, \"quality\"]==1):\n",
" if (electrons_found[itr, \"velo\"] >= electrons_found[itr, \"rich\"]):\n",
" num_velo_found += 1\n",
" else:\n",
" num_rich_found += 1\n",
"\n",
"num_velo_lost = 0\n",
"num_rich_lost = 0\n",
"for itr in range(ak.num(electrons_lost, axis=0)):\n",
" if (electrons_lost[itr, \"quality\"]==1):\n",
" if electrons_lost[itr, \"velo\"] >= electrons_lost[itr, \"rich\"]:\n",
" num_velo_lost += 1\n",
" else:\n",
" num_rich_lost += 1\n",
"\n",
"lost_elec = ak.num(electrons[electrons.lost],axis=0)\n",
"found_elec = ak.num(electrons[~(electrons.lost)],axis=0)\n",
"denom = lost_elec+found_elec\n",
"\n",
"eff_velo = num_velo_found/denom\n",
"\n",
"eff_rich = num_rich_found/denom\n",
"\n",
"eff_other = ak.num(electrons_found[electrons_found[\"quality\"]==0],axis=0)/denom\n",
"\n",
"print(\"VELO energy emission, eff: \", eff_velo)\n",
"\n",
"print(\"RICH1+UT energy emission, eff: \", eff_rich)\n",
"\n",
"print(\"Neither, eff: \", eff_other)\n",
"\n",
"print(\"total efficiency: \", eff_velo + eff_rich + eff_other)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,127 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"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": null,
"metadata": {},
"outputs": [],
"source": [
"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.fromB)\n",
"] # B: 9056\n",
"lost = allcolumns[\n",
" (allcolumns.isElectron) & (allcolumns.lost) & (allcolumns.fromB)\n",
"] # B: 1466\n",
"\n",
"electrons = allcolumns[(allcolumns.isElectron) & (allcolumns.fromB)]\n",
"\n",
"print(ak.num(found, axis=0), ak.num(lost, axis=0))\n",
"print(ak.num(electrons,axis=0))\n",
"# ak.count(found, axis=None)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"lost_e = electrons[\"lost\"]\n",
"e = electrons[\"energy\"]\n",
"brem_pe = electrons[\"brem_photons_pe\"]\n",
"brem_z = electrons[\"brem_vtx_z\"]\n",
"brem_x = electrons[\"brem_vtx_x\"]\n",
"length = electrons[\"brem_vtx_z_length\"]\n",
"\n",
"\n",
"\n",
"brem = ak.ArrayBuilder()\n",
"\n",
"for itr in range(ak.num(electrons, axis=0)):\n",
" brem.begin_record()\n",
" brem.field(\"lost\").boolean(lost_e[itr])\n",
" # [:,\"energy\"] energy\n",
" brem.field(\"energy\").append(e[itr])\n",
" # [:,\"photon_length\"] number of vertices\n",
" brem.field(\"photon_length\").integer(length[itr])\n",
" # [:,\"brem_photons_pe\",:] photon energy\n",
" brem.field(\"brem_photons_pe\").append(brem_pe[itr])\n",
" # [:,\"brem_vtx_z\",:] brem vtx z\n",
" brem.field(\"brem_vtx_x\").append(brem_x[itr])\n",
" brem.field(\"brem_vtx_z\").append(brem_z[itr])\n",
" brem.end_record()\n",
"\n",
"brem = ak.Array(brem)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "tuner",
"language": "python",
"name": "python3"
},
"language_info": {
"name": "python",
"version": "3.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 2
}