mcpField
T
tooluniverse-computational-biophysics

tooluniverse-computational-biophysics

github.com/mims-harvardデータ・データベース1.8k227 回インストール2 日前に更新
リポジトリ

tooluniverse-computational-biophysics について

定量生物学や計算生物物理の問題に取り組むためのToolUniverseスキルです。学習者や研究者が物理過程を特定し、計算・検索方法を選び、Pythonで数値推論を確認できるようにします。

主な機能

  1. 01問題を物理過程に対応付け
  2. 02定量モデルの解法ガイド
  3. 03計算・推定・検索方法の選択
  4. 04Python計算テンプレート
  5. 05選択問題の体系的な分析

活用シーン

  1. 01薬物の減衰やクリアランスの計算
  2. 02結合や希釈の問題の分析
  3. 03流行閾値の推定
  4. 04定量生物学の解答確認

MCP 対応

分子、薬物、結合、遺伝、文献データの検索に使うToolUniverseのツールを記載しています。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mims-harvard/tooluniverse --skill tooluniverse-computational-biophysics

インストール後、Claude Code で/tooluniverse-computational-biophysicsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

scripts/
burn_fluids.py
env_risk_assessment.py
enzyme_kinetics.py
epidemiology.py
fluid_calculations.py
herd_immunity.py
iv_drip_rate.py
mc_analyzer.py
radioactive_decay.py

詳細

計算生物物理学・定量生物学スキル

1. 物理過程を見極める

最も重要なステップは、問題がどの物理過程を表しているかを特定することです。定量生物学の問題は、ほとんどの場合、次のいずれかに当てはまります。

  • 薬物が体内に入り、分布し、排出される:薬物動態学です。主な量は、投与量、バイオアベイラビリティ、分布容積、クリアランス、半減期です。体をコンパートメントモデルとして扱います。
  • 放射性トレーサーが時間とともに崩壊する:核医学です。薬物の排出と同じ数学(指数関数的減衰)を使いますが、速度定数は患者ごとに変わる値ではなく、同位体の物理的性質です。
  • 病原体が集団内で広がる:疫学です。R₀によって、流行が拡大するか収束するかが決まります。集団免疫閾値は 1 - 1/R₀ です。あらゆる流行モデルの出発点となります。
  • リガンドが受容体に結合する:結合平衡です。[リガンド] が低いとき、結合は線形です。飽和状態では、すべての結合部位が占有されます。Kd は結合が最大値の半分になる濃度です。同じ曲線は、酵素反応速度論、薬物と受容体の占有率、表面吸着も表します。
  • 汚染物質が環境に入る:希釈と残留性です。問うべきことは2つあります。混合後の濃度はいくらか(質量保存)と、どのくらい残留するか(環境中の半減期による指数関数的減衰)です。
  • 2つの集団に遺伝的な差がある:集団遺伝学です。Fst は分化を測定します。HWE は交配がランダムかどうかを検定します。遺伝子流動は遺伝的浮動に対抗します。
  • ニューロンがネットワーク内で通信する:計算論的神経科学です。積分発火モデル、シナプスダイナミクス、興奮と抑制のバランスを扱います。平均発火率は、入力電流が閾値に対してどれだけ大きいかによって決まります。

過程を特定すれば、数学的な構造が見えてきます。まず代数的に解き、次に数値を代入してください。また、単位が正しく相殺されることと、値の大きさが物理的に妥当であることを必ず確認してください。

2. 問題の種類ごとの推論パターン

以下は公式ではなく、物理的に何が起きているかを考えるための方法です。

保存・希釈問題

何かがより大きな体積に広がるか、2つの流れが混ざります。物質の総量は保存されます。混合前の量 = 混合後の量と考えます。ここで、量 = 濃度 x 体積です。段階希釈、流れの混合、ストック溶液の調製、河川への環境排出がこれに当てはまります。

指数関数的な減衰・増加の問題

何かが、現在存在する量に比例する速度で減少(または増加)します。問題に「半減期」や「倍加時間」が出てきたら、このパターンです。この1つのパターンで、薬物の排出、放射性崩壊、環境中での残留、細菌の増殖、流行の倍加を扱えます。応用によって変わるのは、速度定数と、何が減衰するかだけです。

