pysawsim/fit.py should not be executable.
[sawsim.git] / pysawsim / fit.py
old mode 100755 (executable)
new mode 100644 (file)
index 2d35cf8..6b325da
@@ -265,13 +265,11 @@ class ModelFitter (object):
         params,cov,info,mesg,ier = leastsq(
             func=self.residual, x0=active_params, full_output=True,
             diag=scale, **kwargs)
+        if len(initial_params) == 1:
+            params = [params]
         if self._rescale == True:
             active_params = params
-            if len(initial_params) == 1:  # params is a float
-                params = params * self._param_scale_factors[0]
-            else:
-                params = [p*s for p,s in zip(params,
-                                             self._param_scale_factors)]
+            params = [p*s for p,s in zip(params, self._param_scale_factors)]
         else:
             active_params = params
         self.fit_info = {
@@ -315,7 +313,8 @@ class HistogramModelFitter (ModelFitter):
     ...         '''
     ...         p = params  # convenient alias
     ...         p[1] = abs(p[1])  # cannot have negative std. dev.
-    ...         self._model_data.counts = self.info['N']/(p[1]*sqrt(2*pi)) * (
+    ...         self._model_data.counts = (
+    ...             self.info['binwidth']*self.info['N']/(p[1]*sqrt(2*pi)) *
     ...             exp(-((self._model_data.bin_centers - p[0])/p[1])**2 / 2))
     ...         return self._model_data
     ...     def guess_initial_params(self):
@@ -330,8 +329,8 @@ class HistogramModelFitter (ModelFitter):
     ...             pstrings.append('%s=%.3f' % (name, param))
     ...         return ', '.join(pstrings)
 
-    >>> mu = 1.45
-    >>> sigma = 3.14
+    >>> mu = 3.14
+    >>> sigma = 1.45
     >>> data = array([gauss(mu,sigma) for i in range(int(1e4))])
     >>> h = Histogram()
     >>> h.from_data(data, h.calculate_bin_edges(data, 1))
@@ -340,7 +339,7 @@ class HistogramModelFitter (ModelFitter):
     >>> print m.model_string()
     p(x) = A exp((x-mu)^2 / (2 sigma^2))
     >>> print m.param_string(params)  # doctest: +ELLIPSIS
-    mu=1.4..., sigma=3.1...
+    mu=3.1..., sigma=1.4...
     """
     def set_data(self, data, info=None, rescale=False):
         self._data = data  # Histogram() instance
@@ -363,7 +362,7 @@ class HistogramModelFitter (ModelFitter):
         if self._rescale == True:
             params = [p*s for p,s in zip(params, self._param_scale_factors)]
         residual = self._data.counts - self.model(params).counts
-        if True:  # fit debugging
+        if False:  # fit debugging
             if not hasattr(self, '_i_'):
                 self._i_ = 0
             self._data.to_stream(open('hist-data.%d' % self._i_, 'w'))