# Setup guidance
First make a `<work_dir>`. And cd into it.
## singularity
```bash
cd <work_dir>
singularity pull pioneer_april2023.sif docker://jlabounty/pioneer:april2023
```
The above cmd may fail due to not enough disk space [[ref](/ryB9RU-lh)].
Pioneer Docker Hub: https://hub.docker.com/r/jlabounty/pioneer/tags
Get some utility scripts [[ref](https://github.com/HaiwangYu/pioneer-utilities/tree/master/container)].
```bash
cd <work_dir>
wget https://raw.githubusercontent.com/HaiwangYu/pioneer-utilities/master/container/login.rc
wget https://raw.githubusercontent.com/HaiwangYu/pioneer-utilities/master/container/run_singularity.sh
```
Run singularity container. All following sections are performed inside the container.
```bash
cd <work_dir>
./run_singularity.sh
```
## Inside the container
### checkout pioneer/main
```bash
cd /pioneer
git clone git@github.com:PIONEER-Experiment/main.git
cd main
git checkout -b yuhw_ress remotes/origin/yuhw_ress
git submodule init
git submodule update
```
Need to use right branches for sub-repos
```
./checkout-branches.sh
```
<!-- ### setup wire-cell-ress
Ref: https://github.com/BNLIF/wire-cell-ress/tree/pioneer -->
### setup eigen if not available
In the [PIONEER april2023 container](https://hub.docker.com/layers/jlabounty/pioneer/april2023/images/sha256-b76552aed81dbb10308136e7d3aa4b66912ca868146e9637e13fb4cb2a636c31?context=explore), Eigen was already installed at `/software/eigen`. If use outside the container or one wants to use a different installation, an example setup is given below. **Note, `Eigen` is used as a header only library in `ress`, so 'installation' here only means setup some directory structures.**
```bash
mkdir -p /pioneer/opt/
cd /pioneer/opt/
wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.bz2
tar -xf eigen-3.4.0.tar.bz2
mkdir eigen
cd eigen
ln -s /pioneer/opt/eigen-3.4.0 ./include
export EIGEN_DIR=/pioneer/opt/eigen # if you want ress to use this one
```
<!-- setup wire-cell-ress
```bash
cd /pioneer
git clone https://github.com/BNLIF/wire-cell-ress.git
cd wire-cell-ress
git checkout -b pioneer remotes/origin/pioneer
./wcb configure --prefix=$PIONEERSYS/install/ --with-eigen=$EIGEN_DIR/
./wcb -p build install
``` -->
<!-- add some env var, these are also in the `login.rc` for now
```
export EIGEN_DIR=/pioneer/opt/eigen
``` -->
### build and set env
gen `setenv.sh` for the future, can be skipped if already done
```bash
cd /pioneer/main
./setup.sh -e
```
build `shared` and `MonteCarlo`
```bash
cd /pioneer/main
./setup.sh -b
```
build `DetResponse`
```bash
cd /pioneer/main
./setup.sh -bd
```
build `Reco` (**note: this will build `ress` as a prerequisite**)
```bash
cd /pioneer/main
./setup.sh -bo
```
**note, this multi-step building is just for now**
Set env, this is in `login.rc` for now
```bash
source setenv.sh
```
### run example
Ref: https://github.com/HaiwangYu/pioneer-example
```bash
cd /pioneer
git clone https://github.com/HaiwangYu/pioneer-example.git
cd pioneer-example
```
plot gdml
```bash
root -l check_gdml.C
```
simulation
```bash
g4pienux test_sim.mac
```
detector response
**The file generated above seems to break the DER. Use the pre-generated sim.root for now.**
```bash
run Gaudi test_der.cfg
```
check DER
```bash
root -l check_der.C
```
REC
```bash
run Gaudi test_rec.cfg
```