def test_burst_search_and_gate(data_1ch): """Test consistency of burst search and gate.""" d = data_1ch assert d.alternated # Smoke tests bext.burst_search_and_gate(d, F=(6, 8)) bext.burst_search_and_gate(d, m=(12, 8)) bext.burst_search_and_gate(d, min_rate_cps=(60e3, 40e3)) if d.nch > 1: mr1 = 35e3 + np.arange(d.nch) * 1e3 mr2 = 30e3 + np.arange(d.nch) * 1e3 bext.burst_search_and_gate(d, min_rate_cps=(mr1, mr2)) # Consistency test d_dex = d.copy() d_dex.burst_search(ph_sel=Ph_sel(Dex='DAem')) d_aex = d.copy() d_aex.burst_search(ph_sel=Ph_sel(Aex='Aem')) d_and = bext.burst_search_and_gate(d) for bursts_dex, bursts_aex, bursts_and, ph in zip(d_dex.mburst, d_aex.mburst, d_and.mburst, d.iter_ph_times()): ph_b_mask_dex = bl.ph_in_bursts_mask(ph.size, bursts_dex) ph_b_mask_aex = bl.ph_in_bursts_mask(ph.size, bursts_aex) ph_b_mask_and = bl.ph_in_bursts_mask(ph.size, bursts_and) assert (ph_b_mask_and == ph_b_mask_dex * ph_b_mask_aex).all()
def test_burst_search_and_gate(data_1ch): """Test consistency of burst search and gate.""" d = data_1ch assert d.alternated # Smoke tests bext.burst_search_and_gate(d, F=(6, 8)) bext.burst_search_and_gate(d, m=(12, 8)) bext.burst_search_and_gate(d, min_rate_cps=(60e3, 40e3)) if d.nch > 1: mr1 = 35e3 + np.arange(d.nch) * 1e3 mr2 = 30e3 + np.arange(d.nch) * 1e3 bext.burst_search_and_gate(d, min_rate_cps=(mr1, mr2)) # Consistency test d_dex = d.copy() d_dex.burst_search(ph_sel=Ph_sel(Dex='DAem')) d_aex = d.copy() d_aex.burst_search(ph_sel=Ph_sel(Aex='Aem')) d_and = bext.burst_search_and_gate(d) for bursts_dex, bursts_aex, bursts_and, ph in zip( d_dex.mburst, d_aex.mburst, d_and.mburst, d.iter_ph_times()): ph_b_mask_dex = bl.ph_in_bursts_mask(ph.size, bursts_dex) ph_b_mask_aex = bl.ph_in_bursts_mask(ph.size, bursts_aex) ph_b_mask_and = bl.ph_in_bursts_mask(ph.size, bursts_and) assert (ph_b_mask_and == ph_b_mask_dex * ph_b_mask_aex).all()
def test_burst_search_and_gate(data_1ch): """Test consistency of burst search and gate.""" d = data_1ch assert d.ALEX d_dex = d.copy() d_dex.burst_search(ph_sel=Ph_sel(Dex='DAem')) d_aex = d.copy() d_aex.burst_search(ph_sel=Ph_sel(Aex='Aem')) d_and = bext.burst_search_and_gate(d) for bursts_dex, bursts_aex, bursts_and, ph in zip( d_dex.mburst, d_aex.mburst, d_and.mburst, d.iter_ph_times()): ph_b_mask_dex = bl.ph_in_bursts_mask(ph.size, bursts_dex) ph_b_mask_aex = bl.ph_in_bursts_mask(ph.size, bursts_aex) ph_b_mask_and = bl.ph_in_bursts_mask(ph.size, bursts_and) assert (ph_b_mask_and == ph_b_mask_dex * ph_b_mask_aex).all()
def test_burst_fuse_0ms(data): """Test that after fusing with ms=0 the sum of bursts sizes is that same as the number of ph in bursts (via burst selection). """ d = data df = d.fuse_bursts(ms=0) for ich, bursts in enumerate(df.mburst): mask = bl.ph_in_bursts_mask(df.ph_data_sizes[ich], bursts) assert mask.sum() == bursts.counts.sum()
def test_burst_fuse_0ms(data): """Test that after fusing with ms=0 the sum of bursts sizes is that same as the number of ph in bursts (via burst selection). """ d = data if d.nch == 8: d.burst_search(L=10, m=10, F=7, computefret=False) d.mburst[1] = bl.bslib.Bursts.empty() # Make one channel with no bursts d._calc_burst_period() d.calc_fret(count_ph=True) df = d.fuse_bursts(ms=0) for ich, bursts in enumerate(df.mburst): mask = bl.ph_in_bursts_mask(df.ph_data_sizes[ich], bursts) assert mask.sum() == bursts.counts.sum() df.calc_fret(count_ph=True) assert len(df.mburst) == len(d.mburst) assert len(df.mburst) == d.nch
def test_burst_fuse_0ms(data): """Test that after fusing with ms=0 the sum of bursts sizes is that same as the number of ph in bursts (via burst selection). """ d = data if d.nch == 8: d.burst_search(L=10, m=10, F=7, computefret=False) d.mburst[1] = bl.bslib.Bursts.empty( ) # Make one channel with no bursts d._calc_burst_period() d.calc_fret(count_ph=True) df = d.fuse_bursts(ms=0) for ich, bursts in enumerate(df.mburst): mask = bl.ph_in_bursts_mask(df.ph_data_sizes[ich], bursts) assert mask.sum() == bursts.counts.sum() df.calc_fret(count_ph=True) assert len(df.mburst) == len(d.mburst) assert len(df.mburst) == d.nch
def test_burst_ph_data_functions(data): """Tests the functions that iterate or operate on per-burst "ph-data". """ d = data for bursts, ph, mask in zip(d.mburst, d.iter_ph_times(), d.iter_ph_masks(Ph_sel(Dex='Dem'))): bstart = bursts.start bend = bursts.stop for i, (start, stop) in enumerate(bl.iter_bursts_start_stop(bursts)): assert ph[start] == bstart[i] assert ph[stop-1] == bend[i] for i, burst_ph in enumerate(bl.iter_bursts_ph(ph, bursts)): assert burst_ph[0] == bstart[i] assert burst_ph[-1] == bend[i] for i, burst_ph in enumerate(bl.iter_bursts_ph(ph, bursts, mask=mask)): if burst_ph.size > 0: assert burst_ph[0] >= bstart[i] assert burst_ph[-1] <= bend[i] stats = bl.burst_ph_stats(ph, bursts, mask=mask) assert (stats[~np.isnan(stats)] >= bstart[~np.isnan(stats)]).all() assert (stats[~np.isnan(stats)] <= bend[~np.isnan(stats)]).all() bistart = bursts.istart biend = bursts.istop bursts_mask = bl.ph_in_bursts_mask(ph.size, bursts) for i, (start, stop) in enumerate(bl.iter_bursts_start_stop(bursts)): assert bursts_mask[start:stop].all() if start > 0: if i > 0 and biend[i-1] < bistart[i] - 1: assert not bursts_mask[start - 1] if stop < ph.size: if i < bistart.size-1 and bistart[i+1] > biend[i] + 1: assert not bursts_mask[stop]
def test_burst_ph_data_functions(data): """Tests the functions that iterate or operate on per-burst "ph-data". """ d = data for bursts, ph, mask in zip(d.mburst, d.iter_ph_times(), d.iter_ph_masks(Ph_sel(Dex='Dem'))): bstart = bursts.start bend = bursts.stop for i, (start, stop) in enumerate(bl.iter_bursts_start_stop(bursts)): assert ph[start] == bstart[i] assert ph[stop - 1] == bend[i] for i, burst_ph in enumerate(bl.iter_bursts_ph(ph, bursts)): assert burst_ph[0] == bstart[i] assert burst_ph[-1] == bend[i] for i, burst_ph in enumerate(bl.iter_bursts_ph(ph, bursts, mask=mask)): if burst_ph.size > 0: assert burst_ph[0] >= bstart[i] assert burst_ph[-1] <= bend[i] stats = bl.burst_ph_stats(ph, bursts, mask=mask) assert (stats[~np.isnan(stats)] >= bstart[~np.isnan(stats)]).all() assert (stats[~np.isnan(stats)] <= bend[~np.isnan(stats)]).all() bistart = bursts.istart biend = bursts.istop bursts_mask = bl.ph_in_bursts_mask(ph.size, bursts) for i, (start, stop) in enumerate(bl.iter_bursts_start_stop(bursts)): assert bursts_mask[start:stop].all() if start > 0: if i > 0 and biend[i - 1] < bistart[i] - 1: assert not bursts_mask[start - 1] if stop < ph.size: if i < bistart.size - 1 and bistart[i + 1] > biend[i] + 1: assert not bursts_mask[stop]