diff --git a/.ipynb_checkpoints/minuit_fitter-checkpoint.ipynb b/.ipynb_checkpoints/minuit_fitter-checkpoint.ipynb new file mode 100644 index 0000000..5d42501 --- /dev/null +++ b/.ipynb_checkpoints/minuit_fitter-checkpoint.ipynb @@ -0,0 +1,150 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import ROOT as r\n", + "import ctypes\n", + "import numpy as np\n", + "from array import array\n", + "import root_numpy as rn\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def fcn( npar, gin, f, par, iflag):\n", + " \n", + " global ncount\n", + " global chisq\n", + " global pulls\n", + " global fitfunavg\n", + " global delta\n", + " \n", + " pull = np.array([0. for i in range(nbins)])\n", + " residuals = np.array([0. for i in range(nbins)])\n", + " \n", + " fitfunavg=np.array([func((xup[i]+xdown[i])/2) for i in range(nbins)])\n", + " \n", + " chisq, delta = 0., 0.\n", + " \n", + " delta = np.array([data[i]-fitfun[i] for i in range(0,nbins)])\n", + " \n", + " chisq = np.dot(np.transpose(delta),np.dot(Vxinv,delta))\n", + " \n", + " for i in range(nbins):\n", + " \n", + " pulls[i] = (y[i]-fitfun[i])/(np.sqrt(Vx[i,i]))\n", + " \n", + " print('X^2', chisq)\n", + " f[0] = chisq\n", + " ncount+=1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "###DEFINE FIT FUNCTIONS HERE\n", + "###AS FUNC" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "##___MINUIT______\n", + "\n", + "def fit():\n", + " \n", + " gMinuit = r.TMinuit(5)\n", + " gMinuit.SetFCN(fcn)\n", + " \n", + " arglist = np.array([0. for i in range(10)], dtype='float32')\n", + " ierflg = ctypes.c_int(1982)\n", + " \n", + " arglist[0]=1\n", + " gMinuit.mnexcm( \"SET ERR\", arglist, 1, ierflg )\n", + " \n", + " # Set starting values and step sizes for parameters\n", + " vstart = np.array([], dtype='float32')\n", + " step = np.array([], dtype='float32')\n", + " \n", + " gMinuit.mnparm( 0, \"\", vstart[0], step[0], lower_bound, upper_bound, ierflg)#par0\n", + " \n", + " #if needed\n", + " #gMinuit.FixParameter(0)\n", + " \n", + " #Minimization Step\n", + " \n", + " arglist[0] = 500\n", + " arglist[1] = 1e-20\n", + " gMinuit.mnexcm( \"MIGRAD\", arglist, 3, ierflg)\n", + " gMinuit.mnexcm(\"HESSE\", arglist, 4, ierflg)\n", + " \n", + " amin, edm, errdef, par0, err_par0 = map(ctypes.c_double, (0.18, 0.19, 0.20, 0.21, 0.22, 0.23))\n", + " nvpar, nparx, icstat = map(ctypes.c_int, (1983, 1984, 1985))\n", + " gMinuit.mnstat( amin, edm, errdef, nvpar, nparx, icstat )\n", + " gMinuit.mnprin( 4, amin.value )\n", + " gMinuit.GetParameter(0,par0,err_par0)\n", + " \n", + " fitpars = np.array([par0.value])\n", + " err_fitpars = np.array([err_par0.value])\n", + " ratio = chisq/(fit_bins-2)\n", + " \n", + " return firpars, err_fitpars, ratio, pulls" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if __name__ == '__maun__':\n", + " \n", + " binwidth = (end-start)/nbins\n", + " \n", + " xup = np.array([start +1.0*(i+1.)*binwidth] for i in range(0,nbins))\n", + " xdown = np.array([start +1.0*(i+0.)*binwidth] for i in range(0,nbins))\n", + " \n", + " fitpars, err_fitpars, ratio, pulls = fit()\n", + " \n", + " #save data and plot here\n", + " " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.15" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/minuit_fitter.ipynb b/minuit_fitter.ipynb new file mode 100644 index 0000000..5d42501 --- /dev/null +++ b/minuit_fitter.ipynb @@ -0,0 +1,150 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import ROOT as r\n", + "import ctypes\n", + "import numpy as np\n", + "from array import array\n", + "import root_numpy as rn\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def fcn( npar, gin, f, par, iflag):\n", + " \n", + " global ncount\n", + " global chisq\n", + " global pulls\n", + " global fitfunavg\n", + " global delta\n", + " \n", + " pull = np.array([0. for i in range(nbins)])\n", + " residuals = np.array([0. for i in range(nbins)])\n", + " \n", + " fitfunavg=np.array([func((xup[i]+xdown[i])/2) for i in range(nbins)])\n", + " \n", + " chisq, delta = 0., 0.\n", + " \n", + " delta = np.array([data[i]-fitfun[i] for i in range(0,nbins)])\n", + " \n", + " chisq = np.dot(np.transpose(delta),np.dot(Vxinv,delta))\n", + " \n", + " for i in range(nbins):\n", + " \n", + " pulls[i] = (y[i]-fitfun[i])/(np.sqrt(Vx[i,i]))\n", + " \n", + " print('X^2', chisq)\n", + " f[0] = chisq\n", + " ncount+=1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "###DEFINE FIT FUNCTIONS HERE\n", + "###AS FUNC" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "##___MINUIT______\n", + "\n", + "def fit():\n", + " \n", + " gMinuit = r.TMinuit(5)\n", + " gMinuit.SetFCN(fcn)\n", + " \n", + " arglist = np.array([0. for i in range(10)], dtype='float32')\n", + " ierflg = ctypes.c_int(1982)\n", + " \n", + " arglist[0]=1\n", + " gMinuit.mnexcm( \"SET ERR\", arglist, 1, ierflg )\n", + " \n", + " # Set starting values and step sizes for parameters\n", + " vstart = np.array([], dtype='float32')\n", + " step = np.array([], dtype='float32')\n", + " \n", + " gMinuit.mnparm( 0, \"\", vstart[0], step[0], lower_bound, upper_bound, ierflg)#par0\n", + " \n", + " #if needed\n", + " #gMinuit.FixParameter(0)\n", + " \n", + " #Minimization Step\n", + " \n", + " arglist[0] = 500\n", + " arglist[1] = 1e-20\n", + " gMinuit.mnexcm( \"MIGRAD\", arglist, 3, ierflg)\n", + " gMinuit.mnexcm(\"HESSE\", arglist, 4, ierflg)\n", + " \n", + " amin, edm, errdef, par0, err_par0 = map(ctypes.c_double, (0.18, 0.19, 0.20, 0.21, 0.22, 0.23))\n", + " nvpar, nparx, icstat = map(ctypes.c_int, (1983, 1984, 1985))\n", + " gMinuit.mnstat( amin, edm, errdef, nvpar, nparx, icstat )\n", + " gMinuit.mnprin( 4, amin.value )\n", + " gMinuit.GetParameter(0,par0,err_par0)\n", + " \n", + " fitpars = np.array([par0.value])\n", + " err_fitpars = np.array([err_par0.value])\n", + " ratio = chisq/(fit_bins-2)\n", + " \n", + " return firpars, err_fitpars, ratio, pulls" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if __name__ == '__maun__':\n", + " \n", + " binwidth = (end-start)/nbins\n", + " \n", + " xup = np.array([start +1.0*(i+1.)*binwidth] for i in range(0,nbins))\n", + " xdown = np.array([start +1.0*(i+0.)*binwidth] for i in range(0,nbins))\n", + " \n", + " fitpars, err_fitpars, ratio, pulls = fit()\n", + " \n", + " #save data and plot here\n", + " " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.15" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}