飽和・結合問題

限られた数の部位に何かが結合します。濃度が低いとき、結合は濃度に比例します。濃度が高いと、部位が埋まり、さらに追加しても効果は小さくなります。受容体とリガンドの結合、酵素反応速度論、表面吸着、酸素とヘモグロビンの結合曲線がこれに当てはまります。形状は常に双曲線で、応答 = 最大応答 x [対象物質] / ([対象物質] + 最大応答の半分となる定数) です。

閾値・交差問題

「どの時点で X と Y が等しくなるか」や「濃度が治療域を下回るのはいつか」といった問題です。2つの式を等しくして解きます。例として、目標とする薬物濃度に達するまでの時間、環境濃度が安全基準を超える時点、集団免疫閾値(実効 R が 1 になる条件)があります。

比率・速度の問題

出力量 = 入力量 x 時間、または出力量 = 濃度 x 流量です。クリアランス、フラックス、投与速度、点滴速度の計算は、いずれも次元解析に基づいています。与えられた量を、単位が合うように並べます。

集団間の比較に関する問題

2つの集団を比較します。差の大きさを示す指標(Fst、オッズ比、相対リスク)と、その差が実際に存在するかを示す指標(p値、信頼区間)が必要です。効果量はどのくらいか、そしてその差はノイズと区別できるかを考えます。

3. 計算するか、推定するか、調べるか

慎重に計算する場合:

  • 答えが患者に影響する場合(薬剤投与量、診断の解釈など)
  • 問題に正確な数値が示され、正確な答えが求められている場合
  • データに曲線をフィッティングする必要がある場合(scipy を使用します)

不確実性を明示して推定する場合:

  • 桁のオーダーが分かればよい場合(環境リスク、集団レベルなど)
  • 入力値自体が不確かな場合(R0 の推定値、log Kow の回帰から得た BCF など)
  • 「これはおよそ X で、主な不確実性は Y に由来します」と伝えます

ToolUniverse で調べる場合:

  • 物理定数が必要な場合:半減期、分子量、Kd、log Kow、アレル頻度
  • ユーザーが特定の薬剤、化合物、遺伝子、または変異を指定した場合
  • 既知のケースと照合して計算を検証したい場合
必要なデータ使用するツール
分子量、log Kow、SMILESPubChem_get_CID_by_compound_name、PubChem_get_compound_properties_by_CID
薬剤の PK 特性、作用機序ChEMBL_get_molecule
結合親和性(Kd、Ki、IC50)BindingDB_search_by_target
アレル頻度gnomad_get_variant、MyVariant_query_variants
文献値(R0、BCF など)EuropePMC_search_articles

計算だけでよい場合:

  • 問題にすべての数値が示されている場合
  • 特定の実在する化合物や遺伝子が指定されていない場合

4. Python 計算テンプレート

重要:問題に数値が示され、数値で答えるよう求められている場合は、Bash ツールを使って Python コードを作成し、実行してください。 頭の中だけで計算しないでください。スクリプトを作成して実行し、その結果を報告してください。複数段階の問題を暗算すると、間違いが生じます。以下のテンプレートは出発点です。問題に合わせて調整し、実際に実行してください。

回答形式のルール:問題が求める精度と形式に合わせてください。データが小数点以下 2 桁なら、2 桁に丸めます。大きな数値(>10^6)には科学表記を使います。問題に「10^28 単位で」とある場合は、係数のみを記します。小さな数値は、問題の形式に合わせます(例:「1.776 × 10^-3」であり、「1.8e-3」ではありません)。明示的に求められていない限り、数値のみを記し、単位や説明は付けません。

# Pattern for every computation problem:
# 1. Extract ALL given values from the problem — write them down with units
# 2. Identify EXACTLY what quantity the question asks for
# 3. Write a Python script connecting givens to the unknown
# 4. Run it with: python3 -c "..."
# 5. VERIFY: substitute your answer back into the original problem — does it make sense?
#    e.g., if computing a drip rate, check: rate × time = total volume?
#    e.g., if computing vaccine coverage, check: coverage × efficacy × population > herd immunity?
テンプレート 1:指数関数的な減衰/増加

対象:薬剤のクリアランス、放射性崩壊、環境中での残留性、細菌の増殖、感染症の倍加。

