mcpField
M
medchem

medchem

github.com/jackspaceデータ・データベース1635 回インストール12 週間前に更新
リポジトリ

medchem について

創薬向けの分子フィルタリングと優先順位付けを行う Python ライブラリです。メディシナルケミストリー規則、構造アラート、制約条件、化学基の検出、複雑度指標、クエリ言語を備え、化合物ライブラリの処理に利用できます。

主な機能

  1. 01メディシナルケミストリー規則の適用
  2. 02構造アラートのスクリーニング
  3. 03化学基の検出
  4. 04分子複雑度の計算
  5. 05制約とクエリ条件の組み合わせ

活用シーン

  1. 01化合物ライブラリの初期選別
  2. 02リード最適化候補の絞り込み
  3. 03特定の官能基を持つ分子の検索
  4. 04複雑度と物性条件による選別

インストール

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

$npx skills add https://github.com/jackspace/claudeskillz --skill medchem

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

同梱ファイルSKILL.json

詳細

Medchem

概要

Medchem は、創薬ワークフローにおける分子のフィルタリングと優先順位付けのための Python ライブラリです。確立されたものから新しいものまで、数百種類の分子フィルター、構造アラート、メディシナルケミストリーのルールを適用して、化合物ライブラリを大規模かつ効率的に選別し、優先順位を付けられます。ルールとフィルターは状況に応じて異なるため、専門知識と組み合わせた指針として使用してください。

このスキルを使用する場面

このスキルは、次の場合に使用してください。

  • 化合物ライブラリにドラッグライクネスのルール(Lipinski、Veber など)を適用する
  • 構造アラートや PAINS パターンで分子をフィルタリングする
  • リード最適化のために化合物の優先順位を付ける
  • 化合物の品質とメディシナルケミストリー特性を評価する
  • 反応性または問題のある官能基を検出する
  • 分子の複雑さを示す指標を計算する

インストール

conda または pip で medchem をインストールします。

# Via conda
micromamba install -c conda-forge medchem

# Via pip
pip install medchem

主な機能

1. メディシナルケミストリーのルール

medchem.rules モジュールを使って、確立されたドラッグライクネスのルールを分子に適用します。

利用可能なルール:

  • Rule of Five(Lipinski)
  • Rule of Oprea
  • Rule of CNS
  • Rule of leadlike(緩和版と厳格版)
  • Rule of three
  • Rule of Reos
  • Rule of drug
  • Rule of Veber
  • Golden triangle
  • PAINS フィルター

単一ルールの適用:

import medchem as mc

# Apply Rule of Five to a SMILES string
smiles = "CC(=O)OC1=CC=CC=C1C(=O)O"  # Aspirin
passes = mc.rules.basic_rules.rule_of_five(smiles)
# Returns: True

# Check specific rules
passes_oprea = mc.rules.basic_rules.rule_of_oprea(smiles)
passes_cns = mc.rules.basic_rules.rule_of_cns(smiles)

RuleFilters による複数ルールの適用:

import datamol as dm
import medchem as mc

# Load molecules
mols = [dm.to_mol(smiles) for smiles in smiles_list]

# Create filter with multiple rules
rfilter = mc.rules.RuleFilters(
    rule_list=[
        "rule_of_five",
        "rule_of_oprea",
        "rule_of_cns",
        "rule_of_leadlike_soft"
    ]
)

# Apply filters with parallelization
results = rfilter(
    mols=mols,
    n_jobs=-1,  # Use all CPU cores
    progress=True
)

結果の形式: 結果は、各ルールの合格/不合格の状態と詳細情報を含む辞書として返されます。

2. 構造アラートフィルター

medchem.structural モジュールを使って、問題となる可能性のある構造パターンを検出します。

利用可能なフィルター:

  1. Common Alerts - ChEMBL のキュレーションと文献に基づく一般的な構造アラート
  2. NIBR Filters - Novartis Institutes for BioMedical Research のフィルターセット
  3. Lilly Demerits - Eli Lilly の減点方式(275 個のルール。減点数が 100 を超える分子は除外)

