mcpField
S
sar-analysis

sar-analysis

github.com/jaechang-hitsデータ・データベース38469 回インストール6 日前に更新
リポジトリ

sar-analysis について

sar-analysisは、化合物系列の構造活性相関を調べるRDKitベースのガイドスキルです。共通骨格とR基を解析し、構造を整列したレポートや測定活性に基づく比較を作成します。

主な機能

  1. 01MCSによる共通骨格の特定
  2. 02分子のR基分解
  3. 03親構造に合わせたフラグメント整列
  4. 04活性ヒートマップレポートの作成
  5. 05同一位置のペア比較による根拠提示

活用シーン

  1. 01類縁体間の置換基効果の比較
  2. 02化合物系列における活性傾向の確認
  3. 03創薬化学向けの構造整列レポート作成

インストール

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

$npx skills add https://github.com/jaechang-hits/sciagent-skills --skill sar-analysis

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

詳細

SAR解析


メタデータ

短い説明:RDKitを使用した構造活性相関(SAR)解析の包括的なガイドです。

著者:Ohagent Team

バージョン:1.0

最終更新日:2025年12月

ライセンス:CC BY 4.0

商用利用:✅ 許可


概要

構造活性相関(SAR)解析は、化学系列における構造の系統的な変化と生物活性の変化を関連付ける、医薬品化学の中核的なワークフローです。その目的は、(1)一連の類縁体に共通する骨格(最大共通部分構造、MCS)を特定し、(2)各分子を骨格とそのR基置換基に分解し、(3)同等の位置にある置換基を視覚的に比較できるようにすべての分子を整列させ、(4)置換基の変化と力価を関連付けて、検証可能な設計仮説を導き出すことです。

このガイドでは、インタラクティブなHTMLレポート(整列したコア/R基を含む化合物テーブルと活性ヒートマップ)と、同じR位置にある置換基を明示的に比較するSARの説明文を作成する、再現可能なRDKitベースのSARワークフローを定義します。SMILES、化合物識別子、数値の力価(IC50、Ki、EC50、阻害率など)を含む活性テーブルでの使用を想定しています。

主な概念

最大共通部分構造(MCS)

MCSは、ある集合の分子のすべて(または設定可能なしきい値以上)に共通する、最大の連結部分構造です。RDKitのrdFMCS.FindMCSは、調整可能な原子/結合の比較ルールに基づいてこの骨格を検索します。SARでは、MCSはすべての類縁体を分解・整列するための基準テンプレートとなります。threshold=0.8を指定すると、候補部分構造を含む分子が80%の場合でもMCSを定義できるため、threshold=1.0よりも外れ値に対して頑健です。ringMatchesRingOnly=TrueとcompleteRingsOnly=Trueを指定すると、化学的に意味のない不完全な環フラグメントを防げます。

R基分解

R基分解(rdRGroupDecomposition.RGroupDecompose)では、各分子をMCSコアに対応付け、コア以外のフラグメントを列挙されたR位置(R1、R2、…)に割り当てます。出力は、分子ごとの辞書{Core, R1, R2, …}です。一定のR位置(すべての分子が同じフラグメントを持つ位置)はSARの分析には有用でないため、レポートから除外し、活性を左右する実際の可変位置に注目できるようにします。

比較可能な2D描画のための部分構造整列

SARの可視化を解釈可能にするには、コアと各R基を親分子と同じ向きで描画する必要があります。推奨される手順では、次の3つのフォールバック戦略を順に使用します。(1)直接GetSubstructMatchを実行する、(2)AdjustQueryProperties(makeDummiesQueries=True)を使ってR基のダミー原子をクエリとして扱ったうえで再度マッチングする、(3)最後にuseChirality=Falseで試行する。マッチングが見つかったら、親分子のコンフォーマーからフラグメントへ原子座標をコピーします。これを行わないと、R基のセルが任意の標準配向で描画され、視覚的なSARをほとんど読み取れなくなります。

活性ヒートマップと比較分析

活性列に対数スケールのカラーグラデーション(緑=高力価/低IC50、赤=低力価/高IC50)を適用すると、系列全体の傾向を一目で把握できます。併記する説明文では、置換基の効果に関する主張をすべて、同じR位置での明示的なペア比較によって裏付ける必要があります。SARの根拠となる単位は「化合物A(R1=X、IC50=…)対 化合物B(R1=Y、IC50=…)」であり、根拠のない一般化ではありません。

判断フレームワーク