import numpy as np

def exponential_process(initial, half_life, time):
    """Amount remaining after exponential decay. For growth, use negative half_life."""
    return initial * (0.5 ** (time / half_life))

def time_to_reach(initial, target, half_life):
    """Time for exponential process to reach a target value."""
    return half_life * np.log2(initial / target)

# Examples — same math, different domains:
# Drug: 500 mg dose, t½ = 6 h, after 24 h → 31.25 mg
# Radioactive: 20 mCi Tc-99m, t½ = 6 h, after 12 h → 5 mCi
# Environmental: 100 ppm pesticide, t½ = 30 days, after 90 days → 12.5 ppm
テンプレート 2:保存/希釈/混合

対象:C1V1=C2V2、河川水の混合、段階希釈。基本となる考え方:C1*V1 = C2*V2(既知の値を 3 つ入力し、4 つ目を求めます)。n 本の流れを混合する場合:final_conc = sum(Ci*Qi) / sum(Qi)。

テンプレート 3:閾値/平衡ソルバー

対象:薬剤濃度が治療域を下回るタイミング、集団免疫閾値。scipy.optimize.brentq(lambda x: func(x) - target, lo, hi) を使って交差点を求めます。

テンプレート 4:飽和/結合曲線

対象:受容体結合、酵素反応速度論、吸着、用量反応。曲線の形:response = Rmax * C / (C + Kd)。p0=[median(C), max(response)] を指定して、scipy.optimize.curve_fit でフィッティングします。

テンプレート 5:統計的比較

対象:HWE カイ二乗検定、分割表、群間比較。適合度検定には scipy.stats.chisquare(observed, expected) を、群間比較には stats.ttest_ind/ttest_rel を使います。

テンプレート 6:速度/次元解析

対象:点滴速度、クリアランス、フラックス、投与速度。基本式:rate = amount / time、mass_rate = concentration * flow_rate。単位が正しく相殺されるように式を整理します。

テンプレート 7:コンパートメントモデルと R0

対象:SIR/SEIR、R0 の導出。R0 = beta * N / gamma(基本的な SIR)。一般形:R0 = transmission_rate * infectious_duration * susceptible_contacts。感染者 1 人がすべてのコンパートメントをたどる過程を追って導出します。

5. 多肢選択問題の戦略

生物物理学、薬理学、臨床医学の多肢選択問題で誤答する原因は、知識不足ではなく、選択肢を読み飛ばす、選択肢の記号と文面を取り違える、もっともらしい最初の選択肢に飛びつくといった手順上のミスであることがよくあります。毎回、以下の体系的な手順を使ってください。

必須の多肢選択問題の手順
  1. 設問を2回読む。 問われている動作を正確に特定します:「最も可能性が高い」、「最初の手順」、「最もよく説明している」、「例外」。これらの限定語によって答えは変わります。
  2. すべての選択肢を必ず評価する。 各選択肢について、次のように考えます。
    • なぜこれが正解なのか? — 中心となる概念に合致していますか?
    • なぜこれが誤りなのか? — 推論に矛盾があるのか、それとも一部だけが正しいのか?
  3. 明確な根拠を示して消去する。 事実に基づく理由を述べられる場合に限り(単なる感覚ではなく)、選択肢を消去済みとします。
  4. 残った選択肢を数える。 1つなら、それが答えです。2つ以上なら、設問に戻り、それらを区別する限定語を探します。
  5. 記号と文面の対応を確認する。 答えを書く前に、書こうとしている記号が、推論の対象にした選択肢の文面と一致していることを確認します。「Bが正解」と考えたのに「C」と書くという、よくあるミスを防げます。
  6. 定量的な多肢選択問題:まずPythonを使って正確な答えを計算し、その後で最も近い選択肢を選びます。提示された選択肢に計算が左右されないように、独立して計算してください。
  7. 多肢選択問題の落とし穴:「上記のすべて/いずれでもない」が正解である確率は約25%にすぎません。「常に」、「決して」、「のみ」といった絶対的な表現は、通常は誤りです。最も長く詳細な選択肢のほうが正解であることが多くあります。2つの選択肢が反対の内容なら、通常はどちらか一方が正解です。

