A SNN built on top of TopModelX library for jet classification on jetnet dataset
To do the training run yourself, use a high RAM CPU or GPU's preferrably (i used 8x H100's for this)
for non GPU run -> simplical.py for a GPU run -> simplicial_gpu.py
cd simplicialjets
python3 -m venv venv
source venv/bin/activate
pip3 install torch_geometric networkx JetNet tqdm toponetx topomodelx
python3 simplicial.py
#or
python3 simplicial_gpu.py
-
Imports the jetnet dataset with the types of jets as gluons, top-quarks and W bosons and features as
a. eta_rel = relative psuedorapidity -> gives a measure of how spread/clustered the jet particles are along the length or eta.
b. psi_rel = relative azimuthal angle -> gives measure of how spread/clustered the jet particles are along the width or beam axis
c. pt_rel = relative transverse momentum -> intuitively: how close a particle is from the axis or in any angle way
d. mask = indicator of presence/absence of particle: shows if the particle is present:1 otherwise 0 e: shows if the particle is present:1 otherwise 0 e: shows if the particle is present:1 otherwise 0 e: shows if the particle is present:1 otherwise 0
-
Constructs the graph from the data points with the KNN graphs
-
These are then lifted into a higher dimension by face construction by finding cliques that have length=3 and setting seperate features
-
Find the up,down and hodge laplacians at the edge level and get the features for each graph
-
Define the arch :
(base_model): SCNN(
(layers): ModuleList(
(0-1): 2 x SCNNLayer()
)
)
(linear): Linear(in_features=16, out_features=3, bias=True)
- Train it!
you can just tweak anything you want pretty easily for more stuff to add also checkout the topomodel docs
maybe change it completely from a SNN?
go forth and explore!