Changeset eca05c8 in sasview for pr_inversion/invertor.py
- Timestamp:
- Apr 30, 2008 4:29:36 PM (16 years ago)
- 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
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pr_inversion/invertor.py
r9e8dc22 reca05c8 3 3 4 4 class Invertor(Cinvertor): 5 6 ## Chisqr of the last computation 7 chisqr = 0 5 8 6 9 def __init__(self): … … 14 17 """ 15 18 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" 16 21 return self.set_x(value) 17 22 elif name=='y': … … 21 26 elif name=='d_max': 22 27 return self.set_dmax(value) 28 elif name=='alpha': 29 return self.set_alpha(value) 23 30 24 31 return Cinvertor.__setattr__(self, name, value) … … 45 52 elif name=='d_max': 46 53 return self.get_dmax() 54 elif name=='alpha': 55 return self.get_alpha() 47 56 elif name in self.__dict__: 48 57 return self.__dict__[name] … … 62 71 out, cov_x, info, mesg, success = optimize.leastsq(self.residuals, p, full_output=1, warning=True) 63 72 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 64 81 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 65 120 66 121 if __name__ == "__main__":
Note: See TracChangeset
for help on using the changeset viewer.