一括処理での重要事項:複数の多肢選択問題に続けて答える場合、急がないでください。すべての問題で、完全な消去プロセスを適用してください。一括処理でよくあるミスは、消去せず、第一印象だけで答えてしまうことです。各問題について、必ず次のことを行ってください。

  • 答えを選ぶ前に、少なくとも2つの選択肢を理由とともに書き出して消去する
  • 選択肢を1つも消去できない場合は、情報を調べる必要があるという兆候です
mc_analyzer.py — 自動化された多肢選択問題の補助ツール

skills/tooluniverse-computational-biophysics/scripts/mc_analyzer.py にあります。

# Analysis mode: systematic elimination
python mc_analyzer.py --question "..." --choices "A:opt1,B:opt2,C:opt3,D:opt4" --reasoning "..."

# Verify mode: confirm letter-text alignment
python mc_analyzer.py --verify --answer "B" --question "..." --choices "A:opt1,B:opt2,C:opt3,D:opt4"

分析モードでは、推論に含まれる消去の根拠をスキャンし、残った選択肢の数を報告します。検証モードでは、記号と文面の対応を確認します。採点対象の多肢選択問題にはすべて使用してください。


6. 同梱スクリプト

すぐに実行できるこれらのスクリプトは、skills/tooluniverse-computational-biophysics/scripts/ にあります。 手作業で計算する代わりに、Bash ツールを使って実行してください。検証手順が組み込まれており、エッジケースにも対応しています。

epidemiology.py — 疫学計算(--type で5種類を指定)

推奨:スクリプトの代わりにToolUniverseツール(MCP/SDK経由)を使用してください。

  • Epidemiology_r0_herd ツール — R0および集団免疫の閾値
  • Epidemiology_vaccine_coverage ツール — 実地データに基づくワクチン接種率
  • Epidemiology_nnt ツール — 治療必要数
  • Epidemiology_diagnostic ツール — 診断検査の性能(2x2の表)
  • Epidemiology_bayesian ツール — ベイズ法による検査前/検査後確率

代替手段:標準ライブラリのみを使うスクリプトです。タイプ:r0_herd、vaccine_coverage、nnt、diagnostic、bayesian。

python epidemiology.py --type r0_herd --R0 3.5 --VE 0.90
python epidemiology.py --type nnt --control_rate 0.30 --treatment_rate 0.20
python epidemiology.py --type diagnostic --tp 90 --fp 10 --tn 880 --fn 20
python epidemiology.py --type bayesian --prevalence 0.01 --sensitivity 0.95 --specificity 0.90

主な計算式:r0_herd:Hc=1-1/R0、Vc=Hc/VE。vaccine_coverage:PCV/PPVの実地データからVEを導出します。nnt:ARR=対照群-治療群、NNT=1/ARR。diagnostic:2x2の表全体。bayesian:検査前オッズ → LR → 検査後確率。

herd_immunity.py — 従来のワクチン接種率の閾値
python herd_immunity.py --R0 4.2 --VE 0.94

計算式:Vc = (1 - 1/R0) / VE。新たな作業には、epidemiology.py --type r0_herd を推奨します。

radioactive_decay.py — 残存放射能/目標値までの時間/親核種・娘核種

3 つのモードがあります:順方向(--A0 --half_life --time)、逆方向(--A0 --half_life --target)、親核種・娘核種(Bateman の式を使用する --parent_daughter)。

python radioactive_decay.py --A0 8 --half_life 67.3 --time 72          # forward
python radioactive_decay.py --A0 8 --half_life 67.3 --target 5         # reverse
python radioactive_decay.py --parent_daughter --half_life_parent 306.05 --half_life_daughter 40.27 --A1 1.4 --A2 2.1 --delta_t 336 --counted daughter

式:A(t) = A0 * 0.5^(t/t_half)。親核種・娘核種:Bateman の式。--counted:daughter/both/parent。

env_risk_assessment.py — 環境リスク(ハザード指数)

食品経路による土壌汚染物質への曝露について HQ を計算します。食品の形式:"name:intake_g:bioavailability:PUF:TSCF"。

python env_risk_assessment.py --total_mass_ug 1e9 --area_m2 250000 --depth_m 0.6 \
    --bulk_density 1500 --theta_w 0.35 --foc 0.03 --Koc 28.3 \
    --food "fruit:300:0.5:0.1:5" --body_weight 80 --RfD 0.02

