def save_manual_states_to_json(self, filepath: str): json_data = { "input_nwb_file": self.nwb_path, "stimulus_ontology_file": self.ontology_file, "manual_sweep_states": self.extract_manual_sweep_states(), "qc_criteria": self._qc_criteria, "ipfx_version": ipfx.__version__ } try: PipelineParameters().load(json_data) with open(filepath, 'w') as f: json.dump(json_data, f, indent=4) except ValidationError as valerr: exception_message("Unable to save manual states to JSON", f"Manual states data failed schema validation", valerr ) except IOError as ioerr: exception_message("Unable to write file", f'Unable to write to file {filepath}', ioerr )
def load_data_set_from_nwb(self, path: str): """ Attempts to read an NWB file describing an experiment. Fails if qc criteria or stimulus ontology not already present. Otherwise, attempts to run the pre-fx pipeline. Parameters ---------- path : load dataset from here """ try: if self.stimulus_ontology is None: raise ValueError("must set stimulus ontology before loading a data set!") elif self.qc_criteria is None: raise ValueError("must set qc criteria before loading a data set!") self.status_message.emit("Running extraction and auto qc...") self.run_extraction_and_auto_qc(path, self.stimulus_ontology, self.qc_criteria, commit=True) self.status_message.emit("Done running extraction and auto qc") except Exception as err: exception_message( "Unable to load NWB", f"failed to load NWB file from {path}", err )
def load_stimulus_ontology_from_json(self, path: str): """ Attempts to read a stimulus ontology file from a JSON. If successful (and other required data are already set), attempts to run the pre-fx pipeline Parameters ---------- path : load ontology from here """ try: with open(path, "r") as ontology_file: ontology_data = json.load(ontology_file) ontology = StimulusOntology(ontology_data) self.ontology_file = path if self.nwb_path is not None and self.qc_criteria is not None: self.run_extraction_and_auto_qc( self.nwb_path, ontology, self.qc_criteria, commit=True ) else: self.stimulus_ontology = ontology except Exception as err: exception_message( "StimulusOntology load failed", f"failed to load stimulus ontology file from {path}", err )
def load_qc_criteria_from_json(self, path: str): """ Attempts to read qc criteria from a JSON. If successful (and other required data are already set), attempts to run the pre-fx pipeline Parameters ---------- path : load criteria from here """ try: with open(path, "r") as criteria_file: criteria = json.load(criteria_file) if self.nwb_path is not None and self.stimulus_ontology is not None: self.run_extraction_and_auto_qc( self.nwb_path, self.stimulus_ontology, criteria, commit=True ) else: self.qc_criteria = criteria except Exception as err: exception_message( "QC criteria load failure", f"failed to load qc criteria file from {path}", err )
def run_feature_extraction(self): self.status_message.emit("Computing features, please wait.") drop_failed_sweeps(self.sweep_info) data_set = create_ephys_data_set(sweep_info=self.sweep_info, nwb_file=self.input_nwb_file, ontology=self.ontology) try: cell_features, sweep_features, cell_record, sweep_records,\ cell_state, feature_states = extract_data_set_features(data_set) self.feature_data = {'cell_features': cell_features, 'sweep_features': sweep_features, 'cell_record': cell_record, 'sweep_records': sweep_records, 'cell_state': cell_state, 'feature_states': feature_states } self.new_state() self.status_message.emit("Done computing features!") except (FeatureError, IndexError) as ferr: exception_message("Feature extraction error", f"failed feature extraction", ferr )