diff --git a/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/.ipynb_checkpoints/Untitled-checkpoint.ipynb new file mode 100644 index 0000000..2fd6442 --- /dev/null +++ b/.ipynb_checkpoints/Untitled-checkpoint.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/.ipynb_checkpoints/numpy_backup_for_scaling-checkpoint.ipynb b/.ipynb_checkpoints/numpy_backup_for_scaling-checkpoint.ipynb new file mode 100644 index 0000000..76cad46 --- /dev/null +++ b/.ipynb_checkpoints/numpy_backup_for_scaling-checkpoint.ipynb @@ -0,0 +1,401 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Numpy backup for scaling in the beginning" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\util\\execution.py:53: UserWarning: Not running on Linux. Determining available cpus for thread can failand be overestimated. Workaround (only if too many cpus are used):`zfit.run.set_n_cpu(your_cpu_number)`\n", + " warnings.warn(\"Not running on Linux. Determining available cpus for thread can fail\"\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.\n", + "For more information, please see:\n", + " * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md\n", + " * https://github.com/tensorflow/addons\n", + "If you depend on functionality not listed there, please file an issue.\n", + "\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from pdg_const import pdg\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import pickle as pkl\n", + "import sys\n", + "import time\n", + "from helperfunctions import display_time, prepare_plot\n", + "import cmath as c\n", + "import scipy.integrate as integrate\n", + "from scipy.optimize import fminbound\n", + "from array import array as arr\n", + "import collections\n", + "from itertools import compress\n", + "import tensorflow as tf\n", + "import zfit\n", + "from zfit import ztf\n", + "from IPython.display import clear_output\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def formfactor( q2, subscript): #returns real value\n", + " #check if subscript is viable\n", + "\n", + " if subscript != \"0\" and subscript != \"+\" and subscript != \"T\":\n", + " raise ValueError('Wrong subscript entered, choose either 0, + or T')\n", + "\n", + " #get constants\n", + "\n", + " mK = pdg['Ks_M']\n", + " mbstar0 = pdg[\"mbstar0\"]\n", + " mbstar = pdg[\"mbstar\"]\n", + " b0 = pdg[\"b0\"]\n", + " bplus = pdg[\"bplus\"]\n", + " bT = pdg[\"bT\"]\n", + "\n", + " mmu = pdg['muon_M']\n", + " mb = pdg['bquark_M']\n", + " ms = pdg['squark_M']\n", + " mB = pdg['Bplus_M']\n", + "\n", + " #N comes from derivation in paper\n", + "\n", + " N = 3\n", + "\n", + " #some helperfunctions\n", + "\n", + " tpos = (mB - mK)**2\n", + " tzero = (mB + mK)*(np.sqrt(mB)-np.sqrt(mK))**2\n", + "\n", + " z_oben = np.sqrt(tpos - q2) - np.sqrt(tpos - tzero)\n", + " z_unten = np.sqrt(tpos - q2) + np.sqrt(tpos - tzero)\n", + " z = z_oben/ z_unten\n", + "\n", + " #calculate f0\n", + "\n", + " if subscript == \"0\":\n", + " prefactor = 1/(1 - q2/(mbstar0**2))\n", + " _sum = 0\n", + "\n", + " for i in range(N):\n", + " _sum += b0[i]*(np.power(z,i))\n", + "\n", + " return prefactor * _sum\n", + "\n", + " #calculate f+ or fT\n", + "\n", + " else:\n", + " prefactor = 1/(1 - q2/(mbstar**2))\n", + " _sum = 0\n", + "\n", + " if subscript == \"T\":\n", + " b = bT\n", + " else:\n", + " b = bplus\n", + "\n", + " for i in range(N):\n", + " _sum += b[i] * (np.power(z, i) - ((-1)**(i-N)) * (i/N) * np.power(z, N))\n", + "\n", + " return prefactor * _sum\n", + "\n", + "def resonance(q, _mass, width, phase, scale):\n", + "\n", + " q2 = np.power(q, 2)\n", + "\n", + " mmu = pdg['muon_M']\n", + "\n", + " p = 0.5 * np.sqrt(q2 - 4*(mmu**2))\n", + "\n", + " p0 = 0.5 * np.sqrt(_mass**2 - 4*mmu**2)\n", + "\n", + " gamma_j = p/ q2 * _mass * width / p0\n", + "\n", + " #Calculate the resonance\n", + "\n", + " _top = _mass * width\n", + "\n", + " _bottom = np.vectorize(complex)(_mass**2 - q2, -_mass*gamma_j)\n", + "\n", + " com = _top/_bottom\n", + "\n", + " #Rotate by the phase\n", + "\n", + " r = scale*np.abs(com)\n", + "\n", + " _phase = np.angle(com)\n", + "\n", + " _phase += phase\n", + "\n", + " com = r * np.exp(np.vectorize(complex)(0.0 , _phase))\n", + "\n", + " return com\n", + "\n", + "\n", + "def axiv_nonres(q):\n", + "\n", + " GF = pdg['GF']\n", + " alpha_ew = pdg['alpha_ew']\n", + " Vtb = pdg['Vtb']\n", + " Vts = pdg['Vts']\n", + " C10eff = pdg['C10eff']\n", + "\n", + " mmu = pdg['muon_M']\n", + " mb = pdg['bquark_M']\n", + " ms = pdg['squark_M']\n", + " mK = pdg['Ks_M']\n", + " mB = pdg['Bplus_M']\n", + "\n", + " q2 = np.power(q, 2)\n", + "\n", + " #Some helperfunctions\n", + "\n", + " beta = np.sqrt(np.abs(1. - 4. * mmu**2. / q2))\n", + "\n", + " kabs = np.sqrt(mB**2. +np.power(q2, 2)/mB**2. + mK**4./mB**2. - 2. * (mB**2. * mK**2. + mK**2. * q2 + mB**2. * q2) / mB**2.)\n", + "\n", + " #prefactor in front of whole bracket\n", + "\n", + " prefactor1 = GF**2. *alpha_ew**2. * (np.abs(Vtb*Vts))**2. * kabs * beta / (128. * np.pi**5.)\n", + "\n", + " #left term in bracket\n", + "\n", + " bracket_left = 2./3. * kabs**2. * beta**2. *np.abs(np.vectorize(complex)(C10eff, 0.0)*formfactor(q2, \"+\"))**2.\n", + "\n", + " #middle term in bracket\n", + "\n", + " _top = 4. * mmu**2. * (mB**2. - mK**2.) * (mB**2. - mK**2.)\n", + "\n", + " _under = q2 * mB**2.\n", + "\n", + " bracket_middle = _top/_under *np.power(np.abs(np.vectorize(complex)(C10eff, 0.0) * formfactor(q2, \"0\")), 2)\n", + "\n", + " #Note sqrt(q2) comes from derivation as we use q2 and plot q\n", + "\n", + " return prefactor1 * (bracket_left + bracket_middle) * 2 *np.sqrt(q2)\n", + "\n", + "def vec(q, funcs):\n", + " \n", + " q2 = np.power(q, 2)\n", + "\n", + " GF = pdg['GF']\n", + " alpha_ew = pdg['alpha_ew']\n", + " Vtb = pdg['Vtb']\n", + " Vts = pdg['Vts']\n", + " C7eff = pdg['C7eff']\n", + "\n", + " mmu = pdg['muon_M']\n", + " mb = pdg['bquark_M']\n", + " ms = pdg['squark_M']\n", + " mK = pdg['Ks_M']\n", + " mB = pdg['Bplus_M']\n", + "\n", + " #Some helperfunctions\n", + "\n", + " beta = np.sqrt(np.abs(1. - 4. * mmu**2. / q2))\n", + "\n", + " kabs = np.sqrt(mB**2. + np.power(q2, 2)/mB**2. + mK**4./mB**2. - 2 * (mB**2 * mK**2 + mK**2 * q2 + mB**2 * q2) / mB**2)\n", + "\n", + " #prefactor in front of whole bracket\n", + "\n", + " prefactor1 = GF**2. *alpha_ew**2. * (np.abs(Vtb*Vts))**2 * kabs * beta / (128. * np.pi**5.)\n", + "\n", + " #right term in bracket\n", + "\n", + " prefactor2 = kabs**2 * (1. - 1./3. * beta**2)\n", + "\n", + " abs_bracket = np.abs(c9eff(q, funcs) * formfactor(q2, \"+\") + np.vectorize(complex)(2.0 * C7eff * (mb + ms)/(mB + mK), 0.0) * formfactor(q2, \"T\"))**2\n", + "\n", + " bracket_right = prefactor2 * abs_bracket\n", + "\n", + " #Note sqrt(q2) comes from derivation as we use q2 and plot q\n", + "\n", + " return prefactor1 * bracket_right * 2 * np.sqrt(q2)\n", + "\n", + "def c9eff(q, funcs):\n", + "\n", + " C9eff_nr = np.vectorize(complex)(pdg['C9eff'], 0.0)\n", + "\n", + " c9 = C9eff_nr\n", + "\n", + " c9 = c9 + funcs\n", + "\n", + " return c9" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "jpsi_mass, jpsi_width, jpsi_phase, jpsi_scale = pdg[\"jpsi\"]\n", + "psi2s_mass, psi2s_width, psi2s_phase, psi2s_scale = pdg[\"psi2s\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def t_f(x):\n", + " \n", + " def jpsi_res(q):\n", + " return resonance(q, _mass = jpsi_mass, scale = jpsi_scale, phase = jpsi_phase, width = jpsi_width)\n", + "\n", + " def psi2s_res(q):\n", + " return resonance(q, _mass = psi2s_mass, scale = psi2s_scale, phase = psi2s_phase, width = psi2s_width)\n", + "\n", + " funcs = jpsi_res(x) + psi2s_res(x)\n", + "\n", + " vec_f = vec(x, funcs)\n", + "\n", + " axiv_nr = axiv_nonres(x)\n", + "\n", + " tot = vec_f + axiv_nr\n", + " \n", + " return tot" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Area: 7.126305680132978e-06, rel. err.: 0.1894614654746863%\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel_launcher.py:4: IntegrationWarning: The integral is probably divergent, or slowly convergent.\n", + " after removing the cwd from sys.path.\n" + ] + } + ], + "source": [ + "x_min = 2*pdg['muon_M']\n", + "x_max = (pdg[\"Bplus_M\"]-pdg[\"Ks_M\"]-0.1)\n", + "\n", + "result, err = integrate.quad(lambda x: t_f(x), 3600, 3800, limit = 100000000)\n", + "print(\"Area: {0}, rel. err.: {1}%\".format(result, err/result))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tot: Area: 0.0013270139056058355, rel. err.: 0.001434977783938156%\n", + "jpsi: Area: 6.527491388105805e-06, rel. err.: 0.0012105326520570792% (before scaling)\n" + ] + } + ], + "source": [ + "print(\"tot: Area: 0.0013270139056058355, rel. err.: 0.001434977783938156%\")\n", + "print(\"jpsi: Area: 6.527491388105805e-06, rel. err.: 0.0012105326520570792% (before scaling)\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "test_q = np.linspace(x_min, x_max, 2000000)\n", + "calcs_test = t_f(test_q)\n", + "plt.clf()\n", + "# plt.plot(x_part, calcs, '.')\n", + "plt.plot(test_q, calcs_test, label = 'pdf')\n", + "# plt.plot(test_q, res_y, label = 'res')\n", + "plt.legend()\n", + "plt.ylim(0.0, 1e-8)\n", + "# plt.yscale('log')\n", + "# plt.xlim(3080, 3110)\n", + "plt.savefig('np-test.png')\n", + "# print(jpsi_width)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/.ipynb_checkpoints/raremodel-nb-checkpoint.ipynb b/.ipynb_checkpoints/raremodel-nb-checkpoint.ipynb index 196fc5f..6bee98e 100644 --- a/.ipynb_checkpoints/raremodel-nb-checkpoint.ipynb +++ b/.ipynb_checkpoints/raremodel-nb-checkpoint.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -52,11 +52,22 @@ "import tensorflow as tf\n", "import zfit\n", "from zfit import ztf\n", - "from IPython.display import clear_output\n", + "# from IPython.display import clear_output\n", "import os" ] }, { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# chunksize = 1000000\n", + "# zfit.run.chunking.active = True\n", + "# zfit.run.chunking.max_n_points = chunksize" + ] + }, + { "cell_type": "markdown", "metadata": {}, "source": [ @@ -66,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -267,7 +278,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -322,7 +333,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -366,7 +377,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -394,7 +405,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -446,7 +457,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -466,7 +477,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -506,12 +517,12 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -544,7 +555,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -557,10 +568,88 @@ }, { "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "211.4\n", + "4781.599999999999\n", + "807.8926831881124\n", + "Time taken: 2 s\n" + ] + } + ], + "source": [ + "# print(x_min)\n", + "# print(x_max)\n", + "# # total_f.update_integration_options(draws_per_dim=2000000, mc_sampler=None)\n", + "# total_f.update_integration_options(mc_sampler=lambda dim, num_results,\n", + "# dtype: tf.random_uniform(maxval=1., shape=(num_results, dim), dtype=dtype),\n", + "# draws_per_dim=1000000)\n", + "# # _ = []\n", + "\n", + "# # for i in range(10):\n", + "\n", + "# # inte = total_f.integrate(limits = (x_min, x_max))\n", + "# # inte_fl = zfit.run(inte)\n", + "# # print(inte_fl)\n", + "# # _.append(inte_fl)\n", + "\n", + "# # print(\"mean:\", np.mean(_))\n", + "\n", + "# _ = time.time()\n", + "\n", + "# inte = total_f.integrate(limits = (x_min, x_max))\n", + "# inte_fl = zfit.run(inte)\n", + "# print(inte_fl)\n", + "# print(\"Time taken: {}\".format(display_time(int(time.time() - _))))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Tensorflow scaling" + ] + }, + { + "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ + "# def scaling_func(x):\n", + "\n", + "# funcs = resonance(x, _mass = ztf.constant(jpsi_mass), scale = ztf.constant(jpsi_scale), phase = ztf.constant(jpsi_phase), width = ztf.constant(jpsi_width)) + resonance(x, _mass = ztf.constant(psi2s_mass), scale = ztf.constant(psi2s_scale), phase = ztf.constant(psi2s_phase), width = ztf.constant(psi2s_width))\n", + "\n", + "# vec_f = vec(x, funcs)\n", + "\n", + "# axiv_nr = axiv_nonres(x)\n", + "\n", + "# tot = vec_f + axiv_nr\n", + "\n", + "# return tot\n", + "\n", + "\n", + "# def s_func(x):\n", + " \n", + "# q = ztf.constant(x)\n", + " \n", + "# return zfit.run(scaling_func(q))\n", + " \n", + "\n", + "# print(integrate.quad(s_func, x_min, x_max, limit = 50))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ "# factor_jpsi = pdg[\"NR_auc\"]*pdg[\"jpsi_BR\"]/(pdg[\"NR_BR\"]*pdg[\"jpsi_auc\"])\n", "# factor_jpsi = pdg[\"NR_auc\"]*pdg[\"jpsi_BR\"]/(pdg[\"NR_BR\"]*inte_fl)\n", "# print(np.sqrt(factor_jpsi)*jpsi_scale)\n", @@ -574,7 +663,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -586,10 +675,7 @@ "# def psi2s_res(q):\n", "# return resonance(q, psi2s_m, psi2s_s, psi2s_p, psi2s_w)\n", "\n", - "# def cusp(q):\n", - "# return bifur_gauss(q, cusp_m, sig_L, sig_R, cusp_s)\n", - "\n", - "# funcs = psi2s_res(xq) + jpsi_res(xq) + cusp(xq)\n", + "# funcs = psi2s_res(xq) + jpsi_res(xq)\n", "\n", "# vec_f = vec(xq, funcs)\n", "\n", @@ -600,13 +686,14 @@ "# return tot\n", "\n", "# def t_f(x):\n", - "# probs = zfit.run(_t_f(ztf.constant(x)))\n", + "# _ = np.array(x)\n", + "# probs = zfit.run(_t_f(_))\n", "# return probs" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -615,13 +702,35 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nan nan %\n", + "Time: 1000.0239598751068\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel_launcher.py:3: IntegrationWarning: The maximum number of subdivisions (5) has been achieved.\n", + " If increasing the limit yields no improvement it is advised to analyze \n", + " the integrand in order to determine the difficulties. If the position of a \n", + " local difficulty can be determined (singularity, discontinuity) one will \n", + " probably gain from splitting up the interval and calling the integrator \n", + " on the subranges. Perhaps a special-purpose integrator should be used.\n", + " This is separate from the ipykernel package so we can avoid doing imports until\n" + ] + } + ], "source": [ "# start = time.time()\n", "\n", - "# result, err = integrate.quad(lambda x: t_f(x), x_min, x_max, limit = 50)\n", + "# result, err = integrate.quad(lambda x: t_f(x), x_min, x_max, limit = 5)\n", "# print(result, \"{0:.2f} %\".format(err/result))\n", "# print(\"Time:\", time.time()-start)" ] @@ -631,12 +740,13 @@ "metadata": {}, "source": [ "# Sampling\n", - "## One sample" + "## One sample\n", + "! total_f.sample() always returns the same set !" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -673,7 +783,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -695,7 +805,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -722,37 +832,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 21, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2/1081\n", - "Time taken: 44 s\n", - "Projected time left: 6 h, 38 min\n" - ] - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 21\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mcall\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcalls\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 22\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 23\u001b[1;33m \u001b[0msampler\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mresample\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mn\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mevent_stack\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 24\u001b[0m \u001b[0ms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msampler\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0munstack_x\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 25\u001b[0m \u001b[0msam\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mzfit\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ms\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\data.py\u001b[0m in \u001b[0;36mresample\u001b[1;34m(self, param_values, n)\u001b[0m\n\u001b[0;32m 624\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mRuntimeError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Cannot set a new `n` if not a Tensor-like object was given\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 625\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mn_samples\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mload\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mn\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msession\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msess\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 626\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msess\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msample_holder\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minitializer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 627\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_initial_resampled\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 628\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\u001b[0m in \u001b[0;36mrun\u001b[1;34m(self, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[0;32m 927\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 928\u001b[0m result = self._run(None, fetches, feed_dict, options_ptr,\n\u001b[1;32m--> 929\u001b[1;33m run_metadata_ptr)\n\u001b[0m\u001b[0;32m 930\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mrun_metadata\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 931\u001b[0m \u001b[0mproto_data\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtf_session\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mTF_GetBuffer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrun_metadata_ptr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\u001b[0m in \u001b[0;36m_run\u001b[1;34m(self, handle, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[0;32m 1150\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mfinal_fetches\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mfinal_targets\u001b[0m \u001b[1;32mor\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mhandle\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mfeed_dict_tensor\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1151\u001b[0m results = self._do_run(handle, final_targets, final_fetches,\n\u001b[1;32m-> 1152\u001b[1;33m feed_dict_tensor, options, run_metadata)\n\u001b[0m\u001b[0;32m 1153\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1154\u001b[0m \u001b[0mresults\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\u001b[0m in \u001b[0;36m_do_run\u001b[1;34m(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)\u001b[0m\n\u001b[0;32m 1326\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mhandle\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1327\u001b[0m return self._do_call(_run_fn, feeds, fetches, targets, options,\n\u001b[1;32m-> 1328\u001b[1;33m run_metadata)\n\u001b[0m\u001b[0;32m 1329\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1330\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_do_call\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_prun_fn\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mhandle\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfeeds\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfetches\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\u001b[0m in \u001b[0;36m_do_call\u001b[1;34m(self, fn, *args)\u001b[0m\n\u001b[0;32m 1332\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_do_call\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1333\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1334\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1335\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mOpError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1336\u001b[0m \u001b[0mmessage\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcompat\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mas_text\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmessage\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\u001b[0m in \u001b[0;36m_run_fn\u001b[1;34m(feed_dict, fetch_list, target_list, options, run_metadata)\u001b[0m\n\u001b[0;32m 1317\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_extend_graph\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1318\u001b[0m return self._call_tf_sessionrun(\n\u001b[1;32m-> 1319\u001b[1;33m options, feed_dict, fetch_list, target_list, run_metadata)\n\u001b[0m\u001b[0;32m 1320\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1321\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_prun_fn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mhandle\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfeed_dict\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfetch_list\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\u001b[0m in \u001b[0;36m_call_tf_sessionrun\u001b[1;34m(self, options, feed_dict, fetch_list, target_list, run_metadata)\u001b[0m\n\u001b[0;32m 1405\u001b[0m return tf_session.TF_SessionRun_wrapper(\n\u001b[0;32m 1406\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_session\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0moptions\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfeed_dict\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfetch_list\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtarget_list\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1407\u001b[1;33m run_metadata)\n\u001b[0m\u001b[0;32m 1408\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1409\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_call_tf_sessionprun\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mhandle\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfeed_dict\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfetch_list\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], + "outputs": [], "source": [ "nr_of_toys = 1\n", "nevents = int(pdg[\"number_of_decays\"])\n", @@ -779,7 +861,7 @@ " sampler.resample(n=event_stack)\n", " s = sampler.unstack_x()\n", " sam = zfit.run(s)\n", - " clear_output(wait=True)\n", + "# clear_output(wait=True)\n", "\n", " c = call + 1 \n", " print(\"{0}/{1}\".format(c, calls))\n", @@ -792,7 +874,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -809,9 +891,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time to generate full toy: 0 s\n", + "(5404696,)\n" + ] + } + ], "source": [ "print(\"Time to generate full toy: {} s\".format(int(time.time()-start)))\n", "\n", @@ -826,32 +917,51 @@ "\n", "data2 = zfit.data.Data.from_numpy(array=total_samp[:int(nevents)], obs=obs)\n", "\n", + "data3 = zfit.data.Data.from_numpy(array=total_samp, obs=obs)\n", + "\n", "print(total_samp[:nevents].shape)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "bins = int((x_max-x_min)/7)\n", "\n", "# calcs = zfit.run(total_test_tf(samp))\n", "\n", - "plt.hist(total_samp[:event_stack], bins = bins, range = (x_min,x_max))\n", + "plt.hist(total_samp[:nevents], bins = bins, range = (x_min,x_max), label = 'data')\n", + "plt.plot(test_q, calcs_test*nevents*4.5 , label = 'pdf')\n", "\n", "# plt.plot(sam, calcs, '.')\n", "# plt.plot(test_q, calcs_test)\n", - "plt.ylim(0, 20)\n", - "# plt.xlim(3000, 3750)\n", + "# plt.yscale('log')\n", + "plt.ylim(0, 12000)\n", + "# plt.xlim(3080, 3110)\n", + "\n", + "plt.legend()\n", "\n", "plt.savefig('test2.png')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -881,14 +991,182 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
FCN = 23448660.25141733TOTAL NCALL = 73NCALLS = 73
EDM = nanGOAL EDM = 5e-06\n", + " UP = 0.5
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ValidValid ParamAccurate CovarPosDefMade PosDef
TrueTrueFalseFalseTrue
Hesse FailHasCovAbove EDMReach calllim
FalseTrueFalseFalse
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
+NameValueHesse ErrorMinos Error-Minos Error+Limit-Limit+Fixed?
0jpsi_p-1.5nanNo
1psi2s_p-1.5nanNo
2psi2s_s23.07nanNo
3jpsi_s184.39nanNo
\n", + "
\n",
+       "\n",
+       "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "ename": "RuntimeError", + "evalue": "exception was raised in user function\nUser function arguments:\n jpsi_p = -nan(ind)\n psi2s_p = +nan\n psi2s_s = +nan\n jpsi_s = +nan\nOriginal python exception in user function:\nKeyboardInterrupt: \n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\minimizer_minuit.py\", line 48, in func\n loss_evaluated = self.sess.run(loss_val)\n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\", line 929, in run\n run_metadata_ptr)\n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\", line 1152, in _run\n feed_dict_tensor, options, run_metadata)\n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\", line 1328, in _do_run\n run_metadata)\n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\", line 1334, in _do_call\n return fn(*args)\n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\", line 1319, in _run_fn\n options, feed_dict, fetch_list, target_list, run_metadata)\n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\", line 1407, in _call_tf_sessionrun\n run_metadata)\n", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mRuntimeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mminimizer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mminimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnll\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 7\u001b[1;33m \u001b[0mparam_errors\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0merror\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 8\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 9\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mvar\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merrors\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mparam_errors\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\fitresult.py\u001b[0m in \u001b[0;36merror\u001b[1;34m(self, params, method, error_name, sigma)\u001b[0m\n\u001b[0;32m 227\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 228\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0muncached_params\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 229\u001b[1;33m \u001b[0merror_dict\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_error\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparams\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0muncached_params\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msigma\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msigma\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 230\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_cache_errors\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0merror_name\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0merror_name\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merrors\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0merror_dict\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 231\u001b[0m \u001b[0mall_errors\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mOrderedDict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mparams\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0merror_name\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mp\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\fitresult.py\u001b[0m in \u001b[0;36m_error\u001b[1;34m(self, params, method, sigma)\u001b[0m\n\u001b[0;32m 238\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 239\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"The following method is not a valid, implemented method: {}\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmethod\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 240\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mparams\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msigma\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msigma\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 241\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 242\u001b[0m \u001b[1;31m# def set_error_method(self, method):\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\fitresult.py\u001b[0m in \u001b[0;36m_minos_minuit\u001b[1;34m(result, params, sigma)\u001b[0m\n\u001b[0;32m 46\u001b[0m \"`MinuitMinimizer`.\")\n\u001b[0;32m 47\u001b[0m result = [minimizer._minuit_minimizer.minos(var=p.name, sigma=sigma)\n\u001b[1;32m---> 48\u001b[1;33m for p in params][-1] # returns every var\n\u001b[0m\u001b[0;32m 49\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mOrderedDict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mp\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 50\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\fitresult.py\u001b[0m in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 46\u001b[0m \"`MinuitMinimizer`.\")\n\u001b[0;32m 47\u001b[0m result = [minimizer._minuit_minimizer.minos(var=p.name, sigma=sigma)\n\u001b[1;32m---> 48\u001b[1;33m for p in params][-1] # returns every var\n\u001b[0m\u001b[0;32m 49\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mOrderedDict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mp\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 50\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32miminuit\\_libiminuit.pyx\u001b[0m in \u001b[0;36miminuit._libiminuit.Minuit.minos\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mRuntimeError\u001b[0m: exception was raised in user function\nUser function arguments:\n jpsi_p = -nan(ind)\n psi2s_p = +nan\n psi2s_s = +nan\n jpsi_s = +nan\nOriginal python exception in user function:\nKeyboardInterrupt: \n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\minimizer_minuit.py\", line 48, in func\n loss_evaluated = self.sess.run(loss_val)\n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\", line 929, in run\n run_metadata_ptr)\n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\", line 1152, in _run\n feed_dict_tensor, options, run_metadata)\n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\", line 1328, in _do_run\n run_metadata)\n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\", line 1334, in _do_call\n return fn(*args)\n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\", line 1319, in _run_fn\n options, feed_dict, fetch_list, target_list, run_metadata)\n File \"c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\client\\session.py\", line 1407, in _call_tf_sessionrun\n run_metadata)\n" + ] + } + ], "source": [ - "nll = zfit.loss.UnbinnedNLL(model=total_f, data=data2, fit_range = (x_min, x_max))\n", + "nll = zfit.loss.UnbinnedNLL(model=total_f, data=data3, fit_range = (x_min, x_max))\n", "\n", "minimizer = zfit.minimize.MinuitMinimizer()\n", - "# minimizer._use_tfgrad = False\n", + "minimizer._use_tfgrad = False\n", "result = minimizer.minimize(nll)\n", "\n", "param_errors = result.error()\n", @@ -905,7 +1183,7 @@ "metadata": {}, "outputs": [], "source": [ - "(-3.14+2*np.pi)/np.pi" + "(-7.95933+2*np.pi)/np.pi+np.pi" ] }, { @@ -939,7 +1217,7 @@ "metadata": {}, "outputs": [], "source": [ - "probs = total_f.pdf(test_q)\n", + "# probs = total_f.pdf(test_q)\n", "\n", "calcs_test = zfit.run(probs)\n", "res_y = zfit.run(jpsi_res(test_q))" @@ -956,7 +1234,7 @@ "plt.plot(test_q, calcs_test, label = 'pdf')\n", "# plt.plot(test_q, res_y, label = 'res')\n", "plt.legend()\n", - "plt.ylim(0.0, 4e-4)\n", + "plt.ylim(0.0, 5e-4)\n", "# plt.yscale('log')\n", "# plt.xlim(3080, 3110)\n", "plt.savefig('test3.png')\n", @@ -969,6 +1247,13 @@ "metadata": {}, "outputs": [], "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/Untitled.ipynb b/Untitled.ipynb new file mode 100644 index 0000000..720b3d9 --- /dev/null +++ b/Untitled.ipynb @@ -0,0 +1,282 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Numpy backup for scaling in the beginning" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\util\\execution.py:53: UserWarning: Not running on Linux. Determining available cpus for thread can failand be overestimated. Workaround (only if too many cpus are used):`zfit.run.set_n_cpu(your_cpu_number)`\n", + " warnings.warn(\"Not running on Linux. Determining available cpus for thread can fail\"\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.\n", + "For more information, please see:\n", + " * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md\n", + " * https://github.com/tensorflow/addons\n", + "If you depend on functionality not listed there, please file an issue.\n", + "\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from pdg_const import pdg\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import pickle as pkl\n", + "import sys\n", + "import time\n", + "from helperfunctions import display_time, prepare_plot\n", + "import cmath as c\n", + "import scipy.integrate as integrate\n", + "from scipy.optimize import fminbound\n", + "from array import array as arr\n", + "import collections\n", + "from itertools import compress\n", + "import tensorflow as tf\n", + "import zfit\n", + "from zfit import ztf\n", + "from IPython.display import clear_output\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def formfactor( q2, subscript): #returns real value\n", + " #check if subscript is viable\n", + "\n", + " if subscript != \"0\" and subscript != \"+\" and subscript != \"T\":\n", + " raise ValueError('Wrong subscript entered, choose either 0, + or T')\n", + "\n", + " #get constants\n", + "\n", + " mK = pdg['Ks_M']\n", + " mbstar0 = pdg[\"mbstar0\"]\n", + " mbstar = pdg[\"mbstar\"]\n", + " b0 = pdg[\"b0\"]\n", + " bplus = pdg[\"bplus\"]\n", + " bT = pdg[\"bT\"]\n", + "\n", + " mmu = pdg['muon_M']\n", + " mb = pdg['bquark_M']\n", + " ms = pdg['squark_M']\n", + " mB = pdg['Bplus_M']\n", + "\n", + " #N comes from derivation in paper\n", + "\n", + " N = 3\n", + "\n", + " #some helperfunctions\n", + "\n", + " tpos = (mB - mK)**2\n", + " tzero = (mB + mK)*(ztf.sqrt(mB)-ztf.sqrt(mK))**2\n", + "\n", + " z_oben = ztf.sqrt(tpos - q2) - ztf.sqrt(tpos - tzero)\n", + " z_unten = ztf.sqrt(tpos - q2) + ztf.sqrt(tpos - tzero)\n", + " z = tf.divide(z_oben, z_unten)\n", + "\n", + " #calculate f0\n", + "\n", + " if subscript == \"0\":\n", + " prefactor = 1/(1 - q2/(mbstar0**2))\n", + " _sum = 0\n", + "\n", + " for i in range(N):\n", + " _sum += b0[i]*(tf.pow(z,i))\n", + "\n", + " return tf.complex(prefactor * _sum, ztf.constant(0.0))\n", + "\n", + " #calculate f+ or fT\n", + "\n", + " else:\n", + " prefactor = 1/(1 - q2/(mbstar**2))\n", + " _sum = 0\n", + "\n", + " if subscript == \"T\":\n", + " b = bT\n", + " else:\n", + " b = bplus\n", + "\n", + " for i in range(N):\n", + " _sum += b[i] * (tf.pow(z, i) - ((-1)**(i-N)) * (i/N) * tf.pow(z, N))\n", + "\n", + " return tf.complex(prefactor * _sum, ztf.constant(0.0))\n", + "\n", + "def resonance(q, _mass, width, phase, scale):\n", + "\n", + " q2 = tf.pow(q, 2)\n", + "\n", + " mmu = ztf.constant(pdg['muon_M'])\n", + "\n", + " p = 0.5 * ztf.sqrt(q2 - 4*(mmu**2))\n", + "\n", + " p0 = 0.5 * ztf.sqrt(_mass**2 - 4*mmu**2)\n", + "\n", + " gamma_j = tf.divide(p, q2) * _mass * width / p0\n", + "\n", + " #Calculate the resonance\n", + "\n", + " _top = tf.complex(_mass * width, ztf.constant(0.0))\n", + "\n", + " _bottom = tf.complex(_mass**2 - q2, -_mass*gamma_j)\n", + "\n", + " com = _top/_bottom\n", + "\n", + " #Rotate by the phase\n", + "\n", + " r = ztf.to_complex(scale*tf.abs(com))\n", + "\n", + " _phase = tf.angle(com)\n", + "\n", + " _phase += phase\n", + "\n", + " com = r * tf.exp(tf.complex(ztf.constant(0.0), _phase))\n", + "\n", + " return com\n", + "\n", + "def bifur_gauss(q, mean, sigma_L, sigma_R, scale):\n", + "\n", + " _exp = tf.where(q < mean, ztf.exp(- tf.pow((q-mean),2) / (2 * sigma_L**2)), ztf.exp(- tf.pow((q-mean),2) / (2 * sigma_R**2)))\n", + "\n", + " #Scale so the total area under curve is 1 and the top of the cusp is continuous\n", + "\n", + " dgamma = scale*_exp/(ztf.sqrt(2*np.pi))*2*(sigma_L*sigma_R)/(sigma_L+sigma_R)\n", + "\n", + " com = ztf.complex(dgamma, ztf.constant(0.0))\n", + "\n", + " return com\n", + "\n", + "def axiv_nonres(q):\n", + "\n", + " GF = ztf.constant(pdg['GF'])\n", + " alpha_ew = ztf.constant(pdg['alpha_ew'])\n", + " Vtb = ztf.constant(pdg['Vtb'])\n", + " Vts = ztf.constant(pdg['Vts'])\n", + " C10eff = ztf.constant(pdg['C10eff'])\n", + "\n", + " mmu = ztf.constant(pdg['muon_M'])\n", + " mb = ztf.constant(pdg['bquark_M'])\n", + " ms = ztf.constant(pdg['squark_M'])\n", + " mK = ztf.constant(pdg['Ks_M'])\n", + " mB = ztf.constant(pdg['Bplus_M'])\n", + "\n", + " q2 = tf.pow(q, 2)\n", + "\n", + " #Some helperfunctions\n", + "\n", + " beta = ztf.sqrt(tf.abs(1. - 4. * mmu**2. / q2))\n", + "\n", + " kabs = ztf.sqrt(mB**2. +tf.pow(q2, 2)/mB**2. + mK**4./mB**2. - 2. * (mB**2. * mK**2. + mK**2. * q2 + mB**2. * q2) / mB**2.)\n", + "\n", + " #prefactor in front of whole bracket\n", + "\n", + " prefactor1 = GF**2. *alpha_ew**2. * (tf.abs(Vtb*Vts))**2. * kabs * beta / (128. * np.pi**5.)\n", + "\n", + " #left term in bracket\n", + "\n", + " bracket_left = 2./3. * kabs**2. * beta**2. *tf.abs(tf.complex(C10eff, ztf.constant(0.0))*formfactor(q2, \"+\"))**2.\n", + "\n", + " #middle term in bracket\n", + "\n", + " _top = 4. * mmu**2. * (mB**2. - mK**2.) * (mB**2. - mK**2.)\n", + "\n", + " _under = q2 * mB**2.\n", + "\n", + " bracket_middle = _top/_under *tf.pow(tf.abs(tf.complex(C10eff, ztf.constant(0.0)) * formfactor(q2, \"0\")), 2)\n", + "\n", + " #Note sqrt(q2) comes from derivation as we use q2 and plot q\n", + "\n", + " return prefactor1 * (bracket_left + bracket_middle) * 2 *ztf.sqrt(q2)\n", + "\n", + "def vec(q, funcs):\n", + " \n", + " q2 = tf.pow(q, 2)\n", + "\n", + " GF = ztf.constant(pdg['GF'])\n", + " alpha_ew = ztf.constant(pdg['alpha_ew'])\n", + " Vtb = ztf.constant(pdg['Vtb'])\n", + " Vts = ztf.constant(pdg['Vts'])\n", + " C7eff = ztf.constant(pdg['C7eff'])\n", + "\n", + " mmu = ztf.constant(pdg['muon_M'])\n", + " mb = ztf.constant(pdg['bquark_M'])\n", + " ms = ztf.constant(pdg['squark_M'])\n", + " mK = ztf.constant(pdg['Ks_M'])\n", + " mB = ztf.constant(pdg['Bplus_M'])\n", + "\n", + " #Some helperfunctions\n", + "\n", + " beta = ztf.sqrt(tf.abs(1. - 4. * mmu**2. / q2))\n", + "\n", + " kabs = ztf.sqrt(mB**2. + tf.pow(q2, 2)/mB**2. + mK**4./mB**2. - 2 * (mB**2 * mK**2 + mK**2 * q2 + mB**2 * q2) / mB**2)\n", + "\n", + " #prefactor in front of whole bracket\n", + "\n", + " prefactor1 = GF**2. *alpha_ew**2. * (tf.abs(Vtb*Vts))**2 * kabs * beta / (128. * np.pi**5.)\n", + "\n", + " #right term in bracket\n", + "\n", + " prefactor2 = kabs**2 * (1. - 1./3. * beta**2)\n", + "\n", + " abs_bracket = tf.abs(c9eff(q, funcs) * formfactor(q2, \"+\") + tf.complex(2.0 * C7eff * (mb + ms)/(mB + mK), ztf.constant(0.0)) * formfactor(q2, \"T\"))**2\n", + "\n", + " bracket_right = prefactor2 * abs_bracket\n", + "\n", + " #Note sqrt(q2) comes from derivation as we use q2 and plot q\n", + "\n", + " return prefactor1 * bracket_right * 2 * ztf.sqrt(q2)\n", + "\n", + "def c9eff(q, funcs):\n", + "\n", + " C9eff_nr = tf.complex(ztf.constant(pdg['C9eff']), ztf.constant(0.0))\n", + "\n", + " c9 = C9eff_nr\n", + "\n", + " c9 = c9 + funcs\n", + "\n", + " return c9" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/__pycache__/pdg_const.cpython-37.pyc b/__pycache__/pdg_const.cpython-37.pyc index cb5c59e..09392b0 100644 --- a/__pycache__/pdg_const.cpython-37.pyc +++ b/__pycache__/pdg_const.cpython-37.pyc Binary files differ diff --git a/constants.nb b/constants.nb new file mode 100644 index 0000000..f35e134 --- /dev/null +++ b/constants.nb @@ -0,0 +1,307 @@ +(* Content-type: application/vnd.wolfram.mathematica *) + +(*** Wolfram Notebook File ***) +(* http://www.wolfram.com/nb *) + +(* CreatedBy='Mathematica 12.0' *) + +(*CacheID: 234*) +(* Internal cache information: +NotebookFileLineBreakTest +NotebookFileLineBreakTest +NotebookDataPosition[ 158, 7] +NotebookDataLength[ 10273, 299] +NotebookOptionsPosition[ 9765, 284] +NotebookOutlinePosition[ 10108, 299] +CellTagsIndexPosition[ 10065, 296] +WindowFrame->Normal*) + +(* Beginning of Notebook Content *) +Notebook[{ +Cell[BoxData[{ + RowBox[{"mbstar", "=", "5415.4"}], "\[IndentingNewLine]", + RowBox[{"mbstar0", "=", "5711.0"}], "\[IndentingNewLine]", + RowBox[{"B0M", "=", "5279.5"}], "\[IndentingNewLine]", + RowBox[{"BsM", "=", "5366.7"}], "\[IndentingNewLine]", + RowBox[{"BplusM", "=", "5279.3"}], "\[IndentingNewLine]", + RowBox[{"LbM", "=", "5619.4"}], "\[IndentingNewLine]", + RowBox[{"D0M", "=", "1864.8"}], "\[IndentingNewLine]", + RowBox[{"DstM", "=", "2010"}], "\[IndentingNewLine]", + RowBox[{"piM", "=", "139.6"}], "\[IndentingNewLine]", + RowBox[{"JpsiM", "=", "3096.9"}], "\[IndentingNewLine]", + RowBox[{"Psi2sM", "=", "3685.6"}], "\[IndentingNewLine]", + RowBox[{"kaonM", "=", "493.7"}], "\[IndentingNewLine]", + RowBox[{"KsM", "=", "497.6"}], "\[IndentingNewLine]", + RowBox[{"phiM", "=", "1019.5"}], "\[IndentingNewLine]", + RowBox[{"rhoM", "=", "775.26"}], "\[IndentingNewLine]", + RowBox[{"rhowidth", "=", "149.1"}], "\[IndentingNewLine]", + RowBox[{"omegaM", "=", "782.65"}], "\[IndentingNewLine]", + RowBox[{"omegawidth", "=", " ", "8.49"}], "\[IndentingNewLine]", + RowBox[{ + RowBox[{"muonM", " ", "=", " ", "105.7"}], "\n"}], "\n", + RowBox[{"squarkM", " ", "=", " ", "95.0"}], "\n", + RowBox[{"bquarkM", " ", "=", " ", "4180.0"}], "\n", + RowBox[{ + RowBox[{"cquarkM", " ", "=", " ", "1275.0"}], "\n"}], "\n", + RowBox[{ + RowBox[{"Bplustau", " ", "=", " ", + RowBox[{"1.638", "*", + RowBox[{"10", "^", + RowBox[{"(", + RowBox[{"-", "12"}], ")"}]}]}]}], "\n"}], "\n", + RowBox[{ + RowBox[{"C7eff", " ", "=", " ", + RowBox[{"-", "0.306"}]}], "\n"}], "\n", + RowBox[{"C9eff", " ", "=", " ", "4.211"}], "\n", + RowBox[{ + RowBox[{"C10eff", " ", "=", " ", + RowBox[{"-", "4.103"}]}], "\n"}], "\n", + RowBox[{"GF", " ", "=", " ", + RowBox[{"1.1663787", "*", + RowBox[{"10", "^", + RowBox[{"(", + RowBox[{"-", "5"}], ")"}]}]}]}], "\n", + RowBox[{"alphaew", " ", "=", " ", + RowBox[{"1.0", "/", "137.0"}]}], "\n", + RowBox[{"Vts", " ", "=", " ", "0.0394"}], "\n", + RowBox[{"Vtb", " ", "=", " ", "1.019"}], "\n", + RowBox[{ + RowBox[{"numberofdecays", "=", " ", "5404696"}], "\n"}], "\n", + RowBox[{ + RowBox[{"b01", " ", "=", " ", "0.292"}], " "}], "\[IndentingNewLine]", + RowBox[{"b02", " ", "=", " ", "0.281"}], "\[IndentingNewLine]", + RowBox[{"b03", " ", "=", " ", "0.150"}], "\n", + RowBox[{"bplus1", " ", "=", " ", "0.466"}], "\[IndentingNewLine]", + RowBox[{"bplus2", "=", + RowBox[{"-", "0.885"}]}], "\[IndentingNewLine]", + RowBox[{"bplus3", "=", + RowBox[{"-", "0.213"}]}], "\n", + RowBox[{ + RowBox[{"bT1", " ", "=", " ", "0.460"}], " "}], "\[IndentingNewLine]", + RowBox[{ + RowBox[{"bT2", "=", + RowBox[{"-", "1.089"}]}], " "}], "\[IndentingNewLine]", + RowBox[{ + RowBox[{"bT2", "=", + RowBox[{"-", "1.114"}]}], "\n"}], "\n", + RowBox[{"NRBR", "=", " ", + RowBox[{"4.37", "*", + RowBox[{"10", "^", + RowBox[{"(", + RowBox[{"-", "7"}], ")"}]}]}]}], "\n", + RowBox[{ + RowBox[{"NRauc", "=", " ", "0.00133"}], "\[IndentingNewLine]"}], "\n", + RowBox[{"jpsis", "=", " ", "3096.0"}], "\[IndentingNewLine]", + RowBox[{ + RowBox[{"jpsiw", "=", "0.09"}], " "}], "\[IndentingNewLine]", + RowBox[{"jpsip", "=", + RowBox[{"-", "1.5"}]}], "\[IndentingNewLine]", + RowBox[{"jpsia", "=", "184.39"}], "\n", + RowBox[{"jpsiBR", "=", " ", + RowBox[{"6.02", "*", + RowBox[{"10", "^", + RowBox[{"(", + RowBox[{"-", "5"}], ")"}]}]}]}], "\n", + RowBox[{ + RowBox[{"jpsiauc", "=", " ", "0.2126825758464027"}], "\n"}], "\n", + RowBox[{"psi2sm", "=", " ", "3686.0"}], "\[IndentingNewLine]", + RowBox[{"psi2sw", "=", + RowBox[{"-", "0.3"}]}], "\[IndentingNewLine]", + RowBox[{"psi2sp", " ", "=", " ", + RowBox[{"-", "1.5"}]}], "\[IndentingNewLine]", + RowBox[{"psi2sa", " ", "=", " ", "23.07"}], "\n", + RowBox[{"psi2sBR", "=", " ", + RowBox[{"4.97", "*", + RowBox[{"10", "^", + RowBox[{"(", + RowBox[{"-", "6"}], ")"}]}]}]}], "\n", + RowBox[{"psi2sauc", "=", " ", + RowBox[{"2.802257483178487", "*", + RowBox[{"10", "^", + RowBox[{"(", + RowBox[{"-", "10"}], ")"}]}]}]}]}], "Input", + CellChangeTimes->{{3.768042511440446*^9, 3.7680425886548386`*^9}, { + 3.768042655722806*^9, 3.7680427829496317`*^9}, {3.768043469101739*^9, + 3.7680434767802153`*^9}, {3.768043520665967*^9, 3.7680435461338577`*^9}, { + 3.7680438318670406`*^9, 3.7680438326758633`*^9}}, + CellLabel-> + "In[297]:=",ExpressionUUID->"037a651f-7204-4dd6-865b-a90153e54791"], + +Cell[BoxData[{ + RowBox[{ + RowBox[{"N", "=", "3"}], "\n"}], "\[IndentingNewLine]", + RowBox[{"mB", " ", "=", " ", "BplusM"}], "\[IndentingNewLine]", + RowBox[{"mK", " ", "=", " ", "kaonM"}], "\[IndentingNewLine]", + RowBox[{"tpos", "=", + RowBox[{ + RowBox[{"(", + RowBox[{"mB", "-", "mK"}], ")"}], "**", "2"}]}], "\[IndentingNewLine]", + RowBox[{"tzero", "=", + RowBox[{ + RowBox[{"(", + RowBox[{"mB", "+", "mK"}], ")"}], "*", + RowBox[{ + RowBox[{"(", + RowBox[{ + RowBox[{"sqrt", + RowBox[{"(", "mB", ")"}]}], "-", + RowBox[{"sqrt", + RowBox[{"(", "mK", ")"}]}]}], ")"}], "**", + "2"}]}]}], "\[IndentingNewLine]", + RowBox[{ + RowBox[{"f0", "[", "x_", "]"}], ":=", "\[IndentingNewLine]", "\n", "\n", + "\n", "\[IndentingNewLine]", + RowBox[{"zoben", "=", + RowBox[{ + RowBox[{ + RowBox[{"ztf", ".", "sqrt"}], + RowBox[{"(", + RowBox[{"tpos", "-", + RowBox[{"x", "**", "2"}]}], ")"}]}], "-", + RowBox[{ + RowBox[{"ztf", ".", "sqrt"}], + RowBox[{"(", + RowBox[{"tpos", "-", "tzero"}], ")"}]}]}]}]}], "\n", + RowBox[{"zunten", "=", + RowBox[{ + RowBox[{ + RowBox[{"ztf", ".", "sqrt"}], + RowBox[{"(", + RowBox[{"tpos", "-", + RowBox[{"x", "**", "2"}]}], ")"}]}], "+", + RowBox[{ + RowBox[{"ztf", ".", "sqrt"}], + RowBox[{"(", + RowBox[{"tpos", "-", "tzero"}], ")"}]}]}]}], "\n", + RowBox[{ + RowBox[{"z", "=", + RowBox[{"zoben", "/", "zunten"}]}], "\n"}], "\[IndentingNewLine]", + RowBox[{ + RowBox[{"#calculate", " ", "f0"}], "\n"}], "\[IndentingNewLine]", + RowBox[{ + RowBox[{ + RowBox[{ + RowBox[{"if", " ", "subscript"}], "\[Equal]", "\"\<0\>\""}], ":", + "prefactor"}], "=", + RowBox[{"1", "/", + RowBox[{"(", + RowBox[{"1", "-", + RowBox[{ + RowBox[{"x", "**", "2"}], "/", + RowBox[{"(", + RowBox[{"mbstar0", "**", "2"}], ")"}]}]}], ")"}]}]}], "\n", + RowBox[{ + RowBox[{"_sum", "=", "0"}], "\[IndentingNewLine]"}], "\n", + RowBox[{ + RowBox[{ + RowBox[{ + RowBox[{"for", " ", "i", " ", "in", " ", "range", + RowBox[{"(", "N", ")"}]}], ":", "_sum"}], "+=", + RowBox[{ + RowBox[{"b0", "[", "i", "]"}], "*", + RowBox[{"(", + RowBox[{ + RowBox[{"tf", ".", "pow"}], + RowBox[{"(", + RowBox[{"z", ",", "i"}], ")"}]}], ")"}]}]}], + "\[IndentingNewLine]"}], "\n", + RowBox[{ + RowBox[{"return", " ", + RowBox[{"tf", ".", "complex"}], + RowBox[{"(", + RowBox[{ + RowBox[{"prefactor", "*", "_sum"}], ",", + RowBox[{ + RowBox[{"ztf", ".", "constant"}], + RowBox[{"(", "0.0", ")"}]}]}], ")"}]}], "\[IndentingNewLine]"}], "\n", + RowBox[{ + RowBox[{ + RowBox[{"#calculate", " ", "f"}], "+", + RowBox[{"or", " ", "fT"}]}], "\[IndentingNewLine]"}], "\n", + RowBox[{ + RowBox[{"else", ":", "prefactor"}], "=", + RowBox[{"1", "/", + RowBox[{"(", + RowBox[{"1", "-", + RowBox[{"q2", "/", + RowBox[{"(", + RowBox[{"mbstar", "**", "2"}], ")"}]}]}], ")"}]}]}], "\n", + RowBox[{ + RowBox[{"_sum", "=", "0"}], "\[IndentingNewLine]"}], "\n", + RowBox[{ + RowBox[{ + RowBox[{ + RowBox[{"if", " ", "subscript"}], "\[Equal]", "\"\\""}], ":", "b"}], + "=", "bT"}], "\n", + RowBox[{ + RowBox[{ + RowBox[{"else", ":", "b"}], "=", "bplus"}], "\[IndentingNewLine]"}], "\n", + RowBox[{ + RowBox[{ + RowBox[{ + RowBox[{"for", " ", "i", " ", "in", " ", "range", + RowBox[{"(", "N", ")"}]}], ":", "_sum"}], "+=", + RowBox[{ + RowBox[{"b", "[", "i", "]"}], "*", + RowBox[{"(", + RowBox[{ + RowBox[{ + RowBox[{"tf", ".", "pow"}], + RowBox[{"(", + RowBox[{"z", ",", "i"}], ")"}]}], "-", + RowBox[{ + RowBox[{"(", + RowBox[{ + RowBox[{"(", + RowBox[{"-", "1"}], ")"}], "**", + RowBox[{"(", + RowBox[{"i", "-", "N"}], ")"}]}], ")"}], "*", + RowBox[{"(", + RowBox[{"i", "/", "N"}], ")"}], "*", + RowBox[{"tf", ".", "pow"}], + RowBox[{"(", + RowBox[{"z", ",", "N"}], ")"}]}]}], ")"}]}]}], + "\[IndentingNewLine]"}], "\n", + RowBox[{"return", " ", + RowBox[{"tf", ".", "complex"}], + RowBox[{"(", + RowBox[{ + RowBox[{"prefactor", "*", "_sum"}], ",", + RowBox[{ + RowBox[{"ztf", ".", "constant"}], + RowBox[{"(", "0.0", ")"}]}]}], ")"}]}]}], "Input", + CellChangeTimes->{{3.768043177248828*^9, 3.768043177259832*^9}, { + 3.768043906799721*^9, 3.768043999680481*^9}, {3.768044045580817*^9, + 3.7680441462058163`*^9}},ExpressionUUID->"8d2adb61-5946-4313-bd6e-\ +7ea714537656"], + +Cell[BoxData[""], "Input", + CellChangeTimes->{{3.768043080378785*^9, 3.768043114235282*^9}, { + 3.768043179283389*^9, 3.7680431802817307`*^9}, {3.768043605357559*^9, + 3.7680436055181303`*^9}, + 3.7680437130526094`*^9},ExpressionUUID->"44f1aff7-c138-4f4d-86fa-\ +5ca7df87f6ff"] +}, +WindowSize->{760, 697}, +WindowMargins->{{Automatic, 355}, {-7, Automatic}}, +FrontEndVersion->"12.0 for Microsoft Windows (64-bit) (April 8, 2019)", +StyleDefinitions->"Default.nb" +] +(* End of Notebook Content *) + +(* Internal cache information *) +(*CellTagsOutline +CellTagsIndex->{} +*) +(*CellTagsIndex +CellTagsIndex->{} +*) +(*NotebookFileOutline +Notebook[{ +Cell[558, 20, 4410, 107, 1207, "Input",ExpressionUUID->"037a651f-7204-4dd6-865b-a90153e54791"], +Cell[4971, 129, 4506, 146, 675, InheritFromParent,ExpressionUUID->"8d2adb61-5946-4313-bd6e-7ea714537656"], +Cell[9480, 277, 281, 5, 28, InheritFromParent,ExpressionUUID->"44f1aff7-c138-4f4d-86fa-5ca7df87f6ff"] +} +] +*) + diff --git a/np-test.png b/np-test.png new file mode 100644 index 0000000..2523832 --- /dev/null +++ b/np-test.png Binary files differ diff --git a/numpy_backup_for_scaling.ipynb b/numpy_backup_for_scaling.ipynb new file mode 100644 index 0000000..76cad46 --- /dev/null +++ b/numpy_backup_for_scaling.ipynb @@ -0,0 +1,401 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Numpy backup for scaling in the beginning" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\util\\execution.py:53: UserWarning: Not running on Linux. Determining available cpus for thread can failand be overestimated. Workaround (only if too many cpus are used):`zfit.run.set_n_cpu(your_cpu_number)`\n", + " warnings.warn(\"Not running on Linux. Determining available cpus for thread can fail\"\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.\n", + "For more information, please see:\n", + " * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md\n", + " * https://github.com/tensorflow/addons\n", + "If you depend on functionality not listed there, please file an issue.\n", + "\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from pdg_const import pdg\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import pickle as pkl\n", + "import sys\n", + "import time\n", + "from helperfunctions import display_time, prepare_plot\n", + "import cmath as c\n", + "import scipy.integrate as integrate\n", + "from scipy.optimize import fminbound\n", + "from array import array as arr\n", + "import collections\n", + "from itertools import compress\n", + "import tensorflow as tf\n", + "import zfit\n", + "from zfit import ztf\n", + "from IPython.display import clear_output\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def formfactor( q2, subscript): #returns real value\n", + " #check if subscript is viable\n", + "\n", + " if subscript != \"0\" and subscript != \"+\" and subscript != \"T\":\n", + " raise ValueError('Wrong subscript entered, choose either 0, + or T')\n", + "\n", + " #get constants\n", + "\n", + " mK = pdg['Ks_M']\n", + " mbstar0 = pdg[\"mbstar0\"]\n", + " mbstar = pdg[\"mbstar\"]\n", + " b0 = pdg[\"b0\"]\n", + " bplus = pdg[\"bplus\"]\n", + " bT = pdg[\"bT\"]\n", + "\n", + " mmu = pdg['muon_M']\n", + " mb = pdg['bquark_M']\n", + " ms = pdg['squark_M']\n", + " mB = pdg['Bplus_M']\n", + "\n", + " #N comes from derivation in paper\n", + "\n", + " N = 3\n", + "\n", + " #some helperfunctions\n", + "\n", + " tpos = (mB - mK)**2\n", + " tzero = (mB + mK)*(np.sqrt(mB)-np.sqrt(mK))**2\n", + "\n", + " z_oben = np.sqrt(tpos - q2) - np.sqrt(tpos - tzero)\n", + " z_unten = np.sqrt(tpos - q2) + np.sqrt(tpos - tzero)\n", + " z = z_oben/ z_unten\n", + "\n", + " #calculate f0\n", + "\n", + " if subscript == \"0\":\n", + " prefactor = 1/(1 - q2/(mbstar0**2))\n", + " _sum = 0\n", + "\n", + " for i in range(N):\n", + " _sum += b0[i]*(np.power(z,i))\n", + "\n", + " return prefactor * _sum\n", + "\n", + " #calculate f+ or fT\n", + "\n", + " else:\n", + " prefactor = 1/(1 - q2/(mbstar**2))\n", + " _sum = 0\n", + "\n", + " if subscript == \"T\":\n", + " b = bT\n", + " else:\n", + " b = bplus\n", + "\n", + " for i in range(N):\n", + " _sum += b[i] * (np.power(z, i) - ((-1)**(i-N)) * (i/N) * np.power(z, N))\n", + "\n", + " return prefactor * _sum\n", + "\n", + "def resonance(q, _mass, width, phase, scale):\n", + "\n", + " q2 = np.power(q, 2)\n", + "\n", + " mmu = pdg['muon_M']\n", + "\n", + " p = 0.5 * np.sqrt(q2 - 4*(mmu**2))\n", + "\n", + " p0 = 0.5 * np.sqrt(_mass**2 - 4*mmu**2)\n", + "\n", + " gamma_j = p/ q2 * _mass * width / p0\n", + "\n", + " #Calculate the resonance\n", + "\n", + " _top = _mass * width\n", + "\n", + " _bottom = np.vectorize(complex)(_mass**2 - q2, -_mass*gamma_j)\n", + "\n", + " com = _top/_bottom\n", + "\n", + " #Rotate by the phase\n", + "\n", + " r = scale*np.abs(com)\n", + "\n", + " _phase = np.angle(com)\n", + "\n", + " _phase += phase\n", + "\n", + " com = r * np.exp(np.vectorize(complex)(0.0 , _phase))\n", + "\n", + " return com\n", + "\n", + "\n", + "def axiv_nonres(q):\n", + "\n", + " GF = pdg['GF']\n", + " alpha_ew = pdg['alpha_ew']\n", + " Vtb = pdg['Vtb']\n", + " Vts = pdg['Vts']\n", + " C10eff = pdg['C10eff']\n", + "\n", + " mmu = pdg['muon_M']\n", + " mb = pdg['bquark_M']\n", + " ms = pdg['squark_M']\n", + " mK = pdg['Ks_M']\n", + " mB = pdg['Bplus_M']\n", + "\n", + " q2 = np.power(q, 2)\n", + "\n", + " #Some helperfunctions\n", + "\n", + " beta = np.sqrt(np.abs(1. - 4. * mmu**2. / q2))\n", + "\n", + " kabs = np.sqrt(mB**2. +np.power(q2, 2)/mB**2. + mK**4./mB**2. - 2. * (mB**2. * mK**2. + mK**2. * q2 + mB**2. * q2) / mB**2.)\n", + "\n", + " #prefactor in front of whole bracket\n", + "\n", + " prefactor1 = GF**2. *alpha_ew**2. * (np.abs(Vtb*Vts))**2. * kabs * beta / (128. * np.pi**5.)\n", + "\n", + " #left term in bracket\n", + "\n", + " bracket_left = 2./3. * kabs**2. * beta**2. *np.abs(np.vectorize(complex)(C10eff, 0.0)*formfactor(q2, \"+\"))**2.\n", + "\n", + " #middle term in bracket\n", + "\n", + " _top = 4. * mmu**2. * (mB**2. - mK**2.) * (mB**2. - mK**2.)\n", + "\n", + " _under = q2 * mB**2.\n", + "\n", + " bracket_middle = _top/_under *np.power(np.abs(np.vectorize(complex)(C10eff, 0.0) * formfactor(q2, \"0\")), 2)\n", + "\n", + " #Note sqrt(q2) comes from derivation as we use q2 and plot q\n", + "\n", + " return prefactor1 * (bracket_left + bracket_middle) * 2 *np.sqrt(q2)\n", + "\n", + "def vec(q, funcs):\n", + " \n", + " q2 = np.power(q, 2)\n", + "\n", + " GF = pdg['GF']\n", + " alpha_ew = pdg['alpha_ew']\n", + " Vtb = pdg['Vtb']\n", + " Vts = pdg['Vts']\n", + " C7eff = pdg['C7eff']\n", + "\n", + " mmu = pdg['muon_M']\n", + " mb = pdg['bquark_M']\n", + " ms = pdg['squark_M']\n", + " mK = pdg['Ks_M']\n", + " mB = pdg['Bplus_M']\n", + "\n", + " #Some helperfunctions\n", + "\n", + " beta = np.sqrt(np.abs(1. - 4. * mmu**2. / q2))\n", + "\n", + " kabs = np.sqrt(mB**2. + np.power(q2, 2)/mB**2. + mK**4./mB**2. - 2 * (mB**2 * mK**2 + mK**2 * q2 + mB**2 * q2) / mB**2)\n", + "\n", + " #prefactor in front of whole bracket\n", + "\n", + " prefactor1 = GF**2. *alpha_ew**2. * (np.abs(Vtb*Vts))**2 * kabs * beta / (128. * np.pi**5.)\n", + "\n", + " #right term in bracket\n", + "\n", + " prefactor2 = kabs**2 * (1. - 1./3. * beta**2)\n", + "\n", + " abs_bracket = np.abs(c9eff(q, funcs) * formfactor(q2, \"+\") + np.vectorize(complex)(2.0 * C7eff * (mb + ms)/(mB + mK), 0.0) * formfactor(q2, \"T\"))**2\n", + "\n", + " bracket_right = prefactor2 * abs_bracket\n", + "\n", + " #Note sqrt(q2) comes from derivation as we use q2 and plot q\n", + "\n", + " return prefactor1 * bracket_right * 2 * np.sqrt(q2)\n", + "\n", + "def c9eff(q, funcs):\n", + "\n", + " C9eff_nr = np.vectorize(complex)(pdg['C9eff'], 0.0)\n", + "\n", + " c9 = C9eff_nr\n", + "\n", + " c9 = c9 + funcs\n", + "\n", + " return c9" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "jpsi_mass, jpsi_width, jpsi_phase, jpsi_scale = pdg[\"jpsi\"]\n", + "psi2s_mass, psi2s_width, psi2s_phase, psi2s_scale = pdg[\"psi2s\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def t_f(x):\n", + " \n", + " def jpsi_res(q):\n", + " return resonance(q, _mass = jpsi_mass, scale = jpsi_scale, phase = jpsi_phase, width = jpsi_width)\n", + "\n", + " def psi2s_res(q):\n", + " return resonance(q, _mass = psi2s_mass, scale = psi2s_scale, phase = psi2s_phase, width = psi2s_width)\n", + "\n", + " funcs = jpsi_res(x) + psi2s_res(x)\n", + "\n", + " vec_f = vec(x, funcs)\n", + "\n", + " axiv_nr = axiv_nonres(x)\n", + "\n", + " tot = vec_f + axiv_nr\n", + " \n", + " return tot" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Area: 7.126305680132978e-06, rel. err.: 0.1894614654746863%\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel_launcher.py:4: IntegrationWarning: The integral is probably divergent, or slowly convergent.\n", + " after removing the cwd from sys.path.\n" + ] + } + ], + "source": [ + "x_min = 2*pdg['muon_M']\n", + "x_max = (pdg[\"Bplus_M\"]-pdg[\"Ks_M\"]-0.1)\n", + "\n", + "result, err = integrate.quad(lambda x: t_f(x), 3600, 3800, limit = 100000000)\n", + "print(\"Area: {0}, rel. err.: {1}%\".format(result, err/result))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tot: Area: 0.0013270139056058355, rel. err.: 0.001434977783938156%\n", + "jpsi: Area: 6.527491388105805e-06, rel. err.: 0.0012105326520570792% (before scaling)\n" + ] + } + ], + "source": [ + "print(\"tot: Area: 0.0013270139056058355, rel. err.: 0.001434977783938156%\")\n", + "print(\"jpsi: Area: 6.527491388105805e-06, rel. err.: 0.0012105326520570792% (before scaling)\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "test_q = np.linspace(x_min, x_max, 2000000)\n", + "calcs_test = t_f(test_q)\n", + "plt.clf()\n", + "# plt.plot(x_part, calcs, '.')\n", + "plt.plot(test_q, calcs_test, label = 'pdf')\n", + "# plt.plot(test_q, res_y, label = 'res')\n", + "plt.legend()\n", + "plt.ylim(0.0, 1e-8)\n", + "# plt.yscale('log')\n", + "# plt.xlim(3080, 3110)\n", + "plt.savefig('np-test.png')\n", + "# print(jpsi_width)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pdg_const.py b/pdg_const.py index f831ad0..910d7b4 100644 --- a/pdg_const.py +++ b/pdg_const.py @@ -36,13 +36,13 @@ "C3" : -0.005, "C4" : -0.078, -"C7eff" : -0.306, -# "C7eff": 0.0, +# "C7eff" : -0.306, +"C7eff": 0.0, -"C9eff" : 4.211, -"C10eff" : -4.103, -# "C9eff": 0.0, -# "C10eff": 0.0, +# "C9eff" : 4.211, +# "C10eff" : -4.103, +"C9eff": 0.0, +"C10eff": 0.0, ###Other constants @@ -67,8 +67,8 @@ #Resonances format(mass, width, phase, scale) # "jpsi": (3096.0, 0.09, -1.5, 2e-2), #---> prescaling -"jpsi": (3096.0, 0.09, -1.5, 184.39), #---> after scaling -# "jpsi": (3096.0, 0.09, -1.5, 0.0), +# "jpsi": (3096.0, 0.09, -1.5, 184.39), #---> after scaling +"jpsi": (3096.0, 0.09, -1.5, 0.0), "jpsi_BR": 6.02e-5, "jpsi_auc": 0.2126825758464027, diff --git a/raremodel-nb.ipynb b/raremodel-nb.ipynb index be1130c..5fdb27e 100644 --- a/raremodel-nb.ipynb +++ b/raremodel-nb.ipynb @@ -57,6 +57,17 @@ ] }, { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# chunksize = 1000000\n", + "# zfit.run.chunking.active = True\n", + "# zfit.run.chunking.max_n_points = chunksize" + ] + }, + { "cell_type": "markdown", "metadata": {}, "source": [ @@ -66,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -267,7 +278,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -322,7 +333,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -366,7 +377,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -394,7 +405,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -446,7 +457,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -466,7 +477,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -506,7 +517,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -544,7 +555,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -557,7 +568,74 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# print(x_min)\n", + "# print(x_max)\n", + "# # total_f.update_integration_options(draws_per_dim=2000000, mc_sampler=None)\n", + "# total_f.update_integration_options(mc_sampler=lambda dim, num_results,\n", + "# dtype: tf.random_uniform(maxval=1., shape=(num_results, dim), dtype=dtype),\n", + "# draws_per_dim=1000000)\n", + "# # _ = []\n", + "\n", + "# # for i in range(10):\n", + "\n", + "# # inte = total_f.integrate(limits = (x_min, x_max))\n", + "# # inte_fl = zfit.run(inte)\n", + "# # print(inte_fl)\n", + "# # _.append(inte_fl)\n", + "\n", + "# # print(\"mean:\", np.mean(_))\n", + "\n", + "# _ = time.time()\n", + "\n", + "# inte = total_f.integrate(limits = (x_min, x_max))\n", + "# inte_fl = zfit.run(inte)\n", + "# print(inte_fl)\n", + "# print(\"Time taken: {}\".format(display_time(int(time.time() - _))))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Tensorflow scaling" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# def scaling_func(x):\n", + "\n", + "# funcs = resonance(x, _mass = ztf.constant(jpsi_mass), scale = ztf.constant(jpsi_scale), phase = ztf.constant(jpsi_phase), width = ztf.constant(jpsi_width)) + resonance(x, _mass = ztf.constant(psi2s_mass), scale = ztf.constant(psi2s_scale), phase = ztf.constant(psi2s_phase), width = ztf.constant(psi2s_width))\n", + "\n", + "# vec_f = vec(x, funcs)\n", + "\n", + "# axiv_nr = axiv_nonres(x)\n", + "\n", + "# tot = vec_f + axiv_nr\n", + "\n", + "# return tot\n", + "\n", + "\n", + "# def s_func(x):\n", + " \n", + "# q = ztf.constant(x)\n", + " \n", + "# return zfit.run(scaling_func(q))\n", + " \n", + "\n", + "# print(integrate.quad(s_func, x_min, x_max, limit = 50))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -574,7 +652,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -586,10 +664,7 @@ "# def psi2s_res(q):\n", "# return resonance(q, psi2s_m, psi2s_s, psi2s_p, psi2s_w)\n", "\n", - "# def cusp(q):\n", - "# return bifur_gauss(q, cusp_m, sig_L, sig_R, cusp_s)\n", - "\n", - "# funcs = psi2s_res(xq) + jpsi_res(xq) + cusp(xq)\n", + "# funcs = psi2s_res(xq) + jpsi_res(xq)\n", "\n", "# vec_f = vec(xq, funcs)\n", "\n", @@ -600,13 +675,14 @@ "# return tot\n", "\n", "# def t_f(x):\n", - "# probs = zfit.run(_t_f(ztf.constant(x)))\n", + "# _ = np.array(x)\n", + "# probs = zfit.run(_t_f(_))\n", "# return probs" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -615,13 +691,13 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "# start = time.time()\n", "\n", - "# result, err = integrate.quad(lambda x: t_f(x), x_min, x_max, limit = 50)\n", + "# result, err = integrate.quad(lambda x: t_f(x), x_min, x_max, limit = 5)\n", "# print(result, \"{0:.2f} %\".format(err/result))\n", "# print(\"Time:\", time.time()-start)" ] @@ -631,12 +707,13 @@ "metadata": {}, "source": [ "# Sampling\n", - "## One sample" + "## One sample\n", + "! total_f.sample() always returns the same set !" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -673,7 +750,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -695,7 +772,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -722,19 +799,9 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 21, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "55/55\n", - "Time taken: 6 h, 21 min\n", - "Projected time left: \n" - ] - } - ], + "outputs": [], "source": [ "nr_of_toys = 1\n", "nevents = int(pdg[\"number_of_decays\"])\n", @@ -746,35 +813,35 @@ "\n", "start = time.time()\n", "\n", - "sampler = total_f.create_sampler(n=event_stack)\n", + "# sampler = total_f.create_sampler(n=event_stack)\n", "\n", - "for toy in range(nr_of_toys):\n", + "# for toy in range(nr_of_toys):\n", " \n", - " dirName = 'data/zfit_toys/toy_{0}'.format(toy)\n", + "# dirName = 'data/zfit_toys/toy_{0}'.format(toy)\n", " \n", - " if not os.path.exists(dirName):\n", - " os.mkdir(dirName)\n", - " print(\"Directory \" , dirName , \" Created \")\n", + "# if not os.path.exists(dirName):\n", + "# os.mkdir(dirName)\n", + "# print(\"Directory \" , dirName , \" Created \")\n", "\n", - " for call in range(calls):\n", + "# for call in range(calls):\n", "\n", - " sampler.resample(n=event_stack)\n", - " s = sampler.unstack_x()\n", - " sam = zfit.run(s)\n", - " clear_output(wait=True)\n", + "# sampler.resample(n=event_stack)\n", + "# s = sampler.unstack_x()\n", + "# sam = zfit.run(s)\n", + "# # clear_output(wait=True)\n", "\n", - " c = call + 1 \n", - " print(\"{0}/{1}\".format(c, calls))\n", - " print(\"Time taken: {}\".format(display_time(int(time.time() - start))))\n", - " print(\"Projected time left: {}\".format(display_time(int((time.time() - start)/c*(calls-c)))))\n", + "# c = call + 1 \n", + "# print(\"{0}/{1}\".format(c, calls))\n", + "# print(\"Time taken: {}\".format(display_time(int(time.time() - start))))\n", + "# print(\"Projected time left: {}\".format(display_time(int((time.time() - start)/c*(calls-c)))))\n", "\n", - " with open(\"data/zfit_toys/toy_{0}/{1}.pkl\".format(toy, call), \"wb\") as f:\n", - " pkl.dump(sam, f, pkl.HIGHEST_PROTOCOL)" + "# with open(\"data/zfit_toys/toy_{0}/{1}.pkl\".format(toy, call), \"wb\") as f:\n", + "# pkl.dump(sam, f, pkl.HIGHEST_PROTOCOL)" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -791,14 +858,14 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Time to generate full toy: 22915 s\n", + "Time to generate full toy: 0 s\n", "(5404696,)\n" ] } @@ -817,17 +884,19 @@ "\n", "data2 = zfit.data.Data.from_numpy(array=total_samp[:int(nevents)], obs=obs)\n", "\n", + "data3 = zfit.data.Data.from_numpy(array=total_samp, obs=obs)\n", + "\n", "print(total_samp[:nevents].shape)" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 24, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -843,19 +912,23 @@ "\n", "# calcs = zfit.run(total_test_tf(samp))\n", "\n", - "plt.hist(total_samp[:event_stack], bins = bins, range = (x_min,x_max))\n", + "plt.hist(total_samp[:nevents], bins = bins, range = (x_min,x_max), label = 'data')\n", + "plt.plot(test_q, calcs_test*nevents*4.5 , label = 'pdf')\n", "\n", "# plt.plot(sam, calcs, '.')\n", "# plt.plot(test_q, calcs_test)\n", - "plt.ylim(0, 20)\n", - "# plt.xlim(3000, 3750)\n", + "# plt.yscale('log')\n", + "plt.ylim(0, 12000)\n", + "# plt.xlim(3080, 3110)\n", + "\n", + "plt.legend()\n", "\n", "plt.savefig('test2.png')" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -885,7 +958,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -902,12 +975,12 @@ "text/html": [ "\n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", @@ -922,7 +995,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -938,7 +1011,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -953,7 +1026,7 @@ "text/html": [ "
FCN = 18215610.730149463TOTAL NCALL = 76NCALLS = 76FCN = 18537900.293873098TOTAL NCALL = 194NCALLS = 194
EDM = 6.769469250461445e-05EDM = 0.03059806673262826GOAL EDM = 5e-06\n", " UP = 0.5Made PosDef
TrueFalseTrueTrueTrue
FalseTrueFalseTrueFalse
\n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -965,9 +1038,9 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -976,9 +1049,9 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -987,9 +1060,9 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -998,9 +1071,9 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -1008,19 +1081,19 @@ " \n", " \n", "
++NameValueHesse Error
0psi2s_p-69.42480.023096jpsi_s464.5240.229484
1jpsi_p-21.99280.0112012psi2s_s76.50240.0505517
2jpsi_s464.5310.227734psi2s_p0.305380.0245293
3psi2s_s76.51020.0504588jpsi_p-9.423230.0114089No
\n", - "
\n",
+       "
\n",
        "\n",
@@ -1040,166 +1113,27 @@
      "output_type": "display_data"
     },
     {
-     "data": {
-      "text/html": [
-       "Minos status for psi2s_p: VALID\n",
-       "\n",
-       "    \n",
-       "        \n",
-       "        \n",
-       "        \n",
-       "    \n",
-       "    \n",
-       "        \n",
-       "        \n",
-       "        \n",
-       "    \n",
-       "    \n",
-       "        \n",
-       "        \n",
-       "        \n",
-       "    \n",
-       "    \n",
-       "        \n",
-       "        \n",
-       "        \n",
-       "    \n",
-       "    \n",
-       "        \n",
-       "        \n",
-       "        \n",
-       "    \n",
-       "
Error-0.023307456378252020.025582271077546587
ValidTrueTrue
At LimitFalseFalse
Max FCNFalseFalse
New MinFalseFalse
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Minos status for jpsi_p: PROBLEM\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Error-0.0112012401828034580.011201240182803458
ValidFalseFalse
At LimitFalseFalse
Max FCNFalseFalse
New MinFalseFalse
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Minos status for jpsi_s: PROBLEM\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Error-0.227734494793661950.22773449479366195
ValidFalseFalse
At LimitFalseFalse
Max FCNFalseFalse
New MinFalseFalse
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Minos status for psi2s_s: PROBLEM\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Error-0.050458796201811110.05045879620181111
ValidFalseFalse
At LimitFalseFalse
Max FCNFalseFalse
New MinFalseFalse
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "psi2s_p: ^{+0.025582271077546587}_{-0.02330745637825202}\n", - "jpsi_p: ^{+0.011201240182803458}_{-0.011201240182803458}\n", - "jpsi_s: ^{+0.22773449479366195}_{-0.22773449479366195}\n", - "psi2s_s: ^{+0.05045879620181111}_{-0.05045879620181111}\n", - "Function minimum: 18215610.730149463\n" + "ename": "RuntimeError", + "evalue": "Function mimimum is not valid. Make sure migrad converge first", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mRuntimeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mminimizer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mminimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnll\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 7\u001b[1;33m \u001b[0mparam_errors\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0merror\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 8\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 9\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mvar\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merrors\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mparam_errors\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\fitresult.py\u001b[0m in \u001b[0;36merror\u001b[1;34m(self, params, method, error_name, sigma)\u001b[0m\n\u001b[0;32m 227\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 228\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0muncached_params\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 229\u001b[1;33m \u001b[0merror_dict\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_error\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparams\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0muncached_params\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msigma\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msigma\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 230\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_cache_errors\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0merror_name\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0merror_name\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merrors\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0merror_dict\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 231\u001b[0m \u001b[0mall_errors\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mOrderedDict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mparams\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0merror_name\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mp\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\fitresult.py\u001b[0m in \u001b[0;36m_error\u001b[1;34m(self, params, method, sigma)\u001b[0m\n\u001b[0;32m 238\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 239\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"The following method is not a valid, implemented method: {}\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmethod\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 240\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mparams\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msigma\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msigma\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 241\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 242\u001b[0m \u001b[1;31m# def set_error_method(self, method):\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\fitresult.py\u001b[0m in \u001b[0;36m_minos_minuit\u001b[1;34m(result, params, sigma)\u001b[0m\n\u001b[0;32m 46\u001b[0m \"`MinuitMinimizer`.\")\n\u001b[0;32m 47\u001b[0m result = [minimizer._minuit_minimizer.minos(var=p.name, sigma=sigma)\n\u001b[1;32m---> 48\u001b[1;33m for p in params][-1] # returns every var\n\u001b[0m\u001b[0;32m 49\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mOrderedDict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mp\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 50\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\fitresult.py\u001b[0m in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 46\u001b[0m \"`MinuitMinimizer`.\")\n\u001b[0;32m 47\u001b[0m result = [minimizer._minuit_minimizer.minos(var=p.name, sigma=sigma)\n\u001b[1;32m---> 48\u001b[1;33m for p in params][-1] # returns every var\n\u001b[0m\u001b[0;32m 49\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mOrderedDict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mp\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 50\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32miminuit\\_libiminuit.pyx\u001b[0m in \u001b[0;36miminuit._libiminuit.Minuit.minos\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mRuntimeError\u001b[0m: Function mimimum is not valid. Make sure migrad converge first" ] } ], "source": [ - "nll = zfit.loss.UnbinnedNLL(model=total_f, data=data2, fit_range = (x_min, x_max))\n", + "nll = zfit.loss.UnbinnedNLL(model=total_f, data=data3, fit_range = (x_min, x_max))\n", "\n", "minimizer = zfit.minimize.MinuitMinimizer()\n", - "# minimizer._use_tfgrad = False\n", + "minimizer._use_tfgrad = False\n", "result = minimizer.minimize(nll)\n", "\n", "param_errors = result.error()\n", @@ -1212,22 +1146,11 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.0005069573828973" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "(-3.14+2*np.pi)/np.pi" + "(-7.95933+2*np.pi)/np.pi+np.pi" ] }, { @@ -1239,48 +1162,29 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'5 h, 55 min'" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "display_time(int(395*pdg[\"number_of_decays\"]/100000))" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "6 h, 12 min\n" - ] - } - ], + "outputs": [], "source": [ "print(display_time(22376))" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "probs = total_f.pdf(test_q)\n", + "# probs = total_f.pdf(test_q)\n", "\n", "calcs_test = zfit.run(probs)\n", "res_y = zfit.run(jpsi_res(test_q))" @@ -1288,36 +1192,16 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.09\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.clf()\n", "# plt.plot(x_part, calcs, '.')\n", "plt.plot(test_q, calcs_test, label = 'pdf')\n", "# plt.plot(test_q, res_y, label = 'res')\n", "plt.legend()\n", - "plt.ylim(0.0, 4e-4)\n", + "plt.ylim(0.0, 5e-4)\n", "# plt.yscale('log')\n", "# plt.xlim(3080, 3110)\n", "plt.savefig('test3.png')\n", @@ -1330,6 +1214,13 @@ "metadata": {}, "outputs": [], "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/raremodel-nb.py b/raremodel-nb.py index 348f99b..9700fb7 100644 --- a/raremodel-nb.py +++ b/raremodel-nb.py @@ -3,7 +3,7 @@ # # Import -# In[3]: +# In[1]: import numpy as np @@ -23,14 +23,22 @@ import tensorflow as tf import zfit from zfit import ztf -from IPython.display import clear_output +# from IPython.display import clear_output import os +# In[2]: + + +# chunksize = 1000000 +# zfit.run.chunking.active = True +# zfit.run.chunking.max_n_points = chunksize + + # # Build model and graphs # ## Create graphs -# In[4]: +# In[3]: def formfactor( q2, subscript): #returns real value @@ -228,7 +236,7 @@ return c9 -# In[5]: +# In[4]: def G(y): @@ -275,7 +283,7 @@ # ## Build pdf -# In[6]: +# In[5]: class total_pdf(zfit.pdf.ZPDF): @@ -311,7 +319,7 @@ # ## Load data -# In[7]: +# In[6]: x_min = 2*pdg['muon_M'] @@ -331,7 +339,7 @@ # ## Setup parameters -# In[8]: +# In[7]: #jpsi @@ -365,7 +373,7 @@ # ## Setup pdf -# In[9]: +# In[8]: total_f = total_pdf(obs=obs, jpsi_mass = jpsi_m, jpsi_scale = jpsi_s, jpsi_phase = jpsi_p, jpsi_width = jpsi_w, @@ -377,7 +385,7 @@ # ## Test if graphs actually work and compute values -# In[10]: +# In[9]: def total_test_tf(xq): @@ -414,7 +422,7 @@ res_y = zfit.run(jpsi_res(test_q)) -# In[11]: +# In[10]: plt.clf() @@ -431,7 +439,7 @@ # ## Adjust scaling of different parts -# In[12]: +# In[11]: # total_f.update_integration_options(draws_per_dim=2000000, mc_sampler=None) @@ -441,9 +449,65 @@ # print(pdg["jpsi_BR"]/pdg["NR_BR"], inte_fl/pdg["NR_auc"]) +# In[12]: + + +# print(x_min) +# print(x_max) +# # total_f.update_integration_options(draws_per_dim=2000000, mc_sampler=None) +# total_f.update_integration_options(mc_sampler=lambda dim, num_results, +# dtype: tf.random_uniform(maxval=1., shape=(num_results, dim), dtype=dtype), +# draws_per_dim=1000000) +# # _ = [] + +# # for i in range(10): + +# # inte = total_f.integrate(limits = (x_min, x_max)) +# # inte_fl = zfit.run(inte) +# # print(inte_fl) +# # _.append(inte_fl) + +# # print("mean:", np.mean(_)) + +# _ = time.time() + +# inte = total_f.integrate(limits = (x_min, x_max)) +# inte_fl = zfit.run(inte) +# print(inte_fl) +# print("Time taken: {}".format(display_time(int(time.time() - _)))) + + +# ## Tensorflow scaling + # In[13]: +# def scaling_func(x): + +# funcs = resonance(x, _mass = ztf.constant(jpsi_mass), scale = ztf.constant(jpsi_scale), phase = ztf.constant(jpsi_phase), width = ztf.constant(jpsi_width)) + resonance(x, _mass = ztf.constant(psi2s_mass), scale = ztf.constant(psi2s_scale), phase = ztf.constant(psi2s_phase), width = ztf.constant(psi2s_width)) + +# vec_f = vec(x, funcs) + +# axiv_nr = axiv_nonres(x) + +# tot = vec_f + axiv_nr + +# return tot + + +# def s_func(x): + +# q = ztf.constant(x) + +# return zfit.run(scaling_func(q)) + + +# print(integrate.quad(s_func, x_min, x_max, limit = 50)) + + +# In[14]: + + # factor_jpsi = pdg["NR_auc"]*pdg["jpsi_BR"]/(pdg["NR_BR"]*pdg["jpsi_auc"]) # factor_jpsi = pdg["NR_auc"]*pdg["jpsi_BR"]/(pdg["NR_BR"]*inte_fl) # print(np.sqrt(factor_jpsi)*jpsi_scale) @@ -455,7 +519,7 @@ # print(np.sqrt(factor_psi2s)) -# In[14]: +# In[33]: # def _t_f(xq): @@ -466,10 +530,7 @@ # def psi2s_res(q): # return resonance(q, psi2s_m, psi2s_s, psi2s_p, psi2s_w) -# def cusp(q): -# return bifur_gauss(q, cusp_m, sig_L, sig_R, cusp_s) - -# funcs = psi2s_res(xq) + jpsi_res(xq) + cusp(xq) +# funcs = psi2s_res(xq) + jpsi_res(xq) # vec_f = vec(xq, funcs) @@ -480,30 +541,32 @@ # return tot # def t_f(x): -# probs = zfit.run(_t_f(ztf.constant(x))) +# _ = np.array(x) +# probs = zfit.run(_t_f(_)) # return probs -# In[15]: +# In[34]: # print(36000*(1+ pdg["jpsi_BR"]/pdg["NR_BR"] + pdg["psi2s_BR"]/pdg["NR_BR"])) -# In[ ]: +# In[35]: # start = time.time() -# result, err = integrate.quad(lambda x: t_f(x), x_min, x_max, limit = 50) +# result, err = integrate.quad(lambda x: t_f(x), x_min, x_max, limit = 5) # print(result, "{0:.2f} %".format(err/result)) # print("Time:", time.time()-start) # # Sampling # ## One sample +# ! total_f.sample() always returns the same set ! -# In[ ]: +# In[18]: # nevents = int(pdg["number_of_decays"]) @@ -537,7 +600,7 @@ # pkl.dump(sam, f, pkl.HIGHEST_PROTOCOL) -# In[ ]: +# In[19]: # print("Time to generate full toy: {} s".format(int(time.time()-start))) @@ -556,7 +619,7 @@ # print(total_samp[:nevents].shape) -# In[ ]: +# In[20]: # bins = int((x_max-x_min)/7) @@ -575,12 +638,12 @@ # ## Toys -# In[19]: +# In[21]: nr_of_toys = 1 nevents = int(pdg["number_of_decays"]) -event_stack = 5000 +event_stack = 100000 calls = int(nevents/event_stack + 1) @@ -614,7 +677,7 @@ pkl.dump(sam, f, pkl.HIGHEST_PROTOCOL) -# In[ ]: +# In[22]: # with open(r"data/zfit_toys/toy_0/0.pkl", "rb") as input_file: @@ -628,7 +691,7 @@ # print(np.sum(sam-sam2)) -# In[ ]: +# In[23]: print("Time to generate full toy: {} s".format(int(time.time()-start))) @@ -644,27 +707,33 @@ data2 = zfit.data.Data.from_numpy(array=total_samp[:int(nevents)], obs=obs) +data3 = zfit.data.Data.from_numpy(array=total_samp, obs=obs) + print(total_samp[:nevents].shape) -# In[ ]: +# In[24]: bins = int((x_max-x_min)/7) # calcs = zfit.run(total_test_tf(samp)) -plt.hist(total_samp[:event_stack], bins = bins, range = (x_min,x_max)) +plt.hist(total_samp[:nevents], bins = bins, range = (x_min,x_max), label = 'data') +plt.plot(test_q, calcs_test*nevents*4.5 , label = 'pdf') # plt.plot(sam, calcs, '.') # plt.plot(test_q, calcs_test) -plt.ylim(0, 20) -# plt.xlim(3000, 3750) +# plt.yscale('log') +plt.ylim(0, 12000) +# plt.xlim(3080, 3110) + +plt.legend() plt.savefig('test2.png') -# In[ ]: +# In[25]: # sampler = total_f.create_sampler(n=nevents) @@ -686,13 +755,13 @@ # # Fitting -# In[ ]: +# In[26]: -nll = zfit.loss.UnbinnedNLL(model=total_f, data=data2, fit_range = (x_min, x_max)) +nll = zfit.loss.UnbinnedNLL(model=total_f, data=data3, fit_range = (x_min, x_max)) minimizer = zfit.minimize.MinuitMinimizer() -# minimizer._use_tfgrad = False +minimizer._use_tfgrad = False result = minimizer.minimize(nll) param_errors = result.error() @@ -706,7 +775,7 @@ # In[ ]: -(-3.14+2*np.pi)/np.pi +(-7.95933+2*np.pi)/np.pi+np.pi # In[ ]: @@ -730,7 +799,7 @@ # In[ ]: -probs = total_f.pdf(test_q) +# probs = total_f.pdf(test_q) calcs_test = zfit.run(probs) res_y = zfit.run(jpsi_res(test_q)) @@ -744,7 +813,7 @@ plt.plot(test_q, calcs_test, label = 'pdf') # plt.plot(test_q, res_y, label = 'res') plt.legend() -plt.ylim(0.0, 4e-4) +plt.ylim(0.0, 5e-4) # plt.yscale('log') # plt.xlim(3080, 3110) plt.savefig('test3.png') @@ -756,3 +825,9 @@ + +# In[ ]: + + + + diff --git a/test.png b/test.png index 4d21890..17333a7 100644 --- a/test.png +++ b/test.png Binary files differ diff --git a/test2.png b/test2.png index 3394ae2..dd9354d 100644 --- a/test2.png +++ b/test2.png Binary files differ diff --git a/test3.png b/test3.png index 3e7c598..293bee4 100644 --- a/test3.png +++ b/test3.png Binary files differ