def _time_from_ecat(self, ecat_file, ft_array): shdrs = ecat.load(ecat_file).get_subheaders() mlist = ecat.load(ecat_file).get_mlist() framelist = mlist.get_series_framenumbers().values() for fn, shdr in zip(framelist, shdrs.subheaders): start = shdr['frame_start_time'] / 1000 duration = shdr['frame_duration'] / 1000 ft_array[fn, 1:4] = [start, duration, start + duration]
def _time_from_ecat(self, ecat_file, ft_array): """ fills in a fiels of empty ft_array using data from the ecat mlist and subheaders""" shdrs = ecat.load(ecat_file).get_subheaders() mlist = ecat.load(ecat_file).get_mlist() framelist = mlist.get_series_framenumbers().values() for fn, shdr in zip(framelist, shdrs.subheaders): start = shdr['frame_start_time'] / 1000 duration = shdr['frame_duration'] / 1000 idx = np.where(ft_array[:,0] == fn) ft_array[idx, 1:] = [start, duration, start + duration]
def frametime_from_ecat(ecatf): """given an ecat file , finds timing info for each frame Returns ------- out : array array holding framenumber, starttime, duration, endtime in milliseconds """ img = ecat.load(ecatf) shdrs = img.get_subheaders() mlist = img.get_mlist() framenumbers = mlist.get_series_framenumbers() out = np.zeros((len(framenumbers), 4)) if shdrs.subheaders[0]['frame_start_time']== 16: adj = 16 else: adj = 0 for i, fn in framenumbers.items(): startt = shdrs.subheaders[i]['frame_start_time'] dur = shdrs.subheaders[i]['frame_duration'] out[i,0] = fn out[i,1] = startt - adj # fix adj, divide by 60000 to get minutes out[i,2] = dur out[i,3] = startt - adj + dur out = out[out[:,0].argsort(),] return out
def from_ecats(self, ecat_files, units=None): """Pulls timing info from ecat file(s) and stores in an array""" if not hasattr(ecat_files, '__iter__'): ecat_files = [ecat_files] nframes = 0 for f in ecat_files: x, y, z, nf = ecat.load(f).get_shape() nframes += nf empty_ft = self.generate_empty_protocol(nframes) for ef in ecat_files: self._time_from_ecat(ef, empty_ft) self.data = np.array(empty_ft[0:,0:4]).astype(float) # call to correct_data fails due to empty_ft dtype if not units: self.units = guess_units(self.data) else: self.units = units try: self.data = self.correct_data_order(self.data) self._validate_frames() except FrameError: raise DataError('Bad data', self.data, ecat_files) return self
def from_ecats(self, ecat_files, units=None): """Pulls timing info from ecat file(s) and stores in an array""" if not hasattr(ecat_files, '__iter__'): ecat_files = [ecat_files] nframes = 0 for f in ecat_files: x, y, z, nf = ecat.load(f).get_shape() nframes += nf empty_ft = self.generate_empty_protocol(nframes) for ef in ecat_files: self._time_from_ecat(ef, empty_ft) self.data = np.array(empty_ft[0:, 0:4]).astype(float) # call to correct_data fails due to empty_ft dtype if not units: self.units = guess_units(self.data) else: self.units = units try: self.data = self.correct_data_order(self.data) self._validate_frames() except FrameError: raise DataError('Bad data', self.data, ecat_files) return self
def _loadFile(self, path: str) -> None: if path != self._FILE_CACHE: e = ecat.load(path) self._ECAT_CACHE = e.header self._SUB_CACHE = e.get_subheaders().subheaders self._FILE_CACHE = path self.setManufacturer("Unknown", {}) self.resetMetaFields() self.setupMetaFields(_ECAT.metafields) self.testMetaFields()