Changeset 2c74c11 in sasmodels for sasmodels/models/two_power_law.py


Ignore:
Timestamp:
Jul 24, 2016 10:56:45 PM (8 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, core_shell_microgels, costrafo411, magnetic_model, release_v0.94, release_v0.95, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
a4280bd
Parents:
f1765a2
Message:

implicit Iqxy; fix divide by 0 for q=0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/models/two_power_law.py

    rec45c4f r2c74c11  
    4444""" 
    4545 
    46 from numpy import power 
    47 from numpy import sqrt 
    48 from numpy import inf 
    49 from numpy import concatenate 
     46from numpy import inf, power, empty, errstate 
    5047 
    5148name = "two_power_law" 
     
    9289    :return:                    Calculated intensity 
    9390    """ 
    94  
    95     #Two sub vectors are created to treat crossover values 
    96     q_lower = q[q <= crossover] 
    97     q_upper = q[q > crossover] 
    98     coefficent_2 = coefficent_1*power(crossover, -1.0*power_1)/power(crossover, -1.0*power_2) 
    99     intensity_lower = coefficent_1*power(q_lower, -1.0*power_1) 
    100     intensity_upper = coefficent_2*power(q_upper, -1.0*power_2) 
    101     intensity = concatenate((intensity_lower, intensity_upper), axis=0) 
    102  
    103     return intensity 
     91    iq = empty(q.shape, 'd') 
     92    idx = (q <= crossover) 
     93    with errstate(divide='ignore'): 
     94        coefficent_2 = coefficent_1 * power(crossover, power_2 - power_1) 
     95        iq[idx] = coefficent_1 * power(q[idx], -power_1) 
     96        iq[~idx] = coefficent_2 * power(q[~idx], -power_2) 
     97    return iq 
    10498 
    10599Iq.vectorized = True  # Iq accepts an array of q values 
    106  
    107 def Iqxy(qx, qy, *args): 
    108     """ 
    109     :param qx:   Input q_x-value 
    110     :param qy:   Input q_y-value 
    111     :param args: Remaining arguments 
    112     :return:     2D-Intensity 
    113     """ 
    114  
    115     return Iq(sqrt(qx**2 + qy**2), *args) 
    116  
    117 Iqxy.vectorized = True  # Iqxy accepts an array of qx, qy values 
    118100 
    119101demo = dict(scale=1, background=0.0, 
Note: See TracChangeset for help on using the changeset viewer.