Created on Mon Jan 8 16:29:18 2018.

@author: erwan

Operations on Curves, where a curve is a (w, I) array tuple

Similar to OriginPro’s Simple Curve Math operators

## Routine Listing¶

curve_add(w1, I1, w2, I2, is_sorted=False, kind='linear')[source]

Add curve (w2, I2) from (w1, I1) Linearly interpolates if the two ranges dont match. Fills out of bound parameters with nan.

Similar to OriginPro’s “Simple Curve Math Substract”

Note

for higher accuracy, choose (w2, I2) has the curve with the highest resolution

Parameters
• w1, I1 (array) – range and values for first curve

• w2, I2 (array) – range and values for 2nd curve

• is_sorted (boolean) – (optional) if True, doesnt sort input arrays

• kind (str) – interpolation kind. Default ‘linear’. See scipy.interpolate.interp1d

Returns

w1, Iadd – sum I1 + I2 interpolated on the first range w1

Return type

array

curve_distance(w1, I1, w2, I2, discard_out_of_bounds=True)[source]

Get a regularized euclidian distance from curve (w1, I1) to curve (w2, I2)

$D(w_1)[i] = \sqrt{ \sum_j (\hat{I_1}[i] - \hat{I_2}[j] )^2 + (\hat{w_1}[i] - \hat{w_2}[j])^2}$

Where values are normalized as:

$\begin{split}\hat{A} = \\frac{A}{max(A) - min(A)}\end{split}$

This regularized Euclidian distance minimizes the effect of a small shift in between the two curves in case of stiff curves (like a spectrum bandhead can be)

No interpolation needed neither.

Distances for out of bounds values is set to nan

Warning

This is a distance on both the waverange and the intensity axis. It may be used to compensate for a small offset in your experimental spectrum (due to wavelength calibration, for instance) but can lead to wrong fits easily. Plus, it is very cost-intensive!

Parameters
• w1, I1 (array) – range and values for first curve

• w2, I2 (array) – range and values for 2nd curve

• discard_out_of_bounds (boolean) – if True, distance for out of bound values is set to nan. Else, it will be the distance from the last point.

Returns

w1, Idist – minimal distance from I1 to I2, for each point in (w1, I1)

Return type

array

curve_divide(w1, I1, w2, I2, is_sorted=False, kind='linear', interpolation=1)[source]

Divides curve (w1, I1) by (w2, I2) Linearly interpolates if the two ranges dont match. Fills out of bound parameters with nan.

Similar to OriginPro’s “Simple Curve Math Substract”

Note

for higher accuracy, choose (w2, I2) has the curve with the highest resolution

Parameters
• w1, I1 (array) – range and values for first curve

• w2, I2 (array) – range and values for 2nd curve

Other Parameters
• is_sorted (boolean) – (optional) if True, assumes that both input arrays are sorted already. Default False.

• kind (str) – interpolation kind. Default ‘linear’. See scipy.interpolate.interp1d

• interpolation (int, optional) – If 1, interpolate on w1, I1. Else, on w2, I2. Default 1

Returns

w1, Idiv – Division I1 / I2 interpolated on the first or second range according to reverseInterpolation

Return type

array

curve_multiply(w1, I1, w2, I2, is_sorted=False, kind='linear')[source]

Multiply curve (w2, I2) with (w1, I1) Linearly interpolates if the two ranges dont match. Fills out of bound parameters with nan.

Similar to OriginPro’s “Simple Curve Math Substract”

Note

for higher accuracy, choose (w2, I2) has the curve with the highest resolution

Parameters
• w1, I1 (array) – range and values for first curve

• w2, I2 (array) – range and values for 2nd curve

• is_sorted (boolean) – (optional) if True, doesnt sort input arrays

• kind (str) – interpolation kind. Default ‘linear’. See scipy.interpolate.interp1d

Returns

w1, Iproduct – product I1 * I2 interpolated on the first range w1

Return type

array

curve_substract(w1, I1, w2, I2, is_sorted=False, kind='linear')[source]

Substracts curve (w2, I2) from (w1, I1) Linearly interpolates if the two ranges dont match. Fills out of bound parameters with nan.

Similar to OriginPro’s “Simple Curve Math Substract”

Note

for higher accuracy, choose (w2, I2) has the curve with the highest resolution

Parameters
• w1, I1 (array) – range and values for first curve

• w2, I2 (array) – range and values for 2nd curve

• is_sorted (boolean) – (optional) if True, doesnt sort input arrays

• kind (str) – interpolation kind. Default ‘linear’. See scipy.interpolate.interp1d

Returns

w1, Idiff – difference I1 - I2 interpolated on the first range w1

Return type

array