コード例 #1
0
ファイル: _model.py プロジェクト: depixusgenome/trackanalysis
        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)
コード例 #2
0
 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
コード例 #3
0
ファイル: _plot.py プロジェクト: depixusgenome/trackanalysis
    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)))
コード例 #4
0
 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))))]
コード例 #5
0
    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)
コード例 #6
0
    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
コード例 #7
0
 def trackname(track: Track) -> str:
     "returns data track name"
     return trackname(track)