Newer
Older
Master_thesis / numpy_backup_for_scaling.ipynb
{
 "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": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "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
}