diff --git a/.ipynb_checkpoints/raremodel-nb-checkpoint.ipynb b/.ipynb_checkpoints/raremodel-nb-checkpoint.ipynb index 43170bb..ac056b5 100644 --- a/.ipynb_checkpoints/raremodel-nb-checkpoint.ipynb +++ b/.ipynb_checkpoints/raremodel-nb-checkpoint.ipynb @@ -85,9 +85,26 @@ "cell_type": "code", "execution_count": 3, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.46\n" + ] + } + ], + "source": [ + "print(zfit.run(ztf.constant(pdg[\"bT\"])[0]))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, "outputs": [], "source": [ - "def formfactor( q2, subscript, b0, bT, bplus): #returns real value\n", + "def formfactor( q2, subscript, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2): #returns real value\n", " #check if subscript is viable\n", "\n", " if subscript != \"0\" and subscript != \"+\" and subscript != \"T\":\n", @@ -98,9 +115,12 @@ " mK = ztf.constant(pdg['Ks_M'])\n", " mbstar0 = ztf.constant(pdg[\"mbstar0\"])\n", " mbstar = ztf.constant(pdg[\"mbstar\"])\n", - "# b0 = ztf.constant(pdg[\"b0\"])\n", - "# bplus = ztf.constant(pdg[\"bplus\"])\n", - "# bT = ztf.constant(pdg[\"bT\"])\n", + "# b0_ = ztf.constant(pdg[\"b0\"])\n", + "# bplus_ = ztf.constant(pdg[\"bplus\"])\n", + "# bT_ = ztf.constant(pdg[\"bT\"])\n", + "\n", + "# print(zfit.run(b0))\n", + "# print(b0_)\n", "\n", " mmu = ztf.constant(pdg['muon_M'])\n", " mb = ztf.constant(pdg['bquark_M'])\n", @@ -125,11 +145,12 @@ " if subscript == \"0\":\n", " prefactor = 1/(1 - q2/(mbstar0**2))\n", " _sum = 0\n", + " b0 = [b0_0, b0_1, b0_2]\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", + " return ztf.to_complex(prefactor * _sum)\n", "\n", " #calculate f+ or fT\n", "\n", @@ -138,14 +159,15 @@ " _sum = 0\n", "\n", " if subscript == \"T\":\n", - " b = bT\n", + " bT = [bT_0, bT_1, bT_2]\n", + " for i in range(N):\n", + " _sum += bT[i] * (tf.pow(z, i) - ((-1)**(i-N)) * (i/N) * tf.pow(z, N))\n", " else:\n", - " b = bplus\n", + " bplus = [bplus_0, bplus_1, bplus_2]\n", + " for i in range(N):\n", + " _sum += bplus[i] * (tf.pow(z, i) - ((-1)**(i-N)) * (i/N) * tf.pow(z, N))\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", + " return ztf.to_complex(prefactor * _sum)\n", "\n", "def resonance(q, _mass, width, phase, scale):\n", "\n", @@ -179,19 +201,8 @@ "\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, b0, bplus, bT):\n", + "def axiv_nonres(q, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2):\n", "\n", " GF = ztf.constant(pdg['GF'])\n", " alpha_ew = ztf.constant(pdg['alpha_ew'])\n", @@ -219,7 +230,7 @@ "\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, \"+\", b0, bplus, bT))**2.\n", + " bracket_left = 2./3. * kabs**2. * beta**2. *tf.abs(tf.complex(C10eff, ztf.constant(0.0))*formfactor(q2, \"+\", b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2))**2.\n", "\n", " #middle term in bracket\n", "\n", @@ -227,13 +238,13 @@ "\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\", b0, bplus, bT)), 2)\n", + " bracket_middle = _top/_under *tf.pow(tf.abs(tf.complex(C10eff, ztf.constant(0.0)) * formfactor(q2, \"0\", b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2)), 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, b0, bplus, bT):\n", + "def vec(q, funcs, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2):\n", " \n", " q2 = tf.pow(q, 2)\n", "\n", @@ -263,7 +274,7 @@ "\n", " prefactor2 = kabs**2 * (1. - 1./3. * beta**2)\n", "\n", - " abs_bracket = tf.abs(c9eff(q, funcs) * formfactor(q2, \"+\", b0, bplus, bT) + tf.complex(2.0 * C7eff * (mb + ms)/(mB + mK), ztf.constant(0.0)) * formfactor(q2, \"T\", b0, bplus, bT))**2\n", + " abs_bracket = tf.abs(c9eff(q, funcs) * formfactor(q2, \"+\", b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2) + tf.complex(2.0 * C7eff * (mb + ms)/(mB + mK), ztf.constant(0.0)) * formfactor(q2, \"T\", b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2))**2\n", "\n", " bracket_right = prefactor2 * abs_bracket\n", "\n", @@ -284,7 +295,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -339,7 +350,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -367,7 +378,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -445,9 +456,9 @@ "\n", " funcs = rho_res(x) + omega_res(x) + phi_res(x) + jpsi_res(x) + psi2s_res(x) + p3770_res(x) + p4040_res(x)+ p4160_res(x) + p4415_res(x) + P2_D(x) + ttau_cusp(x)\n", "\n", - " vec_f = vec(x, funcs, b0, bplus, bT)\n", + " vec_f = vec(x, funcs, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2)\n", "\n", - " axiv_nr = axiv_nonres(x, b0, bplus, bT)\n", + " axiv_nr = axiv_nonres(x, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2)\n", "\n", " tot = vec_f + axiv_nr\n", "\n", @@ -463,7 +474,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -491,7 +502,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -507,17 +518,17 @@ "source": [ "# formfactors\n", "\n", - "b0_0 = zfit.Parameter(\"b0_0\", ztf.constant(0.292), lower_limit = -2.0, upper_limit= 2.0)\n", - "b0_1 = zfit.Parameter(\"b0_1\", ztf.constant(0.281), lower_limit = -2.0, upper_limit= 2.0)\n", - "b0_2 = zfit.Parameter(\"b0_2\", ztf.constant(0.150), lower_limit = -2.0, upper_limit= 2.0)\n", + "b0_0 = zfit.Parameter(\"b0_0\", ztf.constant(0.292), floating = False) #, lower_limit = -2.0, upper_limit= 2.0)\n", + "b0_1 = zfit.Parameter(\"b0_1\", ztf.constant(0.281), floating = False) #, lower_limit = -2.0, upper_limit= 2.0)\n", + "b0_2 = zfit.Parameter(\"b0_2\", ztf.constant(0.150), floating = False) #, lower_limit = -2.0, upper_limit= 2.0)\n", "\n", "bplus_0 = zfit.Parameter(\"bplus_0\", ztf.constant(0.466), lower_limit = -2.0, upper_limit= 2.0)\n", "bplus_1 = zfit.Parameter(\"bplus_1\", ztf.constant(-0.885), lower_limit = -2.0, upper_limit= 2.0)\n", "bplus_2 = zfit.Parameter(\"bplus_2\", ztf.constant(-0.213), lower_limit = -2.0, upper_limit= 2.0)\n", "\n", - "bT_0 = zfit.Parameter(\"bT_0\", ztf.constant(0.460), lower_limit = -2.0, upper_limit= 2.0)\n", - "bT_1 = zfit.Parameter(\"bT_1\", ztf.constant(-1.089), lower_limit = -2.0, upper_limit= 2.0)\n", - "bT_2 = zfit.Parameter(\"bT_2\", ztf.constant(-1.114), lower_limit = -2.0, upper_limit= 2.0)\n", + "bT_0 = zfit.Parameter(\"bT_0\", ztf.constant(0.460), floating = False) #, lower_limit = -2.0, upper_limit= 2.0)\n", + "bT_1 = zfit.Parameter(\"bT_1\", ztf.constant(-1.089), floating = False) #, lower_limit = -2.0, upper_limit= 2.0)\n", + "bT_2 = zfit.Parameter(\"bT_2\", ztf.constant(-1.114), floating = False) #, lower_limit = -2.0, upper_limit= 2.0)\n", "\n", "\n", "#rho\n", @@ -557,7 +568,7 @@ "jpsi_m = zfit.Parameter(\"jpsi_m\", ztf.constant(jpsi_mass), floating = False)\n", "jpsi_w = zfit.Parameter(\"jpsi_w\", ztf.constant(jpsi_width), floating = False)\n", "jpsi_p = zfit.Parameter(\"jpsi_p\", ztf.constant(jpsi_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", - "jpsi_s = zfit.Parameter(\"jpsi_s\", ztf.constant(jpsi_scale), lower_limit=jpsi_scale-np.sqrt(jpsi_scale), upper_limit=jpsi_scale+np.sqrt(jpsi_scale))\n", + "jpsi_s = zfit.Parameter(\"jpsi_s\", ztf.constant(jpsi_scale), floating = False) #, lower_limit=jpsi_scale-np.sqrt(jpsi_scale), upper_limit=jpsi_scale+np.sqrt(jpsi_scale))\n", "\n", "#psi2s\n", "\n", @@ -566,7 +577,7 @@ "psi2s_m = zfit.Parameter(\"psi2s_m\", ztf.constant(psi2s_mass), floating = False)\n", "psi2s_w = zfit.Parameter(\"psi2s_w\", ztf.constant(psi2s_width), floating = False)\n", "psi2s_p = zfit.Parameter(\"psi2s_p\", ztf.constant(psi2s_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", - "psi2s_s = zfit.Parameter(\"psi2s_s\", ztf.constant(psi2s_scale), lower_limit=psi2s_scale-np.sqrt(psi2s_scale), upper_limit=psi2s_scale+np.sqrt(psi2s_scale))\n", + "psi2s_s = zfit.Parameter(\"psi2s_s\", ztf.constant(psi2s_scale), floating = False) #, lower_limit=psi2s_scale-np.sqrt(psi2s_scale), upper_limit=psi2s_scale+np.sqrt(psi2s_scale))\n", "\n", "#psi(3770)\n", "\n", @@ -574,8 +585,8 @@ "\n", "p3770_m = zfit.Parameter(\"p3770_m\", ztf.constant(p3770_mass), floating = False)\n", "p3770_w = zfit.Parameter(\"p3770_w\", ztf.constant(p3770_width), floating = False)\n", - "p3770_p = zfit.Parameter(\"p3770_p\", ztf.constant(p3770_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", - "p3770_s = zfit.Parameter(\"p3770_s\", ztf.constant(p3770_scale), floating = False) #, lower_limit=p3770_scale-np.sqrt(p3770_scale), upper_limit=p3770_scale+np.sqrt(p3770_scale))\n", + "p3770_p = zfit.Parameter(\"p3770_p\", ztf.constant(p3770_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p3770_s = zfit.Parameter(\"p3770_s\", ztf.constant(p3770_scale), lower_limit=p3770_scale-np.sqrt(p3770_scale), upper_limit=p3770_scale+np.sqrt(p3770_scale))\n", "\n", "#psi(4040)\n", "\n", @@ -583,8 +594,8 @@ "\n", "p4040_m = zfit.Parameter(\"p4040_m\", ztf.constant(p4040_mass), floating = False)\n", "p4040_w = zfit.Parameter(\"p4040_w\", ztf.constant(p4040_width), floating = False)\n", - "p4040_p = zfit.Parameter(\"p4040_p\", ztf.constant(p4040_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", - "p4040_s = zfit.Parameter(\"p4040_s\", ztf.constant(p4040_scale), floating = False) #, lower_limit=p4040_scale-np.sqrt(p4040_scale), upper_limit=p4040_scale+np.sqrt(p4040_scale))\n", + "p4040_p = zfit.Parameter(\"p4040_p\", ztf.constant(p4040_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p4040_s = zfit.Parameter(\"p4040_s\", ztf.constant(p4040_scale), lower_limit=p4040_scale-np.sqrt(p4040_scale), upper_limit=p4040_scale+np.sqrt(p4040_scale))\n", "\n", "#psi(4160)\n", "\n", @@ -592,8 +603,8 @@ "\n", "p4160_m = zfit.Parameter(\"p4160_m\", ztf.constant(p4160_mass), floating = False)\n", "p4160_w = zfit.Parameter(\"p4160_w\", ztf.constant(p4160_width), floating = False)\n", - "p4160_p = zfit.Parameter(\"p4160_p\", ztf.constant(p4160_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", - "p4160_s = zfit.Parameter(\"p4160_s\", ztf.constant(p4160_scale), floating = False) #, lower_limit=p4160_scale-np.sqrt(p4160_scale), upper_limit=p4160_scale+np.sqrt(p4160_scale))\n", + "p4160_p = zfit.Parameter(\"p4160_p\", ztf.constant(p4160_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p4160_s = zfit.Parameter(\"p4160_s\", ztf.constant(p4160_scale), lower_limit=p4160_scale-np.sqrt(p4160_scale), upper_limit=p4160_scale+np.sqrt(p4160_scale))\n", "\n", "#psi(4415)\n", "\n", @@ -601,8 +612,29 @@ "\n", "p4415_m = zfit.Parameter(\"p4415_m\", ztf.constant(p4415_mass), floating = False)\n", "p4415_w = zfit.Parameter(\"p4415_w\", ztf.constant(p4415_width), floating = False)\n", - "p4415_p = zfit.Parameter(\"p4415_p\", ztf.constant(p4415_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", - "p4415_s = zfit.Parameter(\"p4415_s\", ztf.constant(p4415_scale), floating = False) #, lower_limit=p4415_scale-np.sqrt(p4415_scale), upper_limit=p4415_scale+np.sqrt(p4415_scale))" + "p4415_p = zfit.Parameter(\"p4415_p\", ztf.constant(p4415_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p4415_s = zfit.Parameter(\"p4415_s\", ztf.constant(p4415_scale), lower_limit=p4415_scale-np.sqrt(p4415_scale), upper_limit=p4415_scale+np.sqrt(p4415_scale))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b0 = [b0_0, b0_1, b0_2]\n", + "b0[0]" ] }, { @@ -620,7 +652,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -701,7 +733,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -738,7 +770,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -774,19 +806,22 @@ "\n", "calcs_test = zfit.run(probs)\n", "res_y = zfit.run(jpsi_res(test_q))\n", - "# f0_y = zfit.run(formfactor(test_q,\"0\", b0, bplus, bT))\n", - "# fplus_y = zfit.run(formfactor(test_q,\"+\", b0, bplus, bT))\n", - "# fT_y = zfit.run(formfactor(test_q,\"T\", b0, bplus, bT))" + "# b0 = [b0_0, b0_1, b0_2]\n", + "# bplus = [bplus_0, bplus_1, bplus_2]\n", + "# bT = [bT_0, bT_1, bT_2]\n", + "# f0_y = zfit.run(tf.math.real(formfactor(test_q,\"0\", b0, bplus, bT)))\n", + "# fplus_y = zfit.run(tf.math.real(formfactor(test_q,\"+\", b0, bplus, bT)))\n", + "# fT_y = zfit.run(tf.math.real(formfactor(test_q,\"T\", b0, bplus, bT)))" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -815,7 +850,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -831,7 +866,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -847,7 +882,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -860,7 +895,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -912,12 +947,12 @@ "metadata": {}, "source": [ "# Sampling\n", - "## Toys" + "## Mixture distribution for sampling" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -1001,7 +1036,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -1010,7 +1045,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -1019,7 +1054,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -1028,7 +1063,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "metadata": { "scrolled": false }, @@ -1076,7 +1111,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -1093,7 +1128,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -1117,7 +1152,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -1144,7 +1179,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -1167,7 +1202,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -1176,7 +1211,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -1192,7 +1227,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -1222,7 +1257,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -1236,7 +1271,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -1254,7 +1289,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -1268,7 +1303,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -1289,7 +1324,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ @@ -1299,7 +1334,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ @@ -1330,7 +1365,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -1342,12 +1377,49 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "## Constraints" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "# 1. Constraint - Real part of sum of Psi contrib and D contribs\n", + "\n", + "\n", + "sum_list = []\n", + "\n", + "sum_list.append(ztf.to_complex(jpsi_s) * tf.exp(tf.complex(ztf.constant(0.0), jpsi_p)) * ztf.to_complex(jpsi_w / (tf.pow(jpsi_m,3))))\n", + "sum_list.append(ztf.to_complex(psi2s_s) * tf.exp(tf.complex(ztf.constant(0.0), psi2s_p)) * ztf.to_complex(psi2s_w / (tf.pow(psi2s_m,3))))\n", + "sum_list.append(ztf.to_complex(p3770_s) * tf.exp(tf.complex(ztf.constant(0.0), p3770_p)) * ztf.to_complex(p3770_w / (tf.pow(p3770_m,3))))\n", + "sum_list.append(ztf.to_complex(p4040_s) * tf.exp(tf.complex(ztf.constant(0.0), p4040_p)) * ztf.to_complex(p4040_w / (tf.pow(p4040_m,3))))\n", + "sum_list.append(ztf.to_complex(p4160_s) * tf.exp(tf.complex(ztf.constant(0.0), p4160_p)) * ztf.to_complex(p4160_w / (tf.pow(p4160_m,3))))\n", + "sum_list.append(ztf.to_complex(p4415_s) * tf.exp(tf.complex(ztf.constant(0.0), p4415_p)) * ztf.to_complex(p4415_w / (tf.pow(p4415_m,3))))\n", + "sum_list.append(ztf.to_complex(DDstar_s) * tf.exp(tf.complex(ztf.constant(0.0), DDstar_p)) * ztf.to_complex(1.0 / (10.0*tf.pow(DDstar_m,2))))\n", + "sum_list.append(ztf.to_complex(Dbar_s) * tf.exp(tf.complex(ztf.constant(0.0), Dbar_p)) * ztf.to_complex(1.0 / (6.0*tf.pow(Dbar_m,2))))\n", + "\n", + "sum_ru_1 = ztf.to_complex(ztf.constant(0.0))\n", + "\n", + "for part in sum_list:\n", + " sum_ru_1 += part\n", + "\n", + "sum_1 = tf.math.real(sum_ru_1)\n", + "constraint1 = zfit.core.constraint.GaussianConstraint(params = [sum_1], mu = [ztf.constant(1.7*10**-8)],\n", + " sigma = [ztf.constant(2.2*10**-8)])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "# Analysis" ] }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 41, "metadata": { "scrolled": false }, @@ -1360,82 +1432,23 @@ "Toy 0: Data generation finished\n", "Toy 0: Loading data...\n", "Toy 0: Loading data finished\n", - "Toy 0: Fitting pdf...\n", - "------------------------------------------------------------------\n", - "| FCN = 5.224E+04 | Ncalls=1261 (1261 total) |\n", - "| EDM = 0.000626 (Goal: 5E-06) | up = 0.5 |\n", - "------------------------------------------------------------------\n", - "| Valid Min. | Valid Param. | Above EDM | Reached call limit |\n", - "------------------------------------------------------------------\n", - "| True | True | False | False |\n", - "------------------------------------------------------------------\n", - "| Hesse failed | Has cov. | Accurate | Pos. def. | Forced |\n", - "------------------------------------------------------------------\n", - "| False | True | False | False | True |\n", - "------------------------------------------------------------------\n", - "Toy 0: Fitting finished\n", - "Function minimum: 52244.05952457551\n", - "---------------------------------------------------------------------------------------------\n", - "| | Name | Value | Hesse Err | Minos Err- | Minos Err+ | Limit- | Limit+ | Fixed |\n", - "---------------------------------------------------------------------------------------------\n", - "| 0 | b0_1 | -2.0 | 3.7 | | | -2 | 2 | |\n", - "| 1 | bplus_1 | -2.0 | 2.6 | | | -2 | 2 | |\n", - "| 2 | bT_1 | -1.98 | 0.05 | | | -2 | 2 | |\n", - "| 3 | Ctt | -0.5 | 0.8 | | | -0.5 | 0.5 | |\n", - "| 4 | bplus_0 | 0.27 | 0.09 | | | -2 | 2 | |\n", - "| 5 | b0_2 | -1.9 | 2.8 | | | -2 | 2 | |\n", - "| 6 | bT_0 | 0.325 | 0.008 | | | -2 | 2 | |\n", - "| 7 | psi2s_p | 3.53 | 0.15 | | |-6.28319 | 6.28319 | |\n", - "| 8 | bT_2 | 1.99 | 0.28 | | | -2 | 2 | |\n", - "| 9 | bplus_2 | -1.7 | 2.1 | | | -2 | 2 | |\n", - "| 10| jpsi_s | 1.000E4 | 0.015E4 | | | 9797.52 | 9996.48 | |\n", - "| 11| psi2s_s | 1430 | 40 | | | 1358.64 | 1433.36 | |\n", - "| 12| b0_0 | 0.18 | 0.76 | | | -2 | 2 | |\n", - "| 13| Dbar_s | 0.67 | 0.21 | | | -1.464 | 1.464 | |\n", - "| 14| jpsi_p | 3.2 | 0.6 | | |-6.28319 | 6.28319 | |\n", - "---------------------------------------------------------------------------------------------\n", - "-------------------------------------------------------------------------------------------------------------------------------------\n", - "| | b0_1 bplus_1 bT_1 Ctt bplus_0 b0_2 bT_0 psi2s_p bT_2 bplus_2 jpsi_s psi2s_s b0_0 Dbar_s jpsi_p |\n", - "-------------------------------------------------------------------------------------------------------------------------------------\n", - "| b0_1 | 1.000 0.665 -0.601 0.260 0.568 0.573 -0.560 0.465 -0.189 -0.878 0.218 0.050 0.606 0.008 0.041 |\n", - "| bplus_1 | 0.665 1.000 -0.588 0.285 0.473 0.481 -0.543 0.388 -0.189 -0.826 0.231 0.058 0.555 -0.138 0.083 |\n", - "| bT_1 | -0.601 -0.588 1.000 -0.234 -0.496 -0.437 0.479 -0.359 0.159 0.772 -0.166 -0.054 -0.510 0.024 -0.072 |\n", - "| Ctt | 0.260 0.285 -0.234 1.000 0.298 0.192 -0.221 0.253 -0.073 -0.356 0.091 -0.035 0.233 0.237 -0.037 |\n", - "| bplus_0 | 0.568 0.473 -0.496 0.298 1.000 0.409 -0.453 0.281 -0.163 -0.681 0.204 0.071 0.459 -0.271 0.105 |\n", - "| b0_2 | 0.573 0.481 -0.437 0.192 0.409 1.000 -0.407 0.336 -0.138 -0.635 0.159 0.037 0.531 -0.001 0.029 |\n", - "| bT_0 | -0.560 -0.543 0.479 -0.221 -0.453 -0.407 1.000 -0.328 0.150 0.713 -0.157 -0.051 -0.472 0.036 -0.070 |\n", - "| psi2s_p | 0.465 0.388 -0.359 0.253 0.281 0.336 -0.328 1.000 -0.117 -0.557 0.127 0.083 0.369 -0.222 0.162 |\n", - "| bT_2 | -0.189 -0.189 0.159 -0.073 -0.163 -0.138 0.150 -0.117 1.000 0.246 -0.050 -0.017 -0.163 -0.002 -0.020 |\n", - "| bplus_2 | -0.878 -0.826 0.772 -0.356 -0.681 -0.635 0.713 -0.557 0.246 1.000 -0.291 -0.072 -0.750 0.087 -0.079 |\n", - "| jpsi_s | 0.218 0.231 -0.166 0.091 0.204 0.159 -0.157 0.127 -0.050 -0.291 1.000 0.027 0.190 0.014 0.030 |\n", - "| psi2s_s | 0.050 0.058 -0.054 -0.035 0.071 0.037 -0.051 0.083 -0.017 -0.072 0.027 1.000 0.043 0.101 -0.015 |\n", - "| b0_0 | 0.606 0.555 -0.510 0.233 0.459 0.531 -0.472 0.369 -0.163 -0.750 0.190 0.043 1.000 -0.050 0.063 |\n", - "| Dbar_s | 0.008 -0.138 0.024 0.237 -0.271 -0.001 0.036 -0.222 -0.002 0.087 0.014 0.101 -0.050 1.000 0.141 |\n", - "| jpsi_p | 0.041 0.083 -0.072 -0.037 0.105 0.029 -0.070 0.162 -0.020 -0.079 0.030 -0.015 0.063 0.141 1.000 |\n", - "-------------------------------------------------------------------------------------------------------------------------------------\n", - "Hesse errors: OrderedDict([(, {'error': 3.7497478938564335}), (, {'error': 2.583900371125427}), (, {'error': 0.05116452428878748}), (, {'error': 0.8048991558989059}), (, {'error': 0.09051918266368353}), (, {'error': 2.8398689024624773}), (, {'error': 0.008312746297318485}), (, {'error': 0.14518466085144688}), (, {'error': 0.28009841873882135}), (, {'error': 2.127901204620494}), (, {'error': 151.85677990046224}), (, {'error': 44.596492883806036}), (, {'error': 0.7563153884664282}), (, {'error': 0.20862304880841087}), (, {'error': 0.5512466145330324})])\n", - "Toy 1/5\n", - "Time taken: 4 min, 31 s\n", - "Projected time left: 18 min, 6 s\n", - "Toy 1: Generating data...\n" + "Toy 0: Fitting pdf...\n" ] }, { - "ename": "KeyboardInterrupt", - "evalue": "", + "ename": "RuntimeError", + "evalue": "exception was raised in user function\nUser function arguments:\n p3770_s = +1.999020\n p4160_s = +2.376152\n p4040_p = -4.437832\n p4040_s = +1.423904\n Dbar_s = +0.342445\n p4160_p = +4.897009\n p4415_p = +4.364139\n p4415_s = +1.177263\n Ctt = -0.212905\n bplus_0 = -0.141110\n psi2s_p = -2.316177\n p3770_p = +0.511010\n bplus_2 = -1.674701\n jpsi_p = +4.878201\n bplus_1 = +1.591894\nOriginal python exception in user function:\nInternalError: Dst tensor is not initialized.\n\t [[node model_2/_call_unnormalized_pdf/Sqrt_27 (defined at :4) ]]\n\t [[node gradients_1/AddN_11 (defined at C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py:220) ]]\n\nCaused by op 'model_2/_call_unnormalized_pdf/Sqrt_27', defined at:\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\runpy.py\", line 193, in _run_module_as_main\n \"__main__\", mod_spec)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\runpy.py\", line 85, in _run_code\n exec(code, run_globals)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in \n app.launch_new_instance()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n app.start()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n self.io_loop.start()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n self.asyncio_loop.run_forever()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n self._run_once()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n handle._run()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\asyncio\\events.py\", line 88, in _run\n self._context.run(self._callback, *self._args)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in \n lambda f: self._run_callback(functools.partial(callback, future))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n ret = callback()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 781, in inner\n self.run()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 742, in run\n yielded = self.gen.send(value)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n yield gen.maybe_future(dispatch(*args))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n yielded = next(result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n yield gen.maybe_future(handler(stream, idents, msg))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n yielded = next(result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n user_expressions, allow_stdin,\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n yielded = next(result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n res = shell.run_cell(code, store_history=store_history, silent=silent)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2848, in run_cell\n raw_cell, store_history, silent, shell_futures)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2874, in _run_cell\n return runner(coro)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 67, in _pseudo_sync_runner\n coro.send(None)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3049, in run_cell_async\n interactivity=interactivity, compiler=compiler, result=result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3214, in run_ast_nodes\n if (yield from self.run_code(code, result)):\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3296, in run_code\n exec(code_obj, self.user_global_ns, self.user_ns)\n File \"\", line 71, in \n result = minimizer.minimize(nll)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\", line 207, in minimize\n return self._hook_minimize(loss=loss, params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\", line 216, in _hook_minimize\n return self._call_minimize(loss=loss, params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\", line 220, in _call_minimize\n return self._minimize(loss=loss, params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\minimizer_minuit.py\", line 48, in _minimize\n gradients = loss.gradients(params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 158, in gradients\n return self._gradients(params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 251, in _gradients\n gradients = {(p, grad) for p, grad in zip(params_todo, super()._gradients(params_todo))}\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 220, in _gradients\n return tf.gradients(self.value(), params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 198, in value\n return self._value()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 234, in _value\n loss = super()._value()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 203, in _value\n constraints=self.constraints)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 266, in _loss_func\n nll = _unbinned_nll_tf(model=model, data=data, fit_range=fit_range)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 39, in _unbinned_nll_tf\n for p, d, r in zip(model, data, fit_range)]\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 39, in \n for p, d, r in zip(model, data, fit_range)]\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 43, in _unbinned_nll_tf\n probs = model.pdf(data, norm_range=fit_range)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 314, in pdf\n value = self._single_hook_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 324, in _single_hook_pdf\n return self._hook_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 327, in _hook_pdf\n return self._norm_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 330, in _norm_pdf\n return self._call_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 338, in _call_pdf\n return self._fallback_pdf(x=x, norm_range=norm_range)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 341, in _fallback_pdf\n pdf = self._call_unnormalized_pdf(x, name=\"_call_unnormalized_pdf\")\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 289, in _call_unnormalized_pdf\n return self._unnormalized_pdf(x)\n File \"\", line 73, in _unnormalized_pdf\n funcs = rho_res(x) + omega_res(x) + phi_res(x) + jpsi_res(x) + psi2s_res(x) + p3770_res(x) + p4040_res(x)+ p4160_res(x) + p4415_res(x) + P2_D(x) + ttau_cusp(x)\n File \"\", line 70, in ttau_cusp\n return ztf.to_complex(self.params['C_tt'])*(ztf.to_complex((h_S(self.params['tau_mass'], q))) - ztf.to_complex(h_P(self.params['tau_mass'], q)))\n File \"\", line 15, in h_S\n return ztf.to_complex(2) - G(ztf.to_complex(1) - ztf.to_complex(4*tf.pow(m, 2)) / ztf.to_complex(tf.pow(q, 2)))\n File \"\", line 9, in G\n big_bracket = tf.where(tf.math.real(y) > ztf.constant(0.0), inner_rect_bracket(y), inner_right(y))\n File \"\", line 4, in inner_rect_bracket\n return tf.log(ztf.to_complex((1+tf.sqrt(q))/(1-tf.sqrt(q)))-tf.complex(ztf.constant(0), -1*ztf.constant(np.pi)))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\ops\\gen_math_ops.py\", line 9251, in sqrt\n \"Sqrt\", x=x, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\framework\\op_def_library.py\", line 788, in _apply_op_helper\n op_def=op_def)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\util\\deprecation.py\", line 507, in new_func\n return func(*args, **kwargs)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\framework\\ops.py\", line 3300, in create_op\n op_def=op_def)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\framework\\ops.py\", line 1801, in __init__\n self._traceback = tf_stack.extract_stack()\n\nInternalError (see above for traceback): Dst tensor is not initialized.\n\t [[node model_2/_call_unnormalized_pdf/Sqrt_27 (defined at :4) ]]\n\t [[node gradients_1/AddN_11 (defined at C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py:220) ]]\n\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\minimizer_minuit.py\", line 116, in grad_func\n gradients_values = self.sess.run(gradients)\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 1348, in _do_call\n raise type(e)(node_def, op, message)\n", "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 31\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 32\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 33\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 34\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 35\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;32m~\\.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 637\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 638\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--> 639\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 640\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 641\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m~\\.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;32m~\\.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;32m~\\.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;32m~\\.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;32m~\\.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;32m~\\.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: " + "\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 69\u001b[0m \u001b[0mminimizer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mzfit\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mminimize\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mMinuitMinimizer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mverbosity\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 70\u001b[0m \u001b[1;31m# minimizer._use_tfgrad = False\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 71\u001b[1;33m \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[0m\u001b[0;32m 72\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 73\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Toy {}: Fitting finished\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtoy\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~\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\u001b[0m in \u001b[0;36mminimize\u001b[1;34m(self, loss, params)\u001b[0m\n\u001b[0;32m 205\u001b[0m \u001b[0mtuple\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstack\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menter_context\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparam\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_sess\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;32mfor\u001b[0m \u001b[0mparam\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 206\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--> 207\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_hook_minimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mloss\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mloss\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[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 208\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mFailMinimizeNaN\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mRuntimeError\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0merror\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;31m# iminuit raises RuntimeError if user raises Error\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 209\u001b[0m \u001b[0mfail_result\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstrategy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfit_result\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\u001b[0m in \u001b[0;36m_hook_minimize\u001b[1;34m(self, loss, params)\u001b[0m\n\u001b[0;32m 214\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 215\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_hook_minimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mloss\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\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--> 216\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_call_minimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mloss\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mloss\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[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 217\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 218\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_call_minimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mloss\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\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~\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\u001b[0m in \u001b[0;36m_call_minimize\u001b[1;34m(self, loss, params)\u001b[0m\n\u001b[0;32m 218\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_call_minimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mloss\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\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 219\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--> 220\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_minimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mloss\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mloss\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[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 221\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mNotImplementedError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0merror\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 222\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~\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\minimizer_minuit.py\u001b[0m in \u001b[0;36m_minimize\u001b[1;34m(self, loss, params)\u001b[0m\n\u001b[0;32m 136\u001b[0m minimizer_setter)\n\u001b[0;32m 137\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_minuit_minimizer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mminimizer\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 138\u001b[1;33m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mminimizer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmigrad\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m**\u001b[0m\u001b[0mminimize_options\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 139\u001b[0m \u001b[0mparams_result\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mp_dict\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mp_dict\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\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 140\u001b[0m \u001b[0mresult_vals\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mres\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"value\"\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mres\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mparams_result\u001b[0m\u001b[1;33m]\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.migrad\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mRuntimeError\u001b[0m: exception was raised in user function\nUser function arguments:\n p3770_s = +1.999020\n p4160_s = +2.376152\n p4040_p = -4.437832\n p4040_s = +1.423904\n Dbar_s = +0.342445\n p4160_p = +4.897009\n p4415_p = +4.364139\n p4415_s = +1.177263\n Ctt = -0.212905\n bplus_0 = -0.141110\n psi2s_p = -2.316177\n p3770_p = +0.511010\n bplus_2 = -1.674701\n jpsi_p = +4.878201\n bplus_1 = +1.591894\nOriginal python exception in user function:\nInternalError: Dst tensor is not initialized.\n\t [[node model_2/_call_unnormalized_pdf/Sqrt_27 (defined at :4) ]]\n\t [[node gradients_1/AddN_11 (defined at C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py:220) ]]\n\nCaused by op 'model_2/_call_unnormalized_pdf/Sqrt_27', defined at:\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\runpy.py\", line 193, in _run_module_as_main\n \"__main__\", mod_spec)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\runpy.py\", line 85, in _run_code\n exec(code, run_globals)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in \n app.launch_new_instance()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n app.start()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n self.io_loop.start()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n self.asyncio_loop.run_forever()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n self._run_once()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n handle._run()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\asyncio\\events.py\", line 88, in _run\n self._context.run(self._callback, *self._args)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in \n lambda f: self._run_callback(functools.partial(callback, future))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n ret = callback()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 781, in inner\n self.run()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 742, in run\n yielded = self.gen.send(value)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n yield gen.maybe_future(dispatch(*args))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n yielded = next(result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n yield gen.maybe_future(handler(stream, idents, msg))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n yielded = next(result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n user_expressions, allow_stdin,\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n yielded = next(result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n res = shell.run_cell(code, store_history=store_history, silent=silent)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2848, in run_cell\n raw_cell, store_history, silent, shell_futures)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2874, in _run_cell\n return runner(coro)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 67, in _pseudo_sync_runner\n coro.send(None)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3049, in run_cell_async\n interactivity=interactivity, compiler=compiler, result=result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3214, in run_ast_nodes\n if (yield from self.run_code(code, result)):\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3296, in run_code\n exec(code_obj, self.user_global_ns, self.user_ns)\n File \"\", line 71, in \n result = minimizer.minimize(nll)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\", line 207, in minimize\n return self._hook_minimize(loss=loss, params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\", line 216, in _hook_minimize\n return self._call_minimize(loss=loss, params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\", line 220, in _call_minimize\n return self._minimize(loss=loss, params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\minimizer_minuit.py\", line 48, in _minimize\n gradients = loss.gradients(params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 158, in gradients\n return self._gradients(params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 251, in _gradients\n gradients = {(p, grad) for p, grad in zip(params_todo, super()._gradients(params_todo))}\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 220, in _gradients\n return tf.gradients(self.value(), params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 198, in value\n return self._value()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 234, in _value\n loss = super()._value()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 203, in _value\n constraints=self.constraints)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 266, in _loss_func\n nll = _unbinned_nll_tf(model=model, data=data, fit_range=fit_range)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 39, in _unbinned_nll_tf\n for p, d, r in zip(model, data, fit_range)]\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 39, in \n for p, d, r in zip(model, data, fit_range)]\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 43, in _unbinned_nll_tf\n probs = model.pdf(data, norm_range=fit_range)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 314, in pdf\n value = self._single_hook_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 324, in _single_hook_pdf\n return self._hook_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 327, in _hook_pdf\n return self._norm_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 330, in _norm_pdf\n return self._call_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 338, in _call_pdf\n return self._fallback_pdf(x=x, norm_range=norm_range)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 341, in _fallback_pdf\n pdf = self._call_unnormalized_pdf(x, name=\"_call_unnormalized_pdf\")\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 289, in _call_unnormalized_pdf\n return self._unnormalized_pdf(x)\n File \"\", line 73, in _unnormalized_pdf\n funcs = rho_res(x) + omega_res(x) + phi_res(x) + jpsi_res(x) + psi2s_res(x) + p3770_res(x) + p4040_res(x)+ p4160_res(x) + p4415_res(x) + P2_D(x) + ttau_cusp(x)\n File \"\", line 70, in ttau_cusp\n return ztf.to_complex(self.params['C_tt'])*(ztf.to_complex((h_S(self.params['tau_mass'], q))) - ztf.to_complex(h_P(self.params['tau_mass'], q)))\n File \"\", line 15, in h_S\n return ztf.to_complex(2) - G(ztf.to_complex(1) - ztf.to_complex(4*tf.pow(m, 2)) / ztf.to_complex(tf.pow(q, 2)))\n File \"\", line 9, in G\n big_bracket = tf.where(tf.math.real(y) > ztf.constant(0.0), inner_rect_bracket(y), inner_right(y))\n File \"\", line 4, in inner_rect_bracket\n return tf.log(ztf.to_complex((1+tf.sqrt(q))/(1-tf.sqrt(q)))-tf.complex(ztf.constant(0), -1*ztf.constant(np.pi)))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\ops\\gen_math_ops.py\", line 9251, in sqrt\n \"Sqrt\", x=x, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\framework\\op_def_library.py\", line 788, in _apply_op_helper\n op_def=op_def)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\util\\deprecation.py\", line 507, in new_func\n return func(*args, **kwargs)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\framework\\ops.py\", line 3300, in create_op\n op_def=op_def)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\framework\\ops.py\", line 1801, in __init__\n self._traceback = tf_stack.extract_stack()\n\nInternalError (see above for traceback): Dst tensor is not initialized.\n\t [[node model_2/_call_unnormalized_pdf/Sqrt_27 (defined at :4) ]]\n\t [[node gradients_1/AddN_11 (defined at C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py:220) ]]\n\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\minimizer_minuit.py\", line 116, in grad_func\n gradients_values = self.sess.run(gradients)\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 1348, in _do_call\n raise type(e)(node_def, op, message)\n" ] } ], @@ -1445,7 +1458,7 @@ "Ctt_list = []\n", "Ctt_error_list = []\n", "\n", - "nr_of_toys = 5\n", + "nr_of_toys = 1\n", "nevents = int(pdg[\"number_of_decays\"])\n", "nevents = pdg[\"number_of_decays\"]\n", "event_stack = 1000000\n", @@ -1506,7 +1519,7 @@ " for param in total_f.get_dependents():\n", " param.randomize()\n", "\n", - " nll = zfit.loss.UnbinnedNLL(model=total_f, data=data, fit_range = (jpsi_mass+50.0, psi2s_mass-50.0))\n", + " nll = zfit.loss.UnbinnedNLL(model=total_f, data=data, fit_range = (x_min, x_max))\n", "\n", " minimizer = zfit.minimize.MinuitMinimizer(verbosity = 5)\n", " # minimizer._use_tfgrad = False\n", @@ -1535,18 +1548,9 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Mean Ctt value = -0.4999046298846563\n", - "Mean Ctt error = 0.8048991558989059\n" - ] - } - ], + "outputs": [], "source": [ "print('Mean Ctt value = {}'.format(np.mean(Ctt_list)))\n", "print('Mean Ctt error = {}'.format(np.mean(Ctt_error_list)))" @@ -1554,22 +1558,9 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "calcs_test = zfit.run(probs)\n", "res_y = zfit.run(jpsi_res(test_q))\n", @@ -1581,7 +1572,7 @@ "# plt.plot(test_q, fplus_y, label = '+')\n", "# plt.plot(test_q, res_y, label = 'res')\n", "plt.legend()\n", - "plt.ylim(0.0, 6e-5)\n", + "plt.ylim(0.0, 6e-6)\n", "# plt.yscale('log')\n", "# plt.xlim(770, 785)\n", "plt.savefig('test2.png')" diff --git a/.ipynb_checkpoints/raremodel-nb_0.1-checkpoint.ipynb b/.ipynb_checkpoints/raremodel-nb_0.1-checkpoint.ipynb new file mode 100644 index 0000000..c766dc9 --- /dev/null +++ b/.ipynb_checkpoints/raremodel-nb_0.1-checkpoint.ipynb @@ -0,0 +1,1464 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Import" + ] + }, + { + "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:57: 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 os\n", + "\n", + "# os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"-1\"\n", + "\n", + "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\n", + "import tensorflow_probability as tfp\n", + "tfd = tfp.distributions" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# chunksize = 10000\n", + "# zfit.run.chunking.active = True\n", + "# zfit.run.chunking.max_n_points = chunksize" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Build model and graphs\n", + "## Create graphs" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "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 = ztf.constant(pdg['Ks_M'])\n", + " mbstar0 = ztf.constant(pdg[\"mbstar0\"])\n", + " mbstar = ztf.constant(pdg[\"mbstar\"])\n", + " b0 = ztf.constant(pdg[\"b0\"])\n", + " bplus = ztf.constant(pdg[\"bplus\"])\n", + " bT = ztf.constant(pdg[\"bT\"])\n", + "\n", + " mmu = ztf.constant(pdg['muon_M'])\n", + " mb = ztf.constant(pdg['bquark_M'])\n", + " ms = ztf.constant(pdg['squark_M'])\n", + " mB = ztf.constant(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, q) * _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" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def G(y):\n", + " \n", + " def inner_rect_bracket(q):\n", + " return tf.log(ztf.to_complex((1+tf.sqrt(q))/(1-tf.sqrt(q)))-tf.complex(ztf.constant(0), -1*ztf.constant(np.pi))) \n", + " \n", + " def inner_right(q):\n", + " return ztf.to_complex(2 * tf.atan(1/tf.sqrt(tf.math.real(-q))))\n", + " \n", + " big_bracket = tf.where(tf.math.real(y) > ztf.constant(0.0), inner_rect_bracket(y), inner_right(y))\n", + " \n", + " return ztf.to_complex(tf.sqrt(tf.abs(y))) * big_bracket\n", + "\n", + "def h_S(m, q):\n", + " \n", + " return ztf.to_complex(2) - G(ztf.to_complex(1) - ztf.to_complex(4*tf.pow(m, 2)) / ztf.to_complex(tf.pow(q, 2)))\n", + "\n", + "def h_P(m, q):\n", + " \n", + " return ztf.to_complex(2/3) + (ztf.to_complex(1) - ztf.to_complex(4*tf.pow(m, 2)) / ztf.to_complex(tf.pow(q, 2))) * h_S(m,q)\n", + "\n", + "def two_p_ccbar(mD, m_D_bar, m_D_star, q):\n", + " \n", + " \n", + " #Load constants\n", + " nu_D_bar = ztf.to_complex(pdg[\"nu_D_bar\"])\n", + " nu_D = ztf.to_complex(pdg[\"nu_D\"])\n", + " nu_D_star = ztf.to_complex(pdg[\"nu_D_star\"])\n", + " \n", + " phase_D_bar = ztf.to_complex(pdg[\"phase_D_bar\"])\n", + " phase_D = ztf.to_complex(pdg[\"phase_D\"])\n", + " phase_D_star = ztf.to_complex(pdg[\"phase_D_star\"])\n", + " \n", + " #Calculation\n", + " left_part = nu_D_bar * tf.exp(tf.complex(ztf.constant(0.0), phase_D_bar)) * h_S(m_D_bar, q) \n", + " \n", + " right_part_D = nu_D * tf.exp(tf.complex(ztf.constant(0.0), phase_D)) * h_P(m_D, q) \n", + " \n", + " right_part_D_star = nu_D_star * tf.exp(tf.complex(ztf.constant(0.0), phase_D_star)) * h_P(m_D_star, q) \n", + "\n", + " return left_part + right_part_D + right_part_D_star" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## C_q,qbar constraint" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# r = rho_scale * rho_width/rho_mass * np.cos(rho_phase)*(1-np.tan(rho_phase)*rho_width/rho_mass)\n", + "# o = omega_scale*np.cos(omega_phase)*omega_width/omega_mass\n", + "# p = phi_scale*np.cos(phi_phase)*phi_width/phi_mass\n", + "\n", + "# # phi_s = np.linspace(-500, 5000, 100000)\n", + "\n", + "# # p_ = phi_s*np.cos(phi_phase)*phi_width/phi_mass\n", + "\n", + "# # p_y = r+o+p_\n", + "\n", + "# # plt.plot(phi_s, p_y)\n", + "\n", + "# print(r + o + p)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Build pdf" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "class total_pdf(zfit.pdf.ZPDF):\n", + " _N_OBS = 1 # dimension, can be omitted\n", + " _PARAMS = ['rho_mass', 'rho_scale', 'rho_phase', 'rho_width',\n", + " 'jpsi_mass', 'jpsi_scale', 'jpsi_phase', 'jpsi_width',\n", + " 'psi2s_mass', 'psi2s_scale', 'psi2s_phase', 'psi2s_width',\n", + " 'p3770_mass', 'p3770_scale', 'p3770_phase', 'p3770_width',\n", + " 'p4040_mass', 'p4040_scale', 'p4040_phase', 'p4040_width',\n", + " 'p4160_mass', 'p4160_scale', 'p4160_phase', 'p4160_width',\n", + " 'p4415_mass', 'p4415_scale', 'p4415_phase', 'p4415_width',\n", + " 'omega_mass', 'omega_scale', 'omega_phase', 'omega_width',\n", + " 'phi_mass', 'phi_scale', 'phi_phase', 'phi_width',\n", + " 'Dbar_mass', 'Dbar_scale', 'Dbar_phase',\n", + " 'DDstar_mass', 'DDstar_scale', 'DDstar_phase',\n", + " 'tau_mass', 'C_tt']\n", + "# the name of the parameters\n", + "\n", + " def _unnormalized_pdf(self, x):\n", + " \n", + " x = x.unstack_x()\n", + " \n", + " def rho_res(q):\n", + " return resonance(q, _mass = self.params['rho_mass'], scale = self.params['rho_scale'],\n", + " phase = self.params['rho_phase'], width = self.params['rho_width'])\n", + " \n", + " def omega_res(q):\n", + " return resonance(q, _mass = self.params['omega_mass'], scale = self.params['omega_scale'],\n", + " phase = self.params['omega_phase'], width = self.params['omega_width'])\n", + " \n", + " def phi_res(q):\n", + " return resonance(q, _mass = self.params['phi_mass'], scale = self.params['phi_scale'],\n", + " phase = self.params['phi_phase'], width = self.params['phi_width'])\n", + "\n", + " def jpsi_res(q):\n", + " return resonance(q, _mass = self.params['jpsi_mass'], scale = self.params['jpsi_scale'],\n", + " phase = self.params['jpsi_phase'], width = self.params['jpsi_width'])\n", + "\n", + " def psi2s_res(q):\n", + " return resonance(q, _mass = self.params['psi2s_mass'], scale = self.params['psi2s_scale'],\n", + " phase = self.params['psi2s_phase'], width = self.params['psi2s_width'])\n", + " \n", + " def p3770_res(q):\n", + " return resonance(q, _mass = self.params['p3770_mass'], scale = self.params['p3770_scale'],\n", + " phase = self.params['p3770_phase'], width = self.params['p3770_width'])\n", + " \n", + " def p4040_res(q):\n", + " return resonance(q, _mass = self.params['p4040_mass'], scale = self.params['p4040_scale'],\n", + " phase = self.params['p4040_phase'], width = self.params['p4040_width'])\n", + " \n", + " def p4160_res(q):\n", + " return resonance(q, _mass = self.params['p4160_mass'], scale = self.params['p4160_scale'],\n", + " phase = self.params['p4160_phase'], width = self.params['p4160_width'])\n", + " \n", + " def p4415_res(q):\n", + " return resonance(q, _mass = self.params['p4415_mass'], scale = self.params['p4415_scale'],\n", + " phase = self.params['p4415_phase'], width = self.params['p4415_width'])\n", + " \n", + " def P2_D(q):\n", + " Dbar_contrib = ztf.to_complex(self.params['Dbar_scale'])*tf.exp(tf.complex(ztf.constant(0.0), self.params['Dbar_phase']))*ztf.to_complex(h_S(self.params['Dbar_mass'], q))\n", + " DDstar_contrib = ztf.to_complex(self.params['DDstar_scale'])*tf.exp(tf.complex(ztf.constant(0.0), self.params['DDstar_phase']))*ztf.to_complex(h_P(self.params['DDstar_mass'], q))\n", + " return Dbar_contrib + DDstar_contrib\n", + " \n", + " def ttau_cusp(q):\n", + " return ztf.to_complex(self.params['C_tt'])*(ztf.to_complex((h_S(self.params['tau_mass'], q))) - ztf.to_complex(h_P(self.params['tau_mass'], q)))\n", + " \n", + "\n", + " funcs = rho_res(x) + omega_res(x) + phi_res(x) + jpsi_res(x) + psi2s_res(x) + p3770_res(x) + p4040_res(x)+ p4160_res(x) + p4415_res(x) + P2_D(x) + ttau_cusp(x)\n", + "\n", + " vec_f = vec(x, 0.0 * funcs)\n", + "\n", + " axiv_nr = axiv_nonres(x)\n", + "\n", + " tot = vec_f + axiv_nr\n", + "\n", + " return tot" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load data" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "x_min = 2*pdg['muon_M']\n", + "x_max = (pdg[\"Bplus_M\"]-pdg[\"Ks_M\"]-0.1)\n", + "\n", + "obs = zfit.Space('q', limits = (x_min, x_max))\n", + "\n", + "# with open(r\"./data/slim_points/slim_points_toy_0_range({0}-{1}).pkl\".format(int(x_min), int(x_max)), \"rb\") as input_file:\n", + "# part_set = pkl.load(input_file)\n", + "\n", + "# x_part = part_set['x_part']\n", + "\n", + "# x_part = x_part.astype('float64')\n", + "\n", + "# data = zfit.data.Data.from_numpy(array=x_part, obs=obs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\ops\\resource_variable_ops.py:435: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Colocations handled automatically by placer.\n" + ] + } + ], + "source": [ + "#rho\n", + "\n", + "rho_mass, rho_width, rho_phase, rho_scale = pdg[\"rho\"]\n", + "\n", + "rho_m = zfit.Parameter(\"rho_m\", ztf.constant(rho_mass), floating = False) #lower_limit = rho_mass - rho_width,\n", + "# upper_limit = rho_mass + rho_width)\n", + "rho_w = zfit.Parameter(\"rho_w\", ztf.constant(rho_width), floating = False)\n", + "rho_p = zfit.Parameter(\"rho_p\", ztf.constant(rho_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "rho_s = zfit.Parameter(\"rho_s\", ztf.constant(rho_scale), floating = False) #, lower_limit=rho_scale-np.sqrt(rho_scale), upper_limit=rho_scale+np.sqrt(rho_scale))\n", + "\n", + "#omega\n", + "\n", + "omega_mass, omega_width, omega_phase, omega_scale = pdg[\"omega\"]\n", + "\n", + "omega_m = zfit.Parameter(\"omega_m\", ztf.constant(omega_mass), floating = False)\n", + "omega_w = zfit.Parameter(\"omega_w\", ztf.constant(omega_width), floating = False)\n", + "omega_p = zfit.Parameter(\"omega_p\", ztf.constant(omega_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "omega_s = zfit.Parameter(\"omega_s\", ztf.constant(omega_scale), floating = False) #, lower_limit=omega_scale-np.sqrt(omega_scale), upper_limit=omega_scale+np.sqrt(omega_scale))\n", + "\n", + "\n", + "#phi\n", + "\n", + "phi_mass, phi_width, phi_phase, phi_scale = pdg[\"phi\"]\n", + "\n", + "phi_m = zfit.Parameter(\"phi_m\", ztf.constant(phi_mass), floating = False)\n", + "phi_w = zfit.Parameter(\"phi_w\", ztf.constant(phi_width), floating = False)\n", + "phi_p = zfit.Parameter(\"phi_p\", ztf.constant(phi_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "phi_s = zfit.Parameter(\"phi_s\", ztf.constant(phi_scale), floating = False) #, lower_limit=phi_scale-np.sqrt(phi_scale), upper_limit=phi_scale+np.sqrt(phi_scale))\n", + "\n", + "#jpsi\n", + "\n", + "jpsi_mass, jpsi_width, jpsi_phase, jpsi_scale = pdg[\"jpsi\"]\n", + "# jpsi_scale *= pdg[\"factor_jpsi\"]\n", + "\n", + "jpsi_m = zfit.Parameter(\"jpsi_m\", ztf.constant(jpsi_mass), floating = False)\n", + "jpsi_w = zfit.Parameter(\"jpsi_w\", ztf.constant(jpsi_width), floating = False)\n", + "jpsi_p = zfit.Parameter(\"jpsi_p\", ztf.constant(jpsi_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "jpsi_s = zfit.Parameter(\"jpsi_s\", ztf.constant(jpsi_scale), lower_limit=jpsi_scale-np.sqrt(jpsi_scale), upper_limit=jpsi_scale+np.sqrt(jpsi_scale))\n", + "\n", + "#psi2s\n", + "\n", + "psi2s_mass, psi2s_width, psi2s_phase, psi2s_scale = pdg[\"psi2s\"]\n", + "\n", + "psi2s_m = zfit.Parameter(\"psi2s_m\", ztf.constant(psi2s_mass), floating = False)\n", + "psi2s_w = zfit.Parameter(\"psi2s_w\", ztf.constant(psi2s_width), floating = False)\n", + "psi2s_p = zfit.Parameter(\"psi2s_p\", ztf.constant(psi2s_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "psi2s_s = zfit.Parameter(\"psi2s_s\", ztf.constant(psi2s_scale), lower_limit=psi2s_scale-np.sqrt(psi2s_scale), upper_limit=psi2s_scale+np.sqrt(psi2s_scale))\n", + "\n", + "#psi(3770)\n", + "\n", + "p3770_mass, p3770_width, p3770_phase, p3770_scale = pdg[\"p3770\"]\n", + "\n", + "p3770_m = zfit.Parameter(\"p3770_m\", ztf.constant(p3770_mass), floating = False)\n", + "p3770_w = zfit.Parameter(\"p3770_w\", ztf.constant(p3770_width), floating = False)\n", + "p3770_p = zfit.Parameter(\"p3770_p\", ztf.constant(p3770_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p3770_s = zfit.Parameter(\"p3770_s\", ztf.constant(p3770_scale), floating = False) #, lower_limit=p3770_scale-np.sqrt(p3770_scale), upper_limit=p3770_scale+np.sqrt(p3770_scale))\n", + "\n", + "#psi(4040)\n", + "\n", + "p4040_mass, p4040_width, p4040_phase, p4040_scale = pdg[\"p4040\"]\n", + "\n", + "p4040_m = zfit.Parameter(\"p4040_m\", ztf.constant(p4040_mass), floating = False)\n", + "p4040_w = zfit.Parameter(\"p4040_w\", ztf.constant(p4040_width), floating = False)\n", + "p4040_p = zfit.Parameter(\"p4040_p\", ztf.constant(p4040_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p4040_s = zfit.Parameter(\"p4040_s\", ztf.constant(p4040_scale), floating = False) #, lower_limit=p4040_scale-np.sqrt(p4040_scale), upper_limit=p4040_scale+np.sqrt(p4040_scale))\n", + "\n", + "#psi(4160)\n", + "\n", + "p4160_mass, p4160_width, p4160_phase, p4160_scale = pdg[\"p4160\"]\n", + "\n", + "p4160_m = zfit.Parameter(\"p4160_m\", ztf.constant(p4160_mass), floating = False)\n", + "p4160_w = zfit.Parameter(\"p4160_w\", ztf.constant(p4160_width), floating = False)\n", + "p4160_p = zfit.Parameter(\"p4160_p\", ztf.constant(p4160_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p4160_s = zfit.Parameter(\"p4160_s\", ztf.constant(p4160_scale), floating = False) #, lower_limit=p4160_scale-np.sqrt(p4160_scale), upper_limit=p4160_scale+np.sqrt(p4160_scale))\n", + "\n", + "#psi(4415)\n", + "\n", + "p4415_mass, p4415_width, p4415_phase, p4415_scale = pdg[\"p4415\"]\n", + "\n", + "p4415_m = zfit.Parameter(\"p4415_m\", ztf.constant(p4415_mass), floating = False)\n", + "p4415_w = zfit.Parameter(\"p4415_w\", ztf.constant(p4415_width), floating = False)\n", + "p4415_p = zfit.Parameter(\"p4415_p\", ztf.constant(p4415_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p4415_s = zfit.Parameter(\"p4415_s\", ztf.constant(p4415_scale), floating = False) #, lower_limit=p4415_scale-np.sqrt(p4415_scale), upper_limit=p4415_scale+np.sqrt(p4415_scale))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dynamic generation of 2 particle contribution" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "_0 = jpsi_scale*np.cos(jpsi_phase)*jpsi_width/jpsi_mass**3 + psi2s_scale*np.cos(psi2s_phase)*psi2s_width/psi2s_mass**3\n", + "_1 = p3770_scale*np.cos(p3770_phase)*p3770_width/p3770_mass**3 + p4040_scale*np.cos(p4040_phase)*p4040_width/p4040_mass**3\n", + "_2 = p4160_scale*np.cos(p4160_phase)*p4160_width/p4160_mass**3 + p4415_scale*np.cos(p4415_phase)*p4415_width/p4415_mass**3\n", + "\n", + "C_pert = np.random.uniform(0.03, 0.1)\n", + "# c_pert = 0.1\n", + "m_c = 1300\n", + "\n", + "cDDstar_phase = 10\n", + "\n", + "\n", + "DDstar_eta = 0\n", + "Dbar_phase = np.random.uniform(0.0, 2*np.pi)\n", + "DDstar_phase = np.random.uniform(0.0, 2*np.pi)\n", + "DDstar_mass = pdg['D0_M']\n", + "\n", + "if Dbar_phase < np.pi:\n", + " Dbar_phase = 0.0\n", + "else:\n", + " Dbar_phase = np.pi\n", + "\n", + "R = (C_pert/(m_c**2) - ((_0 + _1 + _2)))\n", + "\n", + "Dbar_mass = (pdg['D0_M']+pdg['Dst_M'])/2\n", + "\n", + "Dbar_eta = R/np.cos(Dbar_phase)*(6*Dbar_mass**2)\n", + "\n", + "# print(np.cos(Dbar_phase))\n", + "\n", + "# cDDstar_phase = R_*10*DDstar_mass**2/DDstar_eta\n", + "\n", + "\n", + "# print(Dbar_eta)\n", + "\n", + "\n", + "Dbar_s = zfit.Parameter(\"Dbar_s\", ztf.constant(Dbar_eta), lower_limit=-1.464, upper_limit=1.464)\n", + "Dbar_m = zfit.Parameter(\"Dbar_m\", ztf.constant(Dbar_mass), floating = False)\n", + "Dbar_p = zfit.Parameter(\"Dbar_p\", ztf.constant(Dbar_phase), floating = False)\n", + "DDstar_s = zfit.Parameter(\"DDstar_s\", ztf.constant(DDstar_eta), floating = False)\n", + "DDstar_m = zfit.Parameter(\"DDstar_m\", ztf.constant(DDstar_mass), floating = False)\n", + "DDstar_p = zfit.Parameter(\"DDstar_p\", ztf.constant(DDstar_phase), floating = False)\n", + "\n", + "Dbar_s.set_value(0.0)\n", + "DDstar_s.set_value(0.0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Tau parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "tau_m = zfit.Parameter(\"tau_m\", ztf.constant(pdg['tau_M']), floating = False)\n", + "Ctt = zfit.Parameter(\"Ctt\", ztf.constant(0.0), lower_limit=-0.5, upper_limit=0.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup pdf" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "total_f = total_pdf(obs=obs, jpsi_mass = jpsi_m, jpsi_scale = jpsi_s, jpsi_phase = jpsi_p, jpsi_width = jpsi_w,\n", + " psi2s_mass = psi2s_m, psi2s_scale = psi2s_s, psi2s_phase = psi2s_p, psi2s_width = psi2s_w,\n", + " p3770_mass = p3770_m, p3770_scale = p3770_s, p3770_phase = p3770_p, p3770_width = p3770_w,\n", + " p4040_mass = p4040_m, p4040_scale = p4040_s, p4040_phase = p4040_p, p4040_width = p4040_w,\n", + " p4160_mass = p4160_m, p4160_scale = p4160_s, p4160_phase = p4160_p, p4160_width = p4160_w,\n", + " p4415_mass = p4415_m, p4415_scale = p4415_s, p4415_phase = p4415_p, p4415_width = p4415_w,\n", + " rho_mass = rho_m, rho_scale = rho_s, rho_phase = rho_p, rho_width = rho_w,\n", + " omega_mass = omega_m, omega_scale = omega_s, omega_phase = omega_p, omega_width = omega_w,\n", + " phi_mass = phi_m, phi_scale = phi_s, phi_phase = phi_p, phi_width = phi_w,\n", + " DDstar_mass = DDstar_m, DDstar_scale = DDstar_s, DDstar_phase = DDstar_p,\n", + " Dbar_mass = Dbar_m, Dbar_scale = Dbar_s, Dbar_phase = Dbar_p,\n", + " tau_mass = tau_m, C_tt = Ctt)\n", + " \n", + " \n", + "# print(total_pdf.obs)\n", + "\n", + "# print(calcs_test)\n", + "\n", + "# for param in total_f.get_dependents():\n", + "# print(zfit.run(param))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test if graphs actually work and compute values" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# def total_test_tf(xq):\n", + "\n", + "# def jpsi_res(q):\n", + "# return resonance(q, jpsi_m, jpsi_s, jpsi_p, jpsi_w)\n", + "\n", + "# 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 = jpsi_res(xq) + psi2s_res(xq) + cusp(xq)\n", + "\n", + "# vec_f = vec(xq, funcs)\n", + "\n", + "# axiv_nr = axiv_nonres(xq)\n", + "\n", + "# tot = vec_f + axiv_nr\n", + " \n", + "# return tot\n", + "\n", + "def jpsi_res(q):\n", + " return resonance(q, jpsi_m, jpsi_s, jpsi_p, jpsi_w)\n", + "\n", + "# calcs = zfit.run(total_test_tf(x_part))\n", + "\n", + "test_q = np.linspace(x_min, x_max, 200000)\n", + "\n", + "probs = total_f.pdf(test_q)\n", + "\n", + "calcs_test = zfit.run(probs)\n", + "res_y = zfit.run(jpsi_res(test_q))\n", + "f0_y = zfit.run(formfactor(test_q,\"0\"))\n", + "fplus_y = zfit.run(formfactor(test_q,\"+\"))\n", + "fT_y = zfit.run(formfactor(test_q,\"T\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.clf()\n", + "# plt.plot(x_part, calcs, '.')\n", + "plt.plot(test_q, calcs_test, label = 'pdf')\n", + "# plt.plot(test_q, f0_y, label = '0')\n", + "# plt.plot(test_q, fT_y, label = 'T')\n", + "# plt.plot(test_q, fplus_y, label = '+')\n", + "# plt.plot(test_q, res_y, label = 'res')\n", + "plt.legend()\n", + "# plt.ylim(0.0, 6e-6)\n", + "# plt.yscale('log')\n", + "# plt.xlim(770, 785)\n", + "plt.savefig('test.png')\n", + "# print(jpsi_width)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# probs = mixture.prob(test_q)\n", + "# probs_np = zfit.run(probs)\n", + "# probs_np *= np.max(calcs_test) / np.max(probs_np)\n", + "# plt.figure()\n", + "# plt.semilogy(test_q, probs_np,label=\"importance sampling\")\n", + "# plt.semilogy(test_q, calcs_test, label = 'pdf')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 0.213/(0.00133+0.213+0.015)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Adjust scaling of different parts" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "total_f.update_integration_options(draws_per_dim=200000, mc_sampler=None)\n", + "# inte = total_f.integrate(limits = (2000, x_max), norm_range=False)\n", + "# inte_fl = zfit.run(inte)\n", + "# print(inte_fl)\n", + "# print(pdg[\"jpsi_BR\"]/pdg[\"NR_BR\"], inte_fl*pdg[\"psi2s_auc\"]/pdg[\"NR_auc\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# # print(\"jpsi:\", inte_fl)\n", + "# # print(\"Increase am by factor:\", np.sqrt(pdg[\"jpsi_BR\"]/pdg[\"NR_BR\"]*pdg[\"NR_auc\"]/inte_fl))\n", + "# # print(\"New amp:\", pdg[\"jpsi\"][3]*np.sqrt(pdg[\"jpsi_BR\"]/pdg[\"NR_BR\"]*pdg[\"NR_auc\"]/inte_fl))\n", + "\n", + "# # print(\"psi2s:\", inte_fl)\n", + "# # print(\"Increase am by factor:\", np.sqrt(pdg[\"psi2s_BR\"]/pdg[\"NR_BR\"]*pdg[\"NR_auc\"]/inte_fl))\n", + "# # print(\"New amp:\", pdg[\"psi2s\"][3]*np.sqrt(pdg[\"psi2s_BR\"]/pdg[\"NR_BR\"]*pdg[\"NR_auc\"]/inte_fl))\n", + "\n", + "# name = \"phi\"\n", + "\n", + "# print(name+\":\", inte_fl)\n", + "# print(\"Increase am by factor:\", np.sqrt(pdg[name+\"_BR\"]/pdg[\"NR_BR\"]*pdg[\"NR_auc\"]/inte_fl))\n", + "# print(\"New amp:\", pdg[name][3]*np.sqrt(pdg[name+\"_BR\"]/pdg[\"NR_BR\"]*pdg[\"NR_auc\"]/inte_fl))\n", + "\n", + "\n", + "# # 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() - _))))\n", + "\n", + "# print(pdg['NR_BR']/pdg['NR_auc']*inte_fl)\n", + "# print(0.25**2*4.2/1000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Sampling\n", + "## Toys" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + " \n", + "# print(list_of_borders[:9])\n", + "# print(list_of_borders[-9:])\n", + "\n", + "\n", + "class UniformSampleAndWeights(zfit.util.execution.SessionHolderMixin):\n", + " def __call__(self, limits, dtype, n_to_produce):\n", + " # n_to_produce = tf.cast(n_to_produce, dtype=tf.int32)\n", + " low, high = limits.limit1d\n", + " low = tf.cast(low, dtype=dtype)\n", + " high = tf.cast(high, dtype=dtype)\n", + "# uniform = tfd.Uniform(low=low, high=high)\n", + "# uniformjpsi = tfd.Uniform(low=tf.constant(3080, dtype=dtype), high=tf.constant(3112, dtype=dtype))\n", + "# uniformpsi2s = tfd.Uniform(low=tf.constant(3670, dtype=dtype), high=tf.constant(3702, dtype=dtype))\n", + "\n", + "# list_of_borders = []\n", + "# _p = []\n", + "# splits = 10\n", + "\n", + "# _ = np.linspace(x_min, x_max, splits)\n", + "\n", + "# for i in range(splits):\n", + "# list_of_borders.append(tf.constant(_[i], dtype=dtype))\n", + "# _p.append(tf.constant(1/splits, dtype=dtype))\n", + " \n", + "# mixture = tfd.MixtureSameFamily(mixture_distribution=tfd.Categorical(probs=_p[:(splits-1)]),\n", + "# components_distribution=tfd.Uniform(low=list_of_borders[:(splits-1)], \n", + "# high=list_of_borders[-(splits-1):]))\n", + " mixture = tfd.MixtureSameFamily(mixture_distribution=tfd.Categorical(probs=[tf.constant(0.05, dtype=dtype),\n", + " tf.constant(0.93, dtype=dtype),\n", + " tf.constant(0.05, dtype=dtype),\n", + " tf.constant(0.065, dtype=dtype),\n", + " tf.constant(0.04, dtype=dtype),\n", + " tf.constant(0.05, dtype=dtype)]),\n", + " components_distribution=tfd.Uniform(low=[tf.constant(x_min, dtype=dtype), \n", + " tf.constant(3090, dtype=dtype),\n", + " tf.constant(3681, dtype=dtype), \n", + " tf.constant(3070, dtype=dtype),\n", + " tf.constant(1000, dtype=dtype),\n", + " tf.constant(3660, dtype=dtype)], \n", + " high=[tf.constant(x_max, dtype=dtype),\n", + " tf.constant(3102, dtype=dtype), \n", + " tf.constant(3691, dtype=dtype),\n", + " tf.constant(3110, dtype=dtype),\n", + " tf.constant(1040, dtype=dtype),\n", + " tf.constant(3710, dtype=dtype)]))\n", + "# dtype = tf.float64\n", + "# mixture = tfd.MixtureSameFamily(mixture_distribution=tfd.Categorical(probs=[tf.constant(0.04, dtype=dtype),\n", + "# tf.constant(0.90, dtype=dtype),\n", + "# tf.constant(0.02, dtype=dtype),\n", + "# tf.constant(0.07, dtype=dtype),\n", + "# tf.constant(0.02, dtype=dtype)]),\n", + "# components_distribution=tfd.Uniform(low=[tf.constant(x_min, dtype=dtype), \n", + "# tf.constant(3089, dtype=dtype),\n", + "# tf.constant(3103, dtype=dtype), \n", + "# tf.constant(3681, dtype=dtype),\n", + "# tf.constant(3691, dtype=dtype)], \n", + "# high=[tf.constant(3089, dtype=dtype),\n", + "# tf.constant(3103, dtype=dtype), \n", + "# tf.constant(3681, dtype=dtype),\n", + "# tf.constant(3691, dtype=dtype), \n", + "# tf.constant(x_max, dtype=dtype)]))\n", + "# mixture = tfd.Uniform(tf.constant(x_min, dtype=dtype), tf.constant(x_max, dtype=dtype))\n", + "# sample = tf.random.uniform((n_to_produce, 1), dtype=dtype)\n", + " sample = mixture.sample((n_to_produce, 1))\n", + "# sample = tf.random.uniform((n_to_produce, 1), dtype=dtype)\n", + " weights = mixture.prob(sample)[:,0]\n", + "# weights = tf.broadcast_to(tf.constant(1., dtype=dtype), shape=(n_to_produce,))\n", + " # sample = tf.expand_dims(sample, axis=-1)\n", + "# print(sample, weights)\n", + " \n", + "# weights = tf.ones(shape=(n_to_produce,), dtype=dtype)\n", + " weights_max = None\n", + " thresholds = tf.random_uniform(shape=(n_to_produce,), dtype=dtype)\n", + " return sample, thresholds, weights, weights_max, n_to_produce" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "total_f._sample_and_weights = UniformSampleAndWeights" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 0.00133/(0.00133+0.213+0.015)*(x_max-3750)/(x_max-x_min)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# zfit.settings.set_verbosity(10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "# # zfit.run.numeric_checks = False \n", + "\n", + "# nr_of_toys = 1\n", + "# nevents = int(pdg[\"number_of_decays\"])\n", + "# nevents = pdg[\"number_of_decays\"]\n", + "# event_stack = 1000000\n", + "# # zfit.settings.set_verbosity(10)\n", + "# calls = int(nevents/event_stack + 1)\n", + "\n", + "# total_samp = []\n", + "\n", + "# start = time.time()\n", + "\n", + "# sampler = total_f.create_sampler(n=event_stack)\n", + "\n", + "# for toy in range(nr_of_toys):\n", + " \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", + "\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", + "\n", + "# c = call + 1\n", + " \n", + "# print(\"{0}/{1} of Toy {2}/{3}\".format(c, calls, toy+1, nr_of_toys))\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*(toy))*((nr_of_toys-toy)*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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# with open(r\"data/zfit_toys/toy_0/0.pkl\", \"rb\") as input_file:\n", + "# sam = pkl.load(input_file)\n", + "# print(sam[:10])\n", + "\n", + "# with open(r\"data/zfit_toys/toy_0/1.pkl\", \"rb\") as input_file:\n", + "# sam2 = pkl.load(input_file)\n", + "# print(sam2[:10])\n", + "\n", + "# print(np.sum(sam-sam2))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# print(\"Time to generate full toy: {} s\".format(int(time.time()-start)))\n", + "\n", + "# total_samp = []\n", + "\n", + "# for call in range(calls):\n", + "# with open(r\"data/zfit_toys/toy_0/{}.pkl\".format(call), \"rb\") as input_file:\n", + "# sam = pkl.load(input_file)\n", + "# total_samp = np.append(total_samp, sam)\n", + "\n", + "# total_samp = total_samp.astype('float64')\n", + "\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, + "metadata": {}, + "outputs": [], + "source": [ + "# plt.clf()\n", + "\n", + "# bins = int((x_max-x_min)/7)\n", + "\n", + "# # calcs = zfit.run(total_test_tf(samp))\n", + "# print(total_samp[:nevents].shape)\n", + "\n", + "# plt.hist(total_samp[:nevents], bins = bins, range = (x_min,x_max), label = 'data')\n", + "# # plt.plot(test_q, calcs_test*nevents , label = 'pdf')\n", + "\n", + "# # plt.plot(sam, calcs, '.')\n", + "# # plt.plot(test_q, calcs_test)\n", + "# # plt.yscale('log')\n", + "# plt.ylim(0, 200)\n", + "# # plt.xlim(3080, 3110)\n", + "\n", + "# plt.legend()\n", + "\n", + "# plt.savefig('test2.png')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# sampler = total_f.create_sampler(n=nevents)\n", + "# nll = zfit.loss.UnbinnedNLL(model=total_f, data=sampler, fit_range = (x_min, x_max))\n", + "\n", + "# # for param in pdf.get_dependents():\n", + "# # param.set_value(initial_value)\n", + "\n", + "# sampler.resample(n=nevents)\n", + "\n", + "# # Randomise initial values\n", + "# # for param in pdf.get_dependents():\n", + "# # param.set_value(random value here)\n", + "\n", + "# # Minimise the NLL\n", + "# minimizer = zfit.minimize.MinuitMinimizer(verbosity = 10)\n", + "# minimum = minimizer.minimize(nll)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# jpsi_width" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plt.hist(sample, weights=1 / prob(sample))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fitting" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# start = time.time()\n", + "\n", + "# for param in total_f.get_dependents():\n", + "# param.randomize()\n", + " \n", + "# # for param in total_f.get_dependents():\n", + "# # print(zfit.run(param))\n", + " \n", + "# nll = zfit.loss.UnbinnedNLL(model=total_f, data=data2, fit_range = (x_min, x_max))\n", + "\n", + "# minimizer = zfit.minimize.MinuitMinimizer(verbosity = 5)\n", + "# # minimizer._use_tfgrad = False\n", + "# result = minimizer.minimize(nll)\n", + "\n", + "# # param_errors = result.error()\n", + "\n", + "# # for var, errors in param_errors.items():\n", + "# # print('{}: ^{{+{}}}_{{{}}}'.format(var.name, errors['upper'], errors['lower']))\n", + "\n", + "# print(\"Function minimum:\", result.fmin)\n", + "# # print(\"Results:\", result.params)\n", + "# print(\"Hesse errors:\", result.hesse())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# print(\"Time taken for fitting: {}\".format(display_time(int(time.time()-start))))\n", + "\n", + "# # probs = total_f.pdf(test_q)\n", + "\n", + "# calcs_test = zfit.run(probs)\n", + "# res_y = zfit.run(jpsi_res(test_q))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "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, 10e-6)\n", + "# # plt.yscale('log')\n", + "# # plt.xlim(3080, 3110)\n", + "# plt.savefig('test3.png')\n", + "# # print(jpsi_width)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# _tot = 4.37e-7+6.02e-5+4.97e-6\n", + "# _probs = []\n", + "# _probs.append(6.02e-5/_tot)\n", + "# _probs.append(4.97e-6/_tot)\n", + "# _probs.append(4.37e-7/_tot)\n", + "# print(_probs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# dtype = 'float64'\n", + "# # mixture = tfd.Uniform(tf.constant(x_min, dtype=dtype), tf.constant(x_max, dtype=dtype))\n", + "# mixture = tfd.MixtureSameFamily(mixture_distribution=tfd.Categorical(probs=[tf.constant(0.007, dtype=dtype),\n", + "# tf.constant(0.917, dtype=dtype),\n", + "# tf.constant(0.076, dtype=dtype)]),\n", + "# components_distribution=tfd.Uniform(low=[tf.constant(x_min, dtype=dtype), \n", + "# tf.constant(3080, dtype=dtype),\n", + "# tf.constant(3670, dtype=dtype)], \n", + "# high=[tf.constant(x_max, dtype=dtype),\n", + "# tf.constant(3112, dtype=dtype), \n", + "# tf.constant(3702, dtype=dtype)]))\n", + "# # for i in range(10):\n", + "# # print(zfit.run(mixture.prob(mixture.sample((10, 1)))))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# print((zfit.run(jpsi_p)%(2*np.pi))/np.pi)\n", + "# print((zfit.run(psi2s_p)%(2*np.pi))/np.pi)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# def jpsi_res(q):\n", + "# return resonance(q, _mass = jpsi_mass, scale = jpsi_scale,\n", + "# phase = jpsi_phase, width = jpsi_width)\n", + "\n", + "# def psi2s_res(q):\n", + "# return resonance(q, _mass = psi2s_mass, scale = psi2s_scale,\n", + "# phase = psi2s_phase, width = psi2s_width)\n", + " \n", + "# def p3770_res(q):\n", + "# return resonance(q, _mass = p3770_mass, scale = p3770_scale,\n", + "# phase = p3770_phase, width = p3770_width)\n", + " \n", + "# def p4040_res(q):\n", + "# return resonance(q, _mass = p4040_mass, scale = p4040_scale,\n", + "# phase = p4040_phase, width = p4040_width)\n", + " \n", + "# def p4160_res(q):\n", + "# return resonance(q, _mass = p4160_mass, scale = p4160_scale,\n", + "# phase = p4160_phase, width = p4160_width)\n", + " \n", + "# def p4415_res(q):\n", + "# return resonance(q, _mass = p4415_mass, scale = p4415_scale,\n", + "# phase = p4415_phase, width = p4415_width)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 0.15**2*4.2/1000\n", + "# result.hesse()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Analysis" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "# zfit.run.numeric_checks = False \n", + "\n", + "Ctt_list = []\n", + "Ctt_error_list = []\n", + "\n", + "nr_of_toys = 1\n", + "nevents = int(pdg[\"number_of_decays\"])\n", + "nevents = pdg[\"number_of_decays\"]\n", + "event_stack = 1000000\n", + "# zfit.settings.set_verbosity(10)\n", + "calls = int(nevents/event_stack + 1)\n", + "\n", + "total_samp = []\n", + "\n", + "start = time.time()\n", + "\n", + "sampler = total_f.create_sampler(n=event_stack)\n", + "\n", + "for toy in range(nr_of_toys):\n", + " \n", + " ### Generate data\n", + " \n", + " print(\"Toy {}: Generating data...\".format(toy))\n", + " \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", + "\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", + "\n", + " c = call + 1\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)\n", + " \n", + " print(\"Toy {}: Data generation finished\".format(toy))\n", + " \n", + " ### Load data\n", + " \n", + " print(\"Toy {}: Loading data...\".format(toy))\n", + "\n", + " for call in range(calls):\n", + " with open(r\"data/zfit_toys/toy_0/{}.pkl\".format(call), \"rb\") as input_file:\n", + " sam = pkl.load(input_file)\n", + " total_samp = np.append(total_samp, sam)\n", + "\n", + " total_samp = total_samp.astype('float64')\n", + "\n", + " data = zfit.data.Data.from_numpy(array=total_samp[:int(nevents)], obs=obs)\n", + " \n", + " print(\"Toy {}: Loading data finished\".format(toy))\n", + "\n", + " ### Fit data\n", + " \n", + " print(\"Toy {}: Fitting pdf...\".format(toy))\n", + "\n", + " for param in total_f.get_dependents():\n", + " param.randomize()\n", + "\n", + " nll = zfit.loss.UnbinnedNLL(model=total_f, data=data, fit_range = (jpsi_mass+50.0, psi2s_mass-50.0))\n", + "\n", + " minimizer = zfit.minimize.MinuitMinimizer(verbosity = 5)\n", + " # minimizer._use_tfgrad = False\n", + " result = minimizer.minimize(nll)\n", + " \n", + " print(\"Toy {}: Fitting finished\".format(toy))\n", + "\n", + " print(\"Function minimum:\", result.fmin)\n", + " print(\"Hesse errors:\", result.hesse())\n", + " \n", + " params = result.params\n", + " Ctt_list.append(params[Ctt]['value'])\n", + " Ctt_error_list.append(params[Ctt]['minuit_hesse']['error'])\n", + "\n", + " print(\"Toy {0}/{1}\".format(toy+1, nr_of_toys))\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*(toy))*((nr_of_toys-toy)*calls-c)))))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('Mean Ctt value = {}'.format(np.mean(Ctt_list)))\n", + "print('Mean Ctt error = {}'.format(np.mean(Ctt_error_list)))" + ] + }, + { + "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/data/zfit_toys/toy_0/0.pkl b/data/zfit_toys/toy_0/0.pkl index fb89e18..72cc052 100644 --- a/data/zfit_toys/toy_0/0.pkl +++ b/data/zfit_toys/toy_0/0.pkl Binary files differ diff --git a/data/zfit_toys/toy_0/1.pkl b/data/zfit_toys/toy_0/1.pkl index 78b6b9a..a75f21a 100644 --- a/data/zfit_toys/toy_0/1.pkl +++ b/data/zfit_toys/toy_0/1.pkl Binary files differ diff --git a/data/zfit_toys/toy_0/2.pkl b/data/zfit_toys/toy_0/2.pkl index a4e0383..9346b19 100644 --- a/data/zfit_toys/toy_0/2.pkl +++ b/data/zfit_toys/toy_0/2.pkl Binary files differ diff --git a/data/zfit_toys/toy_0/3.pkl b/data/zfit_toys/toy_0/3.pkl index 03d3ce8..fd9fe3d 100644 --- a/data/zfit_toys/toy_0/3.pkl +++ b/data/zfit_toys/toy_0/3.pkl Binary files differ diff --git a/data/zfit_toys/toy_0/4.pkl b/data/zfit_toys/toy_0/4.pkl index 3a83c91..41992cc 100644 --- a/data/zfit_toys/toy_0/4.pkl +++ b/data/zfit_toys/toy_0/4.pkl Binary files differ diff --git a/data/zfit_toys/toy_0/5.pkl b/data/zfit_toys/toy_0/5.pkl index 2431ebd..56edb32 100644 --- a/data/zfit_toys/toy_0/5.pkl +++ b/data/zfit_toys/toy_0/5.pkl Binary files differ diff --git a/raremodel-nb.ipynb b/raremodel-nb.ipynb index 43170bb..ac056b5 100644 --- a/raremodel-nb.ipynb +++ b/raremodel-nb.ipynb @@ -85,9 +85,26 @@ "cell_type": "code", "execution_count": 3, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.46\n" + ] + } + ], + "source": [ + "print(zfit.run(ztf.constant(pdg[\"bT\"])[0]))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, "outputs": [], "source": [ - "def formfactor( q2, subscript, b0, bT, bplus): #returns real value\n", + "def formfactor( q2, subscript, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2): #returns real value\n", " #check if subscript is viable\n", "\n", " if subscript != \"0\" and subscript != \"+\" and subscript != \"T\":\n", @@ -98,9 +115,12 @@ " mK = ztf.constant(pdg['Ks_M'])\n", " mbstar0 = ztf.constant(pdg[\"mbstar0\"])\n", " mbstar = ztf.constant(pdg[\"mbstar\"])\n", - "# b0 = ztf.constant(pdg[\"b0\"])\n", - "# bplus = ztf.constant(pdg[\"bplus\"])\n", - "# bT = ztf.constant(pdg[\"bT\"])\n", + "# b0_ = ztf.constant(pdg[\"b0\"])\n", + "# bplus_ = ztf.constant(pdg[\"bplus\"])\n", + "# bT_ = ztf.constant(pdg[\"bT\"])\n", + "\n", + "# print(zfit.run(b0))\n", + "# print(b0_)\n", "\n", " mmu = ztf.constant(pdg['muon_M'])\n", " mb = ztf.constant(pdg['bquark_M'])\n", @@ -125,11 +145,12 @@ " if subscript == \"0\":\n", " prefactor = 1/(1 - q2/(mbstar0**2))\n", " _sum = 0\n", + " b0 = [b0_0, b0_1, b0_2]\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", + " return ztf.to_complex(prefactor * _sum)\n", "\n", " #calculate f+ or fT\n", "\n", @@ -138,14 +159,15 @@ " _sum = 0\n", "\n", " if subscript == \"T\":\n", - " b = bT\n", + " bT = [bT_0, bT_1, bT_2]\n", + " for i in range(N):\n", + " _sum += bT[i] * (tf.pow(z, i) - ((-1)**(i-N)) * (i/N) * tf.pow(z, N))\n", " else:\n", - " b = bplus\n", + " bplus = [bplus_0, bplus_1, bplus_2]\n", + " for i in range(N):\n", + " _sum += bplus[i] * (tf.pow(z, i) - ((-1)**(i-N)) * (i/N) * tf.pow(z, N))\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", + " return ztf.to_complex(prefactor * _sum)\n", "\n", "def resonance(q, _mass, width, phase, scale):\n", "\n", @@ -179,19 +201,8 @@ "\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, b0, bplus, bT):\n", + "def axiv_nonres(q, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2):\n", "\n", " GF = ztf.constant(pdg['GF'])\n", " alpha_ew = ztf.constant(pdg['alpha_ew'])\n", @@ -219,7 +230,7 @@ "\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, \"+\", b0, bplus, bT))**2.\n", + " bracket_left = 2./3. * kabs**2. * beta**2. *tf.abs(tf.complex(C10eff, ztf.constant(0.0))*formfactor(q2, \"+\", b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2))**2.\n", "\n", " #middle term in bracket\n", "\n", @@ -227,13 +238,13 @@ "\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\", b0, bplus, bT)), 2)\n", + " bracket_middle = _top/_under *tf.pow(tf.abs(tf.complex(C10eff, ztf.constant(0.0)) * formfactor(q2, \"0\", b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2)), 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, b0, bplus, bT):\n", + "def vec(q, funcs, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2):\n", " \n", " q2 = tf.pow(q, 2)\n", "\n", @@ -263,7 +274,7 @@ "\n", " prefactor2 = kabs**2 * (1. - 1./3. * beta**2)\n", "\n", - " abs_bracket = tf.abs(c9eff(q, funcs) * formfactor(q2, \"+\", b0, bplus, bT) + tf.complex(2.0 * C7eff * (mb + ms)/(mB + mK), ztf.constant(0.0)) * formfactor(q2, \"T\", b0, bplus, bT))**2\n", + " abs_bracket = tf.abs(c9eff(q, funcs) * formfactor(q2, \"+\", b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2) + tf.complex(2.0 * C7eff * (mb + ms)/(mB + mK), ztf.constant(0.0)) * formfactor(q2, \"T\", b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2))**2\n", "\n", " bracket_right = prefactor2 * abs_bracket\n", "\n", @@ -284,7 +295,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -339,7 +350,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -367,7 +378,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -445,9 +456,9 @@ "\n", " funcs = rho_res(x) + omega_res(x) + phi_res(x) + jpsi_res(x) + psi2s_res(x) + p3770_res(x) + p4040_res(x)+ p4160_res(x) + p4415_res(x) + P2_D(x) + ttau_cusp(x)\n", "\n", - " vec_f = vec(x, funcs, b0, bplus, bT)\n", + " vec_f = vec(x, funcs, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2)\n", "\n", - " axiv_nr = axiv_nonres(x, b0, bplus, bT)\n", + " axiv_nr = axiv_nonres(x, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2)\n", "\n", " tot = vec_f + axiv_nr\n", "\n", @@ -463,7 +474,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -491,7 +502,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -507,17 +518,17 @@ "source": [ "# formfactors\n", "\n", - "b0_0 = zfit.Parameter(\"b0_0\", ztf.constant(0.292), lower_limit = -2.0, upper_limit= 2.0)\n", - "b0_1 = zfit.Parameter(\"b0_1\", ztf.constant(0.281), lower_limit = -2.0, upper_limit= 2.0)\n", - "b0_2 = zfit.Parameter(\"b0_2\", ztf.constant(0.150), lower_limit = -2.0, upper_limit= 2.0)\n", + "b0_0 = zfit.Parameter(\"b0_0\", ztf.constant(0.292), floating = False) #, lower_limit = -2.0, upper_limit= 2.0)\n", + "b0_1 = zfit.Parameter(\"b0_1\", ztf.constant(0.281), floating = False) #, lower_limit = -2.0, upper_limit= 2.0)\n", + "b0_2 = zfit.Parameter(\"b0_2\", ztf.constant(0.150), floating = False) #, lower_limit = -2.0, upper_limit= 2.0)\n", "\n", "bplus_0 = zfit.Parameter(\"bplus_0\", ztf.constant(0.466), lower_limit = -2.0, upper_limit= 2.0)\n", "bplus_1 = zfit.Parameter(\"bplus_1\", ztf.constant(-0.885), lower_limit = -2.0, upper_limit= 2.0)\n", "bplus_2 = zfit.Parameter(\"bplus_2\", ztf.constant(-0.213), lower_limit = -2.0, upper_limit= 2.0)\n", "\n", - "bT_0 = zfit.Parameter(\"bT_0\", ztf.constant(0.460), lower_limit = -2.0, upper_limit= 2.0)\n", - "bT_1 = zfit.Parameter(\"bT_1\", ztf.constant(-1.089), lower_limit = -2.0, upper_limit= 2.0)\n", - "bT_2 = zfit.Parameter(\"bT_2\", ztf.constant(-1.114), lower_limit = -2.0, upper_limit= 2.0)\n", + "bT_0 = zfit.Parameter(\"bT_0\", ztf.constant(0.460), floating = False) #, lower_limit = -2.0, upper_limit= 2.0)\n", + "bT_1 = zfit.Parameter(\"bT_1\", ztf.constant(-1.089), floating = False) #, lower_limit = -2.0, upper_limit= 2.0)\n", + "bT_2 = zfit.Parameter(\"bT_2\", ztf.constant(-1.114), floating = False) #, lower_limit = -2.0, upper_limit= 2.0)\n", "\n", "\n", "#rho\n", @@ -557,7 +568,7 @@ "jpsi_m = zfit.Parameter(\"jpsi_m\", ztf.constant(jpsi_mass), floating = False)\n", "jpsi_w = zfit.Parameter(\"jpsi_w\", ztf.constant(jpsi_width), floating = False)\n", "jpsi_p = zfit.Parameter(\"jpsi_p\", ztf.constant(jpsi_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", - "jpsi_s = zfit.Parameter(\"jpsi_s\", ztf.constant(jpsi_scale), lower_limit=jpsi_scale-np.sqrt(jpsi_scale), upper_limit=jpsi_scale+np.sqrt(jpsi_scale))\n", + "jpsi_s = zfit.Parameter(\"jpsi_s\", ztf.constant(jpsi_scale), floating = False) #, lower_limit=jpsi_scale-np.sqrt(jpsi_scale), upper_limit=jpsi_scale+np.sqrt(jpsi_scale))\n", "\n", "#psi2s\n", "\n", @@ -566,7 +577,7 @@ "psi2s_m = zfit.Parameter(\"psi2s_m\", ztf.constant(psi2s_mass), floating = False)\n", "psi2s_w = zfit.Parameter(\"psi2s_w\", ztf.constant(psi2s_width), floating = False)\n", "psi2s_p = zfit.Parameter(\"psi2s_p\", ztf.constant(psi2s_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", - "psi2s_s = zfit.Parameter(\"psi2s_s\", ztf.constant(psi2s_scale), lower_limit=psi2s_scale-np.sqrt(psi2s_scale), upper_limit=psi2s_scale+np.sqrt(psi2s_scale))\n", + "psi2s_s = zfit.Parameter(\"psi2s_s\", ztf.constant(psi2s_scale), floating = False) #, lower_limit=psi2s_scale-np.sqrt(psi2s_scale), upper_limit=psi2s_scale+np.sqrt(psi2s_scale))\n", "\n", "#psi(3770)\n", "\n", @@ -574,8 +585,8 @@ "\n", "p3770_m = zfit.Parameter(\"p3770_m\", ztf.constant(p3770_mass), floating = False)\n", "p3770_w = zfit.Parameter(\"p3770_w\", ztf.constant(p3770_width), floating = False)\n", - "p3770_p = zfit.Parameter(\"p3770_p\", ztf.constant(p3770_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", - "p3770_s = zfit.Parameter(\"p3770_s\", ztf.constant(p3770_scale), floating = False) #, lower_limit=p3770_scale-np.sqrt(p3770_scale), upper_limit=p3770_scale+np.sqrt(p3770_scale))\n", + "p3770_p = zfit.Parameter(\"p3770_p\", ztf.constant(p3770_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p3770_s = zfit.Parameter(\"p3770_s\", ztf.constant(p3770_scale), lower_limit=p3770_scale-np.sqrt(p3770_scale), upper_limit=p3770_scale+np.sqrt(p3770_scale))\n", "\n", "#psi(4040)\n", "\n", @@ -583,8 +594,8 @@ "\n", "p4040_m = zfit.Parameter(\"p4040_m\", ztf.constant(p4040_mass), floating = False)\n", "p4040_w = zfit.Parameter(\"p4040_w\", ztf.constant(p4040_width), floating = False)\n", - "p4040_p = zfit.Parameter(\"p4040_p\", ztf.constant(p4040_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", - "p4040_s = zfit.Parameter(\"p4040_s\", ztf.constant(p4040_scale), floating = False) #, lower_limit=p4040_scale-np.sqrt(p4040_scale), upper_limit=p4040_scale+np.sqrt(p4040_scale))\n", + "p4040_p = zfit.Parameter(\"p4040_p\", ztf.constant(p4040_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p4040_s = zfit.Parameter(\"p4040_s\", ztf.constant(p4040_scale), lower_limit=p4040_scale-np.sqrt(p4040_scale), upper_limit=p4040_scale+np.sqrt(p4040_scale))\n", "\n", "#psi(4160)\n", "\n", @@ -592,8 +603,8 @@ "\n", "p4160_m = zfit.Parameter(\"p4160_m\", ztf.constant(p4160_mass), floating = False)\n", "p4160_w = zfit.Parameter(\"p4160_w\", ztf.constant(p4160_width), floating = False)\n", - "p4160_p = zfit.Parameter(\"p4160_p\", ztf.constant(p4160_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", - "p4160_s = zfit.Parameter(\"p4160_s\", ztf.constant(p4160_scale), floating = False) #, lower_limit=p4160_scale-np.sqrt(p4160_scale), upper_limit=p4160_scale+np.sqrt(p4160_scale))\n", + "p4160_p = zfit.Parameter(\"p4160_p\", ztf.constant(p4160_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p4160_s = zfit.Parameter(\"p4160_s\", ztf.constant(p4160_scale), lower_limit=p4160_scale-np.sqrt(p4160_scale), upper_limit=p4160_scale+np.sqrt(p4160_scale))\n", "\n", "#psi(4415)\n", "\n", @@ -601,8 +612,29 @@ "\n", "p4415_m = zfit.Parameter(\"p4415_m\", ztf.constant(p4415_mass), floating = False)\n", "p4415_w = zfit.Parameter(\"p4415_w\", ztf.constant(p4415_width), floating = False)\n", - "p4415_p = zfit.Parameter(\"p4415_p\", ztf.constant(p4415_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", - "p4415_s = zfit.Parameter(\"p4415_s\", ztf.constant(p4415_scale), floating = False) #, lower_limit=p4415_scale-np.sqrt(p4415_scale), upper_limit=p4415_scale+np.sqrt(p4415_scale))" + "p4415_p = zfit.Parameter(\"p4415_p\", ztf.constant(p4415_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p4415_s = zfit.Parameter(\"p4415_s\", ztf.constant(p4415_scale), lower_limit=p4415_scale-np.sqrt(p4415_scale), upper_limit=p4415_scale+np.sqrt(p4415_scale))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b0 = [b0_0, b0_1, b0_2]\n", + "b0[0]" ] }, { @@ -620,7 +652,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -701,7 +733,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -738,7 +770,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -774,19 +806,22 @@ "\n", "calcs_test = zfit.run(probs)\n", "res_y = zfit.run(jpsi_res(test_q))\n", - "# f0_y = zfit.run(formfactor(test_q,\"0\", b0, bplus, bT))\n", - "# fplus_y = zfit.run(formfactor(test_q,\"+\", b0, bplus, bT))\n", - "# fT_y = zfit.run(formfactor(test_q,\"T\", b0, bplus, bT))" + "# b0 = [b0_0, b0_1, b0_2]\n", + "# bplus = [bplus_0, bplus_1, bplus_2]\n", + "# bT = [bT_0, bT_1, bT_2]\n", + "# f0_y = zfit.run(tf.math.real(formfactor(test_q,\"0\", b0, bplus, bT)))\n", + "# fplus_y = zfit.run(tf.math.real(formfactor(test_q,\"+\", b0, bplus, bT)))\n", + "# fT_y = zfit.run(tf.math.real(formfactor(test_q,\"T\", b0, bplus, bT)))" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -815,7 +850,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -831,7 +866,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -847,7 +882,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -860,7 +895,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -912,12 +947,12 @@ "metadata": {}, "source": [ "# Sampling\n", - "## Toys" + "## Mixture distribution for sampling" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -1001,7 +1036,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -1010,7 +1045,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -1019,7 +1054,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -1028,7 +1063,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "metadata": { "scrolled": false }, @@ -1076,7 +1111,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -1093,7 +1128,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -1117,7 +1152,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -1144,7 +1179,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -1167,7 +1202,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -1176,7 +1211,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -1192,7 +1227,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -1222,7 +1257,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -1236,7 +1271,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -1254,7 +1289,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -1268,7 +1303,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -1289,7 +1324,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ @@ -1299,7 +1334,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ @@ -1330,7 +1365,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -1342,12 +1377,49 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "## Constraints" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "# 1. Constraint - Real part of sum of Psi contrib and D contribs\n", + "\n", + "\n", + "sum_list = []\n", + "\n", + "sum_list.append(ztf.to_complex(jpsi_s) * tf.exp(tf.complex(ztf.constant(0.0), jpsi_p)) * ztf.to_complex(jpsi_w / (tf.pow(jpsi_m,3))))\n", + "sum_list.append(ztf.to_complex(psi2s_s) * tf.exp(tf.complex(ztf.constant(0.0), psi2s_p)) * ztf.to_complex(psi2s_w / (tf.pow(psi2s_m,3))))\n", + "sum_list.append(ztf.to_complex(p3770_s) * tf.exp(tf.complex(ztf.constant(0.0), p3770_p)) * ztf.to_complex(p3770_w / (tf.pow(p3770_m,3))))\n", + "sum_list.append(ztf.to_complex(p4040_s) * tf.exp(tf.complex(ztf.constant(0.0), p4040_p)) * ztf.to_complex(p4040_w / (tf.pow(p4040_m,3))))\n", + "sum_list.append(ztf.to_complex(p4160_s) * tf.exp(tf.complex(ztf.constant(0.0), p4160_p)) * ztf.to_complex(p4160_w / (tf.pow(p4160_m,3))))\n", + "sum_list.append(ztf.to_complex(p4415_s) * tf.exp(tf.complex(ztf.constant(0.0), p4415_p)) * ztf.to_complex(p4415_w / (tf.pow(p4415_m,3))))\n", + "sum_list.append(ztf.to_complex(DDstar_s) * tf.exp(tf.complex(ztf.constant(0.0), DDstar_p)) * ztf.to_complex(1.0 / (10.0*tf.pow(DDstar_m,2))))\n", + "sum_list.append(ztf.to_complex(Dbar_s) * tf.exp(tf.complex(ztf.constant(0.0), Dbar_p)) * ztf.to_complex(1.0 / (6.0*tf.pow(Dbar_m,2))))\n", + "\n", + "sum_ru_1 = ztf.to_complex(ztf.constant(0.0))\n", + "\n", + "for part in sum_list:\n", + " sum_ru_1 += part\n", + "\n", + "sum_1 = tf.math.real(sum_ru_1)\n", + "constraint1 = zfit.core.constraint.GaussianConstraint(params = [sum_1], mu = [ztf.constant(1.7*10**-8)],\n", + " sigma = [ztf.constant(2.2*10**-8)])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "# Analysis" ] }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 41, "metadata": { "scrolled": false }, @@ -1360,82 +1432,23 @@ "Toy 0: Data generation finished\n", "Toy 0: Loading data...\n", "Toy 0: Loading data finished\n", - "Toy 0: Fitting pdf...\n", - "------------------------------------------------------------------\n", - "| FCN = 5.224E+04 | Ncalls=1261 (1261 total) |\n", - "| EDM = 0.000626 (Goal: 5E-06) | up = 0.5 |\n", - "------------------------------------------------------------------\n", - "| Valid Min. | Valid Param. | Above EDM | Reached call limit |\n", - "------------------------------------------------------------------\n", - "| True | True | False | False |\n", - "------------------------------------------------------------------\n", - "| Hesse failed | Has cov. | Accurate | Pos. def. | Forced |\n", - "------------------------------------------------------------------\n", - "| False | True | False | False | True |\n", - "------------------------------------------------------------------\n", - "Toy 0: Fitting finished\n", - "Function minimum: 52244.05952457551\n", - "---------------------------------------------------------------------------------------------\n", - "| | Name | Value | Hesse Err | Minos Err- | Minos Err+ | Limit- | Limit+ | Fixed |\n", - "---------------------------------------------------------------------------------------------\n", - "| 0 | b0_1 | -2.0 | 3.7 | | | -2 | 2 | |\n", - "| 1 | bplus_1 | -2.0 | 2.6 | | | -2 | 2 | |\n", - "| 2 | bT_1 | -1.98 | 0.05 | | | -2 | 2 | |\n", - "| 3 | Ctt | -0.5 | 0.8 | | | -0.5 | 0.5 | |\n", - "| 4 | bplus_0 | 0.27 | 0.09 | | | -2 | 2 | |\n", - "| 5 | b0_2 | -1.9 | 2.8 | | | -2 | 2 | |\n", - "| 6 | bT_0 | 0.325 | 0.008 | | | -2 | 2 | |\n", - "| 7 | psi2s_p | 3.53 | 0.15 | | |-6.28319 | 6.28319 | |\n", - "| 8 | bT_2 | 1.99 | 0.28 | | | -2 | 2 | |\n", - "| 9 | bplus_2 | -1.7 | 2.1 | | | -2 | 2 | |\n", - "| 10| jpsi_s | 1.000E4 | 0.015E4 | | | 9797.52 | 9996.48 | |\n", - "| 11| psi2s_s | 1430 | 40 | | | 1358.64 | 1433.36 | |\n", - "| 12| b0_0 | 0.18 | 0.76 | | | -2 | 2 | |\n", - "| 13| Dbar_s | 0.67 | 0.21 | | | -1.464 | 1.464 | |\n", - "| 14| jpsi_p | 3.2 | 0.6 | | |-6.28319 | 6.28319 | |\n", - "---------------------------------------------------------------------------------------------\n", - "-------------------------------------------------------------------------------------------------------------------------------------\n", - "| | b0_1 bplus_1 bT_1 Ctt bplus_0 b0_2 bT_0 psi2s_p bT_2 bplus_2 jpsi_s psi2s_s b0_0 Dbar_s jpsi_p |\n", - "-------------------------------------------------------------------------------------------------------------------------------------\n", - "| b0_1 | 1.000 0.665 -0.601 0.260 0.568 0.573 -0.560 0.465 -0.189 -0.878 0.218 0.050 0.606 0.008 0.041 |\n", - "| bplus_1 | 0.665 1.000 -0.588 0.285 0.473 0.481 -0.543 0.388 -0.189 -0.826 0.231 0.058 0.555 -0.138 0.083 |\n", - "| bT_1 | -0.601 -0.588 1.000 -0.234 -0.496 -0.437 0.479 -0.359 0.159 0.772 -0.166 -0.054 -0.510 0.024 -0.072 |\n", - "| Ctt | 0.260 0.285 -0.234 1.000 0.298 0.192 -0.221 0.253 -0.073 -0.356 0.091 -0.035 0.233 0.237 -0.037 |\n", - "| bplus_0 | 0.568 0.473 -0.496 0.298 1.000 0.409 -0.453 0.281 -0.163 -0.681 0.204 0.071 0.459 -0.271 0.105 |\n", - "| b0_2 | 0.573 0.481 -0.437 0.192 0.409 1.000 -0.407 0.336 -0.138 -0.635 0.159 0.037 0.531 -0.001 0.029 |\n", - "| bT_0 | -0.560 -0.543 0.479 -0.221 -0.453 -0.407 1.000 -0.328 0.150 0.713 -0.157 -0.051 -0.472 0.036 -0.070 |\n", - "| psi2s_p | 0.465 0.388 -0.359 0.253 0.281 0.336 -0.328 1.000 -0.117 -0.557 0.127 0.083 0.369 -0.222 0.162 |\n", - "| bT_2 | -0.189 -0.189 0.159 -0.073 -0.163 -0.138 0.150 -0.117 1.000 0.246 -0.050 -0.017 -0.163 -0.002 -0.020 |\n", - "| bplus_2 | -0.878 -0.826 0.772 -0.356 -0.681 -0.635 0.713 -0.557 0.246 1.000 -0.291 -0.072 -0.750 0.087 -0.079 |\n", - "| jpsi_s | 0.218 0.231 -0.166 0.091 0.204 0.159 -0.157 0.127 -0.050 -0.291 1.000 0.027 0.190 0.014 0.030 |\n", - "| psi2s_s | 0.050 0.058 -0.054 -0.035 0.071 0.037 -0.051 0.083 -0.017 -0.072 0.027 1.000 0.043 0.101 -0.015 |\n", - "| b0_0 | 0.606 0.555 -0.510 0.233 0.459 0.531 -0.472 0.369 -0.163 -0.750 0.190 0.043 1.000 -0.050 0.063 |\n", - "| Dbar_s | 0.008 -0.138 0.024 0.237 -0.271 -0.001 0.036 -0.222 -0.002 0.087 0.014 0.101 -0.050 1.000 0.141 |\n", - "| jpsi_p | 0.041 0.083 -0.072 -0.037 0.105 0.029 -0.070 0.162 -0.020 -0.079 0.030 -0.015 0.063 0.141 1.000 |\n", - "-------------------------------------------------------------------------------------------------------------------------------------\n", - "Hesse errors: OrderedDict([(, {'error': 3.7497478938564335}), (, {'error': 2.583900371125427}), (, {'error': 0.05116452428878748}), (, {'error': 0.8048991558989059}), (, {'error': 0.09051918266368353}), (, {'error': 2.8398689024624773}), (, {'error': 0.008312746297318485}), (, {'error': 0.14518466085144688}), (, {'error': 0.28009841873882135}), (, {'error': 2.127901204620494}), (, {'error': 151.85677990046224}), (, {'error': 44.596492883806036}), (, {'error': 0.7563153884664282}), (, {'error': 0.20862304880841087}), (, {'error': 0.5512466145330324})])\n", - "Toy 1/5\n", - "Time taken: 4 min, 31 s\n", - "Projected time left: 18 min, 6 s\n", - "Toy 1: Generating data...\n" + "Toy 0: Fitting pdf...\n" ] }, { - "ename": "KeyboardInterrupt", - "evalue": "", + "ename": "RuntimeError", + "evalue": "exception was raised in user function\nUser function arguments:\n p3770_s = +1.999020\n p4160_s = +2.376152\n p4040_p = -4.437832\n p4040_s = +1.423904\n Dbar_s = +0.342445\n p4160_p = +4.897009\n p4415_p = +4.364139\n p4415_s = +1.177263\n Ctt = -0.212905\n bplus_0 = -0.141110\n psi2s_p = -2.316177\n p3770_p = +0.511010\n bplus_2 = -1.674701\n jpsi_p = +4.878201\n bplus_1 = +1.591894\nOriginal python exception in user function:\nInternalError: Dst tensor is not initialized.\n\t [[node model_2/_call_unnormalized_pdf/Sqrt_27 (defined at :4) ]]\n\t [[node gradients_1/AddN_11 (defined at C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py:220) ]]\n\nCaused by op 'model_2/_call_unnormalized_pdf/Sqrt_27', defined at:\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\runpy.py\", line 193, in _run_module_as_main\n \"__main__\", mod_spec)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\runpy.py\", line 85, in _run_code\n exec(code, run_globals)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in \n app.launch_new_instance()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n app.start()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n self.io_loop.start()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n self.asyncio_loop.run_forever()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n self._run_once()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n handle._run()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\asyncio\\events.py\", line 88, in _run\n self._context.run(self._callback, *self._args)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in \n lambda f: self._run_callback(functools.partial(callback, future))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n ret = callback()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 781, in inner\n self.run()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 742, in run\n yielded = self.gen.send(value)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n yield gen.maybe_future(dispatch(*args))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n yielded = next(result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n yield gen.maybe_future(handler(stream, idents, msg))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n yielded = next(result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n user_expressions, allow_stdin,\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n yielded = next(result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n res = shell.run_cell(code, store_history=store_history, silent=silent)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2848, in run_cell\n raw_cell, store_history, silent, shell_futures)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2874, in _run_cell\n return runner(coro)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 67, in _pseudo_sync_runner\n coro.send(None)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3049, in run_cell_async\n interactivity=interactivity, compiler=compiler, result=result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3214, in run_ast_nodes\n if (yield from self.run_code(code, result)):\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3296, in run_code\n exec(code_obj, self.user_global_ns, self.user_ns)\n File \"\", line 71, in \n result = minimizer.minimize(nll)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\", line 207, in minimize\n return self._hook_minimize(loss=loss, params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\", line 216, in _hook_minimize\n return self._call_minimize(loss=loss, params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\", line 220, in _call_minimize\n return self._minimize(loss=loss, params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\minimizer_minuit.py\", line 48, in _minimize\n gradients = loss.gradients(params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 158, in gradients\n return self._gradients(params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 251, in _gradients\n gradients = {(p, grad) for p, grad in zip(params_todo, super()._gradients(params_todo))}\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 220, in _gradients\n return tf.gradients(self.value(), params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 198, in value\n return self._value()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 234, in _value\n loss = super()._value()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 203, in _value\n constraints=self.constraints)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 266, in _loss_func\n nll = _unbinned_nll_tf(model=model, data=data, fit_range=fit_range)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 39, in _unbinned_nll_tf\n for p, d, r in zip(model, data, fit_range)]\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 39, in \n for p, d, r in zip(model, data, fit_range)]\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 43, in _unbinned_nll_tf\n probs = model.pdf(data, norm_range=fit_range)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 314, in pdf\n value = self._single_hook_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 324, in _single_hook_pdf\n return self._hook_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 327, in _hook_pdf\n return self._norm_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 330, in _norm_pdf\n return self._call_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 338, in _call_pdf\n return self._fallback_pdf(x=x, norm_range=norm_range)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 341, in _fallback_pdf\n pdf = self._call_unnormalized_pdf(x, name=\"_call_unnormalized_pdf\")\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 289, in _call_unnormalized_pdf\n return self._unnormalized_pdf(x)\n File \"\", line 73, in _unnormalized_pdf\n funcs = rho_res(x) + omega_res(x) + phi_res(x) + jpsi_res(x) + psi2s_res(x) + p3770_res(x) + p4040_res(x)+ p4160_res(x) + p4415_res(x) + P2_D(x) + ttau_cusp(x)\n File \"\", line 70, in ttau_cusp\n return ztf.to_complex(self.params['C_tt'])*(ztf.to_complex((h_S(self.params['tau_mass'], q))) - ztf.to_complex(h_P(self.params['tau_mass'], q)))\n File \"\", line 15, in h_S\n return ztf.to_complex(2) - G(ztf.to_complex(1) - ztf.to_complex(4*tf.pow(m, 2)) / ztf.to_complex(tf.pow(q, 2)))\n File \"\", line 9, in G\n big_bracket = tf.where(tf.math.real(y) > ztf.constant(0.0), inner_rect_bracket(y), inner_right(y))\n File \"\", line 4, in inner_rect_bracket\n return tf.log(ztf.to_complex((1+tf.sqrt(q))/(1-tf.sqrt(q)))-tf.complex(ztf.constant(0), -1*ztf.constant(np.pi)))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\ops\\gen_math_ops.py\", line 9251, in sqrt\n \"Sqrt\", x=x, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\framework\\op_def_library.py\", line 788, in _apply_op_helper\n op_def=op_def)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\util\\deprecation.py\", line 507, in new_func\n return func(*args, **kwargs)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\framework\\ops.py\", line 3300, in create_op\n op_def=op_def)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\framework\\ops.py\", line 1801, in __init__\n self._traceback = tf_stack.extract_stack()\n\nInternalError (see above for traceback): Dst tensor is not initialized.\n\t [[node model_2/_call_unnormalized_pdf/Sqrt_27 (defined at :4) ]]\n\t [[node gradients_1/AddN_11 (defined at C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py:220) ]]\n\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\minimizer_minuit.py\", line 116, in grad_func\n gradients_values = self.sess.run(gradients)\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 1348, in _do_call\n raise type(e)(node_def, op, message)\n", "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 31\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 32\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 33\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 34\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 35\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;32m~\\.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 637\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 638\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--> 639\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 640\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 641\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m~\\.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;32m~\\.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;32m~\\.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;32m~\\.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;32m~\\.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;32m~\\.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: " + "\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 69\u001b[0m \u001b[0mminimizer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mzfit\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mminimize\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mMinuitMinimizer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mverbosity\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 70\u001b[0m \u001b[1;31m# minimizer._use_tfgrad = False\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 71\u001b[1;33m \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[0m\u001b[0;32m 72\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 73\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Toy {}: Fitting finished\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtoy\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~\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\u001b[0m in \u001b[0;36mminimize\u001b[1;34m(self, loss, params)\u001b[0m\n\u001b[0;32m 205\u001b[0m \u001b[0mtuple\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstack\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menter_context\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparam\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_sess\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;32mfor\u001b[0m \u001b[0mparam\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 206\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--> 207\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_hook_minimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mloss\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mloss\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[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 208\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mFailMinimizeNaN\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mRuntimeError\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0merror\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;31m# iminuit raises RuntimeError if user raises Error\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 209\u001b[0m \u001b[0mfail_result\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstrategy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfit_result\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\u001b[0m in \u001b[0;36m_hook_minimize\u001b[1;34m(self, loss, params)\u001b[0m\n\u001b[0;32m 214\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 215\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_hook_minimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mloss\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\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--> 216\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_call_minimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mloss\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mloss\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[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 217\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 218\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_call_minimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mloss\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\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~\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\u001b[0m in \u001b[0;36m_call_minimize\u001b[1;34m(self, loss, params)\u001b[0m\n\u001b[0;32m 218\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_call_minimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mloss\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\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 219\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--> 220\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_minimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mloss\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mloss\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[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 221\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mNotImplementedError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0merror\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 222\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~\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\minimizer_minuit.py\u001b[0m in \u001b[0;36m_minimize\u001b[1;34m(self, loss, params)\u001b[0m\n\u001b[0;32m 136\u001b[0m minimizer_setter)\n\u001b[0;32m 137\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_minuit_minimizer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mminimizer\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 138\u001b[1;33m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mminimizer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmigrad\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m**\u001b[0m\u001b[0mminimize_options\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 139\u001b[0m \u001b[0mparams_result\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mp_dict\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mp_dict\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\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 140\u001b[0m \u001b[0mresult_vals\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mres\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"value\"\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mres\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mparams_result\u001b[0m\u001b[1;33m]\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.migrad\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mRuntimeError\u001b[0m: exception was raised in user function\nUser function arguments:\n p3770_s = +1.999020\n p4160_s = +2.376152\n p4040_p = -4.437832\n p4040_s = +1.423904\n Dbar_s = +0.342445\n p4160_p = +4.897009\n p4415_p = +4.364139\n p4415_s = +1.177263\n Ctt = -0.212905\n bplus_0 = -0.141110\n psi2s_p = -2.316177\n p3770_p = +0.511010\n bplus_2 = -1.674701\n jpsi_p = +4.878201\n bplus_1 = +1.591894\nOriginal python exception in user function:\nInternalError: Dst tensor is not initialized.\n\t [[node model_2/_call_unnormalized_pdf/Sqrt_27 (defined at :4) ]]\n\t [[node gradients_1/AddN_11 (defined at C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py:220) ]]\n\nCaused by op 'model_2/_call_unnormalized_pdf/Sqrt_27', defined at:\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\runpy.py\", line 193, in _run_module_as_main\n \"__main__\", mod_spec)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\runpy.py\", line 85, in _run_code\n exec(code, run_globals)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel_launcher.py\", line 16, in \n app.launch_new_instance()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\traitlets\\config\\application.py\", line 658, in launch_instance\n app.start()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelapp.py\", line 505, in start\n self.io_loop.start()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\platform\\asyncio.py\", line 148, in start\n self.asyncio_loop.run_forever()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\asyncio\\base_events.py\", line 539, in run_forever\n self._run_once()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\asyncio\\base_events.py\", line 1775, in _run_once\n handle._run()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\asyncio\\events.py\", line 88, in _run\n self._context.run(self._callback, *self._args)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\ioloop.py\", line 690, in \n lambda f: self._run_callback(functools.partial(callback, future))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\ioloop.py\", line 743, in _run_callback\n ret = callback()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 781, in inner\n self.run()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 742, in run\n yielded = self.gen.send(value)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 365, in process_one\n yield gen.maybe_future(dispatch(*args))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n yielded = next(result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 272, in dispatch_shell\n yield gen.maybe_future(handler(stream, idents, msg))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n yielded = next(result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\kernelbase.py\", line 542, in execute_request\n user_expressions, allow_stdin,\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tornado\\gen.py\", line 209, in wrapper\n yielded = next(result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\ipkernel.py\", line 294, in do_execute\n res = shell.run_cell(code, store_history=store_history, silent=silent)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\ipykernel\\zmqshell.py\", line 536, in run_cell\n return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2848, in run_cell\n raw_cell, store_history, silent, shell_futures)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 2874, in _run_cell\n return runner(coro)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\async_helpers.py\", line 67, in _pseudo_sync_runner\n coro.send(None)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3049, in run_cell_async\n interactivity=interactivity, compiler=compiler, result=result)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3214, in run_ast_nodes\n if (yield from self.run_code(code, result)):\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3296, in run_code\n exec(code_obj, self.user_global_ns, self.user_ns)\n File \"\", line 71, in \n result = minimizer.minimize(nll)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\", line 207, in minimize\n return self._hook_minimize(loss=loss, params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\", line 216, in _hook_minimize\n return self._call_minimize(loss=loss, params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\baseminimizer.py\", line 220, in _call_minimize\n return self._minimize(loss=loss, params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\minimizer_minuit.py\", line 48, in _minimize\n gradients = loss.gradients(params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 158, in gradients\n return self._gradients(params=params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 251, in _gradients\n gradients = {(p, grad) for p, grad in zip(params_todo, super()._gradients(params_todo))}\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 220, in _gradients\n return tf.gradients(self.value(), params)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 198, in value\n return self._value()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 234, in _value\n loss = super()._value()\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 203, in _value\n constraints=self.constraints)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 266, in _loss_func\n nll = _unbinned_nll_tf(model=model, data=data, fit_range=fit_range)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 39, in _unbinned_nll_tf\n for p, d, r in zip(model, data, fit_range)]\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 39, in \n for p, d, r in zip(model, data, fit_range)]\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py\", line 43, in _unbinned_nll_tf\n probs = model.pdf(data, norm_range=fit_range)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 314, in pdf\n value = self._single_hook_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 324, in _single_hook_pdf\n return self._hook_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 327, in _hook_pdf\n return self._norm_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 330, in _norm_pdf\n return self._call_pdf(x=x, norm_range=norm_range, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 338, in _call_pdf\n return self._fallback_pdf(x=x, norm_range=norm_range)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 341, in _fallback_pdf\n pdf = self._call_unnormalized_pdf(x, name=\"_call_unnormalized_pdf\")\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\basepdf.py\", line 289, in _call_unnormalized_pdf\n return self._unnormalized_pdf(x)\n File \"\", line 73, in _unnormalized_pdf\n funcs = rho_res(x) + omega_res(x) + phi_res(x) + jpsi_res(x) + psi2s_res(x) + p3770_res(x) + p4040_res(x)+ p4160_res(x) + p4415_res(x) + P2_D(x) + ttau_cusp(x)\n File \"\", line 70, in ttau_cusp\n return ztf.to_complex(self.params['C_tt'])*(ztf.to_complex((h_S(self.params['tau_mass'], q))) - ztf.to_complex(h_P(self.params['tau_mass'], q)))\n File \"\", line 15, in h_S\n return ztf.to_complex(2) - G(ztf.to_complex(1) - ztf.to_complex(4*tf.pow(m, 2)) / ztf.to_complex(tf.pow(q, 2)))\n File \"\", line 9, in G\n big_bracket = tf.where(tf.math.real(y) > ztf.constant(0.0), inner_rect_bracket(y), inner_right(y))\n File \"\", line 4, in inner_rect_bracket\n return tf.log(ztf.to_complex((1+tf.sqrt(q))/(1-tf.sqrt(q)))-tf.complex(ztf.constant(0), -1*ztf.constant(np.pi)))\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\ops\\gen_math_ops.py\", line 9251, in sqrt\n \"Sqrt\", x=x, name=name)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\framework\\op_def_library.py\", line 788, in _apply_op_helper\n op_def=op_def)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\util\\deprecation.py\", line 507, in new_func\n return func(*args, **kwargs)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\framework\\ops.py\", line 3300, in create_op\n op_def=op_def)\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\framework\\ops.py\", line 1801, in __init__\n self._traceback = tf_stack.extract_stack()\n\nInternalError (see above for traceback): Dst tensor is not initialized.\n\t [[node model_2/_call_unnormalized_pdf/Sqrt_27 (defined at :4) ]]\n\t [[node gradients_1/AddN_11 (defined at C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\loss.py:220) ]]\n\n File \"C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\minimizers\\minimizer_minuit.py\", line 116, in grad_func\n gradients_values = self.sess.run(gradients)\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 1348, in _do_call\n raise type(e)(node_def, op, message)\n" ] } ], @@ -1445,7 +1458,7 @@ "Ctt_list = []\n", "Ctt_error_list = []\n", "\n", - "nr_of_toys = 5\n", + "nr_of_toys = 1\n", "nevents = int(pdg[\"number_of_decays\"])\n", "nevents = pdg[\"number_of_decays\"]\n", "event_stack = 1000000\n", @@ -1506,7 +1519,7 @@ " for param in total_f.get_dependents():\n", " param.randomize()\n", "\n", - " nll = zfit.loss.UnbinnedNLL(model=total_f, data=data, fit_range = (jpsi_mass+50.0, psi2s_mass-50.0))\n", + " nll = zfit.loss.UnbinnedNLL(model=total_f, data=data, fit_range = (x_min, x_max))\n", "\n", " minimizer = zfit.minimize.MinuitMinimizer(verbosity = 5)\n", " # minimizer._use_tfgrad = False\n", @@ -1535,18 +1548,9 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Mean Ctt value = -0.4999046298846563\n", - "Mean Ctt error = 0.8048991558989059\n" - ] - } - ], + "outputs": [], "source": [ "print('Mean Ctt value = {}'.format(np.mean(Ctt_list)))\n", "print('Mean Ctt error = {}'.format(np.mean(Ctt_error_list)))" @@ -1554,22 +1558,9 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "calcs_test = zfit.run(probs)\n", "res_y = zfit.run(jpsi_res(test_q))\n", @@ -1581,7 +1572,7 @@ "# plt.plot(test_q, fplus_y, label = '+')\n", "# plt.plot(test_q, res_y, label = 'res')\n", "plt.legend()\n", - "plt.ylim(0.0, 6e-5)\n", + "plt.ylim(0.0, 6e-6)\n", "# plt.yscale('log')\n", "# plt.xlim(770, 785)\n", "plt.savefig('test2.png')" diff --git a/raremodel-nb.py b/raremodel-nb.py index 0a3347c..c4f3ded 100644 --- a/raremodel-nb.py +++ b/raremodel-nb.py @@ -47,7 +47,13 @@ # In[3]: -def formfactor( q2, subscript): #returns real value +print(zfit.run(ztf.constant(pdg["bT"])[0])) + + +# In[4]: + + +def formfactor( q2, subscript, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2): #returns real value #check if subscript is viable if subscript != "0" and subscript != "+" and subscript != "T": @@ -58,9 +64,12 @@ mK = ztf.constant(pdg['Ks_M']) mbstar0 = ztf.constant(pdg["mbstar0"]) mbstar = ztf.constant(pdg["mbstar"]) - b0 = ztf.constant(pdg["b0"]) - bplus = ztf.constant(pdg["bplus"]) - bT = ztf.constant(pdg["bT"]) +# b0_ = ztf.constant(pdg["b0"]) +# bplus_ = ztf.constant(pdg["bplus"]) +# bT_ = ztf.constant(pdg["bT"]) + +# print(zfit.run(b0)) +# print(b0_) mmu = ztf.constant(pdg['muon_M']) mb = ztf.constant(pdg['bquark_M']) @@ -85,11 +94,12 @@ if subscript == "0": prefactor = 1/(1 - q2/(mbstar0**2)) _sum = 0 + b0 = [b0_0, b0_1, b0_2] for i in range(N): _sum += b0[i]*(tf.pow(z,i)) - return tf.complex(prefactor * _sum, ztf.constant(0.0)) + return ztf.to_complex(prefactor * _sum) #calculate f+ or fT @@ -98,14 +108,15 @@ _sum = 0 if subscript == "T": - b = bT + bT = [bT_0, bT_1, bT_2] + for i in range(N): + _sum += bT[i] * (tf.pow(z, i) - ((-1)**(i-N)) * (i/N) * tf.pow(z, N)) else: - b = bplus + bplus = [bplus_0, bplus_1, bplus_2] + for i in range(N): + _sum += bplus[i] * (tf.pow(z, i) - ((-1)**(i-N)) * (i/N) * tf.pow(z, N)) - for i in range(N): - _sum += b[i] * (tf.pow(z, i) - ((-1)**(i-N)) * (i/N) * tf.pow(z, N)) - - return tf.complex(prefactor * _sum, ztf.constant(0.0)) + return ztf.to_complex(prefactor * _sum) def resonance(q, _mass, width, phase, scale): @@ -139,19 +150,8 @@ return com -def bifur_gauss(q, mean, sigma_L, sigma_R, scale): - _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))) - - #Scale so the total area under curve is 1 and the top of the cusp is continuous - - dgamma = scale*_exp/(ztf.sqrt(2*np.pi))*2*(sigma_L*sigma_R)/(sigma_L+sigma_R) - - com = ztf.complex(dgamma, ztf.constant(0.0)) - - return com - -def axiv_nonres(q): +def axiv_nonres(q, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2): GF = ztf.constant(pdg['GF']) alpha_ew = ztf.constant(pdg['alpha_ew']) @@ -179,7 +179,7 @@ #left term in bracket - bracket_left = 2./3. * kabs**2. * beta**2. *tf.abs(tf.complex(C10eff, ztf.constant(0.0))*formfactor(q2, "+"))**2. + bracket_left = 2./3. * kabs**2. * beta**2. *tf.abs(tf.complex(C10eff, ztf.constant(0.0))*formfactor(q2, "+", b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2))**2. #middle term in bracket @@ -187,13 +187,13 @@ _under = q2 * mB**2. - bracket_middle = _top/_under *tf.pow(tf.abs(tf.complex(C10eff, ztf.constant(0.0)) * formfactor(q2, "0")), 2) + bracket_middle = _top/_under *tf.pow(tf.abs(tf.complex(C10eff, ztf.constant(0.0)) * formfactor(q2, "0", b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2)), 2) #Note sqrt(q2) comes from derivation as we use q2 and plot q return prefactor1 * (bracket_left + bracket_middle) * 2 *ztf.sqrt(q2) -def vec(q, funcs): +def vec(q, funcs, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2): q2 = tf.pow(q, 2) @@ -223,7 +223,7 @@ prefactor2 = kabs**2 * (1. - 1./3. * beta**2) - 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 + abs_bracket = tf.abs(c9eff(q, funcs) * formfactor(q2, "+", b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2) + tf.complex(2.0 * C7eff * (mb + ms)/(mB + mK), ztf.constant(0.0)) * formfactor(q2, "T", b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2))**2 bracket_right = prefactor2 * abs_bracket @@ -242,7 +242,7 @@ return c9 -# In[4]: +# In[5]: def G(y): @@ -287,9 +287,9 @@ return left_part + right_part_D + right_part_D_star -# ## C_q,qbar constraint +# ## C_q, qbar constraint -# In[5]: +# In[6]: # r = rho_scale * rho_width/rho_mass * np.cos(rho_phase)*(1-np.tan(rho_phase)*rho_width/rho_mass) @@ -309,12 +309,15 @@ # ## Build pdf -# In[6]: +# In[7]: class total_pdf(zfit.pdf.ZPDF): _N_OBS = 1 # dimension, can be omitted - _PARAMS = ['rho_mass', 'rho_scale', 'rho_phase', 'rho_width', + _PARAMS = ['b0_0', 'b0_1', 'b0_2', + 'bplus_0', 'bplus_1', 'bplus_2', + 'bT_0', 'bT_1', 'bT_2', + 'rho_mass', 'rho_scale', 'rho_phase', 'rho_width', 'jpsi_mass', 'jpsi_scale', 'jpsi_phase', 'jpsi_width', 'psi2s_mass', 'psi2s_scale', 'psi2s_phase', 'psi2s_width', 'p3770_mass', 'p3770_scale', 'p3770_phase', 'p3770_width', @@ -332,6 +335,10 @@ x = x.unstack_x() + b0 = [self.params['b0_0'], self.params['b0_1'], self.params['b0_2']] + bplus = [self.params['bplus_0'], self.params['bplus_1'], self.params['bplus_2']] + bT = [self.params['bT_0'], self.params['bT_1'], self.params['bT_2']] + def rho_res(q): return resonance(q, _mass = self.params['rho_mass'], scale = self.params['rho_scale'], phase = self.params['rho_phase'], width = self.params['rho_width']) @@ -379,9 +386,9 @@ funcs = rho_res(x) + omega_res(x) + phi_res(x) + jpsi_res(x) + psi2s_res(x) + p3770_res(x) + p4040_res(x)+ p4160_res(x) + p4415_res(x) + P2_D(x) + ttau_cusp(x) - vec_f = vec(x, funcs) + vec_f = vec(x, funcs, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2) - axiv_nr = axiv_nonres(x) + axiv_nr = axiv_nonres(x, b0_0, b0_1, b0_2, bplus_0, bplus_1, bplus_2, bT_0, bT_1, bT_2) tot = vec_f + axiv_nr @@ -390,7 +397,7 @@ # ## Load data -# In[7]: +# In[8]: x_min = 2*pdg['muon_M'] @@ -410,7 +417,22 @@ # ## Setup parameters -# In[8]: +# In[9]: + + +# formfactors + +b0_0 = zfit.Parameter("b0_0", ztf.constant(0.292), floating = False) #, lower_limit = -2.0, upper_limit= 2.0) +b0_1 = zfit.Parameter("b0_1", ztf.constant(0.281), floating = False) #, lower_limit = -2.0, upper_limit= 2.0) +b0_2 = zfit.Parameter("b0_2", ztf.constant(0.150), floating = False) #, lower_limit = -2.0, upper_limit= 2.0) + +bplus_0 = zfit.Parameter("bplus_0", ztf.constant(0.466), lower_limit = -2.0, upper_limit= 2.0) +bplus_1 = zfit.Parameter("bplus_1", ztf.constant(-0.885), lower_limit = -2.0, upper_limit= 2.0) +bplus_2 = zfit.Parameter("bplus_2", ztf.constant(-0.213), lower_limit = -2.0, upper_limit= 2.0) + +bT_0 = zfit.Parameter("bT_0", ztf.constant(0.460), floating = False) #, lower_limit = -2.0, upper_limit= 2.0) +bT_1 = zfit.Parameter("bT_1", ztf.constant(-1.089), floating = False) #, lower_limit = -2.0, upper_limit= 2.0) +bT_2 = zfit.Parameter("bT_2", ztf.constant(-1.114), floating = False) #, lower_limit = -2.0, upper_limit= 2.0) #rho @@ -450,7 +472,7 @@ jpsi_m = zfit.Parameter("jpsi_m", ztf.constant(jpsi_mass), floating = False) jpsi_w = zfit.Parameter("jpsi_w", ztf.constant(jpsi_width), floating = False) jpsi_p = zfit.Parameter("jpsi_p", ztf.constant(jpsi_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi) -jpsi_s = zfit.Parameter("jpsi_s", ztf.constant(jpsi_scale), lower_limit=jpsi_scale-np.sqrt(jpsi_scale), upper_limit=jpsi_scale+np.sqrt(jpsi_scale)) +jpsi_s = zfit.Parameter("jpsi_s", ztf.constant(jpsi_scale), floating = False) #, lower_limit=jpsi_scale-np.sqrt(jpsi_scale), upper_limit=jpsi_scale+np.sqrt(jpsi_scale)) #psi2s @@ -459,7 +481,7 @@ psi2s_m = zfit.Parameter("psi2s_m", ztf.constant(psi2s_mass), floating = False) psi2s_w = zfit.Parameter("psi2s_w", ztf.constant(psi2s_width), floating = False) psi2s_p = zfit.Parameter("psi2s_p", ztf.constant(psi2s_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi) -psi2s_s = zfit.Parameter("psi2s_s", ztf.constant(psi2s_scale), lower_limit=psi2s_scale-np.sqrt(psi2s_scale), upper_limit=psi2s_scale+np.sqrt(psi2s_scale)) +psi2s_s = zfit.Parameter("psi2s_s", ztf.constant(psi2s_scale), floating = False) #, lower_limit=psi2s_scale-np.sqrt(psi2s_scale), upper_limit=psi2s_scale+np.sqrt(psi2s_scale)) #psi(3770) @@ -467,8 +489,8 @@ p3770_m = zfit.Parameter("p3770_m", ztf.constant(p3770_mass), floating = False) p3770_w = zfit.Parameter("p3770_w", ztf.constant(p3770_width), floating = False) -p3770_p = zfit.Parameter("p3770_p", ztf.constant(p3770_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi) -p3770_s = zfit.Parameter("p3770_s", ztf.constant(p3770_scale), floating = False) #, lower_limit=p3770_scale-np.sqrt(p3770_scale), upper_limit=p3770_scale+np.sqrt(p3770_scale)) +p3770_p = zfit.Parameter("p3770_p", ztf.constant(p3770_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi) +p3770_s = zfit.Parameter("p3770_s", ztf.constant(p3770_scale), lower_limit=p3770_scale-np.sqrt(p3770_scale), upper_limit=p3770_scale+np.sqrt(p3770_scale)) #psi(4040) @@ -476,8 +498,8 @@ p4040_m = zfit.Parameter("p4040_m", ztf.constant(p4040_mass), floating = False) p4040_w = zfit.Parameter("p4040_w", ztf.constant(p4040_width), floating = False) -p4040_p = zfit.Parameter("p4040_p", ztf.constant(p4040_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi) -p4040_s = zfit.Parameter("p4040_s", ztf.constant(p4040_scale), floating = False) #, lower_limit=p4040_scale-np.sqrt(p4040_scale), upper_limit=p4040_scale+np.sqrt(p4040_scale)) +p4040_p = zfit.Parameter("p4040_p", ztf.constant(p4040_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi) +p4040_s = zfit.Parameter("p4040_s", ztf.constant(p4040_scale), lower_limit=p4040_scale-np.sqrt(p4040_scale), upper_limit=p4040_scale+np.sqrt(p4040_scale)) #psi(4160) @@ -485,8 +507,8 @@ p4160_m = zfit.Parameter("p4160_m", ztf.constant(p4160_mass), floating = False) p4160_w = zfit.Parameter("p4160_w", ztf.constant(p4160_width), floating = False) -p4160_p = zfit.Parameter("p4160_p", ztf.constant(p4160_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi) -p4160_s = zfit.Parameter("p4160_s", ztf.constant(p4160_scale), floating = False) #, lower_limit=p4160_scale-np.sqrt(p4160_scale), upper_limit=p4160_scale+np.sqrt(p4160_scale)) +p4160_p = zfit.Parameter("p4160_p", ztf.constant(p4160_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi) +p4160_s = zfit.Parameter("p4160_s", ztf.constant(p4160_scale), lower_limit=p4160_scale-np.sqrt(p4160_scale), upper_limit=p4160_scale+np.sqrt(p4160_scale)) #psi(4415) @@ -494,13 +516,20 @@ p4415_m = zfit.Parameter("p4415_m", ztf.constant(p4415_mass), floating = False) p4415_w = zfit.Parameter("p4415_w", ztf.constant(p4415_width), floating = False) -p4415_p = zfit.Parameter("p4415_p", ztf.constant(p4415_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi) -p4415_s = zfit.Parameter("p4415_s", ztf.constant(p4415_scale), floating = False) #, lower_limit=p4415_scale-np.sqrt(p4415_scale), upper_limit=p4415_scale+np.sqrt(p4415_scale)) +p4415_p = zfit.Parameter("p4415_p", ztf.constant(p4415_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi) +p4415_s = zfit.Parameter("p4415_s", ztf.constant(p4415_scale), lower_limit=p4415_scale-np.sqrt(p4415_scale), upper_limit=p4415_scale+np.sqrt(p4415_scale)) + + +# In[10]: + + +b0 = [b0_0, b0_1, b0_2] +b0[0] # ## Dynamic generation of 2 particle contribution -# In[9]: +# In[11]: _0 = jpsi_scale*np.cos(jpsi_phase)*jpsi_width/jpsi_mass**3 + psi2s_scale*np.cos(psi2s_phase)*psi2s_width/psi2s_mass**3 @@ -551,7 +580,7 @@ # ## Tau parameters -# In[10]: +# In[12]: tau_m = zfit.Parameter("tau_m", ztf.constant(pdg['tau_M']), floating = False) @@ -560,7 +589,7 @@ # ## Setup pdf -# In[11]: +# In[13]: total_f = total_pdf(obs=obs, jpsi_mass = jpsi_m, jpsi_scale = jpsi_s, jpsi_phase = jpsi_p, jpsi_width = jpsi_w, @@ -574,7 +603,9 @@ phi_mass = phi_m, phi_scale = phi_s, phi_phase = phi_p, phi_width = phi_w, DDstar_mass = DDstar_m, DDstar_scale = DDstar_s, DDstar_phase = DDstar_p, Dbar_mass = Dbar_m, Dbar_scale = Dbar_s, Dbar_phase = Dbar_p, - tau_mass = tau_m, C_tt = Ctt) + tau_mass = tau_m, C_tt = Ctt, b0_0 = b0_0, b0_1 = b0_1, b0_2 = b0_2, + bplus_0 = bplus_0, bplus_1 = bplus_1, bplus_2 = bplus_2, + bT_0 = bT_0, bT_1 = bT_1, bT_2 = bT_2) # print(total_pdf.obs) @@ -587,7 +618,7 @@ # ## Test if graphs actually work and compute values -# In[12]: +# In[14]: # def total_test_tf(xq): @@ -622,12 +653,15 @@ calcs_test = zfit.run(probs) res_y = zfit.run(jpsi_res(test_q)) -f0_y = zfit.run(formfactor(test_q,"0")) -fplus_y = zfit.run(formfactor(test_q,"+")) -fT_y = zfit.run(formfactor(test_q,"T")) +# b0 = [b0_0, b0_1, b0_2] +# bplus = [bplus_0, bplus_1, bplus_2] +# bT = [bT_0, bT_1, bT_2] +# f0_y = zfit.run(tf.math.real(formfactor(test_q,"0", b0, bplus, bT))) +# fplus_y = zfit.run(tf.math.real(formfactor(test_q,"+", b0, bplus, bT))) +# fT_y = zfit.run(tf.math.real(formfactor(test_q,"T", b0, bplus, bT))) -# In[13]: +# In[15]: plt.clf() @@ -645,7 +679,7 @@ # print(jpsi_width) -# In[14]: +# In[16]: @@ -658,7 +692,7 @@ # plt.semilogy(test_q, calcs_test, label = 'pdf') -# In[15]: +# In[17]: # 0.213/(0.00133+0.213+0.015) @@ -666,7 +700,7 @@ # ## Adjust scaling of different parts -# In[16]: +# In[18]: total_f.update_integration_options(draws_per_dim=200000, mc_sampler=None) @@ -676,7 +710,7 @@ # print(pdg["jpsi_BR"]/pdg["NR_BR"], inte_fl*pdg["psi2s_auc"]/pdg["NR_auc"]) -# In[17]: +# In[19]: # # print("jpsi:", inte_fl) @@ -723,9 +757,9 @@ # # Sampling -# ## Toys +# ## Mixture distribution for sampling -# In[18]: +# In[20]: @@ -806,25 +840,25 @@ return sample, thresholds, weights, weights_max, n_to_produce -# In[19]: +# In[21]: total_f._sample_and_weights = UniformSampleAndWeights -# In[20]: +# In[22]: # 0.00133/(0.00133+0.213+0.015)*(x_max-3750)/(x_max-x_min) -# In[21]: +# In[23]: # zfit.settings.set_verbosity(10) -# In[22]: +# In[24]: # # zfit.run.numeric_checks = False @@ -867,7 +901,7 @@ # pkl.dump(sam, f, pkl.HIGHEST_PROTOCOL) -# In[23]: +# In[25]: # with open(r"data/zfit_toys/toy_0/0.pkl", "rb") as input_file: @@ -881,7 +915,7 @@ # print(np.sum(sam-sam2)) -# In[24]: +# In[26]: # print("Time to generate full toy: {} s".format(int(time.time()-start))) @@ -902,7 +936,7 @@ # print(total_samp[:nevents].shape) -# In[25]: +# In[27]: # plt.clf() @@ -926,7 +960,7 @@ # plt.savefig('test2.png') -# In[26]: +# In[28]: # sampler = total_f.create_sampler(n=nevents) @@ -946,13 +980,13 @@ # minimum = minimizer.minimize(nll) -# In[27]: +# In[29]: # jpsi_width -# In[28]: +# In[30]: # plt.hist(sample, weights=1 / prob(sample)) @@ -960,7 +994,7 @@ # # Fitting -# In[29]: +# In[31]: # start = time.time() @@ -987,7 +1021,7 @@ # print("Hesse errors:", result.hesse()) -# In[30]: +# In[32]: # print("Time taken for fitting: {}".format(display_time(int(time.time()-start)))) @@ -998,7 +1032,7 @@ # res_y = zfit.run(jpsi_res(test_q)) -# In[31]: +# In[33]: # plt.clf() @@ -1013,7 +1047,7 @@ # # print(jpsi_width) -# In[32]: +# In[34]: # _tot = 4.37e-7+6.02e-5+4.97e-6 @@ -1024,7 +1058,7 @@ # print(_probs) -# In[33]: +# In[35]: # dtype = 'float64' @@ -1042,14 +1076,14 @@ # # print(zfit.run(mixture.prob(mixture.sample((10, 1))))) -# In[34]: +# In[36]: # print((zfit.run(jpsi_p)%(2*np.pi))/np.pi) # print((zfit.run(psi2s_p)%(2*np.pi))/np.pi) -# In[35]: +# In[37]: # def jpsi_res(q): @@ -1077,13 +1111,42 @@ # phase = p4415_phase, width = p4415_width) -# In[36]: +# In[38]: # 0.15**2*4.2/1000 # result.hesse() +# ## Constraints + +# In[39]: + + +# 1. Constraint - Real part of sum of Psi contrib and D contribs + + +sum_list = [] + +sum_list.append(ztf.to_complex(jpsi_s) * tf.exp(tf.complex(ztf.constant(0.0), jpsi_p)) * ztf.to_complex(jpsi_w / (tf.pow(jpsi_m,3)))) +sum_list.append(ztf.to_complex(psi2s_s) * tf.exp(tf.complex(ztf.constant(0.0), psi2s_p)) * ztf.to_complex(psi2s_w / (tf.pow(psi2s_m,3)))) +sum_list.append(ztf.to_complex(p3770_s) * tf.exp(tf.complex(ztf.constant(0.0), p3770_p)) * ztf.to_complex(p3770_w / (tf.pow(p3770_m,3)))) +sum_list.append(ztf.to_complex(p4040_s) * tf.exp(tf.complex(ztf.constant(0.0), p4040_p)) * ztf.to_complex(p4040_w / (tf.pow(p4040_m,3)))) +sum_list.append(ztf.to_complex(p4160_s) * tf.exp(tf.complex(ztf.constant(0.0), p4160_p)) * ztf.to_complex(p4160_w / (tf.pow(p4160_m,3)))) +sum_list.append(ztf.to_complex(p4415_s) * tf.exp(tf.complex(ztf.constant(0.0), p4415_p)) * ztf.to_complex(p4415_w / (tf.pow(p4415_m,3)))) +sum_list.append(ztf.to_complex(DDstar_s) * tf.exp(tf.complex(ztf.constant(0.0), DDstar_p)) * ztf.to_complex(1.0 / (10.0*tf.pow(DDstar_m,2)))) +sum_list.append(ztf.to_complex(Dbar_s) * tf.exp(tf.complex(ztf.constant(0.0), Dbar_p)) * ztf.to_complex(1.0 / (6.0*tf.pow(Dbar_m,2)))) + +sum_ru_1 = ztf.to_complex(ztf.constant(0.0)) + +for part in sum_list: + sum_ru_1 += part + +sum_1 = tf.math.real(sum_ru_1) +constraint1 = zfit.core.constraint.GaussianConstraint(params = [sum_1], mu = [ztf.constant(1.7*10**-8)], + sigma = [ztf.constant(2.2*10**-8)]) + + # # Analysis # In[ ]: @@ -1155,7 +1218,7 @@ for param in total_f.get_dependents(): param.randomize() - nll = zfit.loss.UnbinnedNLL(model=total_f, data=data, fit_range = (jpsi_mass+50.0, psi2s_mass-50.0)) + nll = zfit.loss.UnbinnedNLL(model=total_f, data=data, fit_range = (x_min, x_max)) minimizer = zfit.minimize.MinuitMinimizer(verbosity = 5) # minimizer._use_tfgrad = False @@ -1191,5 +1254,24 @@ # In[ ]: +calcs_test = zfit.run(probs) +res_y = zfit.run(jpsi_res(test_q)) +plt.clf() +# plt.plot(x_part, calcs, '.') +plt.plot(test_q, calcs_test, label = 'pdf') +# plt.plot(test_q, f0_y, label = '0') +# plt.plot(test_q, fT_y, label = 'T') +# plt.plot(test_q, fplus_y, label = '+') +# plt.plot(test_q, res_y, label = 'res') +plt.legend() +plt.ylim(0.0, 6e-6) +# plt.yscale('log') +# plt.xlim(770, 785) +plt.savefig('test2.png') + + +# In[ ]: + + diff --git a/raremodel-nb_0.1.ipynb b/raremodel-nb_0.1.ipynb new file mode 100644 index 0000000..b2438f8 --- /dev/null +++ b/raremodel-nb_0.1.ipynb @@ -0,0 +1,1464 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Import" + ] + }, + { + "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:57: 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 os\n", + "\n", + "# os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"-1\"\n", + "\n", + "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\n", + "import tensorflow_probability as tfp\n", + "tfd = tfp.distributions" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# chunksize = 10000\n", + "# zfit.run.chunking.active = True\n", + "# zfit.run.chunking.max_n_points = chunksize" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Build model and graphs\n", + "## Create graphs" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "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 = ztf.constant(pdg['Ks_M'])\n", + " mbstar0 = ztf.constant(pdg[\"mbstar0\"])\n", + " mbstar = ztf.constant(pdg[\"mbstar\"])\n", + " b0 = ztf.constant(pdg[\"b0\"])\n", + " bplus = ztf.constant(pdg[\"bplus\"])\n", + " bT = ztf.constant(pdg[\"bT\"])\n", + "\n", + " mmu = ztf.constant(pdg['muon_M'])\n", + " mb = ztf.constant(pdg['bquark_M'])\n", + " ms = ztf.constant(pdg['squark_M'])\n", + " mB = ztf.constant(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, q) * _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" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def G(y):\n", + " \n", + " def inner_rect_bracket(q):\n", + " return tf.log(ztf.to_complex((1+tf.sqrt(q))/(1-tf.sqrt(q)))-tf.complex(ztf.constant(0), -1*ztf.constant(np.pi))) \n", + " \n", + " def inner_right(q):\n", + " return ztf.to_complex(2 * tf.atan(1/tf.sqrt(tf.math.real(-q))))\n", + " \n", + " big_bracket = tf.where(tf.math.real(y) > ztf.constant(0.0), inner_rect_bracket(y), inner_right(y))\n", + " \n", + " return ztf.to_complex(tf.sqrt(tf.abs(y))) * big_bracket\n", + "\n", + "def h_S(m, q):\n", + " \n", + " return ztf.to_complex(2) - G(ztf.to_complex(1) - ztf.to_complex(4*tf.pow(m, 2)) / ztf.to_complex(tf.pow(q, 2)))\n", + "\n", + "def h_P(m, q):\n", + " \n", + " return ztf.to_complex(2/3) + (ztf.to_complex(1) - ztf.to_complex(4*tf.pow(m, 2)) / ztf.to_complex(tf.pow(q, 2))) * h_S(m,q)\n", + "\n", + "def two_p_ccbar(mD, m_D_bar, m_D_star, q):\n", + " \n", + " \n", + " #Load constants\n", + " nu_D_bar = ztf.to_complex(pdg[\"nu_D_bar\"])\n", + " nu_D = ztf.to_complex(pdg[\"nu_D\"])\n", + " nu_D_star = ztf.to_complex(pdg[\"nu_D_star\"])\n", + " \n", + " phase_D_bar = ztf.to_complex(pdg[\"phase_D_bar\"])\n", + " phase_D = ztf.to_complex(pdg[\"phase_D\"])\n", + " phase_D_star = ztf.to_complex(pdg[\"phase_D_star\"])\n", + " \n", + " #Calculation\n", + " left_part = nu_D_bar * tf.exp(tf.complex(ztf.constant(0.0), phase_D_bar)) * h_S(m_D_bar, q) \n", + " \n", + " right_part_D = nu_D * tf.exp(tf.complex(ztf.constant(0.0), phase_D)) * h_P(m_D, q) \n", + " \n", + " right_part_D_star = nu_D_star * tf.exp(tf.complex(ztf.constant(0.0), phase_D_star)) * h_P(m_D_star, q) \n", + "\n", + " return left_part + right_part_D + right_part_D_star" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## C_q,qbar constraint" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# r = rho_scale * rho_width/rho_mass * np.cos(rho_phase)*(1-np.tan(rho_phase)*rho_width/rho_mass)\n", + "# o = omega_scale*np.cos(omega_phase)*omega_width/omega_mass\n", + "# p = phi_scale*np.cos(phi_phase)*phi_width/phi_mass\n", + "\n", + "# # phi_s = np.linspace(-500, 5000, 100000)\n", + "\n", + "# # p_ = phi_s*np.cos(phi_phase)*phi_width/phi_mass\n", + "\n", + "# # p_y = r+o+p_\n", + "\n", + "# # plt.plot(phi_s, p_y)\n", + "\n", + "# print(r + o + p)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Build pdf" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "class total_pdf(zfit.pdf.ZPDF):\n", + " _N_OBS = 1 # dimension, can be omitted\n", + " _PARAMS = ['rho_mass', 'rho_scale', 'rho_phase', 'rho_width',\n", + " 'jpsi_mass', 'jpsi_scale', 'jpsi_phase', 'jpsi_width',\n", + " 'psi2s_mass', 'psi2s_scale', 'psi2s_phase', 'psi2s_width',\n", + " 'p3770_mass', 'p3770_scale', 'p3770_phase', 'p3770_width',\n", + " 'p4040_mass', 'p4040_scale', 'p4040_phase', 'p4040_width',\n", + " 'p4160_mass', 'p4160_scale', 'p4160_phase', 'p4160_width',\n", + " 'p4415_mass', 'p4415_scale', 'p4415_phase', 'p4415_width',\n", + " 'omega_mass', 'omega_scale', 'omega_phase', 'omega_width',\n", + " 'phi_mass', 'phi_scale', 'phi_phase', 'phi_width',\n", + " 'Dbar_mass', 'Dbar_scale', 'Dbar_phase',\n", + " 'DDstar_mass', 'DDstar_scale', 'DDstar_phase',\n", + " 'tau_mass', 'C_tt']\n", + "# the name of the parameters\n", + "\n", + " def _unnormalized_pdf(self, x):\n", + " \n", + " x = x.unstack_x()\n", + " \n", + " def rho_res(q):\n", + " return resonance(q, _mass = self.params['rho_mass'], scale = self.params['rho_scale'],\n", + " phase = self.params['rho_phase'], width = self.params['rho_width'])\n", + " \n", + " def omega_res(q):\n", + " return resonance(q, _mass = self.params['omega_mass'], scale = self.params['omega_scale'],\n", + " phase = self.params['omega_phase'], width = self.params['omega_width'])\n", + " \n", + " def phi_res(q):\n", + " return resonance(q, _mass = self.params['phi_mass'], scale = self.params['phi_scale'],\n", + " phase = self.params['phi_phase'], width = self.params['phi_width'])\n", + "\n", + " def jpsi_res(q):\n", + " return resonance(q, _mass = self.params['jpsi_mass'], scale = self.params['jpsi_scale'],\n", + " phase = self.params['jpsi_phase'], width = self.params['jpsi_width'])\n", + "\n", + " def psi2s_res(q):\n", + " return resonance(q, _mass = self.params['psi2s_mass'], scale = self.params['psi2s_scale'],\n", + " phase = self.params['psi2s_phase'], width = self.params['psi2s_width'])\n", + " \n", + " def p3770_res(q):\n", + " return resonance(q, _mass = self.params['p3770_mass'], scale = self.params['p3770_scale'],\n", + " phase = self.params['p3770_phase'], width = self.params['p3770_width'])\n", + " \n", + " def p4040_res(q):\n", + " return resonance(q, _mass = self.params['p4040_mass'], scale = self.params['p4040_scale'],\n", + " phase = self.params['p4040_phase'], width = self.params['p4040_width'])\n", + " \n", + " def p4160_res(q):\n", + " return resonance(q, _mass = self.params['p4160_mass'], scale = self.params['p4160_scale'],\n", + " phase = self.params['p4160_phase'], width = self.params['p4160_width'])\n", + " \n", + " def p4415_res(q):\n", + " return resonance(q, _mass = self.params['p4415_mass'], scale = self.params['p4415_scale'],\n", + " phase = self.params['p4415_phase'], width = self.params['p4415_width'])\n", + " \n", + " def P2_D(q):\n", + " Dbar_contrib = ztf.to_complex(self.params['Dbar_scale'])*tf.exp(tf.complex(ztf.constant(0.0), self.params['Dbar_phase']))*ztf.to_complex(h_S(self.params['Dbar_mass'], q))\n", + " DDstar_contrib = ztf.to_complex(self.params['DDstar_scale'])*tf.exp(tf.complex(ztf.constant(0.0), self.params['DDstar_phase']))*ztf.to_complex(h_P(self.params['DDstar_mass'], q))\n", + " return Dbar_contrib + DDstar_contrib\n", + " \n", + " def ttau_cusp(q):\n", + " return ztf.to_complex(self.params['C_tt'])*(ztf.to_complex((h_S(self.params['tau_mass'], q))) - ztf.to_complex(h_P(self.params['tau_mass'], q)))\n", + " \n", + "\n", + " funcs = rho_res(x) + omega_res(x) + phi_res(x) + jpsi_res(x) + psi2s_res(x) + p3770_res(x) + p4040_res(x)+ p4160_res(x) + p4415_res(x) + P2_D(x) + ttau_cusp(x)\n", + "\n", + " vec_f = vec(x, 0.0 * funcs)\n", + "\n", + " axiv_nr = axiv_nonres(x)\n", + "\n", + " tot = vec_f + axiv_nr\n", + "\n", + " return tot" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load data" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "x_min = 2*pdg['muon_M']\n", + "x_max = (pdg[\"Bplus_M\"]-pdg[\"Ks_M\"]-0.1)\n", + "\n", + "obs = zfit.Space('q', limits = (x_min, x_max))\n", + "\n", + "# with open(r\"./data/slim_points/slim_points_toy_0_range({0}-{1}).pkl\".format(int(x_min), int(x_max)), \"rb\") as input_file:\n", + "# part_set = pkl.load(input_file)\n", + "\n", + "# x_part = part_set['x_part']\n", + "\n", + "# x_part = x_part.astype('float64')\n", + "\n", + "# data = zfit.data.Data.from_numpy(array=x_part, obs=obs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow\\python\\ops\\resource_variable_ops.py:435: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Colocations handled automatically by placer.\n" + ] + } + ], + "source": [ + "#rho\n", + "\n", + "rho_mass, rho_width, rho_phase, rho_scale = pdg[\"rho\"]\n", + "\n", + "rho_m = zfit.Parameter(\"rho_m\", ztf.constant(rho_mass), floating = False) #lower_limit = rho_mass - rho_width,\n", + "# upper_limit = rho_mass + rho_width)\n", + "rho_w = zfit.Parameter(\"rho_w\", ztf.constant(rho_width), floating = False)\n", + "rho_p = zfit.Parameter(\"rho_p\", ztf.constant(rho_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "rho_s = zfit.Parameter(\"rho_s\", ztf.constant(rho_scale), floating = False) #, lower_limit=rho_scale-np.sqrt(rho_scale), upper_limit=rho_scale+np.sqrt(rho_scale))\n", + "\n", + "#omega\n", + "\n", + "omega_mass, omega_width, omega_phase, omega_scale = pdg[\"omega\"]\n", + "\n", + "omega_m = zfit.Parameter(\"omega_m\", ztf.constant(omega_mass), floating = False)\n", + "omega_w = zfit.Parameter(\"omega_w\", ztf.constant(omega_width), floating = False)\n", + "omega_p = zfit.Parameter(\"omega_p\", ztf.constant(omega_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "omega_s = zfit.Parameter(\"omega_s\", ztf.constant(omega_scale), floating = False) #, lower_limit=omega_scale-np.sqrt(omega_scale), upper_limit=omega_scale+np.sqrt(omega_scale))\n", + "\n", + "\n", + "#phi\n", + "\n", + "phi_mass, phi_width, phi_phase, phi_scale = pdg[\"phi\"]\n", + "\n", + "phi_m = zfit.Parameter(\"phi_m\", ztf.constant(phi_mass), floating = False)\n", + "phi_w = zfit.Parameter(\"phi_w\", ztf.constant(phi_width), floating = False)\n", + "phi_p = zfit.Parameter(\"phi_p\", ztf.constant(phi_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "phi_s = zfit.Parameter(\"phi_s\", ztf.constant(phi_scale), floating = False) #, lower_limit=phi_scale-np.sqrt(phi_scale), upper_limit=phi_scale+np.sqrt(phi_scale))\n", + "\n", + "#jpsi\n", + "\n", + "jpsi_mass, jpsi_width, jpsi_phase, jpsi_scale = pdg[\"jpsi\"]\n", + "# jpsi_scale *= pdg[\"factor_jpsi\"]\n", + "\n", + "jpsi_m = zfit.Parameter(\"jpsi_m\", ztf.constant(jpsi_mass), floating = False)\n", + "jpsi_w = zfit.Parameter(\"jpsi_w\", ztf.constant(jpsi_width), floating = False)\n", + "jpsi_p = zfit.Parameter(\"jpsi_p\", ztf.constant(jpsi_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "jpsi_s = zfit.Parameter(\"jpsi_s\", ztf.constant(jpsi_scale), lower_limit=jpsi_scale-np.sqrt(jpsi_scale), upper_limit=jpsi_scale+np.sqrt(jpsi_scale))\n", + "\n", + "#psi2s\n", + "\n", + "psi2s_mass, psi2s_width, psi2s_phase, psi2s_scale = pdg[\"psi2s\"]\n", + "\n", + "psi2s_m = zfit.Parameter(\"psi2s_m\", ztf.constant(psi2s_mass), floating = False)\n", + "psi2s_w = zfit.Parameter(\"psi2s_w\", ztf.constant(psi2s_width), floating = False)\n", + "psi2s_p = zfit.Parameter(\"psi2s_p\", ztf.constant(psi2s_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "psi2s_s = zfit.Parameter(\"psi2s_s\", ztf.constant(psi2s_scale), lower_limit=psi2s_scale-np.sqrt(psi2s_scale), upper_limit=psi2s_scale+np.sqrt(psi2s_scale))\n", + "\n", + "#psi(3770)\n", + "\n", + "p3770_mass, p3770_width, p3770_phase, p3770_scale = pdg[\"p3770\"]\n", + "\n", + "p3770_m = zfit.Parameter(\"p3770_m\", ztf.constant(p3770_mass), floating = False)\n", + "p3770_w = zfit.Parameter(\"p3770_w\", ztf.constant(p3770_width), floating = False)\n", + "p3770_p = zfit.Parameter(\"p3770_p\", ztf.constant(p3770_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p3770_s = zfit.Parameter(\"p3770_s\", ztf.constant(p3770_scale), floating = False) #, lower_limit=p3770_scale-np.sqrt(p3770_scale), upper_limit=p3770_scale+np.sqrt(p3770_scale))\n", + "\n", + "#psi(4040)\n", + "\n", + "p4040_mass, p4040_width, p4040_phase, p4040_scale = pdg[\"p4040\"]\n", + "\n", + "p4040_m = zfit.Parameter(\"p4040_m\", ztf.constant(p4040_mass), floating = False)\n", + "p4040_w = zfit.Parameter(\"p4040_w\", ztf.constant(p4040_width), floating = False)\n", + "p4040_p = zfit.Parameter(\"p4040_p\", ztf.constant(p4040_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p4040_s = zfit.Parameter(\"p4040_s\", ztf.constant(p4040_scale), floating = False) #, lower_limit=p4040_scale-np.sqrt(p4040_scale), upper_limit=p4040_scale+np.sqrt(p4040_scale))\n", + "\n", + "#psi(4160)\n", + "\n", + "p4160_mass, p4160_width, p4160_phase, p4160_scale = pdg[\"p4160\"]\n", + "\n", + "p4160_m = zfit.Parameter(\"p4160_m\", ztf.constant(p4160_mass), floating = False)\n", + "p4160_w = zfit.Parameter(\"p4160_w\", ztf.constant(p4160_width), floating = False)\n", + "p4160_p = zfit.Parameter(\"p4160_p\", ztf.constant(p4160_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p4160_s = zfit.Parameter(\"p4160_s\", ztf.constant(p4160_scale), floating = False) #, lower_limit=p4160_scale-np.sqrt(p4160_scale), upper_limit=p4160_scale+np.sqrt(p4160_scale))\n", + "\n", + "#psi(4415)\n", + "\n", + "p4415_mass, p4415_width, p4415_phase, p4415_scale = pdg[\"p4415\"]\n", + "\n", + "p4415_m = zfit.Parameter(\"p4415_m\", ztf.constant(p4415_mass), floating = False)\n", + "p4415_w = zfit.Parameter(\"p4415_w\", ztf.constant(p4415_width), floating = False)\n", + "p4415_p = zfit.Parameter(\"p4415_p\", ztf.constant(p4415_phase), floating = False) #, lower_limit=-2*np.pi, upper_limit=2*np.pi)\n", + "p4415_s = zfit.Parameter(\"p4415_s\", ztf.constant(p4415_scale), floating = False) #, lower_limit=p4415_scale-np.sqrt(p4415_scale), upper_limit=p4415_scale+np.sqrt(p4415_scale))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dynamic generation of 2 particle contribution" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "_0 = jpsi_scale*np.cos(jpsi_phase)*jpsi_width/jpsi_mass**3 + psi2s_scale*np.cos(psi2s_phase)*psi2s_width/psi2s_mass**3\n", + "_1 = p3770_scale*np.cos(p3770_phase)*p3770_width/p3770_mass**3 + p4040_scale*np.cos(p4040_phase)*p4040_width/p4040_mass**3\n", + "_2 = p4160_scale*np.cos(p4160_phase)*p4160_width/p4160_mass**3 + p4415_scale*np.cos(p4415_phase)*p4415_width/p4415_mass**3\n", + "\n", + "C_pert = np.random.uniform(0.03, 0.1)\n", + "# c_pert = 0.1\n", + "m_c = 1300\n", + "\n", + "cDDstar_phase = 10\n", + "\n", + "\n", + "DDstar_eta = 0\n", + "Dbar_phase = np.random.uniform(0.0, 2*np.pi)\n", + "DDstar_phase = np.random.uniform(0.0, 2*np.pi)\n", + "DDstar_mass = pdg['D0_M']\n", + "\n", + "if Dbar_phase < np.pi:\n", + " Dbar_phase = 0.0\n", + "else:\n", + " Dbar_phase = np.pi\n", + "\n", + "R = (C_pert/(m_c**2) - ((_0 + _1 + _2)))\n", + "\n", + "Dbar_mass = (pdg['D0_M']+pdg['Dst_M'])/2\n", + "\n", + "Dbar_eta = R/np.cos(Dbar_phase)*(6*Dbar_mass**2)\n", + "\n", + "# print(np.cos(Dbar_phase))\n", + "\n", + "# cDDstar_phase = R_*10*DDstar_mass**2/DDstar_eta\n", + "\n", + "\n", + "# print(Dbar_eta)\n", + "\n", + "\n", + "Dbar_s = zfit.Parameter(\"Dbar_s\", ztf.constant(Dbar_eta), lower_limit=-1.464, upper_limit=1.464)\n", + "Dbar_m = zfit.Parameter(\"Dbar_m\", ztf.constant(Dbar_mass), floating = False)\n", + "Dbar_p = zfit.Parameter(\"Dbar_p\", ztf.constant(Dbar_phase), floating = False)\n", + "DDstar_s = zfit.Parameter(\"DDstar_s\", ztf.constant(DDstar_eta), floating = False)\n", + "DDstar_m = zfit.Parameter(\"DDstar_m\", ztf.constant(DDstar_mass), floating = False)\n", + "DDstar_p = zfit.Parameter(\"DDstar_p\", ztf.constant(DDstar_phase), floating = False)\n", + "\n", + "Dbar_s.set_value(0.0)\n", + "DDstar_s.set_value(0.0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Tau parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "tau_m = zfit.Parameter(\"tau_m\", ztf.constant(pdg['tau_M']), floating = False)\n", + "Ctt = zfit.Parameter(\"Ctt\", ztf.constant(0.0), lower_limit=-0.5, upper_limit=0.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup pdf" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "total_f = total_pdf(obs=obs, jpsi_mass = jpsi_m, jpsi_scale = jpsi_s, jpsi_phase = jpsi_p, jpsi_width = jpsi_w,\n", + " psi2s_mass = psi2s_m, psi2s_scale = psi2s_s, psi2s_phase = psi2s_p, psi2s_width = psi2s_w,\n", + " p3770_mass = p3770_m, p3770_scale = p3770_s, p3770_phase = p3770_p, p3770_width = p3770_w,\n", + " p4040_mass = p4040_m, p4040_scale = p4040_s, p4040_phase = p4040_p, p4040_width = p4040_w,\n", + " p4160_mass = p4160_m, p4160_scale = p4160_s, p4160_phase = p4160_p, p4160_width = p4160_w,\n", + " p4415_mass = p4415_m, p4415_scale = p4415_s, p4415_phase = p4415_p, p4415_width = p4415_w,\n", + " rho_mass = rho_m, rho_scale = rho_s, rho_phase = rho_p, rho_width = rho_w,\n", + " omega_mass = omega_m, omega_scale = omega_s, omega_phase = omega_p, omega_width = omega_w,\n", + " phi_mass = phi_m, phi_scale = phi_s, phi_phase = phi_p, phi_width = phi_w,\n", + " DDstar_mass = DDstar_m, DDstar_scale = DDstar_s, DDstar_phase = DDstar_p,\n", + " Dbar_mass = Dbar_m, Dbar_scale = Dbar_s, Dbar_phase = Dbar_p,\n", + " tau_mass = tau_m, C_tt = Ctt)\n", + " \n", + " \n", + "# print(total_pdf.obs)\n", + "\n", + "# print(calcs_test)\n", + "\n", + "# for param in total_f.get_dependents():\n", + "# print(zfit.run(param))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Test if graphs actually work and compute values" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# def total_test_tf(xq):\n", + "\n", + "# def jpsi_res(q):\n", + "# return resonance(q, jpsi_m, jpsi_s, jpsi_p, jpsi_w)\n", + "\n", + "# 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 = jpsi_res(xq) + psi2s_res(xq) + cusp(xq)\n", + "\n", + "# vec_f = vec(xq, funcs)\n", + "\n", + "# axiv_nr = axiv_nonres(xq)\n", + "\n", + "# tot = vec_f + axiv_nr\n", + " \n", + "# return tot\n", + "\n", + "def jpsi_res(q):\n", + " return resonance(q, jpsi_m, jpsi_s, jpsi_p, jpsi_w)\n", + "\n", + "# calcs = zfit.run(total_test_tf(x_part))\n", + "\n", + "test_q = np.linspace(x_min, x_max, 200000)\n", + "\n", + "probs = total_f.pdf(test_q)\n", + "\n", + "calcs_test = zfit.run(probs)\n", + "res_y = zfit.run(jpsi_res(test_q))\n", + "# f0_y = zfit.run(formfactor(test_q,\"0\"))\n", + "# fplus_y = zfit.run(formfactor(test_q,\"+\"))\n", + "# fT_y = zfit.run(formfactor(test_q,\"T\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.clf()\n", + "# plt.plot(x_part, calcs, '.')\n", + "plt.plot(test_q, calcs_test, label = 'pdf')\n", + "# plt.plot(test_q, f0_y, label = '0')\n", + "# plt.plot(test_q, fT_y, label = 'T')\n", + "# plt.plot(test_q, fplus_y, label = '+')\n", + "# plt.plot(test_q, res_y, label = 'res')\n", + "plt.legend()\n", + "# plt.ylim(0.0, 6e-6)\n", + "# plt.yscale('log')\n", + "# plt.xlim(770, 785)\n", + "plt.savefig('test.png')\n", + "# print(jpsi_width)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "# probs = mixture.prob(test_q)\n", + "# probs_np = zfit.run(probs)\n", + "# probs_np *= np.max(calcs_test) / np.max(probs_np)\n", + "# plt.figure()\n", + "# plt.semilogy(test_q, probs_np,label=\"importance sampling\")\n", + "# plt.semilogy(test_q, calcs_test, label = 'pdf')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "# 0.213/(0.00133+0.213+0.015)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Adjust scaling of different parts" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "total_f.update_integration_options(draws_per_dim=200000, mc_sampler=None)\n", + "# inte = total_f.integrate(limits = (2000, x_max), norm_range=False)\n", + "# inte_fl = zfit.run(inte)\n", + "# print(inte_fl)\n", + "# print(pdg[\"jpsi_BR\"]/pdg[\"NR_BR\"], inte_fl*pdg[\"psi2s_auc\"]/pdg[\"NR_auc\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# # print(\"jpsi:\", inte_fl)\n", + "# # print(\"Increase am by factor:\", np.sqrt(pdg[\"jpsi_BR\"]/pdg[\"NR_BR\"]*pdg[\"NR_auc\"]/inte_fl))\n", + "# # print(\"New amp:\", pdg[\"jpsi\"][3]*np.sqrt(pdg[\"jpsi_BR\"]/pdg[\"NR_BR\"]*pdg[\"NR_auc\"]/inte_fl))\n", + "\n", + "# # print(\"psi2s:\", inte_fl)\n", + "# # print(\"Increase am by factor:\", np.sqrt(pdg[\"psi2s_BR\"]/pdg[\"NR_BR\"]*pdg[\"NR_auc\"]/inte_fl))\n", + "# # print(\"New amp:\", pdg[\"psi2s\"][3]*np.sqrt(pdg[\"psi2s_BR\"]/pdg[\"NR_BR\"]*pdg[\"NR_auc\"]/inte_fl))\n", + "\n", + "# name = \"phi\"\n", + "\n", + "# print(name+\":\", inte_fl)\n", + "# print(\"Increase am by factor:\", np.sqrt(pdg[name+\"_BR\"]/pdg[\"NR_BR\"]*pdg[\"NR_auc\"]/inte_fl))\n", + "# print(\"New amp:\", pdg[name][3]*np.sqrt(pdg[name+\"_BR\"]/pdg[\"NR_BR\"]*pdg[\"NR_auc\"]/inte_fl))\n", + "\n", + "\n", + "# # 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() - _))))\n", + "\n", + "# print(pdg['NR_BR']/pdg['NR_auc']*inte_fl)\n", + "# print(0.25**2*4.2/1000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Sampling\n", + "## Toys" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + " \n", + "# print(list_of_borders[:9])\n", + "# print(list_of_borders[-9:])\n", + "\n", + "\n", + "class UniformSampleAndWeights(zfit.util.execution.SessionHolderMixin):\n", + " def __call__(self, limits, dtype, n_to_produce):\n", + " # n_to_produce = tf.cast(n_to_produce, dtype=tf.int32)\n", + " low, high = limits.limit1d\n", + " low = tf.cast(low, dtype=dtype)\n", + " high = tf.cast(high, dtype=dtype)\n", + "# uniform = tfd.Uniform(low=low, high=high)\n", + "# uniformjpsi = tfd.Uniform(low=tf.constant(3080, dtype=dtype), high=tf.constant(3112, dtype=dtype))\n", + "# uniformpsi2s = tfd.Uniform(low=tf.constant(3670, dtype=dtype), high=tf.constant(3702, dtype=dtype))\n", + "\n", + "# list_of_borders = []\n", + "# _p = []\n", + "# splits = 10\n", + "\n", + "# _ = np.linspace(x_min, x_max, splits)\n", + "\n", + "# for i in range(splits):\n", + "# list_of_borders.append(tf.constant(_[i], dtype=dtype))\n", + "# _p.append(tf.constant(1/splits, dtype=dtype))\n", + " \n", + "# mixture = tfd.MixtureSameFamily(mixture_distribution=tfd.Categorical(probs=_p[:(splits-1)]),\n", + "# components_distribution=tfd.Uniform(low=list_of_borders[:(splits-1)], \n", + "# high=list_of_borders[-(splits-1):]))\n", + " mixture = tfd.MixtureSameFamily(mixture_distribution=tfd.Categorical(probs=[tf.constant(0.05, dtype=dtype),\n", + " tf.constant(0.93, dtype=dtype),\n", + " tf.constant(0.05, dtype=dtype),\n", + " tf.constant(0.065, dtype=dtype),\n", + " tf.constant(0.04, dtype=dtype),\n", + " tf.constant(0.05, dtype=dtype)]),\n", + " components_distribution=tfd.Uniform(low=[tf.constant(x_min, dtype=dtype), \n", + " tf.constant(3090, dtype=dtype),\n", + " tf.constant(3681, dtype=dtype), \n", + " tf.constant(3070, dtype=dtype),\n", + " tf.constant(1000, dtype=dtype),\n", + " tf.constant(3660, dtype=dtype)], \n", + " high=[tf.constant(x_max, dtype=dtype),\n", + " tf.constant(3102, dtype=dtype), \n", + " tf.constant(3691, dtype=dtype),\n", + " tf.constant(3110, dtype=dtype),\n", + " tf.constant(1040, dtype=dtype),\n", + " tf.constant(3710, dtype=dtype)]))\n", + "# dtype = tf.float64\n", + "# mixture = tfd.MixtureSameFamily(mixture_distribution=tfd.Categorical(probs=[tf.constant(0.04, dtype=dtype),\n", + "# tf.constant(0.90, dtype=dtype),\n", + "# tf.constant(0.02, dtype=dtype),\n", + "# tf.constant(0.07, dtype=dtype),\n", + "# tf.constant(0.02, dtype=dtype)]),\n", + "# components_distribution=tfd.Uniform(low=[tf.constant(x_min, dtype=dtype), \n", + "# tf.constant(3089, dtype=dtype),\n", + "# tf.constant(3103, dtype=dtype), \n", + "# tf.constant(3681, dtype=dtype),\n", + "# tf.constant(3691, dtype=dtype)], \n", + "# high=[tf.constant(3089, dtype=dtype),\n", + "# tf.constant(3103, dtype=dtype), \n", + "# tf.constant(3681, dtype=dtype),\n", + "# tf.constant(3691, dtype=dtype), \n", + "# tf.constant(x_max, dtype=dtype)]))\n", + "# mixture = tfd.Uniform(tf.constant(x_min, dtype=dtype), tf.constant(x_max, dtype=dtype))\n", + "# sample = tf.random.uniform((n_to_produce, 1), dtype=dtype)\n", + " sample = mixture.sample((n_to_produce, 1))\n", + "# sample = tf.random.uniform((n_to_produce, 1), dtype=dtype)\n", + " weights = mixture.prob(sample)[:,0]\n", + "# weights = tf.broadcast_to(tf.constant(1., dtype=dtype), shape=(n_to_produce,))\n", + " # sample = tf.expand_dims(sample, axis=-1)\n", + "# print(sample, weights)\n", + " \n", + "# weights = tf.ones(shape=(n_to_produce,), dtype=dtype)\n", + " weights_max = None\n", + " thresholds = tf.random_uniform(shape=(n_to_produce,), dtype=dtype)\n", + " return sample, thresholds, weights, weights_max, n_to_produce" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "total_f._sample_and_weights = UniformSampleAndWeights" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 0.00133/(0.00133+0.213+0.015)*(x_max-3750)/(x_max-x_min)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# zfit.settings.set_verbosity(10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "# # zfit.run.numeric_checks = False \n", + "\n", + "# nr_of_toys = 1\n", + "# nevents = int(pdg[\"number_of_decays\"])\n", + "# nevents = pdg[\"number_of_decays\"]\n", + "# event_stack = 1000000\n", + "# # zfit.settings.set_verbosity(10)\n", + "# calls = int(nevents/event_stack + 1)\n", + "\n", + "# total_samp = []\n", + "\n", + "# start = time.time()\n", + "\n", + "# sampler = total_f.create_sampler(n=event_stack)\n", + "\n", + "# for toy in range(nr_of_toys):\n", + " \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", + "\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", + "\n", + "# c = call + 1\n", + " \n", + "# print(\"{0}/{1} of Toy {2}/{3}\".format(c, calls, toy+1, nr_of_toys))\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*(toy))*((nr_of_toys-toy)*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)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# with open(r\"data/zfit_toys/toy_0/0.pkl\", \"rb\") as input_file:\n", + "# sam = pkl.load(input_file)\n", + "# print(sam[:10])\n", + "\n", + "# with open(r\"data/zfit_toys/toy_0/1.pkl\", \"rb\") as input_file:\n", + "# sam2 = pkl.load(input_file)\n", + "# print(sam2[:10])\n", + "\n", + "# print(np.sum(sam-sam2))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# print(\"Time to generate full toy: {} s\".format(int(time.time()-start)))\n", + "\n", + "# total_samp = []\n", + "\n", + "# for call in range(calls):\n", + "# with open(r\"data/zfit_toys/toy_0/{}.pkl\".format(call), \"rb\") as input_file:\n", + "# sam = pkl.load(input_file)\n", + "# total_samp = np.append(total_samp, sam)\n", + "\n", + "# total_samp = total_samp.astype('float64')\n", + "\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, + "metadata": {}, + "outputs": [], + "source": [ + "# plt.clf()\n", + "\n", + "# bins = int((x_max-x_min)/7)\n", + "\n", + "# # calcs = zfit.run(total_test_tf(samp))\n", + "# print(total_samp[:nevents].shape)\n", + "\n", + "# plt.hist(total_samp[:nevents], bins = bins, range = (x_min,x_max), label = 'data')\n", + "# # plt.plot(test_q, calcs_test*nevents , label = 'pdf')\n", + "\n", + "# # plt.plot(sam, calcs, '.')\n", + "# # plt.plot(test_q, calcs_test)\n", + "# # plt.yscale('log')\n", + "# plt.ylim(0, 200)\n", + "# # plt.xlim(3080, 3110)\n", + "\n", + "# plt.legend()\n", + "\n", + "# plt.savefig('test2.png')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# sampler = total_f.create_sampler(n=nevents)\n", + "# nll = zfit.loss.UnbinnedNLL(model=total_f, data=sampler, fit_range = (x_min, x_max))\n", + "\n", + "# # for param in pdf.get_dependents():\n", + "# # param.set_value(initial_value)\n", + "\n", + "# sampler.resample(n=nevents)\n", + "\n", + "# # Randomise initial values\n", + "# # for param in pdf.get_dependents():\n", + "# # param.set_value(random value here)\n", + "\n", + "# # Minimise the NLL\n", + "# minimizer = zfit.minimize.MinuitMinimizer(verbosity = 10)\n", + "# minimum = minimizer.minimize(nll)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# jpsi_width" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plt.hist(sample, weights=1 / prob(sample))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fitting" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# start = time.time()\n", + "\n", + "# for param in total_f.get_dependents():\n", + "# param.randomize()\n", + " \n", + "# # for param in total_f.get_dependents():\n", + "# # print(zfit.run(param))\n", + " \n", + "# nll = zfit.loss.UnbinnedNLL(model=total_f, data=data2, fit_range = (x_min, x_max))\n", + "\n", + "# minimizer = zfit.minimize.MinuitMinimizer(verbosity = 5)\n", + "# # minimizer._use_tfgrad = False\n", + "# result = minimizer.minimize(nll)\n", + "\n", + "# # param_errors = result.error()\n", + "\n", + "# # for var, errors in param_errors.items():\n", + "# # print('{}: ^{{+{}}}_{{{}}}'.format(var.name, errors['upper'], errors['lower']))\n", + "\n", + "# print(\"Function minimum:\", result.fmin)\n", + "# # print(\"Results:\", result.params)\n", + "# print(\"Hesse errors:\", result.hesse())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# print(\"Time taken for fitting: {}\".format(display_time(int(time.time()-start))))\n", + "\n", + "# # probs = total_f.pdf(test_q)\n", + "\n", + "# calcs_test = zfit.run(probs)\n", + "# res_y = zfit.run(jpsi_res(test_q))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "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, 10e-6)\n", + "# # plt.yscale('log')\n", + "# # plt.xlim(3080, 3110)\n", + "# plt.savefig('test3.png')\n", + "# # print(jpsi_width)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# _tot = 4.37e-7+6.02e-5+4.97e-6\n", + "# _probs = []\n", + "# _probs.append(6.02e-5/_tot)\n", + "# _probs.append(4.97e-6/_tot)\n", + "# _probs.append(4.37e-7/_tot)\n", + "# print(_probs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# dtype = 'float64'\n", + "# # mixture = tfd.Uniform(tf.constant(x_min, dtype=dtype), tf.constant(x_max, dtype=dtype))\n", + "# mixture = tfd.MixtureSameFamily(mixture_distribution=tfd.Categorical(probs=[tf.constant(0.007, dtype=dtype),\n", + "# tf.constant(0.917, dtype=dtype),\n", + "# tf.constant(0.076, dtype=dtype)]),\n", + "# components_distribution=tfd.Uniform(low=[tf.constant(x_min, dtype=dtype), \n", + "# tf.constant(3080, dtype=dtype),\n", + "# tf.constant(3670, dtype=dtype)], \n", + "# high=[tf.constant(x_max, dtype=dtype),\n", + "# tf.constant(3112, dtype=dtype), \n", + "# tf.constant(3702, dtype=dtype)]))\n", + "# # for i in range(10):\n", + "# # print(zfit.run(mixture.prob(mixture.sample((10, 1)))))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# print((zfit.run(jpsi_p)%(2*np.pi))/np.pi)\n", + "# print((zfit.run(psi2s_p)%(2*np.pi))/np.pi)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# def jpsi_res(q):\n", + "# return resonance(q, _mass = jpsi_mass, scale = jpsi_scale,\n", + "# phase = jpsi_phase, width = jpsi_width)\n", + "\n", + "# def psi2s_res(q):\n", + "# return resonance(q, _mass = psi2s_mass, scale = psi2s_scale,\n", + "# phase = psi2s_phase, width = psi2s_width)\n", + " \n", + "# def p3770_res(q):\n", + "# return resonance(q, _mass = p3770_mass, scale = p3770_scale,\n", + "# phase = p3770_phase, width = p3770_width)\n", + " \n", + "# def p4040_res(q):\n", + "# return resonance(q, _mass = p4040_mass, scale = p4040_scale,\n", + "# phase = p4040_phase, width = p4040_width)\n", + " \n", + "# def p4160_res(q):\n", + "# return resonance(q, _mass = p4160_mass, scale = p4160_scale,\n", + "# phase = p4160_phase, width = p4160_width)\n", + " \n", + "# def p4415_res(q):\n", + "# return resonance(q, _mass = p4415_mass, scale = p4415_scale,\n", + "# phase = p4415_phase, width = p4415_width)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 0.15**2*4.2/1000\n", + "# result.hesse()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Analysis" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "# zfit.run.numeric_checks = False \n", + "\n", + "Ctt_list = []\n", + "Ctt_error_list = []\n", + "\n", + "nr_of_toys = 1\n", + "nevents = int(pdg[\"number_of_decays\"])\n", + "nevents = pdg[\"number_of_decays\"]\n", + "event_stack = 1000000\n", + "# zfit.settings.set_verbosity(10)\n", + "calls = int(nevents/event_stack + 1)\n", + "\n", + "total_samp = []\n", + "\n", + "start = time.time()\n", + "\n", + "sampler = total_f.create_sampler(n=event_stack)\n", + "\n", + "for toy in range(nr_of_toys):\n", + " \n", + " ### Generate data\n", + " \n", + " print(\"Toy {}: Generating data...\".format(toy))\n", + " \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", + "\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", + "\n", + " c = call + 1\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)\n", + " \n", + " print(\"Toy {}: Data generation finished\".format(toy))\n", + " \n", + " ### Load data\n", + " \n", + " print(\"Toy {}: Loading data...\".format(toy))\n", + "\n", + " for call in range(calls):\n", + " with open(r\"data/zfit_toys/toy_0/{}.pkl\".format(call), \"rb\") as input_file:\n", + " sam = pkl.load(input_file)\n", + " total_samp = np.append(total_samp, sam)\n", + "\n", + " total_samp = total_samp.astype('float64')\n", + "\n", + " data = zfit.data.Data.from_numpy(array=total_samp[:int(nevents)], obs=obs)\n", + " \n", + " print(\"Toy {}: Loading data finished\".format(toy))\n", + "\n", + " ### Fit data\n", + " \n", + " print(\"Toy {}: Fitting pdf...\".format(toy))\n", + "\n", + " for param in total_f.get_dependents():\n", + " param.randomize()\n", + "\n", + " nll = zfit.loss.UnbinnedNLL(model=total_f, data=data, fit_range = (jpsi_mass+50.0, psi2s_mass-50.0))\n", + "\n", + " minimizer = zfit.minimize.MinuitMinimizer(verbosity = 5)\n", + " # minimizer._use_tfgrad = False\n", + " result = minimizer.minimize(nll)\n", + " \n", + " print(\"Toy {}: Fitting finished\".format(toy))\n", + "\n", + " print(\"Function minimum:\", result.fmin)\n", + " print(\"Hesse errors:\", result.hesse())\n", + " \n", + " params = result.params\n", + " Ctt_list.append(params[Ctt]['value'])\n", + " Ctt_error_list.append(params[Ctt]['minuit_hesse']['error'])\n", + "\n", + " print(\"Toy {0}/{1}\".format(toy+1, nr_of_toys))\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*(toy))*((nr_of_toys-toy)*calls-c)))))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('Mean Ctt value = {}'.format(np.mean(Ctt_list)))\n", + "print('Mean Ctt error = {}'.format(np.mean(Ctt_error_list)))" + ] + }, + { + "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/test.png b/test.png index df8eb5d..e66e950 100644 --- a/test.png +++ b/test.png Binary files differ diff --git a/test2.png b/test2.png index 05cf2dc..c94f2a4 100644 --- a/test2.png +++ b/test2.png Binary files differ