SAR analysis pipeline
└── Have SMILES + activity for >= 4 analogues?
    ├── No  -> Insufficient data; collect more analogues first
    └── Yes -> Run rdFMCS.FindMCS(threshold=0.8, ringMatchesRingOnly=True)
        ├── MCS too small (<5 atoms) -> Series is too diverse;
        │                               cluster first, then run SAR per cluster
        └── MCS reasonable -> RGroupDecompose
            └── For each fragment alignment to parent:
                ├── Strategy 1: GetSubstructMatch(direct)  -- works for canonical cases
                │   └── No match -> Strategy 2
                ├── Strategy 2: AdjustQueryProperties(makeDummiesQueries=True)
                │               -- handles dummy R-group atoms
                │   └── No match -> Strategy 3
                ├── Strategy 3: GetSubstructMatch(useChirality=False)
                │               -- handles stereochemistry mismatches
                │   └── No match -> Compute2DCoords as fallback (lose alignment)
                └── Drop constant R-positions, build HTML, draw with DrawMoleculeACS1996
状況推奨する選択肢理由
明確な骨格を持つ標準的な同族体系列MCS threshold=0.8, ringMatchesRingOnly=True, completeRingsOnly=True環を維持しながら、少数の外れ値を許容できます
多様性の高いセット(例:HTSヒットリスト)まずクラスター化(Tanimoto/Murcko)し、その後クラスターごとにSARを分析します多様なケモタイプ全体に対して単一のMCSを使うと、小さすぎて役に立たなくなります
系列内に立体異性体があるまず Strategy 1 を試し、うまくいかなければ Strategy 3(useChirality=False)に切り替えますキラリティの違いによって描画の位置合わせが崩れないようにします
クエリにR基の結合ダミーを持つ類縁体AdjustQueryProperties(makeDummiesQueries=True) を使った Strategy 2ダミー原子がクエリとして扱われ、実際の重原子とマッチします
すべての類縁体で1つのR位置が一定レポートとコア構造の描画から除外します一定の位置は情報に乏しく、表を煩雑にします
活性が桁違いに広い範囲にわたるlog10(activity) に基づくヒートマップで色分けします線形スケールでは視覚的なダイナミックレンジがつぶれてしまいます
論文またはレポート用の描画MolDraw2DSVG 経由で DrawMoleculeACS1996 を使いますACS1996 はメディシナルケミストリーの図で事実上の標準です

ベストプラクティス

  1. 列名を決めつける前にデータフレームを確認します。 実際の活性データ表はさまざまです。名前をハードコードするのではなく、df.head() から SMILES、活性、ID の各列を自動検出してください。これにより、ユーザーデータでのサイレントな失敗を防げます。
  2. MCS の前に明示的な水素を追加します。 Chem.AddHs を使うと、MCS が重原子の原子価や環閉鎖を正しく考慮できます。これを行わないと、本来同一の骨格を見落とすことがあります。
  3. 一定のR位置を取り除きます。 すべての類縁体でフラグメントが同一であるR位置は、SAR情報をもたらしません。その列を表から削除し、コア構造の描画から一定の結合位置を取り除くことで、変化する位置を目立たせます。
  4. フラグメントではなく、親分子に常に位置合わせします。 マッチした原子マップを使い、各フラグメントに座標を親分子からコピーします。親分子を標準的な方法で描画した後、フラグメントを一から再描画すると、行間の比較可能性が失われます。
  5. 活性のヒートマップには対数スケールを使います。 力価は通常2~4桁の範囲にわたるため、線形のカラースケールでは、重要な低IC50領域がつぶれてしまいます。低IC50(高力価)を緑、高IC50(低力価)を赤に割り当てます。
  6. すべてのSARの主張を、同じR位置でのペア比較によって裏付けます。 「小さな電子求引基はR1で活性を高める」といった主張は、「化合物7(R1=F、IC50=0.5 µM)対化合物1(R1=Me、IC50=5.2 µM)」のような直接比較で裏付ける必要があります。裏付けのない一般化は、証拠として認められません。
  7. 設計仮説ごとに3~4種類の類縁体を試験します。 1か所の置換基変更だけでは実験誤差の影響を受ける可能性があります。同じ位置に複数の類縁体を用いることで、信頼できる傾向を示せます。
  8. DrawMoleculeACS1996 で描画します。 ACS1996 のスタイルを使うと、結合長、原子ラベル、フォントの選択が統一され、メディシナルケミストリーの出版物の標準に沿った図になります。1つのレポート内でスタイルを混在させないでください。

