def fret_from_image(img, bg_pixel=(0, 0), bg_counts=(0, 0), beta=BETA, gamma=GAMMA, rois=()): '''Returns (time,donor,acceptor,fret) calculated from an image with added ROIs img image.Stack() or equivalent. Must have .roi dictionary with 'donor' and 'acceptor' bg_pixel tuple of counts per pixel to substract from (donor,acceptor) bg_counts tuple of counts to substract from (donor,acceptor) ''' assert_all_listy(bg_pixel, bg_counts, rois) if not img.roi: if not rois: raise ValueError( 'Must specify ROIs in image or provide using rois=') else: img.addROI(*rois) pixel_donor, pixel_acc = bg_pixel bg_donor, bg_acc = bg_counts donor_roi, acceptor_roi = img.roi['donor'], img.roi['acceptor'] don = counts_from_image(img, donor_roi, pixel_donor) - bg_donor acc = counts_from_image(img, acceptor_roi, pixel_acc) - bg_acc dcounts, acounts, fret = fret_counts(don, acc, beta, gamma) metadata = nesteddict.from_dict(img.metadata) metadata.update(beta=beta, gamma=gamma, bg_pixel=bg_pixel, bg_counts=bg_counts, roi_donor=donor_roi.toDict(), roi_acceptor=acceptor_roi.toDict()) fdata = FretData.fromFields(img.time, dcounts, acounts, fret) fdata.metadata = metadata return fdata
def fret(self, data): meta = data.metadata.copy() if self.fret: for k, v in self.fret.metadata.iteritems(): meta.setdefault(k, v) self._fret = FretData(data.data, meta) self.metadata['fret.'] = self._fret.metadata
def fret_from_image(img, bg_pixel=(0,0), bg_counts=(0,0), beta=BETA, gamma=GAMMA, rois=()): '''Returns (time,donor,acceptor,fret) calculated from an image with added ROIs img image.Stack() or equivalent. Must have .roi dictionary with 'donor' and 'acceptor' bg_pixel tuple of counts per pixel to substract from (donor,acceptor) bg_counts tuple of counts to substract from (donor,acceptor) ''' assert_all_listy(bg_pixel, bg_counts, rois) if not img.roi: if not rois: raise ValueError('Must specify ROIs in image or provide using rois=') else: img.addROI(*rois) pixel_donor, pixel_acc = bg_pixel bg_donor, bg_acc = bg_counts donor_roi,acceptor_roi = img.roi['donor'], img.roi['acceptor'] don = counts_from_image(img, donor_roi, pixel_donor) - bg_donor acc = counts_from_image(img, acceptor_roi, pixel_acc) - bg_acc dcounts,acounts,fret = fret_counts(don, acc, beta, gamma) metadata = nesteddict.from_dict(img.metadata) metadata.update( beta=beta, gamma=gamma, bg_pixel=bg_pixel, bg_counts=bg_counts, roi_donor=donor_roi.toDict(), roi_acceptor=acceptor_roi.toDict() ) fdata = FretData.fromFields(img.time,dcounts,acounts,fret) fdata.metadata = metadata return fdata
def calculate(stack, beta=constants.beta, gamma=constants.gamma, minsub=False): """Calculates FRET of a pull from an image.Stack calculate( image.Stack, beta = constants.beta, gamma = constants.gamma) RETURNS array of calculated FRET for each frame """ donor = stack.donor - (minsub and min(stack.donor)) acceptor = stack.acceptor - donor*beta acceptor = acceptor - (minsub and min(acceptor)) return FretData.fromFields(stack.time, donor, acceptor, acceptor/(acceptor+gamma*donor))
def fromFile(cls, strfile, fretfile, metadata): assert strfile or fretfile assert isinstance(strfile, str) assert isinstance(fretfile, (str,type(None))) metadata = nesteddict.from_dict(metadata) trap = TrapData.fromFile(strfile) fret = FretData.fromFile(fretfile) if fretfile else None trap.metadata.setdefault('date', today()) trap_datetime = trap.metadata['date'] metadata.setdefault('date', to_date(trap_datetime)) metadata.setdefault('datetime', trap_datetime) metadata['filename'] = fileIO.splitext(strfile)[0] newCls = cls(trap, fret, metadata) assert isinstance(newCls, cls) assert getattr(newCls, 'filename', None) is not None return newCls
def fromFile(cls, strfile, fretfile, metadata): assert strfile or fretfile assert isinstance(strfile, str) assert isinstance(fretfile, (str, type(None))) metadata = nesteddict.from_dict(metadata) trap = TrapData.fromFile(strfile) fret = FretData.fromFile(fretfile) if fretfile else None trap.metadata.setdefault('date', today()) trap_datetime = trap.metadata['date'] metadata.setdefault('date', to_date(trap_datetime)) metadata.setdefault('datetime', trap_datetime) metadata['filename'] = fileIO.splitext(strfile)[0] newCls = cls(trap, fret, metadata) assert isinstance(newCls, cls) assert getattr(newCls, 'filename', None) is not None return newCls
def collapse(self, trap_sorted_by='ext', fret_sorted_by='time'): "Collapse experiments into a single experiment with all data appended together." assert isinstance(trap_sorted_by, str) assert isinstance(fret_sorted_by, str) if not self._all_elements_have_attr('trap'): raise AttributeError( 'All experiments in ExpList must have attribute "trap"') filtered_by_fret = self.has_attr('fret') num_with_fret = len(filtered_by_fret) fret_data = None if num_with_fret == len(self): fret_data = FretData.aggregate(self.getattrs('fret'), fret_sorted_by) elif num_with_fret > 0: logger.warning('Not all experiments have fret: not collapsing fret data!') trap_data = TrapData.aggregate(self.getattrs('trap'), sort_by=trap_sorted_by) fname = self[0].filename or '' fname += '_collapsed' if fname else 'collapsed' return Pulling(trap_data, fret_data, dict(filename=fname, collapsed=True))
def fromFile(filename, **kwargs): return FretData.fromFile(filename)