mcpField
T
tooluniverse-biomedical-fact-lookup

tooluniverse-biomedical-fact-lookup

github.com/mims-harvardその他1.8k83 回インストール2 日前に更新
リポジトリ

tooluniverse-biomedical-fact-lookup について

tooluniverse-biomedical-fact-lookupは、記憶に頼らずデータベース検索ツールで生物医学の事実を確認するスキルです。複数の注釈情報を扱い、結果の解釈で起きやすい誤りも示します。

主な機能

  1. 01質問に応じた検索ツールの選択
  2. 02データベース結果による事実確認
  3. 03選択肢と取得データの照合
  4. 04注釈解釈での注意点の提示
  5. 05遺伝子、疾患、タンパク質情報への対応

活用シーン

  1. 01遺伝子セットや疾患関連の確認
  2. 02タンパク質の機能や局在の検索
  3. 03変異、調節領域、脳領域の注釈比較
  4. 04指定データベースに基づく選択問題への回答

インストール

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

$npx skills add https://github.com/mims-harvard/tooluniverse --skill tooluniverse-biomedical-fact-lookup

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

同梱ファイルtest_snippets.py

詳細

生物医学の事実検索(ツールに基づく回答)

事実に関する生物医学の質問――「Xセットに含まれる遺伝子はどれか」「DisGeNetによると疾患Yに関連する遺伝子はどれか」「GTRDによるとTF結合部位を持つ遺伝子はどれか」――には、公開データベースに信頼できる答えがあります。記憶を頼りに推測するのは信頼できません(ニッチな注釈では、偶然当たる程度です)。該当するToolUniverseツールを使えば、正解を確認できます。

自信満々に誤った回答を生む6つの落とし穴

