def _onopeningtracks(controller, models, **_): cls = BeadSubtractionTask info = dict(self.store.data) for i, (isarchive, proc) in enumerate(models): name = trackname(proc.model[0]) if isarchive or not self.config.automate: continue track = next(iter(proc.run())).track info[proc.model[0]] = self.config(track.beads) if not len(info[proc.model[0]]): ctrl.display.update( "message", message= (f"No fixed beads to subtract: {name} [{i}/{len(models)}]", "normal")) continue ctrl.display.update( "message", message=( f"Subtracting fixed beads: {name} [{i}/{len(models)}]", "normal")) proc.add(cls(beads=[i[-1] for i in info[proc.model[0]]]), controller.processortype(cls), index=self.tasksmodel.config.defaulttaskindex( proc.model, cls)) if len(info) != len(self.store.data): ctrl.display.update(self.store, data=info)
def dataframe(self, frame) -> pd.DataFrame: "return all data from a frame" fields = RampEventTuple.fields() if self.events else RampCycleTuple.fields() lst = list(self.stats(frame)) data = pd.DataFrame({ j: [k[i] for k in lst] for i,j in enumerate(fields) # type: ignore }) data = self.status(data) data['track'] = trackname(frame.track) data['modification'] = frame.track.pathinfo.modification return data
def _body_tracks(current): if not current.roots: return "" reftrack = '|'.join(f"{i+1}:{trackname(j).replace('|', '_')}" for i, j in enumerate(current.roots)) line = """ %(tracksel[{i}])b {i}-{j: <20} %(tracktag[{i}])250s %(beadmask[{i}])ocsvι""" return (f""" ㄩㄩ Tracks Reference Track %(reftrack)|0:none|{reftrack}| !! <b>Group</b> <b>Discarded beads</b>""" + "".join( line.format(i=i, j=trackname(j)) for i, j in enumerate(current.roots)))
def _export_tracks( processors) -> List[Tuple[pd.DataFrame, Dict[str, Any]]]: tracks = pd.DataFrame( dict(trackid=list(range(len(processors))), track=[trackname(i.model[0]) for i in processors], tasks=[ dumps(j.model, ensure_ascii=False, indent=4, sort_keys=True) for j in processors ])) return [(tracks, dict(startrow=5, sheet_name="Tracks", freeze_panes=(5, len(tracks))))]
def compute(self, _: bool): "compute base dataframes" out: List[pd.DataFrame] = [self._bead] if hasattr(self, '_bead') else [] itr = self._computations('_bead', (Exception, pd.DataFrame), False) for proc, info in itr: data = pd.DataFrame({ 'track': [trackname(proc.model[0])], self._NAME: ( info.errkey() if hasattr(info, 'errkey') else 'bug' if not isinstance(info, pd.DataFrame) else 'ok' if info.shape[0] else 'empty' ) }) out.append(self._compute_update(itr.send(data), 1.)) if not out: return self._bead = _concat(out) self._bead = self._compute_tags(self._bead)
def _export_plot(mdl, plot, processors, sheetnames) -> List[Tuple[pd.DataFrame, Dict[str, Any]]]: plot.compute(True) tracks = {id(i.model[0]): trackname(i.model[0]) for i in processors} trackids = {id(j.model[0]): i for i, j in enumerate(processors)} cnv = dict(mdl.theme.xaxistag, **mdl.theme.yaxistag) cnv.pop('bead') info: List[Tuple[pd.DataFrame, Dict[str, Any]]] = [] for name in ('bead', 'peak'): sheet = getattr(plot, f'_{name}', None) if not isinstance(sheet, pd.DataFrame): continue info.append(((sheet.assign( track=sheet.trackid.apply(tracks.__getitem__), trackid=sheet.trackid.apply(trackids.__getitem__))), dict(header=[cnv.get(k, k) for k in sheet.columns], sheet_name=sheetnames.get( name, f"{name.capitalize()} statistics"), freeze_panes=(1, len(sheet))))) return info
def trackname(track: Track) -> str: "returns data track name" return trackname(track)