コード例 #1
0
ファイル: test_photocurrent.py プロジェクト: edmundsj/xsugar
def test_modulated_photocurrent():
    data_length = 1000
    sampling_frequency = 1 * ureg.kHz
    signal_frequency = 0.1 * ureg.kHz
    sampling_period = (1 / sampling_frequency).to(ureg.s)
    gain = 1.5 * ureg.Mohm
    cond = {'gain': gain, 'sampling_frequency': 1 * ureg.kHz}

    number_periods = int(
        np.floor(data_length / (sampling_frequency / signal_frequency)))
    number_sync_points = number_periods
    indices = np.arange(0, number_sync_points, 1)
    sync_indices = (1 / 2 * sampling_frequency / signal_frequency *
                    (1 + 2 * indices)).astype(np.int).magnitude
    zero_column = np.zeros(data_length, dtype=np.int)
    zero_column[sync_indices] = 1

    times = np.arange(0, data_length, 1) * sampling_period
    voltages = 0.5 * ureg.mV * np.sin(2 * np.pi * signal_frequency * times)
    data = pd.DataFrame({
        'time (ms)': times.to(ureg.ms).magnitude,
        'voltage (mV)': voltages.to(ureg.mV).magnitude,
        'Sync': zero_column
    })
    desired_data = (0.5 * ureg.mV / gain).to(ureg.pA)
    actual_data = modulated_photocurrent(data, cond)
    assert_allclose_qt(actual_data, desired_data)
コード例 #2
0
ファイル: test_photocurrent.py プロジェクト: edmundsj/xsugar
def test_noise_current():
    data_length = 10000
    sampling_frequency = 10 * ureg.kHz
    nyquist_frequency = sampling_frequency / 2
    sampling_period = (1 / sampling_frequency).to(ureg.s)
    noise_voltage = np.random.normal(size=data_length) * ureg.uV
    filter_cutoff = 200 * ureg.Hz
    times = np.arange(0, data_length, 1) * sampling_period
    data = pd.DataFrame({
        'Time (ms)': times.to(ureg.ms).magnitude,
        'voltage (uV)': noise_voltage.to(ureg.uV).magnitude,
    })
    gain = 1.0 * ureg.Mohm
    cond = {'gain': gain, 'filter_cutoff': filter_cutoff}
    filter_correction_factor = (nyquist_frequency - filter_cutoff) / \
                               nyquist_frequency
    desired_noise_current_psd = \
         np.square(noise_voltage.std() / gain) / nyquist_frequency
    desired_noise_current_psd = desired_noise_current_psd.to(ureg.A**2 /
                                                             ureg.Hz)
    actual_noise_current_psd = noise_current(data, cond)
    assert_allclose_qt(actual_noise_current_psd,
                       desired_noise_current_psd,
                       atol=1e-31,
                       rtol=5e-2)
コード例 #3
0
ファイル: test_pandas.py プロジェクト: edmundsj/liapy
def test_with_large_dc():
    test_data = pd.DataFrame({
        'time (ms)': [1, 2, 3, 4, 5, 6],
        'val (V)': 10000 + np.array([1, 0, -1, 0, 1, 0]),
        'Sync': [1, 0, 0, 0, 1, 0]
    })
    lia = LIA(test_data)
    desired_amplitude = 1 * ureg.V / np.sqrt(2)
    actual_amplitude = lia.extract_signal_amplitude(sync_phase_delay=np.pi / 2)
    assert_allclose_qt(actual_amplitude, desired_amplitude, atol=1e-6)
コード例 #4
0
ファイル: test_pandas.py プロジェクト: edmundsj/liapy
def test_extract_minus_pi_2_offset():
    test_data = pd.DataFrame({
        'time (ms)': [1, 2, 3, 4, 5, 6, 7],
        'val (V)': [1, 0, -1, 0, 1, 0, -1],
        'Sync': [1, 0, 0, 0, 1, 0, 0]
    })
    lia = LIA(test_data)
    desired_amplitude = 1 * ureg.V / np.sqrt(2)
    actual_amplitude = lia.extract_signal_amplitude(sync_phase_delay=np.pi / 2)
    assert_allclose_qt(actual_amplitude, desired_amplitude, atol=1e-6)
