Index: park_integration/AbstractFitEngine.py
===================================================================
--- park_integration/AbstractFitEngine.py	(revision 83195f769176304cfa99e2579cc437e0c36d8a62)
+++ park_integration/AbstractFitEngine.py	(revision e00720824b9fe9556f3d70409ca557f933c411d0)
@@ -341,15 +341,19 @@
          Sans Assembly class a class wrapper to be call in optimizer.leastsq method
     """
-    def __init__(self,paramlist,Model=None , Data=None, curr_thread= None):
+    def __init__(self, paramlist, model=None , data=None, fitresult=None,
+                 handler=None, curr_thread=None):
         """
             @param Model: the model wrapper fro sans -model
             @param Data: the data wrapper for sans data
         """
-        self.model = Model
-        self.data  = Data
-        self.paramlist=paramlist
-        self.curr_thread= curr_thread
-        self.res=[]
-        self.func_name="Functor"
+        self.model = model
+        self.data  = data
+        self.paramlist = paramlist
+        self.curr_thread = curr_thread
+        self.handler = handler
+        self.fitresult = fitresult
+        self.res = []
+        self.func_name = "Functor"
+        
     def chisq(self, params):
         """
@@ -373,4 +377,9 @@
         self.model.setParams(self.paramlist,params)
         self.res= self.data.residuals(self.model.eval)
+        if self.fitresult is not None and  self.handler is not None:
+            self.fitresult.set_model(model=self.model)
+            self.handler.set_result(result=self.fitresult)
+            self.handler.update_fit()
+        
         #if self.curr_thread != None :
         #    try:
Index: park_integration/ScipyFitting.py
===================================================================
--- park_integration/ScipyFitting.py	(revision 393f0f32fe26758076a2a12a3156ded46719c9fe)
+++ park_integration/ScipyFitting.py	(revision e00720824b9fe9556f3d70409ca557f933c411d0)
@@ -10,19 +10,37 @@
 from AbstractFitEngine import FitEngine, SansAssembly,FitAbort
 
-class fitresult:
+class fitresult(object):
     """
         Storing fit result
     """
-    calls     = None
-    fitness   = None
-    chisqr    = None
-    pvec      = None
-    cov       = None
-    info      = None
-    mesg      = None
-    success   = None
-    stderr    = None
-    parameters= None
+    def __init__(self, model=None, paramList=None):
+        self.calls     = None
+        self.fitness   = None
+        self.chisqr    = None
+        self.pvec      = None
+        self.cov       = None
+        self.info      = None
+        self.mesg      = None
+        self.success   = None
+        self.stderr    = None
+        self.parameters = None
+        self.model = model
+        self.paramList = paramList
+     
+    def set_model(self, model):
+        self.model = model
+        
+    def __str__(self):
+        if self.pvec == None and self.model is None and self.paramList is None:
+            return "No results"
+        n = len(self.model.parameterset)
+
+        result_param = zip(xrange(n), self.model.parameterset)
+        L = ["P%-3d  %s......|.....%s"%(p[0], p[1], p[1].value) for p in result_param if p[1].name in self.paramList ]
+        L.append("=== goodness of fit: %s"%(str(self.fitness)))
+        return "\n".join(L)
     
+    def print_summary(self):
+        print self   
 
 class ScipyFit(FitEngine):
@@ -61,5 +79,5 @@
     #    return profile(self._fit, *args, **kw)
 
-    def fit(self ,q=None,handler=None,curr_thread= None):
+    def fit(self, q=None, handler=None, curr_thread=None):
        
         fitproblem=[]
@@ -68,5 +86,6 @@
                 fitproblem.append(fproblem)
         if len(fitproblem)>1 : 
-            raise RuntimeError, "Scipy can't fit more than a single fit problem at a time."
+            msg = "Scipy can't fit more than a single fit problem at a time."
+            raise RuntimeError, msg
             return
         elif len(fitproblem)==0 : 
@@ -78,11 +97,17 @@
         listdata = fitproblem[0].get_data()
         # Concatenate dList set (contains one or more data)before fitting
-        #data=self._concatenateData( listdata)
-        data=listdata
+        data = listdata
         self.curr_thread= curr_thread
-
+        result = fitresult(model=model, paramList=self.paramList)
+        if handler is not None:
+            handler.set_result(result=result)
         #try:
-        functor= SansAssembly(self.paramList,model,data, curr_thread= self.curr_thread)
-        out, cov_x, info, mesg, success = optimize.leastsq(functor,model.getParams(self.paramList), full_output=1, warning=True)
+        functor = SansAssembly(self.paramList, model, data, handler=handler,
+                                fitresult=result,curr_thread= self.curr_thread)
+       
+       
+        out, cov_x, info, mesg, success = optimize.leastsq(functor,
+                                                model.getParams(self.paramList),
+                                                    full_output=1, warning=True)
         
         chisqr = functor.chisq(out)
@@ -91,26 +116,20 @@
             stderr = numpy.sqrt(numpy.diag(cov_x))
         else:
-            stderr=None
+            stderr = None
         if not (numpy.isnan(out).any()) or ( cov_x !=None) :
-                result = fitresult()
                 result.fitness = chisqr
                 result.stderr  = stderr
                 result.pvec = out
                 result.success = success
-                if q !=None:
-                    print "went here"
+                print result
+                if q is not  None:
+                    #print "went here"
                     q.put(result)
-                    print "get q scipy fit enfine",q.get()
+                    #print "get q scipy fit enfine",q.get()
                     return q
                 return result
         else:  
             raise ValueError, "SVD did not converge"+str(success)
-        #except FitAbort:
-            ## fit engine is stop
-        #    return None
-        
-        #except:
-        #    raise
-       
+    
 
 
