Exemple #1
0
def calculate_number(data, base, time_uncertainty=1e-6):
    """ returns the measured base flux * count time for each point """
    assert base.normbase == 'time', "can't calculate time-integrated flux from monitor-normalized base"
    S, varS = err1d.interp(data.angular_resolution,
                           base.angular_resolution, base.v, base.dv**2)
    F, varF = err1d.mul(data.monitor.count_time, time_uncertainty**2, S, varS)
    return F, varF
Exemple #2
0
def calculate_number(data, base, time_uncertainty=1e-6):
    """ returns the measured base flux * count time for each point """
    assert base.normbase == 'time', "can't calculate time-integrated flux from monitor-normalized base"
    S, varS = err1d.interp(data.angular_resolution, base.angular_resolution,
                           base.v, base.dv**2)
    F, varF = err1d.mul(data.monitor.count_time, time_uncertainty**2, S, varS)
    return F, varF
Exemple #3
0
def apply_intensity_norm(data, base):
    assert data.normbase == base.normbase, "can't mix time and monitor normalized data"

    if data.angular_resolution.ndim == 1:
        data_x, base_x = data.angular_resolution, base.angular_resolution
    else:
        data_x, base_x = data.slit1.x, base.slit1.x
    S, varS = err1d.interp(data_x, base_x, base.v, base.dv**2)
    # Candor may have only one detector bank active, and so the other may
    # have zeros in it.  Ignore those channels.
    I, varI = err1d.div(data.v, data.dv**2, S + (S == 0), varS)
    data.v, data.dv = I, np.sqrt(varI)
Exemple #4
0
def apply_smoothing(slits, dx, degree, span):
    assert span > degree, "Span must be greater than degree"
    s = np.hstack([[d.angular_resolution, d.slit1.x, d.slit2.x] for d in slits])
    s = find_common(s.T, dx=dx).T
    #import pylab;pylab.plot(np.arange(len(s[0])),s.T); pylab.show(); import sys; sys.exit()

    for d in slits:
        if span > 2:
            v, dv = smooth(s[0], d.angular_resolution, d.v, d.dv,
                           degree=degree, span=span)
        else:
            v, var = interp(s[0], d.angular_resolution, d.v, d.dv**2)
            dv = np.sqrt(var)
        d.slit1.x = s[1]
        d.slit2.x = s[2]
        d.v, d.dv = v, dv
Exemple #5
0
def saturation_correction(counts, time, saturation):
    # type: (np.ndarray, np.ndarray, np.ndarray) -> Tuple[np.ndarray, np.ndarray, np.ndarray]
    rate = counts / time
    # TODO: assert that saturation is sorted by the first value
    if saturation is None:
        C, varC = counts, counts
        mask = (rate >= 0.)
    elif saturation.shape[0] == 3:
        E, varE = err1d.interp(rate, saturation[0], saturation[1],
                               saturation[2]**2)
        C, varC = err1d.div(counts, counts, E, varE)
        mask = (rate <= saturation[0, -1])
    else:
        E = np.interp(rate, saturation[0], saturation[1])
        C, varC = counts/E, counts/E**2
        mask = (rate <= saturation[0, -1])

    return C, varC, mask
Exemple #6
0
def saturation_correction(counts, time, saturation):
    # type: (np.ndarray, np.ndarray, np.ndarray) -> Tuple[np.ndarray, np.ndarray, np.ndarray]
    rate = counts / time
    # TODO: assert that saturation is sorted by the first value
    if saturation is None:
        C, varC = counts, counts
        mask = (rate >= 0.)
    elif saturation.shape[0] == 3:
        E, varE = err1d.interp(rate, saturation[0], saturation[1],
                               saturation[2]**2)
        C, varC = err1d.div(counts, counts, E, varE)
        mask = (rate <= saturation[0, -1])
    else:
        E = np.interp(rate, saturation[0], saturation[1])
        C, varC = counts / E, counts / E**2
        mask = (rate <= saturation[0, -1])

    return C, varC, mask
Exemple #7
0
def apply_intensity_norm(data, base):
    assert data.normbase == base.normbase, "can't mix time and monitor normalized data"
    S, varS = err1d.interp(data.angular_resolution,
                           base.angular_resolution, base.v, base.dv**2)
    I, varI = err1d.div(data.v, data.dv**2, S, varS)
    data.v, data.dv = I, np.sqrt(varI)
Exemple #8
0
def apply_intensity_norm(data, base):
    assert data.normbase == base.normbase, "can't mix time and monitor normalized data"
    S, varS = err1d.interp(data.angular_resolution, base.angular_resolution,
                           base.v, base.dv**2)
    I, varI = err1d.div(data.v, data.dv**2, S, varS)
    data.v, data.dv = I, np.sqrt(varI)