This projects aim is to develop a tool for discovering signals in invariant mass distributions. We will take a model-agunostic approach and provide a system for custom signal and background generation. In order to analyze the invariant mass distribution we will perform a Continuous Wavelet Transform (CWT) in order to get the mass intervals where the signal is present. In order to create a tool for anomaly detection, meaning detecting when a signal is present, we will train different types and configurations of autoencoders (AE) on background. Thus we will reconstruct background with ease after learning the typical background fluctuations and reconstruct poorly background + signal.
Comparing the AEs sensitivity to the signal size for a specific dataset:
Type | Plot |
---|---|
Signal + Background | ![]() |
Signal + Background + Fluctuations | ![]() |
CWT | ![]() |
Local p-value representation | ![]() |
Example: Sparse AE with KL divergence reconstruction | ![]() |
python 3.8.6
$ git clone https://github.com/karopastal/signal_generator.git
if repository already cloned, pull changes with:
$ git pull
install dependencies:
$ pip3 install -r requirements.txt
run the managment app:
$ make web
visit: http://127.0.0.1:5000/
In order to configure signals, background and wavelets use the managment app. This is a basic summary of the commands and functionality, for the full tutorial visit here
After configuring the signals, backgrounds and wavelets via the managment app, the session of a particular configuration can be saved manually or from the app.
Save session:
$ make save-session NAME={sessions_name}
Load a saved session:
$ make load-session NAME={sessions_name}
Delete a saved session:
$ make delete-session NAME={sessions_name}
List the saved sessions:
$ make list-sessions
All commands accept ids
(integers) as arguments according to the configurations at src/signals
, src/backgrounds
, src/wavelets
for example:
make plot-cwt-clean SIGNAL_ID=1 BG_ID=0 WAVELET_ID=0
$ make plot-signal SIGNAL_ID={ 0, 1 ... }
$ make plot-background BG_ID={ 0, 1 ... }
$ make plot-clean SIGNAL_ID={ 0, 1 ... } BG_ID={ 0, 1 ... }
$ make plot-fluctuations SIGNAL_ID={ 0, 1 ... } BG_ID={ 0, 1 ... }
$ make plot-cwt-clean SIGNAL_ID={ 0, 1 ... } BG_ID={ 0, 1 ... } WAVELET_ID={0, 1 ... }
$ make plot-cwt-fluctuations SIGNAL_ID={ 0, 1 ... } BG_ID={ 0, 1 ... } WAVELET_ID={0, 1 ... }
The analysis consists of training different models and test their performance.
$ ./scripts/build_dataset.sh
$ ./scripts/train_autoencoder.sh