Common Alerts:

import medchem as mc

# Create filter
alert_filter = mc.structural.CommonAlertsFilters()

# Check single molecule
mol = dm.to_mol("c1ccccc1")
has_alerts, details = alert_filter.check_mol(mol)

# Batch filtering with parallelization
results = alert_filter(
    mols=mol_list,
    n_jobs=-1,
    progress=True
)

NIBR Filters:

import medchem as mc

# Apply NIBR filters
nibr_filter = mc.structural.NIBRFilters()
results = nibr_filter(mols=mol_list, n_jobs=-1)

Lilly Demerits:

import medchem as mc

# Calculate Lilly demerits
lilly = mc.structural.LillyDemeritsFilters()
results = lilly(mols=mol_list, n_jobs=-1)

# Each result includes demerit score and whether it passes (≤100 demerits)
3. 高レベル操作のための関数 API

medchem.functional モジュールでは、一般的なワークフローで使える便利な関数を提供しています。

クイックフィルタリング:

import medchem as mc

# Apply NIBR filters to a list
filter_ok = mc.functional.nibr_filter(
    mols=mol_list,
    n_jobs=-1
)

# Apply common alerts
alert_results = mc.functional.common_alerts_filter(
    mols=mol_list,
    n_jobs=-1
)
4. 化学基の検出

medchem.groups を使って、特定の化学基や官能基を識別します。

利用可能なグループ:

  • ヒンジバインダー
  • リン酸基バインダー
  • Michael 受容体
  • 反応性基
  • カスタム SMARTS パターン

使用方法:

import medchem as mc

# Create group detector
group = mc.groups.ChemicalGroup(groups=["hinge_binders"])

# Check for matches
has_matches = group.has_match(mol_list)

# Get detailed match information
matches = group.get_matches(mol)
5. 名前付きカタログ

medchem.catalogs を通じて、キュレーションされた化学構造のコレクションにアクセスします。

利用可能なカタログ:

  • 官能基
  • 保護基
  • 一般的な試薬
  • 標準フラグメント

使用方法:

import medchem as mc

# Access named catalogs
catalogs = mc.catalogs.NamedCatalogs

# Use catalog for matching
catalog = catalogs.get("functional_groups")
matches = catalog.get_matches(mol)
6. 分子の複雑さ

medchem.complexity を使って、合成容易性を近似する複雑さの指標を計算します。

一般的な指標:

  • Bertz complexity
  • Whitlock complexity
  • Barone complexity

使用方法:

import medchem as mc

# Calculate complexity
complexity_score = mc.complexity.calculate_complexity(mol)

# Filter by complexity threshold
complex_filter = mc.complexity.ComplexityFilter(max_complexity=500)
results = complex_filter(mols=mol_list)
7. 制約によるフィルタリング

medchem.constraints を使って、カスタムの物性ベースの制約を適用します。

制約の例:

  • 分子量の範囲
  • LogP の範囲
  • TPSA の上限
  • 回転可能結合の数

使用方法:

import medchem as mc

# Define constraints
constraints = mc.constraints.Constraints(
    mw_range=(200, 500),
    logp_range=(-2, 5),
    tpsa_max=140,
    rotatable_bonds_max=10
)

# Apply constraints
results = constraints(mols=mol_list, n_jobs=-1)
8. Medchem クエリ言語

専用のクエリ言語を使って、複雑なフィルタリング条件を指定します。

クエリの例:

# Molecules passing Ro5 AND not having common alerts
"rule_of_five AND NOT common_alerts"

# CNS-like molecules with low complexity
"rule_of_cns AND complexity < 400"

# Leadlike molecules without Lilly demerits
"rule_of_leadlike AND lilly_demerits == 0"

使用方法:

import medchem as mc

# Parse and apply query
query = mc.query.parse("rule_of_five AND NOT common_alerts")
results = query.apply(mols=mol_list, n_jobs=-1)

ワークフローパターン

パターン 1:化合物ライブラリの初期選別

