# mengxu98/scop architecture

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

- Interactive diagram: https://gitdiagram.com/mengxu98/scop
- Repository: https://github.com/mengxu98/scop

## Overview

scop is an R package for single-cell and spatial omics analysis. Its principal workflow takes expression or spatial data through quality control and preprocessing, then supports dimensionality reduction and cell-population analysis, followed by specialized downstream analyses such as composition estimation, trajectory and velocity inference, gene regulation, pathway scoring, and cell-cell communication. The tree shows native C++ implementations and Python runners, but not the R-facing orchestration layer, so arrows are limited to documented workflow stages; unsampled wiring is not inferred.

Main entry points: [`src/PCA.cpp`](https://github.com/mengxu98/scop/blob/main/src/PCA.cpp) (Dimension reduction), [`src/KNNVoting.cpp`](https://github.com/mengxu98/scop/blob/main/src/KNNVoting.cpp) (Population analysis), [`src/Palantir.cpp`](https://github.com/mengxu98/scop/blob/main/src/Palantir.cpp) (Trajectory analysis), [`src/Preprocessing.cpp`](https://github.com/mengxu98/scop/blob/main/src/Preprocessing.cpp) (Preprocessing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_prep["Preprocessing"]
  node_qc["Quality control"]
  node_preprocess["Preprocessing<br/>[Preprocessing.cpp]"]
  node_normalize["Normalization<br/>[normalize_data.cpp]"]
  node_features["Feature selection"]
end

subgraph group_embedding["Embedding and populations"]
  node_reduce["Dimension reduction<br/>[PCA.cpp]"]
  node_manifold["Manifold embedding<br/>[Manifold.cpp]"]
  node_populations["Population analysis<br/>[KNNVoting.cpp]"]
  node_markers["Marker analysis"]
end

subgraph group_composition["Composition analysis"]
  node_bulk["Bulk deconvolution<br/>[BayesPrism.cpp]"]
  node_spatial_deconv["Spatial deconvolution<br/>[cell2location.py]"]
  node_composition_tests["Composition testing<br/>[Milo.cpp]"]
end

subgraph group_dynamics["Dynamics and trajectories"]
  node_velocity["RNA velocity"]
  node_cell2fate["Cell2fate inference<br/>[cell2fate.py]"]
  node_trajectory["Trajectory analysis<br/>[Palantir.cpp]"]
  node_dynamic_features["Dynamic features"]
end

subgraph group_biology["Molecular and spatial biology"]
  node_gene_sets["Gene-set scoring<br/>[GeneSetScoring.cpp]"]
  node_regulation["Gene regulation<br/>[SCENIC.cpp]"]
  node_perturbation["Perturbation analysis<br/>[ScTenifoldKnk.cpp]"]
  node_communication["Cell communication<br/>[commot_runner.py]"]
  node_spatial_patterns["Spatial patterns"]
  node_flux["Metabolic flux<br/>[scFEA.py]"]
end

node_analyst(("Analyst"))
node_input["Omics data"]
node_results["Analysis results"]

node_analyst -->|"provides"| node_input
node_input -->|"analyzes"| node_qc
node_qc -->|"prepares data"| node_preprocess
node_preprocess -->|"normalizes"| node_normalize
node_normalize -->|"selects features"| node_features
node_features -->|"reduces dimensions"| node_reduce
node_reduce -->|"embeds data"| node_manifold
node_reduce -->|"supports"| node_populations
node_populations -->|"characterizes"| node_markers
node_populations -->|"tests composition"| node_composition_tests
node_input -->|"estimates composition"| node_bulk
node_input -->|"estimates locations"| node_spatial_deconv
node_input -->|"infers motion"| node_velocity
node_input -->|"infers fate"| node_cell2fate
node_input -->|"infers trajectory"| node_trajectory
node_trajectory -->|"finds changes"| node_dynamic_features
node_input -->|"scores pathways"| node_gene_sets
node_input -->|"infers networks"| node_regulation
node_input -->|"models perturbations"| node_perturbation
node_input -->|"estimates signaling"| node_communication
node_input -->|"maps spatial trends"| node_spatial_patterns
node_input -->|"estimates flux"| node_flux
node_markers -->|"produces results"| node_results
node_bulk -->|"produces results"| node_results
node_spatial_deconv -->|"produces results"| node_results
node_composition_tests -->|"produces results"| node_results
node_velocity -->|"produces results"| node_results
node_cell2fate -->|"produces results"| node_results
node_trajectory -->|"produces results"| node_results
node_dynamic_features -->|"produces results"| node_results
node_gene_sets -->|"produces results"| node_results
node_regulation -->|"produces results"| node_results
node_perturbation -->|"produces results"| node_results
node_communication -->|"produces results"| node_results
node_spatial_patterns -->|"produces results"| node_results
node_flux -->|"produces results"| node_results

click node_preprocess "https://github.com/mengxu98/scop/blob/main/src/Preprocessing.cpp"
click node_normalize "https://github.com/mengxu98/scop/blob/main/src/normalize_data.cpp"
click node_features "https://github.com/mengxu98/scop/blob/main/src/variable_features.cpp"
click node_reduce "https://github.com/mengxu98/scop/blob/main/src/PCA.cpp"
click node_manifold "https://github.com/mengxu98/scop/blob/main/src/Manifold.cpp"
click node_populations "https://github.com/mengxu98/scop/blob/main/src/KNNVoting.cpp"
click node_markers "https://github.com/mengxu98/scop/blob/main/src/ConservedMarkers.cpp"
click node_bulk "https://github.com/mengxu98/scop/blob/main/src/BayesPrism.cpp"
click node_spatial_deconv "https://github.com/mengxu98/scop/blob/main/inst/python/cell2location.py"
click node_composition_tests "https://github.com/mengxu98/scop/blob/main/src/Milo.cpp"
click node_velocity "https://github.com/mengxu98/scop/blob/main/src/DynamicalVelocity.cpp"
click node_cell2fate "https://github.com/mengxu98/scop/blob/main/inst/python/cell2fate.py"
click node_trajectory "https://github.com/mengxu98/scop/blob/main/src/Palantir.cpp"
click node_dynamic_features "https://github.com/mengxu98/scop/blob/main/src/DynamicFeatures.cpp"
click node_gene_sets "https://github.com/mengxu98/scop/blob/main/src/GeneSetScoring.cpp"
click node_regulation "https://github.com/mengxu98/scop/blob/main/src/SCENIC.cpp"
click node_perturbation "https://github.com/mengxu98/scop/blob/main/src/ScTenifoldKnk.cpp"
click node_communication "https://github.com/mengxu98/scop/blob/main/inst/python/commot_runner.py"
click node_spatial_patterns "https://github.com/mengxu98/scop/blob/main/src/SpatialGradient.cpp"
click node_flux "https://github.com/mengxu98/scop/blob/main/inst/python/scfea/scFEA.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_qc,node_preprocess,node_normalize,node_features toneBlue
class node_reduce,node_manifold,node_populations,node_markers toneAmber
class node_bulk,node_spatial_deconv,node_composition_tests toneMint
class node_velocity,node_cell2fate,node_trajectory,node_dynamic_features toneRose
class node_gene_sets,node_regulation,node_perturbation,node_communication,node_spatial_patterns,node_flux,node_analyst,node_input,node_results toneIndigo
```

## Components

### Preprocessing

- **Quality control**
- [Preprocessing](https://github.com/mengxu98/scop/blob/main/src/Preprocessing.cpp): `src/Preprocessing.cpp`
- [Normalization](https://github.com/mengxu98/scop/blob/main/src/normalize_data.cpp): `src/normalize_data.cpp`
- [Feature selection](https://github.com/mengxu98/scop/blob/main/src/variable_features.cpp): `src/variable_features.cpp`

### Embedding and populations

- [Dimension reduction](https://github.com/mengxu98/scop/blob/main/src/PCA.cpp): `src/PCA.cpp`
- [Manifold embedding](https://github.com/mengxu98/scop/blob/main/src/Manifold.cpp): `src/Manifold.cpp`
- [Population analysis](https://github.com/mengxu98/scop/blob/main/src/KNNVoting.cpp): `src/KNNVoting.cpp`
- [Marker analysis](https://github.com/mengxu98/scop/blob/main/src/ConservedMarkers.cpp): `src/ConservedMarkers.cpp`

### Composition analysis

- [Bulk deconvolution](https://github.com/mengxu98/scop/blob/main/src/BayesPrism.cpp): `src/BayesPrism.cpp`
- [Spatial deconvolution](https://github.com/mengxu98/scop/blob/main/inst/python/cell2location.py): `inst/python/cell2location.py`
- [Composition testing](https://github.com/mengxu98/scop/blob/main/src/Milo.cpp): `src/Milo.cpp`

### Dynamics and trajectories

- [RNA velocity](https://github.com/mengxu98/scop/blob/main/src/DynamicalVelocity.cpp): `src/DynamicalVelocity.cpp`
- [Cell2fate inference](https://github.com/mengxu98/scop/blob/main/inst/python/cell2fate.py): `inst/python/cell2fate.py`
- [Trajectory analysis](https://github.com/mengxu98/scop/blob/main/src/Palantir.cpp): `src/Palantir.cpp`
- [Dynamic features](https://github.com/mengxu98/scop/blob/main/src/DynamicFeatures.cpp): `src/DynamicFeatures.cpp`

### Molecular and spatial biology

- [Gene-set scoring](https://github.com/mengxu98/scop/blob/main/src/GeneSetScoring.cpp): `src/GeneSetScoring.cpp`
- [Gene regulation](https://github.com/mengxu98/scop/blob/main/src/SCENIC.cpp): `src/SCENIC.cpp`
- [Perturbation analysis](https://github.com/mengxu98/scop/blob/main/src/ScTenifoldKnk.cpp): `src/ScTenifoldKnk.cpp`
- [Cell communication](https://github.com/mengxu98/scop/blob/main/inst/python/commot_runner.py): `inst/python/commot_runner.py`
- [Spatial patterns](https://github.com/mengxu98/scop/blob/main/src/SpatialGradient.cpp): `src/SpatialGradient.cpp`
- [Metabolic flux](https://github.com/mengxu98/scop/blob/main/inst/python/scfea/scFEA.py): `inst/python/scfea/scFEA.py`

### Other components

- **Analyst**
- **Omics data**
- **Analysis results**

## Connections

- Analyst → Omics data: provides
- Omics data → Quality control: analyzes
- Quality control → Preprocessing: prepares data
- Preprocessing → Normalization: normalizes
- Normalization → Feature selection: selects features
- Feature selection → Dimension reduction: reduces dimensions
- Dimension reduction → Manifold embedding: embeds data
- Dimension reduction → Population analysis: supports
- Population analysis → Marker analysis: characterizes
- Population analysis → Composition testing: tests composition
- Omics data → Bulk deconvolution: estimates composition
- Omics data → Spatial deconvolution: estimates locations
- Omics data → RNA velocity: infers motion
- Omics data → Cell2fate inference: infers fate
- Omics data → Trajectory analysis: infers trajectory
- Trajectory analysis → Dynamic features: finds changes
- Omics data → Gene-set scoring: scores pathways
- Omics data → Gene regulation: infers networks
- Omics data → Perturbation analysis: models perturbations
- Omics data → Cell communication: estimates signaling
- Omics data → Spatial patterns: maps spatial trends
- Omics data → Metabolic flux: estimates flux
- Marker analysis → Analysis results: produces results
- Bulk deconvolution → Analysis results: produces results
- Spatial deconvolution → Analysis results: produces results
- Composition testing → Analysis results: produces results
- RNA velocity → Analysis results: produces results
- Cell2fate inference → Analysis results: produces results
- Trajectory analysis → Analysis results: produces results
- Dynamic features → Analysis results: produces results
- Gene-set scoring → Analysis results: produces results
- Gene regulation → Analysis results: produces results
- Perturbation analysis → Analysis results: produces results
- Cell communication → Analysis results: produces results
- Spatial patterns → Analysis results: produces results
- Metabolic flux → Analysis results: produces results