実際の質問で、それぞれが誤答を生むことが確認されています。回答する前に確認してください。各項目の詳細は後述します。

  1. GWASの「最高のp値」は最も有意という意味ではありません――最も小さい数値です。 文字どおりに解釈すると、研究で最も弱いヒット(3e-174のrs7775055-Gではなく、1e-06のrs2476491)を選んでしまいます。

  2. 「上流にN bp、下流にM bp」の範囲はN+M+1塩基にわたります――アンカーも数に含まれます。TSSの両側100 bpは200ではなく201 ntです。得られた長さが、指定した長さと一致するか確認してください。

  3. HPAの細胞内局在には、抗体が検査されたすべての細胞株の情報がまとめられています。 main_locationsとadditional_locationsの両方を報告してください。ただし、質問で特定の細胞株が指定されている場合は、これらを候補として扱い、別の細胞株に属する注釈は除外してください。5つすべてを列挙するのも、1つだけを列挙するのと同じく誤りです。

  4. Allen Brainでは、親構造ではなく末端の構造を回答してください。 アトラスは特定の構造を色分けし、その親構造には別の色を付けるため、Lateral preoptic area(#F2483B)が正しい場合に「Hypothalamus」と答えるのは誤りです。AllenBrain_search_structuresはcolor_hex_tripletを返します。

  5. SCREENのis_proximalは信頼できません。element_typeでフィルタリングしてください――PLSとpELSはTSS近位、dELSは遠位です。

  6. 派生スコアはリリースによって異なります。 APOC2のgnomAD pLIはr4では0.047、r2.1では0.402です。同じ遺伝子でも8.5倍の差があります。質問で指定されたリリースを設定し、どのリリースを使ったか明記してください。

ルール0:推測せず、必ず調べる

質問でデータベース、遺伝子セット、またはデータベースに登録された注釈が指定されている場合は、必ず回答前にツールで検索してください。「によると」と尋ねられた質問に記憶を頼りに答えるのは、失敗につながります。予測されたmiRNAターゲット、ChIP-seq結合、キュレーション済み遺伝子セット、疾患との関連といった注釈こそ、モデルが幻覚を起こしやすい情報です。記憶した事実よりも、ツールで検証した回答のほうが信頼できます。

選択式問題の手順

この種の質問の多くは、「情報が不足しているため回答できません」という選択肢を含む選択式問題です。次の手順で進めてください。

  1. 解析:質問から、指定されたデータベース/コレクション、アンカーとなる対象(遺伝子セット、疾患、miRNA、TF、座位など)、選択肢を特定します。
  2. 特定:アンカーに適したツールと識別子を特定します(ルーティング表を参照)。
  3. 検索:ツールを1回呼び出し、信頼できるメンバー一覧/関連情報のセットを取得します。
  4. 各選択肢を照合:結果と照らし合わせます。裏付けられる選択肢は1つだけのはずです。
  5. 回答:その選択肢の記号を答えます。「情報が不足しているため回答できません」を選ぶのは、有効なクエリに対してツールが何も返さなかった場合だけです(検索を省略したことを理由に選んではいけません)。

ルーティング表――質問パターン → ツール

質問に含まれる内容ツール(検証済み)方法
名前が指定された遺伝子セット/発がんシグネチャー(MSigDB C6、例:ATM_DN.V1_DN)MSigDB_get_gene_set_membersメンバーを一覧表示し、どの選択肢が含まれているか確認します
「miRDBによる」miRNA標的(例:MIR186-3p)MSigDB_get_gene_set_members(コレクション C3:MIR:MIRDB)セット名 = MIR<number>_<3P|5P>、例:MIR186_3P
「GTRDによる」TF結合部位/標的(例:PGM3)MSigDB_check_gene_in_set(コレクション C3:TFT:GTRD)セット名 = <TF>_TARGET_GENES、例:PGM3_TARGET_GENES。選択肢ごとに gene を渡します
経路/ホールマークへの所属MSigDB_get_hallmark_geneset、MSigDB_get_genesetHALLMARK_<NAME> または正確なセット名
遺伝子 ↔ 疾患の関連(DisGeNet、OpenTargets、OMIM)umls_search_concepts → DisGeNET_get_disease_genes/DisGeNET_get_gda;OpenTargets_*、MyDisease_get_disease、OMIM_search;テキストマイニングによる代替手段: PubTator3_LiteratureSearch / PubTator3_GetEntityRelations(e1=@GENE_<sym>)、EPMC_get_text_mined_annotationsDisGeNET には UMLS CUI が必要です(umls_search_concepts → C0152200 で解決し、次に disease=C0152200 を指定)+ DISGENET_API_KEY。「XにはあるがYにはない」のレシピは以下を参照してください
マウス表現型遺伝子セット(MP / MGI、例:「メラノーマ発生率の増加」)MSigDB_check_gene_in_set(マウス M5、セット MP_<PHENOTYPE>)— 必要に応じて MGI_search_genes → MGI_get_phenotypes に切り替えますMP_* セット(例:MP_INCREASED_MELANOMA_INCIDENCE)に対して、選択肢ごとに1回呼び出します。該当メンバーが答えです。セット名を解決できない場合に限り、以下のMGI遺伝子ごとの方法を使用してください
遺伝子のゲノム上の位置(Ensemblバンド、例:chr7q34)Ensembl_* / NCBIDatasets_get_gene_by_symbol各選択肢を解決し、細胞遺伝学的バンド/座標を比較します
バリアント/配列の病原性(ClinVarによる「病原性」または「良性」の判定)(本当に不確かな場合のみ)annotate_variant_multi_source、VEP_predict_pathogenicity、UniProt_get_disease_variants_by_accession効率的に進めてください。すべての選択肢を検索してはいけません(タイムアウトの原因になります)。 まずタンパク質を特定し、各選択肢の置換を1つずつ確認して、特定の残基変化から直接判断してください。基本モデルは、よく特徴づけられたClinVarバリアントについて通常は信頼できます。本当に判断が難しいバリアントを解決するための、対象を絞ったツール呼び出しは最大1回にしてください。質問の極性に注意してください(良性か病原性か)。「最も良性の可能性が高い」場合は、一般的なバリアント/参照配列と一致するバリアントが答えです。「最も病原性の可能性が高い」場合は、まれで有害なバリアントが答えです。
薬剤/化合物の標的、作用機序、承認状況ChEMBL_*、OpenFDA_*、GtoPdb_*(GTOPDB_API_KEY が必要)、PubChem_*薬剤を解決し、関連性を検索します
この患者にどの薬剤を選ぶか(修飾因子を含む臨床症例)FDA_*_by_drug_name — 修飾因子に応じてセクションを選びます以下の「説明された患者に対する薬剤の選択」を参照してください
タンパク質の機能/ドメイン/配列UniProt_*アクセッションを解決し、注釈を確認します
「Human Protein Atlasによる」タンパク質の局在/発現HPA_get_subcellular_location、HPA_get_rna_expression_by_source、HPA_get_comprehensive_gene_details_by_ensembl_id遺伝子シンボルを渡します。**HPA073143 などの抗体IDも使用でき、標的遺伝子に解決されます。**主要な局在と追加の局在の両方を報告してください。以下を参照してください
Allen Mouse/Human Brain Atlas の脳領域AllenBrain_search_structures(name または acronym)、AllenBrain_get_structure参照アトラスの領域は色分けされています。結果には color_hex_triplet が含まれるため、「赤で示された領域」に回答できます。詳しくは以下を参照してください
遺伝子近傍の調節エレメント/cCRE(ENCODE SCREEN)SCREEN_search_cCREs_by_regionelement_type で絞り込みます(PLS と pELS は TSS 近位、dELS は遠位)。dnase_zscore を確認してください
ゲノム領域に位置する/重複するバリアント(ClinVar)ClinVar_search_by_regionClinVar_search_variants ではありません。Entrez はバリアントの開始位置で一致するため、狭い範囲で検索すると、その領域にまたがっていても数メガベース上流から始まる CNV を見落とします。実際に重複するバリアントが、範囲の狭い順に返されます
TF 実験のピーク数/データセット(ReMap)ReMap_list_datasets_for_target1 つの GEO シリーズに複数のデータセットが含まれることがあります(GSE23852/FOXA1 は 2 件で、ピーク数はそれぞれ 60,158 と 67,736)。合計を尋ねられていない限り、別々に報告してください。件数を取得するには count_peaks: true を指定します
タンパク質相互作用パートナー(STRING)STRING_get_protein_interactionspreferredName_B ではなく、partner フィールドを確認してください。エッジは内部 ID によって A/B の順に並ぶため、検索したタンパク質が約半数のエッジで列 A に位置します

どのツールがデータベースを利用しているか判断できない場合は、ブランド名ではなく関係性(例:「遺伝子と疾患の関連」「遺伝子セットのメンバー」)でカタログを検索してください。通常、ToolUniverse にはすでにそのツールがあります。

Allen Brain Atlas — 親構造ではなく、具体的な構造を回答する

参照アトラスではすべての構造に色が付けられており、AllenBrain_search_structures は color_hex_triplet を返します。「冠状断位置 181 で赤く注釈された領域はどれですか」のように色を指定する質問では、その色が付けられた末端構造を尋ねています。例:Lateral preoptic area = #F2483B。

その領域を含む上位領域(「Hypothalamus」など)で回答するのは、正しい領域を含んでいても誤りです。アトラスで色付けされるのは具体的な構造であり、親構造には別の色が付いています。名前または略称で検索し、color_hex_triplet を比較して、色が一致する構造を回答してください。同じ略称で、色が異なる複数の行(半球ごとの項目やオントロジーバージョンの項目)が返される場合があります。質問の表現と name が一致する行を優先してください。

Human Protein Atlas — 位置情報の両方のフィールドを報告する

HPA_get_subcellular_location は回答を 2 つに分けていますが、これは有意性の順位ではありません。

main_locations       : ['Nucleoplasm']
additional_locations : ['Primary cilium', ..., 'Cytosol']

「この抗体はどのような局在を示しますか」という質問では、HPA が報告する位置情報、つまり両方のリストが必要です。main_locations だけで回答すると、実際の局在を見落とすことになり、半分だけ正しい回答になりがちです(例:HPA が「Nucleoplasm, Cytosol」と報告しているのに、「Nucleoplasm」と回答する)。すでに両方をまとめている location_summary を使用するか、両方のフィールドを確認してください。

さらに、次の 2 点に注意してください。

  • 位置情報は細胞株全体を集約したものです。 HPA は、抗体を試験したすべての細胞株での免疫蛍光データをまとめています。質問で特定の細胞株(HEK293、U-2 OS)が指定されている場合は、リストを候補として扱い、どの細胞株について報告しているかを明記してください。集約値がその細胞株固有の値であるかのように示してはいけません。
  • 細胞型ごとの RNA 値が公開されるのは、発現が濃縮されている細胞型に限られます。 HPA の機械可読フィールドには、遺伝子の発現が濃縮されている細胞型について、特異性と nTPM/nCPM が示されます。任意の細胞型の値は公開されていません。質問された細胞型の値がない場合は、最も近い利用可能な数値で代用せず、その値がないと伝えてください。数値は桁違いになることがあります。

MSigDB セット名の規則(LAB-Bench で最も一般的なパターン)

ToolUniverse の MSigDB_* ツールは、LAB-Bench の問題で使われる複数のコレクションを対象としています。正しいセット名を指定してください。

  • C6 oncogenic signatures — 問題文に記載された正確なセット名を使います(例:ATM_DN.V1_DN、KRAS.600_UP.V1_UP)。
  • C3:MIR:MIRDB(miRDB v6.0 の miRNA 標的予測)— MIR<number>_<3P|5P>(例:MIR186_3P、MIR675_3P)。これは miRDB です。「miRDB にアクセスできない」と答えないでください。
  • C3:TFT:GTRD(GTRD の TF 標的遺伝子)— <TF>_TARGET_GENES(例:PGM3_TARGET_GENES)。これは GTRD です。
  • Hallmark — HALLMARK_<NAME>。
  • Mouse M5(MGI mammalian phenotype) — MP_<PHENOTYPE_IN_CAPS>(例:「increased melanoma incidence」→ MP_INCREASED_MELANOMA_INCIDENCE)。これらはマウスのセットです。ツールは自動的にヒト、次にマウスを試すか、species: "mouse" を渡してヒトでの不一致をスキップします。各遺伝子の MGI 表現型リスト全体を個別に照会するよりも、こちらを優先してください。

MSigDB_get_gene_set_members(操作 get_gene_set)は {genes:[...]} を返します。MSigDB_check_gene_in_set(操作 check_gene_in_set、パラメーター gene)は {is_member: bool} を返します。どちらも、一致した species コレクションを示します。

セットは選択肢ごとではなく、1 回だけ取得してください。 多肢選択問題では、1 つのセットについて 3~5 個の候補が問われるため、MSigDB_get_gene_set_members を 1 回呼び出せばすべてに回答できます。返されたリストと選択肢を自分で照合してください。MSigDB_check_gene_in_set は、単一遺伝子についての問題、またはセットが大きすぎて無理なく返せない場合に使います。

「データベース X にはあるが、データベース Y にはない」遺伝子・疾患の調査手順

こうした問題(例:「DisGeNet によると疾患 D に関連するが、OMIM には関連しない遺伝子はどれか?」)では、単一のクエリではなく、差分を調べる必要があります。

  1. D を UMLS CUI に解決します(umls_search_concepts)。
  2. OMIM 側: D について OMIM_search/OMIM_get_gene_map を実行し、OMIM が原因遺伝子とする遺伝子のセットを取得します。
  3. DisGeNet 側: DisGeNET_get_disease_genes(disease=CUI)(キュレーション済み)を実行します。アカデミックキーではキュレーション済みデータのみを取得できます。DisGeNet には、テキストマイニングによる階層も含まれますが、このキーでは取得できません。
  4. テキストマイニングによる補完(キュレーション済みデータが空の場合に、DisGeNet のテキストマイニング階層を調べます):PubTator3_LiteratureSearch("<GENE> <disease>") または PubTator3_GetEntityRelations(e1="@GENE_<sym>", type="associate") を実行します。D との文献中の共起があり、D に関する OMIM の結果には含まれない遺伝子が、「DisGeNet にはあるが OMIM にはない」遺伝子の答えです。
  5. 絞り込み: D の OMIM 原因遺伝子に該当する選択肢を除外します。残った選択肢の中から、DisGeNet/テキストマイニングによる関連があるものを選びます。OMIM に該当せず、何らかの関連シグナルがある選択肢が 1 つだけなら、それが答えです。
  6. どの情報源にも関連がある選択肢がない場合に限り、「情報不足」と回答してください。正解の遺伝子がキュレーション済みの DisGeNet、OMIM、PubTator の文献のいずれにも見つからない場合、アカデミック階層からアクセスできない DisGeNet 内部のテキストマイニングシグナルに基づいている可能性があります。推測するのではなく、そのことを正直に伝えてください。

説明された患者に対する薬剤選択(臨床事例)

「この患者に最も適切なのは次のうちどれですか?」という問いに、修飾因子(肝機能障害または腎機能障害、Child-Pugh 分類、強力な CYP3A4 阻害薬の併用、妊娠、アレルギーまたは禁忌)と複数の候補薬剤が示される事例です。一見、臨床判断を問う問題のようですが、決め手となるのは修飾因子であり、判断に必要な情報は各候補薬剤の FDA ラベルに記載されています。記憶に頼って回答するのが失敗の原因です。選択肢は通常、その症状に対していずれも妥当な薬剤ですが、候補を分けるのはラベルの記載だけです。

1. まず各選択肢のブランド名を一般名に置き換えます。 各選択肢について FDA_get_active_ingredient_info_by_drug_name を呼び出します。推論を始める前に行ってください。理由は 2 つあります。ラベル検索は有効成分をキーにしていること、そしてブランド名と一般名で、同じ薬剤が 2 つの選択肢に含まれていることがあるためです。その場合、どちらも正解にはなり得ません。区別できないため、両方を除外でき、多くの場合、その時点で問題の答えが決まります。重複があることを明記してください。ベンチマークの欠陥として報告する価値もあります。

2. 修飾因子に関係するセクションだけを調べます。 ラベル全体を取得するより、候補ごとに対象を絞って 1 回呼び出す方が効率的です。

事例に示されている内容確認するセクション
肝機能障害、Child-Pugh A/B/C、肝硬変FDA_get_pharmacokinetics_by_drug_name(肝機能障害のサブセクション)、続いて用量調整について FDA_get_dosage_and_storage_information_by_drug_name。Child-Pugh 分類の記載は、どちらかのセクション、または禁忌に含まれている場合があります。また、用語自体を使わずに肝機能障害について説明しているラベルもあります。1 つのセクションに記載がないからといって、ラベル全体に記載がないとは限りません。
腎機能障害、CrCl/eGFR、透析同じ 2 つのセクションです。まず薬物動態、次に用量を確認します。
「強力な CYP3A4 阻害薬/誘導薬を服用中」、特定の併用薬FDA_get_drug_interactions_by_drug_name。ラベルに併用の組み合わせではなく代謝経路が記載されている場合は、FDA_get_clinical_pharmacology_by_drug_name も確認します。
妊娠、授乳中、「妊娠を計画中」FDA_get_pregnancy_or_breastfeeding_info_by_drug_name(胎児への危害が具体的に問われている場合は FDA_get_teratogenic_effects_by_drug_name)。
アレルギー、または薬剤を使用できない併存疾患FDA_get_contraindications_by_drug_name、続いて FDA_get_boxed_warning_info_by_drug_name。
高齢者/小児患者FDA_get_geriatric_use_info_by_drug_name/FDA_get_pediatric_use_info_by_drug_name。
その薬剤では単に疾患を治療できない可能性があるFDA_get_indications_by_drug_name。

命名規則は一貫しており、FDA_get_<section>_by_drug_name です。そのため、ここに記載されていないセクションを探す場合は、ツール名を推測するのではなく、カタログでセクション名を検索してください。

3. 消去法で判断し、各選択肢を除外した理由を示します。 通常、正解は修飾因子によって除外されない唯一の候補です。たとえば、肝機能障害では禁忌、実施できない用量減量が必要、指定された併用薬と相互作用する、または対象疾患に適応がない、といった理由で他の候補を除外できます。各選択肢を除外する根拠となるラベルの文言を引用してください。ラベルの一文を引用していない事例問題の回答は、引用をまとった推測にすぎません。

検索しすぎないでください。 有効成分を特定し(選択肢ごとに 1 回呼び出し)、残った候補について 1 つのセクションを確認します。すべての選択肢で、修飾因子についてラベルに記載がない場合は、その旨を伝え、適応に基づいて回答してください。判断材料を求めてセクションを次々と取得し続けないでください。

マウス表現型の照合(MGI)— フォールバックのみ

まず MP_<PHENOTYPE> MSigDB セット(上記)を試してください。選択肢ごとに 1 回の呼び出しで回答でき、同じ MGI アノテーションを使用しています。セット名が解決されない場合に限り、この遺伝子ごとの方法を使用してください。

MGI_get_phenotypes は、遺伝子ごとに phenotype_statement 文字列のリストをページネーション付きで返します。遺伝子に一致するステートメントが後のページにあることはよくあるため、1 ページだけで該当なしと判断することはできません。「表現型 P にアノテーションされている遺伝子はどれか」に答えるには、候補となる各遺伝子を照会し、ステートメントに P と一致するフレーズが含まれるものを選びます(ステートメントは「がん発生率の増加」「腫瘍」など、人が読みやすい形式です)。正確な MP ID 文字列ではなく、表現型の概念で照合してください。複数が一致する場合は、最も具体的なステートメントを優先してください。

計算手順(回答が検索ではなく計算による場合)

GWAS の「最高 p 値」は最も有意な結果を意味します

GWAS の記述では、「最高 p 値」「トップヒット」「最も強い関連」はいずれも最も有意な結果、つまり数値が最小の p 値を意味します。「最高」を文字どおりに読むと、研究で最も弱い関連を選ぶことになり、ほとんどの場合、意図されたものではありません。

GCST005528 では、文字どおりの解釈では p = 1e-06 の rs2476491-? になりますが、意図された回答は p = 3e-174 の rs7775055-G です。

p 値の昇順に並べ替え、そのヒットを報告してください。文言が実際にどちらの意味にも取れる場合は、最も有意な結果を示し、数値的に最大の p 値を持つのは別の SNP であることを一言添えてください。文字どおりの解釈を黙って選ばないでください。

ゲノムウィンドウ — アンカー塩基を数に含めます

「X の上流 N bp と下流 M bp」と説明されるウィンドウは、アンカー塩基 X 自体を含むため、N + M + 1 塩基にわたります。TSS の上下流 100 bp を尋ねる場合は 200 nt ではなく 201 nt です。この 1 塩基のずれは、見た目は正しくても配列の回答が誤っている最も一般的な原因です。

同様に、呼び出すツールの座標規約にも注意してください。

規約start..end の長さ使用例
1-based inclusiveend - start + 1Ensembl region、UCSC ブラウザーのテキスト、IGV、samtools
0-based half-openend - startUCSC REST API、BED

UCSC_get_sequence は、region に指定した座位(1-based inclusive)、または coordinate_system とともに明示的に指定した chrom/start/end を受け取ります。region_1based と requested_length を返すため、長さを確認できます。回答する前に、必ず返された長さが質問で求められた長さと一致するか確認してください。残した塩基がすべて正しくても、長さが違う配列は誤りです。

単一の決定的な数値/組み合わせの回答を求める質問は、推定したり頭の中で計算したりせず、必ずコードを実行して答えを求めてください。これは配列に関する質問(ORF 数、制限酵素断片/サイズ、GC 含量、翻訳)だけでなく、その他の厳密に計算可能な質問、たとえば遺伝学の分離/メンデル遺伝や倍数体の配偶子比、組み合わせ確率、化学量論、投与量/PK の計算、数え上げ問題にも当てはまります。暗算は、避けられる誤りの最大の原因です。モデルは数え間違いや掛け算の間違いを起こしやすいためです。「ケースを列挙する/確率を掛け合わせる/対象を数える」に帰着する質問では、たとえ生物学の「推論」問題のように見えても、短い Python スニペットを書いて実行し、その戻り値を正確に報告してください。答えが確定した数値になる場合は、推論で済ませず計算してください。質問の文言にある規約(どちらの鎖か、線状か環状か、どの交配/分離モデルか)に合わせ、回答を検証できるよう、使用した規約を明記してください。 最終回答の徹底(「計算は正しいのに回答を間違える」ことを避ける)。 コードが値を返したら、選択肢の文字に注意深く、明示的に対応付けてください。計算された値を引用し、それと完全に一致する選択肢を見つけます(断片サイズの集合なら、すべての要素を含む集合全体を照合し、個数なら整数を照合します)。計算は正しかったのに選択肢の文字を間違えるケースが驚くほど多くあります。こうしたミスを避けるため、[ANSWER] を出力する前に、計算結果と各選択肢を読み直して照合してください。

手順:「Nアミノ酸より長いタンパク質をコードするORFはいくつあるか?」

質問の表現どおりに読み取ってください。「DNA配列」<X>「にORFはいくつあるか」と尋ねている場合、対象は与えられた一方の鎖のみです。数えるのはその鎖だけ(3つのフレーム)であり、両方の鎖ではありません。DNAは二本鎖だからという理由で、逆相補鎖を「親切心から」追加しないでください。質問では1本の配列文字列が提示され、その「中に」あるものを尋ねています。したがって、「両方の鎖」「二本鎖」「いずれかの鎖」「逆相補鎖」と明示されていない限り、逆鎖は対象外です。逆鎖を既定で追加することが、こうした問題で最もよくあるミスの原因です。そうしないようにしてください。インフレームの終止コドンに到達するすべての異なる開始コドン(ATG)を数えてください。重複するORFや入れ子になったORFも、それぞれ数えます(同じフレームで1つの終止コドンより前に2つのATGがある場合、ORFは2つです)。長さの条件は厳密です。タンパク質の長さ(aa)は(stop_index − start_index)です。「Nより長い」場合は、aa_len > N を満たすものだけを数えます。与えられた鎖についてコードが返した個数を回答してください。両鎖についても計算した場合でも、質問で求められている片鎖の回答に代えてはいけません。

from Bio.Seq import Seq

def count_orfs(dna, min_aa, both_strands=False):
    """Count ORFs (ATG..in-frame-stop) encoding a protein STRICTLY longer than min_aa.
    Counts every qualifying ATG, including nested/overlapping ORFs. Forward strand
    by default; set both_strands=True only if the question asks for both strands."""
    dna = "".join(dna.split()).upper()
    strands = [Seq(dna)]
    if both_strands:
        strands.append(Seq(dna).reverse_complement())
    n = 0
    for s in strands:
        for off in range(3):                       # three reading frames per strand
            trimmed = s[off: len(s) - (len(s) - off) % 3]
            prot = str(trimmed.translate())        # '*' marks stop codons
            i = 0
            while i < len(prot):
                if prot[i] == "M":                 # ATG
                    stop = prot.find("*", i)
                    if stop != -1 and (stop - i) > min_aa:
                        n += 1                      # count this ATG; do NOT jump past stop
                i += 1
    return n
# e.g. count_orfs(seq, 12) -> integer; report exactly that number.

手順:制限酵素消化の断片数とサイズ

# Count fragments after digesting with named enzyme(s).
# LINEAR DNA is the default (a plain sequence string): fragments = cuts + 1.
# Only use circular=True if the question says plasmid/circular.
from Bio.Seq import Seq
from Bio.Restriction import RestrictionBatch

def digest(dna, enzymes, circular=False):
    dna = "".join(dna.split()).upper()
    rb = RestrictionBatch(enzymes)            # e.g. ["EcoRI","BamHI"] or ["AluBI","MalI"]
    cut_positions = sorted(p for sites in rb.search(Seq(dna), linear=not circular).values() for p in sites)
    if not cut_positions:
        return 1, []                          # uncut: one fragment (linear or circular)
    n_frag = len(cut_positions) if circular else len(cut_positions) + 1
    return n_frag, cut_positions

制限酵素名に対して RestrictionBatch がエラーを返した場合(イソシゾマー/まれな販売元の名称など)は、DNA消化ツール(Biopythonへのフォールバック機能あり)を使って確認するか、認識配列に対応付けてから再実行してください。推測で済ませてはいけません。

手順:遺伝学の分離/配偶子と子孫の比率(記憶に頼らず列挙する)

配偶子の頻度、子の遺伝子型の割合、倍数体の分離など、比率に関する遺伝学の問題は、等確率の対立遺伝子の組み合わせを列挙することで正確に計算できます。暗記した比率に頼らず、導き出してください。ある座位で親が対立遺伝子の多重集合を持つ場合、ランダムな染色体分配のもとで、配偶子が受け取る対立遺伝子の数に応じて親の対立遺伝子から選ぶすべての組み合わせは、等確率です。Counter と combinations を使って遺伝子型のクラスを数えてください。

from itertools import combinations
from collections import Counter

def gamete_ratio(alleles, gamete_size):
    """Genotype distribution of gametes under random segregation.
    e.g. tetraploid AAaa -> gametes carry 2 alleles: gamete_ratio(['A','A','a','a'], 2)."""
    classes = Counter("".join(sorted(c)) for c in combinations(alleles, gamete_size))
    return dict(classes)   # e.g. {'AA':1, 'Aa':4, 'aa':1}

def progeny_fraction(parent_alleles, gamete_size, target_gamete, selfing=True):
    """Fraction of progeny that are homozygous target (e.g. 'aa' gamete x 'aa' gamete -> aaaa)."""
    g = gamete_ratio(parent_alleles, gamete_size); tot = sum(g.values())
    p = g.get(target_gamete, 0) / tot
    return p * p if selfing else p   # selfing/self-cross: square the gamete frequency
# tetraploid AAaa: gamete_ratio(['A','A','a','a'],2) = {'AA':1,'Aa':4,'aa':1};
# recessive 'aa' gamete freq = 1/6, so aaaa progeny under selfing = (1/6)^2 = 1/36.

列挙した比率を選択肢と照合してください(例えば、配偶子のAA:Aa:aa比が1:4:1となるシナリオでは、aa 配偶子が最大となり、その結果 aaaa の子孫が最大になります)。計算した割合/比率を示し、それに一致する選択肢を選んでください。

解釈:コードが返した正確な値を報告してください(ORF数、断片数/サイズの集合全体、最長ORFの長さ(ntまたはaa)、配偶子の比率/子孫の割合など。質問で求められている形式どおりにします)。選択した規則(順方向のみか両鎖か、直鎖か環状か、分離モデルなど)を必ず明記し、判断の根拠を確認できるようにしてください。解釈が2通りあり得る場合は両方を計算し、質問の文字どおりの表現に合う方を選んでください。そのうえで、回答前に計算結果と選択肢を明示的に照合してください(上記の最終回答の徹底を参照)。

解釈

  • アンカーに属する項目/関連情報をツールの結果が示している場合、その結果を正とし、そこに含まれる選択肢を選んでください。
  • ツールが名前に関するエラー(例:セットが見つからない)を返した場合、「情報不足」と結論付ける前に、上記の規則に基づいて名前を導き直してください。
  • 適切なクエリに対して権威あるツールが空の結果を返した場合にのみ、「情報不足」が正解です。クエリを試していないことを理由にしてはいけません。

制限事項(正直な説明)

  • キーが必要なソース:DisGeNET_* および OMIM ツールには、DISGENET_API_KEY/OMIM キーが必要です。キーがない場合は、キー不要の OpenTargets_*/MyDisease_* に切り替え、使用したソースを明記してください。キー不要のソースでは回答できず、質問が特定のデータベースに関するものである場合は、実際に「情報が不十分」なケースです。その旨を伝えてください。

  • リリースの不一致:ツールが参照するデータベースのスナップショットは、質問で指定された正確なリリースと異なる場合があり、数量によっては差が小さくありません。派生スコアはリリース間で再計算されるため、同じ遺伝子でも桁違いの値になることがあります。gnomad_get_constraint による gnomAD pLI:

    遺伝子gnomAD r4gnomAD r2.1
    APOC20.0468750.401638
    APOC10.0863230.216848

    ツールに dataset/リリースのパラメーターがある場合は、質問で指定されたリリースを設定し、使用したリリースを明記してください。質問で指定されたリリースにツールが対応していない場合は、その数値がリリースに依存しないかのように示すのではなく、実際に使用したリリースを報告してください。ここでは、pLI 値だけでは8倍の違いがあり、どのリリースの値かが不明確です。

  • このスキルは、事実の検索に根拠を与えます。ユーザーデータファイルを使った計算には、代わりにデータ分析ルータースキルを使用してください。

コメント