Commit Β·
b82a477
1
Parent(s): d7865ac
Rename pair_fidelity to observation_fidelity; document feature columns
Browse filesRename the edge fidelity field across the API model, query, and data table,
document the experimental-context and state-cluster columns, and refresh the
database introduction.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- backend/app/protein/api/routes/protein.py +1 -1
- backend/app/protein/data_loader.py +1 -1
- backend/app/protein/models.py +1 -1
- backend/assets/MuSProt_documentation.md +13 -2
- frontend/src/components/datasets/protein/DataTable.tsx +3 -3
- frontend/src/components/datasets/protein/ProteinDashboard.tsx +7 -4
- frontend/src/types/protein.ts +1 -1
backend/app/protein/api/routes/protein.py
CHANGED
|
@@ -141,7 +141,7 @@ async def get_data(filters: FilterParams):
|
|
| 141 |
state_id_b=getattr(row, "state_id_B", None) or None,
|
| 142 |
state_fidelity=getattr(row, "state_fidelity", None) or None,
|
| 143 |
avg_sim=getattr(row, "avg_sim", None) or None,
|
| 144 |
-
|
| 145 |
))
|
| 146 |
|
| 147 |
return DataResponse(
|
|
|
|
| 141 |
state_id_b=getattr(row, "state_id_B", None) or None,
|
| 142 |
state_fidelity=getattr(row, "state_fidelity", None) or None,
|
| 143 |
avg_sim=getattr(row, "avg_sim", None) or None,
|
| 144 |
+
observation_fidelity=getattr(row, "observation_fidelity", None) or None,
|
| 145 |
))
|
| 146 |
|
| 147 |
return DataResponse(
|
backend/app/protein/data_loader.py
CHANGED
|
@@ -175,7 +175,7 @@ class DataManager:
|
|
| 175 |
CAST(e.structure_sim AS REAL) AS structure_sim,
|
| 176 |
e."delta_Rosetta", e."delta_FoldX", e."delta_EvoEF2",
|
| 177 |
e."delta_RM", e."delta_RM+",
|
| 178 |
-
e.state_id_B, e.state_fidelity, e.avg_sim, e.
|
| 179 |
FROM edge e
|
| 180 |
{where_sql}
|
| 181 |
LIMIT ?
|
|
|
|
| 175 |
CAST(e.structure_sim AS REAL) AS structure_sim,
|
| 176 |
e."delta_Rosetta", e."delta_FoldX", e."delta_EvoEF2",
|
| 177 |
e."delta_RM", e."delta_RM+",
|
| 178 |
+
e.state_id_B, e.state_fidelity, e.avg_sim, e.observation_fidelity
|
| 179 |
FROM edge e
|
| 180 |
{where_sql}
|
| 181 |
LIMIT ?
|
backend/app/protein/models.py
CHANGED
|
@@ -118,7 +118,7 @@ class DataRecord(BaseModel):
|
|
| 118 |
state_id_b: Optional[str] = None
|
| 119 |
state_fidelity: Optional[str] = None
|
| 120 |
avg_sim: Optional[str] = None
|
| 121 |
-
|
| 122 |
|
| 123 |
|
| 124 |
class DataResponse(BaseModel):
|
|
|
|
| 118 |
state_id_b: Optional[str] = None
|
| 119 |
state_fidelity: Optional[str] = None
|
| 120 |
avg_sim: Optional[str] = None
|
| 121 |
+
observation_fidelity: Optional[str] = None
|
| 122 |
|
| 123 |
|
| 124 |
class DataResponse(BaseModel):
|
backend/assets/MuSProt_documentation.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
| 1 |
# MuSProt Dataset Documentation
|
| 2 |
|
| 3 |
-
**MuSProt** (Multistate Protein Database) is a
|
| 4 |
-
|
| 5 |
---
|
| 6 |
|
| 7 |
## Download
|
|
@@ -33,6 +32,7 @@ Each row represents a single protein chain instance (one PDB entry + chain).
|
|
| 33 |
| `original_metals` | TEXT | Metal ions present in the structure |
|
| 34 |
| `original_ligands` | TEXT | Small-molecule ligands present in the structure |
|
| 35 |
| `sequence_id` | TEXT | Internal sequence cluster identifier |
|
|
|
|
| 36 |
| `CATH_ID` | TEXT | CATH domain assignment |
|
| 37 |
| `cath_class` | TEXT | CATH class (e.g. `1` = Mainly Alpha) |
|
| 38 |
| `cath_arch` | TEXT | CATH architecture |
|
|
@@ -40,6 +40,11 @@ Each row represents a single protein chain instance (one PDB entry + chain).
|
|
| 40 |
| `cath_homology` | TEXT | CATH homology superfamily |
|
| 41 |
| `cath_superfamily` | TEXT | Full CATH superfamily code (e.g. `1.10.10.10`) |
|
| 42 |
| `domain_length` | INT | Length of the matched CATH domain |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
| `Rosetta` | FLOAT | Rosetta total energy score |
|
| 44 |
| `FoldX` | FLOAT | FoldX total energy score |
|
| 45 |
| `EvoEF2` | FLOAT | EvoEF2 total energy score |
|
|
@@ -47,6 +52,7 @@ Each row represents a single protein chain instance (one PDB entry + chain).
|
|
| 47 |
| `RM+` | FLOAT | RosettaMembrane+ energy score |
|
| 48 |
| `ranked_functions` | TEXT | JSON-encoded list of ranked GO/functional annotations |
|
| 49 |
|
|
|
|
| 50 |
---
|
| 51 |
|
| 52 |
### Table: `edge`
|
|
@@ -67,6 +73,11 @@ Each row represents a pairwise structural comparison between two chain instances
|
|
| 67 |
| `delta_EvoEF2` | FLOAT | EvoEF2 energy difference (B β A) |
|
| 68 |
| `delta_RM` | FLOAT | RosettaMembrane energy difference (B β A) |
|
| 69 |
| `delta_RM+` | FLOAT | RosettaMembrane+ energy difference (B β A) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 70 |
|
| 71 |
---
|
| 72 |
|
|
|
|
| 1 |
# MuSProt Dataset Documentation
|
| 2 |
|
| 3 |
+
**MuSProt** (Multistate Protein Database) is a million-scale multimodal database for multistate proteins, designed to support programmable protein design and AI model development. It links experimentally observed conformational states of identical protein sequences from the PDB, organizes them into state clusters and transition relationships, and enriches each record with structural similarity, experimental context, state-specific function rankings and transition fidelity labels. Users can search, browse and download MuSProt records to study conformational diversity, state-dependent functions and feasible protein state transitions.
|
|
|
|
| 4 |
---
|
| 5 |
|
| 6 |
## Download
|
|
|
|
| 32 |
| `original_metals` | TEXT | Metal ions present in the structure |
|
| 33 |
| `original_ligands` | TEXT | Small-molecule ligands present in the structure |
|
| 34 |
| `sequence_id` | TEXT | Internal sequence cluster identifier |
|
| 35 |
+
| `state_id` | TEXT | Conformational state cluster this chain is assigned to (`0`, `1`, `2`, β¦) |
|
| 36 |
| `CATH_ID` | TEXT | CATH domain assignment |
|
| 37 |
| `cath_class` | TEXT | CATH class (e.g. `1` = Mainly Alpha) |
|
| 38 |
| `cath_arch` | TEXT | CATH architecture |
|
|
|
|
| 40 |
| `cath_homology` | TEXT | CATH homology superfamily |
|
| 41 |
| `cath_superfamily` | TEXT | Full CATH superfamily code (e.g. `1.10.10.10`) |
|
| 42 |
| `domain_length` | INT | Length of the matched CATH domain |
|
| 43 |
+
| `experimental_method` | TEXT | Structure determination method (e.g. `X-RAY DIFFRACTION`, `ELECTRON MICROSCOPY`, `SOLUTION NMR`) |
|
| 44 |
+
| `pH` | FLOAT | pH of the experimental / crystallization condition |
|
| 45 |
+
| `temp_K` | FLOAT | Temperature of the experiment, in Kelvin |
|
| 46 |
+
| `experimental_details` | TEXT | Free-text crystallization / sample-preparation details |
|
| 47 |
+
| `resolution` | FLOAT | Experimental resolution in Γ
(lower is sharper; empty for methods without a resolution) |
|
| 48 |
| `Rosetta` | FLOAT | Rosetta total energy score |
|
| 49 |
| `FoldX` | FLOAT | FoldX total energy score |
|
| 50 |
| `EvoEF2` | FLOAT | EvoEF2 total energy score |
|
|
|
|
| 52 |
| `RM+` | FLOAT | RosettaMembrane+ energy score |
|
| 53 |
| `ranked_functions` | TEXT | JSON-encoded list of ranked GO/functional annotations |
|
| 54 |
|
| 55 |
+
|
| 56 |
---
|
| 57 |
|
| 58 |
### Table: `edge`
|
|
|
|
| 73 |
| `delta_EvoEF2` | FLOAT | EvoEF2 energy difference (B β A) |
|
| 74 |
| `delta_RM` | FLOAT | RosettaMembrane energy difference (B β A) |
|
| 75 |
| `delta_RM+` | FLOAT | RosettaMembrane+ energy difference (B β A) |
|
| 76 |
+
| `state_id_A` | TEXT | Conformational state cluster of chain A |
|
| 77 |
+
| `state_id_B` | TEXT | Conformational state cluster of chain B |
|
| 78 |
+
| `avg_sim` | TEXT | Average structural similarity within the state cluster (`>0.95` or a numeric value) |
|
| 79 |
+
| `state_fidelity` | TEXT | State-level transition fidelity label: `identical`, `high`, `medium`, or `low` |
|
| 80 |
+
| `observation_fidelity` | TEXT | Observation-level transition fidelity label: `identical`, `high`, `medium`, or `low` |
|
| 81 |
|
| 82 |
---
|
| 83 |
|
frontend/src/components/datasets/protein/DataTable.tsx
CHANGED
|
@@ -126,8 +126,8 @@ export const DataTable: React.FC<DataTableProps> = ({ data, loading, total, filt
|
|
| 126 |
<th onClick={() => handleSort('avg_sim')}>
|
| 127 |
State avg. similarity {getSortIcon('avg_sim')}
|
| 128 |
</th>
|
| 129 |
-
<th onClick={() => handleSort('
|
| 130 |
-
Observation fidelity {getSortIcon('
|
| 131 |
</th>
|
| 132 |
<th onClick={() => handleSort('structure_sim')}>
|
| 133 |
Observation similarity {getSortIcon('structure_sim')}
|
|
@@ -165,7 +165,7 @@ export const DataTable: React.FC<DataTableProps> = ({ data, loading, total, filt
|
|
| 165 |
<td className="font-mono">{record.state_id_b ?? <span className="placeholder">β</span>}</td>
|
| 166 |
<td>{record.state_fidelity ?? <span className="placeholder">β</span>}</td>
|
| 167 |
<td>{record.avg_sim ?? <span className="placeholder">β</span>}</td>
|
| 168 |
-
<td>{record.
|
| 169 |
<td className="numeric">{record.structure_sim != null ? record.structure_sim.toFixed(3) : <span className="placeholder">β</span>}</td>
|
| 170 |
</tr>
|
| 171 |
))}
|
|
|
|
| 126 |
<th onClick={() => handleSort('avg_sim')}>
|
| 127 |
State avg. similarity {getSortIcon('avg_sim')}
|
| 128 |
</th>
|
| 129 |
+
<th onClick={() => handleSort('observation_fidelity')}>
|
| 130 |
+
Observation fidelity {getSortIcon('observation_fidelity')}
|
| 131 |
</th>
|
| 132 |
<th onClick={() => handleSort('structure_sim')}>
|
| 133 |
Observation similarity {getSortIcon('structure_sim')}
|
|
|
|
| 165 |
<td className="font-mono">{record.state_id_b ?? <span className="placeholder">β</span>}</td>
|
| 166 |
<td>{record.state_fidelity ?? <span className="placeholder">β</span>}</td>
|
| 167 |
<td>{record.avg_sim ?? <span className="placeholder">β</span>}</td>
|
| 168 |
+
<td>{record.observation_fidelity ?? <span className="placeholder">β</span>}</td>
|
| 169 |
<td className="numeric">{record.structure_sim != null ? record.structure_sim.toFixed(3) : <span className="placeholder">β</span>}</td>
|
| 170 |
</tr>
|
| 171 |
))}
|
frontend/src/components/datasets/protein/ProteinDashboard.tsx
CHANGED
|
@@ -334,10 +334,13 @@ export function ProteinDashboard() {
|
|
| 334 |
<section className="px-1">
|
| 335 |
<h1 className="text-2xl font-semibold text-slate-900">MuSProt β Multistate Protein Database</h1>
|
| 336 |
<p className="mt-2 max-w-4xl text-slate-600 leading-relaxed">
|
| 337 |
-
|
| 338 |
-
|
| 339 |
-
|
| 340 |
-
|
|
|
|
|
|
|
|
|
|
| 341 |
</p>
|
| 342 |
</section>
|
| 343 |
|
|
|
|
| 334 |
<section className="px-1">
|
| 335 |
<h1 className="text-2xl font-semibold text-slate-900">MuSProt β Multistate Protein Database</h1>
|
| 336 |
<p className="mt-2 max-w-4xl text-slate-600 leading-relaxed">
|
| 337 |
+
<span className="font-semibold text-slate-900">MuSProt</span> (Multistate Protein Database) is a
|
| 338 |
+
million-scale multimodal database for multistate proteins, designed to support programmable protein
|
| 339 |
+
design and AI model development. It links experimentally observed conformational states of identical
|
| 340 |
+
protein sequences from the PDB, organizes them into state clusters and transition relationships, and
|
| 341 |
+
enriches each record with structural similarity, experimental context, state-specific function
|
| 342 |
+
rankings and transition fidelity labels. Users can search, browse and download MuSProt records to
|
| 343 |
+
study conformational diversity, state-dependent functions and feasible protein state transitions.
|
| 344 |
</p>
|
| 345 |
</section>
|
| 346 |
|
frontend/src/types/protein.ts
CHANGED
|
@@ -96,7 +96,7 @@ export interface DataRecord {
|
|
| 96 |
state_id_b?: string | null;
|
| 97 |
state_fidelity?: string | null;
|
| 98 |
avg_sim?: string | null;
|
| 99 |
-
|
| 100 |
}
|
| 101 |
|
| 102 |
export interface DataResponse {
|
|
|
|
| 96 |
state_id_b?: string | null;
|
| 97 |
state_fidelity?: string | null;
|
| 98 |
avg_sim?: string | null;
|
| 99 |
+
observation_fidelity?: string | null;
|
| 100 |
}
|
| 101 |
|
| 102 |
export interface DataResponse {
|