cryoSPARC tips

提供: Eospedia
移動: 案内検索

メタデータファイル(.cs, .csg)の編集

参考

https://cryosparc.com/docs/tutorials/data-management#faq-cs-csg

.csgファイル生成のソースコード

cryosparc/cryosparc2_master/cryosparc2_compute/jobs/runcommon.py の create_csg() で定義されている様。

コマンドラインインターフェイス

リファレンスガイド

https://guide.cryosparc.com/setup-configuration-and-management/management-and-monitoring/cli

参考になるスクリプト

cryosparc/cryosparc2_worker/cryosparc2_compute/jobs/workflows/buildrun_bench.py に、T20Sデータセットの自動処理(web GUIのjob builderのExtensive Workflow for T20s (BENCH)(BETA)の処理の中身)が記述してある。

buildrun_bench.pyで各make_jobに渡されているcreated_by_job_uidパラメータは、Extensive Workflowジョブから投げる際特有のオプションのようなので、普通に投げる分には不要(のはず)。

コマンドラインの使い方

基本的には以下の流れでジョブを作成してキューへ投下すれば良いようである。

1. make_jobでジョブを作成

$ cryosparcm cli "make_job(...)"

これを実行するとcryoSPARCのGUIの方でジョブパネルが出現し、ステータスがbuildingになる。

make_jobの中に何を書くかは、上記のリファレンスガイドやT20Sベンチマークスクリプトを眺めたり、cryosparc/cryosparc2master/cryosparc2_compute/jobs/ 内の各ジョブディレクトリの build.py を読むとなんとなく把握できる感がある。

job_typeに関しては、cryosparc/cryosparc2master/cryosparc2_compute/jobs/ 内の各ジョブディレクトリの__init__.pyを読むとわかる。

user_idを渡す必要があるが、それは以下で確認できる。

$ cryosparcm cli "GetUser('<ユーザー登録に使用したメールアドレス>')['_id']"

web GUIでは、未完了のジョブの(予定)出力結果を後続のジョブの入力に指定して、ジョブのツリーをキューに投下するようなことができるが、コマンドラインからでも同様のことができる(立て続けにmake_job & enqueue_jobすればいい)。ただし、親ジョブが import result groupで単粒子画像セットを用意する場合などは、そのジョブが完了してからでないと後続のジョブをmake_jobできない、ようである(筆者が試したところそうなった)。他にもそのような律速的ジョブはあるかもしれない。その場合は、

$ cryosparcm cli "wait_job_complete('<プロジェクトID>', '<ジョブID>')"

で、そのジョブが終わるまで待つことが可能。

2. enqueue_jobでスケジューラにジョブを投下

$ cryosparcm cli "enqueue_job('<プロジェクトID>', '<ジョブID>', '<レーン名>'"

プロジェクトIDはP1とかP2など。ジョブIDは手順1にて作成したジョブのID (J100とか)。レーン名は default としておけばスケジューラがよろしくやってくれる。

上記コマンドにより、GUIでQueueボタンを押したときと同様の処理が行われる。

使用可能なレーン名は、以下で確認できる。

$ cryosparcm cli "get_scheduler_lanes()"

[{u'title': u'Lane default (node)', u'type': u'node', u'name': u'default', u'desc': u''}]

'name'キーに対応する値が、指定できるレーン名、のようである。

input_group_connects について

例えば、ab initioジョブを作成したいとして、その入力画像はJ20のものであるとする。

J20のジョブパネルを開いて'Overview'を表示すると、右側のカラムに以下のような表示がある。(この例では、Select 2D classジョブ)

スクリーンショット 2020-09-11 194140.png

各小パネルの上部にparticles_selectedとかtemplates_selectedとか書いてあるが、これが結果の「グループ」名である。

ab initioジョブにはparticles_selectedグループを渡したい。ジョブID J20のparticles_selectedは "J20.particles_selected" のようにして指定することができる。

一方 ab initioジョブでは、GUIであれば以下のような入力項目がある。

スクリーンショット 2020-09-11 194742.png

particlesグループ が入力として必要であることがわかる。

この例で、ab initioをコマンドラインから叩くときのinput_groups_connectsに何を渡せばよいかというと、以下のようなPythonのディクショナリを渡せばよい。

{'particles': 'J20.particles_selected'}

このようにしてmake_jobしてenqueue_jobすると、ちょうどGUIで J20のparticles_selectedをドラッグしてab initioのparticlesへドロップして実行したのと同じことになる。

別のホストマシン、別のユーザーからジョブを投げたい場合

sshを利用して投げることが可能。

例えばcryoSPARCのユーザー名がcryosparc_user、cryoSPARCを動かすホストマシンがfugaの場合、

> ssh cryosparc_user@fuga "cryosparcm cli \"make_job(job_type='homo_abinit', ......)\""

のようにしてジョブを作り、同様にしてキューへ投下すれば実行可能。内側のダブルクォートのエスケープを忘れずに。

データベースの移動

データベースがdocker内のホームディレクトリに作られてしまっていたので、ネットワークドライブの中に移動させ、どのホスト、コンテナからもマウントして利用できるようにしたい。(※ single workstationインストールなので普通はホストの移動とかはしないと思うが、筆者はいろいろな事情でホストやコンテナを移動したい場合があるので、このような要求が出てきた。)

参考: https://discuss.cryosparc.com/t/how-to-change-database-directory-in-cryosparc-v2/2068/5

1. まず既存のデータベースのバックアップをする。

> cryosparcm backup

2. cryoSPARCのマスタープロセスを停止する。

> cryosparcm stop

3. データベースディレクトリを所望の場所に移動する。

まずは現在のデータベースディレクトリの場所を確認する。データベースディレクトリのパスは、cryoSPARCをインストールしたディレクトリの cryosparc2_master/config.sh 内に記述してある。

