"""Test integration of resampling with detect_from_wfm.""" import numpy as np import pytest from transivent import detect from transivent.resample import average_downsample, downsample_to_interval def test_detect_with_resampled_data(): """Test that detect works correctly with resampled data.""" # Create synthetic 20 MHz data with known events fs = 20e6 # 20 MHz sampling fs_target = 2e6 # 2 MHz target duration = 0.001 # 1 ms (smaller for faster test) t_orig = np.arange(int(duration * fs)) / fs x_orig = np.random.randn(len(t_orig)) * 0.01 # Noise # Add a few events event_times = [0.0002, 0.0005, 0.0008] for t_event in event_times: idx = int(t_event * fs) width = int(5e-4 * fs) # 500 µs event (longer for better detection) x_orig[idx:idx+width] -= 1.0 # Stronger negative spike # Resample data (downsample by factor of 10) t_down, x_down = average_downsample(t_orig, x_orig, q=10) # Lower noise after resampling noise_level = np.std(x_down[:1000]) # Using quiet portion print(f"Noise level: {noise_level:.4f}") # Detect on resampled data results = detect( t_down, x_down, sampling_interval=10 / fs, detection_snr=3.0, # Higher threshold min_event_keep_snr=5.0, smooth_win_t=100e-6, # Shorter smoothing for test data save_plots=False, ) # Check events were detected print(f"Found {len(results['events'])} events") assert len(results['events']) >= 1 # Check the time array is uniform dt = t_down[1] - t_down[0] assert np.allclose(np.diff(t_down), dt, rtol=1e-6) # Check the resampled time interval assert np.isclose(dt, 1/fs_target, rtol=1e-6) def test_resample_preserves_events(): """Test that resampling preserves event detection.""" # Create simple test case fs = 1e6 # 1 MHz t = np.arange(10000) / fs x = np.zeros(10000) # Add a clear event event_start = 2000 event_width = 100 x[event_start:event_start + event_width] = -1.0 # Resample by factor of 10 t_down, x_down = average_downsample(t, x, q=10) # Event should still be detectable after resampling # The negative area should be preserved (averaging) assert np.min(x_down) < -0.5 # Event should still be negative # Check the time array is proper assert len(t_down) == len(x_down) == 1000 assert np.allclose(t_down[1] - t_down[0], 10 * (t[1] - t[0])) if __name__ == "__main__": pytest.main([__file__, "-v"])