Changeset eca05c8 in sasview for pr_inversion/invertor.py


Ignore:
Timestamp:
Apr 30, 2008 4:29:36 PM (16 years ago)
Author:
Mathieu Doucet <doucetm@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
34ae302
Parents:
47f695c9
Message:

Added P(r) fit test

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pr_inversion/invertor.py

    r9e8dc22 reca05c8  
    33 
    44class Invertor(Cinvertor): 
     5     
     6    ## Chisqr of the last computation 
     7    chisqr = 0 
    58     
    69    def __init__(self): 
     
    1417        """ 
    1518        if   name=='x': 
     19            if 0.0 in value: 
     20                raise ValueError, "Invertor: one of your q-values is zero. Delete that entry before proceeding" 
    1621            return self.set_x(value) 
    1722        elif name=='y': 
     
    2126        elif name=='d_max': 
    2227            return self.set_dmax(value) 
     28        elif name=='alpha': 
     29            return self.set_alpha(value) 
    2330             
    2431        return Cinvertor.__setattr__(self, name, value) 
     
    4552        elif name=='d_max': 
    4653            return self.get_dmax() 
     54        elif name=='alpha': 
     55            return self.get_alpha() 
    4756        elif name in self.__dict__: 
    4857            return self.__dict__[name] 
     
    6271        out, cov_x, info, mesg, success = optimize.leastsq(self.residuals, p, full_output=1, warning=True) 
    6372         
     73        # Compute chi^2 
     74        res = self.residuals(out) 
     75        chisqr = 0 
     76        for i in range(len(res)): 
     77            chisqr += res[i] 
     78         
     79        self.chi2 = chisqr 
     80         
    6481        return out, cov_x 
     82     
     83    def pr_fit(self, nfunc=5): 
     84        """ 
     85            Perform inversion to P(r) 
     86        """ 
     87        from scipy import optimize 
     88         
     89        # First, check that the current data is valid 
     90        if self.is_valid()<=0: 
     91            raise RuntimeError, "Invertor.invert: Data arrays are of different length" 
     92         
     93        p = numpy.ones(nfunc) 
     94        out, cov_x, info, mesg, success = optimize.leastsq(self.pr_residuals, p, full_output=1, warning=True) 
     95         
     96        # Compute chi^2 
     97        res = self.pr_residuals(out) 
     98        chisqr = 0 
     99        for i in range(len(res)): 
     100            chisqr += res[i] 
     101         
     102        self.chisqr = chisqr 
     103         
     104        return out, cov_x 
     105     
     106    def pr_err(self, c, c_cov, r): 
     107        import math 
     108        c_err = numpy.zeros(len(c)) 
     109        for i in range(len(c)): 
     110            try: 
     111                c_err[i] = math.sqrt(math.fabs(c_cov[i][i])) 
     112            except: 
     113                import sys 
     114                print sys.exc_value 
     115                print "oups", c_cov[i][i] 
     116                c_err[i] = c[i] 
     117 
     118        return self.get_pr_err(c, c_err, r) 
     119         
    65120     
    66121if __name__ == "__main__": 
Note: See TracChangeset for help on using the changeset viewer.