筆者の環境では、

export CRYOSPARC_DB_PATH="/home/csparc/softwares/cryosparc/cryosparc2_database"

であった。

これを所望の場所へコピーする。筆者の場合、/net/fs10/work02/csparc/cryosparc2_database へコピーしたいので、

> cp -r /home/csparc/softwares/cryosparc/cryosparc2_database /net/fs10/work02/csparc

を実行した。

4. cryoSPARCのコンフィグファイルでデータベースディレクトリのパスを書き換える。

先のステップで確認したconfig.shの、CRYOSPARC_DB_PATHを、新しいパスへ書き換えればよい。

5. cryoSPARCのマスタープロセスを起動し、移動前と同じ挙動になるかチェックする。

まずはマスタープロセスの起動。

> cryosparcm start

データベースが切り替わっているかチェック。

> cryosparcm status

----------------------------------------------------------------------------
CryoSPARC System master node installed at
/home/csparc/softwares/cryosparc/cryosparc2_master
Current cryoSPARC version: v2.15.0
----------------------------------------------------------------------------

cryosparcm process status:

app                              STOPPED   Not started
app_dev                          STOPPED   Not started
command_core                     RUNNING   pid 17017, uptime 0:04:18
command_proxy                    RUNNING   pid 17058, uptime 0:04:15
command_rtp                      STOPPED   Not started
command_vis                      RUNNING   pid 17052, uptime 0:04:16
database                         RUNNING   pid 16941, uptime 0:04:23
watchdog_dev                     STOPPED   Not started
webapp                           RUNNING   pid 17061, uptime 0:04:13
webapp_dev                       STOPPED   Not started

----------------------------------------------------------------------------

global config variables:

export CRYOSPARC_LICENSE_ID="*****"
export CRYOSPARC_MASTER_HOSTNAME="csparc-standalone-cs06"
export CRYOSPARC_DB_PATH="/net/fs10/work02/csparc/cryosparc2_database"
export CRYOSPARC_BASE_PORT=39000
export CRYOSPARC_DEVELOP=false
export CRYOSPARC_INSECURE=false
export CRYOSPARC_CLICK_WRAP=true

CRYOSPARC_DB_PATHが移動後のパスに切り替わっているので大丈夫そう。

あとはブラウザからウェブUIにアクセスして、移動前と同じ内容になっているか確認するとよい。

6. 新しいホストでcryoSPARCの新規(上書き)インストール

cryoSPARCを動かすホストは変えずにデータベースだけ移動する場合なら、上記のステップ5までで(多分)良いと思われる。

しかしcryoSPARCを動かすホストを変更し、かつ既存インストールを使用する場合、上記までの手順ではジョブの実行時にssh関連のエラーが出た。ワーカーを動かすホストの情報(cryoSPARCのUIのResource Manager -> Instance Information で確認できる計算リソース)がデータベースに記録されており、データベースを移動しただけでは元々データベースを置いていたホストのままになっているためと考えている。

(ほかに方法はあるかもしれないが、) 筆者が試したところでは、新しいホストにてcryoSPARCを新規インストールしなおせば、新しいホストのリソース情報が登録された。

もちろんこのとき、データベースはcryoSPARCのインストールディレクトリではなく、ステップ3で新たに作ったデータベースを使う必要があって、それはinstall.shに --dbpath オプションで指定できる。

install.sh ... --dbpath /net/fs10/work02/csparc/cryosparc2_database ...

7. 古いレーン情報の削除

ステップ6で新しいホストのリソース情報の登録はできるが、下図のように古いホストのリソース情報が残ったままになってしまった。(Target1 csparc-standalone-cs06が古いホスト、Target2 csparc-standalone-cs08 が新しいホスト)

スクリーンショット 2020-09-14 201755.png

これは以下のコマンドにより消すことができた。( https://guide.cryosparc.com/setup-configuration-and-management/management-and-monitoring/cli#remove_scheduler_target_node-args-kwargs )

> cryosparcm cli "remove_scheduler_target_node('csparc-standalone-cs06')"

スクリーンショット 2020-09-14 204731.png

これで、移動したデータベースで、新しいホストからジョブを実行できるようになった。


RELION連携

RELION(3.1)のリファインメントの結果をインポートする

最低限必要なもの

  • リファインメント結果のrun_data.star (とか、それに類するstarファイル)
  • リファインメントで使われている単粒子画像の実体が収められているディレクトリのパス
  • 加速電圧、球面収差、振幅コントラスト比率、ピクセルサイズの情報 (starファイルのdata_opticsを見るなどして確認)

備考

  • RELIONのデータはcryoSPARCのディレクトリと違う場所にあっても良い。
  • 切り出し元のムービーをあらかじめインポートしておいて、それをInputsのmicrographsへ渡すと、後々何かに使うことができるらしいが(粒子単位のドリフト補正など?)、単粒子画像だけで良ければそれは不要、の様。

方法(例)

1. Job BuilderからImport Particle Stackを選択

2. INPUTSのmicrographs (exposure) は空でも良い (必要なら指定する)

3. PRAMETERSの Particle meta path にstarファイル、Particle data pathに単粒子画像の実体が収められているディレクトリのパスを指定する。

  • Particle data pathは例えば、Particle meta pathに指定したstarファイルの _rlnImageName に 00002@Extract/job139/Micrographs/***.mrcs とか書いてあれば、 Extract/job139/Micrographs のフルパスを指定すればよい。(そこに単粒子画像スタックの実体があるから。)

4. Microscope Parameter Overridesに、加速電圧などなどの情報を入力する。Data Signは 'light-on-dark'でいい。(RELIONで切り出された単粒子画像はコントラスト反転してタンパク質が白になっているので)

5. 実行!