# provakar1994/gmn_ana architecture

> Architecture diagram of the GitHub repository provakar1994/gmn_ana, 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/provakar1994/gmn_ana
- Repository: https://github.com/provakar1994/gmn_ana

## Overview

gmn_ana is a ROOT-based SBS GMn analysis framework with analysis programs for experimental and simulated data, detector studies, kinematic fits, and run-level beam/charge calibration. The broad workflow is researchers selecting run or simulation inputs, running a domain-specific analysis, and producing fitted or plotted results. The tree documents these capabilities, while sampled source confirms ROOT-oriented fitting, run/file utilities, and BCM/beam managers. Most script internals were not sampled, so links between individual analysis stages and framework components are intentionally limited.

Main entry points: [`scripts`](https://github.com/provakar1994/gmn_ana/tree/master/scripts) (Experimental analyses), [`scripts/simulation`](https://github.com/provakar1994/gmn_ana/tree/master/scripts/simulation) (Simulation analyses), [`src/Utilities.cpp`](https://github.com/provakar1994/gmn_ana/blob/master/src/Utilities.cpp) (Run and ROOT utilities), [`scripts/thesis/ch4/evrecon`](https://github.com/provakar1994/gmn_ana/tree/master/scripts/thesis/ch4/evrecon) (Event reconstruction)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_analysis["Physics analysis"]
  node_expanalysis["Experimental analyses"]
  node_simanalysis["Simulation analyses"]
  node_eventrecon["Event reconstruction"]
  node_yieldratio["Yield and ratios<br/>[yield_per_run.cpp]"]
  node_flavor["Flavor decomposition<br/>[flavordecomp.cpp]"]
end

subgraph group_calibration["Detector calibration"]
  node_detcalib["Detector calibration<br/>[detcalib.cpp]"]
  node_detstudies["Detector studies"]
  node_momentumcalib["Momentum calibration"]
end

subgraph group_framework["Analysis framework"]
  node_runutilities["Run and ROOT utilities<br/>[Utilities.cpp]"]
  node_kinematics["Kinematic variables<br/>[KinematicVar.cpp]"]
  node_cuts["Analysis cuts<br/>[Cut.cpp]"]
  node_fitting["Histogram fitting<br/>[Fit.cpp]"]
  node_plotting["Plot utilities<br/>[PlotCustomizer.cpp]"]
end

subgraph group_beam["Beam monitoring"]
  node_bcmworkflow["BCM calibration<br/>[bcmCalib.py]"]
  node_bcmmanager["BCM manager<br/>[BCMManager.h]"]
  node_beammanager["Beam manager<br/>[BeamManager.h]"]
end

node_researcher(("Researcher"))
node_runinputs["Run inputs"]
node_siminputs["Simulation inputs"]
node_epics["EPICS data"]
node_rootfiles[("ROOT files")]
node_results["Plots and results"]
node_root["ROOT"]

node_researcher -->|"runs analysis"| node_expanalysis
node_researcher -->|"runs analysis"| node_simanalysis
node_researcher -->|"runs reconstruction"| node_eventrecon
node_researcher -->|"runs calibration"| node_bcmworkflow
node_runinputs -->|"supplies runs"| node_expanalysis
node_siminputs -->|"supplies jobs"| node_simanalysis
node_runinputs -->|"run metadata"| node_runutilities
node_rootfiles -->|"file metadata"| node_runutilities
node_runutilities -->|"loads run data"| node_expanalysis
node_runutilities -->|"loads ROOT data"| node_simanalysis
node_expanalysis -->|"uses variables"| node_kinematics
node_expanalysis -->|"applies cuts"| node_cuts
node_expanalysis -->|"fits histograms"| node_fitting
node_simanalysis -->|"fits histograms"| node_fitting
node_eventrecon -->|"reads data"| node_rootfiles
node_eventrecon -->|"produces outputs"| node_results
node_expanalysis -->|"produces outputs"| node_results
node_simanalysis -->|"produces outputs"| node_results
node_yieldratio -->|"reads data"| node_rootfiles
node_yieldratio -->|"writes results"| node_results
node_flavor -->|"writes results"| node_results
node_detcalib -->|"reads data"| node_rootfiles
node_detstudies -->|"reads data"| node_rootfiles
node_momentumcalib -->|"reads data"| node_rootfiles
node_detcalib -->|"produces outputs"| node_results
node_detstudies -->|"produces outputs"| node_results
node_momentumcalib -->|"produces tree"| node_results
node_bcmworkflow -->|"invokes calibration"| node_bcmmanager
node_bcmmanager -->|"reads trees"| node_rootfiles
node_beammanager -->|"reads trees"| node_rootfiles
node_bcmmanager -->|"loads EPICS data"| node_epics
node_beammanager -->|"loads EPICS data"| node_epics
node_bcmworkflow -->|"creates outputs"| node_results
node_fitting -->|"uses ROOT"| node_root
node_plotting -->|"uses ROOT"| node_root
node_expanalysis -->|"customizes plots"| node_plotting

click node_expanalysis "https://github.com/provakar1994/gmn_ana/tree/master/scripts"
click node_simanalysis "https://github.com/provakar1994/gmn_ana/tree/master/scripts/simulation"
click node_eventrecon "https://github.com/provakar1994/gmn_ana/tree/master/scripts/thesis/ch4/evrecon"
click node_yieldratio "https://github.com/provakar1994/gmn_ana/blob/master/scripts/yield_per_run.cpp"
click node_flavor "https://github.com/provakar1994/gmn_ana/blob/master/scripts/flavordecomp/flavordecomp.cpp"
click node_detcalib "https://github.com/provakar1994/gmn_ana/blob/master/scripts/thesis/ch4/detcalib/detcalib.cpp"
click node_detstudies "https://github.com/provakar1994/gmn_ana/tree/master/scripts"
click node_momentumcalib "https://github.com/provakar1994/gmn_ana/blob/master/scripts/pcalib/MakeMomentumCalibrationTree.C"
click node_bcmworkflow "https://github.com/provakar1994/gmn_ana/blob/master/dflay/bcmCalib.py"
click node_bcmmanager "https://github.com/provakar1994/gmn_ana/blob/master/dflay/include/BCMManager.h"
click node_beammanager "https://github.com/provakar1994/gmn_ana/blob/master/dflay/include/BeamManager.h"
click node_runutilities "https://github.com/provakar1994/gmn_ana/blob/master/src/Utilities.cpp"
click node_kinematics "https://github.com/provakar1994/gmn_ana/blob/master/src/KinematicVar.cpp"
click node_cuts "https://github.com/provakar1994/gmn_ana/blob/master/src/Cut.cpp"
click node_fitting "https://github.com/provakar1994/gmn_ana/blob/master/src/Fit.cpp"
click node_plotting "https://github.com/provakar1994/gmn_ana/blob/master/src/PlotCustomizer.cpp"

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_expanalysis,node_simanalysis,node_eventrecon,node_yieldratio,node_flavor toneBlue
class node_detcalib,node_detstudies,node_momentumcalib,node_rootfiles toneAmber
class node_runutilities,node_kinematics,node_cuts,node_fitting,node_plotting toneMint
class node_bcmworkflow,node_bcmmanager,node_beammanager toneRose
class node_researcher,node_runinputs,node_siminputs,node_epics,node_results,node_root toneIndigo
```

## Components

### Physics analysis

- [Experimental analyses](https://github.com/provakar1994/gmn_ana/tree/master/scripts): `scripts`
- [Simulation analyses](https://github.com/provakar1994/gmn_ana/tree/master/scripts/simulation): `scripts/simulation`
- [Event reconstruction](https://github.com/provakar1994/gmn_ana/tree/master/scripts/thesis/ch4/evrecon): `scripts/thesis/ch4/evrecon`
- [Yield and ratios](https://github.com/provakar1994/gmn_ana/blob/master/scripts/yield_per_run.cpp): `scripts/yield_per_run.cpp`
- [Flavor decomposition](https://github.com/provakar1994/gmn_ana/blob/master/scripts/flavordecomp/flavordecomp.cpp): `scripts/flavordecomp/flavordecomp.cpp`

### Detector calibration

- [Detector calibration](https://github.com/provakar1994/gmn_ana/blob/master/scripts/thesis/ch4/detcalib/detcalib.cpp): `scripts/thesis/ch4/detcalib/detcalib.cpp`
- [Detector studies](https://github.com/provakar1994/gmn_ana/tree/master/scripts): `scripts`
- [Momentum calibration](https://github.com/provakar1994/gmn_ana/blob/master/scripts/pcalib/MakeMomentumCalibrationTree.C): `scripts/pcalib/MakeMomentumCalibrationTree.C`

### Analysis framework

- [Run and ROOT utilities](https://github.com/provakar1994/gmn_ana/blob/master/src/Utilities.cpp): `src/Utilities.cpp`
- [Kinematic variables](https://github.com/provakar1994/gmn_ana/blob/master/src/KinematicVar.cpp): `src/KinematicVar.cpp`
- [Analysis cuts](https://github.com/provakar1994/gmn_ana/blob/master/src/Cut.cpp): `src/Cut.cpp`
- [Histogram fitting](https://github.com/provakar1994/gmn_ana/blob/master/src/Fit.cpp): `src/Fit.cpp`
- [Plot utilities](https://github.com/provakar1994/gmn_ana/blob/master/src/PlotCustomizer.cpp): `src/PlotCustomizer.cpp`

### Beam monitoring

- [BCM calibration](https://github.com/provakar1994/gmn_ana/blob/master/dflay/bcmCalib.py): `dflay/bcmCalib.py`
- [BCM manager](https://github.com/provakar1994/gmn_ana/blob/master/dflay/include/BCMManager.h): `dflay/include/BCMManager.h`
- [Beam manager](https://github.com/provakar1994/gmn_ana/blob/master/dflay/include/BeamManager.h): `dflay/include/BeamManager.h`

### Other components

- **Researcher**
- **Run inputs**
- **Simulation inputs**
- **EPICS data**
- **ROOT files**
- **Plots and results**
- **ROOT**

## Connections

- Researcher → Experimental analyses: runs analysis
- Researcher → Simulation analyses: runs analysis
- Researcher → Event reconstruction: runs reconstruction
- Researcher → BCM calibration: runs calibration
- Run inputs → Experimental analyses: supplies runs
- Simulation inputs → Simulation analyses: supplies jobs
- Run inputs → Run and ROOT utilities: run metadata
- ROOT files → Run and ROOT utilities: file metadata
- Run and ROOT utilities → Experimental analyses: loads run data
- Run and ROOT utilities → Simulation analyses: loads ROOT data
- Experimental analyses → Kinematic variables: uses variables
- Experimental analyses → Analysis cuts: applies cuts
- Experimental analyses → Histogram fitting: fits histograms
- Simulation analyses → Histogram fitting: fits histograms
- Event reconstruction → ROOT files: reads data
- Event reconstruction → Plots and results: produces outputs
- Experimental analyses → Plots and results: produces outputs
- Simulation analyses → Plots and results: produces outputs
- Yield and ratios → ROOT files: reads data
- Yield and ratios → Plots and results: writes results
- Flavor decomposition → Plots and results: writes results
- Detector calibration → ROOT files: reads data
- Detector studies → ROOT files: reads data
- Momentum calibration → ROOT files: reads data
- Detector calibration → Plots and results: produces outputs
- Detector studies → Plots and results: produces outputs
- Momentum calibration → Plots and results: produces tree
- BCM calibration → BCM manager: invokes calibration
- BCM manager → ROOT files: reads trees
- Beam manager → ROOT files: reads trees
- BCM manager → EPICS data: loads EPICS data
- Beam manager → EPICS data: loads EPICS data
- BCM calibration → Plots and results: creates outputs
- Histogram fitting → ROOT: uses ROOT
- Plot utilities → ROOT: uses ROOT
- Experimental analyses → Plot utilities: customizes plots
