Skip to content

アルゴリズム追加手順書

ShogoAkiyama edited this page Nov 4, 2021 · 10 revisions

アルゴリズム一覧のディレクトリ

アルゴリズム一覧は以下のディレクトリに記録されている。 https://github.com/oist/optinist/tree/develop/optinist/wrappers

以下ではcorrelation関数を登録する手順を例に説明する。 githubのブランチは最新版に更新しておく。

git pull origin develop

新規アルゴリズムの登録

1. アルゴリズムの記述

correlationアルゴリズムの記述手順を説明していく。。

1.1 import文の記述

まず、data_wrapperとargs_checkをimportする。 関数名の上に@args_checkをつけることで、関数実行前に引数の型チェックを行ってくれる。これにより、自動的に引数を合わせてくれる。(今後変更の可能性ある。)

from wrappers.data_wrapper import *
from wrappers.args_check import args_check
1.2 関数の記述

関数が変数名と受け取る型を定義する。 correlationはtimeseries、iscellを受け取る。 timeseriesデータは時系列データを記述し、GUI上でプロットするためにTimeSeriesDataクラスでWrapしている。 iscellは前の変数からの返り値を受け取るために、作った変数である。型で引数を判定しているためIscellDataで前の関数と合わせている。(今後の仕様変更で変わる可能性がある。)

@args_check
def correlation(timeseries: TimeSeriesData, iscell: IscellData):
    timeseries = timeseries.data
    iscell = iscell.data

        ・・・・・・・
1.3 返り値の設定

次の関数への引数とするための返り値はクラス型でWrapしている。 correlationデータはCorrelationDataクラスでWrapすることで、GUI側でheatmapで描画してくれる。 他にもImageData、TimeseriesDataクラスはそれぞれ画像と時系列データとして、GUI上で描画される。

返り値として適したクラスがない場合は、data_wrapperファイルに自分で記述して頂きたい。 https://github.com/oist/optinist/blob/develop/optinist/wrappers/data_wrapper/wrapper.py

@args_check
def correlation(timeseries: TimeSeriesData, iscell: IscellData):

        ・・・・・・

    info = {}
    info['corr'] = CorrelationData(corr)

    return info
1.4 最終的なcorrelation関数

以上の手順により出来上がったcorrelation関数は以下の通りである。

from wrappers.data_wrapper import *
from wrappers.args_check import args_check

@args_check
def correlation(timeseries: TimeSeriesData, iscell: IscellData):
    timeseries = timeseries.data
    iscell = iscell.data

    ind  = np.where(iscell > 0)[0]

    timeseries = timeseries[ind, :]

    # calculate correlation ##################
    num_cell = timeseries.shape[0]

    corr = np.ones([num_cell, num_cell]) * np.nan
    for i in range(num_cell):
        for j in range(num_cell):
            if(i != j):
                corr[i, j] = np.corrcoef(timeseries[i, :], timeseries[j, :])[0, 1]

    info = {}
    info['corr'] = CorrelationData(corr)

    return info

2. アルゴリズムの登録

作成したアルゴリズムをGUI側で使いたい場合には、アルゴリズムの登録を行い必要がある。 correlationの登録は以下に記述されている。 このように、関数名をkeyに、その関数をvalueにして登録すればGUI上で使用できる。(それでもGUIで表示されない場合はもう一度docker-compose upする必要がある。) https://github.com/oist/optinist/blob/develop/optinist/wrappers/original_wrapper/__init__.py

from .correlation import correlation

original_wrapper_dict = {
    'correlation': correlation
}

3. パラメータの登録

アルゴリズムのパラメータはconfigディレクトリに保存されている。ファイルはyamlファイルで書かれている。 2の手順で関数名をcorrelationと登録した場合には、correlation.yamlとして作ると自動でファイルを参照する。 *現在の仕様ではアルゴリズム名と一対一で対応するようにしているため、ファイル名は関数名と同じでないとエラーする。 https://github.com/oist/optinist/tree/develop/optinist/config

caiman_mc.yaml

border_nan: 'copy'
gSig_filt: null
is3D: False
max_deviation_rigid: 3
max_shifts: [6, 6]
min_mov: null
niter_rig: 1
nonneg_movie: True
num_frames_split: 80
Clone this wiki locally