コード例 #5
0
ファイル: test_pandas.py プロジェクト: edmundsj/liapy
def test_extract_zero_with_offset():
    test_data = pd.DataFrame({
        'time (ms)': [0, 1, 2, 3, 4, 5, 6, 7],
        'val (V)': [1, 1, 1, 1, 1, 1, 1, 1],
        'Sync': [0, 0, 1, 0, 0, 0, 1, 0]
    })
    lia = LIA(test_data)
    desired_amplitude = 0 * ureg.V
    actual_amplitude = lia.extract_signal_amplitude(sync_phase_delay=np.pi)
    assert_allclose_qt(actual_amplitude, desired_amplitude, atol=1e-6)
コード例 #6
0
ファイル: test_photocurrent.py プロジェクト: edmundsj/xsugar
def test_dc_photocurrent():
    gain = 10 * ureg.Mohm
    input_data = pd.DataFrame({
        'time (ms)': [0, 0.01, 0.02],
        'voltage (uV)': [0.1, 0.2, 0.3]
    })
    desired_photocurrent = 2e-5 * ureg.nA
    cond = {'gain': gain}
    actual_photocurrent = dc_photocurrent(input_data, cond)
    assert_allclose_qt(actual_photocurrent, desired_photocurrent)
コード例 #7
0
def test_extract_power_noiseless_data_third_harmonic(real_data):
    """
    """
    desired_power = 5e-19 * 1e-12 * (ureg.A**2)
    frequency = 3 * 100 * ureg.Hz
    actual_power = extract_power(real_data,
                                 frequency,
                                 siding='double',
                                 window='hann')
    assert_allclose_qt(actual_power, desired_power, atol=1e-32, rtol=1e-3)
コード例 #8
0
def test_extract_power_double_sided_sinewave():
    """
    """
    data = pd.DataFrame({'Time (s)': [0, 1, 2, 3], 'Value (A)': [0, 1, 0, -1]})
    desired_power = 0.5 * ureg.A**2
    frequency = 0.25 * ureg.Hz
    actual_power = extract_power(data,
                                 frequency,
                                 siding='double',
                                 window='boxcar')
    assert_allclose_qt(actual_power, desired_power)
コード例 #9
0
def test_extract_power_double_sided_with_leak_hann():
    """
    """
    data = pd.DataFrame({
        'Time (s)': [0, 1, 2, 3, 4],
        'Value (A)': [1, -1, 1, -1, 1]
    })
    desired_power = 1 * ureg.A**2
    frequency = 0.5 * ureg.Hz
    actual_power = extract_power(data,
                                 frequency,
                                 siding='double',
                                 window='hann')
    assert_allclose_qt(actual_power, desired_power)
コード例 #10
0
def test_extract_power_double_sided_no_leak_diff_units():
    """
    """
    data = pd.DataFrame({
        'Time (ms)': [0, 1, 2, 3],
        'Value (A)': [1, -1, 1, -1]
    })
    desired_power = 1 * ureg.A**2
    frequency = 0.5 * ureg.kHz
    actual_power = extract_power(data,
                                 frequency,
                                 siding='double',
                                 window='boxcar')
    assert_allclose_qt(actual_power, desired_power)
コード例 #11
0
ファイル: test_pandas.py プロジェクト: edmundsj/liapy
def test_extract_amplitude_complex(data1):
    actual_amplitude = data1['lia'].extract_signal_amplitude(
        sync_phase_delay=data1['sync_phase_delay'])
    desired_amplitude = 1 * ureg.V
    assert_allclose_qt(actual_amplitude, desired_amplitude)