@nahisaho/satori 0.12.0 → 0.13.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.
@@ -0,0 +1,317 @@
1
+ ---
2
+ name: scientific-structural-proteomics
3
+ description: |
4
+ 構造プロテオミクス統合スキル。EMDB クライオ EM、PDBe 構造データ、
5
+ Proteins API (UniProt)、Complex Portal 複合体、DeepGO 機能予測、
6
+ EVE 変異影響評価の統合パイプライン。
7
+ ---
8
+
9
+ # Scientific Structural Proteomics
10
+
11
+ 6 つの構造・機能データベースを統合した
12
+ タンパク質構造・機能プロファイリングパイプラインを提供する。
13
+
14
+ ## When to Use
15
+
16
+ - PDB エントリの詳細構造情報 (分解能, 実験手法, 二次構造) を取得するとき
17
+ - クライオ EM マップ情報を EMDB から取得するとき
18
+ - UniProt タンパク質のドメイン・変異・ゲノムマッピングを調べるとき
19
+ - タンパク質複合体のサブユニット構成を Complex Portal で調べるとき
20
+ - DeepGO で配列ベースの GO 機能予測を行うとき
21
+ - EVE で missense 変異の病原性スコアを取得するとき
22
+
23
+ ---
24
+
25
+ ## Quick Start
26
+
27
+ ## 1. PDBe 構造データ取得
28
+
29
+ ```python
30
+ import requests
31
+ import pandas as pd
32
+
33
+ PDBE_API = "https://www.ebi.ac.uk/pdbe/api"
34
+
35
+
36
+ def get_pdbe_entry(pdb_id):
37
+ """
38
+ PDBe エントリのサマリー・品質・二次構造を取得。
39
+
40
+ Parameters:
41
+ pdb_id: str — PDB ID (e.g., "1cbs")
42
+
43
+ ToolUniverse:
44
+ pdbe_get_entry_summary(pdb_id=pdb_id)
45
+ pdbe_get_entry_quality(pdb_id=pdb_id)
46
+ pdbe_get_entry_experiment(pdb_id=pdb_id)
47
+ pdbe_get_entry_molecules(pdb_id=pdb_id)
48
+ pdbe_get_entry_secondary_structure(pdb_id=pdb_id)
49
+ pdbe_get_entry_assemblies(pdb_id=pdb_id)
50
+ pdbe_get_entry_publications(pdb_id=pdb_id)
51
+ """
52
+ pdb = pdb_id.lower()
53
+
54
+ # Summary
55
+ resp_s = requests.get(f"{PDBE_API}/pdb/entry/summary/{pdb}")
56
+ resp_s.raise_for_status()
57
+ summary = resp_s.json().get(pdb, [{}])[0]
58
+
59
+ # Quality
60
+ resp_q = requests.get(f"{PDBE_API}/pdb/entry/quality/{pdb}")
61
+ quality = (
62
+ resp_q.json().get(pdb, [{}])[0] if resp_q.status_code == 200 else {}
63
+ )
64
+
65
+ # Experiment
66
+ resp_e = requests.get(f"{PDBE_API}/pdb/entry/experiment/{pdb}")
67
+ experiment = (
68
+ resp_e.json().get(pdb, [{}])[0] if resp_e.status_code == 200 else {}
69
+ )
70
+
71
+ entry = {
72
+ "pdb_id": pdb,
73
+ "title": summary.get("title", ""),
74
+ "method": experiment.get("experimental_method", ""),
75
+ "resolution": experiment.get("resolution", ""),
76
+ "release_date": summary.get("release_date", ""),
77
+ "r_factor": quality.get("r_factor", ""),
78
+ "r_free": quality.get("r_free", ""),
79
+ }
80
+
81
+ print(f"PDBe {pdb}: {entry['method']} @ {entry['resolution']}Å")
82
+ return entry, summary, quality
83
+ ```
84
+
85
+ ## 2. EMDB クライオ EM 構造
86
+
87
+ ```python
88
+ EMDB_API = "https://www.ebi.ac.uk/emdb/api"
89
+
90
+
91
+ def get_emdb_structure(emdb_id):
92
+ """
93
+ EMDB エントリの 3D EM マップ情報を取得。
94
+
95
+ Parameters:
96
+ emdb_id: str — EMDB ID (e.g., "EMD-1234")
97
+
98
+ ToolUniverse:
99
+ EMDB_get_structure(emdb_id=emdb_id)
100
+ EMDB_get_map_info(emdb_id=emdb_id)
101
+ EMDB_get_sample_info(emdb_id=emdb_id)
102
+ EMDB_get_imaging_info(emdb_id=emdb_id)
103
+ EMDB_get_validation(emdb_id=emdb_id)
104
+ EMDB_get_publications(emdb_id=emdb_id)
105
+ EMDB_search_structures(query=query)
106
+ """
107
+ url = f"{EMDB_API}/entry/{emdb_id}"
108
+ resp = requests.get(url)
109
+ resp.raise_for_status()
110
+ data = resp.json()
111
+
112
+ admin = data.get("admin", {})
113
+ map_info = data.get("map", {})
114
+
115
+ entry = {
116
+ "emdb_id": emdb_id,
117
+ "title": admin.get("title", ""),
118
+ "resolution": map_info.get("resolution", {}).get("value", ""),
119
+ "contour_level": map_info.get("contour_level", {}).get("value", ""),
120
+ "deposition_date": admin.get("deposition_date", ""),
121
+ }
122
+
123
+ print(f"EMDB {emdb_id}: {entry['resolution']}Å resolution")
124
+ return entry, data
125
+ ```
126
+
127
+ ## 3. Proteins API (UniProt) ドメイン・変異
128
+
129
+ ```python
130
+ PROTEINS_API = "https://www.ebi.ac.uk/proteins/api"
131
+
132
+
133
+ def get_protein_features(uniprot_id):
134
+ """
135
+ Proteins API からタンパク質のドメイン・変異・修飾情報を取得。
136
+
137
+ Parameters:
138
+ uniprot_id: str — UniProt accession (e.g., "P04637")
139
+
140
+ ToolUniverse:
141
+ proteins_api_get_protein(accession=uniprot_id)
142
+ proteins_api_get_features(accession=uniprot_id)
143
+ proteins_api_get_variants(accession=uniprot_id)
144
+ proteins_api_get_xrefs(accession=uniprot_id)
145
+ proteins_api_get_genome_mappings(accession=uniprot_id)
146
+ """
147
+ headers = {"Accept": "application/json"}
148
+
149
+ # Protein info
150
+ resp_p = requests.get(
151
+ f"{PROTEINS_API}/proteins/{uniprot_id}", headers=headers
152
+ )
153
+ resp_p.raise_for_status()
154
+ protein = resp_p.json()
155
+
156
+ # Features
157
+ resp_f = requests.get(
158
+ f"{PROTEINS_API}/features/{uniprot_id}", headers=headers
159
+ )
160
+ features = resp_f.json() if resp_f.status_code == 200 else {}
161
+
162
+ feature_list = features.get("features", [])
163
+ domains = [f for f in feature_list if f.get("type") == "DOMAIN"]
164
+ variants = [f for f in feature_list if f.get("type") == "VARIANT"]
165
+
166
+ print(f"Proteins API {uniprot_id}: "
167
+ f"{len(domains)} domains, {len(variants)} variants")
168
+ return protein, feature_list
169
+ ```
170
+
171
+ ## 4. Complex Portal 複合体
172
+
173
+ ```python
174
+ def get_complex_portal(complex_id):
175
+ """
176
+ Complex Portal からタンパク質複合体の詳細を取得。
177
+
178
+ Parameters:
179
+ complex_id: str — Complex Portal ID (e.g., "CPX-1")
180
+
181
+ ToolUniverse:
182
+ ComplexPortal_get_complex(complex_id=complex_id)
183
+ ComplexPortal_search_complexes(query=query)
184
+ """
185
+ url = (
186
+ f"https://www.ebi.ac.uk/intact/complex-ws/complex/{complex_id}"
187
+ )
188
+ resp = requests.get(url, headers={"Accept": "application/json"})
189
+ resp.raise_for_status()
190
+ data = resp.json()
191
+
192
+ participants = data.get("participants", [])
193
+ subunits = []
194
+ for p in participants:
195
+ interactor = p.get("interactor", {})
196
+ subunits.append({
197
+ "identifier": interactor.get("identifier", ""),
198
+ "name": interactor.get("name", ""),
199
+ "stoichiometry": p.get("stoichiometry", ""),
200
+ })
201
+
202
+ print(f"Complex Portal {complex_id}: "
203
+ f"{data.get('name', '?')}, {len(subunits)} subunits")
204
+ return data, subunits
205
+ ```
206
+
207
+ ## 5. DeepGO 機能予測 & EVE 変異評価
208
+
209
+ ```python
210
+ def predict_deepgo_function(sequence):
211
+ """
212
+ DeepGO でタンパク質配列から GO 機能予測。
213
+
214
+ ToolUniverse:
215
+ DeepGO_predict_function(sequence=sequence)
216
+ """
217
+ url = "https://deepgo.cbrc.kaust.edu.sa/deepgo/api/create"
218
+ resp = requests.post(url, json={"data_format": "fasta", "data": sequence})
219
+ resp.raise_for_status()
220
+ data = resp.json()
221
+
222
+ predictions = data.get("predictions", [])
223
+ print(f"DeepGO: {len(predictions)} GO term predictions")
224
+ return predictions
225
+
226
+
227
+ def get_eve_variant_score(gene_name, variant=None):
228
+ """
229
+ EVE (Evolutionary model of Variant Effect) による
230
+ missense 変異の病原性スコアを取得。
231
+
232
+ ToolUniverse:
233
+ EVE_get_gene_info(gene_name=gene_name)
234
+ EVE_get_variant_score(gene_name=gene_name, variant=variant)
235
+ """
236
+ url = f"https://evemodel.org/api/proteins/{gene_name}"
237
+
238
+ if variant:
239
+ url += f"/variants/{variant}"
240
+
241
+ resp = requests.get(url)
242
+ resp.raise_for_status()
243
+ data = resp.json()
244
+
245
+ if variant:
246
+ score = data.get("eve_score", None)
247
+ classification = data.get("eve_class", "")
248
+ print(f"EVE {gene_name} {variant}: score={score}, class={classification}")
249
+ else:
250
+ print(f"EVE {gene_name}: found")
251
+
252
+ return data
253
+ ```
254
+
255
+ ## References
256
+
257
+ ### Output Files
258
+
259
+ | ファイル | 形式 |
260
+ |---|---|
261
+ | `results/pdbe_entry.json` | JSON |
262
+ | `results/emdb_structure.json` | JSON |
263
+ | `results/protein_features.json` | JSON |
264
+ | `results/complex_portal.json` | JSON |
265
+ | `results/deepgo_predictions.json` | JSON |
266
+ | `results/eve_scores.json` | JSON |
267
+
268
+ ### 利用可能ツール
269
+
270
+ | カテゴリ | 主要ツール | 用途 |
271
+ |---|---|---|
272
+ | PDBe | `pdbe_get_entry_summary` | エントリサマリー |
273
+ | PDBe | `pdbe_get_entry_quality` | 構造品質 |
274
+ | PDBe | `pdbe_get_entry_experiment` | 実験手法 |
275
+ | PDBe | `pdbe_get_entry_molecules` | 分子情報 |
276
+ | PDBe | `pdbe_get_entry_secondary_structure` | 二次構造 |
277
+ | PDBe | `pdbe_get_entry_assemblies` | 生物学的集合体 |
278
+ | PDBe | `pdbe_get_entry_publications` | 文献 |
279
+ | PDBe | `pdbe_get_entry_related_publications` | 関連文献 |
280
+ | PDBe | `pdbe_get_entry_observed_residues_ratio` | 観察残基 |
281
+ | PDBe | `pdbe_get_entry_status` | ステータス |
282
+ | EMDB | `EMDB_get_structure` | EM 構造 |
283
+ | EMDB | `EMDB_get_map_info` | マップ情報 |
284
+ | EMDB | `EMDB_get_sample_info` | サンプル情報 |
285
+ | EMDB | `EMDB_get_imaging_info` | イメージング |
286
+ | EMDB | `EMDB_get_validation` | バリデーション |
287
+ | EMDB | `EMDB_get_publications` | 文献 |
288
+ | EMDB | `EMDB_search_structures` | EM 構造検索 |
289
+ | Proteins API | `proteins_api_get_protein` | タンパク質情報 |
290
+ | Proteins API | `proteins_api_get_features` | ドメイン・特徴 |
291
+ | Proteins API | `proteins_api_get_variants` | 変異 |
292
+ | Proteins API | `proteins_api_get_xrefs` | 外部参照 |
293
+ | Proteins API | `proteins_api_get_genome_mappings` | ゲノムマッピング |
294
+ | Proteins API | `proteins_api_get_epitopes` | エピトープ |
295
+ | Proteins API | `proteins_api_get_proteomics` | プロテオミクス |
296
+ | Proteins API | `proteins_api_get_publications` | 文献 |
297
+ | Proteins API | `proteins_api_get_comments` | コメント |
298
+ | Proteins API | `proteins_api_search` | 検索 |
299
+ | Complex Portal | `ComplexPortal_get_complex` | 複合体詳細 |
300
+ | Complex Portal | `ComplexPortal_search_complexes` | 複合体検索 |
301
+ | DeepGO | `DeepGO_predict_function` | GO 機能予測 |
302
+ | EVE | `EVE_get_gene_info` | 遺伝子情報 |
303
+ | EVE | `EVE_get_variant_score` | 変異スコア |
304
+
305
+ ### 参照スキル
306
+
307
+ | スキル | 関連 |
308
+ |---|---|
309
+ | `scientific-protein-structure-analysis` | タンパク質構造 |
310
+ | `scientific-proteomics-mass-spectrometry` | プロテオミクス |
311
+ | `scientific-protein-interaction-network` | PPI |
312
+ | `scientific-molecular-docking` | ドッキング |
313
+ | `scientific-variant-interpretation` | 変異解釈 |
314
+
315
+ ### 依存パッケージ
316
+
317
+ `requests`, `pandas`