epix 0.3.8
Electron and Photon Instructions generator for XENON
Requires Python: >=3.6

# epix

[![PyPI version shields.io](https://img.shields.io/pypi/v/epix.svg)](https://pypi.python.org/pypi/epix/)
[![CodeFactor](https://www.codefactor.io/repository/github/xenonnt/epix/badge)](https://www.codefactor.io/repository/github/xenonnt/epix)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7516941.svg)](https://doi.org/10.5281/zenodo.7516941)

**E**lectron and **P**hoton **I**nstructions generator for **X**ENON

The job of epix is to load XENONnT Geant4 MC data and produce inputs for wfsim, using nestpy for the quanta generation and DBSCAN for the clustering of the individual steps.

## Installation

With all requirements fulfilled (e.g., on top of the [XENONnT montecarlo_environment](https://github.com/XENONnT/montecarlo_environment)):
```
pip install epix
```
or install in editable mode from source:
```
git clone https://github.com/XENONnT/epix
pip install -e epix
```

## Usage

Only an input file is needed to run epix:
```
bin/run_epix --InputFile <path_and_filename>
```
The other keyword arguments are:

| Argument | Description | Default |
| :------------- | :------------- | :------------- |
| `--Detector`  | Detector to be used. Has to be defined in epix.detectors | `XENONnT` |
| `--DetectorConfigOverride`  | Config file to overwrite default epix.detectors settings; see examples in the `configs` folder | in epix.detectors |
| `--CutOnEventid`  | If selected, the next two arguments act on the G4 event id, and not the entry number (default) | `false` |
| `--EntryStart`  | First event to be read | 0 |
| `--EntryStop`  | How many entries from the ROOT file you want to process | all |
| `--MicroSeparation`  | DBSCAN clustering distance (mm) | `0.005` |
| `--MicroSeparationTime`  | Clustering time (ns) | `10` |
| `--TagClusterBy`  | decide if you tag the cluster (particle type, energy depositing process) according to first interaction in it (`time`) or most energetic (`energy`) | `energy` |
| `--MaxDelay`  | Time after which we cut the rest of the event (ns) | `1e7` |
| `--MaxEnergy`  | Upper range for energy selection _in sensitive volume_ (keV) | `inf` |
| `--MinEnergy`  | Lower range for energy selection _in sensitive volume_ (keV) | `-1`  |
| `--YieldModel` | Model for yield/quanta generation (nest / bbf / beta) | `nest` |
| `--ClusterMethod` | Microclustering method (dbscan / betadecay / brem) | `dbscan` |
| `--SourceRate`  | Event rate for event separation<br /> - `0` for no time shift (G4 time remains)<br /> - `-1` for clean time shift between events<br /> - `>0` (Hz) for random spacing | `0` |
| `--CutNeutron` | Add if you want to filter only nuclear recoil events (maximum ER energy deposit 10 keV) | `false` |
| `--JobNumber`  | Job number in full chain simulation. Offset is computed as `JobNumber * n_simulated_events/SourceRate`, where `n_simulated_events` is read from file. | `0` |
| `--OutputPath`  | Output file path | Same directory as input file |
| `--Debug`  | Tell epix if you want timing outputs | `false` |



0.3.8 (2024-02-23)
==================
* Propagate defaults for energy range arguments (#82)

0.3.7 (2024-02-08)
==================
* Selection based on total energy deposit in sensitive volume (#76)
* Fix cut_by_eventid again (#80)

0.3.6 (2024-01-15)
==================
* Fix G4 event number selection with cut_by_eventid (#75)
* `np.int` is deprecated (#78)
* Fix epix to allow version bump (#77)

0.3.5 (2023-09-13)
==================
* Custom microclustering and beta-yields generator (#73)

0.3.4 (2023-03-28)
==================
* Fix calculation for cluster weighted average time (#65)
* Add zenodo badge

0.3.3 (2023-01-09)
==================
* Specify not working numba in req. file (#62)
* Install scikit-learn (#63)

0.3.2 (2022-08-15)
==================
 * First implementation of BBF quanta generator (#57)

0.3.1 (2022-06-15)
==================
  * Save primary particle position (#56)
  * Set arg defaults (#55)

0.3.0 (2022-05-20)
==================
  * Add NR filter before quanta generation (#53)
  * Update energy selection for Kr83m model (#52)

0.2.2 (2021-10-31)
==================
  * Fixed field map loading (#50)

0.2.1 (2021-10-30)
==================
  * Update efield handler to maps format (#49)

0.2.0 (2021-10-28)
==================
  * Fix clustering indexing (#45)
  * Treatment for empty data (#40)
  * Fix for NEST interaction classification parameters (#44)
  * Enable CSV input (#42) 

0.1.3 (2021-07-27)
==================
  * Tuning clustering defaults (#39)
  * Return statement for removed excitons (#38)
  * Added local field and number of excitons (#34)

0.1.2 (2021-06-09)
==================
  * Add sklearn to requirements (#31)
  * Fix Kr83m NEST-related issues (#30)

0.1.1 (2021-04-09)
==================
  * Automatic PyPi upload (#24)
  * PyPi and codefactor integration

0.1.0 (2021-03-30)
==================
  * E-Field format change (#23)
  * strax interface (#19)

0.0.6 (2021-02-12)
==================
  * Set e- recoil type as default (#15)

0.0.5 (2021-02-08)
==================
  * Change detector naming (#13)

0.0.4 (2021-02-08)
==================
  * New Efield format loading (#11)
  * Store NEST id as recoil type (#10)

0.0.3 (2021-01-26)
==================
  * Clustering and event separation (#6)

0.0.2 (2021-01-25)
==================
  * Added detector volumes (#8)

0.0.1 (2020-01-21)
==================
  * Initial working release as python package