式:C_soil → Kd=foc*Koc → C_sw → 経路ごとの DI → HQ = sum(DI)/BW/RfD。

fluid_calculations.py — 臨床での輸液と投与量(--type で指定する 4 種類)

種類:drip_rate、bsa_dose、maintenance、dilution。従来の iv_drip_rate.py よりこちらを推奨します。

python fluid_calculations.py --type drip_rate --volume_ml 50 --time_min 60 --drop_factor 60
python fluid_calculations.py --type bsa_dose --dose_per_m2 25 --bsa 0.8
python fluid_calculations.py --type maintenance --weight_kg 22
python fluid_calculations.py --type dilution --c1 20 --v1 4.7 --v2 50

式:drip_rate = (vol/time)drop_factor。bsa_dose = dose_per_m2BSA。maintenance = Holliday-Segar。dilution = C1V1=C2V2。

enzyme_kinetics.py — Km/Vmax、Hill、Ki(--type で指定する 3 種類)

推奨:type とデータパラメーターを指定して、EnzymeKinetics_calculate ツール(MCP/SDK 経由)を使用します。代替手段:enzyme_kinetics.py を直接実行します。

標準ライブラリのみを使用します。種類:km_vmax(Lineweaver-Burk + 非線形)、hill(協同性)、ki(競合/非競合/不競合)。

python enzyme_kinetics.py --type km_vmax --substrate "1,2,5,10,20" --velocity "0.5,0.8,1.2,1.5,1.7"
python enzyme_kinetics.py --type ki --substrate "1,2,5,10,20" --velocity_no_inh "0.5,0.8,1.2,1.5,1.7" --velocity_inh "0.3,0.5,0.8,1.0,1.1" --inhibitor_conc 5 --inhibition_type competitive
burn_fluids.py — 熱傷の蘇生輸液 + 維持輸液

成人:Parkland(4*kg*%TBSA)。小児(<30kg):Galveston(5000*BSA*%TBSA + 2000*BSA)。

python burn_fluids.py --weight_kg 80 --tbsa_pct 40
python burn_fluids.py --weight_kg 25 --age_years 7 --tbsa_pct 45 --bsa_m2 0.95

出力:時間ごとの投与速度(最初の 8 時間/次の 16 時間)、総量、尿量の目標値。8 時間の計測は熱傷を負った時刻から始まります。


7. 組み合わせ論と数え上げの問題

遺伝学の組み合わせ論(F2 ハプロタイプ、遺伝子型の数、標本の集計)や、数え上げ/順列/組み合わせに関する問題では、必ず Python コードを記述して実行してください。頭の中で列挙や計算をしないでください。「5 つの SNP から固有の染色体はいくつできるか」のような一見単純な問題にも、コードを使わないと誤りにつながる複雑な要素があります。itertools.product、itertools.combinations、または直接的な公式を使い、その後、数を検証してください。

8. 注意すべきよくある落とし穴

  • 単位の不一致:mg と g、mL と L、時間と秒。すべての数値に単位を併記し、計算前に単位が正しく相殺されることを必ず確認してください。
  • 単指数減衰と多指数減衰の違い:薬物のクリアランスは、分布相と消失相からなる二相性であることがよくあります。単純な半減期による減衰は、1 コンパートメントを仮定します。この仮定を明記してください。
  • R0 と Re の違い:R0 は全員が感受性を持つ集団での値です。Re = R0 x 感受性を持つ人の割合です。実際の問題のほとんどでは Re が求められます。
  • 単一部位の推定値にはばらつきがあります:1 つの SNP の Fst、1 人の患者の反応、1 回の測定による Kd などです。ゲノム全体の平均値、集団平均、または反復実験の方が信頼性が高いことを、必ず注記してください。
  • 回帰による推定値は桁の概算です:log Kow からの BCF、QSAR による毒性推定などです。不確実性を明確に示してください。
  • シミュレーションでの SI 単位:ニューロンモデル、拡散、熱力学では、計算前に必ず SI 単位(秒、メートル、ジュール、ボルト)に変換してください。ms と mV の混在は、気づきにくい 1000 倍の誤差を招きます。

コメント