# pinder-org/pinder architecture

> Architecture diagram of the GitHub repository pinder-org/pinder, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/pinder-org/pinder
- Repository: https://github.com/pinder-org/pinder

## Overview

PINDER provides protein–protein docking data, tooling to generate and inspect that resource, and evaluation and prediction workflows. The principal user path is to obtain the published dataset, load indexed structures through pinder-core, and evaluate docking results. The graph also preserves data-ingestion, QC/plotting, and method-runner capabilities evident from the README and tree. Wiring for several unsampled modules is intentionally left unspecified; edges reflect only documented behavior or sampled calls.

Main entry points: [`src/pinder-core/pinder/core/index/utils.py`](https://github.com/pinder-org/pinder/blob/main/src/pinder-core/pinder/core/index/utils.py) (Index and paths), [`src/pinder-data/pinder/data/pipeline/data_pipeline.py`](https://github.com/pinder-org/pinder/blob/main/src/pinder-data/pinder/data/pipeline/data_pipeline.py) (Ingestion pipeline), [`src/pinder-methods/pinder/methods/main.py`](https://github.com/pinder-org/pinder/blob/main/src/pinder-methods/pinder/methods/main.py) (Method actions), [`src/pinder-core/pinder/core/index/system.py`](https://github.com/pinder-org/pinder/blob/main/src/pinder-core/pinder/core/index/system.py) (Pinder system)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Dataset access"]
  node_index["Index and paths<br/>[utils.py]"]
  node_system["Pinder system<br/>[system.py]"]
  node_loader["Dataset loader<br/>[loader.py]"]
  node_structures["Structure operations<br/>[structure.py]"]
  node_localdata[("Local dataset")]
end

subgraph group_data["Data production"]
  node_pipeline["Ingestion pipeline<br/>[data_pipeline.py]"]
  node_tasks["Task batching<br/>[tasks.py]"]
  node_dimerdata["Dimer construction<br/>[get_dimers.py]"]
  node_annotations["Annotations"]
  node_apo["Apo pairing<br/>[get_apo.py]"]
  node_splits["Dataset splits<br/>[get_splits.py]"]
  node_clusters["Similarity clusters<br/>[get_clusters.py]"]
end

subgraph group_analysis["Quality and analysis"]
  node_qc["Dataset QC"]
  node_plots["Dataset plots"]
end

subgraph group_eval["Docking evaluation"]
  node_evalrun["Evaluation runner<br/>[run.py]"]
  node_dockq["Docking metrics<br/>[method.py]"]
  node_submission["Submission creation"]
end

subgraph group_methods["Prediction methods"]
  node_methodcli["Method actions<br/>[main.py]"]
  node_preprocess["Inference preparation"]
  node_frodock["FRODOCK predictor<br/>[predict.py]"]
  node_hdock["HDOCK predictor<br/>[predict.py]"]
  node_patchdock["PatchDock predictor<br/>[predict.py]"]
end

node_user(("Researcher"))
node_published[("Published dataset")]
node_cloud[("Cloud storage")]
node_rcsb[("RCSB structures")]

node_user -->|"locates dataset"| node_index
node_published -->|"serves index"| node_index
node_index -->|"downloads files"| node_cloud
node_index -->|"syncs dataset"| node_localdata
node_user -->|"requests data"| node_loader
node_loader -->|"gets index"| node_index
node_loader -->|"loads files"| node_localdata
node_user -->|"selects complex"| node_system
node_system -->|"resolves entry"| node_index
node_system -->|"aligns structures"| node_structures
node_pipeline -->|"builds task batches"| node_tasks
node_pipeline -->|"runs ingestion tasks"| node_dimerdata
node_pipeline -->|"runs annotations"| node_annotations
node_pipeline -->|"runs apo pairing"| node_apo
node_pipeline -->|"generates splits"| node_splits
node_pipeline -->|"generates clusters"| node_clusters
node_tasks -->|"discovers structures"| node_rcsb
node_dimerdata -->|"writes dataset files"| node_localdata
node_user -->|"checks dataset"| node_qc
node_qc -->|"reads index"| node_index
node_user -->|"analyzes results"| node_plots
node_user -->|"evaluates predictions"| node_evalrun
node_evalrun -->|"computes metrics"| node_dockq
node_evalrun -->|"reads evaluation index"| node_index
node_user -->|"creates submission"| node_submission
node_user -->|"chooses action"| node_methodcli
node_methodcli -->|"prepares inputs"| node_preprocess
node_methodcli -.->|"dispatches prediction"| node_frodock
node_methodcli -.->|"dispatches prediction"| node_hdock
node_methodcli -.->|"dispatches prediction"| node_patchdock

click node_index "https://github.com/pinder-org/pinder/blob/main/src/pinder-core/pinder/core/index/utils.py"
click node_system "https://github.com/pinder-org/pinder/blob/main/src/pinder-core/pinder/core/index/system.py"
click node_loader "https://github.com/pinder-org/pinder/blob/main/src/pinder-core/pinder/core/loader/loader.py"
click node_structures "https://github.com/pinder-org/pinder/blob/main/src/pinder-core/pinder/core/loader/structure.py"
click node_pipeline "https://github.com/pinder-org/pinder/blob/main/src/pinder-data/pinder/data/pipeline/data_pipeline.py"
click node_tasks "https://github.com/pinder-org/pinder/blob/main/src/pinder-data/pinder/data/pipeline/tasks.py"
click node_dimerdata "https://github.com/pinder-org/pinder/blob/main/src/pinder-data/pinder/data/get_dimers.py"
click node_annotations "https://github.com/pinder-org/pinder/tree/main/src/pinder-data/pinder/data/annotation"
click node_apo "https://github.com/pinder-org/pinder/blob/main/src/pinder-data/pinder/data/get_apo.py"
click node_splits "https://github.com/pinder-org/pinder/blob/main/src/pinder-data/pinder/data/get_splits.py"
click node_clusters "https://github.com/pinder-org/pinder/blob/main/src/pinder-data/pinder/data/get_clusters.py"
click node_qc "https://github.com/pinder-org/pinder/tree/main/src/pinder-data/pinder/data/qc"
click node_plots "https://github.com/pinder-org/pinder/tree/main/src/pinder-data/pinder/data/plot"
click node_evalrun "https://github.com/pinder-org/pinder/blob/main/src/pinder-eval/pinder/eval/run.py"
click node_dockq "https://github.com/pinder-org/pinder/blob/main/src/pinder-eval/pinder/eval/dockq/method.py"
click node_submission "https://github.com/pinder-org/pinder/blob/main/src/pinder-eval/pinder/eval/create_submission.py"
click node_methodcli "https://github.com/pinder-org/pinder/blob/main/src/pinder-methods/pinder/methods/main.py"
click node_preprocess "https://github.com/pinder-org/pinder/tree/main/src/pinder-methods/pinder/methods/preprocess"
click node_frodock "https://github.com/pinder-org/pinder/blob/main/src/pinder-methods/pinder/methods/run/frodock/predict.py"
click node_hdock "https://github.com/pinder-org/pinder/blob/main/src/pinder-methods/pinder/methods/run/hdock/predict.py"
click node_patchdock "https://github.com/pinder-org/pinder/blob/main/src/pinder-methods/pinder/methods/run/patchdock/predict.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_index,node_system,node_loader,node_structures,node_localdata toneBlue
class node_pipeline,node_tasks,node_dimerdata,node_annotations,node_apo,node_splits,node_clusters,node_published,node_cloud,node_rcsb toneAmber
class node_qc,node_plots toneMint
class node_evalrun,node_dockq,node_submission toneRose
class node_methodcli,node_preprocess,node_frodock,node_hdock,node_patchdock,node_user toneIndigo
```

## Components

### Dataset access

- [Index and paths](https://github.com/pinder-org/pinder/blob/main/src/pinder-core/pinder/core/index/utils.py): `src/pinder-core/pinder/core/index/utils.py`
- [Pinder system](https://github.com/pinder-org/pinder/blob/main/src/pinder-core/pinder/core/index/system.py): `src/pinder-core/pinder/core/index/system.py`
- [Dataset loader](https://github.com/pinder-org/pinder/blob/main/src/pinder-core/pinder/core/loader/loader.py): `src/pinder-core/pinder/core/loader/loader.py`
- [Structure operations](https://github.com/pinder-org/pinder/blob/main/src/pinder-core/pinder/core/loader/structure.py): `src/pinder-core/pinder/core/loader/structure.py`
- **Local dataset**

### Data production

- [Ingestion pipeline](https://github.com/pinder-org/pinder/blob/main/src/pinder-data/pinder/data/pipeline/data_pipeline.py): `src/pinder-data/pinder/data/pipeline/data_pipeline.py`
- [Task batching](https://github.com/pinder-org/pinder/blob/main/src/pinder-data/pinder/data/pipeline/tasks.py): `src/pinder-data/pinder/data/pipeline/tasks.py`
- [Dimer construction](https://github.com/pinder-org/pinder/blob/main/src/pinder-data/pinder/data/get_dimers.py): `src/pinder-data/pinder/data/get_dimers.py`
- [Annotations](https://github.com/pinder-org/pinder/tree/main/src/pinder-data/pinder/data/annotation): `src/pinder-data/pinder/data/annotation`
- [Apo pairing](https://github.com/pinder-org/pinder/blob/main/src/pinder-data/pinder/data/get_apo.py): `src/pinder-data/pinder/data/get_apo.py`
- [Dataset splits](https://github.com/pinder-org/pinder/blob/main/src/pinder-data/pinder/data/get_splits.py): `src/pinder-data/pinder/data/get_splits.py`
- [Similarity clusters](https://github.com/pinder-org/pinder/blob/main/src/pinder-data/pinder/data/get_clusters.py): `src/pinder-data/pinder/data/get_clusters.py`

### Quality and analysis

- [Dataset QC](https://github.com/pinder-org/pinder/tree/main/src/pinder-data/pinder/data/qc): `src/pinder-data/pinder/data/qc`
- [Dataset plots](https://github.com/pinder-org/pinder/tree/main/src/pinder-data/pinder/data/plot): `src/pinder-data/pinder/data/plot`

### Docking evaluation

- [Evaluation runner](https://github.com/pinder-org/pinder/blob/main/src/pinder-eval/pinder/eval/run.py): `src/pinder-eval/pinder/eval/run.py`
- [Docking metrics](https://github.com/pinder-org/pinder/blob/main/src/pinder-eval/pinder/eval/dockq/method.py): `src/pinder-eval/pinder/eval/dockq/method.py`
- [Submission creation](https://github.com/pinder-org/pinder/blob/main/src/pinder-eval/pinder/eval/create_submission.py): `src/pinder-eval/pinder/eval/create_submission.py`

### Prediction methods

- [Method actions](https://github.com/pinder-org/pinder/blob/main/src/pinder-methods/pinder/methods/main.py): `src/pinder-methods/pinder/methods/main.py`
- [Inference preparation](https://github.com/pinder-org/pinder/tree/main/src/pinder-methods/pinder/methods/preprocess): `src/pinder-methods/pinder/methods/preprocess`
- [FRODOCK predictor](https://github.com/pinder-org/pinder/blob/main/src/pinder-methods/pinder/methods/run/frodock/predict.py): `src/pinder-methods/pinder/methods/run/frodock/predict.py`
- [HDOCK predictor](https://github.com/pinder-org/pinder/blob/main/src/pinder-methods/pinder/methods/run/hdock/predict.py): `src/pinder-methods/pinder/methods/run/hdock/predict.py`
- [PatchDock predictor](https://github.com/pinder-org/pinder/blob/main/src/pinder-methods/pinder/methods/run/patchdock/predict.py): `src/pinder-methods/pinder/methods/run/patchdock/predict.py`

### Other components

- **Researcher**
- **Published dataset**
- **Cloud storage**
- **RCSB structures**

## Connections

- Researcher → Index and paths: locates dataset
- Published dataset → Index and paths: serves index
- Index and paths → Cloud storage: downloads files
- Index and paths → Local dataset: syncs dataset
- Researcher → Dataset loader: requests data
- Dataset loader → Index and paths: gets index
- Dataset loader → Local dataset: loads files
- Researcher → Pinder system: selects complex
- Pinder system → Index and paths: resolves entry
- Pinder system → Structure operations: aligns structures
- Ingestion pipeline → Task batching: builds task batches
- Ingestion pipeline → Dimer construction: runs ingestion tasks
- Ingestion pipeline → Annotations: runs annotations
- Ingestion pipeline → Apo pairing: runs apo pairing
- Ingestion pipeline → Dataset splits: generates splits
- Ingestion pipeline → Similarity clusters: generates clusters
- Task batching → RCSB structures: discovers structures
- Dimer construction → Local dataset: writes dataset files
- Researcher → Dataset QC: checks dataset
- Dataset QC → Index and paths: reads index
- Researcher → Dataset plots: analyzes results
- Researcher → Evaluation runner: evaluates predictions
- Evaluation runner → Docking metrics: computes metrics
- Evaluation runner → Index and paths: reads evaluation index
- Researcher → Submission creation: creates submission
- Researcher → Method actions: chooses action
- Method actions → Inference preparation: prepares inputs
- Method actions → FRODOCK predictor: dispatches prediction
- Method actions → HDOCK predictor: dispatches prediction
- Method actions → PatchDock predictor: dispatches prediction
