@nahisaho/satori 0.11.0 → 0.12.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.
Files changed (27) hide show
  1. package/README.md +111 -45
  2. package/package.json +1 -1
  3. package/src/.github/skills/scientific-admet-pharmacokinetics/SKILL.md +1 -0
  4. package/src/.github/skills/scientific-cancer-genomics/SKILL.md +287 -0
  5. package/src/.github/skills/scientific-clinical-decision-support/SKILL.md +2 -0
  6. package/src/.github/skills/scientific-clinical-reporting/SKILL.md +324 -0
  7. package/src/.github/skills/scientific-computational-materials/SKILL.md +4 -4
  8. package/src/.github/skills/scientific-deep-learning/SKILL.md +1 -0
  9. package/src/.github/skills/scientific-epidemiology-public-health/SKILL.md +1 -0
  10. package/src/.github/skills/scientific-grant-writing/SKILL.md +2 -0
  11. package/src/.github/skills/scientific-lab-data-management/SKILL.md +2 -2
  12. package/src/.github/skills/scientific-literature-search/SKILL.md +443 -0
  13. package/src/.github/skills/scientific-meta-analysis/SKILL.md +10 -0
  14. package/src/.github/skills/scientific-metabolomics-databases/SKILL.md +288 -0
  15. package/src/.github/skills/scientific-molecular-docking/SKILL.md +303 -0
  16. package/src/.github/skills/scientific-pathway-enrichment/SKILL.md +449 -0
  17. package/src/.github/skills/scientific-pharmacovigilance/SKILL.md +3 -0
  18. package/src/.github/skills/scientific-population-genetics/SKILL.md +2 -0
  19. package/src/.github/skills/scientific-precision-oncology/SKILL.md +1 -0
  20. package/src/.github/skills/scientific-protein-domain-family/SKILL.md +369 -0
  21. package/src/.github/skills/scientific-protein-interaction-network/SKILL.md +352 -0
  22. package/src/.github/skills/scientific-scientific-schematics/SKILL.md +2 -2
  23. package/src/.github/skills/scientific-single-cell-genomics/SKILL.md +2 -0
  24. package/src/.github/skills/scientific-survival-clinical/SKILL.md +11 -0
  25. package/src/.github/skills/scientific-systematic-review/SKILL.md +361 -0
  26. package/src/.github/skills/scientific-variant-effect-prediction/SKILL.md +325 -0
  27. package/src/.github/skills/scientific-variant-interpretation/SKILL.md +1 -0
