Changes in / [36a2418:fa26e78] in sasmodels
- Files:
-
- 6 added
- 6 deleted
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
README.rst
r2a64722 re30d645 10 10 is available. 11 11 12 Install 12 Example 13 13 ------- 14 15 The easiest way to use sasmodels is from `SasView <http://www.sasview.org/>`_.16 17 You can also install sasmodels as a standalone package in python. Use18 `miniconda <https://docs.conda.io/en/latest/miniconda.html>`_19 or `anaconda <https://www.anaconda.com/>`_20 to create a python environment with the sasmodels dependencies::21 22 $ conda create -n sasmodels -c conda-forge numpy scipy matplotlib pyopencl23 24 The option ``-n sasmodels`` names the environment sasmodels, and the option25 ``-c conda-forge`` selects the conda-forge package channel because pyopencl26 is not part of the base anaconda distribution.27 28 Activate the environment and install sasmodels::29 30 $ conda activate sasmodels31 (sasmodels) $ pip install sasmodels32 33 Install `bumps <https://github.com/bumps/bumps>`_ if you want to use it to fit34 your data::35 36 (sasmodels) $ pip install bumps37 38 Usage39 -----40 41 Check that the works::42 43 (sasmodels) $ python -m sasmodels.compare cylinder44 45 To show the orientation explorer::46 47 (sasmodels) $ python -m sasmodels.jitter48 49 Documentation is available online as part of the SasView50 `fitting perspective <http://www.sasview.org/docs/index.html>`_51 as well as separate pages for52 `individual models <http://www.sasview.org/docs/user/sasgui/perspectives/fitting/models/index.html>`_.53 Programming details for sasmodels are available in the54 `developer documentation <http://www.sasview.org/docs/dev/dev.html>`_.55 56 57 Fitting Example58 ---------------59 14 60 15 The example directory contains a radial+tangential data set for an oriented 61 16 rod-like shape. 62 17 63 To load the example data, you will need the SAS data loader from the sasview 64 package. This is not yet available on PyPI, so you will need a copy of the 65 SasView source code to run it. Create a directory somewhere to hold the 66 sasview and sasmodels source code, which we will refer to as $SOURCE. 18 The data is loaded by sas.dataloader from the sasview package, so sasview 19 is needed to run the example. 67 20 68 Use the following to install sasview, and the sasmodels examples:: 21 To run the example, you need sasview, sasmodels and bumps. Assuming these 22 repositories are installed side by side, change to the sasmodels/example 23 directory and enter:: 69 24 70 (sasmodels) $ cd $SOURCE 71 (sasmodels) $ conda install git 72 (sasmodels) $ git clone https://github.com/sasview/sasview.git 73 (sasmodels) $ git clone https://github.com/sasview/sasmodels.git 25 PYTHONPATH=..:../../sasview/src ../../bumps/run.py fit.py \ 26 cylinder --preview 74 27 75 Set the path to the sasview source on your python path within the sasmodels 76 environment. On Windows, this will be:: 28 See bumps documentation for instructions on running the fit. With the 29 python packages installed, e.g., into a virtual environment, then the 30 python path need not be set, and the command would be:: 77 31 78 (sasmodels)> set PYTHONPATH="$SOURCE\sasview\src" 79 (sasmodels)> cd $SOURCE/sasmodels/example 80 (sasmodels)> python -m bumps.cli fit.py cylinder --preview 81 82 On Mac/Linux with the standard shell this will be:: 83 84 (sasmodels) $ export PYTHONPATH="$SOURCE/sasview/src" 85 (sasmodels) $ cd $SOURCE/sasmodels/example 86 (sasmodels) $ bumps fit.py cylinder --preview 32 bumps fit.py cylinder --preview 87 33 88 34 The fit.py model accepts up to two arguments. The first argument is the … … 92 38 both radial and tangential simultaneously, use the word "both". 93 39 94 See `bumps documentation <https://bumps.readthedocs.io/>`_ for detailed 95 instructions on running the fit. 40 Notes 41 ----- 42 43 cylinder.c + cylinder.py is the cylinder model with renamed variables and 44 sld scaled by 1e6 so the numbers are nicer. The model name is "cylinder" 45 46 lamellar.py is an example of a single file model with embedded C code. 96 47 97 48 |TravisStatus|_ -
explore/beta/sasfit_compare.py
r119073a r2a12351b 505 505 } 506 506 507 Q, IQ = load_sasfit(data_file(' sasfit_sphere_schulz_IQD.txt'))508 Q, IQSD = load_sasfit(data_file(' sasfit_sphere_schulz_IQSD.txt'))509 Q, IQBD = load_sasfit(data_file(' sasfit_sphere_schulz_IQBD.txt'))507 Q, IQ = load_sasfit(data_file('richard_test.txt')) 508 Q, IQSD = load_sasfit(data_file('richard_test2.txt')) 509 Q, IQBD = load_sasfit(data_file('richard_test3.txt')) 510 510 target = Theory(Q=Q, F1=None, F2=None, P=IQ, S=None, I=IQSD, Seff=None, Ibeta=IQBD) 511 511 actual = sphere_r(Q, norm="sasfit", **pars) … … 526 526 } 527 527 528 Q, IQ = load_sasfit(data_file(' sasfit_ellipsoid_shulz_IQD.txt'))529 Q, IQSD = load_sasfit(data_file(' sasfit_ellipsoid_shulz_IQSD.txt'))530 Q, IQBD = load_sasfit(data_file(' sasfit_ellipsoid_shulz_IQBD.txt'))528 Q, IQ = load_sasfit(data_file('richard_test4.txt')) 529 Q, IQSD = load_sasfit(data_file('richard_test5.txt')) 530 Q, IQBD = load_sasfit(data_file('richard_test6.txt')) 531 531 target = Theory(Q=Q, F1=None, F2=None, P=IQ, S=None, I=IQSD, Seff=None, Ibeta=IQBD) 532 532 actual = ellipsoid_pe(Q, norm="sasfit", **pars) -
explore/precision.py
rcd28947 rfba9ca0 207 207 return model_info 208 208 209 # Hack to allow second parameter A in the gammainc and gammaincc functions. 210 # Create a 2-D variant of the precision test if we need to handle other two 211 # parameter functions. 209 # Hack to allow second parameter A in two parameter functions 212 210 A = 1 213 211 def parse_extra_pars(): 214 """215 Parse the command line looking for the second parameter "A=..." for the216 gammainc/gammaincc functions.217 """218 212 global A 219 213 … … 339 333 ) 340 334 add_function( 341 # Note: "a" is given as A=... on the command line via parse_extra_pars342 335 name="gammainc(x)", 343 336 mp_function=lambda x, a=A: mp.gammainc(a, a=0, b=x)/mp.gamma(a), … … 346 339 ) 347 340 add_function( 348 # Note: "a" is given as A=... on the command line via parse_extra_pars349 341 name="gammaincc(x)", 350 342 mp_function=lambda x, a=A: mp.gammainc(a, a=x, b=mp.inf)/mp.gamma(a), -
sasmodels/generate.py
rcd28947 r39a06c9 703 703 """ 704 704 for code in source: 705 if _FQ_PATTERN.search(code) is not None: 705 m = _FQ_PATTERN.search(code) 706 if m is not None: 706 707 return True 707 708 return False … … 711 712 # type: (List[str]) -> bool 712 713 """ 713 Return True if C source defines " double shell_volume(".714 Return True if C source defines "void Fq(". 714 715 """ 715 716 for code in source: 716 if _SHELL_VOLUME_PATTERN.search(code) is not None: 717 m = _SHELL_VOLUME_PATTERN.search(code) 718 if m is not None: 717 719 return True 718 720 return False -
sasmodels/kernel.py
r3199b17 r3199b17 135 135 nout = 2 if self.info.have_Fq and self.dim == '1d' else 1 136 136 total_weight = self.result[nout*self.q_input.nq + 0] 137 # Note: total_weight = sum(weight > cutoff), with cutoff >= 0, so it138 # is okay to test directly against zero. If weight is zero then I(q),139 # etc. must also be zero.140 137 if total_weight == 0.: 141 138 total_weight = 1. -
sasmodels/models/pearl_necklace.c
r4453136 r4453136 40 40 const double si = sas_sinx_x(q*A_s); 41 41 const double omsi = 1.0 - si; 42 const double pow_si = pow n(si, num_pearls);42 const double pow_si = pow(si, num_pearls); 43 43 44 44 // form factor for num_pearls -
sasmodels/sasview_model.py
r3a1afed r5024a56 695 695 return self._calculate_Iq(qx, qy) 696 696 697 def _calculate_Iq(self, qx, qy=None ):697 def _calculate_Iq(self, qx, qy=None, Fq=False, effective_radius_type=1): 698 698 if self._model is None: 699 699 self._model = core.build_model(self._model_info) … … 715 715 #print("values", values) 716 716 #print("is_mag", is_magnetic) 717 if Fq: 718 result = calculator.Fq(call_details, values, cutoff=self.cutoff, 719 magnetic=is_magnetic, 720 effective_radius_type=effective_radius_type) 717 721 result = calculator(call_details, values, cutoff=self.cutoff, 718 722 magnetic=is_magnetic) … … 732 736 Calculate the effective radius for P(q)*S(q) 733 737 734 *mode* is the R_eff type, which defaults to 1 to match the ER735 calculation for sasview models from version 3.x.736 737 738 :return: the value of the effective radius 738 739 """ 739 # ER and VR are only needed for old multiplication models, based on 740 # sas.sascalc.fit.MultiplicationModel. Fail for now. If we want to 741 # continue supporting them then add some test cases so that the code 742 # is exercised. We can access ER/VR using the kernel Fq function by 743 # extending _calculate_Iq so that it calls: 744 # if er_mode > 0: 745 # res = calculator.Fq(call_details, values, cutoff=self.cutoff, 746 # magnetic=False, effective_radius_type=mode) 747 # R_eff, form_shell_ratio = res[2], res[4] 748 # return R_eff, form_shell_ratio 749 # Then use the following in calculate_ER: 750 # ER, VR = self._calculate_Iq(q=[0.1], er_mode=mode) 751 # return ER 752 # Similarly, for calculate_VR: 753 # ER, VR = self._calculate_Iq(q=[0.1], er_mode=1) 754 # return VR 755 # Obviously a combined calculate_ER_VR method would be better, but 756 # we only need them to support very old models, so ignore the 2x 757 # performance hit. 758 raise NotImplementedError("ER function is no longer available.") 740 Fq = self._calculate_Iq([0.1], True, mode) 741 return Fq[2] 759 742 760 743 def calculate_VR(self): … … 765 748 :return: the value of the form:shell volume ratio 766 749 """ 767 # See comments in calculate_ER.768 r aise NotImplementedError("VR function is no longer available.")750 Fq = self._calculate_Iq([0.1], True, mode) 751 return Fq[4] 769 752 770 753 def set_dispersion(self, parameter, dispersion):
Note: See TracChangeset
for help on using the changeset viewer.