def test_data_scanner_return_all_data_with_None_date__successfully(self): data_scanner = DataScanner( data_path=path + '/res/scanner_test/', animal_name='alien', nwb_metadata=MetadataManager(metadata_path=str(path) + '/res/metadata.yml', probes_paths=[ str(path) + '/res/probe1.yml', str(path) + '/res/probe2.yml', str(path) + '/res/probe3.yml' ])) data_scanner.extract_data_from_all_dates_folders() self.assertEqual( len(data_scanner.data['alien']['21251015'] ['01_s1'].get_all_data_from_dataset('pos')), 3) self.assertEqual( len(data_scanner.data['alien']['21251015'] ['01_s1'].get_all_data_from_dataset('DIO')), 7) self.assertEqual( len(data_scanner.data['alien']['21251015'] ['01_s1'].get_all_data_from_dataset('LFP')), 4) self.assertEqual( len(data_scanner.data['alien']['21251015'] ['01_s1'].get_all_data_from_dataset('mda')), 4) self.assertEqual( len(data_scanner.data['alien']['21251015'] ['01_s1'].get_all_data_from_dataset('metadata')), 1) self.assertEqual( len(data_scanner.data['alien']['21251015'] ['01_s1'].get_all_data_from_dataset('spikes')), 3) self.assertEqual( len(data_scanner.data['alien']['21251015'] ['01_s1'].get_all_data_from_dataset('time')), 2)
def test_data_scanner_find_all_data_with_None_date_param_successfully( self): data_scanner = DataScanner( data_path=path + '/res/scanner_test/', animal_name='alien', nwb_metadata=MetadataManager(metadata_path=str(path) + '/res/metadata.yml', probes_paths=[ str(path) + '/res/probe1.yml', str(path) + '/res/probe2.yml', str(path) + '/res/probe3.yml' ])) data_scanner.extract_data_from_all_dates_folders() self.assertEqual(( path + '/res/scanner_test/alien/preprocessing/21251015/21251015_alien_01_s1.1.pos/' ), data_scanner.data['alien']['21251015'] ['01_s1'].get_data_path_from_dataset('pos')) self.assertEqual(( path + '/res/scanner_test/alien/preprocessing/21251015/21251015_alien_01_s1.DIO/' ), data_scanner.data['alien']['21251015'] ['01_s1'].get_data_path_from_dataset('DIO')) self.assertEqual(( path + '/res/scanner_test/alien/preprocessing/21251015/21251015_alien_01_s1.LFP/' ), data_scanner.data['alien']['21251015'] ['01_s1'].get_data_path_from_dataset('LFP')) self.assertEqual(( path + '/res/scanner_test/alien/preprocessing/21251015/21251015_alien_01_s1.mda/' ), data_scanner.data['alien']['21251015'] ['01_s1'].get_data_path_from_dataset('mda')) self.assertEqual(( path + '/res/scanner_test/alien/preprocessing/21251015/21251015_alien_01_s1.metadata/' ), data_scanner.data['alien']['21251015'] ['01_s1'].get_data_path_from_dataset('metadata')) self.assertEqual(( path + '/res/scanner_test/alien/preprocessing/21251015/21251015_alien_01_s1.spikes/' ), data_scanner.data['alien']['21251015'] ['01_s1'].get_data_path_from_dataset('spikes')) self.assertEqual(( path + '/res/scanner_test/alien/preprocessing/21251015/21251015_alien_01_s1.time/' ), data_scanner.data['alien']['21251015'] ['01_s1'].get_data_path_from_dataset('time'))
def test_data_scanner_find_all_datasets_with_None_date_param_successfully( self): data_scanner = DataScanner( data_path=path + '/res/scanner_test/', animal_name='alien', nwb_metadata=MetadataManager(metadata_path=str(path) + '/res/metadata.yml', probes_paths=[ str(path) + '/res/probe1.yml', str(path) + '/res/probe2.yml', str(path) + '/res/probe3.yml' ])) data_scanner.extract_data_from_all_dates_folders() self.assertEqual(len(data_scanner.data.values()), 1) self.assertEqual(len(data_scanner.data['alien'].values()), 1) self.assertEqual(len(data_scanner.data['alien']['21251015'].values()), 2)
def test_data_scanner_failed_due_to_None_parameter(self): DataScanner(data_path=None, animal_name='alien', nwb_metadata=MetadataManager( metadata_path=str(path) + '/res/metadata.yml', probes_paths=[ str(path) + '/res/probe1.yml', str(path) + '/res/probe2.yml', str(path) + '/res/probe3.yml' ]))
def test_data_scanner_find_all_probes_file_with_None_date_param_successfully( self): data_scanner = DataScanner( data_path=path + '/res/scanner_test/', animal_name='alien', nwb_metadata=MetadataManager(metadata_path=str(path) + '/res/metadata.yml', probes_paths=[ str(path) + '/res/probe1.yml', str(path) + '/res/probe2.yml', str(path) + '/res/probe3.yml' ])) probe_path = path + '/res/probe_test' probes = data_scanner.get_probes_from_directory(probe_path) probes.sort() self.assertTrue(probes[0].endswith('probe1.yml')) self.assertTrue(probes[1].endswith('probe2.yml')) self.assertTrue(probes[2].endswith('probe21.yml'))
for dataset in dataset_names ] if __name__ == "__main__": animal_name = 'beans' date = '20190718' data_path = 'C:/Users/wbodo/Desktop/resy/test/' # data_path = str(path) + '/test/test_data/' nwb_metadata = MetadataManager( str(path) + '/test/processing/res/metadata.yml', [ str(path) + '/test/processing/res/probe1.yml', str(path) + '/test/processing/res/probe2.yml', str(path) + '/test/processing/res/probe3.yml' ]) data_scanner = DataScanner(data_path, animal_name, nwb_metadata) datasets = extract_datasets(data_scanner, animal_name, date) pos_timestamps_files = [ get_posonline_data_file(dataset) for dataset in datasets ] mda_timestamps_files = [ dataset.get_mda_timestamps() for dataset in datasets ] continuous_time_files = [ dataset.get_continuous_time() for dataset in datasets ] timestamps = [ read_pos_timestamps(timestamps_file) for timestamps_file in pos_timestamps_files
def __init__(self, data_path: str, animal_name: str, date: str, nwb_metadata: MetadataManager, process_dio: bool = True, process_mda: bool = True, process_analog: bool = True, process_pos_timestamps: bool = True, video_path: str = '', output_file: str = 'output.nwb', reconfig_header: str = ''): logger.info('NWBFileBuilder initialization') logger.info('NWB builder initialization parameters: \n' + 'data_path = ' + str(data_path) + '\n' + 'animal_name = ' + str(animal_name) + '\n' + 'date = ' + str(date) + '\n' + 'nwb_metadata = ' + str(nwb_metadata) + '\n' + 'process_dio = ' + str(process_dio) + '\n' + 'process_mda = ' + str(process_mda) + '\n' + 'process_analog = ' + str(process_analog) + '\n' + 'output_file = ' + str(output_file) + '\n') validation_registrator = ValidationRegistrator() validation_registrator.register(PathValidator(data_path)) validation_registrator.validate() self.animal_name = animal_name self.date = date self.data_path = data_path self.metadata = nwb_metadata.metadata metadata_section_validator = MetadataSectionValidator(self.metadata) metadata_section_validator.validate_sections() if self.metadata.get('associated_files', []): associated_files_existance_validator = AssociatedFilesExistanceValidator( self.metadata['associated_files']) if associated_files_existance_validator.files_exist(): pass else: raise Exception( "one or more associated file listed in metadata.yaml file does not exist" ) self.probes = nwb_metadata.probes self.process_dio = process_dio self.process_mda = process_mda self.process_analog = process_analog self.process_pos_timestamps = process_pos_timestamps self.output_file = output_file self.video_path = video_path self.link_to_notes = self.metadata.get('link to notes', None) data_types_for_scanning = { 'pos': True, 'time': True, 'mda': process_mda, 'DIO': process_dio, 'analog': process_analog } rec_files_list = RecFileFinder().find_rec_files( path=(self.data_path + '/' + self.animal_name + '/raw/' + self.date)) header_file = HeaderProcessor.process_headers(rec_files_list) if reconfig_header: self.header = Header(reconfig_header) else: self.header = Header(header_file) self.data_scanner = DataScanner(data_path, animal_name, nwb_metadata) self.dataset_names = self.data_scanner.get_all_epochs(date) full_data_path = data_path + '/' + animal_name + '/preprocessing/' + date validation_registrator = ValidationRegistrator() validation_registrator.register( NTrodeValidator(self.metadata, self.header, self.probes)) validation_registrator.register( PreprocessingValidator(full_data_path, self.dataset_names, data_types_for_scanning)) validation_registrator.register(TaskValidator(self.metadata['tasks'])) validation_registrator.validate() self.__extract_datasets(animal_name, date) self.corrupted_data_manager = CorruptedDataManager(self.metadata) self.shanks_electrode_originator = ShanksElectrodeOriginator( self.probes, self.metadata) self.shanks_originator = ShanksOriginator(self.probes, self.metadata) self.fl_probe_manager = FlProbeManager(self.probes) self.device_injector = DeviceInjector() self.device_factory = DeviceFactory() self.electrode_group_originator = ElectrodeGroupOriginator( self.metadata) self.electrodes_originator = ElectrodesOriginator( self.probes, self.metadata) self.session_time_extractor = SessionTimeExtractor( self.datasets, self.animal_name, self.date, self.dataset_names) self.mda_valid_time_originator = MdaValidTimeOriginator( self.header, self.metadata) self.mda_invalid_time_originator = MdaInvalidTimeOriginator( self.header, self.metadata) self.pos_valid_time_originator = PosValidTimeOriginator(self.metadata) self.pos_invalid_time_originator = PosInvalidTimeOriginator( self.metadata) self.epochs_originator = EpochsOriginator(self.datasets) if 'associated_files' in self.metadata: self.associated_files_originator = AssociatedFilesOriginator( self.metadata) self.electrodes_extension_originator = ElectrodesExtensionOriginator( self.probes, self.metadata, self.header) self.sample_count_timestamp_corespondence_originator =\ SampleCountTimestampCorespondenceOriginator(self.datasets) self.processing_module_originator = ProcessingModuleOriginator() self.task_originator = TaskOriginator(self.metadata) self.camera_device_originator = CameraDeviceOriginator(self.metadata) self.header_device_originator = HeaderDeviceOriginator( self.header, self.metadata) self.probes_originator = ProbeOriginator(self.device_factory, self.device_injector, self.probes) self.camera_sample_frame_counts_originator = CameraSampleFrameCountsOriginator( self.data_path + "/" + animal_name + "/raw/" + self.date + "/") self.video_files_originator = VideoFilesOriginator( self.data_path + "/" + animal_name + "/raw/" + self.date + "/", self.video_path, self.metadata["associated_video_files"], ) self.data_acq_device_originator = DataAcqDeviceOriginator( device_factory=self.device_factory, device_injector=self.device_injector, metadata=self.metadata['data acq device']) if self.process_mda: self.mda_originator = MdaOriginator(self.datasets, self.header, self.metadata) if self.process_dio: self.dio_originator = DioOriginator(self.metadata, self.datasets) if self.process_analog: self.analog_originator = AnalogOriginator(self.datasets, self.metadata) self.position_originator = PositionOriginator( self.datasets, self.metadata, self.dataset_names, self.process_pos_timestamps)
class NWBFileBuilder: """Unpack data from preprocessing folder specified by arguments, and write those data into NWB file format Args: data_path (string): path to directory containing all experiments data animal_name (string): directory name which represents animal subject of experiment date (string): date of experiment nwb_metadata (MetadataManager): object contains metadata about experiment process_dio (boolean): flag if dio data should be processed process_mda (boolean): flag if mda data should be processed process_analog (boolean): flag if analog data should be processed video_path (string): path to directory with video files associated to nwb file output_file (string): path and name specifying where .nwb file gonna be written Methods: build() write() build_and_append_to_nwb() """ @beartype def __init__(self, data_path: str, animal_name: str, date: str, nwb_metadata: MetadataManager, process_dio: bool = True, process_mda: bool = True, process_analog: bool = True, process_pos_timestamps: bool = True, video_path: str = '', output_file: str = 'output.nwb', reconfig_header: str = ''): logger.info('NWBFileBuilder initialization') logger.info('NWB builder initialization parameters: \n' + 'data_path = ' + str(data_path) + '\n' + 'animal_name = ' + str(animal_name) + '\n' + 'date = ' + str(date) + '\n' + 'nwb_metadata = ' + str(nwb_metadata) + '\n' + 'process_dio = ' + str(process_dio) + '\n' + 'process_mda = ' + str(process_mda) + '\n' + 'process_analog = ' + str(process_analog) + '\n' + 'output_file = ' + str(output_file) + '\n') validation_registrator = ValidationRegistrator() validation_registrator.register(PathValidator(data_path)) validation_registrator.validate() self.animal_name = animal_name self.date = date self.data_path = data_path self.metadata = nwb_metadata.metadata metadata_section_validator = MetadataSectionValidator(self.metadata) metadata_section_validator.validate_sections() if self.metadata.get('associated_files', []): associated_files_existance_validator = AssociatedFilesExistanceValidator( self.metadata['associated_files']) if associated_files_existance_validator.files_exist(): pass else: raise Exception( "one or more associated file listed in metadata.yaml file does not exist" ) self.probes = nwb_metadata.probes self.process_dio = process_dio self.process_mda = process_mda self.process_analog = process_analog self.process_pos_timestamps = process_pos_timestamps self.output_file = output_file self.video_path = video_path self.link_to_notes = self.metadata.get('link to notes', None) data_types_for_scanning = { 'pos': True, 'time': True, 'mda': process_mda, 'DIO': process_dio, 'analog': process_analog } rec_files_list = RecFileFinder().find_rec_files( path=(self.data_path + '/' + self.animal_name + '/raw/' + self.date)) header_file = HeaderProcessor.process_headers(rec_files_list) if reconfig_header: self.header = Header(reconfig_header) else: self.header = Header(header_file) self.data_scanner = DataScanner(data_path, animal_name, nwb_metadata) self.dataset_names = self.data_scanner.get_all_epochs(date) full_data_path = data_path + '/' + animal_name + '/preprocessing/' + date validation_registrator = ValidationRegistrator() validation_registrator.register( NTrodeValidator(self.metadata, self.header, self.probes)) validation_registrator.register( PreprocessingValidator(full_data_path, self.dataset_names, data_types_for_scanning)) validation_registrator.register(TaskValidator(self.metadata['tasks'])) validation_registrator.validate() self.__extract_datasets(animal_name, date) self.corrupted_data_manager = CorruptedDataManager(self.metadata) self.shanks_electrode_originator = ShanksElectrodeOriginator( self.probes, self.metadata) self.shanks_originator = ShanksOriginator(self.probes, self.metadata) self.fl_probe_manager = FlProbeManager(self.probes) self.device_injector = DeviceInjector() self.device_factory = DeviceFactory() self.electrode_group_originator = ElectrodeGroupOriginator( self.metadata) self.electrodes_originator = ElectrodesOriginator( self.probes, self.metadata) self.session_time_extractor = SessionTimeExtractor( self.datasets, self.animal_name, self.date, self.dataset_names) self.mda_valid_time_originator = MdaValidTimeOriginator( self.header, self.metadata) self.mda_invalid_time_originator = MdaInvalidTimeOriginator( self.header, self.metadata) self.pos_valid_time_originator = PosValidTimeOriginator(self.metadata) self.pos_invalid_time_originator = PosInvalidTimeOriginator( self.metadata) self.epochs_originator = EpochsOriginator(self.datasets) if 'associated_files' in self.metadata: self.associated_files_originator = AssociatedFilesOriginator( self.metadata) self.electrodes_extension_originator = ElectrodesExtensionOriginator( self.probes, self.metadata, self.header) self.sample_count_timestamp_corespondence_originator =\ SampleCountTimestampCorespondenceOriginator(self.datasets) self.processing_module_originator = ProcessingModuleOriginator() self.task_originator = TaskOriginator(self.metadata) self.camera_device_originator = CameraDeviceOriginator(self.metadata) self.header_device_originator = HeaderDeviceOriginator( self.header, self.metadata) self.probes_originator = ProbeOriginator(self.device_factory, self.device_injector, self.probes) self.camera_sample_frame_counts_originator = CameraSampleFrameCountsOriginator( self.data_path + "/" + animal_name + "/raw/" + self.date + "/") self.video_files_originator = VideoFilesOriginator( self.data_path + "/" + animal_name + "/raw/" + self.date + "/", self.video_path, self.metadata["associated_video_files"], ) self.data_acq_device_originator = DataAcqDeviceOriginator( device_factory=self.device_factory, device_injector=self.device_injector, metadata=self.metadata['data acq device']) if self.process_mda: self.mda_originator = MdaOriginator(self.datasets, self.header, self.metadata) if self.process_dio: self.dio_originator = DioOriginator(self.metadata, self.datasets) if self.process_analog: self.analog_originator = AnalogOriginator(self.datasets, self.metadata) self.position_originator = PositionOriginator( self.datasets, self.metadata, self.dataset_names, self.process_pos_timestamps) def __extract_datasets(self, animal_name, date): self.data_scanner.extract_data_from_date_folder(date) self.datasets = [ self.data_scanner.data[animal_name][date][dataset] for dataset in self.dataset_names ] def build(self): """Build NWBFile Returns: NWBFile: Return NWBFile content """ logger.info('Building components for NWB') nwb_content = NWBFile( session_description=self.metadata['session description'], experimenter=self.metadata['experimenter name'], lab=self.metadata['lab'], institution=self.metadata['institution'], session_start_time=self.session_time_extractor. get_session_start_time(), timestamps_reference_time=datetime.fromtimestamp(0, pytz.utc), identifier=str(uuid.uuid1()), session_id=self.metadata['session_id'], notes=self.link_to_notes, experiment_description=self.metadata['experiment description'], subject=Subject( description=self.metadata['subject']['description'], genotype=self.metadata['subject']['genotype'], sex=self.metadata['subject']['sex'], species=self.metadata['subject']['species'], subject_id=self.metadata['subject']['subject id'], weight=str(self.metadata['subject']['weight']), ), ) self.processing_module_originator.make(nwb_content) if 'associated_files' in self.metadata: self.associated_files_originator.make(nwb_content) self.position_originator.make(nwb_content) valid_map_dict = self.__build_corrupted_data_manager() shanks_electrodes_dict = self.shanks_electrode_originator.make() shanks_dict = self.shanks_originator.make(shanks_electrodes_dict) probes = self.probes_originator.make(nwb_content, shanks_dict, valid_map_dict['probes']) self.data_acq_device_originator.make(nwb_content) self.header_device_originator.make(nwb_content) self.camera_device_originator.make(nwb_content) self.video_files_originator.make(nwb_content) electrode_groups = self.electrode_group_originator.make( nwb_content, probes, valid_map_dict['electrode_groups']) self.electrodes_originator.make(nwb_content, electrode_groups, valid_map_dict['electrodes'], valid_map_dict['electrode_groups']) self.electrodes_extension_originator.make(nwb_content, valid_map_dict['electrodes']) self.epochs_originator.make(nwb_content) self.sample_count_timestamp_corespondence_originator.make(nwb_content) self.task_originator.make(nwb_content) self.camera_sample_frame_counts_originator.make(nwb_content) if self.process_dio: self.dio_originator.make(nwb_content) if self.process_mda: self.mda_originator.make(nwb_content) if self.process_analog: self.analog_originator.make(nwb_content) return nwb_content def write(self, content): """Write nwb file handler with colected data into actual file""" logger.info('Writing down content to ' + self.output_file) with NWBHDF5IO(path=self.output_file, mode='w') as nwb_fileIO: nwb_fileIO.write(content) nwb_fileIO.close() logger.info(self.output_file + ' file has been created.') return self.output_file def __build_corrupted_data_manager(self): logger.info('CorruptedData: Checking') return self.corrupted_data_manager.get_valid_map_dict() def build_and_append_to_nwb(self, process_mda_valid_time=True, process_mda_invalid_time=True, process_pos_valid_time=True, process_pos_invalid_time=True): """Create and append to existing nwb. Set flag to add it to nwb Args: process_mda_valid_time (boolean): True if the mda valid times should be build and append to nwb. Need the mda data inside the nwb. (default True) process_mda_invalid_time (boolean): True if the mda invalid times should be build and append to nwb. Need the mda data inside the nwb. (default True) process_pos_valid_time (boolean): True if the pos valid times should be build and append to nwb. Need the pos data inside the nwb. (default True) process_pos_invalid_time (boolean): True if the pos invalid times should be build and append to nwb. Need the pos data inside the nwb. (default True) Raises: ElementExistException: If element already exist in NWB Returns: NWBFile: Return NWBFile content """ with NWBHDF5IO(path=self.output_file, mode='a') as nwb_file_io: nwb_content = nwb_file_io.read() if self.process_pos_timestamps: if process_pos_valid_time: self.pos_valid_time_originator.make(nwb_content) if process_pos_invalid_time: self.pos_invalid_time_originator.make(nwb_content) if process_mda_valid_time: self.mda_valid_time_originator.make(nwb_content) if process_mda_invalid_time: self.mda_invalid_time_originator.make(nwb_content) nwb_file_io.write(nwb_content)
def __init__( self, data_path: str, animal_name: str, date: str, nwb_metadata: MetadataManager, process_dio: bool = True, process_mda: bool = True, process_analog: bool = True, process_pos_timestamps: bool = True, preprocessing_path: str = '', video_path: str = '', output_file: str = 'output.nwb', reconfig_header: str = '', is_old_dataset: bool = False, session_start_time=None, ): logger.info('NWBFileBuilder initialization') logger.info( 'NWB builder initialization parameters: \n' + 'data_path = ' + str(data_path) + '\n' + 'animal_name = ' + str(animal_name) + '\n' + 'date = ' + str(date) + '\n' + 'nwb_metadata = ' + str(nwb_metadata) + '\n' + 'process_dio = ' + str(process_dio) + '\n' + 'process_mda = ' + str(process_mda) + '\n' + 'process_analog = ' + str(process_analog) + '\n' + 'output_file = ' + str(output_file) + '\n' ) validation_registrator = ValidationRegistrator() validation_registrator.register(PathValidator(data_path)) validation_registrator.validate() self.animal_name = animal_name self.date = date self.data_path = data_path self.metadata = nwb_metadata.metadata metadata_section_validator = MetadataSectionValidator(self.metadata) metadata_section_validator.validate_sections() if self.metadata.get('associated_files', []): associated_files_existance_validator = AssociatedFilesExistanceValidator( self.metadata['associated_files']) if not associated_files_existance_validator.files_exist(): raise Exception( "one or more associated file listed in metadata.yaml file does not exist") self.probes = nwb_metadata.probes self.process_dio = process_dio self.process_mda = process_mda self.process_analog = process_analog self.process_pos_timestamps = process_pos_timestamps if not preprocessing_path: self.preprocessing_path = data_path else: self.preprocessing_path = preprocessing_path self.output_file = output_file self.video_path = video_path self.is_old_dataset = is_old_dataset self.link_to_notes = self.metadata.get('link to notes', None) data_types_for_scanning = {'pos': True, 'time': True, 'mda': process_mda, 'DIO': process_dio, 'analog': process_analog} rec_files_list = RecFileFinder().find_rec_files( path=os.path.join( self.data_path, self.animal_name, 'raw', self.date) ) if not preprocessing_path: header_path = None # default else: header_path = os.path.join( self.preprocessing_path, self.animal_name, 'headers', self.date) os.makedirs(header_path, exist_ok=True) header_file = HeaderProcessor.process_headers( rec_files_list, copy_dir=header_path) if reconfig_header: self.header = Header(reconfig_header) else: self.header = Header(header_file) self.data_scanner = DataScanner( self.preprocessing_path, animal_name, nwb_metadata) self.dataset_names = self.data_scanner.get_all_epochs(date) full_data_path = os.path.join(self.preprocessing_path, self.animal_name, 'preprocessing', date) validation_registrator = ValidationRegistrator() validation_registrator.register(NTrodeValidator( self.metadata, self.header, self.probes)) validation_registrator.register(PreprocessingValidator( full_data_path, self.dataset_names, data_types_for_scanning )) validation_registrator.register(TaskValidator(self.metadata['tasks'])) validation_registrator.validate() self.__extract_datasets(animal_name, date) self.corrupted_data_manager = CorruptedDataManager(self.metadata) self.shanks_electrode_originator = ShanksElectrodeOriginator( self.probes, self.metadata) self.shanks_originator = ShanksOriginator(self.probes, self.metadata) self.fl_probe_manager = FlProbeManager(self.probes) self.device_injector = DeviceInjector() self.device_factory = DeviceFactory() self.electrode_group_originator = ElectrodeGroupOriginator( self.metadata) self.electrodes_originator = ElectrodesOriginator( self.probes, self.metadata) if self.is_old_dataset: if not session_start_time: raise ValueError( 'session_start_time is required for old dataset.') self.session_start_time = session_start_time else: session_time_extractor = SessionTimeExtractor( self.datasets, self.animal_name, self.date, self.dataset_names ) self.session_start_time = session_time_extractor.get_session_start_time() self.mda_valid_time_originator = MdaValidTimeOriginator( self.header, self.metadata) self.mda_invalid_time_originator = MdaInvalidTimeOriginator( self.header, self.metadata) self.pos_valid_time_originator = PosValidTimeOriginator(self.metadata) self.pos_invalid_time_originator = PosInvalidTimeOriginator( self.metadata) self.epochs_originator = EpochsOriginator(self.datasets) if 'associated_files' in self.metadata: self.associated_files_originator = AssociatedFilesOriginator( self.metadata) self.electrodes_extension_originator = ElectrodesExtensionOriginator( self.probes, self.metadata, self.header ) self.sample_count_timestamp_corespondence_originator =\ SampleCountTimestampCorespondenceOriginator(self.datasets) self.processing_module_originator = ProcessingModuleOriginator() self.task_originator = TaskOriginator(self.metadata) self.camera_device_originator = CameraDeviceOriginator(self.metadata) self.header_device_originator = HeaderDeviceOriginator( self.header, self.metadata) self.probes_originator = ProbeOriginator( self.device_factory, self.device_injector, self.probes) self.camera_sample_frame_counts_originator = CameraSampleFrameCountsOriginator( os.path.join(self.data_path, self.animal_name, 'raw', self.date)) if self.is_old_dataset: self.video_files_originator = VideoFilesOriginator( os.path.join(self.data_path, self.animal_name, 'raw', self.date), self.video_path, self.metadata["associated_video_files"], convert_timestamps=_CONVERT_OLD_TIMESTAMPS, return_timestamps=_RETURN_OLD_TIMESTAMPS, ) else: self.video_files_originator = VideoFilesOriginator( os.path.join(self.data_path, self.animal_name, 'raw', self.date), self.video_path, self.metadata["associated_video_files"], ) self.data_acq_device_originator = DataAcqDeviceOriginator( device_factory=self.device_factory, device_injector=self.device_injector, metadata=self.metadata['data_acq_device'] ) if self.process_mda: self.mda_originator = MdaOriginator( self.datasets, self.header, self.metadata) if self.process_dio: if self.is_old_dataset: self.dio_originator = DioOriginator( self.metadata, self.datasets, convert_timestamps=_CONVERT_OLD_TIMESTAMPS) else: self.dio_originator = DioOriginator( self.metadata, self.datasets) if self.process_analog: if self.is_old_dataset: self.analog_originator = AnalogOriginator( self.datasets, self.metadata, convert_timestamps=_CONVERT_OLD_TIMESTAMPS, return_timestamps=_RETURN_OLD_TIMESTAMPS) else: self.analog_originator = AnalogOriginator( self.datasets, self.metadata) self.position_originator = PositionOriginator( self.datasets, self.metadata, self.dataset_names)