def METHOD_NAME(self, bin_exists=False, save=False, save_paths=None, sync_collection='raw_sync_data', **kwargs):
    if save and save_paths:
        assert len(save_paths) == 3, 'Must provide save_path as list with 3 paths'
        for save_path in save_paths:
            Path(save_path).parent.mkdir(parents=True, exist_ok=True)
    # Load in fpga sync
    fpga_sync, chmap = get_sync_and_chn_map(self.session_path, sync_collection)
    fpga_led = get_sync_fronts(fpga_sync, chmap['frame_trigger'])
    fpga_led_up = fpga_led['times'][fpga_led['polarities'] == 1]  # only consider up pulse times
    # Load in camlog sync
    logdata, led, sync, ncomm = parse_cam_log(next(self.data_path.glob('*.camlog')), readTeensy=True)
    assert led.frame.is_monotonic_increasing
    if led.frame.size != fpga_led_up.size:
        _logger.warning(f'Sync mismatch by {np.abs(led.frame.size - fpga_led_up.size)} '
                        f'NIDQ sync times: {fpga_led_up.size}, LED frame times {led.frame.size}')
        raise ValueError('Sync mismatch')
    # Get video meta data to check number of widefield frames
    video_path = next(self.data_path.glob('imaging.frames*.mov'))
    video_meta = get_video_meta(video_path)
    # Check for differences between video and ttl (in some cases we expect there to be extra ttl than frame, this is okay)
    diff = len(led) - video_meta.length
    if diff < 0:
        raise ValueError('More video frames than led frames detected')
    if diff > 2:
        raise ValueError('Led frames and video frames differ by more than 2')
    # take the timestamps as those recorded on fpga, no need to do any sycning
    widefield_times = fpga_led_up[0:video_meta.length]
    # Now extract the LED channels and meta data
    # Load channel meta and wiring map
    channel_meta_map = self._channel_meta(kwargs.get('light_source_map'))
    channel_wiring = self._channel_wiring()
    channel_id = np.empty_like(led.led.values)
    for _, d in channel_wiring.iterrows():
        mask = led.led.values == d['LED']
        if np.sum(mask) == 0:
            raise err.WidefieldWiringException
        channel_id[mask] = channel_meta_map.get(channel_meta_map['wavelength'] == d['wavelength']).index[0]
    if save:
        save_time = save_paths[0] if save_paths else self.data_path.joinpath('timestamps.npy')
        save_led = save_paths[1] if save_paths else self.data_path.joinpath('led.npy')
        save_meta = save_paths[2] if save_paths else self.data_path.joinpath('led_properties.htsv')
        save_paths = [save_time, save_led, save_meta]
        np.save(save_time, widefield_times)
        np.save(save_led, channel_id)
        channel_meta_map.to_csv(save_meta, sep='\t')
        return save_paths
    else:
        return widefield_times, channel_id, channel_meta_map