大規模な化合物コレクションをフィルタリングして、ドラッグライクな候補を特定します。

import datamol as dm
import medchem as mc
import pandas as pd

# Load compound library
df = pd.read_csv("compounds.csv")
mols = [dm.to_mol(smi) for smi in df["smiles"]]

# Apply primary filters
rule_filter = mc.rules.RuleFilters(rule_list=["rule_of_five", "rule_of_veber"])
rule_results = rule_filter(mols=mols, n_jobs=-1, progress=True)

# Apply structural alerts
alert_filter = mc.structural.CommonAlertsFilters()
alert_results = alert_filter(mols=mols, n_jobs=-1, progress=True)

# Combine results
df["passes_rules"] = rule_results["pass"]
df["has_alerts"] = alert_results["has_alerts"]
df["drug_like"] = df["passes_rules"] & ~df["has_alerts"]

# Save filtered compounds
filtered_df = df[df["drug_like"]]
filtered_df.to_csv("filtered_compounds.csv", index=False)
パターン 2:リード最適化時のフィルタリング

リード最適化の段階で、より厳格な基準を適用します。

import medchem as mc

# Create comprehensive filter
filters = {
    "rules": mc.rules.RuleFilters(rule_list=["rule_of_leadlike_strict"]),
    "alerts": mc.structural.NIBRFilters(),
    "lilly": mc.structural.LillyDemeritsFilters(),
    "complexity": mc.complexity.ComplexityFilter(max_complexity=400)
}

# Apply all filters
results = {}
for name, filt in filters.items():
    results[name] = filt(mols=candidate_mols, n_jobs=-1)

# Identify compounds passing all filters
passes_all = all(r["pass"] for r in results.values())
パターン 3:特定の化学基を特定する

特定の官能基や骨格を含む分子を探します。

import medchem as mc

# Create group detector for multiple groups
group_detector = mc.groups.ChemicalGroup(
    groups=["hinge_binders", "phosphate_binders"]
)

# Screen library
matches = group_detector.get_all_matches(mol_list)

# Filter molecules with desired groups
mol_with_groups = [mol for mol, match in zip(mol_list, matches) if match]

ベストプラクティス

  1. 文脈が重要: フィルターを盲目的に適用しないでください。生物学的標的と化学空間を理解してください。

  2. 複数のフィルターを組み合わせる: より良い判断のために、ルール、構造アラート、ドメイン知識を組み合わせて使用してください。

  3. 並列化を使用する: 大規模なデータセット(1000分子超)では、並列処理のために必ず n_jobs=-1 を使用してください。

  4. 反復的な改善: まず広範なフィルター(Ro5)から始め、必要に応じてより具体的な基準(CNS、リードライク)を適用してください。

  5. フィルタリングの判断を文書化する: 再現性のために、どの分子をどの理由で除外したかを記録してください。

  6. 結果を検証する: 市販薬は標準的なフィルターに不合格となることが多いことに留意し、これらは絶対的なルールではなくガイドラインとして使用してください。

  7. プロドラッグを考慮する: プロドラッグとして設計された分子は、意図的に標準的な医薬化学のルールから外れている場合があります。

リソース

references/api_guide.md

すべての medchem モジュールを網羅した包括的な API リファレンスで、関数シグネチャ、パラメーター、戻り値の型を詳しく説明しています。

references/rules_catalog.md

利用可能なすべてのルール、フィルター、アラートの完全なカタログで、説明、閾値、文献参照を含みます。

scripts/filter_molecules.py

バッチフィルタリングのワークフロー向けの本番環境対応スクリプトです。複数の入力形式(CSV、SDF、SMILES)、設定可能なフィルターの組み合わせ、詳細なレポートに対応しています。

使用方法:

python scripts/filter_molecules.py input.csv --rules rule_of_five,rule_of_cns --alerts nibr --output filtered.csv

ドキュメント

公式ドキュメント: https://medchem-docs.datamol.io/ GitHub リポジトリ: https://github.com/datamol-io/medchem

コメント