@nahisaho/satori 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  ## Overview
9
9
 
10
- このディレクトリには、Exp-01〜13 で蓄積した科学データ解析技法を Agent Skills として体系化した **116 個**のスキルを格納しています。Copilot がプロンプトの文脈に応じて適切なスキルを自動ロードし、各実験で確立した解析パターンを再利用します。70 のスキルは [ToolUniverse](https://github.com/mims-harvard/ToolUniverse) SMCP 経由で 1,200 以上の外部科学データベースツールとも連携可能です。
10
+ このディレクトリには、Exp-01〜13 で蓄積した科学データ解析技法を Agent Skills として体系化した **124 個**のスキルを格納しています。Copilot がプロンプトの文脈に応じて適切なスキルを自動ロードし、各実験で確立した解析パターンを再利用します。74 のスキルは [ToolUniverse](https://github.com/mims-harvard/ToolUniverse) SMCP 経由で 1,200 以上の外部科学データベースツールとも連携可能です。
11
11
 
12
12
  ### パイプラインフロー
13
13
 
@@ -208,7 +208,7 @@ symbolic-mathematics ──→ systems-biology ──→ admet-pharmacokinetics
208
208
 
209
209
  ### ToolUniverse MCP ツール連携
210
210
 
211
- 70 のスキル(HIGH 13 + MEDIUM 9 + Phase 3: 20 + Phase 4: 8 + Phase 5: 9 + Phase 6: 7 + Phase 7: 4)は、[ToolUniverse](https://github.com/mims-harvard/ToolUniverse) SMCP サーバー経由で 1,200 以上の外部科学ツールを利用可能です。各 SKILL.md 内の `### 利用可能ツール` セクションに対応ツールが記載されています。
211
+ 74 のスキル(HIGH 13 + MEDIUM 9 + Phase 3: 20 + Phase 4: 8 + Phase 5: 9 + Phase 6: 7 + Phase 7: 4 + Phase 8: 4)は、[ToolUniverse](https://github.com/mims-harvard/ToolUniverse) SMCP サーバー経由で 1,200 以上の外部科学ツールを利用可能です。各 SKILL.md 内の `### 利用可能ツール` セクションに対応ツールが記載されています。
212
212
 
213
213
  ```
214
214
  SATORI Skill (方法論・判断) ToolUniverse SMCP (データ取得・計算)
@@ -247,7 +247,9 @@ SATORI Skill (方法論・判断) ToolUniverse SMCP (データ取得・
247
247
  │ ensembl-genomics │───MCP──│ Ensembl REST, VEP │
248
248
  │ string-network-api │───MCP──│ STRING, BioGRID, STITCH │
249
249
  │ expression-comparison│───MCP──│ Expression Atlas │
250
- ... (70 skills total) │ ... (1,200+ tools) │
250
+ rrna-taxonomy │───MCP──│ MGnify metagenomics
251
+ │ marine-ecology │───MCP──│ OBIS, WoRMS, GBIF │
252
+ │ ... (74 skills total) │ │ ... (1,200+ tools) │
251
253
  └──────────────────────┘ └─────────────────────────────┘
252
254
  ```
253
255
 
@@ -255,7 +257,7 @@ SATORI Skill (方法論・判断) ToolUniverse SMCP (データ取得・
255
257
 
256
258
  | 中区分 | スキル数 | 概要 |
257
259
  |---|:---:|---|
258
- | A. 基盤・ワークフロー | 15 | パイプライン構築・前処理・データ生成・図表・執筆・仮説立案・批判的レビュー・SI 生成・LaTeX 変換・引用検証・査読対応・改訂追跡・論文品質・系統的レビュー・BioThings ID マッピング |
260
+ | A. 基盤・ワークフロー | 16 | パイプライン構築・前処理・データ生成・図表・執筆・仮説立案・批判的レビュー・SI 生成・LaTeX 変換・引用検証・査読対応・改訂追跡・論文品質・系統的レビュー・BioThings ID マッピング・データ投稿 |
259
261
  | B. 統計・探索的解析 | 4 | EDA・仮説検定・次元削減・記号数学 |
260
262
  | C. 機械学習・モデリング | 3 | 回帰・分類・特徴量重要度 |
261
263
  | D. 実験計画・プロセス最適化 | 2 | DOE・応答曲面法・ベイズ最適化 |
@@ -264,7 +266,7 @@ SATORI Skill (方法論・判断) ToolUniverse SMCP (データ取得・
264
266
  | G. 化学・材料・イメージング | 8 | ケモインフォ・材料特性評価・画像形態解析・計算材料科学・ChEMBL アッセイマイニング・MD シミュレーション・高度イメージング・深層化学 |
265
267
  | H. 臨床・疫学・メタ科学 | 5 | 生存解析・因果推論・メタアナリシス・臨床試験解析・臨床レポート |
266
268
  | I. Deep Research・文献検索 | 3 | 科学文献深層リサーチ・エビデンス階層評価・マルチ DB 文献検索・引用ネットワーク・プレプリント横断検索 |
267
- | J. 創薬・ファーマコロジー | 6 | 標的プロファイリング・ADMET/PK・ドラッグリポジショニング・分子ドッキング・薬理学的ターゲット・化合物スクリーニング |
269
+ | J. 創薬・ファーマコロジー | 7 | 標的プロファイリング・ADMET/PK・ドラッグリポジショニング・分子ドッキング・薬理学的ターゲット・化合物スクリーニング・NCI-60 スクリーニング |
268
270
  | K. 構造生物学・タンパク質工学 | 5 | PDB/AlphaFold 構造解析・de novo タンパク質設計・PPI ネットワーク・ドメイン/ファミリー・構造プロテオミクス |
269
271
  | L. 精密医療・臨床意思決定 | 3 | 変異解釈 (ACMG/AMP)・エビデンスベース臨床意思決定・バリアント効果予測 |
270
272
  | M. 実験室自動化・データ管理 | 2 | 液体ハンドリング・プロトコル管理・ELN/LIMS 連携・ラボデータ管理 |
@@ -274,11 +276,11 @@ SATORI Skill (方法論・判断) ToolUniverse SMCP (データ取得・
274
276
  | Q. 腫瘍学・疾患研究 | 5 | 精密腫瘍学 (CIViC/OncoKB)・疾患-遺伝子関連 (GWAS/Orphanet)・がんゲノミクス (COSMIC/DepMap)・希少疾患遺伝学・細胞株リソース |
275
277
  | R. 量子・先端計算 | 7 | 量子計算・GNN・ベイズ統計・説明可能 AI・深層学習・ヘルスケア AI・強化学習 |
276
278
  | S. 医用イメージング | 1 | DICOM/NIfTI・WSI 病理画像・Radiomics・MONAI |
277
- | T. シングルセル・空間・エピゲノミクス | 6 | scRNA-seq・Visium・MERFISH・CELLxGENE・RNA velocity・エピゲノミクス・レギュラトリーゲノミクス・摂動解析・scVI 統合 |
279
+ | T. シングルセル・空間・エピゲノミクス | 8 | scRNA-seq・Visium・MERFISH・CELLxGENE・RNA velocity・エピゲノミクス・レギュラトリーゲノミクス・摂動解析・scVI 統合・scATAC-seq/Signac・GPU シングルセル |
278
280
  | U. 免疫・感染症 | 2 | 免疫情報学・MHC 結合予測・病原体ゲノミクス・AMR・IEDB |
279
- | V. マイクロバイオーム・環境 | 3 | 16S/メタゲノム・α/β 多様性・SDM・OBIS・GBIF・系統解析 |
281
+ | V. マイクロバイオーム・環境 | 6 | 16S/メタゲノム・α/β 多様性・SDM・OBIS・GBIF・系統解析・rRNA 分類学・植物バイオロジー・海洋生態学 |
280
282
  | W. システム生物学 | 2 | SBML シミュレーション・FBA・GRN 推定・BioModels・代謝モデリング |
281
- | X. 疫学・公衆衛生 | 2 | リスク指標 (RR/OR)・年齢標準化・空間疫学・WHO・CDC・公衆衛生データ |
283
+ | X. 疫学・公衆衛生 | 3 | リスク指標 (RR/OR)・年齢標準化・空間疫学・WHO・CDC・公衆衛生データ・環境毒性学 |
282
284
  | Y. 集団遺伝学 | 1 | HWE・PCA/ADMIXTURE・Fst・選択スキャン・gnomAD・GWAS |
283
285
  | Z. 科学テキストマイニング | 2 | NER・関係抽出・知識グラフ・BERTopic・PubTator バイオアノテーション |
284
286
 
@@ -286,7 +288,7 @@ SATORI Skill (方法論・判断) ToolUniverse SMCP (データ取得・
286
288
 
287
289
  ## Skills 一覧
288
290
 
289
- ### A. 基盤・ワークフロー(15 種)
291
+ ### A. 基盤・ワークフロー(16 種)
290
292
 
291
293
  全 Exp に共通する横断的な基盤スキル。
292
294
 
@@ -307,6 +309,7 @@ SATORI Skill (方法論・判断) ToolUniverse SMCP (データ取得・
307
309
  | 13 | [scientific-paper-quality](scientific-paper-quality/SKILL.md) | 可読性スコア・構造バランス・語彙品質・ジャーナル適合性・再現性チェック | 汎用 |
308
310
  | 84 | [scientific-systematic-review](scientific-systematic-review/SKILL.md) | PRISMA 2020 系統的レビュー・マルチ DB 検索戦略・スクリーニング・バイアスリスク評価 | 汎用 |
309
311
  | 91 | [scientific-biothings-idmapping](scientific-biothings-idmapping/SKILL.md) | BioThings API (MyGene/MyVariant/MyChem) 横断的 ID マッピング・アノテーション | 汎用 |
312
+ | 119 | [scientific-data-submission](scientific-data-submission/SKILL.md) | GenBank/SRA/GEO/BioProject/BioSample データ投稿・FAIR 原則準拠 | 汎用 |
310
313
 
311
314
  ### B. 統計・探索的解析(4 種)
312
315
 
@@ -411,9 +414,9 @@ SATORI Skill (方法論・判断) ToolUniverse SMCP (データ取得・
411
414
  | 78 | [scientific-literature-search](scientific-literature-search/SKILL.md) | PubMed/Semantic Scholar/OpenAlex/EuropePMC/CrossRef マルチ DB 検索・引用ネットワーク | 汎用 |
412
415
  | 97 | [scientific-preprint-archive](scientific-preprint-archive/SKILL.md) | bioRxiv/medRxiv/arXiv/PMC/CORE/Zenodo/OpenAIRE/Unpaywall プレプリント・OA 横断検索 | 汎用 |
413
416
 
414
- ### J. 創薬・ファーマコロジー(6 種)
417
+ ### J. 創薬・ファーマコロジー(7 種)
415
418
 
416
- ドラッグディスカバリーの標的評価・薬物動態・リポジショニング・薬理学的ターゲット・化合物スクリーニングを担うスキル群。
419
+ ドラッグディスカバリーの標的評価・薬物動態・リポジショニング・薬理学的ターゲット・化合物スクリーニング・NCI-60 スクリーニングを担うスキル群。
417
420
 
418
421
  | # | Skill | 説明 | 参照 Exp |
419
422
  |---|---|---|---|
@@ -423,6 +426,7 @@ SATORI Skill (方法論・判断) ToolUniverse SMCP (データ取得・
423
426
  | 83 | [scientific-molecular-docking](scientific-molecular-docking/SKILL.md) | AutoDock Vina/DiffDock 分子ドッキング・バーチャルスクリーニング | 汎用 |
424
427
  | 89 | [scientific-pharmacology-targets](scientific-pharmacology-targets/SKILL.md) | BindingDB/GPCRdb/GtoPdb/BRENDA/Pharos 薬理学的ターゲットプロファイリング | 汎用 |
425
428
  | 94 | [scientific-compound-screening](scientific-compound-screening/SKILL.md) | ZINC 化合物ライブラリ検索・バーチャルスクリーニング前処理 | 汎用 |
429
+ | 120 | [scientific-nci60-screening](scientific-nci60-screening/SKILL.md) | NCI-60/CellMiner/DepMap がん細胞株薬剤応答スクリーニング | 汎用 |
426
430
 
427
431
  ### K. 構造生物学・タンパク質工学(5 種)
428
432
 
@@ -515,9 +519,9 @@ DICOM・WSI 等の医用画像の解析・セグメンテーションを担う
515
519
  |---|---|---|---|
516
520
  | 56 | [scientific-medical-imaging](scientific-medical-imaging/SKILL.md) | DICOM/NIfTI 処理・MONAI U-Net/SwinUNETR・WSI パッチ抽出・Radiomics・3D 可視化 | 汎用 |
517
521
 
518
- ### T. シングルセル・空間・エピゲノミクス(6 種)
522
+ ### T. シングルセル・空間・エピゲノミクス(8 種)
519
523
 
520
- scRNA-seq・空間トランスクリプトミクス・エピゲノミクス・制御ゲノミクス・摂動解析・scVI 統合の解析パイプラインを担うスキル群。
524
+ scRNA-seq・空間トランスクリプトミクス・エピゲノミクス・制御ゲノミクス・摂動解析・scVI 統合・scATAC-seq・GPU シングルセルの解析パイプラインを担うスキル群。
521
525
 
522
526
  | # | Skill | 説明 | 参照 Exp |
523
527
  |---|---|---|---|
@@ -527,6 +531,8 @@ scRNA-seq・空間トランスクリプトミクス・エピゲノミクス・
527
531
  | 102 | [scientific-regulatory-genomics](scientific-regulatory-genomics/SKILL.md) | RegulomeDB/ReMap/4DN 制御領域バリアント・三次元ゲノム構造解析 | 汎用 |
528
532
  | 113 | [scientific-perturbation-analysis](scientific-perturbation-analysis/SKILL.md) | pertpy/Augur/scIB 摂動解析・CRISPR スクリーン・scGen 摂動予測・統合ベンチマーク | 汎用 |
529
533
  | 116 | [scientific-scvi-integration](scientific-scvi-integration/SKILL.md) | scVI/scANVI/totalVI/SOLO シングルセル統合・半教師有りアノテーション・CITE-seq | 汎用 |
534
+ | 123 | [scientific-scatac-signac](scientific-scatac-signac/SKILL.md) | Signac/SnapATAC2 scATAC-seq・モチーフ解析・Gene Activity・RNA+ATAC マルチモーダル統合 | 汎用 |
535
+ | 124 | [scientific-gpu-singlecell](scientific-gpu-singlecell/SKILL.md) | rapids-singlecell/cuML/cuGraph GPU アクセラレーションシングルセル解析 | 汎用 |
530
536
 
531
537
  ### U. 免疫・感染症(2 種)
532
538
 
@@ -537,15 +543,18 @@ scRNA-seq・空間トランスクリプトミクス・エピゲノミクス・
537
543
  | 59 | [scientific-immunoinformatics](scientific-immunoinformatics/SKILL.md) | MHC-I/II 結合予測・B 細胞エピトープ・TCR/BCR レパトア多様性・抗体 CDR 解析・ワクチン候補ランキング | 汎用 |
538
544
  | 60 | [scientific-infectious-disease](scientific-infectious-disease/SKILL.md) | 病原体 WGS QC・AMR 遺伝子検出・MLST 型別・系統解析 (IQ-TREE)・SIR/SEIR 数理モデル | 汎用 |
539
545
 
540
- ### V. マイクロバイオーム・環境(3 種)
546
+ ### V. マイクロバイオーム・環境(6 種)
541
547
 
542
- マイクロバイオーム解析・環境/生態系モデリング・系統解析を担うスキル群。
548
+ マイクロバイオーム解析・環境/生態系モデリング・系統解析・rRNA 分類学・植物バイオロジー・海洋生態学を担うスキル群。
543
549
 
544
550
  | # | Skill | 説明 | 参照 Exp |
545
551
  |---|---|---|---|
546
552
  | 61 | [scientific-microbiome-metagenomics](scientific-microbiome-metagenomics/SKILL.md) | DADA2 ASV パイプライン・MetaPhlAn/Kraken2・α/β 多様性・ANCOM-BC 差次的存在量・HUMAnN 機能プロファイリング | 汎用 |
547
553
  | 62 | [scientific-environmental-ecology](scientific-environmental-ecology/SKILL.md) | SDM (MaxEnt/RF/GBM)・生物多様性指数・群集序列化 (NMDS/CCA)・保全優先順位ランキング | 汎用 |
548
554
  | 103 | [scientific-phylogenetics](scientific-phylogenetics/SKILL.md) | ETE3/scikit-bio 系統樹構築・Faith's PD・UniFrac・分岐年代推定・祖先配列復元 | 汎用 |
555
+ | 118 | [scientific-rrna-taxonomy](scientific-rrna-taxonomy/SKILL.md) | SILVA/Greengenes2/MGnify rRNA リファレンス・分類学・コンセンサス分類 | 汎用 |
556
+ | 121 | [scientific-plant-biology](scientific-plant-biology/SKILL.md) | Plant Reactome/TAIR/Ensembl Plants 植物代謝パスウェイ・種間比較 | 汎用 |
557
+ | 122 | [scientific-marine-ecology](scientific-marine-ecology/SKILL.md) | OBIS/WoRMS/GBIF/FishBase 海洋生物多様性・分布解析 | 汎用 |
549
558
 
550
559
  ### W. システム生物学(2 種)
551
560
 
@@ -556,14 +565,15 @@ SBML 動的シミュレーション・代謝フラックス・遺伝子制御ネ
556
565
  | 63 | [scientific-systems-biology](scientific-systems-biology/SKILL.md) | SBML/RoadRunner シミュレーション・FBA/pFBA (cobrapy)・GRN 推定 (GENIE3)・Sobol 感度解析 | 汎用 |
557
566
  | 95 | [scientific-metabolic-modeling](scientific-metabolic-modeling/SKILL.md) | BiGG Models/BioModels ゲノムスケール代謝モデル・反応・代謝物検索 | 汎用 |
558
567
 
559
- ### X. 疫学・公衆衛生(2 種)
568
+ ### X. 疫学・公衆衛生(3 種)
560
569
 
561
- 疫学的リスク指標算出・標準化・空間疫学・DAG 交絡分析・公衆衛生データアクセスを担うスキル群。
570
+ 疫学的リスク指標算出・標準化・空間疫学・DAG 交絡分析・公衆衛生データアクセス・環境毒性学を担うスキル群。
562
571
 
563
572
  | # | Skill | 説明 | 参照 Exp |
564
573
  |---|---|---|---|
565
574
  | 64 | [scientific-epidemiology-public-health](scientific-epidemiology-public-health/SKILL.md) | RR/OR/RD/NNT/AF リスク指標・直接/間接年齢標準化・LISA/Getis-Ord 空間クラスタリング・DAG バックドア基準 | 汎用 |
566
575
  | 98 | [scientific-public-health-data](scientific-public-health-data/SKILL.md) | NHANES/MedlinePlus/RxNorm/ODPHP 公衆衛生データアクセス・健康格差API | 汎用 |
576
+ | 117 | [scientific-toxicology-env](scientific-toxicology-env/SKILL.md) | CTD/Tox21/ToxCast/T3DB/EPA IRIS 環境毒性学・化学物質健康影響解析 | 汎用 |
567
577
 
568
578
  ### Y. 集団遺伝学(1 種)
569
579
 
@@ -642,7 +652,8 @@ Skills は `.github/skills/` に配置されているため、Copilot が自動
642
652
  │ ├── scientific-revision-tracker/
643
653
  │ ├── scientific-paper-quality/
644
654
  │ ├── scientific-systematic-review/
645
- └── scientific-biothings-idmapping/
655
+ ├── scientific-biothings-idmapping/
656
+ │ └── scientific-data-submission/
646
657
 
647
658
  │── [B] 統計・探索的解析
648
659
  │ ├── scientific-eda-correlation/
@@ -713,7 +724,8 @@ Skills は `.github/skills/` に配置されているため、Copilot が自動
713
724
  │ ├── scientific-drug-repurposing/
714
725
  │ ├── scientific-molecular-docking/
715
726
  │ ├── scientific-pharmacology-targets/
716
- └── scientific-compound-screening/
727
+ ├── scientific-compound-screening/
728
+ │ └── scientific-nci60-screening/
717
729
 
718
730
  ├── [K] 構造生物学・タンパク質工学
719
731
  │ ├── scientific-protein-structure-analysis/
@@ -769,7 +781,9 @@ Skills は `.github/skills/` に配置されているため、Copilot が自動
769
781
  │ ├── scientific-epigenomics-chromatin/
770
782
  │ ├── scientific-regulatory-genomics/
771
783
  │ ├── scientific-perturbation-analysis/
772
- └── scientific-scvi-integration/
784
+ ├── scientific-scvi-integration/
785
+ │ ├── scientific-scatac-signac/
786
+ │ └── scientific-gpu-singlecell/
773
787
 
774
788
  │── [U] 免疫・感染症
775
789
  │ ├── scientific-immunoinformatics/
@@ -778,7 +792,10 @@ Skills は `.github/skills/` に配置されているため、Copilot が自動
778
792
  │── [V] マイクロバイオーム・環境
779
793
  │ ├── scientific-microbiome-metagenomics/
780
794
  │ ├── scientific-environmental-ecology/
781
- └── scientific-phylogenetics/
795
+ ├── scientific-phylogenetics/
796
+ │ ├── scientific-rrna-taxonomy/
797
+ │ ├── scientific-plant-biology/
798
+ │ └── scientific-marine-ecology/
782
799
 
783
800
  │── [W] システム生物学
784
801
  │ ├── scientific-systems-biology/
@@ -786,7 +803,8 @@ Skills は `.github/skills/` に配置されているため、Copilot が自動
786
803
 
787
804
  │── [X] 疫学・公衆衛生
788
805
  │ ├── scientific-epidemiology-public-health/
789
- └── scientific-public-health-data/
806
+ ├── scientific-public-health-data/
807
+ │ └── scientific-toxicology-env/
790
808
 
791
809
  │── [Y] 集団遺伝学
792
810
  │ └── scientific-population-genetics/
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nahisaho/satori",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "SATORI — Agent Skills for Science. GitHub Copilot Agent Skills collection for scientific data analysis.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -0,0 +1,357 @@
1
+ ---
2
+ name: scientific-data-submission
3
+ description: |
4
+ 科学データ登録・アーカイブスキル。GenBank/SRA 配列登録・
5
+ ENA 配列アーカイブ・GEO 発現データ登録・BioProject/BioSample
6
+ メタデータ管理・FAIR 原則準拠データ共有。
7
+ ---
8
+
9
+ # Scientific Data Submission
10
+
11
+ GenBank / SRA / ENA / GEO / BioProject を活用した科学データの
12
+ 登録・アーカイブパイプラインを提供する。FAIR 原則に準拠した
13
+ 配列データ・発現データ・メタデータの公開準備。
14
+
15
+ ## When to Use
16
+
17
+ - 配列データを GenBank/DDBJ/ENA に登録するとき
18
+ - RNA-seq/WGS データを SRA にアーカイブするとき
19
+ - GEO にマイクロアレイ/RNA-seq 発現データを登録するとき
20
+ - BioProject/BioSample でメタデータを構造化するとき
21
+ - 論文投稿時にデータアクセッション番号が必要なとき
22
+ - FAIR 原則 (Findable, Accessible, Interoperable, Reusable) に準拠するとき
23
+
24
+ ---
25
+
26
+ ## Quick Start
27
+
28
+ ## 1. BioProject/BioSample メタデータ作成
29
+
30
+ ```python
31
+ import json
32
+ import pandas as pd
33
+ from pathlib import Path
34
+ from datetime import date
35
+
36
+
37
+ def create_bioproject_metadata(title, description, organism,
38
+ data_type="Genome Sequencing",
39
+ relevance="Medical"):
40
+ """
41
+ BioProject メタデータ XML/JSON 生成。
42
+
43
+ Parameters:
44
+ title: str — プロジェクトタイトル
45
+ description: str — プロジェクト説明
46
+ organism: str — 生物種名
47
+ data_type: str — データ種別
48
+ relevance: str — 関連分野
49
+ """
50
+ bioproject = {
51
+ "Project": {
52
+ "ProjectID": {"ArchiveID": {"accession": "PRJNA_PENDING"}},
53
+ "Descriptor": {
54
+ "Title": title,
55
+ "Description": description,
56
+ "Relevance": relevance,
57
+ },
58
+ "ProjectType": {
59
+ "ProjectTypeSubmission": {
60
+ "Target": {
61
+ "Organism": {"OrganismName": organism},
62
+ },
63
+ "Method": {"MethodType": data_type},
64
+ "Objectives": {"Data": {"DataType": data_type}},
65
+ }
66
+ },
67
+ }
68
+ }
69
+
70
+ print(f"BioProject metadata created:")
71
+ print(f" Title: {title}")
72
+ print(f" Organism: {organism}")
73
+ print(f" Data type: {data_type}")
74
+ return bioproject
75
+
76
+
77
+ def create_biosample_table(samples, organism, package="Generic"):
78
+ """
79
+ BioSample TSV テンプレート生成。
80
+
81
+ Parameters:
82
+ samples: list[dict] — サンプル情報
83
+ organism: str — 生物種名
84
+ package: str — BioSample パッケージ
85
+ """
86
+ required_fields = [
87
+ "sample_name", "organism", "collection_date",
88
+ "geo_loc_name", "tissue", "description",
89
+ ]
90
+
91
+ rows = []
92
+ for s in samples:
93
+ row = {
94
+ "sample_name": s.get("name", ""),
95
+ "organism": organism,
96
+ "collection_date": s.get("date", str(date.today())),
97
+ "geo_loc_name": s.get("location", "not collected"),
98
+ "tissue": s.get("tissue", "not applicable"),
99
+ "description": s.get("description", ""),
100
+ }
101
+ row.update({k: v for k, v in s.items()
102
+ if k not in ["name", "date", "location"]})
103
+ rows.append(row)
104
+
105
+ df = pd.DataFrame(rows)
106
+ print(f"BioSample table: {len(df)} samples, package='{package}'")
107
+ return df
108
+ ```
109
+
110
+ ## 2. GenBank 配列登録準備
111
+
112
+ ```python
113
+ def prepare_genbank_submission(sequences, annotations, output_dir="submission"):
114
+ """
115
+ GenBank 配列登録用 .sqn ファイル準備。
116
+
117
+ Parameters:
118
+ sequences: dict — {seq_id: sequence_string}
119
+ annotations: dict — {seq_id: {gene, product, organism, ...}}
120
+ output_dir: str — 出力ディレクトリ
121
+ """
122
+ output_dir = Path(output_dir)
123
+ output_dir.mkdir(parents=True, exist_ok=True)
124
+
125
+ # FASTA 生成
126
+ fasta_path = output_dir / "sequences.fsa"
127
+ with open(fasta_path, "w") as f:
128
+ for seq_id, seq in sequences.items():
129
+ ann = annotations.get(seq_id, {})
130
+ organism = ann.get("organism", "Unknown organism")
131
+ f.write(f">{seq_id} [organism={organism}]\n")
132
+ # 80文字折返し
133
+ for i in range(0, len(seq), 80):
134
+ f.write(seq[i:i+80] + "\n")
135
+
136
+ # Feature Table 生成
137
+ tbl_path = output_dir / "sequences.tbl"
138
+ with open(tbl_path, "w") as f:
139
+ for seq_id, ann in annotations.items():
140
+ f.write(f">Feature {seq_id}\n")
141
+ if "gene" in ann:
142
+ f.write(f"1\t{len(sequences[seq_id])}\tgene\n")
143
+ f.write(f"\t\t\tgene\t{ann['gene']}\n")
144
+ if "product" in ann:
145
+ f.write(f"1\t{len(sequences[seq_id])}\tCDS\n")
146
+ f.write(f"\t\t\tproduct\t{ann['product']}\n")
147
+
148
+ # Template 生成
149
+ template = {
150
+ "source": {
151
+ "organism": list(annotations.values())[0].get("organism", ""),
152
+ "mol_type": "genomic DNA",
153
+ },
154
+ "submitter": {
155
+ "name": "AutoSubmission",
156
+ },
157
+ }
158
+
159
+ template_path = output_dir / "template.json"
160
+ with open(template_path, "w") as f:
161
+ json.dump(template, f, indent=2)
162
+
163
+ print(f"GenBank submission prepared: {len(sequences)} sequences")
164
+ print(f" FASTA: {fasta_path}")
165
+ print(f" Feature Table: {tbl_path}")
166
+ return {"fasta": str(fasta_path), "tbl": str(tbl_path)}
167
+ ```
168
+
169
+ ## 3. SRA メタデータ & アップロード
170
+
171
+ ```python
172
+ def prepare_sra_metadata(samples, library_strategy="WGS",
173
+ library_source="GENOMIC",
174
+ platform="ILLUMINA",
175
+ instrument_model="Illumina NovaSeq 6000"):
176
+ """
177
+ SRA メタデータ TSV 生成。
178
+
179
+ Parameters:
180
+ samples: list[dict] — {biosample, title, file_r1, file_r2}
181
+ library_strategy: str — WGS/RNA-Seq/AMPLICON/etc.
182
+ library_source: str — GENOMIC/TRANSCRIPTOMIC/etc.
183
+ platform: str — ILLUMINA/OXFORD_NANOPORE/etc.
184
+ """
185
+ rows = []
186
+ for s in samples:
187
+ rows.append({
188
+ "biosample_accession": s.get("biosample", "SAMN_PENDING"),
189
+ "library_ID": s.get("library_id", s.get("title", "")),
190
+ "title": s.get("title", ""),
191
+ "library_strategy": library_strategy,
192
+ "library_source": library_source,
193
+ "library_selection": s.get("selection", "RANDOM"),
194
+ "library_layout": "paired" if s.get("file_r2") else "single",
195
+ "platform": platform,
196
+ "instrument_model": instrument_model,
197
+ "filetype": "fastq",
198
+ "filename": s.get("file_r1", ""),
199
+ "filename2": s.get("file_r2", ""),
200
+ })
201
+
202
+ df = pd.DataFrame(rows)
203
+ print(f"SRA metadata: {len(df)} runs, strategy={library_strategy}")
204
+ return df
205
+
206
+
207
+ def sra_upload_ascp(files, destination, ascp_key=None):
208
+ """
209
+ Aspera (ascp) による SRA データ高速アップロード。
210
+
211
+ Parameters:
212
+ files: list — アップロードファイルリスト
213
+ destination: str — SRA アップロード先
214
+ ascp_key: str — Aspera SSH キーパス
215
+ """
216
+ import subprocess
217
+
218
+ if ascp_key is None:
219
+ ascp_key = Path.home() / ".aspera/connect/etc/asperaweb_id_dsa.openssh"
220
+
221
+ for f in files:
222
+ cmd = [
223
+ "ascp", "-i", str(ascp_key),
224
+ "-QT", "-l", "300m", "-k", "1",
225
+ str(f), destination,
226
+ ]
227
+ print(f"Uploading: {f}")
228
+ subprocess.run(cmd, check=True)
229
+
230
+ print(f"SRA upload complete: {len(files)} files")
231
+ ```
232
+
233
+ ## 4. GEO 発現データ登録
234
+
235
+ ```python
236
+ def prepare_geo_submission(expression_matrix, sample_metadata,
237
+ platform="GPL16791", output_dir="geo_submission"):
238
+ """
239
+ GEO SOFT 形式サブミッション準備。
240
+
241
+ Parameters:
242
+ expression_matrix: pd.DataFrame — 遺伝子 × サンプルマトリクス
243
+ sample_metadata: pd.DataFrame — サンプルメタデータ
244
+ platform: str — GEO プラットフォーム ID
245
+ output_dir: str — 出力ディレクトリ
246
+ """
247
+ output_dir = Path(output_dir)
248
+ output_dir.mkdir(parents=True, exist_ok=True)
249
+
250
+ # SOFT テンプレート
251
+ soft_path = output_dir / "submission.soft"
252
+ with open(soft_path, "w") as f:
253
+ # Series section
254
+ f.write("^SERIES\n")
255
+ f.write("!Series_title = \n")
256
+ f.write("!Series_summary = \n")
257
+ f.write(f"!Series_platform_id = {platform}\n")
258
+
259
+ # Sample sections
260
+ for col in expression_matrix.columns:
261
+ meta = sample_metadata[sample_metadata["sample_id"] == col]
262
+ f.write(f"\n^SAMPLE = {col}\n")
263
+ f.write(f"!Sample_title = {col}\n")
264
+ if len(meta) > 0:
265
+ for key, val in meta.iloc[0].items():
266
+ if key != "sample_id":
267
+ f.write(f"!Sample_characteristics_ch1 = {key}: {val}\n")
268
+
269
+ # Matrix file
270
+ matrix_path = output_dir / "expression_matrix.txt"
271
+ expression_matrix.to_csv(matrix_path, sep="\t")
272
+
273
+ # Raw data files list
274
+ raw_files_path = output_dir / "raw_files.txt"
275
+ with open(raw_files_path, "w") as f:
276
+ for col in expression_matrix.columns:
277
+ f.write(f"{col}.fastq.gz\n")
278
+
279
+ print(f"GEO submission: {expression_matrix.shape[1]} samples, "
280
+ f"{expression_matrix.shape[0]} genes")
281
+ return {"soft": str(soft_path), "matrix": str(matrix_path)}
282
+ ```
283
+
284
+ ## 5. FAIR データ検証チェックリスト
285
+
286
+ ```python
287
+ def fair_checklist(submission_package):
288
+ """
289
+ FAIR 原則準拠チェックリスト。
290
+
291
+ Parameters:
292
+ submission_package: dict — 登録パッケージ情報
293
+ """
294
+ checks = {
295
+ "Findable": {
296
+ "F1_persistent_id": bool(submission_package.get("accession")),
297
+ "F2_metadata_rich": bool(submission_package.get("metadata")),
298
+ "F3_id_in_metadata": True,
299
+ "F4_searchable_registry": bool(submission_package.get("repository")),
300
+ },
301
+ "Accessible": {
302
+ "A1_retrievable_protocol": bool(submission_package.get("access_url")),
303
+ "A1_1_open_protocol": True,
304
+ "A2_metadata_persists": True,
305
+ },
306
+ "Interoperable": {
307
+ "I1_formal_language": bool(submission_package.get("format")),
308
+ "I2_fair_vocabularies": bool(submission_package.get("ontology_terms")),
309
+ "I3_qualified_references": bool(submission_package.get("references")),
310
+ },
311
+ "Reusable": {
312
+ "R1_usage_license": bool(submission_package.get("license")),
313
+ "R1_1_community_standards": bool(submission_package.get("standard")),
314
+ "R1_2_provenance": bool(submission_package.get("methods")),
315
+ },
316
+ }
317
+
318
+ total = 0
319
+ passed = 0
320
+ for principle, items in checks.items():
321
+ for check, status in items.items():
322
+ total += 1
323
+ if status:
324
+ passed += 1
325
+
326
+ score = passed / total * 100 if total > 0 else 0
327
+ print(f"FAIR checklist: {passed}/{total} ({score:.0f}%)")
328
+ for principle, items in checks.items():
329
+ n_pass = sum(items.values())
330
+ print(f" {principle}: {n_pass}/{len(items)}")
331
+
332
+ return checks
333
+ ```
334
+
335
+ ---
336
+
337
+ ## パイプライン統合
338
+
339
+ ```
340
+ bioinformatics → data-submission → literature-search
341
+ (解析完了) (データ登録) (論文投稿時)
342
+ │ │ ↓
343
+ lab-data-management ───┘ academic-writing
344
+ (Benchling/OMERO) │ (論文執筆)
345
+
346
+ ebi-databases
347
+ (ENA/BioStudies 連携)
348
+ ```
349
+
350
+ ## パイプライン出力
351
+
352
+ | ファイル | 説明 | 次スキル |
353
+ |---------|------|---------|
354
+ | `submission/sequences.fsa` | GenBank 登録用 FASTA | → bioinformatics |
355
+ | `submission/sra_metadata.tsv` | SRA メタデータ | → ebi-databases |
356
+ | `geo_submission/submission.soft` | GEO SOFT テンプレート | → gene-expression |
357
+ | `submission/fair_report.json` | FAIR チェックリスト結果 | → academic-writing |