Changes in / [36a2418:fa26e78] in sasmodels


Ignore:
Files:
6 added
6 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • README.rst

    r2a64722 re30d645  
    1010is available. 
    1111 
    12 Install 
     12Example 
    1313------- 
    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. Use 
    18 `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 pyopencl 
    23  
    24 The option ``-n sasmodels`` names the environment sasmodels, and the option 
    25 ``-c conda-forge`` selects the conda-forge package channel because pyopencl 
    26 is not part of the base anaconda distribution. 
    27  
    28 Activate the environment and install sasmodels:: 
    29  
    30     $ conda activate sasmodels 
    31     (sasmodels) $ pip install sasmodels 
    32  
    33 Install `bumps <https://github.com/bumps/bumps>`_ if you want to use it to fit 
    34 your data:: 
    35  
    36     (sasmodels) $ pip install bumps 
    37  
    38 Usage 
    39 ----- 
    40  
    41 Check that the works:: 
    42  
    43     (sasmodels) $ python -m sasmodels.compare cylinder 
    44  
    45 To show the orientation explorer:: 
    46  
    47     (sasmodels) $ python -m sasmodels.jitter 
    48  
    49 Documentation is available online as part of the SasView 
    50 `fitting perspective <http://www.sasview.org/docs/index.html>`_ 
    51 as well as separate pages for 
    52 `individual models <http://www.sasview.org/docs/user/sasgui/perspectives/fitting/models/index.html>`_. 
    53 Programming details for sasmodels are available in the 
    54 `developer documentation <http://www.sasview.org/docs/dev/dev.html>`_. 
    55  
    56  
    57 Fitting Example 
    58 --------------- 
    5914 
    6015The example directory contains a radial+tangential data set for an oriented 
    6116rod-like shape. 
    6217 
    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. 
     18The data is loaded by sas.dataloader from the sasview package, so sasview 
     19is needed to run the example. 
    6720 
    68 Use the following to install sasview, and the sasmodels examples:: 
     21To run the example, you need sasview, sasmodels and bumps.  Assuming these 
     22repositories are installed side by side, change to the sasmodels/example 
     23directory and enter:: 
    6924 
    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 
    7427 
    75 Set the path to the sasview source on your python path within the sasmodels 
    76 environment.  On Windows, this will be:: 
     28See bumps documentation for instructions on running the fit.  With the 
     29python packages installed, e.g., into a virtual environment, then the 
     30python path need not be set, and the command would be:: 
    7731 
    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 
    8733 
    8834The fit.py model accepts up to two arguments.  The first argument is the 
     
    9238both radial and tangential simultaneously, use the word "both". 
    9339 
    94 See `bumps documentation <https://bumps.readthedocs.io/>`_ for detailed 
    95 instructions on running the fit. 
     40Notes 
     41----- 
     42 
     43cylinder.c + cylinder.py is the cylinder model with renamed variables and 
     44sld scaled by 1e6 so the numbers are nicer.  The model name is "cylinder" 
     45 
     46lamellar.py is an example of a single file model with embedded C code. 
    9647 
    9748|TravisStatus|_ 
  • explore/beta/sasfit_compare.py

    r119073a r2a12351b  
    505505    } 
    506506 
    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')) 
    510510    target = Theory(Q=Q, F1=None, F2=None, P=IQ, S=None, I=IQSD, Seff=None, Ibeta=IQBD) 
    511511    actual = sphere_r(Q, norm="sasfit", **pars) 
     
    526526    } 
    527527 
    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')) 
    531531    target = Theory(Q=Q, F1=None, F2=None, P=IQ, S=None, I=IQSD, Seff=None, Ibeta=IQBD) 
    532532    actual = ellipsoid_pe(Q, norm="sasfit", **pars) 
  • explore/precision.py

    rcd28947 rfba9ca0  
    207207    return model_info 
    208208 
    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 
    212210A = 1 
    213211def parse_extra_pars(): 
    214     """ 
    215     Parse the command line looking for the second parameter "A=..." for the 
    216     gammainc/gammaincc functions. 
    217     """ 
    218212    global A 
    219213 
     
    339333) 
    340334add_function( 
    341     # Note: "a" is given as A=... on the command line via parse_extra_pars 
    342335    name="gammainc(x)", 
    343336    mp_function=lambda x, a=A: mp.gammainc(a, a=0, b=x)/mp.gamma(a), 
     
    346339) 
    347340add_function( 
    348     # Note: "a" is given as A=... on the command line via parse_extra_pars 
    349341    name="gammaincc(x)", 
    350342    mp_function=lambda x, a=A: mp.gammainc(a, a=x, b=mp.inf)/mp.gamma(a), 
  • sasmodels/generate.py

    rcd28947 r39a06c9  
    703703    """ 
    704704    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: 
    706707            return True 
    707708    return False 
     
    711712    # type: (List[str]) -> bool 
    712713    """ 
    713     Return True if C source defines "double shell_volume(". 
     714    Return True if C source defines "void Fq(". 
    714715    """ 
    715716    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: 
    717719            return True 
    718720    return False 
  • sasmodels/kernel.py

    r3199b17 r3199b17  
    135135        nout = 2 if self.info.have_Fq and self.dim == '1d' else 1 
    136136        total_weight = self.result[nout*self.q_input.nq + 0] 
    137         # Note: total_weight = sum(weight > cutoff), with cutoff >= 0, so it 
    138         # is okay to test directly against zero.  If weight is zero then I(q), 
    139         # etc. must also be zero. 
    140137        if total_weight == 0.: 
    141138            total_weight = 1. 
  • sasmodels/models/pearl_necklace.c

    r4453136 r4453136  
    4040    const double si = sas_sinx_x(q*A_s); 
    4141    const double omsi = 1.0 - si; 
    42     const double pow_si = pown(si, num_pearls); 
     42    const double pow_si = pow(si, num_pearls); 
    4343 
    4444    // form factor for num_pearls 
  • sasmodels/sasview_model.py

    r3a1afed r5024a56  
    695695            return self._calculate_Iq(qx, qy) 
    696696 
    697     def _calculate_Iq(self, qx, qy=None): 
     697    def _calculate_Iq(self, qx, qy=None, Fq=False, effective_radius_type=1): 
    698698        if self._model is None: 
    699699            self._model = core.build_model(self._model_info) 
     
    715715        #print("values", values) 
    716716        #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) 
    717721        result = calculator(call_details, values, cutoff=self.cutoff, 
    718722                            magnetic=is_magnetic) 
     
    732736        Calculate the effective radius for P(q)*S(q) 
    733737 
    734         *mode* is the R_eff type, which defaults to 1 to match the ER 
    735         calculation for sasview models from version 3.x. 
    736  
    737738        :return: the value of the effective radius 
    738739        """ 
    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] 
    759742 
    760743    def calculate_VR(self): 
     
    765748        :return: the value of the form:shell volume ratio 
    766749        """ 
    767         # See comments in calculate_ER. 
    768         raise NotImplementedError("VR function is no longer available.") 
     750        Fq = self._calculate_Iq([0.1], True, mode) 
     751        return Fq[4] 
    769752 
    770753    def set_dispersion(self, parameter, dispersion): 
Note: See TracChangeset for help on using the changeset viewer.