This repository contains the code for developing a full 3D neutrino interaction reconstruction centered using outputs of a convolutional neural network.
The convolutional neural network aims to provide information that seeds the reconstruction of particles and interactions. This includes:
- good 3D space points representing the locations where charge particle tracks passed through the detector
- associations between the 3D space points and the spatial patterns in the TPC images where the points project into.
- scores indicating which 3D points are near important, key-points: track ends, shower starts, and neutrino interaction vertices.
Documentation for the library can be found at github.io/larflow.
- larmatchnet: definition of network, scripts to train and deploy network
- larflow: c++ libraries providing methods to prepare data, perform downstream reconstruction
Within the larflow folder, are the following c++ modules:
PrepFlowMatchData: classes/methods for preparing spacepoint data from TPC imagesKeyPoints: classes/methods for preparing keypoint training info using spacepoint data fromPrepFlowMatchDataSpatialEmbed: classes/methods for preparing spatial embedding training info using spacepoint data fromPrepFlowMatchDataReco: downstream reconstruction using output of networks to form candidate neutrino interactionsCRTMatch: tools to combine CRT data with spacepoints and TPC data in order to provide tagged cosmic muon tracksVoxelizer: voxelize larmatch spacepoints, not finished. intended to help spacepoint output connect to 3D convolutional networks.LArFlowConstants: constants, enumerations used in the other modulesFlowContourMatch:deprecated tools
Other folders are considered deprecated and need to be cleaned up and archived.
- testdata: default location for testdata used for development
- utils: utility scripts
- container: script to build Singularity container that will work on tufts grid
deprecated folders, kept for archival reasons
- deprecated/old_larflownet_models: different version of LArFlow models
- deprecated/old_larflownet_dataprep: scripts to make larflow input and truth images from larsoft files and then prepare crops for training
- deprecated/old_larflownet_training: training scripts
- deprecated/old_larflownet_deploy: take trained models and process test files
- deprecated/old_larflownet_ana: analysis scripts for processed test files
- deprecated/old_larflownet_weights: default location for weights
- deprecated/postprocessor: old code that used old larflow 3d points for reco
- clustering via spatial embed method [Jared]
- clustering via part affinity flows [Taritree]
- extend keypoints to be more than one class [Polina]
- develop interactoin selection
- develop analysis metrics [Ralitsa]
- ROOT (6.12/04 known to work)
- opencv (3.2.0 known to work)
- pytorch (1.3, 1.4 known to work)
- numpy (1.14.03 known to work)
- tensorboardX (from here)
- tensorboard
- cuda (currently using 10.1)
- Eigen 3
UBDL dependencies
- larlite: following X branch
- Geo2D:
- LArOpenCV:
- larcv:
- ublarcvapp:
- cilantros:
- nlohmann/json
- (to do: add missing)
- larcvdataset: wrapper class providing interface to images stored in the larcv format. converts data into numpy arrays for use in pytorch (deprecated)
- Cilantro: a library with various Clustering routines w/ C++ API (deprecated)
- Pangolin: a OpenGL viewer package, used by Cilantro (deprecated)
- This repository is intended to be build as a part of the
ubdlenvironment. Go here to see this repo. - clone
ubdl:git clone https://github.com/larbys/ubdl - go to the
ubdlfolder - setup the
ubdlenvironment pre-reqs:source setenv.sh - configure the
ubdlsubmodule environments:source configure.sh - build all the submodules:
source buildall_py2.sh
Pangolin depends on GLEW and X11. These can be provided by a package manager. However, especially for GLEW other versions can be on the system from other libraries like CUDA and/or ROOT. This can cause compilation errors.
If there are issues you can try the following:
-
go into CMakeCache.txt and check the include and library entries for GLEW (search for GLEW). Change them to point to the system GLEW. On Ubuntu this will be something like:
/usr/lib/x86_64-linux-gnu/libGLEW.so for the LIB dir and /usr/include for the INC dirIf you do this, remove the directory CMakeFiles and run
make clean. Then runcmake .and finallymake. -
go into
Pangolin/include/pangolin/gl/glplatform.hand change<GL/glew.h>to/usr/include/GL/glew.hto hack it to not rely on the include directories passed to the compiler. Note: the above path is for Ubuntu 16.04/18.4.
- setup the environment through
ubdl - go to
ubdlfolder (which should contain this repo as a submodule) source setenv.shsource configure.sh
If you made changes to a submodule, you need to check in that code and then check in the new commit hash of the submodule to this repo.
Say you made a change to larcv. (Same instructions basically for all submodules).
-
First make sure you are not in a DEATCHED_HEAD state)
git branch develop* tufts_ub -
If it says detached head, go back to head of larflow repo and run
source goto_head_of_submodules.shand come back -
stage your commits and then push
git add [[some file you edited]] git commit -m "[[short description of change]]" git push -
go back to head of larflow and commit the updated submodule (in this example
larcv) to this repo cd .. git add larcv git commit -m "[[which submodule you updated]]" git push