diff --git a/.ipynb_checkpoints/raremodel-nb-checkpoint.ipynb b/.ipynb_checkpoints/raremodel-nb-checkpoint.ipynb index 529e151..4ebcc77 100644 --- a/.ipynb_checkpoints/raremodel-nb-checkpoint.ipynb +++ b/.ipynb_checkpoints/raremodel-nb-checkpoint.ipynb @@ -9,9 +9,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "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", @@ -42,7 +64,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -68,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -258,7 +280,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -313,7 +335,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -409,7 +431,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -437,9 +459,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "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": [ "# formfactors\n", "\n", @@ -548,7 +580,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -560,10 +592,10 @@ "Dbar_mass = pdg['D0_M']\n", "D_mass = pdg['D0_M']\n", "\n", - "Dbar_s = zfit.Parameter(\"Dbar_s\", ztf.constant(0.0), lower_limit=-1.464, upper_limit=1.464)\n", + "Dbar_s = zfit.Parameter(\"Dbar_s\", ztf.constant(0.0), lower_limit=-0.3, upper_limit=0.3)\n", "Dbar_m = zfit.Parameter(\"Dbar_m\", ztf.constant(Dbar_mass), floating = False)\n", "Dbar_p = zfit.Parameter(\"Dbar_p\", ztf.constant(Dbar_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)#, floating = False)\n", - "DDstar_s = zfit.Parameter(\"DDstar_s\", ztf.constant(0.0), lower_limit=-2.0, upper_limit=2.0)#, floating = False)\n", + "DDstar_s = zfit.Parameter(\"DDstar_s\", ztf.constant(0.0), lower_limit=-0.3, upper_limit=0.3)#, floating = False)\n", "Dstar_m = zfit.Parameter(\"Dstar_m\", ztf.constant(Dstar_mass), floating = False)\n", "D_m = zfit.Parameter(\"D_m\", ztf.constant(D_mass), floating = False)\n", "DDstar_p = zfit.Parameter(\"DDstar_p\", ztf.constant(DDstar_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)#, floating = False)" @@ -578,7 +610,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -595,7 +627,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -632,7 +664,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -678,9 +710,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "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", @@ -699,7 +744,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -715,7 +760,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -731,7 +776,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -744,7 +789,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -801,7 +846,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -885,7 +930,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -894,7 +939,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -903,7 +948,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -912,7 +957,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": { "scrolled": false }, @@ -960,7 +1005,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -977,7 +1022,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -1001,7 +1046,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -1028,7 +1073,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -1051,7 +1096,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -1060,7 +1105,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -1076,7 +1121,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -1106,7 +1151,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -1120,7 +1165,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -1138,7 +1183,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -1152,7 +1197,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -1173,7 +1218,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -1183,7 +1228,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -1214,7 +1259,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -1231,7 +1276,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ @@ -1260,13 +1305,13 @@ "# 2. Constraint - Abs. of sum of Psi contribs and D contribs\n", "\n", "sum_2 = tf.abs(sum_ru_1)\n", - "constraint2 = tf.cond(tf.greater_equal(sum_2, 5.0e-8), lambda: 10000., lambda: 0.)\n", + "constraint2 = tf.cond(tf.greater_equal(sum_2, 5.0e-8), lambda: 100000., lambda: 0.)\n", "\n", "# 3. Constraint - Maximum eta of D contribs\n", "\n", - "constraint3_0 = tf.cond(tf.greater_equal(tf.abs(Dbar_s), 0.2), lambda: 10000., lambda: 0.)\n", + "constraint3_0 = tf.cond(tf.greater_equal(tf.abs(Dbar_s), 0.2), lambda: 100000., lambda: 0.)\n", "\n", - "constraint3_1 = tf.cond(tf.greater_equal(tf.abs(DDstar_s), 0.2), lambda: 10000., lambda: 0.)\n", + "constraint3_1 = tf.cond(tf.greater_equal(tf.abs(DDstar_s), 0.2), lambda: 100000., lambda: 0.)\n", "\n", "# 4. Constraint - Formfactor multivariant gaussian covariance fplus\n", "\n", @@ -1317,7 +1362,7 @@ "for part in sum_list_5:\n", " sum_ru_5 += part\n", "\n", - "constraint5 = tf.cond(tf.greater_equal(tf.abs(sum_ru_5), 0.02), lambda: 10000., lambda: 0.)\n", + "constraint5 = tf.cond(tf.greater_equal(tf.abs(sum_ru_5), 0.02), lambda: 100000., lambda: 0.)\n", "\n", "#List of all constraints\n", "\n", @@ -1337,7 +1382,21 @@ "metadata": { "scrolled": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\sample.py:163: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use tf.cast instead.\n", + "WARNING:tensorflow:From C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow_probability\\python\\distributions\\categorical.py:263: multinomial (from tensorflow.python.ops.random_ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use tf.random.categorical instead.\n", + "Toy 0: Generating data...\n" + ] + } + ], "source": [ "# zfit.run.numeric_checks = False \n", "\n", @@ -1419,6 +1478,21 @@ " params = result.params\n", " Ctt_list.append(params[Ctt]['value'])\n", " Ctt_error_list.append(params[Ctt]['minuit_hesse']['error'])\n", + " \n", + " #plotting the result\n", + " \n", + " plotdirName = 'data/plots'.format(toy)\n", + " \n", + " if not os.path.exists(plotdirName):\n", + " os.mkdir(plotdirName)\n", + "# print(\"Directory \" , dirName , \" Created \")\n", + " calcs_test = zfit.run(probs)\n", + " res_y = zfit.run(jpsi_res(test_q))\n", + " plt.clf()\n", + " plt.plot(test_q, calcs_test, label = 'pdf')\n", + " plt.legend()\n", + " plt.ylim(0.0, 6e-6)\n", + " plt.savefig(plotdirName + '/toy_fit{}.png'.format(toy))\n", "\n", " print(\"Toy {0}/{1}\".format(toy+1, nr_of_toys))\n", " print(\"Time taken: {}\".format(display_time(int(time.time() - start))))\n", @@ -1447,22 +1521,7 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "calcs_test = zfit.run(probs)\n", - "res_y = zfit.run(jpsi_res(test_q))\n", - "plt.clf()\n", - "# plt.plot(x_part, calcs, '.')\n", - "plt.plot(test_q, calcs_test, label = 'pdf')\n", - "# plt.plot(test_q, 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('test2.png')" - ] + "source": [] }, { "cell_type": "code", diff --git a/raremodel-nb.ipynb b/raremodel-nb.ipynb index 529e151..4ebcc77 100644 --- a/raremodel-nb.ipynb +++ b/raremodel-nb.ipynb @@ -9,9 +9,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "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", @@ -42,7 +64,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -68,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -258,7 +280,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -313,7 +335,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -409,7 +431,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -437,9 +459,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "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": [ "# formfactors\n", "\n", @@ -548,7 +580,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -560,10 +592,10 @@ "Dbar_mass = pdg['D0_M']\n", "D_mass = pdg['D0_M']\n", "\n", - "Dbar_s = zfit.Parameter(\"Dbar_s\", ztf.constant(0.0), lower_limit=-1.464, upper_limit=1.464)\n", + "Dbar_s = zfit.Parameter(\"Dbar_s\", ztf.constant(0.0), lower_limit=-0.3, upper_limit=0.3)\n", "Dbar_m = zfit.Parameter(\"Dbar_m\", ztf.constant(Dbar_mass), floating = False)\n", "Dbar_p = zfit.Parameter(\"Dbar_p\", ztf.constant(Dbar_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)#, floating = False)\n", - "DDstar_s = zfit.Parameter(\"DDstar_s\", ztf.constant(0.0), lower_limit=-2.0, upper_limit=2.0)#, floating = False)\n", + "DDstar_s = zfit.Parameter(\"DDstar_s\", ztf.constant(0.0), lower_limit=-0.3, upper_limit=0.3)#, floating = False)\n", "Dstar_m = zfit.Parameter(\"Dstar_m\", ztf.constant(Dstar_mass), floating = False)\n", "D_m = zfit.Parameter(\"D_m\", ztf.constant(D_mass), floating = False)\n", "DDstar_p = zfit.Parameter(\"DDstar_p\", ztf.constant(DDstar_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)#, floating = False)" @@ -578,7 +610,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -595,7 +627,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -632,7 +664,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -678,9 +710,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "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", @@ -699,7 +744,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -715,7 +760,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -731,7 +776,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -744,7 +789,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -801,7 +846,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -885,7 +930,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -894,7 +939,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -903,7 +948,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -912,7 +957,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": { "scrolled": false }, @@ -960,7 +1005,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -977,7 +1022,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -1001,7 +1046,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -1028,7 +1073,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -1051,7 +1096,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -1060,7 +1105,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -1076,7 +1121,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -1106,7 +1151,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -1120,7 +1165,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -1138,7 +1183,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -1152,7 +1197,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -1173,7 +1218,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -1183,7 +1228,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -1214,7 +1259,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -1231,7 +1276,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ @@ -1260,13 +1305,13 @@ "# 2. Constraint - Abs. of sum of Psi contribs and D contribs\n", "\n", "sum_2 = tf.abs(sum_ru_1)\n", - "constraint2 = tf.cond(tf.greater_equal(sum_2, 5.0e-8), lambda: 10000., lambda: 0.)\n", + "constraint2 = tf.cond(tf.greater_equal(sum_2, 5.0e-8), lambda: 100000., lambda: 0.)\n", "\n", "# 3. Constraint - Maximum eta of D contribs\n", "\n", - "constraint3_0 = tf.cond(tf.greater_equal(tf.abs(Dbar_s), 0.2), lambda: 10000., lambda: 0.)\n", + "constraint3_0 = tf.cond(tf.greater_equal(tf.abs(Dbar_s), 0.2), lambda: 100000., lambda: 0.)\n", "\n", - "constraint3_1 = tf.cond(tf.greater_equal(tf.abs(DDstar_s), 0.2), lambda: 10000., lambda: 0.)\n", + "constraint3_1 = tf.cond(tf.greater_equal(tf.abs(DDstar_s), 0.2), lambda: 100000., lambda: 0.)\n", "\n", "# 4. Constraint - Formfactor multivariant gaussian covariance fplus\n", "\n", @@ -1317,7 +1362,7 @@ "for part in sum_list_5:\n", " sum_ru_5 += part\n", "\n", - "constraint5 = tf.cond(tf.greater_equal(tf.abs(sum_ru_5), 0.02), lambda: 10000., lambda: 0.)\n", + "constraint5 = tf.cond(tf.greater_equal(tf.abs(sum_ru_5), 0.02), lambda: 100000., lambda: 0.)\n", "\n", "#List of all constraints\n", "\n", @@ -1337,7 +1382,21 @@ "metadata": { "scrolled": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\zfit\\core\\sample.py:163: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use tf.cast instead.\n", + "WARNING:tensorflow:From C:\\Users\\sa_li\\.conda\\envs\\rmd\\lib\\site-packages\\tensorflow_probability\\python\\distributions\\categorical.py:263: multinomial (from tensorflow.python.ops.random_ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use tf.random.categorical instead.\n", + "Toy 0: Generating data...\n" + ] + } + ], "source": [ "# zfit.run.numeric_checks = False \n", "\n", @@ -1419,6 +1478,21 @@ " params = result.params\n", " Ctt_list.append(params[Ctt]['value'])\n", " Ctt_error_list.append(params[Ctt]['minuit_hesse']['error'])\n", + " \n", + " #plotting the result\n", + " \n", + " plotdirName = 'data/plots'.format(toy)\n", + " \n", + " if not os.path.exists(plotdirName):\n", + " os.mkdir(plotdirName)\n", + "# print(\"Directory \" , dirName , \" Created \")\n", + " calcs_test = zfit.run(probs)\n", + " res_y = zfit.run(jpsi_res(test_q))\n", + " plt.clf()\n", + " plt.plot(test_q, calcs_test, label = 'pdf')\n", + " plt.legend()\n", + " plt.ylim(0.0, 6e-6)\n", + " plt.savefig(plotdirName + '/toy_fit{}.png'.format(toy))\n", "\n", " print(\"Toy {0}/{1}\".format(toy+1, nr_of_toys))\n", " print(\"Time taken: {}\".format(display_time(int(time.time() - start))))\n", @@ -1447,22 +1521,7 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "calcs_test = zfit.run(probs)\n", - "res_y = zfit.run(jpsi_res(test_q))\n", - "plt.clf()\n", - "# plt.plot(x_part, calcs, '.')\n", - "plt.plot(test_q, calcs_test, label = 'pdf')\n", - "# plt.plot(test_q, 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('test2.png')" - ] + "source": [] }, { "cell_type": "code", diff --git a/raremodel-nb.py b/raremodel-nb.py index fab7c0c..ab43271 100644 --- a/raremodel-nb.py +++ b/raremodel-nb.py @@ -284,7 +284,7 @@ # ## Build pdf -# In[11]: +# In[5]: class total_pdf(zfit.pdf.ZPDF): @@ -372,7 +372,7 @@ # ## Load data -# In[12]: +# In[6]: x_min = 2*pdg['muon_M'] @@ -392,7 +392,7 @@ # ## Setup parameters -# In[13]: +# In[7]: # formfactors @@ -495,7 +495,7 @@ # ## Dynamic generation of 2 particle contribution -# In[14]: +# In[8]: m_c = 1300 @@ -506,10 +506,10 @@ Dbar_mass = pdg['D0_M'] D_mass = pdg['D0_M'] -Dbar_s = zfit.Parameter("Dbar_s", ztf.constant(0.0), lower_limit=-1.464, upper_limit=1.464) +Dbar_s = zfit.Parameter("Dbar_s", ztf.constant(0.0), lower_limit=-0.3, upper_limit=0.3) Dbar_m = zfit.Parameter("Dbar_m", ztf.constant(Dbar_mass), floating = False) Dbar_p = zfit.Parameter("Dbar_p", ztf.constant(Dbar_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)#, floating = False) -DDstar_s = zfit.Parameter("DDstar_s", ztf.constant(0.0), lower_limit=-2.0, upper_limit=2.0)#, floating = False) +DDstar_s = zfit.Parameter("DDstar_s", ztf.constant(0.0), lower_limit=-0.3, upper_limit=0.3)#, floating = False) Dstar_m = zfit.Parameter("Dstar_m", ztf.constant(Dstar_mass), floating = False) D_m = zfit.Parameter("D_m", ztf.constant(D_mass), floating = False) DDstar_p = zfit.Parameter("DDstar_p", ztf.constant(DDstar_phase), lower_limit=-2*np.pi, upper_limit=2*np.pi)#, floating = False) @@ -517,7 +517,7 @@ # ## Tau parameters -# In[15]: +# In[9]: tau_m = zfit.Parameter("tau_m", ztf.constant(pdg['tau_M']), floating = False) @@ -526,7 +526,7 @@ # ## Setup pdf -# In[16]: +# In[10]: total_f = total_pdf(obs=obs, jpsi_mass = jpsi_m, jpsi_scale = jpsi_s, jpsi_phase = jpsi_p, jpsi_width = jpsi_w, @@ -555,7 +555,7 @@ # ## Test if graphs actually work and compute values -# In[17]: +# In[11]: # def total_test_tf(xq): @@ -598,7 +598,7 @@ # fT_y = zfit.run(tf.math.real(formfactor(test_q,"T", b0, bplus, bT))) -# In[18]: +# In[12]: plt.clf() @@ -616,7 +616,7 @@ # print(jpsi_width) -# In[19]: +# In[13]: @@ -629,7 +629,7 @@ # plt.semilogy(test_q, calcs_test, label = 'pdf') -# In[20]: +# In[14]: # 0.213/(0.00133+0.213+0.015) @@ -637,7 +637,7 @@ # ## Adjust scaling of different parts -# In[21]: +# In[15]: total_f.update_integration_options(draws_per_dim=200000, mc_sampler=None) @@ -647,7 +647,7 @@ # print(pdg["jpsi_BR"]/pdg["NR_BR"], inte_fl*pdg["psi2s_auc"]/pdg["NR_auc"]) -# In[22]: +# In[16]: # # print("jpsi:", inte_fl) @@ -696,7 +696,7 @@ # # Sampling # ## Mixture distribution for sampling -# In[23]: +# In[17]: @@ -777,25 +777,25 @@ return sample, thresholds, weights, weights_max, n_to_produce -# In[24]: +# In[18]: total_f._sample_and_weights = UniformSampleAndWeights -# In[25]: +# In[19]: # 0.00133/(0.00133+0.213+0.015)*(x_max-3750)/(x_max-x_min) -# In[26]: +# In[20]: # zfit.settings.set_verbosity(10) -# In[27]: +# In[21]: # # zfit.run.numeric_checks = False @@ -838,7 +838,7 @@ # pkl.dump(sam, f, pkl.HIGHEST_PROTOCOL) -# In[28]: +# In[22]: # with open(r"data/zfit_toys/toy_0/0.pkl", "rb") as input_file: @@ -852,7 +852,7 @@ # print(np.sum(sam-sam2)) -# In[29]: +# In[23]: # print("Time to generate full toy: {} s".format(int(time.time()-start))) @@ -873,7 +873,7 @@ # print(total_samp[:nevents].shape) -# In[30]: +# In[24]: # plt.clf() @@ -897,7 +897,7 @@ # plt.savefig('test2.png') -# In[31]: +# In[25]: # sampler = total_f.create_sampler(n=nevents) @@ -917,13 +917,13 @@ # minimum = minimizer.minimize(nll) -# In[32]: +# In[26]: # jpsi_width -# In[33]: +# In[27]: # plt.hist(sample, weights=1 / prob(sample)) @@ -931,7 +931,7 @@ # # Fitting -# In[34]: +# In[28]: # start = time.time() @@ -958,7 +958,7 @@ # print("Hesse errors:", result.hesse()) -# In[35]: +# In[29]: # print("Time taken for fitting: {}".format(display_time(int(time.time()-start)))) @@ -969,7 +969,7 @@ # res_y = zfit.run(jpsi_res(test_q)) -# In[36]: +# In[30]: # plt.clf() @@ -984,7 +984,7 @@ # # print(jpsi_width) -# In[37]: +# In[31]: # _tot = 4.37e-7+6.02e-5+4.97e-6 @@ -995,7 +995,7 @@ # print(_probs) -# In[38]: +# In[32]: # dtype = 'float64' @@ -1013,14 +1013,14 @@ # # print(zfit.run(mixture.prob(mixture.sample((10, 1))))) -# In[39]: +# In[33]: # print((zfit.run(jpsi_p)%(2*np.pi))/np.pi) # print((zfit.run(psi2s_p)%(2*np.pi))/np.pi) -# In[40]: +# In[34]: # def jpsi_res(q): @@ -1048,7 +1048,7 @@ # phase = p4415_phase, width = p4415_width) -# In[41]: +# In[35]: # 0.15**2*4.2/1000 @@ -1057,7 +1057,7 @@ # ## Constraints -# In[62]: +# In[36]: # 1. Constraint - Real part of sum of Psi contrib and D contribs @@ -1085,13 +1085,13 @@ # 2. Constraint - Abs. of sum of Psi contribs and D contribs sum_2 = tf.abs(sum_ru_1) -constraint2 = tf.cond(tf.greater_equal(sum_2, 5.0e-8), lambda: 10000., lambda: 0.) +constraint2 = tf.cond(tf.greater_equal(sum_2, 5.0e-8), lambda: 100000., lambda: 0.) # 3. Constraint - Maximum eta of D contribs -constraint3_0 = tf.cond(tf.greater_equal(tf.abs(Dbar_s), 0.2), lambda: 10000., lambda: 0.) +constraint3_0 = tf.cond(tf.greater_equal(tf.abs(Dbar_s), 0.2), lambda: 100000., lambda: 0.) -constraint3_1 = tf.cond(tf.greater_equal(tf.abs(DDstar_s), 0.2), lambda: 10000., lambda: 0.) +constraint3_1 = tf.cond(tf.greater_equal(tf.abs(DDstar_s), 0.2), lambda: 100000., lambda: 0.) # 4. Constraint - Formfactor multivariant gaussian covariance fplus @@ -1142,7 +1142,7 @@ for part in sum_list_5: sum_ru_5 += part -constraint5 = tf.cond(tf.greater_equal(tf.abs(sum_ru_5), 0.02), lambda: 10000., lambda: 0.) +constraint5 = tf.cond(tf.greater_equal(tf.abs(sum_ru_5), 0.02), lambda: 100000., lambda: 0.) #List of all constraints @@ -1234,6 +1234,21 @@ params = result.params Ctt_list.append(params[Ctt]['value']) Ctt_error_list.append(params[Ctt]['minuit_hesse']['error']) + + #plotting the result + + plotdirName = 'data/plots'.format(toy) + + if not os.path.exists(plotdirName): + os.mkdir(plotdirName) +# print("Directory " , dirName , " Created ") + calcs_test = zfit.run(probs) + res_y = zfit.run(jpsi_res(test_q)) + plt.clf() + plt.plot(test_q, calcs_test, label = 'pdf') + plt.legend() + plt.ylim(0.0, 6e-6) + plt.savefig(plotdirName + '/toy_fit{}.png'.format(toy)) print("Toy {0}/{1}".format(toy+1, nr_of_toys)) print("Time taken: {}".format(display_time(int(time.time() - start)))) @@ -1256,20 +1271,7 @@ # 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[ ]: