# ANASEN Monte Carlo (anasenMS.cpp)

## Overview

`anasenMS.cpp` is a standalone Monte Carlo simulation for an ANASEN-style detector setup. It generates transfer reaction kinematics, propagates products to a wire chamber (PW) and a silicon array (SX3), reconstructs tracks, and writes output to a ROOT tree.  

## Requirements

- ROOT (e.g. `root-config` for compile flags)
- C++ compiler (gcc/g++)
- Project includes: `ClassTransfer.h`, `ClassAnasen.h`, plus their dependent implementation files.

## Build

In `Armory` directory:

the directory contains a make file

Run `make AnasenMS` and it will automatically run

```bash
g++ -O2 -o anasenMS anasenMS.cpp ClassTransfer.cpp ClassAnasen.cpp ... `root-config --cflags --libs`
```

(Adjust source file list based on actual project layout.)

## Run

```bash
./anasenMS [numEvents] vis(optional)
```

- `numEvents`: optional integer, default `1000000`
- Outputs: `SimAnasen1.root` containing `tree1` and `tree2`
tree1 contains pre-energy loss calculations
tree2 contains post-energy loss calculations (subject to change)

## What the code does

- Detector geometry is built within ClassAnasen.h

-To assign dead channels (anode/cathode/SX3), add ID's to IsDead<detector> boolean functions at top of simulation,
  inside the set

- Initializes reaction: `TransferReaction transfer`
  - `SetA(24,12,0)` target
  - `SetIncidentEnergyAngle(10,0,0)` beam energy and direction
  - `Seta`, `Setb` reaction fragment indices
- Sets excitation lists: `ExAList`, `ExList`
- Vertex and resolution settings:
  - `vertexX/Y/Z` ranges
  - `sigmaSX3_W`, `sigmaSX3_L`, `sigmaPW_A`, `sigmaPW_C`
- Loads energy loss tables from `../ELoss/` using `TGraph` for interpolation
- Prepares ROOT output tree and branches for truth/reconstructed
- Loop over events:
  - Sample excitation and CM direction
  - `transfer.Event(thetaCM, phiCM)` outputs `TLorentzVector` products
  - Compute lab angles/energies
  - Random vertex inside target volume
  - Run detector response:
    - `pw->FindWireID(...)`
    - `sx3->FindSX3Pos(...)`
  - Read out wire hits and SX3 channel + depth
  - Apply position smearing for SX3
  - **Apply energy loss** to light particle using interpolated dE/dx from table, based on path length from vertex to hit
  - Reconstruct track via `pw->CalTrack` and `pw->CalTrack2`
  - Fill ROOT tree
- At end: write tree, close file, clean up

## Notes

- Important methods are from:
  - `ClassTransfer` (`SetA`, `SetIncidentEnergyAngle`, `Seta`, `Setb`, `SetExA`, `SetExB`, `CalReactionConstant`, `Event`)
  - `ClassAnasen` / `SX3` / `PW` (`FindWireID`, `FindSX3Pos`, `GetHitInfo`, `CalTrack`, `CalTrack2`, `GetTrackTheta`, `GetTrackPhi`, `GetZ0`, `GetHitPosWithSigma`, `GetID`, etc.)
- Optional: change excitation lists, vertex spread, and sigma values to mimic different beam/target conditions.