@@ -0,0 +1,449 @@
1
+ ---
2
+ name: scientific-pathway-enrichment
3
+ description: |
4
+ パスウェイ・Gene Ontology 富化解析スキル。KEGG パスウェイ検索・マッピング、
5
+ Reactome パスウェイ階層解析、Gene Ontology (BP/MF/CC) アノテーション、
6
+ WikiPathways コミュニティパスウェイ、Pathway Commons 統合相互作用を横断的に
7
+ 利用した ORA (Over-Representation Analysis)、GSEA (Gene Set Enrichment Analysis)、
8
+ トポロジーベース富化解析パイプライン。34+ の ToolUniverse SMCP ツールと連携。
9
+ ---
10
+
11
+ # Scientific Pathway & Enrichment Analysis
12
+
13
+ 遺伝子リスト・ランク付きプロファイルに対して
14
+ KEGG / Reactome / GO / WikiPathways / Pathway Commons の
15
+ 5 大パスウェイ DB を横断する統合富化解析パイプラインを提供する。
16
+
17
+ ## When to Use
18
+
19
+ - DEG リスト (差次発現遺伝子) の機能注釈・パスウェイ富化を行うとき
20
+ - GSEA で遺伝子ランキングに基づくパスウェイ活性を評価するとき
21
+ - KEGG / Reactome パスウェイの詳細マッピングが必要なとき
22
+ - GO (BP/MF/CC) を用いた機能的カテゴリ分類が必要なとき
23
+ - 複数 DB 間のパスウェイ結果を統合比較するとき
24
+
25
+ ---
26
+
27
+ ## Quick Start
28
+
29
+ ## 1. ORA (Over-Representation Analysis)
30
+
31
+ ```python
32
+ import pandas as pd
33
+ import numpy as np
34
+ from scipy import stats
35
+
36
+
37
+ def over_representation_analysis(gene_list, background_genes,
38
+ gene_sets, min_size=10, max_size=500,
39
+ fdr_method="fdr_bh"):
40
+ """
41
+ 超幾何検定ベースの Over-Representation Analysis (ORA)。
42
+
43
+ Parameters:
44
+ gene_list: list — DEG などの注目遺伝子リスト
45
+ background_genes: list — 背景遺伝子集合 (全発現遺伝子)
46
+ gene_sets: dict — {pathway_name: [genes]} 辞書
47
+ min_size / max_size: パスウェイサイズフィルタ
48
+ fdr_method: 多重検定補正 ("fdr_bh", "bonferroni")
49
+ """
50
+ from statsmodels.stats.multitest import multipletests
51
+
52
+ query = set(gene_list)
53
+ bg = set(background_genes)
54
+ N = len(bg) # 背景サイズ
55
+ n = len(query & bg) # クエリ中の背景遺伝子数
56
+
57
+ results = []
58
+ for pathway, members in gene_sets.items():
59
+ pathway_bg = set(members) & bg
60
+ K = len(pathway_bg) # パスウェイサイズ (背景内)
61
+ k = len(query & pathway_bg) # オーバーラップ数
62
+
63
+ if K < min_size or K > max_size:
64
+ continue
65
+
66
+ # 超幾何検定 (右片側)
67
+ pval = stats.hypergeom.sf(k - 1, N, K, n)
68
+ fold_enrichment = (k / n) / (K / N) if (n > 0 and K > 0) else 0
69
+
70
+ results.append({
71
+ "pathway": pathway,
72
+ "overlap": k,
73
+ "pathway_size": K,
74
+ "background_size": N,
75
+ "query_size": n,
76
+ "fold_enrichment": round(fold_enrichment, 2),
77
+ "p_value": pval,
78
+ })
79
+
80
+ df = pd.DataFrame(results)
81
+ if len(df) > 0:
82
+ _, fdr, _, _ = multipletests(df["p_value"], method=fdr_method)
83
+ df["fdr"] = fdr
84
+ df = df.sort_values("fdr").reset_index(drop=True)
85
+
86
+ print(f"ORA complete: {len(gene_list)} query genes, "
87
+ f"{len(gene_sets)} pathways tested, "
88
+ f"{(df['fdr'] < 0.05).sum()} significant (FDR < 0.05)")
89
+ return df
90
+ ```
91
+
92
+ ## 2. GSEA (Gene Set Enrichment Analysis)
93
+
94
+ ```python
95
+ def gsea_analysis(ranked_genes, gene_sets, permutations=1000,
96
+ min_size=15, max_size=500, seed=42):
97
+ """
98
+ GSEA (Subramanian et al., 2005) の Python 実装。
99
+
100
+ Parameters:
101
+ ranked_genes: pd.Series — gene_symbol → fold_change or -log10(p)*sign(FC)
102
+ gene_sets: dict — {pathway_name: [genes]}
103
+ permutations: 順列検定回数
104
+ """
105
+ np.random.seed(seed)
106
+ ranked = ranked_genes.sort_values(ascending=False)
107
+ gene_names = ranked.index.tolist()
108
+ scores = ranked.values
109
+ N = len(gene_names)
110
+
111
+ results = []
112
+ for pw_name, pw_genes in gene_sets.items():
113
+ hits = set(pw_genes) & set(gene_names)
114
+ if len(hits) < min_size or len(hits) > max_size:
115
+ continue
116
+
117
+ # Running sum
118
+ hit_mask = np.array([g in hits for g in gene_names])
119
+ hit_scores = np.abs(scores) * hit_mask
120
+ hit_sum = hit_scores.sum()
121
+ miss_count = N - hit_mask.sum()
122
+
123
+ if hit_sum == 0 or miss_count == 0:
124
+ continue
125
+
126
+ running_sum = np.cumsum(
127
+ np.where(hit_mask, np.abs(scores) / hit_sum,
128
+ -1.0 / miss_count)
129
+ )
130
+
131
+ es = running_sum[np.argmax(np.abs(running_sum))]
132
+
133
+ # 順列検定
134
+ null_es = []
135
+ for _ in range(permutations):
136
+ perm_idx = np.random.permutation(N)
137
+ perm_hit = hit_mask[perm_idx]
138
+ perm_scores = np.abs(scores) * perm_hit
139
+ ps = perm_scores.sum()
140
+ if ps == 0:
141
+ continue
142
+ perm_rs = np.cumsum(
143
+ np.where(perm_hit, np.abs(scores) / ps,
144
+ -1.0 / miss_count)
145
+ )
146
+ null_es.append(perm_rs[np.argmax(np.abs(perm_rs))])
147
+
148
+ null_es = np.array(null_es)
149
+ if es >= 0:
150
+ pval = (null_es >= es).mean()
151
+ else:
152
+ pval = (null_es <= es).mean()
153
+
154
+ nes = es / np.abs(null_es).mean() if np.abs(null_es).mean() > 0 else 0
155
+
156
+ results.append({
157
+ "pathway": pw_name,
158
+ "es": round(es, 4),
159
+ "nes": round(nes, 4),
160
+ "p_value": pval,
161
+ "hit_count": len(hits),
162
+ "leading_edge": [g for g in gene_names if g in hits][:10],
163
+ })
164
+
165
+ df = pd.DataFrame(results).sort_values("p_value").reset_index(drop=True)
166
+
167
+ from statsmodels.stats.multitest import multipletests
168
+ if len(df) > 0:
169
+ _, fdr, _, _ = multipletests(df["p_value"], method="fdr_bh")
170
+ df["fdr"] = fdr
171
+
172
+ print(f"GSEA complete: {len(ranked_genes)} ranked genes, "
173
+ f"{len(results)} pathways, "
174
+ f"{(df['fdr'] < 0.05).sum() if 'fdr' in df.columns else 0} significant")
175
+ return df
176
+ ```
177
+
178
+ ## 3. KEGG パスウェイマッピング
179
+
180
+ ```python
181
+ def kegg_pathway_analysis(gene_list, organism="hsa"):
182
+ """
183
+ KEGG REST API によるパスウェイマッピング。
184
+
185
+ Parameters:
186
+ gene_list: list — 遺伝子シンボルまたは KEGG gene ID リスト
187
+ organism: str — KEGG 生物種コード (hsa, mmu, etc.)
188
+ """
189
+ import requests
190
+
191
+ base_url = "https://rest.kegg.jp"
192
+
193
+ # 1. 遺伝子 → パスウェイ マッピング
194
+ gene_pathway_map = {}
195
+ for gene in gene_list:
196
+ url = f"{base_url}/link/pathway/{organism}:{gene}"
197
+ resp = requests.get(url)
198
+ if resp.status_code == 200 and resp.text.strip():
199
+ for line in resp.text.strip().split("\n"):
200
+ parts = line.strip().split("\t")
201
+ if len(parts) == 2:
202
+ pw = parts[1].replace("path:", "")
203
+ gene_pathway_map.setdefault(pw, []).append(gene)
204
+
205
+ # 2. パスウェイ情報取得
206
+ results = []
207
+ for pw_id, genes in gene_pathway_map.items():
208
+ info_url = f"{base_url}/get/{pw_id}"
209
+ resp = requests.get(info_url)
210
+ name = pw_id
211
+ if resp.status_code == 200:
212
+ for line in resp.text.split("\n"):
213
+ if line.startswith("NAME"):
214
+ name = line.replace("NAME", "").strip()
215
+ break
216
+
217
+ results.append({
218
+ "pathway_id": pw_id,
219
+ "pathway_name": name,
220
+ "gene_count": len(genes),
221
+ "genes": genes,
222
+ })
223
+
224
+ df = pd.DataFrame(results).sort_values("gene_count", ascending=False)
225
+ print(f"KEGG mapping: {len(gene_list)} genes → {len(df)} pathways")
226
+ return df
227
+ ```
228
+
229
+ ## 4. Reactome パスウェイ階層解析
230
+
231
+ ```python
232
+ def reactome_enrichment(gene_list, species="Homo sapiens",
233
+ p_cutoff=0.05, include_interactors=False):
234
+ """
235
+ Reactome REST API による富化解析。
236
+
237
+ Parameters:
238
+ gene_list: list — UniProt ID または遺伝子シンボル
239
+ species: 種名
240
+ p_cutoff: 有意水準
241
+ """
242
+ import requests
243
+
244
+ url = "https://reactome.org/AnalysisService/identifiers/"
245
+ payload = "\n".join(gene_list)
246
+ headers = {"Content-Type": "text/plain"}
247
+ params = {
248
+ "interactors": str(include_interactors).lower(),
249
+ "species": species,
250
+ "sortBy": "ENTITIES_PVALUE",
251
+ "order": "ASC",
252
+ "resource": "TOTAL",
253
+ }
254
+
255
+ resp = requests.post(url, data=payload, headers=headers, params=params)
256
+ data = resp.json()
257
+
258
+ pathways = data.get("pathways", [])
259
+ results = []
260
+ for pw in pathways:
261
+ entities = pw.get("entities", {})
262
+ results.append({
263
+ "pathway_id": pw.get("stId", ""),
264
+ "pathway_name": pw.get("name", ""),
265
+ "found": entities.get("found", 0),
266
+ "total": entities.get("total", 0),
267
+ "ratio": round(entities.get("ratio", 0), 4),
268
+ "p_value": entities.get("pValue", 1.0),
269
+ "fdr": entities.get("fdr", 1.0),
270
+ "species": pw.get("species", {}).get("name", ""),
271
+ })
272
+
273
+ df = pd.DataFrame(results)
274
+ sig = df[df["fdr"] < p_cutoff] if len(df) > 0 else df
275
+ print(f"Reactome enrichment: {len(gene_list)} genes → "
276
+ f"{len(sig)} significant pathways (FDR < {p_cutoff})")
277
+ return df
278
+ ```
279
+
280
+ ## 5. Gene Ontology アノテーション・富化
281
+
282
+ ```python
283
+ def go_enrichment(gene_list, background_genes=None,
284
+ ontology="BP", organism="human",
285
+ method="fisher", fdr_cutoff=0.05):
286
+ """
287
+ Gene Ontology 富化解析 (goatools / gseapy 代替)。
288
+
289
+ Parameters:
290
+ gene_list: list — 注目遺伝子リスト
291
+ ontology: "BP" (Biological Process), "MF" (Molecular Function),
292
+ "CC" (Cellular Component)
293
+ method: "fisher" or "chi2"
294
+ """
295
+ import requests
296
+
297
+ # QuickGO API 経由で GO term 取得
298
+ results = []
299
+ url = "https://www.ebi.ac.uk/QuickGO/services/annotation/search"
300
+ batch_size = 100
301
+
302
+ for i in range(0, len(gene_list), batch_size):
303
+ batch = gene_list[i:i + batch_size]
304
+ params = {
305
+ "geneProductId": ",".join(batch),
306
+ "aspect": ontology,
307
+ "taxonId": "9606" if organism == "human" else organism,
308
+ "limit": 200,
309
+ }
310
+ resp = requests.get(url, params=params, headers={"Accept": "application/json"})
311
+ if resp.status_code == 200:
312
+ data = resp.json()
313
+ for result in data.get("results", []):
314
+ results.append({
315
+ "gene": result.get("geneProductId", ""),
316
+ "go_id": result.get("goId", ""),
317
+ "go_name": result.get("goName", ""),
318
+ "evidence": result.get("goEvidence", ""),
319
+ "aspect": result.get("goAspect", ""),
320
+ })
321
+
322
+ df = pd.DataFrame(results)
323
+ if len(df) > 0:
324
+ term_counts = df.groupby(["go_id", "go_name"]).size().reset_index(name="count")
325
+ term_counts = term_counts.sort_values("count", ascending=False)
326
+ print(f"GO {ontology} enrichment: {len(gene_list)} genes → "
327
+ f"{len(term_counts)} unique GO terms")
328
+ return term_counts
329
+
330
+ return df
331
+ ```
332
+
333
+ ## 6. 統合富化ヒートマップ
334
+
335
+ ```python
336
+ def integrated_enrichment_heatmap(ora_results_dict, top_n=20,
337
+ fdr_cutoff=0.05,
338
+ output="figures/enrichment_heatmap.png"):
339
+ """
340
+ 複数 DB の富化結果を統合ヒートマップで可視化。
341
+
342
+ Parameters:
343
+ ora_results_dict: dict — {"KEGG": df, "Reactome": df, "GO_BP": df}
344
+ top_n: 表示パスウェイ数
345
+ fdr_cutoff: 有意水準
346
+ """
347
+ import matplotlib.pyplot as plt
348
+ import os
349
+
350
+ os.makedirs(os.path.dirname(output), exist_ok=True)
351
+
352
+ fig, axes = plt.subplots(1, len(ora_results_dict),
353
+ figsize=(6 * len(ora_results_dict), 10))
354
+ if len(ora_results_dict) == 1:
355
+ axes = [axes]
356
+
357
+ for ax, (db_name, df) in zip(axes, ora_results_dict.items()):
358
+ sig = df[df["fdr"] < fdr_cutoff].head(top_n)
359
+ if len(sig) == 0:
360
+ ax.set_title(f"{db_name}\n(no significant)")
361
+ continue
362
+
363
+ neg_log_fdr = -np.log10(sig["fdr"].clip(lower=1e-50))
364
+
365
+ ax.barh(range(len(sig)), neg_log_fdr, color="steelblue")
366
+ ax.set_yticks(range(len(sig)))
367
+ ax.set_yticklabels(sig["pathway"].str[:50], fontsize=8)
368
+ ax.set_xlabel("-log10(FDR)")
369
+ ax.set_title(f"{db_name} (top {len(sig)})")
370
+ ax.axvline(-np.log10(fdr_cutoff), color="red", ls="--", alpha=0.5)
371
+ ax.invert_yaxis()
372
+
373
+ plt.tight_layout()
374
+ plt.savefig(output, dpi=300, bbox_inches="tight")
375
+ plt.close()
376
+ print(f"Saved: {output}")
377
+ return output
378
+ ```
379
+
380
+ ## References
381
+
382
+ ### Output Files
383
+
384
+ | ファイル | 形式 |
385
+ |---|---|
386
+ | `results/ora_results.csv` | CSV |
387
+ | `results/gsea_results.csv` | CSV |
388
+ | `results/kegg_pathways.csv` | CSV |
389
+ | `results/reactome_enrichment.csv` | CSV |
390
+ | `results/go_enrichment.csv` | CSV |
391
+ | `figures/enrichment_heatmap.png` | PNG |
392
+ | `figures/gsea_running_sum.png` | PNG |
393
+
394
+ ### 利用可能ツール
395
+
396
+ > [ToolUniverse](https://github.com/mims-harvard/ToolUniverse) SMCP 経由で利用可能な外部ツール。
397
+
398
+ | カテゴリ | 主要ツール | 用途 |
399
+ |---|---|---|
400
+ | KEGG | `kegg_search_pathway` | パスウェイキーワード検索 |
401
+ | KEGG | `kegg_get_pathway_info` | パスウェイ詳細情報取得 |
402
+ | KEGG | `kegg_find_genes` | 遺伝子検索 |
403
+ | KEGG | `kegg_get_gene_info` | 遺伝子詳細情報 |
404
+ | KEGG | `kegg_list_organisms` | 対応生物種一覧 |
405
+ | Reactome | `Reactome_get_pathway` | パスウェイ詳細取得 |
406
+ | Reactome | `Reactome_get_pathway_hierarchy` | パスウェイ階層構造 |
407
+ | Reactome | `Reactome_get_pathway_reactions` | パスウェイ内反応一覧 |
408
+ | Reactome | `Reactome_map_uniprot_to_pathways` | UniProt→パスウェイ変換 |
409
+ | Reactome | `Reactome_map_uniprot_to_reactions` | UniProt→反応変換 |
410
+ | Reactome | `Reactome_get_pathways_low_entity` | 低レベルパスウェイ |
411
+ | Reactome | `Reactome_list_top_pathways` | トップレベルパスウェイ一覧 |
412
+ | Reactome | `Reactome_list_species` | 対応種一覧 |
413
+ | Reactome | `Reactome_get_event_ancestors` | イベント祖先取得 |
414
+ | Reactome | `Reactome_get_events_hierarchy` | イベント階層 |
415
+ | Reactome | `Reactome_get_participant_reference_entities` | 参加エンティティ |
416
+ | Reactome | `Reactome_get_participants` | 参加要素取得 |
417
+ | Reactome | `Reactome_get_complex` | 複合体情報 |
418
+ | Reactome | `Reactome_get_diseases` | 疾患関連パスウェイ |
419
+ | Reactome | `Reactome_get_interactor` | 相互作用パートナー |
420
+ | Reactome | `Reactome_query_by_ids` | バッチ ID クエリ |
421
+ | Reactome | `Reactome_get_reaction` | 反応詳細 |
422
+ | Reactome | `Reactome_get_entity_compartment` | エンティティ局在 |
423
+ | Reactome | `Reactome_get_entity_events` | エンティティ関連イベント |
424
+ | Reactome | `Reactome_get_database_version` | DB バージョン確認 |
425
+ | GO | `GO_search_terms` | GO 用語検索 |
426
+ | GO | `GO_get_term_by_id` | GO ID → 用語情報 |
427
+ | GO | `GO_get_term_details` | 用語詳細 (定義/関係) |
428
+ | GO | `GO_get_annotations_for_gene` | 遺伝子 GO アノテーション |
429
+ | GO | `GO_get_genes_for_term` | GO term → 遺伝子リスト |
430
+ | WikiPathways | `WikiPathways_search` | コミュニティパスウェイ検索 |
431
+ | WikiPathways | `WikiPathways_get_pathway` | パスウェイ詳細取得 |
432
+ | Pathway Commons | `pc_search_pathways` | 統合パスウェイ検索 |
433
+ | Pathway Commons | `pc_get_interactions` | 分子間相互作用取得 |
434
+
435
+ ### 参照スキル
436
+
437
+ | スキル | 関連 |
438
+ |---|---|
439
+ | `scientific-gene-expression-transcriptomics` | DEG リスト → ORA/GSEA |
440
+ | `scientific-proteomics-mass-spectrometry` | 差次タンパク質 → パスウェイ |
441
+ | `scientific-metabolomics` | 代謝物 → パスウェイマッピング |
442
+ | `scientific-single-cell-genomics` | scRNA-seq マーカー → GO 富化 |
443
+ | `scientific-multi-omics` | マルチオミクス富化統合 |
444
+ | `scientific-network-analysis` | パスウェイ → ネットワーク |
445
+ | `scientific-systems-biology` | FBA/GRN → パスウェイ統合 |
446
+
447
+ ### 依存パッケージ
448
+
449
+ `scipy`, `statsmodels`, `pandas`, `numpy`, `matplotlib`, `requests`, `gseapy` (optional)
@@ -514,3 +514,6 @@ def generate_pv_report(target_drug, signals_df, ebgm_df, output_dir="results"):
514
514
  | `scientific-admet-pharmacokinetics` | ← 毒性予測・代謝経路情報 |
515
515
  | `scientific-clinical-decision-support` | → シグナル情報の臨床意思決定への反映 |
516
516
  | `scientific-deep-research` | ← 安全性文献の深層リサーチ |
517
+ | `scientific-clinical-trials-analytics` | ← 臨床試験データベース照会 |
518
+ | `scientific-regulatory-science` | → FDA/FAERS 規制データ統合 |
519
+ | `scientific-pharmacogenomics` | ← PGx 代謝型別安全性評価 |
@@ -330,6 +330,8 @@ def selection_scan(haplotype_matrix, positions, method="ihs"):
330
330
  | [scientific-disease-research](../scientific-disease-research/SKILL.md) | 疾患-遺伝子関連 |
331
331
  | [scientific-statistical-testing](../scientific-statistical-testing/SKILL.md) | 統計検定 |
332
332
  | [scientific-pca-tsne](../scientific-pca-tsne/SKILL.md) | 次元削減 |
333
+ | [scientific-pharmacogenomics](../scientific-pharmacogenomics/SKILL.md) | PGx 集団頻度差 |
334
+ | [scientific-epigenomics-chromatin](../scientific-epigenomics-chromatin/SKILL.md) | エピゲノム集団差 |
333
335
 
334
336
  #### 依存パッケージ
335
337
 
@@ -422,3 +422,4 @@ def generate_mtb_report(patient_id, variants, civic_data, oncokb_data,
422
422
  | `scientific-drug-target-profiling` | ← 標的ドラッガビリティ評価 |
423
423
  | `scientific-disease-research` | ← がん種の疫学・遺伝的背景 |
424
424
  | `scientific-deep-research` | ← 腫瘍学最新文献リサーチ |
425
+ | `scientific-pharmacogenomics` | ← PGx 代謝型・投与量調整 |