Changes in src/sas/sascalc/calculator/sas_gen.py [9a5097c:463e7ffc] in sasview
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sascalc/calculator/sas_gen.py
r9a5097c r463e7ffc 7 7 from periodictable import formula 8 8 from periodictable import nsf 9 import numpy as np9 import numpy 10 10 import os 11 11 import copy 12 12 import sys 13 13 import logging 14 15 logger = logging.getLogger(__name__) 14 16 15 17 MFACTOR_AM = 2.853E-12 … … 80 82 ## Parameter details [units, min, max] 81 83 self.details = {} 82 self.details['scale'] = ['', 0.0, n p.inf]83 self.details['background'] = ['[1/cm]', 0.0, n p.inf]84 self.details['solvent_SLD'] = ['1/A^(2)', -n p.inf, np.inf]85 self.details['total_volume'] = ['A^(3)', 0.0, n p.inf]84 self.details['scale'] = ['', 0.0, numpy.inf] 85 self.details['background'] = ['[1/cm]', 0.0, numpy.inf] 86 self.details['solvent_SLD'] = ['1/A^(2)', -numpy.inf, numpy.inf] 87 self.details['total_volume'] = ['A^(3)', 0.0, numpy.inf] 86 88 self.details['Up_frac_in'] = ['[u/(u+d)]', 0.0, 1.0] 87 89 self.details['Up_frac_out'] = ['[u/(u+d)]', 0.0, 1.0] 88 self.details['Up_theta'] = ['[deg]', -n p.inf, np.inf]90 self.details['Up_theta'] = ['[deg]', -numpy.inf, numpy.inf] 89 91 # fixed parameters 90 92 self.fixed = [] … … 171 173 msg = "Not a 1D." 172 174 raise ValueError, msg 173 i_out = n p.zeros_like(x[0])175 i_out = numpy.zeros_like(x[0]) 174 176 # 1D I is found at y =0 in the 2D pattern 175 177 out = self._gen(x[0], [], i_out) … … 187 189 """ 188 190 if x.__class__.__name__ == 'list': 189 i_out = n p.zeros_like(x[0])191 i_out = numpy.zeros_like(x[0]) 190 192 out = self._gen(x[0], x[1], i_out) 191 193 return out … … 237 239 self.omfdata = omfdata 238 240 length = int(omfdata.xnodes * omfdata.ynodes * omfdata.znodes) 239 pos_x = n p.arange(omfdata.xmin,241 pos_x = numpy.arange(omfdata.xmin, 240 242 omfdata.xnodes*omfdata.xstepsize + omfdata.xmin, 241 243 omfdata.xstepsize) 242 pos_y = n p.arange(omfdata.ymin,244 pos_y = numpy.arange(omfdata.ymin, 243 245 omfdata.ynodes*omfdata.ystepsize + omfdata.ymin, 244 246 omfdata.ystepsize) 245 pos_z = n p.arange(omfdata.zmin,247 pos_z = numpy.arange(omfdata.zmin, 246 248 omfdata.znodes*omfdata.zstepsize + omfdata.zmin, 247 249 omfdata.zstepsize) 248 self.pos_x = n p.tile(pos_x, int(omfdata.ynodes * omfdata.znodes))250 self.pos_x = numpy.tile(pos_x, int(omfdata.ynodes * omfdata.znodes)) 249 251 self.pos_y = pos_y.repeat(int(omfdata.xnodes)) 250 self.pos_y = n p.tile(self.pos_y, int(omfdata.znodes))252 self.pos_y = numpy.tile(self.pos_y, int(omfdata.znodes)) 251 253 self.pos_z = pos_z.repeat(int(omfdata.xnodes * omfdata.ynodes)) 252 254 self.mx = omfdata.mx 253 255 self.my = omfdata.my 254 256 self.mz = omfdata.mz 255 self.sld_n = n p.zeros(length)257 self.sld_n = numpy.zeros(length) 256 258 257 259 if omfdata.mx == None: 258 self.mx = n p.zeros(length)260 self.mx = numpy.zeros(length) 259 261 if omfdata.my == None: 260 self.my = n p.zeros(length)262 self.my = numpy.zeros(length) 261 263 if omfdata.mz == None: 262 self.mz = n p.zeros(length)264 self.mz = numpy.zeros(length) 263 265 264 266 self._check_data_length(length) 265 267 self.remove_null_points(False, False) 266 mask = n p.ones(len(self.sld_n), dtype=bool)268 mask = numpy.ones(len(self.sld_n), dtype=bool) 267 269 if shape.lower() == 'ellipsoid': 268 270 try: … … 285 287 mask = (x_dir2 + y_dir2 + z_dir2) <= 1.0 286 288 except: 287 logg ing.error(sys.exc_value)289 logger.error(sys.exc_value) 288 290 self.output = MagSLD(self.pos_x[mask], self.pos_y[mask], 289 291 self.pos_z[mask], self.sld_n[mask], … … 328 330 """ 329 331 if remove: 330 is_nonzero = (n p.fabs(self.mx) + np.fabs(self.my) +331 n p.fabs(self.mz)).nonzero()332 is_nonzero = (numpy.fabs(self.mx) + numpy.fabs(self.my) + 333 numpy.fabs(self.mz)).nonzero() 332 334 if len(is_nonzero[0]) > 0: 333 335 self.pos_x = self.pos_x[is_nonzero] … … 369 371 """ 370 372 desc = "" 371 mx = n p.zeros(0)372 my = n p.zeros(0)373 mz = n p.zeros(0)373 mx = numpy.zeros(0) 374 my = numpy.zeros(0) 375 mz = numpy.zeros(0) 374 376 try: 375 377 input_f = open(path, 'rb') … … 389 391 _my = mag2sld(_my, valueunit) 390 392 _mz = mag2sld(_mz, valueunit) 391 mx = n p.append(mx, _mx)392 my = n p.append(my, _my)393 mz = n p.append(mz, _mz)393 mx = numpy.append(mx, _mx) 394 my = numpy.append(my, _my) 395 mz = numpy.append(mz, _mz) 394 396 except: 395 397 # Skip non-data lines 396 logg ing.error(sys.exc_value)398 logger.error(sys.exc_value) 397 399 #Reading Header; Segment count ignored 398 400 s_line = line.split(":", 1) … … 501 503 :raise RuntimeError: when the file can't be opened 502 504 """ 503 pos_x = n p.zeros(0)504 pos_y = n p.zeros(0)505 pos_z = n p.zeros(0)506 sld_n = n p.zeros(0)507 sld_mx = n p.zeros(0)508 sld_my = n p.zeros(0)509 sld_mz = n p.zeros(0)510 vol_pix = n p.zeros(0)511 pix_symbol = n p.zeros(0)505 pos_x = numpy.zeros(0) 506 pos_y = numpy.zeros(0) 507 pos_z = numpy.zeros(0) 508 sld_n = numpy.zeros(0) 509 sld_mx = numpy.zeros(0) 510 sld_my = numpy.zeros(0) 511 sld_mz = numpy.zeros(0) 512 vol_pix = numpy.zeros(0) 513 pix_symbol = numpy.zeros(0) 512 514 x_line = [] 513 515 y_line = [] … … 543 545 _pos_y = float(line[38:46].strip()) 544 546 _pos_z = float(line[46:54].strip()) 545 pos_x = n p.append(pos_x, _pos_x)546 pos_y = n p.append(pos_y, _pos_y)547 pos_z = n p.append(pos_z, _pos_z)547 pos_x = numpy.append(pos_x, _pos_x) 548 pos_y = numpy.append(pos_y, _pos_y) 549 pos_z = numpy.append(pos_z, _pos_z) 548 550 try: 549 551 val = nsf.neutron_sld(atom_name)[0] 550 552 # sld in Ang^-2 unit 551 553 val *= 1.0e-6 552 sld_n = n p.append(sld_n, val)554 sld_n = numpy.append(sld_n, val) 553 555 atom = formula(atom_name) 554 556 # cm to A units 555 557 vol = 1.0e+24 * atom.mass / atom.density / NA 556 vol_pix = n p.append(vol_pix, vol)558 vol_pix = numpy.append(vol_pix, vol) 557 559 except: 558 560 print "Error: set the sld of %s to zero"% atom_name 559 sld_n = n p.append(sld_n, 0.0)560 sld_mx = n p.append(sld_mx, 0)561 sld_my = n p.append(sld_my, 0)562 sld_mz = n p.append(sld_mz, 0)563 pix_symbol = n p.append(pix_symbol, atom_name)561 sld_n = numpy.append(sld_n, 0.0) 562 sld_mx = numpy.append(sld_mx, 0) 563 sld_my = numpy.append(sld_my, 0) 564 sld_mz = numpy.append(sld_mz, 0) 565 pix_symbol = numpy.append(pix_symbol, atom_name) 564 566 elif line[0:6].strip().count('CONECT') > 0: 565 567 toks = line.split() … … 589 591 z_lines.append(z_line) 590 592 except: 591 logg ing.error(sys.exc_value)593 logger.error(sys.exc_value) 592 594 593 595 output = MagSLD(pos_x, pos_y, pos_z, sld_n, sld_mx, sld_my, sld_mz) … … 630 632 """ 631 633 try: 632 pos_x = n p.zeros(0)633 pos_y = n p.zeros(0)634 pos_z = n p.zeros(0)635 sld_n = n p.zeros(0)636 sld_mx = n p.zeros(0)637 sld_my = n p.zeros(0)638 sld_mz = n p.zeros(0)634 pos_x = numpy.zeros(0) 635 pos_y = numpy.zeros(0) 636 pos_z = numpy.zeros(0) 637 sld_n = numpy.zeros(0) 638 sld_mx = numpy.zeros(0) 639 sld_my = numpy.zeros(0) 640 sld_mz = numpy.zeros(0) 639 641 try: 640 642 # Use numpy to speed up loading 641 input_f = n p.loadtxt(path, dtype='float', skiprows=1,643 input_f = numpy.loadtxt(path, dtype='float', skiprows=1, 642 644 ndmin=1, unpack=True) 643 pos_x = n p.array(input_f[0])644 pos_y = n p.array(input_f[1])645 pos_z = n p.array(input_f[2])646 sld_n = n p.array(input_f[3])647 sld_mx = n p.array(input_f[4])648 sld_my = n p.array(input_f[5])649 sld_mz = n p.array(input_f[6])645 pos_x = numpy.array(input_f[0]) 646 pos_y = numpy.array(input_f[1]) 647 pos_z = numpy.array(input_f[2]) 648 sld_n = numpy.array(input_f[3]) 649 sld_mx = numpy.array(input_f[4]) 650 sld_my = numpy.array(input_f[5]) 651 sld_mz = numpy.array(input_f[6]) 650 652 ncols = len(input_f) 651 653 if ncols == 8: 652 vol_pix = n p.array(input_f[7])654 vol_pix = numpy.array(input_f[7]) 653 655 elif ncols == 7: 654 656 vol_pix = None … … 669 671 _sld_my = float(toks[5]) 670 672 _sld_mz = float(toks[6]) 671 pos_x = n p.append(pos_x, _pos_x)672 pos_y = n p.append(pos_y, _pos_y)673 pos_z = n p.append(pos_z, _pos_z)674 sld_n = n p.append(sld_n, _sld_n)675 sld_mx = n p.append(sld_mx, _sld_mx)676 sld_my = n p.append(sld_my, _sld_my)677 sld_mz = n p.append(sld_mz, _sld_mz)673 pos_x = numpy.append(pos_x, _pos_x) 674 pos_y = numpy.append(pos_y, _pos_y) 675 pos_z = numpy.append(pos_z, _pos_z) 676 sld_n = numpy.append(sld_n, _sld_n) 677 sld_mx = numpy.append(sld_mx, _sld_mx) 678 sld_my = numpy.append(sld_my, _sld_my) 679 sld_mz = numpy.append(sld_mz, _sld_mz) 678 680 try: 679 681 _vol_pix = float(toks[7]) 680 vol_pix = n p.append(vol_pix, _vol_pix)682 vol_pix = numpy.append(vol_pix, _vol_pix) 681 683 except: 682 684 vol_pix = None 683 685 except: 684 686 # Skip non-data lines 685 logg ing.error(sys.exc_value)687 logger.error(sys.exc_value) 686 688 output = MagSLD(pos_x, pos_y, pos_z, sld_n, 687 689 sld_mx, sld_my, sld_mz) … … 712 714 sld_n = data.sld_n 713 715 if sld_n == None: 714 sld_n = n p.zeros(length)716 sld_n = numpy.zeros(length) 715 717 sld_mx = data.sld_mx 716 718 if sld_mx == None: 717 sld_mx = n p.zeros(length)718 sld_my = n p.zeros(length)719 sld_mz = n p.zeros(length)719 sld_mx = numpy.zeros(length) 720 sld_my = numpy.zeros(length) 721 sld_mz = numpy.zeros(length) 720 722 else: 721 723 sld_my = data.sld_my … … 893 895 if self.is_data: 894 896 # For data, put the value to only the pixels w non-zero M 895 is_nonzero = (n p.fabs(self.sld_mx) +896 n p.fabs(self.sld_my) +897 n p.fabs(self.sld_mz)).nonzero()898 self.sld_n = n p.zeros(len(self.pos_x))897 is_nonzero = (numpy.fabs(self.sld_mx) + 898 numpy.fabs(self.sld_my) + 899 numpy.fabs(self.sld_mz)).nonzero() 900 self.sld_n = numpy.zeros(len(self.pos_x)) 899 901 if len(self.sld_n[is_nonzero]) > 0: 900 902 self.sld_n[is_nonzero] = sld_n … … 903 905 else: 904 906 # For non-data, put the value to all the pixels 905 self.sld_n = n p.ones(len(self.pos_x)) * sld_n907 self.sld_n = numpy.ones(len(self.pos_x)) * sld_n 906 908 else: 907 909 self.sld_n = sld_n … … 912 914 """ 913 915 if sld_mx.__class__.__name__ == 'float': 914 self.sld_mx = n p.ones(len(self.pos_x)) * sld_mx916 self.sld_mx = numpy.ones(len(self.pos_x)) * sld_mx 915 917 else: 916 918 self.sld_mx = sld_mx 917 919 if sld_my.__class__.__name__ == 'float': 918 self.sld_my = n p.ones(len(self.pos_x)) * sld_my920 self.sld_my = numpy.ones(len(self.pos_x)) * sld_my 919 921 else: 920 922 self.sld_my = sld_my 921 923 if sld_mz.__class__.__name__ == 'float': 922 self.sld_mz = n p.ones(len(self.pos_x)) * sld_mz924 self.sld_mz = numpy.ones(len(self.pos_x)) * sld_mz 923 925 else: 924 926 self.sld_mz = sld_mz 925 927 926 sld_m = n p.sqrt(sld_mx * sld_mx + sld_my * sld_my + \928 sld_m = numpy.sqrt(sld_mx * sld_mx + sld_my * sld_my + \ 927 929 sld_mz * sld_mz) 928 930 self.sld_m = sld_m … … 936 938 return 937 939 if symbol.__class__.__name__ == 'str': 938 self.pix_symbol = n p.repeat(symbol, len(self.sld_n))940 self.pix_symbol = numpy.repeat(symbol, len(self.sld_n)) 939 941 else: 940 942 self.pix_symbol = symbol … … 950 952 self.vol_pix = vol 951 953 elif vol.__class__.__name__.count('float') > 0: 952 self.vol_pix = n p.repeat(vol, len(self.sld_n))954 self.vol_pix = numpy.repeat(vol, len(self.sld_n)) 953 955 else: 954 956 self.vol_pix = None … … 993 995 for x_pos in self.pos_x: 994 996 if xpos_pre != x_pos: 995 self.xstepsize = n p.fabs(x_pos - xpos_pre)997 self.xstepsize = numpy.fabs(x_pos - xpos_pre) 996 998 break 997 999 for y_pos in self.pos_y: 998 1000 if ypos_pre != y_pos: 999 self.ystepsize = n p.fabs(y_pos - ypos_pre)1001 self.ystepsize = numpy.fabs(y_pos - ypos_pre) 1000 1002 break 1001 1003 for z_pos in self.pos_z: 1002 1004 if zpos_pre != z_pos: 1003 self.zstepsize = n p.fabs(z_pos - zpos_pre)1005 self.zstepsize = numpy.fabs(z_pos - zpos_pre) 1004 1006 break 1005 1007 #default pix volume 1006 self.vol_pix = n p.ones(len(self.pos_x))1008 self.vol_pix = numpy.ones(len(self.pos_x)) 1007 1009 vol = self.xstepsize * self.ystepsize * self.zstepsize 1008 1010 self.set_pixel_volumes(vol) … … 1071 1073 y2 = output.pos_y+output.sld_my/max_m * gap 1072 1074 z2 = output.pos_z+output.sld_mz/max_m * gap 1073 x_arrow = n p.column_stack((output.pos_x, x2))1074 y_arrow = n p.column_stack((output.pos_y, y2))1075 z_arrow = n p.column_stack((output.pos_z, z2))1075 x_arrow = numpy.column_stack((output.pos_x, x2)) 1076 y_arrow = numpy.column_stack((output.pos_y, y2)) 1077 z_arrow = numpy.column_stack((output.pos_z, z2)) 1076 1078 unit_x2 = output.sld_mx / max_m 1077 1079 unit_y2 = output.sld_my / max_m 1078 1080 unit_z2 = output.sld_mz / max_m 1079 color_x = n p.fabs(unit_x2 * 0.8)1080 color_y = n p.fabs(unit_y2 * 0.8)1081 color_z = n p.fabs(unit_z2 * 0.8)1082 colors = n p.column_stack((color_x, color_y, color_z))1081 color_x = numpy.fabs(unit_x2 * 0.8) 1082 color_y = numpy.fabs(unit_y2 * 0.8) 1083 color_z = numpy.fabs(unit_z2 * 0.8) 1084 colors = numpy.column_stack((color_x, color_y, color_z)) 1083 1085 plt.show() 1084 1086 … … 1103 1105 model = GenSAS() 1104 1106 model.set_sld_data(foutput.output) 1105 x = n p.arange(1000)/10000. + 1e-51106 y = n p.arange(1000)/10000. + 1e-51107 i = n p.zeros(1000)1107 x = numpy.arange(1000)/10000. + 1e-5 1108 y = numpy.arange(1000)/10000. + 1e-5 1109 i = numpy.zeros(1000) 1108 1110 model.runXY([x, y, i]) 1109 1111
Note: See TracChangeset
for help on using the changeset viewer.