よくある落とし穴

  • 落とし穴:"SMILES" や "IC50" のような列名をハードコードする。 ベンダーや ELN によってエクスポートされるヘッダーは異なります。Smiles や Standard Value を使うユーザーがいると、スクリプトはそこで動作しなくなります。

    • 回避方法: df.columns と df.head() を確認し、内容に基づいて SMILES/活性/ID 列を検出します(有効な SMILES の解析率、数値、重複のない文字列)。
  • 落とし穴:MCS の前に Chem.AddHs を実行しない。 水素を省略した分子では、原子価や環の認識の違いにより、予想より小さな MCS が得られる場合があります。

    • 回避方法: rdFMCS.FindMCS を呼び出す前に、必ず mols_for_mcs = [Chem.AddHs(m) for m in mols] で前処理します。
  • 落とし穴:ノイズの多い系列で threshold=1.0 を設定する。 特異な骨格を持つ外れ値が一つあるだけで、MCS が小さな断片に縮小し、他の化合物の R 基分解が台無しになります。

    • 回避方法: threshold=0.8(またはそれ以下)を使用し、系列の 80% に含まれる構造から MCS を定義します。外れ値は個別に確認します。
  • 落とし穴:各フラグメントの描画で Compute2DCoords を個別に実行する。 各フラグメントはそれぞれ独自の標準的な 2D 配置になるため、同等の原子が行ごとに異なる位置に現れ、視覚的な SAR が読み取りにくくなります。

    • 回避方法: フラグメントと親分子をマッチングし(3 戦略のフォールバックを使用)、親分子の配座からフラグメントの配座に座標をコピーします。
  • 落とし穴:ダミー R 基原子で失敗する。 フラグメントに R 基のダミー原子(*)が含まれる場合、ダミー原子はデフォルトでクエリとして扱われないため、GetSubstructMatch はマッチを返しません。

    • 回避方法: マッチを再試行する前に、makeDummiesQueries=True を指定した AdjustQueryProperties(params) を適用します(戦略 2)。
  • 落とし穴:単一の誤差指標(例:平均のみ)だけを報告する。 ばらつきを示さない傾向は解釈できません。また、同じ位置での対比がない置換基効果の主張は SAR ではありません。

    • 回避方法: 各 R 位置について、固有の置換基と、それを持つ化合物の活性をすべて列挙します。各主張はペアごとの比較から導きます。
  • 落とし穴:nM 単位の IC50 に線形スケールのヒートマップを使う。 興味深い効力の範囲の大部分が、1~2 色の区分に押し込まれてしまいます。

    • 回避方法: log10(IC50) または pIC50 = -log10(IC50_in_M) で色分けします。これにより、桁違いの範囲全体で均一な色の差が得られます。
  • 落とし穴:R 基分解のすべての列を SAR 軸として扱う。 すべての類縁体で同じフラグメントを持つ一定の R 位置とコア自体は、SAR 変数ではありません。

    • 回避方法: 分解後、すべてのエントリーが同一の列をプログラムで削除し、それらの結合点をコア画像から取り除きます。

ワークフロー

あなたはケモインフォマティクスと Python の専門家です。RDKit を使って SAR(構造活性相関)解析を実施します。

タスク要件:

  1. データの読み込み: CSV ファイルを読み込みます。列名が固定されていると仮定しないでください。代わりに、df.head() などを使ってデータフレームを確認し、化合物キー(例:'Compound Key'、'ID'、'Name')、活性(例:'Standard Value'、'IC50'、'Activity')、SMILES(例:'Smiles'、'SMILES'、'Structure')の列を自動的に特定します。

  2. コアの特定(MCS):

    • rdFMCS.FindMCS を使って、有意な共通骨格を見つけます。
    • 前処理: MCS を見つける前に、分子に Chem.AddHs を適用します。
    • 参考コード: 堅牢にコアを特定するため、以下のパラメーター設定を使用します。
      mols_for_mcs = [Chem.AddHs(m) for m in mols]
      mcs_res = rdFMCS.FindMCS(
          mols_for_mcs,
          threshold=0.8,
          ringMatchesRingOnly=True,
          completeRingsOnly=True,
          atomCompare=rdFMCS.AtomCompare.CompareElements,
          bondCompare=rdFMCS.BondCompare.CompareOrder
      )
      core_mol = Chem.MolFromSmarts(mcs_res.smartsString)
      AllChem.Compute2DCoords(core_mol)
      
  3. R グループの分解と調整:

    • Core に基づいて分解を実行します。
    • 調整: すべての分子で同一(定数)となる R グループの列を除外します。これらの定数点も Core の可視化から削除します。
  4. 画像の生成と位置合わせ(厳密な座標抽出):

    • 目標: Core と R グループが元の分子に視覚的に完全に重なるようにします。

    • 描画スタイル: 分子を描画する際は、一貫性のあるプロフェッショナルな可視化のため、必ず DrawMoleculeACS1996 を使用します。

      from rdkit.Chem.Draw import rdMolDraw2D
      
      drawer = rdMolDraw2D.MolDraw2DSVG(-1, -1)
      rdMolDraw2D.DrawMoleculeACS1996(drawer, mol)
      
      drawer.FinishDrawing()
      svg = drawer.GetDrawingText()
      
      svg = svg.replace("width='", "width='100%' data-original-width='")
      svg = svg.replace("height='", "height='100%' data-original-height='")
      
    • 参照実装: 完全な重ね合わせを保証するには、この特定の位置合わせロジックを使用します。

      matches, unmatched_indices = rdRGroupDecomposition.RGroupDecompose([core_mol], mols, asSmiles=False, asRows=False)
      
      def align_substructure_to_parent(sub, parent):
          if not sub or not parent: return False
          try:
              # Strategy 1: Direct match
              match = parent.GetSubstructMatch(sub)
              
              # Strategy 2: Convert dummies to queries (handle R-group attachment points)
              if not match:
                  params = Chem.AdjustQueryParameters()
                  params.makeDummiesQueries = True
                  params.adjustDegree = False
                  params.adjustRingCount = False
                  sub_query = Chem.AdjustQueryProperties(sub, params)
                  match = parent.GetSubstructMatch(sub_query)
              
              # Strategy 3: Try without chirality
              if not match:
                   match = parent.GetSubstructMatch(sub, useChirality=False)
      
              if match:
                  conf_parent = parent.GetConformer()
                  conf_sub = Chem.Conformer(sub.GetNumAtoms())
                  for sub_idx, parent_idx in enumerate(match):
                      pos = conf_parent.GetAtomPosition(parent_idx)
                      conf_sub.SetAtomPosition(sub_idx, pos)
                  
                  sub.RemoveAllConformers()
                  sub.AddConformer(conf_sub)
                  return True
          except:
              pass
          return False
      
      # Usage in loop:
      # 1. Align Original Molecule to Core template
      try:
          AllChem.GenerateDepictionMatching2DStructure(m, core_mol)
      except:
          AllChem.Compute2DCoords(m)
          
      # 2. Align fragments (Core/R-groups) to Original Molecule
      # Copy coords FROM original molecule TO fragment
      if not align_substructure_to_parent(fragment, m):
           AllChem.Compute2DCoords(fragment)
      
      match_core = matches['Core'][i]
      align_substructure_to_parent(this_core, mol)
      core_img = mol_to_base64(this_core)
      
  5. HTML 出力(sar_analysis_report.html):

    • デザイン: CSS スタイルを使用して、すっきりとした、モダンで、視覚的に魅力的な HTML ページを作成します。読みやすさと見栄えを高めるために、モダンな CSS 機能(微妙なシャドウ、滑らかなトランジション、すっきりとしたタイポグラフィ、適切な配色、レスポンシブデザインなど)を使用します。特に、構造を明確に表示できるよう、テーブルの列幅を十分に確保してください。分子が縮小されず、容易に判別できるよう、画像を含む列(Original、Core、R-groups)には少なくとも 300px の min-width(例:min-width: 300px;)を設定してください。
    • テーブル構造: Compound Key、Activity、Original Molecule、Core、および可変の R グループ。
    • 活性ヒートマップ: 対数スケールのグラデーションを使用して、Activity セルに背景色を適用します(低い値/高い活性には緑、高い値/低い活性には赤)。
    • 画像の処理:
      • 分子を SVG(推奨)または Base64 PNG 文字列に変換します。
      • 検証: 画像の生成に成功したか確認します。有効な画像のみを埋め込み、それ以外の場合はテキストのプレースホルダー(<td>No Image</td>)を使用します。
    • インタラクティブな並べ替え:
      • HTML ページに「並べ替え順序を切り替え」ボタンを追加します。
      • 機能: ボタンをクリックすると、次の 3 つの表示が切り替わります。デフォルト表示(元の CSV 順)、活性の昇順表示(Activity の値が低い順)、活性の降順表示(Activity の値が高い順)。
      • 実装: クライアント側で並べ替えロジックを処理するために JavaScript を使用します。正しく並べ替えられるよう、Activity 列の値が数値として解析されることを確認します。
    • 要約: SAR の知見(R グループと活性の相関)について、簡潔なテキストの要約を含めます。
  6. 分析テキストの出力:

    • 分析結果に基づいて、SAR の知見を簡潔なテキストで分析します。

    • 出力形式: このテキストを会話に直接出力します(ファイルには保存しないでください)。

    • 指示: 分析テキストでは、次の厳格なガイドラインに従ってください。

      あなたは構造活性相関(SAR)分析を専門とする科学アシスタントです。あなたのタスクは、提供された分子データを分析し、簡潔な SAR レポートを作成することです。SAR 分析をユーザーが理解しやすいよう、レポートには必ず分子 ID を含めてください。

      提供されたデータに基づき、以下の分子の SAR を分析してください。

      基本的な指示:

      1. 足場構造と置換基を特定する:

        • 共通のコア構造を特定し、可変位置を R1、R2 などとラベル付けします。これらのラベルは一貫して使用してください。
      2. 比較分析を行う:

        • 🚨 重要要件:置換基の影響に関するすべての主張について、同じ位置にある別の置換基が異なる活性を示した場合との明示的な対比によって、必ず根拠を示してください。説明する活性の傾向はすべて、化合物間の直接比較によって裏付ける必要があります。根拠のない一般化は認められません。🚨
      3. メカニズムを推定する:

        • 立体的要因、電子的要因、および分子間相互作用の可能性(例:水素結合、疎水性相互作用)を考慮し、活性変化の妥当な理由を提案します。
      4. データの完全性を評価し、類縁体を提案する(必須の評価ステップ):

        • 分析の最後に必須のステップとして、提供された SAR データの完全性を批判的に評価する必要があります。

        • 重要な化合物に確かな SAR 結論を導くための明確な比較対象がなく、その結果として重大な曖昧さがあると特定した場合に限り、新しい類縁体を提案する必要があります。

        • 提案の根拠も、次の具体的な論理に従う必要があります。

          • 曖昧さを特定する:不確実性の原因となる具体的な化合物とそのデータを挙げます。

          • 不足している比較対象を明示する:どの比較が必要で、それができない理由を説明します。

          • 解決策を提案する:曖昧さを解消できる、具体的な類似体を提案します。

          • データが十分であると判断した場合は、その旨を下記の専用セクションに記載するだけでかまいません。

      5. 結論:

        • 主なSARの知見を要約し、最も有望な類似体を特定します。

      出力形式とスタイル:

      • 率直に記述する: 分析をすぐに開始します。「分析します……」や「分析結果は以下のとおりです……」のような会話的な書き出しは使用しないでください。
      • 冒頭の文: 主な構造変更と重要な知見を要約した一文で始めます。
      • 科学的な語調: 「……を示唆しています」「……が原因である可能性が高い」など、正確で推測を含む表現を使用します。
      • 形式: わかりやすさのために Markdown を使用します(太字や箇条書きなど)。
      • 提案専用セクション: 分析の最後に、### Suggestions for Further Study というタイトルの独立したセクションを必ず含めてください。
        • このセクションでは、指示 #4 に基づいて提案する類似体を提示します。
        • 提示されたデータが十分で、新たな類似体は不要と判断した場合も、このセクションを必ず含め、次のように記載してください:「提示された類似体は、検討した位置における初期SAR分析を十分に行うための比較データを提供しています。」この手順を省略しないでください。
      • 簡潔にする: 要求されたSAR分析のみを提示します。
      • 積極的なフォローアップ: 回答の最後(結論の後)に、ユーザーへの直接的な質問形式で、次のステップまたは分析を明示的に提案してください(例:「……しましょうか?」)。

      出力例の構成:

      提示された化合物のSAR分析から、R1位置の小さな電子求引基が抗菌活性に不可欠であることが示されています。たとえば、類似体 7(R1=F、IC50 = 0.5 µM)は、親化合物 1(R1=Me、IC50 = 5.2 µM)に比べて10倍の改善を示しており、立体的に制約された空間における重要な相互作用を示唆しています。一方、類似体 12 のフェニル基のように、R1位置にかさ高い置換基を導入すると、活性が完全に失われました。

      Suggestions for Further Study

      R1位置の立体的なかさ高さが不利に働くという仮説を検証するには、その位置に単純な水素を持つ類似体(化合物1の脱メチル体)の合成が推奨されます。これにより、無置換骨格の基準活性が得られ、結合ポケットのサイズ制約を確認できます。

      提案した脱メチル類似体の合成経路を設計しましょうか?

出力:

  • 最終版の sar_analysis_report.html ファイルを提供してください。
  • 分析テキストをチャットに出力してください。

参考文献

コメント