diff --git a/.env b/.env
new file mode 100644
index 0000000000000000000000000000000000000000..89df8ad3493b3d21cef8eeb03dc28f4a11411a90
--- /dev/null
+++ b/.env
@@ -0,0 +1,8 @@
+SVJ_CODE_ROOT=/work/gkrzmanc/jetclustering/code
+SVJ_DATA_ROOT=/work/gkrzmanc/jetclustering/data
+#SVJ_PREPROCESSED_DATA_ROOT=/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/preprocessed_data
+SVJ_PREPROCESSED_DATA_ROOT=/work/gkrzmanc/jetclustering/preprocessed_data
+SVJ_RESULTS_ROOT=/work/gkrzmanc/jetclustering/results
+SVJ_RESULTS_ROOT_FALLBACK=/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/results
+SVJ_WANDB_ENTITY=fcc_ml
+WANDB_API_KEY=aaee0ebacafd9aac2eac525cae8d1b0919c6d9ec
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..d9cd3b1bdc93ece8469a4119f348a1b0ddd0f507
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+models/
+demo_datasets/
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..13566b81b018ad684f3a35fee301741b2734c8f4
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/deployment.xml b/.idea/deployment.xml
new file mode 100644
index 0000000000000000000000000000000000000000..89bd68fb8440c4a3ecc8dbe02d7bd7259e929194
--- /dev/null
+++ b/.idea/deployment.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..105ce2da2d6447d11dfe32bfb846c3d5b199fc99
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jetclustering.iml b/.idea/jetclustering.iml
new file mode 100644
index 0000000000000000000000000000000000000000..034a5d2461c4c92d23a1aacc17c858444c0eccc1
--- /dev/null
+++ b/.idea/jetclustering.iml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jupyter-settings.xml b/.idea/jupyter-settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d310bf18d57ac8c61e47038b8614f2aa42e24d64
--- /dev/null
+++ b/.idea/jupyter-settings.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..17d6640f93ed90c71cc35b973285925c0cd73c26
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..15a968097729e8f053e2f76a408646cdbef09272
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6951151d330d2b7cedc2ed7312347760f48dce23
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..86e2c6859591feb60aa9aec4e6b9096e5700f4fb
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,87 @@
+# gkrz/lgatr:v3
+# docker build -t gkrz/lgatr:v4 .
+FROM nvidia/cuda:11.8.0-runtime-ubuntu22.04
+
+WORKDIR /app
+
+COPY . /app
+
+SHELL ["/bin/bash", "-c"]
+
+USER root
+
+RUN apt update && \
+ DEBIAN_FRONTEND=noninteractive apt install --yes --no-install-recommends \
+ build-essential \
+ cmake \
+ ffmpeg \
+ git \
+ python-is-python3 \
+ python3-dev \
+ python3-pip \
+ && \
+ rm -rf /var/lib/apt/lists/*
+
+RUN python3.10 --version
+RUN python3 --version
+RUN python --version
+
+RUN python3 -m pip install --no-cache-dir --upgrade pip
+#python3 -m pip install --no-cache-dir --upgrade --requirement requirements.txt
+RUN python3 -m pip install numba==0.58.1
+# packages without conda
+# RUN python3 -m pip install --no-cache-dir torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117
+RUN python3 -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
+RUN python3 -m pip install torch_geometric
+RUN python3 -m pip install pyg_lib torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.org/whl/torch-2.5.1+cu118.html
+RUN python3 -m pip install pytorch-lightning yacs torchmetrics
+RUN python3 -m pip install performer-pytorch
+RUN python3 -m pip install tensorboardX
+RUN python3 -m pip install ogb
+RUN python3 -m pip install wandb
+RUN python3 -m pip install seaborn
+RUN python3 -m pip install dgl -f https://data.dgl.ai/wheels/cu118/repo.html
+RUN python3 -m pip install numpy
+RUN python3 -m pip install scipy
+RUN python3 -m pip install pandas
+RUN python3 -m pip install scikit-learn
+RUN python3 -m pip install matplotlib
+RUN python3 -m pip install tqdm
+RUN python3 -m pip install PyYAML
+RUN python3 -m pip install awkward0
+RUN python3 -m pip install uproot
+RUN python3 -m pip install awkward
+RUN python3 -m pip install vector
+RUN python3 -m pip install lz4
+RUN python3 -m pip install xxhash
+RUN python3 -m pip install tables
+RUN python3 -m pip install tensorboard
+RUN python3 -m pip install plotly
+RUN python3 -m pip install xformers --index-url https://download.pytorch.org/whl/cu118
+RUN python3 -m pip install fastjet
+RUN python3 -m pip install gradio
+RUN python3 -m pip install huggingface_hub
+
+# remove pip cache
+RUN python3 -m pip cache purge
+
+# COPY docker/ext_packages /docker/ext_packages
+# RUN python3 /docker/ext_packages/install_upstream_python_packages.py
+RUN mkdir -p /opt/pepr
+
+# Install GATr
+#RUN cd /opt/pepr && git clone https://github.com/Qualcomm-AI-research/geometric-algebra-transformer.git geometric-algebra-transformer1
+#RUN cd /opt/pepr/geometric-algebra-transformer1/ && python3 -m pip install .
+
+# Install L-GATr - for some reason this only works if executed from the already-built container
+RUN cd /opt/pepr && git clone https://github.com/gregorkrz/lorentz-gatr lgatr
+RUN cd /opt/pepr/lgatr/ && python3 -m pip install .
+
+# Install torch_cmspepr
+
+RUN cd /opt/pepr && git clone https://github.com/cms-pepr/pytorch_cmspepr
+RUN cd /opt/pepr/pytorch_cmspepr/ && python3 -m pip install .
+RUN cd /root
+RUN ls
+# entrypoint run app.py with python
+ENTRYPOINT ["python", "app.py"]
diff --git a/Dockerfile_training b/Dockerfile_training
new file mode 100644
index 0000000000000000000000000000000000000000..a141dcb38114c88f961935de683b727c61fb9113
--- /dev/null
+++ b/Dockerfile_training
@@ -0,0 +1,77 @@
+# gkrz/lgatr:v3
+# docker build -t gkrz/lgatr:v4 .
+FROM nvidia/cuda:11.8.0-runtime-ubuntu22.04
+
+SHELL ["/bin/bash", "-c"]
+
+USER root
+
+RUN apt update && \
+ DEBIAN_FRONTEND=noninteractive apt install --yes --no-install-recommends \
+ build-essential \
+ cmake \
+ ffmpeg \
+ git \
+ python-is-python3 \
+ python3-dev \
+ python3-pip \
+ && \
+ rm -rf /var/lib/apt/lists/*
+
+RUN python3.10 --version
+RUN python3 --version
+RUN python --version
+
+RUN python3 -m pip install --no-cache-dir --upgrade pip
+#python3 -m pip install --no-cache-dir --upgrade --requirement requirements.txt
+RUN python3 -m pip install numba==0.58.1
+# packages without conda
+# RUN python3 -m pip install --no-cache-dir torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117
+RUN python3 -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
+RUN python3 -m pip install torch_geometric
+RUN python3 -m pip install pyg_lib torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.org/whl/torch-2.5.1+cu118.html
+RUN python3 -m pip install pytorch-lightning yacs torchmetrics
+RUN python3 -m pip install performer-pytorch
+RUN python3 -m pip install tensorboardX
+RUN python3 -m pip install ogb
+RUN python3 -m pip install wandb
+RUN python3 -m pip install seaborn
+RUN python3 -m pip install dgl -f https://data.dgl.ai/wheels/cu118/repo.html
+RUN python3 -m pip install numpy
+RUN python3 -m pip install scipy
+RUN python3 -m pip install pandas
+RUN python3 -m pip install scikit-learn
+RUN python3 -m pip install matplotlib
+RUN python3 -m pip install tqdm
+RUN python3 -m pip install PyYAML
+RUN python3 -m pip install awkward0
+RUN python3 -m pip install uproot
+RUN python3 -m pip install awkward
+RUN python3 -m pip install vector
+RUN python3 -m pip install lz4
+RUN python3 -m pip install xxhash
+RUN python3 -m pip install tables
+RUN python3 -m pip install tensorboard
+RUN python3 -m pip install plotly
+RUN python3 -m pip install xformers --index-url https://download.pytorch.org/whl/cu118
+RUN python3 -m pip install fastjet
+
+# remove pip cache
+RUN python3 -m pip cache purge
+
+# COPY docker/ext_packages /docker/ext_packages
+# RUN python3 /docker/ext_packages/install_upstream_python_packages.py
+RUN mkdir -p /opt/pepr
+
+# Install GATr
+RUN cd /opt/pepr && git clone https://github.com/Qualcomm-AI-research/geometric-algebra-transformer.git geometric-algebra-transformer1
+RUN cd /opt/pepr/geometric-algebra-transformer1/ && python3 -m pip install .
+
+# Install L-GATr - for some reason this only works if executed from the already-built container
+#RUN cd /opt/pepr && git clone https://github.com/gregorkrz/lorentz-gatr lgatr
+#RUN cd /opt/pepr/lgatr/ && python3 -m pip install .
+
+# Install torch_cmspepr
+
+RUN cd /opt/pepr && git clone https://github.com/cms-pepr/pytorch_cmspepr
+RUN cd /opt/pepr/pytorch_cmspepr/ && python3 -m pip install .
diff --git a/README.md b/README.md
index 366647ea2e9ae220be695ec9558ab3ab5cbeca84..2b288a4d7669628c0743318d7001f5e10d7c6199 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,65 @@
----
-title: Jetclustering
-emoji: 🐢
-colorFrom: pink
-colorTo: gray
-sdk: docker
-pinned: false
-short_description: L-GATr based jet clustering
----
-
-Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
+# SVJ clustering
+The repo has evolved from [here](https://github.com/selvaggi/mlpf) - mainly, we use the dataloader and code for reading the root files for the previous MLPF project. The preprocessing part is not really needed but it does help with performance when we are doing a lot of experiments with the same dataset.
+
+## Setup
+**Important**: To make it easier and less time-consuming to move the commands across different machines, i.e. lxplus, T3 and Vega, we use relative paths. However, all commands can also be supplied absolute paths starting with `/`. **In case you use relative paths, make sure to modify the `env.sh` file with your paths!**
+
+0. Environment setup: We use the Python with packages compiled in the following container: `gkrz/lgatr:v3`. The container can be built from scratch using the Dockerfile in this repo.
+
+
+1. Set the environment variables `source env.sh`
+
+
+### Preprocess data
+See the script at `sbatch jobs/preprocess_v0.slurm` (make sure to update your local `env.sh` file!)
+
+## Evaluation of clustering
+
+For AK8: `python -m scripts.analysis.count_matched_quarks --input scouting_PFNano_signals/SVJ_hadronic_std --dataset-cap 1000`
+
+
+For AK8 GenJets: `python -m scripts.analysis.count_matched_quarks --input scouting_PFNano_signals/SVJ_hadronic_std --dataset-cap 1000 --jets-object genjets`
+
+
+For any model: `python -m scripts.analysis.count_matched_quarks --input scouting_PFNano_signals/SVJ_hadronic_std --output scouting_PFNano_signals2/SVJ_hadronic_std/all_models_eval/GATr_rinv_03_m_900 --eval-dir train/Test_betaPt_BC_all_datasets_2025_01_07_17_50_45 --dataset-cap 1000 --jets-object model_jets` Add `--eval-dir` with the path to the eval run containing the coordinates and clustering labels. Optionally, add `--clustering-suffix` in case there are multiple clusterings saved in the same folder. (usually not unless you were fine-tuning the clustering)
+
+
+The script produces output in the `results` folder. The script goes over the events up to dataset-cap (optional).
+
+
+
+### Automated evaluation
+In order to move things faster, scripts to evaluate the trained models faster at a given ckpt are given.
+
+To evaluate at step 10k of the given training run: `python -m scripts.generate_test_jobs -template t3 -run Transformer_training_40k_5_64_4_2025_01_22_15_55_39 -step 10000 -tag params_study`
+* Important: The step provided counts from the starting point of training the model: for example, if the run breaks in the middle and it's restarted from the latest ckpt, the command will identify that and load a checkpoint from the previous run if it contains one. You only need to provide the latest training with the `-run` argument.
+* The `-tag` argument identifies the given study and can be later used to retrieve all the evals of all the models for a given run.
+* The command pulls the config (e.g. model architecture and hyperparameters) automatically from the wandb run of the training.
+* Add `-os` argument with a path to the objectness score checkpoint to use in the evaluation.
+
+
+After the GPU eval, the CPU eval from above needs to be ran: `python -m scripts.test_plot_jobs --tag params_study`. The script will identify the runs that need to have evaluation figures produced. Uncommend the AK8 part in the file to also evaluate with AK8. Inside the produced folder, it also produces run_config.pkl that can be used later to make plots (of e.g. metrics vs number of params, model architecture, and amount of training).
+
+
+
+
+Use the scripts in `scripts/` to produce the joint plots of F1 score, precision, recall etc.
+
+
+
+
+## Training
+
+See mainly `jobs/vega/lgatr_training.sh`, `jobs/vega/transformer_training.sh`, `jobs/vega/gatr_training_vega.sh` - you might need to modify the slurm file a bit to fit the system you are running on
+
+
+
+### Datasets
+
+`scouting_PFNano_signals1`: Contains special PFCands and PFCands in separate fields
+
+`scouting_PFNano_signals2`: Contains both special PFCands and PFCands in the same field, under PFCands.
+
+It was easier to just create this instead of always having special treatment for the special PFCands. As of January 2025, we are only using this version, accessible at `/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/preprocessed_data/scouting_PFNano_signals2`.
+
+
diff --git a/app.py b/app.py
new file mode 100644
index 0000000000000000000000000000000000000000..9cf7d1298683abe7e395c3f7daebc6f873225ca0
--- /dev/null
+++ b/app.py
@@ -0,0 +1,68 @@
+import gradio as gr
+import matplotlib.pyplot as plt
+import numpy as np
+import os
+
+from src.model_wrapper_gradio import inference
+
+# === Dummy file-based prefill function ===
+def prefill_event(subdataset, event_idx):
+ base_path = f"demo_datasets/{subdataset}/{event_idx}"
+ try:
+ with open(f"{base_path}.txt", "r") as f:
+ particles_data = f.read()
+ except FileNotFoundError:
+ particles_data = "pt eta phi mass charge\n"
+
+ try:
+ with open(f"{base_path}_quarks.txt", "r") as f:
+ quarks_data = f.read()
+ except FileNotFoundError:
+ quarks_data = "pt eta phi\n"
+
+ return particles_data, quarks_data
+
+
+from huggingface_hub import snapshot_download
+
+snapshot_download(repo_id="gregorkrzmanc/jetclustering", local_dir="src/models/")
+snapshot_download(repo_id="gregorkrzmanc/jetclustering_demo", local_dir="demo_datasets/", repo_type="dataset")
+
+# === Interface layout ===
+def gradio_ui():
+ with gr.Blocks() as demo:
+ gr.Markdown("## Jet Clustering Demo")
+
+ with gr.Row():
+ loss_dropdown = gr.Dropdown(choices=["GP_IRC_SN", "GP_IRC_S", "GP", "base"], label="Loss Function", value="GP_IRC_SN")
+ train_dataset_dropdown = gr.Dropdown(choices=["QCD", "900_03", "900_03+700_07", "700_07", "900_03+700_07+QCD"], label="Training Dataset", value="QCD")
+
+ with gr.Row():
+ subdataset_dropdown = gr.Dropdown(choices=os.listdir("demo_datasets"), label="Subdataset")
+ event_idx_dropdown = gr.Dropdown(choices=list(range(50)), label="Event Index")
+ prefill_btn = gr.Button("Load Event from Dataset")
+
+ particles_text = gr.Textbox(label="Particles CSV (pt eta phi mass charge)", lines=6, interactive=True)
+ quarks_text = gr.Textbox(label="Quarks CSV (pt eta phi)", lines=3, interactive=True)
+
+ process_btn = gr.Button("Run Jet Clustering")
+
+ image_output = gr.Plot(label="Output")
+ model_jets_output = gr.JSON(label="Model Jets")
+ antikt_jets_output = gr.JSON(label="Anti-kt Jets")
+
+ prefill_btn.click(fn=prefill_event,
+ inputs=[subdataset_dropdown, event_idx_dropdown],
+ outputs=[particles_text, quarks_text])
+
+
+ process_btn.click(fn=inference,
+ inputs=[loss_dropdown, train_dataset_dropdown, particles_text, quarks_text],
+ outputs=[model_jets_output, antikt_jets_output, image_output])
+
+ return demo
+
+
+demo = gradio_ui()
+demo.launch()
+
diff --git a/config_files/config_jets.yaml b/config_files/config_jets.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3b9bf22a07354521f22d0d418582ab62bf43518b
--- /dev/null
+++ b/config_files/config_jets.yaml
@@ -0,0 +1,172 @@
+treename: mmtree/Events;1
+selection:
+ ### use `&`, `|`, `~` for logical operations on numpy arrays
+ ### can use functions from `math`, `np` (numpy), and `awkward` in the expression
+ #(jet_tightId==1) & (jet_no<2) & (fj_pt>200) & (fj_pt<2500) & (((sample_isQCD==0) & (fj_isQCD==0)) | ((sample_isQCD==1) & (fj_isQCD==1))) & (event_no%7!=0)
+ #(recojet_e>=5)
+
+test_time_selection:
+ ### selection to apply at test time (i.e., when running w/ --predict)
+ #(jet_tightId==1) & (jet_no<2) & (fj_pt>200) & (fj_pt<2500) & (((sample_isQCD==0) & (fj_isQCD==0)) | ((sample_isQCD==1) & (fj_isQCD==1))) & (event_no%7==0)
+ #(recojet_e<5)
+
+new_variables:
+ ### [format] name: formula
+ ### can use functions from `math`, `np` (numpy), and `awkward` in the expression
+ #pfcand_mask: awkward.JaggedArray.ones_like(pfcand_etarel)
+ #sv_mask: awkward.JaggedArray.ones_like(sv_etarel)
+ #pfcand_mask: awkward.JaggedArray.ones_like(pfcand_e)
+
+preprocess:
+ ### method: [manual, auto] - whether to use manually specified parameters for variable standardization
+ ### [note]: `[var]_mask` will not be transformed even if `method=auto`
+
+inputs:
+ n_fat_jets:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [nFatJet, null]
+# - [nJetId, null]
+ fat_jets:
+ pad_mode: wrap
+ length: 50
+ vars:
+ - [FatJet_pt, null]
+ - [FatJet_eta, null]
+ - [FatJet_phi, null]
+ - [FatJet_mass, null]
+ n_jets:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ nJet, null ]
+ jets:
+ pad_mode: wrap
+ length: 50
+ vars:
+ - [ Jet_pt, null ]
+ - [ Jet_eta, null ]
+ - [ Jet_phi, null ]
+ - [ Jet_mass, null ]
+ n_genjets:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [n_genjet, null]
+ genjets:
+ pad_mode: wrap
+ length: 50
+ vars:
+ - [GenFatJet_pt, null]
+ - [GenFatJet_eta, null]
+ - [GenFatJet_phi, null]
+ - [GenFatJet_mass, null]
+ n_pfcands:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ nPFCands, null ]
+ pfcands:
+ pad_mode: wrap
+ length: 750
+ vars:
+ - [PFCands_pt, null]
+ - [PFCands_eta, null]
+ - [PFCands_phi, null]
+ - [PFCands_mass, null]
+ - [PFCands_charge, null]
+ - [PFCands_pdgId, null]
+
+ pfcands_jet_mapping:
+ pad_mode: wrap
+ length: 750
+ vars:
+ - [ FatJetPFCands_jetIdx, null ]
+ - [ FatJetPFCands_pFCandsIdx, null ]
+ #n_offline_pfcands:
+ # pad_mode: wrap
+ # length: 1
+ # vars:
+ # - [ nOfflinePFCands, null ]
+ #offline_pfcands:
+ # pad_mode: wrap
+ # length: 750
+ # vars:
+ # - [ OfflinePFCands_pt, null ]
+ # - [ OfflinePFCands_eta, null ]
+ # - [ OfflinePFCands_phi, null ]
+ # - [ OfflinePFCands_mass, null ]
+ # - [ OfflinePFCands_charge, null ]
+ # - [ OfflinePFCands_pdgId, null ]
+ #offline_pfcands_jet_mapping:
+ # pad_mode: wrap
+ # length: 750
+ # vars:
+ # - [ OfflineFatJetPFCands_jetIdx, null ]
+ # - [ OfflineFatJetPFCands_pFCandsIdx, null ]
+ MET:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ MET_pt, null ]
+ - [ MET_phi, null ]
+ - [ scouting_trig, null]
+ - [ offline_trig, null]
+ - [ veto_trig, null ]
+ n_electrons:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ nElectron, null ]
+ n_photons:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ nPhotons, null ]
+ n_muons:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ nMuons, null ]
+ electrons:
+ pad_mode: wrap
+ length: 10
+ vars:
+ - [ Electron_pt, null ]
+ - [ Electron_eta, null ]
+ - [ Electron_phi, null ]
+ - [ Electron_charge, null ]
+ muons:
+ pad_mode: wrap
+ length: 10
+ vars:
+ - [ Muon_pt, null ]
+ - [ Muon_eta, null ]
+ - [ Muon_phi, null ]
+ - [ Muon_charge, null ]
+ photons:
+ pad_mode: wrap
+ length: 10
+ vars:
+ - [ Photon_pt, null ]
+ - [ Photon_eta, null ]
+ - [ Photon_phi, null ]
+ matrix_element_gen_particles:
+ pad_mode: wrap
+ length: 2
+ vars:
+ - [MatrixElementGenParticle_pt, null]
+ - [MatrixElementGenParticle_eta, null]
+ - [MatrixElementGenParticle_phi, null]
+ - [MatrixElementGenParticle_mass, null]
+ - [MatrixElementGenParticle_pdgId, null]
+labels:
+
+observers:
+ #- recojet_e
+ #- recojet_theta
+ #- recojet_phi
+ #- recojet_m
+ #- n_pfcand
+
diff --git a/config_files/config_jets_1.yaml b/config_files/config_jets_1.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f0fa9f7b8e982cc24e3e0e56dcc336a8a55a7deb
--- /dev/null
+++ b/config_files/config_jets_1.yaml
@@ -0,0 +1,191 @@
+treename: null
+selection:
+ ### use `&`, `|`, `~` for logical operations on numpy arrays
+ ### can use functions from `math`, `np` (numpy), and `awkward` in the expression
+ #(jet_tightId==1) & (jet_no<2) & (fj_pt>200) & (fj_pt<2500) & (((sample_isQCD==0) & (fj_isQCD==0)) | ((sample_isQCD==1) & (fj_isQCD==1))) & (event_no%7!=0)
+ #(recojet_e>=5)
+
+test_time_selection:
+ ### selection to apply at test time (i.e., when running w/ --predict)
+ #(jet_tightId==1) & (jet_no<2) & (fj_pt>200) & (fj_pt<2500) & (((sample_isQCD==0) & (fj_isQCD==0)) | ((sample_isQCD==1) & (fj_isQCD==1))) & (event_no%7==0)
+ #(recojet_e<5)
+
+new_variables:
+ ### [format] name: formula
+ ### can use functions from `math`, `np` (numpy), and `awkward` in the expression
+ #pfcand_mask: awkward.JaggedArray.ones_like(pfcand_etarel)
+ #sv_mask: awkward.JaggedArray.ones_like(sv_etarel)
+ #pfcand_mask: awkward.JaggedArray.ones_like(pfcand_e)
+
+preprocess:
+ ### method: [manual, auto] - whether to use manually specified parameters for variable standardization
+ ### [note]: `[var]_mask` will not be transformed even if `method=auto`
+
+inputs:
+ n_fat_jets:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [nFatJet, null]
+# - [nJetId, null]
+ fat_jets:
+ pad_mode: wrap
+ length: 50
+ vars:
+ - [FatJet_pt, null]
+ - [FatJet_eta, null]
+ - [FatJet_phi, null]
+ - [FatJet_mass, null]
+ n_jets:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ nJet, null ]
+ jets:
+ pad_mode: wrap
+ length: 50
+ vars:
+ - [ Jet_pt, null ]
+ - [ Jet_eta, null ]
+ - [ Jet_phi, null ]
+ - [ Jet_mass, null ]
+ n_genjets:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [n_genjet, null]
+ genjets:
+ pad_mode: wrap
+ length: 50
+ vars:
+ - [GenFatJet_pt, null]
+ - [GenFatJet_eta, null]
+ - [GenFatJet_phi, null]
+ - [GenFatJet_mass, null]
+ n_pfcands:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ nPFCands, null ]
+ pfcands:
+ pad_mode: wrap
+ length: 750
+ vars:
+ - [PFCands_pt, null]
+ - [PFCands_eta, null]
+ - [PFCands_phi, null]
+ - [PFCands_mass, null]
+ - [PFCands_charge, null]
+ - [PFCands_pdgId, null]
+
+ pfcands_jet_mapping:
+ pad_mode: wrap
+ length: 750
+ vars:
+ - [ FatJetPFCands_jetIdx, null ]
+ - [ FatJetPFCands_pFCandsIdx, null ]
+ #n_offline_pfcands:
+ # pad_mode: wrap
+ # length: 1
+ # vars:
+ # - [ nOfflinePFCands, null ]
+ #offline_pfcands:
+ # pad_mode: wrap
+ # length: 750
+ # vars:
+ # - [ OfflinePFCands_pt, null ]
+ # - [ OfflinePFCands_eta, null ]
+ # - [ OfflinePFCands_phi, null ]
+ # - [ OfflinePFCands_mass, null ]
+ # - [ OfflinePFCands_charge, null ]
+ # - [ OfflinePFCands_pdgId, null ]
+ #offline_pfcands_jet_mapping:
+ # pad_mode: wrap
+ # length: 750
+ # vars:
+ # - [ OfflineFatJetPFCands_jetIdx, null ]
+ # - [ OfflineFatJetPFCands_pFCandsIdx, null ]
+ MET:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ MET_pt, null ]
+ - [ MET_phi, null ]
+ - [ scouting_trig, null]
+ - [ offline_trig, null]
+ - [ veto_trig, null ]
+ n_electrons:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ nElectron, null ]
+ n_photons:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ nPhotons, null ]
+ n_muons:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ nMuons, null ]
+ electrons:
+ pad_mode: wrap
+ length: 10
+ vars:
+ - [ Electron_pt, null ]
+ - [ Electron_eta, null ]
+ - [ Electron_phi, null ]
+ - [ Electron_charge, null ]
+ muons:
+ pad_mode: wrap
+ length: 10
+ vars:
+ - [ Muon_pt, null ]
+ - [ Muon_eta, null ]
+ - [ Muon_phi, null ]
+ - [ Muon_charge, null ]
+ photons:
+ pad_mode: wrap
+ length: 10
+ vars:
+ - [ Photon_pt, null ]
+ - [ Photon_eta, null ]
+ - [ Photon_phi, null ]
+ matrix_element_gen_particles:
+ pad_mode: wrap
+ length: 2
+ vars:
+ - [MatrixElementGenParticle_pt, null]
+ - [MatrixElementGenParticle_eta, null]
+ - [MatrixElementGenParticle_phi, null]
+ - [MatrixElementGenParticle_mass, null]
+ - [MatrixElementGenParticle_pdgId, null]
+ final_gen_particles:
+ pad_mode: wrap
+ length: 2000
+ vars:
+ - [FinalGenParticle_pt, null]
+ - [FinalGenParticle_eta, null]
+ - [FinalGenParticle_phi, null]
+ - [FinalGenParticle_mass, null]
+ - [FinalGenParticle_pdgId, null]
+ - [FinalGenParticle_status, null]
+ final_parton_level_particles:
+ pad_mode: wrap
+ length: 400
+ vars:
+ - [FinalPartonLevelParticle_pt, null]
+ - [FinalPartonLevelParticle_eta, null]
+ - [FinalPartonLevelParticle_phi, null]
+ - [FinalPartonLevelParticle_mass, null]
+ - [FinalPartonLevelParticle_pdgId, null]
+ - [FinalPartonLevelParticle_status, null]
+
+observers:
+ #- recojet_e
+ #- recojet_theta
+ #- recojet_phi
+ #- recojet_m
+ #- n_pfcand
+
diff --git a/config_files/config_jets_1_delphes.yaml b/config_files/config_jets_1_delphes.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..c8aa47af10ddd7868199421bbae542f26709ac27
--- /dev/null
+++ b/config_files/config_jets_1_delphes.yaml
@@ -0,0 +1,86 @@
+treename: Delphes;1
+selection:
+ ### use `&`, `|`, `~` for logical operations on numpy arrays
+ ### can use functions from `math`, `np` (numpy), and `awkward` in the expression
+ #(jet_tightId==1) & (jet_no<2) & (fj_pt>200) & (fj_pt<2500) & (((sample_isQCD==0) & (fj_isQCD==0)) | ((sample_isQCD==1) & (fj_isQCD==1))) & (event_no%7!=0)
+ #(recojet_e>=5)
+
+test_time_selection:
+ ### selection to apply at test time (i.e., when running w/ --predict)
+ #(jet_tightId==1) & (jet_no<2) & (fj_pt>200) & (fj_pt<2500) & (((sample_isQCD==0) & (fj_isQCD==0)) | ((sample_isQCD==1) & (fj_isQCD==1))) & (event_no%7==0)
+ #(recojet_e<5)
+
+new_variables:
+ ### [format] name: formula
+ ### can use functions from `math`, `np` (numpy), and `awkward` in the expression
+ #pfcand_mask: awkward.JaggedArray.ones_like(pfcand_etarel)
+ #sv_mask: awkward.JaggedArray.ones_like(sv_etarel)
+ #pfcand_mask: awkward.JaggedArray.ones_like(pfcand_e)
+
+preprocess:
+ ### method: [manual, auto] - whether to use manually specified parameters for variable standardization
+ ### [note]: `[var]_mask` will not be transformed even if `method=auto`
+
+inputs:
+ n_CH:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ EFlowTrack_size, null ]
+ n_NH:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ EFlowNeutralHadron_size, null ]
+ n_photon:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ EFlowPhoton_size, null ]
+ CH:
+ pad_mode: wrap
+ length: 1500
+ vars:
+ - [EFlowTrack.Eta, null]
+ - [EFlowTrack.Phi, null]
+ - [EFlowTrack.PT, null]
+ - [EFlowTrack.Mass, null]
+ - [EFlowTrack.Charge, null]
+ NH:
+ pad_mode: wrap
+ length: 1500
+ vars:
+ - [EFlowNeutralHadron.Eta, null]
+ - [EFlowNeutralHadron.Phi, null]
+ - [EFlowNeutralHadron.ET, null]
+ EFlowPhoton:
+ pad_mode: wrap
+ length: 1500
+ vars:
+ - [EFlowPhoton.Eta, null]
+ - [EFlowPhoton.Phi, null]
+ - [EFlowPhoton.ET, null]
+ GenParticles:
+ pad_mode: wrap
+ length: 7500
+ vars:
+ - [Particle.Eta, null]
+ - [Particle.Phi, null]
+ - [Particle.PT, null]
+ - [Particle.Charge, null]
+ - [Particle.Mass, null]
+ - [Particle.PID, null]
+ - [Particle.Status, null]
+ NParticles:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [Particle_size, null]
+observers:
+ #- recojet_e
+ #- recojet_theta
+ #- recojet_phi
+ #- recojet_m
+ #- n_pfcand
+
+
diff --git a/config_files/config_jets_2_delphes.yaml b/config_files/config_jets_2_delphes.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f538c41757b4471ea5d8afdad1c546683a505dfc
--- /dev/null
+++ b/config_files/config_jets_2_delphes.yaml
@@ -0,0 +1,63 @@
+treename: Delphes;1
+selection:
+ ### use `&`, `|`, `~` for logical operations on numpy arrays
+ ### can use functions from `math`, `np` (numpy), and `awkward` in the expression
+ #(jet_tightId==1) & (jet_no<2) & (fj_pt>200) & (fj_pt<2500) & (((sample_isQCD==0) & (fj_isQCD==0)) | ((sample_isQCD==1) & (fj_isQCD==1))) & (event_no%7!=0)
+ #(recojet_e>=5)
+
+test_time_selection:
+ ### selection to apply at test time (i.e., when running w/ --predict)
+ #(jet_tightId==1) & (jet_no<2) & (fj_pt>200) & (fj_pt<2500) & (((sample_isQCD==0) & (fj_isQCD==0)) | ((sample_isQCD==1) & (fj_isQCD==1))) & (event_no%7==0)
+ #(recojet_e<5)
+
+new_variables:
+ ### [format] name: formula
+ ### can use functions from `math`, `np` (numpy), and `awkward` in the expression
+ #pfcand_mask: awkward.JaggedArray.ones_like(pfcand_etarel)
+ #sv_mask: awkward.JaggedArray.ones_like(sv_etarel)
+ #pfcand_mask: awkward.JaggedArray.ones_like(pfcand_e)
+
+preprocess:
+ ### method: [manual, auto] - whether to use manually specified parameters for variable standardization
+ ### [note]: `[var]_mask` will not be transformed even if `method=auto`
+
+inputs:
+ n_PFCands:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [ ParticleFlowCandidate_size, null ]
+ PFCands:
+ pad_mode: wrap
+ length: 1500
+ vars:
+ - [ParticleFlowCandidate.Eta, null]
+ - [ParticleFlowCandidate.Phi, null]
+ - [ParticleFlowCandidate.PT, null]
+ - [ParticleFlowCandidate.Mass, null]
+ - [ParticleFlowCandidate.Charge, null]
+ - [ParticleFlowCandidate.PID, null]
+ GenParticles:
+ pad_mode: wrap
+ length: 7500
+ vars:
+ - [Particle.Eta, null]
+ - [Particle.Phi, null]
+ - [Particle.PT, null]
+ - [Particle.Charge, null]
+ - [Particle.Mass, null]
+ - [Particle.PID, null]
+ - [Particle.Status, null]
+ NParticles:
+ pad_mode: wrap
+ length: 1
+ vars:
+ - [Particle_size, null]
+observers:
+ #- recojet_e
+ #- recojet_theta
+ #- recojet_phi
+ #- recojet_m
+ #- n_pfcand
+
+
diff --git a/container_shell.sh b/container_shell.sh
new file mode 100644
index 0000000000000000000000000000000000000000..5eb606f8f29e6c9cb3c938e9b35f624ff30403ab
--- /dev/null
+++ b/container_shell.sh
@@ -0,0 +1,4 @@
+export APPTAINER_TMPDIR=/work/gkrzmanc/singularity_tmp
+export APPTAINER_CACHEDIR=/work/gkrzmanc/singularity_cache
+singularity shell -B /work/gkrzmanc/ --nv docker://dologarcia/gatr:v0
+
diff --git a/docker-compose.yaml b/docker-compose.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..62dddb6bf7da3cbfa49c355c5ae8903a3d4bed61
--- /dev/null
+++ b/docker-compose.yaml
@@ -0,0 +1,7 @@
+version: '3'
+
+services:
+ app:
+ image: gkrz/jetclustering_demo:v0
+ ports:
+ - "7860:7860"
diff --git a/env.sh b/env.sh
new file mode 100644
index 0000000000000000000000000000000000000000..4f55f7fbc88aaf51fc6972a07e482c552a1aea7c
--- /dev/null
+++ b/env.sh
@@ -0,0 +1,17 @@
+# For CERN machines
+#export SVJ_CODE_ROOT="/eos/home-g/gkrzmanc/jetclustering/code"
+#export SVJ_DATA_ROOT="/eos/home-g/gkrzmanc/jetclustering/data"
+#export SVJ_RESULTS_ROOT="/eos/home-g/gkrzmanc/jetclustering/results"
+#export SVJ_PREPROCESSED_DATA_ROOT="/eos/home-g/gkrzmanc/jetclustering/preprocessed_data"
+
+
+# For PSI T3
+export SVJ_CODE_ROOT="/work/gkrzmanc/jetclustering/code"
+#export SVJ_DATA_ROOT="/work/gkrzmanc/jetclustering/data"
+export SVJ_DATA_ROOT="/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/data"
+export SVJ_RESULTS_ROOT="/work/gkrzmanc/jetclustering/results"
+export SVJ_PREPROCESSED_DATA_ROOT="/work/gkrzmanc/jetclustering/preprocessed_data"
+#export SVJ_PREPROCESSED_DATA_ROOT="/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/preprocessed_data"
+export SVJ_WANDB_ENTITY="fcc_ml"
+export SVJ_RESULTS_ROOT_FALLBACK="/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/results"
+
diff --git a/jobs/BigTraining_2_spatial_part_only_t3.slurm b/jobs/BigTraining_2_spatial_part_only_t3.slurm
new file mode 100644
index 0000000000000000000000000000000000000000..84386fdbc491ec68d111fe00721bfa8ea22ebc64
--- /dev/null
+++ b/jobs/BigTraining_2_spatial_part_only_t3.slurm
@@ -0,0 +1,15 @@
+#!/bin/bash
+#SBATCH --partition=qgpu # Specify the partition
+#SBATCH --account=gpu_gres # Specify the account
+#SBATCH --mem=3000 # Request 10GB of memory
+#SBATCH --time=00:10:00
+#SBATCH --job-name=SVJtr3 # Name the job
+#SBATCH --output=jobs/BigTraining_output.log # Redirect stdout to a log file
+#SBATCH --error=jobs/BigTraining_error.log # Redirect stderr to a log file
+#SBATCH --gres=gpu:1
+source env.sh
+export APPTAINER_TMPDIR=/work/gkrzmanc/singularity_tmp
+export APPTAINER_CACHEDIR=/work/gkrzmanc/singularity_cache
+nvidia-smi
+
+srun singularity exec -B /t3home/gkrzmanc/ -B /work/gkrzmanc/ --nv docker://gkrz/lgatr:v3 python -m src.train -train scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1100_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1500_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1100_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1500_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1100_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1500_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1200_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-700_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1200_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1300_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1300_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-800_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1300_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-800_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1400_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1400_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-900_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1400_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-900_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 -val scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-1000_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-1500_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-700_mDark-20_rinv-0.7 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-900_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-1000_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-1500_mDark-20_rinv-0.7 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-800_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-900_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-1000_mDark-20_rinv-0.7 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-700_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-800_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-900_mDark-20_rinv-0.7 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-1500_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-700_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-800_mDark-20_rinv-0.7 -net src/models/LGATr/lgatr.py -bs 64 --gpus 0 --run-name Train_LGATr_SB_spatial_part_only --val-dataset-size 4000 --num-epochs 1000 --attr-loss-weight 0.1 --coord-loss-weight 0.1 --beta-type pt+bc --spatial-part-only --validation-steps 2000 --num-workers 0
diff --git a/jobs/BigTraining_2_spatial_part_only_vega.slurm b/jobs/BigTraining_2_spatial_part_only_vega.slurm
new file mode 100644
index 0000000000000000000000000000000000000000..2e6e12e8f80ebe2faa2760dad86540295b9ffe2e
--- /dev/null
+++ b/jobs/BigTraining_2_spatial_part_only_vega.slurm
@@ -0,0 +1,21 @@
+#!/bin/bash
+#SBATCH --job-name="SVJtrAll"
+#SBATCH --time=48:00:00
+#SBATCH --nodes=1
+#SBATCH --gres=gpu:1
+#SBATCH --ntasks-per-core=1
+#SBATCH --ntasks-per-node=1
+#SBATCH --cpus-per-task=2
+#SBATCH --partition=gpu
+#SBATCH --mem=25GB
+#SBATCH --output=jobs/big_training_2_output1.log
+#SBATCH --error=jobs/big_training_2_error1.log
+
+
+source env.sh
+export APPTAINER_TMPDIR=/work/gkrzmanc/singularity_tmp
+export APPTAINER_CACHEDIR=/work/gkrzmanc/singularity_cache
+nvidia-smi
+srun singularity exec -B /ceph/hpc/home/krzmancg --nv docker://gkrz/lgatr:v3 python -m src.train -train scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1100_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1500_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1100_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1500_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1100_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1500_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1200_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-700_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1200_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1300_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1300_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-800_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1300_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-800_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1400_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1400_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-900_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-1400_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 scouting_PFNano_signals2/SVJ_hadronic_std3/s-channel_mMed-900_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-2000 -val scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-1000_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-1500_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-700_mDark-20_rinv-0.7 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-900_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-1000_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-1500_mDark-20_rinv-0.7 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-800_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-900_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-1000_mDark-20_rinv-0.7 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-700_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-800_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-900_mDark-20_rinv-0.7 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-1500_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-700_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std2/s-channel_mMed-800_mDark-20_rinv-0.7 -net src/models/LGATr/lgatr.py -bs 256 --gpus 0 --run-name Train_LGATr_SB_All_data_CONT --val-dataset-size 4000 --num-epochs 1000 --attr-loss-weight 0.1 --coord-loss-weight 0.1 --beta-type pt+bc --spatial-part-only --validation-steps 1000 --load-model-weights train/Train_LGATr_SB_All_data_2025_01_14_13_19_34/step_5000_epoch_1.ckpt
+
+# sbatch jobs/BigTraining_2_spatial_part_only_vega.slurm
diff --git a/jobs/IRC_training/Delphes_training_t3_NoPID_augment.sh b/jobs/IRC_training/Delphes_training_t3_NoPID_augment.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2c4f1576bfc6ed1340964f2f2e520f3a7e2d6bb6
--- /dev/null
+++ b/jobs/IRC_training/Delphes_training_t3_NoPID_augment.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+sbatch <gives around 1 millioon parameters
+# bash jobs/vega/transformer_training_vega.sh 3 32 4 -> gives around 25k parameters
+# bash jobs/vega/transformer_training_vega.sh 5 32 4 --> around 6k parameters, a very small model
+
+# bash jobs/vega/transformer_training_vega.sh 5 64 4
\ No newline at end of file
diff --git a/jobs/vega/transformer_training_vega_NoPID_700_07.sh b/jobs/vega/transformer_training_vega_NoPID_700_07.sh
new file mode 100644
index 0000000000000000000000000000000000000000..976a9a0fce250bbbc5ff4112986422513c120b12
--- /dev/null
+++ b/jobs/vega/transformer_training_vega_NoPID_700_07.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+sbatch <
diff --git a/jobs/wrapper_eval_4_LGATr_scalars_oc.sh b/jobs/wrapper_eval_4_LGATr_scalars_oc.sh
new file mode 100644
index 0000000000000000000000000000000000000000..18b6a34b4364c71d563d831a37cb9f47faeb1903
--- /dev/null
+++ b/jobs/wrapper_eval_4_LGATr_scalars_oc.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+sbatch <
+
diff --git a/jobs/wrapper_training_4_transformer_datasetcap.sh b/jobs/wrapper_training_4_transformer_datasetcap.sh
new file mode 100644
index 0000000000000000000000000000000000000000..d64359fd0819588497beca1248beef66b5b2c508
--- /dev/null
+++ b/jobs/wrapper_training_4_transformer_datasetcap.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+sbatch <Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0
+ ],
+ "coloraxis": "coloraxis",
+ "opacity": 0.5,
+ "size": [
+ 101.03836059570312,
+ 26.061506271362305,
+ 20.6480655670166,
+ 16.48552894592285,
+ 38.325199127197266,
+ 62.11419677734375,
+ 24.64232635498047,
+ 59.754844665527344,
+ 4.253002166748047,
+ 23.771217346191406,
+ 16.538583755493164,
+ 25.93263816833496,
+ 16.522850036621094,
+ 58.27144241333008,
+ 2.2940664291381836,
+ 3.3546910285949707,
+ 1.2076141834259033,
+ 16.756057739257812,
+ 1.0822510719299316,
+ 16.92183494567871,
+ 7.367945671081543,
+ 2.9758591651916504,
+ 16.217693328857422,
+ 19.29317855834961,
+ 9.378242492675781,
+ 13.83104419708252,
+ 2.833728313446045,
+ 14.901111602783203,
+ 12.920819282531738,
+ 1.5263965129852295,
+ 1.3735501766204834,
+ 3.6861565113067627,
+ 5.066918849945068,
+ 8.904753684997559,
+ 3.8224005699157715,
+ 0.9135650992393494,
+ 1.4578492641448975,
+ 11.540772438049316,
+ 8.135218620300293,
+ 16.158246994018555,
+ 1.5198736190795898,
+ 3.254878282546997,
+ 3.4845070838928223,
+ 1.4707809686660767,
+ 2.0328283309936523,
+ 1.1872833967208862,
+ 3.1722147464752197,
+ 15.602935791015625,
+ 13.136096954345703,
+ 45.391361236572266,
+ 1.9994838237762451,
+ 0.9752102494239807,
+ 1.4013117551803589,
+ 3.249262571334839,
+ 0.5921409130096436,
+ 6.727903842926025,
+ 1.9603890180587769,
+ 0.6168928146362305,
+ 0.7868164777755737,
+ 3.645447015762329,
+ 8.659451484680176,
+ 7.366079807281494,
+ 3.654247283935547,
+ 1.4644408226013184,
+ 3.632772445678711,
+ 4.6353983879089355,
+ 1.8829412460327148,
+ 5.921382904052734,
+ 1.1296319961547852,
+ 4.813258171081543,
+ 1.3812367916107178,
+ 12.659469604492188,
+ 0.8006687760353088,
+ 0.7852551937103271,
+ 1.1910791397094727,
+ 1.4767475128173828,
+ 1.1044032573699951,
+ 3.6760363578796387,
+ 1.9454056024551392,
+ 0.5354197025299072,
+ 0.9528858661651611,
+ 0.7913135290145874,
+ 2.412236452102661,
+ 1.0092871189117432,
+ 1.375762939453125,
+ 0.6427310705184937,
+ 0.5065119862556458,
+ 9.923840522766113,
+ 3.6359455585479736,
+ 8.5220308303833,
+ 1.4535114765167236,
+ 0.8862918615341187,
+ 0.6629937887191772,
+ 0.7332841157913208,
+ 47.80522155761719,
+ 2.7798986434936523,
+ 13.879570960998535,
+ 13.87646198272705,
+ 2.4944565296173096,
+ 15.395174980163574,
+ 3.591315984725952,
+ 24.226634979248047,
+ 23.281803131103516,
+ 1.3849987983703613,
+ 3.088223457336426,
+ 1.0012493133544922,
+ 3.7747719287872314,
+ 19.770238876342773,
+ 2.6913866996765137,
+ 3.1060233116149902,
+ 12.757043838500977,
+ 14.321101188659668,
+ 5.149312496185303,
+ 15.20324993133545,
+ 11.513879776000977,
+ 5.427133560180664,
+ 2.8827643394470215,
+ 4.650199890136719,
+ 0.8991593718528748,
+ 11.334932327270508,
+ 2.953847885131836,
+ 2.8047146797180176,
+ 1.9188799858093262,
+ 2.050429344177246,
+ 2.291971445083618,
+ 52.190250396728516,
+ 6.152560234069824,
+ 151.6759033203125,
+ 147.08636474609375,
+ 5.838123321533203,
+ 4.9407057762146,
+ 14.849751472473145,
+ 6.634651184082031,
+ 131.43472290039062
+ ],
+ "sizemode": "area",
+ "sizeref": 0.3791897583007813,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ 1.2195281982421875,
+ 1.98590087890625,
+ 0.8671684265136719,
+ 3.4635086059570312,
+ 1.1997833251953125,
+ 1.3100128173828125,
+ 1.9835243225097656,
+ 1.2714252471923828,
+ 3.506978988647461,
+ 1.984161376953125,
+ 1.2946414947509766,
+ 1.1416559219360352,
+ 0.8609914779663086,
+ 1.2865734100341797,
+ 1.5410079956054688,
+ 3.4721412658691406,
+ -3.9763875007629395,
+ 3.4694156646728516,
+ -1.7000222206115723,
+ 1.9853153228759766,
+ 1.9790687561035156,
+ 3.4516029357910156,
+ 1.9854459762573242,
+ 1.1215286254882812,
+ 1.1268348693847656,
+ 0.8611602783203125,
+ 1.3397750854492188,
+ 3.4989051818847656,
+ 0.8616437911987305,
+ 2.512115478515625,
+ -3.5629405975341797,
+ 3.7969589233398438,
+ 1.5458602905273438,
+ 3.551544189453125,
+ 3.7060794830322266,
+ -1.6978367567062378,
+ -2.4997949600219727,
+ 1.3370532989501953,
+ 1.1756134033203125,
+ 1.1201152801513672,
+ 2.2915496826171875,
+ 2.656987190246582,
+ 0.8492448329925537,
+ -1.9527654647827148,
+ -4.024190902709961,
+ -1.4978241920471191,
+ 0.31200218200683594,
+ 1.9855766296386719,
+ 1.2321557998657227,
+ 1.2936134338378906,
+ 1.5450668334960938,
+ -3.824920654296875,
+ -2.501629590988159,
+ 2.0808582305908203,
+ 5.183865547180176,
+ 1.9815711975097656,
+ -3.737698554992676,
+ -2.564347267150879,
+ 0.535775899887085,
+ 1.1463603973388672,
+ 1.2275581359863281,
+ 1.3354454040527344,
+ 3.592731475830078,
+ 3.455942153930664,
+ 1.5209197998046875,
+ 2.1475276947021484,
+ 3.7184104919433594,
+ 3.580129623413086,
+ -1.48850679397583,
+ 3.423473358154297,
+ 4.074357986450195,
+ 0.861790657043457,
+ -4.361030101776123,
+ -2.5652551651000977,
+ -3.670658826828003,
+ -5.297344207763672,
+ -2.4610466957092285,
+ 1.5118179321289062,
+ 3.5790176391601562,
+ 3.434803009033203,
+ -3.4992291927337646,
+ -3.882575035095215,
+ 1.4559423923492432,
+ 0.674445629119873,
+ -1.9576730728149414,
+ -0.026201248168945312,
+ 2.421322822570801,
+ 0.8688249588012695,
+ 0.9397287368774414,
+ 1.1259021759033203,
+ -3.7969799041748047,
+ -3.582089424133301,
+ -4.8658294677734375,
+ -3.722916603088379,
+ -0.16184139251708984,
+ -0.14617156982421875,
+ 1.188232421875,
+ 1.188441276550293,
+ -0.14174127578735352,
+ -0.2401280403137207,
+ 0.6898446083068848,
+ -2.468989849090576,
+ -2.4799671173095703,
+ -1.5391032695770264,
+ 0.6890339851379395,
+ -2.0770323276519775,
+ -2.347259521484375,
+ -2.477169990539551,
+ 0.7469274997711182,
+ -0.3251810073852539,
+ -0.20268535614013672,
+ 1.3865916728973389,
+ 0.6595487594604492,
+ 0.4528694152832031,
+ 1.5303890705108643,
+ -0.036174774169921875,
+ 0.6628322601318359,
+ 0.5483179092407227,
+ -1.5513315200805664,
+ 1.4934382438659668,
+ -0.4099559783935547,
+ 0.8568150997161865,
+ 0.666447639465332,
+ 0.6659073829650879,
+ 0.7629604339599609,
+ 0.6424579620361328,
+ 0.7321195602416992,
+ 0.6570296287536621,
+ 0.6568770408630371,
+ 0.6768426895141602,
+ 0.7358236312866211,
+ 0.6673154830932617,
+ 0.6646366119384766,
+ 0.6574773788452148
+ ],
+ "y": [
+ 2.950166702270508,
+ 1.5826177597045898,
+ 3.121121406555176,
+ 1.6407747268676758,
+ 2.9720420837402344,
+ 2.7956857681274414,
+ 1.583237648010254,
+ 2.863478660583496,
+ 2.0327625274658203,
+ 1.5827703475952148,
+ 2.8212108612060547,
+ 3.029536247253418,
+ 3.121832847595215,
+ 2.836183547973633,
+ 2.4492440223693848,
+ 2.0669965744018555,
+ 3.7092409133911133,
+ 1.4029054641723633,
+ 0.688596248626709,
+ 1.58148193359375,
+ 1.585287094116211,
+ 2.085512161254883,
+ 1.5812978744506836,
+ 3.045863151550293,
+ 3.0278005599975586,
+ 3.12160587310791,
+ 2.7502613067626953,
+ 1.2014188766479492,
+ 3.1214733123779297,
+ -3.151762008666992,
+ -1.030670166015625,
+ 1.1676864624023438,
+ 2.4911251068115234,
+ 1.304931640625,
+ 1.0449485778808594,
+ 0.6950531005859375,
+ 1.927161693572998,
+ 2.756868362426758,
+ 2.995926856994629,
+ 3.0461673736572266,
+ 0.6145973205566406,
+ 1.4008150100708008,
+ 2.399850368499756,
+ -4.6334638595581055,
+ -2.94014835357666,
+ -3.996278762817383,
+ 2.6670455932617188,
+ 1.5811328887939453,
+ 2.916940689086914,
+ 2.820216178894043,
+ 2.444859504699707,
+ -1.4697370529174805,
+ 1.9292540550231934,
+ 1.6397161483764648,
+ -1.8011369705200195,
+ 1.5851612091064453,
+ -2.2582502365112305,
+ 4.759621620178223,
+ 1.8596982955932617,
+ 3.0263357162475586,
+ 2.925581932067871,
+ 2.757168769836426,
+ 1.3045654296875,
+ 2.1142311096191406,
+ 2.5291147232055664,
+ 2.7656168937683105,
+ 1.7628917694091797,
+ 1.3927421569824219,
+ -1.020705223083496,
+ 1.868703842163086,
+ 0.21700239181518555,
+ 3.1214332580566406,
+ 2.1170780658721924,
+ 1.9959421157836914,
+ 1.0830862522125244,
+ -0.39272117614746094,
+ -3.378726005554199,
+ 2.568157196044922,
+ 1.7630748748779297,
+ 2.188962459564209,
+ 1.3118503093719482,
+ -1.4546318054199219,
+ 1.9024782180786133,
+ 3.0569963455200195,
+ -4.6237664222717285,
+ -2.166672706604004,
+ 1.2228431701660156,
+ 3.1198348999023438,
+ 3.108856201171875,
+ 3.0284767150878906,
+ -2.172016143798828,
+ -2.0680274963378906,
+ 0.5117988586425781,
+ -1.399277687072754,
+ -3.796886444091797,
+ -3.828282356262207,
+ -3.929811477661133,
+ -3.9297380447387695,
+ -3.830869197845459,
+ 2.3517565727233887,
+ 2.879507064819336,
+ 1.5584568977355957,
+ 1.549696445465088,
+ 2.7123355865478516,
+ 2.8821334838867188,
+ 2.4377670288085938,
+ 1.7821812629699707,
+ 1.561081886291504,
+ 2.775986671447754,
+ 2.6440773010253906,
+ 2.3790483474731445,
+ 1.5341711044311523,
+ 3.027785301208496,
+ 2.992715835571289,
+ 1.5700979232788086,
+ 2.4991064071655273,
+ 3.034064292907715,
+ 2.2039008140563965,
+ 2.306452751159668,
+ 1.5951037406921387,
+ 2.4299774169921875,
+ 2.532834053039551,
+ 3.0401201248168945,
+ 2.7313737869262695,
+ 2.8727169036865234,
+ 2.976862907409668,
+ 3.1178665161132812,
+ 3.0206899642944336,
+ 3.0218048095703125,
+ 3.0441160202026367,
+ 3.118899345397949,
+ 3.0264644622802734,
+ 3.0499629974365234,
+ 3.0232791900634766
+ ],
+ "z": [
+ 1.4470248222351074,
+ 5.374673843383789,
+ 0.23702621459960938,
+ 2.3682384490966797,
+ 1.3915612697601318,
+ 1.8681704998016357,
+ 5.3721466064453125,
+ 1.6841468811035156,
+ 2.9734935760498047,
+ 5.373435974121094,
+ 1.8328027725219727,
+ 1.1818857192993164,
+ 0.2127227783203125,
+ 1.758211612701416,
+ 3.173471450805664,
+ 3.0236339569091797,
+ -0.159942626953125,
+ 2.3098888397216797,
+ -8.153377532958984,
+ 5.376808166503906,
+ 5.444610595703125,
+ 3.051755905151367,
+ 5.377540588378906,
+ 1.1160688400268555,
+ 1.1505279541015625,
+ 0.2137584686279297,
+ 2.0269241333007812,
+ 2.244060516357422,
+ 0.21574020385742188,
+ -4.44962215423584,
+ -4.120824813842773,
+ 2.319334030151367,
+ 2.648721694946289,
+ 2.2720260620117188,
+ 2.163802146911621,
+ -8.139062881469727,
+ -1.7534027099609375,
+ 2.0537095069885254,
+ 1.3121886253356934,
+ 1.1126208305358887,
+ -8.649433135986328,
+ -4.8788909912109375,
+ -2.5760498046875,
+ -0.2600560188293457,
+ 7.875727653503418,
+ -1.9141578674316406,
+ 8.546117782592773,
+ 5.378196716308594,
+ 1.5402262210845947,
+ 1.8041858673095703,
+ 3.185026168823242,
+ 6.280406951904297,
+ -1.7583484649658203,
+ 5.388126373291016,
+ 3.8495960235595703,
+ 5.4493865966796875,
+ 8.413103103637695,
+ 0.8383960723876953,
+ -7.106464385986328,
+ 1.2039985656738281,
+ 1.5208654403686523,
+ 2.0506503582000732,
+ 2.1522045135498047,
+ 3.377582550048828,
+ 2.543872833251953,
+ 2.550724983215332,
+ 2.776498794555664,
+ 2.2998905181884766,
+ -8.63661003112793,
+ 2.4551000595092773,
+ 1.86065673828125,
+ 0.21634864807128906,
+ -1.0024890899658203,
+ -1.8613166809082031,
+ -2.3752803802490234,
+ 1.3736848831176758,
+ -1.471217155456543,
+ 2.405726432800293,
+ 2.521444320678711,
+ 3.7810115814208984,
+ -2.144550323486328,
+ 6.383539199829102,
+ -4.329103469848633,
+ -0.8201427459716797,
+ -0.2739400863647461,
+ -5.849727630615234,
+ -7.458827972412109,
+ 0.24791908264160156,
+ 0.5081138610839844,
+ 1.147538185119629,
+ 8.427412033081055,
+ 7.520533561706543,
+ 6.166410446166992,
+ 7.302639007568359,
+ 1.7978081703186035,
+ 1.834744930267334,
+ 2.642197608947754,
+ 2.6424198150634766,
+ 1.8376703262329102,
+ -3.3672428131103516,
+ -1.432443618774414,
+ -1.6083946228027344,
+ -1.6129283905029297,
+ -2.7758255004882812,
+ -1.4248580932617188,
+ -4.103586196899414,
+ -1.5058155059814453,
+ -1.6097183227539062,
+ -1.7128772735595703,
+ -2.535219192504883,
+ -3.284269332885742,
+ -4.4121856689453125,
+ -0.9425163269042969,
+ -0.8672809600830078,
+ -4.505796432495117,
+ -2.7510528564453125,
+ -0.9156894683837891,
+ -3.1802597045898438,
+ -1.4592094421386719,
+ -4.468965530395508,
+ -3.366291046142578,
+ -2.273914337158203,
+ -0.8901557922363281,
+ -1.8064441680908203,
+ -1.4590892791748047,
+ -1.1322784423828125,
+ -0.34772491455078125,
+ -0.9493503570556641,
+ -0.9475498199462891,
+ -0.8657684326171875,
+ -0.3304004669189453,
+ -0.9437808990478516,
+ -0.8477859497070312,
+ -0.9486865997314453
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 15
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-16T13:26:19.386204Z",
+ "start_time": "2025-05-16T13:26:19.047193Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "pt, eta, phi = result[\"pt\"], result[\"eta\"], result[\"phi\"]\n",
+ "#px,py,pz = # convert from pt, eta, phi\n",
+ "px, py, pz = pt * np.cos(phi), pt * np.sin(phi), pt / np.sinh(eta)\n",
+ "pxyz = torch.tensor(np.stack([px, py, pz], axis=1))\n",
+ "print(pxyz[filt].shape)\n",
+ "plot_coordinates(pxyz[filt], pt_scaled, torch.tensor(result[\"GT_cluster\"][filt])).show()"
+ ],
+ "id": "515c0ba8a1ce00fc",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/tmp/ipykernel_423/3168229143.py:3: DeprecationWarning:\n",
+ "\n",
+ "__array_wrap__ must accept context and return_scalar arguments (positionally) in the future. (Deprecated NumPy 2.0)\n",
+ "\n",
+ "/tmp/ipykernel_423/3168229143.py:6: UserWarning:\n",
+ "\n",
+ "To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
+ "\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "torch.Size([134, 3])\n",
+ "[('X', (134, 1)), ('Y', (134, 1)), ('Z', (134, 1)), ('tIdx', (134, 1)), ('pt', (134, 1))]\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0
+ ],
+ "coloraxis": "coloraxis",
+ "opacity": 0.5,
+ "size": [
+ 101.03836059570312,
+ 26.061506271362305,
+ 20.6480655670166,
+ 16.48552894592285,
+ 38.325199127197266,
+ 62.11419677734375,
+ 24.64232635498047,
+ 59.754844665527344,
+ 4.253002166748047,
+ 23.771217346191406,
+ 16.538583755493164,
+ 25.93263816833496,
+ 16.522850036621094,
+ 58.27144241333008,
+ 2.2940664291381836,
+ 3.3546910285949707,
+ 1.2076141834259033,
+ 16.756057739257812,
+ 1.0822510719299316,
+ 16.92183494567871,
+ 7.367945671081543,
+ 2.9758591651916504,
+ 16.217693328857422,
+ 19.29317855834961,
+ 9.378242492675781,
+ 13.83104419708252,
+ 2.833728313446045,
+ 14.901111602783203,
+ 12.920819282531738,
+ 1.5263965129852295,
+ 1.3735501766204834,
+ 3.6861565113067627,
+ 5.066918849945068,
+ 8.904753684997559,
+ 3.8224005699157715,
+ 0.9135650992393494,
+ 1.4578492641448975,
+ 11.540772438049316,
+ 8.135218620300293,
+ 16.158246994018555,
+ 1.5198736190795898,
+ 3.254878282546997,
+ 3.4845070838928223,
+ 1.4707809686660767,
+ 2.0328283309936523,
+ 1.1872833967208862,
+ 3.1722147464752197,
+ 15.602935791015625,
+ 13.136096954345703,
+ 45.391361236572266,
+ 1.9994838237762451,
+ 0.9752102494239807,
+ 1.4013117551803589,
+ 3.249262571334839,
+ 0.5921409130096436,
+ 6.727903842926025,
+ 1.9603890180587769,
+ 0.6168928146362305,
+ 0.7868164777755737,
+ 3.645447015762329,
+ 8.659451484680176,
+ 7.366079807281494,
+ 3.654247283935547,
+ 1.4644408226013184,
+ 3.632772445678711,
+ 4.6353983879089355,
+ 1.8829412460327148,
+ 5.921382904052734,
+ 1.1296319961547852,
+ 4.813258171081543,
+ 1.3812367916107178,
+ 12.659469604492188,
+ 0.8006687760353088,
+ 0.7852551937103271,
+ 1.1910791397094727,
+ 1.4767475128173828,
+ 1.1044032573699951,
+ 3.6760363578796387,
+ 1.9454056024551392,
+ 0.5354197025299072,
+ 0.9528858661651611,
+ 0.7913135290145874,
+ 2.412236452102661,
+ 1.0092871189117432,
+ 1.375762939453125,
+ 0.6427310705184937,
+ 0.5065119862556458,
+ 9.923840522766113,
+ 3.6359455585479736,
+ 8.5220308303833,
+ 1.4535114765167236,
+ 0.8862918615341187,
+ 0.6629937887191772,
+ 0.7332841157913208,
+ 47.80522155761719,
+ 2.7798986434936523,
+ 13.879570960998535,
+ 13.87646198272705,
+ 2.4944565296173096,
+ 15.395174980163574,
+ 3.591315984725952,
+ 24.226634979248047,
+ 23.281803131103516,
+ 1.3849987983703613,
+ 3.088223457336426,
+ 1.0012493133544922,
+ 3.7747719287872314,
+ 19.770238876342773,
+ 2.6913866996765137,
+ 3.1060233116149902,
+ 12.757043838500977,
+ 14.321101188659668,
+ 5.149312496185303,
+ 15.20324993133545,
+ 11.513879776000977,
+ 5.427133560180664,
+ 2.8827643394470215,
+ 4.650199890136719,
+ 0.8991593718528748,
+ 11.334932327270508,
+ 2.953847885131836,
+ 2.8047146797180176,
+ 1.9188799858093262,
+ 2.050429344177246,
+ 2.291971445083618,
+ 52.190250396728516,
+ 6.152560234069824,
+ 151.6759033203125,
+ 147.08636474609375,
+ 5.838123321533203,
+ 4.9407057762146,
+ 14.849751472473145,
+ 6.634651184082031,
+ 131.43472290039062
+ ],
+ "sizemode": "area",
+ "sizeref": 0.3791897583007813,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ 32.51146442411007,
+ 14.597589112942844,
+ 3.198074214240084,
+ 14.150763317123863,
+ 8.60142893299551,
+ 23.849180478683017,
+ 14.126247394212674,
+ 20.984602329128084,
+ 3.521014736871753,
+ 13.54606568894628,
+ 4.1880505031093795,
+ 5.062066807357966,
+ 2.561683761636249,
+ 21.465014268873727,
+ 0.26329186794553766,
+ 2.7773126102980665,
+ -0.8836707353208209,
+ 14.891069797199716,
+ -0.7337772947369935,
+ 10.75458144969623,
+ 3.1051138581533366,
+ 2.463681786343046,
+ 10.30455944758415,
+ 4.592257793889044,
+ 0.8580589959402805,
+ 2.128068995690123,
+ 1.438911618868045,
+ 13.578728310312776,
+ 1.9880201756473963,
+ 0.8342915719062215,
+ -1.3348931045625503,
+ 3.49992082793361,
+ 3.4032087243900353,
+ 8.1145107950372,
+ 3.67278747221517,
+ -0.6240597421532393,
+ -1.0415456526020945,
+ 2.601513352728323,
+ 2.3206724490869535,
+ 3.846065876053004,
+ 0.5032466908164697,
+ 2.356674187926951,
+ 0.99908634509941,
+ -0.7682957502699226,
+ -1.1246768507254294,
+ -0.5077802752601621,
+ 0.518432078961988,
+ 9.913285821069634,
+ 4.634105418137169,
+ 16.817264832720678,
+ 0.2283630781822895,
+ -0.9278747085129307,
+ -1.0005358900480967,
+ 2.1629839234657147,
+ 0.5654975749451232,
+ 2.8366168167900105,
+ -1.213411265436206,
+ -0.23971430659653886,
+ -0.13259793092822156,
+ 0.9301660551733409,
+ 2.331563357930226,
+ 1.6604568783217692,
+ 3.4031921316836247,
+ 1.2328431728946343,
+ 2.4399607033358244,
+ 3.485933176190652,
+ 1.6726423542083906,
+ 5.395896079353239,
+ -1.111458577854462,
+ 4.059296732008312,
+ 1.3768110338198083,
+ 1.9478084505639872,
+ -0.7663487755598747,
+ -0.5606718142835607,
+ -1.1833015919496448,
+ -1.476053110406244,
+ -0.7756542892174146,
+ 2.5460262171897057,
+ 1.7220055385903832,
+ 0.4507444170565679,
+ -0.913209844089543,
+ -0.7529041153027628,
+ 0.866255969621829,
+ 0.08319580253517886,
+ -0.7186609306750353,
+ -0.07831784900598303,
+ 0.32045974408184963,
+ 0.9993585012582217,
+ 1.026787659920474,
+ 0.7797202112657731,
+ -0.8996720466189257,
+ -0.7609119747289641,
+ -0.6066344818466087,
+ -0.7331231833785739,
+ -11.901962037465447,
+ -0.8106091726960449,
+ 3.3729669753489624,
+ 3.3290461288541615,
+ -0.7273752043197297,
+ -1.036331497917321,
+ 0.5514160268496627,
+ -18.84267686086306,
+ -18.269276466485614,
+ -0.4961515803091315,
+ 0.47417044785557244,
+ -0.5277083235372533,
+ -2.7511623258392652,
+ -15.486560365786893,
+ 0.6724925346442603,
+ -0.45349304571501564,
+ -0.7811599545541787,
+ 3.9980690903036336,
+ 0.5185385690938733,
+ -3.606543508888899,
+ 4.524195408158991,
+ -0.2978844718458679,
+ 0.2902959369273266,
+ 0.5750344887026123,
+ -0.39917450021118,
+ 4.050450997124101,
+ -0.2913396393988391,
+ 0.9634378987355081,
+ 0.19323225825613854,
+ 0.09096970233082138,
+ 1.020891109840266,
+ -0.5431846680683649,
+ 0.5840349076446582,
+ 22.61410895925883,
+ 21.217254128855306,
+ 1.5118942223078409,
+ 0.4689990072315276,
+ 3.0665490431610625,
+ 0.7017005243169048,
+ 18.96091079268415
+ ],
+ "y": [
+ 95.66480540338311,
+ 21.589638746907028,
+ 20.398895386271025,
+ 8.457456010503506,
+ 37.347507392729035,
+ 57.353204198107235,
+ 20.19141854211498,
+ 55.94897609509627,
+ 2.385473255581693,
+ 19.533941703369127,
+ 15.999530793772285,
+ 25.433780725791202,
+ 16.323061895307475,
+ 54.173925124243034,
+ 2.278907232331445,
+ 1.8816180701765495,
+ 0.823078396964087,
+ 7.682545883772385,
+ 0.795511322623346,
+ 13.064741703173581,
+ 6.6816832714454035,
+ 1.6691344543495241,
+ 12.523163797542168,
+ 18.738674105678513,
+ 9.338906092841688,
+ 13.666349400305572,
+ 2.4412188569467315,
+ 6.1368774204240495,
+ 12.766963096722058,
+ -1.2782190297048912,
+ -0.32357454641166855,
+ 1.1568509083048506,
+ 3.7539095633970994,
+ 3.667335919670075,
+ 1.0589515101418547,
+ 0.6671960946916841,
+ 1.0200525136057925,
+ 11.243734110268484,
+ 7.797195738477351,
+ 15.693843480701924,
+ 1.4341403648724076,
+ 2.2450655683420333,
+ 3.338205519846728,
+ -1.2541603956063592,
+ -1.6933673566987077,
+ -1.0732199477207827,
+ 3.129564598671514,
+ 12.048998694013381,
+ 12.291546288712507,
+ 42.16106353562646,
+ 1.986400228067341,
+ -0.30013922749888333,
+ 0.981123115583524,
+ 2.424707777095284,
+ -0.17562275931973925,
+ 6.100679892795793,
+ -1.5397266650408963,
+ 0.5684134023426535,
+ 0.775562994483823,
+ 3.5247801427229097,
+ 8.33965900522838,
+ 7.176490415410174,
+ 1.3310922308378894,
+ 0.7903699348712075,
+ 2.6913987828375476,
+ 3.055354006618891,
+ 0.8647168848354041,
+ 2.4386637728945613,
+ 0.2018124784307985,
+ 2.5864191970734125,
+ 0.11048281156406178,
+ 12.50872547092521,
+ 0.23190524598585593,
+ 0.5497934484122412,
+ 0.13589282372698533,
+ -0.04528169467211658,
+ -0.7861723592877601,
+ 2.6516021205745925,
+ 0.9051518563908972,
+ 0.28897011670681294,
+ 0.27210155198984426,
+ -0.243541565983477,
+ 2.2513296728705416,
+ 1.0058523484297757,
+ -1.1731368770497306,
+ -0.6379416458712543,
+ 0.39224984976878563,
+ 9.873393201288893,
+ 3.487951720732352,
+ 8.486285752091263,
+ -1.141615443526558,
+ -0.4544515711664794,
+ 0.26749835385457144,
+ -0.015362046241472747,
+ -46.29991909098329,
+ -2.659088046161481,
+ -13.463490774854755,
+ -13.47121557358616,
+ -2.386050856602026,
+ 15.360254870811193,
+ 3.548730881242119,
+ 15.227717200382358,
+ 14.431766850478716,
+ 1.29307976584745,
+ 3.0516039239756183,
+ 0.8508960646062148,
+ 2.5845713322024526,
+ 12.289377252916182,
+ 2.6060153794717666,
+ 3.0727389849747846,
+ 12.733104751899148,
+ 13.751704723596562,
+ 5.123137411365441,
+ 14.769280699923835,
+ 10.587779909168749,
+ 5.418952253108746,
+ 2.8681106160312066,
+ 4.6145091131159415,
+ 0.8056967756991528,
+ 10.586526228357364,
+ 2.939445278111633,
+ 2.6340485663529156,
+ 1.9091258979723764,
+ 2.048410361407346,
+ 2.0520512778504827,
+ 52.18742364679058,
+ 6.124777600901916,
+ 149.98060449275283,
+ 145.5480223893561,
+ 5.638959104123921,
+ 4.918395419070752,
+ 14.529672940575995,
+ 6.597439860174132,
+ 130.05987177378864
+ ],
+ "z": [
+ 152.57559297538901,
+ 8.99618124414401,
+ 100.97421372079499,
+ 22.723544372807805,
+ 56.414937711618954,
+ 89.78473702445721,
+ 8.14369850048235,
+ 85.97577910946958,
+ 4.124478618550033,
+ 7.9476546199543625,
+ 20.247924671295653,
+ 51.33944156319836,
+ 83.24857340360404,
+ 85.12683628998471,
+ 2.0486877704382236,
+ 3.253313983110712,
+ 5.953539440414188,
+ 24.159906885931292,
+ -0.46178822618738086,
+ 5.799781313505054,
+ 2.4544759096116127,
+ 2.8859302246803282,
+ 5.559055701075366,
+ 44.17362182783674,
+ 16.963787191841913,
+ 69.88454968040239,
+ 4.792052280338667,
+ 21.986006242585898,
+ 65.28542778079324,
+ -1.270025097428827,
+ -1.2950571938266677,
+ 4.336458365420045,
+ 9.850324556524084,
+ 13.13861511314892,
+ 5.668266645208955,
+ -0.3913146190351783,
+ -1.6264380260673943,
+ 13.204949510548236,
+ 13.850842298936735,
+ 36.99588898510734,
+ -0.39596457565448284,
+ -3.5811310335730053,
+ -4.536706132760505,
+ -49.00544071652563,
+ 0.8336885532194976,
+ -3.8110075293975805,
+ 0.7829353347076129,
+ 5.347772123513272,
+ 20.448040125081427,
+ 64.95146449301662,
+ 1.7861787416811354,
+ 0.3608249454668057,
+ -1.5637317351690836,
+ 2.460229116352133,
+ 0.5023467466184838,
+ 2.2425614918101497,
+ 0.513071342563147,
+ 3.0215161189815998,
+ -0.3483890940118723,
+ 6.521042603741499,
+ 11.73704653262844,
+ 8.428267039139529,
+ 7.9771754744463435,
+ 1.306571695753695,
+ 7.062277626633197,
+ 10.264993773770126,
+ 1.9725144573470192,
+ 8.736768434707155,
+ -0.2807397932126644,
+ 6.91460631065769,
+ 2.6702955783544966,
+ 63.964898086964,
+ 15.146941638956516,
+ -0.8762707242494668,
+ -1.8460288031503724,
+ 3.287493421747394,
+ -5.256334367562614,
+ 8.316719227777323,
+ 2.5069140193130655,
+ 0.47770057886790435,
+ -1.565424959824951,
+ 0.2927836957440543,
+ -2.345709672904047,
+ -5.130586683373893,
+ -45.83950336977065,
+ -0.24886082174937665,
+ -0.195743755414217,
+ 45.95196752440269,
+ 15.820081327979109,
+ 15.41503299385159,
+ 0.3804117845068535,
+ 0.19764461276508782,
+ 0.3194493309148289,
+ 0.1346364282995509,
+ 64.07734181803403,
+ 5.3436022473621145,
+ 8.833952125748853,
+ 8.813526287999956,
+ 4.794917091242716,
+ -17.207325124305875,
+ -7.600848988405502,
+ -55.43470332816911,
+ -55.572227499900805,
+ -1.7899892356387286,
+ -6.536077649947283,
+ -0.8704834424041229,
+ -10.51046945762632,
+ -46.98921646353192,
+ -4.678522626967823,
+ -3.997974536563037,
+ -14.438129019604824,
+ -12.231031609037553,
+ -24.727357578901227,
+ -114.72934947841777,
+ -10.379017189636237,
+ -6.5929129579505545,
+ -13.84323532316581,
+ -4.87772248660237,
+ -1.969573855006704,
+ -10.364235536310858,
+ -3.2248222961167725,
+ -4.079312523909851,
+ -9.214595462065084,
+ -3.148979809820661,
+ -5.835627947321886,
+ -174.96314109160988,
+ 100.25510603807606,
+ -810.2664291408346,
+ -792.7481253133753,
+ -33.1598797103202,
+ 80.50810762557553,
+ -74.85583943603613,
+ -44.639142251562625,
+ -708.3937107914747
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 28
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "source": "pxyz.shape",
+ "id": "e986fe58b49cbd",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(3, 1644927)"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 22
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-16T13:16:50.076657Z",
+ "start_time": "2025-05-16T13:16:48.091007Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import hdbscan\n",
+ "clusterer = hdbscan.HDBSCAN(min_cluster_size=2, min_samples=1, cluster_selection_epsilon=0.4)\n",
+ "from time import time\n",
+ "t0 = time()\n",
+ "cluster_labels = clusterer.fit_predict(norm_coords)\n",
+ "t1 = time()\n",
+ "print(t1 - t0)\n",
+ "plot_coordinates(result[\"pred\"][filt, 1:4], pt_scaled, torch.tensor(result[\"GT_cluster\"][filt])).show()\n"
+ ],
+ "id": "2cdfdce76e7e5e08",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.009739875793457031\n",
+ "[('X', (54, 1)), ('Y', (54, 1)), ('Z', (54, 1)), ('tIdx', (54, 1)), ('pt', (54, 1))]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/1gatr/lib/python3.10/site-packages/sklearn/utils/deprecation.py:151: FutureWarning:\n",
+ "\n",
+ "'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
+ "\n",
+ "/work/gkrzmanc/1gatr/lib/python3.10/site-packages/sklearn/utils/deprecation.py:151: FutureWarning:\n",
+ "\n",
+ "'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
+ "\n",
+ "/tmp/ipykernel_423/1208012715.py:8: UserWarning:\n",
+ "\n",
+ "To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0
+ ],
+ "coloraxis": "coloraxis",
+ "opacity": 0.5,
+ "size": [
+ 2.3368332386016846,
+ 4.0393195152282715,
+ 3.558894634246826,
+ 0.6325693726539612,
+ 3.104429244995117,
+ 2.281386375427246,
+ 2.10312557220459,
+ 1.6727255582809448,
+ 2.633449077606201,
+ 1.289731502532959,
+ 1.0546129941940308,
+ 2.7836709022521973,
+ 2.4333255290985107,
+ 2.5670440196990967,
+ 0.959624707698822,
+ 1.4518953561782837,
+ 2.875882863998413,
+ 1.2221746444702148,
+ 0.9010525345802307,
+ 1.982618808746338,
+ 0.8886423110961914,
+ 0.8504375219345093,
+ 0.7113118767738342,
+ 0.7825168371200562,
+ 0.9563230276107788,
+ 1.4104015827178955,
+ 1.7784031629562378,
+ 1.1525969505310059,
+ 0.773469865322113,
+ 1.1058717966079712,
+ 1.9629709720611572,
+ 0.6313493251800537,
+ 4.588120937347412,
+ 1.5778967142105103,
+ 21.21026039123535,
+ 1.2459989786148071,
+ 3.218842029571533,
+ 18.339981079101562,
+ 3.0517373085021973,
+ 2.6291825771331787,
+ 14.557271957397461,
+ 3.1367204189300537,
+ 4.707605361938477,
+ 0.7291849255561829,
+ 3.6883182525634766,
+ 3.1902849674224854,
+ 0.5294345021247864,
+ 0.7889243364334106,
+ 13.908509254455566,
+ 2.9235482215881348,
+ 1.4689422845840454,
+ 2.347878932952881,
+ 2.2491581439971924,
+ 1.1463648080825806
+ ],
+ "sizemode": "area",
+ "sizeref": 0.05302565097808838,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ 1.0159063339233398,
+ 2.655028820037842,
+ 1.095259666442871,
+ 0.7083473205566406,
+ 2.676013946533203,
+ -0.42451584339141846,
+ 2.0789108276367188,
+ -2.5827460289001465,
+ 0.28186511993408203,
+ 2.1931028366088867,
+ 2.5014243125915527,
+ 1.573533058166504,
+ 1.779599666595459,
+ 0.2791900634765625,
+ 4.201227188110352,
+ 1.9480552673339844,
+ -2.580015182495117,
+ -2.664290428161621,
+ -3.4393396377563477,
+ -2.5776853561401367,
+ -2.531010627746582,
+ -2.5440549850463867,
+ -2.650024652481079,
+ 1.9233627319335938,
+ 2.3323373794555664,
+ 1.9575462341308594,
+ 1.2878084182739258,
+ 2.803015947341919,
+ 2.4358696937561035,
+ 1.9238996505737305,
+ 1.673898696899414,
+ 3.620333194732666,
+ -2.5708751678466797,
+ -1.5331053733825684,
+ 1.9381146430969238,
+ -1.8467779159545898,
+ 1.944746971130371,
+ 1.938246726989746,
+ -2.6489315032958984,
+ -2.5795602798461914,
+ -0.4893491268157959,
+ 3.5131640434265137,
+ -0.5366212129592896,
+ -1.0228681564331055,
+ 2.155752182006836,
+ -0.5453826189041138,
+ 1.2069225311279297,
+ -2.6151466369628906,
+ -0.4893200397491455,
+ 2.21915864944458,
+ 1.1761527061462402,
+ -0.5445770621299744,
+ 1.923469066619873,
+ 2.0430850982666016
+ ],
+ "y": [
+ 4.096261024475098,
+ 1.047827959060669,
+ 3.8783645629882812,
+ -3.516716480255127,
+ 1.0448665618896484,
+ 3.139375686645508,
+ 1.7222652435302734,
+ -0.16171085834503174,
+ -3.695284366607666,
+ 0.9161152839660645,
+ -1.9471006393432617,
+ 0.8992660045623779,
+ 2.345682144165039,
+ -3.6922922134399414,
+ -1.5975706577301025,
+ -2.4489526748657227,
+ -0.19943547248840332,
+ 0.7268321514129639,
+ 0.008137702941894531,
+ -0.13746857643127441,
+ -1.7098636627197266,
+ 2.408865451812744,
+ 0.6778249740600586,
+ -1.9704322814941406,
+ 0.9289155006408691,
+ -2.441255569458008,
+ 0.845772922039032,
+ 1.0436396598815918,
+ -1.8788166046142578,
+ 0.8871756792068481,
+ 2.657167434692383,
+ -0.4148445129394531,
+ -0.18941950798034668,
+ -3.4636902809143066,
+ -2.4516725540161133,
+ -3.0170345306396484,
+ -2.449676036834717,
+ -2.4516701698303223,
+ -0.47876524925231934,
+ -0.18836212158203125,
+ 3.2422213554382324,
+ -0.41518115997314453,
+ 3.905575752258301,
+ -2.297532081604004,
+ 1.6136784553527832,
+ 3.9249658584594727,
+ 0.5249004364013672,
+ 0.009461402893066406,
+ 3.2420029640197754,
+ 1.0883888006210327,
+ 3.6017704010009766,
+ 3.932692527770996,
+ 1.9658336639404297,
+ -2.372471809387207
+ ],
+ "z": [
+ -0.3466918468475342,
+ 5.143283843994141,
+ 2.024688243865967,
+ 1.0876541137695312,
+ 5.217397689819336,
+ 2.078808069229126,
+ -0.5173273086547852,
+ 1.2664461135864258,
+ 1.289353370666504,
+ 6.900716781616211,
+ 5.829719543457031,
+ 7.766008377075195,
+ -2.397214889526367,
+ 1.2885465621948242,
+ -1.1290435791015625,
+ 0.7658915519714355,
+ 1.2189207077026367,
+ 5.246977806091309,
+ -2.281857967376709,
+ 1.2949762344360352,
+ -1.409174919128418,
+ 3.1211190223693848,
+ 5.02210807800293,
+ 6.842628479003906,
+ 6.808967590332031,
+ 0.7816462516784668,
+ 8.523296356201172,
+ 5.44757080078125,
+ 5.818883895874023,
+ 7.62846565246582,
+ -2.7821474075317383,
+ -1.3234376907348633,
+ 1.2305216789245605,
+ -1.0319538116455078,
+ 0.7583146095275879,
+ -1.2306995391845703,
+ 0.7589640617370605,
+ 0.7580761909484863,
+ 0.5642380714416504,
+ 1.2360892295837402,
+ 2.170841693878174,
+ -1.9749393463134766,
+ 1.2382702827453613,
+ -5.182547569274902,
+ -0.4683971405029297,
+ 1.1976447105407715,
+ -3.9123916625976562,
+ 1.4836502075195312,
+ 2.171050548553467,
+ -0.1396045684814453,
+ -1.5952482223510742,
+ 1.1496901512145996,
+ -0.42019176483154297,
+ 0.676966667175293
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T11:30:18.274639Z",
+ "start_time": "2025-02-12T11:30:18.261125Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "def get_distance_matrix(v):\n",
+ " # compute the cosine similarity between vectors in matrix, fast format\n",
+ " # v is a numpy array\n",
+ " # returns a numpy array\n",
+ " dot_product = np.dot(v, v.T)\n",
+ " magnitude = np.sqrt(np.sum(np.square(v), axis=1))\n",
+ " magnitude = magnitude[:, np.newaxis]\n",
+ " return dot_product / (magnitude * magnitude.T)\n",
+ "\n",
+ "def get_distance_matrix_Lorentz(v):\n",
+ " # Lorentz cosine similarity distance metric\n",
+ " # Lorentz dot product:\n",
+ " dot_product = np.outer(coords[:, 0], coords[:, 0]) - np.outer(coords[:, 1], coords[:, 1]) - np.outer(coords[:, 2], coords[:, 2]) - np.outer(coords[:, 3], coords[:, 3])\n",
+ " #magnitude = np.sqrt(np.abs(np.sum(np.square(v), axis=1)))\n",
+ " # lorentz magnitude\n",
+ " magnitude = np.sqrt(np.abs(v[:, 0]**2 - v[:, 1]**2 - v[:, 2] ** 2 - v[:, 3]**2))\n",
+ " magnitude = magnitude[:, np.newaxis]\n",
+ " return dot_product / (magnitude * magnitude.T)"
+ ],
+ "id": "2dd7ac91e991f2ea",
+ "outputs": [],
+ "execution_count": 7
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T11:10:19.367089Z",
+ "start_time": "2025-01-20T11:10:19.258556Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "import sklearn\n",
+ "\n",
+ "def cosine_similarity(vec1, vec2):\n",
+ " # Ensure the vectors are numpy arrays\n",
+ " vec1 = np.array(vec1)\n",
+ " vec2 = np.array(vec2)\n",
+ "\n",
+ " # Compute the dot product and the magnitudes\n",
+ " dot_product = np.dot(vec1, vec2)\n",
+ " magnitude_vec1 = np.linalg.norm(vec1)\n",
+ " magnitude_vec2 = np.linalg.norm(vec2)\n",
+ "\n",
+ " # Compute cosine similarity\n",
+ " if magnitude_vec1 == 0 or magnitude_vec2 == 0:\n",
+ " return 0.0 # Handle edge case where a vector has zero magnitude\n",
+ " return dot_product / (magnitude_vec1 * magnitude_vec2)\n",
+ "\n",
+ "def lorentz_norm(vec1, vec2):\n",
+ " diff = vec1-vec2\n",
+ " norm_squared = np.abs(diff[0]**2 - diff[1]**2 - diff[2] ** 2 - diff[3]**2)\n",
+ " return np.sqrt(norm_squared)\n",
+ "\n",
+ "\n",
+ "clusterer = hdbscan.HDBSCAN(min_cluster_size=5, min_samples=10, cluster_selection_epsilon=0.1)\n",
+ "from time import time\n",
+ "coords = result[\"pred\"][filt, 1:4]\n",
+ "t0 = time()\n",
+ "cluster_labels = clusterer.fit_predict(coords)\n",
+ "t1 = time()\n",
+ "print(t1-t0)\n",
+ "plot_coordinates(result[\"pred\"][filt, 1:4], result[\"pt\"][filt], torch.tensor(cluster_labels)).show()\n"
+ ],
+ "id": "a910d5bb50d552a9",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.010918378829956055\n",
+ "[('X', (141, 1)), ('Y', (141, 1)), ('Z', (141, 1)), ('tIdx', (141, 1)), ('pt', (141, 1))]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/1gatr/lib/python3.10/site-packages/sklearn/utils/deprecation.py:151: FutureWarning:\n",
+ "\n",
+ "'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
+ "\n",
+ "/work/gkrzmanc/1gatr/lib/python3.10/site-packages/sklearn/utils/deprecation.py:151: FutureWarning:\n",
+ "\n",
+ "'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ -1.0,
+ 3.0,
+ 3.0,
+ 2.0,
+ 2.0,
+ 2.0,
+ 3.0,
+ 2.0,
+ 3.0,
+ 2.0,
+ 3.0,
+ 2.0,
+ 2.0,
+ 3.0,
+ 1.0,
+ 2.0,
+ 3.0,
+ 0.0,
+ -1.0,
+ 3.0,
+ 0.0,
+ 3.0,
+ 2.0,
+ 3.0,
+ 3.0,
+ 3.0,
+ 1.0,
+ 2.0,
+ 3.0,
+ 0.0,
+ 0.0,
+ 3.0,
+ 3.0,
+ -1.0,
+ 3.0,
+ 2.0,
+ 2.0,
+ -1.0,
+ 3.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 2.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ 3.0,
+ 2.0,
+ 0.0,
+ -1.0,
+ 3.0,
+ -1.0,
+ 0.0,
+ 2.0,
+ 0.0,
+ 3.0,
+ -1.0,
+ 2.0,
+ 2.0,
+ 3.0,
+ -1.0,
+ -1.0,
+ 3.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 2.0,
+ 3.0,
+ 3.0,
+ 2.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 2.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 2.0,
+ 3.0,
+ 3.0,
+ 3.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 2.0,
+ -1.0,
+ 3.0,
+ 0.0,
+ 0.0,
+ 1.0,
+ 3.0,
+ -1.0,
+ 3.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 3.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 2.0,
+ -1.0,
+ 2.0,
+ 1.0,
+ 0.0,
+ 2.0,
+ 3.0,
+ 0.0,
+ 2.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ 2.0,
+ 3.0,
+ -1.0,
+ 1.0,
+ 3.0,
+ -1.0,
+ 2.0,
+ 3.0,
+ 0.0,
+ 3.0,
+ 1.0,
+ 2.0,
+ 0.0,
+ 3.0,
+ -1.0,
+ 0.0
+ ],
+ "coloraxis": "coloraxis",
+ "size": [
+ 56.21875,
+ 30.3125,
+ 8.1953125,
+ 7.85546875,
+ 6.6015625,
+ 5.43359375,
+ 4.359375,
+ 4.11328125,
+ 3.79296875,
+ 3.615234375,
+ 3.3828125,
+ 3.3125,
+ 3.169921875,
+ 2.876953125,
+ 2.810546875,
+ 2.677734375,
+ 2.646484375,
+ 2.5703125,
+ 2.5625,
+ 2.54296875,
+ 2.51171875,
+ 2.50390625,
+ 2.357421875,
+ 2.330078125,
+ 2.310546875,
+ 2.224609375,
+ 2.181640625,
+ 2.119140625,
+ 2.111328125,
+ 2.0390625,
+ 1.9365234375,
+ 1.923828125,
+ 1.8955078125,
+ 1.859375,
+ 1.787109375,
+ 1.767578125,
+ 1.6845703125,
+ 1.6826171875,
+ 1.6708984375,
+ 1.662109375,
+ 1.6552734375,
+ 1.6376953125,
+ 1.5673828125,
+ 1.564453125,
+ 1.533203125,
+ 1.5087890625,
+ 1.4853515625,
+ 1.4580078125,
+ 1.4033203125,
+ 1.4013671875,
+ 1.396484375,
+ 1.375,
+ 1.345703125,
+ 1.3291015625,
+ 1.326171875,
+ 1.294921875,
+ 1.2822265625,
+ 1.2763671875,
+ 1.275390625,
+ 1.2529296875,
+ 1.21875,
+ 1.2099609375,
+ 1.185546875,
+ 1.181640625,
+ 1.1689453125,
+ 1.1669921875,
+ 1.1474609375,
+ 1.1376953125,
+ 1.1376953125,
+ 1.1103515625,
+ 1.0986328125,
+ 1.0810546875,
+ 1.0791015625,
+ 1.064453125,
+ 1.0419921875,
+ 1.0390625,
+ 1.0234375,
+ 1.021484375,
+ 0.98779296875,
+ 0.9326171875,
+ 0.92822265625,
+ 0.91748046875,
+ 0.916015625,
+ 0.91455078125,
+ 0.9091796875,
+ 0.89697265625,
+ 0.888671875,
+ 0.88330078125,
+ 0.869140625,
+ 0.85498046875,
+ 0.8515625,
+ 0.84765625,
+ 0.84375,
+ 0.84130859375,
+ 0.8408203125,
+ 0.83837890625,
+ 0.82763671875,
+ 0.826171875,
+ 0.82275390625,
+ 0.818359375,
+ 0.8173828125,
+ 0.810546875,
+ 0.806640625,
+ 0.7880859375,
+ 0.76953125,
+ 0.7666015625,
+ 0.76123046875,
+ 0.7607421875,
+ 0.75732421875,
+ 0.75732421875,
+ 0.75,
+ 0.7470703125,
+ 0.74365234375,
+ 0.72705078125,
+ 0.712890625,
+ 0.71240234375,
+ 0.70849609375,
+ 0.70703125,
+ 0.70166015625,
+ 0.69970703125,
+ 0.69677734375,
+ 0.69580078125,
+ 0.68896484375,
+ 0.68408203125,
+ 0.65966796875,
+ 0.654296875,
+ 0.63916015625,
+ 0.63330078125,
+ 0.6328125,
+ 0.6318359375,
+ 0.6298828125,
+ 0.6279296875,
+ 0.623046875,
+ 0.61767578125,
+ 0.61767578125,
+ 0.61376953125,
+ 0.61376953125,
+ 0.61083984375,
+ 0.6083984375,
+ 0.6064453125,
+ 0.6015625
+ ],
+ "sizemode": "area",
+ "sizeref": 0.140546875,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ 1.8411712646484375,
+ -2.522686719894409,
+ -2.4129951000213623,
+ 1.9901788234710693,
+ 1.6636333465576172,
+ 1.6867585182189941,
+ -2.3150012493133545,
+ 1.7260633707046509,
+ -1.747094988822937,
+ 1.6223530769348145,
+ -2.061624765396118,
+ 1.9998637437820435,
+ 1.6998132467269897,
+ -2.3290047645568848,
+ 3.0216383934020996,
+ 1.840533971786499,
+ -2.2175347805023193,
+ 0.36496007442474365,
+ 0.15621675550937653,
+ -2.407304525375366,
+ -1.974696159362793,
+ -2.872187852859497,
+ 1.8141885995864868,
+ -2.7332513332366943,
+ -0.5611585378646851,
+ -2.169691562652588,
+ 2.278728723526001,
+ 1.689452886581421,
+ -2.301179885864258,
+ -0.7461513876914978,
+ -2.2872955799102783,
+ -2.5275323390960693,
+ -1.7118428945541382,
+ -1.6773886680603027,
+ -2.574779510498047,
+ 1.561798095703125,
+ 1.7997194528579712,
+ 3.645848035812378,
+ -2.235827922821045,
+ 1.8425447940826416,
+ 0.41018256545066833,
+ -1.212222695350647,
+ 1.9937679767608643,
+ 1.5113431215286255,
+ -0.8121848702430725,
+ -3.029036045074463,
+ 2.2207300662994385,
+ -2.6509389877319336,
+ 3.599907636642456,
+ -2.5486032962799072,
+ 1.6542530059814453,
+ -2.10996150970459,
+ 1.5152677297592163,
+ -2.1622543334960938,
+ 1.7261897325515747,
+ 1.2757388353347778,
+ 1.6777442693710327,
+ -2.0802419185638428,
+ -1.777970552444458,
+ -3.620804786682129,
+ 1.6916468143463135,
+ 1.6863940954208374,
+ -2.5542445182800293,
+ -0.6825491786003113,
+ 2.595134735107422,
+ -2.843463182449341,
+ 2.387848138809204,
+ -0.354938805103302,
+ 1.5272729396820068,
+ 1.8800228834152222,
+ -2.120563507080078,
+ -1.9567219018936157,
+ 1.8392518758773804,
+ 3.3408432006835938,
+ -0.7955878973007202,
+ 3.2810914516448975,
+ 1.6434342861175537,
+ 1.7120492458343506,
+ 1.0976753234863281,
+ 0.16248370707035065,
+ 1.7139579057693481,
+ -2.5007987022399902,
+ -2.1329963207244873,
+ -2.4087326526641846,
+ -3.048182249069214,
+ -1.6931315660476685,
+ -1.667431116104126,
+ -2.529144763946533,
+ -0.7144979238510132,
+ 2.798675775527954,
+ -2.318450450897217,
+ 3.0250344276428223,
+ 3.3414969444274902,
+ -1.683628797531128,
+ 0.8422178626060486,
+ -1.2700635194778442,
+ 3.224628448486328,
+ -2.1929819583892822,
+ 3.2866179943084717,
+ -2.264336109161377,
+ 0.015907974913716316,
+ -2.0944478511810303,
+ 3.215803861618042,
+ -1.8754534721374512,
+ -2.7968456745147705,
+ 3.7824931144714355,
+ 2.0464158058166504,
+ -2.7814836502075195,
+ 1.783958911895752,
+ -1.7874057292938232,
+ 1.5332332849502563,
+ 3.0009734630584717,
+ -3.0661377906799316,
+ 0.8484869003295898,
+ -2.1037070751190186,
+ 1.5366361141204834,
+ 1.2627863883972168,
+ -1.126605749130249,
+ 2.282327175140381,
+ -0.9385878443717957,
+ 2.4155123233795166,
+ -2.885427713394165,
+ 1.556852102279663,
+ 1.7129369974136353,
+ 2.7353992462158203,
+ 1.3975930213928223,
+ -1.8982449769973755,
+ 2.6141178607940674,
+ 0.9802422523498535,
+ -1.9378496408462524,
+ -3.3062102794647217,
+ 1.6210947036743164,
+ -1.8668112754821777,
+ -1.29080331325531,
+ -2.6802406311035156,
+ 3.518674373626709,
+ 2.160449981689453,
+ -1.0534309148788452,
+ -2.5538363456726074,
+ 2.947633981704712,
+ 0.35545453429222107
+ ],
+ "y": [
+ 11.484721183776855,
+ 8.731682777404785,
+ 8.241484642028809,
+ 10.398521423339844,
+ 10.179244041442871,
+ 9.956130027770996,
+ 7.946946144104004,
+ 9.621484756469727,
+ 8.317768096923828,
+ 9.602851867675781,
+ 8.096202850341797,
+ 8.428861618041992,
+ 7.713281631469727,
+ 7.759325981140137,
+ 2.001000165939331,
+ 8.673704147338867,
+ 7.815395355224609,
+ -1.8945016860961914,
+ 5.307507038116455,
+ 7.635284423828125,
+ -4.762759208679199,
+ 6.974043846130371,
+ 9.353918075561523,
+ 7.169582843780518,
+ 7.842984199523926,
+ 7.738143444061279,
+ 3.8158230781555176,
+ 9.230376243591309,
+ 7.659114837646484,
+ -1.241110920906067,
+ -4.673916816711426,
+ 7.331056118011475,
+ 8.126399040222168,
+ -6.183385372161865,
+ 7.399578094482422,
+ 7.569636821746826,
+ 9.191303253173828,
+ 2.0824391841888428,
+ 7.539384841918945,
+ -5.831722736358643,
+ 1.1391910314559937,
+ -6.635079383850098,
+ 8.075276374816895,
+ -3.04512357711792,
+ -0.6494570374488831,
+ 0.5757555365562439,
+ 3.355726718902588,
+ -2.798525333404541,
+ 0.47095903754234314,
+ 7.09736967086792,
+ 8.699042320251465,
+ 0.3937191665172577,
+ -6.4269280433654785,
+ 7.501816749572754,
+ 0.9359796047210693,
+ -6.08197546005249,
+ 8.978398323059082,
+ -2.8815436363220215,
+ 7.695521831512451,
+ 4.2803826332092285,
+ 9.004857063293457,
+ 8.947896003723145,
+ 6.97410249710083,
+ 1.9161756038665771,
+ -3.0744786262512207,
+ 6.716772556304932,
+ -3.30195689201355,
+ 6.058880805969238,
+ 3.539236545562744,
+ 8.700676918029785,
+ 7.578433990478516,
+ 6.164597034454346,
+ 8.811245918273926,
+ -1.006975769996643,
+ -5.035004138946533,
+ 0.25036776065826416,
+ 8.851595878601074,
+ 4.802543640136719,
+ -3.9611656665802,
+ 1.8577446937561035,
+ 8.845459938049316,
+ 5.3601861000061035,
+ 7.407097816467285,
+ 7.300731182098389,
+ 5.122791767120361,
+ -1.0425262451171875,
+ -2.0254790782928467,
+ 4.59906005859375,
+ 5.5377349853515625,
+ 7.0722126960754395,
+ -3.6198534965515137,
+ 7.7057366371154785,
+ 0.7627019286155701,
+ 7.704476833343506,
+ -5.568854808807373,
+ -2.8196332454681396,
+ 2.8956897258758545,
+ 7.310884475708008,
+ -1.9668323993682861,
+ 7.258252143859863,
+ 2.040471076965332,
+ -1.3508975505828857,
+ 3.6582324504852295,
+ 7.501095294952393,
+ 3.844759941101074,
+ 5.517116546630859,
+ 5.136075019836426,
+ -1.670976161956787,
+ 8.753059387207031,
+ 3.6817221641540527,
+ 8.523528099060059,
+ 3.124119997024536,
+ -1.3789392709732056,
+ 6.031548976898193,
+ 7.365862846374512,
+ -4.676599025726318,
+ 7.970692157745361,
+ -5.706074237823486,
+ 1.5437520742416382,
+ 2.5718445777893066,
+ 5.178225994110107,
+ -1.7867119312286377,
+ -3.9174883365631104,
+ -6.325456142425537,
+ 2.165548801422119,
+ 7.667225360870361,
+ 7.437671184539795,
+ 6.005098342895508,
+ 2.5892181396484375,
+ 7.4688401222229,
+ 2.550855875015259,
+ 8.82972240447998,
+ 7.493037223815918,
+ -5.2092204093933105,
+ 6.904902935028076,
+ 2.0044095516204834,
+ 6.942010879516602,
+ -3.196828842163086,
+ 6.915232181549072,
+ -2.55283522605896,
+ -5.1857733726501465
+ ],
+ "z": [
+ 0.9599736928939819,
+ 0.9545231461524963,
+ 0.9484756588935852,
+ 0.8629654049873352,
+ 0.9065804481506348,
+ 0.9346697926521301,
+ 0.9416508674621582,
+ 0.9376319050788879,
+ 0.6251171231269836,
+ 0.9200356602668762,
+ 0.814395546913147,
+ 0.20510144531726837,
+ 0.14036493003368378,
+ 0.9411420226097107,
+ 0.011215683072805405,
+ 0.22863861918449402,
+ 0.9380825161933899,
+ 0.013005613349378109,
+ 0.029080139473080635,
+ 0.937067449092865,
+ 0.006106241140514612,
+ 0.8271619081497192,
+ 0.8916909098625183,
+ 0.8522865176200867,
+ 0.021532395854592323,
+ 0.9406567811965942,
+ 0.012383528053760529,
+ 0.9469900131225586,
+ 0.9406611323356628,
+ 0.02189617231488228,
+ 0.00513895507901907,
+ 0.9315266609191895,
+ 0.6846194863319397,
+ 0.00252342177554965,
+ 0.9255027770996094,
+ 0.12604449689388275,
+ 0.8625036478042603,
+ 0.022475941106677055,
+ 0.9427933096885681,
+ 0.002689987886697054,
+ 0.023181047290563583,
+ 0.0020413780584931374,
+ 0.23801666498184204,
+ 0.004571772180497646,
+ 0.0267456267029047,
+ 0.07405140995979309,
+ 0.013269828632473946,
+ 0.014075732789933681,
+ 0.018177680671215057,
+ 0.8879609704017639,
+ 0.5017601251602173,
+ 0.052536748349666595,
+ 0.0013182642869651318,
+ 0.9114360809326172,
+ 0.013911278918385506,
+ 0.002193354768678546,
+ 0.9450902938842773,
+ 0.01495618000626564,
+ 0.7675567269325256,
+ 0.3331969380378723,
+ 0.9254684448242188,
+ 0.9329370260238647,
+ 0.9176525473594666,
+ 0.013932841829955578,
+ 0.00535422982648015,
+ 0.8387388586997986,
+ 0.004764800425618887,
+ 0.02386591210961342,
+ 0.04008623957633972,
+ 0.5606747269630432,
+ 0.9332547783851624,
+ 0.02354300580918789,
+ 0.7222034931182861,
+ 0.010339915752410889,
+ 0.0051331170834600925,
+ 0.015859361737966537,
+ 0.928329586982727,
+ 0.07042752951383591,
+ 0.0033885720185935497,
+ 0.02866990491747856,
+ 0.9165403246879578,
+ 0.03584417700767517,
+ 0.9447782635688782,
+ 0.9416751265525818,
+ 0.5410656929016113,
+ 0.02953338623046875,
+ 0.009083312004804611,
+ 0.32500940561294556,
+ 0.07135940343141556,
+ 0.21336644887924194,
+ 0.00776125630363822,
+ 0.0751323252916336,
+ 0.020248418673872948,
+ 0.7727653980255127,
+ 0.0019125656690448523,
+ 0.0154165243729949,
+ 0.014082311652600765,
+ 0.9479771256446838,
+ 0.00926204677671194,
+ 0.9451633095741272,
+ 0.018092600628733635,
+ 0.03380986675620079,
+ 0.013082841411232948,
+ 0.8813718557357788,
+ 0.03869924694299698,
+ 0.043908167630434036,
+ 0.07465846836566925,
+ 0.020705657079815865,
+ 0.840247631072998,
+ 0.01788754016160965,
+ 0.7686178684234619,
+ 0.04338349774479866,
+ 0.03050147369503975,
+ 0.04970092326402664,
+ 0.8392722010612488,
+ 0.002669614041224122,
+ 0.11674889177083969,
+ 0.00298236939124763,
+ 0.012624367140233517,
+ 0.01754012331366539,
+ 0.09177706390619278,
+ 0.021733084693551064,
+ 0.004724114201962948,
+ 0.0017189689679071307,
+ 0.030842922627925873,
+ 0.02060762234032154,
+ 0.90532386302948,
+ 0.11719930917024612,
+ 0.019032690674066544,
+ 0.8460276126861572,
+ 0.1660507172346115,
+ 0.8996521830558777,
+ 0.7967191338539124,
+ 0.003243226557970047,
+ 0.913471519947052,
+ 0.0244155190885067,
+ 0.18375305831432343,
+ 0.006471569649875164,
+ 0.9159026741981506,
+ 0.007738111540675163,
+ 0.002430642256513238
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 25
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T11:14:21.791759Z",
+ "start_time": "2025-01-20T11:14:21.687717Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "clusterer = hdbscan.HDBSCAN(min_cluster_size=5, min_samples=15, cluster_selection_epsilon=0.1, metric=\"precomputed\")\n",
+ "from time import time\n",
+ "t0 = time()\n",
+ "\n",
+ "cluster_labels = clusterer.fit_predict(get_distance_matrix(np.array(norm_coords.double())))\n",
+ "print(cluster_labels.shape, \"cluster_labels.shape\")\n",
+ "t1 = time()\n",
+ "print(t1-t0)\n",
+ "#plot_coordinates(result[\"pred\"][filt, 1:4], result[\"pt\"][filt], torch.tensor(cluster_labels)).show()\n"
+ ],
+ "id": "3cc8032e63dd7ff5",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(141,) cluster_labels.shape\n",
+ "0.011168956756591797\n",
+ "[('X', (141, 1)), ('Y', (141, 1)), ('Z', (141, 1)), ('tIdx', (141, 1)), ('pt', (141, 1))]\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 1.0
+ ],
+ "coloraxis": "coloraxis",
+ "size": [
+ 56.21875,
+ 30.3125,
+ 8.1953125,
+ 7.85546875,
+ 6.6015625,
+ 5.43359375,
+ 4.359375,
+ 4.11328125,
+ 3.79296875,
+ 3.615234375,
+ 3.3828125,
+ 3.3125,
+ 3.169921875,
+ 2.876953125,
+ 2.810546875,
+ 2.677734375,
+ 2.646484375,
+ 2.5703125,
+ 2.5625,
+ 2.54296875,
+ 2.51171875,
+ 2.50390625,
+ 2.357421875,
+ 2.330078125,
+ 2.310546875,
+ 2.224609375,
+ 2.181640625,
+ 2.119140625,
+ 2.111328125,
+ 2.0390625,
+ 1.9365234375,
+ 1.923828125,
+ 1.8955078125,
+ 1.859375,
+ 1.787109375,
+ 1.767578125,
+ 1.6845703125,
+ 1.6826171875,
+ 1.6708984375,
+ 1.662109375,
+ 1.6552734375,
+ 1.6376953125,
+ 1.5673828125,
+ 1.564453125,
+ 1.533203125,
+ 1.5087890625,
+ 1.4853515625,
+ 1.4580078125,
+ 1.4033203125,
+ 1.4013671875,
+ 1.396484375,
+ 1.375,
+ 1.345703125,
+ 1.3291015625,
+ 1.326171875,
+ 1.294921875,
+ 1.2822265625,
+ 1.2763671875,
+ 1.275390625,
+ 1.2529296875,
+ 1.21875,
+ 1.2099609375,
+ 1.185546875,
+ 1.181640625,
+ 1.1689453125,
+ 1.1669921875,
+ 1.1474609375,
+ 1.1376953125,
+ 1.1376953125,
+ 1.1103515625,
+ 1.0986328125,
+ 1.0810546875,
+ 1.0791015625,
+ 1.064453125,
+ 1.0419921875,
+ 1.0390625,
+ 1.0234375,
+ 1.021484375,
+ 0.98779296875,
+ 0.9326171875,
+ 0.92822265625,
+ 0.91748046875,
+ 0.916015625,
+ 0.91455078125,
+ 0.9091796875,
+ 0.89697265625,
+ 0.888671875,
+ 0.88330078125,
+ 0.869140625,
+ 0.85498046875,
+ 0.8515625,
+ 0.84765625,
+ 0.84375,
+ 0.84130859375,
+ 0.8408203125,
+ 0.83837890625,
+ 0.82763671875,
+ 0.826171875,
+ 0.82275390625,
+ 0.818359375,
+ 0.8173828125,
+ 0.810546875,
+ 0.806640625,
+ 0.7880859375,
+ 0.76953125,
+ 0.7666015625,
+ 0.76123046875,
+ 0.7607421875,
+ 0.75732421875,
+ 0.75732421875,
+ 0.75,
+ 0.7470703125,
+ 0.74365234375,
+ 0.72705078125,
+ 0.712890625,
+ 0.71240234375,
+ 0.70849609375,
+ 0.70703125,
+ 0.70166015625,
+ 0.69970703125,
+ 0.69677734375,
+ 0.69580078125,
+ 0.68896484375,
+ 0.68408203125,
+ 0.65966796875,
+ 0.654296875,
+ 0.63916015625,
+ 0.63330078125,
+ 0.6328125,
+ 0.6318359375,
+ 0.6298828125,
+ 0.6279296875,
+ 0.623046875,
+ 0.61767578125,
+ 0.61767578125,
+ 0.61376953125,
+ 0.61376953125,
+ 0.61083984375,
+ 0.6083984375,
+ 0.6064453125,
+ 0.6015625
+ ],
+ "sizemode": "area",
+ "sizeref": 0.140546875,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ 1.8411712646484375,
+ -2.522686719894409,
+ -2.4129951000213623,
+ 1.9901788234710693,
+ 1.6636333465576172,
+ 1.6867585182189941,
+ -2.3150012493133545,
+ 1.7260633707046509,
+ -1.747094988822937,
+ 1.6223530769348145,
+ -2.061624765396118,
+ 1.9998637437820435,
+ 1.6998132467269897,
+ -2.3290047645568848,
+ 3.0216383934020996,
+ 1.840533971786499,
+ -2.2175347805023193,
+ 0.36496007442474365,
+ 0.15621675550937653,
+ -2.407304525375366,
+ -1.974696159362793,
+ -2.872187852859497,
+ 1.8141885995864868,
+ -2.7332513332366943,
+ -0.5611585378646851,
+ -2.169691562652588,
+ 2.278728723526001,
+ 1.689452886581421,
+ -2.301179885864258,
+ -0.7461513876914978,
+ -2.2872955799102783,
+ -2.5275323390960693,
+ -1.7118428945541382,
+ -1.6773886680603027,
+ -2.574779510498047,
+ 1.561798095703125,
+ 1.7997194528579712,
+ 3.645848035812378,
+ -2.235827922821045,
+ 1.8425447940826416,
+ 0.41018256545066833,
+ -1.212222695350647,
+ 1.9937679767608643,
+ 1.5113431215286255,
+ -0.8121848702430725,
+ -3.029036045074463,
+ 2.2207300662994385,
+ -2.6509389877319336,
+ 3.599907636642456,
+ -2.5486032962799072,
+ 1.6542530059814453,
+ -2.10996150970459,
+ 1.5152677297592163,
+ -2.1622543334960938,
+ 1.7261897325515747,
+ 1.2757388353347778,
+ 1.6777442693710327,
+ -2.0802419185638428,
+ -1.777970552444458,
+ -3.620804786682129,
+ 1.6916468143463135,
+ 1.6863940954208374,
+ -2.5542445182800293,
+ -0.6825491786003113,
+ 2.595134735107422,
+ -2.843463182449341,
+ 2.387848138809204,
+ -0.354938805103302,
+ 1.5272729396820068,
+ 1.8800228834152222,
+ -2.120563507080078,
+ -1.9567219018936157,
+ 1.8392518758773804,
+ 3.3408432006835938,
+ -0.7955878973007202,
+ 3.2810914516448975,
+ 1.6434342861175537,
+ 1.7120492458343506,
+ 1.0976753234863281,
+ 0.16248370707035065,
+ 1.7139579057693481,
+ -2.5007987022399902,
+ -2.1329963207244873,
+ -2.4087326526641846,
+ -3.048182249069214,
+ -1.6931315660476685,
+ -1.667431116104126,
+ -2.529144763946533,
+ -0.7144979238510132,
+ 2.798675775527954,
+ -2.318450450897217,
+ 3.0250344276428223,
+ 3.3414969444274902,
+ -1.683628797531128,
+ 0.8422178626060486,
+ -1.2700635194778442,
+ 3.224628448486328,
+ -2.1929819583892822,
+ 3.2866179943084717,
+ -2.264336109161377,
+ 0.015907974913716316,
+ -2.0944478511810303,
+ 3.215803861618042,
+ -1.8754534721374512,
+ -2.7968456745147705,
+ 3.7824931144714355,
+ 2.0464158058166504,
+ -2.7814836502075195,
+ 1.783958911895752,
+ -1.7874057292938232,
+ 1.5332332849502563,
+ 3.0009734630584717,
+ -3.0661377906799316,
+ 0.8484869003295898,
+ -2.1037070751190186,
+ 1.5366361141204834,
+ 1.2627863883972168,
+ -1.126605749130249,
+ 2.282327175140381,
+ -0.9385878443717957,
+ 2.4155123233795166,
+ -2.885427713394165,
+ 1.556852102279663,
+ 1.7129369974136353,
+ 2.7353992462158203,
+ 1.3975930213928223,
+ -1.8982449769973755,
+ 2.6141178607940674,
+ 0.9802422523498535,
+ -1.9378496408462524,
+ -3.3062102794647217,
+ 1.6210947036743164,
+ -1.8668112754821777,
+ -1.29080331325531,
+ -2.6802406311035156,
+ 3.518674373626709,
+ 2.160449981689453,
+ -1.0534309148788452,
+ -2.5538363456726074,
+ 2.947633981704712,
+ 0.35545453429222107
+ ],
+ "y": [
+ 11.484721183776855,
+ 8.731682777404785,
+ 8.241484642028809,
+ 10.398521423339844,
+ 10.179244041442871,
+ 9.956130027770996,
+ 7.946946144104004,
+ 9.621484756469727,
+ 8.317768096923828,
+ 9.602851867675781,
+ 8.096202850341797,
+ 8.428861618041992,
+ 7.713281631469727,
+ 7.759325981140137,
+ 2.001000165939331,
+ 8.673704147338867,
+ 7.815395355224609,
+ -1.8945016860961914,
+ 5.307507038116455,
+ 7.635284423828125,
+ -4.762759208679199,
+ 6.974043846130371,
+ 9.353918075561523,
+ 7.169582843780518,
+ 7.842984199523926,
+ 7.738143444061279,
+ 3.8158230781555176,
+ 9.230376243591309,
+ 7.659114837646484,
+ -1.241110920906067,
+ -4.673916816711426,
+ 7.331056118011475,
+ 8.126399040222168,
+ -6.183385372161865,
+ 7.399578094482422,
+ 7.569636821746826,
+ 9.191303253173828,
+ 2.0824391841888428,
+ 7.539384841918945,
+ -5.831722736358643,
+ 1.1391910314559937,
+ -6.635079383850098,
+ 8.075276374816895,
+ -3.04512357711792,
+ -0.6494570374488831,
+ 0.5757555365562439,
+ 3.355726718902588,
+ -2.798525333404541,
+ 0.47095903754234314,
+ 7.09736967086792,
+ 8.699042320251465,
+ 0.3937191665172577,
+ -6.4269280433654785,
+ 7.501816749572754,
+ 0.9359796047210693,
+ -6.08197546005249,
+ 8.978398323059082,
+ -2.8815436363220215,
+ 7.695521831512451,
+ 4.2803826332092285,
+ 9.004857063293457,
+ 8.947896003723145,
+ 6.97410249710083,
+ 1.9161756038665771,
+ -3.0744786262512207,
+ 6.716772556304932,
+ -3.30195689201355,
+ 6.058880805969238,
+ 3.539236545562744,
+ 8.700676918029785,
+ 7.578433990478516,
+ 6.164597034454346,
+ 8.811245918273926,
+ -1.006975769996643,
+ -5.035004138946533,
+ 0.25036776065826416,
+ 8.851595878601074,
+ 4.802543640136719,
+ -3.9611656665802,
+ 1.8577446937561035,
+ 8.845459938049316,
+ 5.3601861000061035,
+ 7.407097816467285,
+ 7.300731182098389,
+ 5.122791767120361,
+ -1.0425262451171875,
+ -2.0254790782928467,
+ 4.59906005859375,
+ 5.5377349853515625,
+ 7.0722126960754395,
+ -3.6198534965515137,
+ 7.7057366371154785,
+ 0.7627019286155701,
+ 7.704476833343506,
+ -5.568854808807373,
+ -2.8196332454681396,
+ 2.8956897258758545,
+ 7.310884475708008,
+ -1.9668323993682861,
+ 7.258252143859863,
+ 2.040471076965332,
+ -1.3508975505828857,
+ 3.6582324504852295,
+ 7.501095294952393,
+ 3.844759941101074,
+ 5.517116546630859,
+ 5.136075019836426,
+ -1.670976161956787,
+ 8.753059387207031,
+ 3.6817221641540527,
+ 8.523528099060059,
+ 3.124119997024536,
+ -1.3789392709732056,
+ 6.031548976898193,
+ 7.365862846374512,
+ -4.676599025726318,
+ 7.970692157745361,
+ -5.706074237823486,
+ 1.5437520742416382,
+ 2.5718445777893066,
+ 5.178225994110107,
+ -1.7867119312286377,
+ -3.9174883365631104,
+ -6.325456142425537,
+ 2.165548801422119,
+ 7.667225360870361,
+ 7.437671184539795,
+ 6.005098342895508,
+ 2.5892181396484375,
+ 7.4688401222229,
+ 2.550855875015259,
+ 8.82972240447998,
+ 7.493037223815918,
+ -5.2092204093933105,
+ 6.904902935028076,
+ 2.0044095516204834,
+ 6.942010879516602,
+ -3.196828842163086,
+ 6.915232181549072,
+ -2.55283522605896,
+ -5.1857733726501465
+ ],
+ "z": [
+ 0.9599736928939819,
+ 0.9545231461524963,
+ 0.9484756588935852,
+ 0.8629654049873352,
+ 0.9065804481506348,
+ 0.9346697926521301,
+ 0.9416508674621582,
+ 0.9376319050788879,
+ 0.6251171231269836,
+ 0.9200356602668762,
+ 0.814395546913147,
+ 0.20510144531726837,
+ 0.14036493003368378,
+ 0.9411420226097107,
+ 0.011215683072805405,
+ 0.22863861918449402,
+ 0.9380825161933899,
+ 0.013005613349378109,
+ 0.029080139473080635,
+ 0.937067449092865,
+ 0.006106241140514612,
+ 0.8271619081497192,
+ 0.8916909098625183,
+ 0.8522865176200867,
+ 0.021532395854592323,
+ 0.9406567811965942,
+ 0.012383528053760529,
+ 0.9469900131225586,
+ 0.9406611323356628,
+ 0.02189617231488228,
+ 0.00513895507901907,
+ 0.9315266609191895,
+ 0.6846194863319397,
+ 0.00252342177554965,
+ 0.9255027770996094,
+ 0.12604449689388275,
+ 0.8625036478042603,
+ 0.022475941106677055,
+ 0.9427933096885681,
+ 0.002689987886697054,
+ 0.023181047290563583,
+ 0.0020413780584931374,
+ 0.23801666498184204,
+ 0.004571772180497646,
+ 0.0267456267029047,
+ 0.07405140995979309,
+ 0.013269828632473946,
+ 0.014075732789933681,
+ 0.018177680671215057,
+ 0.8879609704017639,
+ 0.5017601251602173,
+ 0.052536748349666595,
+ 0.0013182642869651318,
+ 0.9114360809326172,
+ 0.013911278918385506,
+ 0.002193354768678546,
+ 0.9450902938842773,
+ 0.01495618000626564,
+ 0.7675567269325256,
+ 0.3331969380378723,
+ 0.9254684448242188,
+ 0.9329370260238647,
+ 0.9176525473594666,
+ 0.013932841829955578,
+ 0.00535422982648015,
+ 0.8387388586997986,
+ 0.004764800425618887,
+ 0.02386591210961342,
+ 0.04008623957633972,
+ 0.5606747269630432,
+ 0.9332547783851624,
+ 0.02354300580918789,
+ 0.7222034931182861,
+ 0.010339915752410889,
+ 0.0051331170834600925,
+ 0.015859361737966537,
+ 0.928329586982727,
+ 0.07042752951383591,
+ 0.0033885720185935497,
+ 0.02866990491747856,
+ 0.9165403246879578,
+ 0.03584417700767517,
+ 0.9447782635688782,
+ 0.9416751265525818,
+ 0.5410656929016113,
+ 0.02953338623046875,
+ 0.009083312004804611,
+ 0.32500940561294556,
+ 0.07135940343141556,
+ 0.21336644887924194,
+ 0.00776125630363822,
+ 0.0751323252916336,
+ 0.020248418673872948,
+ 0.7727653980255127,
+ 0.0019125656690448523,
+ 0.0154165243729949,
+ 0.014082311652600765,
+ 0.9479771256446838,
+ 0.00926204677671194,
+ 0.9451633095741272,
+ 0.018092600628733635,
+ 0.03380986675620079,
+ 0.013082841411232948,
+ 0.8813718557357788,
+ 0.03869924694299698,
+ 0.043908167630434036,
+ 0.07465846836566925,
+ 0.020705657079815865,
+ 0.840247631072998,
+ 0.01788754016160965,
+ 0.7686178684234619,
+ 0.04338349774479866,
+ 0.03050147369503975,
+ 0.04970092326402664,
+ 0.8392722010612488,
+ 0.002669614041224122,
+ 0.11674889177083969,
+ 0.00298236939124763,
+ 0.012624367140233517,
+ 0.01754012331366539,
+ 0.09177706390619278,
+ 0.021733084693551064,
+ 0.004724114201962948,
+ 0.0017189689679071307,
+ 0.030842922627925873,
+ 0.02060762234032154,
+ 0.90532386302948,
+ 0.11719930917024612,
+ 0.019032690674066544,
+ 0.8460276126861572,
+ 0.1660507172346115,
+ 0.8996521830558777,
+ 0.7967191338539124,
+ 0.003243226557970047,
+ 0.913471519947052,
+ 0.0244155190885067,
+ 0.18375305831432343,
+ 0.006471569649875164,
+ 0.9159026741981506,
+ 0.007738111540675163,
+ 0.002430642256513238
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 33
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T11:11:01.513232Z",
+ "start_time": "2025-01-20T11:11:01.493501Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "2c07216975e2e25e",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([[ 1.5776e-01, 9.8405e-01, 8.2254e-02],\n",
+ " [-2.7604e-01, 9.5545e-01, 1.0445e-01],\n",
+ " [-2.7929e-01, 9.5391e-01, 1.0978e-01],\n",
+ " [ 1.8736e-01, 9.7893e-01, 8.1240e-02],\n",
+ " [ 1.6067e-01, 9.8312e-01, 8.7558e-02],\n",
+ " [ 1.6633e-01, 9.8175e-01, 9.2166e-02],\n",
+ " [-2.7789e-01, 9.5394e-01, 1.1303e-01],\n",
+ " [ 1.7577e-01, 9.7979e-01, 9.5482e-02],\n",
+ " [-2.0500e-01, 9.7601e-01, 7.3351e-02],\n",
+ " [ 1.6585e-01, 9.8166e-01, 9.4051e-02],\n",
+ " [-2.4560e-01, 9.6450e-01, 9.7019e-02],\n",
+ " [ 2.3079e-01, 9.7272e-01, 2.3669e-02],\n",
+ " [ 2.1518e-01, 9.7641e-01, 1.7769e-02],\n",
+ " [-2.8556e-01, 9.5139e-01, 1.1540e-01],\n",
+ " [ 8.3375e-01, 5.5213e-01, 3.0947e-03],\n",
+ " [ 2.0751e-01, 9.7789e-01, 2.5777e-02],\n",
+ " [-2.7116e-01, 9.5567e-01, 1.1471e-01],\n",
+ " [ 1.8916e-01, -9.8192e-01, 6.7408e-03],\n",
+ " [ 2.9420e-02, 9.9955e-01, 5.4766e-03],\n",
+ " [-2.9866e-01, 9.4725e-01, 1.1626e-01],\n",
+ " [-3.8300e-01, -9.2375e-01, 1.1843e-03],\n",
+ " [-3.7854e-01, 9.1914e-01, 1.0902e-01],\n",
+ " [ 1.8957e-01, 9.7744e-01, 9.3177e-02],\n",
+ " [-3.5404e-01, 9.2869e-01, 1.1040e-01],\n",
+ " [-7.1366e-02, 9.9745e-01, 2.7384e-03],\n",
+ " [-2.6815e-01, 9.5634e-01, 1.1625e-01],\n",
+ " [ 5.1271e-01, 8.5856e-01, 2.7863e-03],\n",
+ " [ 1.7913e-01, 9.7869e-01, 1.0041e-01],\n",
+ " [-2.8577e-01, 9.5115e-01, 1.1682e-01],\n",
+ " [-5.1519e-01, -8.5694e-01, 1.5119e-02],\n",
+ " [-4.3956e-01, -8.9821e-01, 9.8758e-04],\n",
+ " [-3.2362e-01, 9.3864e-01, 1.1927e-01],\n",
+ " [-2.0543e-01, 9.7522e-01, 8.2158e-02],\n",
+ " [-2.6181e-01, -9.6512e-01, 3.9386e-04],\n",
+ " [-3.2637e-01, 9.3794e-01, 1.1731e-01],\n",
+ " [ 2.0204e-01, 9.7924e-01, 1.6306e-02],\n",
+ " [ 1.9135e-01, 9.7723e-01, 9.1702e-02],\n",
+ " [ 8.6832e-01, 4.9597e-01, 5.3530e-03],\n",
+ " [-2.8229e-01, 9.5191e-01, 1.1904e-01],\n",
+ " [ 3.0127e-01, -9.5354e-01, 4.3984e-04],\n",
+ " [ 3.3871e-01, 9.4070e-01, 1.9142e-02],\n",
+ " [-1.7972e-01, -9.8372e-01, 3.0265e-04],\n",
+ " [ 2.3960e-01, 9.7045e-01, 2.8604e-02],\n",
+ " [ 4.4457e-01, -8.9574e-01, 1.3448e-03],\n",
+ " [-7.8075e-01, -6.2432e-01, 2.5710e-02],\n",
+ " [-9.8213e-01, 1.8668e-01, 2.4010e-02],\n",
+ " [ 5.5187e-01, 8.3392e-01, 3.2977e-03],\n",
+ " [-6.8770e-01, -7.2599e-01, 3.6515e-03],\n",
+ " [ 9.9154e-01, 1.2972e-01, 5.0068e-03],\n",
+ " [-3.3564e-01, 9.3470e-01, 1.1694e-01],\n",
+ " [ 1.8652e-01, 9.8082e-01, 5.6574e-02],\n",
+ " [-9.8274e-01, 1.8338e-01, 2.4470e-02],\n",
+ " [ 2.2948e-01, -9.7331e-01, 1.9964e-04],\n",
+ " [-2.7509e-01, 9.5440e-01, 1.1596e-01],\n",
+ " [ 8.7907e-01, 4.7665e-01, 7.0843e-03],\n",
+ " [ 2.0529e-01, -9.7870e-01, 3.5295e-04],\n",
+ " [ 1.8271e-01, 9.7776e-01, 1.0292e-01],\n",
+ " [-5.8532e-01, -8.1079e-01, 4.2083e-03],\n",
+ " [-2.2405e-01, 9.6976e-01, 9.6725e-02],\n",
+ " [-6.4469e-01, 7.6213e-01, 5.9327e-02],\n",
+ " [ 1.8370e-01, 9.7783e-01, 1.0050e-01],\n",
+ " [ 1.8424e-01, 9.7758e-01, 1.0193e-01],\n",
+ " [-3.4131e-01, 9.3192e-01, 1.2262e-01],\n",
+ " [-3.3554e-01, 9.4200e-01, 6.8494e-03],\n",
+ " [ 6.4502e-01, -7.6416e-01, 1.3308e-03],\n",
+ " [-3.8729e-01, 9.1485e-01, 1.1424e-01],\n",
+ " [ 5.8599e-01, -8.1032e-01, 1.1693e-03],\n",
+ " [-5.8481e-02, 9.9828e-01, 3.9322e-03],\n",
+ " [ 3.9619e-01, 9.1811e-01, 1.0399e-02],\n",
+ " [ 2.1079e-01, 9.7551e-01, 6.2862e-02],\n",
+ " [-2.6759e-01, 9.5631e-01, 1.1777e-01],\n",
+ " [-3.0254e-01, 9.5313e-01, 3.6401e-03],\n",
+ " [ 2.0368e-01, 9.7577e-01, 7.9977e-02],\n",
+ " [ 9.5745e-01, -2.8859e-01, 2.9633e-03],\n",
+ " [-1.5607e-01, -9.8774e-01, 1.0070e-03],\n",
+ " [ 9.9709e-01, 7.6084e-02, 4.8195e-03],\n",
+ " [ 1.8158e-01, 9.7801e-01, 1.0257e-01],\n",
+ " [ 3.3576e-01, 9.4185e-01, 1.3812e-02],\n",
+ " [ 2.6705e-01, -9.6368e-01, 8.2438e-04],\n",
+ " [ 8.7120e-02, 9.9608e-01, 1.5372e-02],\n",
+ " [ 1.8925e-01, 9.7670e-01, 1.0120e-01],\n",
+ " [-4.2279e-01, 9.0621e-01, 6.0599e-03],\n",
+ " [-2.7467e-01, 9.5381e-01, 1.2166e-01],\n",
+ " [-3.1099e-01, 9.4260e-01, 1.2158e-01],\n",
+ " [-5.0925e-01, 8.5586e-01, 9.0395e-02],\n",
+ " [-8.5143e-01, -5.2426e-01, 1.4852e-02],\n",
+ " [-6.3556e-01, -7.7204e-01, 3.4622e-03],\n",
+ " [-4.8095e-01, 8.7457e-01, 6.1805e-02],\n",
+ " [-1.2795e-01, 9.9170e-01, 1.2779e-02],\n",
+ " [ 3.6782e-01, 9.2947e-01, 2.8042e-02],\n",
+ " [-5.3934e-01, -8.4209e-01, 1.8055e-03],\n",
+ " [ 3.6541e-01, 9.3080e-01, 9.0755e-03],\n",
+ " [ 9.7491e-01, 2.2252e-01, 5.9076e-03],\n",
+ " [-2.1247e-01, 9.7229e-01, 9.7521e-02],\n",
+ " [ 1.4954e-01, -9.8876e-01, 3.3958e-04],\n",
+ " [-4.1069e-01, -9.1176e-01, 4.9851e-03],\n",
+ " [ 7.4403e-01, 6.6814e-01, 3.2493e-03],\n",
+ " [-2.8512e-01, 9.5053e-01, 1.2325e-01],\n",
+ " [ 8.5808e-01, -5.1351e-01, 2.4182e-03],\n",
+ " [-2.9554e-01, 9.4733e-01, 1.2336e-01],\n",
+ " [ 7.7957e-03, 9.9993e-01, 8.8663e-03],\n",
+ " [-8.4029e-01, -5.4198e-01, 1.3564e-02],\n",
+ " [ 6.6023e-01, 7.5106e-01, 2.6860e-03],\n",
+ " [-2.4100e-01, 9.6389e-01, 1.1326e-01],\n",
+ " [-5.8824e-01, 8.0864e-01, 8.1394e-03],\n",
+ " [ 5.6545e-01, 8.2476e-01, 6.5639e-03],\n",
+ " [ 3.7011e-01, 9.2889e-01, 1.3502e-02],\n",
+ " [-8.5719e-01, -5.1496e-01, 6.3810e-03],\n",
+ " [ 1.9883e-01, 9.7555e-01, 9.3648e-02],\n",
+ " [-4.3673e-01, 8.9958e-01, 4.3706e-03],\n",
+ " [ 1.7635e-01, 9.8035e-01, 8.8404e-02],\n",
+ " [ 6.9272e-01, 7.2114e-01, 1.0014e-02],\n",
+ " [-9.1198e-01, -4.1014e-01, 9.0722e-03],\n",
+ " [ 1.3930e-01, 9.9022e-01, 8.1595e-03],\n",
+ " [-2.7299e-01, 9.5583e-01, 1.0891e-01],\n",
+ " [ 3.1216e-01, -9.5003e-01, 5.4232e-04],\n",
+ " [ 1.5646e-01, 9.8758e-01, 1.4465e-02],\n",
+ " [-1.9370e-01, -9.8106e-01, 5.1277e-04],\n",
+ " [ 8.2830e-01, 5.6026e-01, 4.5816e-03],\n",
+ " [-3.4282e-01, 9.3938e-01, 6.4066e-03],\n",
+ " [ 4.2269e-01, 9.0613e-01, 1.6060e-02],\n",
+ " [-8.5018e-01, -5.2645e-01, 6.4036e-03],\n",
+ " [ 3.6932e-01, -9.2930e-01, 1.1207e-03],\n",
+ " [ 2.6139e-01, -9.6523e-01, 2.6231e-04],\n",
+ " [ 7.8401e-01, 6.2068e-01, 8.8401e-03],\n",
+ " [ 1.7933e-01, 9.8379e-01, 2.6442e-03],\n",
+ " [-2.4559e-01, 9.6227e-01, 1.1713e-01],\n",
+ " [ 3.9907e-01, 9.1674e-01, 1.7892e-02],\n",
+ " [ 3.5405e-01, 9.3520e-01, 6.8744e-03],\n",
+ " [-2.4965e-01, 9.6218e-01, 1.0899e-01],\n",
+ " [-7.9112e-01, 6.1037e-01, 3.9733e-02],\n",
+ " [ 1.7968e-01, 9.7866e-01, 9.9715e-02],\n",
+ " [-2.4047e-01, 9.6521e-01, 1.0263e-01],\n",
+ " [-2.4052e-01, -9.7064e-01, 6.0432e-04],\n",
+ " [-3.5914e-01, 9.2522e-01, 1.2240e-01],\n",
+ " [ 8.6889e-01, 4.9496e-01, 6.0291e-03],\n",
+ " [ 2.9706e-01, 9.5452e-01, 2.5266e-02],\n",
+ " [-3.1297e-01, -9.4976e-01, 1.9227e-03],\n",
+ " [-3.4379e-01, 9.3092e-01, 1.2330e-01],\n",
+ " [ 7.5591e-01, -6.5467e-01, 1.9844e-03],\n",
+ " [ 6.8384e-02, -9.9766e-01, 4.6762e-04]])"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 27
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:47.541174Z",
+ "start_time": "2025-01-15T13:26:42.640256Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "from src.jetfinder.basicjetfinder import basicjetfinder\n",
+ "from src.jetfinder.basicjetfinder_types import PseudoJet"
+ ],
+ "id": "3d306ff55aba8f56",
+ "outputs": [],
+ "execution_count": 62
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T11:30:57.051315Z",
+ "start_time": "2025-02-12T11:30:56.738611Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "event = dataset[1]",
+ "id": "f22d322fe5c58d62",
+ "outputs": [],
+ "execution_count": 11
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T11:30:57.798195Z",
+ "start_time": "2025-02-12T11:30:57.789047Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "def get_pseudojets(event):\n",
+ " pseudojets = []\n",
+ " for i in range(len(event.pfcands)):\n",
+ " pseudojets.append(PseudoJet(event.pfcands.pxyz[i, 0].item(), event.pfcands.pxyz[i, 1].item(), event.pfcands.pxyz[i, 2].item(), event.pfcands.E[i].item()))\n",
+ " return pseudojets\n",
+ "def get_pseudojets_fastjet(event):\n",
+ " pseudojets = []\n",
+ " for i in range(len(event.pfcands)):\n",
+ " pseudojets.append(fastjet.PseudoJet(event.pfcands.pxyz[i, 0].item(), event.pfcands.pxyz[i, 1].item(), event.pfcands.pxyz[i, 2].item(), event.pfcands.E[i].item()))\n",
+ " return pseudojets"
+ ],
+ "id": "d82147109550e95d",
+ "outputs": [],
+ "execution_count": 12
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.214374164Z",
+ "start_time": "2025-01-05T10:22:51.003001Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "pj = get_pseudojets(event)\n",
+ "init_jets, history = basicjetfinder(pj, return_raw=True)"
+ ],
+ "id": "109f80517d6d8ebe",
+ "outputs": [],
+ "execution_count": 9
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.218588253Z",
+ "start_time": "2025-01-05T10:22:51.189299Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "pj[0].phi, pj[0].rap",
+ "id": "d447c0086cf78673",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(5.176739997422374, -1.1044922730459195)"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 10
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.220185691Z",
+ "start_time": "2025-01-05T10:22:51.295388Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "event.pfcands.phi[0].item(), event.pfcands.eta[0].item()",
+ "id": "829888c538a224ce",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(-1.1064453125, -1.1044921875)"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 11
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.222836564Z",
+ "start_time": "2025-01-05T10:22:53.423595Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "history.parent1[-1], history.parent2[-1]\n",
+ "history.jetp_index[305]"
+ ],
+ "id": "5066f1dbfc75c415",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "305"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 12
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.225401392Z",
+ "start_time": "2025-01-05T10:22:53.613292Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "jets = basicjetfinder(pj, return_raw=0, ptmin=100)",
+ "id": "111438c86429cb73",
+ "outputs": [],
+ "execution_count": 13
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.227766958Z",
+ "start_time": "2025-01-05T10:23:02.561963Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "print(len(jets))\n",
+ "import numpy as np\n",
+ "pts = [jet.pt for jet in jets]\n",
+ "ax.hist(pts, bins=np.linspace(100, 300, 30))\n",
+ "fig.show()"
+ ],
+ "id": "c9b6a5bae8fb77a0",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "12\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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t97q/snLLpdLwcHB9QL5p9dhQ9fp+ft8RUPr+6njx49r/vz59b5VOG/ePN11110KDQ3V+++/r4ceekjff/+9Hnnkkasx9WZpbH333nuvevbsqW7duumTTz7RrFmzVFJSojfeeEOS/+yf1Lw9XLFihfr27atbbrnF47gv7+GePXvkdDp15swZtW3bVuvXr1e/fv1UXFzsc9ffNRcj15KzZ8/qt7/9rYwxWrZsmcd9aWlp7n8eOHCggoOD9Yc//EFZWVk+/yOPf/e737n/ecCAARo4cKBuvPFGFRQUaNiwYRZndmXk5uZq4sSJCgkJ8TjuL3s4ffp0ffrpp9q6davtqVwRTa2voqJCo0aNUr9+/fT000973Ddnzhz3Pw8aNEhVVVVatGiRT/yH7LzG1ve/YTVgwAB17dpVw4YN0/79+3XjjTde7Wlekqb28PTp01q1apXHfp3ny3vYu3dvFRcXq7y8XOvWrdOkSZO0ZcsW29Nq0DX3bZqoqChJqveu4bKyMvd9UVFROnr0qMf9586d04kTJ9xjfN35EPn666+1adOmJn8tdEJCgs6dO6eDBw9enQleRjfccIPCw8O1b98+SS1j/87797//rZKSEj3wwANNjvXFPUxNTdU777yjzZs3q0ePHu7jUVFRqqmp0cmTJz3G//Q6bOg6PX+fL2hsfedVVlZqxIgRateundavX6/WrVtf8PESEhL0zTffqLq6+kpN2StNre9/JSQkSJLHdejr+yc1b43r1q3TqVOnlJyc3OTj+dIeBgcH66abblJ8fLyysrIUGxur559/3ievv2suRnr16qWoqCjl5+e7j1VUVGj79u1yOp2SJKfTqZMnT6qoqMg95sMPP1RdXZ37gvNl50Nk7969+uCDD9S5c+cmzykuLlZgYGC9b2/4g2+++UbfffedunbtKsn/9+9/rVixQvHx8YqNjW1yrC/toTFGqampWr9+vT788EP16tXL4/74+Hi1bt3a4zosKSlRaWmpx3W4Z88ej7A8H9b9+vW7OgtpRFPrk37498rw4cMVHByst99+u94rWw0pLi5Wx44drb+y1Zz1/VRxcbEkeVyHvrp/kndrXLFihcaMGaMuXbo0+bi+socNqaurU3V1tW9ef5f9LbE+oLKy0uzevdvs3r3bSDLZ2dlm9+7d7k+TLFy40HTo0MG89dZb5pNPPjFjx441vXr1MqdPn3Y/xogRI8ygQYPM9u3bzdatW83NN99sJkyYYGtJHi60vpqaGjNmzBjTo0cPU1xcbI4cOeK+nX8H9LZt28xzzz1niouLzf79+80///lP06VLF5OcnGx5ZT+40PoqKyvNY489ZgoLC82BAwfMBx98YAYPHmxuvvlmc+bMGfdj+PL+GdP016gxxpSXl5vQ0FCzbNmyeuf7+h5OmzbNtG/f3hQUFHh8DZ46dco9ZurUqeb66683H374odm5c6dxOp3G6XS67z937pzp37+/GT58uCkuLjZ5eXmmS5cuJj093caSPDS1vvLycpOQkGAGDBhg9u3b5zHm3Llzxhhj3n77bbN8+XKzZ88es3fvXvPCCy+Y0NBQk5GRYXNpxpim17dv3z4zb948s3PnTnPgwAHz1ltvmRtuuMHcfvvt7sfw5f0zpnlfo8YYs3fvXhMQEGDefffdeo/hy3s4e/Zss2XLFnPgwAHzySefmNmzZ5uAgADz/vvvG2N87/prkTGyefNmI6nebdKkScaYHz7eO2fOHBMZGWkcDocZNmyYKSkp8XiM7777zkyYMMG0bdvWhIWFmZSUFFNZWWlhNfVdaH0HDhxo8D5JZvPmzcYYY4qKikxCQoJp3769CQkJMX379jULFizw+I+5TRda36lTp8zw4cNNly5dTOvWrU3Pnj3NlClTPD5+Zoxv758xTX+NGmPMP/7xD9OmTRtz8uTJeuf7+h429jX48ssvu8ecPn3aPPTQQ6Zjx44mNDTU/PrXvzZHjhzxeJyDBw+akSNHmjZt2pjw8HDzxz/+0eOjsbY0tb7G9leSOXDggDHmh4+bx8XFmbZt25rrrrvOxMbGmpycHFNbW2tvYf9fU+srLS01t99+u+nUqZNxOBzmpptuMo8//rgpLy/3eBxf3T9jmvc1aowx6enpJjo6usF98eU9vP/++03Pnj1NcHCw6dKlixk2bJg7RIzxvesvwBgf+wwSAAC4plxz7xkBAAC+hRgBAABWESMAAMAqYgQAAFhFjAAAAKuIEQAAYBUxAgAArCJGAACAVcQIAACwihgBAABWESMAAMAqYgQAAFj1/wA2Rm2NuOD1owAAAABJRU5ErkJggg=="
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 15
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.228831708Z",
+ "start_time": "2025-01-05T10:23:12.488535Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "pts",
+ "id": "8173000a212c5561",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[106.4914540483752,\n",
+ " 126.82878103484677,\n",
+ " 128.75701244217592,\n",
+ " 139.36815083799416,\n",
+ " 141.45818096650805,\n",
+ " 157.3921266403816,\n",
+ " 263.460560295077,\n",
+ " 510.77385760617676,\n",
+ " 1265.8454239380796,\n",
+ " 3240.9516711140454,\n",
+ " 9355.60575745164,\n",
+ " 12409.915133671686]"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 16
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.232599293Z",
+ "start_time": "2025-01-04T21:42:24.952081Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "history.parent1[-1], history.parent2[-1]\n",
+ "id": "ca12ef3d85430a6c",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(305, -1)"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 14
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.235836146Z",
+ "start_time": "2025-01-04T21:42:25.992473Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "history.parent1",
+ "id": "648b5a6c3f3469db",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 335, 0,\n",
+ " 337, 338, 339, 340, 6, 341, 7, 343, 345, 346, 347, 348, 5,\n",
+ " 349, 351, 352, 353, 127, 350, 356, 354, 358, 13, 359, 357, 362,\n",
+ " 363, 361, 365, 366, 367, 368, 369, 370, 371, 372, 364, 374, 373,\n",
+ " 376, 377, 378, 379, 82, 375, 382, 383, 344, 385, 386, 387, 384,\n",
+ " 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401,\n",
+ " 402, 403, 404, 405, 406, 342, 408, 409, 410, 407, 412, 413, 414,\n",
+ " 415, 416, 417, 418, 419, 420, 421, 422, 423, 411, 425, 424, 427,\n",
+ " 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440,\n",
+ " 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 426,\n",
+ " 9, 455, 453, 454, 458, 33, 460, 388, 459, 463, 464, 465, 25,\n",
+ " 466, 468, 469, 456, 470, 472, 473, 474, 475, 476, 477, 478, 479,\n",
+ " 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 462, 35, 491,\n",
+ " 461, 494, 495, 493, 497, 498, 499, 20, 496, 502, 500, 504, 503,\n",
+ " 506, 507, 505, 509, 510, 511, 512, 513, 514, 515, 516, 508, 518,\n",
+ " 519, 501, 520, 22, 521, 92, 522, 524, 526, 91, 528, 248, 530,\n",
+ " 527, 523, 65, 177, 533, 537, 538, 467, 539, 48, 40, 540, 93,\n",
+ " 541, 37, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557,\n",
+ " 558, 559, 560, 561, 542, 534, 57, 529, 564, 563, 568, 566, 570,\n",
+ " 571, 572, 573, 574, 575, 565, 577, 569, 185, 102, 581, 62, 583,\n",
+ " 52, 43, 586, 587, 588, 589, 590, 591, 582, 50, 594, 595, 596,\n",
+ " 597, 598, 599, 600, 27, 602, 603, 604, 98, 606, 607, 543, 544,\n",
+ " 608, 609, 567, 579, 614, 611, 605, 617, 593, 619, 620, 621, 89,\n",
+ " 623, 624, 625, 626, 627, 628, 629, 612, 631, 632, 633, 634, 635,\n",
+ " 636, 637, 610, 616, 640, 84, 192, 642, 644, 645, 646, 647, 545,\n",
+ " 649, 650, 651, 652, 653, 654, 190, 104, 657, 658, 659, 660, 661,\n",
+ " 49, 137, 664, 656, 126, 166, 305])"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 15
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.239141583Z",
+ "start_time": "2025-01-04T21:42:40.173588Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "history.parent2",
+ "id": "7f4ba4d2fac40d0b",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 2, 336,\n",
+ " 213, 4, 134, 197, 243, 169, 31, 323, 222, 230, 325, 155, 12,\n",
+ " 167, 142, 327, 198, 141, 45, 47, 106, 310, 116, 270, 16, 100,\n",
+ " 74, 11, 221, 299, 59, 67, 58, 277, 129, 189, 17, 184, 303,\n",
+ " 139, 146, 79, -1, 123, 77, 294, 258, 32, 36, 18, 14, 360,\n",
+ " 124, 63, 292, 19, 204, 112, 29, 103, 109, 263, 73, 131, 199,\n",
+ " 55, 266, 54, 309, 41, 15, 21, 30, 8, 233, 285, 46, 241,\n",
+ " 38, 68, 246, 96, 85, 122, 316, 191, 86, 90, 229, 157, 289,\n",
+ " 26, 28, 117, 135, 24, 61, 214, 23, 326, 224, 201, 179, 237,\n",
+ " 76, 115, 42, 172, 256, 143, 219, 78, 281, 308, 44, 206, 128,\n",
+ " 53, 60, -1, 183, 251, 34, 255, 175, 333, 105, 268, 133, 317,\n",
+ " 381, 227, 321, 158, 94, 39, 355, 10, 252, 80, 101, 471, 290,\n",
+ " 70, 284, 83, 275, 291, 210, 262, 261, 253, -1, 153, 334, 280,\n",
+ " 108, 140, 492, 147, 125, 174, 295, 232, 288, 287, 161, 265, 56,\n",
+ " 307, 195, 247, 150, 164, 202, 274, 95, 64, 244, -1, 186, 272,\n",
+ " 208, 329, 162, 273, 111, 107, 223, 160, 218, 163, 286, 271, -1,\n",
+ " 250, 130, 330, 531, 313, 259, 69, 324, 152, 99, 165, 278, 242,\n",
+ " -1, 536, 217, 203, 211, 159, 145, 331, 88, 226, 535, 216, 151,\n",
+ " 231, 187, 301, -1, 260, 297, 72, 525, 264, 120, 87, 269, 235,\n",
+ " 318, 228, 194, 220, 178, 576, -1, 314, 188, 113, 245, 97, 156,\n",
+ " 584, 585, 66, 132, 279, 81, 296, -1, 282, 298, 180, 580, 234,\n",
+ " 71, 200, 168, -1, 170, 302, 171, 154, 207, 304, 110, 320, 238,\n",
+ " 312, 181, -1, 138, -1, 283, 276, -1, 267, 121, 328, 182, 622,\n",
+ " 215, 209, 212, 173, 306, 193, -1, 114, 75, 119, 149, 51, 240,\n",
+ " 205, -1, -1, 148, -1, 257, 236, 118, 176, 144, 196, -1, 300,\n",
+ " 322, 136, 293, 319, 332, -1, 311, 249, 254, 315, 225, 643, -1,\n",
+ " -1, 239, -1, -1, -1, -1, -1])"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 16
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T11:37:26.356164Z",
+ "start_time": "2025-02-12T11:37:26.334334Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import fastjet\n",
+ "jetdef = fastjet.JetDefinition(fastjet.antikt_algorithm, 0.8)\n",
+ "array = get_pseudojets_fastjet(event)\n",
+ "\n",
+ "cluster = fastjet.ClusterSequence(array, jetdef)\n",
+ "inc_jets = cluster.inclusive_jets()\n",
+ "for elem in inc_jets:\n",
+ " pt = elem.pt()\n",
+ " if pt < 100:\n",
+ " continue\n",
+ " print(\"pt:\", elem.pt(), \"eta:\", elem.rap(), \"phi:\", elem.phi(), \"m\", elem.m())\n",
+ "\n",
+ "\n",
+ "def get_jets(event, jetdef):\n",
+ " pt = []\n",
+ " eta = []\n",
+ " phis = []\n",
+ " mass = []\n",
+ " array = get_pseudojets_fastjet(event)\n",
+ "\n",
+ " cluster = fastjet.ClusterSequence(array, jetdef)\n",
+ " inc_jets = cluster.inclusive_jets()\n",
+ " for elem in inc_jets:\n",
+ " if elem.pt() < 100:\n",
+ " continue\n",
+ " #print(\"pt:\", elem.pt(), \"eta:\", elem.rap(), \"phi:\", elem.phi())ž\n",
+ " pt.append(elem.pt())\n",
+ " eta.append(elem.rap())\n",
+ " phi = elem.phi()\n",
+ " if phi > np.pi:\n",
+ " phi -= 2*np.pi\n",
+ " phis.append(phi)\n",
+ " mass.append(elem.m())\n",
+ " return pt, eta, phis, mass\n"
+ ],
+ "id": "fe26fce41ce8a6e0",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "pt: 170.28684882840693 eta: 1.4439809865649234 phi: 3.443388811838133 m 34.279811963116074\n"
+ ]
+ }
+ ],
+ "execution_count": 26
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T11:37:27.360232Z",
+ "start_time": "2025-02-12T11:37:27.350919Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "event.fatjets.pt.tolist(), event.fatjets.eta.tolist(), event.fatjets.phi.tolist()",
+ "id": "d1e783a1ef0b7d2",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "([170.28684997558594], [1.462087869644165], [-2.839796543121338])"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 27
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T11:37:44.517906Z",
+ "start_time": "2025-02-12T11:37:44.500190Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "jetdef = fastjet.JetDefinition(fastjet.antikt_algorithm, 0.8)\n",
+ "\n",
+ "jets = get_jets(event, jetdef)\n",
+ "print(jets)"
+ ],
+ "id": "4a70177cc18e6294",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "([170.28684882840693], [1.4439809865649234], [-2.8397964953414534], [34.279811963116074])\n"
+ ]
+ }
+ ],
+ "execution_count": 32
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.246660551Z",
+ "start_time": "2025-01-08T13:38:47.767966Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "model_clusters_file =\"/work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_2025_01_03_15_07_14/HDBSCAN_10_20.pkl\"\n",
+ "model_output_file = \"/work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_2025_01_03_15_07_14/eval_0.pkl\"\n"
+ ],
+ "id": "2b10ddbf4eec8cb5",
+ "outputs": [],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.248147149Z",
+ "start_time": "2025-01-08T13:38:47.884029Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "ds = EventDataset.from_directory(\"/work/gkrzmanc/jetclustering/preprocessed_data/scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-900_mDark-20_rinv-0.3\",\n",
+ " model_clusters_file=model_clusters_file, model_output_file=model_output_file)"
+ ],
+ "id": "45e33b8f47a24359",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/jetclustering/code/src/utils/utils.py:91: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
+ " return lambda b: torch.load(io.BytesIO(b), map_location='cpu')\n"
+ ]
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.249374772Z",
+ "start_time": "2025-01-08T13:38:48.434363Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "labels = CPU_Unpickler(open(\"/work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_2025_01_03_15_07_14/HDBSCAN_10_20.pkl\", \"rb\")).load()\n",
+ "labels"
+ ],
+ "id": "9e23e7eff0c80073",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 0, 2, 2, ..., 1, 0, -1])"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 7
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.250785451Z",
+ "start_time": "2025-01-08T13:38:48.566720Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "from src.plotting.plot_event import plot_event\n",
+ "clist = ['#1f78b4', '#b3df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbe6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928']\n",
+ "colors = {\n",
+ " -1: \"gray\",\n",
+ " 0: clist[0],\n",
+ " 1: clist[1],\n",
+ " 2: clist[2],\n",
+ " 3: clist[3],\n",
+ " 4: clist[4],\n",
+ " 5: clist[5],\n",
+ " 6: clist[6],\n",
+ " 7: clist[7],\n",
+ "}\n",
+ "\n",
+ "idx = 4\n",
+ "c = [colors[i] for i in labels[result[\"event_idx\"] == idx]]\n",
+ "\n",
+ "plot_event(ds[idx], colors=c).show()\n",
+ "\n",
+ "print(ds[idx].model_jets.pt)"
+ ],
+ "id": "349e83cf3a97bbd6",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "tensor([427.9641, 391.8387])\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 8
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "4a2509d55bd64836"
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.252545623Z",
+ "start_time": "2025-01-07T15:45:38.549155Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "pt_model_jet = []\n",
+ "for i in range(200):\n",
+ " pt_model_jet += ds[i].model_jets.pt.tolist()"
+ ],
+ "id": "831cb3f91dc26650",
+ "outputs": [
+ {
+ "ename": "NameError",
+ "evalue": "name 'ds' is not defined",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mNameError\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[4], line 3\u001B[0m\n\u001B[1;32m 1\u001B[0m pt_model_jet \u001B[38;5;241m=\u001B[39m []\n\u001B[1;32m 2\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m i \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mrange\u001B[39m(\u001B[38;5;241m200\u001B[39m):\n\u001B[0;32m----> 3\u001B[0m pt_model_jet \u001B[38;5;241m+\u001B[39m\u001B[38;5;241m=\u001B[39m \u001B[43mds\u001B[49m[i]\u001B[38;5;241m.\u001B[39mmodel_jets\u001B[38;5;241m.\u001B[39mpt\u001B[38;5;241m.\u001B[39mtolist()\n",
+ "\u001B[0;31mNameError\u001B[0m: name 'ds' is not defined"
+ ]
+ }
+ ],
+ "execution_count": 4
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.253846859Z",
+ "start_time": "2025-01-07T15:45:47.111072Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "ax.hist(pt_model_jet, bins=np.linspace(0, 300, 30))\n",
+ "fig.show()"
+ ],
+ "id": "ac8f0f719e587403",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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AKsQNwAAwCrEzS0WFRWlBQsWKCoqqqmn0uyxVg3HWjUca9VwrFXDsVYN1xzWqlV+oBgAANiLOzcAAMAqxA0AALAKcQMAAKxC3AAAAKsQN7fQ0qVL1aNHD0VHRystLU07duxo6ik1uV//+tcKCwsL2vr27Rs4XllZqWnTpqljx45q3769xo0bp9LS0iaccePZtm2bfvSjHykpKUlhYWFav3590HFjjObPn6/OnTurXbt2crvdOnLkSNCY8+fPa8KECXI4HIqNjVV2drYuXrzYiFfROG60Vo8++uhVr7ORI0cGjWkta5WXl6d7771XHTp0UKdOnZSZmani4uKgMQ1535WUlGj06NG67bbb1KlTJ82ePVuXL19uzEsJuYas1f3333/Va+vxxx8PGtMa1mrZsmUaNGhQ4Iv5XC6XPvjgg8Dx5vaaIm5ukTVr1ignJ0cLFizQ7t27NXjwYGVkZKisrKypp9bk7r77bp0+fTqwffLJJ4FjTz31lN5//32tXbtWW7du1alTpzR27NgmnG3jqaio0ODBg7V06dJ6j7/00ktavHixli9frsLCQt1+++3KyMhQZWVlYMyECRN04MAB5efna8OGDdq2bZumTp3aWJfQaG60VpI0cuTIoNfZ22+/HXS8tazV1q1bNW3aNH366afKz89XTU2NRowYoYqKisCYG73vamtrNXr0aFVXV2v79u36y1/+ohUrVmj+/PlNcUkh05C1kqQpU6YEvbZeeumlwLHWslZdu3bViy++qKKiIu3atUsPPPCAxowZowMHDkhqhq8pg1siNTXVTJs2LfDn2tpak5SUZPLy8ppwVk1vwYIFZvDgwfUeKy8vN23btjVr164N7Dt06JCRZDweTyPNsHmQZNatWxf4c11dnXE6nebll18O7CsvLzdRUVHm7bffNsYYc/DgQSPJ7Ny5MzDmgw8+MGFhYebkyZONNvfG9r9rZYwxkyZNMmPGjLnmOa11rYwxpqyszEgyW7duNcY07H23ceNGEx4ebrxeb2DMsmXLjMPhMFVVVY17AY3of9fKGGOGDx9uZs6cec1zWutaGWPMHXfcYf74xz82y9cUd25ugerqahUVFcntdgf2hYeHy+12y+PxNOHMmocjR44oKSlJvXr10oQJE1RSUiJJKioqUk1NTdC69e3bV926dWv163bs2DF5vd6gtYmJiVFaWlpg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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.255093897Z",
+ "start_time": "2025-01-15T10:16:58.042882Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "v1 = np.array([1, 2, 2, 2])\n",
+ "v2 = np.array([3, 3, 2, 1])\n",
+ "from scipy.spatial.distance import minkowski"
+ ],
+ "id": "d4a0921e620054b5",
+ "outputs": [],
+ "execution_count": 25
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.256269976Z",
+ "start_time": "2025-01-15T10:16:59.189155Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "minkowski(v1, v2, 2)",
+ "id": "f8dd3da5642a12bd",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2.449489742783178"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 26
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.257490963Z",
+ "start_time": "2025-01-15T10:17:12.055427Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "diff = v2-v1",
+ "id": "b6a8812cb07ba219",
+ "outputs": [],
+ "execution_count": 27
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T15:16:23.853431Z",
+ "start_time": "2025-01-20T15:16:23.118842Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "filename = get_path(\"/work/gkrzmanc/jetclustering/results/train/Eval_LGATr_no_coords_loss_1_2025_01_18_15_21_00/eval_3.pkl\", \"results\")\n",
+ "# for rinv=0.7, see /work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_rinv07_2025_01_03_15_38_58\n",
+ "\n",
+ "result = CPU_Unpickler(open(filename, \"rb\")).load()\n",
+ "dataset = EventDataset.from_directory(result[\"filename\"], mmap=True)\n"
+ ],
+ "id": "78667573e6fbbb9e",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/jetclustering/code/src/utils/utils.py:91: FutureWarning:\n",
+ "\n",
+ "You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
+ "\n"
+ ]
+ }
+ ],
+ "execution_count": 34
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T15:17:12.581333Z",
+ "start_time": "2025-01-20T15:17:12.483045Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# plotly 3d plot of result[\"pred\"], colored by result[\"GT_cluster\"]\n",
+ "from src.plotting.plot_coordinates import plot_coordinates\n",
+ "filt = result[\"event_idx\"] == 6\n",
+ "# normalized coordinates\n",
+ "norm_coords = result[\"pred\"][filt, 1:4] #/ np.linalg.norm(result[\"pred\"][filt, 1:4] , axis=1 ,keepdims=1)\n",
+ "plot_coordinates(norm_coords, torch.tensor(result[\"pt\"][filt]), torch.tensor(result[\"GT_cluster\"][filt])).show()\n"
+ ],
+ "id": "6aa3604655d72882",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[('X', (220, 1)), ('Y', (220, 1)), ('Z', (220, 1)), ('tIdx', (220, 1)), ('pt', (220, 1))]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/tmp/ipykernel_48257/4193388651.py:6: UserWarning:\n",
+ "\n",
+ "To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0
+ ],
+ "coloraxis": "coloraxis",
+ "size": [
+ 159.5,
+ 34.96875,
+ 18.359375,
+ 17.578125,
+ 13.1640625,
+ 12.6796875,
+ 9.21875,
+ 8.484375,
+ 8.234375,
+ 7.23046875,
+ 7.06640625,
+ 6.51171875,
+ 5.50390625,
+ 5.36328125,
+ 5.26171875,
+ 4.3125,
+ 4.0234375,
+ 3.994140625,
+ 3.884765625,
+ 3.669921875,
+ 3.5,
+ 3.44921875,
+ 3.431640625,
+ 3.40625,
+ 3.228515625,
+ 3.0859375,
+ 3.03515625,
+ 2.84765625,
+ 2.72265625,
+ 2.70703125,
+ 2.6484375,
+ 2.630859375,
+ 2.603515625,
+ 2.515625,
+ 2.478515625,
+ 2.4375,
+ 2.353515625,
+ 2.30078125,
+ 2.30078125,
+ 2.232421875,
+ 2.203125,
+ 2.1953125,
+ 2.1640625,
+ 2.154296875,
+ 2.09375,
+ 2.068359375,
+ 2.068359375,
+ 2.046875,
+ 2.041015625,
+ 2.017578125,
+ 1.9921875,
+ 1.9560546875,
+ 1.953125,
+ 1.9296875,
+ 1.8818359375,
+ 1.8291015625,
+ 1.7568359375,
+ 1.7373046875,
+ 1.7119140625,
+ 1.70703125,
+ 1.7001953125,
+ 1.6611328125,
+ 1.6611328125,
+ 1.634765625,
+ 1.6328125,
+ 1.6318359375,
+ 1.6279296875,
+ 1.615234375,
+ 1.58984375,
+ 1.53125,
+ 1.52734375,
+ 1.509765625,
+ 1.50390625,
+ 1.494140625,
+ 1.490234375,
+ 1.486328125,
+ 1.466796875,
+ 1.45703125,
+ 1.4267578125,
+ 1.3740234375,
+ 1.359375,
+ 1.34375,
+ 1.3388671875,
+ 1.3330078125,
+ 1.3154296875,
+ 1.30859375,
+ 1.27734375,
+ 1.275390625,
+ 1.271484375,
+ 1.2568359375,
+ 1.2314453125,
+ 1.23046875,
+ 1.2216796875,
+ 1.220703125,
+ 1.21875,
+ 1.2119140625,
+ 1.19921875,
+ 1.1826171875,
+ 1.1806640625,
+ 1.1796875,
+ 1.177734375,
+ 1.1748046875,
+ 1.1552734375,
+ 1.15234375,
+ 1.14453125,
+ 1.0859375,
+ 1.0810546875,
+ 1.0810546875,
+ 1.080078125,
+ 1.072265625,
+ 1.0703125,
+ 1.0615234375,
+ 1.05859375,
+ 1.05859375,
+ 1.0556640625,
+ 1.0478515625,
+ 1.0458984375,
+ 1.0419921875,
+ 1.0390625,
+ 1.0390625,
+ 1.033203125,
+ 1.0302734375,
+ 1.0234375,
+ 1.0107421875,
+ 1.009765625,
+ 0.99072265625,
+ 0.9892578125,
+ 0.98193359375,
+ 0.9814453125,
+ 0.97705078125,
+ 0.96533203125,
+ 0.96240234375,
+ 0.9609375,
+ 0.95703125,
+ 0.95263671875,
+ 0.9482421875,
+ 0.9453125,
+ 0.93798828125,
+ 0.9296875,
+ 0.9169921875,
+ 0.9072265625,
+ 0.8955078125,
+ 0.89306640625,
+ 0.890625,
+ 0.880859375,
+ 0.87841796875,
+ 0.87744140625,
+ 0.87646484375,
+ 0.875,
+ 0.86962890625,
+ 0.857421875,
+ 0.8564453125,
+ 0.8564453125,
+ 0.8544921875,
+ 0.8525390625,
+ 0.8486328125,
+ 0.841796875,
+ 0.8232421875,
+ 0.81591796875,
+ 0.80419921875,
+ 0.80322265625,
+ 0.80224609375,
+ 0.798828125,
+ 0.78173828125,
+ 0.7763671875,
+ 0.77587890625,
+ 0.77587890625,
+ 0.76953125,
+ 0.76171875,
+ 0.76025390625,
+ 0.75830078125,
+ 0.75732421875,
+ 0.7509765625,
+ 0.74267578125,
+ 0.73779296875,
+ 0.73681640625,
+ 0.736328125,
+ 0.7333984375,
+ 0.720703125,
+ 0.71435546875,
+ 0.7138671875,
+ 0.71142578125,
+ 0.7099609375,
+ 0.703125,
+ 0.701171875,
+ 0.6953125,
+ 0.69091796875,
+ 0.68896484375,
+ 0.68505859375,
+ 0.6845703125,
+ 0.6826171875,
+ 0.681640625,
+ 0.669921875,
+ 0.65380859375,
+ 0.6533203125,
+ 0.6513671875,
+ 0.64892578125,
+ 0.64794921875,
+ 0.64794921875,
+ 0.6474609375,
+ 0.64697265625,
+ 0.64501953125,
+ 0.640625,
+ 0.63916015625,
+ 0.63818359375,
+ 0.634765625,
+ 0.6337890625,
+ 0.63037109375,
+ 0.6279296875,
+ 0.6259765625,
+ 0.6240234375,
+ 0.62158203125,
+ 0.62060546875,
+ 0.61865234375,
+ 0.615234375,
+ 0.61376953125,
+ 0.61083984375,
+ 0.6103515625,
+ 0.6083984375,
+ 0.6005859375
+ ],
+ "sizemode": "area",
+ "sizeref": 0.39875,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ -1.145566463470459,
+ -9.17282772064209,
+ -0.1544457972049713,
+ -0.03206736594438553,
+ -3.191534996032715,
+ 0.06160777062177658,
+ -0.01849440112709999,
+ -0.07442258298397064,
+ 0.24249786138534546,
+ 0.07763376832008362,
+ -1.5661542415618896,
+ 1.5138580799102783,
+ -0.035179972648620605,
+ 0.1322631537914276,
+ -0.1867426335811615,
+ -0.02442461997270584,
+ -0.8579702377319336,
+ -0.025149542838335037,
+ 0.063359335064888,
+ -0.7400716543197632,
+ -0.7001846432685852,
+ -0.08937383443117142,
+ -0.06883974373340607,
+ -0.020012114197015762,
+ -0.27416834235191345,
+ -0.6095934510231018,
+ -0.28896665573120117,
+ 0.12173996865749359,
+ 0.2396065890789032,
+ -0.04889238625764847,
+ 0.005061838775873184,
+ -0.008135572075843811,
+ 0.022905105724930763,
+ 9.161531925201416E-4,
+ -0.07336436957120895,
+ 0.2475009709596634,
+ -0.1814754605293274,
+ -0.003176070749759674,
+ -0.00991784781217575,
+ -0.32287126779556274,
+ -0.40930619835853577,
+ -0.028525158762931824,
+ -0.15037879347801208,
+ 0.06300292909145355,
+ -0.01658960059285164,
+ -0.3570789098739624,
+ 0.12885531783103943,
+ -0.025219034403562546,
+ -0.0712917149066925,
+ -0.2646598219871521,
+ -0.019399385899305344,
+ -0.04249408096075058,
+ 0.08223821967840195,
+ -0.13200430572032928,
+ 0.0119771808385849,
+ 0.0034895408898591995,
+ -0.17140574753284454,
+ 0.08772282302379608,
+ 0.2343517541885376,
+ 0.010836375877261162,
+ -0.10224762558937073,
+ 0.3142911195755005,
+ -0.11850552260875702,
+ -0.1623058021068573,
+ -0.020945997908711433,
+ -0.22512201964855194,
+ -0.14978303015232086,
+ 0.06669245660305023,
+ -0.05465732514858246,
+ -0.0025866772048175335,
+ -0.10953883826732635,
+ 0.081199511885643,
+ 0.04832106828689575,
+ 0.17550113797187805,
+ -0.033505283296108246,
+ -0.02620818093419075,
+ 0.09938223659992218,
+ -0.022636981680989265,
+ 0.02242308109998703,
+ -0.04074521362781525,
+ -0.038519810885190964,
+ 0.09729605913162231,
+ 0.27140069007873535,
+ -0.05003005266189575,
+ 0.019344374537467957,
+ 0.023949138820171356,
+ -0.3510080575942993,
+ -0.32405441999435425,
+ 0.10039915889501572,
+ 0.005976450629532337,
+ -0.03436433896422386,
+ -0.04855574667453766,
+ 0.06749404221773148,
+ 0.03396110236644745,
+ -0.09369347244501114,
+ 0.19181981682777405,
+ -0.09510169178247452,
+ -0.02858716994524002,
+ -0.11648781597614288,
+ -0.16982495784759521,
+ 0.040474750101566315,
+ 0.07641766965389252,
+ -0.015696704387664795,
+ -0.011957932263612747,
+ -0.06439025700092316,
+ 0.024435995146632195,
+ -0.07680678367614746,
+ -0.017858952283859253,
+ -0.07167769968509674,
+ -0.04418134689331055,
+ 0.042628247290849686,
+ 0.2034423053264618,
+ -0.13793742656707764,
+ -0.08002099394798279,
+ 0.04729217663407326,
+ 0.017960436642169952,
+ -0.004174098372459412,
+ -0.13969486951828003,
+ -0.005818609148263931,
+ 0.03536226600408554,
+ -0.0970236212015152,
+ 0.020566988736391068,
+ 0.04585854709148407,
+ -0.06659353524446487,
+ 0.03408137708902359,
+ -0.017989875748753548,
+ -0.011268973350524902,
+ -0.02298586070537567,
+ -0.07207773625850677,
+ 0.05488932877779007,
+ -0.0428549163043499,
+ 0.03718726709485054,
+ 0.10386288166046143,
+ 0.06478244811296463,
+ -0.049350474029779434,
+ -0.019686680287122726,
+ 0.19794988632202148,
+ 0.018894720822572708,
+ -0.09328575432300568,
+ 0.0048791877925395966,
+ -0.03858213499188423,
+ -0.00832878053188324,
+ -0.12840212881565094,
+ 0.0185209009796381,
+ -0.03766559064388275,
+ 0.06204339861869812,
+ 0.0036713965237140656,
+ -0.038168057799339294,
+ -0.01399959996342659,
+ -0.03032180666923523,
+ -0.05279902368783951,
+ -0.193888321518898,
+ -0.024778110906481743,
+ 0.06445755809545517,
+ -0.05161897465586662,
+ 0.20709624886512756,
+ -0.045680999755859375,
+ -0.005126815289258957,
+ 0.08210811764001846,
+ -0.034338898956775665,
+ 0.1000724583864212,
+ 0.030750565230846405,
+ -0.04400577023625374,
+ 3.6394596099853516E-4,
+ -0.03562963008880615,
+ 0.02300225757062435,
+ -0.044625021517276764,
+ -0.021673329174518585,
+ 0.11569524556398392,
+ -0.20308828353881836,
+ 0.055647291243076324,
+ 0.3032436966896057,
+ -0.04011087119579315,
+ -0.0401085764169693,
+ 0.005297832190990448,
+ -0.02433885633945465,
+ -0.005357099696993828,
+ 0.04145478457212448,
+ -0.03483331948518753,
+ -0.041098516434431076,
+ 0.0356760211288929,
+ -0.051088348031044006,
+ -0.028475917875766754,
+ 0.05039922893047333,
+ 0.025925859808921814,
+ 0.04737988859415054,
+ -0.038079798221588135,
+ -0.029578804969787598,
+ 0.008485380560159683,
+ -0.035919830203056335,
+ -0.035210806876420975,
+ 0.06112639605998993,
+ 0.04192691296339035,
+ 0.03462737798690796,
+ -0.05213895067572594,
+ 0.05020655691623688,
+ 0.24719490110874176,
+ -0.017039692029356956,
+ 0.03670356422662735,
+ 0.0507826954126358,
+ 0.05267968028783798,
+ -0.016750125214457512,
+ -0.027282752096652985,
+ -0.09137330949306488,
+ 0.009974021464586258,
+ 0.0011080056428909302,
+ -0.24741512537002563,
+ -0.19731612503528595,
+ -0.10197511315345764,
+ 0.0069472286850214005,
+ -0.019670281559228897,
+ 0.023070931434631348,
+ 0.13288620114326477,
+ 0.0026833489537239075,
+ 0.2681457996368408,
+ 0.005945507436990738,
+ -0.03972424566745758,
+ 0.026485387235879898,
+ -0.14425107836723328,
+ -0.05073212832212448
+ ],
+ "y": [
+ 44.173152923583984,
+ 1.6763535737991333,
+ 4.1546735763549805,
+ 3.946983814239502,
+ 0.5121366381645203,
+ 2.6225204467773438,
+ 1.708194375038147,
+ 1.3190487623214722,
+ -1.238325834274292,
+ 1.0367403030395508,
+ 0.294779896736145,
+ -0.017687246203422546,
+ 0.7392834424972534,
+ -0.5043148398399353,
+ 1.192878246307373,
+ 0.23018452525138855,
+ -0.0937630757689476,
+ 0.48921263217926025,
+ -0.46524572372436523,
+ 0.13460345566272736,
+ 0.1290343701839447,
+ -0.42159968614578247,
+ -0.45335856080055237,
+ 0.17320093512535095,
+ -0.27014854550361633,
+ 0.09480801224708557,
+ 0.1138511598110199,
+ -0.38489222526550293,
+ 0.5089240074157715,
+ -0.25325095653533936,
+ 0.09113259613513947,
+ -0.08011235296726227,
+ -0.15904337167739868,
+ 0.10945360362529755,
+ -0.3611851930618286,
+ -0.25554078817367554,
+ 0.1422576755285263,
+ 0.10234372317790985,
+ 0.11978735029697418,
+ -0.32110679149627686,
+ -0.001106449868530035,
+ -0.11664755642414093,
+ -0.35202375054359436,
+ -0.36483922600746155,
+ 0.1255616694688797,
+ 0.1251968890428543,
+ -0.3809102177619934,
+ 0.360446035861969,
+ 0.09347914159297943,
+ -0.00944456085562706,
+ 0.13234074413776398,
+ 0.38413938879966736,
+ -0.08355319499969482,
+ -0.07494863122701645,
+ -0.1270984411239624,
+ 0.12046545743942261,
+ 0.031215636059641838,
+ 0.283917635679245,
+ -0.22621837258338928,
+ -0.10765474289655685,
+ -0.05018395930528641,
+ 0.007415375206619501,
+ 0.06429027765989304,
+ 0.15102256834506989,
+ 0.12829619646072388,
+ -0.020383695140480995,
+ -0.036758534610271454,
+ -0.11159849166870117,
+ -0.08789849281311035,
+ 0.12911255657672882,
+ 0.01573832333087921,
+ -0.18406793475151062,
+ -0.3661337196826935,
+ 0.20229937136173248,
+ 0.04454140365123749,
+ -0.07747909426689148,
+ 0.03407933562994003,
+ 0.2451433390378952,
+ -0.05064184218645096,
+ -0.02676915004849434,
+ 0.3562154471874237,
+ 0.03936778008937836,
+ -0.17530842125415802,
+ -0.07972632348537445,
+ 0.0026791393756866455,
+ -0.040674030780792236,
+ 0.06923139095306396,
+ -0.1464168280363083,
+ -0.1968105435371399,
+ -0.12205876410007477,
+ 0.09740330278873444,
+ -0.3500618636608124,
+ 0.06116318702697754,
+ 0.025653913617134094,
+ 0.026904746890068054,
+ 0.07573847472667694,
+ -0.012444796040654182,
+ 0.011047989130020142,
+ -0.0967923030257225,
+ 0.019441261887550354,
+ 0.10574030876159668,
+ -0.34123894572257996,
+ 0.035743433982133865,
+ -0.09674933552742004,
+ -0.25610029697418213,
+ 0.14810211956501007,
+ -0.14422498643398285,
+ 0.043499890714883804,
+ 0.04519820213317871,
+ -0.06807196140289307,
+ 0.0236203670501709,
+ -0.10907566547393799,
+ 0.034706130623817444,
+ 0.07019686698913574,
+ -0.32806044816970825,
+ -0.07895952463150024,
+ 0.08137988299131393,
+ -0.033785149455070496,
+ 0.047107137739658356,
+ 0.024663634598255157,
+ -0.10297558456659317,
+ 0.09862454235553741,
+ 0.3467845022678375,
+ 0.018742557615041733,
+ -0.1172918975353241,
+ 0.1425522416830063,
+ 0.02333802729845047,
+ -0.0657871887087822,
+ 0.005717810243368149,
+ 0.005799718201160431,
+ 0.12678202986717224,
+ 0.02564946562051773,
+ -0.11743289232254028,
+ -0.034194327890872955,
+ -0.29518425464630127,
+ 0.053442761301994324,
+ -0.25245940685272217,
+ -0.06523191183805466,
+ -0.07299986481666565,
+ -0.06006929278373718,
+ -0.013551868498325348,
+ -0.001416967250406742,
+ -0.0068840887397527695,
+ -0.3139260709285736,
+ 0.02586068958044052,
+ -0.018316034227609634,
+ -0.058623477816581726,
+ -0.003457404673099518,
+ 0.05847764015197754,
+ 0.05201653391122818,
+ -0.007582411170005798,
+ -0.24342606961727142,
+ -0.09110108017921448,
+ 0.028537066653370857,
+ -0.004813693463802338,
+ -0.26205044984817505,
+ 0.02813364565372467,
+ -0.023644335567951202,
+ 0.05865045636892319,
+ -0.10463105142116547,
+ 0.2058057188987732,
+ 0.01688055321574211,
+ 0.018313296139240265,
+ 0.008065491914749146,
+ 0.035032302141189575,
+ -0.06539855152368546,
+ 0.0025829486548900604,
+ 0.04494538530707359,
+ 0.16758787631988525,
+ -0.2539977729320526,
+ 0.01861993782222271,
+ -0.1306481808423996,
+ 0.0950707197189331,
+ -0.013152604922652245,
+ 0.009537570178508759,
+ 0.035489656031131744,
+ 0.047833822667598724,
+ -0.016572464257478714,
+ -0.12069139629602432,
+ 0.002328811213374138,
+ 0.04854089766740799,
+ -0.0185052789747715,
+ 0.050754763185977936,
+ 0.003845077008008957,
+ 0.0062447600066661835,
+ 0.022916674613952637,
+ 0.0360400564968586,
+ -0.006708836182951927,
+ 0.0402669794857502,
+ 0.010295823216438293,
+ -0.006546054035425186,
+ 0.0025092000141739845,
+ -0.009739726781845093,
+ 0.05359366536140442,
+ -0.01901191473007202,
+ 0.013321876525878906,
+ -0.020110517740249634,
+ -0.047452546656131744,
+ -0.02735402062535286,
+ -0.014164309948682785,
+ 0.03844656050205231,
+ -0.05418328195810318,
+ 0.013757157139480114,
+ -0.0227963849902153,
+ 0.0451679565012455,
+ -0.023626532405614853,
+ 0.0317029170691967,
+ 0.12410106509923935,
+ -0.023852989077568054,
+ 0.04490052908658981,
+ -0.011871240101754665,
+ -0.015537332743406296,
+ -0.27054253220558167,
+ 0.018203571438789368,
+ 0.028964772820472717,
+ -0.003254372626543045,
+ -0.007085427641868591,
+ 0.021512102335691452,
+ 0.10553969442844391,
+ -0.039854712784290314
+ ],
+ "z": [
+ 16.934005737304688,
+ 29.324642181396484,
+ 1.6329689025878906,
+ 1.6461281776428223,
+ 10.245269775390625,
+ 1.2487258911132812,
+ 0.8600143194198608,
+ 0.1211313009262085,
+ -0.272579550743103,
+ 0.5000199675559998,
+ 4.913707733154297,
+ -6.6543073654174805,
+ 0.11539880931377411,
+ 0.2234395146369934,
+ -5.956740379333496,
+ 0.059739142656326294,
+ -3.623108148574829,
+ 0.1335909068584442,
+ 0.06866855174303055,
+ 2.4196970462799072,
+ 2.293219566345215,
+ 0.19950802624225616,
+ -0.48167550563812256,
+ 0.04972586780786514,
+ -0.6224935054779053,
+ 2.0360488891601562,
+ -0.4550785422325134,
+ -0.08775391429662704,
+ -2.623530864715576,
+ 0.3929612934589386,
+ 0.018656756728887558,
+ -0.01752334088087082,
+ -0.173678457736969,
+ 0.007063612341880798,
+ 0.20077374577522278,
+ 0.2358059287071228,
+ 0.3935275375843048,
+ -0.03093075007200241,
+ 0.02484121173620224,
+ 2.4783079624176025,
+ 1.3881701231002808,
+ 0.09915456175804138,
+ -0.10656123608350754,
+ 0.16426044702529907,
+ -0.016387131065130234,
+ -1.4773920774459839,
+ -1.7871227264404297,
+ -1.287170648574829,
+ -0.031902015209198,
+ -0.6962382197380066,
+ 0.011911185458302498,
+ 0.07231125235557556,
+ 0.07150933146476746,
+ 0.2512466609477997,
+ -0.013713855296373367,
+ -0.03628021478652954,
+ -0.4510926306247711,
+ 1.140985369682312,
+ -0.21302542090415955,
+ -0.045295774936676025,
+ 0.15639646351337433,
+ 1.59432053565979,
+ 0.3248116075992584,
+ -0.35758256912231445,
+ 0.01771138608455658,
+ 0.7627900838851929,
+ 0.34328493475914,
+ 0.23892438411712646,
+ -0.12342536449432373,
+ -0.32775118947029114,
+ -0.18251806497573853,
+ -0.49373385310173035,
+ 0.0559140108525753,
+ 1.260310173034668,
+ 0.07653127610683441,
+ 0.20805004239082336,
+ 0.1421893984079361,
+ -1.067915678024292,
+ 0.081154465675354,
+ -0.009983764961361885,
+ 0.09843280911445618,
+ -0.17755001783370972,
+ -0.1929617077112198,
+ 0.14817342162132263,
+ -0.008570626378059387,
+ -0.026238270103931427,
+ 0.06148534640669823,
+ -0.06926185637712479,
+ 1.212209701538086,
+ -0.33802565932273865,
+ 0.017878059297800064,
+ -0.07358194887638092,
+ -0.053463131189346313,
+ 0.009474970400333405,
+ -0.037121593952178955,
+ 1.0548614263534546,
+ 0.040771063417196274,
+ -0.018346257507801056,
+ 0.6529847979545593,
+ 0.7484455108642578,
+ -0.27240321040153503,
+ -0.08486877381801605,
+ -0.017236441373825073,
+ 0.22752264142036438,
+ 0.30352622270584106,
+ 0.4987502992153168,
+ 0.8795862197875977,
+ -0.01854146644473076,
+ 0.033648550510406494,
+ 0.047080617398023605,
+ -0.02453210949897766,
+ -0.30032992362976074,
+ 0.4527944326400757,
+ -0.30011552572250366,
+ -0.15293514728546143,
+ -0.028545424342155457,
+ 0.06060219928622246,
+ 0.41089436411857605,
+ -0.059685081243515015,
+ -0.026073642075061798,
+ 0.4119086265563965,
+ -0.2562134265899658,
+ -0.0075821056962013245,
+ -0.051130786538124084,
+ 0.4985712468624115,
+ 0.6703544855117798,
+ 0.004010587930679321,
+ -0.011701047420501709,
+ -0.043777741491794586,
+ -0.033738747239112854,
+ 0.5023496150970459,
+ 0.004548918455839157,
+ 0.38430488109588623,
+ -0.03894048184156418,
+ 0.23705267906188965,
+ 0.09033466875553131,
+ 0.1728883981704712,
+ -0.03455973416566849,
+ -0.6334809064865112,
+ 0.07378696650266647,
+ 0.011462215334177017,
+ 0.0403888076543808,
+ 0.4139549732208252,
+ 0.18187186121940613,
+ -0.14739340543746948,
+ -0.03550306707620621,
+ -0.041997626423835754,
+ -0.03709228336811066,
+ 0.011460080742835999,
+ 0.04897792637348175,
+ -0.022002261132001877,
+ -0.2015048861503601,
+ -0.383110374212265,
+ -0.1608130931854248,
+ -0.012913325801491737,
+ 0.06318163871765137,
+ 0.06815429031848907,
+ -0.021079346537590027,
+ -0.4206259548664093,
+ -0.37488484382629395,
+ 0.3491401970386505,
+ -0.027882635593414307,
+ 0.0023272372782230377,
+ 0.03868488967418671,
+ -0.02854609489440918,
+ -0.2040747106075287,
+ -0.02022966369986534,
+ -0.055367521941661835,
+ 0.3735021948814392,
+ -0.10776666551828384,
+ -0.23825973272323608,
+ -0.05463423579931259,
+ 0.5472646951675415,
+ -0.022801809012889862,
+ 0.019406557083129883,
+ 0.05731916427612305,
+ -0.031002052128314972,
+ -0.01629875972867012,
+ 0.41086870431900024,
+ -0.027547195553779602,
+ 0.034790970385074615,
+ 0.1792594939470291,
+ 0.17878663539886475,
+ 0.04149293899536133,
+ 0.06571963429450989,
+ -0.016515761613845825,
+ -0.0277192872017622,
+ 0.16277435421943665,
+ 0.020906049758195877,
+ -0.008417649194598198,
+ -0.0053132157772779465,
+ 0.209367036819458,
+ -0.008367877453565598,
+ -0.20157325267791748,
+ -0.025798825547099113,
+ -0.007884498685598373,
+ 0.2972039580345154,
+ -0.16270066797733307,
+ -0.033034004271030426,
+ 0.18459807336330414,
+ -0.030292581766843796,
+ -0.023575162515044212,
+ -0.045117005705833435,
+ 0.4390559792518616,
+ -0.029419880360364914,
+ 0.05676189064979553,
+ -0.3105788826942444,
+ -0.3331488370895386,
+ -0.3605833649635315,
+ 0.05214318633079529,
+ 0.053797200322151184,
+ -0.11211633682250977,
+ -0.12172768265008926,
+ 0.04860451817512512,
+ 0.21482759714126587,
+ 0.001030251383781433,
+ -0.0679427981376648,
+ -0.016557499766349792,
+ 0.3949545621871948,
+ -0.019975917413830757
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 37
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "clustering.ipynb",
+ "id": "67e8075635fc7b15"
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T15:18:32.585983Z",
+ "start_time": "2025-01-20T15:18:32.572863Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "result[\"pt\"][result[\"event_idx\"]==6]",
+ "id": "c2112079f56bb616",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([159.5000, 34.9688, 18.3594, 17.5781, 13.1641, 12.6797, 9.2188,\n",
+ " 8.4844, 8.2344, 7.2305, 7.0664, 6.5117, 5.5039, 5.3633,\n",
+ " 5.2617, 4.3125, 4.0234, 3.9941, 3.8848, 3.6699, 3.5000,\n",
+ " 3.4492, 3.4316, 3.4062, 3.2285, 3.0859, 3.0352, 2.8477,\n",
+ " 2.7227, 2.7070, 2.6484, 2.6309, 2.6035, 2.5156, 2.4785,\n",
+ " 2.4375, 2.3535, 2.3008, 2.3008, 2.2324, 2.2031, 2.1953,\n",
+ " 2.1641, 2.1543, 2.0938, 2.0684, 2.0684, 2.0469, 2.0410,\n",
+ " 2.0176, 1.9922, 1.9561, 1.9531, 1.9297, 1.8818, 1.8291,\n",
+ " 1.7568, 1.7373, 1.7119, 1.7070, 1.7002, 1.6611, 1.6611,\n",
+ " 1.6348, 1.6328, 1.6318, 1.6279, 1.6152, 1.5898, 1.5312,\n",
+ " 1.5273, 1.5098, 1.5039, 1.4941, 1.4902, 1.4863, 1.4668,\n",
+ " 1.4570, 1.4268, 1.3740, 1.3594, 1.3438, 1.3389, 1.3330,\n",
+ " 1.3154, 1.3086, 1.2773, 1.2754, 1.2715, 1.2568, 1.2314,\n",
+ " 1.2305, 1.2217, 1.2207, 1.2188, 1.2119, 1.1992, 1.1826,\n",
+ " 1.1807, 1.1797, 1.1777, 1.1748, 1.1553, 1.1523, 1.1445,\n",
+ " 1.0859, 1.0811, 1.0811, 1.0801, 1.0723, 1.0703, 1.0615,\n",
+ " 1.0586, 1.0586, 1.0557, 1.0479, 1.0459, 1.0420, 1.0391,\n",
+ " 1.0391, 1.0332, 1.0303, 1.0234, 1.0107, 1.0098, 0.9907,\n",
+ " 0.9893, 0.9819, 0.9814, 0.9771, 0.9653, 0.9624, 0.9609,\n",
+ " 0.9570, 0.9526, 0.9482, 0.9453, 0.9380, 0.9297, 0.9170,\n",
+ " 0.9072, 0.8955, 0.8931, 0.8906, 0.8809, 0.8784, 0.8774,\n",
+ " 0.8765, 0.8750, 0.8696, 0.8574, 0.8564, 0.8564, 0.8545,\n",
+ " 0.8525, 0.8486, 0.8418, 0.8232, 0.8159, 0.8042, 0.8032,\n",
+ " 0.8022, 0.7988, 0.7817, 0.7764, 0.7759, 0.7759, 0.7695,\n",
+ " 0.7617, 0.7603, 0.7583, 0.7573, 0.7510, 0.7427, 0.7378,\n",
+ " 0.7368, 0.7363, 0.7334, 0.7207, 0.7144, 0.7139, 0.7114,\n",
+ " 0.7100, 0.7031, 0.7012, 0.6953, 0.6909, 0.6890, 0.6851,\n",
+ " 0.6846, 0.6826, 0.6816, 0.6699, 0.6538, 0.6533, 0.6514,\n",
+ " 0.6489, 0.6479, 0.6479, 0.6475, 0.6470, 0.6450, 0.6406,\n",
+ " 0.6392, 0.6382, 0.6348, 0.6338, 0.6304, 0.6279, 0.6260,\n",
+ " 0.6240, 0.6216, 0.6206, 0.6187, 0.6152, 0.6138, 0.6108,\n",
+ " 0.6104, 0.6084, 0.6006])"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 39
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T15:19:21.065491Z",
+ "start_time": "2025-01-20T15:19:20.974966Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "plot_coordinates(dataset[6].pfcands.pxyz, torch.tensor(result[\"pt\"][filt]), torch.tensor(result[\"GT_cluster\"][filt])).show()\n",
+ "id": "6e2a07e42eca8496",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[('X', (220, 1)), ('Y', (220, 1)), ('Z', (220, 1)), ('tIdx', (220, 1)), ('pt', (220, 1))]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/tmp/ipykernel_48257/919745444.py:1: UserWarning:\n",
+ "\n",
+ "To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0
+ ],
+ "coloraxis": "coloraxis",
+ "size": [
+ 159.5,
+ 34.96875,
+ 18.359375,
+ 17.578125,
+ 13.1640625,
+ 12.6796875,
+ 9.21875,
+ 8.484375,
+ 8.234375,
+ 7.23046875,
+ 7.06640625,
+ 6.51171875,
+ 5.50390625,
+ 5.36328125,
+ 5.26171875,
+ 4.3125,
+ 4.0234375,
+ 3.994140625,
+ 3.884765625,
+ 3.669921875,
+ 3.5,
+ 3.44921875,
+ 3.431640625,
+ 3.40625,
+ 3.228515625,
+ 3.0859375,
+ 3.03515625,
+ 2.84765625,
+ 2.72265625,
+ 2.70703125,
+ 2.6484375,
+ 2.630859375,
+ 2.603515625,
+ 2.515625,
+ 2.478515625,
+ 2.4375,
+ 2.353515625,
+ 2.30078125,
+ 2.30078125,
+ 2.232421875,
+ 2.203125,
+ 2.1953125,
+ 2.1640625,
+ 2.154296875,
+ 2.09375,
+ 2.068359375,
+ 2.068359375,
+ 2.046875,
+ 2.041015625,
+ 2.017578125,
+ 1.9921875,
+ 1.9560546875,
+ 1.953125,
+ 1.9296875,
+ 1.8818359375,
+ 1.8291015625,
+ 1.7568359375,
+ 1.7373046875,
+ 1.7119140625,
+ 1.70703125,
+ 1.7001953125,
+ 1.6611328125,
+ 1.6611328125,
+ 1.634765625,
+ 1.6328125,
+ 1.6318359375,
+ 1.6279296875,
+ 1.615234375,
+ 1.58984375,
+ 1.53125,
+ 1.52734375,
+ 1.509765625,
+ 1.50390625,
+ 1.494140625,
+ 1.490234375,
+ 1.486328125,
+ 1.466796875,
+ 1.45703125,
+ 1.4267578125,
+ 1.3740234375,
+ 1.359375,
+ 1.34375,
+ 1.3388671875,
+ 1.3330078125,
+ 1.3154296875,
+ 1.30859375,
+ 1.27734375,
+ 1.275390625,
+ 1.271484375,
+ 1.2568359375,
+ 1.2314453125,
+ 1.23046875,
+ 1.2216796875,
+ 1.220703125,
+ 1.21875,
+ 1.2119140625,
+ 1.19921875,
+ 1.1826171875,
+ 1.1806640625,
+ 1.1796875,
+ 1.177734375,
+ 1.1748046875,
+ 1.1552734375,
+ 1.15234375,
+ 1.14453125,
+ 1.0859375,
+ 1.0810546875,
+ 1.0810546875,
+ 1.080078125,
+ 1.072265625,
+ 1.0703125,
+ 1.0615234375,
+ 1.05859375,
+ 1.05859375,
+ 1.0556640625,
+ 1.0478515625,
+ 1.0458984375,
+ 1.0419921875,
+ 1.0390625,
+ 1.0390625,
+ 1.033203125,
+ 1.0302734375,
+ 1.0234375,
+ 1.0107421875,
+ 1.009765625,
+ 0.99072265625,
+ 0.9892578125,
+ 0.98193359375,
+ 0.9814453125,
+ 0.97705078125,
+ 0.96533203125,
+ 0.96240234375,
+ 0.9609375,
+ 0.95703125,
+ 0.95263671875,
+ 0.9482421875,
+ 0.9453125,
+ 0.93798828125,
+ 0.9296875,
+ 0.9169921875,
+ 0.9072265625,
+ 0.8955078125,
+ 0.89306640625,
+ 0.890625,
+ 0.880859375,
+ 0.87841796875,
+ 0.87744140625,
+ 0.87646484375,
+ 0.875,
+ 0.86962890625,
+ 0.857421875,
+ 0.8564453125,
+ 0.8564453125,
+ 0.8544921875,
+ 0.8525390625,
+ 0.8486328125,
+ 0.841796875,
+ 0.8232421875,
+ 0.81591796875,
+ 0.80419921875,
+ 0.80322265625,
+ 0.80224609375,
+ 0.798828125,
+ 0.78173828125,
+ 0.7763671875,
+ 0.77587890625,
+ 0.77587890625,
+ 0.76953125,
+ 0.76171875,
+ 0.76025390625,
+ 0.75830078125,
+ 0.75732421875,
+ 0.7509765625,
+ 0.74267578125,
+ 0.73779296875,
+ 0.73681640625,
+ 0.736328125,
+ 0.7333984375,
+ 0.720703125,
+ 0.71435546875,
+ 0.7138671875,
+ 0.71142578125,
+ 0.7099609375,
+ 0.703125,
+ 0.701171875,
+ 0.6953125,
+ 0.69091796875,
+ 0.68896484375,
+ 0.68505859375,
+ 0.6845703125,
+ 0.6826171875,
+ 0.681640625,
+ 0.669921875,
+ 0.65380859375,
+ 0.6533203125,
+ 0.6513671875,
+ 0.64892578125,
+ 0.64794921875,
+ 0.64794921875,
+ 0.6474609375,
+ 0.64697265625,
+ 0.64501953125,
+ 0.640625,
+ 0.63916015625,
+ 0.63818359375,
+ 0.634765625,
+ 0.6337890625,
+ 0.63037109375,
+ 0.6279296875,
+ 0.6259765625,
+ 0.6240234375,
+ 0.62158203125,
+ 0.62060546875,
+ 0.61865234375,
+ 0.615234375,
+ 0.61376953125,
+ 0.61083984375,
+ 0.6103515625,
+ 0.6083984375,
+ 0.6005859375
+ ],
+ "sizemode": "area",
+ "sizeref": 0.39875,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ -4.12793493270874,
+ -34.39967727661133,
+ -0.6185178756713867,
+ -0.07732567191123962,
+ -12.99765682220459,
+ 0.37755414843559265,
+ -0.004542407114058733,
+ -0.3686274290084839,
+ 1.4518446922302246,
+ 0.6662861704826355,
+ -6.943850040435791,
+ 6.510962963104248,
+ -0.08870667219161987,
+ 1.1408414840698242,
+ -0.8112109303474426,
+ -0.09897902607917786,
+ -3.9989686012268066,
+ 0.02533547207713127,
+ 0.2596585750579834,
+ -3.6114792823791504,
+ -3.4430415630340576,
+ -0.9427974224090576,
+ -0.6413302421569824,
+ 0.1479637771844864,
+ -2.338512659072876,
+ -3.050656795501709,
+ -2.8031342029571533,
+ 0.6328779458999634,
+ 1.1715459823608398,
+ -0.6351057887077332,
+ 0.5152474641799927,
+ -0.37002992630004883,
+ 0.06735702604055405,
+ 0.5014517903327942,
+ -0.6704810857772827,
+ 1.5660808086395264,
+ -1.8174329996109009,
+ 0.5419580340385437,
+ 0.5615896582603455,
+ -1.5774143934249878,
+ -2.202998161315918,
+ -1.013720154762268,
+ -0.9804973006248474,
+ 0.22154946625232697,
+ 0.562439501285553,
+ -1.9599592685699463,
+ 0.656032383441925,
+ -0.14879590272903442,
+ 1.4603742361068726,
+ -2.0156309604644775,
+ 0.5013442635536194,
+ -0.10025078803300858,
+ 0.9018709659576416,
+ -1.7374249696731567,
+ -0.2937577962875366,
+ 0.13651154935359955,
+ -1.735702395439148,
+ 0.5138875246047974,
+ 1.1869324445724487,
+ -0.2565864324569702,
+ -1.6213911771774292,
+ 1.6610350608825684,
+ -1.4708079099655151,
+ -1.1774863004684448,
+ 0.2941655218601227,
+ -1.6222596168518066,
+ -1.5894825458526611,
+ 0.6836154460906982,
+ -1.0740110874176025,
+ -0.057564664632081985,
+ -1.4912723302841187,
+ 0.5755434036254883,
+ 0.15612362325191498,
+ 0.9843525290489197,
+ 0.9768427610397339,
+ -0.5234110951423645,
+ 1.4542791843414307,
+ -0.1526854783296585,
+ -0.49982431530952454,
+ -1.341572880744934,
+ -0.12792165577411652,
+ 1.294181227684021,
+ 1.120571255683899,
+ -0.900506854057312,
+ -1.3026256561279297,
+ -0.3931867480278015,
+ -1.251834511756897,
+ -1.1640820503234863,
+ 0.5672034025192261,
+ 0.025153987109661102,
+ 0.19934359192848206,
+ -0.16949543356895447,
+ -0.9613374471664429,
+ 1.191710114479065,
+ 1.122589349746704,
+ 1.131553053855896,
+ 1.1968128681182861,
+ 0.05137159675359726,
+ -0.8893681764602661,
+ -1.1752355098724365,
+ 0.4500316083431244,
+ 0.2622131407260895,
+ 1.1541857719421387,
+ -0.24952532351016998,
+ -0.27069488167762756,
+ 0.1841556578874588,
+ -0.49356701970100403,
+ 1.03094482421875,
+ 0.7143377065658569,
+ 0.8250175714492798,
+ -0.23176249861717224,
+ 0.9421731233596802,
+ -1.029413104057312,
+ -0.8081961870193481,
+ 0.1688535362482071,
+ 0.13723281025886536,
+ -0.20047980546951294,
+ -1.0108482837677002,
+ 0.2249867022037506,
+ -0.04514498636126518,
+ -0.7083249688148499,
+ 0.22995415329933167,
+ 0.11717339605093002,
+ 0.9279888272285461,
+ 0.26078730821609497,
+ -0.14317545294761658,
+ 0.7294012904167175,
+ 0.7502824068069458,
+ 0.9339855909347534,
+ -0.7207288146018982,
+ -0.31689465045928955,
+ -0.20839597284793854,
+ 0.6327207088470459,
+ -0.6241544485092163,
+ -0.13490919768810272,
+ 0.16354209184646606,
+ 0.599541962146759,
+ 0.14369834959506989,
+ -0.7026962041854858,
+ 0.2609589397907257,
+ 0.487190842628479,
+ 0.8934829235076904,
+ -0.8906726837158203,
+ 0.076006680727005,
+ -0.8032786846160889,
+ -0.6291242837905884,
+ 0.2611800730228424,
+ 0.5920856595039368,
+ -0.32406696677207947,
+ 0.09703242778778076,
+ 0.6950924396514893,
+ -0.5102196931838989,
+ -0.222005233168602,
+ 0.8150096535682678,
+ 0.6067954301834106,
+ 0.5446067452430725,
+ 0.5265469551086426,
+ -0.5007103085517883,
+ 0.6686011552810669,
+ -0.24537621438503265,
+ 0.323517769575119,
+ -0.7865349650382996,
+ 0.2563258707523346,
+ -0.7362639307975769,
+ 0.1695857048034668,
+ 0.20038248598575592,
+ 0.2746374309062958,
+ 0.6489536762237549,
+ 0.4084237515926361,
+ -0.45172104239463806,
+ 0.7198478579521179,
+ 0.7062424421310425,
+ -0.3178417980670929,
+ 0.6656503081321716,
+ -0.7069792747497559,
+ 0.10077623277902603,
+ -0.26936522126197815,
+ 0.098179891705513,
+ -0.1854586899280548,
+ 0.5889520645141602,
+ -0.15457883477210999,
+ -0.6870209574699402,
+ -0.3004824221134186,
+ -0.6238359808921814,
+ -0.656621515750885,
+ -0.15188658237457275,
+ -0.5833857655525208,
+ -0.6288359761238098,
+ -0.6008774042129517,
+ 0.04108657315373421,
+ 0.35069239139556885,
+ 0.6790277361869812,
+ 0.20999924838542938,
+ 0.3749932646751404,
+ -0.09504661709070206,
+ 0.0789966955780983,
+ 0.6485247611999512,
+ -0.2742367088794708,
+ 0.5409148335456848,
+ 0.5866796970367432,
+ -0.03315833583474159,
+ 0.41030457615852356,
+ 0.625477135181427,
+ -0.6142215728759766,
+ -0.5989366769790649,
+ 0.39849740266799927,
+ -0.632266640663147,
+ -0.5529099702835083,
+ -0.6041032075881958,
+ 0.18807879090309143,
+ 0.6228002905845642,
+ 0.5112594366073608,
+ 0.3015126883983612,
+ -0.4223620593547821,
+ 0.6076338887214661,
+ 0.5994020700454712,
+ 0.4846867620944977,
+ -0.6090458631515503,
+ -0.5111470818519592,
+ -0.025508172810077667
+ ],
+ "y": [
+ 159.44656372070312,
+ 6.282978534698486,
+ 18.348953247070312,
+ 17.577957153320312,
+ 2.0864977836608887,
+ 12.674065589904785,
+ 9.218749046325684,
+ 8.476363182067871,
+ -8.10537338256836,
+ 7.199704170227051,
+ 1.3103591203689575,
+ -0.09920806437730789,
+ 5.5031914710998535,
+ -5.240540981292725,
+ 5.198809623718262,
+ 4.31136417388916,
+ -0.4430564045906067,
+ 3.994060516357422,
+ -3.8760783672332764,
+ 0.6523374915122986,
+ 0.6288594007492065,
+ -3.3178672790527344,
+ -3.3711793422698975,
+ 3.4030349254608154,
+ -2.2259089946746826,
+ 0.4653008282184601,
+ 1.1638777256011963,
+ -2.7764387130737305,
+ 2.457709789276123,
+ -2.631474494934082,
+ -2.5978341102600098,
+ 2.6047072410583496,
+ -2.602644205093384,
+ -2.465139865875244,
+ -2.3861045837402344,
+ -1.8678319454193115,
+ 1.495316982269287,
+ -2.2360401153564453,
+ -2.2311906814575195,
+ -1.579705834388733,
+ -0.02364630252122879,
+ -1.9472461938858032,
+ -1.929194450378418,
+ -2.142874240875244,
+ -2.0167922973632812,
+ 0.6608107686042786,
+ -1.9615637063980103,
+ 2.041459560394287,
+ -1.4258513450622559,
+ -0.08861660212278366,
+ -1.9280728101730347,
+ 1.9534841775894165,
+ -1.7324336767196655,
+ -0.8396713733673096,
+ 1.8587664365768433,
+ -1.824000358581543,
+ 0.27167966961860657,
+ 1.6595624685287476,
+ -1.2336292266845703,
+ 1.6876370906829834,
+ -0.5116194486618042,
+ 0.0179959274828434,
+ 0.7720663547515869,
+ 1.1340124607086182,
+ -1.6060956716537476,
+ -0.17652781307697296,
+ -0.35171011090278625,
+ -1.4634382724761963,
+ -1.1722215414047241,
+ 1.5301676988601685,
+ 0.3299787938594818,
+ -1.3957586288452148,
+ -1.4957804679870605,
+ 1.1240580081939697,
+ -1.1254229545593262,
+ -1.3911190032958984,
+ 0.1912192404270172,
+ 1.4490091800689697,
+ 1.3363434076309204,
+ 0.29685431718826294,
+ 1.3533426523208618,
+ 0.3616063594818115,
+ -0.7327248454093933,
+ -0.9828516244888306,
+ -0.18308961391448975,
+ -1.2481273412704468,
+ 0.2540023624897003,
+ -0.5210896134376526,
+ -1.1379599571228027,
+ -1.2565842866897583,
+ -1.2152034044265747,
+ -1.2187390327453613,
+ -0.7538775205612183,
+ -0.26446789503097534,
+ -0.47449395060539246,
+ 0.4339624345302582,
+ -0.07592508941888809,
+ 1.1815009117126465,
+ -0.7765255570411682,
+ 0.10239192843437195,
+ 1.088361144065857,
+ -1.1451681852340698,
+ 0.05011850595474243,
+ -1.125003695487976,
+ -1.1120593547821045,
+ 1.0702089071273804,
+ -0.9618059992790222,
+ -0.32531803846359253,
+ -0.8101174235343933,
+ 0.6849085092544556,
+ -1.0449185371398926,
+ -0.48902130126953125,
+ 0.24683888256549835,
+ 0.6836955547332764,
+ -1.0420724153518677,
+ 1.0388263463974,
+ -1.0265045166015625,
+ -0.252851277589798,
+ 1.0144120454788208,
+ -1.038081407546997,
+ -0.7521864771842957,
+ 1.00428307056427,
+ 1.0167077779769897,
+ -0.4005454182624817,
+ -0.9755083918571472,
+ 0.9803224802017212,
+ 0.6682850122451782,
+ 0.6334586143493652,
+ -0.30150607228279114,
+ -0.6596803665161133,
+ 0.9118353128433228,
+ -0.939568817615509,
+ -0.723232626914978,
+ 0.7254928350448608,
+ -0.9430357217788696,
+ -0.9340327382087708,
+ -0.7308660745620728,
+ 0.9269156455993652,
+ -0.6087174415588379,
+ 0.8790763020515442,
+ 0.7653137445449829,
+ -0.060187119990587234,
+ -0.06534374505281448,
+ -0.8873758912086487,
+ 0.3614645004272461,
+ 0.6130421757698059,
+ 0.8376683592796326,
+ 0.646239161491394,
+ -0.8127764463424683,
+ -0.8641985058784485,
+ -0.5020146369934082,
+ -0.6878767609596252,
+ -0.8271712064743042,
+ 0.2567414343357086,
+ -0.5988506078720093,
+ -0.6508310437202454,
+ -0.6567878127098083,
+ 0.6534653306007385,
+ 0.4676479399204254,
+ -0.7658504843711853,
+ 0.7351889610290527,
+ -0.15799234807491302,
+ -0.7565867304801941,
+ 0.262736052274704,
+ -0.7576191425323486,
+ -0.7495564818382263,
+ -0.7256461977958679,
+ -0.4135666489601135,
+ 0.642966091632843,
+ -0.6115015149116516,
+ 0.23840951919555664,
+ -0.2734256684780121,
+ 0.68039870262146,
+ -0.3293585181236267,
+ -0.21099485456943512,
+ -0.7298921346664429,
+ -0.6852893233299255,
+ 0.7267971038818359,
+ -0.6964324116706848,
+ -0.40427619218826294,
+ -0.6969301700592041,
+ -0.18474002182483673,
+ 0.643237829208374,
+ -0.32436618208885193,
+ 0.24594764411449432,
+ 0.6785203218460083,
+ -0.3701739013195038,
+ -0.28149208426475525,
+ -0.32901617884635925,
+ -0.6833361983299255,
+ -0.585645854473114,
+ -0.059625498950481415,
+ 0.6361568570137024,
+ 0.5355798602104187,
+ -0.6463695168495178,
+ 0.6465591788291931,
+ -0.022809097543358803,
+ -0.5870540738105774,
+ 0.35672029852867126,
+ -0.2738841772079468,
+ 0.6461223363876343,
+ -0.4976949989795685,
+ 0.13848735392093658,
+ -0.1767980009317398,
+ 0.22034785151481628,
+ 0.49409228563308716,
+ 0.043903522193431854,
+ 0.3027511537075043,
+ -0.17133308947086334,
+ -0.5970536470413208,
+ -0.03905210271477699,
+ -0.35352230072021484,
+ -0.5424400568008423,
+ -0.4520409405231476,
+ 0.09640730917453766,
+ -0.1320234090089798,
+ 0.37175804376602173,
+ 0.03990119695663452,
+ 0.3299656808376312,
+ -0.6000440120697021
+ ],
+ "z": [
+ 61.14083480834961,
+ 109.97122955322266,
+ 7.215564727783203,
+ 7.334517478942871,
+ 41.73957061767578,
+ 6.029707908630371,
+ 4.626885890960693,
+ 0.7752528786659241,
+ -1.7806880474090576,
+ 3.4755589962005615,
+ 21.793861389160156,
+ -28.59650993347168,
+ 0.8492100834846497,
+ 2.297551155090332,
+ -25.997623443603516,
+ 1.1710225343704224,
+ -16.87262535095215,
+ 1.1058084964752197,
+ 0.579244077205658,
+ 11.780083656311035,
+ 11.246148109436035,
+ 1.6058093309402466,
+ -3.5921437740325928,
+ 1.0644251108169556,
+ -5.177775859832764,
+ 10.151461601257324,
+ -4.433924674987793,
+ -0.6300406455993652,
+ -12.82355785369873,
+ 4.111102104187012,
+ -0.5274890065193176,
+ 0.7163841128349304,
+ -2.716092348098755,
+ -0.08269701153039932,
+ 1.3216403722763062,
+ 1.5889374017715454,
+ 4.069220542907715,
+ 0.9018344283103943,
+ -0.391412615776062,
+ 12.039240837097168,
+ 7.41935396194458,
+ 1.781711220741272,
+ -0.6524865627288818,
+ 0.9034466743469238,
+ 0.44127538800239563,
+ -8.149513244628906,
+ -9.174704551696777,
+ -7.438782215118408,
+ 0.7621334195137024,
+ -5.311079978942871,
+ -0.04259136691689491,
+ 0.3027705252170563,
+ 1.1697030067443848,
+ 3.1521291732788086,
+ 0.38933804631233215,
+ 0.7855040431022644,
+ -4.533698558807373,
+ 6.735616683959961,
+ -1.1976650953292847,
+ 0.9826887249946594,
+ 2.23941969871521,
+ 8.422775268554688,
+ 4.00758171081543,
+ -2.76640248298645,
+ -0.09213370084762573,
+ 5.46195650100708,
+ 3.557032823562622,
+ 2.907904863357544,
+ -1.8647947311401367,
+ -4.0519700050354,
+ -2.4749655723571777,
+ -3.7872776985168457,
+ 0.1647256463766098,
+ 7.093734264373779,
+ -1.8194559812545776,
+ 3.5032808780670166,
+ 1.9343677759170532,
+ -6.501946926116943,
+ -1.7751282453536987,
+ 0.06405314058065414,
+ 0.3165855407714844,
+ -2.325961112976074,
+ -0.8704293966293335,
+ 1.9542534351348877,
+ 2.2462801933288574,
+ -0.5211724638938904,
+ 0.17439444363117218,
+ -0.292392373085022,
+ 6.843387603759766,
+ -3.438567876815796,
+ -0.18422462046146393,
+ -0.2947443127632141,
+ 1.0910518169403076,
+ 0.7317593097686768,
+ 0.6701875925064087,
+ 6.2685227394104,
+ -0.470370888710022,
+ -0.5842012166976929,
+ 4.931369781494141,
+ 5.067688941955566,
+ -2.963700771331787,
+ -0.3169282078742981,
+ -0.04669191688299179,
+ 2.5178756713867188,
+ 1.2257362604141235,
+ 3.525172710418701,
+ 5.625130653381348,
+ -0.043692268431186676,
+ -0.46555960178375244,
+ -0.6100335121154785,
+ 0.23787593841552734,
+ -1.4802660942077637,
+ 3.188589334487915,
+ -3.0724215507507324,
+ -0.509441614151001,
+ 0.4855785071849823,
+ -0.7738745212554932,
+ 2.76883864402771,
+ -1.3635772466659546,
+ 0.5195189714431763,
+ 2.7742621898651123,
+ -2.7577595710754395,
+ -0.02455144189298153,
+ 1.1486034393310547,
+ 3.9149115085601807,
+ 4.656937122344971,
+ 1.0383261442184448,
+ 0.06843826919794083,
+ 0.8771471977233887,
+ 0.39529815316200256,
+ 3.5153379440307617,
+ -0.6704369783401489,
+ 2.177493095397949,
+ 0.7719159126281738,
+ 0.7281505465507507,
+ -1.3414580821990967,
+ 0.5035542249679565,
+ 0.6679949760437012,
+ -4.8761444091796875,
+ -1.0225145816802979,
+ -0.7311757206916809,
+ -2.1196882724761963,
+ 2.656973361968994,
+ 0.518234372138977,
+ -3.136991262435913,
+ 0.7593696117401123,
+ 0.9752068519592285,
+ 0.8128414154052734,
+ -0.44922420382499695,
+ -0.8105602860450745,
+ 0.27320539951324463,
+ -0.5448623895645142,
+ -3.463963508605957,
+ -2.059335470199585,
+ -0.12764528393745422,
+ 0.19211140275001526,
+ -1.0394827127456665,
+ 1.0856672525405884,
+ -3.655606508255005,
+ -2.9078667163848877,
+ 1.1831400394439697,
+ 1.6322163343429565,
+ -0.4802280366420746,
+ 2.275926351547241,
+ 0.747655987739563,
+ -2.2988317012786865,
+ 0.2613760828971863,
+ 0.8071561455726624,
+ 1.343957543373108,
+ -0.2024041712284088,
+ -3.438488483428955,
+ -0.07272830605506897,
+ 3.9545109272003174,
+ 0.6813639402389526,
+ 2.0802032947540283,
+ -1.0636945962905884,
+ 0.9556541442871094,
+ 0.43755465745925903,
+ 2.1485953330993652,
+ 0.9282801747322083,
+ -0.7442314624786377,
+ 2.0626821517944336,
+ 2.0584352016448975,
+ -0.9227214455604553,
+ -1.612755537033081,
+ 0.2215515375137329,
+ -0.030013658106327057,
+ 2.889232635498047,
+ -0.8279802203178406,
+ -0.6055589914321899,
+ -0.6357957124710083,
+ 2.1857616901397705,
+ 0.47749122977256775,
+ -2.2516560554504395,
+ 0.04561474174261093,
+ 0.3451731503009796,
+ 0.8003113269805908,
+ -2.0692408084869385,
+ -0.4425398111343384,
+ 2.074037551879883,
+ -0.028124365955591202,
+ 0.07948871701955795,
+ 1.1533164978027344,
+ 2.7074100971221924,
+ -0.5179486870765686,
+ -1.3112627267837524,
+ -0.766014575958252,
+ -0.8960452079772949,
+ -2.3523616790771484,
+ -1.014356017112732,
+ -1.289072036743164,
+ -2.8241827487945557,
+ -0.1766979694366455,
+ -1.7120229005813599,
+ 0.5458309650421143,
+ -2.1791656017303467,
+ 0.9932394623756409,
+ 1.1185901165008545,
+ 1.3052642345428467,
+ 0.11618176102638245
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 45
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "5987e409c20461ad"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "name": "python3",
+ "language": "python",
+ "display_name": "Python 3 (ipykernel)"
+ }
+ },
+ "nbformat": 5,
+ "nbformat_minor": 9
+}
diff --git a/notebooks/clustering_multiple_models_comparison.ipynb b/notebooks/clustering_multiple_models_comparison.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..0f75758ce9d41cb60a43d546af8fbc6ef828c5c8
--- /dev/null
+++ b/notebooks/clustering_multiple_models_comparison.ipynb
@@ -0,0 +1,216 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-08T15:08:51.783187Z",
+ "start_time": "2025-01-08T15:08:51.767607Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import pickle\n",
+ "import torch\n",
+ "import os\n",
+ "import matplotlib.pyplot as plt\n",
+ "from src.utils.paths import get_path\n",
+ "from src.utils.utils import CPU_Unpickler\n",
+ "from pathlib import Path\n",
+ "from src.dataset.dataset import EventDataset\n",
+ "import numpy as np\n",
+ "from dotenv import load_dotenv\n",
+ "from src.plotting.plot_event import plot_event\n",
+ "from pathlib import Path\n",
+ "\n",
+ "load_dotenv()\n"
+ ],
+ "id": "862bda2d2f12153f",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 11
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-08T15:08:52.125770Z",
+ "start_time": "2025-01-08T15:08:52.114900Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "def get_properties(name):\n",
+ " # get mediator mass, dark quark mass, r_inv from the filename\n",
+ " parts = name.strip().strip(\"/\").split(\"/\")[-1].split(\"_\")\n",
+ " mMed = int(parts[1].split(\"-\")[1])\n",
+ " mDark = int(parts[2].split(\"-\")[1])\n",
+ " rinv = float(parts[3].split(\"-\")[1])\n",
+ " return mMed, mDark, rinv\n"
+ ],
+ "id": "9087767e438ba4e7",
+ "outputs": [],
+ "execution_count": 12
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-08T15:08:52.809396Z",
+ "start_time": "2025-01-08T15:08:52.803996Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "clist = ['#1f78b4', '#b3df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbe6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928']\n",
+ "colors = {\n",
+ " -1: \"gray\",\n",
+ " 0: clist[0],\n",
+ " 1: clist[1],\n",
+ " 2: clist[2],\n",
+ " 3: clist[3],\n",
+ " 4: clist[4],\n",
+ " 5: clist[5],\n",
+ " 6: clist[6],\n",
+ " 7: clist[7],\n",
+ "}\n"
+ ],
+ "id": "349e83cf3a97bbd6",
+ "outputs": [],
+ "execution_count": 13
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-08T15:10:27.113735Z",
+ "start_time": "2025-01-08T15:10:01.537774Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "models = {\n",
+ " \"GATr_rinv_03_m_900\": \"train/Test_betaPt_BC_all_datasets_2025_01_07_17_50_45\",\n",
+ " \"GATr_rinv_07_m_900\": \"train/Test_betaPt_BC_all_datasets_2025_01_08_10_54_58\"\n",
+ "}\n",
+ "\n",
+ "output_path = get_path(\"scouting_PFNano_signals2/SVJ_hadronic_std/clustering_model_comparison\", \"results\")\n",
+ "\n",
+ "Path(output_path).mkdir(parents=1, exist_ok=1)\n",
+ "\n",
+ "sz = 3\n",
+ "n_events_per_file = 15\n",
+ "# len(models) columns, n_events_per_file rows\n",
+ "fig, ax = plt.subplots(n_events_per_file, len(models) * 2, figsize=(len(models)*sz*2, n_events_per_file*sz))\n",
+ "from src.layers.object_cond import calc_eta_phi\n",
+ "\n",
+ "for mn, model in enumerate(sorted(models.keys())):\n",
+ " dataset_path = models[model]\n",
+ " for ds in range(20):\n",
+ " filename = get_path(os.path.join(dataset_path, f\"eval_{str(ds)}.pkl\"), \"results\")\n",
+ " clusters_file = get_path(os.path.join(dataset_path, f\"clustering_{str(ds)}.pkl\"), \"results\")\n",
+ " if not os.path.exists(filename):\n",
+ " continue\n",
+ " result = CPU_Unpickler(open(filename, \"rb\")).load()\n",
+ " print(result[\"filename\"])\n",
+ " m_med, m_dark, r_inv = get_properties(result[\"filename\"])\n",
+ " clusters = CPU_Unpickler(open(clusters_file, \"rb\")).load()\n",
+ " dataset = EventDataset.from_directory(result[\"filename\"], mmap=True, model_output_file=filename, model_clusters_file=clusters_file)\n",
+ " for e in range(n_events_per_file):\n",
+ " c = [colors[i] for i in clusters[result[\"event_idx\"] == e]]\n",
+ " model_coords = result[\"pred\"][result[\"event_idx\"] == e]\n",
+ " model_coords = calc_eta_phi(model_coords, 0)\n",
+ " plot_event(dataset[e], colors=c, ax=ax[e, 2*mn])\n",
+ " plot_event(dataset[e], colors=c, ax=ax[e, 2*mn+1], custom_coords=model_coords)\n",
+ " ax[e, 2*mn].set_title(model)\n",
+ " ax[e, 2*mn + 1].set_title(model + \" (model coords)\")\n",
+ " fig.tight_layout()\n",
+ " fig.savefig(os.path.join(output_path, f\"m_med_{m_med}_m_dark_{m_dark}_r_inv_{str(r_inv).replace('.','')}.pdf\"))\n"
+ ],
+ "id": "7a6eeb001fbbb9cc",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/jetclustering/code/src/utils/utils.py:91: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
+ " return lambda b: torch.load(io.BytesIO(b), map_location='cpu')\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/jetclustering/preprocessed_data/scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-700_mDark-20_rinv-0.5\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/jetclustering/code/src/utils/utils.py:91: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
+ " return lambda b: torch.load(io.BytesIO(b), map_location='cpu')\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/jetclustering/preprocessed_data/scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-700_mDark-20_rinv-0.5\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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v10BasuWLTYdd+utt6ro6GillFITJ05U48aNqzZtVf+YjBw5UsXExKgdO3ao4cOHK1dXV3XffffV6tpPPfWUAtSBAwfUrFmzVJs2bVTv3r0r7DsfoObNm6eWL1+uYmJilLOzs4qOjlYrV64sT/PVV18pQK1fv77S9d59910FqH379tUqvp9++kkB6qeffqqwffPmzQpQn332WY3HWywW5eXlpa655ppaXa9M2We6Z88eNWLECOXq6qoiIyPLvxCvX79eDRgwQLm4uKjOnTurNWvW2HT+e+65RwGVMo6yz+79998v33b11Vertm3bKrPZXCHt7bffrtzc3FRxcbFSSqkDBw4oQL399tsV0iUlJSlA/etf/7Ipxpakru+mUvJ+1kTez8Z7P4uKipSzs7N6+umnK+0r+/++bNky1a1bN+Xi4qIGDRqk9u7dq5Sy/n+NjIxUBoNBjRw5UsXHx1c6x7Jly1Tfvn2Vi4uL8vPzU9ddd506c+ZMpXRlz5bBYFAxMTHq22+/rbKyzGw2q1dffVVFR0crg8GgAgMD1e23316pUGtLQfGzzz5T/fv3V66urqpNmzZq+PDhavXq1RXSvP322yo6Olo5OzuroKAgddddd6msrKw63e/s2bOVu7u7On78uJo4caLy8PBQV1xxhVJKqeLiYnX//fcrf39/5eHhoSZPnqwSExMrVZbl5uaq++67T4WHhytnZ2cVEBCgxo4dq+Li4ipca8+ePQpQ3377ba0+i5ZIylBWTSmP7tatm+rYsWOtrnW+8PBwNWnSJLVu3ToVGxurXFxcVPfu3dW6deuUUkp98803qnv37spgMKi+ffuqnTt32nT+yZMnq4CAgErbX3zxRQWoX375pXxb//79Vf/+/SulHT9+vIqMjCz/vb6fVUsl5Sd5N23RFN/NkydPKqBSZW1ZBc2LL76o3nrrLdWxY0fl6uqqxo0bp06fPq0sFot69tlnVfv27ZWLi4uaMmWKysjIqHT+2pY73nvvPRUREaFcXFxU//791e+//15lGai4uFj985//VJGRkcrZ2VmFhISoRx55pLw8Waa2lWVms1m99tpr5f9f/f391YQJE9T27dvL05SWlqpnn31WRUREKGdnZxUeHq7mz59f6Zq1vd+a3t2srCw1e/Zs5eXlpby9vdWNN96odu3aVamyLCUlRd10002qffv2ytnZWbVr105NmTKlUhn2u+++U4DNz6oMxnWAH3/8kaioKAYOHFjrY0pKSvjmm2+YNWsWALNmzeK3336zeextRkYGEydOpHfv3rz22muMHj3apuOvvvpqCgsL+c9//sNtt91WY9o//viDu+66i5kzZ7Jw4UKKi4uZNm0aGRkZAEyaNAkPDw+WLVtW6dilS5cSExND9+7daxXXrl27AOjXr1+F7bGxsWi12vL958vOziY9PZ19+/YxZ84ccnNzueSSS2p1vfNlZWVx+eWXM3DgQBYuXIjBYGDmzJksXbqUmTNnctlll/H8889TUFDA9OnTycvLq/W5S0pK0Ol0ODs7V9ju5uYGQFxcXPm2Xbt20bdv30pj7AcMGEBhYSFHjx4tTweVP6vg4GBCQkKq/Kxai7q8myDv58XI+9l472dcXBxGo5G+fftWuX/jxo089NBDzJ49m6effppDhw5x+eWX8/bbb/PGG29w11138cgjj/Dnn39yyy23VDj2k08+YcaMGeh0OhYsWMBtt93Gt99+y7Bhw8jOzi5P98svvzBt2jQ0Gg0LFixg6tSp3HzzzezYsaNSPHfccQePPPIIQ4cO5fXXX+fmm29myZIlTJgwgdLS0hrvtSrPPPMMN9xwA05OTjz77LM888wzhIaG8ttvv5Wnefrpp5k3bx7BwcG8/PLLTJs2jffee4/x48dXuGZt7xesw3UmTJhAYGAgL730EtOmTQNgzpw5vPbaa4wfP57nn38eJycnJk2aVCnuO++8k3feeYdp06axaNEiHn74YVxdXTl06FCFdNHR0bi6urJp0yabP5uWQspQTSOPPv/YQ4cOVRg2ZYvjx49z7bXXMnnyZBYsWEBWVhaTJ09myZIlPPDAA1x//fU888wznDhxghkzZtg06XZJSQmurq6Vtl+YR1ssFvbu3Vvp/sGaR584caL834b6fFYtmZSf5N1s7u/m5s2bAaotPy1ZsoRFixZxzz338NBDD7FhwwZmzJjBk08+yapVq3jssce4/fbb+eGHH3j44YcrHFvbcsdHH33EHXfcQbt27Vi4cCFDhw5lypQpJCYmVjifxWJhypQpvPTSS0yePJk333yTqVOn8uqrr1aa96+2br31Vu6//35CQ0N54YUXePzxx3FxcWHLli3laebMmcM///lP+vbty6uvvsrIkSNZsGABM2fOrNP9QtXvrlKK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aK1WS48ePapchGTr1q1ERESU956yx79nLZGUnyqTd/PimtK72djlp+rKHReWn0pLSyvFFBkZSWZmJpdcckmV5aeqerDXJDIykuTkZDIzM2u8D4vFUim+tLQ0srOzL1p+uvB+axIeHk5KSkql3qrVlZ8iIyN56KGH+OWXX9i/fz9Go5GXX365QpqkpCSMRqPN5SepLHOARx99FDc3N2655RbS0tIq7T+/JjoxMZHff/+dGTNmMH369Eo/N998M8ePH2fr1q2NeQt2NXbsWHx9fVm6dClLly5lwIABNnWHBuv4eV9fX955550K29955x3c3NwqrD5WVdfUhIQE1q5dW+VqK01Neno6L7zwAj179qzwZXz69OmkpaXx7bfflm87d+4cX331FZMnTy4f7x8TE0PXrl15//33K8wB9c4776DRaJg+fXrj3UwTY8u7CfJ+1pa8n433fsbGxuLs7FxlwbI++vXrR2BgIO+++26F4RArV67k0KFD5f8Pg4KC6N27N59++mmFys01a9ZUqsSaMWMGZrOZf/3rX5WuZzKZKq04eTFTp05Fq9Xy7LPPVqqULHt3x44di7OzM2+88UaF9/mjjz4iJyen/D5qe781mThxIgBvvPFGhe1lw0zKmM3mShXBgYGBBAcHVxp6cvDgQYqLixkyZMhFr99SSRmqosbOo8v8/PPPZGdn12uYlyMcO3aMd999l8svv7xC79/p06ezffv2CnnnkSNH+O2337j66qvLt9Xls2oNpPxUmbybtnH0u1k2P5u9y0+2lDsCAgJ49913Kwwn/eSTTyqVh2bMmEFSUhIffPBBpesVFRVRUFBgU4zTpk1DKcUzzzxTaV9ZzJdddhlQuQzzyiuvAJTfR23vtyaXXXYZJpOpwv9Ls9lcPs1JmcLCwvLhuGUiIyPx9PSsVH4qW2HV1vKT/uJJhL116tSJL774glmzZtGlSxeuu+46evXqhVKK+Ph4vvjiC7RaLSEhIXzxxRcopZgyZUqV57rsssvQ6/UsWbLE5uWamwonJyeuuuoqvvzySwoKCnjppZdsPoerqyv/+te/mDdvHldffTUTJkxg48aNfP755zz33HMVxmD36NGDSy65hN69e+Pj48OxY8f46KOPKC0t5fnnn7fnrdnFyJEjGTx4MFFRUaSmpvL++++Tn5/Pjz/+WGHYz/Tp0xk0aBA333wz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jz6Kd955B0899RQqKytx/fr1FuvFx8cDQOfbT50qrVG3lZeXCwDi3nvvbfW70tJSUVRUpH3U1NRof/ff//5XABCpqalCiOar0EqlUrz++utt7qe9Ky8AxLvvvtvpuDVXV+68Xej2390OgJDL5SItLU27THNF/M0339Que/DBB4Wvr69oamrSLrtx44awsbERf/zjH3WOb+XKlcLW1rbN3/n4+Ij58+e3Wt6nTx8BQAAQzs7O4ne/+12rXh93o3lNN2/erF2WkpIiAAgbG5sWV9h27tzZ6a6jf//73wUAcfDgwRbL165dKwCIe+65R7vMyclJPPbYY622obnS8tNPPwkh/nfVpq2u8ImJiWLo0KE6x2dJunpuCsHz8254fhrv/Pzggw/avWoNQCgUihZX29577z0BQPTo0UNUVFRol69bt04A0K7b0NAgfH19Rb9+/URtba12ve+//14AEL///e+1y2JjY4W/v78oKyvTLvv5558FgBY9yw4ePCgAiE2bNrWI86effmq1XJeeZampqcLGxkb86le/avVe0XS7LywsFHK5XEyePLnFOm+99ZYAID766KNOH++iRYsEALF27doW+zx79qwAIFasWNFi+YIFC1r1LHNzcxMrV67s8Pg0evfuLaZNm6bTupaGbSjTydEaa9asEQDEpUuXdN6fRmhoqAAgjhw5ol2mycUODg4iKytLu1yTqzQ9W3SxevVqYWNjI65du9Zi+fz58wUAsWrVKiGEEEVFRQJAm6/Z22+/LQCIlJQUIUT3XitLxfYTz01LODd/97vfCQCthjnQ9Czz8fFp0a7RtJPuHDbjwQcfFHK5XNvbqrPtjtjY2Ba3ob7//vsCQIs20KeffipsbGxatT81PRdvv+1Wl55lmluhn3rqqVa/07SfNG2axx9/vMXvn3vuOQE030bdmeMVov1z9+uvvxYAxKuvvqpd1tTUJEaNGtWirV5aWqrt9acLuVwuli9frtO6GuxZZmQVFRUA0OYMZWPHjoWPj4/2cftAjJs2bUJCQgIiIyMBAC4uLpgxYwY2bdrUqf0rFAo8+uijXY7/ySef1HndiRMnIiIiQvvzgAED4Orq2mL2kgceeACFhYUtBiz873//C7Va3anKeG1tbaveHRpKpRK1tbWtlm/cuBE//fQT3nnnHURFRaG2thYqlUrnfWo4Ozu3qKj36dMH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1zSWk5pPm7FkyRImEol0va1MLXcMHDhQbxjqpk2bGAC9MtB3333HeDyeQfmzsedi02G3xvQsaxwK/fTTTxt81lh+aizTPPLII3qfP//88wzQDqM25X4Za/3Z/eWXXxgA9u677+q2qVQqNnbsWL2yellZma7XnzFEIhF74oknjNq3EfUss7LKykoAaHGFsgkTJsDT01P31XQixi1btmDIkCEIDw8HAMhkMsyaNQtbtmwx6fpisRgrVqwwO/5Vq1YZve+UKVMQFham+/eAAQPg7Oyst3rJokWLUFhYqDdh4U8//QSNRmNSzXhdXZ1B745GEokEdXV1Bts3b96Mffv2YePGjejbty/q6uqgVquNvmYjJycnvRr1Pn36wMXFBX379tVrYWv8e2urt7Tk/vvvh1wux8MPP4wDBw4gIyMDmzZtwsaNGwFA777q6uogFosNztE4QWXjvo1/trZvS9+rnsDcZxOg57M99Hxa7/lsbNl2dXVt8fPJkyejV69eun833vf8+fN1Eyo33d74/bhw4QIKCwuxevVqvUlvZ82ahcjISPzxxx8AgLy8PFy+fBnLli2DXC7X7Td16lRERUXpxbJjxw7I5XJMnToVxcXFuq/BgwfDyckJR44cafNem/vll1+g0Wjwj3/8w6AHH8dxAICDBw9CqVRi7dq1evs8+uijcHZ21t2Hsffb1BNPPKH37z179gAAnn76ab3ta9euNTjWxcUFZ8+eRW5ubrv36erqiuLi4nb3646oDGU/ORrQ9m748ccfMWjQIPTt29fo6zUVFRWFkSNH6v7dmHsmTZqEoKAgg+2m5OhHHnkEfD4fCxcuxKlTp5CamooNGzZg165dAIzPu833Ned71Z1R+YmeTaDrP5slJSUQCAStriJ+33336ZVrGu976dKlEAgEetuVSiVycnIAmF7uWLVqld59LF++XO+6gLb81LdvX0RGRuqVnyZNmgQAJpeffv75Z93CQ801lp8ayzTPPfec3ufr1q0DAN19GHu/jVp6dvfs2QOBQKBXruLz+Xjqqaf09pNKpRCJRDh69CjKysravU9zyk9UWWZljS8jzVcrAbQreBw4cMBg5Zfy8nLs2bMH48ePR0pKiu5r9OjRuHDhgm74jjH8/f1bTSTGCAkJMXrfpom0kaurq94P84wZMyCXy7Ft2zbdtm3btmHgwIHo3bu30deS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o+t5/fr1UCgUhvMw9XybMm7cOADARx99ZLRc381ET6vV1qsIDggIQEhISL2uJykpKVAqlRgwYECzx3dVVIYyZuscrff7779DLpe3qpuXPaSlpeHTTz/FhAkTjFr/Tps2DWfOnDHKndevX8f+/fsxffp0w7KWvFdtAZWf6qNr0zz2vjb147NZuvxkTrnD398fn376qVF30q+//rpeeWjGjBnIzc3FF198Ue94NTU1qKqqMivGqVOngjGGVatW1XtNH/ODDz4IoH4Z5r///S8AGM7D1PNtyoMPPgiNRmP0t9RqtYZhTvSqq6sN3XH1YmNj4enpWa/8pJ9h1dzyk6D5VYildejQAZs2bcLs2bPRqVMnzJkzBz169ABjDJmZmdi0aRN4PB7CwsKwadMmMMYwadKkBvf14IMPQiAQYOPGjWZP1+wohEIhHn74YWzevBlVVVV47733zN6HVCrFm2++iWXLlmH69OkYM2YMjhw5gv/973/497//bdQHu1u3bnjggQeQkJAAHx8fpKWlYf369VCr1XjrrbcseWoWMXToUPTv3x/t27fHnTt38Pnnn6OyshI7d+406vYzbdo09OvXDwsWLEBKSgr8/Pywdu1aaLXaesnv3XffxaRJkzB69GjMmjULV65cwccff4zFixe36RYL5lybAOj6NBFdn7a7PiUSCUaPHo0///zTot0YhUIh3n77bSxYsABDhw7F7NmzUVBQgA8//BBRUVF4/vnnDeuuXr0a48ePx6BBg7Bw4UKUlpZizZo16NKli9FTwqFDh+LJJ5/E6tWrceHCBYwePRpCoRBpaWnYunUrPvzwQ7Mq79u3b49//OMfePPNNzF48GA8/PDDEIvFOHPmDEJCQrB69Wr4+/tj5cqVWLVqFcaOHYtJkybh+vXrWLt2LRITEzF37lyzz7cxCQkJmD17NtauXQuFQoEBAwZg3759SE9PN1qvoqICYWFhmDZtGnr06GFonXjmzJl6T0b37t0LNzc3jBo1yuT3xdVQGcqYrXO03saNGyEWizF16lRLnIbVxMfHY/r06YiIiEBmZibWrVuHdu3a4dNPPzVab+nSpfjiiy8wfvx4vPjiixAKhfjvf/+LwMBAwwDWQMveq7aAyk/10bXZNEe7NmNiYtC1a1f8+eefWLhwocXO05xyx7/+9S88+eSTGDFiBGbOnInMzExs2LCh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7XYxatQokZCQIMxms3P5c889JwCIrVu3OpcdPHhQKJVK8cQTTziX9fS9ClRsP3kGz03vnpuDBw8WN9xwQ08OzSN60gZKS0sTCxcudGs8ntTZuXvixAkBQCxfvtzl7d57770iLS1NOBwOl17HYpkM7rjjDgFAbN682aXX3XrrrSInJ0cIIcTMmTPF1KlTO1y3vT8mEyZMEAMGDBA///yzGDdunNDr9eKBBx7o0r6feuopAUDs379fXHvttSIiIkIMHTq01XPnAiAWL14sPv30UzFgwACh0WhETk6OWLVqlXOdlStXCgDihx9+aLO/119/XQAQe/fu7VJ8X331lQAgvvrqq1bLN27cKACId999t9PXOxwOYTQaxYIFC7q0vxYt7+nu3bvF+PHjhV6vF1lZWc4vxD/88IO46KKLhE6nE3379hWrV692afv33XefANAmcbS8d2+++aZz2dVXXy3i4+OF3W5vte4dd9whDAaDaGpqEkIIsX//fgFALF26tNV6BQUFAoD4wx/+4FKMgaS756YQPD87w/PTe+dnY2Oj0Gg04ne/+12b51p+7x9++KHo37+/0Ol0YsyYMWLPnj1CiObfa1ZWltBqtWLChAnixIkTbbbx4YcfiuHDhwudTieio6PF9ddfL86cOdNmvZbPllarFQMGDBCffPJJu8Uyu90uXnrpJZGTkyO0Wq2Ii4sTd9xxR5tGrSsNxXfffVeMGjVK6PV6ERERIcaNGyf++9//tlpn6dKlIicnR2g0GpGYmCjuueceUVVV1a3jXbhwoQgJCRFHjx4VM2fOFKGhoeLKK68UQgjR1NQkHnzwQRETEyNCQ0PFrFmzRH5+fptimclkEg888IBIS0sTGo1GxMbGiilTpojt27e32tfu3bsFAPHJJ5906b0IRGxDNfOlHN2/f3+RkZHRpX2dKy0tTVx++eVi7dq1YsSIEUKn04mBAweKtWvXCiGE+Pjjj8XAgQOFVqsVw4cPFzt27HBp+7NmzRKxsbFtlr/wwgsCgPj222+dy0aNGiVGjRrVZt1p06aJrKws5/97+l4FKrafeG66whfPzePHjwsAbYq1LQWaF154Qbz66qsiIyND6PV6MXXqVHH69GnhcDjE73//e5GcnCx0Op2YPXu2qKioaLP9rrY73njjDZGZmSl0Op0YNWqUWL9+fbttoKamJvHkk0+KrKwsodFoREpKinj00Ued7ckWXS2W2e128fLLLzt/rzExMWL69Oli27ZtznWsVqv4/e9/LzIzM4VGoxFpaWniiSeeaLPPrh5vZ+duVVWVWLhwoTAajSI8PFzcdNNNYufOnW2KZUVFRWLRokUiOTlZaDQakZCQIGbPnt2mDfv5558LAC5/Vnkzrgy+/PJL9O7dG6NHj+7ya8xmMz7++GNce+21AIBrr70Wa9ascfne24qKCsycORNDhw7Fyy+/jEmTJrn0+quvvhoNDQ34f//v/+H222/vdN0ff/wR99xzD6655ho8//zzaGpqwty5c1FRUQEAuPzyyxEaGooPP/ywzWs/+OADDBgwAAMHDuxSXDt37gQAjBw5stXyESNGQKFQOJ8/V3V1NcrKyrB3717cdtttMJlMmDx5cpf2d66qqipcccUVGD16NJ5//nlotVpcc801+OCDD3DNNdfgsssuw7PPPov6+nrMmzcPtbW1Xd622WyGUqmERqNptdxgMAAAtm/f7ly2c+dODB8+vM099hdddBEaGhpw5MgR53pA2/cqKSkJKSkp7b5XwaI75ybA8/NCeH567/zcvn07LBYLhg8f3u7zGzZswMMPP4yFCxfid7/7HQ4ePIgrrrgCS5cuxV//+lfcc889ePTRR7Fp0ybccsstrV77zjvvYP78+VAqlViyZAluv/12fPLJJ7jkkktQXV3tXO/bb7/F3LlzIUkSlixZgjlz5uDmm2/Gzz//3CaeO++8E48++ihyc3Pxl7/8BTfffDNWrFiB6dOnw2q1dnqs7Xn66adx4403Qq1W4/e//z2efvpppKamYs2aNc51fve732Hx4sVISkrCn/70J8ydOxdvvPEGpk2b1mqfXT1eoPl2nenTpyMuLg4vvvgi5s6dCwC47bbb8PLLL2PatGl49tlnoVarcfnll7eJ+6677sKyZcswd+5cvPbaa3jkkUeg1+tx8ODBVuvl5ORAr9fjp59+cvm9CRRsQ/lGjj73tQcPHmx125Qrjh49iuuuuw6zZs3CkiVLUFVVhVmzZmHFihV46KGHcMMNN+Dpp5/GsWPHMH/+fJcG3TabzdDr9W2Wn5+jHQ4H9uzZ0+b4geYcfezYMeffhp68V4GM7Seem/5+bm7cuBEAOmw/rVixAq+99hruu+8+PPzww1i3bh3mz5+P3/72t/jmm2/w2GOP4Y477sB//vMfPPLII61e29V2x9tvv40777wTCQkJeP7555Gbm4vZs2cjPz+/1fYcDgdmz56NF198EbNmzcIrr7yCOXPm4KWXXmoz7l9X3XrrrXjwwQeRmpqK5557Do8//jh0Oh02b97sXOe2227Dk08+ieHDh+Oll17ChAkTsGTJElxzzTXdOl6g/XNXCIErr7wS7777Lm644Qb88Y9/xJkzZ7Bw4cI2cc+dOxeffvopbr75Zrz22mu4//77UVtbi9OnT7dab8SIEQDgevvJpdIa9VhNTY0AIObMmdPmuaqqKlFWVuZ8NDQ0OJ/76KOPBACRl5cnhGi+Cq3T6cRLL73U7n46uvICQLz++usux91ydeX824XOfe5cAIRGoxFHjx51Lmu5Iv7KK684l1177bUiLi5O2Gw257KioiKhUCjE73//+y7Ht3jxYqFUKtt9LjY2VlxzzTVtlvfr108AEABEaGio+O1vf9um18eFtLyn7733nnPZoUOHBAChUChaXWH773//63LX0T/96U8CgNiwYUOr5Y8//rgAIK644grnspCQEHHLLbe02UbLlZZvvvlGCPHLVZv2usKPGjVKjBkzpsvxBZLunptC8Py8EJ6f3js/33rrrQ6vWgMQWq221dW2N954QwAQCQkJwmQyOZc/8cQTAoBzXYvFIuLi4sTAgQNFY2Ojc70vv/xSABBPPvmkc9nQoUNFYmKiqK6udi779ttvBYBWPcs2bNggAIgVK1a0ivObb75ps7wrPcvy8vKEQqEQV111VZvPSku3+9LSUqHRaMS0adNarfPqq68KAOLvf/+7y8e7cOFCAUA8/vjjrfa5a9cuAUDcc889rZZfd911bXqWhYeHi8WLF3d6fC369u0rZs6c2aV1Aw3bUL6To1s8/PDDAoA4cOBAl/fXIi0tTQAQGzdudC5rycV6vV6cOnXKubwlV7X0bOmK++67TygUCnHy5MlWy6+55hoBQNx7771CCCHKysoEgHbfs6VLlwoA4tChQ0KInr1XgYrtJ56bgXBu/va3vxUA2gxz0NKzLDY2tlW7pqWddP6wGddee63QaDTO3lautjuGDh3a6jbUN998UwBo1QZ69913hUKhaNP+bOm5eO5tt13pWdZyK/T999/f5rmW9lNLm+a2225r9fwjjzwigObbqF05XiE6Pnc/++wzAUA8//zzzmU2m02MGzeuVVu9qqrK2euvKzQajbj77ru7tG4L9izzMpPJBADtzlA2ceJExMbGOh/nDsS4YsUKjBw5Er179wYAhIWF4fLLL8eKFStc2r9Wq8XNN9/c7fjvuuuuLq87ZcoUZGVlOf8/ePBgGI3GVrOXLFiwAKWlpa0GLPzoo4/gcDhcqow3Nja26d3RQqfTobGxsc3y5cuX45tvvsFrr72G/v37o7GxEXa7vcv7bBEaGtqqot6vXz9ERESgf//+ra6wtfzc0ewt7bnuuusQHh6OW265BatXr8bJkyfx5ptv4rXXXgOAVsfV2NgIrVbbZhstA1S2rNvyb0frtvdeBYPunpsAz88L4fnpvfOz5cp2ZGRku89PnjwZ6enpzv+3HPfcuXOdAyqfu7zl/fj5559RWlqKe+65p9Wgt5dffjmys7Px1VdfAQCKioqwa9cuLFy4EOHh4c71pk6dipycnFaxrFy5EuHh4Zg6dSrKy8udjxEjRiA0NBRr167t9FjP99lnn8HhcODJJ59s04NPkiQAwHfffQeLxYIHH3yw1Tq33347jEaj8zi6erznuvvuu1v9/+uvvwYA3H///a2WP/jgg21eGxERgS1btqCwsPCCxxkZGYny8vILrheI2IbynRwNNPdueP/99zFs2DD079+/y/s7V05ODsaOHev8f0vuufTSS9GrV682y13J0bfddhuUSiXmz5+PjRs34tixY1iyZAk+/fRTAF3Pu+ev2533KpCx/cRzE/D/c7OiogIqlarDWcSvvvrqVu2aluO+4YYboFKpWi23WCwoKCgA4Hq746677mp1HIsWLWq1X6C5/dS/f39kZ2e3aj9deumlAOBy++njjz92Tjx0vpb2U0ub5te//nWr5x9++GEAcB5HV4+3RXvn7tdffw2VStWqXaVUKnHfffe1Wk+v10Oj0eCHH35AVVXVBY+zO+0nFsu8rOXLyPmzlQDNM3isXr26zcwv1dXV+PrrrzFhwgQcPXrU+cjNzcXPP//svH2nK5KTkztMJF2RkZHR5XXPTaQtIiMjW32YZ8yYgfDwcHzwwQfOZR988AGGDh2Kvn37dnlfer0eFoul3eeampra7eo7duxYTJ8+HXfffTf++9//4l//+heeeOKJLu+zRUpKijORtAgPD0dqamqbZQC6dDK3SEhIwBdffAGz2Yxp06YhIyMDjz76qHMa5HMTul6vh9lsbrONpqYm5/Pn/tvRuu29V8GgO+cmwPOzK3h+ev/8FB1MdH3+773luC/0fpw6dQpAc7HxfNnZ2c7nW/5tb5r681+bl5eHmpoaxMXFtfoyFRsbi7q6OpSWlnZ+kOc5duwYFApFm6LcuTo6Do1Gg8zMzDbHcaHjbaFSqZCSktJmXwqFotWXqo62+fzzz2Pfvn1ITU3FRRddhN/97ncdfvEQQrT5TAcLtqF8J0cDwLp161BQUIDrr7++y/s6X3dzUlcMHjwY7733Ho4dO4bc3Fz07t0bf/3rX/Hyyy8D+CVHXyjvnrtOd9+rQMb2E89NIPDPTXe3nzpqd5zfflKr1cjMzGy1LC8vD/v372/Tdmr5bHWn/ZSUlISoqKgO12lp07QUtlskJCQgIiLigu2n84+3RXvn7qlTp5CYmNimcHn+NrVaLZ577jmsWrUK8fHxGD9+PJ5//vkOb+PuTvuJxTIvCw8PR2JiIvbt29fmudGjR2PKlCnIzc1ttXzlypUwm83405/+hD59+jgfLZVdV66+9DRRuPJ6pVLZ7vJzv8RptVrMmTMHn376KWw2GwoKCvDTTz+5fL91YmIi7HZ7m+RgsVhQUVGBpKSkTl8fGRmJSy+91OUrWUDHx9mV4++K8ePH4/jx49i5cyd+/PFHFBQUYMyYMQDQ6g9uYmIiioqK2ry+ZVnLe5CYmNhq+fnrXui9ClTdOTcBnp9dwfPTe+dnyxTqHTVaPf1+uMLhcCAuLg6rV69u9+Hy9N4y0mq1bXqzuWL+/Pk4fvw4XnnlFSQlJeGFF17AgAEDsGrVqjbrVlVVISYmpifh+i22oXwrR69YsQIKhcI53lR3eDonzZs3D4WFhdi6dSs2bdqEU6dOOb94tuToqKgoaLXaLufonvw9C0RsPzXjuenf52Z0dDRsNluHY9f6Wvtp0KBBHbaf7rnnHo/t290X63p67j744IM4cuQIlixZAp1Oh//7v/9D//79OxwP2dX2E4tlMrj88stx9OhRbN26tUvrr1ixAgMHDsTKlSvbPKZMmYL33nvPwxF71oIFC1BeXo7vv/8eK1euhBDC5T8mQ4cOBYA2A0j//PPPcDgczuc709jYiJqaGpf26y1KpRJDhw5Fbm4uQkND8d133wFo7greYujQodixY0ebATa3bNkCg8Hg/MPT0XtVWFiIM2fOdOm9ClSunpsAz8+u4PnpvfMzOzsbAHDixImeHFIbaWlpAIDDhw+3ee7w4cPO51v+zcvLa3e9c2VlZaGiogK5ubmYMmVKm8eQIUNcijErKwsOhwMHDhxw+TgsFgtOnDjR5jgudLydSUtLg8PhwLFjx9q8vj2JiYm455578Nlnn+HEiROIjo7GM88802odm82G/Pz8bt9WEwjYhmpNrhzdMjD7xIkTfb5ApNFoMGrUKIwZMwYajaZNjlYoFBg0aFC7k5Bs2bIFmZmZzt5T7vh7FojYfmqL5+aF+dK56e32U0ftjvPbT1artU1MWVlZqKysxOTJk9ttP7XXg70zWVlZKCwsRGVlZafH4XA42sRXUlKC6urqC7afzj/ezqSlpaGoqKhNb9WO2k9ZWVl4+OGH8e2332Lfvn2wWCz405/+1GqdgoICWCwWl9tPLJbJ4De/+Q0MBgNuueUWlJSUtHn+3Ep0fn4+1q9fj/nz52PevHltHjfffDOOHj2KLVu2ePMQ3GrKlCmIiorCBx98gA8++AAXXXSRS92hgeb756OiorBs2bJWy5ctWwaDwdBq9rH2uqaePHkS33//fbuzrfiasrIyPPfccxg8eHCrL+Pz5s1DSUkJPvnkE+ey8vJyrFy5ErNmzXLe7z9gwABkZ2fjzTffbDUG1LJlyyBJEubNm+e9g/ExrpybAM/PruL56b3zc8SIEdBoNO02LHti5MiRiIuLw+uvv97qdohVq1bh4MGDzt9hYmIihg4din/84x+tipurV69uU8SaP38+7HY7/vCHP7TZn81mazPj5IXMmTMHCoUCv//979sUJVvO3SlTpkCj0eCvf/1rq/P57bffRk1NjfM4unq8nZk5cyYA4K9//Wur5S23mbSw2+1tCsFxcXFISkpqc+vJgQMH0NTUhIsvvviC+w9UbEO15u0c3eLrr79GdXV1j27zkkNeXh5ef/11XHHFFa16/86bNw/btm1rlTsPHz6MNWvW4Oqrr3Yu6857FQzYfmqL56Zr5D43W8Znc3f7yZV2R2xsLF5//fVWt5O+8847bdpD8+fPR0FBAf72t7+12V9jYyPq6+tdinHu3LkQQuDpp59u81xLzJdddhmAtm2YP//5zwDgPI6uHm9nLrvsMthstla/S7vd7hzmpEVDQ4PzdtwWWVlZCAsLa9N+aplh1dX2k+rCq5C79enTB++99x6uvfZa9OvXD9dffz2GDBkCIQROnDiB9957DwqFAikpKXjvvfcghMDs2bPb3dZll10GlUqFFStWuDxds69Qq9X41a9+hffffx/19fV48cUXXd6GXq/HH/7wByxevBhXX301pk+fjg0bNuBf//oXnnnmmVb3YA8aNAiTJ0/G0KFDERkZiby8PLz99tuwWq149tln3XlobjFhwgSMHTsWvXv3RnFxMd58803U1dXhyy+/bHXbz7x58zBmzBjcfPPNOHDgAGJiYvDaa6/Bbre3SX4vvPACZs+ejWnTpuGaa67Bvn378Oqrr+K2224L6h4LrpybAHh+dhHPT++dnzqdDtOmTcN3333n1tsY1Wo1nnvuOdx8882YMGECrr32WpSUlOAvf/kL0tPT8dBDDznXXbJkCS6//HJccskluOWWW1BZWYlXXnkFAwYMaHWVcMKECbjzzjuxZMkS7Nq1C9OmTYNarUZeXh5WrlyJv/zlLy4V73v37o3//d//xR/+8AeMGzcOv/rVr6DVarFt2zYkJSVhyZIliI2NxRNPPIGnn34aM2bMwOzZs3H48GG89tprGDVqFG644QaXj7cjQ4cOxbXXXovXXnsNNTU1uPjii/H999/j6NGjrdarra1FSkoK5s2bhyFDhjh7J27btq3NldHVq1fDYDBg6tSpXX5fAg3bUK15O0e3WLFiBbRaLebOneuOw/CYnJwcXH311ejVqxdOnDiBZcuWISoqCq+//nqr9e655x787W9/w+WXX45HHnkEarUaf/7znxEfH+8cwBro3nsVDNh+aovnZud87dzMzMzEwIED8d133+GWW25x23G60u744x//iDvvvBOXXnopFixYgBMnTmD58uVtxiy78cYb8eGHH+Kuu+7C2rVrkZubC7vdjkOHDuHDDz/Ef//7X5cuME+aNAk33ngj/vrXvyIvLw8zZsyAw+HAhg0bMGnSJNx7770YMmQIFi5ciDfffBPV1dWYMGECtm7din/84x+YM2cOJk2a5NLxdmbWrFnIzc3F448/jpMnTyInJweffPJJmwuLR44cweTJkzF//nzk5ORApVLh008/RUlJSavJvYDm9lOvXr0wbNiwLr8vAM6bD5e86ujRo+Luu+8WvXv3FjqdTuj1epGdnS3uuususWvXLiGEEIMGDRK9evXqdDsTJ04UcXFxraat7Whq5QEDBnQr1pbpk8vKyjp87lwAxOLFi9us29H0tatXrxYAhCRJIj8/v1sxCtE8vW6/fv2ERqMRWVlZ4qWXXnJOeXtuvCNHjhSRkZFCpVKJpKQkcc0114g9e/a4vL+O3tO0tDRx+eWXt1ne0fvSmYceekhkZmYKrVYrYmNjxXXXXSeOHTvW7rqVlZXi1ltvFdHR0cJgMIgJEyaIbdu2tbvup59+KoYOHSq0Wq1ISUkRv/3tb4XFYnEptkDVlXNTCJ6fruL56Z3z85NPPhGSJInTp09f8PhapkQ/f9rttWvXCgBi5cqVrZZ/8MEHYtiwYUKr1YqoqChx/fXXizNnzrSJ4eOPPxb9+/cXWq1W5OTkiE8++UQsXLhQpKWltVn3zTffFCNGjBB6vV6EhYWJQYMGid/85jeisLDQuc6ECRNaTZvemb///e/OGCMjI8WECRPE6tWrW63z6quviuzsbKFWq0V8fLy4++67RVVVVZttdeV4Fy5cKEJCQtqNpbGxUdx///0iOjpahISEiFmzZon8/HwBQDz11FNCCCHMZrN49NFHxZAhQ0RYWJgICQkRQ4YMEa+99lqb7Y0ePVrccMMNXXofAh3bUL/wZo4WQoiamhqh0+nEr371q27vSwjXcnFHuepCrrnmGpGamio0Go1ISkoSd911lygpKWl33fz8fDFv3jxhNBpFaGiouOKKK0ReXl6763b1vQo2bD+1xnOzY754bv75z38WoaGhoqGh4YLH11E7afny5QJAm/ZdV9sdr732msjIyBBarVaMHDlSrF+/vt02kMViEc8995wYMGCAs70zYsQI8fTTT4uamhrneh19Ns9ns9nECy+8ILKzs4VGoxGxsbFi5syZYvv27c51rFarePrpp0VGRoZQq9UiNTVVPPHEE6KpqanN9rpyvJ2duxUVFeLGG28URqNRhIeHixtvvFHs3LlTABDLly8XQghRXl4uFi9eLLKzs0VISIgIDw8Xo0ePFh9++GGrbdntdpGYmCh++9vfXvB9OJ8khAdHnyMiIiKvstvtyMnJwfz589u9xZH8065duzB8+HDs2LEjaMdFIiIi8pSamhpkZmbi+eefx6233ip3OOQmn332Ga677jocO3bMOZFWV7FYRkREFGA++OAD3H333Th9+nSbqbfJP11zzTVwOBz48MMP5Q6FiIgoID333HNYvnw5Dhw40KNZrsl3jB07FuPGjcPzzz/v8mtZLAtydXV1bWaaOF9sbGyH0+J6msVi6XRmDqB5yuqeTjt7vsrKylaDK55PqVQiNja229u32+0oKyvrdJ3Q0FB+yQ1yPD/bx/OTiHwBc3T7ysrKWk1Qcj6NRtOjsb3kOi7yHzw328dzk8hFLt+4SQGl5X78zh4nTpyQLb6W+8E7e7Tct+xOEyZM6HSf7Y2744qW+987e7SMZ0PBi+dn+3h+EpEvYI5uX1paWqf77Or4gx2R67jIf/DcbB/PTSLXsGdZkDt+/DiOHz/e6TqXXHIJdDqdlyJqraqqyjnVa0cGDBjg8v3HF7J9+3ZUVVV1+Lxer0dubm63t9/U1IQff/yx03UyMzPbzH5CwYXnZ/t4fhKRL2CObt9PP/2ExsbGDp+PjIzEiBEjur19uY6L/AfPzfbx3CRyDYtlREREREREREREZ6nkDiCQOBwOFBYWIiwsDJIkyR0OkccIIVBbW4ukpCQOfhkgmL/InzAHBR7mIAoGzF3+j7mKAglzUudYLHOjwsJCpKamyh0Gkdfk5+cjJSVF7jDIDZi/yB8xBwUO5iAKJsxd/ou5igIRc1L7WCxzo7CwMADNHzaj0ShzNESeYzKZkJqa6vzMk/9j/iJ/whwUeJiDKBgwd/k/5ioKJMxJnWOxzI1auuIajUYmTwoK7H4eOJi/yB8xBwUO5iAKJsxd/ou5igIRc1L7eGMqERERERERERHRWSyWERERERERERERncViGRERERERERER0VkslhEREREREREREZ3FAf6JAoTV7sCPeeWot9hwcVYMokI0codERERE5PPyTaexv3wvEkKTMDRumNzhEBGRD2CxjCgAWO0O3Pj2Fmw+UQkAiDJo8MndFyM9JkTmyMgbli1bhmXLluHkyZMAgAEDBuDJJ5/EzJkzPb5vh3DAZK5BhC7S4/siIiJytx/PrMcjax+AzWEDANyQsxAPjnpE5qgoGDVZ7dCplXKHQURn8TZMogCwal+xs1AGADWNVvx1TZ6MEZE3paSk4Nlnn8X27dvx888/49JLL8WVV16J/fv3e3zfi7+9A1M+GI+PDn3g8X0RERG524tblsDusDv//68D/8CZ2nwZI6Jg9Ob6Y8h+8hs8/80hj++rvM6MTccrYLE5PL4vIn/GnmVEAaCmwQIJgDj7f7sQqGqwyBkSedGsWbNa/f+ZZ57BsmXLsHnzZgwYMMCj+z5UeeDsvwc9uh8iIiJPqLGYIJwtqGYmswkIkykgCkq78qsBAD+fqvLofirrLZj853WoabRiWk483rxxpEf3R+TP2LPsHP+fvfsOi+pKHzj+vTPDDL33joAFG4q99xKjMYmpJqY3TS+buL9N1uxukt1kk002m95MMz2maDT23lFsqGABBZHemT7n9weRSEClzDCA5/M8PMjMvfe8yHA4895z3vPWW2/Rp08fvL298fb2ZujQoSxbtsyhbRZU5/Pz0R+oNFU4tJ2OxmQ1YRPybkdTjUwMQqtRoVJ+f2xKz1DnBSQ5jdVq5csvv6S6upqhQ4ee9zij0UhFRUW9j5b4z/g3uKvvvdzX7/6WhuwwQoiLHyRJUqs5Y/wkhGD1oXx2nDOrWqr9fzGbzc4Oo0OZEDsJhdoBlFpRE+4ZTrxfgpOjkhzFGf1VU/x1ek/+PLU7L1/T16HtZBVXU66v7SN2ZTk2MSdJHZ1Mlp3DGUuZHllzP89ufpp/bXuuRefnV5/hdFWunaOqz2Q1MX/9E1y9eDpbczc7tC2AA4X7GLNoKDf8dDUWmxzwNUVsoAeL7hzMsPhAkqN8+fsVvbh2QJSzw5La0P79+/H09ESn03HvvfeyePFikpKSznv8Cy+8gI+PT91HVFTLXi/Jwf24J3keAW6BLQ3dIV7a/jyDPunLAyvvdXYoktTpOWP8tO5IIXd8sotr393K8cKqZp9vsdrYn1vu8GVI644UMO7ldTzwxW6MFuvFT2ilr776ihdeeIEDBw44vK3O4olB87m51610909iTPR43p28EJ1a5+ywJAdpy/5qZ1YJj36dVjdr7EJCvF25e1Q8Uf7udo/jXH0jfbkyOYIQbx3zL+vu0LYkqaOTyzDP0dylTEajEaPRWPd1S2Zm+Ln61/vcHPnVZ5j5/WVYbBa+nPG9w+6CbcndxMqs5QC8lvoKQyOGO6SdszJLMzDZTJwoP06NuQZvnY9D2+ssUmL8+eyOwc4OQ3KSbt26kZaWRnl5Od9++y233HIL69evP2/CbP78+Tz66KN1X1dUVLQ4YdbeHC3N4KvDXwCw9fRmyo3l+Mh+RJIcpiVLwVs7hvJxd0EBdBoV7trmD2f/sfQQC7dmMb1PGK/f0L/Z5zfV88sOcbyomuNF1VyRHMGEHiEOawsgJycHIQSnT5+mV69eDm2rs9CqtTyY8iikODsSqS20ZemKp388wOEzlZwsqeHbe4fZ9dotpVYp/Oe6ZGeHIUkdgkyWnYfVauWbb7654FKmF154gWeffbZV7bwy7nWOlx0l0a9b82MUViw2CwKB2YEzsOJ8uuCicsFsM5MU4Nj6RwCXx1+BwWIgxidWJsokqYm0Wi0JCbUJ85SUFHbu3Mlrr73GO++80+jxOp0Ona5j3zm32qw8t/VZivSF/H3kP+sSYn/sD62/7XAmSZLjNWX8BK0fQ/WP9mP9E2PRaVSEeLs2+3y92Vrvs6P0ifAlI78KrVpFfJCnQ9sCuOGGGzhx4gQpKTLzI0kX05T+qjWJ/SuSIzi5JpPL+4S1Otb2Qm+ycqK4mh6hXiiKcvETJKkDU4Qs6lLP/v37GTp0KAaDAU9PTxYtWsRll13W6LGNdZ5RUVGUl5fj7e3dJvEeKz2K2Wame0APh7aTU3GKU5UnGRg2GI2q6TnWnMpTlBnK6BXU24HRSW2toqICHx+fNn2tS80zbtw4oqOjWbhwYZOO74g/06zyE8z6YQYAz416kclxU+ue+/TAQjbmrGdm4lVcFj/9fJeQOqiO+Hrt7JozfgLnj6EMZivbT5QwIMYPD53j7h2brTa2HCsmNsCdmACPJp9nsdrYfqKEXhE++Li5OCw+qW3Jvqt9aE5/tWDBgkYT+y35Gdpsgvc2HUdvsjJvbAIu6o5XEWnmm5tJO1XGU1O6c+/oeGeHI7WS7JMuTM4s+4PmLGVqi5kZafm7qTRVMiJyVKPZ+7YqQBrpHUWkd/OWaFUYy7nuxysxWo28Nv5NhkeOdFB0knRpmz9/PlOnTiU6OprKykoWLVrEunXr+PXXX+3aTnV1NW5ubqhU7WNwF+0dw/U9ZlNUU8jwiBH1nru5163c3OtW5wQmSZeg5i4Fd/QYqsJgZsXBfEYkBBLq03DmmauLmtFdgxzW/lkualWL2nl1dSb/W3uUXuHeLHlAjp8kyZ6a01/Zs2zFruxSXlh2GIDuoV5M6dXxZpxVGsz1PktSZyaTZX/Q3KVMjpRVfpw7l98CwH/G/Y+RUaPbPAZ7UStqZ4cgSZ1WQUEBc+bMIS8vDx8fH/r06cOvv/7KxIkT7dbGL7/8ws6dOwkJCeHOO+9Eo3H+nw+VouLxQU81eLzMUMa6k6sZEDaISK/OUYdNktq79jR+AvjL4v38tC+PHqFeLHtolFNiaA29qXZ5qFz+IUn215z+yp6J/S5BHoR46zBabCSFd7xSM9nF1dw8JAZPnYYZfSOcHY4kOZzz3+20czabrd4yAXs5evQoGRkZ9OvXj7Cwxu8quKrd0Kq0mGwmPLWOr3Nhb18f/gKjtfb/LqfylJOj6RxsNhs2m63RREVumZ41h/KZ2juMQM+OXYtKap4PPvjA4W2kpaUBkJ+fT0FBAeHh4Q5vs6Xmr3+cnWe24+/qz/Jr16JS2sdMOEm6lDhq/FRpMPP2+mN4ubpw54g4NOdZxuTjrv3tc8dbwlhabeKb1NpxU2GlEb3JiptW3nRsrRpzDW4atwYrNYQQrM5eiavGlRGRHS+xKrWeo/qrPwr01LH1yfEIagvtdyR55XqmvLYRvdlKmI+rTJZJlwSZLDtHWy1lqqqqYtGiRQghOHDgAE888USjSyxDPcP4/solGKx6Yn262DWGtrDrzE4AFBR256cyq/t1To6oYzMajbz11ltUV1dz++23N0iy3vd5KvtyylmfWcT7cwY4KUqpsxowYABbt24lPDyc4OBgZ4dzQZbfCvpbbI4t3C1JUq22Gj8BvLwig4+3ZSEEeOg03DwkptHj/np5EjOTI0gK63g1WI4VVlFhqO3HCiqNnC7Xt8nmAJ3ZN4e/5F/bn2NS7BSeH/1Svee2n97KU+sfA2DR9G/p6t/8TbekjqOt+qsTRdU8/NUeXF3U/Pf6fnUbkajaSZKs0mDmuV8OEebjxoPjEi5arP9oQVXdhih55QaKq42E+bi1RaiS5DQyWXaOtljK1Fyhnu1jLfv+wr3834YnGRk5micGz2/SOdf3mE1awW40ioarul3j4Ag7N4PBwE8//UR5eTkAZ86caZAsi/JzY19OOVF+8g+XZH+TJk1i9OjRaLXadr/70Qtj/s2KE8sYEj5MziqTpDbQpuMnhbq1iRfqijRqFSkxfvZvv5mEEDz2zV5ST5by7k0D6BbqddFz+kT6MiDGj13ZpYzrHkxcMzYGkBo6fPgwi7d9BwqkntnV4PkAtwA0igaNSiN3Yb8EtFV/9e7G4+zLKUcAn23L5rFJ7SsJuyI9ny931s5gvapfBFH+7hc8fmCsPwNj/diZVcqs/hGEtmAX4s7OYrOwKWc9Xf27E+4pZ951BjJZdo62WMoE4OnpyezZs8nIyCA5Obndv/EEWH9yLaerclmc8e15k2XV5mqEEHVLRsdEj2PdDVtQFBU6dedcFlhWVsbOnTvx8/MjJSXFYT/LNWvWcPhwbUFQRVGIi4trcMxr1/XjkQk1dAmUg2rJMRy9oYm9FOuLOFWRTZ+gZGeHIkmXhLYaPwE8NrErXjoNXq4arh/Q/msSGsw2Fu/JRQBrjxQ0miwTQlBQaSTYS4eiKGg1Kr65ZygVBgverpoOMU5sLiEEe/fupaCggJSUFAICAhzSTmVlJV9//TXRqi7YvAXj/CY0OCbRvxtLZq1Ao9Lg6+r8BKvkWG3VX/UM966rOZgU3v5muI5ICKRflC8Rvm6E+178Rruri5qv7x6K0WLD1UUuC2/Mwv3v83baG/jq/Fhx3Tp5w7YTkMkyJ4mPjyc+vuNst3tdjxspN5YxMGxIo89nlhzhtl9uwobgw6mf0j2gBwCums49y+mzzz6jpKQEIQQqlYr+/fs7pJ3Kysq6fwshMJsb7kCjUatICJbLNCTpH1sWcKj4IDvytvPdlT87O5xWycjIoLy8nN69e+Pq6pi7uDmlNfyyP49pfcKJaMKAWZKcycvVpd3N0LgQN62af13dh705ZVx3nuTeo1/vZXFaLtP7hPH6DbXjCEVR8HHrePXWmurQoUP8+OOPKIrC/v37efTRRx2SFKypqUEIgZvVnaSyPvgZG0/KBbo7fmdU6dIye1A03UK80KpV9I3ydXY4DYR4u7J47vALHnO0oIqCSgNDuwSgKAqKoshE2QXo1LXjNK1a6+RIJHuRyTKpSYLcg/m/YQvO+/z+on0YrIbafxfurUuWdXYVFRUIIVAUpW6JpCMMHTqUY8eOYTabSUpKIjAw0GFtSVJH19WvG4eKD9I/JMXZobTKvn37WLx4MQAHDx7k1ltvbdF10tPTWbx4MSqVirvvvrvBDI5Hv97LjqwS1hwu4Mu7h7Y2bEmS/uDaAVFce4FZcOszCwHYkFnUViE53dkxkxCC6upqrFarQ3ZZDg4OpkePHhw6dAgXFxeGDpV9nNQ2FEVhYKy/s8NosRNF1Ux5bQMWm+DZ6T25ZViss0Nq92b3nEPvoD7E+MTKWWWdhEyWSa2WXnSQvkH9mBI3DZuwMbXLNGeH1GamTJnCihUr8PPzY8AAxxXVj46O5vHHH0ev1+Pt7d0pl2RIkj1sytnAj0e/x1vrzYMpjzk7nFbJy8tDURSEEOTl5bXoGgaDge+++w6bzQbA8uXLmT17dr1jEoM92ZFVQmLwxWspSZJkP+V6M4fPVPD3GT35dFs2N51ns4LOKDk5mfT0dAoKChg7dqxDEmVQm7C45pprKC8vx93dHa1WzviQpKYo15ux2GoXkhZUGpwcTcegUlQkhzhmlZHkHDJZJrXKihPL+fOGJ3BVu/LT1cvxd3NMzYn2qn///g5bevlHWq1WDvIk6SIKawoAqDJXYbIZgY6bAOrfvz979+5Fr9czcuTIFl1Dr9fXJcoArNaGO4T+Y2Yv7hsTL5dgSlIbEkJwxRubyCqu4d7R8ZfcrE43NzfuuOOONmlLURR8fX3bpC1J6iySo3x5+Zq+5JTquWNEw1rJknQpkMkyqUWMViO/Hv+F3KpcAEw2EyZbwzpakiRJbWlGwpVo1ToiPCMIcOvYy5WDgoJ47LHHsFgsLd5cwdfXl6SkJNLT01GpVAwbNqzBMYqiEOl34V2wJEmyn/255WTkV1JWYwJqZ3BIkiS1Bzab4NNt2ZisNm4fHoda1XFXs1gsFlauXElBQQGjRo1qdIM0SboQmSyTWuTDfe/ywb538XDxZMHwfxDpFUWoR6izw+rwrFYrRqMRd3f5xlWSWkKtUjMtfrqzw7AbtVqNWt3yYrqKojBr1iyKi4txd3eXfYskOVmV0cLVb23BZLVx7+h4ov3dmdE33NlhdQrV1dW4urq2qs+UpEvdluPF/PXngwBE+rkxtVeYkyNqud27d7Njxw6gtrTFk08+abdSNtnZ2aSnpxMREUHv3r1liZxOSibLpBY5O2PD39WfafEzZAdhB0II3n77bYqLi7nxxhtJSEhwdkiSJDnZ6dOnAQgPb/mbaUVR5KYgktROaFQKPm4aCqtMJIV5y0SZnRw8eJBvv/2WiIgI7rzzTmeHI0kdksliI9hLh7tWjcUm6BLo6eyQWkUI0ei/W6uoqIhPPvkEIQQ7duxAURR69+5tt+tL7YdMlkktck2360kJGUioZ9gllyhbsWIFaWlpjBkzhkGDBtntularlfLycoQQlJaW2u26kiR1TJmZmSxatAiA2bNnywS6JHUCri5qVj06hsJKIwnBHfuNaHMVFhbyxRdfoNPpuOmmm/Dw8LDbtUtKSup9liSpecr1Zia9up7yGjOf3D6IbqHe+Li5ODusVklJSaGoqIjCwkJGjhxpt/esBQUFdfVgFUUhLy9PJss6KZksk1pEURTi/Tr+G7f8/Hw2btxIYmIiffv2rfdcYWEhBoOBqKjft3u3Wq1s3boVgE2bNtk1WabRaLjtttsoKCiQHa4kXeKsVitlZWV1X5eXlzsvGEmS7MrHzaXDvwkVQrBhwwbKysoYP348np6/J/4sFgvHjx8nKioKN7ffNw7Zv39/3c3AzMxMkpOT7RbP0KFD8fT0JCIiwm7XlKRLSUGFgfwKIwA5pXoGxXX8Tds0Gg3Tpk2z+3VjY2Px9PSkqqoKlUpFUlKS3duQ2geZLHMCk8nEsmXLUKlUTJ061WHbZUsXt2LFCo4fP056ejpJSUm4uNQOXvV6PW+//TZCCG699Vaio6OB2vpB/fv3Jy0tza6JsrPCwsIIC/u9NoDFYiEjI4OgoCCCgoLs3p4kSc5ns9lYvXo1lZWVTJ48GZvNxltvvYVarWbYsGFotVq7vqmUpI4sIyODHTt2MHToUOLj450dziUrNzeXdevWAeDp6cn48ePrnlu7di1btmwhNjaWW265pe7xpKQkUlNT0el0dv/ZaTQa+vXrV++xgoICioqK6Natm6xjJkkXkRjixcvX9KWw0sh0uTz8gtzd3bnvvvs4efIkISEh+Pn5OTskyUFklsYJjh49SlpaGgDdu3cnMTHRKXE8vXE+W3M3868xL5MSOtApMThbbGwsx48fJywsrF7SUq1W4+bmhl6vx9XVtd4506dPZ/r01hUQX7p0KQcOHOCqq6664M9/xYoV7Ny5E41Gw0MPPVTvzq0ktaXjx4+za9cuBg0aRGxsrLPD6VROnjzJli1bAPD396dbt27o9XqgdgmBv79/k6+VlpZGRkYG48ePJyCg498VlqQ/WrFiBcXFxVRXVzstWZZ2qow7P9lJ/2g/3rkp5ZIrRwG1fZW7uzt6vb7eDHygbqzi5eVV7/HQ0FCeeOKJVrWbn5/P559/TlBQELNnz0alUjV6XEVFBe+88w42m42hQ4cyadKkVrUrSZeCq/tHOjsEuzp58iQ///wz4eHhXHHFFeftL1rC3d2d7t272+16Uvskk2VOEB0dTVBQECqVymnTxa02KytOLMMqrGzK2XjJJstGjhxJcnIyHh4e9Qa7Wq2WBx98EIvF4pDd4/bu3YvZbObIkSMNkmUnT55k5cqVREZGUl1dDdTOMDOb5dbykvMsW7aMoqIiSktLueeee5wdTqsIIcipPEWQexCuGreLn+BgQUFBeHh4oNfriYmJISwsjNmzZ6NWq5uVKANYvnw5RqMRb29vpkyZ4qCIJcl5UlJS2LhxI/3793daDOszCimqMrEyPZ8akxUP3aU3nHZ3d+fhhx/GbDY3GCcNHTqUpKQkvL297d7u8ePHqayspLKykpqamno3EW02G8uWLSM/P5/BgwfX1RSqqamxexySdD56vR6TyYSnlzfLD55Bo1KY2CMElerSS6q3NSEE5eXleHt7s3//ftasWUNFRQVFRUUMHjy4VZslSZemS++vezvg6enJ3LlzsVqtpKWlYbFY6N+/f90SwLagVql5dsRzpJ7ZyQ09ZjukjSpTFYvSP0WrduH6HjfhqnG9+ElO8Mc7n2dptVq0Wq1D2rzyyivJyMhg+PDhDZ5bsWIFubm55OTkcMMNN+Dn50dERISc4is5VZ8+fdi4cWOb19Mr1hehU7viqbXfrMqn1j/G6uyV+Lv689nlXxPsEWK3a7eEh4cHDz/8MFarFZ1OB9CsYv56vZ59+/aRkJDAsGHDSE9Pl3UPpU5r6NChDB06lEN5Fby+JpNh8YGkxLTt38ebBkeTX2EgOcrXYYmyjZmFrDtSyGW9Q0mJaV7SvK24uLicd+zq4+PjkDb79etHSUkJwcHBDWbbZ2VlsWvXLqB2DHf11VeTn5/PkCFDHBKLJP1RTU0Nr7/+OgaDAWuXEXySbgDgwXEJPDqxm5Oj6/xWrFjBtm3biImJoaCgoG6WvixnI7WUTJY50Zo1a+qW3mzfvp0HH3ywTduf0mUaU7rYv+jhWS9uf47lx39BICg1lPLIwNZNve8svt51iqX7K7l/7MhGE2CRkZHk5ubi6upKREQEXbt2dUKUklTfyJEjGTFiBKtXr+bf//430dHRzJo1y65T2v9oX0Eady6/FS+tJz9c9Qte2tbPUqgyVbE6eyUAJYYStuRuYmbXq1t93dbSaDQtrl95dodef39/HnjgAUaNGmXn6CSpfSmoNHDFm5swWQQvr8zgrRv7M7V32MVPtJMATx3PX+m4hPSJompu+WgHAvhkWxZbnhxPkJfOYe11FFVVVSxbtgwvLy9SUlIaPB8QEICLiwtms5mIiAh69epFr169nBCpdKkyGo0YDLUJskMnzwC+AGw73na7tB4tqGThlixmJkcwILZ9Jtod5eTJk0BtTcUJEyZw5MgRJk2aREhISIuWy2dlZfHTTz/Rt29fRo8ebe9wpQ5AJsucKC8vr+7fpaWlVFVVdaqaVEdLj2LDhoJCQU2Bs8NpF6w2wfzv92MVgkqDme/vazizbPLkyfTq1Qs/Pz+7bqsuSa116tQpNm/eDMChQ4dYv349Y8eOdVh7+TVnsAkrFcYKqk3VdkmWebh40CMgiUPF6biotPQN7nfxk9q5s7XJAgMDnRyJJLWNnFI9Jouo+/qLnSfbNFnmaPnlBmy/fXtmq6Bcb5bJMiA1NZX09HQAunbtSpcuXeo97+PjwwMPPEBFRYVcbiU5hZ+fHzfeeCM5+cV8vLSo7vEbB0W3WQz/XHaYVYcL2HKsmDWPjWmzdtuDadOmsW3bNpKSkujevTuDBw9u1vlWq7XeZiAHDhygtLSUHTt2yGTZJUomy5xo2LBhnDhxAgBfX1+H1MZyJi9t7fJGRVG4s4/zahxVVlaSkZFB165dz7vksq2oVQrDEwLYkFnEuO7BjR6jKAqRkZ2rwKbUOfxxuY3JZHJoe+NjJvH3kRYC3YII9bTPG2FFUbgv+X5S83dxZeIsIr2jLn5SOzd46DDiuyUREuBb7/GqqiqATnUTRpIAekf40CfCm325FQBck9Lxf4/P5e32+/B8ZEIg8UHOu3GWkZGBEIKuXbs6fSOD2NhY1Go1rq6uBAc3Poby8vJy+lhPurQlJiYSHBmLy6+rMFpsRPm5MbNf29WoHt8jhI1Hi5jaK7TN2mwvwsPDueqqq1p07uLFi9m/fz8zZsyo24F82LBhmM1mWcj/EiaTZU6UkJDA/PnzKS4uJjg42KHLmZzh5l63kl9zhpmJVxHvd+H6O5klR0jN38WMhCtxd2lZ0tBqtZKdnU1YWBhubr8X7f7iiy/Iy8sjJCSEe++9t0XXtqePbxtEpdGCt2vTa9SVlJSwatUqAgMDGTt2rNMHrNKlKSwsjIkTJ7Jt2zYCAgIYN26cQ9tTKSqmdrncrtc8VXGSB1fPBaBHQE+nJMusVisqlcouv8el1Sam/HcDxVUmFt42iIFRXixatIjCwkIMBgOKonDrrbc22K1OkjoyF7WKH+eN4HhhNe5aNWG+zt+ow54SQ7yYmBTCmXID/7y6zwX7CrPVxrepOXQJ8mBwXMt3wC0pKUGv19fbeCozM5MvvvgCgBtuuMHpZSFiYmL405/+hFqtrjf742K2bt1KdnY2o0ePJiys88xAlNovHzcXvr13GJuOFjG9T9u+5m4YFM0NbTiTraMrKytj4cKFVFRUIIQgOzub5ORk8vPzSUtLo3fv3mRkZJCZmcmkSZNwdW2fNbglx5DJMifTarWd9g/3iMhRjIhsWu2c+1fdS7G+iGJ9EfP6P9Si9pYvX86uXbsIDg7mvvvua/C82WzGbDa36UYKjVEUpVmJMoANGzZw6NAhoDbJGh0t/whKzjFs2DCGDRvm7DBazM3FHTeNGwaLgQC3lr+xbKm0tDR++uknYmJimDNnTqsTZpkFVeRXGAHYdrwYf1NBXc0OqN2lUkh5AAEAAElEQVQZ6vTp0zJZJnU6iqIQH9w5Z026qFW8d/OAJh37/e4c5i/ej0alkPbMJDxbsOFAeXk5b7zxBjabjeuuu65uFsW5/VN5eXmzr+sIzd14qaysjBUrVgC19aRuueUWR4QlSQ30jvChd4RjNrqQ7OfYsWN1/VtCQkJdeZFFixZRUVHB9u3bEaJ2Xby/vz8jRoxwWqxS2+tcU5mkDqu7fw8UFBL8Wn7X0mg01vt81o033khISAglJSV8/vnnrYrTWc7W3tDpdHJXTKmBF154gYEDB+Ll5UVwcDAzZ87kyJEjzg6rXQp0C+SHq35h8VVL6RfSsEC0I9hsNvLz87FaraSnpyOEICsri5qamlZfOyXGj7tHduGyXqHcPCSGqKiouiX9Zwtc9+3bt9XtSJLUPiUEe+KiVogN8MBV07JhvcViwWazAfWX1yckJDBlyhQAfvnlF7Kzs1sfcBtzd3evW5Z57qw5SZJa5ky5gVdWZrB4T05dEqkj69GjB3FxcXTp0oWrrroKb+/a+rhnN11Sq9V1Nw7kjpqXHjmz7BJjtVmZv/5x9uSn8uSQ/2NC7OR6zz2x7mFyK3N4dfwbhHm2XXHUV8e/QbW5Gk9ty+8SX3bZZcTFxREbG1vvcU9Pz7pOrrKysjVhOs2gQYOIi4vDw8Oj09W2k1pv/fr1zJs3j4EDB2KxWPjzn//MpEmTSE9Pl5tENCLArXmF8AtrCtiYs55x0RPwdW1+snrp0qXs3r2bxMREYmJiyMzMBCA7O5ukpKRmX+9capXCE5O7cbywGn8PLS5qVx555BHMZnO95eiSJLXelmNFPPxVGvFBnnx4y0DctL8vBdyQUchTi/dxw8BoHhiX2GYxpcT4s/eZSWjVKjTqliXLAgICuPXWW6murqZHjx71njv3Bl1HHENptVrmzZtHWVnZeeucSZLUdLcu3EFGfiU2ASpF4Yrktk1CW61Wdu3ahYeHR6t3u7VYLGg0GubMmdPguZtvvpmDBw+SkJCAVqvlxx9/5Msvv2T8+PFydtklRCbLLjHHy46y5uQqAD4+8GG9ZFmRvpANp9YBsOvMDqYnzGyzuBRFaVai7OydjHOXCLi6utKvX+M7282aNYv9+/fTs2fP1gXqRPJuhnQ+y5cvr/f1woULCQ4OJjU1lVGjmrYUWjq/v2x4ktT8XezM28ELo19q9vklJSV1n0eNGoWiKAgh7FKEWgjBje9vY2dWKYNi/fnq7iFoNJq6O6KSJNnPx1uzKKg0UlBpZPuJYsZ0+z35snR/HqfLDHy+PbtNk2UA7trm/b7bbAKVqv4S8JiYmEaPTUxMZMaMGVit1g47htLpdISEhDg7DOkSUq43s+dkKUlh3gR7d64aVzml+rrdenNK9W3e/q5du+rGvd7e3i0uTVNQUMCHH36IxWLhxhtvbLC7rq+vL8OHDwdAr9fXzaxNS0uTybJLiFyGeY72vJSpzFDG9tNbsdjMrbpOtE8sXf26o6AwLX5GvedCPEJ5dOCfuL7HbMbHTGpVO45UXV3NG2+8wfPPP8/BgwebdE5AQABjxoxxasLp9TWZ9HhmOX/6dm+nmLYstV9nay/4+/uf9xij0UhFRUW9j/am3FjOwv0fsC13S91jRquRZceXkFNxqs3iiPXp8tvnuBadP3PmTMaOHct1111HZGQkc+fOZe7cuXapI2ay2tiVVQrAzqwSLDbZt0htrz2PnwB2nywlu7i61deZ1jsctaIQ5edGcpRvvefuHR3PrJRIXriyT6vbcaQPN58g8ellXPXWZgxm60WPVxSFfv36MWDAAKdtLlRWVsbrr7/Oyy+/zOnTp50Sg9Q5tEVfVVptYtKr67l14U7GvryO44VVdr2+sy2Y3hNXl9oUQl6F45NlNpuNwsLCuqXi58rKymrxdTMzMzEajVit1rq60Ofj5ubG4MGD8fLyYuTIkS1uU+p45K3nc7TXpUxCCG795UZyKk+REjKQh1IeZVPuRsbFjG92jS+dWsdn07/CaDHg1siukzcm3WyvsB0mMzOT4uJiALZv395h7nS+sfYoBouNr1Nz+NOU7gR66pwdktQJ2Ww2Hn74YYYPH37B6ekvvPACzz77bBtG1nz/2vYPVmQtR0Hhuyt/Jto7hoX73+e9vW8T6hHGklkr2iSOp4b8hbuT72vW8s28vDxSU1NJSEige/fu9Wb4BQY2bxnoheg0ah6f1I1Pt2UzZ2gMLudZhlVQUIC7uzuenp2zILrkXO11/ATw097TPPjlHtQqePXaZKpNVswWGzcMim72ssUZfcOZ2CMErUaF+g8zs+ICPfj3rPZfH/CdDcew2gS7T5ax+2Qpw+Lt1x85Snp6et0M3T179tTVcZWk5mqLvmp7VkndxjvVJitrDhfQJaj+316rTWAwW/FowYYcF1NttPDgl3vIrzDwyrXJdA1p/Sz2c81KiWTxnhw2Hytm89Fiu167Md999x3p6en07duXmTNn1psB1ppN25KSkti5cycmk4nk5OSLHj9lypS6Go7SpUMmy87R3KVMRqOxXjF5R87MqDLV1olIzd/JfSvvpNpczdeHv2DldeubfadPpagaTZR1FDExMeh0OoxGY6vr/bSlaX3C+G53LgNj/fB3b95uTpLUVPPmzePAgQNs2rTpgsfNnz+fRx99tO7rioqKDrFjYohH7e7BoR5tt4uwoijNrnO2aNEiqqqq2L17Nw899BA+PuffEctoNJKTk0NMTEyLlk/OG5vAvLEJ530+NTWVJUuW4OLiwty5c/H19W12G5J0IS1ZCt5WY6hyfe2MfKsNHvgyre5xlUph9uDGlx5eyLl1yjqiy3uH8cHmLMJ8XOkZ3jF26ouPj2fdunVYrVa6devm7HCkDqwtylb0DPNGq1ZhttlA0GAWqtlq4/LXN5FZUMmbN/and6Qv36bmMCoxkH7Rrd/Ea9WhfFYfLgDgoy1ZvHBl71Zf84+evjyJT7Zmc1W/i9cr25lVwtZjxdwyLBYft+Ynt85OkDj7OSgoiNmzZ1NWVnbe8jtN4efnx8MPP9zi84uLi+smbZxvGbvU8clk2QVcbClTW83MUBSF96Z8zAvb/s7u/F24adypNlejUzt3ZtKJEyf49ttvSUhI4Morr2yzdv38/HjkkUcwGo11O5bYQ0FBATqd7oJvalvj37P68uSU7gR66BrUCmkuo9HIkiVLcHV1ZcqUKajVHXvwLtnH/fffz5IlS9iwYQORkZEXPFan06HTOaYP2X56K0+tf5w+QX0ZGz2e7Ios5vS6DT/X8y8LbcxTQ/5Ct4AedPPvTrR37UBkZuJVDAkfRqBbgCNCtxuVStXovxvz5ZdfkpWVxYABA5g2bZrdY8nLywPAbDZTUFCAr68vVVVVFBQUEBsbe9H4JKm5mrIUvK3GUDcOikZvsvDKqgxcNWrKfkueubo47++mEIK7P0sl7WQZ788ZQN8/vJl2pL9MS+LW4XEEeers9n9gMpk4c+YMkZGRDulPQkJCePzxx7HZbLi6tr7+U3p6OqmpqYwcObLBplDSpaWpZSuak9iP8ndn8dxhrDlcwMBYfwbE1r92aY2JI/m1kyC2HS/h3Y3H2X2yjLfWHSXtmUmt/r1MjvLFU6eh2mhhZEL9G32nSmuY8+EOInzdWHjrwBZvCtI91Jvnm5iEu/OTXZTrzejNVp6c0r3Zbc2aNYuDBw/Su/fv7SUk1N4gtFqtFBcX4+/v3+bLxFesWEFGRgaHDx+ud/NZ6lxksuw8mrKUqS1nZsT5duHdKR9Rba5Gb65h/am1DI8Y6bCOYcmxn/hk/4fc0fceJsdNbfSYI0eOUFNTw/79+7niiiva9A2Xvd/oZ2dns3DhQjQaDY888ohDdpxUFIVgL/sU+Tx8+DAHDhwAoFevXvKOxiVOCMEDDzzA4sWLWbduHXFxLautdT6Hiw9xpOQwwyKGE+R+8d3EVmevpNJUwebcjWzO3QjUzo79v2ELmtWut86HW3rd3uDxUI/QC56XnZ2NRqMhIqJtd2g610033cTevXvp0qXLRQv5n012n5v0fuLbvfyQlsvcMQk8MqF5y+3/aOTIkRiNRk6fPs0XX3zBzJkzWb16NZWVlYwZM4bRo0e36vqSdK6mLgVvqzGUWqVw96h45gyNRaXAxswizFYbk3teuB9pqXK9mXmLdqNWKbxxY388G1lmVWGwsDI9H4B1GYVtmixTFIUoP/uOcRYtWkR2djbDhw9nwoQJdr32WVqt/Wbk//rrr1RUVGC1Wrn11lvtdl2pY3Fk2Yqe4T7nnbkZ7OXKHcNj+WRbNkVVxrrkmFajwh5v62ICPNg2fzx6k5Ugr/rvlXZllXCiqJoTRdUUVBoJ93X8rtkjEwJZkZ7PwNgLz5orrTZxMK+CATF+9RKGgYGB5x2nfP3112RkZDB27Ng229DKYrGQnp5OcHAwGRkZDTYGkDoXmSw7j6YsZXLkzIzz8XDxwMPFg6u7XevQdj7e/wEnyo/zyYGPzpssGzp0KAaDgbi4uA4/M+Fs0UghRIcovh8XF0dQUBCurq6EhjpmwC91HPPmzWPRokX8+OOPeHl5cebMGQB8fHxwc2vdQGj3mV3cu+IObMKGn6s/3838CW/dhWdfXt9jNqcqTlJpquRwSToAgU1IsjWHwWJgU856egf1JeSc5NnZxDfA3LlznbapR1BQUJPfNF533XXk5eXVzQYs15v5JjUHgPc2Hm91sszHx4err76al19+GaidaWa11hb2PvtZkuylqUvB23oMdfbN1/gejt0VceuxIjYdLQJg54kSxnZv2Pf5uLnw9yt6sT+3jBsHtWwnt/bkbD/SWAHu9mjQoEFs27atVUu4pI7PmWUrvFxdMFsFm48VsfaxMSw7cIbBcf7oNPaZ7emp0zSaqJ/aK4zDZyqJ9HVrk0QZwP9u7N/oDrznqjFZmPzaBgoqjQyI8ePbe4c16dqVlZX1PreF9evXs2nTJry9vfnzn//cqrppUvsnk2WNaM5SpuZYlbWCxRnf0D0gifv63Y9G1X5/uW7vcxefHljIbb3vOO8xPj4+zJw5s+2CcqC4uDjuvPNOXF1dnV6MuCm8vb2ZO3eus8OQ2om33noLgDFjxtR7/KOPPmr1XfPteVs5mz8uNZSQUXKEAWGDLnhOF994Xhj9EhO+qr3Ld2PSHO7sc0+r4vij/6a+wteHvyDcM4Kfrv69BsnZml8qlarDLE92cXGpt/W5t6uGiT1CWHkon2sH2G+mzQ033MDx48dJSUlhyJAh5OXl0bVr6xJxknQuR42fympMPP/LIQqqjDw4LpH+dqjr4yjDEgIZ0zUItUphUNz5l3bdPCQG6ByzwmfPnk1ubm6HWdI4fPhwhg8f7uwwJCdydtmK20fEoVErDIkLwNddyw1tlDR3dVEzf2qPNmnrXBcrP1NQYaSgsnap676csiZf94YbbiArK6uulqEQgtOnT+Pm5nbBpbWtcbYEkJeXl0yUXQJksuwcjlzKdLoql/nrH0cg2J63jSD3YK7vMdtu17e3qV0uZ2qXy50dRpty5pKtixFCsGbNGioqKpg6dapdanZInYcjZ0MOCR/GR/vfRwjwd/Wnq3/Tiiv7uvpxR5+7yS7P5o4+d6NW2TdxdbZmo1Zdf2lOREQE8+bNQ61W4+fXft9QX4iiKLx7cwoGs61JxcStViv5+fmEhIRcMEEYHh5et4ucm5ubLPQv2Y2jl4I/v+wQ3+6unW2552QZu/8yscFulO2Ft6sLC2+78A2FzsbV1ZX4+Hhnh3FeeXl5rF+/nt69e3eYHdQlx3B0X9VU3q4u3D820Sltt0cxAe7cMTyWZQfOcN+Y829Y9EdeXl71apnt3LmTZcuWoVKpuPPOOwkLs/9mUAMHDiQhIeGiJTakzkEmy87hyKVMFcZyBLVvaFWKimK947fabQuFNQV463ycvtlAW9qfW46vmwtR/m23o2hpaWndNPG4uLgmbXEsSfbQLySFzy7/miMlhxgaPvyiSzDPdV+/BxwW17z+DzEkfBjd/BveIQ0MbN7Ole2RoihN3nXvhx9+4MCBA/To0YNrr3XsEn1Jaowjx08ARVUmAGwCKg1mzFab3RPwbc1osVJabSbU59K5+aXX6ykoKCAyMrJNZ/5u3bqVI0eOcPr0aZksu8Q5uq/qaHJKa8ivMNI/2rfNC+SfS1EUnr68J09f3rrfz7M/T5vNRmFhoUOSZUCHvRkrNV/HLjRlZ2+99Rbl5eWMGTOGsLCwuo+vvvqq1dfu6t+dy7pMByDCM5JZDq451ha25G5i6jfjuXXpjW3ettlsZtWqVaxatQqz2dxm7X68JYvp/9vE2JfXcSjPMdvcN8bX15eePXsSGRnZru/eSp1TV/9uTE+YSaC7c+p/NUaj0jA4fCi+rr7ODqVRQghOnTpFSUmJw9s6u5vX2c+S1NYcOX4CeGBsAt6uLqgUeGJyd6fuZGkv17yzlSH/XM2K9DNt3vaWY0U8/u1ethwrarM2zWYzb775JgsXLuT7779vs3YBkpOTCQoKYtiwptVBkjovR/dVHUm53sykVzdw9dtb+CEtt9Fjluw7zcw3N7P6UH4bR9cyI0eOJCEhgX79+pGUlOTscKROQM4sO4cjlzKpFBV/G/k8fx76DDq1zqnZe3upNFWioFBubPs3aDt37mTz5s1A7XKitqo9ceB07fdqsQky8ivpEebdJu2qVCpmzZrVJm1JktR6W7duZeXKlahUKu6++25CQhxXVPzqq68mPT2dHj3avg6JJIFjx08A/aL9SP3LRMxWW6dIlAGU15hRKbVvWNuSzSa485Nd1JisLN2Xx4EFk9tkSWtNTQ1VVVVA7bLIttSlSxdZ51UCHN9XdSQ2m8Bird2Uw2BufHOO/67OJKOgijfXH3P45ij24Ofnx+zZ7bfMkdTxyGRZG3PVdJ7p9pNipxDiHkKkl/23er+Yc4vwe3p6tlm788YkcKbcQKiPq8O2nZckqePLz6+9C2uz2SguLnZosszHx4ehQ4de9Lhjx46xd+9eevbsWVcMV5I6CrVK6fBLL8/17b3DOF5UxaBYxxShPh9FAT93LTUmPb7utbP12oKPjw/jx48nMzOTkSNHtk2jkiSdl5+Hlp/uH0FOqZ5x3RrfsXzumATe3XiMu0Z2cWgsR85U8uXOk4zrHszIxPazikGSFCFT7HZTUVGBj48P5eXldTtlSI4hhCAzMxMhBF27du0UM/U6Evla73zkz9S+SkpKWLZsGb6+vkyZMsXpO3NarVb++c9/YrFYUKlU/OlPf7L77l5tSb5eOx/5M207Z8oNrMsoYHTXIMJ8Lr06Tc4kX+cdn/wZ2t+ol9ZysqQGjUph99MT8XZ1zi6TQgi+++47srOzufrqqzvMDr+tIV/PFyZnlkkdkqIodO3a1dlhSJIkNcrf379dLQVQFAWtVovFYsHFxQWVSpYslaRLVaiPK9cPjHZ2GJIkSQB4/LahkVajQuPEnY6NRiMHDx4EID09/ZJIlkkXJpNlkuQEGzZsYOPGjYwdO1YWnJUkO9t9ZheZpRlc1fUaXNTOuTvZ3qhUKm6//XYOHz5MYmIiLi7y/0WSpI6noqKCjz76CJVKxW233dampTgkSXKMhbcNYun+PIbFB+CudV56wtXVlfHjx5OVlcWgQYMaPebAgQOsW7eOhIQEJk+eLFc3dXIyWSZJTrBv3z4sFgv79u2TyTJJsiObsHH/qnsxW024adyYkXils0NqNwICApq8GYoQApPJhFarlQNBSZLajVOnTlFWVgbA6dOn5SoDSeoEQrxduX14nLPDAGDEiBGMGDHivM8vW7aMmpoaiouL6devn0Nr0krOJ5NlkuQEU6ZMYdeuXQwePNjZoUhSp6JSVAyPGMm+gj0kBfZydjgdksVi4YsvvuD48eMEBgZyyy23yNkbkiS1C127diUlJQWVSkWXLo4tOi5JEpitNh78cg8mi43/3dAfN23n2WilJcLDwzl69Chubm6yxtclQCbLJMkJEhISSEhIcHYYktQpvTT2P84OoUM7fPgwx48fB6C4uJidO3cyduxYJ0clSZIELi4uXH755c4OQ5IuGdnF1Sw7cAYFSM+rICXGz9khOdV1111HdnY2ISEhuLnJDVI6O5ksk6R2SgjB2rVrOXHiBGPGjCE+Pt7ZIUmSdAnQarV1/xZC1PtakiSpI8jPz2f58uX4+voybdo0NBr5lkeSWiI+yJMnp3THaLaSHOXr7HCcTqPRyPdklxD5l0OS2qm8vDw2btwIwM8//8zDDz/s3IAkSbokJCYmMmzYMPbv3090dPR5i9xKkiS1V6tWrSIrKwuAuLg4+vTp49yAJKmDUhSF+0bL5FBL6PV6vv/+e/Ly8ujfvz9jx46VdWA7GJksky45VVVVbN++nW7duhEZGenscM7Ly8sLFxcXzGYzQUFBzg5HkqRLhKIoTJw4kYkTJzo7FEmS2pmDBw9SUlLCsGHDUKvbb+2ioKAgjh49iqIoBAQEODscSZIuQZs3b+bYsWMIIdi4cSPx8fHExMQ4OyypGWSyTLrkbNmyha1bt3Lo0CHuv/9+Z4dzXl5eXtx7773k5eWRmJjo7HAkSWolg8HAJ598gkaj4eabb8bFxcXZIUmSJDWZ0Wjk22+/BcDf35+ePXs6OaLzmzBhAtHR0fj4+BAWFubscCRJugSZzeZ6X1ssFidFIrWUytkBSK1XYSxnc85GjFajs0PpELp27YqPjw99+/Z1digXdXYwKmsGSVLHV1RURF5eHqdOnaKsrMzZ4UiSBOw5WUpmfqWzw+gQtFotPXr0ICgoqF3PzAdQqVR0795dJsokSXKaYcOG4edXuyFCz549iYuLc3JEUnPJmWWdwMOr72dfYRpXd72G+UOfcXY47V5sbCy33norO3bs4NixY7JIoyRJbcLPz4+YmBg8PDwctyzIYIB9+yjZcIDdq0pIP6ajxqhGb1KjqBRctTY8vRV69dPS/7JQvEf2hfBwx8QiSe3clmNF3Pj+dtSKwoY/jSXCV+5sdiGKonDttdeyZ88edu/ezfDhw+XNPEmSpPPw8fHh/vvvx2q1yk1GOij5U+sEVErtBEFFkRMFm2rp0qUcPXqUHTt28NRTT3X4DkwIQVpaGgUFBfTu3Ztw+eZXktqd7du3k52dDdTebYyIiLDPhfPyyHn5K774QrAjL4pU0Z8T3A6ATmXCS2tEp66d+m+waKg8qcO0XwufQFeOkOL6PYO7V3D9/8UTcvUIkMVnpUvE2ULLigLyVd80p0+f5qeffgJqZ2+NHj3ayRG1XmlpKbt27cLDw4PBgwe361psknSpstls5OTkEBoa2qGS9IqidPj3mZcy+ZPrBF4d/wbpxQfoF5xit2saLHrmr/8TVpuZF8a8jIeLh92u3R4EBARw9OhRvL29UakckGS0WODUKdDraz/UanBzAx8fCAmx+5vRXbt28csvv6AoCjt37uSBBx7Ax8fHrm1IktQ6oaGhALi6urb+91MIbOs2sObZjbyxoRc/iQdwVVsYkFDMzAEqBkwykTJUS2KiFpWq/qDSYoHDhwSpK0tIXa0hdV8K3+8N5YlrFK7xWsLc2/QMWzAJxc+3dTFKUjs3tEsAS+4fgYdOQ7gdZ5UtO5DHa6szuW90PFck2ykp3k54eHjUbT50dnmR3RUX137o9bUdlk5XO4aKiABXV7s2ZbFY+PDDD6murkYIQVlZGZdddpld25AkqfXWrVvHxo0b6dq1KzfccIOzw5EuETJZ1gl4aj0ZFDbErtc8UHSAjTnrAEjL383wyJF2vb6zTZo0iV69ehEYGNj6ZJkQcOAAVZvS2LOikNTdCqk5IRy0dacSL/R4I1BwQ48H+fTQbSMltpiUAQr9p4bgOz4FfnsT3VK5ubkoioIQAqvVSkFBgUyWSVI7k5SUxMMPP4xOp8O1FW/4bJu38t51q3gl91oy+Au9wop44wkTs+90w8vr4rNKNRro1VuhV+8Abnm0djloSbHg4wXHeXPhABb9N4w+r+/nyStWcsMXM1BcdS2OVZLau14R9v9b+eHmExw+U8l7G493umTZ2WVFer2ekJCQ1l+wtBT9hp3sXZZL6jYzu476klrdnVNEYcAVIzpcMOOGniBOkeJ7nJTEClKG6eg/PQLf0X1rO7UWqqyspKqqqu7rU6dOtf57kiTJ7s7OzmqzWVo1NVhT0ziy7DipG2vYk+lBid4dg0WDBTWuGguuLja6RJtJGexCyuVhBI7pBR6da4LJpU4my6RG9Qnqy/T4mViEmZTQgU0653RVLhklh0kO7o+vq4PuNtqJSqVqfXHasjKK3/qahf8pZWHhZRxkNgIVOpWJvpElDOhpwc9fwc1DBTYbhhodFcUq9qf3Y8nRYKqPuMHnkEgGs7uu4a5nwgi/YTS0IHnXo0cP9u7dC4Cnp2e7L7wrSZeqViWx9XqOPfgat78/lA08zXVj8vngb4LhIwJbPVnVP0Dhkdfjeeg1WP1NCf/9iwuzf7iGRcHrefdrP8Kn9GldA5J0CXlgbCJvrT/GnSOaVszZahNsOlqEh1bNgFh/B0fXet7e3nh7e7f8AkJg2bSNn/+ynTc39matGIcVDS6KmT7B+QwdYuSmhFLcPNVodQoWowV9pZXco3pS0+NYkhpJ9U53eA36u+zj3qknufGVAXjEN//G49ndMvPy8gDo3bt3y78vSZIcpkePHhQVFdGvXz/HNVJayvGXF/P+e4INBd1II5lqhgEQ71VAqFc1blorapWNYpOKaoOab/cFUr7HC96GaLIZ4L2Vq6YZmfXvIejCHVSfVmozihBCODuIzqKiogIfHx/Ky8tbN4iwAyEE3xz5klVZvxLqEcYDKY8Q5B7ssPaOlBzmtl9mY7Ka8Hf156srFuPn2v4HfC2ybx87//ozb/4czZfWWdhUGq4eXcSEWX6kDHclKQlcXC58CasVMo4Idq0sZf23BXyxJQaTTcOVHiuYe1Mlo5+fjOLfvIRjXl4ehYWFxMfH4+Hguxrt6bUu2Yf8mbZvts1beeOq1TxV8Agh/mY++MqLsRMcW1fnp/9mcc9jHhgsGl6dvoY5X1/ebmaZyddr59OefqanSmv41/LDFFUauTolkmtSohza3oNf7uGnvacBeGJyN+aNSXBoe06j15P3v+94/5UK3jkzg1wiGRaby023aRk8LZBevRWaUorIaoWM/UZ2fX+Sbz+pZkl2bzyp4tbEzdz3dBDdb27aTd6zTCYTGRkZeHp6Ehsb27LvrYna0+tcahn5M3SODz74gJycHLRaLU899VRdzUl7sO7czbI/b+TNNd1ZbpuIj0sNk/vmM2C4jpTLQug3yAVf38bPtdng+BEzu37MJXVtBVt369hc1I1ACrmz9w7u+XsksVf0tVus9iZfzxcmk2V21J5ebEuO/siCzX8BajcAiPPpwpczvrdrx3Kud9Pe4r29byGofTn9c/TLTIidZPd2hBANvoeioiIOHz5MQkJCXU0gh6ip4ej9r3LXR0NZx1hifMu4d66a2x/yIriVecjyMsEnf8/izfd1HK4Ip79mLx/8q5jkR8fZJ3Y7a0+vdanWhg0beOmll0hNTSUvL4/Fixczc+bMJp8vf6btV8krC7n6sRjWMZZ5N5bwz3f88fRso7bzzTw0+RCf7e3DTL/1fLa3Nx5Rzr8RIl+vnU97+ZmarTbGvryOvDID1t+GyO/enMKkJMeML2w2Qfz//cLZwXhcoAdrHxtj93YaGz9ZbYLFe3IxW23MSonERe24jaLM67fw/FW7eK7kXlzUNm6aVMh9/4gguX/r28zeX8G7jx/hvdVdKLQGcGvcev6zqje+XZzfV/1Re3mdSy0nf4bO8eOPP5KWlkZoaCj33HOPXa4pjh3n0xnf8Ez6dWQTS0p4HnMfd+f6e3xwd2/5dQ9vLubtPx1n4dZuVAhPZgRs4T9fRxA3rmmzjduSfD1fmNw+sZPakbe9bpdMm7BxrOwolaYKh7XXO6gPAoEKFRqVhm7+3e16fZvNxvvvv89LL71EUVFR3eNms5kPPviA1atX8+GHH6LX6+3abl37GzfzWswr9PnoYU769+OH76wcK/LlqedanygD8PFVeODlONLLwln1ZREWd28GPjaSv/b+HlNecesbkDq96upq+vbtyxtvvOHsUBxmR942Hll9PzvytjXp+N1ndvHyjn+xKmuFgyNznDN/+R9jHuvPfteBrF5h5X+ft12iDMA/xIVP0/qw+MVMVpYOYHL3LMqO5LddAJLUxvLKDeSU6usSZRqVwpZjjvs7rFIp9In0QfXbjpwDY+xfxmJF+hm6Pb2cZ346UO/xDzef4PFv9zJ/8X5eXZVh93YBqKlh75x/M2iMG38vmcuf7qkgt8iVd36JskuiDCCmtzfP/TqQU1X+vH3bdr4/0Y9eiQZ+eXqrXa4vSVKt1OwSrnhjE9e9u5WjBVUXP8GOpk+fzh133MFtt93W+ovZbJx+7iOmdzvCLelPMniYhh1bLOzKDeP2R1qXKAPoPjyAVzcPJLfMg/fm7SWtPJbe44N4c9YabBZb6+OX2oxMlnVSXXy7cHbSoEpR4efqj4eL495hDY0Yzmvj3+S2Pnfy4dTPiPKOtuv1LRYLp0+fRq/XU1hYWO9xg8EA1CbOzv7bbsxmjt7+PGNGWXm46C/cMdvIvpO+XHGVGkfsLK4oMP66QHYWxPLnKw/x/IHpDIrOI+2/G+zfmNSpTJ06lX/84x9ceeWVzg7FYd7a8zobc9bz1p7XL3rsibLj3LviDr46vIin1j/GhlPrHBaX2WwmPT29Xt9kD/l/fZPRz02k2CuWDbs8GDfRscsuL2TmE4ms/qKAdH0XJiQXUpFV4rRYJMmRgjx1eOjUnJ2DZbEJ4oMcm6FeeOsgHpvYjWcuT+LvM3vZ/fppp8owWW0Nkn6ny/SoFFAptUlCezNv2cmzUe8z4NOHsIZGsmOHwj/eDjzvcqbW0rkq3PPhYA7s1NM7MI9p/xjKbfHrKcsud0yDktQBGcxWrLaWLSy757NU9uWWszOrhCe+3WuXWF789TB/XryfgooL90Fn601rm7JW+wLEseN83PNFev5lJqm6Yfz0lZ6vNkcycKj9S7l7eKu543/92H/Kj5t67WXed+OYELiHE2tO2L0tyTFksuwcGzZsYPr06YSHh6MoCj/88IOzQ2qx2Um3cFn8dFzVrkR4RvKfcf9DrWr4RqvKVMWf1z/Bgk1/wWg1tqrN4ZEjua/fAyQF9mzVdRqj1WqZM2cOV1xxBd27/z5rzc3Njcsuu4yQkBDGjx9v323Ma2pYP/Iv9P/ofnL9+7ButZXXP/Nz6CYneksFlaYiXLTw7Pd92PFrGcLNg0EPDeG7e1c6rmHpkmM0GqmoqKj30d7N6nY9UV7RzOp2/UWPPVZ2FJuwYRM2FBSOlBxyWFxfffUV33zzDW+//TYFBQV2uWbpfz9l8t+GUekZxoY93iT1dMwS+uYYfH0caxeXccwYyfQ+WegL2/austS+dZYxlJtWzftzBhLu64abVs1Ng6O5cVDjNwB/2Z/H9e9uZe2R1v3e+3lomTc2gduGx6HT2D8pPndMAs9O78nbs1PqPX7v6HhGJgQxOC6Ah8Yn2rXNmh9WcMXIEv5eMpf595WzKzuI/gMdl/C3CgvlxnxMVgNRA0L4Ja8/H9y1le+PJzO8exG5++QsfalWZ+mrWmJ/bjl9/7aC8a+sw2C2Nvv8GpMVIUAIqDRaWhRDTmkNLyw7xIHT5XyyNYu31h3jy50neXZJeouu1xymtZu5sftubj38FJdPMHLwlA/Tr3VzeLteoR68vX84K1/ex7HqUHqPD+KXf+5zeLtS68ndMM9xdhnT7bffzlVXXeXscFrFRe3CsyOe49kRz13wuE0561mRtRyAibGTGR45si3Ca5HzFV0dOHAgAwc2r5jrRVVXs3Tw35h1cAHD+9WweH0AXl72beKPsivS2F9SmxALc+9G/6Dp9JsUxM6CAG7ps4dr3xnHB2XLufXLKY4NRLokvPDCCzz77LPODqNZpsVPZ1r89CYdOzBsMMHuIRTU5OOqcWV8jP1rKJ51dhc1m81GYWEhwa1cmy0OpnPzwwGc0iWwYasH8fH2iNI++l4Ry9IPM5h4WzfmjdrLh4eGOTskqZ3oTGOooV0C2PzkxWuGPr/sEDmleqqMFsZ2c9wmSq3lqdNwy7DYBo+HeLvy8e2D7N5exec/M+1mP/aoUli+1MaEywLt3sa5TFY9m/M+p9pSilpxYUjodfjpwrj93aEMv/wIE6/0YMQAPas3FNBlSPv9OUltozP1Vc11KK8Co8VGVnEN5Xozri7NS2D/bUYv/vzDfrRqFc9MS2pRDK+vOcpXu06x/UQJl/cOQ1C7BF3l4HuCNT+u5OqrBGvEDL76qIZrb3VgnevzmPBoHw7cUMVNffdxxfyBfFaaynX/Srn4iZLTyGTZOaZOncrUqVObfLzRaMRo/H02VkeYmfFHKaED6eIbj1alo3dQH2eH0z4Yjawa/XeuOvg3LhtVxRe/BuDq6vhmD5dtrPt3Xs0RqszD8dIGoHVV8Vl6f3wGbuf2ryah81rDDe+1z8L/Uscxf/58Hn300bqvKyoqiIpy7I5vbclH58PXVyzmYNEB4v0SCXSzz5u1JUuWcPr0aa699lp8f1tLNHHiRFasWEFYWBiJia2cnWGx8PH0b1gq/spPn5vo2cv5M8r+aNitXfnvyjXcuWgcs17Yy2Xz2+8uT1LbuRTHUDcPieGd9ce5cXCMs0NpN/Q/rWTGzd7s1/Rj5WoXho50/FuNvOojVFtKgdoZZsfLd5ISPAOAbjO6sWltFuPHCSaMgo27S4noZf+6cFLH0dy+qjOZmRxBhd5MlL87Id7Nf3MzKyWSK/tF1Ca3WpjdmpQUwqajRVyZHMENg6KpNFoorzFz/zjH7QJsXLGeK65UsVU1jF+WwPiprSxK1gpeYZ58dyKF23ts5oYXR6HS7uWav8txVHslk2Wt4IiZGV8f/oLMkiPcn/IIPjofu167MUHuwXx9xQ8Ob6cj2XHFc8xM/QvjB1Xx1cqAJm1jbg8uKlfMtt/X62tUvzes1ii8uWswxl7bmfP+SHwidnDZAvvfDZYuHTqdDp1O5+wwHMpT68Xg8KF2u57FYmH37t0IIThx4gT9+vUDIDk5meTkZLu0kfvMOzx84iFumlLI9KuD7HJNR7j9kzF8s2wHdz8dxYGbq/CNbMNdB6ROwd5jqJzSGl5ZmcG47sFc3ifcbte9kHtGxXPPqHY09dPJbHv2ct1VJnYoI1m5UtMmiTIAjer3v2UKteOpc0WPimX1r5mMmOTCpEGlbDnpiU+gS5vEJnV8nSGxf5ZWo+LOkV1adQ11K6eAje8RwvgeIXVfPzKha6uudzGWHbu54bJyNimTWb5MYfTENnpjdwEaDx0LM4Zhi1/P7H8MxyvgMFMetu/meJJ9yJplrTB//nzKy8vrPk6dOtWq69WYa3hx+/MszvyOX0/8YqcoL21CCDZt2sQ777zDhg0b6jY9OJ/qT7/nhl9voVe8gW/XXjxRVmUuIaNsCxWm1tcp6hc0DXeNH1qVG30CJuOmqb/uU6VWeG/vICYH72HO3+LJPyQLbEtSW9JoNFx55ZUMHz6cnj3tX5tRHEzn7n92wc1DxWuft99EGYCiVvHeTyFUWt15dKKsuyE1n73HUJ9szeb7Pbn83w/77RShVFxczKeffsonn3xSbyfyRplMvHH5Mn62TuObbxSGj75wokwIwcnKfWRV7MEmWrc7XLhHN6I9+6JRdPjpIujmN7zBMdHjE1n5eSGn9IE8OuVgq9qTLi0vvPACPj4+dR+daRZ+p6fX89K0tfxoncY3X4l2kSg7S+Wq5aP0wUzy3cn1j4WTm1nj7JCkRshkWSvodDq8vb3rfbSGm8aNK7vOort/EsMiRtgpyktbbm4uq1ev5syZM6xdu/bCg/GCAubfXUyeOpLPlgU0advgbWe+JqNsM1vOfNnqwZ6fLpxxkXcyKfp+or0aXxKr0ar4cGU0CoK5k49ykdyfdAmpqqoiLS2NtLQ0AE6cOEFaWhonT550bmCdTO/evZkwYUKrd2NqzPe3/sQvYirvfuyKv78dLmg0wv/+B+mOKZobNSKGV27YxUeHh7Hxc/k6k5rH3mOoab3D6BriyR3DWzdrQvrdL7/8wokTJ8jKymLp0qUXPPbY42/x1OkHmHtNIdOuuvis5dzqg+wr/pUDJavIqtzTqjgVRUWfwElMiXmQYWE3oFM3vhNTt+v78fLklXyYmszyt7Na1aZ06bB3Yr8lCioMjP73Wia9up5yvRkhBDtOlPDL/jxKq01tHk9bKS4uZsOGDRw/frxF5x+47w0WFN3PE3eWcfmsNqip00wuPu58sjIMN1sN90w6Lt/XtUNyGWY7oigK/zf0r84Oo9OwWq0XnUl2rvXXvsHrhmd59e+VJCS23+VpwX1CeXPeeq7932i+fmIn1/3bzpsbSB3Srl27GDt2bN3XZ+uR3XLLLSxcuNBJUTXOYDHw5aHPyKs6zbCIkYyOHnvxkzqYrKwsMjIySExMJC4u7uInZGfz2q5hjErMY/rVYfYJYvt2WLcOqquhe3dQ2f/+2O0fjuDlr4/w3wV6Rs5ufMdASWoLfaN8WfHwaGeH0SkIIbDZmn4D0LY7jdtf70ewr4l/fdi0WbHOek945+JpfBO0mbsejOfALLNcjildVHsoW7Evt5zs4tqZRxn5lSw7kMeHm7MACPDQ8uSUbvi565jQIxhFaX+1TpvrwIEDHD58mIyMDMxmMwC33XYb0dFNH2dYNmzhto9HEx9cxYLXAxwVaqv5D+jCu3f+xIz3Z/DJnw9zywtyOWZ7IpNlUqcjhOCXX35h165dBAYGMnLkSDIyMkhKSjrv1Onqz3/g9vVzGNG9kAf+3PTlT0NCr+V09WFC3RNQKX94I1pSAt7eoLH/r9k1/x3FrO82M++V7oy5q4yQbr52b0PqWMaMGdOs5LCzHC3N5IGV91Kor126/F3GN9yX/AB39L3byZHZT3FxMZ988gkA27ZtY+7cuQQGXniDgf1//4GNPMRXfzFc8LgmMxrh11/BaoW0NNi3D+xUV+1ciquOueOO8PDKyzh9tIbwBOcVzZUkqfXOnDnDZ599hl6vZ8SIEQghEEIwbdq0xk+wWnlzxjI2MJ81X5nxbGL5wkiPnghhwyasRHv9obi11QqlpXCRfrMlFDdX3l/kQa8r3Hl0Sjof7JKFtaX2b1RiEPeNjkenUREX6FGXKAMorTbxp+9ql59/dsdgRiQ4dvdZRzt9+jTfffddg8fz8/ObnizT63np6q3s5mG2/oB9Nmqz2UBRaj/sbPo7l3PTT7/y0ItDmXB7DRGJcizVXshlmOfoiMuYDBYDf1r7CDf+dA2Hix2z1KajKSsrY9euXQAUFRXh6urKvffey6hRoxq/2yIEb//pODlKFB/9FNisyReeLv509R2Gt/YPW5FXVcGLL8LPP7fiO7kAReHNX+OxCYV/3nXMMW1Ikp2dKDvOnCU31CXKzlp9cqWTInKMgwcP1r3BFEJQVlZ24ROMRt763JtQ93JmXm+nZQLbt0NGBnTvjrBYyfhsB8LauqXi53Pzv/viioH3Hj3kkOtLHUNHHEOtTM9nwivrefbngx3iZkNb2Lp1KzU1NdhsNrZs2cKcOXO45ZZbzpvwNyxexrO5d3LnjHzGTmr6LC1FUYj26kOsd7+GNxtXrYJ//QuKi1vzrZxX9Ixk/jl6OR+m9uXoQePFT5A6lY7SV5ksNv760wGe/fkgKgWenNKdhyd0ZdWhM/WOs1G7sYWigLdrx58HU1lZ2eAxX19fevTo0eRr5P9nEQuK7ufxO8oYNFRtn8A++wy++so+1/ojlYrXlibiZqvm/2484Zg2pBaRybJz7Nq1i379+tXtcPboo4/Sr18/nnnmGSdHdn5bcjex5uQqMkoP8/GBj5wdTrvg5uaGi4tLXWLMx+fCu4ratm7nrdMzuHZMIQmJtefYhJVSQy5WYWlZEJs319YJWrWqdoaZAwT1DuWupM0s3JxATZVj3gRLkj19n/ENZlvD2hr9g/s7IRrHOHLkCGvXrq37OiYmhtjY2AueU/HZT3xqmMVdt5jts/vu2VllWi3odGR4pfDekjAylxyxw8Ub8ukTw03RG3l3eRS/rZaQLkEdcQz1r+WHOVpYxUdbsjhWWO3scNoFHx8fhBAoinLR8RPAN387RBFBPPHS77vb1ZjLqTaXtiyAqipYsQIOHoQNG1p2jSa4/fV++FPMW4/LG46Xmo7SV+05VcrHW7P5aEsWe3PKOVlSw00fbOOp7w80OPaZy3uw6pHR9In0bftA7SwhIYHExEQURaFr1648/PDDPPDAA3g2ddqqELz/ahVqNTz1kp2WX2Zl1Za1WLUKcnLsc80/8B/QhUeS1/FlagJFBfJ9XXshk2XnOLuM6Y8f7a3ez7m6+XfHXVM7VXNg2CAnR9M+uLq6MmfOHPr168fll19OUlLSBY9f+cxGjpHAfX/7vU5QeslaNp9ZxN6i5c0P4OxAz8cHkXuajC9SEQKKDTnsyP+OvOqM5l/zPO5ZEE65zYsvn5GzCqX2z2A1oNBwduedfe9zQjSOkZeXV28G68yZM9FcZCn2r58VUIUXdz5lp6UTZ2eV/bZc4WB1DEcqwjj47aHaZQQOcOfdKk6bg9nyS5lDri+1fx1xDDUisfZ3LsLXjQhfNydH0z6MGjWKsWPHMmDAAGbPnn3hg48e5c39I5jY8zRdu9Y+pLdUsjb3fdbmfkCVqQUzwzZvhqwsRFAwGd/uQxSXYBM2DhSvZk/hUsw2+8wEc+2dyB0xq/loZSQ1chO6S0pH6av6RPgysUcIk3uG0DPcm38uO8Smo43/TqkUFfFBTUwmtXNqtZobb7yRp59+mhtuuAEfHx9UzVj2Y1mzgXcKr+TGycX4+dkpqNWroaysdgLEmjV2umhDt/+jCwjBR/931GFtSM0jk2UdjNlq5ov0z/j2yNdYbVYivCJZMmsFP1z1C1d1vcbZ4bUbkZGRTJ8+nZSUlEaXXpqsBiw2ExQV8eaa7vQNK2Do8N9/HURd6dkWLMv4baBHdDQZmiTeex8yd5aRUbqJAv1xDpbYr5PtMqs/U70288aHrnIHFandGxc9ARv1kzUTYybj6+rrnIAcoFevXnWFgLt27dqkmRm7DrgR6VHCxUpxnB3QX9AfZpVZbQo7cyOocfFmZ6oK6559Tf1WmiX56njcqCF16ZmLHyxJTnIgt5xXVh4hM792mc9fL09i1SOjWfXIaNy0dlqq08FpNBpGjRrFZZddhl8j7zSFEBgsVQDsfvZntjGUuU83Pnuj2cOSszcbPT3J8OjHezv6kPllKmXG02RV7ia3Op38mszmXvW87nnSlzKrJ1+9mGW3a0qSvbhp1bw3ZwDv3DSAN9YeZX1m4XmPjfDrfMn+lm5UsPSZ7Zwimrl/s9NmSVlZte/twsMRIaFk/HwEccoxs8sCLxvEtb4reWuRt6PubUrN1PEXNl9iFh36lNdT/wOARlEzs+vVeOt88NZd/A2ZVKvUmMeWvEVoVFq6vq9hibibtx6vqVevsaf/OCI9kvDWhZz/Qo05Z6CHiwsHlW4cyfPh4HeHGfh0LyrNRcR4JV/0MhabiYMlqykz5hPiHk833+Eof6zpAaAozJ1TxeVvJLBzeTGDprbf3V4kaWjEcJ4d8Tz/2vYPaiw19AtJ4enhf3N2WHYVGBjII488QmVlJf7+/hcf7NXUkFoUTUrfCsC/wdNCCPL1xzhevosSYw4g8NT4E+czgEjPnqiVP/wZPzurLCEBgBNlfuRUeJMQVMGpQj+yvtpOfL8+dt8ZU9MtnmT1DlJ3eNj1upJkLyaLjeve3Uq1ycqiHSfZ+ecJKIpCQnDnmI3RVnYVLCZff4xEz8G8840fkZ5lXH61b93zbhovxkbciQ0bni7NnNZx9mZj9+4cPBrCEWMcB5dsZ/p1vfHVhmG2GQlwvXiB7/yaY2SWbUWt0pDkNxaf84zl4u8ax5RH1/H2W124bUHzQpWktvTx1iyqjVYGxvrTL8qHdzf+XtdqWu8wxnULvsDZl5AzZ3hzazKDY87QPyXUPtc8O6ssKoqMogDeT4vmri920vVPkfa5/rkUhbl3W/j0xVCWf1bEZXM69mYNnYFMlnUw584qsGGjwljOyztfZF9BGqEeoTwy8E909e/mxAjbvypTMQIbZpuBtctdsKHm2tu96h2jUtT4uUY0/+LnDPSsNoWdeZHUqDzZueokMx7vSmT0/QAUG05RYSok3KMbOnXDN5fpJes4VXUQEFSWF6JTexDn3XhdpymP9cT7jXJWLSqQyTKp3ZsWP51p8dOdHYbd6PV6du/eTWJiIsHBtYNVrVZLQEDTfhdF2l52059HhjbcBVMIwb6iFZyqrj8brMpSwv7iFZyqPMCQ0GvQqH4rdPaHWWUAhwoDqTa70MWvlP3l/qRvqyDeETtjKgopoadZeUyWA5DaJ3HunPHf/rH8QB5vrDuG3mTlst5hPDguAY1aLrq4kHJTPgDGQ3tYZ5zCzCmVaDS+9Y5xd2nBDdxzbjZa1draGbFqL3YeC2DGuq2MmHUTAGabkayKPbhrfAl2j2twmRpLObsKfkD8VvZ8e/43TIi6D5XSyMxBjYZZKVncuXkMVVU0eSdPSWprf5vRi6X783hkYleSwry5vE84B09XEOrjyujEIFQq++/Q2BHpV29mtbiC/957/hqUekslJyv3UWHKR1FU+OsiifTshVbdyAZL58wqQ1E4WBTMEXMXDq7YQNcbcyDS/gmzwX8aTdcXj7D0U0Umy9oBOSLoYGYnzeHhAY/zxKD5TI+fyUOr57Hs+FJOVZ4kNX8Xdy2/hfxquQzmj2zCSokhB6vNQoRnD7r7jaJPwBTSMvxI9C3A19cOjfxhVtnZGR3xoVWcKnAl69vaHTqLDafYeuZLDpasZkvel40uq6owFXB2AYOCQqXp/FOv1bFR9HfZT+ouuQ5T6niEEORW5mC1WZ0dSots2LCBVatW8e233573GL2lkhJDTqO/6ydWZFKKPylTgho8d7Jyb4NE2bnKTKfZX7QKmw1MJjBt2oHp8HFMEXGYrGqMFjXbcyPwcDGjKODhJthZFItx6SpMBlvtOed8tHbKf0pvExlVYVRUtO46kuQIOo2aL+4cwtwx8Xx+52A2ZhZx7+e7OZBbztHCKl5fk8lLKxyzCUZHV20uo8pcu1lRSvBM4n0GE3bAmwy6MWBSwxmxLXL2ZmNk5O/jJ/8STtnCyfohrW6zpJ35izlQsoodBd+SV93w51VtLv0tUQYgMNn0mKz68zabMsoDgYq0HQ03n5Gk9mJmvwjemzOA7iG1N/f7RPpyw6BoxnYL7vCJsoqKCt566y2++uqrVu9KvHf5GaxoGDyx8YT9sfIdrM55m8zyLeTrj3GmJpP00rWsPPUGpxvpT+pmlQUE/F7WQvFg56kwrKvWNjzeDpQAfwZ5pLPrgM4h15eaR84s62Bc1C7c1PMWAHIqTrG/cG/dczZho8Zcw4ZT67im+/VOirB9Si9ZS1blHiI9epIcdBkJPoOhrIzU8goGDLXTDljnzCoTwsb20woFNVUkBhyjUESy4Zt1uE3zxOjze+dXbSlBYEOh/h3PUPdEykx5KCgIBMHuXc7frqKQEpHPt9mJ9vk+JKkNfXbwY15LfZnJsVN5bvSLdr++TdjYlLOBWJ84or1j7H79mJgYUlNTSfht2eMfCSHYePoTTLYa+gfNINyj/szfzCO1ScKkvi4Nzsss33bR9nNr0tn45niOHNBg26GFyjsg+/dBYrHejUjv2uxVkEcNh0sSefgjX0grgcDf71iqVNCzJ8yd26Rvu1FJPRXEchXHjsFvm4xJUrvSN8qXvlG+ALyzPg2VArbf3psJ4Mudp5g/tYfT4muP9JZK1ud+iEAwOuJ2/HRh+OnCWLe6NpGfMsoOS6//cLNx7xlPCvV6EtwyOCPi2HSwGNXP/yFk9uO/3UwEUKgwFRL2hz7VRxuKVuWG2WZAAN4ugY3O4D8raVocuhcMpC4tYMS4iy/xlCRnuePjnWzILOSNG/szKclOSwzbgVOnTlFQUEBBQQEGgwE3t5bXX9u1U+CimOnVy6XBc9mVezlUur7R8wQ2dhf+hFZ1HYFuv/UDf5hVdqL0t7IWAaWcqogk65cfiJ/gmNllKQllfLMvDLMZXBp+K1IbkjPLOrDGauEIandEuRSkpqayYcMGbE2YDqH6ra6P6pz6Ptadu0kjmZQR7i2OoW5GR0kVpmWrMbn5YFBcOFJ6gE0n/XF1qa2FpvO0si87ihM/fcDpipNobQGYTSpi3IZhMasbzOiI9xlE34ApxHj1Y2DwVYS6XzgRlpJsJVsfQnGRnF0mdSwVpnIUFMqNZQ65/vdHvuHRNQ9w85LrMVvNdr9+9+7d+fOf/8ykSZPOe4yLSlfv87n0v+3C5vGH93JV5mIM1somRCDoNeQknpWnOXFaS4W2/vLPEI9qvHW1Mya8dUZCfIwgbHDqJAhBRQWcOAFeXjB2bBOauwAP79qkv75aVqWV2j9FocHuvB18gkaTlZaWsnz5cnJzcy96rILC2aKuqnP+v1J3K7ipjXTv3rIY6sZPJjCt24LpeA6msBgKa0pZlaVDp6lEUcDdxcBuUzKmXzewbs8bhOr6YDGpUVu9Cdb2ajB+0qpdGR52E3HeA0j0GcKQ0OsuWDvSpX9v+rKP1M0Nl8JLUnthswk2ZBZitgq2nLMjpsHcMWfln6tbt26MGTOGK6+8slWJMoQg9YQ/vUOLzlaiqGMTVg6XNJ4oO9fh0o2/f3HOrDL4vaxFiEcV1Wov0k95OWxnzJQhWoxCS/oBOZ5yNjmzrAML94xgUNgQdp3ZgU3YUCkqvLRejI4e5+zQHK68vJwlS5YAEBYWRmLihZNJPfxGE+nZE0+X399IHl6VQw3jSJncyBr1Jnr7bTh4EGzZJZA+Dnz9qN5fjln0p0zvTahX7fJJf7dyMqsTeOu/IZStj8TbaxjeuiBWoGp0RoeiKER59SaqiXGkjPeFHyB1dRmTrrPXPsmS5Hj3JM9lQOggegb2csj1vXTeAHi4eLR4Z6XWUBSFUeG3YLIZcNN4NXje8Nv7M9c/dEMW0fTEXpeYYp4KWcmXURGs0w/CYIFon3Ia+3YD3PWgURDlxzmZF4PFNYArroAbbqDVy9HdPGpv1OgrLYC2dReTJAe7fmA0i9NyUZTfa5jNGRrr1JjayoYNG0hLS+PkyZPcfffdFzzWVePJuIi76v591u5TQSRHFKLRtGxWRd34yWiGnR5guBvbSXcqzIUNxk8ZVQk8v/E+qnKDMET5E+n5ICpFzRKV0uiMWA8XX5L8xzQtEDc3UvxPsCFjZIu+D0lqCyqVwhs39mfL0WLuGxMPwGfbs3n6hwPcNbILf77MsTNiq40W/rx4P+5aNX+7ohcudqztqNFoGD16dOsvlJVFqqkXQ/o0HD8V6rMxC+NFL1FiOE1ZdRnuuWWwYRuERIFNgxDUL2vhYmanOZlJa39CGTGuwewyjaZ1+yj1mxaO8o6N1GUF9O3XeWYRdkQyWdaBKYrCv8e+xlt7XmdvQRphnmHM6/8QgW5tXwywzFCKRqXBU9vwzaAjeHl5kZiYSFVVFeHh4Rc9XlEUvLX1awLln6kdHUfHtXy7+LFjISvTwK69xfgq4GEtxSJqZ3EEepTiqa2tk+Gpq8Hir0IpMaHLr6DCtQAMwZSU1NbZbu2Mjuiute+0809e/A+BJLUnGpULg8OHOuz6k+Om0tWvG4HugWhUzvmTp1a54KZqfB69Wls7mrL+4eawm7rpfan3nhP4ndrH3eP0dDuj5uuDSRwoCKJrQAk6TcO7zkaVG5nl3gSeOcnNz/kxeqwKdcu7wToWgwUAjascWkjt36A4fz65bRDvbDhOjcnCZb3DuH1Yw4Lxjma1CU6X64n0dWuzhH5SUhJZWVkkN3Gjj3OTZAAIQZHFh/DAls/WHTsWsrMhdWshvoUVuAbYwNL4+ClQlGITGtzyyjEEe5NvqsBQ4W+X8RNAuHcVRWdavspAktrCpKTQessvD+dVIIADp8sd3vbmY0X8uPc0ANcMiKJ/dDu8MV9YyCkSmd29YY3Cps3Uh2WfJ/NjjgbtET1kXw0B/vDbjNoGZS0qonl43UzIroZzVoPbo6yFZ0IooZzh1DFLyy8i2YUc0XZw7i7uPDboSafGkFlyhJuXXI+rxpXFVy3Fz9VOxV4vQKVSceONN7bqGvqa2qmtLZ3xK4QgJC6Pq5M+xN9LsME0AsVsJMyrrNEZHb5uVWh8jPiVVnPIzx+D1sAVV7jZZUaHzrt2vrG+SnaqkiSE4I3dr5FVcYInB/8fcb4XqPnnZG5utZ2F4Q8rgFw1ngS6xlJkyLrg+VqTGt91+0GrRe2mZVzcCeJ8S/l4bzL784PpHVLQ4JyM4gB6R53ilsClxAXeDupku3wvht/6n7MzzCSpvRuZGMTIxIaba7Slh77cw5L9eTw4LpFHJ3ZtkzYTExN56KGHWn4BoxEDrgS3YsVUfFcDs2/Zi+fGzexQ9UJYFcLcCxofP7lWgk7gUlhNeW4gVUHVXH2Fv13GTwBuOht6iywMJHUsT07pTp9IX8Z0dXwfNqRLAGO6BuGmVdMz3Nvh7bWIwYABV9y9GibxGyuD0Zg+Q0+S8XUvDmVaCPAI4NzvtEFZCw8VFtwh7zRERlBh9aS42D6TIHBzww09hho5nnI2mSyTWq1IX4RFWKgyV1FlqmqTZJk9mMy1HZC2BauFrDYzG/M+RV92mq7bV3B9dz1hSgXLM0aRWRxHrN8ptOqGiasaVw9yTwXi6VfKzfMrmDHJzS4zOhS1Ci1GTHJimSRxsiKbhQc+ACApoBe397nLyRGdn094bbGywlwToaH1O6PufiPZlJfN2Z1xG5N83B9V5lY4Z4OBWN8yXFRWdJrGk+c6jRWtu4ZY1zPw66/Qp0/r1gv8pvBo7d1tu+wuLEmXiJMltYULT5XWODmSZrBaMeOCRt2yOqmnqw6xu2gJQTuPcJvXTmIGTGDZsTEXHD+ZrFqOmSPxKypmyp0V3H1LlF3GTwAuaismm3xLJHUsXq4uXDugqQVbWsfb1YWFtw1qk7ZazGzGiA6trqrBU0FucSioztkpt3Fdu1m4rudKvtqhZ515GAaL5cJlLdwEIr+AkyfOYAlPsFtZC1xc0FGDQd+KOxKSXch0ZQezM287L21/gdNVFy/K2laGhA/j32Nf5e1JHxDl3XF2EtL9NqPD2IIE09HybVSZi/HflYV7TinmcC+GRqVx54CvSQw8QVZp43+8ssqiSAzK4pGAN5jcX2+3gZ4wGDGhQ+dupwtKUgcW4RXB4LChhHqEMSrKDnUwHKjPtNq+YveShn26ry6UISHXoFEauyOqopfHSII3ZtZm/M+pZptX5cWxUn+C3GvffFebXMgoDqDGXDtzIsi9mqMl/uQF9IK0NNi3zy7fy+7d4KHWEx9vl8tJkl3pTVb+veIIi3acdHYo9bx9Uwr/vKo3C6b3dHYoTefqig4jJlPzk2U2YWVP0S+oq40EbsxAeGoYEruvCeOnSLqE5/BgyNtcptpmt/ETgNGkwlVt/w1gJElqQzodLpixGBuWn3BR6Yj1vvg23d3Ko/Dfu467hx3gngG70WksHCgIwmhpvMMxWjUcNCWiK8zhnqsKuftuO90wNBox44LWVaZqnE3eRulg/rzhCUoNpVSYKvj7yBecHQ5QWw9sTPR4Z4fRbK4etS9/fcOl7RdVYSqqG+hZPLQITW0nGul9BheVBa3a1Oh5LmoTeKnpYTiJ+5Y9cGVsS8Ovx1hW+024esllBJKkUbnwxqR37XY9IQSffvopubm5zJ49m+ho+90U8Bnei0QySF1v4pZGng90i2Fi1Fzyao5QbDiFEDa8tcFEevZEu3knZGTUm1UGkF4YRLlBR5R3OXmVnhTr3YjzLeNYiS+B7npCPKvIqfDmUE0M4dYD9pldZrORejKIfpFFqNVtc6dbkppjcVou/1t7FIDh8QHEBHhc5Iy2Ee7rxvUDO86NRgDUalwVEzUtmAxnthkQ2OpuNlYl1C4ha8r4yUVtJTS8lJCtp2BGCfjbZyWD3qDgppHJMknq0FxdccXw2yZDDfXwG021qZQCw/FGn+/iPZCIVUehrAx17yjGBTe1rEU+t7h+RZxxGKjn2Od70evR44OrR8tm70r2I9OVHcyIyNGoFDWDw4Y4O5QOL7x37c6YWXtKm31usFtc3UDPEOZT93iZPpJT5ZH4udUuR9KbdZwojUBvrp314e9WzsnyCCq8B8KqVVBSYofvBE5sqp2VEt6zHRbclKQOzmQykZWVVffZrtzdSfE5Rmr6+XflVas0RHr2pG/gFJKDLqOLzwC0FlVtkusPs8qEgN15YagUweGiQMw2NXP67GXBmHXM6bsPk1XNkaJAFEWQmheGiIq2z+yyY8dItfQhpZ/c5lxqn/pF+eKp05AY7EmwV8t3wZZqRfuWcyynaXWAzqVVuaOrocHNxsLqIHLKo/Fzqy2g3ej4qSycIp++6AoqYP16+3wjNhtH8z2JCmjBnVNJ6uQy8isZ/PwqZr65GYO54YytdiUqimAKyMlsPIuvUtQMDLmSlKAr8NdFosYFjeJCiFsCQ0KuI6kiFmXLFggP5+y6yyaVtdDYiO2igg0bICfHLt+K8dBxCggmKM7z4gdLDiWTZR3MX4f/na03pXJ5whXODoWs8hM8uvoBvjz0ubNDaZGul3fFk0pSf8lv9rkxqgSit+bXG+i5qr2p0I9G2CIJ89BRUB1ATkUYIZ7FnCoPo6DaH2+dHos1lBPaQXD6tN0Ge6kba/8w9B8ol2FKjlFSUkJ6ejqGP1aivwTodDquvPJKhg4dysCBA+1+/ZTECtIKIxrsiHlB27fXzir7wyy3gmoPjhQFUGXS0sWvlMeGbmFG9ww8tGau6H6Ex4dtoYtfKdUmLRnFgRSqQmq34vz1V7C1PNFVtn4vR0kkZVLHqFkpXXp6hHmz75lJrHh4FG5a5/+tfGPdUe79LJXcso6ZpEnpVs3BkrBmzy5TFIUhxyIa3GwsrRmGzRZOjLc3JTWhDcZPXrpq9BZ/SvTDUAIC7HfD8dgxdpn7kpLczhMBkuQEGzOLyK80knaqjBNF1c4O58JCQujvdojUfedfZaMoKsI8ujIs7Aamxj7MlJiHGRhyJYFu0bB6NZSVQUBA3fFNLmvh1qW2P1qzxi7fyoFfczCjJWWcr12uJ7WcTJZ1QGqV8wd5AIvSP2VDzjpe3vEvDJaO9wZa1SWWfpr9pO5o3gBJCBulq78hKB/844cQ4BpNiFsCkR492XMmApUiyCqLwU0dyo29d/HAkE+Z2WMVKrwpqOqDi9qF1DPhCH/7DfZSD7nTxbsQPzmxTHKAgoIC3nzzTb755hs++OADbK1IqnRUvXv3ZtKkSbi1dPvcCxg+3Z8amxtrF2Y37QSjsdFZZQBHigNRKYIruh/myRGb6RlcWO/5nsGFPDliM1d0P4xC7ewzols/u+yXN04AMGySV4uvIUmOplIpKI1Vam5jBZUGXvr1CMsPnuGzbU38vW9nUka4YUPN3l3NW75YXZqDauVqgoP7EOiVQKBrDNGeyRwq7IZKEWQUh6BVBXJnv0weGvIFM3uswmrTkl/ZB3eNB3vORCDCwu12w7FqUxqH6U7KBDmAkqQ/uqpfBDOTw5k3Jp5uIe3/73tKXCl78kKbd/MRICsLNm+uN6sMfi9r4etqIK/SkxNlvkR4VXCsxJe8Sk98XA2UG3QcKgqC0FC7zS5L3WZBhZW+yc7/e3Wpk8kyqcXGxUzAR+fLpNgp6NTNn4rvdIpCSvgZdp1o3kyI7LwtlPz8EfnqAtzdAglwjcJHF0JhjVe9GR1PDNvGjG4ZuLsYGB+/lTv6f0+8X9nvMzp8E+0z2KuoILWsCynd2vkdH6nDOnnyJNbfRh5FRUVUVlY6OaLzM1qNVBjL27TNrKws/v3vf7NkyZIWnT/kydH0VB/mrReauCT8PLPKAKK8y7mtXxp3p+zG17Xxmxi+rgbuTtnNbf3SiPIuB0/P1s0uO3GCN9OGMq77aVncX5KaINBDx9huQQR4aJmYFOLscFqk17QYXDCRuvRMk88RwsahJc9TkbGDymBX/HTh+LtGUm4Irjd+enzYVmYlncLNRc/4+K3c1v9r4vyKfx8/GbxqZ3/Y4YZj2q/5CFSkjJbLnSTpj/w8tLx6XT+emNwdlarliRubTSCE4+tvpQxUUW11I+NIM9tqZFZZs8taBAbZZ3aZEKQe8yEpqAh399ZdSmo9mSyTWmxI+DBWX7+R50a/2C7u1LbEgL5mjteEUZzf+Fr0xnjsSP9tB8yAeo83NqPDRxuMVlXb06WE1dSf0VESbJfBnmXjVvbQj5ThsgaL5BiJiYl1M6piY2Px9vZ2ckSNK6opZNo3E5nw1SjWn1zbZu1mZmZSXV3N3r17W3S+otMyd0IGPx7rRc6RiyS9LzCrDCDOr4xhUadQKRceKKoUwbCoU8T5ldU+0IrZZXv//hObGcHcpwMufrAkSahUCh/dOojUv0ykf3THnNGkG9SX3uxn+5pm3KirqiZoYyYWDy1q7e+zdM83IzbYLQ5Q6B6Yx1MjttSfERtun9llO7Za0alM9OxAm5FKUkeSXVxN/+dWMuqltZTrHbuRRv+ptTcfdi1tRomd88wqa3ZZC72nfWaXnTpFqj6JlF7Gll9Dshu5G+YlyCZsqJSOkSctLy9HCIGvXfbhbWjcAz1R/2zhi78c5P73+l78hKoqgjYewRzUE7VfYr0k4dkZHUMic+reqCqKihivZGxYUSsaoHZGx7aQAsI8K8EnHPbvrx3sXXllg+Zyqw6xr/hXYrySSfIf02hIP/9jL1VMZvIceVdUcgwfHx8eeughSktLCQ4ObnfJ8eXHl/KPLQsYGTWaMmPt7KydZ7YzOnpsm7Q/ZMgQTCYTXbp0afE1bnq5H0/+que9xzJ4dknK+Q9MS6sd2NXUwMGDLW6vUXo9rFsHyclNP8dg4K0vfAj3KGfGNT4XP16SOjAhBELQqhkWbcVitZGeV0H3UG+0GgeM+dzdubxbJq/snk5FucDb5+L/J8qWLUQWeWDt2hut9vebLo2NnwB8dCF4aQNRUFAUS/3xk0r1+w3H0aMb7IxptVnYcmYRBmsVw0JvwMOlYVJS7NvPxyfHMCmlCBeX8Fb8Z0hSfadKath8rIghcQHEBraPnXed5VBeBWU1ZspqzOSU1uDj5rixgt+0YfRX7eGb99y4+YnQpp10dlZZVP2dvM9N4l/f62CD2fpny1p8eaAnqafDOVwUSHB0Ve37ujVrYE7LdsY8+spPpHI/D17bgu2GJbuTybJOxmKzoLfU4KVtfObHppwNPLH2YS7rcjlPD/9bG0fXPCUlJbzxxhsIIbjnnnsICbH/UoWwib240n8Nb34Rz7x3691QaNzmzZCVhUv37qDUrx0X51f2+yyNcyiKgvqcX7WzMzp+++qCg70C/XGswkxeTUbjybLcXN7c1p+hcXkk9wu7+DcsdWpvvPEGL730EmfOnKFv3768/vrrDBo0yC7X1ul0hIY2ceDRxrbnbcNgNXC87BjT468grzqP67vPbrP2vby8mDZtWquu4d0ziptjl/HO8gE8UajHM+g8tdHi4lo8AGuSoKBmHV748id8ZriRJx4w4HL+mrqS1CGU6814aNVo1A2TSzab4Np3t3LkTCXf3juMbqHtu37P//1wgK92nWJa71DeuPECCfhWuOvpMJ67ScdnfzvO3Jcvsga7qgpWrEDt5YPatf4Y9XzjJ6jdwe73f587fqJ2Jsh5bjgarJWUm2pnl5QZ8xpNlm1d8Cv7eJwXn2366gJJupiiKiNT/7uRKqMFd62atY+NIcT70l39MaFHCH+a3A1vNxeSwhy8MsHTk3tHHeKeddeTlWEitqv2wsefZ1YZnD+Jf66zZS3qkviK8vvssnHjIDKyefFbLLz9gQZ/XRXX3CInQbQHMlnWxkpKSrDZbAQGBtr92lablZt+vpZjZUd5aeyrjIke1+CY9KKDmG1mUvN32b19ezObzXWFxE0mk8PamXuPlXEvxLD+05OMmdOwBlCd3wZ6uLiA2Vz7YQ++vrX1hxoZ7HXzHY5W5UaYR9dGTz3ywves4gE+nd8xd9OS7Oerr77i0Ucf5e2332bw4MG8+uqrTJ48mSNHjhAcHOzs8Bxqbr8HCPUIZUz0eLr5d3d2OC32+LtdWTjJg6cm7eZ/e4Y3flBwMEye3Oq2bMLG3qJfOFNzlDD3bvQNnIzS3BnHx44x768BuLrC3Kft/zdNks5lMFs5fKaSxGBPPHT2H77+sj+PeYt2kxTuzc/zRjSYPWay2tiXU47JaiOjoLLdJ8vKamrHTaU1jlv2FHnDSK64ZyVvfpDEff++yA3HzZvh2LHahH9zt9C8EA+PRm84erj40TtgEgZLJaGNjaEqKnjz50gS/IuZOFUuIZfs51hhFVXG2gRsjclKRn7lJZ0s06hVzB2TcMFj9Ho9paWlhIWFtXr1wo0vJvPEoAre/dNpnv8h6cIHn2dWGVw4iX+uBkn8oKAWzy7Tf7uUD6uu5Y45Nbi5yWRZe9CukmX79u1j48aNaLVahg0bRs9OVkBg7969/PDDDwBMnjyZIUOG2PX6JquRE+XHEQgySo40miy7uect+LsFkBIywK5tO0JISAi33XYbVquVqEY6MXsZ8/RIur+YwZv/qL5wsiwzs3aA5+ICeXn2DcLHB1JTGyTL3F186RnQ8OcIgNnMWx+5Euhayayb2/eg/VLg7P7rlVde4a677uK2224D4O2332bp0qV8+OGHPPXUU20aS1sLcg/mnuR5zg6j1bpMjOefM1bz0E/jmfW/A4y5v5fD2ioyZJNbfQiAnOoDRHr2rN06valsNr6Z/gnfWJ/lyw8MzZ2QJjmAs/sgRzKYrUx7fSPHCqsJ83Fl+UOj8HGz71TGg6fLEUBGfiUmqw3XP+w87uqi5ou7BnOiqIbLerX/mdwvzurLZUcKGJnowF9OlYp5N1cw/u0oNvxYyuiZF6i/lpYGXl5QVGTfGBSl9ubloUMwvP5Nhhiv85fXKHjrO76x3MgL8/SoOkZlkk6jM/dVAH0jfekd4cP+3HJ6hHoxIKZ5G4m1B8cLq/jHL4foHurF4xO7OXTpuRCCd999l7KyMi6//HJSUlo3E9ZjYBK3RnzL+7+M56/GRsu71ioshD17aiv527ushRCwcydMnw5+Ta9L+dXfMyhjOvc+Izul9qLdJMtee+01HnnkEby9vVGr1ZSWltK7d28+/vhjkptTP8UOHLWUad85hZPT0tLsnixzc3HntfFvkl58kOt63HjeY2Z1u7bFbQghWJX9KxrFhTHR4xxeuyi6kd3eGmMwGMjOziYuLg6t9iJTbv9AcXNl7oQMHv11MgeWZNHr8tjGD+zbF/7v/1q2W1xTeDbvDkLuX9/lw5qbmXu7AVdXmSxzJmf3XyaTidTUVObPn1/3mEqlYsKECWzdurXRc4xGI0bj78VDKyoqHB6ndHH3fzuGbwP2cPujgey77gLLMVtJp6q/xZJW3bx2Cv/5AfMOzeOqkYVcO0dmypzN2X3QWY4aPx08XcGxwtpC8nnlBlKzSxjX3b6lGe4ZHY+bVk2/KD9cXdSNHpMS409KK974niqpYc3hAib1DCHMxzG/22f5uLlwRXJEk47Nzc1FpVIRFtb8JODYf4ynx7uHWTAXVs/wO3/i6d57odxBOxUrSu0yqqYqKeH5v1lQq+HWh30dE5PUqM7eV0FtYv2HucM5Xa4nzNu10WXd7d3/1h5lzeEC1hwuYHJSKH2jfB3ansViqfe5te57woPXHvbjwycOcd9/ezR+kK8v3HILOGr1kk5Xe4OgiUwr1/Pv9KlM7nOG+HhZQ7HdEE70wQcfiNTUVGEwGERQUJD417/+JWw2mxBCiBMnTognn3xSeHp6is2bN7dZTF9++aXQarXiww8/FAcPHhR33XWX8PX1Ffn5+Rc9t7y8XACivLy80ee3bt0qFixYIBYsWCDWrFlj79AdxmQxCYvVIoQQYsnRn0TKwl4iZWEvsTZ7tZMj+91nn30mFixYIL777rsWna8vrhZJ2gwxwCNdmA0WO0dnf7YDB8U0ZakI9SgXxcVt3/7FXuuXgvbUf+Xm5gpAbNmypd7jTzzxhBg0aFCj5/z1r38VQIOPS/ln2lZqzBViV/6P4mjZ9kafz1yWKdyoFnd3WydsVpvD4jhVeVCk5v8kcqsONes8645d4ir1YhHgWinOnHFQcBch+6D21QcJ0brxkxAX/plW6E1i0PMrRcxTS0SfZ38V+RV6e4fvMHrT72OKof9cJWKeWiIm/medEyOqLzc3t25sWlRU1KJrrHpkiQAh3px3wM7ROcbGyX8XClbx8jNlbd72pdh3XUp9VUf33oZjovvTy8RDX+4WMU8tEf3/vkKUVBkd3m55ebk4evRo3eui1axWcUfYUuGlVIjsAxX2uaYjVVWJv/q+KjSKWezeZW3Tpjvz69kenJos69Gjh9BoNEKj0QiVSiVmzZol/vOf/4h169aJsrLaP2D/+9//xNChQ9sspkGDBol58+bVfW21WkV4eLh44YUXGhxrMBhEeXl53cepU6cu+mI7efKkOHHihP06Awc7WZ4tRn0+REz/dpKoNlWLnzN/qEuWrc5a6ezw6nz99ddiwYIF4ueff27xNba/s0eosIjnL9tox8gcwGwWC+MWCBDip28d/wesMbJjbV/9V0uSZS3pv6SGvvjiC/Hcc8+JrKysJp9zpHSz+PnEi+LnEy8Kk9XQ6DHv3rpJgBD/GLXcXqHahS39kHjA9V2hYBXfL3JewkL2Qe2rDxKieeMnIZrfB5VUGcWvB/M6VKLs6R/3i9inlohPt9X2D0NeqE2WjX+5/STL8vPzxYIFC8Tf/vY3UVpa2rKL2GzinsglwkOpEsfT2vfvZPU3S0UCGWJYQr6wOOHe6KXYd3X0vuqPOvPP8Lp3t4qYp5aIOz7eIXJKa0SVwezskFqsbG+WiFROiYmRB0V7f9u957oXhAaTeOb+tp8B0Zlfz/bg1GSZEELo9XqxY8cOodPpxLXXXisGDx4s3N3dhUqlEnFxcWL8+PFCq9WKJUuWiBMnTjg0FqPRKNRqtVi8eHG9x+fMmSNmzJjR4PhLYWbG5pyNdcmxvMrTwmqzip+P/iiWH/+lXSX8zGazyMnJEVZr67LxTw5YJbQYxP6fT9gnMDuy2WyixlwhTj75X+FDqbhpSoHTYpEda6320n81t+9qTHv+me7M2yG25GxqV32OELW/k88995xYsGCB2Lix6Un2cmOBWJvzvthTsPSC39Pfpm4WIMQrE5aK9jDSs+0/IJ7y+K8AId5+ucqpsbTn12tb6sh90KUwhrr89Y0i5qkl4k/f7hVCCHG8sEq8u+GYOFlS7eTI6ispKalLWrRUxcGTIlrJFmPD0kUrh2IOYbIahLEgRzzs/o5wVRnE4UPO6VMv1b6rI/dVl9LNxcz8SvHSr4dFVpFz/8bby/IHfhYgxLuPHHR2KOdlXLFO9GWP6BNeIIxOmANxqfZJTeX0ZNlZ48aNE88995wQojbDf/DgQfH555+Le+65RyiKIvz9/YWiKMLLy8thMTR3dsal0HnabDax9OhPYtOpDc4OpU2cXY7ZV3dIlJ+wX3bfbDWKbXlfi6VZr4jdBUuE1da8kaTVZhGbTn8uNrx3jxinrHba8suzZMdaX3vovwYNGiTuv//+uq+tVquIiIjo8HdKz03Y/3Ks5TNHHeXEiRNi48aNwuiAEY7NJsRT47YJEGLBwCXCZnLeHV7r5q1iru59AUK8vMD5Sxra6+vVWZzdB8nZrY3LKqoSH2w6LorbYBlTe7DykaUChPjb9MaXmLfU6arDYnn2f8WKk2+KIv3JZp9/pjpT/HL4n+Lj7vcKBav499Ntv/zyrEu97+qIfdWlkNjvtM5Zjnng1xxnR9PQyZPiMa+3nbL88qxLvU+6mHZT4P/ll19mzJgxHD9+nHvvvZe+ffsSFRXF7t27CQ8PJycnh5ycHA4cOODsUOvodDp0591io3NQFIXL4qc7O4w24+rvzpffaBg1M4jpfY6zPFODW4h3q697snIfhYYsAHKr0wl1TySssa3Mz6PMmIdl/Rb+e88kNivD+fSLHPz9Wx+XZB/tof969NFHueWWWxgwYACDBg3i1Vdfpbq6um53zI6q3Fh2zr8vXBy6uLiYFStWEBMTw7BhwxwcWa3Y2FhiY2MRQlBZWYmnp6fdNj5RFHhh9WB8rt7J/O+nkR6ykv/9GEXQyO52uX6TmEyc+tPr3PXfXqwQt/HuqzXc9ZDcUKS9aQ99UHNdCmOomAAPbh8e5+ww2syEl6fyt61LeebnafjfupN5Cwe2+ppCCPYWLcciaotw7y9ewZiIO5p1jePF26m8KZO7Dr/B+CH7efiv598lU3KsjthXzZ8/n0cffbTu64qKCqKiopwYkdRkKhWvrOvPzt45TLrMj01bCokb5LhNiaw2C7nV6agUDREe3VGUC2zuUFDAi/2/5OXKJ3h1QRn9UnwdFpfUcu0mWZacnExqair33nsvQ4YMQQgBgEaj4cMPPwQgMjKSyMhIh8UQGBiIWq0mPz+/3uP5+fmEhoY6rF2p6YqKivD29m72jpfN0XtGHEs/zGDibd2Y0fUAi/cl4BkT0Kpr/rGzvGDn2Qjd6jTevmkEP9pm8H9vLmby5DGtikeyr/bQf1133XUUFhbyzDPPcObMGZKTk1m+fDkhIfbdMa6tTYqdSom+BLPNxFVdr7ngsVu3biUjI4OMjAySk5Nxd3e/4PH2tGnTJtasWUNKSgqXX365Xa/91HcDiXvuKPP+OoCeo8y8deP3XP3xDNA49k+42L2HD6/4kUdzHsHTS+GXz61Mmd52/6dS0zm7D5Ljp/bPYDBQXV1NQEDrxjMXpCj8ZdNUyvou5/6Pp4B1G/M+tcPO74pSO5cHBYVm7ixoMJB/9U5u2/UaKb2O8PdvTqJWy2SZs3TEvupSSOy3JSGE3W4qnrV06VL27t3LzJkzSUpKqvecd9dQft1oYuQwPeNGuLB6bR5dhjd/59+m2Fu8nNPVhwCoMhfT3W9k4weePs1/+n/Kk0VP8vS8Eh76a8t3WZYcq13tZRsfH8/KlSvJzc3l+++/58svv+TYsWPMnj27TdrXarWkpKSwevXqusdsNhurV69m6NChbRKDdH579uzhjTfeqPtj6kjDbu3K0ndPs62yJxN7nKJ4W2arrhft2Zsw925oVW7EeCUT4hbftBOFoPq9RVw3XcV3tqt59d3DPHTbMLy1jrsrIrWMs/svgPvvv5/s7GyMRiPbt29n8ODBbda2o6hVamb3nMOtve9Eq75wkrxbt264uLjQpUsX3Nzc2ijCWuXl5fU+29t1/5fAwWNujOhawKxFV3Fd8FryvlgHNpv9G8vNJevef3LZgHzuzFnAVTMsHDzpzZTpLvZvS7IbZ/ZBcvzUvtlsNt566y3+97//ceTIEYe2pahV/DttIo/2Wcn9nw3hbxM2YDNbW349RaF/4OW4qb3x0PjRN3BK008+c4avUl7k2p0vMrR/IR+ssjAwvBnnSw4h+yrnMZitfL3rFDuzSpzS/pYtW/jHP/7Bli1b7HrdgwcPYjabycxs/P1a6KBoVq8GF2FixGgV+xcftWv7Z5Uachv997nEocP8tee3PJr/JE/eWcyzr8tEWbvmxCWg7dKXX34pdDqdWLhwoUhPTxd333238PX1FWfOnLnouR1xzW+NqVrM/fUuMfO7y0R6Ufve8nvr1q1iwYIF4tVXX22zNnd8kyUCVMUilNPip9u+F226dVJentgwYr6IJ1O4awzi1yWmtmv7Ijria126MPkzbR2j0SgOHjwoampqHNqOzSbEF3/PFAHqEuGCUVzv+bPYcP9XwlZc0uoLW1etEb+O+Ju4gh+ECosI9yoXS39oP/3OueTrtf1pzfhJiI75M12y77QY/Pwq8efv97W7DUjOZbFYxD//+U+xYMECsW/fvjZp02a1ib+PXilAiNHeqeLYymNt0m5t4zZR8s7X4mbtFwKEuGFCvlMKZzemI77OO5tLsa866x9LD4qYp5aI2PlLxNGCyjZv/7PPPhMLFiwQn376qV2vm5mZKX7++WdRUnLhsdCZ3bmir+sh4Ua1+M/lq4TVaN9asMfLU8XPJ14US068JE5XHa7/pMUisv/vHTFJtUKAEP98spXjNjvpyK/ntiCTZY14/fXXRXR0tNBqtWLQoEFi27ZtTTqvI77YNp5aX1c8+++b/+rscC7IZrOJY8eOicpKx3Xu1aYysS7nI7HjzPd1RfhzMmvEZbEHBQhxU9AyUbwtw2HtCyGEsNlE1ftfiAd1bwsFqxjevVBkOLjJ5uqIr3XpwhzxM926dat49913RUZ7ewF3AqUlNvHqg8dEV69cAUL0VA6I11M+Evvnfy7MG7YIUX2R3fZsNiGOHROmRd+IPbe+Kl4K+pdIIEOAEH0iCsU7r9YIB3a1rSb7oPappeMnITrmz3TqaxtEzFNLRMxTS0Remd7Z4VxQaWmpOHHihEOTeuvXrxevvvqqyMzMrHts9X/2iljNSeFOlXh95iphNTn4pmNenvh/9u46vqlz/wP4J9IkdVcqVCg1aKG4F/cxXAcMGDZnwu5vxuQyu9vuNmTsbnC3wR0wZBsb7g4tlFJooS11d5fI8/ujNCNU0yY5Sfp98+qL9uTI96Q53z7nOY/83v8D5opMZm1SwbZ/VaYPkwkrGeLn3Bh1tlzV4K2Dt5U5Ky5b9/EXFRWxs2fPtlqppU0V+VXsuV7nGcDYEMub7P5fCa1vpIYqaRmrkanOJqqIi2fbfDcyS5Qyd4sidviA/vy9MOTPsy7wGHvYWZx0WFlZGaytrVFaWgorK8MYfL2kphiL/pyLgqp8/GvkVxjUZQjXIbUZYwyFhYWwsbGBUENj96SWR+N24XEAQESX5TA3sX14LODH/7uHFz52hamiEh+NOYk5n/WDpGfbB+lvlVwO2aEj+P3tSLwWswCZAk/88906PP+GBQQCzR1GEwzxs05apunfqUKhwAcffADGGFxdXfHMM89oIEr98UfiQXx+/VOsDFuDuYG662r7OMaAU/uKsemdPPx21w8KCGCGSoQhGuF2KejpXQYrcwUkEgAKOaqrgJJCOW6lWCGytgdi0BO1kEDEl2LWyCKsedcJAwfxoOHhRDSOcpDxMcTf6X/OP8CHf8Whv7cddi0fAD5fzy+cR9TU1KC2thbW1tYa2+enn36Kqqoq9OjRA9OnT1cur8irwutjbmBzzBAMs4jCW2uLMerdoeBJNDgOVEYGot//A59sd8T/pDMxsXcOtv3ugi5dNHcITTDEzzlRZci/w4paGX6+kgpfRwuMCWp6TFupXIGfr6TCwVKMKT3ddByh7pzdfAdPv2iJbKkD3hlxFqu+DoF1iIYnbsjIwI13fsMbO/xxTDEGT0/Mwee7XKDBtNthhvx51gWqLNMgQ/2wKZgCcoUcJoKWx6M5c+YM4uPjMWHCBHh5eekouuZdvXoVR44cgY+PDxYtWqSRfdbJq3Gn6BTMhNbwtxncaADKzMRqPDs5GQfvBcEB+VjmdRIrX7eB94rR7R9sOy8P2V/uxn821+Hb0jnIhDsiQvLx7X5HdOumgZPSAkP9rJPmaeN3unfvXty9exdjxozR2eyUuvLq6RdxOu0kwp374Ithm8AYg7m5OacxlZYCN69JEfVXLqIu1SDqngXulzYesJgPOQIcixDeow7hEVboE2GJsDCA4/DVQjnI+Bjq77RWJodIwG9xwOrkgkq8tCcavo7m+GRGKAQcV6rJZDLljMlPP/20xmb2i42NRWxsLEaMGNHkYOmnv7qN5/9hgdhKb3QXJGD1iHgs/jwUNj0923dAxlB75DR+fTsGmyP74RIGoYt5MT7YKMTiZy31stLfUD/n5G/G/jv85Xoa1u+/DQA49NwQhLhpvmaHMYbo6GiYm5vD31+DDQ/UVFlQjTfG38TmqH4QoxYLvc5jzetWCF05AOC3c2h3hQI1R85g71sx2HyjP65gILysirBlhxkmPCnR7AlogLF/njtKb2bDJNzh8/jgC1pOCHK5HGfPngUAXLt2TS8qy2pra1X+1wSRwBS9HCc1+3oXP1MciA/Cvdt12PpaAbYen4RP1phjwosnMcovFeF9Beg1wQVWQ0MBtyaexshkQHw8qi5F49bxPERFAWdSuuI3tgoioQILppVi9dtAr140gD8xfLNmzYJcLodAB00jc3JycOnSJYSGhsLXt40TaHTAC+Hr4GXVFUMch+PLL7+EXC7HihUrOJ35z9oaGDHGBCPG/D2LmFQKVFfXf/F4gKkpYGoqgFBIOYYQTRALW89v+29kIDq9BNHpJVg5zBf+zpY6iKx5CoUCUqkUAJT/a0JISAhCQkKafT3i+R6IeQ64sDMVm94vxysnx+ONUCmm2h5FP/9ShA8xRa8p7rAaEAQ0NftgYSFqrkQj5s90RF2uQ1SCJX6rHI0CjMSo7unY/1YVpsyx1fZEwYQYNXdbM/AASEwEsDdveWKl9kpKSsLvv/8OAFi3bh0sLCy0cpzWmDuY4qvIQVifUInvXo7DtiO9sW2NEwa9FIVpPR+gzyARej/hAeuBQahvot+E2loobt1G0pEERJ0px+UbYuwsnYRCjMSYgHQceLsak2fZUV4yUNSyTIO0XTN7/Phx3Lt3D+PHj4efn5/G99+aI0eOID4+HpMnT+bk+I9TKBRITU2Fi4uLzme+a1BZCfzySRp2/KBAZJYrahRi8KBANyQgzOQObEyqYGoiBRQMNTIhymtFiFEE4y6CoIAAJnwZwtwLsWClBRavMYeNDSenoTZ6CmF8DP13umfPHsTFxcHBwQFr167V2XHT09OVM/TOnTsX3bt319mxOzND/7ySxrT5O72fW44XfrmJrg7m+PecXhAJdTsZ/L2ccqzZFQUfRwtsmd8bwlYeUOpCSUkJKisr0YXDfoo5D6rw3bp4HL5oheiCLqhm9WU5f9yHrygdpsI6iPkySOU8VMtEyJQ6IhYhkMEEQp4MwQ65iBjOsPK9LggI1MNmZE2g3GX4dPE7LK2W4sqDQgzwsYe1qe5nok4vqoKpSAAHCw12lX5ESUkJ/vOf/8DCwgLLly/X2HA6HSWtY/j903vYtlWOC1k+qFLU5yQ/JCDcOhHOZhWQiBQQ8uSolfJQVc1HfLETbrBeKIUNAMDTohAzJlZj1Xtd4N9d//MS5aSWUWWZBmnzw1ZTU4OPP/4YAODt7Y2nnnpKo/vXR6mlKSiuKUKYc2+uQ2kTmQyIu8sQdawQUadKcTveBBU1AtRIBVAwPkxFMpibMgQG8RA+2gbhQ8wQEtL0w1N9R4nV+Bj67zQuLg5Hjx7FgAEDMGDAAJ0dlzGG2NhYSKVS9OrVq8WuWERzDP3zShrT5u/0vUN38cPFZADArysHok9XO43uX99I5QpcSCxAqLsN7LTUMkTTZDIg7kY1on7PRNSFKmTkiVBdy0etVACRCYNEpICjCx+9h1mizwRH9AzjN9vQQ59R7jJ8uvgdTt9yETfSShDmYYODawZr5RhcY4zpdZlJLgfuxdQi6rcMRJ2rxM17piiqkqBGJoRUIYCpiQwSEzl83OsQPkCE8AlOCB8khoMD15Grh3JSy/SjGpe0SiwWIygoCAkJCQgLC+M6HK2rqKvAvD9mok5ei2/GfIsBbvo/3pFQCPToyUOPng5Y8oqBZUpCDFxgYCACAwN1flwej4cePXro/LiEkLab1MMF+29mwNPWDEFuxn8z8PWpBHx1KhGh7tb4ba1hTNwkFAI9+pmiRz8/LOE6GEI4VlJV3z26tFpz3aTborRaip+upGCQrwN6e9pqZJ8yuQIfHYkHn8fDa+O6K1vW6nNFGQAIBEBQLzGCevlCMyNjE0NElWUGgsfjYdasWZwdv6CgALdu3UJoaCgcdFBlLuQLYCY0Q528FuYmBjTqNCHEqJ1KPYH3Lr6FMOfe+FfEVxDw9WyqWtSP4yiVSjkbA4QQfRPuZYfot8ZycmzGGH6+mgYAWNjfUyc3iNam9a3JbMwMo1UZIUTVf57qgz9vZ2NSD1edHnfT6URsO/8AtmbJuKmhnHkrowT/uVDfsnd8iIvGKuEI0QWqLCNt8ueffyIlJQUZGRlYvHix1o8nEZriwPRDqJJWwdm8fsDsqqoq/PzzzwCARYsWcTZOGSGk8/otYT8qpBW4kHEOWRWZ8LBq5yxuWlJTU4Ovv/4a1dXVWLp0qcZmuSOEtE9kajHe+i0WABDoYqmTLqBPD+6KiO6OcLc1Uy778XIKvj6ViBdHd8OC/txP0kQIaZ6PowWeG9lN58ft5WkDAY+H/t72GttnsJs1xgY5g8/jwdfBHFGpRejRxUbnY0cS0h5UWUbaxNfXF6mpqTqZZa6BpcgKlqK/u0ukpqYiOzsbQP2g2lxONaxpjDGkpqbC2toatrb0xIUYJsYY7t+/DwDw9/fX+yb27TErYC7uFcWjl3NvdLF0b30DHaurq0NVVRUAoLS0tE2VZTU1NYiJiQFjDN27d4eNocw0QogB8HYwh4uVBDwe0NVBNy3leTwefBxVW5b+dCUV+RW1+PlqqtFVllVUVCA3Nxfe3t7g8+kGnJD2mhDiirj3nGEi0Fz5TWIiwLZFfQAAK36KxPG7uZjcwxXfzDeMMalJ50aVZaRNhgwZgsGDB3N68+vr64sePXqAx+PB29ubszi0ISYmBgcPHoRIJMK6desgElHXCWJ4EhIS8MsvvwAA5syZg4CAAI4j0rwh7sNwZPYprsNolpWVFZ566imUl5cjODi4Tdv88MMPyM/PBwCcOHECa9asoUp7QjTEwUKMy+tHAuB2jJ7XxgXgh4vJWDHUuMpPAPCf//wHpaWliIiIwLBhw7gOhxCDps0WX0WVdSr/E6LvqLKMtBnXrUREIhGmT5/OaQza0vDecv0eE9IRj35+6bPMnaYeJshkMkRGRsLGxgZOTk6ws/u7K1hxcbHKesnJyVRZRogG6UM+HBPkjDFBzlyHoRVUhiLEMGyZ3xsn4/OMNhcR40OVZXqsrq4OtbW1sLS05DoUnZIr5Ho5aLY29ejRA7a2trCysqJWZcRgdevWDfPnzwdjDN266X6sDdK8a9eu4fjx48qfx4wZg0GD6mcZHj16NI4cOQIA4PP5NM4ZMQpZJdWwtxBBLOw85QnGGBgD+PzOVWm0fPly5OXloWvXrlyHQgh5SCpXYNl/r+N2Zim+nNMLw/0d4WQlwbx++jXWKyEtocoyPVVTU4NvvvkGlZWVePLJJ9GzZ0+uQ9KJgwn7sfHye+jj0g9fj9kKPq9zjD3B4/HoBpUYBaok4x5jDMeOHcOtW7fg6+uLadOmwdHRUWWdO3fuIC4uDowxzJ8/Hx4eHkhJSYGPj0+jdQkxNN+df4AP/4qDj4M5jr44DCYC4y9LVNTK8OTmi0gvqsK2RX0wzL/zXMfm5uZGNzwH6ZxOx+chIa8cC/p7wVxs2LfpiXkVOJdQAADYE5mO4Z0oJxHjYfylBwNVWlqKyspKAEBGRgbH0ejOX0l/QM7kuJp9GUXVhVyHQwghBicrKwtXrlxBdXU1YmNjce/ePXTr1g2rV6+Gvb09TExM0LVrV2RkZCAzMxMPHjyAm5sbBg0aBBcXF67DJ6TDIlOLAAAPCipRXiPjOBrduJNVioS8CtTIFDh8J4frcAghakotrMTS/17HPw/H46tTCVyH02F+ThYY2d0JDhYizO1r2A0CZDIZamtruQ6DcMCwq6yNmJOTE0aPHo38/HwMGTKE63B0ZkmPZSiozsegLkNgb+rAdTgGRS6XIy8vD46OjhAK6dImRJNu376NBw8eYMSIEbC2tuY6nGYlJibi/PnzKsvEYjGA+r8rzz77LBhjqK2tRV5eHhhj8PPz4yJUQrTm1bEBEAsFGOhjDzvzzjG0QS8PW0wIcUFSfgUW9qduTuoqLS0FY4xmAyacMTURQCzko1amgK2Z4ectEwEfPyzpy3UYHVZdXY1vvvkGtbW1WLFiBZydaby1zoTuqPUUj8fD4MGDuQ5D5wZ1GYL9Tx7iOgxOxcXFIT09HT169ICrq2uj1ysqKhAVFQV/f3+V13/88UekpaXB3t4ea9asoenTicEqKipCTEwM/P394ebmxnU4AIDffvsNcrkcEokE48aN4zqcZp07dw7p6elwcnKClZUVfHx84OPjo7IOj8eDRCLBggULOIqSEO3yc7LAV3N7cR2GTomEfGxZEM51GJyqrKzEtWvXYGpqir59+0IgaDxeXVxcHEpLS1VeT05Oxk8//QTGGKZNm4bQ0FBdh04InKwkOPLCMKQXVWGIHzUY0BeVlZWoqqoCABQWFlJlWSdDlWWE6JEHDx5gz5494PF4iIyMxIsvvggzMzOVdU6cOIFbt24hKioKL7/8MgBAoVAgLS0NQH0iP3bsGMaPH6/z+Ennkp6ejrt376Jfv34anT1x586dKCoqwqVLl/Dqq6/CxMREY/tur969e+PevXsIDAzs8L5qa2vBGINEItFAZKoGDRqEixcvYtiwYTR+HCGkU/nll1+QmZkJxhgqKysxatQoldeLi4uxZ88eAIBEIkFYWBgAKMdvBIA//vgD3t7esLKy0mnshACAt4M5vB3MuQ6DPMLBwQGzZ89GVVWVRsqAxLBQZRkheqSgoH4gTMYYpFIpysvLG1WWubi44NatWyqtyvh8Pvh8PhQKBYD6gh9VlhFt+/XXX1FWVobi4mLMnTtXY/vl8XhNfs+liRMnYuLEiR3eT0pKCn7++WcwxjB79mx0795dA9H9LSAgAAEBARrdJyGEGIKCggJlpVdhYeNxb83MzGBpaYmqqiqViUwefXAhl8uRkpLSaSbWIoS0jirJOi+qLCNEjwQHB+PatWsoLCxEYGAgnJycGq0zYMAA9OzZE6ampirLfXx8kJiYCAA0KxTRCU9PT8TGxsLTU7Pj4yxYsAC3b99Gt27dOB1/r6y2FK+cfgE2Ylv8c/inEPI7HktsbCzkcjmA+nHQNF1ZRgghndWIESNw9OhRmJiYYMCAAY1eF4vFeP755yGXy5VjOQKAv78/Lly4AMYYBAKB3nT/J0RddTIFDtzMgJOlBBEBje8hiObIZDLU1dUpGzVkZ2fj5s2bcHV1Rc+ePZvsBk4MD1WWdRIymQxFRUVwdHTUm5YapDFzc3OsXbsWNTU1jSrDHvV4azMAmDVrFqKjoyEQCJRdC0jn8OGHH+LPP/9EdHQ0RCIRSkpKdHLc6dOnY/LkySo3HZpga2uLYcOGtXv7EydOIDs7G08++SQsLCyQnJyMAwcOQCKRYP78+W0ewPl2fgxu5EYBAHIqsuFu1fHZnAIDA3Hz5k0wxhAUFNTh/RFCtC+zpBpiIR8OFprNdUSz+vfvj7CwMAgEgmYftAiFwkavubu7Y+nSpUhNTYWfnx8cHGi8KGKYvjmdqJxJc9fy/hjkS59lbZDJZNi0aRNKS0sxf/58+Pj4YPv27ZBKpQCAyMhILFu2jMaPNgJUWdYJKBQKfPfdd8jLy0NwcDBmzpzJdUjNqqurw+3bt+Hl5dVpCys8Hq/FirLmiEQi9OvXTwsREX1XV1eHWbNmYeDAgfj+++91dlwej6fxirKOkslkuHjxIgAgISEBvXr1wunTp1FeXo6Kigpcv34dY8aMadO++rkOwNIey2EttkEXS3eNxOfr64t169ZBoVDAwsJCI/skhGjPkdhsrN55AyZCPg6uGYwgV/0dy+pGWjFSCysxNbQLBPzO+WC0vX+TPDw84OHR8QcihHCpWipTfl8jlXMYiaro9BK89VsspvR0xTPDfLkOp11kMhn++usv5OTkoE+fPsoZdAsKCuDj46McCgcAsrKykJub2+REbcSwUGVZJ1BbW4u8vDwA9ePl6LOzZ8/i0qVLsLCwwLp16zS6b8YYjh07hpSUFAwbNoz6nxOjsWHDBgDAjh07uA1EDzDGMH78eOTl5SmvcRcXF6Snp4MxptYsRiYCE6zt/YJG4ysoKMDRo0cREBCA8PDOPXMdIYbgSnIRGOq7N91KL9HbyrLSailmf3sZMgWDVM4wu49mK36ysrJw+PBhWFlZYerUqXr3oIQQArwwyh9mIiGcLMWI6K4/3TD3RKbjdmYpHhRUGGRlWWlpKWJjY3Hz5k0AwKFDhzB9+nRcuXIFd+7cgZWVFfr27YsrV64AAExMTGBtbc1lyERDqLLsIa66MemCqakpIiIiEBsbi6FDh3IdTovs7OxU/tek1NRUZRI7ePAgVZaRTq22tha1tbXKn8vKyjiMRjOSkpKwa9cu2NnZYeXKlcquNuPGjYOHhwdMTU3h5+fHaYw3btxAYmIi0tPTm6wsq6mpwc2bN+Hn56cyAHV7FRQU4OzZs7C0tMTIkSM5HQOOGC9jLkMtGdgVtzNLYW1qgok99LeVgFjIh6OlGDllNXC3Vb91emuOHDmCjIwMAPWtsJoaE4wQfadPuaphMgpNDo9jIRbipdH+am1zKakAK3+OwhOhbnhvagi+OHEfMZmlWDXcFwN97DUS16IBXkgrqsSEEP3Noc1JTk7Gjz/+2OgBQU1NDTIzMwEAe/fuha+vLyZOnIj8/Hz06tWrySFziOGhUvNDXHVj0pVhw4Z1aAwgoP7m+v79+/Dx8YG5eeNpjWUyWYdvxMLDw9GtW7cm999RFhYW4PF4YIxRbT/p9DZu3KhskWYsUlJSoFAoUFBQgIqKCuXYZAKBAD169OA2uIfCwsKQlZXVbGX9uXPncPnyZdy6dQurVq3q8PH27duH3NxcMMYQGRmJgQMHIiIiosP7JeRRxlyG6upgjn2rBnV4PzfSilFVJ8cQv8ZDTMjkCvB4vA51nZSYCHDq5RGoqJXB0VLzrb5sbGyQnp4OAFSGIgZLX3KVQqHADz/8gLy8PCxcuFDjEyWp41pyEcprZDgZn4fh/nn4+nT9ZGExGSW4+dZYjRwj0NUKPy8zzAr2qqoqAPUz5QYHByM3NxeDBw+Gvb1qRWJ+fj4WLlzIRYhEi6iy7CGuuzHJZDKcOHECADBmzBi9nEHjxIkTiIyMhK+vr0oyUCgU+OWXX5CQkICgoCDMnDmzXU9JyuvKkFuZAz9b9Z6ItJWDgwOWLl2KjIwMhISEaOUYmtbaU6fY2FgcP34cHh4eePLJJ/Xyc0PaZ/369fj4449bXCcuLg4BAQHt2v8bb7yBl19+WflzWVmZwY/XMmDAAFRVVcHJyanNg/hrws2bN5GSkoJRo0bByqrlLlpOTk5YsmRJs697eXkp86wmPDqGhlQqxfnz5zFixAia6IVoFNdlqOTkZERGRqJv377o2rUrJzG0JLesBjO2XAJ4wIHVgxHmYaN87VJSAZb9NxICPg//XdoX4V7ta1mfm5sLa2trOFpKNBS1qsmTJ8Pd3R1WVlbt/ruja4yxZnNdbW0t9uzZg6KiIkyZMgU+Pj46jo5wgetc1aCqqkrZKik5OZnTyrLlQ31gJhJgoK8DyqrrB6jn8wBTkebuKSorK3H16lV0794dXbp0UXv73NxcREdHo2vXrjqfRTwoKAgLFy6EtbV1o/G0ly1bhoyMDJSXlxvMvSVRD1WWdYAmuzElJSXh6tWrAAAfHx/4+2unwqgjGmrQH08U+fn5SEion3nl7t27KCkpga2trdr7X/jHHGRWZGDj8E8xpuv4jgfcBEMawLWwsBA//PADLC0tsXz58iZb7R0/fhxlZWW4c+cOwsPD4e3tzUGkRBvWrVvXYqUKgA4V7sVisdGNOWNubo4pU6bo9JgKhQJ//PGHssXqyJEjO7S/7t274x//+IeGogOefPJJnDp1CiUlJcjPz0dISAhVlBG9oMky1NGjR5Gbm4uioiKsXLlSE+FplLlYCEdLMSprZbC3EKm89t/LKfUDcfOAnVfT2lVZdvv2bezfvx92dnZ47rnnNBW2CkObROjIkSOIjIzEE0880WTL4vj4eDx48AAAcPr0aaosI83SxrAVFhYWmDx5MnJzc9G3b98O769DsYiFynHEGGP4eHoP3M4sxVMDu2rsGOfPn8fVq1dx584dtXMUYww//fQTKisrceXKFaxZs6bZYSpaqiBvLx6P1+wDTHd3d7i7a2YCKKKfqLKsAzTZjalLly7Kyqj21LjrwoABAxAWFtboBtvW1hYWFhaoqKiAtbU1LC0t27V/BatvASF/pCWEtpSVlcHExKRds07qSm5uLqqqqlBVVYXq6uom31cPDw/cuXMHIpGoUXNgYtgcHR01MmYV0S4+n48+ffogKSlJL1tbuLi4YP78+QDqW5aZmJhwHBEh9TRZhurZsyfOnj2Lnj17amR/mmYhFuLCayOhYAwSE9XWGv297XH0Ti7AgP7e7WtV1tAKveF/bZLL5SguLoa9vb1eV7wnJiZCLpcjJSWlycoyFxcX8Pl8KBQKg3mISrihrWEr9GGSn8crl3g8Hub09cQcDdff+fn54fbt2wgODm7X9lKpVPm9TCZrcp3Lly/j+PHjGDNmDAYOHNiu4xDyOB7TxV9WjrSnG9OOHTvw4osvtmnAx6aeNHh4eKC0tLTVrjjGpqqqChkZGcpBtNujpKYEOZVZCLAP0nB0qrKysvDdd99BIpHghRdegESiXpeF6OhoREZGKgcN1xaFQoHr16/D0tISQUFNvydyuRxpaWmwt7dXfuYYY2CMgc/nay22srIyWFtbd8rPuj5KS0tDUVERfv/9d3z66ac4f/48gPrCiYWFRZv2Qb9T41FdXY3y8nI4Ojrq9c1sR9DnVfuoDKUbjDHcSCuGgM9X6Z6p7j6ys7Nha2ur9YeA//vf/3D//n2MHDlS7UmjqqursX//flhZWWHy5MlazU85OTm4d+8ewsPDm/07WFxcjLKyMnh6eipjUSjqx4/TVmyUuzSPclX7/BadiXV7b2F0oDO2LuS+4q4lycnJuHbtGry9vVFaWoqYmBg8+eSTKi1C9+7di7t37yIwMBCzZ8/mMFrDQjmpZUbdsoy6MemOmZlZh7uO2khsYCOx0UxALaipqQFQP8inXC5Xe/srV64gNzcXt27d0mplGZ/PR//+/VtcRyAQqHS9lMvl+P7775Gfn4958+ZRt4JO4u2338Z///tf5c+9evUCUN+1ZMSIERxFRbhQUVGBTZs2oaamBsOGDaPB/Em7URlKN3g8XrvHKXt0H25ubhqKqGUNg103/K+OtLQ0JCbWDx4eERHR5oc57eHi4gIXF5cW17G1tVUZNuTu3bvYt28fvLy8sGjRIqN92GBsKFe1z/G4XMgUDMfu5kAqV8BEoL2H7B3l7e2tvN/517/+hYqKCuWkcw0mTJiArl27NjuBEiHtYdSVZdSNSTNKS0tx9uxZeHl5ITQ0lOtwOszHxweLFy+GmZlZu2bdHDduHGJiYvSyiW9FRQWys7MB1I+DR5VlncOOHTs4H6yW1CsrK8Nff/0FExMTMMbQs2dPnY5BWVhYqHwgkJKSorPjEuNDZSjN+N+1NMRkluKl0d3gpKXB93Vp7ty5SE9Ph5+fn9rb+vr6YsCAAbCystJqRVl7JSQkQKFQIDk5GVKpFCKRqPWNCOcoV7XPsxF+kMoUiAhw0uuKssc9+eSTuH//PgYPHqyy3MLCgvPx34jxMerKMnU0dGNKS0uDXC5HdHQ0APW6MRmr8+fP4+bNm7h58ya6d++udrdFTbl+/TqKiooQERHR4QJMR2bLevTphr6xtrbGmDFjkJub22qrNEKI5kVHR+PevXvKn+Pi4vD666/r7KbLw8MDYWFhyM7OplZlRGeoDNW0vPIavHHgNgDAXCTAm5O0O8xEc0pKSnDhwgV0794d3bp169C+zM3N2z0+o1AoxLhx4zp0fG0aOnQoZDIZunbtShVlRopy1d8CXKzw7aI+XIeB5ORkmJqattoStIGPjw/njQGKqgtxpyAWYc69YCmirovGjCrLHqJuTM3r2rUrbty4AVdXV84KD+Xl5fjrr78A1M/GqQ+DYuqrQYMGcR0C6cQUCgVu3boFExMTBAcHd6puLFVVVUhKSoJAIIBCoQBjDCKRSKvjBz6Oz+fjiSee0NnxCAGoDNUcWzMRujtbIDGvEv29uZuE5/z587hx4wbi4+PxyiuvcBaHvrOzs8OMGTO4DoNoEeUq/ZKYmIidO3eCx+PhpZdeavckcbpUUlOC2b9NQ0ltCVwt3PDrtN8hFhhfN11SjyrLHqJuTM0LCQmBv78/TExMOLvxNTc3h4+PD4qKijrUKowQol3nz5/HmTNnANQPituZKravXLmCtLQ0APVjCI0YMQJBQUEQCulPLTFuVIZqmomAj7+eH4ZamRxmIu7yQEBAAOLj441iKA1COoJylX5pGAvOxMQEAoGglbX1w4OSRJTUlgAAsiuycCMnEn1c+sFEQLONGyMqwZM24bo5Op/Px6JFiziNgRDSuvLycvB4PDDGUFFRwXU4OvXoAMCMMRQWFmp0HJVTp07h6tWrmDJlCkJCQjS2X0KI9gj4PE4rygCgW7duePXVVzmNgRBCHufh4YHnn38eIpEIZmZmXIfTJkEOIehuF4h7RXFwNHXCcydWwc+mG36esgdCPlWtGBvDGc2PEEKI3hs+fDiCgoIQFhbW6cbN69+/v0rL19u3byMnJ0dj+4+Pj0ddXR2SkpLavI1CwXA+IR+30kvw1+1sDP74JJ7ddQNSuUJjcRFCCCGEtIetrS3Mzc2RlZWFsrIy1NXVcR1SiyRCCX6c9D8cnnUSIkF9Y5LEkgRU1JVzHBnRBqr+JAarvLwc169fR7du3eDh4YH8/HwcO3YMNjY2GD9+vME0522rmpoa/PXXX6iqqsLYsWPh5OTEdUiENGJpaYmZM2dyHQYnhEIhZs2ahc8++wyMMfB4PI22yp02bRri4uLQp0/bB+R987dY7LpW3zXUzswERVVSZJZkY35/TwzyddBYbIQQwxIbG4uSkhIMGDAAAoEA58+fR0pKCoYOHaq3kxh1xImUY9gdtxN9XQdgReiqTjWeJtFv8TllWLz9GuQKhh1L+iGkizXXIelcbGws9u3bBz6fD4VCgZ49e+LJJ5/kOqxmCfgCOJo54aW+r2Jb9BaM6joGNhJbrsMiWkCVZXquqKgIjDHY23M3MKy+OnXqFKKjo3Hjxg288sorOH78OBITEwHUN+vt2bMnxxFq1sWLFxEbGwsA+OOPP/D0009TYY8QPWNmZoaFCxciNjYW3bt3h52dncb27ebmBjc3N7W2OXrn75ZtIhMBACnMxQL4OHSuWb9I51MjleNudhkCXaxgKjKuh2cdVVJSgn379gEATE1N4ebmhtOnTwOoL3e++OKLHEaneZXSSvzfudcgZ3LczLuBMOde6OvSn8pQRC/svp6OvLJaAMCua2n455M9OI5I96RSKYD6SaIAICYmBpMnT4aJif6NAxabH4MqWRX6uvTHCM+RGOE5kuuQiBZRZZkei4+Px+7duwEAM2fORHBwMMcR6Q+pVKocC8jDwwNAfTPeBtbWxvdURigUKlur1NXVYePGjbC1tcXSpUshkUi4Do8QrUpPT4dcLoeXl5fe3+Dow7TmDaaGumH7pRQAwLrR/vCwM4O3gzmcrShnEOOlUDBM33IJd7PL4O9kgb+eHwqhgEYeAerHU1QoFLCxsUFFRQVcXFxgbm4OgUAAuVwOGxsbrkPUOAGPDyFfCIVcAQaGr6K+QGJxAl7v/w886d85W0IT/TG0mwN2XE4BWP33nUldXR2ys7MREBAAc3NzXLhwAenp6QgMDNTLirIrWZfw7PGVAID1A97CzO6zOY6IaBtVlumxlJQU5ffJyclUWfZQdnY2duzYgbq6OgwePBijRo0CAIwdOxbu7u6wsrKCl5cXx1Fq3qBBg1BXV4eqqipUVVUhLy8PeXl5SE9PR7du3bgOjxCtaWieDwCTJ0/uVDNsdtTbk4MwqYcrLCUm6O6i/1OyE6IJ5bUy3M0uAwDcz6tAcZUUjpbiVrbqHA4ePIiYmBiYm5tj1apVyp4LK1asQFZWFgIDAzmOUPMkQlP8e9RmHEj4FV7W3tgWvRkA8Ou9PVRZRjg3MsAZ516NABjgYWcYg9xrQl1dHbZu3Yri4mJIJBIsWrQIS5cuRXV1NUxNTXUWR0ZGBn7//XeEhIRg2LBhLa6bWZ7x93ZladoOjegBesymx3r37g1ra2tYWVmpNUaNsYuOjlYO/njlyhXI5XIAgEAgQI8ePYymoowxhszMTFRWVgKon1Z5zJgxeOKJJ9CvXz+IxWK4urrC09OT40gJ0a7c3Nwmvyet4/F46NPVjirKSKdibWqCZYO9YWoiwFMDvKii7KHq6mrExMQAACorK3H9+nXla87OzujVq5fRtFQvqC7AnYJYMMYAAH1c++HDYZ9gWY9nMLjLUEgEEswNnM9xlITU87A161QVZUB9ea64uBhA/bjMO3bsgEwmg5mZmU57EMTGxiI/Px9Xrlxpdd1JvlMxO2AeJvlOxVMhS3UQHeEatSzTY05OTkY3boQmuLu749q1awAAuVyOY8eOITw8HM7OzhxHplnHjh3DlStXIJFI8Oyzz8Lc3Fz5mq+vL9avX89hdIToxtWrVxEdHQ0rKyvY2Nhg4MCBXIekVQqFAjweT++7mhKi796aHIS3JgdxHYZeEYvFsLOzQ1FREQAgMjISvr6+8PT0hFhsPBWKOZU5mH3wCVTJqrC850qs6vWs8jUBX4B/j97MYXSEEKD+PtfKygplZfWtgKVSKW7duqXzBiL9+/dHdXU1/P39W11XIpTgtf7/0EFURF9QyzJicHr06IERI0Yof75+/Tq2bt2KqKgo7oLSgoyM+qa+NTU1yoItIZ2JQqHA0aNHUVFRgbKyMkyaNEllbEJjc+/ePfzzn//E5s2bUVNT06ZtSqulypYThBDSEj6fj6effhqWlvUtTeVyOXbt2oUtW7YoW+wbg7SyFFTJqgAAMfm3OI6GEG7kldXg+V9u4h8HbqOyVsZ1OI2IxWKsXr1aZZihEydO6DwOW1tbPPnkkzTcEWkSVZZ1YlFRUfjwww/xww8/KGchMRTDhg3DrFmzVFqT3b9/n8OI2oYxpuw22poxY8agS5cu6N+/P9zd3bUcGSH6h8fjwcnJCQAgkUiUN3jGKjY2FnK5HAUFBcjKymp1/Y2H4xD63jG89VusDqIjhDQorZZi4lfnEfj2ERyKaf1a1Sfm5uZYvnw5BgwYoFxWWlqKwsJCDqNqG7lc3qaHA72d+2CG/yz0cAzFml7P6yAyQvTPFycTcCgmC7uupeHnq6lch9MkiUSCXr16KX825geixDBRN8xOqrKyEufPn4dMJkN6ejpSU1Ph5+fHdVhtxuPxEBQUBB6Ph7179wIAwsLCuA2qFYwx/Oc//0FeXh4WL17cagWYp6cn5j+1BDIFoy5ZpFPi8XhYsmQJHjx4AHd3d50O+KprcgVDeHg40tLSYG9vr5zltyWXk+pvbi8/0P+bXEKMRY1Ujr9uZysnEPj23ANM7unGcVTqsbKywujRo5GWloasrCy4ubkpH0zoq3v37mHPnj3w9/fHnDlzWlxXyBdi/YC3UFRTCBsx3XyTziWvrAY/X01DaVUdFA/rlp30eNxGX19fzJs3D/n5+QgNDeU6HEJUUGVZJ3T48GFcu3ZNOYirmZkZXF1dOY6qfQIDA/HKK68AqD8PfSaTyZCTkwOFQoHc3NxWK8vO3c/Hip8iUSdX4MMnQpBcWIlDMdl4ZqgPlg721lHUhHBLIpEgKMi4xx2KzynDjC2X4O9siX0vvAg+v22V4xun98D/rqVhZnjrFWuEkI5Lyq/A9C2XUFothVjIR61MgXHBhjleqkAgwLJly1BaWgpra2vw+frd2SQrKwsKhQJpaa3PQCdTyPD8idW4ln0F3tY+eHPQu/jn5fdgbmKOj0d8Dkcz/a4YJKQjnvvlJq4lF4EBWDPCFz26WGN8sAvXYbXI39+/TWOGEaJrVFnWCd24cQNA/VhYTz75JLp3727QA7vqeyVZAxMTEyxcuBD5+fltagX3w8Vk1MkUYAD+fTIBueW1AIAP/ozD4oFd23xDTQjRb0n5laiqk+NOdhnq5ApI+II2bRfsZo0PpvXQcnSEkAYn43JRWl0/bEWImxX+NSsMXR3MW9lKf/H5fIPp9jRo0CBIJJI2zXh+ryge17LrZ7ZLLn2Ab6K+RFJJEgCG3xIOYHnoSi1HSwh3Kmr+Hp+sr5cdIgKocpiQ9tLvx0hEKxqauNrb2yMgIMCgK8oMjbe3N/r16weBoPWb4SA3KzAAPAAhXazhYlXfErCHuzVVlBGdu3TpEj799FOcO3euQ/tJKk5EWW2phqIyDhOCXfD57FDsXjEAEpO2VZQRQnRvZIATLMRC8ADM6etp0BVlhkYsFmPgwIFwc2u9y6ubhRtMhabgPfwX5hwOgIEHHoIdQrQfLOn0quvkWLPzBmZuvYTUwsp270euYMgsqVZrIp9/zQ7F5J5ueHVsdwz3d2z3sQ1RTU0Ntm7dio0bN+LBgwdch0OMALUs64QmTZqE4cOHw8zMrE2VNoQbL4/2h4etGSrrZJjX1xNSuQKxWWUI9zSMp8DEuJw7dw61tbU4d+4chg0b1q59HE85gjfOvgonMyf8PuMohHz6EwQAfD4PT/aiSTwI0Xd+Tpa49o9RqJEqYGcu4joc0gxbiR22T9yJM2mnEO7SB72cwxHhOQoSoQQ+Nr5ch0c6gbP38/BXbDYA4KcrqXhzUvuGk3jufzfwV2wOXh3bHWsj2ja2dICLFb6e16v1FY1QRkYGcnNzAQC3bt2Cj48PxxERQ0d3Kp0Qj8cz+lnldOXQoUOIj4/H6NGjNT7BgFDAx7x+nirLhvg5aPQYhLRVeHg4Ll++jN69e7d7H2ll9WPNVEmrALT9KSkhhOgLM5EQZlRP1mHZ2dnYs2cPLC0tMX/+fOU4upriZ9sNfrbdlD8HOQRrdP+EtKSHuw1szExQXiPrUNk9PqccAJBRXKWp0Iyap6cn3N3dUVRUpDLLJiHtRZVlOpaamopLly4hMDCwQ5UrVdIqHH5wCOEufdDVmmrNuVBZWYmoqCgAwPnz5/V+Nk5COmLMmDEYPXp0u2dmlSmk+DH2BwDAkh7LIeSbaDI8QoiRq5MpsPFwHIqq6vDmxCA4dmB2t8iUIqQVVeGJsC4Q0LAGnLhx4wZKSkpQUlKCpKQkBAdTZRYxHl1sTHFl/SjUyRWwkrSvvJNWVIUHBfVdOMfp+QD9+kIkEmHZsmVch0GMCI1ZpmOHDh3C/fv38fvvv0MqlbZ7P9/d2oKNV97Hs8dXaTA6og4zMzN069YNPB6vXa1tYjJKMO7Lc9jwxx0tREeI5rW3ogwAeODDVmIHACpP+7lSJ69DbmUO12EQQtroVHwutl9KwW/RWdh+Kbnd+ymtlmL2tst4ee8t/BadqcEIiTqCg4NhYmICa2vrNg3a/yjGGDZefh/zfp+Je0XxWoqQkI6RmAjaXVEGAJZiIaxNTSAS8uFhZxiTmemSXC5Hampqh+6nCWkNtSzTMXd3dxQUFMDBwQFCYfvf/pLaEgD1g78TzWKMITq9BL5OFi3+kePxeJg/fz4UCkW7plzfE5mOe7nluJdbjpfG+HfoDyrpvFJSUvD+++/j1KlTyMnJgZubGxYuXIj/+7//g0ikP32FBHwBfpm6D6W1pXA25/YJaUlNMRb8MRu5VTmYEzAfr/Z/g9N4CCGt83OyhFjIR61MgR5drDuwJwY+jwcFYzARUClK0yoqKlBRUQEXl5bzfNeuXbF+/XrweDy1H8QU1xRh3/09AIBDib+he7+AdsdLiL6yNRfh0usjIVMwWJvSPcLjTp48icuXLyMoKAizZs3iOhxipKiyTMemTJmC/v37w97evkOtNBqYmtBMTJr289U0vP1bLEK6WOOPZ4e0un57KsoAYHYfD0SlFmOgrz1VlJF2i4+Ph0KhwLfffgs/Pz/ExsZixYoVqKysxGeffcZ1eCokQlNIhKZch4HovBvIrapvVfZ74kGqLCPEAPg5WeD8axGorpPDy779ZZ+KWjlkivoxE8U0+6xGKRQKbN26FZWVlViwYAH8/FoekLy95SdbiR1mdp+DmLxbmOI3rV37IMQQmIvpVr05DQ+ETUzoHopoD12BOsbn81t92tYWa3u/gC4W7hjhGaGBqMijxEI+2MP/tamnuw0Ov9C+WQUJaTB+/HiMHz9e+bOPjw/u3buHLVu26F1lWXvU1NRAJBK1+6aqKaFOveBk5oS8qjxM9p2qsf0SQrTLybLjg8B3sTHFlgW9kV9ei1EBzhqIijyqYZZ1bc62zuPxsH7Am1rbPyFE/w0fPhwhISGws7PjOhRixKiy7CFD6crUwMHUActDV7Z7+9raWvz000/Iy8vD5MmT0bNnTw1G97ecimwI+AI4mjlpZf/aMLuPB3p72sLdlvsWMIS0R2lpaauFh9raWtTW1ip/Lisr03ZYajt58iQuXLgAR0dHLF++XGO52FZihwPT/0JRdSFczF01sk9COitDKz8BwISQjl33+25k4M2DsQhwscTPy/prpfVHrUyO5IJK+DpawERgGEMM8/l8rF69GtXV1bC1teU6HEJUGGKuao/7ueXILK7G0G4OEBpI7mgPHo8HB4f2zzRKSFtQZdlDhtSVSROSkpKQmVk/sO3Fixe1Ull25MFfeOt8/XgUX47ahEFdWu/SqC/8nCy4DoGQdklMTMTXX3/dat7auHEjNmzYoKOo2ufGjRsAgPz8fGRnZ6s9CHRLxAIxXC3cNLY/QjqrzlZ+AoDNZxJRLZXjZnoJLiUVYkyQZluo1crkmPz1BSTkVaC3pw1+XTkIfAOZtVMikUAi6XgLQEI0zRhyVUZxFZ75KQr+zpb4YnZooyF97mSVYuo3FyFnDIsHemHD1BCOIiXEOBhvdbOaxo8fj+3bt2Ps2LHw8fHB1KlT8corr2D//v1ch6YWmUyG1NRUyGSyFtdzd3dXFma6d++ulVjOpJ0EAwNjDOfSz2jlGIQYq0cHPm7uKz5edRawzMxMjB8/HrNmzcKKFSta3P8bb7yB0tJS5Vd6ero2T6ddwsPDAQBOTk5wdTWOFmAlJSVISUmBXC7nOhRCNMJYyk8AkJRfgQf5Fa2uN/Zh5ZiNqQl6undksoGmpRVWISGvPo4baSUoqqrT+DEI6WyMIVddTCzA3ewyHIzORGl141kgk/IrIWf1YzLeydK/HgOEGBpqWdaC1roy6WM3pj/++AMxMTEICwvDE0880ex6VlZWeOGFF1BRUQF7e3utxDLFbxrOpJ+GkCfABJ/JWjkGIcZq3bp1WLJkSYvr+Pj4KL/PyspCREQEBg0ahG3btrW6f7FYDLFY3NEwO4wxhpycHNjZ2TWKZ+TIkRg0aBDEYrFGJkThWlZWFn744QfI5XL4+/tj3rx5XIdEiFYYYlfwB/kVGPPFWQDA6XUjWpxE4LVxAZjR2wNOVmKtTNDj7WCO/t52uJpchLFBzrA3N54uYoToE0PLVZN6uiEupxx+ThawMWucF8YGOWNKT1c8KKjE+vGanSVWoWA4cicHfD4P44KcjaJcRkhrqLKsGW3pyqSP3ZgaEldbBsPWdlP5we5DcXruBfB4fEiE1CSfEHU4OjrC0dGxTetmZmYiIiIC4eHh2L59u0YHw9e2qKgo/Pnnn3B2dsaqVasavW5M3XkePHigbFGWkJAAxhgVNonRMdSu4DweDzzwAB7Ab+W65PF4Wh2uQSjg45cVA1BSJYWNmQnlCUK0wBBzlYVYiHenBDf7usREgK/n9dbKsbeeS8InR+8BAN6ZHISlg721chxC9Inh3FG1kza7MuljN6YpU6Zg2bJlmDhxItehAABMTcyooowQLcrMzMSIESPg6emJzz77DPn5+cjJyUFOTg7XobVJQ+VRZ+iW6O/vr5ziPCQkhG6AiV7rbF3BvR3McfqVETizbgQ87Mw4jQWor5CzNRdRniCkFZ0tV3HlQUEl+DyAz6v/npDOgMfYw47NRio/Px+FhYUtruPj46OcBSUrKwsjRozAgAEDsGPHDrVaaJSVlcHa2hqlpaWwsrLqUNxE8xhjuHLlCjIzM9GnTx907dqV65DahDGGjYfjEZVWjI1P9oC/syXXIdFnXY/s2LEDS5cubfI1ddI7V79TxhjS09Ph4OAAMzPub1C1raqqCuXl5XBycqKb4A6gHKR9uiw/AfQ71XcFBQU4f/48LCwsEBERAaHQMDqn3C+6h4+ufIBwlz5Y2/sFrsOhz7kWUK7SjQf5FXhxTzQEPB6+mttLLx4q6Bu5Qo7LWRdhIbJEmFMvrsNpk876eW4rw/hL1wGdpSsTaV1CQgKOHTsGALh//z5ee+01gyjs5ZXXYtv5BwCAn6+k4r0n/p7Zpk6mAACIhPRZ7ayWLFnS6thm+ozH48HT05PrMHTGzMysU1QKEsNH5SfyqF9//RV5eXlgjEEsFmPYsGFch9Qme+P/h5j8aMTkR2NB0FOwkdgCqH9QUy2rhqnQlB5cGDjKVbrh42iB39cO4ToMvfbBpXfwR9JvAIB/DHwb0/1ncRwR6SjKEA8Zelcm0jqp9O9ZY+RyORQKBYfRtE1eWQ3W7oqCiYAHC7EQU0PdlK+diMtFjw1H0WPDURy7S59TQgghukflp85BKpUqx1l8tDylz/bG/4ITKcch5AkxpMswWIttAAB18jqsPrYcw3b1x8qjT6NWXtvyjohRoFxFtO18xjnl95cyLnAYCdEU/W9WoyPHjx9HYmIiEhMT4e7urvKakfdU7TQCAwPRr18/pKenY9CgQcrm2PrsixP3cTOtBHIGSOUyiE0Eytf+fTIBtQ9bln15IgFjg1y4CpMQQkgnReWnzmHatGk4duwYrKysMGjQIK7DaVVuZQ4+vvohAIDP44Ph7wlVInOuITLnGgDgRm4krmdfxRB3w2gpR9pPX3JVrUwOsVDQ+orE4Ez0nYJdd38EDzyM8R7PdThEA6hl2UNLliwBY6zJLy6kl6UhJi+ak2MbKz6fjwkTJuCZZ55BSEhI6xvogWqpHI9+Amukfw+C7utoDn79xF2wMTXB1eRCg2gtR4ghSU5OxsGDB5GRkaGR/VVVVeHatWsoKCjQyP6M1unTwOHDXEdB2kDfyk9SuQLnE/JRVFnHyfGNlYeHB5YtW4ZZs2bB1NSU63BaJZX/3fqNMYYaWY3yZzeLLuDz+OCDDx54yCrPQn5VHhdhEh3Sh1z13qE76P7WEXx8JE5nxzQWUqkUe/bswRdffIGoqCiuw2nSS31ewY6Ju7B32m8Y5z2B63CIBlBlmR7KqcjG7N+m4enDi3DkwV9ch0M49GxENzhZ1s8mOr1XF4R72ipf+3BaDywb7A0TIR+XHhRizrYrCHznKGIySjiKlhDjc/DgQdy6dQu///67Rvb3559/4vDhw/jxxx/V3rakpAQVFRUaiaPB1jOJmPrNBazeGYXSKj2pXCguBvbtAw4cAHJzuY6GGJgNf9zBoh+u4cnNF6llWyfmbuWBRcFLwAMPliIrPBf+ovK1rtbe2DRmG/ztuoOB4ZNrH2LC3lF48cRa7gImncKxO/V/047dpb9t6rpz5w7i4uJQVlaGP//8Uy+7g/N4PIQ49kBXa2+uQyEaQt0w9VCNvAZSRX0CqKgr5zgawiU/Jwtcen0kamUKmIpUm2ybi4U4GZ+nHOQfAGplCszedhnx79HTDMK9/9zaijsFsVjX93W4W3lwHU67eHp6IjY2VmOz5za0yFC3ZUZeXh6+/fZbCAQCvPTSSxpp2TFn22VcTS4CAMRkluLY3Rxcen0knK04bjVy7hyQlQUwVt/CbO5cbuMhBqWsRgYAKK3Rvxspolsv9FmHlWFrYcI3gYCvWobiQ4D4ItXWPRcyz2FP/P8wO2CeLsMknciHT/bA/66lYdEAL65DMTjm5uYA6iukJBIJBAL96cqqYAr8nnAQYoEIIzxHwdREz1rfymSAAUxqp4/oXdNDXa29sXnsd8irzMUEn8mtrp9flYeonEgMcR8GC5GFDiIkusTn8xpVlDVIK6pqtKxW2sGumLduAVeuAMuWUWIl7ZZTmYOt0ZsAAK4Wbnit/z84jqh9pk+fjrFjx8LCQjO5dcKECQgODoarq6ta2ykUCjDGlP93VGWNTFlR1kCuAJ77303sWcnheETFxcDx44CtbX3+OXUKiIgAnJ25i4kYlPefCEEfL1sM8rVvdZZDxhjO3s+HlakJej/ScpsYD4lQ0uTycxmnm1x+Jz8WCGjnwaRS4PvvgcGDgR492rkTYsyG+ztiuH/bZu40JskFlVj0/VVYm5lg1/IBsDY1UXsftra2mDhxIvLz8xEeHq43M5nKFXKM+mUoKqR/N3D514ivMNwrgsOoHnH5cn1Z6uWXAQPoQq9v6E5YT/VzHdDmdVccWYKM8nQM84jA5yO/0mJUhqO6uhrbt29HXV0dFi9eDFtb4ywEm5oIUF4rU13WTMVam0ilwMGDQFwc0Ls30LdvxwIknZaDqQNCnXohvvAuhrmPaHV9qVyKAwm/wtnMBcM99aSAgfonmJaWlhrbn0AggLe3+s3zXVxcsHr1apiYmMDMzKzDcaQWVTa5PLu0psnlOtPQqiw4GODxgNu3qXUZUYu1qQmeGti1Tev+EZON53+5CQD487khCHaz1mJkhuP69es4fvw4+vfvj1GjRnEdjla4WXRpcrm3TQe6T924UZ+v8vOBwEB64Eg6JCq1GEt3XIOnnRn2rhzUsfI9x07G5yKjpBoZJdW4mVaMEd2d1No+KioKhw4dgqWlJZ5//nkI9ejaevb4MyoVZQCw7szzuP5UTKsPbLSuthY4dAi4e7e+IUSE/pSvDYV+VMmSDpEpZA//N9wuBxUVFdi6dSu2bt2K8vKOdz3NyspCfn4+SktL8eDBAw1E2LR79+5h+/btSE5O1toxWvJ/EwMbLXttXPf27/DGjfqEWlsLHDlS32yXkHYQ8oX4fsKPuLDgOgZ0ab2l0u74Xfjk6j+x7vTzSCxOgIIp8HXk55j66zi8ceZVFNcUtboPY+fo6AgbGxuN7Ku7c9MVgP7NLNeJR1uVCQQAnw84OdU/EaWxy4gWyOR/t8RWGPDwZj9cTEbvD47jP+c1U96Jjo6GVCrFzZs3NbK/pkilUvz666/47bffOJmcaGb3OXAwVW3hYyu2xYKgxe3boVRaX26qqwPu3AG0+N6RzuFEXC7KamSIzSpDQp5hD8sztacbBvrYY0KICwb42Ku9fVFRfRmwoqJC7bHKZDIZdu/ejd27d0OmhfuauwV3mlyeU5Gt8WOp7do14P59wMSkPj9VV3MdkcHRn2pZ0m7bxm/HtawriPAazXUo7fbgwQPkPrwZSkpKQlhYWIf25+XlhbCwMNTV1SEoKEgDETbtypUrSEtLw7Vr19rVWqSj5vbzhKOlGNvOPwBjwPIh3hgb7NK+nTUU9Hg8oFu3vwt71LqMdEBbn6rZSewAACZ8E5ibmOObG1/ixzvbAQBZlVmQMzk+ifhca3F2NgIBH/83MRAf/vX3mD22Zib499ww7oJ6tFVZA2dnal1GtObJXl1gKhLA2tQEPboYbquyHy4ko6iyDv+5kIzlQ306vL+RI0fiwoUL6N27twaia1pWVhbu3Km/yRwwYACcddzVWsAX4PcZR/DRlQ+QVJyArtbe+MfAt2EiUL97GIC/Hzb6+wOpqfXlqV69qHUZabd5/TwRnV4CbwfzVlu9VtbK8MWJ+7CSmGBthB+ySqrxoKASw7o54NjdXGw6nQhfRwt8MC0E5mLdfyadrCT434q295p63NChQyEWi+Hm5qb2mK25ubmIj48HUD/+q5ubW7vjaIpEaIpKWePW+vZm6lcKalRDwweRCPDyqq80o9ZlaqMMbgTcLLpgmv+MVtdLL0vDs8dXQiKUYMvY/8DO1B6MMZWb2cTi+9gd/z94WHpiftAiCPm6+Yh069YN3t7eYIzB39+/w/sTCoV44oknNBBZy4YNGwZTU1MMGsTdGD+jAp0xKlADhcyGgl7Xrn/3aafCHtGRib5T4GHlCRuxLVwt3JBUnKDyekF1PkeR6a/fb2XhWnIhVg33hbut+l0zVwz1wcjuTjhyJxuOlhJM79UFQgFHDc4fb1XW4NHWZTR2GdEwHo+HCSFtGz/wkyPx+PFKKl4a7Y9lQ7wblZ/kCoYfLibjQUElFvb31GmXzudHdcPWs0l4ZljHK8oAwNfXF76+vhrZV3Pc3d3Rr18/CIVCODmp1yVLU0QCEd4e/F7Hd/Tow0ZTU8DTkx44kg7ztDNrcwXTrmtp+M+F+l4uxVV12BOZjqo6OT6a3gNv/hYLqZwhNqsUnvZmeGl0x++zdE0ikWDYsGHt2tbV1RVDhw4FUD+khaa9N/SfWHv8GZVlIz1HQyQQa/xYamloVebnV19hZmpan6cGDKCxy9RAd8CdyNn008isyAAAXMu+gtNpJ3E+4xy+Gr0FfVz6QqaQYuXRZSivK4OCMfB5fCwMbmdzdDWZmpriqaee0smxNMnb25uTFmUa93hBD6DCHtG5Ho6hyu+f7rkSV7KuQM5kMBOaY23v5zmMTP8UVNTihV9uggEorpJi0/z2tQDxdbLAWqdumg2uPZpqVdaAWpcRPfDDpWTUSBXYfikZ4V62mPfdFfTztsN/l/YDAPx0JQUf/hUHPg/4MyYL1/4xGhIT3YwxNLuPB2b3MawZhwUCASZMMJKZux992AgADeNK0gNHoiP+zpbg8QA+j4ftl1KUy23NRZA/0sdcKtd9l2eu8fl8jBw5Umv77+82ED9M+Bn/vPIeamU1mOgzBSvCVmnteG3yaKsy8cNKOw8Pal3WDjRmWScy2mssutsFINSpF4IdeiIqJxJ18lrEF94FANTIalBaWwIFU4DP4yGzPIPjiI3b0Ts5mLb5Ik7F13c/vZZchG3nklBYUav7YBoKel6PTGX9aGGPxi4jOhbqFIZzC67gwoLrODv/MsJdOm+FbWFhIXJyclSWWYiFcLSsLwD5ORn4LMjNtSprQGOXET3w/MhucLWWYM1wP1xKKkC1VI7rKUXK2WnTi6rB59WPfVZWI0NVnZzjiI1Xjawar595GW+cfRW18lpUSavwv7s/40LGOd0H09TDRkD1gSMhWjbc3xHnX43A9LAu4D9s8LpkUFeMDXLBR9N7ws1agkG+DlgxRDOtT4mqnk6h+GXqPhyY/if3FWXA363KPD3/XvZo6zIau6zN6FFHJ+Ji4YqdU/bifPpZzDg4GXzwsTB4CWYF1D+ptxBZ4qngp/HjnR9gK7bFnMB5HEds3L49l4To9BL850IyAlysMO+7K5AzhvOJBfjp6f6tbt9QQO/wTCvNFfQAal1GOCXmugm7DmVlZeF///sf+Hw+Fi5cCEfH+oGny8rKsHnzZigUCjz99NPw8KhvPSIxEeD4S8ORXlyFYFcrLkPvuJZalTWg1mWEY2tG+GHlMF/M/PYSbqaVoLuLJT6e3kP5N3jhAC/8EZOFvPJaLBviDTtzEccRG6+Y/Fs4mXocADAncD4OJx3Cvvt7AAA7Ju5EiGPPVvfxeDfadnu8VVkDal1GdMzd1gyvjuuOijoZTAR8vDCyvtW4IbY8JR3QVKuyBtS6TG2UuTuh4ylHoWAKKKAAYwqVG9Ln+7yE5aErIRaIIeAb7hTFhuD5kd3w/cVkrBrmC5mCQfGw8qtW2vrT6EtJBVi98wYYY9iyIByD/RzaH0hzBT2ACnuE6EhkZCQqKioAADdu3MC4ceOQlJSEU6dOKSvGH2dtagJrU8MdlBxA663KGjw+dhmNt0E4kFlSjZtpJQCAeznl8HP6e/ZYbwdzXF4/CtVSOSw4GEC7Mwl16oUpvtMg4AsQbB+Cg/f3KV+rk9e1uK1MIcMbZ1/B2fTTGOYRgY+Gfwohv52D+rf0sBGgB45E55ysJNiyIJzrMAiXHh2r7HE0dpna6K95JzTRZzKOpxyBkC/EmK7jG71uZqL+QNFEfSO6O2FE978Htd22qA8iU4uwaIBXC1vV++zYPZRVS5Xft7uyrLWCHkCFPUI04OLFi0hISMDYsWObnInJx8cHN2/eBI/Hg49PfTeJAwcOoLKyfoaliRMnKluVGZW2tCpr8GjrsokTtR8bIY9xtzHFIB97XHpQiEk9XBtVign4PKoo0wGxQIx3hryv/PnFPq/AycwJnlZe6O3Sp8Vtb+ZG4XTaSQDAmbSTiMqJRH+3ge0LpKWHjQA9cCSE6FZLrcoaUOsytVDW7oQGdBmEU3MvgMfjQyKUcB2OUSupqsMPF+u7WU7s0fyMW79FZ+Lz4/cx2M8Bbtat1/J72JohOr0EAOBu24GnAq0V9AAq7BHSQTKZDCdOnAAAXL58GTNmNJ69OCQkBG5ubuDxeLC1tQUAWFhYKCvLjLKirK2tyho82rqsT8s3xIRoA5/Pw87l/VFaLYW1aTtbI5E2O59+FjH5tzA3cD7sTZt+KFheV4a3z69HblUu3hz0bqv7dDRzAp/HBxjAwOBs3s4ZdtvysBGgB46EaNmNGzcQHR2NsLAw9O6tOtlRXV0dLly4AHt7e4SGhjazByPSUquyBo+3LiMtorveTsqUWo/pxOfH7+PHK6kAgHOvRsDTrun3/a3fYlFWI0PqtTTMDHdHb0/bFvf7wbQQ5b5WtHeqeKkUOHy49YIeQIU9QtQkl8tx/vx5SCQS9O/fH6Ghobh//z569OjR7DZ2dnYqPy9YsAC3bt2Cm5ubVqY755w6rcoaNLQuO8fBQN6EoH6cUBszGo9M2wqrC/DyqefAwJBXlYsNQz5scr3DD/7EpayLAICtNzdh09htLe63q7U3/j1qM86ln8FQj+Hoat3OMlRUVOsPG4HGDxwJIRpTU1ODQ4cOgTGGjIwMBAUFQSL5uyFITEwMzp8/DwDw8/ODubk5V6FqX1talTV4tHVZOHXbbQlVlhGiRa429ZVQZiJBi10zgtysceVBIcxEgja1FLOUmGDd2O4AgKLKOrz7xx1425vjqYFebR+wNioKiItrvaAHUGGPdFhMXjS+iPwMT3SbjmndpnMdjtYlJibi7NmzAICuXbti2rRpau/D0tISQ4YM0XBkekLdVmUNGlqXUWUZIUZNIjSFhcgS5XVlcDJrvvWXn0038MADA0N3+4A27Xtgl8EY2GUwAOBEylFcy76KRcFL4GHl2cqWD7W1VVmDRx84du/etmMQQpTkcjny8vLg7OwMPp+vXC4UCmFqaoqqqiqYmppC+FjvFw8PD5iZmcHBwQGmxj4+V1talTV4tHVZUJD2YzNgVFlGOrXIyEgcO3YMbm5uWLBgAUxMWu9WkZiYiNu3b2PIkCHKGeuas2qYD8I9beFua9rizFg/LO6Dc/fzEexmDSdL9brGbjqdiB2XUgAAvTxt0NPdpvWN1C3oAVTYIx1yIGEfbuffQkFVXqeoLHN1dYWNjQ3EYrGyWyV5RHtalTVwdq7vQk4I4UxVVRV++uknFBUV4YknnkBQG264pFIpTpw4AUtLSwwePLjFh3vmJubY+8RBpJSloLdz8y0ferv0wU+Td6OgOh8D3QardQ5ltaV44+yrYGDIqczGV6O3tG1DdR42AqoPHH191YqREALs2bMH9+/fR0hIiMpQFkKhEMuXL0diYiL8/PwaVZY5OzvjlVde0czMt/pMnVZlDRpal12/rt3YDBxVlpFO7dy5c5BKpUhNTUVqair82lAbf+jQIZSWlkKhUDQ59tCjeDwe+nnbtbgOAJiJhBgf0vyYZi3xc7J4uA8BnK3aWNGmbkEPoMIeaROZQoozaadhKjTFoC5DlAWUOQHzUVhdgEm+UzmOUDesrKzwwgsvcB2Gfmpvq7IGfD7QyoMKQoh23b9/Hzk5OQDqJzBpS2VZXFwcrl27BgAIDAyEvb19i+s7mDnCwaz1az3APhBAYOtBP0YiNIWjmRPyqnLhY93Gck17HjYCfz9wvHVL7TgJ6awKCwtx/vx5Za4pKSlptI6trS36NjFEDGMM+/fvx507dxAaGoqpU6cab6WZOq3KGjS0Lns4pi5pGlWWkU7Nz88PN2/ehKmpaZvHBAoPD8f169cR3J4WEVowr58nQj1s4GAuglNbKsvaW9ADqLBHWvXOhf/D0eTDAICVYWuwInQ1gPqbmTY/tSfGrSOtyho4ObW+DiFEa9zd3WFiYgKpVNqmB40A4OXlBUdHR1hYWMDGxka7AbaBSCDC7if2I7U0FUEObcxH7XnYCPz9wJFuTAlps/Pnz+PWrVswMzPDyJEjERIS0uZtS0pKEBsbCwCIjo7GyJEjYWlpqa1QudOeVmUNPDzq7+tIs6iyjHRqU6ZMQd++fWFjY9PmvuxDhw7F0KFDtRyZeoJcrdq+cnsLegAV9vTU1KlTER0djby8PNja2mL06NH4+OOP4ebmpvNYLmScV35/Nu2MsrKMEAAdb1XW4JExSwghuufg4IDnn38elZWVcGpj5bW1tTXWrFmj5cjUYymyQohj8xOvqOjIw0ag/oFjfLz62xHSSQUFBSEpKQm9e/dW+97L0tIStra2KC4uhoODg/EO7t+eVmUNRCJAot7wP50NlTZJp8bj8eDq6moQgz5K5Qq8vi8GY788iyOx2e3cSQcLegAV9vRQREQE9uzZg3v37mHfvn1ISkrCzJkzuYnFc5Ty+9Fdx3ASA9FjDa3KOKjIJYRoloWFBZydnQ2ia9ONnEjM/30WXjv9Eiqlle3bScPDRi+v9m1vRjPRE6IOf39/rFu3DhEREWpvKxQKsXLlSixevBgrVqxQmRjAaHSkVVkDd3fNxmRkqGWZnsutzMGLJ9cirSwVy3quxNM9V3AdUqeWnJwMmUwGPz+/DhUO62T1FV+3Mkqwbmx3TOrR+nhlZ+7lY3dkOgDgtX0x7RvjrCOtyhpQYU/vvPTSS8rvvby8sH79ekybNg1SqbRNk1Zo0luDNmCU1xiYCk0R7tJ4DAnSiWmqVRkhbfTd+Qf41/F7cLc1w/YlfeFhS3+/uFJZWYmkpCR4eXnB2tq6Q/u6knUJn1/7BO5WnnhvyD9hIbJodZtPrv4TSSWJuF8cj/DEvpgTOF+9g2riYSNAN6akSbUyOS4nFcLNxhT+zkbYVZAjYrEYXTtyz6PvOtKqrIGo+QnoCLUsUzF16lR4enpCIpHA1dUVixYtQlZWFqcx7br7E5JKklArr8Xmm1+hsLqA03j0UXZ2Nk6fPo3S0lKtHic6Oho//vgjdu3ahYsXL3ZoX0fv5uBAdCYeFFTitX1tG//L1VoCnvL7dhTUNFXQA6iwp8eKioqwc+dODBo0qMWKstraWpSVlal8aYKAL8BQj+Ho49pPK60NHpQk4ULGOcgUMo3vm2jZuXNAZmb9bJZyece/iN7Qx/JTWY0U//wrDjVSBZLzK/Dt2SRO49FHcrkcV65cQUxMjFaPo1Ao8N133+HAgQPYunUramtrO7S/j658gAelSTiXfhp/JB5s0zauFm5gYAAAF/MOPGxsb6uyBvTAkVP6mKsYY3jqh2tYsuM6xv37HI7fzeU0HmIgNNGqjLSKWpY9IiIiAv/4xz/g6uqKzMxMvPLKK5g5cyYuXbrEWUyWIkswpgAAmPBNIBbQxfC4Xbt2oaKiAllZWViwYIHWjpObmwsejwfGGHJzO/aHzM26vn84D4CzpQQ/X02Fr6MFBvo0PzNUSBdr7FzeH7czS/FkWJcm14lOL8Gm04mYGe6OccGPTVigiVZlDaiwp3def/11fPPNN6iqqsKAAQNw6NChFtffuHEjNmzYoKPoNON+0T0sOjQHcibHzO5zsH7Am1yHRNpKoQAuXwZMTIDExI7vTyrt+D6Ixuhj+cmEz4dYyEetTAEGwNpUt61sDUFMTAyOHj0KoH4MMm2Nc1lXV6d8oFlTU4Py8nKIO3Bz52LuiszyDDAwVMuq8Gv8bozzmQBLUfPjt74/dCN+SziALpZdMNyzcZcuBVPgmxtfoqSmBOv6vQ5zk0fGN9Lkw0bCKX3MVSVVUlxNLgJQf19wODYbY4KcOYuHGAhNtCojraLKskfoU1emBguDF6OgugDJpQ+wKHgJLETUNPdx9vb2qKioaHUK8o7q16+fshvm4MGDO7SvcC87bF/cF3eyS3EjrRhvHqyfreXgmsEI87BpdrtBvg4Y5OvQ7OubTifieFwu4nLKVCvLqKBncNavX4+PP/64xXXi4uIQEBAAAHj11VexbNkypKamYsOGDXjqqadw6NChZlt3vfHGG3j55ZeVP5eVlcHDw0NzJ6AFyaUPIGf1LYriC+O0dpyU0mSU1Zaip1OY1o7R6fB4wMqVQEWFZvZXUQEcPKiZfZEO08fyk6lIgO+e6oMtZ5LgZW+GNSPohuJxtra24PF4EAqFWh38WiKRICIiAteuXUNISEiHy2sfDf8MBxP2QcAX4qvIz8HAcCb9FL4Z822z21iILLEg+KlmX08ovo8fY7cDAPq69sMEn8l/v6jJh42EU/qYq6xNTdDd2QL3ciugYGixnE8IAGpVpkNUWdaMtnRlqq2tVWlKrqluTI+SCE2p9UQTKioqcPfuXQQEBGDRokUoKiqCg4N2/7jY2tpi1apVGttfRIATIgKc8OTmi+ABYAByy2o6tM+Z4e6IyynDkkFdVV+IigLu3q0fVLuD3R8AaGYfpEXr1q3DkiVLWlzHx8dH+b2DgwMcHBzg7++PwMBAeHh44MqVKxg4cGCT24rF4g492b+UeQH5VfmY7DsVAr5uxp8a7hGBMV7jkFz6AM+Hv9T6Bu1QXFOEeb/PgFQhxTejv8WALoO0cpxOh8cDvL01tz8t/L0lmqFOV3Btl6GGdnPE0G6OGt+vobt37x4UCgUCAwPxwgsvwMTEBGZabjE+bNgwDBs2TCP7spHYYkmP5biWfUXZtTKvqmMt/r2tfTDQbTCKa4rR16X/3y80PGyUy+tn4e1o+YfKT3pDX3IVn8/DnpWDcDg2G+62ZhjiZ/yVZXK5HDExMXByckKXLk33liEtuHatfrI1JyegpKRj+6Kc1CKqLHuMOl2ZDLEbk7H4/fffkZCQgLi4OCxevBiOjoZbGP5gWgg+O3YP/s6WGB3YsWbX44JdGne/BIDo6PruT3l5Hdq/EnWB0jpHR8d2f64Vivqu2x0dF6Y5meUZeP7EagCASGCi+gReiyRCCTaO+Eyrx+CBDwFfCKlCChMBddsipK06Q1dwY5CdnY1ffvkFALB06VJ4enpyHFH79XHph2U9n0Fc4V08E7q6Q/sSCUT4eszWxi+kpAD5+fUtOFJTO3QMAFR+0gP6mKusTU0wt6/hXovqioyMxJEjRyAUCvH6669DKKQqCbUkJAA2NkBdXf1XR3R0eyPHY4wxroPQJnW7MhUUFKCoqEjZlcna2rrZrkxNPWnw8PBAaWkprKyaHzeBdNyxY8dw+fJl9O3bFxMnTuQ6HP1XXAwUaG5yiLKKClj37k2fdT1w9epVXL9+HUOGDIGtrS2SkpLw1ltvITc3F3fu3Glz67GysjJYW1u36XdaVluKJw9MQnldBb4bvwOhRtZdMa8yFxXSCvjY+HIdCmmGOp9X0j7aLD8BVIbiSllZGTZt2gTGGFavXg1bW1uuQ9JvCkV9hZmGJhWh8pPmUa4yPAkJCfjf//4He3t7rFmzRisTQhm1ujqNDWtRVlYGa29v+jw3w+gry/Lz81FYWNjiOj4+PhA1MW1qRkYGPDw8cOnSpWa7Mj2KCu+6wxhDRUUFLCwsKMFygD7r+uP27dt44YUXcOvWLVRWVsLV1RXjx4/Hm2++qVbTdnV/p5XSStTKamBnqt2xAglpCuUg7dNl+Qmg36kuNdz4d6QrPmkf+pxrHuUqw1RVVQWxWAyBQDdDeZCm0ee5ZUbf5lGfuzKR9uPxeLC0pMkOCOnRowdOnTql8+Oam5irzhZGCDEqVH4yXlRJRowJ5SrDpO1xEgnRBKOvLGur5roy+fr6tvlJAyGEEEJIZ0LlJ0KIIaBcRQhRF5/rAPSFmZkZ9u/fj1GjRqF79+5YtmwZevbsibNnz9ITOEIIIYSQJlD5iRBiCChXEULURS3LHuKqKxMhhBBCiKGi8hMhxBBQriKEqItalhFCCCGEEEIIIYQQ8hBVlhFCCCGEEEIIIYQQ8hBVlhFCCCGEEEIIIYQQ8hCNWaZBjDEAQFlZGceREKJdDZ/xhs88MXyUv4ghoRxkfCgHkc6Acpfho1xFjAnlpJZRZZkGlZeXAwA8PDw4joQQ3SgvL4e1tTXXYRANoPxFDBHlIONBOYh0JpS7DBflKmKMKCc1jceoGlFjFAoFsrKyYGlpCR6Pp5F9lpWVwcPDA+np6bCystLIPg1JZz9/QD/fA8YYysvL4ebmBj6fenMbg5bylz5+BnWJzl//zp9ykPGhMpTm0fnr3/lT7jJ8Hc1V+vi51CU6f/06f8pJLaOWZRrE5/Ph7u6ulX1bWVnpxQXFlc5+/oD+vQf09MG4tCV/6dtnUNfo/PXr/CkHGRcqQ2kPnb9+nT/lLsOmqVylb59LXaPz15/zp5zUPKo+JIQQQgghhBBCCCHkIaosI4QQQgghhBBCCCHkIaos03NisRjvvPMOxGIx16FworOfP0DvAeFeZ/8M0vl37vMnhquzf3bp/Dv3+RP91Nk/l3T+nfv8DQ0N8E8IIYQQQgghhBBCyEPUsowQQgghhBBCCCGEkIeosowQQgghhBBCCCGEkIeosowQQgghhBBCCCGEkIeosowQQgghhBBCCCGEkIeossxApKSkYNmyZfD29oapqSl8fX3xzjvvoK6ujuvQtGrTpk3o2rUrJBIJ+vfvj2vXrnEdkk5s3LgRffv2haWlJZycnDBt2jTcu3eP67AI6ZS5iPIQ5SFi2ChvdZ68BVDuIoaB8lLnyUuUkwwXVZYZiPj4eCgUCnz77be4c+cOvvjiC2zduhX/+Mc/uA5Na3bv3o2XX34Z77zzDm7cuIHQ0FCMGzcOeXl5XIemdWfPnsXatWtx5coVHD9+HFKpFGPHjkVlZSXXoZFOrrPlIspDlIeI4aO81XnyFkC5ixgGykudJy9RTjJcPMYY4zoI0j6ffvoptmzZggcPHnAdilb0798fffv2xTfffAMAUCgU8PDwwHPPPYf169dzHJ1u5efnw8nJCWfPnsWwYcO4DocQFcaciygP/Y3yEDEmlLc6D8pdxFBQXuocKCcZDmpZZsBKS0thZ2fHdRhaUVdXh6ioKIwePVq5jM/nY/To0bh8+TKHkXGjtLQUAIz2900Mm7HmIspDqigPEWNCeavzoNxFDAXlpc6BcpLhoMoyA5WYmIivv/4aK1eu5DoUrSgoKIBcLoezs7PKcmdnZ+Tk5HAUFTcUCgVefPFFDB48GCEhIVyHQ4gKY85FlIf+RnmIGBPKW50H5S5iKCgvdQ6UkwwLVZZxbP369eDxeC1+xcfHq2yTmZmJ8ePHY9asWVixYgVHkRNdWbt2LWJjY/HLL79wHQoxYpSLSEsoDxF9RHmLtIZyF9E1ykukJZSTDIuQ6wA6u3Xr1mHJkiUtruPj46P8PisrCxERERg0aBC2bdum5ei44+DgAIFAgNzcXJXlubm5cHFx4Sgq3Xv22Wdx6NAhnDt3Du7u7lyHQ4wY5aLGKA/VozxE9BXlrcYob/2NchfhAuWlxigv1aOcZHiosoxjjo6OcHR0bNO6mZmZiIiIQHh4OLZv3w4+33gbBopEIoSHh+PkyZOYNm0agPpmqydPnsSzzz7LbXA6wBjDc889hwMHDuDMmTPw9vbmOiRi5CgXNUZ5iPIQ0W+Utxrr7HkLoNxFuEV5qbHOnpcoJxkuqiwzEJmZmRgxYgS8vLzw2WefIT8/X/masdbIv/zyy1i8eDH69OmDfv364csvv0RlZSWWLl3KdWhat3btWuzatQu//fYbLC0tlf35ra2tYWpqynF0pDPrbLmI8hDlIWL4KG91nrwFUO4ihoHyUufJS5STDBgjBmH79u0MQJNfxuzrr79mnp6eTCQSsX79+rErV65wHZJONPe73r59O9ehkU6uM+YiykOUh4hho7zVefIWY5S7iGGgvNR58hLlJMPFY4wxzVfBEUIIIYQQQgghhBBieIyzYzQhhBBCCCGEEEIIIe1AlWWEEEIIIYQQQgghhDxElWWEEEIIIYQQQgghhDxElWWEEEIIIYQQQgghhDxElWWEEEIIIYQQQgghhDxElWWEEEIIIYQQQgghhDxElWWEEEIIIYQQQgghhDxElWWEEEIIIYQQQgghhDxElWWEEEIIIYQQQgghhDxElWWEEEIIIYQQQgghhDxElWXEYIWEhOCDDz7AqlWrYGtrCxcXF3z55Zdch0UIIQAoRxFC9BflJ0KIvqL8RPQFjzHGuA6CEHXV1tbCwsIC3t7e2LBhA/r27YstW7bgm2++QVFREczNzbkOkRDSiVGOIoToK8pPhBB9RfmJ6BOqLCMGKSoqCn369MHhw4cxfvx4AMDt27fRs2dP5OXlwdHRkeMICSGdGeUoQoi+ovxECNFXlJ+IPqFumMQg3bp1Cy4uLhg3bpxyWX5+PkQiEezs7DiMjBBCKEcRQvQX5SdCiL6i/ET0CVWWEYMUHR2NPn36gMfjqSwLCQmBQCDgMDJCCKEcRQjRX5SfCCH6ivIT0SdUWUYM0q1btxAWFqayLDo6utEyQgjhAuUoQoi+ovxECNFXlJ+IPqHKMmKQmkqkN2/epERKCNELlKMIIfqK8hMhRF9RfiL6hCrLiMFJSUlBaWmpStKsra1FfHw8evXqxV1ghBACylGEEP1F+YkQoq8oPxF9I+Q6AELU1bVrVzw+iWtsbCzkcjlCQ0M5iooQQupRjiKE6CvKT4QQfUX5iegballGjMLNmzfh4+MDS0tLrkMhhJBGKEcRQvQV5SdCiL6i/ES4RJVlxCjQwI+EEH1GOYoQoq8oPxFC9BXlJ8IlHnu8rSMhhBBCCCGEEEIIIZ0UtSwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjhBBCCCGEEEIIIeQhqiwjHfbuu++Cx+NxHQYhpAl0fXZOe/bsgZ2dHSoqKrgORWnJkiXo2rVru7YdMWIERowYodF4uMTj8fDuu++qtc3cuXMxe/Zs7QREOEM5mhD9RNdm5/TJJ58gICAACoWC61CUOlIG6tq1K5YsWaLReLiSkpICHo+HHTt2qLXdgAED8Nprr7XrmFRZxqHk5GQ8++yz8Pf3h5mZGczMzBAUFIS1a9ciJiamyW1ee+018Hg8zJkzR2U5j8dr09eZM2d0cGbc+f777xEYGAiJRIJu3brh66+/brTOgQMHMG7cOLi5uUEsFsPd3R0zZ85EbGwsBxG3rqKiAi+++CLc3d0hFosRGBiILVu2NLluSUkJnnnmGTg6OsLc3BwRERG4ceNGk+v+/vvv6N27NyQSCTw9PfHOO+9AJpNp81QMRnuuTYCuz9bQ9amb61Mul+Odd97Bc889BwsLi3afG9Evr7/+Ovbt24dbt25xHYpeoDKU5rUlR3ft2rXZ96dbt24cRN2y3NxcLF26FE5OTjA1NUXv3r2xd+/eJtfNzMzE7NmzYWNjAysrKzzxxBN48OBBk+u25b3qjKj8pB10berm2iwrK8PHH3+M119/HXw+VZMYi9dffx2bNm1CTk6O2tvyGGNMCzGRVhw6dAhz5syBUCjEggULEBoaCj6fj/j4eOzfvx+pqalITk6Gl5eXchvGGDw9PSEUCpGbm4vc3FxYWloCAH7++WeV/f/44484fvw4fvrpJ5XlY8aMgbOzs0bPRSaTQSaTQSKRaHS/6vr222+xatUqzJgxA+PGjcP58+fx008/4aOPPsLrr7+uXO+9997D3bt30atXLzg4OCAnJwc//PADsrOzcfnyZYSGhnJ4FqrkcjmGDRuGyMhIrF27Ft26dcPRo0fx22+/4cMPP8Q//vEP5boKhQJDhw7FrVu38Oqrr8LBwQGbN29Geno6oqKiVP5QHj58GJMmTcKIESMwb9483L59G5s2bcIzzzzT7I1+Z9GeaxOg67M1dH3q7vo8ePAgpk+fjvT0dHTp0kUr594eS5YswZkzZ5CSkqL2tg1PVI3lhojH4+Gdd95Ru3VZ//790b17d/z444/aCcxAUBlK89qaow8ePNioxWpqairefPNNrFmzBps2bdJ16M0qKytDeHg4cnNz8cILL8DFxQV79uzBuXPnsHPnTsyfP1+5bkVFBXr37o3S0lKsW7cOJiYm+OKLL8AYQ3R0NOzt7ZXrtvW96myo/KQddG3q7tr88ssv8c477yA3N5fz3/ujOlIG6tq1K0aMGKF2ayx9lJKSAm9vb2zfvl2t1nIKhQJdunTBihUr8N5776l3UEZ0LjExkZmbm7PAwECWlZXV6HWpVMr+/e9/s7S0NJXlp06dYgDYqVOnmImJCduxY0ezx1i7di1ry6+3srJS/RN4qKKiot3balpVVRWzt7dnkyZNUlm+YMECZm5uzoqKilrcPicnhwmFQrZy5Upthqm2PXv2MADs+++/V1k+Y8YMJpFIWG5urnLZ7t27GQC2d+9e5bK8vDxmY2PD5s2bp7J9UFAQCw0NZVKpVLns//7v/xiPx2NxcXFaOhv9195rkzG6PltC16dur8+pU6eyIUOGtPe0tGbx4sXMy8urXdsOHz6cDR8+XKPxaFNr1x8A9s4776i9388++4yZm5uz8vLydkZm+KgMpXkdzdHvv/8+A8AuXryozTDV9sknnzAA7OTJk8plcrmc9e3bl7m4uLDa2lrl8o8//pgBYNeuXVMui4uLYwKBgL3xxhvKZR19r4wVlZ+0g65N3V6bPXv2ZAsXLuzIqWlFR8pAXl5ebPHixRqNR5taunaTk5MZALZ9+3a19/vss88yLy8vplAo1NqOKss48MwzzzAA7MqVK2ptt2zZMhYUFMQYY2zChAlszJgxza7b1B+T4cOHs+DgYBYZGcmGDh3KTE1N2QsvvNCmY7/zzjsMALtz5w6bN28es7GxYWFhYSqvPQoAW7t2LTtw4AALDg5mIpGIBQUFscOHDyvX2bt3LwPAzpw50+h4W7duZQDY7du32xTfn3/+yQCwP//8U2X5pUuXGAD2008/tbi9QqFgVlZWbM6cOW06XoOG9/TWrVts2LBhzNTUlPn6+ipviM+cOcP69evHJBIJ8/f3Z8ePH1dr/8899xwD0ChxNLx327ZtUy6bNWsWc3Z2ZnK5XGXdZ555hpmZmbGamhrGGGN37txhANimTZtU1svMzGQA2Pvvv69WjMakvdcmY3R9toSuT91dn9XV1UwkErF333230WsNv/c9e/awwMBAJpFI2IABA1hMTAxjrP736uvry8RiMRs+fDhLTk5utI89e/aw3r17M4lEwuzt7dmCBQtYRkZGo/UaPltisZgFBwez/fv3N1lZJpfL2RdffMGCgoKYWCxmTk5O7JlnnmlUqFWnoPjTTz+xvn37MlNTU2ZjY8OGDh3Kjh49qrLOpk2bWFBQEBOJRMzV1ZWtWbOGFRcXt+t8Fy9ezMzNzVliYiKbMGECs7CwYE888QRjjLGamhr24osvMgcHB2ZhYcGmTJnC0tPTG1WWlZWVsRdeeIF5eXkxkUjEHB0d2ejRo1lUVJTKsW7dusUAsP3797fpvTBGVIaqp085OjAwkHl7e7fpWI/y8vJikyZNYqdPn2bh4eFMIpGwkJAQdvr0acYYY/v27WMhISFMLBaz3r17sxs3bqi1/ylTpjBHR8dGyz/99FMGgB07dky5rG/fvqxv376N1h07dizz9fVV/tzR98pYUfmJrk116OO1+eDBAwagUWVtQwXNp59+yr755hvm7e3NTE1N2ZgxY1haWhpTKBTsvffeY126dGESiYRNnTqVFRYWNtp/W8sd3377LfPx8WESiYT17duXnTt3rskyUE1NDXv77beZr68vE4lEzN3dnb366qvK8mSDtlaWyeVy9uWXXyp/rw4ODmzcuHHs+vXrynWkUil77733mI+PDxOJRMzLy4u98cYbjY7Z1vNt6dotLi5mixcvZlZWVsza2po99dRT7ObNm40qy7Kzs9mSJUtYly5dmEgkYi4uLmzq1KmNyrC//fYbA6D2Z5U643Lg0KFD8PPzQ//+/du8TW1tLfbt24d58+YBAObNm4dTp06p3fe2sLAQEyZMQFhYGL788ktERESotf2sWbNQVVWFf/7zn1ixYkWL6164cAFr1qzB3Llz8cknn6CmpgYzZsxAYWEhAGDSpEmwsLDAnj17Gm27e/duBAcHIyQkpE1x3bx5EwDQp08fleXh4eHg8/nK1x9VUlKC/Px83L59G8uXL0dZWRlGjRrVpuM9qri4GJMnT0b//v3xySefQCwWY+7cudi9ezfmzp2LiRMn4qOPPkJlZSVmzpyJ8vLyNu+7trYWAoEAIpFIZbmZmRkAICoqSrns5s2b6N27d6M+9v369UNVVRXu37+vXA9o/F65ubnB3d29yfeqs2jPtQnQ9dkauj51d31GRUWhrq4OvXv3bvL18+fPY926dVi8eDHeffddxMXFYfLkydi0aRO++uorrFmzBq+++iouX76Mp59+WmXbHTt2YPbs2RAIBNi4cSNWrFiB/fv3Y8iQISgpKVGud+zYMcyYMQM8Hg8bN27EtGnTsHTpUkRGRjaKZ+XKlXj11VcxePBg/Pvf/8bSpUuxc+dOjBs3DlKptMVzbcqGDRuwaNEimJiY4L333sOGDRvg4eGBU6dOKdd59913sXbtWri5ueFf//oXZsyYgW+//RZjx45VOWZbzxeo764zbtw4ODk54bPPPsOMGTMAAMuXL8eXX36JsWPH4qOPPoKJiQkmTZrUKO5Vq1Zhy5YtmDFjBjZv3oxXXnkFpqamiIuLU1kvKCgIpqamuHjxotrvjbGgMpR+5OhHt42Li1PpNqWOxMREzJ8/H1OmTMHGjRtRXFyMKVOmYOfOnXjppZewcOFCbNiwAUlJSZg9e7Zag27X1tbC1NS00fLHc7RCoUBMTEyj8wfqc3RSUpLyb0NH3itjRuUnujYN/dq8dOkSADRbftq5cyc2b96M5557DuvWrcPZs2cxe/ZsvPnmmzhy5Ahef/11PPPMM/jjjz/wyiuvqGzb1nLH999/j5UrV8LFxQWffPIJBg8ejKlTpyI9PV1lfwqFAlOnTsVnn32GKVOm4Ouvv8a0adPwxRdfNBr3r62WLVuGF198ER4eHvj444+xfv16SCQSXLlyRbnO8uXL8fbbb6N379744osvMHz4cGzcuBFz585t1/kCTV+7jDE88cQT+Omnn7Bw4UJ88MEHyMjIwOLFixvFPWPGDBw4cABLly7F5s2b8fzzz6O8vBxpaWkq64WHhwOA+uUntarWSIeVlpYyAGzatGmNXisuLmb5+fnKr6qqKuVrv/76KwPAEhISGGP1T6ElEgn74osvmjxOc09eALCtW7eqHXfD05XHuws9+tqjADCRSMQSExOVyxqeiH/99dfKZfPmzWNOTk5MJpMpl2VnZzM+n8/ee++9Nse3du1aJhAImnzN0dGRzZ07t9Hy7t27MwAMALOwsGBvvvlmo1YfrWl4T3ft2qVcFh8fzwAwPp+v8oTt6NGjajcd/de//sUAsPPnz6ssX79+PQPAJk+erFxmbm7Onn766Ub7aHjScuTIEcbY309tmmoK37dvXzZgwIA2x2dM2nttMkbXZ2vo+tTd9fmf//yn2afWAJhYLFZ52vbtt98yAMzFxYWVlZUpl7/xxhsMgHLduro65uTkxEJCQlh1dbVyvUOHDjEA7O2331YuCwsLY66urqykpES57NixYwyASsuy8+fPMwBs586dKnEeOXKk0fK2tCxLSEhgfD6fPfnkk40+Kw3N7vPy8phIJGJjx45VWeebb75hANgPP/yg9vkuXryYAWDr169XOWZ0dDQDwNasWaOyfP78+Y1alllbW7O1a9e2eH4N/P392YQJE9q0rrGhMpT+5OgG69atYwDY3bt323y8Bl5eXgwAu3TpknJZQy42NTVlqampyuUNuaqhZUtbPPfcc4zP57OUlBSV5XPnzmUA2LPPPssYYyw/P58BaPI927RpEwPA4uPjGWMde6+MFZWf6No0hmvzzTffZAAaDXPQ0LLM0dFRpVzTUE56fNiMefPmMZFIpGxtpW65IywsTKUb6rZt2xgAlTLQTz/9xPh8fqPyZ0PLxUe73balZVlDV+jnn3++0WsN5aeGMs3y5ctVXn/llVcYUN+NWp3zZaz5a/fgwYMMAPvkk0+Uy2QyGRs6dKhKWb24uFjZ6q8tRCIRW716dZvWbUAty3SsrKwMAJqcoWzEiBFwdHRUfj06EOPOnTvRp08f+Pn5AQAsLS0xadIk7Ny5U63ji8ViLF26tN3xr1q1qs3rjh49Gr6+vsqfe/bsCSsrK5XZS+bMmYO8vDyVAQt//fVXKBQKtWrGq6urG7XuaCCRSFBdXd1o+fbt23HkyBFs3rwZgYGBqK6uhlwub/MxG1hYWKjUqHfv3h02NjYIDAxUecLW8H1zs7c0Zf78+bC2tsbTTz+N48ePIyUlBdu2bcPmzZsBQOW8qqurIRaLG+2jYYDKhnUb/m9u3abeq86gvdcmQNdna+j61N312fBk29bWtsnXR40aha5duyp/bjjvGTNmKAdUfnR5w/sRGRmJvLw8rFmzRmXQ20mTJiEgIAB//vknACA7OxvR0dFYvHgxrK2tleuNGTMGQUFBKrHs3bsX1tbWGDNmDAoKCpRf4eHhsLCwwOnTp1s818cdPHgQCoUCb7/9dqMWfDweDwBw4sQJ1NXV4cUXX1RZZ8WKFbCyslKeR1vP91GrV69W+fmvv/4CADz//PMqy1988cVG29rY2ODq1avIyspq9TxtbW1RUFDQ6nrGiMpQ+pOjgfrWDb/88gt69eqFwMDANh/vUUFBQRg4cKDy54bcM3LkSHh6ejZark6OXr58OQQCAWbPno1Lly4hKSkJGzduxIEDBwC0Pe8+vm573itjRuUnujYBw782CwsLIRQKm51FfNasWSrlmobzXrhwIYRCocryuro6ZGZmAlC/3LFq1SqV81iyZInKcYH68lNgYCACAgJUyk8jR44EALXLT/v27VNOPPS4hvJTQ5nm5ZdfVnl93bp1AKA8j7aeb4Omrt2//voLQqFQpVwlEAjw3HPPqaxnamoKkUiEM2fOoLi4uNXzbE/5iSrLdKzhZuTx2UqA+hk8jh8/3mjml5KSEvz1118YPnw4EhMTlV+DBw9GZGSksvtOW3Tp0qXZRNIW3t7ebV730UTawNbWVuXDPH78eFhbW2P37t3KZbt370ZYWBj8/f3bfCxTU1PU1dU1+VpNTU2TTX0HDhyIcePGYfXq1Th69Ch+/vlnvPHGG20+ZgN3d3dlImlgbW0NDw+PRssAtOlibuDi4oLff/8dtbW1GDt2LLy9vfHqq68qp0F+NKGbmpqitra20T5qamqUrz/6f3PrNvVedQbtuTYBuj7bgq5P3V+frJmJrh//vTecd2vvR2pqKoD6ysbHBQQEKF9v+L+paeof3zYhIQGlpaVwcnJSuZlydHRERUUF8vLyWj7JxyQlJYHP5zeqlHtUc+chEong4+PT6DxaO98GQqEQ7u7ujY7F5/NVbqqa2+cnn3yC2NhYeHh4oF+/fnj33XebvfFgjDX6THcWVIbSnxwNAGfPnkVmZiYWLFjQ5mM9rr05qS169uyJXbt2ISkpCYMHD4afnx+++uorfPnllwD+ztGt5d1H12nve2XMqPxE1yZg/NempstPzZU7Hi8/mZiYwMfHR2VZQkIC7ty506js1PDZak/5yc3NDXZ2ds2u01CmaajYbuDi4gIbG5tWy0+Pn2+Dpq7d1NRUuLq6Nqq4fHyfYrEYH3/8MQ4fPgxnZ2cMGzYMn3zySbPduNtTfqLKMh2ztraGq6srYmNjG73Wv39/jB49GoMHD1ZZvnfvXtTW1uJf//oXunXrpvxqqNlV5+lLRxOFOtsLBIImlz96EycWizFt2jQcOHAAMpkMmZmZuHjxotr9rV1dXSGXyxslh7q6OhQWFsLNza3F7W1tbTFy5Ei1n2QBzZ9nW86/LYYNG4YHDx7g5s2buHDhAjIzMzFgwAAAUPmD6+rqiuzs7EbbNyxreA9cXV1Vlj++bmvvlbFqz7UJ0PXZFnR96u76bJhCvblCq7bfD3UoFAo4OTnh+PHjTX6pPb03h8RicaPWbOqYPXs2Hjx4gK+//hpubm749NNPERwcjMOHDzdat7i4GA4ODh0J12BRGUq/cvTOnTvB5/OV4021h7Zz0syZM5GVlYVr167h8uXLSE1NVd54NuRoOzs7iMXiNufojvw9M0ZUfqpH16ZhX5v29vaQyWTNjl2rb+WnHj16NFt+WrNmjdaOremHdR29dl988UXcv38fGzduhEQiwVtvvYXAwMBmx0NWt/xElWUcmDRpEhITE3Ht2rU2rb9z506EhIRg7969jb5Gjx6NXbt2aTli7ZozZw4KCgpw8uRJ7N27F4wxtf+YhIWFAUCjAaQjIyOhUCiUr7ekuroapaWlah1XVwQCAcLCwjB48GBYWFjgxIkTAOqbgjcICwvDjRs3Gg2wefXqVZiZmSn/8DT3XmVlZSEjI6NN75WxUvfaBOj6bAu6PnV3fQYEBAAAkpOTO3JKjXh5eQEA7t271+i1e/fuKV9v+D8hIaHJ9R7l6+uLwsJCDB48GKNHj270FRoaqlaMvr6+UCgUuHv3rtrnUVdXh+Tk5Ebn0dr5tsTLywsKhQJJSUmNtm+Kq6sr1qxZg4MHDyI5ORn29vb48MMPVdaRyWRIT09vd7caY0BlKFVc5eiGgdlHjBih9xVEIpEIffv2xYABAyASiRrlaD6fjx49ejQ5CcnVq1fh4+OjbD2lib9nxojKT43Rtdk6fbo2dV1+aq7c8Xj5SSqVNorJ19cXRUVFGDVqVJPlp6ZasLfE19cXWVlZKCoqavE8FApFo/hyc3NRUlLSavnp8fNtiZeXF7Kzsxu1Vm2u/OTr64t169bh2LFjiI2NRV1dHf71r3+prJOZmYm6ujq1y09UWcaB1157DWZmZnj66aeRm5vb6PVHa6LT09Nx7tw5zJ49GzNnzmz0tXTpUiQmJuLq1au6PAWNGj16NOzs7LB7927s3r0b/fr1U6s5NFDff97Ozg5btmxRWb5lyxaYmZmpzD7WVNPUlJQUnDx5ssnZVvRNfn4+Pv74Y/Ts2VPlZnzmzJnIzc3F/v37lcsKCgqwd+9eTJkyRdnfPzg4GAEBAdi2bZvKGFBbtmwBj8fDzJkzdXcyekadaxOg67Ot6PrU3fUZHh4OkUjUZMGyI/r06QMnJyds3bpVpTvE4cOHERcXp/wdurq6IiwsDP/9739VKjePHz/eqBJr9uzZkMvleP/99xsdTyaTNZpxsjXTpk0Dn8/He++916hSsuHaHT16NEQiEb766iuV6/n7779HaWmp8jzaer4tmTBhAgDgq6++Ulne0M2kgVwub1QR7OTkBDc3t0ZdT+7evYuamhoMGjSo1eMbKypDqdJ1jm7w119/oaSkpEPdvLiQkJCArVu3YvLkySqtf2fOnInr16+r5M579+7h1KlTmDVrlnJZe96rzoDKT43Rtakerq/NhvHZNF1+Uqfc4ejoiK1bt6p0J92xY0ej8tDs2bORmZmJ7777rtHxqqurUVlZqVaMM2bMAGMMGzZsaPRaQ8wTJ04E0LgM8/nnnwOA8jzaer4tmThxImQymcrvUi6XK4c5aVBVVaXsjtvA19cXlpaWjcpPDTOsqlt+Era+CtG0bt26YdeuXZg3bx66d++OBQsWIDQ0FIwxJCcnY9euXeDz+XB3d8euXbvAGMPUqVOb3NfEiRMhFAqxc+dOtadr1hcmJiaYPn06fvnlF1RWVuKzzz5Tex+mpqZ4//33sXbtWsyaNQvjxo3D+fPn8fPPP+PDDz9U6YPdo0cPjBo1CmFhYbC1tUVCQgK+//57SKVSfPTRR5o8NY0YPnw4Bg4cCD8/P+Tk5GDbtm2oqKjAoUOHVLr9zJw5EwMGDMDSpUtx9+5dODg4YPPmzZDL5Y2S36effoqpU6di7NixmDt3LmJjY/HNN99g+fLlnbrFgjrXJgC6PtuIrk/dXZ8SiQRjx47FiRMnNNqN0cTEBB9//DGWLl2K4cOHY968ecjNzcW///1vdO3aFS+99JJy3Y0bN2LSpEkYMmQInn76aRQVFeHrr79GcHCwylPC4cOHY+XKldi4cSOio6MxduxYmJiYICEhAXv37sW///1vtSrv/fz88H//9394//33MXToUEyfPh1isRjXr1+Hm5sbNm7cCEdHR7zxxhvYsGEDxo8fj6lTp+LevXvYvHkz+vbti4ULF6p9vs0JCwvDvHnzsHnzZpSWlmLQoEE4efIkEhMTVdYrLy+Hu7s7Zs6cidDQUGXrxOvXrzd6Mnr8+HGYmZlhzJgxbX5fjA2VoVTpOkc32LlzJ8RiMWbMmKGJ09CaoKAgzJo1C56enkhOTsaWLVtgZ2eHrVu3qqy3Zs0afPfdd5g0aRJeeeUVmJiY4PPPP4ezs7NyAGugfe9VZ0Dlp8bo2myZvl2bPj4+CAkJwYkTJ/D0009r7DzVKXd88MEHWLlyJUaOHIk5c+YgOTkZ27dvbzRm2aJFi7Bnzx6sWrUKp0+fxuDBgyGXyxEfH489e/bg6NGjaj1gjoiIwKJFi/DVV18hISEB48ePh0KhwPnz5xEREYFnn30WoaGhWLx4MbZt24aSkhIMHz4c165dw3//+19MmzYNERERap1vS6ZMmYLBgwdj/fr1SElJQVBQEPbv39/oweL9+/cxatQozJ49G0FBQRAKhThw4AByc3NVJvcC6stPnp6e6NWrV5vfFwCPzYdLdCoxMZGtXr2a+fn5MYlEwkxNTVlAQABbtWoVi46OZowx1qNHD+bp6dnifkaMGMGcnJxUpq1tbmrl4ODgdsXaMH1yfn5+s689CgBbu3Zto3Wbm772+PHjDADj8XgsPT29XTEyVj+9bvfu3ZlIJGK+vr7siy++UE55+2i8ffr0Yba2tkwoFDI3Nzc2d+5cFhMTo/bxmntPvby82KRJkxotb+59aclLL73EfHx8mFgsZo6Ojmz+/PksKSmpyXWLiorYsmXLmL29PTMzM2PDhw9n169fb3LdAwcOsLCwMCYWi5m7uzt78803WV1dnVqxGau2XJuM0fWpLro+dXN97t+/n/F4PJaWltbq+TVMif74tNunT59mANjevXtVlu/evZv16tWLicViZmdnxxYsWMAyMjIaxbBv3z4WGBjIxGIxCwoKYvv372eLFy9mXl5ejdbdtm0bCw8PZ6ampszS0pL16NGDvfbaaywrK0u5zvDhw1WmTW/JDz/8oIzR1taWDR8+nB0/flxlnW+++YYFBAQwExMT5uzszFavXs2Ki4sb7ast57t48WJmbm7eZCzV1dXs+eefZ/b29szc3JxNmTKFpaenMwDsnXfeYYwxVltby1599VUWGhrKLC0tmbm5OQsNDWWbN29utL/+/fuzhQsXtul9MHZUhvqbLnM0Y4yVlpYyiUTCpk+f3u5jMaZeLm4uV7Vm7ty5zMPDg4lEIubm5sZWrVrFcnNzm1w3PT2dzZw5k1lZWTELCws2efJklpCQ0OS6bX2vOhsqP6mia7N5+nhtfv7558zCwoJVVVW1en7NlZO2b9/OADQq37W13LF582bm7e3NxGIx69OnDzt37lyTZaC6ujr28ccfs+DgYGV5Jzw8nG3YsIGVlpYq12vus/k4mUzGPv30UxYQEMBEIhFzdHRkEyZMYFFRUcp1pFIp27BhA/P29mYmJibMw8ODvfHGG6ympqbR/tpyvi1du4WFhWzRokXMysqKWVtbs0WLFrGbN28yAGz79u2MMcYKCgrY2rVrWUBAADM3N2fW1tasf//+bM+ePSr7ksvlzNXVlb355putvg+P4zGmxdHnCCGEEKJTcrkcQUFBmD17dpNdHIlhio6ORu/evXHjxo1OOy4SIYQQoi2lpaXw8fHBJ598gmXLlnEdDtGQgwcPYv78+UhKSlJOpNVWVFlGCCGEGJndu3dj9erVSEtLazT1NjFMc+fOhUKhwJ49e7gOhRBCCDFKH3/8MbZv3467d+92aJZroj8GDhyIoUOH4pNPPlF7W6os6+QqKioazTTxOEdHx2anxdW2urq6FmfmAOqnrO7otLOPKyoqUhlc8XECgQCOjo7t3r9cLkd+fn6L61hYWNBNbidH12fT6PokhOgDytFNy8/PV5mg5HEikahDY3txdV7EcNC12TS6NglRk9odN4lRaeiP39JXcnIyZ/E19Adv6auh37ImDR8+vMVjNjXujjoa+r+39NUwng3pvOj6bBpdn4QQfUA5umleXl4tHrOt4w82h6vzIoaDrs2m0bVJiHqoZVkn9+DBAzx48KDFdYYMGQKJRKKjiFQVFxcrp3ptTnBwsNr9j1sTFRWF4uLiZl83NTXF4MGD273/mpoaXLhwocV1fHx8Gs1+QjoXuj6bRtcnIUQfUI5u2sWLF1FdXd3s67a2tggPD2/3/rk6L2I46NpsGl2bhKiHKssIIYQQQgghhBBCCHlIyHUAnYVCoUBWVhYsLS3B4/G4DoeQVjHGUF5eDjc3NxrgspOhfEX0DeWjzo1yEjEklK86J8pTRN9RblIfVZbpSFZWFjw8PLgOgxC1paenw93dneswiA5RviL6ivJR50Q5iRgiyledC+UpYigoN7UdVZbpiKWlJYD6D6eVlRXH0RDSurKyMnh4eCg/u6TzoHxF9A3lo86NchIxJJSvOifKU0TfUW5SH1WW6UhDc1wrKytKoMSgUFPyzofyFdFXlI86J8pJxBBRvupcKE8RQ0G5qe2osyohhBBCCCGEEEIIIQ9RZRkhhBBCCCGEEEIIIQ9RZRkhhBBCCCGEEEIIIQ9RZRkhhBBCCCGEEEIIIQ9RZRkhhBBCCCGEEEIIIQ/RbJjEaBy7m4N9NzIQ5GqNtSN8IRS0XBecXlSFd/+4g4paGdaN6Y5+3nY6ipQQYiwuJRVg59U0+Dpa4NkIP4iEmnkGxRhDYWUd5AoGZyuJRvZJCCFNqZPX4H7JBdTJq+Fj3Rc2YpdWt3lQFoXMiruwFbshyG4E+DyBDiIlhBiD4ppMJJZeh0RojgDbYTDhizu0P5miDgKeCc3ySDSOKsuIUUjILcfKn6MABhy7kwuJCR8rh/kqX6+RylErU8Da1ES57PlfbiImoxQKxrB0xzXceGsMxEIq7BFC2ia/vBaLt1+DXMHAGCAS8vBsRLdm17+bXQYhnwd/Z8tm11nxUyRO3M0FAyB4WOjbs3Igwr1sNR0+IYQAAG4XHkN21X0AQF5NMsa4r4aA/3d5qVZeCRHfFDxe/cOAgupU3C06BQAorcuBRGgBP+v+ug+cEGIwpIpaVMtKYSawxdXcXyFjdQB4UDAFQh3GtWuf1bJynMn4HnJIAQA9bMfC3SoYAh5VcRDNoG6YxCikFVWBMYAB4POAlIJK5Wv3c8vR958n0Ov9Yzh4MxNSuQIKBUN2aQ3kjIEBqKyTo6pWzln8miSXy/Hnn39i//79qKmp4TocQoxWbnkNpHIGBQN4PCClsKrZdWMySjDxq/MY9+U5JOVXNHqdMYZX9t7C8YcVZQAgZwxyxpCQW6alMyCEEKBCWoT6EhSDTFELqaJW+VpMwTEcT9+Mc1n/hUxeBwWTo1pernydBx5qZOWNd2qgkpOTsXPnTty5c4frUIgObdmyBT179oSVlRWsrKwwcOBAHD58mOuwjMrF7J04l/VfpFfGPKwoAwCGallpu/d5OXu3sqIMAG4XH8Ph1C+QVHq9g9ESUo8qy9rIGJJoXV0d4uLiUF1dzXUoGjfQ1x7dnCwAACYCPmb38VC+djwuF+U1MigYsPVcEoLeOYLBn5zCwgGeynXm9PGArblI53FrQ3JyMiIjI3H79m0q7HVSxpCvDEGgixWGdnMAAEhMBFjY30vl9YKKWvwalYHSamlTm6s4FZ+HX29kNFpuby7ChkNxuJ5SpJmgCdExY8lHWVlZSEtL4zoMrfCx7qP83sXMH2KBufLn9IrbAIByaQEu5uzEX6mfo7KuCObC+tauAp4JPC1DdRuwFp04cQKJiYkG+Rkl7efu7o6PPvoIUVFRiIyMxMiRI/HEE09QOVqDGFMAAPg8Ibwswh5+L4Cvdb9277NKXtLk8uLazHbvk5BH/T979x1eVZUufvy7T0vvvZFAgEAgCb33DioggthRUWesM+IUvXfu3PE34zhzpxdnnFFRxy4oKoIIgvTeS0gIpPfeyyl7//44JhJJzznZ5yTr8zw85Jyz914vJStrv3utd4k5il3U3IkOGzYMRVF48803WbFiBWfOnGHUqFFqh9clX3zxBWfPniU2NpZ77rmny+dVVlZSU1NDZGSkw64Fdzfo2PrEDC7mVTEowJ1gr29r/CwYEcI/9l6l3mjBIiuYLNZZZT6ueg78ZC4NRktLoq0/CA8Px9/fn6amJmJiYtQOR1BBf+ivnIFWI/Hm/ZNIL60jyMul1TJvgGc+PMe+tBJuGxfJH9Yksf2pmeg0ErFBN/Y3xzLaToZVNpiwyAonMsuZGCPqKgrOpz/0RxUVFbzyyisArF+/nsjIyC6dZ7FYyM3NJSAgAE9Pxx1nRHmOxt8lAqPciK8htNVYL9JzFDm1F3DTelNjKgUgq/YsCyIfo8ZUirvOF4O2/9RVHD16NEVFRSQmJqoditCHbrnlllavX3jhBf75z39y9OhRp+mnHN30sLupM1Xg6xKG5CUx1HcKOo2hV/XKJLQomFu9F+M1tlcJOEG4nkiWdZGzd6KZmZnU11uXCLm7u3f5vLy8PDZu3Igsy0yePJklS5bYK8Rec9VrmfDNzWRpbRNmi0KojytxoV6c/K+FNJktfHGxkOe2XMDTRcf0oYFE+XX978JZuLu78+STT6odhqCi7vZXTU1NNDV9u+ymuto5lv19/PHHXL58mbVr1zJ06FBVYtBoJIa2k2yPDfZgX1oJQ4KsszTiw7zbvc53E23NXr57HBfyqrl3SnSbnzubxsZG8vPziY6ORqsVNSIHAmcfPzU2NpKcnIxOp8NiseDi0vUbu02bNpGamorBYODRRx/F19fXfoH2kofeDw+sS8JrjKV46P3QSFoSAxYT5zsDjaTjYMFb1JsrCfcYiVaj69JGAM5m6tSpTJ06Ve0wBBVZLBY2bdpEXV1dh/8XnHXs1BGz2cy+ffuor69n9uzZeHu3P27pLoPWDYPWreW1m679+q1dFeQaTXHjtVbvDfYej5vOdnELA5tIlvVAVzpRR+pAa2pqePPNNwG46aabGDduXJfPzcrKQpat02bT0tIcOlnWLL2klqV/PYDZorDp+1MZN8gPN4MWN4OWOycNYv7IYDwMOjxcxH9/of/rSn/14osv8vzzz/dxZL1z+vRpkpOTsVgsZGVltZssUxSFyspKPD090evbTkjZy//cFM9T84bh6975Eu/Fo0L53c7UVu95uWhZGB/Kwvj+c0P6+uuvU1xczNixY1m+fLna4Qh9zBlvQnfv3s3JkycJDg7mnnvuwcur6zd4165Zb+KMRiN5eXkOnSxrdr7sS3JqLxDkOpjJoauRJAlXnfWBwJyIB2my1OGq7f1NriA4mgsXLjB16lQaGxvx9PRky5YtxMfHt3u8M46dOnP8+HEOHjyIJEnU1dVxxx13qB1ShwZ5J7ZKlklocdf5qheQ0O+ImmXdcOHCBTw9PXFxceH73/9+h53oiy++iI+PT8uvqKioNo/rCy4uLnh7e6PX64mOjkaj6fo/e3x8PN7e3kiSxLRp0+wYpe3kVjTQZJaxKAoZ1xX6bxbs5SoSZUK/153+6rnnnqOqqqrlV05OTh9H2z1NTU1s3boVi8XCsGHDOuybPvvsM/7617/y17/+lbq6G/sDe5IkqUuJMgB/DwPfXeR++0T1fm7YS/OmI2LzkYGlO/0RONYYKjg4GICwsLBuJcoApk+fDkBQUBCxsbGdHO0Yqo0lAC1LLq+nkbS46bwdtiSHIPRGXFwcZ8+e5dixYzz66KOsW7eO5OTkdo93trFTdymK0vlBKgt1H8qEoFV46gIwaNwZF3Sz6J8Em5IUZ/hOcBBGo5Hs7GyqqqrYvHkzr776Kvv27WtzwNfWU9GoqCiqqqpsOqW1qywWC7Is92hmhaIoWCwWdDrnSDApisKbRzKpbTSzKD6EEB+3dpc49YQsKzz/+SX2XynlmUXDuTkxvMvnGo1Gzp8/T1hYGBERETaLyR6qq6vx8fFR7f+s0Dvd6a++y9H/7RVFYcuWLRQWFnLHHXfg799+La9f/vKXLbNj16xZ06U/vxpSCqtZ8pcDLa+1Eqwca6111p+UlZWRnp7OqFGjulUSwNH/Twod625/5GhjqKamJgwGQ49uwkwmEzqdzmlu4GqMZeTUnifINQY3vS8eOh8kyXbP1iubCjlXugM3nRdjg27uVr2inJwciouLSUxM7POZwt0h+qv+YcGCBcTGxvKvf/2rS8f3h3/35mWYdXV1zJkzx2n/HI6gvr6etLQ0hgwZ0u0HLfbSH/6P9jXnyH44CIPB0LLUZ/z48Zw4cYK//OUvbXaiLi4u3aprYW9arbbH9WEkSXKaRBlY4705MZw7XznK73ddQauR+O2qRFaP71pB3s4kF1bz5pEsAJ7/PLlbybLdu3dz/PhxtFotzzzzDG5ubp2fJAg90J3+ytlIksSqVau6dGxiYiJnz57F09OT6GjHrfs1ONCDCF83CiobkAGLAnPjgtQOy+YCAgIICAhQOwyhj3W3P3K0MVRvYnHkpE5bvAwBuOt8OFa8GQBvQwhTQ25Hb6Mi/mmVh6kxlVBjKqGg7gqDvBK6dF5tbS1vvPEGsixTUVHBggULbBKPILRHluVWSfuBQKfTMX/+fLXD6Dbr3B+F5PK91JrLGe0/Hw+9X4+uVdKQQV7tZSI84wlyusDL+AABAABJREFUi+lxTO+//z45OTkEBQXx2GOP9fg6grqcJwPigAZiJ+os/ro7jfQS65Iri6zw7MfnWTI6FE8bLL+M9HXD101PZYOJMVG+3Tq3Oemo0Wi6tRxWEHproPZXy5cvZ+bMmXh5eTn0TauLTsubD0xi6V/3I1sU5gwP6lYiXhCcyUDtj5xBo7mWi+W7W15XG4u5Vn2cEX6zbHJ9X5cwihquISHhbej6A4HmcZMsy071AFdwDs899xxLly5l0KBB1NTU8O6777J3716+/PJLtUMTOpFfl8rZkm34uIRQ0ZQPwLWq4yQGLu72tSyymRNFW5CxkF+XwuJBT6HV9Ky/aV68JxbxOTfx06aLRCfqXIprmpCv65zMskJVg8kmyTJfdwO7np5NWnENE6LbX/7Vlnnz5hEREUFISIhDPTUX+hfRX31LkqQOl2k6kiCvb/uE4pom3j6Wxd2TBjnN8i1BaIvoj5yLUW5o9VoCmiy2q/c41GcKAa6DcNG6d2vmh7u7O4888gilpaXExcXZLB5BACguLua+++6joKAAHx8fEhMT+fLLL1m4cKHaoQmdKKq/ioyFiqZ89JIbJqWBANee1bmUJAmNRocsW9Bqerd8fu3ataSmpqq2W7tgGyJZ1kWiE3UOm07l8Oev0hgf7YcCaL7p40aF+xDm/e0SgubEmVbTs04wyMul1Y0twMWLF/n666+JiIhgxYoVbS571Wq1DlszSeg/RH/lnHzc9Lz30BRe2H6ZMzmV/OyTi4T7uDJvRIjaoQlCj4n+yDmYLI2cKN6CWTHirvOhwVyNdWGTQqj78JbjZMWCRTF3q9bY9SRJwt+1dc3WxsZGtmzZQnl5OUuXLmXIkCFtnhsUFERQUP9bni6o77XXXlM7BKGHhvpMxiybCHKLJtJzFGbZ2LKDb3dpJC3TQ++isD6NUPdhaKRv7+UUReHy5cvU1NQwduxYDIaON3Dy9PRk/PjxPYpDcBwiWdZFohO1nZycHGpqahgxYoTNlyL+Y+818iobqKw38tJd4/jyUiGh3q48Pncomm8SY68cSOeF7ZcZHOjB1idm2GS2GVh33TOZTJSXlzN8+HBGjx5tk+sKQneJ/sp5TYjxJynKlzM5lQAYdF2vNZlTUc+GD8+i12r48+1jCPa2TY0hQegN0R/ZTlNTEykpKURGRtq89l9JYxblTbkADPedjsnSSJNcT4THCELcrTt5Gi31HMh/iwZLNYkBixnklWiTtk+fPs2VK1cA+Pzzz3nqqadscl1BEPo/L0MgE0NWtrzWabq2C3lH1/MyBN7w/vnz5/nkk08AyMrK4vbbb+9VO4JzEMkyoU/l5uayceNGAObMmcPs2bNtev0Hp8Xwx6+ucO+UaG5KCOOmhLAbjvn4tHUwmFFaR3J+NZMG22aJloeHB5WVlQDd2uVNEAThej9dPIIoP3fCfFyZMfTGAVt7XjuYwcnMChTg7WPZbFg4vNNz2lJTU8OFCxcYNmyYmMUhCA5k06ZNXLt2DYPBwIYNG2xaziHQdRDehmAssokIj3g89L43HFPRVECDpRqAvNpkmyXLfHx8Wr7u6WZUgiAI9lRWVtbydXl5uYqRCH1JVBgX+lRd3bd1L2pra1EUhby8PIxGo02uf+/UGM78zyI2LGy/nsVDM4fgqtcwebA/iZE+7R7Xnurqat5//312797dqmjj4sXfFpIU2/EKgtBTbgYt62cMZlkbyf6OjA73oblHGhXe8z7oo48+YteuXbz55ps9voYgCLZXW1sLgNFoxGQyUVNTQ0lJiU2ubdC6MSt8HXMjH2ozUQYQ4BqFjyEUraQnxntcj9rJrD7DscJNVDUVtbwXHx9PSIh1uXlgYNcfEAiCoL66ujp27drF6dOn1Q6lTYqiUNqQRYO5ptNji+qv8VXOy1wu33fDZ7IsA9bNRhYtWmTzOAXHJGaWCX1q+PDhLFiwgOrqambPns3+/fvZu3cvgwYN4oEHHuiTGG4bF8lt4yJbXhdVN6IoEOrTtSVLZ86cITU1ldTUVMaMGdOyFCIuLo6bb74ZrVYrBnuCIPS51eMjiQ3yQK/VMDqi+w8Cmrm6urb6XRAEx3Drrbdy7NgxYmNj0ev1/PGPf8RoNLJu3TpiYmLs3r5OY2Bm+L0tr2VFptZUhqfev1Vtn/YoivzNTpsK+mo3xgXdDFjrmK1Zs4bz588zduxYe4UvCIId7Ny5k/PnzwPWuoJRUT0rrm8v6dUnuFyxD73GlQVRj6KV2k9/5NReoNFSQ0b1KUb6t179FBZmfYAZHx/fbl3FvlBbW0tqaiojRozAw8NDtTgGCpEsE/qUJElMnz695bXFYgHAbDbbpb3yOiNGs9xuIuxMdgWr/3UEFPjgkSlMiOl8Sebw4cM5deoUgYGB+Pr6trwvSZIo5CgI/cCxY8c4f/4806ZNY9SoUWqH0y1jB7W/u5wsyxiNxk6TYKtWrSI9Pd3hBryCMNCFhISwfPlywFoUv3mmQ/NYypYURaHWVI6H3rfdRNjJ4i0UN6QT5BrD5NA1nV5TkjREeSZQWH+FCI8RrT4LCAhg7ty5NoldEIS+c/2YwmAw0NTURGVlJcHBwQ6xm7dFsd5jKooMCtYtftsxxHsCTZY6wr/TPwGMGjWKYcOGodfr7RRp12zbto2UlBQyMjJYvXq1qrEMBCJZJqhqzpw5xMTEtGTrbSmnvJ6Ff96Hyazw4femMD76xkRYckE1Fllp+XpCjD/19fUUFBQQExPTZu2MsLAwNmzYYPN4BUFQX1NTEzt27ACsAxJnS5a1p7a2lldffZWqqipmzJjB/Pnz2z3WYDAwYsSNA0VBEByHq6srjz76KPX19URGRnZ+QjddLN9NVs2ZDhNhlU0F1t+NBS3vVTTmo9e64alvO3GfFLiYJBa3+ZkgCM5n4cKFhIaG4u/vT0hICC+99BKlpaXccsstjBvXs+XatjTUZzKe+gC8DUFoNR2nPvxdI5kedne7n3e2A2ZfCA8PJyUlxS73zsKNRLJMUJVGo7HbVNbC6kYaTdanrlll9W0my24dG8GlfOv26Ku+WZr5+uuvU1payqRJk1i6dKldYhMEwTHp9XqCgoIoKSnpVzOrrly5QlVVFQBHjx7tMFkmCIJz8Pf3x9/fNpsUfVetsRSAGlNZu8ckBS4ju+ZsS6H/grornCr5FA1a5kY+jJvOyy6xCYLgOHQ6Xavl0811qG1Vj7q3NJKWcI/2a1n3lqIoZGdn4+bmRnBwsN3aaTZz5kymTZsmNkPpIyJZJji0S5cuYTQaGTNmTLen8k6I9uO3qxKoaTSzPCm8zWPcDTp+fWtCq/eal4Taa2morRUXF7NlyxaGDx8uljAIQi9pNBoefvhhiouLCQ0NVTscm4mKikKn02E2m4mJiUFRFIdYHiEIgn3U1NRw9uxZ4uPjW2qrdkdi4GJyai8S5t7+rroh7kMIcf/2gWfzcicZGQW5+0GrYOfOnWRmZrJ69Wq7JR4FYSB56KGHKC4uVrWuV186ceIEX3zxBZIk8dBDDxEe3vY9py2JRFnfEckywWGVlpayefNmAHx9fRk8eHC3zpckibUTB3W73fvvv5/s7Gzi4nr/FCIjI4MDBw4wdOhQpk2b1uvrtSUlJYXCwkIqKipEskwQbECv1xMREXHD+ydPnuT06dMsXryY6OhoFSLrGkVRyMjIwM/PDz8/61KooKAgHn/8cY4cOcLx48f54osvWLZsmcqRCoJgL19++SWXLl3iypUrrF+/vtvne+j9GOE3s1vnRHiMRK8x4KL1wF3X801GwFqHbceOHVRVVbF06dKWvsyWFEXh2LFjyLJMWloakydPtnkbgjDQeHl54eXV9qzS8vJyUlJSSExMxNPTs48js4+yMuvsW0VRqKio6JNkmdB3RLLMwW3evJmUlBSWLFnChAkT1A6nT3l5eeHr64vJZOrRU9Ge8vHxISEhofMDu2D79u2UlpaSkZHB6NGj8fb2tsl1rzd+/Hhqa2u7nUwUBKF7Dh48SFVVFWfOnOmzZFlWWR2XC2uYGxeEi65rTxKbn3Lq9XqeeeYZXFxcAOtDB41GA3w7uBOE/io3N5e3334bb29vHnzwwQG3u+ugQYNITk7u07GBJEmEuA+1ybWuXLnCyZMnAfD09GzZ2MCWJEli5cqV5ObmkpSUZPPrC0JfOHnyJCUlJcyaNcvhd0fcsmULubm5FBUVceutt6odjk3MnDmTpqYmPDw8RL3XfkgkyxyY2Wzm0qVLAJw7d27AJctcXFx46qmnAJx2uVB4eDilpaV4eXnh5uZmlzY8PDzEDBFB6AMLFy7k/PnzTJkypU/aq2owsfSvB6g3Wrhn8iB+tbJrSfzmnfEURUFRlFafzZs3j6ioKGJiYmwdriA4lJSUFJqamigpKSE/P3/ALAlqNmnSJCZMmNCSIHc2gYGBaLVaLBaLXQtZJyQk2OwBqSD0tZKSErZt29byWs1ay4qicOnSJZqamhgzZkybSwUHDRpEbm5um7P3HVV2djaHDx8mMTGR+Pj4Gz739PRk5cqVfR+Y0CdEssyB6XQ65syZw6VLl5g5s3tT4R1dSUkJn3zyCQaDgVWrVrU7XdfRk2QWi4WvvvqKxsZGFi1adENCbMWKFUyYMIGgoCDVtxoWBKF3Ro0a1ae7YzaZLTSYrImvsrquF8qdPHkyvr6+BAQE3DCbRq/XtznYE4T+Zty4cWRmZuLt7c2gQd0vyeCoFEXh66+/5tKlS0yZMoWJEye2e6yjJ8qab0ITEhJu6FuDgoJ48sknaWho6Ff1IwXBljw8PHB1daWxsbFPist35MyZM2zduhWAysrKNjcSWrhwIfPmzXOqmltffPEFhYWFpKend2n8pCgK+/fvp7y8nFmzZvXp6ijB9kSyzMHNnj2b2bNnqx2GzR08eJD8/HzAumRo3rx5KkfUM+np6Rw9ehSwDuy+W5dMo9H0qx31BEGwv5pGE2eyK5k02J+N903kVHYF903t+rJPjUbDyJEjOz2usbGR5ORkoqKiCAoK6k3IguBw/P39eeihh9QOw+YqKio4cOAAYL2JGzt2LDqdcw7nd+zYQUFBAenp6W0+iPDx8cHHp3e1zwShP3N3d+fJJ5+krq5O9Z/jtbW1gHWiQ/PXbXGmRBnAkCFDKCws7PKS9tTUVPbu3QtAdXU169ats2N0gr05509Xweld36Gr/SSkN0JCQnBzc8NoNHaaFKupqaGwsJCYmBgxy0wQOqAoCpWVlXh7ezvEoOry5ctcvnyZpKQkYmNjOzzWYrFw6dIlIiMje7yz2n0bj3Mmp5KbEsJ46a5xzB1hnz7yo48+4urVq+j1ejZs2DDgajoJgjPy8PDAzc2NhoYG/Pz8HKKP7KnY2FgKCgo6vQlVFIWsrCzc3NwICQnpo+gEwTm4u7vj7u6udhhMmjSJ8vJympqamDNnjtrh2MzChQuZPn16l8vpXD+WslcJHqHviGSZoIrp06cTEhKCXq+3a+2c4vp0smrOEuM9jiA327fj7e3Nhg0bsFgsLUW029LQ0MA//vEPGhsbiY6O5v7777d5LILQX+zcuZOjR48SERHB+vXrVV2OXVdXx6ZNm1AUheTkZH760592mOw+fPgwe/bswcvLiw0bNvSozZpGMwDVjaYbPrtw4QInTpxg1qxZDB3au0LaDQ0NgLU+ptls7tW1BEHoGy4uLnzve98jOzub2NhYu/WPDUYLv9yWjFYj8d/LRuKqt31Sbv78+UydOrXTG8oDBw7w9ddfA7Bu3TpRc1EQHJCrq2u/rd3VnWRkTEwMa9eupaysjPHjx9sxKqEviGRZP2KxWNizZw/V1dXMmTPHoddIS5LEsGHD7N7OxfLd1JsrqTNXMifiQbu0odPpOl0CUV1dTWNjIwAFBQV2iUMQ+oucnBzA+r2iKIqqyTKNRoNGo8FisaDVajuNxdfXF6DHs8oA3nhgInuvlLB01I11er766iuqq6vZt29fr5Nlt956K8ePH2fIkCH9Zgt3Qeip7Oxsjh49SlRUFFOmTHHomqm23LW7PV+lFPHu8WwApg8NZEkb/ZEtdOUm9PpxU/MMfUEQOnb48GF2795NZGQk99xzj1jV0ofErpj9h0iW9SPnzp3j8OHDLWvFxRppCPcYwbWqY4R7qNtpBQcHM2nSJNLS0pg1a5aqsQiCo1u2bBlHjhxhxIgRqheodnNz47777iMlJYXRo0d3mhhPSEhgyJAhvZp6H+nnzj2T265RNnnyZI4ePdrl3ZEPHz7MqVOnmDNnzg031wEBAX26c1ZWVhYXL15k2rRp+Pn59Vm7gtAVH374IXV1dVy+fJmIiIh+tSlAT4yN8iXIywWtJDEm0lfVWGbNmkV5eTkeHh4kJSWpGosgOIt9+/YhyzLZ2dlkZGQwfPhwVeIoLi5m27ZtWCwWFi9eLGo5C05FJMv6keufGBgMBhUj6RlZltm1axfXrl0jLi6OefPm9frJ7gi/mcT5zujRdSyyCYtiwaDtfR0fSZJYunSpqls6C4KzCA8P57bbbmv384qKCmpra4mMjOyT2R+DBg3q1o2zh4eH3WKZNm3aDRuJdGTv3r2YTCYOHDjQ4UwUWZY5f/48iqKQlJRklyTltm3bKCkpQVEUbr75ZptfXxB6w2AwUFdXB+CUMzDy8vLYsWMHGo2GpUuX9noHyUg/d44/Z93Nrif9bHF1I4GeLmg0ve+jw8LCePTRR3t9HUEYSGJiYrhy5QoGg4GQkBAaGhqoqKggNDS0Tx9EfvTRRy0/+99//31+9KMfOfTMXUG4nkiW9SOjR4+msbGRqqoqpk6dqnY43Xb+/PmWnSVLSkoIDQ0laIg7eskFP9fwHl+3Jx2y0dLA3rzXMMlNTA29A3/XiB63LwiC7eTn5/Paa68hyzJTpkxh8eLFaofk0CZNmsTJkyeZOHFih8cdP36cL7/8ErDWMutOQq6rJkyYwIkTJxg9erTNry0IvXXXXXdx6tQpoqKiCAsLUzucbvvggw9adqDbtGkTDzzwAOnp6cTFxXVYU7UjPb2hfenrq/xuZypz44J4/f5JPbqGIAi9c/vtt5OdnU1gYCCKovC3v/2NhoYG4uLiuOOOO/osjvr6ehRFAay7cKtdXsMeKioqkGXZoUsgCT0jkmX9iCRJnd4QlZaWUlVVRUxMjMPtoFRfX48kSS0daqUpj4yicwDMi3wEd13fbR/eaKnFKFuLX9eaylolyxrNtWTWnCHEPRY/l46TePX19Zw6dYqhQ4c65eBbEBxNTk4OsiwDkJ6ezqVLl0hLSyMxMZEhQ4aoHJ3jWbBgAQsWLOj0uPr6+ja/tqVJkyYxaZK4cRYcU2BgYIfJd7PZTGZmJv7+/r2qSWgvDQ0NLeOnhoYGPvzwQ3Jychg7dizLly/v01gu5FW1+v16n57NI7+qkfXTB2PQdTy75cqVK1RUVDBx4kTVl+QLgrPRarUtO80mJye3bOpz5cqVPk1YLViwgM8++wxZlpk/fz5NTU1kZGQQGxvb40S+I6msrOTvf/87iqLw6KOPEhQUpHZIgg2JZNkAkpeXx8aNG5FlmYSEBFatWqV2SK0kJSVx6tQpysvLCQoKYviQkRwvv4BW0qOT+nZZqbchiDGBy2i01BLpOarVZymVB8itvUhu7UUWRHW8LGD//v0cO3aM06dP84Mf/MCeIQvCgBAfH8+JEyeoqqpi7NixbN68GYCLFy/y4x//uM8GXkeOHGHfvn14e3tz++23ExgY2Cft2su0adNanv5Onz5d7XAEweFs2rSJK1euoNVqeeSRRwgODlY7pFYWLFjAjh07kCSJBQsWkJ6eDlh37e5r/3NzPEOCPFg4MqTV+zkV9fzgg7MABHm6sHp8ZLvXqK+v57333gOsmwDYe0MDQejPYmJi8PHxoaqqijFjxiDLcp9NmkhKSmLEiBHIsoybmxvvvvsuaWlpjBo1itWrV/dJDPbW/KBC6H9EsmwAuX5GRkZGhsrR3MjDw4PHH3+c2tpaPD090Wg0LPD4Phq06DupG6YoCjWmUtx03ug1trlZ/m6SrJm/SwS5tRcJcO28htGgQYM4ceIEsbGxNolJELrixRdf5OOPPyYlJQU3NzemTZvGb3/7W+Li4tQOrde8vLx44oknUBSFsrKylqWDsixTV1fXJ8myqqoqdu7cCVhn6+7atYs777zT7u3ak6urq6gjJggdyMzMBKw7j+fl5Tlcsmzy5MkkJiYiSRKurq6MGTOG+fPnt+zQ25Gy2iaqGkwMDvSwyWyTCF83frL4xo2VAj1cGBzgTlFNE/HhHSfxXFxcCAsLo7y8vNf11wShM/153ATWhPMTTzxBfn4+H3/8MS+88AKzZ89m9uzZfdL+9WOz5rqu9qzv2pd8fX154oknkGW5Tx6cpqen8+mnnxIQEMDatWv7xew8RybmNHfRiy++yMSJE/Hy8iI4OJiVK1eSmpqqdljdMmrUKHx9fZEkiZkzZ6odTps0Gg3e3t4t0+1dtB6dJsoATpV8yv78N9iT+woN5hqbxKIoCo3m2hueFgzySmRp9NOMDbqp02vEx8fzs5/9TNyECn1q3759PP744xw9epRdu3ZhMplYtGhRS/Hq/kCSJAIDA1uWniuKwnvvvafK0z3xRFEQ2tcfxk8AM2fObOl3HPUG2s3NDVdX65hJo9Hg5+fXafLrbE4l0367h3l/3Mefvrpis1jqmsxUNZhax2fQsnvDHM7+zyLiwzpOlmm1Wh5++GF++tOfimVNgt0NhHGTTqcjNTWV6upqFEVp2QCor91yyy089thjLFmypM/bthd/f/8+W2Gwf/9+qqurycjI4MoV2/XZQtvEzLIuau5EJ06ciNls5r/+679YtGgRycnJTpMZ9/Ly4qmnnurTqbd9QVYsFNanAWCSGyhrzCLSs/cFpM+UfE5+fQp+LhFMC72z1YBTK3X9W8ceNQGamprYtWsXsiyzcOFC3NzcbN6G4Lx27NjR6vUbb7xBcHAwp06dYtasWSpFZR96vb6l1mFpaSlNTU0tN4v24uPjw7x589i3bx9eXl5dqgkmCANVfxg/AcyYMYOpU6ei0Wj6VXHqncmFGM3WVQcfnsxlw8LeJwIv5lWx+l+HMVkUXrtvAnPivp2Fp9FIGLq4Q6a9/p5TUlI4d+4co0ePZtSotlcRCANLT8ZNTU1NNDU1tbyurq62a4y24Ofn11KvzMPDQ5X7QY1GIxLgvTBkyBCysrLQ6/WEh/d8Azyha0SyrIu624k6agcqSVKfd4z2LiKpkbQEuw2huCEdvcalS8sjO6MoCvn11iffFU15NFnqcNV59vq6tnL06FFOnToFWKdWi5t1oSNVVdYiy+0VpXbU/qorEhISOHHiBCaTifj4eLsnyprNnDmzSzN0G821mOQmvAyOu0NScXExnp6euLu7qx2K0A/1p5tQNW4s7T2Gmj8ihFcOpGOyKKwYY5sbr69Ti2k0WRNwO5OLWiXL1GaxWNi8eTMWi4XU1FSGDh0qljEJN+hs3ATWWbPPP/98X4VkE+PHj0eWZcrKynq8cYZiMqEUFiKFhSHpRCqhr82cOZO4uDg8PDzw9HSce9P+SvwP76HOOlFn6ECbmpo4fvw4Go2GSZMmodfrbd7GvuyveXbfM8yLXsgLs357w+dlDaX4uwb0eiA4IfhWqo3FuOt8MGh7P8tKkiRivSeSXn2ScI8RuGgd6+n39Z2jl5eXipEIjk6WZX74wx8yffp0Ro9ue8alM/RX7QkNDeXpp5+mtrbW4Yrsm+Qm9ua9hlkxMiXkdgLdotUO6QYpKSl88MEHeHp68vTTT4sd5wS76y83oRkZGVy9epW4uDgGDer9Q7rvUmQZy9bPoKIC7U03I31nJoZiNoMsIxl6twHS+Gg/Dv5kHuV1RkaE2mY8cUtiOO8ez6bBZOH2CVE2uaatSJKEm5sbtbW1uLq6ohM3+8J3dGXcBPDcc8+xYcOGltfV1dVERTnO//fmEhHX32NJktTrXakte7+GzEyk2Fi08+b36lpC90mSREhISOcHCjYhfkL0QFc6UUfvQAE+++wzLl++3FIo2x5bi58sPI5JNnE47wAAOdXZ1JvrifMfwRsXXuPvp//MiqGr+J/pvRsUayQNvi62LQA70n82I/37pvBld40bNw43NzdkWRZLCIQOPf7441y8eJGDBw+2e4wz9FcdcXNzc8ylyIqCjHV2haxYVA6mbRaLpeX33tRek2WZvXv3UlZWxty5cx0ucSk4hv5yE1pUVMRbb70FWGd6P/HEE/j5+dm2EZMJiosBUIqLwN/fOpsjKAgUBcuHH4DJhHbVbUhdKOLfkRBvV0K8bTcrNybQgyPPOuZNtEajYf369Vy5coWhQ4f2q7Ikgm10ZdwE1qL1jjorsampiddee43q6mrWrVtHWFiYza4tSRIKgNT2wzXFYkES31dCPyGSZT3QlU7UkTvQZsXFxS03RyUlJXZp44GEh3DRujA5fCoFtfms+WQFZsXMy4teI7cmB4Ds6iy7tN2fSZJEfHy82mEIDu6JJ57g888/Z//+/URGRrZ7nDP0VwD19fXs2rULX19fZs2a5fB1g/RaV2aH34/RUo+fa4Ta4bQpPj6eBx98EB8fn17dNKalpXHggPWhSGNjI/fee6+tQhT6kf5wEwpQXl7eMn5SFIXKykqbJ8skFxc08xegVJQjDY9DPnIY5fJlCAmxzuZobLQe2NAAvUyWDTS+vr69nl0j9E9dHTc5urKyspZ7u4yMDJsmyzRz5sKoURAcglJVheXrPUh+/mhmzULetxfl6lU0c+ehiY21WZuCoBaRLOum/tKJAsyePZstW7bYdXdMf7cAnhj/QwBya3KwfDO7wiSb+OGEHzEmeCxTwqfZpW1BGKgUReHJJ59ky5Yt7N27l8GDB6sdkk2cPn2as2fPAjBixAi7TEMvrivC3y0AncY2Px499H546G0848SGJEmyyYyd65eGe3t3vMudMDD1p/HT0KFDiYiIIC8vj5iYGLsswwTQDBkCDLG++GYWKBYLkqcn2luWoxiNSDa8CRaEgaq/jZvCwsKYNWsW1dXVjB071qbXlnQ6CLPWN5QzMqCkBKWkBMaPRyksBEWxvhbJMqEfEMmyLupvnSjA6NGjW7Y/t0e9su+K9IrirZs/oNZUy4TQiQDcPHSF3dsVhIHm8ccf59133+XTTz/Fy8uLwsJCwLqLo0MuV+yiwYMHYzAY8PHxsf2SJ2Bz6of85ugvGR86kX8t3khhXSG7MnYwL3oBEV7Wm/uUsssU1uUzO2qew89s60sRERGsW7eO8vJyEhIS1A5HcCD9cfyk1+tZv349jY2NuLq69klfoJk2HWVQNFKoteSEFBqK6IEEwTb627hJkiTmzp1r/3aGDoW8PCR/P/DwQLtoMUpeLlLcCLu3LQh9QVJ6U6RkAHnsscdaOtHmBBN0vROtrq7Gx8eHqqoq8dTdRgrqUsmtTSbObzreBsfZaam/EP9nnVd7N26vv/46999/f6fnO/K/fVsFa23lzyd+z9vJbxLsHsL2NV/x6JcPcaLwGAlBiby+7B1qjbUs/GAWJtnEb+f8kfnRC20eQ7NaUzklDRkoikyA6yB8XAZ2MVdH/j8pdKy34ycQ//62VtNo4hdbLxHh68bTC4aLxL+Nif+vzqe34yYQ/+6OIqe8nop6I1F+7vh59G4DlP5G/B/tPjGzrIv++c9/AjBnzpxW73enExVs63LFPurNVRi0biQFLgHgYtlX5NReZHzQcoLdh3TpOqUNWeTVXSbANYpIT1EsX3B+/fkZiD1v6h4Z8xiDfKIZFzIBgBifwZwoPEaMj7UvMWgNBLgFUlxfTIi7fZJXFtnMudIvyK9P+eYdCVAIcB3E+KDlNtntt69VVlaSmZlJfHw8hl7u3Cc4HzF+cjx7Uor56HQeAHdOGkSYjxtXi2tZ86/DDA/x4r2HpqDRdN7X1hvNvPT1VeqaLDw6J9ammwQIQl/qz+OmnlCqq8FsRupg12JHczankl9svcTZnEoAtBqJWxLD+MUto/B1F2MPoWdEsqyLRCfqeIb6TCWn9jyDPBNb3itpyMSimKhoyu9SsqzRXMuxos0oKOTUXsBN50OAq3PXUhEEoWfc9e6sGr6m5fVPJv8X94xaR5intTaHQWvgo1u30mhuxMfFxy4xXCjbRX596nXvWH/2lDfmcLL4E6aG3uF0s0DeeustysvLyc3N5eabb1Y7HKGPifGT45k1LIg5w4OI9HMj9JsEV2pRDZX1Jk5lVdBklnEzdL7hx//tSOXNo5lIwOXCaj54ZKqdIxcEwd6UhgYsmz4EWUZ76yokJ9jd+mJ+FWv/fQSTRW55zyIrbD1XQHJBNZ8+NqNLfZogfJdIlgk9UlpayhdffMHIkSOZMGGCKjEM8kpgkFfr2jgTgldS0pjFIM+Oa+ZUG4vJr0tBQovCtx1rSUMm/i4RTnczKgiC7UmS1FKrrJmL1gUXrX126Wsw15Bbd4nmBNn1FBTKm3KpbCrAzzXcLu3bi6enJ+Xl5a02ARCEgUw+fRq5pBjtzFlI7u593r6fh4E3Hmi9G+SSUaG8uCqB6ACPDm8qTRaZd45lUd1g4uDVEhTF2mOlFtVQUWcUy54EwdlJEmg0oCjW353AH3amYpYV5O8MnyyKwpWiWj45m8edk+yzEYvQv4lkWT9ksVjIzMwkNDQUDw8Pu7Rx7tw50tPTKSgoUC1Z1hYvQyBehm+egDQ1QRtbz1tkE4cL3sOsGG/47GrVEZostSQGLO4XCbPy8nLOnTtHQkICgU7wZEgQBqz0dCo8ymkrUdZMQqK0McvpkmX33nsvZWVlBAeL2pKC4ysvL6euro7IyEi7jAMUiwX51Enr15kZSPGOUf5Bq5G4Y+I3N5OKAiYTtLFs+t8H0vndl6k3vF9Zb2LOH77mnfVTGB1hn5m3fUlRFM6cOYMsy4wfP75fjAkFoSskV1e0a++w7rzr5aV2OO0zGuGrr6ifMIm9V6yJ+7ZIEmw9ly+SZUKPOEe6WOiWr776irfffpvXXnvNbssfxo4dy/Dhw1mwYIFdrt9r5eXwq1/ByZM3fFTZVNhmoqxZTu0FsmvP2zO6PrN161b279/PJ598onYogiC0p7QU/vIXXLfv7fRQyQn3v9PpdISEhIibTcHh1dTU8I9//IONGzdy8eJFu7QhabVoJk5CGjwYKcZBdwbduhX++Ecwm1u9XW80cya7st3TahrNrP/PiVZLoZxVTk4OW7duZdu2bWRkZKgdjiD0Kcnd3bETZWC9x3v/fSy7vmo3UQbW3H9Nk7n9AwShAyJZ1g8ZjcZWv9uDv78/d955J+PGjevwOEVRaDQ32C2O77bVYK5GViywfz+cPg3bt7ca7JU15nCk6P1Or5VRfWOS7XoN5houl++jrDG313HbU2SkdQlZVFSUypEIgtCur7+GtDS8D13CtaSm3cMUFILcHPTmWhD6AYvFgixbEz32HENpxoxBu2Bhp0swFbMZRe6bxFN1o4nyOqP1YeOXX1rHUKdPtzrmgTdO8NXlonavIStQVN3E7g6OAdhyJpe/7k6j0WSxSez24Ovri5ubGy4uLvg7UZFzQRgQjEbYsQOKi/E4sI/h2sZ2D9VqJMZE+fZdbEK/IpZh9kOLFi0iMjKS6OhoVZ/kK4rCk7u+x7GCo/xs2vOsGHar3dqSFZljhR9S1pSDd42e6TsvI3u7YTl3DJdTp5AmT6a8MZfcmktdul6tqRxFUdr9+0utOEBu3SVyai+waNATtvyj2NT8+fOZPn06rq5ihypBuJ6iKBQUFBAUFIRer1cvkNJS2LMHwsPRlZUx/Ewo5xe1daBEkGs0Pi722YVTEARrguSBBx6gurqa+Ph4VWOR8/ORv9gOXl5oV92GpLPfkP3r1GIeeeskZovCRt88ZuXlU9xgxvOTrXiNG0eVSWF/Wgmnsso7vZZOI3G5sIYlo8Pa/Dynop6nPzwHQICngbsnR9v0z2Ir3t7ebNiwAbDOjhUE4VuK0Yh88gSSqxvS2LF9f7958iSkpEBiIpq0NH4cUcgj9TFtFrJQFIV7pzhmP2NLiqJgNpvVHdP2Q2JmWT/k4uLC2LFjVX8SZlEsnCg8joLC8YIjrT5LLr3E6i3LWf7REo4XHO11W9XGYsqacgBwO3KGxpyrZAZWUWbMo3bru1TXF3C48D1y6i506XoadJQ1ZltnqbXB/5sdMwNcHX/GlkiUCcKNDh06xCuvvMK7777brfNsvrT966+hsBDCwyE4mKiTpQypi4LvLLcMcYtlfPAK27YtCMINoqKiGDVqlPrLhgsLQZahqgpqa1veVhQFy6GDmN/6D5Y9e1AsvZ+d9daRLMwWBe+GGso+2c7lJh2fVho4/cUhOH2aZz8+z5PvncHchUlusqJQ22gmo7Suzc8DPVyICXDHVadhdLhj1zbT6XQiUSYIbVCupqFcumStv1hc/O37VVWYN2/C/OYbyJeT7dN486wynQ7c3SEwkPl5F7l3qHWmrk4joZFAI1lnlf1xzRiGhzj4klIb+PTTT/n1r3/N8ePH1Q6lXxE/AQS70Wl0/GrWbzice5AHEh9u9dmvj/w/sqqzAIX/PfjffLFmd6/actf5oJMMSBWVBB28ii4wGq2+moZwXwJTMlDOpqCN0CMrZpQOCmh/S+Jo0YdEeMQzNuimGz4d5JVIhMdINJL4FhIEZ9Sc9OpO8uuNC6/x8tm/E+Ieyl8W/IMYn14uiWyeVRYUZN1xKiQE6cIF4s8rDF7zPUobMpGRCXAdhKfer3dtCYLgVKT4eKT6OiQfX/D5Nqmk5OaiJFtvQpVrV1EiI5CGx/WqrYRIH/akFjMp5yKxpiqkiAQaa0pxQws7dhA5ZmWXryUr8NqhDN44ksmXP5jF0ODWu+C6GbTs3jAHsyzjomt/101BEByXFBxiTVa5uLTqn+RTJ6GyEhQF+dAhpNihSG1sFNIrzbPKhgyxvg4LQ3PhAs/7lLHi+/PZciaXinoTsUGe3DExinBfN9u276AyMzMBa73FSZMmdXyw0GXiTl+wq4UxS1gYs+SG9yXJWqZaofcFq+tMFaRWHiLaawy+B48TUOWNITGWGI2E4mlBW3UNvjrAgmefIb/xGhfKv+z0mgrWJ7X15qp2j9FqxDRXQXBWM2bMICYmhpCQjpc1niw4jlkxM8I/nr+f/jMABXX5bDz/Cv9v5q97F0TzrLKEBOtrjQaCg+Hrr3GbO5eo0ITeXV8QBKclubqinTGzK0f2qp3XDmaQXlLL89NDmZyWzdCEwegi/YkJ8sbNHAGXLvFfixdz34/ncverR8ipaOzwkWOQp4GSWiMWWaG0tumGZBlYZ3toNSJRJgjOQDGbob4eydu75T0pMBDNvfdBXV3rXXO1131fS5J1XGNL188qa145o9FAYCDS7t2MnzOH8SsH5thpzZo1pKSkMGHCBLVD6VdEskzoMbNs5vtfrienJpt/L36daJ+YG465WHKBd5PfYm70vFZJs/+e+r/84tDPMFmMPDf1572KI7XiIPn1Kegr64k9mI0hKAK0WusaY0kDgwbBpUvoz14ietIktBotBXWp1JkrqDXdWH9DJ7mQFLiEiqZ8or2SehXb9QoLC7ly5Qrjx4/Hw8PDZtcVBKH7JEnqdOOLc8Vn+f7O9QD8ad7f0Wv0mGQTAB76Xn4Pf3dWWbOQELhwwZpIu/PO3rUhCILDkjMzkfd+jRQ3Au3UqTd8rsgy8ulT0NBg3T3zmxtDKTISaXQCSvo1pIhIpKFDexzD1eJafrnNOkstvjGFEZYaiBwNgIeLDlx0IElIX35J1PjxbP7+dP60O43c8noOXStFvi5rptOAWYbbxkbi5qIj0NPA5MG2KQciyzInTpzA29ubkSNH2uSagiB0jeWzz6CsFM3sOWiGD0cpL0fJyUbOz4fcXIiMQrd0KQCaiZOw1NdDbS2aCRNtX2vxu7PKmoWFWcdOe/fC6tW2bbOLFEXhrbfeIj8/n3vvvZeIiIg+bT8iIqLP2xwIRLJM6LHqpirOFlt3SrpUeqHNZNmvDv8vVyvT+CprJzMjZ+Oqs06FHREwkveXf2STOLwNQeTXpxB0IhdtQQkkfCfB5e5ufbqxYweMG0ek5ygiPUdhkU1cqTxMramcUPdh1JkruFp1FLPShE5jIN5/jk3ia7Zp0ybKy8uprq7m5ptvtum1BUGwvaqmb2eWuus9+L85f+LV8/8iwjOC74/t5cYe351V1uy62WXMnQuhob1rRxAEh6Tk5YLJhJKZAW0ly3KyUc6cAUB2dUU70bqsRpIka3KtjXO6K8jLBV93PUpZOdMyz0BgQOuZIdDywJHTpwmeNIkXb7X2WUfTy3jzSCa+7gbunxrNTX87CCgczSjnk8en9zq2612+fJkdO3YAsGHDBry8+n/9IUFwBIrRCA0N1heNDSj19Vg+/QTM5m8PKshHqauzvuftjW7pMvsE09assmbfzC5j926YM8f6dR8zm81kZmaiKAq5ubkicdVPiGSZ0CPZ1VlISPx61u/IrclpNWvMLJt44fDznCg8jo+LdR17hGcEeo2N16x/I9ZnMsENvnic+RPawOAbB3rQarDHpEnk1V7mcsU+3HTejA9ajqvOk0ZzLTWmUlw0HnYp3D948GAqKio6nc0iCIJ6Khsr+fzap3yVuZO8mpyW9/dk7eIHE55hZtTs3jfS3qyyZmJ2mSD0W4rZDGWlSIlJYDCgGdR6lzalIB/LwYPWvkGjAVlG8rPPhk0+bnq+3jCH6g82MyirDsLaqMP4nQeO1WaFp947Q3JBNU/OG9ayy9yvVo7m07P5PDmv5zPd2hMcHIyLiwve3t64uQ2M+kOCoDalrMyaGFMUNFOmII0aDSUlrRNlPr7g64Pl3Xesr0ND0SxdhsYeG2O0N6usmcqzy/R6PXfccQeFhYWMGzeuz9sX7EMky4RuO114ku99+SCSJPHqkjdZNLh1TbK92XvYeu1TAArrCvjdnD8xMWyK3epTSJKE97EUKCiG0aPbPui6wZ4ydiznynYgK2YaLbWkV58g3n8urjpPJgbfapcYAW6++WaWLVuGxtbr9wVB6JX82jz+eOL/GOwzhNSyFA7nH7zhmA9S3uV00UnevvnD3vdl7c0qa6bi7LLi4mLKy8uJi4tTfzdAQeiHLDu+gIICiIxscwaGZf8BqK6yjlliYtCOG49kx93N/Zpq8Tt1CALamFXW7LoHju81BrAvrQRFgZ9/dpHlSeH4uOm5Y+Ig7pg4yC4xBgUF8ZOf/MRa71b0S4LQJ5SSEmjebVenR9JoUIKCrLt35+dDYCCa2XOQP9r87UmFhcifbEG6bbVtv1c7mlXWzAFmlw0fPpzhw4f3ebuC/Yi7dqHbcmtyUFCQFZnc62ZeNPPUW6fHS0hoJS1JwWPxNNxY4NVmysth166OB3rQarCnk/Q0F8XVaVzsF9t3iESZIDiety6+wd7sPbx+4VX02vZnwKZVXLmhz7PIFk4VnqC0vqRrjXU2q6xZSIj1Ce7XX3ftujZgNpt59dVX+eCDDzh37lyftSsIA0rVN8u7Kyvb/tzFYE2UKSB5eNg1UQbA/v3WG9+wsPaPue6Bo5cWFMU6gnLRajBo+2Zco9FoRKJMEPqQFBsLw4bBsOHWrwFJo0G77Ca0996HduWtSIp844kVFVBTA4Ccm4v57bcxb99mnVXbU82zygZ1kpAPC7M+jNy7t+dtCcJ1xMwyoduWDrmZwrpCNJJ0w6wygMnhU/nRpGc5XXSK5UNX4u8WAFg3BHj/8jtcrbjCuJAJ3DJ0pW0GPs0DvfZmlTX7ZrAnffklk555gLTaU7jrvYn1ntj7GARBcEpH8g6xM8NaCyfALZA7RtzFvpw9bR7r6+JHiEfrWV6/P/4bNqW+j6fek09WbcfX1a/jBjubVdZMhdllGo0Gd3d3qqqq8PS04wMOQRjAtAsWIqddQTM8ru3P581HPnUKXAxoxn+7q5lSVoacnGzdwCgxEckW36NdfdgILQ8cb19YQsHcoVwurObB6YNxM4hdLQWhP5JPnIC0NIiMBL2+5X0lKwulIN/ah/n5Q3AIFBd9e6Krq/WeC5AvXICGesirRyksRIqM7H4gXZlV1swBZpcJ/YtIlgndptfqeWTMo+1+LkkSd4y8mztG3t3q/b+c/APvXX4bCYnPr33G3pw9/GHuX7uVMLPIJoxyI266b4q7dmegBy2DPd9LBUyctLLL7QqC0HcURaGwsBB3d3d8fHxsfv30ymv87tiv0WsMVBorqTJWAvCjic/y6vl/3XC8u86dqeHT+dHkZ3HVtR6opVWkAlBrqqWkvrjjZFlXZ5U16+PaZRqNhscee4zGxka8r9siXhAE25FCQtCGhLT/ubc32rlzW72n1NZi+ezTllpBlsvJaJavQBMU1K228ysb8Pcw4Kr/ZrzU1YeN0PLAUbdrJ8/8139Zb1wFQeh3FIsF+es9KBkZ1jdyc6GuDjw9kUtLkXftBMCSnIx09z1ob7oJ5epVlOJicHNFM2Jkyy6YmiFDkHNzwNMTqaeJq85qlX2XA+yMKfQfYk2Y0G1XK67w/uV3KKkv7tZ5X2VZO1cF617j+3P2cijvQJfPlxWZffmvszv3ZQrqrljf7MrygetdX6i2N9OBBUGwm927d/Pvf/+bv/71r2RnZ9v8+i8ceZ5TRSc5WnCYBpN1lydPvScJwUnUm+tbHett8ObvC//Fb+f+kSD34Buu9cyknzI9YgaPjn2SoX6d1KlonlXW1Vli188uKyzs2jm9ZDAYRKJMEOxEkWXk1FTkb3ZM6/J5+fmtxyyyjLxnd7fa/uh0LtN+u4flLx20tt3dh43QerMkQRD6JSUr69tEGVjHLB4e1s9yrytFIcson29F0unQjBiBdtYstBMnIV23W60mLg7tuvvRrr0DqbNZYW3pzqyylkavm11WWtr9NgXhOiJZJnRLrbGG+7ffw++P/4bHdz3SrXMjPCORaD2LrKqpqtXrqxVp/PvsP7lWcfWG8xXFQqO5FoB6c2XPBnogBnuC4OCa62XJssy1a9dsfn0Jaz0ggBjvGDav/IzPbttBqEco942+H4307Y/GWmMtz3z9A8xy28n1kQGj+MuCf7I+8ZGOZ8l2d1ZZMxVqlwmCYB/ymdPI+/ch79qJkpXV5fMkrzaWXH7ngZ8iy8jJycjJySjyjXWEssqsDwJyKxqQFbr/sBHEA0dBcFAmk4njx49z6dKlbiXi2/SdpJRm3vxvxzce3+mLjMbOr1dVhWXb58hpad2Ppau1yr7LjrXL5Db6V6H/EskyoVuOFxyjydwI3JjoalZvqueHux9n2aYFfJz6Ycv7/zv9l8T4WLcll5CYFDaFBTGLWj5XFIXvf/kg/z73D76/c/0Nnb1Wo2dq6B0kBCwi2msshTs2Up11AXNIQPf+EGKwJwgOzfjN4Euj0TBq1CibX/9n037BpPApTI+YyTOTfkqMz2C8XazLPRfGLOHz23ayPtH6MEBGprKxApOlCwPCjnR3VlkzFWaXCYJge0pjI8r138ONjW0eJ2ekY37vXcyfb0VusM58lcLC0Ywfbx27AOh0aGbMbH39lBTkQweRDx1ESU294bqPzYnlVytH8+EjU0lLyeLEqx+SJbl272EjiAeOguCAtm7dyhdffMHmzZs5e/Zsr66lCQ9HM3MW0tChaJYsRfPNrDIATWwsXFceQxo/AaW6GvNHmzG/8zZyG6sB5Cup1l0yz3Uzrp7MKmsJ1D6zyz766CN+9atfcezYMZtdU3BsouCA0GWfpW3h/x3+OQAh7qG8OPt3bR7384P/xcHc/QD8+ugvGeQdw4SwSUR5D2LTyk+RFbnVzI3WrANBDW3P0PBzDcfPNZxrGV+i3fExRg8zFY1XiNYntXl8namSamMxfi7huOquexpy/WBv0qR2/8xm2UhpQxYBrlHotR131PX19Rw4cIDQ0FCSktqORxCEzk2dOpXTp0+zbNkygoNvXPrYWzE+g/n7whtrkzUL9gjh3lH3c7boNCnlKTyc9H3c9O49b7Cns8qa9XHtMkEQbEuxWLBs+RhqrbPjpbg4pOE3LttWamuRd++2bjdZW4v82ado1t4BgGbceKSx46zntzWL9fq32vjcVa/lnsnR1DWZ+ekzf+CWtAyOBESzPLyOmECPG443W2QOXi3FRa9lymD/b9u8/oHjuHEd1i67mFdFk1lmfHQnG58Aly9fJjMzk+nTp4ul4ILQDRaLpdUs/PLy8l5fUzNiBIwYccP7kkaDdtVtKDk5SJ6eSEFBWA4csO6AqSjIRw6j+c4sMM2o0chGI9LQYd0Loru1yr7LDrXLLl++jKIopKSkMHnyZJtcU3BsIlkmdNmpopNISCgo1JvrSAwe0+ZxZ4tOtXp9KO8AE8K+TUi1lyiTJIl/L3mdr7N3Mz96QYdLmjQHDuFSVE3N8BA0cttPZwFKGjIxynUoyITrruv0uzjYSy7/muza84S4DWViyK3ttgNw6NAhjh49CkBMTIxdCpMLwkAwZ84c5syZo2oMngYv/rXkddtc7Ouvrcud4uPBZOrZNfz9+3RnTEEQbKiuriVRBiAFBCK1kThX8vOsibLrzlOMRiSDwXpeB+MiKW4EGkkCpDYTcc1qCoqYmHaaClcvZI2Gqoa2+6Ts8nrO5lQCMDzYkwBPl28/7MIDx9yKem556SAS8PmTM4kPaz8B1tTUxKZNm1AUBaPRyIoVK9o9VhCE1vLz86mvty6zDgwMZFIHkwBsQdLpkAYP/va1h4d1NZAktdQ2a3W8ry/aufO610jzrLKGBqiqsv7qCa3Wpjtj3nLLLVy6dImZM2d2frDQL4hkWRft37+f3/3ud5w6dYqCggK2bNnCypUr1Q4LWZY5evQoNTU1TJs2Da/riira2rIhN/Nl+nbMipnbht/e7nE/mPAMvzv2Ykuh7HeT32J94iN4GjqPbYhvLEN8Yzs+qLaW8OOFVJvB61op3oZg0F9q89AgUx11pgq8DTrQfecYkwmuXIGLF2HMmDbPd9FaZ6O56jqPPfSbG1gvLy/c3Nw6PV4Q7MVR+6v+akf6NjalvM9TE54h6bsPESwWOHEC3Nzg+oK5PeHqCufPi2SZ4HQctU8qLCzk1KlTREVFkZiYaL+GvLyssxwKCsDFBamd+jvSoGjrsuvibzZQsliQz51FO7Hzm19Jo0EaMbLT40KTzzHJ0EBWbQORGiMjK5qgOu+G4yLMFibVV2DQavDNMILmO4m6ujrrTWg7N+buBh2eLjqMZhkv145vN/R6Pf7+/pSVlRHWnRpqgmBDjtpPdSYsLIwRI0ZgNBpZs2YNrj0ppN8LUlISGq0GpbERTYKN+tHqamvCLCqqd9cJDgaDwVr71QbJsqSkJLF6aIARybIuqqurIykpiQcffJBVq1apHU6L06dPs2vXLiRJoqioiPvuu89ubU0On8rna3ZRa6wh2jum3eNuGbqS/Tl72Zf9NTIyFsVCo6UJT7qWyKsz1XHv1rWYZBNv3fwBvq6+rQ8wGHBZeTuBi28BOn7S6vHNr3ZJEoSHt/vxcN9pDPJKxFXbRnHd70hISCA6Oho3Nzf0en2nxwuCvThqf9VfvX3pTVLKL7P16ic3Jsu0WnjqqVazSnqlu0Vu25GWlkZ+fj6TJ0/u84G1MPA4Yp+kKApvvfUWDQ0NnDx5Ej8/P6J6e2PWDkmS0C67CSorwdOzZabYDce5uqKdOQvLR5ubT4TGpm61JScnW5dCTZyEpq0E4PDhjPzvpxkuK2i/mwC7jgswrbPG/NpfXunvYeDIs/OxyAo+bh2PiTQaDd///vepq6sTs/IF1ThiP9UVOp2OtWvXqta+pNUiJY2x7UUDA+GFF8AWxfQlqcPl4oLQEfE/p4uWLl3K0qVL1Q7jBk1N1kGUoigtX9tToFsggW6dZ+bXJz7CmaLTVDVVcn/C+pZzFEUhqzoDP9cAfFzaHhCVNZSSXZMFSBTVF7aZLGPBgnaqmtmWJEm4dWFWWTNRZ0NwBN3tr5qamlr1H9XV1fYIq996asIGPr/6GXfHt/OwIjKybwPqRF1dHe+99x6KotDY2MjixYvVDkno5xxxDKUoCiaTqWUzIXuPoSSNxrqcujN+fkhxI1BSU8DdvVXCS2lqgvp68PVt90GhUlgIsoxcUNB2smzoUBg6lG6W9e8RT5eu32bodDqRKBNUJcZODkar7f4GJIJgYyJZZid91YFOnDiRsrIyqqqqWLhwoV3a6IkRAfHsXLsXo8WIq+7bWQsvHv0lH1/ZhKvWldeWvUWc/43FIwd5R/PHeX/DJJva/FwQBNt68cUXef7559UOw2lNCpvCpLApaofRZQaDATc3N+rr6/Hvys27IPSxvhhDaTQaVq9ezeHDhxk0aBCxsZ2UgOgjkiShnTULZdo00GpbkmJKRQWWTz8Bkwlp6NB2awBppkxBCQ5uVVNIEATbc4Sxk6IonDx5kvLycmbMmIFHGzXDBEHoOZEss5O+6EAPHTrE4cOHWbJkCQkJCXZtqyc0kqZVogysO2oCNFma2J25s91k2KyoOfYOTxCEbzz33HNs2LCh5XV1dbXdliMJ6tPr9TzxxBNUV1cTEhKidjiCcAN7j6Fqamp46623cHV15d5773XI0gnSd5YNKVmZLRuEKFevosye0+YmAZK7O9Lo0X0RoiAMaI4wdsrIyGD79u0A1NfXc+utHW9G5ijy8vK4cuUKSUlJ4qGd4NB6sIe90BXPPfccVVVVLb9ycnJs3sbZs2epr6/nwoULNr+2vUwOn9rytTPNxBCE/szFxQVvb+9Wv4T+zc3NTSTKBIdl7zFUbm4uJSUl5OTkUFpaatNr24sUFm6tvQMQGtpmokwQhL7jCGMnw3X1D11cXDo40nHIssx//vMf9u/fz6ZNm9QORxA6JGaW2YmLi4vdO61ly5Zx9uxZpk6d2vnBDuJ3c//MsfwjhHtGEOs3VO1wBEFwECdPnuTgwYMkJiYyb143txgXBKFfsfcYatiwYUyZMgVXV9eWnawdnRQSgnb1GpSqKqSICLXDEQTBAURGRnLPPfdQUVHhVLs06vV6jEaj0yT4hIFLJMuc2ODBgxnsZDUpDFoDM6Nm9+jc6upqzGazmK4rCP3Qrl27MBqNHDhwgClTpuDu7q52SIIg9FM6nc4pN7aQfH2RfH27fZ4syxQWFhIUFOSQS04FQeg5R6m32FUajYaHHnqIzMxM4uLi1A5HEDokkmVdVFtby9WrV1teZ2RkcPbsWfz9/Rk0aJCKkQ0MRUVF/Pvf/0aWZdauXcuIEaLwvyC0xxn7q9jYWC5fvkxoaCiurq6dn+BAFEWhsLAQHx8fkeQThDY4Y5/Un3z88cdcunSJkJAQvve977W7k6YgDGSin+o7vr6+jBkzRu0wBKFTIlnWRSdPnmTu3Lktr5sLOq5bt4433nhDpagGjtLSUmRZBqCwsLBHybKysjIkSRqwM9OuXbvGpk2bGDp0KKtXr1Y7HMGOnLG/WrNmDaWlpfj7+6Nxslo8Bw4c4Ouvv8bNzY0nn3wSNzc3tUMSBIfijH1Sf1JQUABASUkJsiyj1Wq7db7ZbCY/P5/w8HB0uoF366AoCm+//TYFBQXcddddREZGqh2SYAeinxIE4bsG3k+8HpozZw6KoqgdxoA1YsQIpkyZQmNjI5MmTer2+Xl5ebz22msAPPLII05To8SWrly5QlNTE8nJyTQ0NIgb+n7MGfsrSZIICgpSO4weKSoqAqChoYHa2lrxvdUFWVlZ5ObmMmHCBFGzZABwxj6pP1m+fDlHjx5l1KhR3U6UAXz44YekpaUxcuRIbr/9djtE6NgaGhpIT08HIDk5mYiICDE7rx8S/VRriqJAURF4eiJ5eqodTrsyMzO5du0akyZNwsvLS+1whH5GJMsEp6DVantVX6Surq7lB2B9fb2twnIq06ZNo7CwkOzsbH73u9+xcuVKEhMT1Q5LEJze/Pnz0Wq1hIeHO23Cry9ZLBbeeustLBYLjY2NzJ8/X+2QBKFfi46OJjo6usfnV1dXt/p9oHF3d2fx4sXs37+fI0eOkJGRwQMPPNBqJ0JB6G+Uq1eR934NLi5o774HqQeJdnuTZZl33nkHs9lMVVUVq1atUjskoZ8RyTJhQBg2bBgrV65Eo9E43aYIzUpKSkhLS2P06NE92p7ax8eHuro6wPq0aN++fSJZJgg24O/vP6AHaMePH+fq1avMnTuXsLCwTo/XaDT4+vpSVlYmio0LghNYu3YtycnJjBo1Su1QekSWZc6ePYurqyvx8fE9uoa3tzcNDQ2AtRxIWlqa0/59CEKXNJfEkCTrLwckSRKBgYEtG5gIgq2JZJkwIEiS5FRbKn+Xoii88cYb1NfXk5qaygMPPNCj6wQGBlJeXt7ytSAIjsFisbBr1y5MJhOLFy92mhkLDQ0NfPHFF4C1n7r77rs7PaempoaqqioA9u7dy7Bhw7qUZBMEQR1+fn5Mnz5d7TB67PTp02zbtg2w1p+KiYnp9jWa691KkoSiKAO2/q0wcGhiY5F8fMDDA6mDWrJKVZX1GBXqGUqSxPr166mursbPz6/P2xf6P5EsEwQnYTAYqK+v79VN9IoVKzh8+DCKojj1wFcQbE1RFPJqcwnzCEer6fulBunp6Rw7dgyAyMhIxo4d2+cx9ISLiwuhoaEUFhZ2edZucXExZrMZ+ObvPS9PJMsEQbCb68dNPZ3NGhoayp133smVK1cYPny46LOEAUHq5MG6nJyMfOggBAaiu1WdGfY6nU4krwW7EckyoU/Umepw17mLgqg9JEkSDz74IFlZWQwbNqzH13FzcxP1gQShDf86+xKvnv8X86IX8n9z/tjn7YeFheHl5YXZbHaqLeo1Gg0PP/wwDQ0NeHh4dOmcqKgofH19qaysxM3NrVd9miD0d4osgyyrMmujv0hISMDDwwMXFxciIiJ6fJ3hw4czfPhwG0YmCM5N+aa8CwO0HrSjMJlMvP7669TU1LBu3TqxesiGxE9eJ9NcL8GZdlt7L/lt/nDit9wydCX/O/2XaofjtLy8vBg9erTaYQiCU7pSnsqbF1/jptjlTIuYccPn+bV51t9rcvs6NAA8PT15+umnARz+oUJTUxOKouDq6gpYE2ZdTZSBdTbao48+SkFBAcHBwU7180xwXoqiUFlZia+vr8N/jzVTjEYsmzdBUxPalbciiWVGPSJJErGxsWqHIQj9jmbsWBRfX6TgYLVDGdAqKiooKCgArLuNi2SZ7YhkmRPJysriP//5D2CtuaDG7IP3L7/Dmxde4wcTfsSSIcu6dE5y2UUALpSct2dogiAI7dp4/t98lbWTlLLLTLv1xmTZjyY9y7iQCUyJUG95sjPcwJeUlPDKK68gyzIPPvgg4eHhPbqOwWDo1e58gtBd77zzDteuXWPo0KFdqq1na0pDA5YvtoNej3bpsq7NFGtogOaNeSorRbJMEASHIul0SGJ2uE3l5+ezfft2oqKiWLRoUZfGhkFBQcyfP5/q6moSEhL6IMqBo/1qfYLDuXbtGrIsI8sy6enpqsSw9eonlDSU8GXG9i6f84Pxz/Do2Cf5zezfd+l4WZbJyMhomUU3EBUXF3P06NGW3SsFQeidm2KXE+EZyZoRd7T5ubeLDyuH30aoR2gfR+ZcCgoKMJlMWCwW8vPz1Q5HELrEYrFw7do14NuxVF9TSkqgrAwKC6GyskvnSD4+aBYsQDN9BlIXk8uVlZXk5eX1IlLnJssyZ86cIS0tTe1QBMFpZGZmcv78eRRFsVsbubm5fPXVV9TW1tqtjf7gyJEj5OXlcfToUSoqKrp0jiRJzJgxg2XLljnNBlHOQswscyJjx44lJSVF1Z0dfzzpOT69uoU7R97T5XMC3YNYn/hIl48/dOgQe/bsISIigoceeqgnYTo1WZZ5/fXXaWxs5Nq1azZ9Al5QUEB+fj5JSUnoRP0TYQCZGTWbmVGzbX7dgoIC9u/fz7hx4wZE7a2RI0eSm5uLxWIhMTGxR9c4efIku3fvZvbs2UyZMsXGEQrCjbRaLbNnz+bEiRNMmjQJTQc7u9mLFBGBlDQGSa+DgIAun6cZPKTLx5pMJv75z39iNBq59957GTKk6+f2F8ePH+fLL78E4OGHH+7x7NfvMpvNnD9/npCQkF7VPRMER9PY2NiycsmedUQ/+eQTysrKMJvNLFmyxC5t9AcjRowgOTmZ0NBQfHx81A5nwBN3y07Ez8+Pxx57TNUYxoSMY0zIOLu24eLi0ur3gUaSJLRa6258Pd21qS2yLPPGG29gNBqpq6tj1qxZNru2IAxUR48eJSUlhaqqqgGRLNPr9Sxb1rUl+O25cOECjY2NnDp1ismTJzvF8lPB+c2ZM4c5c+ao1r6k1aKdNMm+bUgSer0eo9Fo0/GDM7n+z908lrKFY8eO8dVXX6HT6fjpT38qHjgK/YbBYCA0NJTKykoC2kjkK4qCkpYGjY1Io0Yh9fD7KiEhgVOnTg2IsVJvjBo1ihEjRqDRaLo8Pjp48CAHDhwgMDCQO++8E09PTztHOXCInl5wOBMnTiQ2NhZfX1+1Q1GFJEk89NBD5OTk2HTXJUmS8PHxoaSkBD9R90QQbGLChAlUV1czceJEtUNxGtOnTyc3N5fS0lL27dunagJDEPoTnU7HE088QVNT04CdkTBu3Dg8PT3x8PAgJCTEZtf19/cHwNvbW5WZiYJgL827WoP1XkGRZZQL58HLG82QISj5+cj79lqPlWWkMWN61M7s2bOZPdv2M/ydWW1tLe7u7jf0Kd1J9NfW1rJ7927Autrh6NGjLFiwwKZxDmSitxccjiRJBAQE2PSJoLPx9fUlISHBprPrJEnikUceYcyYMXzyySfs2LHDZtcWhIEqKiqKdevWER8fr3YoTkOn07XUjMrOzlY5GkHoX1xdXQdsogysY524uDgiIyNtet2RI0dy33330dTUxJ/+9CdKSkpsen1BUJMkSS2zmJSsLOTjx5F3f4ViNCJdXwPLRdTDspX9+/fzhz/8gY0bN/aqVpxOp2tJtimKMmBnFduLSJYJwgCi0Wg4e/Yssixz7NgxVYocC4JaKisrKSsrUzuMAS8mJoaxY8cSHh7O3Llz1Q5HEAShSzIyMqirq6O2tpZLly6pHY4g2IUUHAx+/kgxg0GvRwoKQrt8BZrFS5BGjFQ7vH6jebO+/Px8zGZzj6/j6urK2rVriY6OxmAwcODAAbEBkw2JZZhCj5w7d46tW7cSHR3N3XffLaakOwmNRkNCQgIXLlwgMTFR/LsJA0ZBQQGvvvoqsixz1113iZoZKqipqeHatWvExcWxfPlytcMRBFUoJhOWrVuhqhLNwkVobDwDSrCfESNGcOzYsZbZa4LQH0keHuhWr279XkgIorqobS1cuJADBw4wfPjwXs8GGz58OCEhIfz5z38GoLi42Gabmwx0Ilkm9MjZs2exWCykp6dTXV09YOuLOYvi4mJSU1NJSkpi1apV3HzzzWJrYWFAKSsra5lJWVxcLJJlKnjvvfcoKChgxIgRrF27Vu1wBEEdZWVQVgqAcvUqiGSZQ5NlmdOnT+Pm5saoUaP4yU9+Ath28wBBUFtRURHJycmMGDGCsLAwtcMZECIiIrjjjjtsdj0fHx/Wrl1LVVUVCQkJNrvuQCeSZUIrR48eJTc3lyVLlrTspKEoCoqitJqFNHXqVMrLyxk8eLBD18YoLi7mrbfeIjIykttvv33A7rr2/vvvU1FRQV5eHnfccYdIlAkDzsiRI5kxYwZGo5EJEyaoHU4rFotlQNx4DfSdjoX+rbKykp07dzJs2DDGjh3b8r4iy3BdPSCCgiBqEFRWoBnp2Euatm3bRnJyMmvXrmXQoEFqh6OK5ORktm3bBkBAQAChoaEqRyQIPVdbW4uHh0er+yGLxcIbb7xBY2MjR44c4cc//rGoe+WkRowYoXYI/Y5IlgktFEVh586dKIpCdHR0y+5u77//Punp6dx7770tg6Xhw4fbdKdGe8nJyaG2tpa0tDQURRmwybKgoCAqKioIDAxUOxRB6BONjY18/vnnBAQEMHfuXLRaLfPnz1c7rBvs3buXffv2sXjxYqZMmaJ2OHZ15513UlBQYPPC24LgCM6fP8/ly5fJzMxsSZYpRYVYtm2D8HB0S5YCIGm16JYsUTPULktOTqa+vp7MzMwBmyzz8/NDo9Gg0+nw8PBQOxxB6LFTp07x+eefEx8fz5o1a1p91lwzy2Kx9KrYvKCu2tpaLBaLQ09kcTYiWSa0kCSJBQsWkJOTw8jrnnbm5uZiNpspKipyusFSUlISjY2NhIaGDuj6XM3TcsVyWWGguHbtWksBZkVRyMzMZOXKlfj7+6scWWt5eXmAtaZaf2cwGIiOjlY7DEGwi4SEBPLy8lo9SFTKK8BigeJiFSPrubVr15KZmcmkSZPUDkU1ERERPP300+h0OlxdXdUORxB6rLq6utXvzbRaLXfddRfnz59n1KhRTrf6pDm5N1AnRDTLzc3l9ddfR1EU1q5dK+oq2ohIlgmtTJs27Yb31q1bR0FBAaNHj1Yhot7R6XRMnz5d7TBUp9Fo8PPzUzsMQegzsbGxJCQkEBAQwOHDhzEajaSmpjJ16tQ+j6W6uprPP/8cHx8fli5d2ipxv3z5clJTU4mPj+/zuARBsB0/Pz/uvPPOVu9JcXFotFokJ53VPWjQIKd7SGoPzWVJBMGZzZo1i/Dw8DZndw8ePJjBgwerEFXvFBQU8MYbbxAaGsr9998/oBNmO3bsaKnNm5mZKZJlNiKSZUKngoODCQ4OVjuMDpnNZgoKCggLC0Onc57/1kajkY8//hitVsutt97qVLELgiNzdXVl1apVAAQGBpKZmUlSUpIqsZw8eZK0tDQARo0aRUxMTMtnXl5eDldDTRAE25A0GiQnKFlRVlaGJEkON/O2M5cuXeLw4cPMnj3bKUqDCIKatFptv0ugFBcXYzQaycvLQ5blAVH/tS3NfwcAHh4eLaWUhN4buOvShHYVFBTw17/+lZdffpmqqiq1w+mSd999l40bN/Lhhx+qHUq3ZGVlkZqaSnJy8oBYhiX0rZdeeomYmBhcXV2ZPHkyx48fVzskVYwaNYqbbroJd3d3VdqPjY1Fp9Ph4+Pj8A8eml24cIG///3vXLhwQe1QBMFpKIrC9u3b+d3vfsfBgwfVDqdLsrOzeemll/j73//ecrPlLA4dOkR+fj5Hjx5VOxShnxDjJueSkJDALbfcwrp16xw2UWaxWMjJycFkMtmtDYPBwNy5c4mJiWHdunVO9+DDkTlNsuz8+fO89NJLvPLKKy11aPraQOlAjx8/TkVFBUVFRZw9e1btcLqkrKys1e/OIiYmhoSEBMaMGUN4eLja4Qg2pHaf9cEHH7Bhwwb+93//l9OnT5OUlMTixYspdtLaOT1RXV3N1q1b2b9/f8vUdDVER0fz05/+lKeeekq1hF13nThxgrKyMk6cOKF2KIINqN0fwcAYQ1VVVXHixAnq6+vZs2ePUxTKrqioaNn1vLKyUu1wumX27NnExMSIchv9hNr9lBg3OS6z2cznn3/O5s2bqa+vb3lfo9Ewbtw4oqKiVIyuYzt27GDjxo189NFHdm1n1qxZrFu3jqCgILu2M9A4xZqvv/zlLzz99NN4e3uj1WqpqKggISGBN998kzFjxvRJDM0d6Msvv8zkyZP585//zOLFi0lNTXWamQJdFRMTw9mzZ5EkyWlqVaxdu5bz58/32f8HW9Hr9S1LxYT+wxH6rD/+8Y88/PDDPPDAAwC8/PLLbNu2jY0bN/Lss8/2SQxq27FjBykpKSiKQkBAAKNGjVItFmdbYj1v3jyOHj3a73foHAgcoT8aKGMoLy8v/P39KS8vZ9CgQU5RP2f06NHU1NSg0Whabe7kDOLi4vrdsrKByhH6KTFuclxpaWmcOnUKsG66oUb92Z6yWCytfheci8POLNu4cSOnT5+mqamJF154gd/85jdUVFRQVlZGeno6S5cuZebMmRw+fLhP4rm+A42Pj+fll1/G3d2djRs3tnl8U1MT1dXVrX45mqqmKl499y8ulV5s9X5SUhKPP/44Tz31VK+LPSqKQn19vd1ndYSHh7NkyRJCQ0Pt2o4gtMeR+iyj0cipU6dYsGBBy3sajYYFCxZw5MiRG453hv6qJ1xcXFpmdjjb7k5qi4mJ4Y477mhVX01wHo7UH0H/HENduXKFI0eOtLoB0mq1fO9732P9+vXce++9vW7DbDbT1NTU6+t0RKvVMmPGDKZNmzagdw0X+p4j9VPdHTeBc/RT/UV4eDhubm7odDqnmcjRbOnSpdx9992sXr1a7VCEHnDYR92///3vWwoiy7LMiRMn+Mtf/sLYsWMZM2YMv/nNb4iKiuJHP/qR3TvR5g70ueeea3mvsw70xRdf5Pnnn7drXL319qU3ef3CK3x2dQuf3baj1WeBNti5yWKx8N5773Ht2jUCAgJ44IEH8PDw6PV1BcEROVKfVVpaisViISQkpNX7ISEhpKSk3HC8M/RXPbFkyRKCgoLw8fFh2LBhaocjCH3Gkfqj/jiGMplMvP/++yiKgqenJwkJCS2fGQyGNneb666rV6/ywQcfYLFYWLx4MZMnT+71NQXBkThSP9XdcRM4fj/Vn/j4+LBhwwYURUGv16sdTrfo9XqGDh2qdhhCDznsI6Tk5GRqamo4fPgwer0ejUbD+++/z7Jly/D392fIkCFs2bKFU6dOsW3bNjIzM+0WS0cdaGFhYZvnPPfcc1RVVbX8ysnJsVt8PTU5bAr+rv4siF5kl+tnZ2dz7do1wFpL7Pz583ZpRxAcgSP1Wd3lDP1Vd50sPMFvT75AxKhwVZdfAhQVFbFnzx7Ky8tVjaMtiqJw6dIlTp8+rWpdN8G2HKk/6o9jKJ1Ox7Bhw/D19SUiIsIubezbtw+z2YyiKOzevdsubQiCmhypn+oJR++n+pLFYrH7GEKn0zldokxwfg47swzA1dWViRMnMn36dJKSkvjggw+QZZmUlBTOnj3L/v372bNnD/fddx8VFRV4eno6zBRYFxcXXFxc1A6jQxPCJrFz7T67Xd/Ly6vVax8fH7u15QiKi4upr68nOjq6pU6JxWIhMzOT0NBQMatuAHCUPiswMBCtVktRUVGr94uKitpcquwM/VV3/enE/5FanoJG0vCzab9QNZbNmzdTWlpKVlZWSy0UtV25coVt27bh5+dHVlYWYF1S4kx1QISOOUp/1BOO3idJksSdd95p1zZ8fX1bdqf09va2a1tqM5lMZGRkEB4ejqenZ8v7ZWVl1NXVERUV5RT134Tuc5R+qrvjJnD8fqqvnD17ls8//xytVsvatWsZMmSI2iEJgs04dLKs2R/+8AfmzJlDeno63//+90lKSiIqKorTp08THh5Obm4uubm5XLx4sfOL9UBPOtCBrN5Uz/GCIwzzi2Pt2rVcvHiRqKgopysc2x0FBQW88sorKIrC4sWLW4pif/LJJ1y8eBEPDw9++MMfOl2Rb6Fn1O6zDAYD48ePZ/fu3axcuRKwLnHYvXs3TzzxhF3adDR3jLybD1Le46bYWzo8rqqqitOnT+Pj48PYsWPtckMWEhJCaWnpDTNr1HTgwIEbaqw4w859Qvep3R+JMVT3FBYWUlNTw5IlS3Bzc8NoNDJr1iy1w7KrzZs3c+XKFdzd3fnhD3+IXq+npKSEl19+GVmWWbJkiViG2s+p3U+JcVPPffnll1gsFiwWC7t377Z5sqy0tJTLly+TkJCAr6+vTa8tCJ1xijv3MWPGcOrUKb7//e8zZcqUlgG9TqdrKQ4bGRlpkxoRbXG2DrTR3MCvDv+CGmMN/zPteQLd+3YL2Ud3PsSl0gu4aF34YMUWVo+wT0FDRVG4cuUKbm5uqhd7rKysbPl/ef1Sq7KyMgDq6uowGo0iWTZAqN1nAWzYsIF169YxYcIEJk2axJ///Gfq6uocZmaTvd0ydCW3DF3Z4TGyLPPGG29QVVXVshnJjBkzUBSFty+9SZOlkfsTHkKn6d337W233cb8+fMdapAXHx9Pbm4u/v7+zJw5E4vF4nS7CQtdo3Z/5GxjqIZdX1Hzt7/jvvo2PO/rfZH+7rh69SrvvPMOABMmTOCmm26yW1vV1dVkZGQQFxeHq6ur3drpiuZxU319PUajEb1eT1VVVcuyLkdcwi7Yltr9FIhxU08oioK7u3vLRiTXzwy1lQ8//JCSkhLS09NZt26dza/fGyaTidraWnx9fcXs137Kae7cY2Nj2bVrF0VFRRw9ehSj0cjUqVPt2mlez5k60IO5+9mRsR2AT9I+5qGk7/VZ22bZTPI3u2s2WZq4Up5KpFdUm8fmVGcT6BaIm969R21dvnyZTZs2AfDYY48RFNS3ScHrxcXFMWPGDGpra1s9AV6+fDlHjhwhNjYWd/ee/Tl7orGxkePHj+Pl5cWYMWNEB64CtfustWvXUlJSws9//nMKCwsZM2YMO3bscKjZTWozGo1UVla2vC4oKADgclkyfzn1BwBGBSYwNWJ6r9qRJAk/P79eXcPWpk6dSlJSEq6urmIHvAFA7f7ImcZQVc//P8wZGRjPncXjnruR+vD74/qaRx3VZzIajdTW1uLv79/jtv7zn/9QVlbGqFGjVN+lbcWKFRw9epShQ4e2lKyIjY1lzpw5VFdX9/nMuiN5hzhbfJqbY1cQ5e1cO+85M7X7KTFu6p7Kyko2btxIbW0tISEhBAcHs3DhQpu34+/vT0lJSa/6O1vZu3cvhw4dYsyYMSxevJh//vOfVFRUMHPmTObNm6d2eIIdOE2yrFlISAgrVqzo83adqQMdFZiAj4sPDeZGJob17bR1nUbHvaMe4K1LrxPnP4LJ4W3Xv9mRvo2fHXiWaO8YNq/8rEfJnOYijxqNRvUZWxqNhvnz59/wfmhoKLfeemufx7N161aSk5MBa2xJSUl9HoNgpVafBfDEE0845MwNR+Hq6kp8fDzJycloNBrGjh0LQLRPDCP8R9JoaSLOf4TKUdpPXybwBccgxlCdc122lNqX/oHrvHl9migDSEpK4vTp0y2zXNuiKAovv/wyFRUVrF69uscbmBgMhla/qykyMvKGhJ0kScyePbvPY0mvvMZTXz2KAmy7tpXPV+/s8xgGOjFucg4XLlygpqYGgIaGhpb7nbq6upadgm3h9ttvp7S0VNVJEc2OHDmC2Wzm5MmTTJ48mYqKCgDS09NFsqyfcrpkmZqcpQMN8wznizV7kBULrjq3Pm//yfE/ZGXYbfj7+OOhb7uofXmjdUp9ZVMFCgoS3U+WDRs2jIceeggXFxeHm7WhtoaGBiRJQlEUGhoa1A5HEBzSmxc38h/L6yROGcPPJz+Pn6/1qaWH3oO3b/lQ5egEoX9xljGU7389h/fjjyGpUFTf39+fRx55hOrqasLDw9s85vqf63V1dT1u67777iMvL4/o6OgeX6M/qjHWoGBdAljdZF2iL2bnC8KNmjfeUBSFwYMHA1BRUcFLL70EwOOPP26T+zONRkNwcHCvr2ML48eP58iRIyQkJBAQEMCsWbNIT09vc8KE0D+IZJkTUxSFTz/9lOzsbNasWUNYWFjLZwZt3z8pNMtmtlzZzLWz6TSlmtDr9axfv77NJ8drR9xFuGc4Q32Ho5F6/uTWXlu2O7ulS5eya9cuvLy8GD9+vNrhCILDqTfV87dTfwLgQOFertSnMtlX7ARpa4qicOnSJaqrqxk/frzYOUxwGHl5eXz00UcMGTKEm2++udVnGhV27y4sLOTMmTOcOnUKi8VCUlJSS423VrFpNDz00EOUlJQwfPjwHrfn6upKbGxsLyLunxKDknh07JOcKDjGvaPuF4kyQWhHaGgoa9asAazlaMC6RNxisQC01DHrTxYtWsSCBQtaylfMnTuXuXPnqhyVYE8iWeakFEVh7969nDt3DrDW77o+WaaGrzK/5LfHXgAFFmluAROkpqa2mSzTarTMGSSy8La0Z88esrOzWbFiBUFBQdx1111qhyQIDstF64Kbzp0Gcz0A4Z4RZGZmsm/fPsaNG0dCQoLKETqPkydPsnfvXhYuXHjDku/k5GQ++ugjwJqcaB5YC4KaTKmpnPrny1T4+XL61CmWLl2KVqtVNaYPPvigVQ3F8+fPs2LFijaTNQEBAQQEBPRhdP1bZlU6vzr8C6ZHzuKBhIdYn/gI6xMfUTssQXBYsizz97//vWV266JFi5g6dSohISHcf//9AP12t2NR53VgEf/aTurixYvs37+/5XVzQdRm6enpbN++ndLSUpu222huZOvVT8ioTL/hs1jfobjp3PGXAtDLejQajc23DxbaJssyBw8eJCsrq6VWmSAI7cvOyiak0vqAIcplEFHegzhw4ACZmZl89dVXKkf3raysLE6ePNmyK5wjunjxInV1dW32PbW1tS1fN9c2EQS1la57gGFffsmQa+lMv5TcKlEm19VR+X+/o+bfr7TsyGcr+fn5XLhwoc3v5+jo6FaJsWHDholZTX3ky4wdnC0+wyvnXlY7FEHolGI2U/vmf6j74AOb91FdjkFRaGxsbHl94MCBlq+jo6PF8m6h3xAzy5xUVVVVyzpxSZIwmUwtnxmNRt555x1kWebs2bM899xzNhtw/evsP3jr0ut46j3ZfcdBtJpvB5jD/OP4+s6DyBaFnOwc/Pz8HGLnkoFAo9GwZMkSsrOzSUxMVDscQXBoZtnE6TOnGF02hrCaSKJcrLudTZgwgYqKCiZNmqRyhFYWi4W33noLi8WCwWBw2O/tJUuWcObMGSZMmHDDZ2PHjiU/P5+qqiqWLFmiQnSC0JqiKFgKC/EymZi7ew98s1lQs+q/v0TtX/9mPbaxAe+nnrJJuw0NDbz22mvIskxdXR1Tpkxp9fnKlSu55ZZbqKyspLKykpiYGJu0K3RuxdBbyahMZ3L4lM4PFgSV1X+4icr/+m8ANL6+uC1ebLe2cnJyOH36NBMmTGhV+kar1TJ37tyWh4uiLI7QX4lkmZNKSEjg6NGj1NXV4e7u3mrJkFarRaPRIMsyJpMJWZZttrzAx8Va8NbL4N1mAk6n0YOGDutgmM1mysrKCA4OtstTU1mW+eSTTzAajaxatcohdnrqC5MmTXKYm3xBcFR5Nbnc+/kdyBaZKZpZBDYF0dDUwNatW7nlllsYOXKk2iG20Gg0xMTEkJ+f79DLGUJDQ1m6dGmbnxkMBlV2BBaE9kiShNfjj1Hz578A4PX4Y60+115X2N+SX2CzdrVaLQaDgcbGRtzc2t58SavVdrrEsrKyEp1OZ7Od5r4rPT2dPXv2MG3aNOLj4+3ShqMJ9QzjN3N+r3YYgtAl128+orHzRiRbt26lpKSEoqIiHnmk9dLkadOmERwcTHV1NQkJCRiNRhobG/FWYXMUQbAXkSxzUj4+Pjz55JOUlpYSGBjYqmiyVqtl/fr17Nu3j6SkJJvW4Vg3ej3jQycyyDumx4X533vvPdLT05kyZQqL7fA0pLy8nAsXLgDWJQ/i6awgCM3SKlKpNlYBMGT2IIznZMrKyrh69arKkd1IkiTuuecetcMQhH7H58c/wn3lCpAk9EOHtvrM8/vfQ66txVJcjM9//5fN2jQYDDz++OPU1NT0uMZsTk4Or7/+OjqdjieffBIvLy+bxdfszJkz5OXlcezYsQGTLBMEZ+J+801oPngfycWAy8SJdm1r+PDh7W4mIkkSw4YNA8BkMvG3v/2Nmpoa7rjjjpaC/32tqamJjIwMhgwZMmAmSwj2JZJlTszFxaXdaa+hoaGsXbvW5m1KkkRCUFLnB3aguW6NverXBAQEMHfuXIxGI1FRUXZpQxAE5zQ9YiZRXoPIqcnm3+n/5OHERxlTMcZhlzgKgmAf+m9u8r5LkiR8fvwju7Tp6enZqxlhdXV1KIqCyWSiqanJLsmyGTNmoNVqGTdunM2vLQiCbbjOmN4n7SxYsIC5c+d2OvHCZDK11CitqKjoi9Da9Pnnn3Px4kXGjBnDihUrVItD6D9Eskywm/KGMlx0rnjoW28+cNddd3H16lVGjRpll3YlSWLWrFl2ubYgCOpJK09l27WtLBq8lPjAnvUfRfVF5NRkt7zeXPABu9bus1WIgiAIvWY2m6mvr8fLy6tVuYq4uDhWr16Nm5sbgYGBdmk7JCSElStX2uXagiA4n66sUHJ3d+fee++ltLRU1UR78xJQsRRUsBWRLBPs4o/H/493L7+FTqPjybBnKEsuZ/r06YwfPx5fX982C0E7AlmW2bFjB1lZWUybNo2kpN7NohMEwXZ+vPdpcmty2J7+OTvX7u32+b8+8v/Yn7MXvUaPWTYjSRIRnqIorSAIjqOkpIQ333yTuro6wsPD0emsQ/W1a9fi7u5utweNtpCTk8OOHTvw9PRkxYoVuLu7qx2SIAh2tnPnTtLT07nllluYaOdloZ1ZsGABU6dOxcPDo/ODBaELelZ0ShA6UFhbwLuX3wLALJs5f/I8FRUVHDp0SOXIOpeamsqJEycoLi7m008/pampSe2QBEH4RoiHtch9sHtIt881WUxsubKZ0oYSxodOYnzoRGZFzeHF2f2rqLPFYiEnJ4e6ujq1QxEEoQcOHz5MfX09YK27mp2dTXZ2Nunp6SpH1rnPPvuM/Px80tLSOHz4sNrhCIJgZ42NjRw5coSioiJOnTqldjhIkoSnp6ddNpATBiYxs6yfKSsrIy0tjbi4OPz8/FSJQa/VIyGhoKBBQ1lIMdENk5g2bZoq8XRH80YJkiSh0+nQaEQ+WRAcxZ/m/Z2zxadJ7EHdRL1Wz1PjN3Awbz9Pjv8hcf4j7BChuhRF4Z133iEjIwODwcD3vvc9/P391Q5LEJyCYrHQ8OlnoNXitvwW1W629Hp9q9ehoaG4u7t3uMu4o3B1dUWSJBRFEcW1BaGfKyoq4p133gGs3/tjxoxRNyBBsAORLOtHzGYzr776Ko2NjRw8eJANGzag0Wioq6vD3d29zwZ+AW6BPDf1f/j7qT/jZfDmh7M2MDrIOYpnDx48mJtuuonc3FzGjRt3w6BVEAT1uOvdmRYxo8fn3zv6fu4dfb/tAnIwJpOJjIwMAIxGIxkZGSJZJghdVPvKq1T98lcA+FZX43nvPSgNDSgWC5peFOXvrtmzZ1NYWEhRUREJCQncdNNNTjNL4rbbbuPAgQN4eHg4xQNSQRB6bvfu3S1F/RsbG1EUReWIBMH2RLKsHzGbzS3LBhsaGtiyZQuXLl1CURQSExO59dZbe3Tdgtp81n9xLy5aVzYuews/185vvlYNX8Oq4Wt61J6aJEliwoQJDltTzVbq6upatp+///77cXV1VTskQRB6Sa/XM3ToUK5evYqLiwtDhgxROyRBcBqW0lL4JillPH+evFGjUaprQKcj5Itt6Ef0bDZq1f/9jpp/vozPc8/i9cjDnR7v4eHBgw8+2KO21Obr68stt9yidhh29/alN3n13L/4wYQN3Dp8tdrhCIIgCHYi1pj1I66urqxatYq4uDhuvvlmLl682JLlLygo6PF1zxWfobi+mJyabFLLUmwVbr9TV1dHeXm52mF0SX5+PmVlZRQVFVFSUqJ2OIIg2IAkSdx5552sWbMGNzc3Pvzww5baZSdPnuTXv/41r7/+OiaTSeVIBcHxeD32GO5rb8fjrrvAbEaprAJZBqMR8zczNnui/uMtYDRS/+mnNoy2f7HIFq5WpNFgqlc7lC7Zkb6NWlMNuzK/VDsUQVDN/Pnz8fxm1u24ceMYNGiQyhH1TH19PRs3buT3v/89Fy5cUDucNpllM5WNFWqHMSCJmWX9zOjRoxk9ejSKonD27Fmys7MJDQ3t8awygDmD5nHb8NsxaA1MCFN3lxNHlZ+fz8aNG7FYLCxdupRJkyb1Wdu5ubkUFRUxcuRIDAZDy85ZHRkyZAgzZ85Ep9MRGRnZB1EKgtAXNBoNJSUlVFZWAnD16lWSkpLYt28fJpOJ7OxsMjIyGD58uLqBCoKD0fr74f8H64YfjXv3WpNcWi1e33sE10WLenxd31+/QN277+L10HpbhdrvPLfvR+zJ/opQjzDeX/4xnoa+WfbaaG7gi/RtxPoOZYjvUDz0Hl1a8vrTKf/NJ2kfc/uIO/sgSkFwTCEhITz99NPIsoxWq1U7nB47deoUOTk5AGzfvp2EhASVI2qt1ljDfdvuJLs6i8E+Q/jbgpcJ9QxTO6wBQyTL+ilJkrj//vupr6/v9fa5rjo3npv6PzaKrH9KT0/HYrEA1h01+ypZVl1dzeuvv44sy3zxxRdotVoeeughgoKCOjxPq9Uyb968PolRENSSVZXJkfxDLBl8E76uvmqH02dGjhzJqVOncHFxaSkKHhsby7lz53BxcSE0NLTPY2pqakKj0Yg6kIJTcJ0zh/BLF0CrRePm1qtruc2bi9u8uTaKrH86kLsPgMK6AjKqrpHQg01ceuIvJ//AptQPWl6vGLqK/5n+fKfnJQQl9VmMguDIJEly6kQZgI+PD2D9szR/7UjOFp8huzoLgIyqdD5IeY8fTNigclQDh0iWObE9e/Zw/vx5pk+fzsSJN874kiSp3USZWTZR3lBOsEeIvcN0aqWlpTQ2NnY6+2rUqFEcP36choaGPp1VJstyy1Jbi8WCxWKhoKCgzWSZ2WzmzJkzpKenExwc3DKzTBCc3ZmiU/z3/p8yK2oOz075Wcv7T+95guzqLC6VXuSXM19UMcK+FRwczIYNrQdSy5cvZ8KECfj5+fX6AUpHcnNz0Wq1hIVZn3pWV1dTWFjIpk2b0Ov1PPHEE7i7u9utfUHoCtPVq5Q//gSSuwcB/34ZbRs/Mzsq6m8pKUHj6YnUy0Raf2Y2m8nKyiIsLKzT7/l7R93P6xdeZWzIeEb4x/dRhGCUWy9JP1ZwpN1jU8qS+TRtC1VNVawdeRdJwWPsHJ0gCH0hISEBWZYpLy93yJrVowMTCHALpKyhFA+9J/OjF6od0oAi7pSdVF1dHQcOHABg586dbSbLOvLIjgc4X3KOn017npXDVtkjRKdXVFTEv/71LxRFYeXKlSQltf8U0c/Pj6effhpFUdBo+q4UoK+vL/fccw/5+fk0NTWhKArx8W0PNLdv386ZM2cASElJwdPTs9v/bwTBEX2dvZvi+iI+SfuYn07+75ZlNFFeg8iuziLSK0rlCNWn0WjsvuT60qVLbN68GYClS5fi6+vLe++91/K52Wymvr5eJMsE1dW+thHTxUsA1G/+CK9Hv9/lcxv376f0rnvQRkQQun8vkouLvcJ0alu2bCE5ORkfHx+eeuqpDsdGj417ikfGPIZO07e3JU9P+BHR3jG4al1JrUjhpiFtb06QU53N/dvvxiybATiSf5Cv7zzcl6EKgmAnkiQxZswYtcNol6+rH1tu3UZRXSHRPjFoJFFyvi+JZJmTcnNzIzAwkNLS0h4VVMyuzgYg55tpncKNampqWmZtNdf/6YgkSaps7z5kyJAu7XqXn5/f6rVnB0/NBcEZNFma+PWR/4esyCwbcgtTwqe2+h78w7y/UlhbQISXqMvXF4qLi1u+vnLlCm7fmXWzcuVKAgMD+zosQbiBy5TJ1P3nLdBqMYwf161zzVnZoChYCgtRmppEsqwdzeOm2tpaZFnu9EFiXyfKADwNXtw3+oFOj8uqzmxJlAF4GbztGZYgCEIr7np3BvuKHc7VIJJlTkqj0fDII49QXFzco/ozLy9+jbPFZ7hpyM12iK5/iI2NZfHixdTV1TFlyhS1w+m1GTNmsGXLFiRJYt68eYwcOVLtkAShWxRFaZUMu1Bynm3XPgPgg+VbiPUb2up4nUZHpHfrWWVms5lz585hMBgYPXq03RPciqKwbds2iouLWbVqFb6+vnZtT03Tp0/n6tWr1NXVsWjRIvLy8rh48SJgrZPY3qxXQehr7itWoB+dgOTqgi4iolvnetx5B5JBj25ILBpvkTRpz8qVKzlx4gRxcXFOX/JhQuhERgWO5lLpRYb5DedvC15WOyRBEOygebdwUV9VaObcP736yAsvvMC2bds4e/YsBoOhS7OM7OWDDz7g6tWrGAwG7r33XiK6OchrNtRvGEP9htk4uv5FkqR+kSRrNnr0aIYPH44kSeKHQD/nSH2WrVy5coUPP/yQwYMHc9dddyFJEolBSawcdhtuOrcuP3H79NNPWxI45eXlzJ49255hU1dXx6lTpwDr8uf+1Kd8l8Fg4OGHH255HRwcjL+/P1lZWYwdO1b0OwOUo/RHTWfPUXbvfcj19bgtXkjAP/7Ro+tIOh0ea9faOLr+JygoiGXLlqkdhk246tx4Y9m7VBur8TZ4q7KKQLAvR+mn+kLT0aM07vkaj/vvRxcudlVsVlhYyMaNGwFYv349ISGirrcAYtFrFxiNRtasWcOjjz6qahzbtm0jJSWlpe7Lv//9b1XjEZyPwWAQN6wDgKP0WbaUkZGBxWIhPT0dWZYBMGgN/GzaL3hm0k+7XMMhLy+v5evvLk22Bw8PD2bMmEFcXByjR4+2e3uOJjo6mlmzZuHl5aV2KIJKHKE/UmSZkluWI5eXQ2MjDZ9upeKXv1ItHsH5SJKEj4uPSJT1U47QT/WV0vsfpOalf1D1wgtqh+JQsrOzMZlMmEwmsrK+LVNUa6zljyf+jz+e+D/qTHUqRiioQcws64Lnn7duI/3GG2+oGkdaWlqr14qi0NjYiKura7euc6LgGO8lv819ox9gTEj3anWoKSsri/T0dCZPniwKRAtCB7rbZzU1NdHU1NTyurq62h5hdVtaWhpbtmyhoaGByMhIJk6cSExMTK+2KZ82bRrbt29Ho9H0yQYXkiQxf/58u7cjCI7KEcZQckkJfJNkb9a4cyf8z8/aOaNtislE5f/+ArRafP/350hOsrzQZDJx9OhRgoKCGDFihNrhCILDcYR+ylaSk5PJyclh5syZbd4v6RNGYzx8BENCggrROa6EhASuXbuGJEkkXPd388aFV3kv+W0ADBoDT4z/od1juVKeSqBbIP5uAXZvS+iYc/yUd0L2uPkMDw+nqqqq1XvdTZSB9Zv+WMFRAJsly0wmE5s2bSI7O5spU6YwZ84cm1z3eu+//z6NjY0YjUYWL15s8+sLwkD14osvtgwUHUVubi7vvvtuq9fTpk3rda29CRMmEB8fj1arxUUU5hYEh2TrMZQm4MYbDpeJk7p9HeO589S9+R8APNbejsFGs0VTUlL4/PPPcXd354477sDf398m12125swZ9uzZgyRJ/PjHP75h8w1BELrPER80ms1mNm/ejKIoGAwG5s6de8MxQe+/h1xWhjY4WIUIHZebmxt33nnnDe/rtYY2v7aXrzJ38uy+Z/B18WXbmq9w0YqxqprEMkw7efHFF/Hx8Wn5FRUV1flJnVizZg1hYda15TqdjrvuuqtH17ln1P1MDpvCXfH3tntMdnUWt225hR989VirHYDac/HiRdLS0mhqamLfvn03JPVsISYmBkmSbPJ3KQjCt5577jmqqqpafuXk5KgdEocPH77hveunxfeGu7u7SJQJggOz9RhK0unwf+Xf4OICkoR+3Dh8f/9/3b6OIWE07mtvx/3uu9DHxbV7XOVvfkvBhEk07N7Tpetu376duro6SktLOXDgQLfj6kx4eDg6nY6QkBDR9wmCjdjjXq+3tFotsbGxGAwGYiIiqPzNbyld/xC5cSMpnDsP09VrSFqtSJR1w/0J63ls3FM8Nu4p7k9Yb5c2Gkz1ZFZlWFeNWRoBMFqMKIrcyZmCvQ3YmWXPPvssv/3tbzs85vLlyz2erv7cc8+xYcOGltfV1dW9H+xJEo888kivrgEwNWI6UyOmd3jM4byDZFVnklWdSUFtPlHegzo83tPTsyVGjUaDwWD7zPvtt9+OLMu9WoIlCM7Knn2Wi4uLw91ABQcHc/ny5VbvDR8+XKVoBEG4njOOodyXLcU9/WqvriG5uOD/xz90elzdG2+i1NTQ8MknuM2f1+nxHh4e1NbWoihKy3jKliIjI3n22WfRaDSi5pYwYDhjP9VbkiRx9913A1D2xJPUbvmk5TPz1WtU/b//R+B/3lQpOufkonXhgYSH7HJtRVF44fAv+PTqFhQU7hhxN89M+imBboFEeEbiqhOzgNU2YJNlzzzzDPfff3+HxwwZ0rXd1driiDef3bFk8E1cLLlApFckkV6dd/xDhw7l5ptvJicnh7Fjx9plir8kSSJRJgxY9u6zHM2cOXM4c+ZMy7KG4OBgBg8erHJUgiCAGEN1xu/XL1D/+TY8u1gsfO3atRw8eBB3d3dmzpxpl5jE+EkYaAZ6PyV9d+KCLNN48CBKYyNSD8r4CLa3M+MLPrn6ccvrfTlf86PJzzIlfJqKUQnXG7DJsqCgIIKCgtQOw2H5uvryq1m/6fLxkiQxfvx4xo8fb8eoBGHgGoh91tNPP01dXZ3dZlsIgtAzA7E/6g73VbfivurWLh/v6+vLzTffbMeIBGHgGej9lO/vf0f9h5tAUb59s8lI6fceJejN19ULTGiRW5Pb6vXKYV3/uSH0jQGbLOuO7OxsysvLyc7OxmKxcPbsWcA6m0rcwAldVVlZSVNTEyEhIWqHIvRz/anP8vDwUDuEAcFisbBnzx7q6uqYM2cO2dnZ+Pv7ExkZqXZogpPrT/2RoA6TxURy2SVifWPxNHipHY7QD/XHfkqj0YCPD1RWtnrffLV3y9EF21k4eDFvXnyNenM9E0In8mDi99QOSfgOkSzrgp///Oe8+ea367vHjh0LwNdff227XR8rK8FggDa2+O3I0aNHyczMZNmyZXh7e9smFsHmcnJyeP3111EUhZtuuokJEyZ06TxFUTCZTHapASf0X3bvswoKrAOwbvZXguM6f/48hw8fRpIkysvLycnJQavV8pOf/ET0P0Kv2L0/UhQoLIRvNkDqKnNuLpU//19cZ83Es5OlWoK6ntnzJIfzDxHsHsLHt27tch2fRnMjeo0erUYsQRU61if9VE0N9OG9WtPx4yBbbnjf/c47+iyGrrp48SIWi4XExMQBVVdxkHc0W1fvpKA2n2F+wwfUn91ZiN0wu+CNN95AUZQbftksUWY2w1//Cq+/3nqqbCcURWHXrl2kpqZy8eJF28Qi2EVubi7KN/+22dnZXT7vgw8+4De/+Q3Jycn2Ck3oh+zaZ9XWwp/+BJs39/5afejatWu88847N2waIFg1PzlXFAUfHx+0Wi3+/v7odOKZmtA7dh9DnTgBv/sdpKV167T6jz6m8cudVP3yBdvEIdjNmeLTABTXF1FcX9ylcy6WnGfue9O4e+saLG0kDAThenbvp3bvhhdfhG/qsPaFxn37oboGvLzQDhmMJiAAr6d/iM8Tj/dZDF2Rn5/PRx99xCeffEJmZqba4djd/py9THt7Ai8c/gUAPi4+jAgYKZL6DkqMgh3B6dNw8SK4ucGiRTBsWJdOkySJ+fPnk5mZyahRo+wcpNAbiYmJXL58mfr6eqZOndrl8woKClAUhaKiIuLj4+0YoSB00aFDkJoK5eUwbx44yTK97du3U15eTn5+PiNHjlQ7HIczbNgw7rzzTmpra0lMTGT58uVotVrrMg5BcFRmM+zYAefPw86dMHQodPHJvPutKzGePIXL7Fl2DlLorR9M+BEbz/+L2VHziPLqeHf2ZpnVmZhkE1nVmZhkI1qN2FVOUEldHXzxBVy5AgcPwrJlfdKs5/r1YDbjMn06rrNsv3FIU1MThw4dQlEUpk+fjmsPNw3w9vbGzc0Ni8WCr6+vbYN0QGeKTmO0NHE475DaoQhdIJJlamse6EmStTPt5mBv2rRpTJsmdsxwdB4eHjz44IPdPu+ee+4hOzubxMREO0QlCN1UW2vto3x9rcmyPXvgvvvUjqpL4uLiOHLkCHFxcWqH4rCGDx+udgiC0D2nT8OlSzB4MBw/3q0HjrpBgwh8683ODxRUtzrudlbH3d6tc5YOvgmAaO/oLi/bFAS7OHwYsrKsY6cvv4QZM/pkOabW3w+f557t9XUUWUaurETr79/q/e3bt3PhwgUAKioqWL16dY+u7+npyYYNG1AUBb1e3+t4+8KV8lSe2/cjPPSe/GHeXwhyD+7yufcnrMfL4CV2vHQS4pGx2poHetHREBFhHezZofCioihkZGRQXl5u82sL9hMUFMT48eOd5oeH0M8dOgSZmdbZZKGhsH8/5OZ2epojWLRoEc8++yzLly9XOxRBEGzh+oeN4eHfPnDsRjmLrrIUFtKw52sUs9nm1xbsQ6vRcnPschKCktQORRjI6uqs/ZSHh/VeLyfHOrvMSSiKQsmq1RQkJFHz8sutPquqqmpZrlr5nU0Eukun0znVvc57l98mqzqT5LKLbLv2WbfO9XHx4cHEh4kPFKvCnIFIlqnp+oGeu7v1iYOdBntnz57lP//5z/9n777Dm7iyv4F/R5JV3HvvNs3Y2NiYDjadhBp6AlkglUCSTd1NdvMuSXb3x6bsJpsCqUsaJEAoCS2ETuhgenfvuHdb/b5/GCsIN8mWNJJ8Ps/jByyNZs7InuOrM7fgk08+gUKh6NI+9u/fj3/+8584doy6jRLS47T0KnN2BhwcAB+f33uX2QiJRMJ3CIQQU2m52Rga2tyOMtMNR8YYSqZMRcXDf0Dtfz/o0j7UubkoTh6C4hGjoCkpMWl8hBAr1tKrLDgYEImaF0fas8eic5d1i1IJZVoaAED+m36Rb8yYMXBycoKjoyPGjRvHR3S8SfJrXqhNwAkwwCeB32CIWdEwTD7d3asM0G/sGTGUwBCmWF0jLS0NarUaaWlpGDFihAmiIoTYjJZeZX37Nn/Pcb/3LrOhucsIIXbg3puNQPMNx8JCo6ezMATHNd9b5ro4h5/88BFoiooAAIqTJ+E4Y4bJYiOEWKm7e5W19JoKCgKuXbPo3GXdwUkk8PjPvyHfvx8uzzyj91xYWBheeuklniLj19ToGejvHQeJSIJA5yC+wyFmRMUyvrTV0APM1tiLj4+Hu7s73Nzcuty7Yty4cThz5gwVygjpae7tVdbCxwe4fNmm5i4jhNiBe282Ama74chxHHx3bofqxg1IRo7s0j5kU+5H065d4MQSSMeONUlchBAr19Kr7O65Uu/uXWahucu6y2nuHDjN7dp8ZPYswj3SZPtqWdAtMDDQZPskpkHFMr601dADzNrYCw8P79Y+kpKSkJSUZJJ4SktLIRQK4eXlZZL9EULM6N5eZS2odxkxEmMMmZmZcHZ2hr+/P9/hEFvU3s1GwGw3HIV+fhD6+XX99V5e8Pnhe5PEolQqUVRUhODgYIhE1IwnxCq11aushY31LiPmdfPmTfzwww8AgHnz5tGK7VaG5izjQ0cNPcCsc5dZg4yMDKxZswYff/wxiu4MSyCEWKn2epW1sMG5ywh/jh07hnXr1uGzzz6j/E+65u65yu5lxrnLrMU333yDr7/+Gps2beI7FEJIe+6eq+xetjh3GTEpxhhu3ryJ4uJilJeX6x4vKyvjMSrSFiqW8aGjhh5g94292jt/GBhjqKur4zkaQkiH7l4Bsy139y6zkZUxu0KtViM/Px9qWg2vW1pWZDbF6lmkB+rsZiNg9zccW66bmpoafgMhhLSto15lLYKCbG5lTGI6Fy5cwA8//IAvvvgCffr0QXx8PAYMGIDk5GS+QyP3oP7blmZIQw8w60S1fIuPj0dTUxMcHBzQu3dvvsMhhLSns15lLaxw7rL6+nowxuDi4mKS/X3//ffIyspCZGQkHn74YZPssydKTU2FRqOBi4sL+t47rJeQzly40PYUFncz42JJ1uChhx7C1atXkZCQwHcohJC2nDrVeq6ye9ng3GXG2LdvH86dO4exY8di0KBBfIdjdVqG0AsEAshkMsycOZPfgEi7qFhmaYY09AC7buwJhUKbXiRALpfjypUriIyMhKenJ9/hEGI+J0+2PVfZvaxs7rK6ujp88MEH0Gq1WL58uUnmRqyoqAAAVFVVdXtftqqxsREHDx6Ev79/l+evdHV1xQMPPGDiyEiPsW9f5zcbAbu+4RgYGGjTk0BnZ2ejvr4esbGxJlmpnRCrs29fx73KWtjx3GUnT56ERqPBvn37EBwcbLNzlBYUFODKlStITk426TzbsbGxcHNzg7OzM5ycnEy2X2J6NAzT0gxt6AF2P5TAVv3666/YuXMn1q9fz3cohJjXgQOd9yprYUVzl2k0Gmg0GjDGTDZsct68eRgyZAjmzp1rkv3ZolOnTuHs2bPYsWMHDaEn/Lhxo/0pLO5m59NZ2Kqamhp888032LJlC65fv853OISYR36+YTcN7XjussGDBwMAFAoFNm/ezHM0Xbdt2zacOnUKv/76q0n3y3EcQkNDqdOFDaBimaUZ2tADLN7Yo7l4DOPu7g4A8PDw4DcQQswtL8/wXmLdnLusqqoKP/30Ey5evGj0a+/l7u6OZcuW4fHHH4dfN1awu1tgYCAmT56MgIAAk+zPHCoqKqBUKs22//DwcAiFQvj7+8PRkBs+hJiaoTcbAYvecGRKJZhGY9Zj2AOxWAyZTAaO4+BqZ8POCNFxdDTsJiNgt3OXjRw5UjfU0JbbC7179wbHcYiOju5wu1NFJ/DWyX/gQul5C0VGLIWGYVqaMQ09wGJDCXbu3ImzZ89i2rRpSExMNMsxrFV6ejp27tyJqKgoTJ06tdNhAaNGjUJcXBzc3NwsFCEhPDFkGMHdujF32eHDh3Hx4kVcuHABffr0gVQqNTJYfb6+vt16/d00Gg3y8/Ph4+Njtd3lz507h+3bt8PLywsrVqwwy/CmiIgIvPrqqxAIBDR8ivDDmCHeFprOQpWZhdL7p0Dg5QX//XvByWRmOY410mg02LhxI8rLyzFr1iwEBQV1uL1MJsMf//hHqFQqODs7WyhKQiysk+tAj53OXebo6IjHHnsM+fn5iImJ6XDb6upq/PLLL/D09MT48eMhEFhPX56JEydiwoQJHbZ5ahQ1+OO+5dAwDbZn/IT9Dx6FRCixYJTEnKznt7GnMHYuHwv1LissLAQAFBcXm+0YLerr65Geng6VSmX2Y7VgjKGgoAD19fWtnjt58iRqampw7ty5Np+/F8dx8PDw4C2Zl5eX46uvvsL+/ft5OT7pQYxp8AHd6l0WeqfHrZ+fH8RisXHHNbOtW7fi66+/xurVq6FQKPgOp00twyIbGhrMehyhUEiFMsIfY3soWKB3mTo3F6y+HprcXGjNPJSKMYbc3FyUlpaa9Tj3qq+vR0FBAdg972FxcTFu3bqFyspKnDt3zqB9SSQSXgtlhw4dwldffWXx95D0IMbcZATstneZn58fBg0a1GnPsmPHjuHmzZs4ceIE8vLyDNp3dXU1rl69ivr6er12z8WLF/H1118jPT29W7HfrbM2D2MMWmgBAFqwVnmS2DbqWWZpXemKaoHeZXPnzkV6ejri4uJMvu+7KZVKrFmzBo2Njd1eVY4xBrlcDpkBd3GPHj2KAwcOQCKRIDw8HH5+fkhNTQXHcUhMTERBQQEiIyNt4k5nWloacnNzkZubi2HDhtl092Zi5Yxt8AFd7l2WmJiIvn37QiqVWtVdReD3mwmNjY2oq6uDRGL5O4a5ubkQiUTt9twYMWIEPDw8EBAQ0O1iVlNTE6RSKRXFiO2zQO8y6ZhUeH70AQRe3hCaaNh3e06dOoU9e/aA4zgsXboUISEhXd6XUqmEQCDQDZVqj1wux8cffwy5XK4bkpSamgp/f3/4+fkhJCQE5eXlZm8/moJcLsfhw4cBAGfPnsX9djapOrFRdtq7zFChoaE4e/YspFKpQZPoazQafPbZZ2hqaoJAIABjDA8++CB69eqFHTt2QK1Wo6amBr0stDieu9Qd/xn7IQ7k7sP9kVMhFXVvZASxLlQss7SiIqArvSaEQrM29jw8PHSTMZqTXC5HY2MjAHT7rt7333+P9PR0DBs2DBMnTuxw28rKSgDNE03evHkTN2/eRO/evREUFIT+/fujf//+3YrFkmJjY3Hz5k2EhoYaVChswRhDXl4eXFxcaEJJYpi8vK7lK6BLK2Naa+H3/vvvx6FDhxAdHW2S1ZAKCwuRlpaGuLg4REREtLtdY2Mjjh8/jqqqKly7dg0AsHTpUl0vvLuJRCIMGDCg27Ft27YNFy9eREhICBYvXgyhUNjtfRJiMl1pQzEGlJaa7YYjx3FwtNAKry3tJsYYysvLu1wsy83NxbfffguxWIwnnnhCNxdrWxQKBeRyOQDg1q1bAJrnuF20aBEcHBzwyCOPdCkGPkgkEgwcOBA5OTlG58v6+nqUlpYiLCyM8iLpWFmZ8XlKLAaysuxyZczOxMXFITQ0FFKp1KCbkXcv3qTVNvfoys/PR69evRAVFaX7jGdJI4NHY2TwaIsek1gGFcsszdkZ6EqvBBeX5oJZGyuQZWRk4Nq1axgyZIjJJrM2F1dXV0ycOBE3b97EiBEjurwfjUaDjDvDUq9fv95psWzcuHGQSqXQaDQ4c+YMHB0dLT5BP2MM58+fR01NDYYMGdLlwkBQUBCeffZZo1937Ngx7N+/HwKBAE8++aRJ53Qidsrfv2v5KiCgueF35wOWrevVq5dJ71D++OOPuiEEr776arvb7dy5U1ckayE343uq0Wh0Cyzk5+ejvLzc6v+mkB6mq20oV9fm4Zj30DY0oPbf/4HAywsuy5+y+t6Uo0aNQn19PZycnBAbG9vl/WRlZUGj0aCpqQn5+fkdFsvc3Nwwe/ZsFBQU4NatW6iqqkJYWFiXj91VBbX52Jr+I+J84pEaOrZL++A4DtOnTzf6dXK5HKtXr0ZTUxNiY2Mxe/bsLh2f9BBabfOXMVp6wRo4DNHeGDMPtEgkwuLFi5GVlYXq6mooFApdh4/58+ejsbHRaueXJbaHimWWtmqVybvX/vjjj1AoFKisrMSSJUtMum9zGDZsGIYNG9atfQiFQkyYMAGXLl3CqFGjOt3e2dkZkyZNAtC8QotUKrX4vEg3btzA9u3bATTfHZ4/f75Fj99yR1qr1aKyspKKZaRzK1f2uOEAluDp6Ynq6upOC/Z35yhPT0+MGDHCrMMKhEIh+vbtixs3bsDPz88kvegIMSkTt6EaftiA+k8/AwBIBiVBMmSIyfZtDh4eHnjooYe6vZ/ExETk5eVBKpWiT58+nW4fGxuL2NhYjB8/HvX19R0W18zl+QNPI7smCwDw/bQf0cuz87hNpbGxEU1NTQCAkpISix2X2Kh//avreaor01/0QEFBQW1OS8FxHBXKiElRscwOBAcHIzMzs1tzV9iirhbd+FquvGVBA47jLLq4QYvU1FQoFAp4eHhYbBw/IaS1BQsWoKCgAIGBgR1uN2XKFHh7e6OxsRHDhg2zyJyK8+bNQ01NDVxdXa1u7jhCTE0cFwuIROCcnCDiobcUX9zc3LB48WKjXycSiXgplAGAXC0HBw4MDAqN0qLH9vT0xIQJE5CVlYXRo2moFemEVNr8RSxOq9Xi1KlTUCqVGD58OByo+Ei6iYpldmDhwoWoq6vjrQhEDBMbG4vKykrU1NTw0tjy9PTEgw8+aPHjEsvKycnB3//+dxw4cAC3b99GYGAgFi1ahL/+9a9Wt8pkT+Xg4NDhXGUtRCJRt4ardwXHcbx9GCbE0iSDByPwwjlAIoHASudMJM3eHvMfrL/2LQb4JCDWx/KLCQwfPhzDhw+3+HEJIYa7cuUKfv31VwDN09+kpqbyGxCxeXTbuBM5OTl49NFHERERAZlMhqioKKxcuRJKpWXvanWE4zgqlNkAgUCA1NRUzJgxw+LzpZGe48aNG9Bqtfj0009x9epVvPfee/jkk0/wl7/8he/QSDc0NDSgoKCAliQnNsUW2lACDw8qlNmAfl798fdR/8Lcvgv4DoXYGVvIU8Qwd98UphvExBSoZ1kn7v7gGR0djStXruDxxx9HQ0MD3n33Xb7DI4QQPZMnT8bkyZN130dGRuLmzZtYs2YN5Swb1djYiI8++ghyuRxDhgzR+/kSYs2oDUUIsXaUp6xPTU1NlzqD9O7dG/Hx8VAqlUhOTjZTdKQnoWJZJ7r6wVOhUEChUOi+r62tNWuchBDSnpqaGnh6erb7POUr61ZTU6NbBbOwsJDnaAgxHLWhCCHWjvKUdSkuLsYXX3wBAHjiiSeMWpU7Oztbt6p3TExMt1YNJgSgYZhd0tkHTwBYtWoV3NzcdF89bfJ9Qoh1yMjIwIcffognn3yy3W0oX1k3Ly8v+Pr6wtHRkebfIDaP2lCEEGtHeYo/NTU10Gq10Gq1Rhcgvby8IBaLIRKJ4OPjY6YIWyttzMKRom9wvfIwTZdhZzhGP1GjZGRkICkpCe+++y4ef/zxdrdr625DSEiIbpUxYh2USiX2798PxhjGjRsHiUTCd0hWo7a2Fm5ubvQ7ayVeeeUVvPXWWx1uc/36dfTt21f3fWFhIVJSUpCamqq7S9cWylfmp9FooNFoujSHxq1bt/D9998DAGbOnIn4+HhTh2f1KB/ZB2pD2Zf09HRcuHAB8fHx6N27N9/hWA3KV7bNVvKU/MhvUF2/DqeHF9nVvIuMMaSlpYHjOCQmJoLjOKNer1QqwRiz6Ge6AwWfo1FdDQBICXwELmIvg16n0qhQ2liCAOdACDjz92Gi3GS8HjsMs6sfPCdPnoy5c+d2mDwBQCKRUOHFBpw9exanT58GALi6umLkyJE8R0RI21588UUsWbKkw20iIyN1/y8qKsKYMWMwfPhwfPbZZx2+jvKVeTU0NGDNmjVQKBRYsmQJgoKCjHp9cHAwfH19oVarER4ebp4gCTECtaEIYwybNm2CSqXCrVu38Oqrr0IgoAErxHrYc57SlJaifOEiQKuFtrISbq++wksc5sBxHAYNGtTl1/Mxsb+HJAiN6mqIBY5oqFFA7Kro9HejRlGDh3fMR1F9IZL8krF64ucQCoQWipgYqscWy8z5wdMcmpqacO7cOYSEhCA0NNTix7dXd69K6e7uzl8ghHTCx8fH4C7lhYWFGDNmDJKSkrB27Vr6AMOziooKNDQ0AGj+W2JssczR0RFPPfWUOUIjpEtsrQ2VkZGBsrIyJCUl0QppJsJxHNzc3FBeXg5XV1eje38QYm62lqeMwclk4JydwWprITRiTi9iHvHekxHmEo+045fx6W+fw9HREcuXL4eTk1O7rzlReAxF9c3z0KaVnEF2TRaiPXpZKmRioB5bLLO1D5579uzBxYsXIRAI8PLLL0MqlVo8BnvT2NiIy5cvo3fv3hg6dCgiIiL4DomQbissLERqairCwsLw7rvvoqysTPecv78/j5H1XCEhIRg7diwaGxutbgglYwzHjx9HZWUlUlJSqFs+MYgttaGqqqqwbt06AM29PMePH2/R49urixcvQiaTISUlBYMHD6ZiGbE6tpSnjCVwcYH/oQNQFxZBPDCB73B6PAEngKc0CBk3fwbQ/BmzpKRErxh7r75e/eAgcIBKq4Kn1BOBzsbdSCWW0WOLZYaylg+eLcUxBwcHq0/gllJfX4+mpqYuT+B49epVXL9+HQAwbNgwk8Wl0Whw8eJFODk5oU+fPibbLyGG2Lt3LzIyMpCRkYHg4GC952iKSn5wHIdRo0bxHUabMjMzsW/fPgDN86/MmTOH54iIPbGGNpRIJIJQKIRGo6EbjXcwxlBcXAxvb+8u97T75ZdfIJfLwXGcSRceqVGUoEKej0CnvpCKnE22X0LaYw15qiuEfn7Uq8zKpKSkYNeuXQgMDOx0JFi4WwS+m7oRl8suYnjQSDg62M+8c/aEimWdsJYPnhMmTEBERAT8/Pw6bNhotVowxiAU2veY57q6Onz44YdQqVSYP3++3nwDhoqKioKbmxtkMhkCAgJMFtuhQ4dw9OhRAMDChQsRHR1tsn0T0pklS5Z0OuyAkBaOd00KnJeXh7S0NCQlJfEYEbEn1tCGcnFxwbJly1BVVdXp32OVSgUHBweLxMWnffv24fjx4/D19e3yEO/ExESkpaWZtLesUiPHsdvroWVqFDZcw6jAP5hs34S0xxryFLEPMTExiImJMXj7KI9oRHnQ50RrRl2UOrFkyRIwxtr8siShUIg+ffp0OK+WWq3Gxx9/jLfffhsVFRWWC44HcrkcKpUKQPMSw13h6emJ5557Dk8++aRJJ+i8e2UcpVJpsv0SQoipBQYGYsmSJeA4DnV1ddixYweampo6fZ1Wq9XlYELaYy1tKG9vb/Tq1avDoYIXLlzA//3f/2Hnzp0WjIwf1dXVAJrbT139WUyYMAGvvPIKEhMTTRYXgwZapgEAqLXUfiKWYS15ihBifahnmR1RKpWoqqoCYwzV1dXw8jJs2Vpb5OPjg/nz56OmpqZbK6aYw5gxY+Dg4AAnJydIpVJ8//336NWrl9XFSQghABAaGgpvb2+UlZXB2dm502FZZWVl+Oqrr9DU1ITx48dj+PDhFoqUEPMpKSkB0DzJt727//77ERAQgMjISKuaa0widMIg35koa8pGsGMcdu/ejYaGBkycOJHmUySEEGJxVCyzI46Ojli6dCnq6+s7nFDQXnRl6KUlyGQyTJgwAQDw7rvvoqGhAbdu3UKvXr3g5ubGc3SEEKKP4zgsXboUWVlZCA0N7XQYf1paGpqamsAYw6FDh6hYRuxCamoqfH19e0T7ycnJCSNHjuQ7jDb5O0bD3zEa586dw+nTpwE0z9c7Y8YMniMjhBDzKq4vws7M7RgSOBRxPta1IFRPRcUyOxMSEsJ3COQu7u7uaGhogFgs7tZQz5KSEpw4cQIeHh4YOXKk3c9JR3qW2tpaNDY2WvVEuvZOJpOhf//+Bm3r5+enG57i6+trzrAIsRiJRIKBAwfyHQa54+6bi9250ahlWnxzZS0yqzOwoN9C9PeONUV4hBBics/vfxoZ1en436XPsGf+QbiIqUct36hYZifkcjlOnz4NR0dHJCUlWVW3+p5s4cKFuHnzJkJCQrq8ChdjDOvWrUN9fT0YY5BKpRgyZIiJIyWEHzU1Nfjoo4+gVqsxc+ZMk04WTcwjISEBYrEYNTU1SEhI4DscQrotMzMTubm5iIuL6/IK28S0oqKisHjxYjQ0NKBfv35d3s/OzJ/x0bn3IYAARwuOYO/8wxAJ6OMPIcT6qO/M2ahlWmhpzjyrQH8t7MTPP/+MGzdugDEGrVaLwYMH8x0SQXNvDVN8mJTL5WCMgeM4gybfJsRW1NfXQ61WAwAqKyt5joYYguO4Vr3Q6urqIBAI4OTkxFNUhHRNaWkpvvvuOwDA2bNn8eKLL1LvbSsRHh7e7X3UKGrAgYMWWjSqGqBl2u4HRgghZvCfsR9ge8Y2DAkcDjcJTd1jDahYZidqa2t1xZTa2lq+w+HFtvOFyCpvwLKUSDiK7edXm+M4zJgxA3v37oWnpycVQoldCQwMxNSpU1FTU0NzX9mojIwMrF+/HhzHYcmSJTQdALEp9fX1uv/L5XJoNJoeVyyTq+uRVXsWvrIIeMvC+A7HpGb2mo0zxaeQUZ2OZQkrIBZ2vIAJIYTwJdQ1DCsS/8h3GOQu9lNR6OEmT56MHTt2wMnJCUOHDjXpvjdv3oysrCwsWLDAaj8EFVY34bmNFwAALlIRHh9lXxP09u/f3+D5hAixJRzHISkpqc3n5HI59u7dCx8fH5PnNWI62dnZYIyBMYbc3Fyr/TtBSFvCw8ORnJyMzMxMDB8+vNPVYI1RUFCA77//HhEREZgzZ47J9mtqN6uPIr/+MnLrzuO+sOf5DseknMXO+O/41XyHQQghxAZRscxOBAcHY9myZSbfL2MM169fh0ajQU5OjtV+CPJ0FCPEQ4biGjlig+y722pVVRV+/vlnyGQyzJgxo1sLBxBizW7cuIFz584BABITE036IZaYTlJSErKysiAUCjFgwAC+wyHEKAKBAPfff79Z9p2Tk4PGxkbcuHEDWq0WAoHALMfpLndJAPLrL8NDEsR3KGb3zZW1+DV7N5bEPYrx4ZP4DocQQogVo2IZ6RDHcZg3bx7y8/ORnJzMdzjtkomFOPBiKpRqLZwk9v1rffz4ceTk5AAAIiMjMWjQIH4DIsRMoqOjERkZCV9fXyqUWTFPT088+eSTfIdBiNUZNGgQFAoFQkJCrLZQBgBhLvEIdOoLEWffebZKXokP0v4DAPjXyX9SsYzYnZqaGhw7dgwhISGIi4vjOxxCbJ59VxWISfTu3Ru9e/fmO4xOOQgFcBBab2PUVIKCgnD27FlwHAd/f3++wyHEbJydnfHwww/zHYbZHLpZilsldXh4aDhk4p41RxIhPYFUKsW4ceP4DsMgDgL776XuInZBkHMwCusL0N87lu9wCDG5/fv34/Llyzhz5gwiIiLg7Oxs8GsVCgUAWO2IlVplGZrUdfCVRYDjOL7DIT0EFctImxobG7Fp0yaIxWLMmTMHDg4OfIdE7khISEBAQADEYjE8PDz4DocQ0gUV9Qos/foMGAM0DHgqJYrvkAghJnLu3DmcPHkSY8aMQb9+/fgOh9whEjhg3bRNyKhOR38vKpYR++Pj4wMAEIvFuHLlCoYMGWJQYammpgarVzfP7bd8+XK4uVnXlDYKTQN+K/oGDFrEe92HEBe6foll2H83HDuiUChw7NgxnD9/Howxsx4rIyMDOTk5uHXrFgoKCsx6LGt2vbgW+ZWNfIfRip+fHxXKiF3TarXYvXs31qxZg8uXLxv9eqVSif/973/47LPP0NTUZIYIu8dJIoK/qxQcgCgfJ77DIcTuZWdn49ChQ6isrDT7sY4cOYKysjKcOHHC7MeyVmqtEhXyAmiZhu9Q9DiLnZHgOxAOQroJTOzPyJEjERgYCKVSiT179uD06dMGva6pqQlKpRJKpdIq20wcBOC45rKFgKOe+MRyqGeZDdm+fTuuXr0KoHni/cTExFbbVFVVYceOHfDw8MD999/f5TkyevXqhaioKIjFYgQHB3crblt16GYplnx1Bg5CDgdeSEWIpyPfIRHSY2RmZuoaedu2bUNMTAyEQsMbSOXl5cjPzwcA3L59GxEREWaJs6ukDkIceCEVdXIVfF2lfIdDiF0rKyvDt99+C8YY0tLS8MILL7TZ2+LYsWO4efMmxo0bh7CwsC4fLzU1FadOncKIESO6E7ZNO3H7B9QoSxDqPAADvGluMEIsQaVSobi4WPf9/v37ERERAV9f3za312q10Gq18Pf31017YY1TvIiFMqQELoVCU98jFiIh1oOKZTakrq5O17irq6vTe66srAw//fQTGhsbUVVVBQCIi4vrcmNPJpNh0aJF3Qu4m7Kzs1FWVoaYmJhOx9zXK9RoVKrh62K6D53VjSoAgErDUK9Qm2y/hJDOOTr+XpyWSqVGF/4DAgIwduxYaDSabn3oNSeZWEhzlRFiAQ0NDboe+Y2NjdBqtXrF9wMHDuDq1au6XmcHDx7EkiVLuny8hIQEJCQkdCfkblFq5ChquA5HkRt8HSM73JYxBrmmDmKhI4Sc6T4WKLXNvVMUWuvrnU+Ivfriiy/0Rh+pVCps27YNTzzxRKttlUolPvnkE9TV1WHx4sWIjOw4V/DNycEdTg7ufIdBehgqltmIhoYG+Pj4oLS0FF5eXhg8eLDe88ePH0dhYSGA5hUsXV1d272LYAtu3bqF77//HgBw8uRJPP300+1+WL5SVIN5n55Ao1KD16b0w2Mjf0/2cpUGP18sQlyQG/oFuBoVw/T4QHAc4O4oNvq1hJDuCQoKwvz585GXl4eBAwcaPZkrx3EYNWqUmaIjhNgShUIBb29v1NfXY8KECXqFspqaGvz2228AAKFQCI1Gg759+/IVqkmcLNmAWmUpACDBewqCnWPa3fZC+S4UNlyDTOiKUYF/gFgo0z1XrbiNOlU5gpz6GT30aajfPJQ1ZSPQybbfS0JsRX19PcrKylo93tZjLdu3dLAoLCzssSOJbB1jDGq1muYXNxMqltmAhoYGfPbZZ6itrQXQnNDS09MxYMAA3TZhYWG4cOEChEIhHnnkEfj7+1v1MuWdKSwsBMdxYIyhqqoKcrlcr6fJ3XZfLkaTsnlOjPWn8vSKZR8eSMfHhzIhcxDi/P+bAKmD4Y09gYDDjATq6kuIJTHGcP78eZSVlWHw4MHd/tCq1WpRWFgIf39/akgQ0gMdP34ce/fu1X1/5MgRxMXF6fKBk5MTPDw8UFVVhX79+mHatGkQi8V8hdttWqbVFcoADtWKonaLZVqmQWHDNQBAk6YWFfI8BDj1AQCotAocL14PLTRQqOsR7T7UqDicHDzg5EBzqxJiKTKZTFfwv5u3t3eb23t6emLatGmoqqrCwIEDLREiMYMffvgB6enpmDFjBuLj4/kOx+5QscwGpKWltRp2uW/fPr1iWUJCAkJCQiCRSFoNWVSr1di8eTNqamowa9asdpOmueXl5SEtLQ3x8fGddvWNjY3FqVOnoFAoEBMT026hDABS+/ji0yNZUGsZpsQF6D3n4djc4HWViSAS6PdMOXKrDB8fyoC7owNemxKDEI/fj5Ff2Yi//XwF0b7OeHVyPwjuei1jDAXVTfB3lcJBaHsFSa1Wi5MnT0Imk9EfR2J1Tpw4gb1794LjOGRkZGDUqFE4ePAgQkNDMWPGDKNvAuzatQtpaWkIDw/H4sWLTR5vXV0dVCoVPD09Tb5vQkj3aLVa7N+/X++xmpoaXL16VTdMUiQSYdmyZaisrISvr2+rHHPz5k3s3bsX/fv3x5gxYywVuh6NRoNDhw5Bo9FgzJgxHRb+BZwAoc7xyKu/CCEnRLBz/w62FcJHGo4yeQ4cBFK9uYAEEEAocIBWq4HDXb3NgObJ+69XHkatqhSBTv0Q4ao/h25mzRmUNmWhn0cK3CX68x+ptApomRoSoW0ubFJcXIyrV68iKSmJFloiVkUoFGLo0KE4duyY7jGZTIaZM2e2+5q25r8mtiU7OxuMMeTm5lKxzAyoWGYDFAqFrpfV3Y/dy8vLq83X5+bm4saNGwCA8+fPY8KECeYJtBPbtm1DVVUVMjMz8dJLL3W4rY+PD55//nnU19d3+iE0OdwTR14eg+omFfr5u+g99+jICCSFeSDMywkioQCMMdTK1ZCrNHj0mzNQaxgEHIeiajm2Pz1S97qvT+Tg4M0yHLxZhgcGBiPmrmGY/9h5HV8ey0ZMgCu2Pz0SQoFxw8P4dv36dd1d9oCAAKucyJP0TFVVVbrfTcYYysvLsXXrVgBAdXU1RowYYfTw8sbG5vlyzLG60/Xr17Fp0yYwxjB27Fga9kmIldFoNNBqtXqPcRwHuVyu95hYLG73b+Fvv/2GiooKHDlyBCNHjuSlh+r169dx9OhRAM1tvaSkpA63j/OagCi3ZIgFMjgIO57LNdlvNmqUJXASuesNwRQKHJAa9Aia1HVwE/sBADRMDca0uFl9FLn1FwEwVCmK4CTygK9j8yIqKq0C16sOAQDSq08g2e8B3T4b1TU4UvgV1EyJQT4z4e/Uy9i3gnc//vgjKisrUV5ejgULFvAdDiF6xo4di/DwcNTV1UEikSAqKgoSiYTvsIiZ3F0bkMlkHWxJuoqKZTYgOjoax48f133PcRx69+7d5rZarRYVFRXw9PTUzckRFBQEb29v1NXV8ToPR1BQEKqqqhAYGGjQ9hKJxOAEH+guQ6B76yTBcRwGhjbf+SuoasSStWeQUVYPF4kQKk1zgtEwhqyyer3Xjenji29P5iLU0xHhXvq92o5mlAMArhXXol6hhpvMdoZ2FRcX49q1axCJRJBKpXBzc+M7JEJ0HBwcIBKJoFa3XlDD2dkZXl5euoaBoXOYTZs2Tbe6b0cOHDiAc+fOYezYsQbfaT137pwuntOnT1OxjBAr4+DggJCQEBQUFOjljvZ6tzc0NECr1cLF5fcbb/Hx8SguLkbfvn0hEvHTbPbx8YFQKARjDH5+fp1uz3GcwUMgBZwAHpKANp+TCJ10PcAyak7hZtVvYGCQCJwA/P4hrV5dCV80F8tEnBje0jBUyPPg76hfDKtVlkHNlACACkW+TRXLtFotjh49qhuiGxISwnNEhLQmEAgQHR3NdxidMrYtZ0pydT0a1TXwkATycnxT8/T0RElJiUF/G4jxqFhmAyIiIjBjxgzs378fCoUCvXv3xtSpU9vcdvPmzbh27RrCwsJ0KzlJpVKsWLECjDFek8KsWbOQkpLC23ClV7ZcRnZ5AwCgXqGBgAO0d9p68wbpN3pGRHvj6uuTIBRwrd6z/zc1Bv/dfwuT+vvbVKEMAPbs2YPc3FwEBQVh6dKlepMcE8I3Z2dnTJgwAbt372713MCBA1FaWopvvvkGMpkMjz76KJycOh/GY+hw4+PHj0Oj0eD48eMGF8tCQ0ORkZEBAFa74qataGpqwrVr1xAdHU1FfGJS8+fPx7Zt25CbmwtHR0fcf//9bfZQLS4uxpdffgmtVouHH34YERHNxZ/k5GQMGjSI1/aTn58fnn/+eTDGOl0d3Byq5EW4UXVE971C26D7v4gTw1/2+80IjuMwxG8uGLStFgXwkYUjxDkOcnU9Ilw77h1nbfLz83Hw4EEAwIIFC9CnTx+eIyKEX4wxaDQao28ilDflIa1sGxgDknynwUcWYaYIW1NrlThc9D+otAr09xzXagh5C8YYihtvgjGGQKe+VltU4zgOjz32GBobG+HqSovRmQMVywwwffp0XLhwAaWlpfDw8MD48ePx1ltvGdxDyhQMXYY8Ly8PAHR3Ue++uPm+0DmOM+t8aQ0KNaQOwnaHRWaU1kNz504GA8AY8M+ZsfBzlWJc39YNZ1E785GNjPbGyGh+5n3rrpiYGBQXFyM2NpYKZXbMGnJWV7U3zPLMmTMQCASQy+WQy+XIz883aU/ZESNGIC0tDcOHDzf4NSNHjoS3tzcUCgViY2NNFktHTmVX4NGvz6JfgAu+f2xou3nK1uzcuRNXr16Fn58fli1bxnc4xIT4zkdOTk5YuHBhp9vdvn1bNzF2UVGRrlgG8N9+AmDQzYGu0jIttEwNkaDthQ0a1JV633MQwN+xN3xkYfCRhUMm0v+QxnEcOLRuYwg5EeK9J5sucAvy9fWFj48PtFotrRpoh/jOU7ZGq9Xiq6++QkFBAaZPn27QZ9QWN6t/g0rbPJ3Q9aojFi2WMaaFWqsCAKi07U/PUdx4E+fKtje/BtoO537km0gkokKZGVGxzABjxozBX/7yFwQEBKCwsBAvvfQS5syZozc00lpMmzYNp06dQkJCglU07izltW2X8d2pPAS4SfHD40MR5tW6UTksygs/XSiElgFCAYcILyc8NDjUpO8TYwwXL15EWVkZBg0aZHWTvw4ePBiDBw/mOwxiZraUs+4VFhaGQYMG4ezZs3qP9+3bFwkJCcjMzISjo2Oni4QYa8yYMUZP3s1xHPr162fSODpz8GYZ6hVqnMmpQkmdAkFtDD+3RS3D3qjBZ39sJR/1798f+fn5UKlUPWrS61plKU7e3giltgnRbkPR16P1cHJ3SSA4cGBoueGoRaBTHwQ4tT0lSFdVV1fj7Nmz8PLysrp2rEwmw/Lly/kOg5iJreQpa9HY2Ij8/HwAzYugGFMskwldUYViAICjyLI9yR2EUowIeAi1ynIEOZuu/VZXVwepVEqrrtshjt09MxwxyM8//4yZM2dCoVC0e1EoFAq9Sfhra2sREhKCmpqaHvFhoKKiArt27YKLiwumTJlidPJgjOF8fjVCPR3h7dzxvGUFVY0Y+XZz13gOQG8/Z4zv54fnx/fW63VRr1Djbz9dwYmsCkT5OGPVrDi9FTA7cvhWGb44moUnR0d12Kvs+vXr2LhxIziOg7u7O5599lmD9m+Namtr4ebm1mN+Z+2ZITnrbnz/7BljKCwsRE1NDfz9/SGVSuHo6GhVH5z4UlTdhH/svIaYQFc8PcZ25vvpiEKhwPHjx+Hs7IzExMQ2e73y/TtJTIfaUJ377bffkJ6ejlGjRqFXL+Ovc4WmAY2qGrhLAjrNmxfKd6Og/ipa5iDzd+yFKLfB8JDo96gpaczE9aoj0DIVwl2TEGngMEqNVo0rlfsAcIjzGt9qaObdPv74Y1RUVIAxhlmzZiEuLs6gY1gbyle2z9h2E2A9P/eioiKsX78eYWFhmDNnjtnaTocPH0Z2djYmTpxoVA88lUaOjJpTYGCIdhuit7CItWCMoajhOhgYgpxiOnwPf/31V5w4cQIymQyPPfaYVa+Obi2/o7aEepYZqbKyEuvWrcPw4cM7TJ6rVq3CG2+8YcHIrMvhw4eRlZUFoHleH2Pu0irVWryx4yrWncqDt7MYJ18Z1+FQI5GQg0TIQaVl0DLgZkk9bpbUIz7EHRNjfl/dylkiwn/mJXTpfN7fdwvn86uhVGs7LJbV1tYCaE6ydXV1vM8TR4ghOautD6Z84jgOwcHBNNSlDYHuMqxe+PuHVLlKA4lIYNN55vTp0zhy5AgEAgESEhJoiLgdozZU5yoqKnDgwAEAzR/YX3zxRaNeX6cow7Hb30PNFIjzmoAwl4QOtxdxYtw9Wf/txnQ0qKqQErRUbzs/xyj4OXa8UEpbKhUFyK+/DAAIdo6Bl7T9ifFb2k0t/yeED4bmKWtrO7U4duwYGhoacO3aNWi1WrP9TU1JSUFKSorRr3MQStHP0/jXWRLHcQhyjjFo29OnTwNonnv16tWrtNiTnbGPyU4s4M9//jOcnJzg5eWFvLw8/PTTTx1u/+qrr6Kmpkb31dJVtafw8vJq8/+GeGpdGtadap57rV6uRkddH7PLG5DyziEoNAyDwz1xf2xzccxByCG8jaGYLW7XyFFaJ2/3+Xs9PioS/QNdsXREx+Pq4+PjERUVBRcXF0ydOtWmP8AS22ZMzlq1ahXc3Nx0Xz1lla+KigpcuXIFSqWS71C65LtTuei38hc8sPo4VBqtUa9VKpVoaGjofEMLCA4OhkgkQkhICG+rDRLzojaU4ZycnHQrgRs7z2uVogiHi7+CmjV/gFdq2p+TBwDSSn9GTt05OAhkCHTsB6mwefEAF7FPu6/RaFVoUFVBw1qvWtwWD0kg/GRR8JNFw13s3+G2U6dOhYuLCyIiIgxamIUQUzI2T1lr2ykzMxMA0KdPH5MXypRKJerr6026T1sXHh4OoLnARos92Z8eOwzzlVdewVtvvdXhNtevX9dNIF1eXo7Kykrk5ubijTfegJubG3bs2GFwMaSndXtkjCEzMxNOTk4ICGh7SfK2qDRa9Hrt95Xwwjwdcfjl9ucR+tcv1/HJ4eYebK/e1xdHM8pxLKMcz43rhWfHNc+lUVzThO9P5yPKxwnTBgTgla1XsPFsc8P78VER+Ov9ht056Gl62u+stTNnzuqJQ57q6+vxwQcfQKVSISoqCosWLeI7JKPN/+wETmU3T7x9+KXUNudqbEtRURG++uorqFQqTJgwwahFDcxFq9U2Twrezt9UykfWhdpQ5lVTU4OioiJERUVBLG570v22XK88gszaU7rvE72nI9C57VUbtUyLXbn/BgAIIESy3wM4U7INYqEMIwMWQSpyvjMU6QbqVRUIdRkAhaYRp0o2QaWVQyJ0wjC/+XAWG3dDtCfoab+v1srcecpa207Hjx/H9evXMXXqVPj5+ZlsvxUVFfj888+hUCgwY8YMo+Yps2dqtRoZGRnw9PRsd5EqU5LL5fjxxx8BAHPmzIFUKjX4tZSbjNdjb+G++OKLWLJkSYfb3D2BtLe3N7y9vdG7d2/069cPISEhOHnyJIYNG2bmSG0Tx3GIjo42+nW7LhfrfT+6V/t3NwFgZkIQdlwqRqCbFOP6+GLV7hsAgJ8vFeuKZQu/OIXsigYwBqSX1usKZQDw+W/ZmJEQhNhAy04wSYixzJmzJBKJridDT9HQ0ACVqnlFpMrKyk62Nr/SWjme23gBtU0q/GvWAMQGdZ6TnkqJQkmtHMOjvBHqadj8iwBw8eJFqNXNvUJOnTplFcUygYA6utsSakOZV0tPFWNomRaFDdd03ws4Edwl7ffkEnAChDkPRHHjTfT3HIOC+qvQQg25pg5ViiIEiHqjuPEWzpfvAMChsOE6xAIZVNrmXvkKTQOuVR3GYL9ZXTpHQszN3HnKWttOw4cPN8vf9ZycHF1x8MaNG90ullXJC1GrKkOwcyyEnO2WJEQikUlXZ+9MRkaGrvdgRkaGxVZj76ls9zezm3x8fODj03Ehpj1abfNwl7vvJhDTyCxrHhbk6STGyxP7YE5Sx3MW9fV3xdE/jQUAaLQM4/r64mhGOR65M1ySMYb8qkYwBnAckFvRethRbZPKxGdBiOlRzjItX19fjB07FtnZ2Rg9ejTf4eCLo9k4mVUBBuAfu67hh8c7LyKk9vHFoT7G38UMDw/XzbFh6lVFSc9A+cj6aJkaSk0jACDQsS+i3YfC0aHjgluc93jEYTwAQCJ0QkljFmQiV3hJQwEAjarqO1syNKlrAaF+DxuVtuNhnoTwifKUafXp0wenTp1CXV0dkpOTu7UvjVaFE7c3QAsN1FoVoty6t7+eJCIiAkFBQQCoDWcJPbZYZqhTp07hzJkzGDlyJDw8PJCZmYn/9//+H6KiouiOqBksT41CqKcjksM9DB5S1EIo4PDlYv1ky3EcXrs/Bqt2X0eYlxOeG98bJ7MqUVbf/Mcv1EOGxFAPk8VPCN8oZxmG4ziMGjXKaiZi9XOVQsuaV/QNcDXvylD9+vXDY489hoaGhi71ACbEUJSPLEckEGN4wENoVNcgwLG30XOmesvCMDlMfwXvEJdYFDZcR4O6En3dR0PACe+sbNks3IXmFSO2j/KUYZydnbF8+XKT7IvjhJCJXNGgroKTg7tJ9tlTODk54bHHHuM7jB6DimWdcHR0xJYtW7By5Uo0NDQgICAAkydPxmuvvWaVXW9tndRB2GlvMmMtHh6OxcPDdd/veW40vjqeDZFAgCUjwiF1oJXXiP2gnGWblgwPh9RBgFq5Gg8PNf8EsS13JQkxJ8pHluUu8e9w6KWxJEInpAQt0XtMJnJFWWM2/Jx6wUdGk1kT20d5yvIEnACjg5ZArVVAIjSucwQhltRjJ/i3NJpQj9ga+p3tuehnT6wN/U72bPTzJ7aEfl97Jvq5E2tHv6PGoxl1CSGEEEIIIYQQQgi5g4plhBBCCCGEEEIIIYTcQcUyQgghhBBCCCGEEELuoGIZIYQQQgghhBBCCCF3ULGMEEIIIYQQQgghhJA7qFhGCCGEEEIIIYQQQsgdIr4D6CkYYwCal2wlxBa0/K62/O6SnoPyFbE2lI96NspJxJZQvuqZKE8Ra0e5yXhULLOQuro6AEBISAjPkRBinLq6Ori5ufEdBrEgylfEWlE+6pkoJxFbRPmqZ6E8RWwF5SbDcYxKixah1WpRVFQEFxcXcBxn1mPV1tYiJCQE+fn5cHV1NeuxrA2du+nOnTGGuro6BAYGQiCgEds9CeUry6BzN/zcKR/1bJbKSXRN0rlT+4l0FeUpy+jJ59/dc6fcZDzqWWYhAoEAwcHBFj2mq6trj0siLejcTXPudNehZ6J8ZVl07oadO+WjnsvSOYmuSTr37qJ81fNQnrKsnnz+3Tl3yk3GoZIiIYQQQgghhBBCCCF3ULGMEEIIIYQQQgghhJA7qFhmhyQSCVauXAmJRMJ3KBZH594zz53Yrp78e0vn3jPPnVivnvx7SefeM8+d2J6e/vvak8+/J587X2iCf0IIIYQQQgghhBBC7qCeZYQQQgghhBBCCCGE3EHFMkIIIYQQQgghhBBC7qBiGSGEEEIIIYQQQgghd1CxjBBCCCGEEEIIIYSQO6hYZsdycnLw6KOPIiIiAjKZDFFRUVi5ciWUSiXfoZnFxx9/jPDwcEilUgwZMgSnT5/mOySzW7VqFZKTk+Hi4gJfX1/MnDkTN2/e5DssQoxG+cr+8xVAOYvYDspJ9p+TKB8RW0d5yv7zFEC5ik9ULLNjN27cgFarxaeffoqrV6/ivffewyeffIK//OUvfIdmchs2bMALL7yAlStX4ty5c4iPj8ekSZNQWlrKd2hmdfjwYaxYsQInT57E3r17oVKpMHHiRDQ0NPAdGiFGoXxl//kKoJxFbAflJPvPSZSPiK2jPGX/eQqgXMUnjjHG+A6CWM4777yDNWvWICsri+9QTGrIkCFITk7GRx99BADQarUICQnBM888g1deeYXn6CynrKwMvr6+OHz4MEaPHs13OIR0C+Ur+0c5i9gSykn2jfIRsQeUp+wf5SrLoZ5lPUxNTQ08PT35DsOklEol0tLSMH78eN1jAoEA48ePx4kTJ3iMzPJqamoAwO5+xqRnonxl/yhnEVtCOcm+UT4i9oDylP2jXGU5VCzrQTIyMvDhhx/iySef5DsUkyovL4dGo4Gfn5/e435+frh9+zZPUVmeVqvFc889hxEjRiA2NpbvcAjpFspX9o9yFrEllJPsG+UjYg8oT9k/ylWWRcUyG/TKK6+A47gOv27cuKH3msLCQkyePBlz587F448/zlPkxJxWrFiBK1eu4IcffuA7FEJ0KF+R9lDOInygnETaQvmIWBPKU6Q9lKssS8R3AMR4L774IpYsWdLhNpGRkbr/FxUVYcyYMRg+fDg+++wzM0dned7e3hAKhSgpKdF7vKSkBP7+/jxFZVlPP/00duzYgSNHjiA4OJjvcAjRoXylj/JVM8pZhC+Uk/RRTqJ8RKwP5Sl9lKeaUa6yPCqW2SAfHx/4+PgYtG1hYSHGjBmDpKQkrF27FgKB/XUmFIvFSEpKwv79+zFz5kwAzV1U9+/fj6effprf4MyMMYZnnnkGW7duxaFDhxAREcF3SITooXylryfnK4ByFuEf5SR9PTknUT4i1orylL6enKcAylV8omKZHSssLERqairCwsLw7rvvoqysTPecvVXhX3jhBSxevBiDBg3C4MGD8f7776OhoQFLly7lOzSzWrFiBdavX4+ffvoJLi4uunH7bm5ukMlkPEdHiOEoX9l/vgIoZxHbQTnJ/nMS5SNi6yhP2X+eAihX8YoRu7V27VoGoM0ve/Thhx+y0NBQJhaL2eDBg9nJkyf5Dsns2vv5rl27lu/QCDEK5Sv7z1eMUc4itoNykv3nJMpHxNZRnrL/PMUY5So+cYwxZvoSHCGEEEIIIYQQQgghtsf+BjUTQgghhBBCCCGEENJFVCwjhBBCCCGEEEIIIeQOKpYRQgghhBBCCCGEEHIHFcsIIYQQQgghhBBCCLmDimWEEEIIIYQQQgghhNxBxTJCCCGEEEIIIYQQQu6gYhkhhBBCCCGEEEIIIXdQsYwQQgghhBBCCCGEkDuoWEYIIYQQQgghhBBCyB1ULCOEEEIIIYQQQggh5A4qlhGbFRsbi3/84x9YtmwZPDw84O/vj/fff5/vsAghBADlKEKI9aL8RAixVpSfiLXgGGOM7yAIMZZCoYCzszMiIiLwxhtvIDk5GWvWrMFHH32EyspKODk58R0iIaQHoxxFCLFWlJ8IIdaK8hOxJlQsIzYpLS0NgwYNwu7duzF58mQAwOXLlzFgwACUlpbCx8eH5wgJIT0Z5ShCiLWi/EQIsVaUn4g1oWGYxCZdvHgR/v7+mDRpku6xsrIyiMVieHp68hgZIYRQjiKEWC/KT4QQa0X5iVgTKpYRm3ThwgUMGjQIHMfpPRYbGwuhUMhjZIQQQjmKEGK9KD8RQqwV5SdiTahYRmzSxYsXkZCQoPfYhQsXWj1GCCF8oBxFCLFWlJ8IIdaK8hOxJlQsIzaprUR6/vx5SqSEEKtAOYoQYq0oPxFCrBXlJ2JNqFhGbE5OTg5qamr0kqZCocCNGzcwcOBA/gIjhBBQjiKEWC/KT4QQa0X5iVgbEd8BEGKs8PBw3LuI65UrV6DRaBAfH89TVIQQ0oxyFCHEWlF+IoRYK8pPxNpQzzJiF86fP4/IyEi4uLjwHQohhLRCOYoQYq0oPxFCrBXlJ8InKpYRu0ATPxJCrBnlKEKItaL8RAixVpSfCJ84dm9fR0IIIYQQQgghhBBCeijqWUYIIYQQQgghhBBCyB1ULCOEEEIIIYQQQggh5A4qlhFCCCGEEEIIIYQQcgcVywghhBBCCCGEEEIIuYOKZYQQQgghhBBCCCGE3EHFMkIIIYQQQgghhBBC7qBiGSGEEEIIIYQQQgghd1CxjBBCCCGEEEIIIYSQO6hYRgghhBBCCCGEEELIHVQsI4QQQgghhBBCCCHkDiqWEUIIIYQQQgghhBByBxXLCCGEEEIIIYQQQgi5g4plhBBCCCGEEEIIIYTcQcUyQgghhBBCCCGEEELuoGIZIYQQQgghhBBCCCF3ULGMEEIIIYQQQgghhJA7qFhGuu31118Hx3F8h0EIaQNdnz3Txo0b4enpifr6er5D0VmyZAnCw8O79NrU1FSkpqaaNB4+cRyH119/3ajXLFiwAPPmzTNPQIQ3lKMJsU50bfZMb7/9Nvr27QutVst3KDrdaQOFh4djyZIlJo2HLzk5OeA4Dl999ZVRrxs6dCj+9Kc/demYVCzjUXZ2Np5++mn07t0bjo6OcHR0RExMDFasWIFLly61+Zo//elP4DgO8+fP13uc4ziDvg4dOmSBM+PPl19+iX79+kEqlaJXr1748MMPW22zdetWTJo0CYGBgZBIJAgODsacOXNw5coVHiLuXH19PZ577jkEBwdDIpGgX79+WLNmTZvbVldX44knnoCPjw+cnJwwZswYnDt3rs1tf/75ZyQmJkIqlSI0NBQrV66EWq0256nYjK5cmwBdn52h69My16dGo8HKlSvxzDPPwNnZucvnRqzLn//8Z2zevBkXL17kOxSrQG0o0zMkR4eHh7f7/vTq1YuHqDtWUlKCpUuXwtfXFzKZDImJidi0aVOb2xYWFmLevHlwd3eHq6srZsyYgaysrDa3NeS96omo/WQedG1a5tqsra3FW2+9hT//+c8QCKhMYi/+/Oc/4+OPP8bt27eNfi3HGGNmiIl0YseOHZg/fz5EIhEWLlyI+Ph4CAQC3LhxA1u2bEFubi6ys7MRFhamew1jDKGhoRCJRCgpKUFJSQlcXFwAAN99953e/r/55hvs3bsX3377rd7jEyZMgJ+fn0nPRa1WQ61WQyqVmnS/xvr000+xbNkyzJ49G5MmTcJvv/2Gb7/9Fv/617/w5z//Wbfdm2++iWvXrmHgwIHw9vbG7du38b///Q/FxcU4ceIE4uPjeTwLfRqNBqNHj8bZs2exYsUK9OrVC3v27MFPP/2Ef/7zn/jLX/6i21ar1WLUqFG4ePEiXn75ZXh7e2P16tXIz89HWlqa3h/K3bt3Y8qUKUhNTcWDDz6Iy5cv4+OPP8YTTzzR7gf9nqIr1yZA12dn6Pq03PW5bds2zJo1C/n5+QgKCjLLuXfFkiVLcOjQIeTk5Bj92pY7qvbygYjjOKxcudLo3mVDhgxBnz598M0335gnMBtBbSjTMzRHb9u2rVWP1dzcXLz22mtYvnw5Pv74Y0uH3q7a2lokJSWhpKQEf/zjH+Hv74+NGzfiyJEjWLduHR566CHdtvX19UhMTERNTQ1efPFFODg44L333gNjDBcuXICXl5duW0Pfq56G2k/mQdem5a7N999/HytXrkRJSQnvP/e7dacNFB4ejtTUVKN7Y1mjnJwcREREYO3atUb1ltNqtQgKCsLjjz+ON99807iDMmJxGRkZzMnJifXr148VFRW1el6lUrH//ve/LC8vT+/xAwcOMADswIEDzMHBgX311VftHmPFihXMkB9vQ0OD8SdwR319fZdfa2qNjY3My8uLTZkyRe/xhQsXMicnJ1ZZWdnh62/fvs1EIhF78sknzRmm0TZu3MgAsC+//FLv8dmzZzOpVMpKSkp0j23YsIEBYJs2bdI9Vlpaytzd3dmDDz6o9/qYmBgWHx/PVCqV7rG//vWvjOM4dv36dTOdjfXr6rXJGF2fHaHr07LX5/Tp09nIkSO7elpms3jxYhYWFtal16akpLCUlBSTxmNOnV1/ANjKlSuN3u+7777LnJycWF1dXRcjs33UhjK97ubov//97wwAO3bsmDnDNNrbb7/NALD9+/frHtNoNCw5OZn5+/szhUKhe/ytt95iANjp06d1j12/fp0JhUL26quv6h7r7ntlr6j9ZB50bVr22hwwYABbtGhRd07NLLrTBgoLC2OLFy82aTzm1NG1m52dzQCwtWvXGr3fp59+moWFhTGtVmvU66hYxoMnnniCAWAnT5406nWPPvooi4mJYYwxdt9997EJEya0u21bf0xSUlJY//792dmzZ9moUaOYTCZjf/zjHw069sqVKxkAdvXqVfbggw8yd3d3lpCQoPfc3QCwFStWsK1bt7L+/fszsVjMYmJi2O7du3XbbNq0iQFghw4danW8Tz75hAFgly9fNii+nTt3MgBs586deo8fP36cAWDffvtth6/XarXM1dWVzZ8/36DjtWh5Ty9evMhGjx7NZDIZi4qK0n0gPnToEBs8eDCTSqWsd+/ebO/evUbt/5lnnmEAWiWOlvfus88+0z02d+5c5ufnxzQajd62TzzxBHN0dGRyuZwxxtjVq1cZAPbxxx/rbVdYWMgAsL///e9GxWhPunptMkbXZ0fo+rTc9dnU1MTEYjF7/fXXWz3X8nPfuHEj69evH5NKpWzo0KHs0qVLjLHmn2tUVBSTSCQsJSWFZWdnt9rHxo0bWWJiIpNKpczLy4stXLiQFRQUtNqu5XdLIpGw/v37sy1btrRZLNNoNOy9995jMTExTCKRMF9fX/bEE0+0atQa01D89ttvWXJyMpPJZMzd3Z2NGjWK7dmzR2+bjz/+mMXExDCxWMwCAgLY8uXLWVVVVZfOd/HixczJyYllZGSw++67jzk7O7MZM2YwxhiTy+XsueeeY97e3szZ2ZlNmzaN5efntyqW1dbWsj/+8Y8sLCyMicVi5uPjw8aPH8/S0tL0jnXx4kUGgG3ZssWg98IeURuqmTXl6H79+rGIiAiDjnW3sLAwNmXKFHbw4EGWlJTEpFIpi42NZQcPHmSMMbZ582YWGxvLJBIJS0xMZOfOnTNq/9OmTWM+Pj6tHn/nnXcYAPbrr7/qHktOTmbJycmttp04cSKLiorSfd/d98peUfuJrk1jWOO1mZWVxQC0Kta2FGjeeecd9tFHH7GIiAgmk8nYhAkTWF5eHtNqtezNN99kQUFBTCqVsunTp7OKiopW+ze03fHpp5+yyMhIJpVKWXJyMjty5EibbSC5XM7+9re/saioKCYWi1lwcDB7+eWXde3JFoYWyzQaDXv//fd1P1dvb282adIkdubMGd02KpWKvfnmmywyMpKJxWIWFhbGXn311VbHNPR8O7p2q6qq2OLFi5mrqytzc3Njf/jDH9j58+dbFcuKi4vZkiVLWFBQEBOLxczf359Nnz69VRv2p59+YgCM/l2lwbg82LFjB6KjozFkyBCDX6NQKLB582Y8+OCDAIAHH3wQBw4cMHrsbUVFBe677z4kJCTg/fffx5gxY4x6/dy5c9HY2Ij/+7//w+OPP97htkePHsXy5cuxYMECvP3225DL5Zg9ezYqKioAAFOmTIGzszM2btzY6rUbNmxA//79ERsba1Bc58+fBwAMGjRI7/GkpCQIBALd83errq5GWVkZLl++jMceewy1tbUYN26cQce7W1VVFaZOnYohQ4bg7bffhkQiwYIFC7BhwwYsWLAA999/P/71r3+hoaEBc+bMQV1dncH7VigUEAqFEIvFeo87OjoCANLS0nSPnT9/HomJia3G2A8ePBiNjY24deuWbjug9XsVGBiI4ODgNt+rnqIr1yZA12dn6Pq03PWZlpYGpVKJxMTENp//7bff8OKLL2Lx4sV4/fXXcf36dUydOhUff/wxPvjgAyxfvhwvv/wyTpw4gUceeUTvtV999RXmzZsHoVCIVatW4fHHH8eWLVswcuRIVFdX67b79ddfMXv2bHAch1WrVmHmzJlYunQpzp492yqeJ598Ei+//DJGjBiB//73v1i6dCnWrVuHSZMmQaVSdXiubXnjjTfw8MMPw8HBAW+++SbeeOMNhISE4MCBA7ptXn/9daxYsQKBgYH497//jdmzZ+PTTz/FxIkT9Y5p6PkCzcN1Jk2aBF9fX7z77ruYPXs2AOCxxx7D+++/j4kTJ+Jf//oXHBwcMGXKlFZxL1u2DGvWrMHs2bOxevVqvPTSS5DJZLh+/bredjExMZDJZDh27JjR7429oDaUdeTou197/fp1vWFTxsjIyMBDDz2EadOmYdWqVaiqqsK0adOwbt06PP/881i0aBHeeOMNZGZmYt68eUZNuq1QKCCTyVo9fm+O1mq1uHTpUqvzB5pzdGZmpu5vQ3feK3tG7Se6Nm392jx+/DgAtNt+WrduHVavXo1nnnkGL774Ig4fPox58+bhtddewy+//II///nPeOKJJ7B9+3a89NJLeq81tN3x5Zdf4sknn4S/vz/efvttjBgxAtOnT0d+fr7e/rRaLaZPn453330X06ZNw4cffoiZM2fivffeazXvn6EeffRRPPfccwgJCcFbb72FV155BVKpFCdPntRt89hjj+Fvf/sbEhMT8d577yElJQWrVq3CggULunS+QNvXLmMMM2bMwLfffotFixbhH//4BwoKCrB48eJWcc+ePRtbt27F0qVLsXr1ajz77LOoq6tDXl6e3nZJSUkAYHz7yajSGum2mpoaBoDNnDmz1XNVVVWsrKxM99XY2Kh77scff2QAWHp6OmOs+S60VCpl7733XpvHae/OCwD2ySefGB13y92Ve4cL3f3c3QAwsVjMMjIydI+13BH/8MMPdY89+OCDzNfXl6nVat1jxcXFTCAQsDfffNPg+FasWMGEQmGbz/n4+LAFCxa0erxPnz4MAAPAnJ2d2Wuvvdaq10dnWt7T9evX6x67ceMGA8AEAoHeHbY9e/YY3XX03//+NwPAfvvtN73HX3nlFQaATZ06VfeYk5MTe+SRR1rto+VOyy+//MIY+/2uTVtd4ZOTk9nQoUMNjs+edPXaZIyuz87Q9Wm56/OLL75o9641ACaRSPTutn366acMAPP392e1tbW6x1999VUGQLetUqlkvr6+LDY2ljU1Nem227FjBwPA/va3v+keS0hIYAEBAay6ulr32K+//soA6PUs++233xgAtm7dOr04f/nll1aPG9KzLD09nQkEAvbAAw+0+l1p6XZfWlrKxGIxmzhxot42H330EQPA/ve//xl9vosXL2YA2CuvvKJ3zAsXLjAAbPny5XqPP/TQQ616lrm5ubEVK1Z0eH4tevfuze677z6DtrU31Iaynhzd4sUXX2QA2LVr1ww+XouwsDAGgB0/flz3WEsulslkLDc3V/d4S65q6dliiGeeeYYJBAKWk5Oj9/iCBQsYAPb0008zxhgrKytjANp8zz7++GMGgN24cYMx1r33yl5R+4muTXu4Nl977TUGoNU0By09y3x8fPTaNS3tpHunzXjwwQeZWCzW9bYytt2RkJCgNwz1s88+YwD02kDffvstEwgErdqfLT0X7x52a0jPspah0M8++2yr51raTy1tmscee0zv+ZdeeokBzcOojTlfxtq/drdt28YAsLffflv3mFqtZqNGjdJrq1dVVel6/RlCLBazp556yqBtW1DPMgurra0FgDZXKEtNTYWPj4/u6+6JGNetW4dBgwYhOjoaAODi4oIpU6Zg3bp1Rh1fIpFg6dKlXY5/2bJlBm87fvx4REVF6b4fMGAAXF1d9VYvmT9/PkpLS/UmLPzxxx+h1WqNqow3NTW16t3RQiqVoqmpqdXja9euxS+//ILVq1ejX79+aGpqgkajMfiYLZydnfUq6n369IG7uzv69eund4et5f/trd7Sloceeghubm545JFHsHfvXuTk5OCzzz7D6tWrAUDvvJqamiCRSFrto2WCypZtW/5tb9u23queoKvXJkDXZ2fo+rTc9dlyZ9vDw6PN58eNG4fw8HDd9y3nPXv2bN2Eync/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k782hJkJj1JtLSNYF41BI9JFXKq8vBxwbln3ZXq9nr59+5KVlUXfvn3JyclpLIQiuIcvtE3e6id5ikpquvihpRWyviQmJoaqqiq35lk0mUysWrWK0NBQFi1a5NKdCmvXrqWurg6NRtNYfVPohpRu4L333lNSU1MVs9msREVFKb///e8VWZYVRVGUrKws5eWXX1YCAwOVXbt2eSSecePGKU899VTj1w6HQ+nRo4fy2muvtet8o9GoAIrRaGz1uOyqLOVMeXqXYhVcx263K7t371ZOnDjh7VDaRZZlJTMzU3n11VeV1157TbFarW2e096fTaF1vtRmWSwWRa1WK6tWrWry+v33368sXry42XPMZrNiNBob/+Xm5nb658LmsDV+753xZuobypgPhiqjP0hRRn+Qopjt5k5fS2hq+fLlyquvvqp89tln3g6lWaI96jpfaosadKUP1d6fCbtsU0rrshWbw9LleAXXyMvLU7Zt26ZUV1d7O5R2kWVZeffdd5VXX31V2blzZ7vOEW1W+/lS2+SNfpIsO5QzlbuVjMq9XeojdURJXZZyqmKHkl9zymP37Aq73a7k5eUpNpvNbffYtWuX8uqrryqvvvqqUlBQ4LLrZmZmKu+//77yl7/8RTl37pzLrttVoo3quG6xsuxPf/oTGRkZAMiyzIEDB3jjjTcYOXIkI0aM4He/+x2JiYm8+OKL7N69262xWK1WUlNTeeWVVxpfU6lUzJ49mz179jR7jsViabLVpSEnWFuSQnp1KdbmHC5J459pfycuoAf/M/4VArQBLr/H1UqtVnerhI2SJDVuo23IpyR4hi+1WWVlZTgcjivy/cXExJCent7sOa+99hq/+MUvXHJ/japrf2Ymxk/mg+PvoSgKY2LHoVfrXRJXd3Ls2DG+++47Ro0axcyZM11yzdOnTyPLMkOHDvV4cQTBc3ypLYKO96E6239SSxoi/doudtERsuLgVMV2qqxF9AkZS6x/v7ZPEhp1t5W3DYVQgMaPguv4UtvkjX5SuTmX01U/ABBuiCfckNDpa7VXlF8vovx6uf0+rqJWq93eZgwcOJAjR44QGhrqshVsNpuNTz75BIfDwdixY5tUTRe6n26Rs+zkyZNUV1eze/dutFotKpWKlStXcsMNNxAeHk7v3r1ZtWoVqampfPPNN2RnZ7stltYa1KKiombPee211wgJ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QlwjlWVCCCGEEEIIIYQQQlwjlWWixl544QU0Go2twxBClEGuz8Zp9erV+Pr6kpWVZetQzO6++25atGhRrc8OHjyYwYMHWzUeW9JoNLzwwgsWfWb69OlMnTq1dgISNiM5Wgj7JNdm4/Taa6/Rrl07TCaTrUMxq0kZqEWLFtx9991WjcdWzp07h0aj4eOPP7boc3369OGpp56q1j6lssyGzp49y8MPP0ybNm1wdXXF1dWVyMhI5s6dy+HDh8v8zFNPPYVGo2HatGkllms0miq9Nm/eXAdHZjvLli2jffv2ODs707p1axYuXFhqnXXr1jFy5EiCgoJwcnIiJCSEyZMnEx0dbYOIK5eVlcW8efMICQnBycmJ9u3bs2TJkjLXTUtL48EHH8Tf3x83NzeGDBnC/v37y1z322+/pXv37jg7O9O8eXOef/55DAZDbR5KvVGdaxPk+qyMXJ91c30ajUaef/55HnnkEdzd3at9bMK+PP3003z99dccOnTI1qHYBSlDWV9VcnSLFi3K/X5at25tg6grlpCQwD333ENAQAAuLi50796dNWvWlLlufHw8U6dOxdvbG09PTyZMmMCZM2fKXLcq31VjJOWn2iHXZt1cmxkZGbz66qs8/fTTaLVSTdJQPP300yxatIgrV65Y/FmNUkrVQkyiEt9//z3Tpk3DwcGBO+64gy5duqDVajlx4gRr167l/PnznD17lrCwMPNnlFI0b94cBwcHEhISSEhIwMPDA4DPP/+8xPY//fRTNm7cyGeffVZi+fDhw2natKlVj8VgMGAwGHB2drbqdi21dOlSZs2axaRJkxg5ciTbtm3js88+45VXXuHpp582r/fSSy9x7NgxunXrRpMmTbhy5QofffQRly9fZseOHXTp0sWGR1GS0Whk4MCB7N27l7lz59K6dWt+/vln1q9fz8svv8w//vEP87omk4kBAwZw6NAh5s+fT5MmTVi8eDFxcXHs27evxB/KDRs2MGbMGAYPHsxtt93GkSNHWLRoEQ8++GC5N/qNRXWuTZDrszJyfdbd9fnNN99w6623EhcXR3BwcK0ce3XcfffdbN68mXPnzln82eInqg3lhkij0fD8889b3Lqsd+/etG3blk8//bR2AqsnpAxlfVXN0d98802pFqvnz5/nueeeY86cOSxatKiuQy9XRkYGUVFRJCQk8Nhjj9GsWTNW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89mxYwf33ntvic9+/PHHTJ06FZ1Ox4IFC3jggQdYu3YtN910E2lpaeb1fvnlFyZNmoRGo2HBggVMnDiRe+65h71795aK56GHHmL+/Pn079+fd955h3vuuYcVK1YwcuRICgsLKzzWsrz44ovceeedODo68tJLL/Hiiy8SGhrKb7/9Zl7nhRdeYO7cuQQFBfHmm28yadIkli5dyogRI0rss6rHC0XddUaOHElAQABvvPEGkyZNAuD+++/n7bffZsSIEbzyyis4OjoyZsyYUnHPmjWLJUuWMGnSJBYvXszf//53XFxcOH78eIn1IiMjcXFx4c8//7T4u2kopAxlHzn6+s8eP368RLcpS8TGxnL77bczbtw4FixYQGpqKuPGjWPFihU8/vjjzJgxgxdffJHTp08zdepUiwbdzs/Px8XFpdTyG3O0yWTi8OHDpY4finL06dOnzX8bavJdNWRSfpJrs75fm9u3bwcot/y0YsUKFi9ezCOPPMKTTz7Jli1bmDp1Ks899xw//fQTTz/9NA8++CDfffcdf//730t8tqrljmXLlvHQQw/RrFkzXnvtNfr378/48eOJi4srsT2TycT48eN54403GDduHAsXLmTixIm89dZbpcb9q6r77ruPefPmERoayquvvsozzzyDs7MzO3fuNK9z//33869//Yvu3bvz1ltvMWjQIBYsWMD06dOrdbxQ9rWrlGLChAl89tlnzJgxg//85z9cvHiRmTNnlop70qRJrFu3jnvuuYfFixfz6KOPkpmZyYULF0qsFxUVBWB5+cmiqjVRY+np6QpQEydOLPVeamqqSkpKMr9ycnLM73311VcKUDExMUqpoqfQzs7O6q233ipzP+U9eQHU+++/b3HcxU9XbuwudP171wOUXq9XsbGx5mXFT8QXLlxoXnbbbbepgIAAZTAYzMsuX76stFqteumll6oc39y5c5VOpyvzPX9/fzV9+vRSy9u2basABSh3d3f13HPPlWr1UZni73TlypXmZSdOnFCA0mq1JZ6w/fzzzxY3HX3zzTcVoLZt21Zi+TPPPKMANXbsWPMyNzc3de+995baRvGTlp9++kkp9ddTm7Kawvfs2VP16dOnyvE1JNW9NpWS67Mycn3W3fX54YcflvvUGlBOTk4lnrYtXbpUAapZs2YqIyPDvPzZZ59VgHndgoICFRAQoDp27Khy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WjCWUURkrlg+EZG5YvlE5oTJMmqSzpw5g+7du2PHjh0YMWIEAODSpUvo1KkT0tPT4e7ubuIIiaglYxlFROaK5RMRmSuWT2ROOAyTmqQLFy7Ay8sLw4cP127LyMiATCaDi4uLCSMjImIZRUTmi+UTEZkrlk9kTpgsoybp/Pnz6N69OyQSic62Dh06QCqVmjAyIiKWUURkvlg+EZG5YvlE5oTJMmqSLly4gMjISJ1t58+fr7KNiMgUWEYRkbli+URE5orlE5kTJsuoSaquID137hwLUiIyCyyjiMhcsXwiInPF8onMCZNl1OQkJiYiLy9Pp9AsKytDbGwsunTpYrrAiIjAMoqIzBfLJyIyVyyfyNxYmjoAIn0FBQXhwUVcL1++DJVKhc6dO5soKiKiCiyjiMhcsXwiInPF8onMDXuWUbNw7tw5hISEoFWrVqYOhYioCpZRRGSuWD4Rkbli+USmxGQZNQuc+JGIzBnLKCIyVyyfiMhcsXwiU5KIB/s6EhERERERERERtVDsWUZERERERERERHQfk2VERERERERERET3MVlGRERERERERER0H5NlRERERERERERE9zFZRkREREREREREdB+TZURERERERERERPcxWUZERERERERERHQfk2VERERERERERET3MVlGRERERERERER0H5NlRERERERERERE9zFZRkREREREREREdB+TZURERERERERERPcxWUZERERERERERHQfk2VERERERERERET3MVlGRERERERERER0H5NlRERERERERERE9zFZRkREREREREREdB+TZURERERERERERPcxWUZERERERERERHQfk2VERERERERERET3MVlGRERERERERER0H5NlRERERERERERE9zFZRkREREREREREdB+TZURERERERERERPcxWUZERERERERERHQfk2VERERERERERET3MVlGRERERERERER0H5NlRERERERERERE9zFZRkREREREREREdB+TZURERERERERERPcxWUZERERERERERHQfk2VERERERERERET3MVlGRERERERERER0H5NlRERERERERERE9zFZRkREREREREREdB+TZURERERERERERPcxWUZERERERERERHQfk2VERERERERERET3MVlGRERERERERER0H5NlRETN2HvvvQeJRGLqMKiRbdiw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p08f8dVXX4mXXnpJSCQS8cwzz+gco66NdJo6nOZ4CxYsEE5OTiIkJESnDqRSqcSwYcOEra2tWLBggVixYoWYN2+esLS01PZs16hrsmzGjBkCgBg5cqT44osvxD//+U/x6KOP6jwXaOo7EydOFN988414+umnq312quv11nTvqtVqER0dLSwsLMSLL74oli5dKgYNGqRtbKxcV+/Tp49wdHQU77zzjvj+++/FP/7xDzFw4EBx8OBBnZiSk5OrPOfUBZNljay+D+R8GK8dH8Yb72G8udIMjaqu+3Xnzp213xVN61Jl48ePF927d9fZ9thjj1XZplHT/SmXy3W6nteV5h588BdD5dcqAyAeeeSRKvs6ODiIV155Rfvv3377TQAQe/bs0W5bunSpACDi4uLqHN/MmTOFjY1Nta/5+/tX+cUuREVL4B9//CGWLVsmoqKixMKFC3V+wdZFTEyMsLe3r9Ll2snJqUplNTc3VwDQaz6De/fuCUdHR9GmTRuxa9cukZCQIFasWCEcHBwEADF48GDtvhYWFtVW9vbu3SsAiM2bNwshhPjggw+qrewJIUT//v1F586da41JM1yhuqGR1f2/axI6DyZqNP/3miESmpbZZcuWVTlu+/btRbdu3YQQQty9e7faxJEQFcO/KyfLXnrpJeHo6CjS09N1fvdlZGQIe3t78dxzz2n3rUuyTFO2nTt3rsZ91q5dKwCI7du362wvKysTDg4O4rHHHtPreoX4X+Xx9u3bOvv94x//EABEbGyszvaTJ09WSZYFBgaK7t27i5SUlFqvUQghevbsWW0re0vAOpT51KE0Fi5cKACIq1ev1vl8GoGBgQKAOHbsmHabpq5kY2Ojc09pEvuani11oZmP9cF5siZPniwAiHnz5gkhhMjIyBAAqv3MNA/vmvu4IZ9Vc8XGRt6bzeHe1CTfHpwTVJMsc3d312kE1DQqPjitzZQpU4RMJtP2ttK3kS4yMlLnWWDlypUCgE4d6KeffhIWFhZVng81PRcrD7utS7JMMxT6pZdeqvKapg6tqS9WrpsJIcRrr70mgIph1PpcrxA137uaOugnn3yi3aZUKkX//v11nqVzcnKqfS6riUwmq7YuXhsu89DI8vPzAQD29vZVXhswYADc3d21P9988432tTVr1qB79+5o3bo1AKBVq1YYNWoU1qxZo9f55XI5nnnm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2Xbu3Llq24iaAxvLyCIxkRKROWOOIiJzxfxEROaqpvx09uxZ5icyCTaWkUViIiUic8YcRUTmivmJiMxRQkIC8vLyquSisrIyXLt2DV27djVdYNRi2Zg6ACJDMZESkTljjiIic8X8RETmqnXr1hBCVNl26dIlaDQadOnSxURRUUvGxjKyOEykRGTOmKOIyFwxPxGRJTl79ixCQkLg5ORk6lCoBeIwTLIKTKREZM6Yo4jIXDE/EZG54nyKZErsWUZWgYmUiMwZcxQRmSvmJyIyV59//rmpQ6AWTCLu74tNRERERERERETUQnEYJhERERERERER0V1sLCMiIiIiIiIiIrqLjWVERERERERERER3sbGMiIiIiIiIiIjoLjaWERERERERERER3cXGMiIiIiIiIiIiorvYWEZERERERERERHQXG8uIiIiIiIiIiIjuYmMZERERERERERHRXWwsIyIiIiIiIiIiuouNZURERERERERERHexsYyIiIiIiIiIiOguNpYRERERERERERHdxcYyIiIiIiIiIiKiu9hYRkREREREREREdBcby4iIiIiIiIiIiO5iYxkREREREREREdFdbCwjIiIiIiIiIiK6i41lREREREREREREd7GxjIiIiIiIiIiI6C42lhEREREREREREd3FxjIiIiIiIiIiIqK72FhGRERERERERER0FxvLiIiIiIiIiIiI7mJjGRERERERERER0V1sLCMiIiIiIiIiIrqLjWVERERERERERER3sbGMiIiIiIiIiIjoLjaWERERERERERER3cXGMiIiIiIiIiIiorvYWEZERERERERERHQXG8uIiIiIiIiIiIjuYmMZERERERERERHRXWwsIyIiIiIiIiIiuouNZURERERERERERHexsYyIiIiIiIiIiOguNpYRERERERERERHdxcYyIiIiIiIiIiKiu9hYRkREREREREREdBcby6jR3njjDUgkElOHQUQ14P3ZMq1btw7u7u4oLCw0dSg6c+bMQevWrRt07KBBgzBo0CCjxmNKEokEb7zxhkHHTJs2DVOmTGmagMhkmKOJzBPvzZbpvffeQ4cOHaDVak0dik5j6kCtW7fGnDlzjBqPqSQkJEAikeD777836LjevXvjxRdfbNA12VhmQvHx8XjqqafQrl072Nvbw97eHhEREVi8eDEuXLhQ4zEvvvgiJBIJpk6dWmW7RCLR62f//v3NUDLT+fbbbxEeHg6lUomwsDB89tln1fbZtGkTRo4cCT8/PygUCgQEBGDSpEm4dOmSCSKuX2FhIZ599lkEBARAoVAgPDwcy5cvr3Hf3NxcPPHEE/Dy8oKDgwMGDx6MM2fO1LjvL7/8gm7dukGpVCIoKAivv/461Gp1UxbFYjTk3gR4f9aH92fz3J8ajQavv/46nn76aTg6Oja4bGReXnrpJWzYsAHnz583dShmgXUo49MnR7du3brW9ycsLMwEUdctPT0dc+fORatWrWBnZ4du3bph/fr1Ne6bnJyMKVOmwNXVFc7OznjooYdw8+bNGvfV571qiVh/ahq8N5vn3szPz8e7776Ll156CVIpm0msxUsvvYQvvvgCaWlpBh8rEUKIJoiJ6rF161ZMnToVNjY2mDlzJrp06QKpVIpr165h48aNSExMRHx8PIKDg3XHCCEQFBQEGxsbpKenIz09HU5OTgCA//73v1XOv2rVKuzatQurV6+usn348OHw9vY2alnUajXUajWUSqVRz2uoFStWYMGCBZg4cSJGjhyJQ4cOYfXq1XjnnXfw0ksv6fZ76623cOXKFXTt2hWenp5IS0vDd999h9TUVBw9ehRdunQxYSmq0mg0eOCBB3Dq1CksXrwYYWFh2LFjB7Zs2YK3334bf//733X7arVaDBgwAOfPn8cLL7wAT09PLFu2DElJSTh9+nSV/yh///13jB07FoMGDcL06dNx8eJFfPHFF3jiiSdq/aLfUjTk3gR4f9aH92fz3Z+bN2/Gww8/jKSkJPj7+zdJ2Rtizpw52L9/PxISEgw+tvKJqrV8IZJIJHj99dcN7l3Wq1cvtG/fHqtWrWqawCwE61DGp2+O3rx5c7Ueq4mJiXj11VexaNEifPHFF80deq3y8/MRHR2N9PR0/PWvf4WPjw/WrVuHgwcPYs2aNZgxY4Zu38LCQnTr1g15eXlYsmQJbG1t8dFHH0EIgXPnzsHDw0O3r77vVUvD+lPT4L3ZfPfmxx9/jNdffx3p6ekm/3e/V2PqQK1bt8agQYMM7o1ljhISEtCmTRusXLnSoN5yWq0W/v7+mD9/Pt566y3DLiqo2cXGxgoHBwcRHh4uUlJSqr1eXl4uPvnkE3Hr1q0q2/fu3SsAiL179wpbW1vx/fff13qNxYsXC33+eYuKigwvwF2FhYUNPtbYiouLhYeHhxg7dmyV7TNnzhQODg4iOzu7zuPT0tKEjY2NePLJJ5syTIOtW7dOABDffvttle0TJ04USqVSpKen67atXbtWABDr16/XbcvIyBCurq5i+vTpVY6PiIgQXbp0EeXl5bpt//jHP4REIhFXr15totKYv4bem0Lw/qwL78/mvT/Hjx8v+vfv39BiNZnZs2eL4ODgBh07cOBAMXDgQKPG05Tqu/8AiNdff93g837wwQfCwcFBFBQUNDAyy8c6lPE1Nkf/61//EgDE4cOHmzJMg7333nsCgNizZ49um0ajET169BA+Pj6irKxMt/3dd98VAMSJEyd0265evSpkMpl45ZVXdNsa+15ZK9afmgbvzea9Nzt37iweeeSRxhStSTSmDhQcHCxmz55t1HiaUl33bnx8vAAgVq5cafB5n3rqKREcHCy0Wq1Bx7GxzASeeOIJAUAcO3bMoOMee+wxERERIYQQYvTo0WL48OG17lvTfyYDBw4UkZGR4tSpU2LAgAHCzs5O/PWvf9Xr2q+//roAIC5fviymT58uXF1dRVRUVJXX7gVALF68WGzatElERkYKuVwuIiIixO+//67bZ/369QKA2L9/f7XrffnllwKAuHjxol7x/fbbbwKA+O2336psP3LkiAAgVq9eXefxWq1WODs7i6lTp+p1vUqV7+n58+fFAw88IOzs7ETbtm11X4j3798vevbsKZRKpWjXrp3YtWuXQed/+umnBYBqiaPyvfvqq6902yZPniy8vb2FRqOpsu8TTzwh7O3tRWlpqRBCiMuXLwsA4osvvqiyX3JysgAg/vWvfxkUozVp6L0pBO/PuvD+bL77s6SkRMjlcvHGG29Ue63y333dunUiPDxcKJVK0bt3b3HhwgUhRMW/a9u2bYVCoRADBw4U8fHx1c6xbt060a1bN6FUKoWHh4eYOXOmuH37drX9Kj9bCoVCREZGio0bN9bYWKbRaMRHH30kIiIihEKhEK1atRJPPPFEtUqtIRXF1atXix49egg7Ozvh6uoqBgwYIHbs2FFlny+++EJEREQIuVwufH19xaJFi0ROTk6Dyjt79mzh4OAgYmNjxejRo4Wjo6N46KGHhBBClJaWimeffVZ4enoKR0dHMW7cOJGUlFStsSw/P1/89a9/FcHBwUIulwsvLy8xbNgwcfr06SrXOn/+vAAgNm7cqNd7YY1Yh6pgTjk6PDxctGnTRq9r3Ss4OFiMHTtW7Nu3T0RHRwulUik6duwo9u3bJ4QQYsOGDaJjx45CoVCIbt26iTNnzhh0/nHjxgkvL69q299//30BQOzcuVO3rUePHqJHjx7V9h0xYoRo27at7vfGvlfWivUn3puGMMd78+bNmwJAtcbaygaa999/X3z++eeiTZs2ws7OTgwfPlzcunVLaLVa8dZbbwl/f3+hVCrF+PHjxZ07d6qdX996x4oVK0RISIhQKpWiR48e4uDBgzXWgUpLS8Vrr70m2rZtK+RyuQgICBAvvPCCrj5ZSd/GMo1GIz7++GPdv6unp6cYOXKkOHnypG6f8vJy8dZbb4mQkBAhl8tFcHCweOWVV6pdU9/y1nXv5uTkiNmzZwtnZ2fh4uIiHn30UXH27NlqjWWpqalizpw5wt/fX8jlcuHj4yPGjx9frQ67ZcsWAcDgzyoH45rA1q1bERoail69eul9TFlZGTZs2IDp06cDAKZPn469e/caPPb2zp07GD16NKKiovDxxx9j8ODBBh0/efJkFBcX4//+7/8wf/78Ovf9448/sGjRIkybNg3vvfceSktLMXHiRNy5cwcAMHbsWDg6OmLdunXVjl27di0iIyPRsWNHveI6e/YsAKB79+5VtkdHR0Mqlepev1dubi4yMzNx8eJFPP7448jPz8fQoUP1ut69cnJy8OCDD6JXr1547733oFAoMG3aNKxduxbTpk3DmDFj8M4776CoqAiTJk1CQUGB3ucuKyuDTCaDXC6vst3e3h4AcPr0ad22s2fPolu3btXG2Pfs2RPFxcW4ceOGbj+g+nvl5+eHgICAGt+rlqIh9ybA+7M+vD+b7/48ffo0VCoVunXrVuPrhw4dwpIlSzB79my88cYbuHr1Kh588EF88cUX+PTTT7Fo0SK88MILOHr0KObNm1fl2O+//x5TpkyBTCbD0qVLMX/+fGzcuBH9+/dHbm6ubr+dO3di4sSJkEgkWLp0KSZMmIC5c+fi1KlT1eJ58skn8cILL6Bfv3745JNPMHfuXKxZswYjR45EeXl5nWWtyZtvvolZs2bB1tYWb731Ft58800EBgZi7969un3eeOMNLF68GH5+fvjwww8xceJErFixAiNGjKhyTX3LC1QM1xk5ciRatWqFDz74ABMnTgQAPP744/j4448xYsQIvPPOO7C1tcXYsWOrxb1gwQIsX74cEydOxLJly/D888/Dzs4OV69erbJfREQE7OzscPjwYYPfG2vBOpR55Oh7j7169WqVYVOGiI2NxYwZMzBu3DgsXboUOTk5GDduHNasWYPnnnsOjzzyCN58803ExcVhypQpBk26XVZWBjs7u2rb78/RWq0WFy5cqFZ+oCJHx8XF6f5vaMx7Zc1Yf+K9aen35pEjRwCg1vrTmjVrsGzZMjz99NNYsmQJDhw4gClTpuDVV1/F9u3b8dJLL+GJJ57Ar7/+iueff77KsfrWO7799ls8+eST8PHxwXvvvYd+/fph/PjxSEpKqnI+rVaL8ePH44MPPsC4cePw2WefYcKECfjoo4+qzfunr8ceewzPPvssAgMD8e677+Lll1+GUqnEsWPHdPs8/vjjeO2119CtWzd89NFHGDhwIJYuXYpp06Y1qLxAzfeuEAIPPfQQVq9ejUceeQT//ve/cfv2bcyePbta3BMnTsSmTZswd+5cLFu2DM888wwKCgpw69atKvtFR0cDgOH1J4Oa1qjR8vLyBAAxYcKEaq/l5OSIzMxM3U9xcbHutZ9//lkAEDExMUKIiqfQSqVSfPTRRzVep7YnLwDEl19+aXDclU9X7h8udO9r9wIg5HK5iI2N1W2rfCL+2Wef6bZNnz5dtGrVSqjVat221NRUIZVKxVtvvaV3fIsXLxYymazG17y8vMS0adOqbW/fvr0AIAAIR0dH8eqrr1br9VGfyvf0xx9/1G27du2aACCkUmmVJ2w7duwwuOvohx9+KACIQ4cOVdn+8ssvCwDiwQcf1G1zcHAQ8+bNq3aOyict27dvF0L8+dSmpq7wPXr0EL1799Y7PmvS0HtTCN6f9eH92Xz35zfffFPrU2sAQqFQVHnatmLFCgFA+Pj4iPz8fN32V155RQDQ7atSqUSrVq1Ex44dRUlJiW6/rVu3CgDitdde022LiooSvr6+Ijc3V7dt586dAkCVnmWHDh0SAMSaNWuqxLl9+/Zq2/XpWRYTEyOkUqn4y1/+Uu2zUtntPiMjQ8jlcjFixIgq+3z++ecCgPjuu+8MLu/s2bMFAPHyyy9Xuea5c+cEALFo0aIq22fMmFGtZ5mLi4tYvHhxneWr1K5dOzF69Gi99rU2rEOZT46utGTJEgFAXLlyRe/rVQoODhYAxJEjR3TbKnOxnZ2dSExM1G2vzFWVPVv08fTTTwupVCoSEhKqbJ82bZoAIJ566ikhhBCZmZkCQI3v2RdffCEAiGvXrgkhGvdeWSvWn3hvWsO9+eqrrwoA1aY5qOxZ5uXlVaVeU1lPun/ajOnTpwu5XK7rbWVovSMqKqrKMNSvvvpKAKhSB1q9erWQSqXV6p+VPRfvHXarT8+yyqHQzzzzTLXXKutPlXWaxx9/vMrrzz//vAAqhlEbUl4har93N2/eLACI9957T7dNrVaLAQMGVKmr5+Tk6Hr96UMul4uFCxfqtW8l9ixrZvn5+QBQ4wplgwYNgpeXl+7n3okY16xZg+7duyM0NBQA4OTkhLFjx2LNmjUGXV+hUGDu3LkNjn/BggV67zts2DC0bdtW93vnzp3h7OxcZfWSqVOnIiMjo8qEhT///DO0Wq1BLeMlJSXVendUUiqVKCkpqbZ95cqV2L59O5YtW4bw8HCUlJRAo9Hofc1Kjo6OVVrU27dvD1dXV4SHh1d5wlb599pWb6nJjBkz4OLignnz5mHXrl1ISEjAV199hWXLlgFAlXKVlJRAoVBUO0flBJWV+1b+Wdu+Nb1XLUFD702A92d9eH823/1Z+WTbzc2txteHDh2K1q1b636vLPfEiRN1Eyrfu73y/Th16hQyMjKwaNGiKpPejh07Fh06dMBvv/0GAEhNTcW5c+cwe/ZsuLi46PYbPnw4IiIiqsSyfv16uLi4YPjw4cjKytL9REdHw9HREfv27auzrPfbvHkztFotXnvttWo9+CQSCQBg9+7dUKlUePbZZ6vsM3/+fDg7O+vKoW9577Vw4cIqv2/btg0A8Mwzz1TZ/uyzz1Y71tXVFcePH0dKSkq95XRzc0NWVla9+1kj1qHMJ0cDFb0bfvrpJ3Tt2hXh4eF6X+9eERER6NOnj+73ytwzZMgQBAUFVdtuSI5+/PHHIZPJMGXKFBw5cgRxcXFYunQpNm3aBED/vHv/vg15r6wZ60+8NwHLvzfv3LkDGxubWlcRnzx5cpV6TWW5H3nkEdjY2FTZrlKpkJycDMDweseCBQuqlGPOnDlVrgtU1J/Cw8PRoUOHKvWnIUOGAIDB9acNGzboFh66X2X9qbJO87e//a3K60uWLAEAXTn0LW+lmu7dbdu2wcbGpkq9SiaT4emnn66yn52dHeRyOfbv34+cnJx6y9mQ+hMby5pZ5ZeR+1crASpW8Ni1a1e1lV9yc3Oxbds2DBw4ELGxsbqffv364dSpU7rhO/rw9/evNZHoo02bNnrve28ireTm5lblwzxq1Ci4uLhg7dq1um1r165FVFQU2rVrp/e17OzsoFKpanyttLS0xq6+ffr0wciRI7Fw4ULs2LED//3vf/HKK6/ofc1KAQEBukRSycXFBYGBgdW2AdDrZq7k4+ODX375BWVlZRgxYgTatGmDF154QbcM8r0J3c7ODmVlZdXOUVpaqnv93j9r27em96olaMi9CfD+1Afvz+a/P0UtC13f/+9eWe763o/ExEQAFY2N9+vQoYPu9co/a1qm/v5jY2JikJeXh1atWlX5MuXl5YXCwkJkZGTUXcj7xMXFQSqVVmuUu1dt5ZDL5QgJCalWjvrKW8nGxgYBAQHVriWVSqt8qartnO+99x4uXbqEwMBA9OzZE2+88UatXzyEENU+0y0F61Dmk6MB4MCBA0hOTsbMmTP1vtb9GpqT9NG5c2f8+OOPiIuLQ79+/RAaGopPP/0UH3/8MYA/c3R9effefRr6Xlkz1p94bwLWf28au/5UW73j/vqTra0tQkJCqmyLiYnB5cuXq9WdKj9bDak/+fn5wd3dvdZ9Kus0lQ3blXx8fODq6lpv/en+8laq6d5NTEyEr69vtYbL+8+pUCjw7rvv4vfff4e3tzceeOABvPfee7UO425I/YmNZc3MxcUFvr6+uHTpUrXXevXqhWHDhqFfv35Vtq9fvx5lZWX48MMPERYWpvupbNk15OlLYxOFIcfLZLIat9/7JU6hUGDChAnYtGkT1Go1kpOTcfjwYYPHW/v6+kKj0VRLDiqVCnfu3IGfn1+dx7u5uWHIkCEGP8kCai+nPuXXxwMPPICbN2/i7Nmz+OOPP5CcnIzevXsDQJX/cH19fZGamlrt+Mptle+Br69vle3371vfe2WtGnJvArw/9cH7s/nuz8ol1GurtDb1+2EIrVaLVq1aYdeuXTX+GLy8twkpFIpqvdkMMWXKFNy8eROfffYZ/Pz88P777yMyMhK///57tX1zcnLg6enZmHAtFutQ5pWj16xZA6lUqptvqiGaOidNmjQJKSkpOHHiBI4ePYrExETdF8/KHO3u7g6FQqF3jm7M/2fWiPWnCrw3Lfve9PDwgFqtrnXuWnOrP3Xq1KnW+tOiRYua7NrGfljX2Hv32WefxY0bN7B06VIolUr885//RHh4eK3zIRtaf2JjmQmMHTsWsbGxOHHihF77r1mzBh07dsT69eur/QwbNgw//vhjE0fctKZOnYqsrCzs2bMH69evhxDC4P9MoqKiAKDaBNKnTp2CVqvVvV6XkpIS5OXlGXTd5iKTyRAVFYV+/frB0dERu3fvBlDRFbxSVFQUzpw5U22CzePHj8Pe3l73H09t71VKSgpu376t13tlrQy9NwHen/rg/dl892eHDh0AAPHx8Y0pUjXBwcEAgOvXr1d77fr167rXK/+MiYmpcb97tW3bFnfu3EG/fv0wbNiwaj9dunQxKMa2bdtCq9XiypUrBpdDpVIhPj6+WjnqK29dgoODodVqERcXV+34mvj6+mLRokXYvHkz4uPj4eHhgbfffrvKPmq1GklJSQ0eVmMNWIeqylQ5unJi9kGDBpl9A5FcLkePHj3Qu3dvyOXyajlaKpWiU6dONS5Ccvz4cYSEhOh6Txnj/zNrxPpTdbw362dO92Zz159qq3fcX38qLy+vFlPbtm2RnZ2NoUOH1lh/qqkHe13atm2LlJQUZGdn11kOrVZbLb709HTk5ubWW3+6v7x1CQ4ORmpqarXeqrXVn9q2bYslS5Zg586duHTpElQqFT788MMq+yQnJ0OlUhlcf2JjmQm8+OKLsLe3x7x585Cenl7t9XtbopOSknDw4EFMmTIFkyZNqvYzd+5cxMbG4vjx481ZBKMaNmwY3N3dsXbtWqxduxY9e/Y0qDs0UDF+3t3dHcuXL6+yffny5bC3t6+y+lhNXVMTEhKwZ8+eGldbMTeZmZl499130blz5ypfxidNmoT09HRs3LhRty0rKwvr16/HuHHjdOP9IyMj0aFDB3z11VdV5oBavnw5JBIJJk2a1HyFMTOG3JsA70998f5svvszOjoacrm8xoplY3Tv3h2tWrXCl19+WWU4xO+//46rV6/q/g19fX0RFRWFH374oUrj5q5du6o1Yk2ZMgUajQb/+te/ql1PrVZXW3GyPhMmTIBUKsVbb71VrVGy8t4dNmwY5HI5Pv300yr387fffou8vDxdOfQtb11Gjx4NAPj000+rbK8cZlJJo9FUawhu1aoV/Pz8qg09uXLlCkpLS9G3b996r2+tWIeqqrlzdKVt27YhNze3UcO8TCEmJgZffvklHnzwwSq9fydNmoSTJ09WyZ3Xr1/H3r17MXnyZN22hrxXLQHrT9Xx3jSMqe/NyvnZjF1/MqTe4eXlhS+//LLKcNLvv/++Wn1oypQpSE5Oxtdff13teiUlJSgqKjIoxokTJ0IIgTfffLPaa5UxjxkzBkD1Osx//vMfANCVQ9/y1mXMmDFQq9VV/i01Go1umpNKxcXFuuG4ldq2bQsnJ6dq9afKFVYNrT/Z1L8LGVtYWBh+/PFHTJ8+He3bt8fMmTPRpUsXCCEQHx+PH3/8EVKpFAEBAfjxxx8hhMD48eNrPNeYMWNgY2ODNWvWGLxcs7mwtbXFww8/jJ9++glFRUX44IMPDD6HnZ0d/vWvf2Hx4sWYPHkyRo4ciUOHDuG///0v3n777SpjsDt16oShQ4ciKioKbm5uiImJwbfffovy8nK88847xiyaUQwcOBB9+vRBaGgo0tLS8NVXX6GwsBBbt26tMuxn0qRJ6N27N+bOnYsrV67A09MTy5Ytg0ajqZb83n//fYwfPx4jRozAtGnTcOnSJXz++ed4/PHHW3SPBUPuTQC8P/XE+7P57k+lUokRI0Zg9+7dRh3GaGtri3fffRdz587FwIEDMX36dKSnp+OTTz5B69at8dxzz+n2Xbp0KcaOHYv+/ftj3rx5yM7OxmeffYbIyMgqTwkHDhyIJ598EkuXLsW5c+cwYsQI2NraIiYmBuvXr8cnn3xiUON9aGgo/vGPf+Bf//oXBgwYgIcffhgKhQInT56En58fli5dCi8vL7zyyit48803MWrUKIwfPx7Xr1/HsmXL0KNHDzzyyCMGl7c2UVFRmD59OpYtW4a8vDz07dsXe/bsQWxsbJX9CgoKEBAQgEmTJqFLly663oknT56s9mR0165dsLe3x/Dhw/V+X6wN61BVNXeOrrRmzRooFApMnDjRGMVoMhEREZg8eTKCgoIQHx+P5cuXw93dHV9++WWV/RYtWoSvv/4aY8eOxfPPPw9bW1v85z//gbe3t24Ca6Bh71VLwPpTdbw362Zu92ZISAg6duyI3bt3Y968eUYrpyH1jn//+9948sknMWTIEEydOhXx8fFYuXJltTnLZs2ahXXr1mHBggXYt28f+vXrB41Gg2vXrmHdunXYsWOHQQ+YBw8ejFmzZuHTTz9FTEwMRo0aBa1Wi0OHDmHw4MF46qmn0KVLF8yePRtfffUVcnNzMXDgQJw4cQI//PADJkyYgMGDBxtU3rqMGzcO/fr1w8svv4yEhARERERg48aN1R4s3rhxA0OHDsWUKVMQEREBGxsbbNq0Cenp6VUW9wIq6k9BQUHo2rWr3u8LgPvWw6VmFRsbKxYuXChCQ0OFUqkUdnZ2okOHDmLBggXi3LlzQgghOnXqJIKCguo8z6BBg0SrVq2qLFtb29LKkZGRDYq1cvnkzMzMWl+7FwCxePHiavvWtnztrl27BAAhkUhEUlJSg2IUomJ53fbt2wu5XC7atm0rPvroI92St/fG2717d+Hm5iZsbGyEn5+fmDZtmrhw4YLB16vtPQ0ODhZjx46ttr2296Uuzz33nAgJCREKhUJ4eXmJGTNmiLi4uBr3zc7OFo899pjw8PAQ9vb2YuDAgeLkyZM17rtp0yYRFRUlFAqFCAgIEK+++qpQqVQGxWat9Lk3heD9aSjen81zf27cuFFIJBJx69atestXuST6/ctu79u3TwAQ69evr7J97dq1omvXrkKhUAh3d3cxc+ZMcfv27WoxbNiwQYSHhwuFQiEiIiLExo0bxezZs0VwcHC1fb/66isRHR0t7OzshJOTk+jUqZN48cUXRUpKim6fgQMHVlk2vS7fffedLkY3NzcxcOBAsWvXrir7fP7556JDhw7C1tZWeHt7i4ULF4qcnJxq59KnvLNnzxYODg41xlJSUiKeeeYZ4eHhIRwcHMS4ceNEUlKSACBef/11IYQQZWVl4oUXXhBdunQRTk5OwsHBQXTp0kUsW7as2vl69eolHnnkEb3eB2vHOtSfmjNHCyFEXl6eUCqV4uGHH27wtYQwLBfXlqvqM23aNBEYGCjkcrnw8/MTCxYsEOnp6TXum5SUJCZNmiScnZ2Fo6OjePDBB0VMTEyN++r7XrU0rD9VxXuzduZ4b/7nP/8Rjo6Oori4uN7y1VZPWrlypQBQrX6nb71j2bJlok2bNkKhUIju3buLgwcP1lgHUqlU4t133xWRkZG6+k50dLR48803RV5enm6/2j6b91Or1eL9998XHTp0EHK5XHh5eYnRo0eL06dP6/YpLy8Xb775pmjTpo2wtbUVgYGB4pVXXhGlpaXVzqdPeeu6d+/cuSNmzZolnJ2dhYuLi5g1a5Y4e/asACBWrlwphBAiKytLLF68WHTo0EE4ODgIFxcX0atXL7Fu3boq59JoNMLX11e8+uqr9b4P95MI0YSzzxEREVGz0mg0iIiIwJQpU2oc4kiW6dy5c+jWrRvOnDnTYudFIiIiaip5eXkICQnBe++9h8cee8zU4ZCRbN68GTNmzEBcXJxuIS19sbGMiIjIyqxduxYLFy7ErVu3qi29TZZp2rRp0Gq1WLdunalDISIiskrvvvsuVq5ciStXrjRqlWsyH3369MGAAQPw3nvvGXwsG8tauMLCwmorTdzPy8ur1mVxm5pKpapzZQ6gYsnqxi47e7/s7OwqkyveTyaTwcvLq8Hn12g0yMzMrHMfR0dHfslt4Xh/1oz3JxGZA+bommVmZlZZoOR+crm8UXN7mapcZDl4b9aM9yaRgQweuElWpXI8fl0/8fHxJouvcjx4XT+V45aNaeDAgXVes6Z5dwxROf69rp/K+Wyo5eL9WTPen0RkDpijaxYcHFznNfWdf7A2pioXWQ7emzXjvUlkGPYsa+Fu3ryJmzdv1rlP//79oVQqmymiqnJycnRLvdYmMjLS4PHH9Tl9+jRycnJqfd3Ozg79+vVr8PlLS0vxxx9/1LlPSEhItdVPqGXh/Vkz3p9EZA6Yo2t2+PBhlJSU1Pq6m5sboqOjG3x+U5WLLAfvzZrx3iQyDBvLiIiIiIiIiIiI7rIxdQAtjVarRUpKCpycnCCRSEwdDlE1QggUFBTAz8+PE1u2cMxXZGrMR3Qv5iQyZ8xXLQ9zElki5ir9sbGsmaWkpCAwMNDUYRDVKykpCQEBAaYOg0yI+YrMBfMRAcxJZBmYr1oO5iSyZMxV9WNjWTNzcnICUPHhdHZ2NnE0RNXl5+cjMDBQ91mllov5yvwJtQYHPz6Db1eocTCjPXJQsYqVrywdUd6paBOohp09oFAAarUEJSVAZo4M5xPdcK0oAAIy2KIMXWwuY9YDtzD57Sg4RLQ2baHuwXxE92JOInPGfNXyMCeRJWKu0h8by5pZZRddZ2dnJlUya+xObvmWL1+O5cuXIyEhAUDFpKqvvfYaRo8erdfxzFfmKzc2C6v+dg7Lfm+D6+qhiFDG4a8jU9F9aDGiJ7aGT0gYgLA6z1FcJHBuVyZO/5aGnXu88OzeB/DPPgWYE7wPC19yRocnHgBksuYpUD2YjwhgTiLLwHzVcjAnkSVjrqofG8uIiKxUQEAA3nnnHYSFhUEIgR9++AEPPfQQzp49i8jISFOHRw2gKlTh32OO4MNDPaDCQDzc+gxWvKTCA090gETa1qBz2TtI0HdCK/Sd0ApPA0i4Voqvnk/ENzsG4NNF7hj7/D588a0SwdP6NE1hiIiIiIjMFGd0IyKyUuPGjcOYMWMQFhaGdu3a4e2334ajoyOOHTtm6tCoAc6suYruXglYeqgfnul7GrcuFWBtfC8MXBAOibTxTwdbd1Di/7Z2RlKhO1a/eRPn1ZHoND0SXw/5H0RBoRFKQERERERkGdhYRmQorRYoLgZyc4GSEkAIU0dEVC+NRoOffvoJRUVF6NOn5p5CZWVlyM/Pr/JDpqcqVOGfA/aj5yNhkEm0OLX2JpYefgC+ke5Ncj2FAnjktRBcSvPE1D638MS+6RjZ6ixurT3aJNcjohZCCEClAvLzgYICoLzc1BERERHVisMwiWojBHIu3saZjQk4fbAIp6/a4WxmALI1LiiBHdSwgwJlsEM+WtsmI9ovDdFd1Og+zAURD7WDbZCvqUtAhIsXL6JPnz4oLS2Fo6MjNm3ahIiIiBr3Xbp0Kd58881mjpDqkhmTizFdU3GuqB9eG3QIr/zWH7b2ts1ybRc3Kb4+0hGTVqbg8QXt0XGaEpv2rcfQLyc3y/WJyIKVlEB79jxit8fi9IFCnL5ihwt3/JAnnFEKJbSQQolS2EnK0M49C9HhRYjub4/O44Kh7N4RkMtNXQIiImrhJEKwW0xzys/Ph4uLC/Ly8jgRpJnKT8jGf/92Bit+88cFVTgAwEFShK6uCegWVgDfABmU9hLYyKUoKxEoLhK4ESfD6QR3XCsKhIAUCpRirPMfWDSvFEPeGgSJk6OJS6U/fkati0qlwq1bt5CXl4eff/4Z33zzDQ4cOFBjg1lZWRnKysp0v1eulsPPgmkknc7AiH6FyFE5YNvKDHSb3clkseTlaDGtewz23myNtZM3YMLa6UAzTAzLfET34ufBzAkB1d4/sOmfZ/DdsXAcE72QDxcAQLBjFrqG5MHDVQM7OwkkEoGyEoHCAi0uxzvgco4v1LCFDcrRSXIZU6Lj8Ng7YfAa2tnEhdIfP58tD//NyRLxc6s/NpYZqLGry/HDab4u/u8Slr+ZgdXXe6AEdngo8AwmTLRB9wkBaNe/VbVF4W7lJ6JMXYow9/a6bYUFAud2pOPYlnR8v8UVlwuC0V56Awv7XcDs9zrCtXeHZi6V4fgZtW7Dhg1D27ZtsWLFinr3be7PgigpAaRSSBSKJr+WuUu9dAf9uxVBo5Vg96+lCB1d98qWzUGlAh7pfg0bL4Zi49R1GP/TjCa/JvOR9Whs/Qng58Fs5ecj6bPN+OrjYnydNQHp8MGANrcxeowE0aO80K23HJ6ef+6uEWrklqXCWd4KttKKfF9aClw4UYrTv6bg0I5ibLwYCgEJpnjsxaJFAr1fGQKJndJEBdQPP58tj7H/zYUQyC9Vw8WueXqQt2gqFcSly7i16zrOHChAZrYMpWUSlGukUCgApRII7mCH6Ad94T6oM+DiYuqIjYa5Sn9sLDPQr7/+CplMVmV1uffff1/v1eUM+XBqExOhPXcO0k6dIA0JMVYR6D6ZV7Pw1IgbWHe7L3xl6XhiUAzmf9gB/l08az3mUuZFzPv9EWiFFu8M/ADDWo+sto8QwKGf07HsjXRsuBIOJUrxTv/fsHDrWEhdnJqySI3CBGrdhgwZgqCgIHz//ff17tucnwWRng7Nr78AMhlkkyZD4mS+90hTu5NQgIHhGchTKXFoZylaDzVslcumpNEA07pew68XW+P3hb9i8LKmHZLJfGQ9Glt/AvT/PJSWa/DCz+eh1gi8P7kLHBWcdaSp5KzcjCULi/FD2VQ42JTh0bF3sOBfAejYqfaepyfSNyCj5CYcbNwwyP8xSGropXonXY2VL1/D8rXuuFnihx7yc/jq0zJEPdmrKYvTKMxXLY+x/83/ueUSVh9LxDNDwvC34e2MECHdS3v+Iva9eRB7j9rhdHoAToluuIM/v+/ZSUthI9GgTGsLlfhzKHgb3ES0w3VEt83F+PneiFg4ENV6UVgQ5ir9cYJ/Axm6ulxjJszWnjsLZKRDe/q0scKn+6z/21FERAJ7ktvjhyePILHQE2/s7l9nQxkAJOYnQCu0AIC43Lga95FIgAcme+Ony52RlCjwSP8EPPXHNAzzvoj4NUeMXhai+73yyis4ePAgEhIScPHiRbzyyivYv38/Zs6caerQqhE5ORUtzGo1REGBqcMxGSGAOQPikFbmil3r88yqoQyoqBv+92QHDGx9CxOXD0Xq5uOmDoksRENW521oHepUYg5+vZCK3y+n4Y/YLGMVge6VmYnfBixFx3k9sFH7ED56Ix/J2fb4fHNgnQ1lAJCvygQAFKvzoIWmxn08vG3w/MqOiCn0w7avbqPM1gk9FnTDG923QnWn5f4fQca1fPlydO7cGc7OznB2dkafPn3w+++/myyec0m5AIDzd/8kI1CpkPPNBnzU9jN0iFJg2KbFWJn3F9hGhOGpeSX4ZV0pkpPvrt+mUSJf7YAyrRxqNXDtsgZr3r2Nv4wqRaZrGP7v0jhEPj0Egx1OYP2MTShPzjB16aipCWowtVot/ve//wm5XC4uX75c4z6vv/66AFDtJy8vr97za2JjRfm6tUJz/bqxQ2/xMq5mickBRwQgxES/IyL9YrpBx5epy8SHJ94Vbx1+TeSW5up93O7VKSJYkSocUCC+GPA/ockrMDT0JpeXl6f3Z5TM27x580RwcLCQy+XCy8tLDB06VOzcuVPv45vzs6BVq4Xm9GmhuXhRaLXaJr+eufrhubMCEGLL0/r/O5lCVrpaeNtmiXH2u4W2sKjJrsN8ZJ30qT8J0fA6VFFZuZj93XEx/eujIrdYZezwW7zs77eI2Yr/CUCI0VHJIumWYTk7szhRnEzfLJILr+p9TFmJRrw2+oSwgUp0sb0szn51wtCwmxzzleX55ZdfxG+//SZu3Lghrl+/Lv7+978LW1tbcenSJb2ON/a/eUx6gfh49w1xK7tIxKTni52X04RG03LrRI2iVouE174V85RrhB2KhK1EJab3SxR/7C8XDa1mlpUJ8b+3Y8UA7+sCEMIXyeKNqE2iKDHTuLE3MeYq/bGxrAEuXLggHBwchEwmEy4uLuK3336rdd/S0lKRl5en+0lKSuKH08RiDyaL1ja3hIckS/z0zGGhbcb/hErKi8UPJ9aKWb2PCUCIOZ6/ivL0O812fX0wgVIlfhaaV/LlHOEqyRGP+O0RDa7JNaPNX9wWgBCrR/23ya7Bz6B1MaT+JATrUOYoZsly0Ro3hYttofjuo9xmTVXZJcli+08HRWeHGGGLMvHTwv3Nd3E9MF9ZBzc3N/HNN9/otW9T/ZsXlZWLDv/8XQS/vFWsPpZg1HO3BNrrN8SXbd8TjsgXvvY54u2/pou0NONe48KhXLGw71mhRLFoK7spDv77gHEv0ISYq/THYZgN0L59e5w7dw7Hjx/HwoULMXv2bFy5cqXGfRUKha5rb+VPcxBCQBQUQHBKuiou/ZaI/oNsIJeU48zBQkz9pC8k0qZf0a3SD5dW4tMr/8LNxU/hh7fisDprFKaGnoYqKb3ZYiAi8yME8MTIBChRik+2t2+WlSYb66FF/pjR9Sqe2T7aoOGYWq0WO3bswLZt26BWq5swQjI3htSfANPVofJKypFXUt4s17IYQuDiYx+j/4cToPBwwvkb9pj7rEuzpSqNthxH035Cea9j+F9MJqaHncL05QPw1fR9zRMAWT2NRoOffvoJRUVF6NOnT437NGZ6HUNIJRLYySvmxHLinIv602iQ+M9vMCL8FhbEvYDpDxbiWqor/v5xK3h7G/dSnfq7YNnhKJz/oxDeLqUY+Gp/PNv+dxTf4tB/a8LGsgaQy+UIDQ1FdHQ0li5dii5duuCTTz4xdVhVaA8egOan/0F7YL+pQzEbsYdSMWy8HVrZZuPQSTsE9Q9u9hgCnAIBAD6Ovnjk1TbYtCwNWwsewKxO56DJymn2eIhMQZuQAG18vKnDMCsb/30Fv92OwoqnLsG9k7/Rz19SLICUlIpWOSP6dHs7yG0F/jb7jt7nTk5OxrFjx3Dy5EnE83PQolhC/Sk2owC9/m83ev7fbtxI59xYla7/dRmGfjcDvn5SHLrqieDWzdugL5HIoLRxBAC4Ortj5dU+WBx1BE/+NBjfzT3YrLGQdbl48SIcHR2hUCiwYMECbNq0CRERETXuu3TpUri4uOh+AgMDmyQmpa0MO599AL893R8PRRm/TmCVCguxrutSdPz3VFy374YdW0rx1a++aOpnLO36eeFgegd8OPMsVtwYhC4h+bi84VrTXpSaDRvLjECr1aKsrMzUYVQhMjKq/NnSpd3Ix7AhWrhIC7HruAtadfE1SRxj247D1ok7sWbcekglUoxbGID/fZSOn/OG4amO+wCVyiRxETWWKC+H+vdtUG/ZDFFUVPt+OTnQ7toJ7e5dENnZzRihefv4UwkG2R/H+E+GGv3c8fHA/z2Thjv/WgbU0YunITxayfDPxdlYnz8Ct9ce1usYHx8fhISEICgoqMm+aJBlMMf6U2xmEUrVWpSptYjLLDR1OGYhael/MfyzcfBqJcHuC63g5dX8MUglUgz0m4uhAU/Cz6E9pDIJPj3dD09GHML87/th4ysnmz8osgqG9Hh95ZVXkJeXp/tJSkoyWhxCCOy+mo4rqRW91TwdFYj0czHa+a1adja+7PQFpl38O8YPKcSlZDeMGK9stsvLbCR47r/ROH+oAPZyNR6Y3AonvznfbNenpsN+nQZ65ZVXMHr0aAQFBaGgoAA//vgj9u/fjx07dpg6tCpkgwZDe+M6pO3amzoUkxMCeHJ4HEo0/ji4T9WghrICVT6+u/A1StQlmNPxMfg4Nryx7f5jH342CMvTb+LJdx7GiFn/w1/WTm/wuYlMRaSmArdvV/w9IR6SyI417+jgADi7ABAVfydc2J2BP7LCsX7utiYZfnnxvAYxJ3Jw2bYID+zcCUREGPU6s94IxcufFuPrN1Pw5rT697e1tcWsWbOMdn2yDJZSfxrWoRVeGNEeAgLDw408bscCaa9ex6OvBgKOjth1xg0eHoafI704DqlF1+GuDESQU6cGxyKT2sJOaqv7XSKV4Itz/ZDd+ijmvNsZ3SdnIahb3auZE92vsscrAERHR+PkyZP45JNPsGLFimr7KhQKKBSKJolj49lkLFl/HrYyCY6/MgzuDvImuY7Vyc/HZ1Hf4pmkl/DMtHR8tMYXUhN1B2rXvxX2X1VibOdbGDI/BLsll9DrsVrqw2QR2FhmoIyMDDz66KNITU2Fi4sLOnfujB07dmD48OGmDq0KiZcXZKZ49GeGfnzpPH651RUbFu5G0MBhDTrH0qP/xu7Eigr9hYzz+HH8emOGiPn/F4KtG69h4brBeGDBBXgM7mzU8xM1NYmPD+DjA6hUkAS3rn0/uRw2U6c2X2AWYPkrt+AnUeOh9/oZ/dxaLXBiawbS0wXOhvTCA6e3AlevVjSYGYmziwSz+sXjq0MD8Gr8bdi2CTDaucl6WEr9yUYmxeLBoaYOwzxoNFg+9lfs1z6PPWtL4edveCN7geoOTmZsBCDB7aLLUMjs4W3f1mghymyl+PpAO3Rsn4/HR2dhR5qnJUz5SGbMVD1eHe7OTaawkUHWjPMpW7SSEvzQ43M8k/R3LHk0A+9/723y+98t2Bm7YkMwMjQWo+cH4qDbDXR8uJ1pg6IGY2OZgb799ltTh0AGSL2ej6c/CMY0n314+IuGD29KKrgFrdACAFIKbxsrPB2JBFixMwSRbUvw9MO38WN6B0DOJ0pkOSRyOWzGjTd1GBYn/045Vp8Oxwvd9sLWc5zRz58Qp8Gt01kIVGbjsioUOfkyuO3YAYSHG7V32cJ3W2N5X0dsfnEtJq9nYyhVx/qT5bn52vd4MX4hFk5IxZAxDetRX6KpnAC9Yk7DYnWekaL7k0uoF75+6SBGL30A3yw4hfkruhv9GmSdzKnH66hIH2x7ZgA8HORwsbOt/wDC8blf4rEbL+Lxcelm0VBWycHLHlsvBGNQhzSMneqIi7dL4OxtZ+qwqAE4ZxlZLSGABSPiYAsVPvs9rFFfDB/r/ARspDaQQIInoxZXbNRojDrHmG+wHJ++kYP/5Y7BplkbG3ye9PR0XLhwARqNxmixEVHT2PReDIqFHeb/u2kWHLm6LR6FWSUI9lUhu8QOV+yigdOnK3qXGVGnPo7o5x2LVdsM79GclpaG9HSuCExkTrTXbuCxd0Lh5VSGd1c1fOoJD2Ug3BQVE5Tb27jCz6FDxQulpcYIU2fU2wMwr/UeLPm6PW6dvdOgc2g0Gpw/fx4ZnO+3xajs8dq+fXsMHToUJ0+eNGmP1whfZ3g7N99cW5asdPcfmLt2JKICsrB8o/k0lFVyDXbB5l9lyFY74/kRnL/MUrGxzIKJ7GyI3FxTh2G2jm9Mxi+3uuLDWSfgGdW4YUGDgoZg99RD2D3tEKZHPIJ9+4A1fz0OfPppxTgnI5n5j9YYHXINf1/fFSLX8KevGo0G3333HTZt2oQTJ04YLS4iahonDpaig/QG/EYYf04LodbgxC+psJeWQqa0hVQicL4wpOJL6o4dRl8Zc0ifEpwojoTI1n9l3+TkZKxYsQJffvklUlNTjRoPUW1KyzU4HJuF0nI+VKrN5kU7sF87EF//aAcnp4afRyaxQV+f6RgasACD/B+DutQe77+Wj9svfAJcuGC8gCUS/GdXZzihAK/NudWgUxw7dgybN2/Gd999B60R63Zkvr799lskJCSgrKwMGRkZ2L17t9kNDacaFBfjjcmXEScJxfdbvWBjpmPlWg8Lxft/OYqvL/TGzo+Nu8ASUPG9T8XF4ZoUG8sslMjLg2bjRmg2/AxRyNWaavLJq0kIltzE9wPeQnzuzUafz1HuCBeFC4QA9v6ai9+2pePM9i0oPKXfCnD6kEiAF9/1xDXRHvtf22vw8VKpFE53a7Wurq5Gi4uImsbpG47o7pmIppiNNmnHFSTc1MLLs6JRzMOuBBfSfZDfKrRJepdFD3NDBryRvPOy3sfc2wNWrVYbNR6i2vxj80U88t1x/Os34395sQp37mDZgQhE+V2BT58/IETjGo4kEgnsbJwglUhx9SpwZncKjhxMQ8GW/xr1gaNLqBee6XUCP10Ix51Uw79AurhUrDzo7OwMibl1UyEinePzVuD93Mfx+rP56NhFZupw6vTk2iEY6nwCj7/givz0EqOdt6ysDJ988gnef/999oZtQmwss1QyGSCVVHzBMtWSH2Ys63YpNl7rij5hq5FrW4LJWx7CtrhfG33e7Te34Z+/LsORveeRnC3B0RQbHPr2VUCrxZ7EXXh61wJ8cOIdlJQX63W+hLybmLJlAt459m/dtoETPRHudBvLvrc3uOeHRCLBggUL8NxzzyE8PNygY4ksjdBoICy4gaW8HDiXE4zocP3yxf1KS4Hi4lp+CjS4uPYKCsqVcHa821hmX4I7xXa4UNoOxYVaFP+6B8VFotqxDZ3XOHqcHwDg1Db9K21BQUF49NFHMXv2bAQGBjbswkQGcrGzhRDgvEC1uP7eFuzRDsWIJ68iseAc9iZ/3egGszJNES7f2YsDu64gMa4QR8s6IPfELhSdPgiVpgQXsnbgePoGZJbE633Oq9kHsO/2t8gr+3MY97x320NAgpUvGv4woGPHjnjuuefwxBNPsLGMzJpGK/DE6lPo/+5enE/KNXU4zUpcv4En1g5B14BMvPiecVe/3b5Ni9j/W1fxQNFIJLY2+GaDO3LUTnhjsv4PE+tTXFyMgoICqNVqZGdnG+28VJWZdlqk+kgcHSGbMROQSCBpoiWMLdl3z1+GBJFo+3QqYu5u2xyzEWPaNnwC7dzSXPzz0MvQHu0J+5Q2UNtKcFbaCT1ubMWtP37Fy/H/hIDAsZQjUGvUeLnPq/We8/DtP3AzNw6JeQl4oecrkEllkEiARXOK8exnQ5Gy4Sj8JvU1KE4bGxs4Ozs3tJhETUJkZ0Ozdw8gs4Fs5EhI7O0bdT7NmTMQp09V/NK6NWTDhtf55UaoVEBpKSRmdG9cOZqHMuGC6AccDD725k1g+XIgP//PbYWqAqi0Krgq3CC9kw3NWS/YOdlCIql4kmkj1QISYPX5zlit6gBcLgFO5wJublXO7e4OPP884OFhWEz+gVK0ss3G6VMCEww4rk2bNoZdiKiR/jk2AnP7tkGAGydcrkarxZcrJPBU5KPX1EQAQIk6H6WaItjZNHw8ZkzuMVzLuICT28rhKdEiQdIaqUWt4LFzJy4G5iC1NA6AQGZJPIYGPKnXtRIKzkIjypFeEgcXhTcAwOuBcExptRPLf47E334w/Hky609kCZKyi7HzSkUj8S/nU9Al0NW0ATWjA6/uwgUsxp6vVUYdfpmbC2z5Phs9ErMRWnQe6NgRMNJ37NbDQvFMx1/w+R+D8Va+Fo7Oje/o4ubmhunTp6OoqAjt27c3QpRUE3ZJMlOa48egXvUDtDE3at1HolSyoawGQgArtvhgqu8hzJ35PJQyJWQSG8ztNL9R53WUOyDIuTWczoTBQwo4u6iRrOqNIIfOUG3bqhtKICCwJXYjMorqn7B6XOhDmBY+E2/2fxsy6Z/diB/9VxiUkjJ8+6bxV94kMgXt5UtATg6QlQnttcYN/xOZmX82lAFAQgLE7aTa9y8shOZ/P0Kz9idojfi0sLEu7EwDAESNM7xHVWAg0K9fRS+ww5eSsOnGOuy69SsO3N6BLbE/IfHSHkhEAWyVV1Gm/nMi7TD3bNjKtLC1s4GtVgXblATY2ghotUD83Q4dQ4dWNJgZSiIBuvqm43ySW/07EzWRuMxCPPD+Pjy8/DCKymrueSqRSBDobs/eQzUo/v0Avs+bgMcm56O1WxgAwFXuB6XMsVHndVP4IvOUAsW3bBHaqhjF5U5IcHgAdpfiIS6cQ+VqmYDA9dw/9DpnlOcYBDt1RbBTlyrbFz0lxc1Sf+z8rvb/F4gsWZC7PaZ1D0RnfxdM7dGCemUXF2PZFj90cE/H4JFyo5766mUt0q9k40xmIIqvJABGnvv5yX8FoFDY48dXjTf8v127dujatSv/L2tCbCwzU+LyZaCsDNpr10wdisW5FVOGm6X+mDhOhbZuoTg08wSOzjqNPv6G9dC6n43UFv8JXIbA7N4I9pIj2rcVnG07I8X1AQTH56BX1p89Zcq15biQWXXlk89Of4wBa3ri6/PLdducFS54vufLGBUytsq+zi4SjAyLx74b/o2K+V5qtRq7du3CgQMHIIw8sTdRfSQhbQEbG0CphDSkbaPOJQoKqm8sqH3uRpGerlu5Vhtf//yFGRkZuHOnYaupGSLvjhoKlMLR36XWfbKKM7H26o/ILK46tNHWFpgwAWgzbj2yXHdCle8OiU05bJxy4a3NgmdRPO7IruNOSQqSCv78wiiXaeBpX1zx4yWBZ348JLk5yMqqaHx76SVg2LCGLx7s4VyOfBV765Dp7L6ajlvZxThzKxcXkg1fKKelO7kuHrlww4zn/dGt1TiMDV6C/n4zG/1lzN8xAso/ImCrVsLZzR2edo64XtgHUGvQ5mh2lbnLckqTqxxbWJ6DPbdXYO/tr1Gs/vPf1NehHTp5DINCVrV3bu/n+qA14rFzbW6jYr5XQkICtmzZwoVIyCxIpRK8M7EzfnmqP9p5N2IFDguTsnwLNpU/iEVPSY2++uX535Ohzc1Hpq0frpcEAdu3N3xeihoEPdQVD7ocwhffOxh7fSVqQmwsM1PSHj0BDw9Io6JMHYpBtJcvQf3rr9DebPyE+g11enPFF8Pu4yqWOpdIJJBKjPNRX/6fL5B4JxfZknhcyTqFGzkJ+OxKPM6lnMKrBX3xUo+/o6NnJwwLHoF+/v2rHLvmyg8oUZfgv5d/0Ota0dHAGVUkRFr9PdT0cfXqVRw5cgT79+9HYmKiUc5JpC+pvz9s5s6DzaxHIWnk4hMSH5+K1iKJpOJHKoXEz6/2/QMCKsYUymSQdulS634AcO3aNSxfvhxffPFFk98nJUVaKFEKKGtfJv7/jr6F908sxb+OvF7j678V/hs+Y7+Dc+QxqHJ8oMryQUC6ChIBlNtU1CQd5TVXpLUKO8TmeiL7ajr+MkHg+eeBkJDGlclOKVCiNe7TXiJDjO/ih15t3PFgJ190C3I1dTh6S84tweOrTuHZtWeRX1pusjhOn9TCTlqKiMiK/CExUv0p7fo5HNqXBrldNvJUGbCRxeFsejmO2grIL15H/4wuCHTsBGd5K4S7Dax6bNENlKjzUazORXpxbL3Xkjg6oIfzdZy6XHtuNdSWLVtw7tw5bN++3WjnJDLEvmsZ+M+u6yispcdsS/DNh3mQyzR49G9eRj1vQZ4W5/fcgY8iGxqpHBdtooAbN4zbu0wiwaI5JbhQ0AZHNzZto3taWhpiYmLYOcII2FhmpqSdOsHm4YmQBgY12zWFVgttTAw0p05Cm5Vl+PGFhdAeOQKkpUK7fx+EiZbdPr0vHz5Ihd/Q6hPcCyFwJPkPXMq8aPB5RUoqUo7ZQWurRq4qBxqhhoNtLhJzO+GCUoVzO1ciPLkc34/9Ee8M+hB2tlXnZJraYQbkUjmmdpip1/WiR3oiD66I22qcFev8/PygVCrh5OQELy/j/idD1Jwk9vaQjRsPSUgIJK1bQ/bgg3U2wEkUCtg8PBGyufMgDWtX57nT0ysap4UQTb66kEYDyKCpsxtXe48OFX+6d6j2WnzuTWihhY1DPrwGr4fXoJ/hVlqKwvQw5Cgqenc52DrCx8Gn2rHF5ba4lNEKHh4CT7f6CbO6X4WD4VOnVSOTCqiFea9MRdbN18UOa5/og89ndIPCpvk+izczC/Hp3hisPpoAldrw+s9ne2Ow51o6Np9LwepjJnqgJQROxbsjyjejxrmAStT5SCm6jnKt4b0trvx4DHfyXeDkUgC1KIOTogCFKntcLwlBQUka7vzyLTq7DccDfrPh4xBW5VgfhzAoZY6wkznD206/nsnRoXk4m+5ntMU227Wr+L8jLCysnj2JmsaiH8/gs72x+Pl0Cx1enJWF9an9MLlvClxq75DfIFd/jUVWcik8PCVwtSvF6cxglErtjd67bPhbAxCIW1i33PDv2foqKCjA119/jR9//BHnz5+v/wCqEyf4Jx3twQMQMRXT4YuzZyF5cBwkvr76n0Aur+jtUV4O2Ns3fBxPI52+JEe0Uwxg90C111ZdXonPTn8EAPhi+Ffo5ddH99qePcC+fVVXMS8qL0RqYQqCnIORduIc0nPbwdblzxVHHOV3kFEUgvUJL8OtUIU7z+Si20MaSKVVK+iRkcBzM1/Acz1e0Lsc0WMqJqs9vTMLoY/rfVitPDw88MILFdeXcgVVMnNCo6noMVZLHpF4eEA2ZKhB59RnGFGPHj1w584d2NjYoEs9vdAaS2kvRRkUQFntQ0ifjFqMmRGP1tg7LK/sz+FIEqkWruFHMebCecSm/gVXSjrCX34N5VpVjee9nuWBfkG3MKvzBfgmXgZ27gAiwhudt0vLADtZzdckslbX0vIx/vM/oNJUPMXfePY2Ni7sZ9DQRX9XO93QnABXEw1lTknB6dJIjOxSvWebWqvCwZQfUK4thavcF/39HtG9lp9fseBIXpVRrwJF5TmQSmxgW6JG/i4nlMmVUNhWnFsiAeSycuyN740T6AibG2XQJF2Ca2DVvKtUAo8+6o5hrRcaVJToPgoUnnHAjUsqdOjc+N6uo0ePxogRIyCT8WEANa2bmYVwtZfD3aHq53Zaj0AcislC/1DjrgBpKYoOn8MVDMYzI408TYZWi4tb4iC0brC1s4WXbTHic91ww6ErOt84XNG7bMAAo1xK6uyIPi5/4PTlxk1HUheJRKL7v4f5qvHYWEYAKlaKq2woq6S9ehUyAxrLJHI5ZH95GCIlBZLgYL0qieXl5fjjjz9ga2uLvn37GqUR50yaHxZGxtX42q38REgggYBAUv6tKo1lISEVjWVnzwJ2doCrK7Ar4Q+UlBfDWRuD1rE5kCo0cJDn6o6xlangpMhCQZkniqVaKLMELp6+Du/ACBQXA3fuABERQHj1Tm718vSSIEiZjtNnZZhq+OE1YiMZWQJt/E1o9+4FnJwgm/AXSOTNN6zP3t4eDz/8cK2vFxcX48SJEwgJCUFQUON6/to5ylACO2gL0iGt3vlLp7ZhlB09O1X5PexWKfrkJuG6YzGkhRXDNFQaFbRCA6mkaoXJVqqBj2MhfJ0KK1YLOH0auHq1ImE1QnGpFEqZ6YaQEZnC+lO3Ua79c7jL2aQ8JNwpRhtP/btrLhoUitaeDnCQyzC4fSu9jklISMCVK1fQtWtX+BrycLMW+Ucu4QZG4u9Dqvd6KNeWoVxbsVhIkTqnymsODkDr1sBvvwEpKYC/P1CqzUV2acUiRU5J+ZAX2MGvVdXz+jmlI7vEFcWwg21JCVTnM1BqIyAgQWoq4OQEDBkCNKQzfLcH/YAvgNNbU9Ghc7DhJ6gBv3hSU9t6IQVP/e8snJQ2OPD84CoNZq+PizRhZKZ3ftttaCFD99HGHR1TdOIyzpyXwd2tIocrbDQo10hxKTcAnZW2Fb3LevY02sqY3cPy8OYZ/4rRBU2QUhwdHbFw4UIUFhY2up5KbCyzOKK8HCI1FRIfH+N+gZRKKx7z3Tu22dbwj4fExQUSA/rGHjt2DAcPHgQAODk5NbonhxBAptod/r6aGl9/rPMTyC65A2eFC8a2HVfltTZtgBdfBNatA9ZvvQNtkQy2bmnQaIrhf7sUgdIyZDvLqvW8cFb8WflzLVBDm62BbZtwlJdLMHIk8MgjgE8dX4Tr4u+Yj6wCrnhKLYuIu1nRxTMvDyIrq875yJrbgQMHcOLECRw7dgwvv/xyo87VOsoVWshwc18iQsMMf8poI7NBpGcnXM66CKlWoM/FQuSVeSCptD2cFBVPXp3kzpDUMOOCq10ZTqf6YUrkFShdXICkJGDHjoqW/Ub0LruR6oSe7sn170hkAldS81Gu1qJLoKtRz2snl/25mGPlNlvDvgXJpBKM66x/rtNoNFizZg3UajWuX7+O5557zqDr1SQtvhgA0Lqzc7XX7GycEOE2GGnFMWjr0qPKazIZMGUKEBYG/PBfFW7EliEguBwyWQFkRWXwuBoHuEugUVSttypsyuHrlAkAkCg0sClKhxydEFvgg9atgcmTgUGDGvaF0j3MAy7IRUoiG+/JciRmV9yDBaVq5BarqvUua4jtl9NwJDYL9nIb/HVoKOzk9X+/23jmNlYfS8SEKH/M7tu60TEYw+ljasglKkR2NOw9+f13IPvPQUEoKs+BWqjgZOsBKaQo2pSCzBInhHr/mStclKU4meoP4TkO2JUBSOOBDtWnw+jeHWjf3rByRPeWo+iUPW5cUiG8S9M8DPbw8ICHh0eTnLulYWOZhdHs3QvcSgRatYLNQxOMdl6JjQ2kPXtBe/xYxQY7O0i7RBnt/LWxt7ev8e8NdXfBO9jZ1fxlz8/RHx8N/bzW452dgdZDdyPh5n+Rc3wkAvAAsrEbfpkqlCik9X6JzFPYovR2K8gDsvHoPA+MHl0xOrWh7ORqlJTyNqWWRRoZCU1WJuDqBom3t6nDqcLf3x8SiQQBAQGNPpduqPWubIQ+0bBzrBz9X4zfMAouV24i7HYJDtr2RHG5C3yVaWjvHg57GwfcynPFnRI7+DoWwsexEBIJ4GlfhIRcN9y444HO3ulG6V1WUgJczg/Ewj6cI4PMz7W0fIz59BAA4Kf5vdE7xHhfJGb3aY0t55KRlFMCAFg0qC18XIw3uXxNJBIJlEolCgsL4WCMCQcBlBZWPGi0c7at8fUQl+4IceleSzxA164Ct2x+RvEGb8Sf7QBbe3cE5lyBrKQcKk/HOq8t5DLk3nFGzslcdJ3cCrMelaJNm0YURqmEEqUoLTbN/LlEDTGvb8WHvrWHA0K86r5n9LHqaAJe++Wy7vdtl1Jx8IXBdR5TptbghQ0XoNEKnE3KxZhOvvByqv3B/a1bt5CYmIioqCg4OTXdypyn41zQ2Tsdcnmg3scIUTHKZ9s2IPZWLmwcMyCRVD7ZyIWyUAPXBBc4O0shv2cKCR/HIsRmuyMprwtQUACsVwPhFV3BSkoqpjGLiAC6djW8HN3G+QOfA6d/SUZ4l8YkOWoO/BZuabLvjtPOzTX6qaWdO0MSFARRVASJl1ezDH3q1q0bHB0dYWtri5A6lmHTarV6DSEsv/tQoKaJaeuTVZKFx39/FCkFyXBqr4XC8zaC49tAta01Sosk0Hrk1Hl8SbkjskqCEK24jedCUtFx3NyKHnuNYCvTQqVht39qWSS+vrCZNt3UYdSoc+fO6NChA2xta/4yaQhPLwmClWk4dVba4KHWUqkUWx/+HclnnsZt+W9IKewNDzsXdPeJhkpjg8uZ7vByKMaEDtdwKDEY17I8EeaRDWXlMIN0r4rGMiP0LruwNwsaeKL7kOq9UohMLSW3RPf3m1lFRm0s83JSYMezD+BcUi7c7OUI9236e0AqleLxxx9HfHx8nZPOV66Gps/UGJXzWMsVht//cXkncC3nIGycBR6clYJLIcU4/2tnJF9xQWvnfEjrOKVWSJCU5wuJrRYTHfdg0ogy2Ldp5JyRtrZQoMSYc3MTNTk7uQyLB4VW2Vau0eJcUi4i/Zxhr0evsHv9eOJWld9v5xTXe4ytVApfFyVu55TA1d4Wjorar1lcXIwffvgBWq0WN2/exOzZsw2KzxBxRb7oEFF//PeSSICZMwGZ50X8+JMKd9Kc4BOcC4VSDQgBt9OJsLMrhKNX1e5hcpkGEV4VvV7hrgayEyFcnJCuDEZWVkWP15kzgYYMfHDtHARfpCD2Cud3tQRsLLMwkpC2EBfOV0wO0RTnd3Wtc1U5o19PIkH7evqvHjt2DDt37kTv3r0xYsSIOvetHE6uKjN8qdxfYzbjdsGfK8zIPdJRoH0CI+XROCkbDZTJ4aKseXW8knJH5JT4I8r3CP7dQwXf9GTgQjQQFWVwHPcqK5fCw7blLhFNZI7kRnyQEB2chdPxjew9d/48/BNyYNfpUdgeG4l27hpklwgkFzgjyicNszqfRxu3XPT0T8Hq851wOcMLbdxy4aIsxalUP0yKvAq5TNPo3mWntqbCFs7oNKHpJq4laqioQDfYy2Uo12gxIMz4E2Tby23Qt23zTrzt4uKCqDrqGSUlJfjqq6+gUqnw+OOPw83Nrc7zye0qHs6Vl2oAGPag7kbuEYi7Y1FlNgJdBl5DpxuHsfdMa1wq6YRwp5rnkgWAmzmB8HLIxiOdrmB4yQVIDhYCvTo17oFjaSlUkEOu5DBMsmzPrz+PLef/n737DovqzB44/r3TGHqvUgXsBUWx957EEmN6Mz0xvWyy2ZbktyXZTbKb3ns3MTGJGlvsvaBYEBFEQHrvTL+/P0aJRsoAMwzo+3keH5C55UWHy3vPPe85BfQL8WTNwxc2L2uNj6sahQRnSyq2liF2lkIh8cN9Y9mcXsrYWH/rMnMbtBaQl2WZ3NxcPD098fPzs+l45zGZaESLu3v77+8kCTz7rWHRfe5s+mEAJw6H4u3XQDDFuJTWYvBwwWDWoVG2kA2sUmGS1GTurUabaObGG5VcfnknVg5ptbhRhq6x/d+L0PVEte8eRpGUhPL6G1BOnOTsoXSZkydPIssymZmZbW6rUoECMw31tl2AyhvL0Jutjx2PlF64dGhUZiWTNBuQtY0opObroAGoFDIqhZF+AbvwC1KByWTN0Ohkz/JGgwpXESwThGbJZjOW9HTkc4tR9DCJw+GAYSDmnLyOHcBsthaftVhIa4ymvMGVikbrn4X9j/HE2J3E+FYBMCiohD+O38HM2JPk13jSaFRTWOtJRvmZiau3N+h01muX3P5J3L6dJgYpj+MSLwrKCt2Pn7uGPU9PY/+fZxDh2/myDz1BZWUlVVVVNDQ0UFRU1Ob2rp7WZ+iNVW2nY5ktJvTmegDqjBWY5fODUi4lNQw9uYn+vU6hULQ+F5JkiQivQkaE5SBFRsChQ3D4cJtjaFVDA4244uoubnWEnu1IvrXN7Ini2nbv+5crBuCptWbCa1UKXlpkW8ZmkKeWa0ZEEN7GtdLNzY3bbruN6dOnt9ocKTU1lU8++YR33nkHnU5n+zdwlsGADi0uHch6rTdY54j+wfXMv/0Ak+alYdCpKD7gitksIWuUNJiqWty/Rq8h1diHKHMWj01L4corO1diBxcXXGlEpxPBsp5A/AbpYSRJQvLwaFc78p5u1qxZjBo1ivnz57e5rSRBhLaUk6fafmu/tv+/zPp2Clcsm0l+bR6RXud3S/KvMjIirY4Kn5mYLWG4a1pehqlW1mO0uJBdFYnBrLdmaHRysifLkFkdQESICJYJHfP8888zcuRIPD09CQoKYsGCBaSnpzt7WHYjHzmMZesWzCt+dvZQOmz23ZFU48Oqv+zq2AEOHYIjRyAigpSiEGoNGoI86nlo1B5uHHwEN/X5N7C+rjruTkzm7sRkvLV6KnVajpWe01nq3OyydqivMbP8SCyz++d0qkGAIDiSp1aNt2vnl1D3FKGhocyePZupU6fSp0+fNrcPGmzNcs3d33wW/Vn1xio25L3D+tNvkVaxFbXC5YJGIv67TqKq0HPUMA53des3x76uVWSUR1Ncr7C2wLTDA8fqAyepxofgPrY3nRKE7ujZuQPxc1NzfVL7H0QNCvNmx1NTWfnAeHY/PY0J8fbtJAkQHh7OuHHj8PBoucZap+9bNRpUmDAb239NMFp+W+6odjEzbk4GN05dTYzxFGmmfhjNLS+0K6l3J6/Gixnx2Tw1aBVDMn6g02u7DQZMqFCpRRimJxD/S0K3FxAQwOzZs+nVq5dN2ydGlZGc13bb9W+OfwlApa6CTbkbWDL8Ie5JuB/FmR+LEWn1BDYoaXCfj6eLGwrJeoG2yBIl9dEU1cZhtvx2gXVR1WE0zcVN5X3eZC+jLI0DRfub6obYKveEjnKzL4mjL52JvWBfW7Zs4f7772f37t2sX78eo9HIzJkzqa+vd8p4ZIsFuaYG2dxylmaL+9bUYPruW0zfL0NuOFOzwuvMTZC3z2/Hb+OJpVxUhOXoUWRT9whCD5/sRVJAFm8tC7RmibXHOVllOq0P2VU+zIw9ydPjtzMqPL/FmJVSITOt9ymeGredsRF5HCs7Z/Lcweyyr/6cSq3swT3/sL3wriAIjiVJEqNGjWLChAkobWgp6TN+ELFkkry59QyWooYTGCzWGnCnapNxUbozLvRGPNXWa4lLSQ3+u05S6jmOqsYo/Fyrm/at1buRXhZDeYNP09e8tbXU6b0prUu0fuHMA0dzSjLFDSebMtja48Aaa8AvcUYHlnwJQjcysU8gB/46k38uGNzs6wVVjXy4/RSnypr/OfFwUTGolzc+bo6vRd2SAQMGcPvtt7NkyRK02g40P1Gp0KKnI0lpXprf3RNaLIzO28K84NWoXSxYZAmNwrXZfRuMaiK9q7lz+AH84v3hxAnYu7f9gzhXYyONuKJ1Ew8WewIRLBMuOiMS4YBhEJb8wla3GxkyCgClpCQhaDgapYa7ht7LikVruMl3JlcVBKLzj2XdKQkfbR0AepMrBTX98dBUEOh+isLaPjQYrDfs/f3d0ZviyKo8UxMkIoKqPVt49q153L32Nn7M+L5d30fyT9ZlWYlXhLZrP0E4a82aNSxevJiBAwcydOhQPvnkE3Jzc0lOTu7yscgGA+blyzEv/Qbz118h19S0b//sU9bGJhUVyLnWgrWK3r1R3nwLynnzkOvrMX/zNebPP8O8Z0/LY1i1EsuunVgOpXTyO7KfJQ9IrNVNJvODze3b8ZysMhelibsTk3lo1F5CPOps2j3Gt4onxu7kliG/W4LezuwyWYa3PnPnCu/tRM3rZFFuQRCcx82NRK9MklNbv5n1cwlHwnqjF6C1Zrv4uIQwqddiBvvPIja5AZ9aFQfMEdQYJNzUemQZ8muCKKkPYHDwCRqMrpyqDMdsUaBSgLvahyPFZx6KnnngmP/Dq+wrWsbWgs+wyO17mJC8z4KbUke//uKGVLi43fLxXv6+6hhXv7uz3Q/mu4okSURERODTibrYvtoGiovbv59CocBP+1sHc8/jRXgfK+CE1ppV5qIy4qpqvilLgFs9RXUe5FZ7g1YLarX1IWUnssvMWTmUEYBvqGM7Jgv2IQr8X+RknQ7zr+vBZEI5bTqSA1v6dheJswKo+cqbk6sOEH93y4GmF6e8wt7C3YR7RhDt/Vvr3mD3UGbnuFGYf5IN7qM5XWMhKayewtJg6gy+xPntYVTE92iUDSQXzCWtdDINJh+GBrlzrFRNWlkg8f4V4OmJXl/LqKO1nIhwIb+2fTWJkjdWE0Y+oVP7d/jfQhDOVV1tfbrfUnFVvV6P/pwJQE07A1qtkU+d+q2br06HJTUV5ZgxNu8vRUVDaioolUjhv016pDNPKC25uXAmY04+egRGjbrwIEoluLpCfT2Sh/Ovhaeqskgu2sflj16B39+reeeFSl66px0H2L0bDAbIzkYC4gFaf0ZwATcgBiC/mRf37rWp0P+eH/JJqYnl+UcyxRJM4aLy9d5c3tqcyQ2jorhv0qXRuCIxvpr/O9gLs9l6yWyOrzaMSWG3UW+qJtD1/BIWkbX+lGw/SIW3hX2ZEagUFYAnGeU++LlWM7//BkaFHyK9rDc/pU0joyKaeN86AtwaOVwcTLXOBW+ttZyFy9FteB0PpHaAEotsRiHZ2HRAlkk+5UdCaDFKZVTb2wtCD2YyW1e+mC3dM1BmLwkR5XyW23x2XVvGBF/H5vyPqDeUEbjtBCa9xKGqgXhq6vHWhCBJ0pmuvF54uujxc7WmsLmrjTQYNRwrDSTOrwIiI3/LLpswoUNjObEmi3pGkTDLeZl+gu1EsOwiJ2dlQaH17kk+cQIpMdHJI3K8xMusNTf2rCoj/u6Wt9MoNYwPb6arTGEh9etWUuGl5HTlQMwWJfsKLAS5BTA4+CsGBm9CpbDWARob+Q3BHqcoqnmItNIQVAqZvfm9uKLPCRSSTGDfEcxJa8RTOZqFg25r1/ex55CWRK8M0Nq2/FQQWmOxWHjkkUcYN24cgwYNanab559/nueee84xA3A5pwOTLCO5tN2R6VyStzeq629o+fXgYGvnNIsFeoU3v41SiXLR1dDYiORtnzo2ZosZpaJ9XePOun/93ZQ0FJPTP5vbZ1zOB2um8dS6gwTOHGbbAS67DEaM6NC5bdJKT/T8/Hx++uknQkJC+PzxGHorDMz8e8cmjoLQXf17zXGqGo28uPY4d0/ojVJx8QeDR4zRUJ/sRvrBBgaMaLm4t4fGHw+N/wVfN2xYjaWshKzQBAprg5DQk1kRQv/AdOb1X0u4lzU1pH/gSYI9Sll9YhbHisfioTFSZ9CQVhbI6PA88PTEVxlM7O4qFBPuRqVox41ldjb79YOYM7R7LLcXBEf69LYkVhwuYEb/kIu6pvWI4TIvZARQVCgTEtq+71OSJKaE30HNvo3oj//MUa+RVOdGEetrRKUw0WBUkVnhR6hHHWUNblQ0utLbtwqFJOOhMfx2b3dudllS0vlzWxslb7Fm/w8fLYJlPYFYhtlOPa1gthQaav2h/l02xsXMP0BiVOBJPl8XZHMNoNKGEj49+hEFdfmwaRPxFn/qfSMpr0/CaNYS6J7Dk+N280CSHl/t2XXtEiEeITw+uhd3Jv5InH8qOpOS3GpvcqqsN+IKL2/iPXtzW2EE3mrbM1lOH6tlU1E/LptQR21tLQUFBd02tVroGe6//36OHj3KN9980+I2Tz/9NNXV1U1/Tp8+bbfzS1FRSEOHgocHUmwc0pAhdju2bLFg3r/feuwJE1DOmNHyODQauwXKlqV/y5gvhvPv3f/s0P5RXtFNH594vy8KpcQDVxfbnt4fHW2drDnqTyu/M/bt20dpaSkbXy3gx5xh/GtxBgqPS6PDoNAxPW3+BHD5YGt2+vT+wZdEoAwg6d7heFDLN88dt3mfgvp08upSkQsK0GzdgyYkipzqOKoafTHLSmbH7eS5SSfo7//bnEwhqYjz8eaJMSe4bvAmJMlERaMrh4t/qy+kie5Dr0w9oSfbt+Rp/7/WkUk8024MoVJXgMHc0K79BaEnifJ354Ep8fQNafk+41RZPf/85RipBdUtbtPdJc4KACD5l7Y7+zbLYsFrczKBqjAqmIpF9sRVZaKozoOsSl/GRuTxl4lbeWjUXvxcGzlaHEiDUUWAWz251V5N93bnZZd1QPIxV2K9SvD17di3IXQtkVnWTmcLZo8cORKTycSf/vQnZs6cybFjx3B3d3f28C4g+fqivOlm6+eqS+e/e8n9Cm59dhIZ728g/t5pbW7/6v6XWXPqF9KPbuJfm7R4RcQxWF7Ebu/ejI04zNy+qQwNCkWSBtLPbwB6sx6Vwvrv+X36t1Trq4j0/Rkf13vJqZxFenkAMb5V1oOf2xkzIcGm8b/3+HHc6cvCf/TjjTfewGAwMGvWLEaPHt3BfxHhUvbAAw+wcuVKtm7dSngrARAXFxdcOvCUzBaSJKFMGgVJzSyP7KyKCsjJtn5eW4dkQyFre9hbsAuLbGFH/rYO7f/GjHep1FUQ4GYtiv3GP2u44Y+zufr6r1j0Q8tZdN3BgAEDOLgtnW+2XcfCgC1c8950AGRZxmAwOOx9JPRcPW3+BPDPKwfz5Ox+eGkvnfmTx8AobolaxftrkviLXkbj0nqQsM5YyYFSa0diny1ueJSV4T9kBMXbxzEkuJF5ffcwMaoOjdIFb/oSLMcjy2YUkopaYymFDYcYHHoIb9cUNmfdwInyABqNKlzVJmvtstOnrQ1HhgyxZg+3xWjk7S89ifQoJ27GMXYU7UajcGNa+N0oFaJhktBz6U1mJCQ0qtZ/DswWmdyKBqL83FCcCfL/85c0fk0rZu+pCn66fzwWi9z0Wk8RNWcAfpSzf005l9/RgXrOR47AwYOYwqPZu7cXbmoj6eUBuKqM3DTkMJfFZ6JRmgn1rCPKu4ovDg9hT344AW4N1BmsSzFjfKvOr13W3uyyhgaSy6JITKwB2m5GJzifyCxrp/YWzNbr9dTU1Jz3p6tJKtUlFSgDuOapGPyU1bz9gm1PUEaEjkKrcuXyHA8oK4PgYKJ8qrltWAp/npBPQnBYU2qzJEloVVpUChVlDaVU66sAUCv19PJ6n4dG7WFAYOlvB29nG3SDXub99THcGrsdwrwwGKwtj8vLrfWeTp8+zfPPP8/SpUvb8S8iXIpkWeaBBx5g+fLlbNy4kZiYmLZ36on8/JCio8HXD0VcXJed9qHEx7i+/038Y8ILHdpfqVA2BcoArnsykiv7H2fJ8umUrk+x0ygdo0+fPqT9OB1kibd/iUZSWqcTX375Jf/+97+7fcaQ0PU60nCkO8yhvF3VF/XSpubc95QXRaZAfnwxo81ttUp3PNUB+JSD67b9EBwMksSsuCz+PGE303sb0Sh/u5lUSAqUCuu/abW+pOnrkT653DtiBVf1P4ZGec6qgHMfONqg8otVfN24gHtuM9JoqQDAYGnAJFvnUkuXLuX555+3a+a00HP1lIzXL/bkMOCZtQx6bi0/Hypodds7P9vHlJc38+A3B5q+Nq1fEG4aJePjApn+3y30+etqPtuV7eBR25cUEsxEr0P8uM6tPc26rSwWWLcOjEZOmSLIr/WiotGVKO9KHh+7iwX90s+77oR61vHw6D3cOPgwOpOSap2WfQVhv523g9llRe+vYBejmXC5fVY4CI53aUVQHKCtgtkOrQEEyHV1yFVVSEFBSBr7rH2WGxqwHD6MFBGBolf76mVZTucinziBYsgQpED7R8wzKzMwWUz082+96L1WC3fMPM37q6fwjyMncRvcemHeBfELWeA/Gf7yF2tg69gx3Ex6himUKKpa/jHxMTUSm29ARkYCfLRuDFBstr54bj1/o9HaWe748WYLZv+Y8QPJRXu5N+EBtr1YQ7F5APf9yY+goCDmzp1LSUkJE84UkszPz8dgMJCVldXq9yQI999/P1999RU//fQTnp6eFBVZU9e9vb1xdW2+TXZHyCaTtbi+l5dTbiolhQLljJldft5wrwgeT3rKbseTJHh7XSwDouu556pSluVUo/DtnhOqL584yHdZiXxz+zqCRv72b19aWoosy03B/XOZTCYOHDiAv78/sbGXRrF0oWVtzZ/AsXMok9nC/pxKvF3V9A9tvhNaR/yUkk9GSR1LJsfiprF9mt1gMPHC6uN4alU8NqOv3Zd9Go1GcnJyiIiIaDPzc9A945j42B7efsOTa/7S+nFVCg2Tet0Ge36A0u2gVmMpK2WIfBBVRevzUk99CUpTVdPf/bUawpX58PuYaH09bNrUbHa+zlTH8cqteLsEE+OVyKf/zMMkqbnjzyF4+k3GRemOvzYcF6U1ezErKwuDwUB+fj4RERGtf3PCRa8nZLwazRae/TkVs0XGbJH5609HmTe05Zqi+3MqAdiXXdn0teuTIrk+KZKPdpwis9RaM+vl9Se4ZUy0Q8dub3ffquey13uz58dCRl/ZjuyyM1llREaSVhCIhMzcPie4btBRfM8U8/89jdLMlf2PE+dXwReHB1NU58npGm8ivas7nF32wYuVqBVmbno0sO2NhW5BkkUhpA6zWCzMmzePqqoqtm/f3uw2zXWXi4iIoLq6Gi+vzk3O5MJCzL+sskbLPTxQXrmwqTNcZ5h37UQ+ehRcXFBedz2WlINgsaAYNrzNotymr760TmpCQ1FdMbfTYzlXdnUWV/+4ABmZTy77ikGBrXdEyTqmI36gmn8M/panD1/f9gl0Oti2DYxGTlZm8lryf/F28eavY/8PtbLl1P1jZalszFmPp8aLBfEL8db6NL+hJFk79P3uxkBnamTCl6OQkVkQfS1LL7ueAMrYVJfUbGc5k8lEcnIyYWFhzU70UlNTWbVqFcOGDWNGK7WbWlJTU4O3t7dd3qOCc7UUuPr4449ZvHhxm/vb8l6QzWbMy76DmhqkwUNQiqXCnbb8tdNc9XAv7g9dzmsZc5Dcu1ctsLUvH2XuE324LnwHn2ZPasoqA2sGbH5+PgMHDkT5u+WwO3fuZP369UiSxKOPPoqnDd2ZxfXo4mTL/AkcN4eSZZnbPtnH5hPWLPBnrhjAbeM6n3lb3Whk6P+tA+AfCwYR6evGisMFzBwQwowBwa3uuyw5jyeWHQLgu3vGMDK65SBiR/zwww8cOXKEuLg4brzxxja3X3rzSq774gp2fJrJ2FtsyNhNT4eTJwE4XrmNGkMxUZ7DCHZrOTButhg5XXuUBnM1AdpogtyiWz5+YCCMHHnBl9Mqt3Kyeg8A41IGMvzK/oweq+TrHZHNHiYvL4/8/HyGDx+OWn3+3M5oNPLFF19QU1PDTTfdhL//hQ0MWiOuVz1faWkpQUFBbNmyhYkTm2kC9jtd8X9uMlsY9OxadCYLEhDg4cK+P09vcfs1qUUs3ZfLLaOjmdLv/MSFvacquPa9XcjAhPgAPr+95dIYFovM57tzMMsyi8dE223ZZkVFBQcOHGDQoEGEhIS0a19LTR1xPmWMH1jJZ0dsbIZkscDLL1uzwAYOZNfpcAxmJeMjc1EqbAuDVDZq2XCqNxOjcghyt3ZeR6ezXvMeesimzpim3fuJGRPM7JkW3l/r3C694lplO5FZ1glnC2a3NtFzZA0gS3o6TfmgdXXIeXlINi5BkmtqMK9aCZKE8vIrkM65aZHCI6ydM3vHYknej3w0FSSwGAwoJ05q9bhSbCzy0aMoYnp3+Puyl94DtDx++TGeXbWQ+a+uZ8DDbQSOtFo4E1w6nbuBHSZPNEo1f5w9A7XaerNao69Gq3JFo/ztaekALmMAf+jwOF2UWsaHT2Bv4R6K/5bI8YZI9r1f2WygDEClUjFqVMu/3A4fPkxjYyP79+/vULBMuHh0ybOQhgY4szRKzs9rY+NLi8FgQK1u/xKuKx+K4J38k9zzn6twH7SU54/O7TYBsy1vpbLwiRhm+ifz4bEx5wXKAPz9/Vu8wfQ9U83WxcWF7du3U1FRwdy5c8VE7RJky/wJHDeHyqtqbAqUAXy041S7gmUvr0vn/e1Z3D2hN4/N6Nv0dU8XFeNi/UkvriUu0IMbP9yDxSKz7EAeW/8whQjfln+OR0b7EuihwUOrpk+w7Q2B2svW3wuL3p3BqO8Pcdvd3qQsMOLq1Ua9r759rX+Aovwi6ox+eHsPJ9h33JnzWjBYdLgof/s3UALRzO/Q93FWkGsM2TUH8NN78rebiylWTOXvn7T8ngkPD2+xdmdZWRm5ubkAZGRktDtYJvR8bWW8NhfAdzSVUsEr1ybw5x+PolZKvHx1Qqvbzx4YwuyBzQehkmL8+HHJOE6V1TNzYOsB/B0ny3hmRSoA0f5uTO3X+va2WrNmDRkZGWRkZHDfffe1a1+Flwf3jf2Vv+yYw3/z9QT0suH3Q2qqNavMZIITJxjDCevXM20/ry+wSHUY8n/3Qk2NNbts9GhrplkrVv55F3k8yH3/sK35nNA9iGBZB9laMNuRJG+v8yY9krftNxxybi7U1Z35PAdp4KCm1xQREShuXQyAedtWOHufZzS2eVzlqNEwyjGZJdHevfl63jJMFnObyzDPeu7b/vwcnM/iJwLYeW0ZqpAAm/abFDGVN6a/S7B7CG5nAmXJRfu4b91dhLiH8P2CFa1mm7WHJEn8b9qbHPgxl6StYfw1aR0Jd17W4eONHz8ek8nE4MGDsVgs/PTTT1RVVbFo0SKbMjkEoT0kT0+kYcORT+eiGJnk7OF0CZPJRGlpKcHBwShaKDi9Y8cOfv31V8LDw7ntttta3K4ld/87lvraDB57+1pq43/g9dRpTl+SueqfB1n0l36M807lu2ODUHu2L5O5f//+PPTQQ5hMJt566y3Amgk7ZswYRwxX6Ka6w/zJz02Du0ZJo9FaMLt3oEe79v9kZzY6o4VPdmafFyxTKCS+vNM6ByqsbsRsOTNHk0FvbL1maZS/O/v+7LgHXHPnzmXIkCE2Lz1UurnwyedKEhaF8LfL9vHi9rE2n2t08DVU6gvOyyrbXfwd5bpchvrPJsKz9ZUB7eGvjWBO1CNsmfsSb9Q9wSt/KycuvmOrLIKDgxk1ahQ1NTUMHjyY7Oxs1q5dy9ChQ0WDpUuAxWLhkUceYdy4cQwaNKjZbRxdXqclsweFMntQB4raN2PLiVLe3JxJflU8909pOcki2t8dd40SiwwxAe27RrYmMjKSjIwMoqOjbd7HIls4UbUDCYnF/+7HX8fLvH7nYZ5bbcO808XFGsyyoW50h3h5tXls+UQG/900jNER+Qwf2b4SR4JziWBZO8myzIMPPsjy5cvZvHmzUwtmS0OGIhlNyOVlKOLi21UjTIqOttbPkkCKim55uz59kWvrQKlE4Ygudu0U59unXdsfrtpN0pNr+PJvf+OlWd/yx0M2LMfEGsAa3ev8iWFebR4W2UxxfRE6c6PdgmUABp2FxTcaGaxJ509rW8/e+72MjAwOHjzIhAkTCA0NJSIigptvtnZALS8v5/CZorjp6emMGDHCbmMWhLOUI0bAJfLekmWZDz/8kKKiIvr168e1117b7HZnf+7y8vKoqanBx8en3ed69K14PLxOcs+/F5ATsZX3vvYkbG5iZ4bfISadif/M384z68YxN3gvX6cNw6WVDJnW+Pr6Issyw4YNo7S0lP79bXvwIfR83Wn+5O6i4rPbR/H2lpP4uKl5ala/du2/ZEoc72+zZpa1xM9dw5LJsew5Vc7cIWHEBdnvZrMj1Go1ce1ogGKRzRgm5fPkhBT+se0GFn6eyZibbdtfq/IgVHX+fK3OWH7mY4Xtg7ZR/c8buH3llUyIK+DBZ1qu5fR7RqORNWvW4O7uzpQpU1AoFMyePbvp9TVr1lBUVERNTY0Ill0CbMl4ffrpp3nsscea/n52aXhP8u3+0+hNFr7df7rVYFmEnxt7/2Rd7unuYr+Qwfjx4xk1atQFy6BbU67LIbN6NwBjEq/j0WFbeH7NFK5efZpBc9r49+/Tx/rHSWSzmTdmf8s2+c/88nrXN6kROkcEy9qpqwpm20JSKlEmdSyTQ/LwQLVoUavbyKUlWFZY24ErF1x53lLNnuLDw+9xLHI/U0bE8cz+axj76A9M/N/CDh3r8ti5KCSJCK8oPDXNZ/H9Z8+/+OXkCh4Z+QcWxNt2HlmGR8buJa0hkX3vH0Lt076Cohs2bKC4uBi1Ws2VV1553mt+fn6MHDmSqqoqcVMqdEuyxYIleT8AisQRSO3MwLL5PEYjclYWkp8fUmDHC6uazWaKi4sBayCsJRMmTGDt2rXExcXh7d3xjLC7XoglNOo0dz48mIHzFLw252tuWrYAya1rft8c/TGTxTcaONgwgSdHb+PvG8aicutcMxlJkpg3b56dRij0FN1p/gSQGOXLB7d0LMh/36RY7pvUepOK+744wMb0EmYOCGbx2J7XibhSX0Bu3WFGvmMmacQhbrnDj11J5QT07djSxNHB11Chy6OXx4VNjgBqDWXsKf4OjdKdMSHXolbYtvxWPpnFg9eVUqgYx9pfXGjPr5CsrCwOHLB2DExISLhg6d3ZLLMhQ4bYflChR7I149WR5XW6yp8v789HO05xx/i2S+bYM0h2rvYEygC8NcF4qgOQJAVe6kCeWTuWn3rlsPgaC7vLLag0jpk72sPxv73Bn049xLyp24iZKANt18ITug8RLGunt99+G4DJkyef93VbC2b3JHJ9Q1NNNLmhga7ucSfLMhkZ1rbl8fHxLdb9OXHiBMuXLycwMJCbb775vAvwdf1vpFpfzY2f+iHPzmHuK9PY5P8Lw//S/mWOKoWKuXELWh3vsvRvschmfkj/1uZg2d+m7+Ttg2N57+r1JNzZ/iUY48aNY+/evQwfPvyC1yRJ4rLLOr6kUxBsJcsycmYmSBJSbKztdbpKS5FTUqyfR0ZBsH1qYvyeZcd25IwMa53G665H8uhYlodKpeKKK67g8OHDrS4fHDRoUIvLONrrivsiSF1o4qHZ6dyy+nq+C9rIO195ETbPcdl8pkYj/1mwg+fWjSFWk8euj46TdNvkdh/n+PHjHD16lEmTJhHYiSCl0PNdSvMngLyqBuvHykannL+2tpaMjAzi4uJarAtoNpv56quvyMvLY968eQwcOLDpNR9NCMGusVi0Zj7+0YPJs92YM7yIDelqvMLbX2fQUxOAp6blUhhFDRnozHXozHVU6gsIcrUhwFhYyNOJ6/i48V4+e62q3csvo6Ki6NOnD+7u7k01Fc91dhm9cPHqThmvXWXOoFDm2GlJZ1fRKN2sXXfPUAdq+eSV44y5fzj/WbSXP/3cPTM/LekZPPDCELzc67nxlQO4Ktu3ekhwPhEsa6dLqXmoFBWFYoI1+i05IcX42LFjLFu2DICFCxcyeHDzNS6Sk5PR6XScPn2a/Pz889bAT42aztQoawrxlKMy02NPMeOvo1htXEXSc5fbdbySJHFvwv2sOvkziwff2eb2sgzPTN/BPzaO4z/T1nLXt7M6dN7Bgwe3+G8jCF1FzszAsnkzAIozAbPzXjcYrE1F9AaUl1/+W6aqvz+cvb44sJiyrDec+US2FnnthOHDhzcbnP49i8XCxx9/THl5ObfddlungkX+wSq+PDiQq18/zb2PDyVuvis3hKxkycMahj82GTSdy/Y6qySlgA8fP8Y7m/uRZ7Fmkz2zejRan47VAFq3bh2VlZVotVquuOIKu4xR6JkupfkTwNs3JrLycCHzhtq+LNCePvnkEyoqKvD19eWhhx5qdpuSkhKysrIA2Lt373nBMqVCzcjgMw/9QmDt1+lMvi6cy/qfYtWRSLyjLwwudUYv9/4UNWTionTD36XtWnZyTi5/G76Cf1ffzyt/q+DmB9vfPVSr1XL99baV5xAuTt0l47W0Vk9+VSNDw73b3RToYlBVVUVycjIxMTH07m1bk7ikJSP5wwdreXbFFGZ+nsaIm7vZCpq6Ol6dsZKNlkf5+fNSxsUvwtfFOb8PhI7rvjmLlyDZZMKcvB/LoRRkRxUhbAdJklD064eiXz+nXLh1Ol2zn/9eQkICKpWK0NBQwsJavgh5ekmsPR5Fv+BKpv3fRNbf/Z3diz3ePuQuvr9yRVOAriXGBiMPDd/O3zeO44Xpv/KH9TPtOg5B6HptXCMqK6CsDGprkAsLf9tLpUI1ew6q2XOQVI57fqMcPx5pyBAUU6chdaB+WEfo9Xry8vJobGyk8JzvuTMWPBjBsTxv/nztSdZWJpH49ExGexzhs/nfU3/wRIeuaebaBrb/dy83Rm4lfFgA/7dxHNP6nObA99k8v2tyhwNlYM18DQ8PJyEhocPHEARb7M4q59mfUzmaX+3soQAQG+jBw9PiiQloX2kFezk7b2pt/hQYGEhkZCRKpZLExNbrISZc25e1nxRyrD6Syf2LKN6Xa9fxuql9mBB2M0nBV6FUtL5Ey3zwMA8N2sA/Ku7nP0+V8/Bz7Q+UCQJYM16rq6uZPHkyoaGhTX+WLl3aZWMordUz5eXNLHhrB//7NaPLztud/PDDD2zfvp0vv/yShoYGm/d7dv14hrlnMOfWQI6vbEd7S0fT6fh69Ks8fvphHruxmLlXBuKn7XXe/bROp+PQoUPU19c7caBCWyT5UnvU52Q1NTV4e3tTXV19QVq8JSUFy769ACgmT0YR77xihN2B2Wxm925rMcfRo0ejVCpb3FaWZSRJorGxEYvFgrt7y5PT+jqZq4ZksPZUHx4K/4F/rU3EfUAUYO22cqzsKFHe0S3WJeusI9+fYPHNZg41xvPm1Vu459tpDjlPR7X2HhUuLe15L8iyjJx1EpCQeve+IMAuWyxY9u4FvQ7FmLFIdsqEanU8Z5Z3SgkJTntSm56eTkVFBUlJSa1ewzrCZIJVb+fy5ov1rD/dHwVmBiiOkxh0msQBOhInuRM7LhRXXy0unhqMegu6aj0lp+o5sL6M5P0yydkBHGjoSz0exGlyuG9uHotfHoJfVPeoUSmuR8K5Wno/mMwWBj+3jkajmTBvLTv/2L1+rzpDQUEBR44cYfDgwa0+SITfsv4qKyvx8fFptXvvkZ9PMXOhOxYzvHP3Aa5edMAFAAEAAElEQVR8eyZnC4XpTHXozfV4uzhmOT1GIyee/IDbXh3KLnk07/6nhrv+4OOYc3WAuF5deuzxf344r4p5b+4AYFq/ID68daQ9h+h0BoMBWZZbrfX25ZdfkpmZiVqt5vHHH29XXbiKk5VMGlhGpdGdX5fX0W+ek++f6+tZNu5/XH/oKW6cXc5Hq0KaraX4448/cujQIeLj47nhhhu6dIjiWmU7sQyzO9Ge8/TepeNP8i8WSqWScePG2bStJEnU1dXx+uuvYzKZWLJkCf4tLOly95BYldGH1x9M50/vzGHVoAI+euRHJr40j4+OvMc7KW/SyyOcHxf+YtcbbGODkX/P28H/bRhLH5ccdn+SzohbxYReuDhIkoQU23JXJUmhQNmV3cSKi7Hs3weAMjQUQkK67tzn6Nu3r8OOrVLB/Acjmf8gZKbUsemTHJJ36knOiOPrjREYNrY+2Yx1OU1ir2L+lpDK6Dm+jL8tHoUyymHjFQRHUUgSXq4qGo1m/NwdG4jvKcLCwtoMkp0lSRIbNmxg+/btJCQkMH/+/Ba3HTwvhoNptdw74yQL35vNdT9u5PXVcXgnBLM5/0NMsoFhAZe3WMi/o8wpR3j1ivX8Of8+wn3r2fKdiQnTfOx6DkFwhsG9vHl0eh+O5lfz5Kzm5wxmi4zRbEGr/u2hm8FkodFoxtu1fcXyu1JxcTEffvghFouFW2+9tcXOoQsXLuTYsWNERES0u4GCX6wv6/aZmZFUxYQFfqz9IIXhtyfYYfQdUF7OR6Pf467Mp7l2SikfrGg+UAYQEGCt4SjquXZvIljWjUh9+6JwdQWVCkWvXs4eTo9jNBoxGKx1ifR6favbKpXwyFt9ufyuOm6bIzPpfwu4++ufGXRbNlK8TI2hGhkZyQ5tDcw6I788s4dnX/fnUON4nhq7jb+tHouLV8/upiMI3ZqfH5ydgPhd/Et04hI8iHtlIHed+bvBAKnbK8lLKaWxxoSu3oxaI+HqqcInSEPCFeH4BEUAPavlvSA0R6GQ+HHJOHZkljO1X5Czh9MjnV0KVFdX1+a2IfGeLD+VwFd/OsqD/xnOwEQDz89fQcgTVRDuhsFiv6YG8sksdv91FU98k8gu+REevq6Ef34Ygpub3U4hCE4lSRIPT4tv8XW9yczlr20np6KeT29LYmxsAGaLzOxXt5JT3sA3d49mZHT3nOdkZ2djNBoBa/fZloJlrq6ubS4Fb03o4AC2pKqZM7SA8Xf04fmvVvDgipkoXLvuXqv6ixU8dlctH+me5t4ri3lzWcuBMoDx48czYsQItFqRINOdiWBZNyJJElJU+57qy9XVyHV1SGFh52VByTU1yNVVSOERDl1+JNfXY96yGZQqlJMnIzmxnbKvry933XUXJpPJ5qep8cM82JIfxxsPpvOP9ybw3vPzmOIyh8ULcrBMrUQR3PGC4yWHCvnwsVTe3dKXHPN4kjyPnckmm9LhYwqCYBtJo0G14EpnD8NpNBoYNtWXYVPtW4RbELqrUG9XFiW2XRj+LKPZwvaMMgaGeRHk9dvNitkiszm9hH6hXvTycWyB7093ZvNt8mnuGt+bBcOc+5B09uzZxMfHn9ckqTWSBDc+P4hpt9eyZE4hd/y0iKCfJnBrn40MfE4P18rWjTrCbKb+x/V89Ww6bx2dSAoP0te/lC1LTUyY5pwsYUFwtJOldXy6M5tJfQKZ1v+3pczVDUYyS61B7JTTVYyNDcBotlBQ3YhZlsmrbOi2wbJBgwaRlpaG2Wx2eO1S/97ebDrtxp8uO8gjG+ayzD+Zjz5XE3/VEIeel/Jy1lz1PndtuZFqlT/vvVjFnY8H23T5E4Gy7k/ULOti7aoBZDKBJCG1UOdG1ukwf/UlmM0oJk1G0ce6Rlu2WDB//hkYDCgmTULRx3HLgMz79yEfPAiAYuxYFAMHOexcjqbXySz7dyZvvgm7SuPpRR5zIw+TONTEiGneDFwQjzqqhSCcLFN5JI/k77NJ3lbP7qMerCpNQomZ6/sd5L6/BTHy+paXqHUnYh27cJZ4L1w8Dh06xObNm+nfvz8zZszoMd22xHtQOJet7wdZlqnVm/DStrw86T9rj/PW5pOEemvZ+dTUpp+Jj3ec4rmVxwjx0rL7aceVStCbzPT72xpkGby0Kg4/07GO2N1F2t5a3v5DFp9u702dxY3L3bcwO6GIxAmuDJ0bhTZxILT0QLWhAcvBQ2SsOUny1nq2H3Djq7q51ODFFQl5LHkmiJnztK1maXQH4np16bHn//nCt3dwILcKpSRx8G8zzrt+/XgwnxMltdw3KRbPM18/VlhDdlk9sweGoFD0jN/prdHr9Zw8eZLevXt3Ooi09ZMsbr9XTYHen/8bv5773hmK+8Bo+wz0rLo68l5fzjP/p+Qj3Q3MGFTABytDiYzq/v8X4lplO5FZ1k3JpSWYV64EhQLl/AU2dG87J+YpSaB1ta7D0Tr2qagUHGI9s0KBFNSzlz64aCVufCaeG5+BlI0VvPeXUrYeGcB7KyKwrFDi8oiOIeqDhLjXolWZUass6IwqGoxqTtSFkmWJASLwoJZBXid5YeE+Fr88GL/osc7+1gRBsIOGhgYOHz5MYGAgsbGxzh5Ou6xbt46GhgZ27drFqFGj8Pb2dvaQBMFhHvj6AKuOFHHz6Cj+Pr/5h3hnHxX//pFxgKc1oBPg4djaZxqlgqHhPqScrmJU745nsXcX/ZM8eW3LUP5VK/PVs+l8+Hk0D++YgGmHGtULRgZyjGG+p/B3bcBVY0aBjM6goK5RQWplLw4wjFrGABDtWcp9tzZyz7M+REdHOvk7E4Su0cvHlQO5Vfi6q3FRnR8Zbi7zdECoFwNCL55Ax8qVKzl69Cj9+vXj2muv7dSxJi7uzaEFRv50WQpPbp/L3wfVsjj6J+57ypt+d02w1uPpIDn1GBv/vIG3VkXyk+l63NWGM9lkYR1OphW6L5FZ1sVsjeRaDh5sKk6tGD8BRf/+zW4nV1Uh19chhZ3fjlY2mUCnQ/LwsO830NwY6uqswbKLtIBEfZ1MytpiklcXc3CfmfIqJTqjAqNJgVZtQquxEBOiI3GcltTqjajD6lAo4Mknn8TV1bHBSkcQTxuEs8R74XwffPAB+fn5ANxyyy3ExMQ4eUS2W7ZsGampqfj5+XHfffehUvWMZ2XiPSicy5b3gyzLxP1lNWaLjJ+7hgN/mdHsdkazha0nShnUy5tgr/OzGPKrGvF315xXTNsRDCYLp8rqiQvyQHkRZIb8nk4HR/bpSF5RQPKORg5lulOjc0FnUmFGgavKiFZtpm+UntjEKjzGpNM7oYyhkQMZ6D/V2cNvN3G9uvTY8/9cZzSz62Q5A3t5EeTp/OV5sixztKCGYC+XLhnPunXr2LVrFyNHjuSyyy6z23Gz0xp574kTfLAuglKTH1O1O7h6ZA4jJrkzeG40LsMGgLqFLGRZhpwcqrYe5sCaEvbsNPNpziTS6cfAwGKWPKTmpof8cNSPe3l5OZWVlcTGxtp1RYC4VtmuZ8yWL0FSfDzknQalEqmVGzLJx6fZrDNJpYIuCJQBXRKQcyZ3D4lxV4Uw7qq262R8+eUxMjMzCQ4Obnc3F0EQureKioqmz8vLy9sdLDMajWzbtg03NzdGjRrVpUshFy5cyIQJE/Dz8+sxgTJB6AhJkvjTnP58tTeHeya2nAGqVirOqwt0LkfXKjtLo1LQN8SzS87lDFotjJygZeSE3m1uW6HLZ1fRJmQs+Gltrz0nCBcLrVrJlG7UoOStLSd5cW06bholGx6bRKi3Y6+LM2bMYOTIkfi0uZqqfaL7u/KvVUN5Rifz/YsnefvNIB7YNgrzNhXqfxgYJB0l0T+HXt51uLqYUSnM1DXqadSryS7xJ9kwiEzmAeCm1HHF6BLe+4eRCVNtq0vWUXq9nnfffRej0cicOXNISkpy3MmEFokZczcleXigmjvP2cM4j6zXY96yGcnVFcX4Cd225o0sy6xcuZKTJ08yb948evdue5JmL9dffz0lJSUEBASg6O7FNQRBaJfZs2ezbt06goKCGDx48AWvHzlyBKDZ1wAOHjzItm3bAAgNDSWqnQ1dOkOhUBAc3HxgQBAuNneMj+GO8d0r8/PHg/l8sSeHp2b367bFuAEKCgpYtmwZISEhLFq0qMvmMn7aXkwLvweLbMZNLZaJC4KzHcmrBqDBYCanvMHhwTJJkvD1dVxTIhetxA1/jeWGv0JjIxze03gm61XDvozhrC5wp9GkxmBRolHo0ar0RAXVc/lwJYnTq0ic5kPfvlqUyq5ZGn7u4j+xENB5RLBMsJmcnw85OdYaZYOHgJ0j//ai0+k4cOAAYL057cpgmUKhICREdGoShIvRkCFDGDKk+a5KRUVF/PDDDwAEBAQQGhp6wTZBQUFIkoRarbb7k1NBELq31zZmkFVWz+e7c7p1sOzQoUNUVlZSWVlJRUUFAQEBXXZureriXqkgCD3J4zP6oDOa6RviSVI3vmZ1hKsrjJrsyqjJF2Yfp1duJ6N6FwDDA+cR5u7YBm1ms5ni4mKCg4NRnlNLTavVcs8991BRUUFcXM9oEncxEsEywWZSeDhS797g6gbduDi0q6srSUlJnDx5khEjRjh7OF3GZDJRVFRESEiIWGYlCF3M3d29KQDWUiAsOjqaxx57DJVKddG2Cy8qKmLz5s1ER0czevRoZw9HELqNx2b04Zt9p1k8NtrZQ2nVsGHDOHXqFCEhIfj79/zGA7Y6u8zez+/iCgoIQkfFB3vyyW2X3tK/OJ/RaJRuqBUuhLr1cfj5Vq9eTXJyMsOHD2fu3Lnnvebv74+/vz8Wi4WCggKCgoJQt1RfTXAIcUct2EzSaFBOm27XY9bW1rJ06VJqa2u54ooriI+Pb3X77Oxs3NzcCGqj8+acOXPsOcwe4fPPPyc3N5fevXtz8803O3s4gnDJ2LZtGxs3biQhIYH58+e3uq3HRV7jcf369WRlZZGens6AAQNE4VhBOOOKIWFcMSTMrsf8ZOcpXt+YyYhoX167bhguqpYbEtTX13P69Gni4uJafaAWEhLCkiVL7DrO7u7UqVN8/vnnACxevJjISNGBU7i0vb3lJMk5FfzfvEGEdVENx+5CKamI8RreZeezWCyANcOsJevXr2f37t3iHs8JRFElwamSk5MpKCigpqaG9evXt7rtqVOn+PTTT3n33XdpbGzsohE6x/bt23nllVfYvXu3zfuUlJSc91EQhK5x/Pjx8z5eyiIiIgBrdp3bRdohWRC6A6PZwt9XplFeb2BtajGb00tb3X7p0qUsXbqUTZs2ddEInaOqqor333+fDz/8kJqaGpv2KSsrQ5ZlZFmmrKzMwSMUhO5NbzLznzXH+TWthJ8OFTh7OBe9yy67jMWLF3PFFVe0uI1OpwO46O9/uyORWSY4lZ+fX1PRwrbS/V1dXZEkCVdX1/PWdDuLXq/HbDbb/YbQZDKxYcMGwPokwdaueYsWLeLQoUMMGzbMruMRBKF1M2fOZOfOnQwdOtTZQ3EaWZbJzMykV69e3H///Xh7e4vl4ILgQCqFRJiPltOVjUgSRPi1Phfx9PQ876MzybJMTU0Nnp6edm8gcPYhLEBKSgoTJ05sc5+EhAQqKiqQJKnFupSCcKlwUSl5aFo8+7IruGLwhfVXBftSqVRtNnyaM2cOsbGxREdHd82ghCZiJis41eDBg1Gr1dTW1pKQkNDqtiEhITzxxBOoVCo0Gk3XDLAFZWVlvP/++xiNRq655hr69etnt2MrlUoiIiI4ffo00dHRNncdjY2NJTb2wkKVgiA4VlRUlE2dLWVZRqfT4eras5Y0ZGZmkpeXR2JiYos32hs2bGDHjh0ATJ48mUmTJnXlEAXhkiNJEt/dM5YVhwtIiPBhQGjrS56vuuoqZs6ciXc3qDm7atUqkpOTCQ0N5c4777RrwCw6OpodO3YgSZLNHYfVajWzZs2y2xgEoad7dLrja3W1xGAwsGfPHgIDA+16f9WTaTQaBg0a5OxhXJJEsExwKkmS6N+/v83bd5dlPbm5uRgMBsB6I2nPi7kkSdx6661UVFRcUsV1BeFi9/nnn3Pq1CmmTZvG+PHjnT0cm1RWVvLVV18hyzK5ubnccsstzW6XmZl53uciWCYIjhfireWuCbZ1/FYoFN0iUAa/LVkvLCykoaHBrrUcY2NjefTRR5Ek6aKvESkIF6Pt27ezbds2AB555JFuc90SLk2iZpkgdED//v2JiooiICCAkSNH2v34SqWSwMBAm5+26vX68wJ4ggCwdetW5s6dS1hYGJIk8eOPPzp7SJcsWZbJyckBrPUX7SklJYWXXnqJn376qWlZe1cbPvy3YrhiKbggCK2ZNm0aXl5ejB492iEBLU9Pz3Ydt6SkhNLS1mu+CYLQtnq9ie2ZZVTWd/x+xNfXFwCtVouLi4u9hiYIHSIyy4Ruq6GhgeXLl6PRaJg/f75NSy/T09MxmUwMGDDA5uWLHeHq6srixYsddvz2aGxs5O2336a2thYfHx/uvfde8ctFAKzdz4YOHcrtt9/OwoULnT2cS5okSSxcuJDjx48zbtw4ux57y5Yt1NfXN9XnOTvRtAdfX19uuOGGpmWYLUlKSiI2NhZJkvDz87Pb+QVB6JgDBw6wf/9+Jk6caFP2e21tLWlpafTp0wcfHx+Hjm3YsGHdJqi+a9cu1q1bB1gLbTviAaggXApMZgvz39xBZmkd/u4aNjw2CR+39pfNGTZsGGFhYXh4eKDVah0wUkGwncgsE7qtY8eOkZmZybFjx2zKxMjOzuabb75h2bJll1RXutOnT1NbWwtYu0Dl5+c7eURCdzFnzhz+8Y9/cOWVVzp7KAIwcOBArrrqKkJCQux63LN1LEJCQvDyar1uUUfExcUxefLkNguD+/v7i0CZIHQTv/76K4WFhTZ3v/zuu+9YvXo1X375pYNH1r0cOnSo6fPDhw87cSSC0LOV1OrJLK0DoLzewIniuma3Ky0t5ddff6W8vLzFYwUHB+Pu7u6QcQpCe4jMMqHbio2NxcfHB41GQ0RERJvbn9t5Ta1W220cRUVF7N69myFDhtC7t221QbpSWFgYWq0WnU6Hm5ub3W/EhUuHXq9Hr9c3/b2mpsZux5bNZuSCAqSgICSR+WgTi8XS4lLs5ORkysrKmDRpEtOmTWP06NG4urravbOcIAg904gRI9i7d2+rGaHnOpu9b8/5kyzLbNu2jcbGRqZOnWrXY9tL3759KS4uBqBPH+cVNReEni7UW8u0fkFsOF7CoDAvhoQ3X2tszZo1ZGVlUVpayvXXX9/FoxSE9hHBsnbaunUrL774IsnJyRQWFrJ8+XIWLFjg7GFdlHx9fXn44Ydt3j48PJw777wTs9lMZGSk3caxfv16srKyyM7O5pFHHrHbce3Fw8ODJUuWkJeXR0RERLdpgiD0PM8//zzPPfecQ45t2bEdOT0d/ANQiSWhbVq2bBlpaWlcddVVDBgw4LzXqqurWblyJWCtzTN27FjxBFboEcQcqutMnTqVqVOn2rz91VdfTVZWFtHR0XYbQ35+flNmW2hoKEOGDLHbse1l8uTJTZ3Hbe2eKQjChSRJ4oNbRlBWZ8DfXYNC0Xw5nP79+1NUVCQ6XQo9gngE3U5nawC9+eabzh6K0IxevXrZNVAG0K9fPxQKxQU3rN2Jp6cn/fv3F52fhE55+umnqa6ubvpz+vRp+x3cZLZ+NJvsd8yLWGZmJhaLpdkl6O7u7gQHB6NWq+1+vWuPlStX8ve//53du3c7bQxCzyLmUN2Xi4sL/fv3x9XV1W7HDAgIwN/fH3d3d8LDw+12XHuSJImYmJimgJkgdEfldXo+2JbFieJaZw+lVZIkEejp0mKgDKxZr3/4wx+6Td1CQWiNyCxrpzlz5jBnzhxnD0PoBL1ez5dffonZbOamm25qc2I4cuRIUfBVuCS4uLg4rDmEYvx45MhIpNBQhxz/YnPNNddw8uRJRo8efcFrKpWKe+65B1mWnbrs8tChQ1gsFg4fPtzsOAXh98QcqudLSUlh06ZNTJgwgREjRrS6rVar5YEHHuiikQlC+/WUbNdnV6Sy4nAhwduz2PP0dGcPp0NMJhN79+7F09OTwYMHO3s4gmATESxzMEfWABI6prCwsCljJi8vj/j4eCePSBAufpJGgxQX5+xh9Bi9e/dutUaiJElIkkR+fj75+fkMGzasy+sBzZo1i5SUFCZNmtSl5xUuHWIO1f0cPHiQmpoakpOT2wyWCUJ311O6hof7Wkus9PKxX+ZnV0tOTmb9+vUABAYGtlhj2WAwIMuyQx7eWiwW9uzZg8FgYOzYsd2yjqLQvYhgmYM5sgaQ0DERERGMHj0as9lMTEyMs4cjCA5TV1dHZmZm099PnTpFSkoKfn5+Tl2+J9iHLMt89tlnGAwG9Ho9EyZM6NLzjxgxQtwsCw4l5lDdz7Rp09i9e7f42RcuCj0l2/UPM/syb2gYMQE9tz6pj48PYG0i0lJ95YqKCt59910sFgt33HGH3ZuWHTlyhHXr1jX9XTzsE9oigmUO9vTTT/PYY481/b2mpsamzo62kE0mzJs2gtGIcuo0JK3WLse92CmVSmbNmtWhfX/44QfS0tK4+uqrRdckodvbv38/U6ZMafr72WvRrbfeyieffOKkUQmdtWXLFk6cOMH06dMJCgoiPz+foKAgp4ylqqqK1atXExMTI5ZiCnbnyDnU2tQiXtlwgsVjorl2pHh4YKvIyMgOPWwpKCjgs88+Izg4mMWLF4v6YEKP5KxsV4VCon+oV5ecy1H69u3L/fffj4uLC56ens1uU1JSgsFgAKwrgewdLDvb9ff3nwtCS0SwzMEcWQNILiqC7Gzr57m5SCJ443AZGRmYTCays7OdGizbv38/eXl5TJ48uelJjSD83uTJk5Fl2dnDsAvZbMayfRuy3oBy4sRL9uFAQ0MDmzdvBmDbtm3cdtttGI1Gh/2eacuhQ4c4ceIEmZmZjBo1StwAC3blyDnU21tOklZYyysbMkSwrAvk5eWh1+s5ffo0er0erZOu4dXV1WzevJmwsDBRj1ZoN5Ht2jkBAQGtvh4fH8/48eMxmUwMGjTI7ufv168f1157LQaDwa7Hz8nJYfPmzfTu3Zvx48eLudBFRATLejApOBjCw8FoRLLTk1bBSpZlMjMz8fLyIjg4uOnr11xzDVlZWU7NoKitrWXVqlUAKBQK5s2b57SxCEJXkYuKkE+csH6eHYHUr79djqvX61m6dCkNDQ1cc801+Pn52eW4juLq6kp0dDQ5OTkMGDAAhULhtEAZwODBg8nJyaF3795icij0KHeMj+HldencMU6UY7C3qqoqCgsLiY+PR6Wy3mokJCTQ0NBAcHCw0wJlYC3onpKSQkpKCn379sXLq2dn6whdy5HZrl0tOaeSwupGLhsU2mr3yq6kVCqZNm2aw44vSRL9+vWz+3FXrVpFaWkp2dnZ9O/fv8WgYEpKCtu2bSMxMZGxY8fafRyC/YlgWTt1pxpAklqNas5lXXrOS8WuXbtYv349CoWCBx54AF9fXwBiYmKcXufM1dUVPz8/KioqRN0p4ZIhBQZCYBAY9Ei9wu123JycHE6dOgXA0aNHmThxot2O7QiSJHHLLbdgNpubbkKdyc/Pj1tuucXZwxB6iO40h5o7JIy5Q8K69JyXApPJxLvvvotOp2P48OHMnTsXsC55mjx5snMHh3UZ6YEDB/Dz82uxbpIgtMSR2a5dKb+qkavf3YlFhuevNHF90sV5P7FmzRqysrKYP38+vXr1cth5goODKS0tRavV4u7ecl25DRs2UFdXx4YNGxgzZox4yNgDOH+m3cOIGkCXhrP1CCwWC0aj0cmjOZ9KpWLJkiXodLpWL8iCcDGRNBpUDmjnHhkZSVhYGA0NDfTvb59sNUeTJKlbBMoEob3EHOrid+68qbGx0cmjudDQoUOJi4tDq9WiVCqdPRxBcAq1UkKtVKA3WfDQ9sz5hNFo5OOPP6ahoYFbb721KbHhLJPJxJ49ewA4fPiwQ4NlCxYsYNiwYQQGBuLq2nLH0iFDhrBz504GDRokAmU9RM/86XCii6kGkNCy8ePH4+rqiq+vr9MKZ7dGqVSKQJkg2IFWq+Wuu+5qczu9Xo9CoRBtxtspPz+f1NRUEhMT8ff3d/ZwBCcTc6iLn0aj4dZbbyUnJ4dhw4Y5ezjNEvMn4azulO3alYI8tfz66CTK6vQMi/Rte4duqLKyksLCQsBaE/H3wTKVSsXkyZPJysoiMTHRoWNRKpX07t27ze1mzJjBlClTxAPPHkT8TwlCM9RqtejsJggCANnZ2Xz++eeo1Wruvvvubl/XrDv59ttvqampoaCggMWLFzt7OIIgdIGIiIgeW8dJuLRcytmuEX5uRPj13KXIgYGBTJ8+vdWVAZMmTWLSpEldPLIL1dTUcOzYMUJDQ4mKinL2cIR2EMEyQejBzGYzZrNZtD8WBAfKysrCYrGg1+vJy8sTwbJ2CAkJoaamhtDQUGcPRRAE4TyNjY1otVqxHOoSJrJdey5Jkhg3bpxN2+7YsYPjx49zxRVXnNe4rSuYzWY++OADamtrAVi8eLEImPUgIlh2iZNLS7EcOYIUH49CPAXsUUwmE2+88QZ1dXXccccd4mZUEBwkMTGR06dP4+LiQt++fZ09nB7l2muvpaamBm9vb2cPRRDsymyReXXDCWp0Jp6a1Q9Xjah/1ZMcOHCAFStWMGDAAK6++mpnD0cQBDtraGhg9+7dhIaGsnnzZkwmEykpKcyaNavLx3E2UAZQWFgogmU9iAiWXeLMu3ZBcRFyYQGKG29y9nCEdjAYDNTU1CDLMlVVVSJYJlzSKioqUKlUeHl52f3Y3t7e3HrrrXY/7qVAoVDg4+Pj7GEIgt3tza7gtY3WWkcDQr24ZoR44NiTlJaWAlBSUuLkkQhCz5WWlkZubi5jxoxxyPyrMzZu3EhycjJgzSDMzc1l+PDhXXJuo9FIamoqYWFhBAYGMmDAAI4dO4anpycDBgzokjEI9iGCZZc4RVQUluIipKhoZw9FaCc3NzcWL15MTU0N/fr1c/ZwBMFpCgsLee+991CpVDz88MN4eHg4e0iCIFzk+gR5EOqtpV5vYngPLZB9KZs8eTKBgYHExMQ4eyiC0CM1NDTw3XffIcsy9fX1LFy40NlDOs/Z4J1GoyEpKalLa5etX7+effv2oVareeKJJ1i0aBG1tbW4u7uLLrw9jAiWXeIUQ4ciDR6MpFA4eyhCB1zMnXoEwVZms7npo8VicfJoBEG4FPh7uLDjyanIgFIhal71NC4uLl2WZSIIFyONRoOHhwe1tbXdstv1hAkTiIyMxNfXF1dX1y4999k6iCaTibq6Ovz8/Lpd5p1gGxEsE0SgTBCEHi08PJy7774btVotJiOCIHQZhQiSCYLQzSTnVPK/X09w46hI5gxyXIkWlUrFkiVLqKysJCQkxGHn6ShJkoiOjnbKuUeOHMnevXuRZZmioiLRGKoHE8EyQRAEoVuQZRm9Xo9Wq233vvn5+ZSXlzN58mRcXFwcMDpBEARBEITu7aMdp9ieWUZJjc6hwTIArVbbYs1ko9HIF198QVlZGYsWLbqkljz7+/sze/Zsamtr6dOnj7OHI3SCCJYJgiAI3cLXX39NRkYGCxcuZPDgwTbvV11dzapVqwBrMf7Ro0c7aoiCIAiCIAjd1i1joiip1XHTKNs7LhqNRoxGI25ubnYbR35+Prm5uQAcPHjwkgqWSZLEqFGjAOuD4F9//ZWqqirmzJmDu7u7k0cntIcIlgmdVl1dzddff41KpeKGG26w64VWEIRLR3FxMfBblzJbeXh4EBYWRnl5uWjHLQhCj7Jt2zb27t3LpEmTGDFihLOHIwhCDzcqxp/v7hlr8/Ymk4k33niD2tpabrvtNiIi7NPZNywsjPDwcMrKykhISLDLMXuioqIiduzYAUBISAjjx4938oiE9hDBMqHT0tLSmm5yT5482a6MEEEQhLNuuukmcnJyGDJkSLv2UyqV3HXXXQ4alSAIguNs374dg8HAjh07RLBMEC5SmSW1fLPvNLMGhjAyunvVrzKZTNTX1yPLMjU1NXY7rkaj4Y477rDb8Xoqf39/goODqampITY21tnDEdpJBMuETuvXrx8HDhxApVKJi4AgCB0WGBhIYGCgQ8+xd+9ejhw5wvDhwxk2bJhDzyUIgtCWcePGsXfvXsaOtT0TRBCEnuWBrw9yvKiWr/bmcuSZWd2qg65Wq+X222+nurqafv36OXs4Fx2NRsO9997r7GEIHSSCZUKn+fj4sGTJkla3aWxsZOvWrfj4+JCUlNTUUldwvGPHjrF8+XLi4uK45pprxL+9cMmqra1l9erVgLWWxoABA0QzAEEQnGrixIlMnDix1W3S0tLIyspi9OjR+Pv7d9HIBLPZzCeffEJJSQk33ngjkZGRzh6S0EOFeGk5XlSLv7uGbhQnA+Dw4cPodDpGjBgh7hEE4XdEsEzoElu3bmX37t2Adb22qCvUdY4fP47JZOL48eOYzWZUKvFjL1yaXFxccHFxQa/X4+rqKn4WBEHo9hobG/nuu++QZZmSkhJuu+02Zw/pklFdXU1eXh4AGRkZIlgmdNhbNw5n58lyhkf6dquAVHFxMcuXLwes9V8HDBjg5BEJQvci7hQuARaLhWPHjhEQEEBISIhTxuDt7Q2AQqEQXUC62Pjx4zEYDMTGxorggHBJ02g03HnnnWRmZtK3b1+USqWzh9TtyLLM8uXLycnJ4eqrryY8PNzZQxIEp8oqrSPldBWXDwnFRdX11wyVSoVWq6WxsREfH58uP/+lzNfXl0mTJlFaWsrIkSOdPRyhB3PTqJjeP9jZw7iAp6cnbm5uGAwGAgICnD0cQeh2xJ3zJSAlJYUVK1agVqt58skn2wyYmM1mNm7ciEajYeLEiXZ5AjJq1CiCg4Px9PQUF+MuFhQUxHXXXefsYQhCtxAQECCuQa0wmUwcOXIEgPT0dBEsEy55176/m9JaPYXVOu6fEtfm9jk5ORw8eJBRo0YRGhra6fOr1Wruu+8+ioqKiImJ6fTxBNtJksTkyZOdPQxBcBg3NzceffRRLBYLGo3G2cMRhG5HBMsuAT4+PkiShJeXFwqFos3tT506xc6dOwHo06ePXSZ7kiSJSZ4gCEI3p1arueKKK8jNzRWZFIIARPu7UVqrJ9Lfzabt165dS2FhIY2NjVx//fV2GYOnpyeenp52OZYgCMK52kqiyMzMpKioiISEBDw8PLpoVILQPYhg2SWgd+/ePPHEE7i4uNgULOvVqxfh4eFoNBqHd6YTBEEQupfExEQSExOdPQxB6Ba+vnM01Y1G/D1sawaSmJjIjh07GDp0qINHJgjCxaisTk+93kSUv/PL1hQUFPDll18CcOLECW6//XYnj0gQupYIlnUjNTU1fP/996hUKhYtWoSrq6vdju3mZtsTUQBXV1ciIiLIzc2lsrJSBMwEoQd78803efHFFykqKmLo0KG8/vrrJCUlOXtY3ZJBL3NkXSHJKws5ethCXYOCRr0CGdC6yLhqIX6ghsQ5QQybGYiXd/cp0isIl7oPtmfx9d5clkyO46rh9ls+rFIqbA6UAYSHh+Pm5kZhYaEoli0Il7iTpXVkFNcyrX8wamXbCQvpRbXMe3M7epOF568czPVJzm0q0djY2PR5fX29E0ciCM7R9k+t0GUOHTpEbm4uWVlZpKenO20cer2eXbt2kZ+fz+HDh5vdRpZlTpw4wbFjx5BluYtHKAiCLZYuXcpjjz3GM888w4EDBxg6dCizZs2ipKTE2UPrFmQZtr6bxn3DdzPC6wSeWgMj5oVx33sJrN/nTVq6RPFpPaWndWSkW9i1X82fP45l8jVB+PjI9PM4zY2DD7H0pVwMhtbPVVVVxS+//MKmTZswGo1d8v2VlJTwyiuv8PXXX7d6nTabzeTl5XXZuATBEV5YfZyTpfX8Z+1xp44jJSWF/Px8tm/fjslkanab2tpaDhw4QGVlZRePThCErlKnN3HF69u598sDvLkp06Z9DuRWojdZANieWebI4dmkd+/eTJw4kfj4eK688kpnD6fLGY1G3n33XV588UVKS0udPRzBCURmWTcSFxfH9u3bUalUREVFOW0cLi4ujBs3jtzc3BaXEaSkpPDzzz8DMHXqVCZMmNCVQ7wo6PV61q5di4eHB1OmTOlWraSFi8N///tf7rrrLm677TYA3nnnHVatWsVHH33EH//4x04dOyUlhdTUVMaOHdvj6hHWFDXwxRMpvPV9MKm6/vRWZjMh7CS3jj/JiKleDF0Yi1vvPhfuKMuYcvJJ++kEyRuq2H9IzZ60cK77QyTBfyrnriuKuPvFeCJiLyyS+8033zQFKU0mEzNmzHD0t0lWVhbV1dVUV1ej0+lazFZeunQpGRkZhISEcPfdd4trkdAjXTEkjB9T8lmQ0Mup4xg2bBh5eXn07t272VpAFouFDz74gJqaGrRaLY888gguLrZnrglWaWlpHDlyhAkTJtiltq4gOJKtaQVzBoXww8E8imv03Dne+XMrSZKYMmWKs4fhNDU1NRQVFQGQl5cnVltdgkSwrIMcsbQpNDSUJ598EkmSbKot5kjTp09v9fXy8vKmG6qKiopWtzXoZY6sLSB5VRGHDpipqlPRqFdgliW0GguuWpm4PkoSZ/qTODeMoJBLI+ExLS2NgwcPAjBo0CCCgoKcPCLhYmIwGEhOTubpp59u+ppCoWD69Ons2rWr2X30ej16vb7p7zU1Nc1uZzab+fnnn5FlmaqqKu6//377Dt5BKrMq+dtVqXySMpRGkpgfvIdX/1LK1KdGIqmi2z6AJKGKDmfww+EMfhgWAxiNpL6+lrdfbuDV5dP413Il8/oe4/kvo+iX+Fu9kZqaGmRZRpKkFv9d7S0hIYHKykqCgoJaXdZ/diJYWlraNEawPlE9evQo4eHhYoIo2I2jloa/cm0CLywcjFattMMoOy4oKIg77rijxddNJhO1tbUA6HQ6dDpdq8Gy+pJ6Ur4/yYENFeSdhkadhN4goVHLuGplgoNh+BRvhi/qjXekt92/n+5q9erVTf+O11xzjZNHIwgX8nBRseKBcZwormPGgGCb9vFx0/DdPWMdPDLBVv7+/lx22WVUV1czaNAgZw9HcAIRLOuAs0ub3nnnHUaNGsUrr7zCrFmzSE9P73TAQ6l07iTPVqNGjaKoqAij0dhsVtmRFdl88PcCdhwP4HBtNEZ6oSSY/qoMAjXVaJUmlJKFCrOKeqOGnw7HULXMF4AIl2ISI0pYtNiTRU9E8/s5ZF5eHr/88gsajYYFCxbg4+PTBd+x/cXExBAYGIinpyd+fn7OHo5wkSkrK8NsNhMcfP4ELTg4mOPHm1+m9Pzzz/Pcc8+1eWyFQkFYWBj5+flER0fbY7gOt+LPu7nnhWgaLIN5bMxu7nqxD+HjxnX+wGo1Ax+bxRuPwfN70/jyqUO8tGUkCSNV/P3ukzz2ZixKJcyaNYuVK1ei1WoZZ4/z2kCr1TJnzpw2t1uwYAF79+5lyJAh5z2o2bJlCzt27ECr1TY9yBGEznDk/AlweqDMFhqNhssuu4y9e/cyePBgvL3PD3Dpa/T88Kf9rFktsz8/hOP6GCwMQYOeCFURrkoDLkojBosKnVlNvjGIhpXu8DjEqbNJDClg2mQT1/9nOB4h53eus1gsrFmzhqysLIYPH87YsT33pnzEiBHs37+fwYMHO3sogtCiuCBP4oLs28lWlmVqdCa8tCrxe7kLiM7glzZJ7oEFpw4fPsy2bdvQaDSMHTuWgQMHdun5R40axciRI3njjTcA6+QjIiKCBx98sM2lTTU1NXh7e1NdXY2Xl1dXDLfL6OtN/PDXg7z1sZbtVYMJlYqYFZ5K4hADI6Z6M3RhLK7RzT9ZkcsrOPVLGvvXlJGcDDuyQtlhTCJQVcEdswu456V4ovtao2ZvvPFGUzZb//79ufrqq7vse7wUXMzv0a7mzGtVQUEBvXr1YufOnYwZM6bp608++SRbtmxhz549F+zTXGZZREREs+8Fs9lMdXU1vr6+7ZqsGY1GVKrmJ3iFhYUolUq7ZllWZlXy8PSjfH5qApcH7ePdXyLolRhit+M3pzE1i7/M2sf/8q9mVHAOH68Kol+ie1PdMEdNbouLi6mpqSEuLs4u59izZw9r1qwhICCAJUuWtHrMvMoGvt6byxVDwugfar/rhrge2VdPnj/Bxf1+yN2Zx7t/yOCDXYMokQMZ7pZGUnQpiSMkEucEMXBubzTu6gv2MxvMpK85RfKqIpL3mth30o/dtQPxoI5bh6Rw378i6H95bwCOHTvGd99917TvkiVLRNaoHV3M709HcvZ1CTqe8drV/+eyLHP7p/vYlF7KvKFhvHbdMIefszlN151fikjeY+ZIjie1BhcaTRprUySlEXe1gX5hNYwYAYmzAhk0PxaNx4VlKmyxb98+9u7dS2RkJJdddplDkkvKy8v58ccfiYyM7JJSGc4krlW263GZZa+++iqPPvooXl5eKJVKKisrGTx4MJ9++ikJCQkOP397lzbZuqypJzMbzLx69Xb+vXIAJZaRTPFK5rsHtzL/n0moPaehN9dztHwDKZbT9NNPxNflwtoSkr8fvW8eR++b4RoAk4njb6/nnRdreXvlVP69Us38vmm88lPMeZkPzliuWlhYSGpqKiNGjGhXVpter6egoICIiIhm65gIFxdnX6sCAgJQKpUUFxef9/Xi4mJCQpoPFrm4uNhcO0epVLY7I3L//v388ssv+Pn5ceedd6LVapteO3ToED/++CMA119/PX36NFMzrJ12vLqfqx8Lp8EyhE/u2sEt74xFUjj+KazrwN68nBvNVY9/z22vDiVhpIrX/pjN3f+Kdtg5GxoaeP/99zGbzSxatMguNxtJSUnExMTg4+PTZvDthTXHWXm4kM0nSln1oKhh2R05+5rkyKXhPdnxX7J46vZSVhaPwANPbh2awr1/D2fA3P5Af1Zk/sjrJ95jaNow7h/+ECrF+fMHpUbJgHlxDJgXx81nvpazI4/3nszg/V2DeP2KQKb4HOT5lzV4jz3/BrOr51AWi4Vdu3bh5ubGsGHtu8kvKipCpVIREBDgoNEJzuDs6xI4PuPVniobjGxKtxaa//lQAS8tGopG1TU/x7oqHcv+uJ+PlrqztyqeeuKAOOLU2SQEFRIXXIfWRUaSQKeXqGlQsjMrlA/SemP5XIkGPUPdU7lpdhm3/jfB5mXj1dXV/PLLL4B11URERIRD3hupqank5eWRl5fH5MmTUavVrT7gFS4NPaI41EcffcSBAwfQ6/X885//5IUXXqCyspLy8nKysrKYM2cOEyZMYOfOnQ4fS2tLm87WfTnX888/j7e3d9OfiIgIh4zLaDQ6pStl+uosJvin8sTPE1gQl8qxZcfYWJ3Iotcmova03ggfq9hMYcMJynW57C/50bYDq1T0e3AGr+QuJP9ACe9O/ZbkdHcGDTDTmDaByMgo4uPjnRL5X758OTt27GD9+vU27yPLMh9++CGfffYZX3/9tQNHJzhTd7pWaTQaEhMT2bBhQ9PXLBYLGzZsOC/TrCsdOHAAWZYpLy/n9OnT572Wn5/f9HlBQUGnz7XmL9uZ8cgA4r1KSN3fyK3vjeuSQFkThYKx/7ualCMqbg9cwT3PR/P8XSdx1GVaqVSiVluzTs4NQnaGJEkEBQWh0bT9JHh8XAAapYIpfbvXjcWlrjtdk9o7f4KumUOZLTI6o9nux23zvAYzL12xmYTLw0itCOGtG3eSX6jktZRJDJgbC8Dpmlye2/FXDpem8Hnqx/xycoVNx44aF84/d0zhdJUXX92/gyq9lrF39OOjW4sYnTCasLAwLr/8cvz9/R35LV7gxIkT/Prrr/z888/t6iyXlpbGu+++y1tvvXXB7w6h5+lO1yU4vxnSgAEDeOedd3Bzc+Ojjz66YFu9Xk9NTc15f7qSr5uamWfqny0aHt4lgbJTW0/zx9GbiPCr4+Z3x6OQZJ65PJkNLx2kMruaDEM03+WN4d20ibyaMolXDk7inWMT+Sp7HEd08dSW6tn57hFeXrSbCO9aHv9+LGFRKu7pv5WUpeltnv/3gSpHBfmHDBlCfHw8U6dORa1Wk5qayvPPP88bb7xx3kMb4dLSI9JbXnrpJTIyMgDrzd6+fft49dVXGTZsGAkJCbzwwgtERETwxBNPdNmF1VZPP/00jz32WNPfzy5rsqft27ezYcMGQkNDuf3227ska8lsMPPKwq38ZdVoItRFbH0rlfH3TW52W5PF8Nt+53xuK/dhfbhrQx+u3X2MJ+bu54k3FjItSssHayMoNO/nVFk9A/2moFJ0LLW3veLj4ykvL6d379427yPLctPS0bIy57eCFhyju12rHnvsMW699VZGjBhBUlISr7zyCvX19U3dMbtaYmIiq1atwt/f/4Lr4OjRoykoKECpVJKYmNip86x8YjMLXx7L7LAjfJs2GK1X11wbmuM6sDevZwbgP/Qd/vTBvTQ2ZPJ/X8bZ/TwuLi48+OCDNDY2dvkNMMB1IyO5bmRkl59XaF13uya1l6PnUCW1Oua/uYOSWj3/uyaBeUPD7Hbs1hz/JYvbrq1nT91EHhm+jX+sS8LN/8Iu6I2mxqbPJSQaTA3tOo+LlwvXvzGOq18y8eL8rTy7biwrrsnjk7fDCQ/359tvv2XIkCH069ev09+TLYKDg3Fzc8PV1bVdS3/OzpvOPmxx1INnoWt0p+tSezNeba3t6iiSJPHezSNoNJhx1Ti2RmP5iXIemZXGl9lj8cKL24alcO+/Iuk7e3i7juMW4MaYuwcz5m54ACg8WMQHj6fx7pZ+vHddKNOWHODdZQHETml+DuHl5cX8+fPZt28fERERDiu07+Pjww033ND092PHjjXdvxUVFREVdeE1WrgEyD1EY2OjvHfvXtnFxUW+5ppr5FGjRslubm6yQqGQY2Ji5GnTpskajUZeuXKlfOrUKYeNQ6/Xy0qlUl6+fPl5X7/lllvkefPmtbl/dXW1DMjV1dWtnuPbb7+Vv/76a7mxsbHNY/7vf/+Tn332WfnZZ5+V8/Ly2ty+s6pPlctTvPfLEmb50eGb5fqyhta315fIG0+/L6/NeV3OrzveuZMbjfLaxV/JEeTIHoo6+fmXPpJXnPqPnF+X1rnjtpPFYmn3PsePH5eXLVsmZ2dnt7rdyZMn5dTU1A6dwx5seY8KLesu16qzXn/9dTkyMlLWaDRyUlKSvHv3bpv3dcR7wWg0OvS9vemfO2QXGuUrI/fLhkaTw87THoX1GfKq4/+S/xr7ogyy/NL9Wc4eUrudLKmVN6eXyGZz116XxPWo87rLNamz8ydZtu398MuRAnneG9vkHw+2PR9afiBPjvrjSjnqjyvlWz7aY9MYOuuzu7fJLjTK8eosedtbh1vd1mKxyK/se0me8EWSvGTtXXKdoa5T5z66/IQ8wu2orMAkPzxsqfzMM8/Kr732WqeO2V4Wi6XdvwN0Op28atUqed26dbLRaGxxu/r6ennfvn1yZWVlJ0fZMeJ6Zbvucl3Kz8+XAXnnzp3nff0Pf/iDnJSUdMH2Op1Orq6ubvpz+vTpi/L//Icnd8lBUonsK1XIb123Ra4rqbf7OYwNBnnZ4zvlaFWu7Ead/NqiLbLZaLb7eToqJydHfu211+RvvvlGNpm6x3zSXsS1ynY9Jlh21tSpU+V//vOfsizLstlsllNTU+Uvv/xSvueee2RJkmQ/Pz9ZkiTZ09PTYWNISkqSH3jggaa/m81muVevXvLzzz/f5r62vDlTU1Obgl8pKSltHnP79u3yc889J7/33nsXTCIsFou8atUq+eWXX5b379/f5rHaUnqkUE7UHpW9pSp502utT/IcqXpXqnyF66+yGr38n+d+knUm+1zEy8rK5G3btsk1NTV2OV57lZSUNP3fp6enO2UM4gJqH93hWtVZtr4Xqqur5bq6zt3E2cPJn47InlTLM4IOyrq6lm+oulqjsVbelPehvOvkJ/LTkZ/JIMvL3y509rBkWZblPXv2yBs2bGh1Ilhc0yj3+csvctQfV8rvbsnswtGJ65E9dYdrUmfmT7Js2/th6sub5Kg/rpRHP/9rm8crqdHJ4/69QY790yp55eGCC14/nFclT3lpk7zonR1yeZ3epjG25rWrNskgy4vjt7X5oNFRjI1G+c9jN8ogy7dEL5X37tlrl+NaLBb5wIEDcmpqql2O1xHffvut/Oyzz8pvv/22U84vrlft5+zrUnuDZb93sf2fl6WXyTdEbZNBlueG7JELUoodfs7aghp5ycDNMsjyJO+D8slNORdsY7FY5NLSUrsFrSwWi7x3715579697QreNzQ0yEuXLpVXrVolm83dJ7DXXhfb+9aResQyzHO9/PLLTJ48maysLO69916GDh1KREQEBw4cICwsrKkw39GjRx02BkcvbYqKiiIwMBCLxUJMTEyb248bN45Ro0ahVCovWNddXl7Ovn37AFi/fn2nljdVppcwLbGKIlMQW36oYOiCrmnXLcsyRQ0nUEgqgt2sdTy8Rg/ghzQfFg9Zxx+fuZxYv2IWPuDW6XN9//33FBYWkp+fz7XXXtvp47WXi4sLarUak8mEu7t7l59fsJ/ucK3qCqdPn+bjjz9GqVRy3333tbvov71YGvXcfn0j/ppavk/tj4t79/n1plV5MLnX7QCMOlxDWtha7nloJOMXWggIcl7p0OrqalavXg1AWFhYi0uxDCYLBrMFgFqdqcvGJ9hXd7gmdcXS8BuSonh1wwluGt32kplATxe2PjEFk0VutvbPe1uzyCqrJ6usnp9S8rltXNtzspb8b8FmHvtpMk+M3MJ/dk/sshqKRfVFbMndyLTomQS4BqDSqvjHjikELdzMw8uvwfeeLYxIljs9npMnT/Lzzz8DcN999zmlMLqnpyeA6O7Wgzj7utSRZkgXq4x1p5h+mZpay0A+v3cHN77ZNU2RPEI9efPoJK56+SB3PBVAwhRvVrx6iEkPDW3aZseOHWzYsIG4uDhuvPHGTp8zNze3qWlAUFCQzUssjx8/TlpaGgAJCQmEhXXN0n3BebrP3YSNEhISSE5O5t5772X06NFNRe1VKlVTIcbw8HDCw8MdNoZrr72W0tJS/va3v1FUVERCQgJr1qy5oGhtR7m7u7NkyZJ27dNSnTJvb2+8vLyoqanp1Frr+rxKLh9eQJ4xiq2/1DFwdscnjO1Voc8judQ6AZsQegveLtZ/Z3VUGJ+d0GDps4brHpzBSt8SZt7YuclZWFgYhYWFhIZe2LGzK3h5efHQQw9hNpvx9ratS8wnO0/xv18zeHpOP1EzqBvpDteqrlBRUYEsy5hMJmpqapwWLHv7ynVsaZjLhvdO4hlgW0dPZ5C8vXj7U3cGXi3z4GWZfL2/810/O8rT05M+ffpQW1vb6vsw3NeNz28fxcmSOq4dKWoF9VTd4Zrk6PkTwB3jY7hjvO1zFIVCQtPCDWFSjB8rDhegVEgkRPh0eEwf3baVx36azJOjtvDCrkl0ZWO1v2x9ipSSA+wp2MV/p73e9PWHfpiM+rrNLFk6Gd9pm3lm0+ROncfX1xe1Wo1arcbDw6NTx+qoWbNmMWzYMJs7Zso6HeaVK0BSoJw7F8mGZiaCfTn7unRuM6QFCxYAvzVDeuCBBxxyzu7o8LfHmXGdP/7qGrbvVBKRNK7LxzD18WEcvq6GKwdnMPvhASyr2Mflz44EoL6+/ryPneXv74+HhweyLLdr3hobG0tYWBju7u7drlOq4BiSLDuhhaKdFBcXs3v3bgwGA2PGjOkRN501NTV4e3tTXV3dZU++dDodZWVlhIaGolR2oBikLHNPzFq+zBnPpq+LGXldrP0H2Yo6YyVbCz5BQmJyrztwVXlSYyjFYG7AXxuJKaeA+QNOsMuQyLFTboRGdDwGLMsyOp0OV1fXTo87Pz8fFxcXh7c5v/qdnezLqWRifCCf3Z7U6eM54z16seuJ1yqw7b1gNpvZs2dP04TTGe21s348zOArY7l15DHe2juyy8/fEV9N/4gbN9zO928VsfC+S+vpdXuI65FjXMzXJHs7XlSDh4uKcN+OZa/v/zSV0Yv7ckf/XbxzdHzXduUF/rHzWX7M+J6bBtzKIyOfQG/Wsyt/O4MChxLgGsDzMzfxp/VTWP70Xhb8q3NzCKPRiCRJnW40pdPpyMvLIyYmpmPzVhtZCgqwrFoJgHL+AqRO3vyK61XnOOu6tHTpUm699VbefffdpozXb7/9luPHj7cZyL8Y/s+PrzrJhLneRLqWsvZAEAF9u75J0Ln01Tqu65fCL0XDWPXvVKY/ORyTyURGRgYRERF2C8ZbLNaMeUd11+zOLob3bVfp0cGynqgnvjnXP/UrM/8znXfuTeGetxMceq56YxVqhQsa5fnBKqNZB5KEWuGCzlTHhrx3kbGQGDifUPc+lK9LZuCsXiT1r+Wn1PgufWrbnNzcXD7++GMUCgWPP/44bm4dXyJqscgcL64l2t8NN82FE9DUgmq+25/HDaMi6RPs2ZlhAz3zPSo4Rk94L8gGI9P9kskyRnCkKAgPX7Wzh2QTubaOK4N3sss0gvRiX3x8nXzR6qZ6wntQ6Do97f2gr9aRGHwaF6WJ3WXxqF0dt6BDZ9KRX5tHb5/Y8x5ayLJMcUMxwW7BSJLES3tf4Ju0L4n27s2yBT8hW2Tmh+1lb2kMqelq/ON8HTZGW3366adkZ2czduxYZsyY0aljyY2NoNcj+fhc+JrFgnz4MCgUSIMHd/phT097fwq/eeONN3jxxRebMl5fe+01Ro0a1eZ+Pf3//PSeAsaOAx9VPVtSA/CLdf7PP4ChzsCCmENsLevPxo9zSVo8wCnjaGxsRKFQ4OLSsRULssUCkuSUB8mt6env26506YVShXapOVHEHS/2Y1rwUe5+K8Gh5yrXnWZT/vtszv8Is3x+XRy1UotaYb1QSZKEJFnfugrJ+sTRf2Yi71y5lhVp8XzxQp5Dx2kLtVqNJEmo1epOP7F4Yc1xLnttG3Pf2I7FcmFse2CYN8/OG2iXQJkg9DT7Xt7CxvrRvPKvxh4TKAOQPD146x0FlUYPPv7bKWcPRxAEB/i/y3ZxQh/Fx5+pHBooA3j41yVc+/OVfHv86/O+LkkSIe4hTTdraoV1qaFGYb1eSgqJd36JQi9reHjGMYeO0VZarRagwzeoZ8n19ZiXfoP5u2+xZGVd8LqkUKBISEAxZEi3u5kVutYDDzxATk4Oer2ePXv22BQo6+lks4XFs4sAWLfbq9sEygA0HhqWpQ1kkHs219/lQX1pQ5ePobKykv/+97/873//69DyT0tONuaPPsT863oHjE7oKj2uZpnQhWSZJ2YeopJxfLjG3eHZWhbZ/NtHWYbfnU9vrie9cgduKm8mhS7GKOvxcflt+dKCr67lhuCVPPTXiUy/ydSp5ZidFRoayiOPPIJarW6a9HXUieJaAHIrGjBaLLgoHLckQRB6mrdeNRHtUsgVj8TZ98ApKdaPCQn2Pe45wm6ayqIHVvH2pyN4+FW4BFcCCMJFa/+nqfx75wSembaDIVdNcvj59GbdmY/6Zl9fnbWSPQW7uL7/TYwLn0Bfv75Nr4UND+G1u7Zzy3vjufrPe5n/z86XdOiMRYsWUVlZib9/J5eDNTSA0Wj9vKqy8wMThIvIuzdtY2PVJNb9+yChCcOcPZwLuAW48cWPHgyZEcDTM/bzWsrELj2/TqfDZDJhMpkwGAztbrwml5RY72cLCx00QqEriGWYXawnpT0eeGUriY9O5O17Urj3nYROHcsim5FlC0pF65kf1fpiNEo3XFXWLCmDuYF6UzU+mhBSKzaQXXsQgNHB1xDgemHDgvL1Bxg4M4w5oyv5eFf/To25u8itaODNTZmMiPbl6kTHF9fuSe9RwbG6+r1QX19Peno6/fr1s2npcvnOdHqNi+K564/z1FcJ9htIXR387W+klPZCWnIfQ8d0vtNuS7Y/9C0TXr+GdUsrmXFN93mq212I65Fwrp7yfpAtMiM907DICvaUx3U6q6zOUIe72r3V7KdaQw2ZlRkMDRqGQlIgyzLpFWkEuAaiVCiZuXQyMjKDA4fw8WVfNjvm+WF72V8aRXa1HxqPnl/sXpZlLGnHoKwMacRIFJ0oiWGLnvL+FOynp/6fZ287zeCJPtzQ/yDvHuvaIFR7vXrlZh75cTKbXzvMpAeHdOm5c3NzUSqV9OrVq937ygYDctoxpNCwTtdDtLee+r51BvEcW2jRmy82EKkp4q43Ezp1HINZx8a891ib+zpVeUfgTMvd5ni7BJ8TKGtkU/6H7Cj8gtSKDbiprTeSEgqKG7PIqT3UlI12lv+M4Tw6eANf7+lNednFEQeurDfww8E8/rDsMD+l5Dt7OILgMCtXrmTFihWsXr3apu0//sMxZCRuf9HOtSx27MCSncvy/eH89HY+jnykNO7ZGQyWjvDWsyWOO4kgCF1q9wdHSG4YwL/+XN/pQNkXqZ8y+esxPLbhQThwAFpYDuSp8WJYcCKKM2UqPjryPjetvJYFyy+nUleJj9Y6h1Ir1Hx4+D1OVKSft7+kkPj3+/4UWkL44c/7OzXm7kKSJOS8fOT0dCyrVlrrBwnCJc5isnDHvFL8lNW8uL77ZZT93oPfTmC81yFuf8yH+hL7dMO0VWRkZIcCZQCSRoNiaEK3C5QJ7SOCZUKzKvdl8lXBJO6ZX0hnGxE1mKrQmeuwyCZMX31K0UtfkL6nyob9qjFarMsKKvT5xHgOZ0TQlSglFadqkjlSvo4DpSsv2O/2v8cgy/DxX052buDdxN7sCoxm6936jpNlTh6NIDhOaGgoACEhNnSHbGzk/d2DuHpQGoG97JgBUVcHa9dyWhFFtiGMU8mV5J9w3ORM8vNlyZgUfk6Lo7Dg4gjwC8Kl7q3na+itymXmU52/Ed1XuBuAooNbkN99j71v7qOxse39DpccAkBnaqSgLp9v5n3PZb3ncqA4mXdT3uSWVddxvPz8GmX958YxxecAb33SvuVG3VreaevHqirrskxBuEj8d306A55Zwy9H2rfMb93zyWysGs67zxXj1av71ztWqJV8vMyL06YQ3rmrewbyzfv3YfriCywnTjh7KIKdiWDZJWLTpk189NFHVFbaVrPhkz8cxYySO17s/FJGb00w/Xwn0qc4CL8jhaxODuTT/xRjMrW9X4xnIt6aYAb4TkaSJMwWAybZAFhvKosaTlzQDCBw3hiu9V7D21940NMfIuaU1zMpPoBBYV5E+rlxy5jo815/fWMGif9Yz8+HCpwzQEGwo4kTJ/LnP/+ZcePGtbltycajnLDEM+9GO6eP79gBOTmkqYdQq/ajusrCse9bzoa1h7n39sKCkt0/Oze7TG8y886Wk/zrlzTyq2y4GxeES8DJ0joWvr2DNzdl2rR96bFSvs0eyX2zT6FQdX6a/VDi48ztPY+/N04h73gdX39pIXlTTZv73ZOwhEEBQ5gbO59RoWPwdw3gYHEyABbZgizLbMi5sPD0ktt0bKsZypEfMjo9dmeSTSbkigqkESPBRYs0YACcU3NIrqvD9O23mFb8jNzWhFQQuqFN6aU0GMzsyipv135vvWkhwfU4s54ebr/BJCfDRx/hqBuvuBkxXB21l3dWR2Exdb+bO/nQIWhswHLksLOHItiZCJZdAmRZZseOHZw+fZr09PQ2t7fUNfD2tkEs6n+M4KjOFacHaxp8nFcSffbVoq+TOWAcTO6Rak4drGp2e7PFiCzLSJLEQP+pTAi7hQZTNauyXyal7JfztlVLrij4XeqbJLHkDgNZ9SGs/cr6C0RnqiOrej8NxupOfz+dkV/VyBd7cjiS3/Y4tmeWMemlzSx6dxdf3TWarX+YwqAw7/O2+XpvLuX1BrE8U7hoqFS2LVlKXml9kpo4P9x+Jz+TVSZ7eLK/OAJXtRmtRmbPyjyOZv/Exrz3WX/6Lbbkf0Jm9R70ZvtkKYTNHEQwRSSvb9+E195eWpfOv9cc58Ptp7jhg92IkqaCAGtTiziQW8Vbm20Lln30+FEkZG77n31q68T6xvFM0C3EZVZxzHsMGcVeHPrxws6OACaLCaPZWtB+QMBAPrn8Sx5P+iM3rriakZ8OobShBOnM1N8smwnzuHB50fy/jyBUUcTbf/stW8WSnY0lM9Op1wRZlq3jOHHCpuCWedVKzN8vQzKbUd1yC8px48+r+SYXFkB1FRQVWbPOBKGH+d81Q3lqdj8emRZv8z7Z2/NYWTySJYtKkRR26tym18MPP7Dv21N8/WKefY7ZjCVPepJpjObXl1Icdo6OkoYmgJsbisFdW1NNcDwRLLsESJLE3LlzGT58OEOGtP1DnP75XjIscdz6eECzrxsteuqM7ewqdOIE7NtHutswSgmitlbm2A/Hz9tEli3sK17O6txX2FH0FSaLoem11IpNyFiQz2SUnZ3sqZUunM0yO9eov86kL8dZ8Z51snekfB3HKjdxoHRF+8ZtRxX1Bi57bRt/+fEo89/cTnJORZvbA9QbzOiNzT9F+b/5g7hsUAiPTO/T7Otf7Mmh719Xc/37u9GbzM1uIwg9UfJuIz7KGnr3s+MSzDNZZQXe/TlZ4UuAWx2u3hWk5ljI+WkrDaYq9OZ6ao2lHK/cyq+n3ya75kCnTysFBzFCe5Tkg87tdJteVIsMmGWZ3PIGTBYRLBOEqxMjuHZEBP+6crBN2y/bGsSCyIP4xzXfsCO7+hQNxnYE2mUZ1q1Drm8gub4fRpWWwztqqTp1/jxsf+Fepn49jolfjWJ99pqmr6/OWklW9UlkZEyyCRkL0pl2456aCzNz1e4abh2ZxrJjA5AtMnJ5OZb167Bs2ohc4LwHc/LBA9ZxbNmMed26tndotJbxkHXNZ8lK0TFI/fohJSRAM103ZZ0O0/fLMH3yMZac7E6MXBAcIy7Ik/smxeLv4WLzPu89mYEntdzwcqL9BrJ3L5w4wda8GDYvr6Sy3DGZX2PvHcIQbTpvvWZ0yPE7QzliBKobb0LRp/n7MaHnEsGyS8TQoUOZO3euTR3mktdbgzijFl74xFGWLWzN/4TN+R9QWG/juuwzEz0aGjjS0Js6UyMu2mp2r63EXGo9l9liZHvhlxQ3Wp/cVukLKG081XQIlXR+F021wprx1mCqvmAZJoDk480o3wz2p1lT7j00AWc+drINeSfsy66gutF6gZdl2kybnjsklHdvSmT5fWMJ9Gz+F+H0/sG8dWMig3t5N/v6O1tOojdZ2JVVzlEbstkEoadIPulDYkg+rTSHa58zWWV4enKsMpRqvQaFIg+tSwXVeFO51oyyXn/eLjIWjlZs4FRNcqdPnxhVxv68YIc2E2jL4rHRqM48ab51bDRqpZgiCEKgpwv/vmoI8xPaLvJsqDNwuCGOcUnN38ytzPyJRT/O49ZV19s+gDMPGwt9B3C4WIvK9QgFZUbSlv623Gdz7kaWrLuLBlMDRouRdw6+2fSat4vPBYc8++Dx9zXLzho7zZVSOYC8/UXg6gpqNSiVSO4eto/bziwnz6lDa0PQTnn55SgmT0ExMqnZ1yW1GuWEiShHJjXbZVTOy4OKCjAasRw92uFxC0J3YWww8sHuQSxOOIR7oJ06w+r1sGYNZRY/jksDKM03kPbLqbb36wBJIbHkyiJWFI4gb1/76rQJQkd1rkWPcFHan6Ii1rUAH9+wC16TkTHK1hvGs8X3W6M3N5Cf/AMeW79D6R/Hlv1uuKrKcHetI6NIy8r3/k2/JfNwV/tQbSg6b1939W9PZeN9xnK0Yj0gATJRnkMwWPQEaCNQKZrPLEnsW8fSPWEYjdDPZwLRnsPQKp030fv+wG+pySqlxOQ+rXdHkSSJWQNtKHTeivlDw3hz80ki/dzoGyJaAwsXiYYGDtTGcd3Yqg7tbjDA++9D9bnx4xMFsC8RAgOpMLijkOoxyToUEijcJHakDYVnvKmPuTDj1sOrgheeqMHLteM/Y4mJEmXpPuSdlomItFcEsH2m9gtm99PTKKxq5K8/HWXROzv55LYkPFzEVEEQbJH680kM9Cdxhl+zr1frrRedGn3bD68ssoXkwr2cfPVRhuXVscurD5mV1YR45FFuceXjT7byXq8X+PuC93lp7wtY+C2bI8YntunzSZFTCHANpLyxDAkJH60vdwy5m7za09w0cHGz5068MhL+Bft/yCUiaRTKG24EWUZysT2DxZ7kysrzlkpK0dFt7iN5eiJ5drx4uRQSAi5a0OtQ9O7d4eMIQneR+vNJSuV+XH13Udsb2+pMVtkx7XQqzV5IlhoO/3iSsTfGgML6wK2isZyfM5dzuOQQOrMOf9cAZsXMYUzYOJSK9mXUX/3cIO79WsnWz7K5YWSo/b4PQWiBmAELF0jOCyYxrgy4MFimkJRMCL2ZemMlga4xrR6nqCGD5OKfifxlK9r6Sva4KCms1dLLqwiN0kihFEDZBjPZl/+KR9D56+37+kzAS/NbMCnKcygqSU127UE81QH08Rnf7JPAcyWO06Lf7ULqAT0Jo1xwVTm340vvQA+gmNExfrywcAjRAY7vNvWHWf24ZUw0vm4aNHYoNCwI3UJpKaUE0qt3x4rQq1QQEAC7d0N+PoQGGFEcqQFDNFR4ADIB7r/VJwrzLqGkJBBzipoavQ+ySoFsUVBZ6o5/SC1J009S0HgYL9fxHf6WevWxXg9KC4xERNpxaWk7BXi4cKyghpQ86818WmENI6Obv/EXBOF8+1eXoqAPCVfFNvv6df1vJNIrijjf1msM6c16Hlh/DxUpO7ntUAn73ZT8nGFGQo8kgcqtiqLy/kTtWM3VzCPEPbRpaaW/awDPjvtH07FclC58fsU3vJb8P7KrT/FE0lMMDWq9S2dYYighimKStzdyJSBpnHdNAsDFxZrdZjYjjRmDol/nm0+1RfLwQHnDDWAwINmwKkMQurvk1SUoiGfYouavT+12JqsMtZqUigiUkgVffwsphxXU7EnDbVRfXtv/X5Ye//q8VUAKFKzOWkmIeyh/n/A8w4JtXxLqF+9PjCqX5F0GbrDPdyEIrRLBMuE85rxCDhoHMndEyym07mrf87K+zrVuHVRWWguxHirPRF0YTPa6/pjdhlJcH4LRosJFZV2e4OJh5nB2PMVvmqge6oGrMgmQ8HEJoc4tniMamD0b3NysWVZKhYoqQyFVhkL6+I7FVdV6FkfC3AgUL5tJXpFPwijnPxV8alZfbkiKJNzHFYWdimoaTBZMFgtumt9+lGVZZvXRIjy1KibEBxLs1fkmDYLQncgNjejQonXvWI0vhQKuuQbi4uCrryBrdwWxpjw8enmBwojJYqTa8FtNIa3KQFhIOZqKeqqVesoDQijK9aH3wBImLzhG7wEl5NV70s+v48EyVy/rz7CuWg9Yb0x1RjOldXoifLv2Rm10b3/untAbpUJieGTz1/q2lNfp8XPXtPlQQxAuJsnJMv1dTuHmH9fs60qFkgkRk5p9LS8Pdu60lmnYmb+PjRkBjD4yld1Feop8XSiui8PDpQwAD5dKyupjCN0ykxqDkgo3F0I9ZuOi1HJF3DxWLfegb19ISLAeO9AtiLSyVLJrTvFjxg9tBsuQJBL9c0hOd142/rkkNzeU199gzW7T2m9OI+v1oDn/OiXX1iKfPo3Uu7f1XDY2nRGE7m7/fpl+LqdwD2z++tRuZ7LKKnsN4mh6EP5uDfhqTZyocCP164P83Pgh609f2HH3bBZscX0R9669kzdmvMPI0FE2nzYxOI/9mT7nfU3W6aC+HqmZ+oOC0BniN4BwnvKDudQzivgRPu3eV5ahsND6kKGoSEanicU91xuXymCMHtbJTZD7b3W6Aj0qyCyJ5cQ6JbVZwVg0SvxceqGv98DNDUaPhlmzfju+t0sIrkovtCoPXJRtZ2W5D+9LL/LJTrVPx7rOkiSJSD/73fRWNxqZ8b8tVDca+f6+sU2dMjceL2HJV9ai4+sfmUh8sHMz6gTB3swNemQUaLQdz5aUJEhMhEi/Or5M3skOYy986pSEedYiy800w1BImFVKatIkShs8GDzmNJPmp+HtZ81uM1g6luV2lsbNWpdRX2d9mFCjMzLrla0UVut4eFo8j7bQxMMRNCoFf7qs45kbb27K5MV16Vw5rBf/uybBfgMThG7uZLEH/QLKgPbfjBqN1nvPI0cgry4cXfUMThXqyFBKmBolFJIJX621To9SYQLXBo4VTsWwVU2ZjwadxoOhAaNZvht694bw3zUKnh49k6XHv2Jcrwk2jad/ZD0/Hm59BUFXsvcSUMvhw1j27EbqHYty2rSmr5vXrYWKCqSCApTTp9v1nILgTMnZAST2KqYj1yeTyVrCooleDys2gOTOkepIKhpd6R9QhlIhI7u5s3VzPid81mMJbya4rTCjUBuRkTHLZp7c/Cirr96AVuVq01gSB+r517pBWEwWFCoFstmM+btvQadDMWUqijg7BQN/R25owLxxA9TVoRgxssXzyBYLlk2bkAvyUYwaLYr+93AiWCacR1djvRK6+bQ/5V6S4OabISYGli5VcPyoRLw5HU2ojKWZmjeuaj29Q/PRlNdT41ZFTXQwxTkWeoXEMe8KNfPnw7kPEN1U3kyLuMf2Abm54UoBjQ0XZ0e30lodJbXW+nEnimqbgmUBHi4oJHBRKfHUqls7hCD0SEpXDRIWDPrOd1wKPLGDB3y/Ij54LsszBnG8LIBYvwuLR8synDD3waexgkWD1xJzsxml6rdri4LOdbLUN1gDdC7u1mvlqdJ6CqutdSE3HS/p0mBZZ6UW1lg/FlSjM5pJOV3FwDAvcT0SLnqNRhVhvm3Xc21OTAw89RR8+SX8ssEH9+IyYjW5VHk3P1X3d8/HXWEmxCyxP8ideqM3WTW+XDmhLzfdBH37nr/9vcMe4N5hD9g8Hjc3aLQ4p0ZZV5BLSqwfi4vPf8HDw1rY38PxpTIEoauYGo0cbojlxqF7OrT/q69CRga/NSEqrICj48BrDrJSiUKSUSqsL/p5GtiYG0vNl3/gdIQWOD/DXOleTfCsL1B7lwMytYZa1p5aw/z4K20aS+JkT2rXeZG5KYc+M6KsgzKdWeZpdFynTEvyfigqAlnGsnkTUlQUkrqZeU15OXLWyaZ9RLCsZxPBMuE8Z7MaXDxav6kprD9BStkqPNWBjAm5FqXCur1CARMnQky0zCf3FbKrJhwfbQP+tFDMViFh0arhZCN59b4ExdZxy+I8Zo6N6XyXO6USLXp0HZu3dntxQZ68ck0CpXV65g79rb7c0Agfdjw1FY1S0a520oLQU0hurmjRoavvZLDsTAdMlbc7l0dnIStVfHwwAaWk5mwzkbNkJMyyktlRmxlXfYgT+pmYVb/9fPlqL6zx2B66OutET+ttPeagXt5cNbwX+7MrmwJlsixjsVhQKjsXmHO0Z68YwOBe3szoH8xNH+5hf04lkX5ubHhskuiwKVzUdGY1Wk3r1yWD2cCSdXeRVp7KM+P+wcyY2U2vBQbCAw9AH7c63jvgwglLf/wtp6yZZM2o1yrwqbbgmhVCtY8b5qHL+cMf/oiXHfr5uLqCzuLkWmUOpBg9Gou3N4rfNQtQzphpbSbg27El6ILQHdUV1aHHl169O3ZfcNll8NlnkJICAb5mvPOzQSWDRgIsxPlVNG3r5VKC7FqBfx2UNkrUeCiRzWr0ZWFo/AvxGrAXlWfFecf/MWOZzcGyXgOsyQFlp2rpA0gqFcorFyJXV7Ns924yly9n+vTpJCU13wm3I+SqKuSsLGxqWe7tDe7u1mWh4RF2G4PgHCJYJpxHpbZGqEyG1id7ubWHMcsmqgyFVBuK8dOen+8f0XiCR70/wKd/FBuKJvL/7N13eFRl+vDx75lJ7x0SUkhCDZ3QO0gVQRREUBSwguiuXdn1Z11fbKuuBRTXRVdhFRTsiChFinRCDxBqSEjvPZl53j+GREIKMyHJTJL7c11zQc6ccp/JnDvPec5TcjLdaet1odoKsAQCKUi3Z2D3vfSan8WgrjOvvaIMQClKscPervpCZnMwpVf1U9kHeprXlFmIJsnHh9Ykcf70NV7b27bBuXPQ2dTl8FSGN3qdEb1Oh6PelWJDXsWqOk2h0xmJ07dnzIVN+Ow5S+rwP5tuhLv3vqZQzseZWvW2CjHdnOp1Gv+8pWfF+6WlpXz44Yfk5OQwe/Zs2rSp/tq3BQEeTswfHolSioMXsgA4n1FATmGpVOCLZk2vGTFcpQ7/RMZxYlJMQyWsPrGqUmUZgJ1ecX3xGlTwTyzOGkNiTkd8XeJxts+tsq8y5cDJsghC8lJwmvANPUfr66WiDEwNNey0arqkNxOamxv6vn2rLtfpwEcmNRHNi2k8VHByq9utf+fOppavX3wBG1dmkJ9eSGgbHZp91aFuSo0lOLpk420oo12+PfvcW1Oa641ru4P4Dvoep1bxVba5mJdodizOnpfGdc39sxWZ5uVFptHIsdhYALZv316lssxgMNT5YaOKj/+zH6qrK7q+/apvVYZpQhT9LdNND2S9vOp0PGE75BGvqKS6BFSdUPfu6DV7vB2D8HRoVflNpeCXX3AuzmFs9x3c2OlXlNIoNlT/hDKzyIuRYTuYZ/chfrp0nOzqaUDZkhKKcMLZ5c+at9ikHFJym2lTMyFaCg8PerueYO/ha2j1cKlVGe7uYGdHRqEzR1ID8He5VPAzenMirS0n0tpSXGYqEHk55XAiM4J0ex/8tpxAn28qfHo4tLrq7MBXs3ePkVb26QS1qf5JQU5ODunp6ZSWlhIfX7WgaYs0TeOFyV2J8HPlsTEdpKJMNHvOdqUUFtd+M9bBpyO9AqJx0jsxteMtVVc4cQJ27yagbRZj271HG8+jZBW1rnZf+SXeOLpmMMvzPa4zbKWLf1R9nAYAhYXgpPtzkKKioiISExNR5rSsEELYlNJC08NFe4e6t0bw8oL7Zhdzf+B3ONoZOZIZRHFZ1XxXPjNvrqOekqRgnFI88eq1kdYTllVbUQag18yvxLJ3NlX4lRRVfjLh5eVFSIipJVevXpUnMfn+++/5xz/+wY4dO8w+zuW09u3ROnRAN2AAdrfdjq597TMaa/b2aN7eMslRMyAty0QlnkGu6DBw8XTtg1UHunYg0LWGPtiXCnq64DD0uhMUlDpRarTDya6k2tUd7UpI1AfhkpJJ0N5U7HrUT7N/Q1IqKQTg638OgP9sO8OLPxzFyV7Hz38ZRls/GY9CiKYqOiKTV44GYjSaun9b7IpWZcdS/cgodKKzXxrJea6k5LsyOOQUWcWpHE5pj59LBt5OOZzKDOWoYzeGXtiMz56zFI4eSP9WU6+5QLT3rC/RbZLQtOpncvL19WXChAlkZmZWKQTaspn9QpnZL9TaYQjRKLyci0nNrb1S2EHvwEcTPqn+zUsPGykowLtNBMaTaeQUBeDqkFnt6i72WaQVhJHm6E7fI/G0cqy/ga1TM3R425ta1xYXF/P++++Tl5dHdHQ0N9xwQ70dRwjR8BzdTfdW5eOj1pVuzy5GlfxMxJg+/DdWx/6LgXTyS8PR7s/9Ol8aqP98cUdC9Be5KeBztg06C/rqy0k6dHTw6WR2DOXja185I7pOp2Pu3LmUlpbi4FD5XvLkyZMAnDp1igEDBph9rHKakxP64SMs3k40fdKyTFTi3LsznYll79Y6zux2WUFP8/bGSefDoeSOuNqb9mdUGheyW3EqM4RSgynJ+ThncTYnhASnEMJ2pKJlVl8otNTx70+Qjxu9x/oBsP98FgBFpUZOpFTtztBc/HwkiXv+u5v1R5OvvrJotl5++WUGDRqEi4sLXs2wGXh0fztyDG6cOlGHgt8VrcoAYpJao5RGXIYPBaX2zOh2mCcHH+C54XFM7byPglIX4rMDUUrjWEY7jG4utN+Vx2D3KWbNzlsblZXN3oLO9OlZe7fSfv36MW7cOBzreVY4IUT96NmhkH0ZbVHGOra+uvSwkeBgwj0jSMrrQF6JN672pnJRUZkrCTmdyC02Varb60swKj1H6EJQrsaQ0/V1JrDvvD8926QBkJubS16eqeLs/Pnz9XcQG6NKSjD8/juGLb+jSqp/wCtEU+TkYao8Ksy7hsqy4mL4+Wewt6dtq0ImtIvDXm9Ap1XOd452jrg7eKCUjtYBMYzP30pkYnGNuzVi5JZOM8wOozD7UmWZe9VukJqmVakoA7jpppvo1asXY8aMMfs4QoBUlokrOToS7XOavbEuddv+soIeQF5xTy7m+uPtnE1RmQMn09vi6lBIqGcipzLDyClyw90xn7xiV47b9cQtrRh+/71eTmXvb6bCZe/xAQA8OLIdfcK8mda7DcM7+GM0Gjl37hyFhXWsGLRBRqPir1/s59djKfzli/3WDkdYUUlJCbfccgvz58+3digNInqiqVvSnh+SLN+4vFXZpTyVXeTIweRW5JU6EOyRwyMDdzCt81Gc7MrwdHTgvt6Z/H3ICdp6aRiMvsRn9cU9bDw+SaXY/7Hnms/lwrojpBJA9GgZJ0eIpix6qAvpypfzOy9avvFlDxvx8kKv05NfPBhNU+g0A5mFgWQUtiHE8zBFZa4k5UViVDqc7XM4m90Tv+Bo9L9uMM3keI1Kcos5VBhJdC9TNydfX1+GDBlCUFAQ48aNAyA7O5vERPPHGWoK1NGjqOOxqFjTS4jmwj3YE28tk5OHa660uqpdu0z3eaGm1uKHU/xRSsNeb8oTBqNGyaWGEK1dW+Nin8PJgp6oUnsGHs5Fq+Yhgg4dEZ6RDAgaZHYYJ3emAxDWN8DsbcLDw5k8eTIBAeZvU59UejqqoOr4bsL2SWWZhZp7aw2A6A55HExvg8UP1a4o6AGcTG9DmdGLojJHzmW1oVur49zX50vui17JiLY7SSv0IiGnFXZ6IxdyBqPz9YP16+ulsLc3xo52Lgl4epma/XZs7c5X8wbxxi09cbTTs2nTJj755BM+/vjjaz6WrdA0aOtrauUS4S/dTFuyF154gUceeYRu3bpZO5QG4TuqB1HaUb793MJWotW0Kjue7ocCbmh/gqeHbKVn66RKk4xoGvRtk8qzw/YwucM59JojJ3LbgJubKefl5VV/LDN9szQFO0oZcPO1zagphC1rEeWnm0w3kXu/qcO4glc8bMwpdqSodCTO9vlczDUNezE4dAXj27/D6MgP8XJKIjGnEw66InRaJ8r8b4CLF+vlgePhb09RgiPRY0wV+Jqmcd1113HvvfcSGRlJQUEB77//Ph999BFHjhy55uPZjMu/l830OypaJk2n0dvrNHuP1nECsMtaleHkREGpPfsuBuHlZBoHOrfYgcMpARxP8yEx1w13B086+DiTU9SKAw4d6XiuiIiEyhV1OnT4uvjxr9GL0WnmV0ns3VZMoC6JwO7+dTuXRmY8exbD6q8xrFqJKq19THBhe6SyzEK20FojOzub5cuXs3nz5gbZf5+hzpQoB47ss/DpwxUFPaPS2J3YhqJSX8oM3tzQcSNzeq2mtXsabo4FTO2yjtu7f4+no4HSskDiMgJJ9Yist8Le3oTWRIel1/h+cXFxpX+bA03T+GreQD6d248v7xto7XBEE1NcXExOTk6ll83y8OC+6L18fSCSpMSrTD93uStalQEEuedyR/eDzO+7B1+Xmlua+rsWsKDfbm7vfogg91zTPs6eNe2zjlRBIYs3RXFTh6MEBNZtliYhmgJbKD8BLNt2htv/vYO4lGur5K5OUO/WBOqS2LvNwomEqnnYGJvmR1aRJ2523Qj2PM249u/StdVG9DoDoV6HmdD+HTr6b8fZriuoEI5ktDbN4lgPDxz3/pyKDgM9bo6s9n2j0YjBYOrO1ZzKULq2bdHfdDP6m29GFypjLYrmJbp9DntSQuq28RWtyo6n+ZKS74qfSwHx2R5cyPFgdMRp7uhxkDKjjtg0PwLd/PB1bkMyfbE3KAYdzkNvND2JtNPZMT5iIp/d8CWBbpY9KNxz3J1o/ybUHbz0UusTg8GU60WTIgP8W+iFF14A4JNPPrFaDEeOHCEuLo64uDgGDRqEfQ1T19ZVz1va4/Z6LmveTKDXSjMHXLy8oBcRAcD5bE/OZ+uJ9D3A3J4n6dU6j+wSX4oMuRiVEQ0d17crYFjIMT47YM+xNH+OZrRmeHlhb9iwOk/fnfjzQXaU9uadUSdqXGf06NG0adOmYuaUpiAtrxgPJ3sc7Gqu53Z3smd4h6bxtEXYlkWLFlXkuKZg9ssdWTiulH8vPMszn9Y+MxHwZ6syZ2dTzrr0hC/YOZ1g53QwYHrVwg4YFhT35wJnZ1PuGzzY1NLMQpte/J1Y4ziWPJtg8bZCNCW2UH4CeG1dLIWlRr7ad4Gnx5s/qLRZNI3BgWf4fm8g/zAqNJ2ZE39c8bARYN9FX9ILz9EnaB9PDy4lvSicExmlFJYVYFRGQj08uLtnGX/En+Sro3bsSwzk5vZtsI89ZHrgOGVKnU/jh18diXaNxcW3S7Xvu7m5cffdd5OVlUXnS5Ok2DpVVgZlZWhOTrWup/n5NVJEwha8/PLL/Pjjj8TExODg4EBWVpa1Q2ow0QMdeW1XECnH0gnoXP1kQtW6olUZwJEUfwpK7TmZ4YOPcxH39N7HqPAz6HWKDr4ZfHagO0fT/HF1UOjVNDr3zCQy4TjB7mPQde/OyNDr8HLytvgclFGxNzOcB4cftnjbhqDS0zFs3QrFReh69EDXserfFK1de3ROzmhubmjVjKcmbJtUljWw4uLiSk/d6qOlRpcuXTh9+jTBwcH1XlEG4NK3C3e2+pqPvh3BMyVg1nVdTUHPQW+gd9Bu+odsIcTDESe7jjjZVX1K6eVoGiPol7gI3BxKoFUgHDlyTYW9j/52BkctktterLkgbG9vT/fu3eu0f2tYtPYYH/5+mkBPJ75bMAR/dxnku6V5+umnefXVV2td59ixY3TqVLcbwIULF/Loo49W/JyTk2PTlcleY/pyu88aPlw5lKc/ruhVWbOjRyEnB8rK4NSp+gskJ8eUs/r3t3jTxUvt6Ox6nuG3SSsGIa7UEGWoJ8Z14tdjyUzrHXz1levg3gfsGff3Dmz/6DCD7+969Q2qedgI4GQXT9/g9UT67EKnm0kHn07Vzhg3vl0cEd6Z7LzQBqW3+7N1WR0fOJ7bGs8PyX354I7tta4XFBREUFDT6DqucnIwfPsNFBWh69sPXc+e1g5J2IjyFq8DBw5sVsOyVKfPjW3gX7BjxWkmv2RBZVl5q7JI0z1ccZme3RfbYFQaXQNSuKP7QSJ9/pycLco/laeGbOPLw1FsOBPBxTwPsu37EuWST/hZD7j55jpOYw6nfjtLugonemgdx9auR0opDD+vhcJCUArj77+j+fpVqXDXNA3NhsvSonZSWdbAGqKlhqenJ7NmzarXfV5p/l8dWPw3X75ZcpHpfw2sfeUaCnpB7rnc0yub7BInvB1rL1A52ZUxuVN5KzD9NRX2SlMyWbq/L7P6HsfTp7dF29qyz3acA+BidhGfbD/DieQ8JnRtzc0NVOAXtuexxx5jzpw5ta4Tcdk1aClHR8emNdOipjF/vuLfL/uz5oNkbnmwVe3r9+wJjz3WMLFEVt9dqTbnvtnPmszhvH3fsUpjpAGcPXuWsrIy2rVrV08BCtH0NEQZ6q7B4dw1OLxe93m50U/2pt3zZ1n8Sg6D7zdjg2oeNgLc0T2NXReLsdf3xcvRq9ZddPBNp4PvpWEnAq/tgePSJ+Nww4Pb3mg+5Sd17hwUmbrGGo8cRhUWQlEhugED0ZzrOIaTaBYsbfHaEBX4jSV8eChdHE/yyX+MTH7JzI2qaVV2NssLDcX0LkeYFnUUV4eq43B5ORVxb/R+Ovhm8E1sJ05leBMVGgr795vyUx3H0/3k+bO448uI+TW3aD1x4gTHjh1jyJAh+PpaUCloKYPBdO97GZWdddXWqYbMTNT2baaWrl27oa9D+VE0Hqkso2FbazS1lhrluj4yhmHPbmfxGwFM/+tVVo6Ph8OHTa01DlduFuty6QVnLQtAKVMzkd274dLMS+b67smtJDKJ+a80oZt+M4zr0po1+xNwc7Tjh4MXOZdRwG+xyVzfLRAnexnrqCXw9/fH31+62F6u98LxTHhjA4883o0xtyu8vGvp9uTgADbSZUiVlHL/7EJa26Vx5ytRld5LSUnh008/BWDu3LmEytg5wkZJa9eqdHY65o8/y9PfD+Kto2kERF2lW9/27ZCdbbrpunChYrEeGIin6Yc0CwfRNxhgyxZT+cmCyqDinGL+vaMLc3rG4Bow3LJj2jCtTRvQ602fi68v6vAhAIzu7uj79LVydKIpaWrDVVxO02k8cGMiD60cwoXdFwnue5XGEFClVRlAW68s5vfZQwff9CoP+i6n0xQjw8/S0S8de50BXN3h/HnTcBhduljcuqwkt5iP/ujKnd1icA8cVuN63333Hfn5+SilmHIN3dEvp5Qy5WgXF7RLJ63Z2UGbYEi4lLc1DWNcHFpYW9N71TCkpqC++ebP/W74jbLUFOwGyDjTtkoqy2jY1hpNrqVGOScnHphwhhnfD2L3bzn0vc6j5nX9/WHWLFNlWX3r2NGi1Y1FJfzzizYM9jtOj1GWbWvr/jmtB3cPCaeNpzMv/3SMcxkFdGjljsGgSCsuxs/t6t8zdWlgSa22v26iWTh//jwZGRmcP38eg8FATEwMAO3atcOtDmNrXYucnBzs7OxwcWmAZvOurny4VKPrbAcenXSS/2ztUP/HaADLZqxjXc4N/PjWCTy8W1d6z9HRETs7O4xGI05XGV/H1sWczyQ+s4ARHQNwd6r/YQOEdUlr1+rNebM7f//ewPsPHOGFTVepdBoyBNq2rf8gnJ3NHEfjT/97eCcpahjz/19+/cdjRZqPD/oZM6GwEKXTYUxMBIMBzc8flZdnugE248ZdKSXlpxauKVbgX27WP3vx1MoClj5+ghc3X6WyrLxVWUkJ5OebXoAj0FFLATPnEQniUqvXIkxju9axddnqv+0hRQ1m/j9qb83Xs2dP9u/ff03jKaqLFzFs24rWOhDd4MEYfl0PZ8+ideyIftifOV0/dizq6FGMWZlw/LipMjAtDVq3rn6/636puvDQIZDKMpsllWVIa42a3PzOCHr+eJC7pnmzJ8mDGsurzs4wdGijxlaTxVN+4Y/iG/jt3Xocj8hG6HQaXYNMT5lfndqdu4eEE+ztzNh//U5iViGr7h9In7bVd1lVSvHm+hP8e+sZyoxGbugWxKKbu0mLtGbs2WefrWidBNCrVy8ANm7cyIgRIxotjqSkJJYuXYq9vT1//etfG6TCLOTOkby5dBn3bJvLtE9TuX62befz+PWxPLJmKHO67eX6h6OrvO/p6cnDDz+M0WjE3d29TscoLCzE0dERXR3HBblWRqOR7i/+Ql7xnzMmvHZzN6b3lVZyzYmUn6rn086Hh/pu4pXNA7n1+1NETaqlm0379qaXlSUfTuXxT7owPeQPOk1ofjdumouLqVIM0GbMhLIy0w3x/1ZAmzbYXT+xxm1VZiaG336DzAxwdUU3fAS6Nm0aL3hhkYZs8dpUK/DLeQR7cEfUZj7a2on/KyjF3qWWh1hpaabuy61amSrO6oO9PTg6miqVLKwsW/JfV4Z7xdBlcs9a1xs9ejSjR4+u9j2j0UhiYiJ+fn61Pow0HjkMmZmozEzo0QMSEwFQCZUnY9Ls7NC6d0dTCqOTMxgNEBBQc3DlM2OKJkMqyyxkS601Gpp92zZ88uxu+jw/kX/MPslLX1i/MFeb098d5ql1I5nfdzej7q3/ZvVKKTIyMvD29q5yA1pYYsBer2Gnr/nGtKjUwOGEbHqEeHExu4iFqw+SmF3E7f1DuWeIZU/e9TqNzoEeFJUayMgvQQEZBZUT8KK1x9gQm8JLN3blZHIu7278cwa/NTEJxMRnsu7h4bXOrCmark8++cTqs86BafBcpRQlJSWUNUTr00vu+v4mVgVu4t77u3J4ksLbxzaf/huLS7lvWjrudl68tb7mwb9dXV3rfIxdu3axdu1aAgMDueeeeyry1abjKWyNS2P2oLaEeNdeaZmZX8K/fjtJSm4Rt/YNtXiG3bs+3V2pogzgydWHmBodgt7cGQJFs9KSyk8AL/zcn+9aJzB3ZhHb0g3YOdruwyllVDwwLg6N9rz7c8OU9VRREShVZYwwdWlm4qvNEqeyskCnQ/PwwHjwAMZjx8DNHf2wYWgWPlTQLj20UeUTvVw57lBGBoZNG9F8fNAGDcb4049/rpOfj/GnH1GjrpOxhmxUQ7d4vRZFpQYc9Dp0Vvw7+MBLgXww1Z93Z27h0W9rafnapg289JKp+3J9s7CMs/bF3fye05dVj++4psN+//33xMTE4O7uzkMPPVTjRHlaZCTq/Hlo1dpUQT5sGMbY4+i6Vl9u0zQNfb9+Vw/A3cNU6S6aDKkss5CttNZoLD2evZH/+/xzXvxyJlPuzyF6ZC3dMWuQVniOgrJsQty6omkNUzFjLCrhrtsKCXDI4rV1PSu9p5Tip59+IiUlhZtvvhlPT886HePrr7/myJEjdOzYkRkzZlQs3xqXxtxPduHr6shPfxmKj2v1Bb7HVh3gx0MXuWdIOH+cTif2Yi4GpfjHj8foEODOMAtvRgGc7PX8+NAQLmYXMSjyz0Esc4tK+fD30wB8sv0spQZjlW3PpBfwz/XHWTjBNsZwEs1TaGgoc+bMwcHBAQ8Py/OHuTRvLz5aqugxW8ek7mf55XhbXFxtq1JGGYw83HMj63JG8+PbcXi1qr6Zfm0yMzPZvHkzAQEBDBw4sNouQXFxporxixcvUlhYiKurK/nFZdzz3z2UGRUnU/L4dO6fhbqPt55h0/EUXr6pG6E+ppvIecv3sudsBkbg5yNJfP/gELoEmZ87Y+Kzql2ekltEoKcMqN0StbTyk7OPM8vey2PI/V148+atPPmj5WOA5ZXk8n3ct/QLHECkd8NN9rHyke2sThzMykf/ICCqcquyhIQEfvrpJ7p06cKgQYPqtH+Vnobh0jg9+sk3ol1qjaiUwvDTj5CYiK5/f3Tde1S/fUYGhtVfg6ahDRuO2rnT9EZuLobffsVuyk11ikvr0QOdj09FPOWMx49DejoqPR0tJLRKZRqA2rgBFRQkEwTYIFtt8br5RCp3fbqb6FAvVt5ft2upPnS9uQN/6bmJv3/Xn4nrztJxXNuaV26I4TMslHUum3tfCGas716mvmr5rOOXS7jUMiw3N5fCwsIaK8t04RHowv+sUNWu+LmutMmTUZ9/DobLHh6PHHXN+xUNR5qUWOiTTz5BKVXl1RwLegBoGgt/GUl33RFm35RNbo6yaPMSQxE7kldxMH0difnHGyhIeOv69WzO78vH7xXh5l058eXl5bFnzx7Onz/PsWPHAFMz3OTkZItausTHxwNw4bIBeAG2nEyl1KBIyikiNqnmfvQOl1qd2et1nErNw6D+/CxPpeaZHceVIvzdGNzOr9JNs5ujHbdEB+Pv5sj0PsF41DBW0LcHEut8XCHMFRYWRmCgGQPJXqOQO0fy0yO/EpPgz829TpdPfmYTlFHx7MBfeDd2LEvu3suEv9ZtbLX169dz4MAB1q9fX1Hou9KIESOIiIhgzJgxFS3UHOx0+Lubuo6EXtGq7M31x9kSl8b3l+WDPecyMSjTXCtGBftrqPyqSSuP6rs3eLtYNoaSaD5aXPkJGHhfdx6N/p1nf+rPwa9PWrz9vw98yD93v8qjGx5qgOhMEnYnsuDdTkwL3sEt/6za/XLfvn0kJiayefPmimV5eXlkZWWZfQyVngFGIxiNqPT0P98oK6vo3mQ8c7bmHZS35tfp4PLZB5UCC+K4kqbToQsLq2hpVnG4dpGmli/BIVDTbHpKYUxJqfOxhW04f/48MTExlVq8xsTEkJdX93J5TWKTcjAYFYcTczAaLbufqm//75e+BNsnc9ctORhKGqDlWD16bMwBcoyufPRjENo1tsibOHEiERERjB07tkEf4NZEl5f3Z0VZjx4wew52Muu5TZOWZeKq7MOD+WzRAQY91ZbJ3c7wU2yE2ZMr2enscbP3obAsGzf76sfTulbL56zn8Y0TeWL4TkbdW/WJg5ubG4MGDSI1NZUuXboAsGbNGg4fPkxAQADz5s0za8DWKVOmsHfv3oqn4eXuGBBG7MVcgryc6FvDmGEAr03rzr3DIujUyp2L2YV8E5OIXqeh1zSGtq/fJ2CapvH6tD+f0LbxcmFNTDU31tb9Wy1EvRvw5nS+yficSZ9OZWLn03x7MBw3d+u2MFNlBp7ss4E3Dozn1Zt2cP+/B9R5Xz4+phyj1+tr7LoWFBTEHXfcUWmZvV7HTw8N5URKLtGh3pXee/aGKLbEpXFz7z/H4OkZ4kXM+SyMSoEGPYO9LIrzP3P7MviVjZWWje3cSsZJFC3Oi78M4Nc2Zxk/3Yutv50nYoT54/Z18o1CQ6Obf/Utrq5V2vF0xg4pwEWneH9d9Tdsffv2JSMjg6go06y9ycnJfPTRRxgMBqZPn27WINpaRARaerqpG+ZlN4aavT26/gMwnj2Lrk+fmrf38jIN0K/TQVERhpj9pooypdDCwy0866vT/AOwu+32ip+N3t6QmVl1PRnsv8lrzBavswe2xclOT/dgT6t2wwRw8Xdl2VtxDHuwG/+avoVHv7HN2W/Xvrib/5wcxkeztxLaf8g17y8sLKxK+ahRXZYz9KFhV+1+LqxPU0rJ7XIjysnJwdPTk+zsbKvUaF+LrQ9+wdj3JzOifSJfx0Ti7GJeoldKoTCi0+r/JumrBRuYsXgYs7vs4d8H+5v9xOHNN98kNzcXMA0E2tiDdZaUGVm+8xxJOUXc2LMNUYEN/1244b0tHE6o3PLt7iFt+b+JXSota8rfUVG/mvJ3YfP9K5i09AY6+WfwxabWRERZZ1bJnPhsHhwaw2fnhvPObTt4aHndK8rA1Cr2zJkzeHt7V1ScNYT0vGLeWH+C1JwiZvQLZXTnVhbvY9PxFP7+zSFcHPTc3i+MOYMtv6ltyt9BUf+a6vch+VAKQ6PzKVN6NmzU0XZIsNnbFhuKcdA51HvFTEZcBmN7JHG+MIAtP+XScbx512dMTAzffvstAAMHDmTs2LH1Gpc5VFoaxlNxaG5uaJ2jzJrJ8loY0tJQa1ZXXqjToZszF53+z7JtU/1+irpr6r/zR3ptYknMAH5+K5YRD/e0djiVnFx/liHjXOnpc56fU3pfc6syW6EyMkyz8Vqxq3BT/942Jqksa2SWfDkzMzPJy8ujTZs2VpvR7Err5yxnyqdT6BuSxHeHIvDwvHriOp97kLzSdDp4DcZOV3816B/P/JX7vhjJzHZ7+ORIX+wczP+MYmNj2bp1K127dmXAgGu7eW0qUnOLmfrBNs5nFAIwtJ0fy+b0rTIpgSRQUa6pfxf2/t8apv2jFylaAK8+kswDr4fTmKl0/aI93PN/rckwePLBX2O5/e36n3ikuWvq30FRv8z9PpSUGTl4IYs23s42M0beuW0XGDXCQLFyYP23hXSeePXxb5Lyk/j00L8ZEjycwcH1N+v4xf1JjB2YQ1KJD+v/l07PWzuavW1JSQnfffcdRUVFTJo0qc7jwDY1hkOHUDv+MP2g16MbN77KjJiSr1qepv47L84pZlL4Yf7I6MCGT+LpOzvK2iEBcGFXIkMGGXDWl/D7AS/8O9XQHdoKlFIY1v4EWVnor5+I5uVl7ZAs1tS/t41JKssamblfzmPHjrFq1SqUUkRERDBr1iybae69/eGVXP+vsQS45rNshRODJ9ecwEoMhfwS/x4A3XzHEuZu6kqQV5pBXmkGrZwjLB70Pyc+m8dHx/DRieE80Gs77+4eiE5vG5+NrSszGDmdlo+TvZ4Qb+dqv1OSQEW55vBdyNsTy1MTD7M4ZRrDg0/xn3VtGryVWU58Nk+MjWFp7HBGee/n4+/8LWpJIv7UHL6Dov6Y830oKTMy9YPtHErIxl6v8encfgyK9GvkSKtXXkl1oSSAd+cd5fb3BtbaWuKNXa/wxbHleDt5s/7W3wEoM5ax9cJm2nl1INgjxOIY1r28h3ueC0Kh8et3hXS63jqzAjZFqrDQNNi/hwdaNQODS75qeZrD7zw/OY8x7c5wNC+UH5ecZ/C8blaN5/TGc4weq2FUOrb+oSe4b8OPeWsJVVyM4b+mrru64SPQdajbGLTW1By+t43FNporiSp2795NeT3m6dOnSb98QFQrG/T2dHa9txu/4kSG3ujNo9fHUpBffZ2rvc6JVs7tcLHzwtfJNE5HmbGELYn/ZU/KGk7n7LHo2L+8vJuu4Xn870RvPpi1lff2DpKKMgvY6XV0aOVOqI+LzVS+iuYpMzOTb775hm+//Zbs7GyrxeHWpxPvJ0zht3u/4NwFPd26Gnl07GFOHCis92Olnc7h9Snb6BKez4rY3iy5bQu/pvWUijIhGtHBC1kcSjDlHINR8b9d8VaO6E+BvVrz+1F/JoQc4Y4lg5jSZjcXD9Q8SPzwkJH4uwQwud2fsz3+5+BHPL7xYWb9MJ1iQ7HZx84+n829HX9n/DN96OSZxB/bkYoyC2nOzmi+vtVWlAnRVLm2cuPno6H09DzNmPmRfLNwp9Vi2f3JEYaMdsReM/D7Fs3mKsoANEdHdNeNRhfdBy0y0trhiAYmlWU2ys/PNLuhpmnY29vXOJCztXRYMIYtF8J5vecKlqwNo2eri/z2ZRpXtlPUNI2+rW5iYOtbOZqxkSPpG1DKePkaZh0v5Xgm93XczLhn+tLRM5nD23K4/7MhNFR9T2lpKd9++y3ffvstpaWlDXMQIZqx//3vfxw8eJADBw7w5ZdfWjcYOztGLZ3Bod1F/CX8B/67vjUdezozNuw43yxOwIJJcatQCnZ+fpLZHf8gONKBZ77tw8jgkxzaks285UMbfIyNsrIyi2b1FaK5a+PtjL1eQ6eZrs8If1drh1SJd4Q3K84N5usndrAjOZwuvez5bN42jGXGKuv2DezP2lt+w98lgPm/3MPBlJiKco+maWhmlKGUUbH2xd10jcjnixO9+HDWFn5J7UVIv4a7CT1x4gSff/45J06caLBjCCHqj0eIJ2tPd2J84EFueqU/syO3knkmq9GOX5xTzN8HbWTg3I4EO6fz+z43Qge2ufqGVqKLiEDXuzeaXiYtau5kNkwbNXr0aBwcHMjJyaFfv344OVlncOra6Fv58dj+Wdzw7i/MfdSb0TP60vX+8zxwVzGznm+Hu8efhbgzOftIKTwFQJBrR4YFzSavNIMA5wjySjNQyoi7Q+VuEkrB9v/Esvj/ZbHqdG8c6c0Ht2/hvv8OafAb0BMnThATEwNAu3btKmbRFEKYJzMzs6J1bEZGhpWjMXHr04lFpzrx3LEzrHriVxavi+SmBR1p/XA6g9om0idaET3Wl+hJQfj6VZ9jCvKMxHwfz961Kezdo9h5xp/Yova01Tvy4ugtzH2zG/7dGmdWqfT0dJYuXYpOp+O+++7D29v76hsJ0cwFejrz6dx+/G9XPBH+riwYUf0sj9Z282sDGH5POg+NOcqdHw7m+Y/PM3/caea+1R3f9n9O3lFQWsAbu14BQEPjndFL6OjTmUivdigUe5J208W3C872LpX2n3cxl+WP72Px6tYcLOrLaJ99/Pt7Rdig+hv7rCbr1q0jIyODzMxMOjTBLkpCtETOPs58faE/n967hYf/05317QpZ+sxubnihYcdb3fPpEebc78CJ4sE8f91WnvpuMPYujdN688yZM6xevZqwsDCmTp1qtV43ymjEuOV3KC1FN3yEtF61IdKyzEY5ODgwevRobr75ZoKDbbsLT8eHxrI1pQPrH1hDe0MsD74VQZB3AQuGHeSnD+NJvmjE37ktGjqc9R642fviau9NK5dI8krT2ZTwHzYnLiOzKIHiIsWeby7wzm076Ol6kiH3dGLX+Va8ev1mzsUWcf/nDd9SAyAkJARPT088PT0JCbF8TJDaXMgsYPSbm7n7090YjTJkoGieBg4cWPH/QYMGWTGSqpw6h3PHDzP4I7cbe1/8kVlhW8g4n8crX4Qx7q42+PlrBDum0NX9LH284ujnfYLu7qeJdLqAu7ti8G1hPP5Zd46cdmJ4UBw/LNxGXF4gT64fg3+31o12HklJSZSUlFBUVERKSs1duYRoaQZF+vHuzF48MroDDna2W9T17eDLinOD+WPpIQaFnOfvPw6kTQcX5rTbyq+v7SPrXDbOds5Et+6LhsawkBHY6ewYFjKCNu7BPL/1Geatu4vHNz4MQF5SHlsXH+Sh7psJClI8sGII4V5ZrPt/e/kltRdhgxqnpUaPHj3Q6/X06NGj3vdt2LuXshXLMV64UO/7FqKl03Qacz4eypFd+fTyPc+kF/tyc5sdbH7nAKqe71kOrjrO/Z1/Z8Ccjjjqytjz1Tme+XVEo1WUARw+fJi8vDyOHDlCUVFRox23iqws1IkTqDNnUEkXrReHqEIG+G9kzX5APaWI/2IbH714kX/HDuYiQQC0cUihd3AyvbuVEdBKh5OrHju9Iisnl3PJp7hw3JsTF9pzJC+cUhzQU8YN/rt4YIHG6IV90TlY3gjy7NmzaJpGWFhYfZ/lNflmfwIPr4wBYO/fR+Pr5mjdgK7Q7L+jwmzX+l1ITU1F0zT8/GxjcO2rMSancurHWPb+ks7hIxp5RXYUlugwKh3OjgacnRTtO+qJHu1Nl5s64NDKui25DAYDmzdvRtM0hg8fbvGsyUopSg3KpisTJB+JyzX370Pq0VT+89hhlqxvzzmD6UFppP05olsn0qtrAe06u+Dsboeji56SQgM/HPmJhFNlFCf0Ij6zO8dKIlDoCNBSuXfQEe57owOhA4IsjqOgoIDTp08TGRmJs7NtzCZarux/KyAvDy0qCv3gIdYOp5Lm/v0UVTXn37kyKj6bt43/92kQx0siiHKM44EbE7njnz3xCK7buRbnFPP1wj0s/sydbbndCdQl8fC4WB75qvFak10uOTmZH3/8kfDwcEaOHNnoxy+njEaMf/wBpSXohgxFs2vYzn/N+Xtb36SyrJG1pC+nysjkzI9H2bsujb17FXvP+RFT2JFsPCnFAQANI04U0d7+DNGBSUR3LyF6lBc9bo7EOSygzsc+ceIE//vf/wCYNWsWkTY0AGNRqYH3NsYR6uPC9D7122qtPrSk76ionXwXmrd5n+9l/bFkPrg9mjFRrawdTrXkOygu11K+D8ZSA8d/PsOeH5PYu9PA3tNe7M+JJJ+q49c6UkR31zj6tM0guo9G9IQAukyKuKYbzw8++IDk5GTatGnDPffccy2nUu+MiYmos2fRde+OZmPj+baU76f4U0v4nSujYuOb+1n8VjHfJPbFiSIG+pwgukMOfQY5En1jMG2HBFfb8+diTDJ7V59j75YC9h5zZntKO9KVLyO99vPA3cXc+GK0VSrJWrqW8L2tLzJmmWgwmo83EXcMJuIOuKV8YUEB5GdTlluIoUzh4OmM5uoCbl2A+hsX7PKmtMXF5s8W1Ric7PU8PrajtcMQQtiooqIiYmJiCA4ObtBu+PvOZ2IwKg4nZjdoZVl+cRm/HE1iYIQfrT1tb/xNIWyNzl5P50nt6DypHXdcWmYoMZCTkEVhZhHFeaU4uNjh7O2ERxt37Jy61uvxy8tNVu2WVANdUBAEWd5aTghRN5pOY9TjvRn1OCTsTuSz/zvOHwdc+HxXR17dEQhvgifZeOlzcdYXowFFRntyDS6kqVZAK3y1dKJ9zjBv0CFufzqEzjf0svZpCWEWqSwTjcvFBVxcsPNv2C9ft27dKCsrQ9M0Onfu3IBHqn9KKX49loKnsz39wn2uvoEQoln5+eefOXDgADqdjscff7zBukF9Mrcfu86kN3gL19fXHeeTP87SPdiT7xbYVrcpIZoKvYMe73AvvMMb/li33347R48ebZKTG6m8PFRiAlrbcDQHB2uHI0Sz0qZvEE///GdldfLhVPZ+fZaDf+STlweFRWA0ajg7KVxcoHMvJ/pMCSZ0YBs0na8VIxeibqSyTDRLmqbRu3dva4dRJ78eS+Hez/YAsOHR4UT421Y3AyFEw7K7NFaFXq9v0JmZogI9iAps+Ob3wT6myr4wH5errCmEsAV+fn4MGzbM2mHUieHntZCZiXbhAvpR11k7HCGatVZd/bm+qz/XWzsQTEPwrF+/ns6dOzNq1ChrhyOaCaksE8LGeDibLksHOx1O9norRyOEaGzjxo0jNDSUwMBAnJyafrfFe4ZEMLl7EH42NpmJEKIZKs+Zjk0/dwohzLdlyxbS0tLYsmULgwcPxtFRyhzi2kllmRA2pn+4L78+MhwXBz1BXrY1C5UQouHZ29vTvXt3a4dRrwI85MZVCNHw9OMnQHo6+PtbOxQhRCPq3r07CQkJdOjQAQfpgi3qiVSWCWGD2gVI10shRMOLTcrh8VUH6NvWh+cmNb3xiYQQ4nKanR20ss3ZfYUQDadv37706dOnQYevEC2PztoBiJYrOzubY8eOUVpaau1QAMjLyyMxMbHG95VSbN++ndWrVxMfH9+IkQkhxNWVlJTwww8/8L///Y+kpCSztlmzP4HDiTks236WnCLbyMVCiNoppTh58qTZ13lDU0oRHx9PYWFhjeukpqbyzTffsGHDBgwGQyNGJ4TtWLknngeW7+XznedQSlk7nGZHKspEfZOWZcIqiouL+eCDDygqKqJDhw7MnDnTqvEYDAaWLFlCQUEB06ZNq3YGqKNHj7J+/Xo0TeP48eM8+eST6PW2P6aYUoq4lDxCfFxkDDQhmrFt27axb98+ANLT03nwwQevus0t0cHsPptBv7Y+eDjZN3SIQoh6sG3bNn777Tc0TePee+8lMDDQqvHs3r2btWvX4uvrW2Pe+eKLL8jMzEQphaOjI4MHD27kKOtGFRVBaSmau7u1QxFN3JaTqTz59UE04KfDSfi7OTKuS2trhyWEqIW0LGtB8vPz+e9//8uqVasoKyuzaiwlJSUUFRUBphZmTUFxcTFgqnwqKyvDaDRaOaKaXf606s31Jxjz9u/M+GiHFSMSQtSH9PR0CgoKqn2vvLWGUsrs/NQuwJ3V8wfz9ITO9RajEM3Ril3nuf6d39kYm2LtUMjKygJM13pOTo51gzFTcXExSik0TasoT9mq8jKUKizE8MX/MHzxP4zSo0BcozNp+QAoQNPg9KWfhRC2S1qWtSAnT57kzJkzAPTv35/Q0FCrxeLu7s5NN93EqVOnGDBggNXiKKfX65k/fz45OTkEBQVVu0737t05c+YMiYmJDBs2DHt722yFcSghm5kf7aBLkAf/u2cAZ9JNf4zPpssfZSGastOnT/PZZ5/h7OzMI488UiUHDR48mKysLHJzcxkzZoyVohSiefrXbydIzinmo62nGdkpwKqxjBgxAqUUHh4etG/f3qqxgGmsoKCgIHx9fWtcZ8qUKaxbtw4vLy+bKPfVxLBhA+rsGXRjxppak5UPFZKba93ARJM3vktr3t0QR2peMV7O9tzQ3botQoUQVyeVZS1I+/btadu2Lc7OzjVWCDWm7t2729SMb25ubri51Tywvp2dHVOnTm3EiOrm4IUs8orL2HMukxKDkWdviKJTa3eGd7Bu4V40nrNnz/LSSy+xYcMGkpKSCAoKYtasWfz973+XGYKasPLxHcvKyqod68TZ2Zlp06Y1dlhCtAgPjWrP5zvOcffgcGuHgpubG5MmTbJ2GBU0TSM4OLjWddq1a0e7du0aKaK6UwkXwGBAJSehCwlBN3oM5Oejdexo7dBEExfg4cSGx4ZzPCmX9q3c8XS2zYfuLUVJSQkbNmwgPz+f4cOH4+fnZ+2QhA2SyjILNPUbUFdXV2bPnm3tMJoFo9HI+vXrKS0tZfz48djZ2c6lNC06mIISAx1bueNkr8fJXs+DI63/5Fk0ntjYWIxGIx9++CHt2rXj8OHD3HvvveTn5/PGG29YO7wm7+TJk5w7d44+ffrg5eXVaMft2LEjc+fOxc3Nrda/OVlZWfzwww8EBwczYsSIRotPiJo09fITwKz+YczqH2btMJqF8+fPs337dvr06WNzFWj6seNQFxPRokxj1+rCrV85KpoPdyd7+rT1sXYYLUpJSQm7d+8mODiYsLA/c/jWrVvZtWsXYJqAZN68edYKUdgw27nDbwLkBlSUS0xMZMcO0xhgHTp0oEOHDlaO6E+OdnruHRph7TCEFY0fP57x48dX/BwREcHx48dZsmSJ5KprlJuby//+97+K2d/mzp3bqMc3p/v8oUOHOHXqFKdOnWLQoEFNpjJCNF9SfhKX27x5M6dPnyYrK8vmKsu0Vq3QWrWydhhCiHqyc+dONmzYgL29PQsXLqyYMbO8tb5SquL/QlxJKsssIDegDaM8QdnqGGDVadWqFZGRkZSWlhISEtLoxz+elEtrTydpwi3Mlp2djY9P7U8zi4uLKw28bEsDRxcVFZGdnU0rK9/E6HQ6dDodBoPBZnNW165dOXXqFMHBwVJRJmyClJ8aTmFhIU5OThU3gE1BdHQ02dnZ9O/fv9GPrYqLTd0qr/L3UDR/zaHFa1OSnJzMnj176NChQ6OOtRgcHIxer6dt27aV8uSQIUPIyMggLy+v0t8nIS4nlWXX6Go3oLZ882kLsrOz+eCDDzAajdx33321Dg5rS+zt7Zk1a5ZVjv2/XedZuOYQrTwc2fLEKBzsZFJbUbu4uDjefffdq96ULlq0iBdeeKGRojKf0WhkyZIl5OTkcMMNNxAdHW21WFxdXbnrrru4cOECXbt2tVoctfH29mbOnDmVlhUVFVFaWoq7u7t1ghLiCk29At8WrF+/vqI748SJE60djtmioqKIiopq9OMqoxHDV19BQT66IUPRdZZZgFsyafHauFatWkV6ejr79u3jiSeewMnJqVGOGx4ezt/+9jd0uj/vl9LT0zl37hxTp06VilFRK7nLvgblN6D3339/jessWrQIT0/Pipc1WiHZsoyMDIqKiigpKSEtLc3a4dQbo9HIihUrePXVVzl27Fi97js5pwiAzIJSyozGet23sG1PP/00mqbV+oqNja20TUJCAuPHj+eWW27h3nvvrXX/CxcuJDs7u+IVHx/fkKdjNqPRSGFhIQB5eXlWjgaCgoLo168fLi4u1g7FLFlZWbz11lu89dZbHD9+3NrhCGFW+QmkDHU158+fr/Rvc3Hq1Clee+01Pv30U8rKyupvx0YjFJvKUKpAZghv6caPH8+yZcsYO3YsERERTJ48mccff5zVq1fXuE1xcTE5OTmVXsI85WUme3t79Hp9ox778ooygM8++4zvv/+eTZs2NWocoumRlmWYbkBfffXVWtc5duwYnTp1qvjZ3BvQhQsX8uijj1b8nJOTI4W9y7Rt25bx48djMBhsYvrz+pKRkcHJkycB2Lt3L53r8enlvOGRBHg40SXQAxcHuYRbkscee6xKi6ErRUT8OV5dYmIiI0eOZNCgQSxduvSq+3d0dMTR0fFaw6x3dnZ2zJ07l6SkJLp162btcJqclJQUSkpKAIiPj6ejzOom6klDlp9AylBXM3nyZPbv329TM4vXh5iYGAoLCzl79ixJSUlXnWnTXJqdHfpJk1Bp6WjNqMwp6s/VWrzaagv8pmDmzJnExsYSGhpq9WEsfHx8yM7Oxtvb26pxCNunqermn29hUlNTSU9Pr3WdiIiIimaaiYmJjBgxggEDBvDJJ59Uqa2uTU5ODp6enmRnZ+Ph4XFNcQvbZTQaWblyJefPn2fy5MmVbhRsnXxHm4eEhARGjhxJdHQ0n3/+eZ2e4sl3oXkwGAysW7eOvLw8JkyYYHZXzLS8Yjyd7bHXW68RunwHbVtjlp9Avg8txenTp1m9ejUBAQHcdtttNjXjeG3k+9m0xcXFER0dzRtvvFFjRX51XcNDQkLkd97EGI1G8vLyKv3OTp48SV5eHj169LD4b1NTI7nKfE3jr08D8/f3x9/f36x1L78BXbZsWbO/mETd6HQ6ZsyYYe0wRAuVkJDAiBEjCAsL44033iA1NbXivdatW1sxMmENer2e66+/3qJtvo1J4K9fxtAhwI21fx2GXtd0Bg8XjUfKT6IhRERE8Pjjj1s7DNFENWSLV1ttgV+dU6l53Lr0D3xcHVg9fzBujnLbX06n01WqJIqPj2fFihWAadKUQYMG1XnfKjsbw/pfwMMD/egxaPK3rkmTq8YCTekGVKWng7MzWhMZU0cIUX/Wr19PXFwccXFxVbqvSGPi+pGfn8/GjRsJDAy06oQDDeXoRdM4LKfS8ikuM0iXb3FNmlL5KbuwlDNp+fQI9mxSM0wKIUwaesiKpmLP2QzS8kpIyyvhTFo+3dp4WjukFkGdOwuZmaZXVhbIzLtNmpR+LdBUbkCNp05h3PAbODigv+12NCv3CxdCNK45c+ZctaDYEJTRiDpwAFVUhC46Gq0ZzzC0a9cu9u7dC0CnTp1wdXW1ckT164ER7XC219Mr1FsqysQ1ayrlJ6UUUxZv40xaPk+N78T84ZHWDkkIYSFp8WpyQ/cgjl7MwdfVka5B0tWuNiEhIdx+++3k5eVd8xiQWmQ7SEhA8/AAGROtyWs+GaERzJkzB6VUtS+bcmkgZ8rKTDP/CCFEI1Dnz2Pcsxt1+BDGgwfrto/8fIwHD6JsfIap8PBw7OzsCA4OxtnZ2drh1DtPZ3seHt2B4R3Mu+EQojZNpvwE5BSWVvpXCNE8lbd4DQ0NrWjxmpSURFJSkrVDqxeujna8MLkrf7muvc20kj1+/DibNm2iqKjI2qFU0a5dO3r27HnNFaaaqyt2E65HP3iIzXzuou7kcXEzosrKICMD2rdH5+SE5uGB1kT61Qshmj7tstZVmpmDyF/JsGULxJ+HuJPY3Ty1vkKrd23btuVvf/ubFISEaCbOZxQAsHr+IGLisxjf1ba6hwoh6ldTafHaXBQVFfHll19WPCgZOXKktUMS4qqkZVkzYvjpRwzffoNx7U/owsPRfH0b/JglJSXs2rWLM2fONPixhBC2TfP3Rz91GvpJk9F17GjRtsZTpyhbtRKKTU8bNS+vBoiwfjVURZnRaCQ+Pp6S8lbCQogGtTUujeFvbGT4GxtJyCrkxp5tcLSzfAZhS507d46dO3faZCsLIZq7ptTitTmwt7fH19cXTdMIDAy0djhCmEValjUDqqwMpWmQlmZacNnAuQ1t3bp17Nu3D03TWLBgAb6NUEEnhLBdWh0HMjXu3AH5+QDoptyE5udXn2FVKCgoQNM0m+46+euvv/LHH38QHBzM3Xffbe1whGi2jEZFUZmBwwnZlN8fH07IZlBkw+Sfy2VnZ/Ppp5+ilCIhIYGbb765wY8phBDWotfrmTdvHiUlJTZdBhPiclJZZsOMZ06jUlLRde1aqXtTpXUuXMC47mfw8EAbMhR1/Di6qM51Op7KyECdO4sWGIRmxuxUxcXFGAwG07byJEYIUUcqJwecnU2VZX5+aJeePNa38+fP8+mnn6JpGnfddRdBQUH1foz6UFxcXOlfIYRl0vOK+ffWM3Rq7c6NPdtUu45Sipn/3sGusxn848au3NAtEE2DW/uGWny8MoORr/ZdoKDEwK19QnB1rL14bTQaK7Umk/KTEKIl0Ov1DVZRVlRUhKOjowyPIeqVVJbZKJWTg/HXXwEw5ORgN2ZM9SsmJ5sG8c/KQhccjNahQ92OV1CA4dtvTJMCAPopN6HVMpPMhg0b2LJlC66urgwaNIjw8HD8GqglSEMpKiqirKwMNzc3a4fSoJRSlBiMjdKlRIi6MGzaaGoZ6+2N/sYpaBYMrqrKylBxcWBvhxYRWW0hKS8vjxMnTpCcnIzx0qQn8fHxNltZNm7cOMLDwwkLC7N2KEI0SYt+juWrvRcA6NTag46tq46hWGpQ7D2XiVJwODGH927rXefjvf7LcT78/TQasP1UGv++s2+N62ZmZrJs2TJyc3OJiooiKCiI3r3rfmxrUEqRlZWFp6dns5o9sDoGgwGdTic34ELYsF27drF27Vo6d+7M9OnTrR2OaEakssxW2duDXg8GA5qzU42raV27opWWgKsbhg2/oXl7oxs02PI/6tnZFRVlACojvcbKMoPBwNatW4E/uzS1a9fOsuNZWWFhIe+88w7FxcXMnTuXkJAQa4fUYO76dDebT6Ty1vSeNT5hF8KaNE8vVHIyeHqiEhMhMBBNb17lrnHTRtSlMRO1zEz0fSrfpJaWlrJ06VJyc3PRNI02bdrg7OxMt27d6v086ouDgwNdu3atdZ2SkhJWr14NwNSpU7G3t2+M0IRoEnxcHACw12u4OVVf1HWw0/H+bb3541Q6Xi723Pj+Vl6c3JUeIV4WH+9AfBYACjhwIbvWdWNiYsjLywPg6NGjTJkypcldv1u2bGHjxo1ERkYya9Ysa4fTYM6dO8dnn32Gr68v9913H3oz/y4J0RjKDEb2nc8iKsgDt6u0Zm3uEhISALhw4YKVIxHNTcu+smyY5uyM/uapqIwMtFpaF2iOjugHDMR49Cjq4kXUxYvQO9rUpckSAQHg5w9pqeDqhhZa8zF1Oh0+Pj6kp6ejlKJVq1aWHcsGFBUVVXSByMrKaraVZUoptp1Kx6hg55kMqSwTNkk3bBj06IFh6xaMa39C69IF/aDBZm2rLpviXV2sOt17Tk4Oubm5pveVolevXkRHR9dP4FYUHx/P8ePHK/4fERFh5YiEsB1PjOtIr1Avwv1caeNVc3loXJfWjOvSmp4v/UJWQSmr9sbXqbJs9qC27D6biUEp7hta+7XYqlWrim6X3t7e2Nk1vaJ4RkZGpX+bq/j4eAwGAykpKRQUFOBex1mehWgIr/wcy7+3nqFnsBffLDCvzNRcXXfddXh6etKxhsmllFIYjUap8BYWa3p/oVsQzcvL7BnhtPBwtMQE8PZGq0NfcE2vR3/jjZCTA25uaLUU3jRNY/bs2Rw4cAAfHx86d67bGGnW5O3tze23305eXt5VW3A0ZZqm8cHtvdlyMo37h0VaOxwhqqVpGnh5gf5S3rGgMKOL6oJx7x7T/zt3qvK+j48Pbdu25ezZs7i5udGhjl3VbU1oaCjdunVD0zRCQy0fY0mI5sxer2NCV/NnW/v79Z356dBF7hjQtk7Hm9A1kJ1/86HUYCTQs/YyWFRUFNOnTyctLY0ePXo0ye59Y8eOpXXr1k2uV4Gl+vbtS2FhIQEBAVJRJmxOQYlp3Oi8krKrrNn8eXh4MGrUqGrfKykp4cMPPyQvL4+7776bgICARo5ONGWaklFFG1VOTg6enp5kZ2fj4eFh7XCEqEK+o6JcY38XVFkZpKeDv79l45ZlZYFej1bDzYzRaCQ9PR1PT08cHBzqKVrRGCQficvJ90HYMvl+tjzW/J0Xlhj4LTaZfm19CPCoecie+qKUYtu2baSnpzNixAg8PT0b/Jj1ITMzk3feeQeAm2++2aaH4WgskqvMJy3LhBBC2ATNzg7q0K37ai1wdTod/rVMWGILTp48SUxMDMOGDWuSXdsBtsal4aDX0S/cx9qhCCGEEM3OL0eTWLknnlv7hDImqhU3dG+8iYrOnTvHb7/9BpgqzqZMmdJox74W3t7eTJ06tWJSFSEsIZVlQgghhJVt2LCBpKQknJycmDRpkrXDsdj2U2nM+ngnAD/9ZShRgfKkUgghhKhJZn4J648lMzDClxAflxrX+/1EKv/46SjTegfz5voTFJUZ2RaXzrEXxzdKnEajkZUrV3L8+HE0TUMpha+vb6Mcu7405yF3RMNq3vM9C1GPlFKcO3eOrKwsa4cihLBhcXFxnDp1yqJthg4dSmRkZLWTD2RnZ7N+/XrOnz9f55jWrl3La6+9xokTJ+q8jyvt2bOHJUuWcObMGZztTePM6TUNJzspWgghKsvLy+P06dMYjUZrhyKETbjv8z08+fVBbly8jTJDzdfFJ9vPciI5j39tOEm7ADcA2l/691rEZxSwcPVBFq09Rn5xzeOeXT6hkFKKMWPGMGTIkGs+fn1JSEhg586dlJaWWjsU0QxJyzIhzHT48GFWr16Ng4MDjz/+uE1N9a6UIj4+Hn9/f5zrMMGDEE2Rys5GJSSgBQWZPRlKQzt58iQrVqwA4M477yQ8PNys7aKiomrsHvDrr79y+PBhYmJieOKJJ+oU14EDByguLiY2NrbeJjnYsWMH6enpxMTEcNNNN/HrI8Ow0+lo6+daL/sXQjQfH3/8MVlZWYwaNYqhQ4daO5xKcnJyyMvLIyio8bq0CZFXZKqgKiwxYKxlBPHZg9oSn1nAuKhW/HDoIlGBHvz3rn7XfPz7PtvD8eTcihhevLH61lceHh7odLqKWXw7duxYbxOTFBUV8euvv+Lm5sbw4cPrtN8VK1ZQUFCAUooBAwbUS1xgKs9t2bKFAQMGSPfNFkwqy4Qwk+7SgOM6CwYebyx//PEH69evp1WrVsybN8/a4QjR4FRBAYY1q6G0FPR69NNvRXO79ietlY6hFBcvXsTT0xNXV/MqgC4v6NVXYTI4OJjDhw8TEhJS531MmTKF48ePV3kaXFpaSlFRUZ1mehs3bhwHDx5k0KBBALQLkNnihBDV01+a5djWylClpaUsWbKEoqIiZs6c2WxmTBa2b8nt0Xy17wKjOgXgUEuL7OEd/BneYTjfHUjk7CZTq/WcojK8XK5twqLknGKMCnQaJGUX1biet7c3d955J8ePH6d9+/b12gVz37597N27F4C2bdvStm1bi/fRrl07Tp48SXBwcKXl2dnZpKSkEBkZWae8s23bNuLj4ykuLpbKshZMKssEKicH466dYGeHrv8AtCbQMiknJ4ecnBzatGnTaNOud+nSBS8vL9zd3W2qVRn8eVNua4VQIRpMdpapogzAYEBlZNR7ZdmBAwf49ttvcXFx4ZFHHsHO7up/Mtu1a8cdd9yBTqerU6GvOv3796dHjx44OjrWeR+dOnWiU6dOlZaVlZXx/vvvk52dzYwZM+jYsaNF+2zfvj3t27evc0xCNHVKKf6z7SybTqRwc6823NQr+OobWVl5S3RfX1+zHwLUh7vuuou0tLRrqvRvCJqmVZShGqs8KQRAWz9XHh9r/t/dsVGtuH9YBK08nAjxvvZ7tWdviOLpNQdxd7Tnoetq/1seFhZGWFjYNR/zSsHBwej1ehwdHfHz86vTPm666aYqy4xGI0uXLqWgoICRI0cybNgwi/c7cOBAiouLKx4I1pfU1FR+/PFH2rZty4gRI+p136L+SWWZwLB5EyQnA2BUCv3IUdYN6CoKCwt5//33KSkpYcKECfTrV/emyBcvXiQtLY2uXbuaVUhq06ZNnY/VkAYMGEBoaGi1f2hiYmJYt24dAwcOrNMfCyFskn8A+PpBehp4eaMFBtb7IUpKSgBTpVJ59wNzRERE1Hss9vb2HDt2jMDAQLy9vetln2VlZeTmmrpgZGZm1ss+AQoKCtDpdDg5NfxU9kJY084zGbz041EAtpxMo1eIt813Q968eTObN2/G1dWVhx9+2KyHANUpKyuraPFqTksTFxcXQkND63SshmRnZ8cDDzxAfn5+lZmIS0pK+PTTTykqKmL27Nl4eMjEJcJ6nOz1LJzQud72N6VXG27saep6XB8VxRs3buTIkSNMmjTJ7Iq10NBQnnjiCfR6fZ1z0dXU9dw6duxY40NEpRRlZWUWNZ4oLS1Fr9ezb98+zp07x7lz5xg0aBAODtfWQlA0LKksE1BWBkqBpoHB0KiH3rJlC/Hx8UyYMMHsG8DS0tKKm9jyG726MBqNLFu2jLIy05gB3bp1q/O+rE3TtBor8g4fPkxRURExMTFSWSaaDc3ODv2UKZCXB25uaA3QqrJv3754enri5+dn9dak27dvZ8OGDbi5ufHYY4/Vyz6dnJy48847SU1NpVevXvWyz+TkZD766CPs7OxYsGBBnbp3CtFUFJdVHpS7tJZBuutbeno6P//8MxEREQwcONDs7crLTYWFhRgMhjrfoO7atYv169fj5eXFX//61zrtw1a4ubnhVk3L5NTUVBITEwE4f/68zKgnmp36bE25fft2ysrKOHDggEWt0K6l1XxNdDod9913H6mpqQ3yAHPVqlXExsYyadIks8pPFy9e5OOPP8bT05ObbrqJ06dPEx4eLhVlTYBUlgn0Q4dh2LoF9Hbo+vVvtOMWFxezYcMGAFq3bs2oUea1aPPw8OD2228nJSWFPn361Pn4mqYRGBjIxYsX69z0tykYNWoUzs7O9OjRw9qhCFGJSkrCePo0WkgwuhDLWxxoOh004JN+TdMs7prYUMpv5Oq721R9d63Izs7GYDBgMBgoKCiQyjLRrA1t58c9Q8LZEJvC9D4htG/VeN/3PXv2EBcXR1xcHP369asYE+xqRo8ejbe3NyEhIdd0kxoQEIBer68yTlBzEhQUxNChQykqKrKZvwVC2KqxY8cSGxt7TT1+6pOnpyeenp4VDSzqs2Lq7NmzKKU4f/68WZVlGRkZGAwGMjMz8fX1Zf78+fUWi2hYmrKkb4m4Zjk5OXh6epKdnV1vzbmVUqj4eNBACw5pMmMuKKX48ccfOX/+PFOnTq3S/L2xYlBKVRnrq6ioiI0bN+Ln50ffvn2v6Rj5+fnExsbSsWPHap9c2pqG+I6KpqkhvwuqsBDDiuVgNLXE0E+dhubjU6/HaG7S09Px8PCweiu32iilOHjwII6OjlXGSKsLyUficg3xfUjIKmTXmXQGRPgS6Gn7Y7aWS0xMZM2aNURGRjJ+/HirxGA0GiuN+VXu2LFjxMXFMWTIkGvuNn7y5EmAJjE+ouSrlqcp/c7T84opNShae7acIRKysrJYsmQJmqbxwAMP1Nvv6Ny5c5w8eZL+/fub9VBQKcWhQ4fw8vKyie7oTel7a23SsqwZMO7bi9q3DwBddB+03r2tHJF5NE3jhhtusHoM1VUu7t27l127dgHQoUMHPD0963yMNWvWcOrUKY4cOcKdd95Z5/0I0RQooxF17iyarx9abX+Ai4srKsoAVGEBGlJZVhtzxgUqKyvj4sWLBAUFmd3SpD5pmiatWEWTkZ5XzIR//U5OURmezvZsemwE3q5No1tMUFAQCxYssGoM1U0qpJTi66+/xmAwYDQaufHGG+u8/4SEBFasWAHA3Xff3axbsQnRkNYfTWbe8r0YjIrnbohi7uBwa4fUKPLy8ipaluXn59dbxZClrfI1TaN79+41xujs7GyVMpu4Opk6rxlQiRcr/m+8mGjFSJqPsLAwHBwcaN269TW3BvPy8qr0rxDNmTp6BOOvv2L48YfaV/T0ROvWHRwd0dq3RwsMapwAm7mvvvqK//znP/zww1U+fyEEcal55BSZxi3NLizldFqelSNq+jRNo0OHDuh0OiIjI69pX87OztjZ2aHX63FuAjO1C2Grvth9HoPR1Jls2faz1g2mEQUHB3Prrbcyc+ZMAmuZCKq4uJicnJxGjMwkJiaGf/7zn3z88ccWTSQlGo+0LLPQ5MmTiYmJISUlBW9vb0aPHs2rr75KUJD1bvR0UVEYk5Mu/b+L1eJoToKDg3n66aeBax/8cuLEiQwYMKBSqxClFAUFBbi4uDSZbrOiabFarnK/9NTuUuWwKi01tTRrHYh2WcWzpmnoBwyAAQMaNp4WpvwJavm/QtgKWyw/9Qj2omuQB4cTc+gR7EnXNnVvRS7+NH36dJRS11y+8fHx4eGHHwYqj9fYEGMQCdGc9Wnrw2+xKQD0D29ZrfivNiREaWkp7777Lvn5+cyaNeuaK/ktkZqaCpiG2RC2SSrLLDRy5Ej+9re/ERgYSEJCAo8//jjTpk1j+/bt9bJ/ZTCgTp9GCwhAM7Prny4yEq1NG9A0tAaYUaSl0jSNoqIiVq1ahYODA1OnTq3TrFGaplWZQGDt2rXs3r2bAQMGMG7cuPoKWYgKDZ2raqILC0ObPQcujatl3LEDFXsMvLywu2V6gx5bwC233MKZM2catbAnhDkaIycdu5jDqdQ8ru8aiE539YoaJ3s93y4YQlJOEa09nNCbsY0wj6ZpHDx4kG3btjFq1Kg6D5B/5aQmmZmZfPDBB2iaxvz5869pmAwhWop5wyJoH+BGfnEZ13eruYVVS1RaWkpBQQFgmqSoMQ0bNgw3NzdCQprOmOMtjVSWWeiRRx6p+H9YWBhPP/00U6ZMobS0tF4GXVZHjmDcuQPc3LCbeZvZ22lOLWewxsZ0/vx5Tp8+DUBycjJt2rSpl/1evGjqOpuUlFQv+xPiSg2dq2qjXf60vzw3OUkXmsbg7OxMVFSUtcMQooqGzkkGo2LqB9spKDHw1nQjN/Uyb3wrvU6jjZfkp4bwxx9/kJKSwp49e+ptNsnMzMyKlmXZ2dlSWSauiS22eG0ImqYxunPjT6TWFLi4uDB37lwyMjLo1q1box7b0dGRgQMHNuoxhWWksuwaZGRksHz5cgYNGlRjQa+4uJji4uKKn6/aH9rLCzQNLuuyZzx6FGPCBfT9B9Q+YLaod+Hh4fTq1Qt7e/sa+7onJSVx7NgxevfubXah7aabbuLw4cONnpRFy2ROroI65Csz6Pr0gfBwlLs7Ki+vUldMIUTL1BA5SadBh1buHL2YQ1tfU2uki9mFvPTDUXqGeHHfMGlt2dhGjRrF7t27GTx4cLXvG41Gdu/ejbOzc42DX18pPDycyZMno2kaISEh9RmuaIGs1Qpf2JaQkBDJJ6JaUllWB0899RTvvfceBQUFDBgwoNaBlBctWsQLL7xg9r51oaFoc+bCpRkxlNGIcdtWAIxu7uil9rlR2dvbM3ny5FrX+eqrr0hPTyc1NZXp083rZubj48OwYcPqI0QhamRJrgLL85U5NE1D+fpi/PpryMxAN3wEug4d6vUYQoimoSFzkqZprJ43iFKjEUc7Uxnqy93x/HQ4iZ8OJzGjXygeTg3bqlZU1r59e9q3b1/j+7Gxsfz8888AtG7dmoCAgKvuU9M0evXqVW8xipbN0havDfFQUQhhu2Q2TODpp59G07RaX7GxsRXrP/HEE+zfv59ffvkFvV7PnXfeWeMMFgsXLiQ7O7viFR8ff9V4NDu7in7Lmk6H1qULeHigi4ionxMW9So0NBRApjQXDa4hcxXULV+ZRSnIyzX9N6dxx4MQQjQcW8tJOp1WUVEGMK5LayL9XZnWOxh3R3k+bGv8/f1xcHDA3d0dd3d3a4cjWjhzWrwuWrQIT0/PildjtkYqKjWwYtd5fjx0UWZOFKKRaEquNlJTU686C0VERES1s+5cuHCBkJAQtm/fblaf45ycHDw9PcnOzsajDl0qVVkZ6vhx0wQA/v4Wby/qn1KK0tLSZjMr07V+R0XDacxcBXX/Lqj0dFRiAlqHjhWTjqi0NFRKsmlZHSbKEC2T5CPb1lRyUrm95zI4lpTLLdHBlSrVhPWUlZWZZkfWN/3fh+Srpqm6Fq+Xz2B/uepaloWEhNT5d/77iVRcHe2IDvO+6roLVuzjx0OmMY+fvSGKuwaHW3w8IUBylSXkjgXTky3/OlY8GY1GgEqJsyEZY2JQ+/eBnR362XPQdNI40No0TWs2FWXCtjWVXGX46UcoKkLLyUE/eAgAmp8f2hWzwgohmramkpMACkrKmPnRTkoMRvKLy7hfxjCzCXWZZVyI2jz99NO8+uqrta5z7NgxOnXqBJhavN59992cO3eOF154gTvvvJMffvih2tkJHR0dcbz0EPBaxcRnMeeTXSgFOxZeRyuP2idrO5Joapmv00wz/wohGp78hbLAzp072b17N0OGDMHb25tTp07xf//3f0RGRjbaTBaapycKwN3DNBGAEEJcweq5ytPTVFkms5QJIbCBnAQ46HUEeTlxNr2AsEsTAAghmp/HHnuMOXPm1LpOxGVD2/j5+eHn50eHDh3o3LkzISEh7Nixo8Fzk7+7Iy4Odrg5ml5X85dR7Xny64O4Otpx58C2DRqbEMJEKsss4OLiwurVq3nuuefIz88nMDCQ8ePH88wzz9TbU4ar0bVvjxYUBE5O1T7xEEIIa+cq/Q2TID8fTcagEUJg/ZwEYKfX8fNfh5FTWErAVVpwCCGarqbS4rWNlzN7nxmNTtOw11+9p9DNvYOZ2D0QO50OvU7uAYVoDFJZZoFu3bqxYcMGa4eB5ipPRIUQNbN2rtJ0OpCKMiHEJdbOSeWc7PU42Tf9sbGEENfOFlq8Wjp2ooy1KETjkgGvhBBCCCGEEEK0GOUtXq+77jo6duzI3XffTffu3dm8eXOjtXgVQtg2aVkmhBBCCCGEEKLFsJUWr0II2yUty4QQQgghhBBCCCGEuEQqy4QQQgghhBBCCCGEuEQqy4QQQgghhBBCCCGEuEQqy4QQQgghhBBCCCGEuEQG+G9kSikAcnJyrByJENUr/26Wf1dFyyX5Slib5CNxOclJwpZJvmp5JCeJpkhylfmksqyR5ebmAhASEmLlSISoXW5uLp6entYOQ1iR5CthKyQfCZCcJJoGyVcth+Qk0ZRJrro6TUmVYqMyGo0kJibi7u6Opmn1ss+cnBxCQkKIj4/Hw8OjXvbZlMj51+/5K6XIzc0lKCgInU56ardk9ZWvWvo1Wk4+hz+Z+1lIPhKXq+8yVEu/Jlv6+UP9fgaSr1qehrivK9fSr085/4Y7f8lV5pOWZY1Mp9MRHBzcIPv28PBokcmknJx//Z2/PGUQUP/5qqVfo+Xkc/iTOZ+F5CNRrqHKUC39mmzp5w/19xlIvmpZGvK+rlxLvz7l/Bvm/CVXmUeqEoUQQgghhBBCCCGEuEQqy4QQQgghhBBCCCGEuEQqy5oBR0dHnnvuORwdHa0dilXI+bfs8xe2T76jJvI5/Ek+C2ELWvr3sKWfP8hnIGxXS/9uyvm37PO3FTLAvxBCCCGEEEIIIYQQl0jLMiGEEEIIIYQQQgghLpHKMiGEEEIIIYQQQgghLpHKMiGEEEIIIYQQQgghLpHKMiGEEEIIIYQQQgghLpHKsmbk7Nmz3H333YSHh+Ps7ExkZCTPPfccJSUl1g6twbz//vu0bdsWJycn+vfvz65du6wdUqNZtGgRffv2xd3dnYCAAKZMmcLx48etHZYQtWqJeapcS85XIDlL2LaWmJtaak6SXCSaEslNkpuE9UhlWTMSGxuL0Wjkww8/5MiRI7z11lt88MEH/O1vf7N2aA3iyy+/5NFHH+W5555j37599OjRg3HjxpGSkmLt0BrF5s2bWbBgATt27GD9+vWUlpYyduxY8vPzrR2aEDVqaXmqXEvPVyA5S9i2lpabWnJOklwkmhLJTZKbJDdZj6aUUtYOQjSc119/nSVLlnD69Glrh1Lv+vfvT9++fXnvvfcAMBqNhISE8NBDD/H0009bObrGl5qaSkBAAJs3b2bYsGHWDkcIszXnPFVO8lVVkrOErWvOuUly0p8kF4mmRnJTyyC5yfqkZVkzl52djY+Pj7XDqHclJSXs3buX0aNHVyzT6XSMHj2aP/74w4qRWU92djZAs/x9i+atueapcpKvqic5S9i65pqbJCdVJrlINDWSm1oGyU3WJ5VlzVhcXBzvvvsu999/v7VDqXdpaWkYDAZatWpVaXmrVq1ISkqyUlTWYzQaefjhhxk8eDBdu3a1djhCmK0556lykq+qkpwlbF1zzk2Sk/4kuUg0NZKbWgbJTbZBKsuagKeffhpN02p9xcbGVtomISGB8ePHc8stt3DvvfdaKXLRWBYsWMDhw4f54osvrB2KaKEkTwlLSM4SjUVyk6iN5CJhLZKbRG0kN9kGO2sHIK7uscceY86cObWuExERUfH/xMRERo4cyaBBg1i6dGkDR2cdfn5+6PV6kpOTKy1PTk6mdevWVorKOh588EF++OEHfv/9d4KDg60djmihJE/VTPJVZZKzRGOS3FSV5CQTyUXCmiQ3VSW5yURyk+2QyrImwN/fH39/f7PWTUhIYOTIkURHR7Ns2TJ0uubZeNDBwYHo6Gh+++03pkyZApiaq/722288+OCD1g2ukSileOihh1izZg2bNm0iPDzc2iGJFkzyVM0kX5lIzhLWILmpqpaekyQXCVsguakqyU2Sm2yNVJY1IwkJCYwYMYKwsDDeeOMNUlNTK95rjrXxjz76KLNnz6ZPnz7069ePt99+m/z8fObOnWvt0BrFggULWLFiBd9++y3u7u4Vffk9PT1xdna2cnRCVK+l5alyLT1fgeQsYdtaWm5qyTlJcpFoSiQ3SW6S3GRFSjQby5YtU0C1r+bq3XffVaGhocrBwUH169dP7dixw9ohNZqaftfLli2zdmhC1Kgl5qlyLTlfKSU5S9i2lpibWmpOklwkmhLJTZKbJDdZj6aUUvVfBSeEEEIIIYQQQgghRNPTPDs8CyGEEEIIIYQQQghRB1JZJoQQQgghhBBCCCHEJVJZJoQQQgghhBBCCCHEJVJZJoQQQgghhBBCCCHEJVJZJoQQQgghhBBCCCHEJVJZJoQQQgghhBBCCCHEJVJZJoQQQgghhBBCCCHEJVJZJoQQQgghhBBCCCHEJVJZJoQQQgghhBBCCCHEJVJZJoQQQgghhBBCCCHEJVJZJpqsrl278o9//IN58+bh7e1N69atefvtt60dlhBCAJKjhBC2S/KTEMJWSX4StkJTSilrByGEpYqLi3FzcyM8PJwXXniBvn37smTJEt577z0yMjJwdXW1dohCiBZMcpQQwlZJfhJC2CrJT8KWSGWZaJL27t1Lnz59WLt2LePHjwfg0KFDdO/enZSUFPz9/a0coRCiJZMcJYSwVZKfhBC2SvKTsCXSDVM0SQcOHKB169aMGzeuYllqaioODg74+PhYMTIhhJAcJYSwXZKfhBC2SvKTsCVSWSaapJiYGPr06YOmaZWWde3aFb1eb8XIhBBCcpQQwnZJfhJC2CrJT8KWSGWZaJIOHDhAz549Ky2LiYmpskwIIaxBcpQQwlZJfhJC2CrJT8KWSGWZaJKqS6T79++XRCqEsAmSo4QQtkrykxDCVkl+ErZEKstEk3P27Fmys7MrJc3i4mJiY2Pp1auX9QITQggkRwkhbJfkJyGErZL8JGyNnbUDEMJSbdu25cpJXA8fPozBYKBHjx5WikoIIUwkRwkhbJXkJyGErZL8JGyNtCwTzcL+/fuJiIjA3d3d2qEIIUQVkqOEELZK8pMQwlZJfhLWJJVlolmQgR+FELZMcpQQwlZJfhJC2CrJT8KaNHVlW0chhBBCCCGEEEIIIVooaVkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmhBBCCCGEEEIIIcQlUlkmrtnzzz+PpmnWDkMIUQ25PlumlStX4uPjQ15enrVDqTBnzhzatm1bp21HjBjBiBEj6jUea9I0jeeff96ibWbMmMH06dMbJiBhNZKjhbBNcm22TK+99hqdOnXCaDRaO5QK11IGatu2LXPmzKnXeKzl7NmzaJrGJ598YtF2AwYM4Mknn6zTMaWyzIrOnDnDgw8+SIcOHXBxccHFxYWoqCgWLFjAwYMHq93mySefRNM0br311krLNU0z67Vp06ZGODPr+fjjj+ncuTNOTk60b9+ed999t8o6a9asYdy4cQQFBeHo6EhwcDDTpk3j8OHDVoj46vLy8nj44YcJDg7G0dGRzp07s2TJkmrXzcrK4r777sPf3x9XV1dGjhzJvn37ql33u+++o3fv3jg5OREaGspzzz1HWVlZQ55Kk1GXaxPk+rwauT4b5/o0GAw899xzPPTQQ7i5udX53IRteeqpp/j66685cOCAtUOxCVKGqn/m5Oi2bdvW+Pm0b9/eClHXLjk5mblz5xIQEICzszO9e/dm1apV1a6bkJDA9OnT8fLywsPDgxtvvJHTp09Xu645n1VLJOWnhiHXZuNcmzk5Obz66qs89dRT6HRSTdJcPPXUU7z//vskJSVZvK2mlFINEJO4ih9++IFbb70VOzs7br/9dnr06IFOpyM2NpbVq1dz7tw5zpw5Q1hYWMU2SilCQ0Oxs7MjOTmZ5ORk3N3dAfj8888r7f+///0v69ev57PPPqu0fMyYMbRq1apez6WsrIyysjKcnJzqdb+W+vDDD5k3bx5Tp05l3LhxbNmyhc8++4xXXnmFp556qmK9F198kaNHj9KrVy/8/PxISkriP//5DxcvXuSPP/6gR48eVjyLygwGA8OGDWPPnj0sWLCA9u3bs27dOr799ltefvll/va3v1WsazQaGTp0KAcOHOCJJ57Az8+PxYsXEx8fz969eyv9oVy7di0TJ05kxIgRzJw5k0OHDvH+++9z33331Xij31LU5doEuT6vRq7Pxrs+v/nmG26++Wbi4+Np06ZNg5x7XcyZM4dNmzZx9uxZi7ctf6LaXG6INE3jueees7h1Wf/+/enYsSP//e9/GyawJkLKUPXP3Bz9zTffVGmxeu7cOZ555hkeeOAB3n///cYOvUY5OTlER0eTnJzMX//6V1q3bs3KlSv5/fffWb58ObfddlvFunl5efTu3Zvs7Gwee+wx7O3teeutt1BKERMTg6+vb8W65n5WLY2UnxqGXJuNd22+/fbbPPfccyQnJ1v99365aykDtW3blhEjRljcGssWnT17lvDwcJYtW2ZRazmj0UibNm249957efHFFy07qBKNLi4uTrm6uqrOnTurxMTEKu+Xlpaqf/3rX+r8+fOVlm/YsEEBasOGDcre3l598sknNR5jwYIFypxfb35+vuUncEleXl6dt61vBQUFytfXV02cOLHS8ttvv125urqqjIyMWrdPSkpSdnZ26v7772/IMC22cuVKBaiPP/640vKpU6cqJycnlZycXLHsyy+/VIBatWpVxbKUlBTl5eWlZs6cWWn7qKgo1aNHD1VaWlqx7O9//7vSNE0dO3asgc7G9tX12lRKrs/ayPXZuNfn5MmT1ZAhQ+p6Wg1m9uzZKiwsrE7bDh8+XA0fPrxe42lIV7v+APXcc89ZvN833nhDubq6qtzc3DpG1vRJGar+XWuOfumllxSgtm3b1pBhWuy1115TgPrtt98qlhkMBtW3b1/VunVrVVxcXLH81VdfVYDatWtXxbJjx44pvV6vFi5cWLHsWj+r5krKTw1Drs3GvTa7d++uZs2adS2n1iCupQwUFhamZs+eXa/xNKTart0zZ84oQC1btszi/T744IMqLCxMGY1Gi7aTyjIruO+++xSgduzYYdF2d999t4qKilJKKTVhwgQ1ZsyYGtet7o/J8OHDVZcuXdSePXvU0KFDlbOzs/rrX/9q1rGfe+45BagjR46omTNnKi8vL9WzZ89K710OUAsWLFBr1qxRXbp0UQ4ODioqKkqtXbu2Yp1Vq1YpQG3atKnK8T744AMFqEOHDpkV348//qgA9eOPP1Zavn37dgWozz77rNbtjUaj8vDwULfeeqtZxytX/pkeOHBADRs2TDk7O6vIyMiKG+JNmzapfv36KScnJ9WhQwe1fv16i/b/0EMPKaBK4ij/7JYuXVqx7JZbblGtWrVSBoOh0rr33XefcnFxUUVFRUoppY4cOaIA9f7771daLyEhQQHqpZdesijG5qSu16ZScn3WRq7Pxrs+CwsLlYODg3r++eervFf+e1+5cqXq3LmzcnJyUgMGDFAHDx5USpl+r5GRkcrR0VENHz5cnTlzpso+Vq5cqXr37q2cnJyUr6+vuv3229WFCxeqrFf+3XJ0dFRdunRRq1evrrayzGAwqLfeektFRUUpR0dHFRAQoO67774qhVpLCoqfffaZ6tu3r3J2dlZeXl5q6NChat26dZXWef/991VUVJRycHBQgYGB6oEHHlCZmZl1Ot/Zs2crV1dXFRcXpyZMmKDc3NzUjTfeqJRSqqioSD388MPKz89Pubm5qUmTJqn4+PgqlWU5OTnqr3/9qwoLC1MODg7K399fjR49Wu3du7fSsQ4cOKAAtXr1arM+i+ZIylAmtpSjO3furMLDw8061uXCwsLUxIkT1caNG1V0dLRycnJSXbt2VRs3blRKKfX111+rrl27KkdHR9W7d2+1b98+i/Y/adIk5e/vX2X566+/rgD1yy+/VCzr27ev6tu3b5V1x44dqyIjIyt+vtbPqrmS8pNcm5awxWvz9OnTCqhSWVteQfP666+r9957T4WHhytnZ2c1ZswYdf78eWU0GtWLL76o2rRpo5ycnNTkyZNVenp6lf2bW+748MMPVUREhHJyclJ9+/ZVv//+e7VloKKiIvXss8+qyMhI5eDgoIKDg9UTTzxRUZ4sZ25lmcFgUG+//XbF79XPz0+NGzdO7d69u2Kd0tJS9eKLL6qIiAjl4OCgwsLC1MKFC6sc09zzre3azczMVLNnz1YeHh7K09NT3XnnnWr//v1VKssuXryo5syZo9q0aaMcHBxU69at1eTJk6uUYb/99lsFWPxdlc64VvDDDz/Qrl07+vfvb/Y2xcXFfP3118ycOROAmTNnsmHDBov73qanpzNhwgR69uzJ22+/zciRIy3a/pZbbqGgoID/9//+H/fee2+t627dupUHHniAGTNm8Nprr1FUVMTUqVNJT08HYOLEibi5ubFy5coq23755Zd06dKFrl27mhXX/v37AejTp0+l5dHR0eh0uor3L5eVlUVqaiqHDh3innvuIScnh+uuu86s410uMzOTG264gf79+/Paa6/h6OjIjBkz+PLLL5kxYwbXX389r7zyCvn5+UybNo3c3Fyz911cXIxer8fBwaHSchcXFwD27t1bsWz//v307t27Sh/7fv36UVBQwIkTJyrWg6qfVVBQEMHBwdV+Vi1FXa5NkOvzauT6bLzrc+/evZSUlNC7d+9q39+yZQuPPfYYs2fP5vnnn+fYsWPccMMNvP/++7zzzjs88MADPPHEE/zxxx/cddddlbb95JNPmD59Onq9nkWLFnHvvfeyevVqhgwZQlZWVsV6v/zyC1OnTkXTNBYtWsSUKVOYO3cue/bsqRLP/fffzxNPPMHgwYP517/+xdy5c1m+fDnjxo2jtLS01nOtzgsvvMAdd9yBvb09L774Ii+88AIhISFs2LChYp3nn3+eBQsWEBQUxD//+U+mTp3Khx9+yNix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RFZW1jV187KGkydP8sEHH3DDDTdUav07bdo0du/eXSl3Hj9+nA0bNnDLLbdULKvLZ9USSPmpKrk2LWPta7N8fLb6Lj9ZUu7w9/fngw8+qNSd9JNPPqlSHpo+fToJCQl89NFHVY5XWFhIfn6+RTFOnToVpRQvvPBClffKY77++uuBqmWYN998E6DiPMw939pcf/31lJWVVfpdGgyGimFOyhUUFFR0xy0XGRmJu7t7lfJT+Qyrlpaf7K6+iqhv7du3Z8WKFcycOZOOHTty++2306NHD5RSnDlzhhUrVqDT6QgODmbFihUopZg8eXK1+7r++uuxs7Nj+fLlFk/XbCvs7e25+eab+eKLL8jPz+eNN96weB/Ozs689NJLLFiwgFtuuYVx48axZcsWPv/8c15++eVKfbC7devGddddR8+ePfH29ubkyZN8/PHHlJaW8sorr9TnqdWL4cOHM3DgQNq1a0dSUhJLly4lLy+PH374oVK3n2nTpjFgwADmzp3L0aNH8fPzY/HixRgMhirJ7/XXX2fy5MmMHTuWGTNmcPjwYd577z3uueeeFt1iwZJrE5Dr00xyfTbe9enk5MTYsWP59ddf67Ubo729Pa+++ipz585l+PDhzJw5k+TkZP71r3/Rtm1bHnnkkYp1Fy1axMSJExkyZAh33XUXGRkZvPvuu3Tp0qXSU8Lhw4dz//33s2jRImJiYhg7diz29vacPHmSVatW8a9//cuiyvt27drx97//nZdeeomhQ4dy88034+joyO7duwkKCmLRokX4+/uzcOFCXnjhBcaPH8/kyZM5fvw4ixcvpm/fvsyaNcvi861Jz549mTlzJosXLyY7O5tBgwbx22+/ERcXV2m93NxcgoODmTZtGj169Khonbh79+4qT0bXr1+Pi4sLY8aMMftzaW6kDFVZY+focsuXL8fR0ZGpU6fWx2k0mKioKG655RZCQ0M5c+YMS5YswcfHhw8++KDSeg888AAfffQREydO5PHHH8fe3p4333yTVq1aVQxgDXX7rFoCKT9VJddm7Wzt2oyIiKBr1678+uuv3HXXXfV2npaUO/7xj39w//33M2rUKG699VbOnDnDsmXLqoxZdscdd7By5UrmzZvHxo0bGTx4MAaDgdjYWFauXMm6dessesA8cuRI7rjjDt555x1OnjzJ+PHjMRqNbNmyhZEjR/Lggw/So0cPZs+ezdKlS8nKymL48OHs2rWLTz/9lClTpjBy5EiLzrc2kyZNYvDgwTz99NOcPXuWqKgoVq9eXeXB4okTJ7juuuuYPn06UVFR2NnZsWbNGpKTkytN7gWm8lNoaCi9evUy+3MBrpgPVzSquLg4NX/+fNWuXTvl5OSknJ2dVadOndS8efNUTEyMUkqpbt26qdDQ0Fr3M2LECBUQEFBp2tqaplbu0qVLnWItnz45NTW1xvcuB6gFCxZUWbem6WvXr1+vAKVpmoqPj69TjEqZptft2LGjcnBwUJGRkeqtt96qmPL28nj79OmjvL29lZ2dnQoKClIzZsxQBw8etPh4NX2mYWFhauLEiVWW1/S51OaRRx5RERERytHRUfn7+6vbbrtNnTp1qtp1MzIy1N133618fX2Vi4uLGj58uNq9e3e1665Zs0b17NlTOTo6quDgYPXMM8+okpISi2Jrrsy5NpWS69NScn02zvW5evVqpWmaOn/+/FXPr3xK9Cun3d64caMC1KpVqyot//LLL1WvXr2Uo6Oj8vHxUbfffru6cOFClRi+/vpr1blzZ+Xo6KiioqLU6tWr1ezZs1VYWFiVdZcuXaqio6OVs7Ozcnd3V926dVNPPvmkSkxMrFhn+PDhlaZNr81//vOfihi9vb3V8OHD1fr16yut895776lOnTope3t71apVKzV//nyVmZlZZV/mnO/s2bOVq6trtbEUFhaqv/zlL8rX11e5urqqSZMmqfj4eAWo5557TimlVHFxsXriiSdUjx49lLu7u3J1dVU9evRQixcvrrK//v37q1mzZpn1OTR3Uob6U2PmaKWUys7OVk5OTurmm2+u87GUsiwX15SrrmbGjBkqJCREOTg4qKCgIDVv3jyVnJxc7brx8fFq2rRpysPDQ7m5uakbbrhBnTx5stp1zf2sWhopP1Um12bNbPHafPPNN5Wbm5sqKCi46vnVVE5atmyZAqqU78wtdyxevFiFh4crR0dH1adPH/X7779XWwYqKSlRr776qurSpUtFeSc6Olq98MILKjs7u2K9mr6bVyorK1Ovv/666tSpk3JwcFD+/v5qwoQJau/evRXrlJaWqhdeeEGFh4cre3t7FRISohYuXKiKioqq7M+c863t2k1PT1d33HGH8vDwUJ6enuqOO+5Q+/fvV4BatmyZUkqptLQ0tWDBAtWpUyfl6uqqPD09Vf/+/dXKlSsr7ctgMKjAwED1zDPPXPVzuJKmVAOOPieEEEKIRmUwGIiKimL69OnVdnEUTVNMTAy9e/dm3759LXZcJCGEEKKhZGdnExERwWuvvcbdd99t7XBEPfnmm2+47bbbOHXqVMVEWuaSyjIhhBCimfnyyy+ZP38+58+frzL1tmiaZsyYgdFoZOXKldYORQghhGiWXn31VZYtW8bRo0evaZZrYTsGDhzI0KFDee211yzeVirLWri8vLwqM01cyd/fv8ZpcRtaSUlJrTNzgGnK6muddvZKGRkZlQZXvJJer8ff37/O+zcYDKSmpta6jpubm9zktnByfVZPrk8hhC2QHF291NTUShOUXMnBweGaxvay1nmJpkOuzerJtSmEhSzuuCmalfL++LW9zpw5Y7X4yvuD1/Yq77dcn4YPH17rMasbd8cS5f3fa3uVj2cjWi65Pqsn16cQwhZIjq5eWFhYrcc0d/zBmljrvETTIddm9eTaFMIy0rKshTt9+jSnT5+udZ0hQ4bg5OTUSBFVlpmZWTHVa026dOlicf/jq9m7dy+ZmZk1vu/s7MzgwYPrvP+ioiK2bt1a6zoRERFVZj8RLYtcn9WT61MIYQskR1dv27ZtFBYW1vi+t7c30dHRdd6/tc5LNB1ybVZPrk0hLCOVZUIIIYQQQgghhBBCXGJn7QBaIqPRSGJiIu7u7miaZu1whKiglCI3N5egoCAZ1FJUIblLNAbJQ6I2koeELZK8JWojeUs0BslD9U8qy6wgMTGRkJAQa4chRI3i4+MJDg62dhjCxkjuEo1J8pCojuQhYcskb4nqSN4SjUnyUP2RyjIrcHd3B0xfZA8PDytHI8SfcnJyCAkJqfiOCnE5yV2iMUgeErWRPCRskeQtURvJW6IxSB6qf1JZZgXlzW89PDwkYQqbJE3ERXUkd4nGJHlIVEfykLBlkrdEdSRvicYkeaj+SGdWIYQQQgghhBBCCCEukcoyIYQQQgghhBBCCCEukcoyIYQQQgghhBBCCCEukcoyIYQQQgghhBBCCCEukcoyIYQQQgghhBBCCCEukcoy0aiMRqO1QxBC2KiysjKUUtYOQwghbI5SSspQQogWq7S0lJ07d7J//37JhaLRSGWZaDQ7duzgH//4B5s2bWqQ/RuNRg4cOMChQ4fkhluIKyxZsoTu3btXTFs+cOBA1q5da+2wKsTHx/PKK6/w0UcfyfUrhBCXKSoq4u233+bNN98kNze3QY6RkpLCjh07yMjIaJD9CyHEtfjpp5/4+eef+e677/jjjz+sHY5oIeysHYBoOS5cuIBSivj4+AbZ/6+//lqRPLOyshg6dGiDHEeIpig4OJhXXnmF9u3bo5Ti008/5cYbb2T//v106dLF2uGRnJyMwWAgJSWFsrIy7O3trR2SEELYhLy8PHJycgDIzs7G3d293vf/73//m9LSUjZv3szDDz+Mo6NjvR5DCCGuRXlFvqZpLapSv8RQhF6zQ6+TahtrkJZldWDrLTRs1fjx4xk3bhyTJ09ukP2npKQApiRa/n8hhMmkSZO4/vrrad++PR06dODll1/Gzc2NHTt2WDs0AHr16sWECROYNWuWVJQJ0UxJ+alu/Pz8mDFjBtOmTaNNmzb1vv/s7GxKS0sBUyu2vLy8ej+GEE2Z5C7ru+666/D09MTPz49BgwZZO5xGkVZ4nvXx77PhwoeUGIqsHU6LJFWUdWDrLTRslZubGwMGDGiw/Q8dOpSkpCR0Ol2LSaJC1IXBYGDVqlXk5+czcODAGtcrLi6muLi44ufylg0NQa/X069fvwbbf0MoKiriwIED+Pr60q5dO2uHU0V5d1ZN06wciRAmUn6qu44dOzbYvgMDA+natSuxsbH06NEDHx+fBjuWEE2R5C7rCw0N5eGHH7Z2GI0qpyQFhZFiYwHFhjwc9E4cz9xKdkky3XzH4mxXv62MRVWaksFh6oWPjw+vv/46d999d5X3qrvhDAkJITs7Gw8Pj8YMU4ha5eTk4OnpKd/NZurQoUMMHDiQoqIi3NzcWLFiBddff32N6z///PO88MILVZbL98Pkiy++4Pjx4wAMGzaMqKgoWrVqZeWoTC5cuMBnn32Gq6sr99xzDy4uLtYOyWySh1qW2spPIGUo0TRI3mp5rpa7Liffj5qlpqayfv16vLy8GDt2LHZ20panXJmxhLjsnTjbeRDm3oMSQwG/xL8PQCevYbTz6l9pffme1T/5Nl4jc1poLFq0qNobTtE0HT16lNTUVPr374+Tk9NV1y+fwUqv1zdCdELUrGPHjsTExJCdnc1XX33F7Nmz2bx5M1FRUdWuv3DhQh599NGKn8tvUm1eURE52w8T98tpCg6doigxA31JIU5leXg5FtLeOw07Py/o3Ruio00vf3+LD3N5S7vff/+d7du38+ijj+Ls7FyPJ1M3x48fp6SkhJKSEi5cuECHDh0AU8xKKTw9Pa0coWjpzG3hKmWo5iMvL4/du3cTGhpKZGSkWdsYlQENnbSQFTbDnNzVmC3zm7q1a9dy5swZAFq3bk3v3r2tHJHtsNM50Mn7zzG47XXOhLr1ILskiUDXDlaMrOWQyrI6urKFxpo1a+r1hvPo0aPExcUxYsQI264ZzsuDw4chOxuKisBoBCcncHGBTp3ARlpZ1Je0tDRWrVoFmLpgjRs3rtb1c3Nz+fjjj8nLy2P69OkVN6xCWIODg0NFd8Ho6Gh2797N/2fvvKOjqrYG/rtTMum9N3oogVASeu+9iKCChWJDxK7P9lQsz/6e6KcgFsSCoiIoglSRXlOoCYSEBEJ6r5PJzNz7/XFJJJKQNmlwf2vNSjJzzz77Zt2c7LPPLh9++CErV66s8nqdTtcqijybTHDgtyzCP4sk/KiZiLwOnCcMCKvyehu1gZ52cYRuOkBo2Y8M5lGCAg0wYgQsWgQDBkAtNmZTpkxh586dlJaWkpqaatmbaiC9e/cmISEBe3t72rVrB0BCQgLffvstAHPmzKFTp07NqaLCTUpd7Ceouw2l1+vZtWsXPj4+LXrTVVggkXP8EqUXUjCVlGFNKda2Kry9Qe3jCd26wQ1Wv3Hr1q2cOXMGQRB4+umna4x4jcs7zNm8fbjq/BngfRsqQTl0VGg+6rJ2NYWT/9SpU2zdupUhQ4Zc98DBYkgSGAx/7/VUlil9bm9vX/H93r17cXNzo02bNhaR3RBEUWTLli1kZ2czZcqUFpGeLggCIe7jmluNmwrFWVZP6hKhUZ8N56+//orRaMTa2ppx41rIH4Ukkf3ncSLWJRB+xERUvBPZhVr02GDCFR0GbNDTgXhCiSCUCLr75mIVFiJHbvTrB6NH19r4KykpYe/evVhbWzN06NAWEZllZWWFRqPBZDJhZ2dX4/Xx8fHk5+cDcPz4ccVZptCiEEWx0slnayM1ReKLfyewcq0TyXp3bBlML48UJowo5cVhF+g21g97Nx3W1mA2y/78zEyIitIRERHMzohuLI+9H0kSGC7F89C2D7nlm+Fkd3LB9cmX0N29AK7zd+7r68s999yD2WwmOjoaT0/PFhFVBnJ6yH333VfpvUuXLlXUMUtMTFScZQrNQl0jXOtqQx0/fpzw8HAAgoODW4TDv6gIjv1VRMRP8USES0RcdOe83h9oc+X1N7YU05soQtUrCQ3MIqyvQNcxfghjRsMVx3dtiI6O5vz58/Tp06fFRASXb4p1Ol2tUq0SCqMAyDFcpsiYg6NV3SOAFRQsRV3WrqaIzI+JiaGkpISTJ09a1FmWlW4mYmMyEduziYhScT7VnhK9QKlkhRozNuhxIZfeqpOE+qURGgrBo73R9usNISGyI60OTJ48GXd3d/766y/y8/M5evRoi3CWXb58ueJ/yeHDh6ssWyJKZkxiGVbqlmH7KVgepWaZhRgzZgwdOnSoNkLjamqTT7xt2zZiYmKYOXMmgYGBlla3Thzbq2fF85fYdcyBi0ZfABzVRfT2SsE3QI21lzMaOx0Gs4ZivcDZWBUx5zWIooCV2kRPuzhmG39gof5jbDzMmBYuwPGRp6GGjk6//fYbJ06cQJIkOnfuzIwZM2qV9tjY5OTkkJeXR7t27WpMCygsLOSLL76guLiY2bNnN2qBXkug5LrfuDz//PNMnDiRwMBACgsL+f7773nnnXfYtm0bY8eOrZWM6p6P4uJi9u/fj4eHR5NEchw6BMv+ncX6XU5YUcadzpu5/36BPs+PR+1St+e2sBA2b4YVK2DvXrC1y2CW/Ve8m/4/vJwM8NJL8Pjj0AKc9Q2loKCAn376CVEUmT17Ni4uLs2tUpUo69DNRV3sJ6j5+cjMzGTt2rX4+voyc+bMZk3fO3UKlr+Wxbe/2lNsssaWYnpZxRDqn0ZoLxGfPj5Yt/eVbSjJiuJCkbMxEuFHTESc0BKX5QxAd07xECuYMPg07Z59BmHSpOuuSXl5eXz44YeA3DzljjvuaBFNSMxmMwkJCXh6etbqb/t83iHO5e3HRefHQO/bW3RkmbJu3XxYeu9XV7Kysjhy5Ag9e/bE39+/QbIuXYKV7+TxwxozCfluADiSTx/rGLr55WPv54S1oxVmlRa9UUN6rpbIBBfOprsgoUJHKYM5wIOaVdxyuxXaJQ9C//61itIHuWTNunXrSEhIYMaMGS0iuECv17Ny5UoKCwu5/fbbr9HJKBrYl/I1JaZ8uroMp4NT8zepUtYhy6M4yyzEqFGjCAwMZPXq1TVe2xoe5JIS+HFFDsvfLSI8I5A2JHJr++OEzWpL2LxgOnTRXjf6trgYTpyAiAjYvx9+/VVCFI0Mdv+F13P/jyHGowi3zICnn5ZTnqrg999/JzIysuLn3r17M23aNAvfaePTkmqWlZWVIQgC2mqi+1rDs6lQP+69917+/PNPUlNTcXJyIiQkhGeffbbWjjKo/vnYvHlzxenbgw8+iLe3t8X1B9mx9a8njXz6hZbOnGVxmz+45+N+OE8eXGuD7HocP2nk3leOcWpbHxx0Gj7p9y23b78XYdBAWLUKWriz+0ZBWYduLupiP0HLfz5MJvj5J4nlr2ex/6wHPqTwgMNaZt1jS9dnpqBuU/tNbV4eHDwIH3yUy5/bHbGhhPnSNyzx3UDXR8fCI4/IZS/+QX5+Ph9++GGljriPPfZYq6xVaJZMqFA3e80ySZIwinq0KpsqdWnpz6WC5Wntez9RhB3bRJa/msmmI+7YU8Rcq3UMH6UhdE4QHaZ0ReXqfF0ZRUVw/DiEHzKy/vtS9h13wFudwf3mT3kg+CD+j8+COXOuG6XfkhFFEbPZXOW+KUt/icPpPwLgqPVgmN/8JtbuWlric9baUdIw60FVERq7d+9m27Ztza1agxFFWPmpxIvPlJFX4swEbQS/z/qLiW8PR91hRq3l2NnBoEHy65FHIDNTYNF/Iti0ZijDDHMY2C6VzyIfpPugQfDYY/Cf/1xj8I0dOxadTkd4eDhGo7FVdXO7GkEQms1RJooiqitezejoaH755RdUKhVz586tqGOkcHPw5ZdfNppsZ2dnADQaTaP9ne7aBQvvLCUr3cwnmqdZ9GYgqicft2jEV68QLREbBpGZCUuWwJyfFvDz8KksvzQVr1694I03Wk2UmcFgQKVSVesYV1BoDm5k+wkgJgbmzy3j6HErRnKKn7vvY/pLIWhnPgr16PDm7AyTJkH/kWamr7qdy39OZt2ee/ks9UFeeOFtXvw8DKvVn8GQIZXGOTk5cccdd7Bv3z4uX76MRqNptR3m1ELz6C1JEhISKkGFWTRxKG0teWWpeFi3o5/Xrc3uvFNoWm60tSs8HBbeZeDUOR0hpLEi4HPmPhuA/fw76uTYsreXl58hQ7Q8/oyWU6dgxXIPPvj6Bd6MFnj0/o94Y2lvbFd9DC2lrFAdUKnk5iJxcXHY2dnh4+NT8ZmLzhdXnT/5Zem0d+rbjFoqNCqSQp1ZuHCh1KZNG8nKykry8PCQRo8eLW3fvr3W4/Pz8yVAys/Pb0Qt686FC5I0cpBeAkm6n5VS/K3PSFJurkXnKNQXS5s2SVLXrpJkZSVKb07aKxl1dpLUsaMk7d1b5ZiCggIpLi5OMpvNFtWlPphMJik2NlbKy8trblVq5ODBg9Krr74qfffdd5IoitKXX34pLV26VFq6dKn0008/VTmmpT6bCi2D6p4PURSlxMREKdfC64UkSZLBIEmLF0sSSNIIdkkXes+UpLNnLT5PVfz8syR5eEiSm5sobZj6pSQJgiRNmiRJxcVNMn99iY+Pl1577TXpzTfflDIyMppbnWu4ePGidOjQoWrXGWUdunFpqP0kSS3z+TAaJentt0RJpzFKnVXnpIPuUyVp82aLzlFmKpPKTGWSwSBJS5dKkkYjSiG2sVIkvSXpsceqXJdEUZQSEhKknJwci+pSXzIzM6W4uDhJFMXmVuW6GEzF0s6kldIfif+TMksSpcySi9LvCe9WvAoMmdeMaYnPpYLluFH2fqWlkvTCc2ZJrTJLvYVIaZ/vbZK4809JsvDfZH6+JL31liTprMxSJ9sk6QADJem+++QPWhn79++Xli5dKr366qtScnJyc6tzXVrKc3Yj0TqPmZqZxozQaA5EEVauhGeeMOFWlsFOt2cY/c08mPSAxeeyt7Zl8mS5zv/SpQL/fm8o67tlslpzP8HDh8NTT8E771TqsOLg4ICDg4PFdakPmzZt4vjx4+h0Oh577LEWU8y7Ko4fP44kScTFxVFSUkLbtm1JSkoCaPY6eAo3FoIgNEox1pISuPVW2LXDxCc8yqJHdaj+91OTRXbNmgXDh8ODDwrM/HUhKx/tz/2f94MJE2DTJmhAiLskSYSHhyOKIn379q2IALUEcXFxiKJIWVkZFy9exMOj5RTFTkxM5OuvvwbkgrmPPvqoRe9doWVzo9lPAPHxMPd2E8ciVDzFB7x213ls/u8bOSzMgmjVV6JE1fDKKzB9usD8+R3pd+oYL378Fi//3hPV+nXQs2fFGEEQaNu2rUX1qC/Z2dmsWLECURQZPnw4I0aMaG6VqiXHkILeJDdnSi2JJch5EBrBCpNUhk5th41GSW+62bgR1q6ICDny9dx5gVek13ju4SK076xqlBRJR0d47jmYMUPFggV+DDlygCe+/pg3toRis3oFjBlj8Tkbi4KCAkC22woLC5tZG4WmRrFQb2AMBgM7duzgxIkT1V5jNMLdd8PixXCX4UtO3/Iyo+NWynH/jYi1Nbz9tlyLo8hkQ9jZb9m8YB3873+yQkZjo85fX7KzswH5d6vX65tZm+szZMgQ7O3tCQsLw87OjpEjRzJ37lzuvvtu+vVr/iKUCgrXo7hY9knt21XGH+bxLF7qhWrZ/5rMUZZUcIk1Z75BtE1j3Tp4+GF44MNgPrz/tFy1e8oU2ZtXT86ePcsff/zB1q1bOX36tAU1h9DQULy8vAgMDKy2w2BzIIoi69atq/g5Pz8fk8nUjBopKFTP+fPn2bJly3U3RydPwuCBZrJPpXDAYSLvbQ7G5tvPLO4oq4peveDoUYEXX1Lzmvgi83M/wDRslGxYtUAKCwsRRRGA3NzcZtbm+rhbB+JmHYitxplA+xB0ajuG+y2gt/sUhvnOQ6Oyam4VFRTqxK+/wqCBItoLZwn3nc5Le8ai/fiDRq0lJkoiQZ1F9u8XePddgU+EJYwp2kDe+Nvhu+/qLTc3N5eDBw+Sk5NjQW2rZ9iwYYSFhTFq1KgW0XhAoWlRIstuYE6cOMHBK0ZTly5drmmfXloKs2fDti1mfuIOZj/qCx+s4rqV+y1MaF8T767fxYdPD2DGNzP5ZskB5qwYBno9/PRTvWp8NCZTpkxh//79BAYG4urq2tzqXJcePXrQo0ePip8FQaBTp07NqJGCQu0wGGDmTIg6WsaOsuEM/PcYOZSiCVmy40GSiy6zPXErX0/+no8+AhsbePy9dji8cIyFy3rKoWcbN9ZrnbK3t6/43tKRs25ubixatMiiMi2ByWSi5CoH47Bhw7CyUjadCi2T9evXU1pailqtZlwVtXYiI2H0KJG2pefY5nw7nn/+AN27N6mOySUX6Hf3GVZ3Gs+98ydT5LSBH8dMRLttEwwd2qS61ESbNm0YNWoU2dnZjBw5srnVuS4alRUDvW+v9J6NxhE/eyWiTMGymEwmfvzxRzIyMpg5c2ajROl/9x3Mny8xU/Ub34W8i9W238Hd3eLzXE1WSSZ3/j4btUrD91N/5umnXRg2TGDixGBGOEex4+5QPIqKoB62ytq1a8nIyCAyMpIlS5Y0gvaVsbOzY/LkyY0+j0LLpGV5IhQsSrt27XB2dsbLy+uaDYnRCLffDn9uN/G7eTLjn+kppz82ccHS1ae+5NPjH6OepeMWp33c9fEAdM8eZOZ7A+Hee+Grr5rUeVcTnp6ezJw5s+Ln9PR0IiMj6dWrV6WijwoKCvXnoYdgz26RP8SpDHywJ7z2WpPrYKOVGxXYauSvgiAvkQUFcP/bHWnz1l5GP98P3nsPnn++zvIDAgJYvHgxoiji5eVlUd3LEUWRPXv2YDQaGTVqVLMX+LaysmLGjBmcPXuWAQMGKOngCi2anj17cubMmSojCWJiYPw4kSDjGbY5zcL5wGbo2LFJ9SsxlnDP5jvQm/TM7nyS9etfZObMoSx0W8fXk6ei2r0L+vRpUp2uhyAIDL3KgSdJEhcKjiFJEh2c+iIILcfWU1BoKlJTU4mLiwMgMjLS4s6yX36BefMk5mnW8HnYZ6i3bGtQCYnacrEgkexSORvncuFlnK1d6NcP9uwRGDMmgPEekfz1UHec7O3hrrvqJLs8+OOfQSAKCo2B4iy7gfHw8OCxxx675n1Jkv1QW/4Q2WiexvgH2tbLUSZJEv8XsYykwou8OHApztbOddZRlOSQfElt5INP8xHMNsz5bxhbnt3GqDfHQJcuNW5EDQYDZ86cwd/fH09Pzzrr0BA2btxISkoKCQkJLF68uNHmESUzJ7K2kmdIo5vrCLxsO9R6rMlkQq1u/rbrCgq14fffZR/5l+3eZJTuEiz7rcmd+ACfjvuC8LRjDPAdWPGeIMAnn0BsLCz8JJTTj7yAw9KlGCdMQAoOrnOUVGPXEktMTGTv3r0A+Pj4VIo0bS5CQkIICQlpbjUUFGpkwoQJTJgw4Zr3c3Nh/HgJL8Mltmin4/znxno5ymJzzvFh+PtM7DCVKR2m1UtHSZIA2ZaaOhW++05gzpwxtPH+H29MngynT4Ob23VlJCUlkZOTQ/fu3Zu0c3dmaSIxuXsAsLdyxdu28SLfs/QXOZ3zJw5aN3q5T0Ktql2XYEmSECVTra9XUKgr3t7e+Pv7k5mZafH/jXv2wNy5ErdZ/crnXZah/uPPJnGUAfTxCuO5AS+hEdQEu/8dcdu9O2zfLjB8uD9TvY7x57wQtD4+cjHrWjJ37lwuXLhAu3btGkP1GpEkkZTic9hqnHCx9m0WHRSaDsVZdhPy3Xfw7bewxvsZJrTJgeW/12szmmfI5ZszqwAYETiayR2m1lnGgh734evgR1vHtvg5erPwjT/Zc9aTqZ/25sR9S+j4yiswdep1Uxu2bt3K8ePH0Wq1PPPMM2i1TWfUBAYGkpKS0ihh01eTpb9IcnE0ACeytjAusHZhx2fPnuXnn3/GycmJBx54AGtr68ZUU0GhQeTmwoMPwqTO8SyIfQUOHpALHDYhMdln2Bz/Oy7WrszteldFhFk5ajV8+SX06AHPFL/Cx21/ImvqVFbdfz9z77mn2Yy3qvD09MTBwQGTyYSfn19zq6OgcEPw+ONQkFXGAf1QXDd9Wu/Uyw2xP3Mk9TAXCy7Wy1lmq7Xlq0nfEZ0dzbi24yksK+CUz5t0ndOdN9fOZ6rtGvo/+iisWVOtjNzcXL766iskSSI/P59hw4bV617qg73GFY2gQ0LEXtu4KWHRuXsoMmZTZMzGrSiAto41R9yJkpmDqT+QV5ZKd9fRtRqjoFBXtFot9957r8XlFhTA3XdLDHI4zTeqJai3RoKTk8XnqQ5BEJjV+TYkSeJU5glKjCX09g5Fp9YREgK/b5IYMbwTrwd8xGsLFsi1YGupn7W1dbPWY71UdJJT2TsQEBjl/yA2msZrQldkzEGr0qFTN15tOYXrozjLbjJSUuDRR2Ful0jmJnwCfx2vd8FsZ50LC3vcz6WCiwzxr5+BpVVrK4zExPwEXjr4JJ7zPMn693qGx4wjqdNOVPPnw+HD1dYFKu+k1hyRU+PHj2fo0KGN3hXTTusCCIBEmainsCwLB6vKxqUoiiQnJ+Ph4VHhFIuOjkYURXJzc0lJSaF9+/aNqqeCQkN4/HEoKTLzWdYYhKefggEDmnT+xPwLLPzjbkRJRJREotIj+Hjsymuua9cO3n0XHn5YQ58nPuC+ZVMYsG8f5/r3r9FZlpSUREpKCsHBwZXqljUG9vb2PPHEE0iS1KgdJ0uM+RzP+gNBUNHLfVKjGo4KCs3Jpk3wzTewyvoJAuaNhgbUsbm1820kFyUzsX39ZXRy7Uwn184A/Hvvc2xP3IL16K3YHOzNHSXfEvN9e6xnz4YZM6ocf7Xd1NRdaW21TowNeAig0SO3nKw8KShLByCtJK5Kx5feVIBRLMXRyrPi57yyVACSi2MUZ5lCq+LppyE308Tq0ilo138MjVTuoSbeP/o2P579HoDOrl35cuI3WGusOWv/OR4TBd7YMp9brL6k9zPPwGefNYuOdUWrkvdYKkGDWmi8aNxzufs5n38IATUDvW/D1dq/0eZSqB6lQMBNhCTJURs6VRkfnR0Hr78upznWAaPZyJO7HuGW9ZM5lxPD4j6P8vaI/+Kkq/tpRWpRChFpxzCYDQAk5F1ARMTKLQ3/O94jZf8U1t61GikqCumdd6qVM2HCBGbMmMH999/fpFFl5dja2ja6o85O60KIm5wOolVZV3nCsGHDBlatWsWKFSswXukm2q9fP1xdXQkKi31i+wABAABJREFUClLqAym0aLZvlzehyzotx6+ttlnqlB1JOYxRNGKWzEhIHE45iEmsujPvokUwciS8/vMEjg4fz7C9e+lThaMsJiaG/fv3YzKZSEtL46uvvmLr1q2sXr26IoXKUqSnp7Nt2zaSkpIq3hMEodE3wfEFR8kxXCa79BKJBZE1Xh8ZGcn777/P1q1bG1UvBQVLkpsLDzwgMdH9GPNdfoMPPqizjP2X9zJl3TjeOvQ6HV2C+GjMCia2n1JnOSbRSFR6BJcKLla8dzYnBlESEdRm2t33CpdyPHm143dIixbBlU7e/8TZ2Zn77ruPWbNmMWjQoDrr0VDUKm2TpDj2cBuLvUZOR3WzvtYWKijLZNflz9mb8jUXC44DYKtxJsC+BzZqRzo49W90HRUULMX27fD55/C+6l+0mTMYbrmlWfQoMORXOMoAzuXEcDB5PwCXCy/hM/1TdD4XudN5HcbPv5IVrwV5eXlN1gmzKnztujDE525G+C3ESm1b84B6klR0CgAJM6nFsY02j8L1USLLbiLWrJFPRX8NeAq3Th3hySfrLCM29xx7k3YD8Hvcb3Rxq3sYrCRJfHZiBV+eWImISAfnjnw9+Xu6e/TAVmOLwWzAY/hGSo9P48mPQvEYOJFRr7xC7vjxuIeFXSNPq9XSs2fPOutREwaDgT///BO1Ws2oUaMa5IjLN6RzMnsbLjo/gl1H1cu5FujQHS/bdqgFbZVtyy9fvgxAQUEBJSUlODk54e/vzyOPPFJvvRUUmor33oP+vQ3Mi3ocln/S5OmXAG2d/nZ2qQQVXrbeaKrZyKlUsHw5dO2qIu7ZHxhwwBPPrVuhc+eKawoKCvjpp58AeZ1ycHCocJDl5uYiSZJFHe0//PAD+fn5REZG8uyzzzZZpIiD9u+aSNa1iCrbt28fxcXFHDlyhBEjRijp4QqtgmefhZJ8I5+V3IKw6TNwcamzjJ/O/kBacSq/xP7E4j6P1uugMbnwMkt2PEhS4SUEBF4b+iYT209hmP9wEvMvoBLUWPuf465H43ln2UwmW72J3b0T6P3rsSrl+fr64utr+bo7sbGxnDx5kj59+jQoql2SJKJz/iLHcJkQt/E46eoeIaMS1Azzm4/BXISN5tqaTYVlWUjINXTzytJog3zQ0NP92pp1CgotmcJCuO8+GO1xkgf4Hj460+Q6xOWe54sTn9LbKxSVoKqoTw1gpZb3L4t6LcEoGhn15lGWLZjLO+0/49/33Sd3T7GTAwJMJtM1jYliYmIq7Kpp06bRu3fvRr+f4uJiTCYTTleliTrrvBt9Xh/bziQURgCNH32rUD1KZNlNgtkML70Es4amMz3pY7mgfz3SLzu5BNHfZyDedj5MqkONssi0cF7a9zz7kvbwS+zPfH5iBeIVwyQ+L46ItHA8bD35cuI3TOs4gzu6zmH7j+3IzYH3tY9g1GgorscpbkMIDw/n2LFjHD58mBMnTjRIVmJhFPll6SQWRlJqLqy3HJ3arkpHGcCkSZPw9/dn9OjRlRZ0BYWWzrlzsHMnLAn8HcHeDu68s2ECy8rqNay/70CeCHsGX3s/gt2788Hoj697fZcuMGYMLP/eGW69VfaeXRUtZm1tjaOjI4Ig4OnpSVBQEEFBQdja2jJhwgSLO7PK08GtrKxq5YSTJImU4nNk6BMaNK+fXTAC8nxFxppPe/v06YMgCHTp0kXpZqXQKsjMhK+/hhc8vsB/RKd6p1/ODJqNq7UbUzvOwNGqdoW2y8xlfByxjP8efYf80lzu2TyHpMJLAEhIrDnzDQCL+zzK42FPM6n9ZN4Y+g4r32qP1iWNZ7yeoesfEYg5VUeXNQaSJPHzzz9z5swZ1q1b1yBZpeZCEgojKmyo+qISVFU6ygC8bTviZxeMu3UbOipRZAqtmNWrISVF4vPM6QhvvwXujVsPsCo+ifyQnRe38/7Rt3m4z2MV9sHoNmMZ6DsYAG97H/4z7F3ev/tOHn1U4P3MeyhOyoG1awHYs2cP//nPf9i2bVsl2TExMRXfR0dHN/q9pKen88EHH7Bs2TLOnTvX6PNdTTfXkQTYy00f4vIPk12aVMMIhcZAiSy7Sdi6FRIT4cc2/4XgYKhnEVcrtRWfjKs+p9xgNnDg8j4CHQPp6PJ3u/V/7X6SPEMuOxK3cXuXOyqNERDwsZdPNTu5dubFQUsrPps5s4StWwdwIrQffbdtA4MB/rG5unjxIrm5uXTr1q3O3eiuh9tVHaRcXV0bJMvXrgtpJXG46HywVjdOPZ9OnTrRqVPjdZNSUGgsPv0U3N0lZh1+Gu6+Gxwa8Ddy4AD8+adcsMP27/D4/HzYvVve41ZT/hCAO4Pv4c7ge2o93eLFMHMmRC18mt5rw2DXroquTlZWVjzyyCOYTKaK6Kk5c+bU67Zqw1133UVsbCzt27evlbMspTiGqKzNAAz2uRMXXf2iSzQqLbYaZ4pNuZWizMoxGAz8+uuv6PV6pk2bxtChQxk8eHCT10hSUKgvq1aBgMi9F1+C96+tY1hbRgSOYkTgqGo/j8uN5VLBJQb7D0Wnlm2d3+N+ZfXpLwGw1lhTaCiouF5AwN8hAACNSsNdwfMqyRs2K5pdq26hUHTD4+tv4IknKn1eWlpKdHQ0np6e+Ptbrh6OIAi4urqSkZFRyZaqD9ZqBzxt2pNrSMXXrquFNKyMWqWlt8ekRpGtoNBUSJJ8ZndL+xO0yy6AuXObRY8w737su7yHINcu3NVtHtM73oLepMfbzqdK2+TRR2HZMjU/9PgP933yCSxcyIULFwCIj4+vdG337t05ffo0kiQ1SWft1NRUzGYzINec7XxV9oAlydQnkqG/gL9dcEX0rCAI2GmdK65RNWJ9NIXqUZxlrQyj0ci+fftQq9UMHTq01puNTz6B0B5l9N37X/jk43p1vwRAFOGrr6B3b+hTudhpbCy8d+Ilokq2oBJUrJr4Hd09egDgaetJniEXB60DJrOJ3p6hZJSk42rjyh1d76K9c4dKssyiGZWg4qmnbFm7FtLv+h7V4gB+vesuOrz8Mj16yHIvXLjAt99+C8gnDHMt+I+hS5cuPPDAA6hUKryqKIwZExPD+vXr6dOnDxMnTryuLA+btoyvZQdLBYWbieJieUlZNOIc1r9dhIceqr+w0lI51zwmBg4elMO+rhAZKR8adO5c51KN12XqVPDzgxVH+vBZcDCsWFGpBbpGo7kmjaCxsLOzq5SSIEkSmzZtIj8/n5kzZ2JrW7m2hkr4Wy8V9TfCBEHFMN95GMzF2F5l2JVz+vRpzp49C8Dhw4eZNGmS4ihTaBYSExM5deoUffr0qXWHWLNZdujf0fYIbkXWMH16/RWIiZG99vfeC1cd7pWWwm/7z/N+8mwkRIb4D2PZ6E8A8LT92/5IL0lnVJuxxOfFISHSza07T/Z95lqdRTNqlZo1r43Bf5XEqq7vcv+b/2KdjQ0L77uvYk1as2YNly9fRhAE7r33Xot2zV2wYAHJyckEBARc81l5p8kSUz6DfOZgr63+QFIQBPp53WoxvRQUblR274azZ2G53Uuw+N6GlbPYvRvat4d/1DvOz5fFXi8o/M7ge5jYfjKOOifUKjXO1i44U33aetu28kHm8pj53Bv/OMLRo0yePJmIiIhrHGJBQUE89dRTiKKIQ0MOVmtJt27duHDhAqWlpfTr169R5jCYizmavg4JictFZxgXsKTCqdjesS/Wages1Xb1PtBUaBiKs6yVERkZyb59+wA52qncaXQ94uPlTeKXUzYjJNjCXXfVX4GTJ+HPP8mJieDllBLSTblk67Np7xDEn1+MRPDS4DoIRElk9akvkRCZGTSb5eO+4HDKAVaf/pIfz/2AndaOXXccQK26doO2NmYNy469j43WlplBs+kTuoQVG/0J6dCBPkeOcCw2tuK+09PTK8alpqbW/76qwcfHp9rPEhISMJlMxMbG1ugsU1BQqJo//pCNrwdsvpWjXrt3r7+wI0fg/HnZktu2DQYNqogui4yECxcgOrphzjKTaMIsmSuiPjQauT7I++8LLH/6DjQf/peoyEiSLl+mX79+eHs3fl2L6igoKCAyUk5bio+Pv+b/hY9dEANUt6NRWdWrDtDVqFVabFXOVX7m6+uLSqVCFMUqN84KCk3F2rVrMRgMXLhwgccee6xWYyoi862fg+cegPrWLxVF2LgRKTyc32zi+NElkUJjIaIkYjg/gLP7uuE23g0rl0yi0iN5Yc8zOFu78HCfx1g5fhVR6ZF8elxODX8i7JkqI2Cz9Vk8tP0+LuTF08uzD/f3XMTs2QNZvmMmz2Tdi83Bg+TNmoX7ldSschtKkiQyMjIs6iyztramQ4cOVX5mFEsrOk3mG9Ku6yxTUFCoHStWQBefPEakboYHl9VfUGIifPcddO0qR6NeOdwqj1wLDoZp064vwtWmbhGlixfDpElOHPWZQf/ly/H8+utq91Z2dtc2OWssrKysmDlzZqPOIUkS0lXfX41KUOFvX/f64AqWQznabWW4XCkoKwgCzs7OtRrz5Zfg5AS3x/0HZs+uf4qTKMobUL2e6IMbKD28n4T8CxSU5XP4dCb56S4UJ3RDLLPCXmvP7qQ/2ZP0F0/99ShqlVzgsdAg1+ty0jmhEq59/MyimWXH3sckmSgsK+Dr01/CwP9j61bIuP1fBCYlMeKqnW5ISAg+Pj7odDrGXBVF0hQMGzaMYcOGMWvWrCadV0HhRuLoUWjTBtqf3wZVNPCoNaWl8q7W2ho6dICEBDm6DMjKkgM6rKzk+a5E1NeZ+Nw4Jvw0kuFrBrAj8e9OjiNHyhFyZ72GQ14e+77+mqioKNZeqb3RXDg6OjJ06FBCQkKqTdF2twls9EK1Pj4+PPbYYyxZsqRWBzwKCo1FuQ1Vl9IKP/wAIW3y6Fu6FxYsqP/kJ0/CiRNk5F8ma/03JGSdJa04lYySdM5H21GU6ktpSgdUqBBFMzsSt/Hz2R9ZdfIzAh3bEJ8XVyHK1aZq/X89v56EPDl96XhGJA/veICeUw5yKdOJve4TGVtQUCktcuzYsVhZWREQEEDXro2T4lgVOrUdoR7T6OoyHB+7xklrUlC4mcjJgQ0b4CG7bxHGjZXtoPqycyekpUFUlHzCeIXLl+Uas4cP19+Oqo7x4+VAti/8XoEff5TL7rRSskuT2JG0nGPp62vV9dxaY09fzxkE2ofQ32vWNamq6SUXiMz8nSz9pcZSWeE6KJFlrYygoCAWLVqESqXCw8OjVmP274dxo0zY/hoFTy6q85xl5jLWx/6McPwEU46dxbZ9J4rTdjPgpInT7XSYNCr0Ke0RS+0wihqcCvpTaLWvYrxJNHE68xQv738BADuNHV9NXFNl3rpKUOFq40pGSUbFe+YuvwBPEOcxg348iFtionysgXy68MADD9T5niyBvb09I0eObJa5FRRuFCIiILS3CH+cgnnzah5QHeVRZZ06yZEftrYV0WXR0bbk5ckfXb4sR5jVp7zflgubyDfkIyHxQ/QaxraVO6WVZz5GmHrSHfBJSSG3gXUOLYEgCIwaVX19pKbE0bF2xcwVFBqT+fPnk5KSUqf6XMeOwTi3aAST3zUpSbUhOusMuxK2MfKnKLqaTKT5O9PmdBnBCXpOdrJHY/BEf7kjkklLcUI33LtHoTfrK8brjXpePfASR1MPAzC32z1MaFd1gwFPW0/+jlGQyXT7HY1mENHtb2NEcuUyHH379qVv3751vidLoDjJFBQsx7FjYDLBxJQv4f4GlKRJTJRrv7ZtKzvMtm2Dbt1ApSI6WnbKiSJcvCg7t65GlEQkSaoya0iURASEauupqlQwbhzs2x4kO8pOnWrYAWojU+4Eq+p+LhdFYzAXk66PR2/Kr7I8xT/xsu2Ip017YnL3klgYRTeXEZzLO0CxMYfcshREyUyW/hLjAh+28J0o1IQSWdYK8fLyqrWjzGyWDwZCvS/Lq1toaJ3ne+3AS/zv8NtkbPiWI5cPoLdW4xrUizZpsrHnauWJXdpo1LYFaCQbxPTgSuNtNXaVosgkAVyqORUVBIGPx36Gv/3fqTpW9oV4+BURcckDycWFgr/+QhTFKscrVI/JZOLcuXMUFta/G6eCgiURRTk9MtQvVe5gWV/D6OqosvJCGgEBFdFlx4/LhpiDA5SUyFFm5UiSxA/R3/HIjkV8c/qr654Chvn8Xa9ikN+Qiu8dHSEoCCLOO0JAAMPs7OjTp0+jFvNXUFCoOzqdjnbt2qGtZSplQYFcjzXUcKBe9lNc7nkWbrmLQ1s/JWnfRk7osmjn1RVBo2XgyUI0JhHPwhGgd0PneQnXooEU59lfJUHC084bg9mAJMkF/b3tvKvdcE7uMI17ghfIm9IrHejiik7QNdhEuBCGdPIkBVlZdb4PBSgsyyJLf7FWkSIKCk1NRAQ42pvpUHKyXmtVBTt3yrUx3Nzkw4Er0WWSJM9hbw9FRZUCzgD46+KfDPt+AEPW9GV97M+VdUs7xsgfBjPmx6FEZ52pdurQUIhJtKFY5UDpgQOsW7eOdevWUVxcXP/7aQQKyjLYdukjDqSuQZKu3Y+2deiFo9aTQPue2Gicai0315DKhYJjJBdHczZvP5eKTpBtSKqoL2tfRQMlhcZHcZbd4MTGyotaqBAl5yAFB9c4pqiskMPJBzmfI7fI3ZO0m45JejpdKiHZWSC9OI2wtsOwsrJl4MkiMhK1JF8W0DrkMqhjD9yyJyGa/g5aLDEV42vnxyOhTzDUfzjvj1xW4TwrKivi19hfSMxPqLi+vXMH1k5fz7SOtwAgImLyPczRY2YuurmRsmkTP/9ceSFWqJnt27ezdu1avvjiC8XYU2gRxMfLNlmo5qTszerZs15ypMNHSD+VwWWnYC4XOMovvRuXJT9if4jg9HEj7u5yQIW9vZyKmZQEf548y8hPb+OtbavZczqO93esYW3k1mrnGeA7iF9u+Z3Vk77n3pDKEa2hoRAeLn/jlZzM1KlTq2wMoqCg0HqIipK/hib9VusN6PmccxxOPkhRWSFHUw9jNhnpf6oAlQjnjck46hxp22MYbdLK6JZQwvGTImbJSHtfJzra9MUpb1CFLAGB+LzzvDjwFUa2Gc3tXecyM2j23/qlR7D1wh+YRTknSiWoeDTsSb6Y+A0u1vKh5OXCyzi3j+fAZU+EsjJ+fPllUlJSLPQbujnQmwrZm/I1h9N/4nJx9Zt9BYXmIiIC+gRkokK6pgFbrSmPKvP1lQ0mR0f5MHLbNlKTReLiwMMD7OxkO+rquIU3Di2l1KTHKBp55/B/MJj/TqP88ewPFBuLKDAUXONIu5rQUBBFgRPtZpCxZQvR0dFER0ezd+/e+t1PI5FvyMAklZFXlopJLLvmcyedF8P85hHiPq5WncnLcbByx07jilZljZdth4rGS+0dwxjgdRv9lUYnzYKShnmDExEhf+2TvQNCQip1X6qK1KIUFvxxF1n6TADuC3mQrs5d6H5qOyozlOjUhKeFk5ifSKKTicDUMjyi/Ek02GCl01OsjceU6Udg2ViS1FsACHbvjsFcxtb4LXjZeRPi0ativveOvsXm+I0465zZcfveikXFWmPNvO4L2Ry/EbNkxrdzClEbVFzq6U2vUyf4JS7uGt0Vrk95NJ7Z0oUGFBTqSXmEV4h1rHyK+Y9ujbWitJTsDXv5IGE6qUmBSFxlmIgi5OeT759LyGhPQDb0zpyBF1+EA5czyTPcXXG5oBJZE+vM7b0r6tleQ6BjmyrfDwmBLVuAUH9oYYadgoJC/YiIABtrka4FhyH0+RqvX3n8Ez4/8SkA7jYePNn3X3RKKqXTRT1pLlowGth4/jdsNDaYBIFeERK/6zujtssjqSgbH00ZNhnDsAo6QG5pDgBj20xgc9zvxGafY2K7yVhr5A53lwuSeGDrAiQkisoKmdXl9go9enr2YoDvIP648DsSEn1CRT7+zZVibPC6fJnExER8fZXOarVHuvKiykgSBYXmJiICZrnFyLmRLtV3nrwu5VFlV6ebX4kui3G6SH5+OwICZPvo4kVIuGjCyi0FH3sfVAiAAEgVUa3l9PEKZdfFHUhI9Paq/tAhOFjepka4j6fHhVeRBg4EuKaTd3PjZ98Vo1iKndYVrboBHUf/gValY6T/vUiShCAIjPS/D4O5BCcrrzo53RQsi+Isu8E5eVJOO3dJja5VkZ6vT6+qMNAAvji5kvXt3uCXcy78r6A7pVkqQP4jVqHCtriM0gxrNL7FCIIE2lKOp5xBs643gY4zCHAIJMVYyPSVF8komYlKa6C3+RzzxssRJDYaGwCsr3y9mjZObflq0hpOZ51EcJnEbd+pSPYawLCD+xkyYIBFfj83E+PHj6dNmzYEBAQoi65Ci6A8st5Ryq9/i/MjR3BPPsHt/ZxYc86NmEwPAp3ysbe6ctonFuNvPoVaHAZqLYKukDYdNGgFGxz0JRQX52AqdMRU5IpjhxieXtSzWkfZ9XB0vHI/1tbySayCgkKr5/x5CPIrQRNvrtGGytZnVTjKAHJLc4hMPcrD6RP5LCWIixmVN3xqUcAuwYSNizNlQYlo1VZcMoWTGGFCHbOIgb6DAYl//5FLTLYHAndxuW0Kx76Qgz40ai1qlRqTaMJae60N9cLAl+njHYa7jTviha58KMIZ++54lZbSpRZZBgp/Y6NxZLDPXZSaC/Gy6djc6igoVKKwUHZe9XI8BvVtopOYyL5fMojWz4YI+8qfpaSQlJaG1r0tgiDg6AiRZ7OY8NKPlGmycLNxZ5j/cv5I2IRZlJjYfiIpl3S0aycPv6PrnXRzC0aj0tLNvfq1pzwB6pQQgn1SUkU3zNCGpJU2AipBTXunxqunVr5Hs9E4YqNR6r02N4qz7AYnL0+OpKC0tFZRG3qTvlJxWEGUcNx9mIm++ewqyyE5tzdWaj12VrmYAYONAy4lZbRRp5IKnM2ORuehxay3Jzk/jYzCbEpNespyvVDr3AgIjWdsWLsK+U/1fZYh/sPo6tatSgdON/dgurkHE3FlU905bDRseJ/h/fs37BdzE6LVapVOdAotinKfkrWkl4vy10fAlVplvdvkEOBxgO9P9WDfxUCMogo/h0IEV2vIzoakJHYI50nIjwdgeMBIRnYYyNbwWMxaExPvhCfmzaStR/1SJ62twWgEs0aHuuzasHwFBYXWR0kJ2OuM8g812FClpspOcgkJx7MXGZBdyt42lzh/qQ95pT642lxGJZjRqK0QhTK6mZI5JZgwms0UahNR22jBrOF46ilKTSWYy3QYC9pg65vA7IneFfX5ve28WTvtF7L12fTxunbjZq2xZkanmQBEpMvvqV396NOjPYJT7evoKMjIXYMbt3OwgkJ9KC9F7CJmycVZ68POnVjp84kq7Mj5i2446gxYaa5kohj9EbJLCQjIAjzYHPcbFw0lmGPbA+0pBByT3OlgfhYAJx/hmkSmEM9etVLD2RkKi2wRSkvpFxZWfZi/gkIToTjLbnBKS8HGBigw/F34+jrM6DSTLRc2oRbUmCUzM0s74xSTiFWQM+M0y4lMmcyZjJEYzLa4215EJUg4msxY59qR7qrC09Ebo3UZWTo5jdNo1GLKb4OVaxrBo87w5wuvob6qSYpWrWWI/7Aa9bK5cmhaKpR/UyoXH1JQUKgVb731FuvXr+fs2bPY2NgwaNAg3nnnHTp3br6OZOWbPklnLRf4rytXd8AE3G1LWNz3GEFu2ayL7kp0lgdBrtmgguiD67jU1Q7U8qQHEiIJs+rKhB5hzJ0r9xZoSMBleRlAocxQ/yg5BQWFFkVpKVhrTPIPNdhQvvZ+9PcZyJHUQ6gFNYgi0xPsUIuFDO58jFKrYxxJmkl6UQfcbC9ho81ApZZwKTHjne9AqquKXl69OWCU07iNEkj57ohlNjh2P8BHTw9iZtjgSnO2dWpPW6f2ValTiQobSuuIYDBc/2IFBYVWRfnBo42pqH72x5VaZf272+GlOcA3J0I4nuaNh20x7rZXOvNmZECyRI6HipTiZLSOoHXMBWT7x9lmIDaCwOjRcNttcrR9fbCxgdICq79vrIWlYCrcfCju2nrw1ltv0bdvXxwcHPD09GTGjBmcO3euudWqElG8sgHUauWewjXQ2yuU1ZO+Z36Pe/lX3+d4Ji8UwWzG1tULLzsdAwJ+ZlT7L7HT5pJS0JUykw2FNiq89VbMcRrF5A5TsVLLBqWp0BlDWjts/GPxmbya5+4cQG5ZFkVlVXdjPJFxnLt+v41XD7yESaysa/nBgrnsyilHDbXX6osoiqSlpWGqxe9KQaE1sWfPHh5++GEOHz7Mjh07MBqNjBs3rlm7DJXbdKVqOzmEoy5U1QET0KhEJnSM41+DD9LGKY8LuU6cLruIQ4kZ7xxjxXUlaX706wfPPQd9+zbMUVaujpUVqEpLFGeZgkI1tCb7CUCtBrN0xQCpwS4QBIEPRn/Mv/q/wPwe9/J9m1fwi8+CwECCXDrj5xjN+E7/R1ePPeSV+pBT4odZJYCgYrypE3d1vgtPW7m2omRWU5rWHtGsxXXwRobeFsnYHj24XJhUZYMes2jmzUOvMXfjbCLSjl3zebnqGrOh0ewngMLCQvLy8hpNvoKCwrVULAmCcNUPdeCqDphtnfN4etAhbu0aQ16pDeezXRAlAZycIC2NguT4SkNFoxWlyR2xtRN56CFYuLD+jrJr7ufq6AoFhWZCcZbVg5a46ayOivI51tag19dqTDf3YB7q/Qi3lQWjOXW6otCjv2MAggDtXSOYGPQR7V2PkV7cAaOgwcbKDruLqahECRutDeYSJ4xFLjiH7cR74tc8NWE27rYeTPp5NFN/GU+OPvuaeVdE/R9nc2L4Pe5XotIjKn1WrrqNVPL3jTUCP/74IytXruTLL79UOkYq3FBs3bqV+fPnExwcTM+ePVm9ejWXLl0iIiKi5sGNRHm2QK5Le8jJgdzc2g8ujyoLCKjyY1+HQkqMWiQyEVVgUgv4p5ehNst/11prEyYTeHo29C5kcnOv3E9c3DU6xcfH8+677/Ldd99VNNqwNLt37+aNN95g48aNjSJfQcEStCb7CeQoB315d+9a2FBWaitu6zKHh3o+TIejcbKXyt4eFxtXQMDOKp9h7b5haJvvUKlMZOsDMDvao80rwCYjF61KdmSVprZD53EZ74lf49fvKN/N+I6ndz/OjPWT+OzE8mvmPZV1kvWxPxObe5ZPIj+65vMKG6qsAfUha+Dy5cssW7aMDz/8sEU7QBUU6kNLdvSXR47qNQ613utV8M8OmICt1sjcHqd4tP8RPO1KOJ3hgWhlDSYTHikF5b0uMJfaUJrWFtu2Z3nhWQ3DhjU8a1KvBxu1QdalER37Cgq1RXGW1YOWuOmsDlvbK7nsnp6kx0bwxJ9LOJi8v+aBogjbtlUYekClwv9O1hkEOEWjEsxYqVWkaoopTb8Mycn09uyDVgsqtQm7Didp6+HFrUGzuZifgCiJFJYVklN6rbOsvOaGvdaetk7tKn1WVCR/tclJBicnzCoVhkZIJUhMTAQgLS0No9F4/YsVFFox+fn5ALi6ulZ7jcFgoKCgoNLLkpSX0Dtu1U/+prZraDVRZVdzNsudrBJbSkyyMZupcSIvpz3uGfK/PT8vHfHxkJLSoFuo4Phx6NFDku/hH8VoT5w4gV6vJz4+nty6OATrwMGDBzGbzURFRTXK2qigYAlak/0EclO5jAJ5J/rZphd45/B/0BtrEQV78iScOFFx2JhX+vffvUoQ6eB2FK3KgEYwYVZBtiEH8fx5nDT2dHHrhqAS0bmmYeMXzxN9n0GtUhOfK3cBP58be810gQ6BOFrJ4Rx9qug2l5Fx5X6y48DTE71eb/EDwcuXL1ccBly6dMmishUUmpuW7Oi3s5O/5lt5QFZW3QZfFVVWTpm5jIT8eLq4RzMlKBaVcGWtcHLCNisfl0I5VFUya9HYFRA49C+6B1mmEH1+PthJRXJ4mtKMTKEFoNQsswA1bToNBkOlzYulN5zXo3Nn+PRTuDy1DU5/bGBfksCR1MPsmXMIrfo6BbX/YeiZRBPJhZcrPpYkSCnsh41GwiwZyTEayc1TIe7dTtnQjszuMZU/Dl4kUD+Zd0eMw97KgWkdb6HYWIyHrQcdXYKumfL+nosYGTgKD1tPnK0rtz0+fRo0GuhwcRfmXr348KOPKC4uZs6cOXTsaLnORBMnTuTgwYP06tULK+VEQ+EGRRRFHn/8cQYPHkz37t2rve6tt97i1VdfbTQ9AgLA3R0i0vyYam8vO5rGjKl54D9qlVXFyXRPREnAWiNwucAfo9maNjYXKbzYAdG6iGGDepJ4DqKjwc+v4fcSEQG3jimA3dnXOMv69u1LSkoK/v7+13VONoQ+ffpw5MgRunbtqqxdCq2G2jrtm8uG6t0b/vtfK9Kt3Ck+vJd1TtF42HqyMOT+6gdVcdiYmJ9Q6ZKMoiDMYhvsddGUmIzES1rU5y5ToF1Dt9DxaNsXcSlLx+1tXZnR6VYAlo3+mH2X93BL0OxrpnS1cWPDzD9IL06jUxX2VWQkuDmb8M+L47SVFb+8+y4BAQEsWLDAYt2xQ0JCiI+Px2g00rdvX4vIVFBoKWzdurXSz6tXr8bT05OIiAiGDbu29nJTrltOTuDvDyd0/Zgb9Y68SavN33UVUWUAm+M3klmSgVqlIadoKGpBQiVImLVqLudlEiAJ5DqA2rYQY64Xd/v+xyL3YTTCmTNwd5co6NnTIjJvJLJLkwBws646o0KhcVCcZQ2kNpvOxt5wXo/Q0CuLj+twxuv/R0CGkVx/h+sbR1UYegICgqBCkuRTwwKDJ8n5vug0qZhFNRnF7bHWlqDOsSYlMhPHwYlkmRIpDNfy4p7n+XHGOrRqLfd0X1DttIIg0Mm16mLjERHQvTtYHz9MwcSJFF5p/ZKYmGhRZ1mvXr3o1auXxeQpKLREHn74YU6fPs3+/dePMn3++ed58sknK34uKCggoJq0x/ogCPIaFR4hyLvS2kSX1CKqrMSoJTLVBzutkTzDYLTqKAYG/ERHx3BSzo3k5+wZpCY6otH87Z9ryH4xO1u2OUPtz8pv/MNZFhAQwJIlS+o/QS2YMGECY8aMQaNR/q0rtA5aitP+epT/Ke/0HkWXxO1ISOjUNTRL+sdhI4DBbICrOo0nF3SkqKwMR2sjRWUu5JX64E0GhTEeRLqdppBc0jOdWPXnfvq378awgBF09wihu0dItdM66Zxw0lXd5TI8HEL90hHyBU5dWSOSkpIwGo0Wc67b2tpy5513WkSWgkJLpyZHf1OvW6GhEJHQBTIz4fLlaktUVKI8quyqtUqSJLL0cnRaQakdUamuuNnqkSQ4kylyucwXdYoKH3cDPl0CMas6UnLRpboZ6kR0NBgMEJqxFUZdGyF7M5NdeplDaWsBGOg9Bzdr/2bW6OZBScNsIOWbzrVr11Z7zfPPP09+fn7FKykpqcn069kT1GqJHQW+AMwr7ckn4z5Ho7rOhqoaQ6/cUQaQUtgZvckRa42O1MLOeNglMq7LF0z2+Zb2RSKRx/WobYow5HiTkWzT4PuIiIDQYD1cuoTDiBEMGjSIrl270q9fvwbLVlC4mViyZAmbNm3ir7/+wt//+v9sdTodjo6OlV6WJjT0io8sLEyOGKspNaiGWmUA57LcyCi2I7fUmjCfbF4YcojOHgdQ6wwM8N7E/zofxN/LSEGBLCo9vWY9i8qKyDfkV/lZuY8vtHCPfELr41OzwEZAcZQptCZqYz9B89pQnoF52NiZiPWcTv8ULQ/3eYzbu86pfkAVh40gHziC7JE3mq1IzOuNtaaQjOJ2lBid6OPzO+NDPmOA1VHKzjuQna1CQqIkKajapkh1ISICQnWnoXNnhk2eTKdOnZg8ebIShaqgUA9q4+hv6nUrNBQiL7rJLvnaHDxWE1UmCAJ9vfuhVmkwi0MwmNxx1BmIzvRAq9bRt+2P9HfYgWOKB+76MDr4uXD2rOyjaygRESAIEr1TN19z6HizI1TzvULjo1jWDaB807l3797rbjp1Oh26GlqO14WUlBRKS0tp165djeHzRzP/wsrHj6/3J/KKtwsz8gPAvfoT3OoMPRuNDW2d2pOYfwFQkVbYF0nyxE7jz4wuRxnd/hhhPn0R9aX47HyTD7TzycvrgWjUMdb2yernqwWlpXIa5gODLwAghIUx1oLRZAoKNwOSJPHII4+wYcMGdu/eTbt27Woe1AQMHAhvvgknu91ByAcfwN69MHx41RfXIqoMIDrTA1utiRmdzzKj6zlstT7klc6R08C7uGCKOU1A73Xs7jCHqCiIiQFv7+p1TMxP4K5Nt2MSjXw+YTU9PCqnB2zfDm5uEh3/+AimTqnPr0FB4aaitvYTWNaGKisrIy4ujsDAQOyvsnGqY/GOhaj9XmR9thNLL2WxIHA2qGpfwqKcINfOxOaewyyayCvtht7oh07tRw+3XIYEbmZYmzICncZzQtiEkJfIT4YZmPUOaNL6M8ijFqnp1yE1VX6F2v0F/UPx8/Nj7ty5DZKpoHAzU5vofEvv/WoiLAxy81UkuPWlfUQEzJhx/QFVRJWV08urD728+vBpeBglRh3nst0I9sjg7pCT2OmsMeRcIjFpL+tKg0kucEMU5aiw6ky32hIRAV0CirG/VCzfUDPx559/cuTIEcLCwhg3blyz6XE1rtb+DPKee+V7C9QOUag1SmRZPZAkiSVLlrBhwwZ27drVpJvOjIwMPv/8c7799ltiYmJqvP5SwUVs25+i8GwYZ3r7ws8/X7/9eTWGniAIjG07nls734av3WBy9R3p421kcd/jvDQslSEBnbDW2FCmFfCwSeReu2W49t6Jj4eOsou96tzJ+GDyfjae34BJNHHggKxy34SfoF07aN++bsJaGdnZ2XzzzTd89913Sgt2BYvx8MMP89133/H999/j4OBAWloaaWlp6OvaOcnCjB8vO6o+jegLXbrA8ms7vVVQi6gygPYuuTzS7whzepzGVis36nC2dsHPwZ8Syvgr6zBRax9h4IQD3HPP9R1lALE55yg16TGJJs5kna70mV4PX30F8wefR5WaDIsX1+q+FRRuRprTfgL47bff+Pnnn1m9enWtrk8qvIRDl2OcTR1GkWQHP/1U/cXVHDYCeNl5M7fb3YxpO55cfU/stM5MDcrg1RER3BXiQKCTbHPleqq5RdjI0ODPcGx3nq72/YmLvY5zrgrySnNZG7OmoiHA+vVyhsHguNUwdmydZLU2JEkiLu8we1O+5kJBy2waodC6qUt0flPSt6/ciXJbwH2wceP1o/SriSq7mgKDjuNpXjhZlzKlUyz/GnyQzu7Z+DsE0KFNT0Y7H+fZjuvp01tEFCEqqmH6S5Lsv+tvdwY8PK5bk1aSJIs3KLla9oEDBzAajRw6dAiz2dwo89QHV2s/xVHWDCjOsnrQnJvOqxeH8q5D12N6p1sYOT0ZQ3pbLo79FJKSYNOmqi++jqEHssPM0cqJM1nncbE5xq3BqxnZLvHvLinINTNcOvema3Yhi4Nj+PKNPnh4CNRlrTmbHc2jOx/itYMv82PM96xcCV06mQjd8TY89FDD+xK3cLZu3UpiYiIXLlzgzz//bG51FG4QVqxYQX5+PiNGjMDHx6fi9eOPPzbanKIo1tgpSquFBx6Ab78TKFjwmLyzS0299sJaRpUBDAy4TKhvapU2oEk0keaiwS/TiC78CCNGQNeu17+P4YEjua3LHKZ1vIUpHaZV+uynnyAnBxZlvgGDBytFaRUUrkNzO+3LbajabrT+PWgpoVOjMJfZ8X3I2/DJJ9VvQqs5bCzHRmNDRkk6hYZsunp8yiP9juBlX3l97BkwAI2VNTMzo/nytXbMmuxa58PGV/a/yPtH3+beLXdjNJtYvhxmtD+Ft6sRbrutbsJaGfll6ZzN20dBWQbRObsoMubUPEhBoRY0t6O/JtzdYepU+DR/DtLJk3DoUPUXV9EB85+kF9nhalPKw32PsaD3cRx1/+iyHRhI24t7eGpiDHPmyE04rxeLURO7dkFsLCy8+Arcd1+1e73s7Gzef/99li1bVlE3zpIIgkBIiFwbMjg4GLVabfE5FFoXN7bXoZFojk1nOV5eXixYsIA2Y/35LO0TzmZHX/d6R50TPz3xKN26wbqDQ6B//+ojN2ow9AC0ai1j2wUyr9cuhgVeW0hWQiKhNJkywYzTXwfReB/g4YflTpa1RS2or9T3gMJsRzZsgMVddyOoBFhQfYOA1kJK8Tn2JH9FYkFklZ9rtX+fIis1iBQsRflJ3D9f8+fPb7Q5v/76a95//30OHjx43evuv1+O0PpOPQ+srOCLL669qJZRZTXhbuvBhM7T6d6mP90jUqCkpMYxOrWOf/V/gZcHv4a9lUOlz5Yvh/FDiuh46FslqqwWnDt3jnXr1pGSktLcqig0A81pPwFMmzaNSZMm4eHhwc6dO2t0mk1sP4Xf71vJ1CkqlhfejXTiRNWb0BoOG8vp4tqV6V1O8EBoCVr1tQeeWfpMEpxMeCXnc2zn68yfL0eM1AWtWq5DplFp2LdXTo9anPoSLFwINg2vIducmMQyjqWv51DaWkpNRdd8rhYq20wqlI2ugmVobkd/bVi8GE4mOHDQd3b1e71aRJUBdHTN4d/D9jK0zaVKQREVODpCaSm2e7cy53aRF16o217vnyxfDt19cxhSsh0efLDa6+Lj4ykpKaGgoICLFy/Wf8LrMGPGDJ577jlmzZrVKPIVWhfKTrweNFboZ20JDAzkpyM/kFGSjrPOhdeGvnnd6wVBXkAfewyS338Kvyduk933QVe1F6+loQfQx7v6PPIycxkFhnz0blrapJWRsWcTtKtbEnsn1858PvFrsvVZ7F89GisriXtOPAW33y4fnbRyzuXup9iUQ0zuXto69rnm80mTJmFtbY1KpWLUqFHNoKGCQsORJInk5GSAGgvb+vvD9Onw8Zc2PHDnPDQffigbS56e8gV1iCqrDX4O/tDFC86dg4MH5XaY9eDIETh6FH4b/Ims6623Nli3G53ffvsNvV5PcXEx8+bNa251FJqY5rafrK2t0Wq1nDt3jnPnzhEaGoqLS82d3BYvhgkTHDnkO4tBy5fDoEGVL6jFYSPI6eCTOkyt9vOM4nRMVmrMKiM++08iPWpAqOOat3TwG+wOGEkvrz48dZ+Gzt75jEzbCIvi6iSnJZKpTyBdHw9ASvFZ2jtVtkcdrNzp5T6JtJI4fO26YKutujuogkJdWbFiBQAjRoyo9P5XX33VqIeOdWHMGOjYEZY7vMqgn3shvv8eau9/NBy6Tq2yqxEEKspYVEtgIERFIcREY3udjsZVkVGczqb4jQzyG4y9vhu//Sbxfz6fIkydAm3aVDsuODiYc+fOodFoCLp6H2thGrvenCRJmCUjGpXSZKWlo0SWtVLm97iXzq5dmN7pllpdf/fd8j7z0/Rb5LDb11+vfEEtDb2asNZY0965I0atCkGjZeiZUigru+a6X2N/4fGdD3My43iVcnp59maI91g+/1zFXf1icbp48oaJ2gh0CEElqAl0qDpdy97enmnTpjFlyhRsbW2bWDsFBcsgCAKzZ8+mT58+jKmFM+rZZ2Xf1f+83/3bw1++sbZQVFkltFqwtZUPCWoRXfZPyspkf16PwDwmH3gBPvrIIo68G53OnTsDNKqRq6BwPTp27EibNm0ICQnB2dm5VmPGjoUOHeBt57eQfvxJDtcqpw6HjTXRybUzakFDqpuWwUVeCOHh11yTVZLJ83ueZtmx9zGJ1+Y92VvZM6XjdEpSA1i/XmKx+DHChAnyDbRyXK39sdO4oFPb4Wlbdf1af/tgwjyn42vXuYm1U7iRaY7o/LqiUsnVan46FUS86MmPDw8irTjt7wtqGVVWa65El7Ftm7wO1oGX97/A8qiPeHDbQv7vYxEbKzN3XX6rxr2enZ0dd999N3PmzMHa2roh2jcbJrGMfSlfs/XSh0Rlbmr2QySF66NElrVSbusyh9u6XKd9+T9wdJQX0PeXabjnlZV0en6WXLti6lSLGnoAo9uMpZ9Pf2w6qdBeTIJjx+RaPlcoNel549BSAPIMeayevKZKOa+/DhkZEo8VzIM775RTSG8AOjj1pYNTHfMqGoBer8doNOLo6NhkcyoogOwYKXeO1ES/fvDkk/Dyu/ZMfetbuj45US4INn26RaPKKhEQUO/osjffhNOnJY463Ir61ltu2FpAWfqLJBRE4G/fHR+7yg4uURRR1bGG5PTp05kyZYpSB0Sh2bC3t6/zBlelgrffhtmzO/KjzxLuWLBA3nRqNBY7bATwtPXkruB7MJjLcEhMhS1b5DxMq7+jD9bGrGFH4jYABvoNpr/vwGvkmM1y1Yq2Dtncl/sevH+gwbq1BHRqO0b639dk80mSRIkpD2uNwzUpngoKLZGFC+HfbxRwq/ZLjv06gd07v8Z7+rPyh7WMKqsTV6LLiI6GOkSXOVrJexIxtTsf/E/gX3YrcQjtBS2k+2RjkqFPoMCYCUBycQxdXIZho1H2aC0VJbLsJmLpUvDzgwWbZmKeMFkOi8jNva6hl12SxYbYdWyO30huae0KpQqCgKPOCa2dg2xIbtnyj+gyAasrYae+9r5VyggPh7fflnip3Rq62SbKURsKdSYtLY3//e9/fPDBB0Q1tFWNgkIdOZ9zjoPJ+2t9avbaa9C2LcxfOwHTrbfDww/LjjJLR5WVU8/osuPH4T//gReCfqGP+oRc9NsSp7QtkNM5O0nXx3Mye2ul93fv3s0bb7zBihUrKKljZJ7iKFNojcy6csa4pOQd0o9ehP/+t8bDxoPJ+1l39kci08JrvQ5aqXU4WDnINllsrHzgeBUGs1xoWy2oaedUdXTVhx/CoUMSq/JuxfbVZyE4uI53qwBwPGszfyV/wd7k1ZjFGlLSFBRaAM7OsPi1E5zMGMdHTgsZ/vK3YDRaPqqsnHpGl7065D+8OXgZBd+toJNDGi+Vvii3Fr/Bm7gBOFp5IFxxwWhUOs7nHSStpPWnyd+oKMckNxF2dvI6NHy4wEcvfccTh9rKhcyCg6s19DbG/4rRLDu6diZuZ3SbcTjqHNCoqm9lXmoq5WTGcazUVoQEdEZVbuxdiS4rKiukTJRltnO+1tAzGOQT0RD/HJ6LXQC/rgNXVwv8BloXer0etVqNlVX989kvXLiA6Up7mrNnz9K7d29LqaegcF3yDfncvXkOJtHIuyM+YFSbmiO3bGzkNWrIEHh39Be8sKedvEZ16CBvGhsDkwkKCuRUz5Eja7xcr4f586GrRxb/jpkLa78FL6/G0a0F4GHTniJjDu7Wf3f+MplM7NmzB4CMjAzOnDlD37pWIVdQaIV8/DEEB2t5qOMOfnkpDKFjx2oPG09nnuJ05kkActKycbByxMvOC0fd9etoJeYnkFx4mSDXzniUHzheFV1W7iwTEHCxvtY2io2FF1+UeNT5W4Z2KIFnnmnobbc6JEnCYC7GWtOwbInUkvMAFJtyKTLm4KS7cdd6hRuH95eM4OIBPf/ZvIK5p9vj+8474O1t+aiycuoRXWajteXYj6M5c1LikDgN3bJX5YJrNyBmycSZ7F2YJSPBrqOx17oy1PduLuRHcLn4NElFp7lUdIoBXrfhbvN3vTaDuZj0knhcrQOw19ZcW1OhcVCcZTcZQ4fCI4/AC+86M/GlVXR58VY5/ykwEBISrrneK0OPKJoB0KiyOZj0DU46ZzztvMguycJR50gX125o1H8/SmfSwsksSkFCwt4ti45ljpWMPXdbD94Y+jZxueeZ0/Wua+Z89VU4d9bMAe149LMmop0+vfF+IS2UpKQkVq9ejU6n4+GHH8bOzo6SkhLOnj2Lo6MjHTp0QKjFyVDXrl05cuQIJSUlhIVV35hBQcHSaFVa7LS25Bvya9wcXs3AgfDcc/Dvt+xp8/we7ny/N3h4yLkFjRmR5O1d4yVGoxxZEhtj4kDZWKyeevSGTb8sJ9h1JJ2cBqBV/V0bRK1W4+zsTF5eHgAeHh7NpJ2CQtPi4SF3bZs9uwefez3LA0uWQNeucpRqZmala62yL+Ob+3dUfXz2ds6JJoLde5BZkoGIRAenDnjYeVZcU1hWyOlLfwEQoTrJWJ8RqM+erXTg+EDPh7DV2BLm0w+tuvLBZXEx3HmnhLcqhTcKH0H66gDCTdhV+1jGejL0FwhyHkyQs9yMIUt/kRJTPp427WvtRGvvGEZc/mHcrANxsGr9DaYUbh5WfmJD8G64z3Mnv7/aE/W40XLgwZX/2xYnL0+OLuvWrVbRYZGR8OqrEv9yWEHfEBt5c3qDklmSwKWiEwA467xp5xiKo5UnKkGNgICEBAjkGlIqnGWSJHEw9QeKTbloBCtGByxCq1Lq4jYHN99/UAXefBO2b4eJn9/C/kn347flC2jXrkqPfgeXCey7vAdBEPCz9ycp/wLpajNnzIlITiBQTKrOjrFtx1eMSeEMyYVWgIC7pxMd/QaBg4McwXHlZHRC+8lV6vbFF/DWW/Cy9Ss4eJ5h6dxg/tcov4WWTWZmJqIootfrKSgoQKPRsHLlSgoKCgAYM2YMg6+qA1cdLi4uPP7440iSVOfaQgoKDcFWa8v6WzZTVFYod5+sA6+/DikpMO+dbtg+e4Bb3h0Iv/wCP/wg1y5rBoxGuOce2LbFzEZxGr3vC4P33ms16ZeSJLF27VoSEhKYMWMG3bp1q/VYK7VNpZ8FQSAoKIijR4+i0+kIaIwUWQWFFsqsWXIN6oc+fRVXTTyz4vbJjqx/RIG3b9eW03F6Mksy8LH35WJxKqKkJkUVj+ggAhInxChm+92Bq40bAMXFaSQZZDkCAuZuXVCrrSqtM+62Hjze9+lr9DIYYOZMiZjjpew2TWfHjFGEOTlxM/515hnSKn1NLIjkdM6fAOhUtgz3W3jNulYVXVyG0tl5MIKg2E8KrQtXVzlSf8qUIBY5fsdnO+9CmDyp8RoReXtDejoUFcmpmdchNhYmThDpqY3hFd3bsHr3DZ1+6aTzQquyQZRMuOr+toc9bdtfcaLJ6/vVUWUAerO85zNJZRjNpYqzrJlQnGU3IXZ2srNsyBCBsQkr2TVVwPuXVTBzZqUoiWXH3ue76JM49m/D5lk7UKnUSBd38N2ZbziXE1NxnYu1mrG3v1Txc4/8O9l65G0cdY7MGfAS1DKq5Icf4IEHJBbbfc1j7p9z9zOduKfL+JoHNjKSJHHs2DH0ej2DBg1Cq60+BdVShISEUFxcjL29PT4+Ply4cKHCUQZw8uTJWjnLQN7Y1iYKTUHB0jjpnHCqQ1RZOSoVfP65nPI4+50wVj16lHtWDIIpU2DtWnBv2hP+0lK4/TaJLX+I/GC+jQmL2rS6OmXFxcXEXkllPXHiRJ2cZVVR3oVKrVZz5swZYmJi8PT0ZNiwYUpNMoUbnv/7P8jLE5j707cIGXdz65498Pvv4CSvd3mledyyfhKF7SQe7PUK03o+xNnsGPYm/cVnJ1ZUkuU1cCgzgm6Vv5cktCdDOJC8j9u7zMWq/aRa6aPXw223Sez508QW8yQKZwSQPHo0E5p4rayKrKwsIiIi6NKlC23atKl5gAXo6zmDtJI42lzpOn656O/upQaxhBxDMt62tUv5UhxlCq2VCRNg1SqBefNmYeNmYNn+p1Bt+KXxahhaWcl1YK9DXByMGSXiVnSRLdpp6HZsgvZV1168UbDRODI24CEkSUKt+tv1Yq22x9u2E9Zqe/zsu+Gi+7uOtyAI9HKfTEJBBD62Qdhq625LK1gGxVl2kxIQADt2wMiRAkOjP2XnZGva3HGHnEaweDEIAmtj5C6VBWUFHEo5wKg2Y5nYfgonM45zPvccoiSiFtQEuVTudtfWqT2fjPusTvp89hksWiRxt9WP/F/b/6HacZzNPj4Wu9+GkJCQwJYtWwDQ6XQMGDCg0efUaDQMHTq04mc3NzdUKlVFgWCfFvK7UVBoLDQaWLNGDkqd90FvTt4Wy+vb+2MTHAyffgq33NIkepw9C/PuKOXUKdgozqDHI17w4fJW5SgDud16v379uHDhgkXWsOHDh+Pn54coivz444+AXBdREARGjBjRYPkKCi0ZlQpWrwZRVHHbT9+xMvwx7hs1Cn77Dfz9WXduLYXGQgB+Ofcz9/d8iC5uXXG2dmHVyc8xS+YrqTfQweVvp40gCNzX80Hu6/lgrXXJy4MZ00SOHjTym3kaIz+aCY88Qs0VGJuGX3/9leTkZCIjI3nuueea5PDOxdoPF2u/ip+drLzIK0sDJAQE7LVuja6DgkJL4J575P5FDz10J0Wudnw2ZQaaLb9DE+xl/smpUzB2tBmngiR2WE/BffsPEBLS5HrUFpPJhFqttsiapRLU5QFkFURlbqLYlIuLzpfuumvr+vradcbXrnYd5RUaD+W45CYmKAj27wdRFBhwZBmbp6yAJUvk6I3kZPwc5OB9taAm2K1HxbgloU8wOnAszjoXQr37snTIG/XWobgYHnvYxIMPwmJpOV/1+RjV3t3QgpxBDg4OFSmMzs7OzaKDk5MTd999N926dWPAgAFMmlS702YFhdaMWi070t97Dz7+LYDebpc4FDRPjoKdMweyshptbrMZ3n1HpFcPE3knL7HV/RZ+/dc5podGcrHgYqPN21gIgsDEiRN5+OGHadeuXc0DakClUhEUFHRNJ8z09PQGy1ZQaA1otfDdd/DAAwL36z/i9phXyOw2HL76ik7OQRXX9fXuV/G9t50374z4H372fnjaevL8gJfo4dGz3jps2QLdg8o4fqCIHcJ4xn99Z4ur/eN6pUGTs7Nzs0W5d3MdQQenfvjYdqaf161KsWyFFktJSQmlpaUWlblokbxWfZM/nZHiTuKGLoA33pDrSzQBkiTbcoP6GfHNPcM+xyn47f9RrpndQjl37hxvvfUWy5cvp6ysrOYB9aA8ksxF51fDlQrNiSDVtpe1gsUoKCjAycmJ/Px8HGvI624K0tLk7pNbt8K80Ul8cGY8LvoUit99nW3DvQjx7EVHl6CaBdWRfftgwdxSkpPhLdW/eex1d4RnnpZDSloYubm5lJWV4XUDd72DlvdsKrQsmvP5OHtWXqeOHJF4cmIMrx4ch52VUe70tmABuFkuUuDMCRP33lbA0VhnnuK/vPZAMonP38m8vfdjo7Fm/S2bcLNpvPSmwsJCBEHAvooOxS2N/Px8Pv300wrjfvbs2XTr1o2ysjJ2796NKIqMHDkSXR3qpCjrkML1aGnPhyTJ2eFLHhZR64tYUbqAWyeVEvHqA6S5qBjXdsI1hfgbSl4ePPW4iVVfaxjHdj4P+T8Cv3+78dKrGoDZbCY5ORkvL686rQOtjZb2XCq0LGrzfKSkpPDll1+iVqt56KGHcHGxrFN33z6YP08iNcnIW+ZneaTXPlSrVzVqdNfFi3DfvDJ27rHifj7j/cm7cfzif5WaKh0/fpxdu3YxdOjQFtNZ+/fffycyMhKARYsWNcr+T5IkysQSdGo7i8lU1iHLo0SWKeDtDX/8AatWwYZjAXQXTrOxz1JsH3yUmQ9/RsfD8SCKFpuvsBAeuzOL4cNEvC5HcKL7XTx+YgHC889ZzFEmSRInTpwgKioKS/iDXVxcbnhHmYJCS6ZLFzkS9p13BD7+sxt+4iUed/2Gcy98DX5+MH++3DGunpjN8Pu3uUwIiqd7Lw25sZkc6PYA7/0Zis3KZXRt25c/Zu3g91u3NaqjLC0tjWXLlrFs2TKyGjFyzlI4OTmxaNEipk2bxn333VdRC+3QoUMcOnSIo0ePsm/fvmbWUkGh8RAEOdA1OkbFkImOzOIXZu1ajDDyf0xeE4U2w3J/x3o9fPWpge7ti1n3rZ4v1A+y9c1IAiM2WNRRlpuby759+8jJyWmwLLVaTWBg4A3tKFNQsATlzb2MRqNF/vb+ydChcPKUwH0PWfG49AHDz63kROhCeOklyMiw6FylpfDJB2V072zk3L4MtjncymffO+D4+5pruo9HRkZSWFhIeHi4RXVoCAMHDqRdu3YMGDAAT0/PmgfUA0EQqnSUZekvcTT9F05mbafMbNkoQ4W6ozjLFADZ2FuwAM6cgZCeKqb/9TghbfJZcW4UhZNug06d5FyoBmzezkSVsWRcLH4uxXz2vR3/dXiVve8cJihyrcVPQxMSEvj111/ZuHEjcXFxFpWtoKDQPKjVciDZuXPw0GIVa7LG08V4ijH+Z/lxsz0p/aZD9+5w331yXbNjx2SLrSokCdPZOE69t5W3hm2hvV060+5xIScul6+GruLEgWIGnvkCRo2qGOJu64FjPRoW1IWCggJEUcRsNlNYWNioc1kKJycnevfujZ/f36kE5Y1QJElqkqYoCgrNjZfX3017j7pNJLRoDwNencA3/i9QeuudsHu3HIZWD+Lj4el7c/BzKWHhQzrCcndwevgS7j3xqEUPGstZv349u3btYt26dRaVq6CgUD3du3dnxIgRjB07lvaNVPTezg4++khejlK8+tDLFM7Q/0zgB9+nMNwxDw4cqPc6BZCQAM8+mIu/azFLnrTiDsNqTk19kXGxn8inClWkYo8aNYrOnTszduzYBtyZZXF3d+eee+5h/PjxTZo+XmYu4Wj6OjL0F7hUdJIzV7r4KjQfShpmM9DSQyQlCXbuhBUr4LffJGytRe7x/4vbLrxNb9UJHAf3gNBQCAuTv3boUOXiJ6Wlc3FLNAc25/H57k7sye6OF2nc12YnDz7nQsC94+SiH41AZmYmK1euRJIkHnjgASUqrJa09GdToXlpac+HwQDr1smNKQ8dkt/ztskjVHOS0KI9BEunsFOVYu3lhFlnS6nGniyDA5GFnYgo7MQJc3f02GItlDIn4AAPzcqk77/Hg4VTH+qCJEkcP34clUpFSEhIq+1kazabCQ8PJz09neLiYry8vBg+fHitOmW2tOdMoWXRGp4Pkwk2b4blHxnZvkuLmzqXaeYNhLpdJDQMeo50w2ZgL+jdW+5ichWSBCkXjUT8mkTErjwORNryZ3IXXMlmofUPPHh3CR2fm9WoHeQ2bNjAyZMnCQ4OZtasWY02z41Ea3guFZqPlvh8GI1yT5LlHxr5a78WT3UW881fMqxtEqHT/fEe3lne5wUEVNvUyGiE6EP5RGxM5pdNOraca4cjBSzQ/cCiuQV0fuFW6Fi7zrMKUFCWyd6U1RU/O1l5M9T37tqPb4HPWWtHcZY1A63pQU5Kgs8/lwszpqeDIEgE2aUQKh4jtGQvPqRibaNC62BNqcaeEmyJKQkkorgrEcYe5CDXERrmfJLFw89wy9KeWPXq1iS6FxUVIUkSDv8wRBWqpzU9mwpNT0t+Pi5dgogICA+Xv0ZESGRlXWvcCYgEuWQRGphJaD81oZO96TPK+Z/7VQULkJWVxfLly5EkCUEQGDp0KCNH1tyjryU/ZwrNT2t7PmJjYeWnEn/9XsTpCzYYRQ1qTHQjWrahrEGrligVbCg2W3PW0I40UU77cSeTMLuz3N4zhtsX2mNz50ywtm50nUVRJCsrC3d394oGRwrXp7U9lwpNS32ej507dxIXF8eMGTPw/kfqoqWJjoZPV0h8/42R7AIrAHxJJpQIgm0SsPNzwsZeg0ljjd5sRUaRLZFZAZzIa0OpZI2ASKgqikWddjHnCW9s75kFNjaNqnNVFBQUEB4eTqdOnQgICGjy+RuKJIkcTv+J7NIkAHq7T8bPvvb7ZmUdsjyKs6wZaI0PsskEMTHlm1D5dfy4hF5/7WbUzyGfUN80QnsaCR3nRugkb7x9Wmd0xM1Ga3w2FZqO1vR8SJJcBFuvlzMxjaKeH85/QZCPL3N73drc6t0UxMbG8sMPPwBybY5u3brVKkqlNT1nCk1Pa34+DAY4dQoijpqJ+iuP7MQCSvPLMJrARjBgbWWmg1s+oZ2LCJ3kRcD4bgj2liv+rNB4tObnUqHxqevzIUkSr7/+OpIkMWTIEEaPHt0EWsq2U2IiRIRLROwpIuKAntgELfpSAb1JiwYzNqpSXLTF9HZOIDSogNChdvSa3gaH3h2hmZ3r69at48yZM1hbW/Pss882qy71RZTM5BlSsVLb1blzr7IOWZ6W13ZQoUWi0UCPHvJr/nz5PVEUKC2VN6NGo3zYaWMDOp0T0Lh1fRQUFBSuhyDI2ZTlGZVbL/zF5ozP2ZQhcUvwRGy0ts2r4E1AmzZtcHV1JScnB0EQ6N27d3OrpKDQrOh0cgWLsDA1LHYDLNfFV0FB4cZBEAQmTZrEhQsXCA0NbcJ5oV07aNdOYNZsB6CqsPtyJ0y7JtOrtnh7e3PmzJlWXX5HJahxtfZvbjUUrqA4yxTqjUoFtrbyS0FBQaEl08+nP319+tPBuaPiKGsiyrt5BgYGMnr0aAIDA5tZIwUFBQUFhdZBWFgYYWFhza1Gq2LIkCH06NFDKcGjYDGUQgQKjUpJSQmHDx8mMzOzuVVRUFC4iXG1cWP5uM95ql/1YflZWVmcOnUKs9nchJo1HKPRSEZGBi2tqkJMTAw5OTlcunSJ9evXN7c6Cgqtjri4OKKiohBFsblVUVBQUGgVODk5KbUWFSyGElnWijGbzWzZsgWVSsWECRNa5MKwdetWTp06hYODA08++WRzq6OgoKBQJWazmc8//5yysjKysrJqVYi+JWAymVixYgW5ubmEhoYyZcqU5lapgn79+nHp0iWSkpKwaYZCvwoK16N0334KP/scx4cfQjdgQHOrcw3Z2dmsWbMGkFOyevXq1bwKKSgoKCgo3GQozrJWTGpqKhEREQD06dOn0Tul1Ify4oJOTq2jhll6ejoFBQV07NgRoZo2yQoKCjcmWq2WsrIyrKysmluVWlNcXExubi4AiYmJzavMP3B0dGThwoVkZWW1mv8BCjcPhSs+xbBnD4VabYt0lul0OqysrCgrK2sVKUVGo5G4uDh8fHxwdnZubnUUFBQUWh2SJJJjSMbRyhOtStfc6iigOMtaNT4+PoSFhaFSqfD09GySOfdc+ostFzbxYK+HaefcvsbrR48eTffu3XFza/lFbNPT01m5ciWSJDFixAiGDx/e3Co1mKKiIo4cOYJGo2HAgAHodMrCezOzd+9e3nvvPSIiIkhNTWXDhg3MmDGjudVqEajVahYtWkR2dnaDamtlJRYRsS6BiL/ySUwAvUGFwSigUUnY6My4OZroHaYmdIoPHce1R6VVN0hvJycnhg8fTmxsbI3RcHl5eezatYv27ds3aZSKu7t7k82loFBbHJY8jGBlhcNDDzbJfGVlZWzbtg1nZ2eGDh1a4/X29vY8+uijGAwGXF1dm0DDhvHrr78SHR2NTqfj8ccfx9raurlVajApxefILU3Gy7YD7jZtmlsdBQUFC1FQUMDBgwfx8vJqUc2HYvMOcT7/IDZqJwZ6346tVjlobG4UZ1k9aCkbTrVazeTJk5t0zk8iP+RCfjyuNm78q/8LNV4vCILFIt5Es0Ts7hQiNiYTfqiMcxet0ZdpKDVpUAki1hoTztYGenYqIXSoLaEz2+Dd20du7VILCgsLK2r+5OXlWUTn5kSSJL7++muys7MBSE5OZu7cuc2slUJzUlxcTM+ePVm4cCEzZ85sbnVaHPb29tjb29dpTGmxmXUvn2TDz0bCU/24ZPIDeuBEHp1skrHVlmGlFjFLAqUmLSkXXHgv3B8+BUfy6eMYz4ge2dz7Zgf8h9V8AFEVI0aMYMSIETVeFx4ezqlTp4iOjlZSuhSajZZiQ1kPGoj1oIFNNl98fDxRUVFIkkRoaCi2teiOZGdnh52dnUXmL8kq4cT6eCJ25BBxXEVqrg2lJg1lZjVWajM2WiN+rqWE9pEIHedGyC0dsHauvcOr3G4yGAwYDIZW7yxLLT5HZOZGQCChMIIhPnfhrPNpbrUUmomWsm7dDEiixOVjqYSvv0RMVClFRVBqkLdzNtbg4AAhA+0IvbUtnsEe9Zpj69atxMTEAHIHTR+flvG3rRLkkkp6cz4RmRsZ6nt3M2ukoDjL6sHNvOG8t+eDbDy/gemdmua+i/OM/PD8Cb77yYqInPYU4Qf40V6dSHe3VFyd9OisJERJoLRMRWaRLcv2dSF3rwv8B3xVqQz1ieOBRWpGPtcfQVN9FEeHDh0YNWoUeXl5tdp4tnTKay+Vk5SU1IzaKLQEJk6cyMSJE5tbjRuChPBsVj4dy5f7gsgSezPYNorbuscQ2v88YVN9aD+2Ayqr4CrHZicUEPHzBSJ2FxB+Ssf7Bwby+nBrpnvu46HFKka/0B9Ba/l/z8HBwZw/f56goCCLy1ZQqC03qw3Vrl07unbtirOzc5PV8EvYm8Snz8Tzxwk/og3tEemBljJCbONo65KPh1UpVhoJg1GFvkxNRJIHX8d2wLRWi2ahkWDrc0wNS+WB/3YmoN/1N5PTpk3j0KFDtG3b9oZIu841pAACcOUQ1ZCmOMtuYm7Wdau2xMbGcvLkSQYOHIifn1+dx8fvusi3ryVw5IwdEdltyZR8AV9chRyc1EXoVEYA9GYduWYHCrY6wSvgr04h1COJQb313PN2N7xDapdpVX5YoVKpWlTWTUenARjMxSQWRuFo1TRZYwrXR5BaWvusVoYgCDWeLpSfspVTUFBAQEAA+fn5FTW9FCpzbm86K/6VwOqjXSmQHJjgfIQRYUWEjrCnz8x2uHStPlpNEiUSD6cR8VsSEftL+S3Sn5jS9nTRxLF4wgXu+aA3Th3rdxKRm5vLmjVrcHV15Y477miRTRXKkSSJb775pqKOUZ8+fZg6dep1xxQUFODk5KQ8mzcBytpVPxIicnh85kV+v9QTJ/JZ0O0oi171IWhWSL1lFmSU8t0zJ1j+sztn9B0I0sTz1r3xzFwxttaRsTcSyjp086CsQ5bHXGZm21uRfPIJbMkMxUko4NZOp+jfXyJ0vAfdp3fAyr76uoyleaWc+u0CEduyOHJM4Je4nhRjx3SfYyx+3IpRT/VGpa7fuvTXX38RFRXFtGnT6NixY31vsUnILk3iUNqPgIRK0DDMdx722urTYZV16+ahNuvWP7nRn4///ve/FBUV0a5dO+65555ajTGXmdnyRgTLPxXYmhmKI4UM8TxHaJcSQofYEHpLIL59vBFUldcbSZRI2JtExMZkIg4aiDjvwIGcrpjQcGtgOIufsWPI4pBrxl2NyWQiOjoaDw+PKqPKJEmiuLi4ztkGlqLMXIpWpatz/ewb/TlrFiSFBgFIGzZsuO41r7zyioR8NFXplZ+f3zRKtiIuR+dL09pESSBJ7mRKz/XeIiX8Ed0gmaIoSX99elaa3faopKFMsqVIerX/Zqkst6jOsiIjI6WlS5dKS5culQoKChqkV1NQVlYmHT9+XDp9+rRkNptrvD4/P195Nm8SlLWrbpjNkvTx/VGSnVAktVFdlL6YtUUqvpRl0TlEUZL2fH5OmuQrr4F3eO2SMiMvWXSO1oCyDt08KOuQZdny+jGpgyZRAknqYxMtfTl/r1ScWdwgmQXJBdLyO/ZI3XWxEkhSV6s4afeyqHrJ+u9//ystXbpU2rhxY4N0airyStOkxIIoqbAsp8ZrlXXr5qE261ZpaamUn59f8UpKSrqhn49t27ZJr7/+unT06NEarzUbzdKKOXukNuokCSQpzPaM9NW9+6SS7JJ6z59zIVdadstuKUh7QQJJ6q6LldY9fbDe8n766Sdp6dKl0qFDh+otozlQ1iHLozjLGoiyYFoGUZSkVY+fkJyEPMlHSJG+nvOHVJqeZ/F5kk/nSM8MPSSpMUq9rE5Lx784VqfxBoNB2rp1q3TkyBGL69YSUBbZmwdl7ao9FyJypBGepyWQpIfa/iEVnE9r1PlEUZK+e/aE5KLKlTyFdOmXB7fJb94kKOvQzYOyDlmGvMRcaWGnvRJI0hjXcOnwF6ck0WzZNUM0i9Le/zsuDXE8LoEkLQnZLRWl1+3Q8fz589LGjRulnJyanU+tDWXdunm4mZz8BQUF0pkzZySTyWQRefF/XZRGOEdKIEl3tt0vHV19xiJyyxHNorTz3QhposdRCSTptoADUkZ0Zp3lrFixQlq6dKm0adMmi+rX2CjrkOVpuTlkNxA6nQ5HR8dKL4W/SY7OZ0rgSRYuC2G691HOnDBxz/cT0XlavuaFb7AL7+4dwOH1qZg0NoTd15PX+m/GmFdcq/FWVlaMHz+efv36WVw3BYWWhrJ2wR//F0+PMCsSshz48/mdLL8wAYeOXo06pyDAnW+HEB2jYmBgMreuHMfi9lsxF+kbdV4FhZaIsg5dny2vHaN7hxJ+Pt+Tz+7ey/bMPvS/t/t1U5Dqg6ASGLqkJ3uye7Dslj18ebIvIX5Z7F52vNYyOnbsyNSpU3FxcbGobgoKLY3nn3+e/Pz8ildrrRu8Zs0a1q1bx4EDBxokRzSJfHLbHkJGupJQ6MHOdyP5LmEwfed1s5CmMoJKYPQzfdicFsb3Sw6y83IXgoMlfnnmUJ3k3HHHHUyZMoXRo0dbVD+F1ofiLFNoViI2pdKrh5moZA9+X7KNr5PH4NIjoNHnDbslgPCstjw7NorXjo5nvP8ZCuPSG31eBQWF1sPapWeZ/mggY5zCOXXWilFvjmnSGmLeQY5sSOjNysUnWJk4jrvaH8SYXdBk8ysoKLRcJFHizXG7mfRKX7o6pXL6YCH3fzPM4k6yf6LSqHhs/XBO7szEzzaPkU/04v9m723UORUUWhs3ipPf3d0dSZJwda2+Xl9NFKUVMdkngiU/D+fubpGcuuTE6Gf6WFDLaxFUAnP+bxDRJ0wM8Y5n1vsDua/zPkylplqNd3Z2JjQ0tNV39VVoOIqzTKHZ2PvdJUZOs6eD9iKnjpYy5f/GN8pG9FRyPm/+EUN0auVNps5GxRvb+7FrdRIRJV0Y0z2VnOOXLD5/U2AwGDCbzc2thkILp6ioiOPHj3P8+HEAEhISOH78OJcutc7nvjH56fVzzH01iDlef7HuQh8cOlXfVKQxEQR44JOe/PR6LL9kDuXOzuGYC0uaRRcFBYWWgSRKPDtgDy/uGMErw3ezLbMPgQPr3oGuJoxmkc/2xvPF/guYxcr9wDqObsPu7B48GbqbR9cN440xuy0+f1MgSRJl5tLmVkNBoUVy66238uyzz9K9e/d6jc9NyGNspwT2Z3Vh6xvhrDgzDAdfBwtrWT1ePTz55XJ/vpy/j9WxA7m9QziGAkPNAxUUrmD53vQ3AUVFRcTFxVX8XL7hdHV1JTAwsBk1az0c2ZDCpHvc6G9zit+Ot8G+U+O14164+hiZRQb+OJXK/mdHXfP5sHnt+MsthXHTA5k44BI7T1k128a4PiQnJ/PVV1/h6OjIww8/jEqlqnP3FIWbg/DwcEaOHFnx85NPPgnAvHnzWL16dZPoYDabSUtLw8fHp8V2k9264gJ3vdyOOz13sjpuCCp72+ZWiVv/3ZUfNeeY/fwwFnXdwWfxoxF01Xe0U1BoqSg2VMP599A9vHdsBMtu2cNj60c02jzrIy/z5pazALjb6ZjRu7JDTqVR8f7R4TiP3c1Lf47AatJu/vVH4+nTGIRnbCBdH09P94n42wUDKDaUwjXcrOuWIAj1jq4quFzAuO4pJOh9+evrJMLuCbOwdrVDUAks/GooHv5Hmf1GL27rfJx18X3Q2mqbRR+F1kXL3Km0cMLDw+nduze9e/cG5A1n7969efnll5tZMyg7E01KjxCy5s1HkqSaBzQDMfuzmTjLll66GDaeatdgR1lWkYGzaQXV3q+Hg67S16roM8WX7RsNnC1rz4zeiRgz8xqkU1OSm5uL2WwmPz+fo0eP8sYbb7Br167mVkuhBTJixAgkubFLpVdTOcoANm3axBdffMH27dubbM66kByn544l7oxzPMyqM/1bhKOsnFue68yqf53ji+SJrLp1c3Oro6BQL1qyDZXz1NMkd+lG6cG61bdpSj6YsZs3D47g/Sm7eWz98AbJMosS0akF5BaXVfn51XaTezU2lKASeOnPEbw0dDfPbhnBF/P2NUinpqbQmA1AQVkGu5O/ZOflFehNSrq7QmVa8rrVEtHn6JnW/QLnS/zY+UMWYfdYtjZZfZj6ej82vHqKP9L6sLD7EUST2NwqKbQClMiyelC+4WyJlEVFIebkUrpnL5hMoG1ZXnNjmcSdU/LxFoxsOuKJXfuGFco+kpDNXV8ewWiWmN7Tlw/v6H3NNT/cP4AjCdkMaO92XVl9JvuwcfVFRs8L4+3xv/NS5C0N0q2pCA6WT0KdnZ05ePAgoigSFxfHqFHXRtEpKDQ35dFkLTGqTJLgwbEXsBFd+WaHL1p3yzcZaSj3vBPM7h3HeXLzKMZtOkHAlJ7NrZKCQp1oyTZU6Y6dSIWFlB09ivWggc2tzjVEronhmd+G8Ezf3Tz1+4gGyZIkiXu/Psbu2ExstGp+fnAg3f0qr3mjunjxy6JBqFUCvQKcryvv1d3DSQ/ey5Jv+jHk9gt0mdS+Qfo1Ff29ZpFdehlHrQcJBREAFJZlY6NpnTWmFBqHlrxuAYj5+ZTu2oX1iBGoWkADjRfGHOVIfj92Lj9Pr9tDmludCia+3Jc1OQe5/cMh9J+zhyU/N+zAQeHGR3GWtUIks5mSdetQe3pifVVKFYDdrFuRiorQduuG0ABHmSiKjbKZfeeuU5zM78bht/fgHNLwDiO/RF6uqKPx24kU/nNLD+x1lR9rJxst47rVLq1y+D1tePbH47z+x2Smf7KPkIeHNljHxkYQhIpaAuPGjcPd3b3etQUUFBqbyZMn07dvXzw9PZtblWv45sVzbE4M5rcFv+Lab0Zzq1Mt/9sWzHa/HO6fU8iWTAOCdfVRswoKCpUxnj9P6e492N46E/U/ila7rfoSw+HD2M+fV2/55RG7lrahyorKmH+fmh42cfxn9+AGy0vNL2V3bCYABpOZX48nX+MsAwhtU7uNt6AS+GBfGH/5prLw9mL2ZZtRW6kbrGdjY6d1wU4r32NPt4mYJAMeNm2bVykFhTqS+/Ir6H9Zj82Uybh9uqJZddn38Qk+jBrK+9P2MvihEc2qS1XctmwQu3fu5dl1YUzafYn2I27cNFqFhtPyjvYVaqRkw6/kPvk0WXfdgykhodJngrU1DosexHpY/Z085al83377rUVPUU7+lc1rP3fh2a4bCXvWMq14Q/ydESUQgLZutthqG26YvfxLTzrbJzP/CedWlY4JcnTZqFGjWqQjQkEB5Igyb2/vFhdZlhyn57F3fLjLYyvTPp9qUdl6PViy/4azh5bPl5WwrWgIq2b9YTnBCgo3AVl33k3+0lfJe2XpNZ/pwkJxXPIwKnv7esnW6/V8/PHHvPXWW1y4cKGBmlbm9YkHiSltx+rVgkVq7bjZW+HpoEMARAl61hA5Vhts3W356sNCDhcF88HM1pWOCRDg0J12jqFKzTKFVoe2UyeQJLRBQc2qR0lWCQufdGKgw2ke+7nlBhy8u6M3nuocFs7IUdIxFa5Ly9qtKNQKjZ8vCAKCgwNCI7QiPnHiBJIkceHCBYqLiy0i02iEBTPzCFLH8/J2yy2ed/YL5KVhfbmvV3d+enAgKgu0TNdZC6xea8NJY1feHq/U/lJQuBl46fZYrMUSPtzUEdSWi4aQJPjkE/jzT4uJBGDi4nbM73WcZzYPp+RckmWFKyjcwKgDAwDQNEJR7uTkZHJycjCZTERHR1tMbuSaGN7aP4SXRh6g522dLSJTp1Gz7oHB3OrXi0/nhDE1xNcicgc/FMITffby780DOPuHZR2GCgoKVeO45GF8Y8/i+OQTzarHi+OOcdnoxVc/O1g0sjQ7G/LyLCYOex8Hvnwniz35vVg+p/U59hWaDsVZ1grRDRyI95HD+Bw6gNrt+nW46sOQIUNwcnKiX79+2NnZWUTm+vfiiczrwJcvX0Ln72ERmTICWSc90V5sg4d9/bq1VEXoZG+eHHOKd6LGkR8RV/MABQWFVkt2uokfojrzeNgBXPt1tKjslBQ4cwYOH5YdZ5bkpW86kYcza586ZlnBCgo3MB7fr8Frz184Pv2UxWW3adOGTp064ebmRmhoqMXkvvJkIZ11iTy/qeHpl1eTl2KDKc4PP6Fh9WP/yevb+uGjzuSNh1MtKldBQaF6VBbas9WXuD8v8mHUUF6ffISg8e0sKvvrr2HdOouKZNRTvVnUbS8vrOtNYUqhZYUr3DAozrJWisbPt9EKOHbt2pXHH3+ciRMnWiwUffn/mRimO0z/F8dYRF45GRkQGwvnzsnfW5LHV3alFGu+feakZQUrKCi0KFY/dxZRElj4VieLy46Olk9EL1yA5GTLym7fw46JbWL4ZFsHJEPV3ewUFBQqI1hZoe3YsVFS7bRaLXPnzmXJkiX4+DSs03c5ifsvszkjjCduT7VI+uXVnDkj20+nT1tULLbutiyZGM/PiWFknMm0rHAFBYUWyafPJuAi5PHwN/0tKjcrS7aloqLAQglPFbywqiPF2LHm6SjLCla4YVCcZQqNzukD+exN68ziGakWTW8CefHMy5NfMTEWFY1ve2tu6RzN8j3dkIpLLCtcQUHBIkRERPDJJ58QHh5er/GiCCt+dGW22194jrFsxyZJgvBwsLODggJ5vbI0i59zJNLUk2Pv7ba8cAUFhWZn5TNxOFLInPf6WFRuWZm8PpWvU2UW9rfP/18IKkRWPXXGsoIVFBRqhSkxEf2OnUji9WtyXb58mejoaMQarrse+hw9qyJ7sjD0JDauNvWWUxXR0ZCbC5mZcPasRUUT0N+XaT7HWL7BG0lsud1OFZoPxVmm0OiseDYBb1K55b1B9ZaRUVjK2mOXSMsvrfR+VBRotaDRQGRkQzW9lsUvuRMjdmHPq7stL1xBQaESkl6PMSamTo1FduzYQVZWFjt27KjXnDtWJxOv92XxQ5Y1knKLy3j/10S+2pJFRHoqJ1Oz+eq3PPRlFqz0D0y4P4C21qks/z/LylVQUGh+DAUGvjjSnfm9jmPnWf8Uq7/OZbAzJr3S2hoXB6mpEBQkf42zcMUJt06u3NExnE93dsRs4XVPQUHh+kiSRMaUaWTPX0DJTz9Ve11GRgarVq3i559/5sCBA/We78d/RZArubDoHcumX0qSRFSUHGshinCyEZJ9Fj+q5VRpEAc+PWV54QqtHsVZdgNhzsxELCpqbjUqodfDN4c6cX/wIawC6l8T496vw3lu/Snu+vIIADui03nw85PsOqzH3R08POTIsqwsS2kuM2KuL13skvhsVctvf66g0NrJmr+A9DHjKPrs81qPCQ4OBqBbt271mnPLN5m0I4GBz4+o1/h/UmYSWbrxDP3e2sl/f04jOd1IuqGQDGMBv+8rpNfze/li/wWLdRpWq+HOMRn8kRGKlF9gEZkKCjcbksmEKSnJoh3ALcGvL0WQJbnz0JsB9Zax+1wGC1Yf475vwtl2Jo2CUiNLfz/Da98mUawXcXUFg0FOybQ0i//txkWzP9vfUVKcFBQaC1NyCsa4+GveV19JBVd7Vb//MplMFeteWQPCS1esdWaC+zE6jGpTbxkARrPI5lOp3LbyEEH/3kLgk9tZ+k0SsXlZiFoDkZHy3tKSjH66N520CSx/V6lbpnAtmuZWQKFumLOzwWS6ZuErPXiIrNvvQHB0xHvv7kYp/F8fTuzOpUh0Ydrc+rVhL0e8spAXlBop0JexaE0ExYkuFJ/KI2C8wJnUAs6ckfjzX4m4dyxkSEd37hrQht4Bzg2qSyIIMG1wNt9v7yavzjaWDS1WULjZMKenU7JhA9ZjxqLt2KHSZ5LBIH+tg8E2depUxo0bh06nq5c+4TG29HM5j2Db8NNQo1nk/m/C2RuXiSSBIc0J1CKCAOiMiIXW5KXY8MbmGDILDTw/sWuD5wToO9aZ/2zy5PL2wwTMHmARmQoKNxqS2YwpIQFN27YImsrmb+acuZQdPITjU082eze5q9m7y0gXq3g6T+xQ88XVcLX/L7PQwIrd8aw+cJHcvzrT2bkQ61SB8GQ9+z4s4fXTcfi56ri9bwAz+/jjaN2wGml953XDZ2Ea+7YWMfGlBolSUFCoAlNyCmlDh4HBgMcvP6MbINsAgiDgufl3xMLC6+4JfX19mT17Nrm5ufTr169eOuRdzOdocXdWz9lfr/HlXMgsYt5XR0nK1aMCRMCY5YShWEOidQ4JBbl4JLhx12kn+ve1XBCDSqPijgEX+XR/MJIoIagsW88yS3+Jy0Wn8bfvjruN5bswKzQuSmRZC8ack1spz7zs9GlSw/qR2rc/pQcOVrrWdP48iCJSXh6ipSvdN4CITaloKaPH9PZ1HptZaGDh18fo88aOCmsvo9DAwfhsbLRqyjIcQYAfwi9xKiWPUrOJvCQ7MgoN/Ho8mZkrDnL7Z4fJLW5YIY6wUQ5cJoCMv5S6GwoKDSX3+RfIf/0/ZC+895rP3L/9Bo8Nv+Cw+KE6yayvo8xshqhMf8I6W+Y08YOdsRWOMnOJFcZsO1TW8vojCCCoRcrSnJAkWLn3Ar+fTLHIvGHT/QCI+CPdIvIUFFo7ZrOZ/2fvPMOjqrYG/J4zPb33ECCU0EsAaQIKAoJgb9gVO96rYr9F/dRrV2zYFTtWEJEi0nsJLfQWSnrPJJk+Z38/BgKBEJLJpADnfZ48mTlnlzXJycrea69is1VP21D8wIPkDb2IghtuPKW9a6cnEY6jMRILNoC0jHBS43K96vtz2hEufG0RT8/YSlK4HwA/rD9MkEmHs9gPV4WRfeYi5m/PpURUUFmipyhHx87ccp77Ywf9Xvqb3zZmNvgzpEYcJm13YIPHUVFRORVhtXpcQwGltLTaPUmvr5PzROfOnRk0aBA6nXfG8Y2/HACg77gYr/oDHCm2cPVHq8gq9biNHdv9OvICAQESSFpBTqmdRz/OwOn2Pr9aTfS50ESBiOTIWt+sy05kQ8FMMiu3k1Yw0+djqzQ+qmdZC8UyYwbFk/6BcfhwIr6eBoBjy9aqDKyOTZswDjqeA8z/hus9pwcxMeg6+cZbwRekrXHSTd6BoXOPevWzWODuLzax5UgZbkVQXGIBNGhkiXCDP++NH8CEeeU4jUc9UQTIJieOgkBc5QZkvQuAdXvKuPLddXw38YKqE1KNBvz86i5L6vgEeArS/sjm0jH1+hgqKionoW3j8eDStj3Vk0sODMTg5cmmN+zebMUi/EgdWD9j2+HDsGRJ9Wt2l5sps+w4XB7DleLQImw6NBHHN+yyyYGz2J+K9HgkCf6TaabkkrhTxjca4YorQK+vmzxxrbRE64rYsF7hinp9kto5aN5IVuUu2gVfQLSf954tKipNiaIofPjhhxQXF3PnnXeSkJAAgH3NGgAcG9IQQlTzOg+f9iW2BQvwv/XWZpG5Jlw2F1sqk7l+xNr69XPB4u1FTP7uxAM+F6Ah3j+QG3q0YclcPX+4ZBSNZ60k69y4XDKOgkA0AR6dZbHDw99uo7wcruqdUDWSyeTJE1tXUjtZeH9Zt0bx2FBROd/RtUsm8pefUEpLMY4ahXA6cefkoElMbJSKvzWRtqgMfyroONp7D/2nfttKmdXJiTn2FZsWZ0EQGtNxpwdJ7yR9i8zXKw5z19DWDZC6OqlXtoL/QdrMI7QaEO+zcQFMmiDKlQJMmmCfjqvSNKjGshaK6/ARz/eDGQBYLBZye/Uk6Kqr0Njt+E+ofjIqGQwETXqwyeX8fXMWWaVW7hzUBqPuVJfYtH3BXBC9DaSedR7z8GF49z3BwgVxCKpvJIenRPHp60Z2ZJspK9agizheQ1g2OnAWBlG6okO1PkXAmIVmLmjrOV0JCYFJk6BVHT1h26QYCNWUsWGti0vr/ClUVFRqIvjf/8J/wgS0Sc3rii6EYMlPB4FO9B6fcKbm1ZAkT36fLVs8rwMC4EixndKsyGrtZKODE9eqstGJq0SPdX8UAHuAb4odhPjpEcJT7SkkBIYNq99nkSRIjcslLcN34fcuxcG24oUAbCv6WzWWqZw1KIqC2WxGCIHZ7Mnjl5mZifz8cxi+/R6/G64/ZRNp6JOKoU9qk8ppNpvZsGED7dq1o1UNC5Idsw9gowOpw0PrNe5338HHv2gozexctfGUgKggA8IcxeRVgr/SZGSdq1o/WefCui8Ka0Z1PfbQIoX5PVwEGLRotXDBBXDbbXWXJ/VCP4qWhnN4dSZJg+qna1VUVM6MYcCAqtf519+IY+1agh6bTNAjDzfJ/GnpenoGHkCjr3tF8SNH4OuvPRluSix2Zq8JB05awwgJt0WPLvx4Pm6NnwNnqT/PP+8gY6DAo91OJSAA7rrLk9O6LsT1jiFGziNtpY0r6/wp6sbAmBsotmcSZlD139mIaixroQTefx/aNm3Qp3pKhX/++ecUFxfTZ/RIxo4d28zSediZY+afP24GQJYk7htafTPldMJ2cwL39U2r17jx8XDxRRJfLpKxlOjRBllB43G3XbQ3h3ZRAWSXWNGGOJFOCCSWZNCGVCLcp0YXZxRXECGF0iZJZtgwzxx1RZKgV3Q2WzKC6vU5VFRUTkWSJHTJnrBsxWrFOusP9L16ouvQ4Qw9fcur83Yxc/YhwogiuEfrevVNTISnnoLp0z0eZn5+oJPLMToqq/Ir1oQkgS6sstq1wFg/2kfp2bsX2rSBa66BESPq57kB0CbBybLDYfXrVAsaSUeQLgqzM58wo7rAUzl70Gq1TJw4kZKSEjp06MD27dv55ZdfkGWZf3z+Kf7BLeN0f86cOezevZs1a9bw1FNPIcvV1y6b/8oHOtDr6vqlsRg+HOauFWzaZUDWupD9PF4Z+ZUWZm07QnJkAC6NA42fs1o/TZAVxV5zGNb2gxaSgoPo398zfn3ofXkivAib52SrxjIVFR8g3G6ss2cjh0dgHDyo2j3n7t2e70dDy5uCjbmxXNr5cL36hId7vhYtgs37nShOU40FVjT+diT5+HVJq6Ax2Sku0LBlt4OIgOORAYoC2dkeA9kll0B9VL0kS6RGHGLjnupVh7Ozs1m/fj1JSUn07Nmz1jGEEOzcuRODwUBy8vE9sU5jJNqvXd2FUWlRqMayFoqk1+M3flzV+2O5N6y+LgHSAEL99Bh1MjanQkLoqYnvKyvBjZbImPolYdRoYMwYaLcki10rw3AWBKANsiIbPaegGeUloK054Z6sdwPVS5QrNi2ucj1+3ct4/PFQOnaslzgARAQ7KSpunOT+inBTYs8mUBeJXmNslDlUVFoi5ldfo+LTz5ACA4lL34LkZb4Mb1h/qAScEiasYKrj0eMJhIbCPfdAx47w00+Qt9OAIkmgqXs1PUmCsjKJXcXQpQvccgt4azM0mcAm9J6YdB+EXkiSxKC4m7A4SwnQtYyCMSoqdSUqKoqoKI8H57F1k6IoOJ3O2ro1KSEhIQAEBQXVGC5VWuTGiJXAuPrl+0pIgIkPuliYnYllXzSKVY82pBJJBgdOdpbY0NSwnJFk0Jiq/3yEAq5Sfw67ynnq/kCuvELCWM9lSmSKR3+UFjQsf+zpsDhLcSp2gg3eV1xXUTmbqPjsc8r+7wUAImfOwNC3T9W9iK+mYVu4EP9bbmkyeQpcoSTEH6pXHz8/uPtuz5rnoZesKFmyR09pz7yG0vh7dIlfmJ2kWI+xzGqFffs8a7IJE2DAgPovheLDbGw8HFHt2nfffYfFYmHz5s1ER0cTe7TCaE2sXLmShQs9HvnXX389KSkp9RNApUWiGsvOEm6//XYyMjLo1q1bc4tSRUywkaWPXUSpxUnHmFMXc8dy6xr96l9HoqjCTp6mkOALSqncFYPtYASKTYcm2Fpn5ScEuMtMCEXGv30+nUfp6NixfuEMxzDqBTZ39Y28w+Fg9uzZlJaWMnr0aOLiTs09VBc2F84lu3InRk0gFyfcjSz5rsKLikpLRgr06A3J3w/kpq0388LlXXnmky0UYK97crCT0Gjg4os9HmH7/uMka30AcoD1lA1nTQgBrlI/HP5aLrsOrr0WAhuQA9tglLBj8FQtqMEtbfv27eTm5pKamlq1ST8TGklLoD7izA1VVFowvXv3RqfTERgYSEREy3meR44cSbdu3YiIiKjRWGazCoySHaj/Qd3fu3LwS8lFG2qhcnsczsJAtCGWoweKdUNxaHCV+qENsWDsks3IyyIxGuuvK3V+OiQUbJbqm+A9e/awdOlSWrVqxciRI73Kr1TuKGRZ9lcIFLqHj6JVYN3DwFRUzkaEEIgTipeIkwqZNFVI+YYNG8jMzGTo0KHYhBGjqf5/v8fWUL225JI1Q48jLwhNgK1OayiAYxolLw/y86FfP7j55vpFD52IyaicsterD8fC/k9+rXJ2oxrLzhIiIyOJrGvgdRMSHWQkOqjmY8ZjhTxlTf0V6LFFk2xwEdA9E11YJZU7PQs+XWglkrb2KijCJeMs8UcTYCeg0xH8EkvQGL3PkaTRgFtU38xv2bKF9PR0AObOnctdd51a3a8ulDsKALC5y3EpDvQ1HfmqqJyDBD38TwwDBqDr0B5J07RG4s6xQfRoFUTaJr0nZtxLgxl4jGXP/0fL5Y9lYj0QhWLToQ2xnNawL9wSzuIAdIF2nnlMz+jhDXcGc9gFehweZXUShw8f5pdffgFg79693Hfffae02bJlC0uXLqVjx45eb1xVVFoisizTo0f9igw1BbIsE1/Lrs7tBg11N26dSJHFjiSBIcaMNshG5Y5Y7EfCUAwuNAG2WvWNEOCuMCLsWoxJRfh3zkbj58QtvKs+J8kSGly4XdWNZTNmzMBms5GdnU379u1p27b+VdMrXSWIo3Xzyh2FXsmnotLScbvdVFZWsmrVKtatW8eIYcPo9ux/Ucxm7OvXo22ViDYpqcnkqays5M8//wQ8+zUnY9HpvV8zdOqoYWX/DMp3RtdpDXUMf62W3bs9y7cJE+Cyy8DL4ugA6LTgUKqbRm666aaqMMzavMoAhgwZgsPhwGAw0KtXL+8FUWlRqMaysxxXRgbm995H27YtgQ/cj9TE3hm1ccxV326p/2IvzF+Pv15DpcONJIExsQRtsJWKbfE4ckLQhVWc1mAmXDLO4gD0saUEdM1CG+Q5dYkN9j7E0WaXMGmqhxAEBQXV+LpGmYTg0KFDBAUFERZWPa9Q9/BR7DevJ9rUVjWUqZxXSBoNxoEDztywkTD5S1gxefz3G2AsAxjYIYTU4eVs0rup2Fb7saZi16IxOrn6ZhuXjvBN6KnVCibJXqPVzX60rPzJr09k/vz5WK1W1qxZQ9++fU/RUyoq5xpCCCq++BLn1nQC77unRVUSBzD5SdiEdzu/K3rEs2BHPuBJiB3Y+zC6UAuVu2NwlfmhC7Gctq+rzA9JoxDQIxNj60IkWaDTSISYvNORLpsLFzpM/tXXp0FBQdhsNiRJIiAgoNYxzGYzBQUFtG7dGs0JBwJRpmSSg/phd1eSHNx0lZRVVJqSb775hkOHDqHX6xFCsH33bvqNHUvugIHgdmP58Sdi165uMnmMRiORkZEUFBSQlJSEATt2W91TUJzMNb0T+XR5Bv5dsj3OETvicRYEoouoqJav7ET8tXpKskx06AA33QS+OA+x2SWMJ+314uLiuPzyy+vUPyAggCuuuMKruRVFYeXKlbjdbgYPHoy2volrVRoN9TdxllP86GM4NmwARUGX3BbTpS2nXqPpqN2nvMy708jnx3fhsV+2Vr3XBtkwtSnEmR8EUi1KWRJIGgVTm8IqQ5kCXN7DuzBJgHKLBpO2ultwx44due666ygrKzvjCcLixYtZvnw5sixz7733VuVSAQg1xtHHWDdFrKKi4jtikgwUE0b5zp0E9m9Y0m9JkvjPZZ25Yn6ORwfVciIqG11QauKyjr7zFj6crSXaUFrjvXbt2jF06FCys7MZMmRIjW0SExPZs2cPQUFBBDYkHlRF5SzBsWYNZf99FiQJx5YtxCxZ1NwiVcPk5zHmu2wutMb6LdfHdo/jXzO3UWr1rFskWWBsW4A9OwRniV/tnQVoA20Y2xQgSZ5ac6M6x6DXencYW5lfCQRjCqje/+abb2br1q3Ex8dXWxOd0r+ykqlTp2K32+natStXX3111T1ZkukUNtQruVRUzhYqKjzVIFNSUrBYLAwcOBBhqfS4nwLuoiLMUz8k4Jabkb34/52Xl0deXh4dO3bEUAfXLI1Gw3333YfdbsdkMmGSirBUem8s6xgTSJ+kUDYeKsEQV4ZQZMo3tD4eZ3kyEnSNDcFflpgwwTeGMgCLTcaoaZ68ljt37mTRIs//oMDAQFJTm7Y6s8rpaTluSCpeIZmMHp95QDL51itJuN0UP/EkuUOGYfltRr37m0yQaMhj207vHrNrUhO5Y0DratecBQEgJIIDtKfdjEoaAcrRtifwy8bMGtvbXW6mrz/MxsMlp5VlW04YKTGlp1zv1KkT/fv3P+M/l5ycHMBzclBYqIYKqJxfCLsdV1ZWc4txCr3HJSCQ2fR7/ao4nY6eMRH0DWyDxuSspp+ES0YonguSJGHUS/RrE0b+Id/p7A2Z0fRJKqjxniRJDBs2jAkTJpCQUHM1uuuuu4677rqL+++/H10TFlpQUWkupBMy1ft6/QSe8OePPvqI77//3qviTB37BqGgYdfcDK/m/2PSIPz1x72w3OVGXGUmdP61bwY1JgeuMhPucs/PRwBL9xaQW2arsf22rDK+W3sIq6PmKIJtf3oSf3ccUL1QSGBgIIMGDaJ169a1ylNWVlblEXtsLaWicj5x2223MWHCBC6//HJuuukm2rRpg659e0JeehHD0KFgs2F+6X+YX3/jlL6urGwKJ95NybPPIVyuU+4XFBTwySefMGPGDL799ts6yyTLMqajerO1KY89BxqWSuOVq7rjZ9AiA64SP4SQPPu5k5AkiA0y0bd9EFYrZHinHk9h7969pB82Euuf75sB60loaGhV+gvVs79loRrLznLCprxN4KQHCX37LRSLlYJbbsW2dGmtfco/+pjC227HcTTf1umwL1uG5bvvce3fT/Fjj9dY0vdM9EnMJ+2w994Tz47vwu8PDOLW/kmM6hhHZ30S4/tGcGPfVgQadYCEu8KAu8LAieJJRieO3BAU5/FH/ONlB2r8DB8u2c9Tv6Vz7cerKa48tVpTUaHgoC2W1F7eecgBXHzxxSQkJNCjRw86eFvuTkXlLETYbOReNJzcfv0xv/tec4tTjc59/TFKNtJW+KbK8M6dEEgAN14YTUpMEBISLrMRZ6kfzsIAZKeenokh3NQ/ieREPVu2QHl5w+fNzVbIdkSS2sf7nCEajYaEhASM9S11dwI2m42VK1dy8OBBr8dQUWkq9L16EfbRhwQ+cD+hb79F8cOPUvzkU4haDFuugwcpnHg3Za+8ilBqXxPMmzePvLw89u7dy8aNG+stX+9rPDm80ubk1bsvQGKYP2ufGcH/je/CuO5xDAxrQ4/oCB4a1ZqhHTzrMk9+Vz+E6/haSTK4UBxanIXHDxwr7S5+33LqgYfF4eLqj1bxr5nbeHPB7hrlSPu7BAM2uoyrf04ygNjYWAYMGEBcXByXtqDoCRWVpiIwMJD27dsjn5RqJ+D22wj/+EOko2HMcg0FTCo++gjb3HlUfvY59uXLT7lfUFCAclSX5eV5p2tSWxWSltmwarTtogL46d4BhBiMOPKCkQ0nVea1a1HsGhJD/biiVxxaWSYwENavr3KwaxDbt25nh70TcRFnPjxVFIW0tDSfrnXi4uJ46KGHmDRpEm3atPHZuCoNRw3DPMvRREUR/NSTAGR374lSVIQ74yAxK5bV2N6VmUnZCy8CIKw2In+afvqxY2M9Jnwh0MTGepXwObW3whv7OiMKi5Aiws/coQZ6JIaQGObHbwsqydcE0SZRg14Pl3dL4MeFJVjwnHY6iwI8yf814ujJqD+u4gD00Z6KJDpNzbZhj9ENjFoZbQ3FCDbOyQViSb3Ee0t/bGys1wUAVFR8yQcffMDrr79Obm4uPXr04L333qNfP9/nelEqK7HO+gNN6yTchzyeBbblywn6x0M+m8NdWEjl9B/RtUvGNHp0vftrtdAz7Ahpu84QllRHtm71FDaJCzMSERBDpCsSd6yDCy6yYi7UcWhbNAEGmUADmMJhzx6Pga2hP/60P7KBBFJHNW+lv7/++otNmzYhSRKTJ0/G39+/WeVRUTkTfuMug3GXUfHtd1h+/hkA4+DBnus1YH7nXWxz52EDjMOHY+jb57Rjh4aGVnlCBQfXP8w7KCGIDroMNqx1c1u9e3sIMGi5pX8SXeKC+WqzCW2UEY0GerUKpbRYZv1OC9pAm6cgkp8djb8DSQJZq2DPDcbYpvDYMhB9DWsoWZIw6TXYXUrVWupkNmzW0N1/P3r/Ll59BkmSGDlypFd9VVTOdtz5+dgWLULfo0eNeRXlwECiFy3EdfAghv4XnHJf37sXfPElkr8/2nbtTrl/rLhGVlYWw4cP90rG1FT4fFdbLIUW/CK8X091jg3iw3FDeXilnVyliBL70YIjZX5EB5poHeZPYpgB/dG9WkQEHDkCBw9CcrLX0wIQ72xDJQFcfEXiGdtu3bqV2bNnI8syTzzxRJ1CV+tCaGioT8ZR8S1nrbFs69atLF++HL1ez8CBA+nSxbt/wg2hqTaddcV4yQgs03/EOOr0iwo5PBxNbCzunBz0ZygtrEtJIfKXn3Bs3ITJy4SFqZeEU/pTKAdmLyf59gvr3O+zFQfYdLiUx0d2JMCoZeTbyzi8LgIlI46UlAhKSjRkHtZx59gIolNzeX/RXoo2x+EoCEAbZCU0VMIk+VNSFAjRZiTgX2M61Wjwu3NQazrHBdEqzI8go46Nh0t4+rd0Wkf4MeW6XqTNLyAQf9qPS/HqZ6Cicozm1ls//vgjjz76KB999BEXXHABU6ZMYdSoUezevbvWnDHeYH57ChUffgTt26F/+J+wahXBTzxRrzGEEJRPeQfbihUEP/30KeXQiybe48nZKAQRP3yH8TT5uGojNaWSBavagsPRoCT/Fgts2gRhYVBc7FnA9eym4ZZbTLRvb0JRYOlS+Okn2L4d2rf3LALT0xtuLNvwVzFhmGg9pnPDBmogx7zStFpttSTcKi2L5tZD0PLWT4Y+qUj+/qDToe/R/bTt9D17YvnpZ6SgILRJtVfYHj9+PImJiQQFBdHJy+IBqXHZpGXU76DuUFElr83fTa/EECZe2Jb3F+/j1d8OUbqsIwM7BpPsDmLfPkgKCubKyXrWOXewYAFY9kWjFOvQh1pom6ijtCwUd4UBbaCdNhH+XNX71BBuo07D/H8OYV9+BQPahqMogn//vo21GUU8OTqFkZ1jSMuKYUhytlefX0XlGC1Bb0HT6i7FaiVv9BiUvDzQaomaOwd951N1iTYuFm1czZUa/a68En1qKlJAIJqwU40xOp2OW265pUFypo6OxP2dli2/7WTAPd0aNNb+3VrigrSM6uZPeYVgz15BUm+JCTdK2O3V11ABAZ4wzB07Gm4s273UkxduxD2nPwCx2+2sXbu2ao0TFhamJuI/Dzgrf8PvvPMOjzzyCEFBQWg0GkpKSujWrRtfffUVPXv2bBIZmnLTWVfC3nyDkP97HrmW03zZZCJ6ySLc2dlo27c/45iG/v0x9O/vtUyp4zxJ9Zf8nE/y7XXrk1tm48U/dwLgb9AwsnMMRWaXJ6xStrN1h4tgo4Zx4+Daa2UCA+N4+KpY9mZamfGrhjUrNASYNOj1Emi7MO6aaFLi/UmJqblipSRJDGh73Ottyt972Z1Xzu68chbszGPJCi2phm3IsQO9/jmoqLQEvfXWW29x9913c8cddwDw0Ucf8eeff/LFF1/w1FNP+XQuXUoKAtgrSWw3Gpj026/19k51Z2ZifuNNAMpeeYWoX36ufv+E/DVuL3PZjLw+lA9WJpH29t+kPjnCqzEAdu2C/HyQZU9o5fjxcO21nsUceK5fdBG0aQPffOMxrMkybNwIN9wA3jphCQHfzw/jktA0pPDm9b4YPnw4rVq1IioqqkHhnCqNR0vQQy1x/aRLSSEufQtIElItRvOA227FMHgwmrBQ5DN4ARgMBvo3YP0E0Lenkxm/t6PscBnBrermnfbh0v38mZ7Dn+k5jOkWy5/pOTiLAlDsWg6XVeC/LYjkZLj5ZujRw4QkpVJ6u4PVG9zM+ElLbqaG9u1kDmQoDOnbh6597QxqF46fvuYtQ3SQkeggz9/75iOlfL/OE8b04p876e6S2WVvw+R+aq4xFe9pCXoLml53uTMzPYYyAJcLx8aNNRrLzoS2Ve2G/YbSdXxb9NhZ9UcRA+7xfhyHAzZsgOBgyM2FggKJwQMlbrkF4o7WaDtxDRUX51k7rV8PY8d61lTesmq5m2TtIUKSkk7bZvny5axcuRJJknjooYcIDg4+JTRW5dzjrPkNf/HFF2zcuBG73c5LL73EK6+8QklJCUVFRRw4cIBLL72UCy+8kFWrVjWJPCduOjt37sxHH32En58fX3zxxSlt7XY7ZrO52ld9cblcdUoQW5uhrKpNQAC6Dh28CqusL5HRMqNbbefjBUc9N+pAmL+ejtEBSBIMSo6gd6tQAmwhuCsM6J1+JERreeABuOMOOFb0ZcOhEubuyeKOO2Hyw1qCgyXy8qCyTEeyPva0hrKaSE3yLIB1GomAEh1/HU7hluE5lJaWkpaWhs1Wc5JbFZWTaUl6y+FwkJaWxogRxw1CsiwzYsQIVq+uueR4Q3SX/zVXk/bm6ywfOoSKiooa8wUqFguilmQTmshINEeTPxsHDz7lfujrr6Lr3BnTVVfiV8fS3icz5v4kEg15fPiO3av+x9i2DcrKPGEBkybB7bcfN5SdSOvWMHkyXHMNGI1QUAC7a071UycWfZvNnsoEHri7eSo4nYhGoyElJUVNTtvCaEl6COq3fgLfrKHcRUUIZ+1/I5LBUKuh7Bi65LZnNJT5iuv/m4ITHd9M3lznPgOTI5Ak6BAVQESAgXHd43DkBiMcWoLdwVx0ETz1FPTs6cm0YXO6mb7hCFJEGf97XseI4TKHD0NlhYwzL4QRnaJPayg7mVZhfgSbPOGYqUmhfD55BwbsXPGfruzYsUPNZ6hSZ1qa3oKm3/tp27ZF38fj6SRHRGAafnGDP0NjYAgyMC5+I18sSEAo3lfF3LsXcnI83vk2G0yYAA8/fNxQBtXXUKWlYDbDoUNwuAF1mirzK/l+ew+uSa29WsCxtY2fnx/+/v7VDGWrVq3ijTfeOO16WuUsRpwldOrUSWi1WqHVaoUsy+Kaa64Rb7/9tliyZIkoLS0VQgjx/vvviwEDBjS6LHa7XWg0GjFjxoxq12+99VYxfvz4U9o/++yzAk9BoWpfZWVldZovJydHvPzyy+K5554TS5Ys8cVHaFJmvXdQgBDrXvpLHCioEA9+nyZmb82utY/LrYhym7Pq/WfTnGLoKJt47gWXOHKkeluHyy06/nuOSHpqtnjkx01CCCGOHBHif/8T4qqrhPj++/rJqyiK2HioWGSWWMQTIzeJEIpF5c5D4pNPPhHPPfecmDVr1mn72mw2kZeXV78JWxBlZWX1ejZVaqcl6a2srCwBiFWrVlW7/vjjj4t+/frV2KehuquyslIsX75cZGZmCvvmzSLnwqEib/wVwpWXJyzz54sjiUkiZ/AQ4bZYTjuGYrUK58l/9D7mxes2CxOVonj1Lq/6K4oQzzwjxCuvCJGZWfc+69YJMXmyED//7NW0QgghruqwVXSRdwilorLa9aKiIpGTk3Pafna7XaxatUpkZWV5P3kjoeoh39KS9FB9109CNFwPFT3yqDgSlyCyevcRzsyW97yfiWviV4lO+n1CcSvio6X7xOO/bBalFketfcptTuFyK0IIIXJzhbj6Rru4eoJdzJ0rhNNZve37i/eKpKdmi6SnZouMggrhdAoxd64Qd90lxMSJnv71oaDcJtZlFAlrhV0kajLFXR2WiX379onnnntOPPfcc1XPXE3k5+cLq9VavwlbCKre8i0tSW8J0fR7v2O4y8uFY8cO4a6oaIj4jc7CNzYKEGLJlE1ej/Hjj0JcdpkQjz8uxJYttbc9toZ6+GEhxo8XYs4cr6cVn922TEi4xYGlh8/YtqCgoEYd9eqrr4rnnntOvPrqq94L4gNUPeR7zhrPsh07dlBeXs6qVavQ6XTIssz06dMZM2YMYWFhtG3blhkzZpCWlsaff/7ZqKdXhYWFuN1uoqOrV/6Ijo4mNzf3lPZPP/00ZWVlVV9Hjhyp13xpaWk4jnplrVixwnvBm4kx9yfRypDL1HddTFuVweytOTw7a1utfTSyRIDh+EmmRmiZNNHAk49pSDgpbYZGkogJ9oQAJIR6EksmJMAjj3jCm+rrCCZJEr1ahRJuMPL5wiTuaLsUv5RWVS7WkZGnr+752Wef8eGHH7Jp06b6TeolmZmZzJkzh+xsNR9IS6Ql6S1vaKju8vPzY/DgwcTHx2N+931cBw7g2LCByh+mY1++AtxuXAcO4M7MPO0YktGI9uQ/eh9z12spuNDy1RPbveovSXD33Z4T0Pj4uvfp2xeefhqGDfNqWjL32fh9TyceGLYdyf94Ut3KykqmTp3Kxx9/fNrf2cqVK/nrr7/49ttv2bJlC6Wlpd4JodLiaUl6qL7rJ2iYHnIXFmL58ScAlLw8rLNmeS98M/HAo0Z2OpKZ+3oaL8/dxU8bMpm7rfawxgCDFo3siR6wWOCCXnr+96ye0aM9hU1OJCHEVNUnyKRDq4XRo+GJJ6BDB0//+hARYKBv6zDmv7iRI+54HvhvBMHBwWi1WgICAk4bor1jxw6mTp3Khx9+WFWdrzFxu90sW7aM5cuXN8l8KvWjJektaJq9n+vQIQom3ETukGGY33mXsinvkN2xE5Y/ZtcaOSTs9hq995uSix7pSUf9Aaa+WU+FcQKZmR7d89RT0P30qSOB42uop56CoUM9eWK9QSiCD36KYEzUBtoMOXNy/4iIiBp1WP/+/TEYDAwYMMA7QVRaLGdVzjKj0Ujfvn0ZNGgQPXr04Mcff0RRFHbt2sXmzZtZtmwZixYt4tZbb6WkpISAgACv3F59jcFgaFCljJiYmCol2Fz5PBqCRgP3XZnP/00fxt+2rayPDeKqXnXcUR7l9ttPf6+w0s4NfVvRLiqA4SnHfz5GoydnkLf8+OJeitwduO9pj9vt+PHjGTlyJCaTqaqNy+Vi2rRpFBcXc9NNN2G3e0K5jhk3i4qK0Gq1XlXCqgs//fQT5eXl7Nu3j3/84x+NModKw2gpeisiIgKNRnNKafC8vDxiYmJq7NNQ3XUi+m5dsc2bB4Cua1d0HdrjyslF37lTjRWampKYJANXd97C2yv6cNfOTAI71d84dzRatN6Ee1ckGIBX7tiNibbc/HrPatclSaoKsz8xTMDlclUlSI6JiUGSJGRZZubMmfj7+zN58uQmCc9XaXpaih7yhoboITk4GDk6GiU/H4RA1+nsK9Qz7OGepDy9n8/fdXHje4nsza9gWIe6rwXbtIHHHz/9fX+DlmcuTeHKXvGE+R8PQ+3QofZ+Z+L9T3Rc4L+N3jd1BeDxxx9HluVqCbG3bdvGrFmzSElJoW3btgA4nU6EEDidTvLz84mJiWmUgiHp6eksXrwYgJCQELp1a1hichXfc77prYLbbse9/wAoCubXXkeb4tFX9vUbamwvhKDk8Sex/PADmsQEIn+cjraWnFuNiSRLPHDZESb/NpCczXnE9ow+c6eTuO8+z96tPmnAoqPhn/+sc6afU1j35XY2Wbvy4pPrvRvgKEOGDGGIF0WmVFo+Z5Wx7Bhvvvkmw4YN48CBA9x333306NGDxMRENm7cSFxcHJmZmWRmZrJtW+3eS97izaazIfTu3Ruj0UhZWVmTJrJ0FxRQ/t4H6Dql4H/jDQ0aa+IbKbz2k5UPJ5UxJ3dEw7IwnsSjP21mxb4i2kUFMKJT/ZVzTRTnOnjqtVCuCFpIhzsvAjwb0BMNZeAxhmVlZQGwZ88eJk6cSEFBAW3btmX//v18++23yLLMPffcc8pplC8IDw+nvLxczRF0FtDcekuv15OamsrChQu54mh1W0VRWLhwIZMmTWqUOU8k8J//QN+7N3JIMPqjR4YRn33S6PPWlZe+a0P33hqeHLWIqYfiPceWLZil32fxwYoeTBn8C0G9r6l2z8/Pj4ceegin00n4Cda49PR0li1bBsAtt9zCM888w/fff09GRgZutxshhGosO8dpbj3U1OsnSacj6o/fscz8HX2Xzhi9deP0gm3btnH48GEGDRrUoAMzSZZ4fEI2d027kPm703j5ad8VG9p4uISJX3s24q3C/RndxTe/g18mr+Lv4oH8/Ojx/D36GvLBbd++HafTybZt2xg/fjxBQUGEhYWh0WiYNm0amZmZdO7cmWsbcvJ5GkKP5p2TJKnqtUrLpLn1FjS+7nIXFuHeu+/4Ba0Gffdu+F0+Hr/Lx9fYx7l9O5YffvD0z86h/JNPCX3pxXrNazab+frrr3G73dx8883V1gz15da3evLsjEqevHovX++v/57Hz+/MbWpCo4GTtmd1wu1wM/kRhQ66DEY93du7yVXOec5KY1nPnj1JS0vjvvvuo3///lVeV1qttirJYkJCAgmNFLrT1JtOSZKapUSy+fU3qPzuewD0vXqiS/H+RDYyXs87Tx7gtpdHcu3ds7j885oVvzeE+xuOfj9zYt668s9RO7G5WvHBj5G1GvaioqLo378/RUVF9O7dm6CgIIKCPMUECgsLAc+zUVxc3CjGsgkTJpCbm0tsbM0lo1VaDs2ttwAeffRRbrvtNvr06UO/fv2YMmUKlZWVVdUxGxNJkjAOubDR5/GWtj2DePW+7Uz6cBzXPD6Hi98Y09winZbKcoU774LBhvU89OfoGtsc00MnEh0djUajQavVEh4ejlar5aqrriI9PZ3k5GS1qtN5QHProeYw2mvj4wl68IFGGft0mM1mfv31VwDKy8u5/vrrGzTeHZ8P5vvfNzLxPzGk31T3yphnIsjoCdd0K4JQP51PxizYWcgDb7fnytg1XP167dVABw8ejN1up2PHjmi12irvMoCCgoJq331NUlISkyZNQpIk9cCxhdPcegsaX3c59+ypfsHlxnjxxfiNu+y0fWR/f8/BnhAgBHIN//fPxL59+ygqKgI8oa8XXuj9Oi0kKZgpd63g9s8Gc+1/1jHuhX5ej9UUvHvdclaVD2Hpe+lo9L73XlU5R2i2bGk+Ijc3V8ycOVP89NNP4kgjJ4E+kenTpwuDwSCmTZsmduzYIe655x4REhIicuuQCdXb5Hv79+8Xy5cvF3a7vU7tHfsPCPvWrUJRlHrNc4yyd98TR+ISRGZye+Gqb4bXGlAUIca2ThfR5IqidfsaPN4x7E63WHugSFTanWduXAd+f3u/ACGmjfulQeM4HA6xYMECsXTpUuF2u30iW2OjJoZsGppLbwkhxHvvvSdatWol9Hq96Nevn1izZk2d+7bU58NVVCRcRcUNHsftFmJYzA6RJB0U5h1N+3upDw8N8RQk2Ptt3X93x7BarcJmszWCVL6jpT5n5xpn4/pJCO+eD3d5uSh7511hXbnqzI2FEG6LRdjWrReuoqI6z3EiNptNvPLKK+K5554T8+fP92qMkzm44ogIwCwmdlzqk/GOkVFQIfbkmn023rUJq0S4VChy0/MbNM6BAwfErFmzWmQRkppQ9VbT0Jzrp8bc+ylWq8geMMiz7+rRU5R//U2dZKr44QeRM+wikX/LrcJlrv/fsdlsFh988IF45513RGFhYb37n4ziVsTYqLUiRs4VRfsavi5rLPbMPyCMWMQ/e559hfNqQ9VDvuesN5Y1J95uOr15kF0ul3jhhRfEc889J1asWHHG9hXffS+OxCWII3EJouixx+s8z4koiiJsq1f7tBJd1t5KESKXihsj/hKKwzfGLV9SkGkTMdp8MTZwiVBsdTNKnkuoSlalNur7fCiKIhYtWiSmTp0qli9f3igy2TduFEeS2ogjSW2EffPmBo+3f1OZ8JcqxI2RC4S7suVVZZv5xl4BQkwZ3IASmi0cVQ+d+zS10b7srbc9a6I2yUI5w+GVu7xc5Ay60LNp7ZAiHLt313meEzGbzeLAgQM+PSz7aMJSAULMeX6dz8b0JdP/sVKAED88tLK5RWlyVL11ftBUez9FUUTpy6+IwgcnCXctfVzZ2SKzYydxJC5BlL7xZp3Gbmyy0nJEiFQibm7TOOu+huKyu8SgwM0iWXtQVOS17Cqj9UXVQ75HjbloAJMmTeLQoUPY7XbWrl3LBRdc0OAx8/LymDVrFrNnz6akpKTquizLxMfHo9FoiIuLO+M45Z9/XvXa8v0PCC8yH0qShKF/f59Wootr58cH/8rhh8JLeDZ1NrSgCkTlJS7GdD2MywWf/ByGZPBdWKeKyvnI4cOHWbZsGfn5+SxcuJCcnOoV3IQQVP4wnZInnsS23LtKv44tW8DpBKcTx+YtDZa5bc8gvnjuCNMLLuYfXRYiHM4Gj+krFn5xiOseS+SasEU8NOfS5hZHRcVrGmP9JFwuyj/6iKJJD1Hx7XfVqsPpe/UEnQ5Dv35IZwg3tq9ahSsjwzOmxYJlxkyv5AkMDKRNmzY+DW++55sLGR2xnhue7cDG73b6bFxfsPz9Ldzxbk+uS1zF9VPUinAq5yaNobtqwp2dQ/l772OdMRPb4iWnbefcvRtRXg6AfeXKRpGlvsT1juGdidv4NmMwb1y2pLnFqYZQBJN6rWB1eVe+fLsU/6jTVxlVUYGzNGfZuYrZbObzzz/H5XIBsHv3biZNmoTBYECSJG6//XYURalTVSBdp0649uwFSUITHw863+Si8AUT/i+FI3s389T0KwgYPIMnVlzu04T/3lBR5mZ8pz3sLo1n8dtbiBulVjRRUWkobre72vstW7ZUy69nnTmTksceB1mmcvqPRC9aiK5dcr3m8LvqKuwbN4Ek4XfVlT6R+7r/plBWlM49745F22U2b229BNnkm6qg3vL3pxlcfm80FwVs4NvtvZADm2aBt3LlSjIyMhgzZoya10elRVP2v5ep+ORTkCSsM2YirFYC754IgHHYMOL37gbtmZe92rZtPRmjhQBFQdexQ2OLXmckWeKnLSkM73CYUbdEs9hvL12vbN/cYrH+qx1c9lBrLgjZzbTNvZBktVCIikpDKH3+eQDk+DiMQ0+/JzEMHIhp/Dic23cQNHlyU4l3Rm79ZDB7dizh8T+HEXTzMu75tvn3VUIRPDVgKR/tGMbnty/nwklNn0d3586d/P777/Tq1YtRo0Y1+fwq9Uf1LGtBHD58uKpkthCCioqKalVXJEmqc/ns0FdeJnDSg/jfeguRP01vcRXOnvyhJ/8eu5EnV1/Jf3v/gXC6mk2Wklw7l7Tdz4a8RP58dj29H25+ha6icrbjcDiYMWNGtWsnV6py7trtMZQrCrjduA4cqPc8clAQ4e++Q/g7U5ADAxsk84nc/U43Prx/K+/uG8Od7ZZiL2i+cvS/vLSbsffEMSRgE79tbYchpmkqtx1LXrx//362bGm4156KSmNinTe/ysAFYPtrQbX7kk5Xp7WQrl07Ir79Bv8brif0jdcxXX55o8jrLYFxgczdFEu8oYihV4ez7svtzSrP0nc2M/z2BDoHHGbW9naYwrwoS6eiolIN1779AGgiIpFDQk7bTtLrCf9wKjHLlmAc5LtKub7ghWVDeaj7Uu79bghTrlzarLIoLoV/9lrGa+uGMeXKpdz5ZfMUnNq7dy92u53t25tXb6vUHdVY1oKo6dTez8s6unJAAMFPPoGw2cgdPITSF19qqHg+54XZvXnl+k28sOVyJiQup2hLZpPLsO63TAa0zWVPcTiLXt/I4OdGNLkMKirnIosXL6aioqLaNZvNVu2935VXIB2t961t2xbDwJYVunPf1O5896+dfJ89jD7x2aR9sKZJ5y/Ns3NnjzSu/XdHroxYwe/7uuDXxvdVdU+HLMsMGTKExMREunXr1mTzqqh4gy45uZqXunB5H0JtHHIh/rfeQtnLr5Db9wKc++tvyG9MwtuHsXhHNB39s7j4ziQ+u205QhFn7uhDFJfCu1cvZfTDHekXto8Fe9sQGOe7AwsVlfOZ8I8/JPCRhwl7793mFsVrJFninU1DePKCJTwycyiP9F6Ktdja5HIU7y/hhjZreX/rhXw0YRn//G1ok8twjCFDhtCvXz+uvNI3kRAqjY9qLGtBxMXFMXLkyGrX9u7d6/V4SlkZlh+mg8tFxcefVMvf0VJ4cnovvn86nfn5vejSS8fvk/7ynAw3MjaLwlMjNjDg6lgC3GZWfneIvo81n/JUUTnXSExMPOVa165dEQ4H4qjnhy4lhZjVK4mc+RtRf81DDgioamtfs4aC667H/PaUZtVdN77YhQ1zC9EbZS6Y1Id/9/qzSbzM5ryzl64Jpfy6tR2fXf4HP2QNQR8V0ujznsywYcO48847iYiIaPK5VVTqQ+hrryBHHzcmOzZtbtB4lp9/RSkqwp2Tg/WPPxoone8JbRPCgv1tub79Ju7++kJGR6VxeHVWk8y9b+EhhoWn88/fhnJXt/XMPtCFgJiAM3dUUVGpE7r27Ql+bDK65LbNLUqDkGSJV9Z4vLmmbupPr9gc1ny27cwdfcQf/1lHlw4O/srszE+PruXe75o3eigkJIRLL72UNm3aNKscKnVHNZa1MAYMGEDHjh0BT9hlTRvOuiIFBWG4aBgApiuuaHGhmMe48X/d2L5Dol9CDld8MJKb4xdRkHa40eZb8/MRUiMP8dbC7rzQfw5r8tuSMqF3o82nonI+0rlzZ+6++26GDRtGnz59GDJkCO1kmewu3ci7eHhV0RFNeDiGvn2RTdVDd0qeegb7ylWY33gT585dzfERqug+Oo41he15bvxGXtt8CalxOfz20GJcFbYzd64n6fOzuaXzBsY+3J6upv1sm5/NXTPHIelbTt5JFZWWiCY2lohPPwadJy+ZvnfD/q+bLh0Fej2Svz/GEcN9IaLP8Y/y5/M9FzLn+fVsL4mn68BAPr11GW6H+8ydvcBlc/Hu1UvpPiKSTEsoi9/ezPtbh2AMbt6cjioqKi2bf/42lE2/HyFYZ2HQ3Z14vO+SRvUyK95fwi1tVzD+xX70Dj/M9vUWrnmzZUUvHKPElsWe0pXY3ZXNLYpKDUiiJbobneOYzWaCg4MpKysjKCjolPtCCCwWCzqdDr2+YRUZhRAoJaXIoSENMpYpFguS0XjGKlIAwu3GOmsWksGI8dLRdZ5XCPj28S38460kbMLADUmreeCJQPre3wcaaOhz2BR+e24rUz/Vsby4C6n6dKZ9ZKPrHX0bNK6vURSFDRs2EBISQocOTZ9U+EzPpsr5TUOej7feeouwremMWPA3yDJx6VtqzcNRdO/9WGfPRgoIIGbVCjTh4Q2U3jdsnZfNgzeVsKK4C/FyNvcOSGfiGynE9k/yekyHTeG359OZ+omW5cVdiJFyeWH8Bu76adR5aSRT9ZBKbZxxDWWzoZSXI0dENPiQULFYkCSpKlzcG4TLBU5nncdw7tuHfcUKjCNG1KsaeemhMiZfspUv9l5Ia+0R7huxnzvf6kpkp4Z7heZszuOzyTv5eElHspRYJnVbyssL+hAQ3bIqyeXm5rJv3z569+7tdRoTb1H1lkptqM+HB5fNxZtXruC/8wYQIRdzz5Dd3P1mCnG9Yxo8ttvtZu9fGXz670y+3NQDRci8MzGdWz8e1KKLjsw79A4u4SDBvws9I8c0aCz1OfM9qmdZC0SSJPz9/Ws0lAmXC8fmzVVeGXUZSxMW6vWCUbFaKbhhAtntO5LTuw+OrVsRQlDy32fJu3QMjk2bTuljfvMtiif9g6K776Hyq6/qPJckwS1v9GDvAS3PXb6Jxdkd6fdgX/r6beOzG/5m79x9KM66n5baKlys+34f/x6+msSAYm58tScah4Wf7vmbNQXJLc5QBp4E6HPnzuWHH344Jd+TisrZjCzLHGqdxKE77yDy5x9rNZQBhL07hfCvphG96O8zGsoqp0+n8PY7KP2/F1Aslmr3hM3m0zDO7qPjWF7UhU0zDzG2yyFeWTmYVgPiuDxqFS+PWMhfL6ylaEderWPYLW42/Lifj+9YzT1dV9EqoIgbX+mB1lHJz/f+zeHiQCbOvOy8NJSpqDQUyWhEExlZ47rHlZWN63DdPddlP78GGcqs8+aRndKZrHYdKHnyaYQQOLZuJW/MWEr+9e9TdJO7uIT8S8dS+q//kD92XJ3XegAhScF8vudC1n25naFJh3h2Xn8SOgdyS9sV/PVyGiUZpfWSvWhvMXOeX8/1rVbRqlcYryzqy5gOe9k0fTfvbR3a4gxlANOnT2fhwoUsXry4uUVRUVGpAa1Ry5Nzh7F1ThbjOu7l9SV9aJUawbUJq1n05iYcFXXXecewFlv58dFlXBS0ik5j2vHVpm7c3XcLO9Ks3Pbp4BZtKAMI0HnWuAH6lnEorFId1bOsGWiI1bf0v89S8fkX+F1zNWHvTGkcAU+g/MOPKHvpfx63L1lG17kT4R9/RO4gTxUR0/hxhH84tVqfovvuxzr7T5AkAu64nZD/e96rud0uwbw3tjH1XSdzc3oikAmijN7B+0lNLqVrTx2BYTqM/hrcioSt0k1hnpuNm2DDwQi2W9rgQkcgZq6K+5sHno2i392DGuyl1pjk5ubyxRdfEBgYyP3334+2DmXufYl6IqFSGw15PioqKsjKyiI5Odmnz7Vl9p8U33uf540sY7riCsLfe8cj7wdTMf/vZYyXjibis099NueJlOVY+Pqxrfw218TG0jaYhefnkqQ5QofgfPz0Lox6N063BptTJqcyiG2VbXCiR4OLLvp9DEs+wr3/jqTzjT1atH46EafTya5du0hISCA01LfVOVU9pFIb3j4f7pwccgYOBreb6EUL0bVLbkQpPYeb2SmdEdbjoUbhX3+FdebvWH77DYDopYvRtWtXdd+5dy95wy6ueh+3bSuyl39fRXuL+fKRrXw4vw0HXB7P17baQ/SJzSK1q4PWHfUY/TToTRocVjfWCjcHdjlI225gQ24ih9wer7b22n3cODidR6ZdTEhSsFeyNBW//vor27Zt4/LLL6dnz55NOreqt1Rq42x9PtxFRSjFxejat2+U8csOl/HN5M1MnZXATkcyeux099tPalIhqX2gx0XhBEWbMAbpEYrAZnZQfKSSTYtKSNssk5YZzQ5bW9xo6aXbyOBuy7lr6jB6XNCjUeRtDBThxuYqx08X0uCxztbnrCXTtDtxlQYj3B7PKuFyNcl8Smmpp7qU2w2KglJSimPXbjAYwOHANGrUKX2CHv4nrowMJIORgHvu9npujVZi7FPdGPsUFO4vI+2XDNKWmEnbZuCXrR14c+Op4QlanHQx7KNPQhb39jxMz4uD+fvQbBQ/mfy41DpvRIUQCCGQ6xB26ktiYmJ44oknkGW5yedWUWlMAgICqvIx+hLH+vWg0VTpKMfq1ZR/9jmV336HYvYk4rfNm49wuZAawfgcHOvHQ9/15yFAcQv2L8tkw+9ZpK22k5Gpx+aUKTcb0WncmHQuesXkMrH7EVJHhNL9qnaYYlKAFJ/L1dgsXLiQtWvX4u/vz+TJk1tsTkwVlWMIARwtLoJQGn9Cp7OaoQzAXVDg8WyTJLRt26Jt1arafW27dgQ8cD/WWX8QcMdtXhvKwFMx87HZw3jUpbDnrwOkzc5hwxoXaftDeGFuNyrmnlq5Mogyeocc4Jqe+0gdcBhtq3y2V2xGkiW04ZfUeW63240sy02uF6666irGjx+PTqd65aqo1BXH5s1U/vIrmshIAu6eiHw0hNldUEDu4CGIigpC33oT/+uvQygKZS++hG3xEgIfuB//a69p0NzBrYKZ9PNQHlQE67/azto/C0nbrGHlgVg+3dkW5RtNjf10OOjut48BrXOZlJrLgKtiMEdbcbt70a3v2VW9W5Y0PjGUqTQOqrHsLEMz+VF2R4QT1K8fTeGs6XftNVR8OQ1R6Uk6GHjfvZS98ALY7QBIJuMpfXQpKUTPn+dTOSKSgxn1ZE9GPXn8mq3UhrXYirXEhkYrYQw24Bfhhy6gE9AJ8Bi9Mn85yL59++q8UXc6nXzyySeUlZVx6623klCPnCG+oKm9yVRUzma0KSkeQxl4vF979aTsueerqurqunbF77prTzGUCUXBtW8fmri4alU4G4KskWh/UQLtL0rgRp+M2HI5pqdUfaVytqCNiyXoySdwbNrUoNDKuiKZTPjdfBOWb78DQJOQgCQEjg0bjgqkRTop3YYkSYT86xlC/vWMz+SQtTIpY9qSMqYtNx29prgUKnLN2Mrs2CucGAJ0mEKN+EcFImt7VfU9cuQIB77fTUxMTJ1zgG3evJlZs2bRsWNHrr/+ep99jrogSZJqKFNRqQfOvXvJv+Iqz0GCEDg2pBHxjSeFjiszE3E0JYxzzx4AHGkbqfj4EwBKHnscvysuR/LB35wkS/S7owv97jh+rTK/kj0Lj1BZ4sBqdiJrJExBOgIjDHS4JAlDUOeTRql/rueysjLMZjMJCQnqoZ9Kjair3LOMtWlprDKb4e+/SenencDAU08GG0rFN99iX7UKv6uvxjRiONGLF2JfsQJt27YY+vbFtmoV7oOHQKNB24ylb40hRowhRmo7d5UkiWuvvbZe45rNZgoLCwE4dOhQkxvLVFRU6oZSWor59dc9b3Q6/K+7lqCnnyJv40aU3DzksDCiZv5W48a45OFHsfz6K3J4ONF//4UmKqqJpa8bQogWuYC7+OKLadOmDTExMS1SPhWVk1EqKjD/72UQgvKwcEJffdnnc7gyMzG/PQXZP4CgxycT+vL/MF1yCUppKaYRw3FlZnm89RUFXafm8yiVtTJBCUEEnWF5k5iYyJNPPll7o5PYv38/Qgj27t3bYvWXioqKB8vPv4LTWfXetngxQlFQiospvMsTHaTr1YvABx8EQBMdVeXNr4mOhkY8MPOP8qfXjY2nJ61WKx988AFOp7NZQrdVzg5UY9lZRuvWrVmzZg1RUVGNUunHtnIVpU89DZKE9c85xK5bgzY+Hu0Jp4Ph772L9e+F6Nq3Q+eDio1FRUWsWbOGbt260eqkkITmICwsjJEjR1JcXEzvBpaeV1FRaTwcW7ei5OV73jidmMZciiY0lOg/Z2NbugzD4MGn9SCxzJ4NgFJUhGNDGqYxlzaV2HVm5cqVLFy4kAEDBnDJJXUPgWoKZFkmOblxcz6pqPgSyc8PfZ8+ODZuxDB4UKPMUfzgQzg2bgRAuF2EvvQiphHDq+7rQ0KImjcXV0YGpktGNHg+IQTr1q3DYrEwZMgQNJqaQ5aakmHDhqHVamnfvr1qKFNRacFUTPuK8g8+OH5Bo0Gb1ApJlrGvXYfI8xQrUnJz0YR5XBO0rVoROXMGjnVrMY0bd1b/jSuKgvtoZIL9aMSUisrJqMays4z27dvz9NNPo9FoGkVBKaWlnhdCgNuNUmnh5KWXZDLhN+4yn825dOlS0tPTOXToEA888IDPxvUWSZIYMGBAc4uhoqJyBvTduiFHRqIUFCBHRKDr7knoqomJwf/662rt63/zzVR+/jmaVokYBvRvCnHrze7duxFCsGvXrhZnLFNROduQZJnIGb+C3Y5kPDWFhC9QSko86ydJOr6eOgl9l87ou5wcPuQdxcXFzJvnSXsRGxtLSkrz5z8MDw/n8ssvb24xVFRUzoBl5u/H3+j16Hv3JvTVVwAwDOiPJiEBd2Ym/jffVK2foXcvDL17cSbWr1/PokWLuPjii+nbt69PZfcF/v7+3HXXXZSUlNCpU6cmndvsyKfMkU+8fydkqfkPOVROj2osOwtpzBwxppGXYLrqSuzLVxBw6y3oktt6PZZiseBMT0ffsyeSwXDadikpKRw4cIAePc6eyiUqKirNjxwaSvSihTi3bEbXo2fVyWddCJhwA3JgAP7XX9egJNqNyejRo1m3bp0aGqCi4iMkSYJGMpQBhLz8P0oefwI5MICgyZMbNFZBQQGyLBMefvoMtcHBwSQlJWGxWIiPj2/QfCoqKucXptEjPUWSgKCHJhH06CNV9zRhYcSsWIaoqPB6jbRr1y5sNhs7duxokcYygLi4OOLi4urVp6EFTIQQrMr5AZdw4FTstA1K9WoclaZBEuJoFmSVJuN8KeuaP+5yHBs3YhwxnIivpjW3OCp14Hx5NlW8oyU/H9a5czG/NYXA++/D76ora20rhCCnew+U4hL0ffoQ9fuMJpKycXA6nezbt4/ExEQCfFSsoDlpyc+ZSvNzPjwf+/fv59tvv0WSJO666y7VEHYWcD48lyre01KfD/uGNHC7sK9bR8XHnxL8/HP4X31VnfoqioLFYjntuiM/P59NmzbRq1cvolpoXtj6kpeXx+eff05oaCj33nsvsizXewwhBCtzvqPUkUu/qKuJ8vNd/u+W+pydzdT/N6xyzuPctYvK6dNPKXleX1yHDnm+Zxz0gVRnBw6Ho0nj3i0WC4sWLWLv3r1NNqeKSkuk/ONPce7YgfnE/Bu1IPn5e74H1s+4pCgKiqLUW77GZM6cOfz000989dVXp23jdDpxnpDE11sU4UYR7gaPo6JyLiKcTip//gXHli0NGqf0aAinEIKysjIfSNbyEUJQUVFBU57h51r2sbtkBU63rcnmVFFpKTj3H8D81ttU/vQzld9PRykpwTJjZp36CiH44osvePPNN1m6dGmNbaKiohg1atQ5YygDT55tp9NJYWGh12sqSZIYFDuBUa0e8qmhTKVxUMMwVaohFIX8K69CmMtxHckk+PHHvB4r/PPPsM6ahV8Tlw5vLiorK3n//fdxu908+OCDBAcHN/qcy5cvZ82aNciyzJNPPon+pDL0KirnMs59+yiaeA+SQY//nXeC203APXefsZ8kSUT9PgP72rUYL764zvNVVlby0UcfoSgK9913X6NUI24IpwsJKCsrY+rUqWg0GiZNmuR1cRi728LSrC8RKAyNuwOj9uz3YlNR8SUVX31N2bPPgV5P3LatyP7+Xo3To0cPKioq0Gq1LSIPWVOwdOlSli5dygUXXMDo0aMbfT6H28aGfI9XsUAhJXRIo8+potKSML/1FvZlS0FAwL334M7JIfD+++rU1+l0kpWVBXg8YYcOHdqYorYYOnXqxJVXXkloaCiGWlIMnQlJktFJ3vdXaTpUY5lKFcLhQLHb0cTE4DKXo6lnDPfJGPr2wdC3j4+ka/k4HA5sNs/ppNVqbRJjWUxMDOBJqNuYuexUVFoilV9/g+uoV6WSnU3UH7+focdxNDEx+NUzCXV5eTkVFRWAxwDVUoxlY8aMoWPHjiQmJtZ432Kx4HA4ALDZbA0wllXiUCyecdzlqrFMReUElNJSNLGe/8ma8HAknc7rsbRa7Xmz+TzGMW+6kpKSJplPK+vw04ZgcZUSpI9ukjlVVFoSunbtsApAkjBdemm99mx6vZ6xY8eye/fu80pXSZJE9+7dm1sMlSZEzVnWDLTEeGJXVhb5Yy5DKS4m9M3XMfTti7aN6hpaXzIzM3G73SQlJTXZnBUVFZhMJp+UjG+Jz6ZKy6GlPR/WefMomngPyDIR03/AOLDxq9hu374dRVHo2rXrWVUy/cCBA2g0mgbrplzLXoRQiPXv6CPJTqWlPWcqLYuW+HyUvfY65e+8i7ZTJ8I/moomJgb5HMgf2JTY7Xb27t1LcnIyJpOpSeZ0CxcuxY5B450H4Im0xOdSpeXQEp8PoSjYly5FCg/H9ucclLIygp/9L/JJf39KRQXFk/4BWg3h772L1ER/n41Ffn4+6enpdO/encjIyOYWx6e0xOfsbEd1RVEBwL5iBUphIQDWP+fgf911zSzR2UlCQkKTz3kuJPRWUfEG0+jRxKxaARot2vjaPWGF2w0OR4MXeV26dGlQ/+aibVvvKxufSIxfe5+Mo6JyLlE5fToArp07ERaLaijzAoPBQNeuXZt0To2kRaNRt0IqZw+KojBz5kwKCwu58sorG2TskWQZ40UX4di6lfL3PfletcnJ4HZjGjeual1lW7gI24IFAFT+OoOAmyc0/IM0I7/88gsFBQXs2bOH+++/v7nFUWnhqAn+veCll15i4MCB+Pn5ERIS0tzi+ATjRRehadUKDAb8b6qbElTKyyl55l+Uf/RRkyZkVVFRqT/not4C0LZqhTY+DqWkhNL/PkvlL7+e0kY4HOSNuISsTl2wr1nTDFLWDbPZXOeEsUII1q1bx/Lly3G71YT7KmcH56oeCrz7bpBl9BdcgK6OOcas8+dT/I+Hce7b38jSqaioNISWpLcKCgpIT08nJyeHzZs3+2RMXfv2GAYPQte1K+Z33qXshRcpmjgR8HiVlb3+RlXb0qefxrZsGQDOffspuOkWSl94EafDwbRp03j77bfJycnxiVyNRURERLXvKiq1oR6neIHD4eDaa69lwIABfP75580tjk/QREV5PDQUBamO4XyWGTOp/OprAEyXXoq2CUMPG4tt27aRk5PDoEGDvM7r01hkVexgZ8kyOoQMpFWgGi+vUj/ORb11IhXffkfF5194cm+MHlXNs0OpqMS1dx8IgWPbdgz9+zejpDWzYMECVq1ahdFoZOLEiYSHh9fa/uDBg8ydOxfweJf26tWrKcRUUWkQ56oeCrz/PgLuubvO6yeAksmPoxzNzxX27pRGkqzpqKioYNWqVSQmJtKpU6fmFqcaLsXBurxfUYSbC6KvQacxNrdIKmcRLUlvRURE0L59ewoKCnzmiSmZTET+OB0hBDl9+iEASevJuWiZMRP3wYPHGwtB2WuvYxwyhPL338e+ZAn2JUsoHTyIQ4cOAZ50FbGxsT6R7UzY7XZ2795NVFRUVR7nM3HNNddQUFDQIK88syOfnMq9tArsjknbMvLXqjQOqrHMC55//nkApk2b1ryC+BhJknDl5FDx5TRPosc+qbW2NwwciCY+Hk2rxDoXA3AXl2D7+2+MQ4egiW5ZCVXLy8v59VePV4qiKIwaNaqZJapOZuVObO5yMiu2q8YylXrjjd6y2+3Y7faq92az2ddi+Qzj4EFUhIWi69KV0hdfQhMRQdAjDyNpNGjCQgn//FOce/YSUIvnrLDbKX78CZTiYsLeehNNE5Y737BhA+BJwL9z504GDx5ca/uQkBB0Oh0ul0s9HVU5azhX108AkkZD5Y8/4s7NI/D++5DOUJ3a77prsfz0E6Yxda/8mJGRgcvlol27di0uZ+KSJUtIS0tjzZo1PPHEExiNLccgVeEsptieCYDZWUC4puZiKCoqNdFcequsrIzFixfTtm3bqqTyGo2GCRMaJwxSkiSiZv6GbekyTKM9eyBRWQEnRg8JgbvMsxY0DBiA5edfkKOiiO/enS5FRZSUlNCzZ89Gka8mvv76a7Kzs5EkiYkTJxJXh/2oLMtEN3APmpY/i0pXCRXOIlKjxjdoLJWWjWosawLOpg2n+dXXsPw2A+vsP4ldu7rWtrp2ycSuO31Ik3C5KH//A4TVStDD/0QymSi65x4cq9egTUkhZuECX4vfIIxGY1VSxKY6EakPnUIvxKQJUA1lKk3Gyy+/XLVI9DXuggKEw1kt15hSWkrBhJsRFgsR332DNj6+zuPpe/UiLn0r5rfexvzmW55rPXtiGjEcANOoUZhOMoC7c3Op/OVXjEMuRN+9O/bVq7H++hsAlt9+I/C+upVQ9wXJycns3LkTWZZp3br1GduHhobyyCOP4Ha76523UBFuQEKW1EwMKi2fs2UN5crIoOTRxwDQJibid9WVtbYP+e9/CPnvf05737FlC5Xf/YDp8vEYBw3k0KFDfP21x5v/hhtuoGPHxiuy4Q3H1k2hoaHoGlAJtDEI1keTEnIhCm7CDHX/v6Ki4i2+0FsbNmxgy5Yt7Nixo8kqMGoTEwm4+aaq95oa8p0qBw9S/tFHBN53H8aLhuE6dAj7vPlccdFFaOOabv8khKgK+RRCkJ2dXSdjmS8INcZTWVFCqKFp5juGxVXGkfJtxPmnEKivPQJBxTeoxrImoDE3nL7GMHgQlt9nYRx+MQCVP/6I+e138L/5JoImPXjaforVipKXhyY2FslgADyFAsxH49zliAgC757Y+B8Aj1fYmjVrqKioYMCAAQQG1s09VqfT8eCDD2K1WltkBZEgfRTdI1qWt5vKuc3TTz/No48+WvXebDaTmNjwE3l3QQG5AwYhbDaiF8xHdzRkx75uHc4tWwBPQtmAW2+p99hV+YL0erStk3AXl1D6n//g2LQZXft2hLz0ItqjhTiKJj2EY/Uayt95l7htW9H36IE2ORmlpATjsGEN/pz14eqrr+bgwYOEhIScMQTzGN5UjLO4ylie/TUyMkPib/dJFTgVlcbkbFlDyTExaNu3w52Xj65bV5SSEgrvvgdRaSH804+r9M7JCCFQcnNBo6nmzVr0wCTcBw9imTmTuN07m+pjkJuby6ZNm0hMTKxXmFdqairt2rXD39/fJ9W5fYkkSbQLaXnh9yrnLr7QW506dWLXrl3Nahh3rF1/6kVFoeyFlzCNG4/78CEKrr0ehEAODSF62VI0YWFNIpskSQwaNIgVK1YQFhbWpOHfPcJH0zVsOFq5dg9iX7O9aBF51n0U2DIYHHtzk859vqIeKx/lqaeeQpKkWr927drl1dhPP/00ZWVlVV9HjhzxsfS+w//664k/eIDQ/70EgPn1N3EfOYL5tddPm8Tf+tdf5HTrQe6gC8nulYp97VoANAkJcDRMQJvUCoDwTz4hdMrbRP7wXaN9hrVr17JgwQLWrFnDb7/9Vq++Op2uUQxllc4SVuX8wM7ipT4fW+X8pTH1FniqkwUFBVX78gXC4UDYbCAEisV6fL5BgzAOH46+f39Ml9Y9NOlETGMuJXrpEmJXrUCbnEzR7bdj/WM27kOHsC1eQsG11yGOnvZKRo+xSTIYQJaRQ0OJWbaEuPQtdU7S7Ss0Gg3Jycl1NpR5S6WzGKdiw65YsDjLGnUulfODxtZDZ8saSjaZiF68iLjt6ejat8f690Icq9fg3LoVy28zauyjWK0U3nQLOX36kdMrlaIHJyFcLgC0Rz1MNa1aIUkSSUlJ3Hrrrdx000106NChUT6D2+3mq6++Yv369fz666/1/lkHBwej1fr+HH5v6WpW5nyH2VHg87FVzk/OBr0VFxfHgw8+yIgRI7yWo6FoYk+TB0yWkXRabEuXVe31lJJSnOnpTSgdDB8+nGeeeYZJkybh7990h3+SJFUZyiqcxazJ/ZmdxcsaveBdhCkJkIg0tm7UeVSOo3qWHWXy5MncfvvttbZpW4Mral0wGAwYjnpbNRXOffuwr16D3/hxyMHB9eorycdtqP4TbsT81tv4XXdtjfkxlNJSiu57ABwOAITZTNFddxO7KQ1Dam+iFy9E2B3ou3YBQBMWiv+11zTgk50Zi8WCJEkIIaisrGzUuepKVuVOiu2ZFNszaRfSH53ctM+DyrlJY+qtxkQbH0/U/HkIqxVDau+q67K/PxFfT2vw+Lp2yQC4i4pwpG08fsPtxn34CM49e9B360b4B+9hnTcPwwUXUGm3s37FCgwGA/369WuUDV9LIFgfi1bS4xIOKp2lhBqbNoRA5dyjsfVQU6+hFEVh27ZtBAUF1Skk+kQkSaraOBoGDkSOiUFYrRiHD6+xffk772JfvrzqvfX3WVSmphJw5x1EfPYJ9g1p6Hv2qLrfpk2b+n+geuB2u7Hb7VUbvpawhhJCsLt0JSA4UpFOl7CLm1sklXOAc01vNRb+d9xOxSef4s7Kqromx8UR8u9n0ERFYRw6hPL3P/BcDw1B161bk8vY3GHfGeY0Cm0HKbQdJDGwKwG6xvOsaxPUm9aBvVpczspzmXNzN+AFkZGRDaqK0ZIQQlBw5VUoxSXY164l/P33vB4r6NFHCHz4n9UMaCfiOnwYTojJRwiUkhKUwkI0sbHo2revkmndunXk5ubSvXv3Rl3w9e/fn9zcXMrLyxkzZkyjzVMf4v07UWg9RLA+hr2lq5ElDR1CBiJLLStUQeXs4mzWW/ounRt9DsnPz7NxPemkr/iZfxP+zhR0bdvgf/31AHz70Ufk5+cjhKC4uJjLLrus0eVrDhyKFZfwHG6YnXlA4/8eVM5tzmY9VBNpaWnMmTMHgAcffNDrAhra+DhiN6wDIU67hnLu3AmKcvyCRuO5hqdCnfFCT6EP5779VHzyKXJ4GIH/eAjZixDsuqDX6xk3bhwrV64kKSmp0TzY6oMkSXQMGUy+9QCBugg2F8whKbAHoUY195iK95xrequxkDUaolevpOLzL1BycvC75ppq6zfDgAFEzZmNI30bxosuarIQzJZEtCmZI+XpBOgjMGm9j8DYXbKCg+WbSQzoSuewYadtpxrKmhbVWOYFhw8fpri4mMOHD+N2u9m8eTMA7dq1q3ei5cZCMvkBJZ7NYkPHOs0iDzyJINFqwOWudr3sldcIff3VqmpQmzZtYt68eUiSxNatW/nHP/5BcD093uqKv78/N91005kbNiH+ulAGxt7IkfJ0thTNAzwJZ2P9m38hqnJ+cDboLV8jm0wYR43ENm9+teuujRspfvBBoud6NsSKopCXl1d1P+uEE9RzjQBdKN3CLsHsLCA5uF9zi6NynnE26CH90XWLLMsN9jA90dOsJnQdO2L7e+HxCy4Xlj/nYLrySowDBwAgFIWC665DKSzyHEiWlVWlymgMevXqRa9evRptfG9oH9Kf9iH9WXDkQ+zuCkodOQyLv6u5xVI5Tzgb9FZjIms0BN1z92nv67t3R99EBQhaIlF+bbk06WFA8tqQ5XDb2FvmKax3wLyetkF9MGrP/WfrbEA1lnnBf//7X7766quq98cWFYsXL2ZYEyeFBih59jks339P6JQp+I0d4yn9O3sWji1bMQ65sFHnlkND0XbqjOukGHXLL79gGDQQ/+uuBaCoqKgqNFIIQVlZWZ2MZfkZlWz8NYPCzZlYs4pw2hSMigWT3k2bsDJ6tKvE1LcrpKZCcjLUYthrCQTpo5DRIEkSgTrvcxPtKF7MQfMmYv1T6Blx6WmVs81Vwa6SZYQZE2kV2PSu0Soth5amt5oKTXRUjdeVktKq17Is06tXLzZt2gR4ElXXhaLDlaT9epCtS4spO1CMrcyO4nRjFFb8dQ5SgnNIbVtCq8GtkPqkQu/e0EiHBPUhKahnc4ugcp7S0vRQUVERX375JSEhIdxxxx1oNBq6d+9OcHAw/v7+hISENOr8/rfdSvkHU6tdE2VllPzjnx6vNEDYbCh5+Z6bkoRr7966DS4EuWsPkTbzCNvWVlBR5sZql5EUBaNBEOjnomsXSB0bQ/TwrlDHYkjNSaghjlzLHkIbUNGywlHEmryfUYSbvtFX1lrN7nB5OsW2I6SEDlE3rucxLU1vnXMIQcmOHDbNOEjOrjKslQoOu4JBJzD5SSS0kul1WTyBF3QGfdMk1HcpDjSSrs7GL6mB1cV1sh5/bSiVrhJM2mD0msbxHlapP6qxzAumTZvGtGnTmluMKmzz/0JYrNiXLcdvrCfsUBMVhemSpkkIqeTm1HzjhGpIPXv2ZOPGjdhsNhITE4mPP3WhIwSsWaWw8ON9pC0xsyEnnkxXLND16BdoJRcucfyx1eCiC9tJZTl9jB9xee8jxI/qCnfeCaepPNWcBBuiGZF4PxISOo3RqzFcioMD5g0AZFVup2PIQPx0ITW2PVyxhczK7WRW7iAxoEuDlbnK2UtL01tNhXHEJVR+9U31i5JEyEsvVrs0btw4evfujcFgOG1oRl4efDOliNW/ZZOWEcYhZzzQhQDKCdVXYjIoSJKETdFT7jRQfCQAtkH4rEJSSaMv7zGh1Uo6j20D998PdcjtIYRAUZQWV11ORcUbWpoeys7OprKyksrKSiwWC4GBgUiSVO9cZd7i3L2nxuvihA2a7OeH/623UPn1N6DREHD36T08Mjfk8s3TO1i92UhaUWuyRWugNUGSmRBdJUaNEwCbW0epKwDz6kD4DOLJJDVgHQPaFXLLw+HE33xRtTVcSyE1cjxWtxmTxvtQp8MV6djc5QAcMm8mNLJmY5kQCluL5gMCP10IHUIGej2nytlNS9Nb5wLpM/cz9/39bNhuIq0gkQPu1sDxv0UdDpwcN4xJryl0YC+pYQdI7VDBuOv9aH//CGiEvHA7i5ey37yOCGMSF0TXnLPb10iSzOC4WyixZxOqj1XT9LQgJNHYZRtUTsFsNhMcHExZWZlPqsvZ0zZi++svAu68A010tA8krB95V1yJc/2Gate0nTsTPfdPpBNCGOx2O2azmfDwcOQTPMAqKuD7T8qZ+oaVLTlRhFBCqv9uUjuYSb1AR+rYGOKGtMMQoEOWweUCqxV274a0NEhbaSVttYP0jAAUBa6Q/+AB8QEXXR6E9OADcPHFtYZBnG0IIViZ8x2ljhz8taEMjb/jtErV7MhnY8FsIoxJdA2vOcFwtfY+fjZVzi3O1uej9PkXqPj0U09p85gYov+ah6aOVSeFgBVL3Ux9Npdfl0ehES4GaNeT2slKan+Pfkoe1Q7ZeOppZ07OUR21XmHD0kpWp+koqjAyTL+SBxxTuGJQIbpJ98JVV532tPT7779n//793HDDDbQ/mgPydFgsFtxuN4FngYdIbZytz5lK0+DL58PtdrN69WqCg4Pp1gyJqV25eeSm9ql+UYLImTMx9Dnu4SqEwH3wIFJgIJqTcqgpbsGiKVuZ+raNWVmpGLExMHIffTpVkjrYROqVrUhKjThlGSQEHNznIm1WFmmLytiwVc+qrCTsQscVfn/xwIQyLnppBFLUuZXXKd9ygHX5vwLQM2IMCQFdTtt2W9FCCm2H6B15GUH6mr2Uj6HqLZXaUJ8PcFQ6+fWZNKZ+5ceKsu4EUE6v0IOktjeTOsBAn8vjSbogBoNRQpY96RxtNti/zerRU8stbNjpx+bCBGzCyEj9Yh4Yn8XYV4egbdvKZ3L+dfgDHIoFgJGJD6LXNDylUVOhPme+RzWWNQPn2oPsKi4mb/AQRFkZANoOHYhauKCaQawm8vPhxf/Y+GqaoMKh5zJpDvdftIuRL1yIPOCCUwxcIicH9+JFoNOhuWQk0knhEWYzfPMNTH3fzY5dGjrqD/Cw4zXu7rAMzWsv477sMtxud1U+Em+oqKggMzOTtm3bNmichuIWLsz2fAL1EVWli33BufZsqviWs/n5EIqCsNvrnBhbCPj5Z3jxSTPpB4Nozx4eSPiD256IJvSuq8CLfJAOB/z2G0z9QGH5CpkYfRH/cLzB5Khv0b/2Itx66yl679VXX8VmszFs2DCGDh162rFzc3P5/PPPcbvd3HDDDS0iMbe3nM3PmUrjc649H2Wvvkb5u0cLMUkSoe+9i/+VV5yxnxDwzeTNvPRBMHscbehq2MMD47O4+a3eBCZUD/cWioKybCni0CGkLl3R9OlT45hmM3zz4iGmfqplR2k8Kezi30OXM+GXq7AH+GMwGLz2shBCUGQ7gk42EGxo+oPdE6l0liKEmwC99+kwTuZcey5VfMv5/HxUFDt49Zr1fLK0A/lKJBcFb+SBOyxc/mI/dP7138NYrfDzlCymvuNkbV5rEjnMA52W8Mh3fciPCGTHjh3079/f69zYGeY0dpesJM6/I90jRnk1RnNxPj9njYVqLGsGzsUHWVEUnJu3Ivmb0HfsWGtbIeCnn+DBexyI8kru033OPQ/7kfT4dVBL1SnX7D88rhqShNQxBc2FNedjEwKWLYOpUwU//wwDgnfyRemVKL0DmDN6NDf/4x9Ee+GB53a7mTJlChUVFbRu3Zrbbrut3mO0dM7FZ1PFd5wvz0deHjww0cFvs/WM4U8e6bOCi9+7Erm/7xLib9sGH3wAn30m6BJwmGmll9NzbAJ88gnEHQ9FyMzM5MiRI6SmptZqoN+wYQN//vkn4KkIPGrU2bXAO5Hz5TlT8Y5z8flwFRXh2rUbfY/uyHVIGJ61vZR7Rh1iTlYPropazsPP+DP4oV5Ics2GLJGTg3v2H1XvNTfdXGsBKCFg2R9lTHkmn5nb23OZbi5jxswi+tZLuOqqq+r/AYFD5ZtJL1oAwICYGwk3trxUGQ3hXHwuVXzH+fp8LPpkH3c9ZCLfEcJdXddy3wsJdL7Cd4d5acstfPj0Yb5e2Zb20j4eHfQZWRcF0LNPH8aPH++zec4WztfnrDFRExip+ARZljH07nlGQ1l+Plx7uYMbboCLzTPZddH9vLT/Blo9eQNKYQHC4ThtX+nYCYEQx1/X1E6CoUPhxx8lli2TKIjsRE/ddn7fegkTp7yH69dfvfqMLpeLyspKAIqLi70aoymocBazNOtLlmV/hcVV1tziqKicNQgB06dDlw4Ols8x87PpVv78PI8R6/7nU0MZQNeu8OGHsG6dhGiVRF/NRp5bMgxH557w1VceYYCEhAQGDBhwRk/WLl260K5dOxISEujXT61yqaJyNqEND8c4aOAZDWVCwLRHttClm8Sm7Chm/eNvfskawKBLAyAv9/QdAwKOF0AyGM6YJFuSYOj4YGZsa8+Mz4tZSz/+9ftL7H98C6LIu/WPxXl8PWJtwWuT3SUrWHBkKvtK1za3KCoqZy0VxQ4e6LuO4fe2o7Uum/Q/DvFu+sU+NZQBpF7ox2crUti4QWCKCuKeFa9TMCWKdk7VxKHiG1TPsmbgfLX6/v033HCtC8lcxgeGyVz3wVC4/XaEw4H7u2/B7YbWrdFeMhI4WgEqLQ0pJAS5SxeEy4XYswd0OqR27eocCmCxwL//DVOmCC4ITOd38wiiHr4J3nyz3tUzt2/fzs6dO+nXrx+tWvkuPt6XbC9eRIY5DYD2wQPoGDq4zn3P12dTpW6cy8+H3Q533in4/nuJ6/iR9y+eQeS01yExsdHndjjgxRfhf/8TdA86xOySgcTdeanHy6wFJtlubM7l50yl4Zyvz4fNKrilZzq/7OnOrXF/M2V+J0K7xuPesB5xtJKv5qqrkY7mY1T270dkZyH36IkUFIQoKEBkZyO1bl3rgWNNZGVaeWDMXmald+cG00ymrWiPoffpc33VhMNtZVfJMnSykY6hg1tkAmunYmf+4Xer3o9Jmoxcx8JI5+tzqVI3zqfnY8vfBVwx1kGBI5hXL13K/b9dUmNeV1/jcsFrDx3huY+iaS/t44+Xt9P2yWsbfd7GpsB6kL2lq4kwJdE+eECt+9/z6TlrKlSzq0qTMGMGjB2jkFq5nO0druK63S/AHXd4ji+F8GRxBKisxL1qJaKgAGXrFsSO7SirViKKi5G0WuTOnZHbt69Xzgw/P3jrLVi2TCLD1I0hUbs5MuVXT8VMl6ten6NLly5cc801LdZQBhBuPCabRLix8Tf6KipnO5WVcPl4wa8/uvieG/nx5Qwi//6hSQxl4HHy+L//83iZFfi35sLI3WRMWwrXX++xpKmoqJzXlJe6GdtuF7P3tOfX2//gq8zhhHY9WlXceXwdo+zcibJ5E4rdjrJ4EWLXLtzrPB5SUmQkco8e9TaUAcQnmPh9a3d++qiIGbZLGX9BHpVL1tdrDL3GRPeIUXQKG9oiDWUAWklflcg/zJBQZ0OZioqKh1W/ZDNslJ4wUcTW3w/y4JyxTWIoA9Bq4ZkPE9m4QeAMCmfwU4PY9vhXTTJ3Y5Je9BfF9kz2lK6k3FnY3OKcd6j/BVQanV9+gWuuEVzBTP7o8W+iVs6otgmVjEbkS8cg9e4NViti+3bcC/9GCj+av8xoBH//BssxeDCsWCFhM4UyJHIHmd8ugbvuOm6oO0eI8WvHxfH3MDzhHiJMSc0tjopKi8ZqhXHjBCsX25nrHsWNHw2Dp55qlgq6vXvDihUgBwdyYWg6B/9Ih5tu8njdqqionJdYKgWXddrH+ux45j+9lKu+HFdNP8mpqch9+yJ16YrYuQNl/XrE4cNw1CgmR/iumuW194Yz93cnq5T+jBthxbZ6k8/GbglIksSg2Ju4MPZW+sdc19ziqKicVaz8NZdLrguhu343i9OCaTu+a7PI0TXVwPJdUURFwdA3LmPb5C+bRQ5fEaDzeAtrJB0GTcP3wyr1QzWWqTQq8+fDhAmC6/Uz+L7L/9D/PQfCwgAQRUW4pn2Ja86fSHFxaFL7QNjRykShocjJyWhunIDmhhuRDAafyNOuHSxfDorJn6GhG8j/ei488ki1Nna73SdzNSd+umBMWtX9VkWlNpxOuO46WLPCxVznCC6aei3ce2+zypSU5ClQYgwxcUl4Grm/rfLIpGZMUFE573A64druu9iQm8D8/6xgyP9GV91zL1mC64vPEQUFyD17Ibdv7zGiSRJycDCaq65Gc8ONyD17+lSmi8YFMGd6GWuUvlw/NBfntt3HZXK7cdXTY7+loZG0BBuiW6z3m4pKS2TzwiLGXudHX8NW5m1LIKhb8x7WR8dILN4VR2KUg5FvjeLASz80qzwNITVyPH0ir2Bo3B0YNPWvxK7SMFRjmUqjcfCgx6NslN8Kvor/F5q/5laddAKI4iLPSjA3t2ojqLnkEjRXXoXmaN4yKSAASac7PmhhIezY0SC5EhPhjTe2kGc1MjL8L8S778LRpP8LFy7klVde4Y8//jjDKI1HofUw6UV/U2bPazYZVFTOB559FubNVfjNOY7Bz4+E++9v+KDZ2VBQ0KAhYmNhwQKwSAHc0D4N5fMv4LvvqrVRFIVNmzaxZ8+eBs2loqLScnnhlj38daAdM+6dz4D/G1PtnsjO9nidHtU3UmQkmhtu9BwwRkUhaTRIgYEndBCwcaMn7rwBCCEYYJnPTxPn8qfzEl4ZuRCcTsxmM2+++Savv/46hYXNEyrkVpzsLlnBvrK1KOLcihpQUWmplJUKxl/mpp2cwaw10ZiS487cqTbMZsjMbLBcoaEwf0sMAcEarvh3Fxyr0xo8ZnOgkXXE+LfHT1f/EHqVhqMay1QaBSFg4kQI05r5zjwO3bdfQmT1UAApuR3yhUPQjL0M6WiifUmWkSIiqt6fMuj06fDRR9DAapQdO8pceeUMthT15IOu73o2yQUFHDhwAKDqe1OjCDfr83/lUPkm1ufPQAhBiT0Hq6vcq/EOl29lTe5P7C1dg1rLQ0XlOOvXw6uvCp4NmsLowZWeKiANxeHwlLj8/PMGh062aQPffANLd8fwSod3sN5zD2tmzKi6v3XrVmbNmsUPP/xAfn5+QyVXUVFpYWxcXMb/fmzLv9r/zMgPrzzlvmb0aORBg5C6Hg91kgICkE5XUXPvXk/RkL/+arhwej2j+xby+MjNvJAzka3//JyCggKsVisOh4OcnJyGz+EFGeaN7C1bza6SZWRX7sDmqqDElo3wwnBmdZWzMX826/NmUO5Q8wSpqJyOx8btpsRm4tfPSwnq0aZhgwkB338P777bYMM+eDzMfv47jJ104oXx6zmybx9//PFHs+kolbMP1Vim0ih8/DEsXAifVdxI0GP3QP/+p7SRZBk5JQUpOrpug+7d69nhZmTA0qXVbomyMlxz5+BetAhRh4TY3bp144UXLuTmmy08nfEgBx1x8NBDjB07ll69enHFFVfUTSYfIyGjlY2ApyrTurzfWJnzLYszP62Tp5nDbcXu9vxzKbFlsbVoPoW2Q+wuXU525c5GlV1FpSWzevVq3nvvPTIyMrDbPfVFeoZn8qT1Ofjyy3pXxq2R9eth927YsgW2bm3wcBdf7LHjP59xL/toS/i//13lhRtwdEOs1Wox+ChMXUVFpWXgcMDtV5XRVd7JM/OH1phDUQoLQ+7cBUmrPfOAQniMZBkZntLkJx04Kps345r1O0pGxhmHkiQJzRVXIo8cybO/9aRDZAm3f3gBCUVmhg0bxuDBg+nUqVOdP6sv0WtMVa8PlW9lUeanrMz9jo0Fs8/YVwhBpbMURXgOOjYXziHbsos8637W5f/WaDKrqJzN/PVtPp+tSOGNQTNIunVowwc8cADWrPHs+Vatavh4QI8+Ov5zfxEvF05k0S1vs3HjxmaNIFI5u1CNZSo+5+BBePxxwd2RM7ikXYanzFtDObbQq6iA6OhTFnvu9esgMxOxfx/uP2cjLJZah5MkidatW/PBB36EhslMTJiH+PFH4lavZvz48SQlNU+svSRJDI69GX9tKG7hoNB2EAAFN4W2w7X2LbAeZMGRqSw4MpUjFduwuiuq3bed9F5F5Xxi48aNFBcXs2PHDp5/HvbsVphWMAbdKy94khk2FIcD5s3zlGNyuz0JG32QmP+11yA8QmFC8C8k79hZFY7Zrl07HnjgASZNmkSwF9XtVFRUWi4v3rqHnaWxTHs2A32b+IYPeOywsUMHT6j4CQeOoqQEZf06yMtD+XsB7jqEdksmE3JSa4z+WqbNDGUr3XjtitUMHTiQ4cOHo62LAa8RSAzoRseQCwEosWeh4MmflmfdX2s/IQRr8n5icdanLMuehktxYHOVAwIQVYeQKirnMnl5ebz66qt88803dYpGKSsVTLwbRhiWcc/syxsugBCeHBTl5RAY6FlH+cC7DODpd2LoFlPAG2vuI/JwLm3aNNADTuW8QTWWqficyZMh1GDhjYLbPB4bRmODxlMUWPXjEayrN0NCAsTFnbLY48SEsoWFuOsYZhAUBJ99Bgu3x/BT6mvw2GPNXnnOpA2kU+hQgvUxxPp3AEAnm4jxq31Dn1W5E4En1OBIeTrRpraEGGIB8NOGkBDQpXEFV1FpwYwbN45+/foRFzeE116D/0Z/QrcBgfDQQw0e2+GAbT9uR+zaDa1aeb585F0WEADffmtkW24KP1zwDjz5pCfXIxAZGakaylRUzjGyjii8/GMbnkn+iZ7/Gdfw8TIFO79e7zlsDAuD8PBqB45Cr6/WXixdgpJV93xBfQbqeeKOAl7ImUjuB782WN6GIEkSbYNSifFrT5SpLXrZkwy7dWDPWvtZ3WaKjh5IVjiLKXPk0TH0QqSj26SUowY4FZVzmZycHGw2G4cOHUJRzhy6/NId+yixmfjsYwUppO5rESEESmYmIi/vhGuQPjcT16p1EB/vSTCdkeEz7zKdDqb9EcEuUrAu7MQll1zik3FVzn2a5+hHpU4cOXKENWvWkJSURL9+/ZpbHPbu3YuiKHTs2PG0bY4cgZkz4YPWUwnq2Q/690dYrYidOyAyEjmxVb3nPXxI8NNHxQiiGNRO5wlHOLbYGzrUs/g7OUdHQT5CCKQaQhdOZuRIuOgieL/4Pq4/+ITHO2Ts2HrLWR9yK/eyvXgRfroQUiPHVwsdAIjxb0+Mf3sAuoRdjFYyoJFr/3ONNiWTWbHN09+vPRpZx6CYm7C7K9Fr/JAl1Taucv7SqlUrWrVqxWOPQbC/i8lZj8CHP/kk/HLDaie/flDJY7ERxB47HDjmXda9O2gaVlXt4ovhkkvg/bw7uSn7HzBrFlx9dYPlVlE5V3G73SxevBiz2cxFF11EaGhos8pTWVnJjh07SElJIfDEpPs18OkzGRiIZvIHbUGSUA4ehOJipC5dvKoMPmdaHhm/B/HCsEQ0kuQ5cExP9xw4Xnkl0sn6SZIQubkQn1DnOR5/M5YpX9n4/PVi/vVwvUWsF27FycaCP6oMWokBXavd18g6+kRd4WkrXLgUOwaNf61jGjWBBOkiMTsLMGoCCNJFojMaiTK1QREKek3DDn1VVM4GunXrhsPhICoqCs0Z1i1WK3w2O5r7Y38n6bab6zWP2L0bZfkyADSXXYYUG8ehg4Kv3ipighJG7zb+nr2ev79nHTVwoOd1A+nRR8eNQw4xddlYHtm0BblXjwaP2RTkVO4mvehvtLKe3pHjCDHENLdI5xXq7rkF8+uvv7Jjxw7mzp1LXl7zVkYsLCzk+++/Z/r06bUmRfzkE/A3ubn5wPPwwAMAKCtXoqSlocybh2veXEQ9Pbd2/J3N3r2wRep5PG/HSd5lclTU8Q6SBGHhdTKUHePBB2HFlkC2droepk6tl3zesK14YdVJZlrBLGyu04dI2t2VlNizzugSHevfgYviJzIk7nbaBvcBPKesRm2AaihTUcGzuPviC7iz1QJMraJgzJgzd6oDW2YdYt9hAzuNvY5f9KF3GXh01Jqt/mzscUeT6CgVlbOZ7du3s3LlStLT05k/f35zi8O8efOYM2cOs2fXnjvL6YRPfgnllrA5BI3s7wmRXPAXStoG3NN/QDlypF7zVpQLNs/P53BZEBkcDTuS5ereZXq9ZyN6bM0kBFJE5OkHrYHQUJgwPJ+Psy/DtXp9vfrWlxzLbvKs+7G5K9haOJ+silrysQpBsS2r1jUWgCzJDIq9mYExExgafye6o8YxraxXDWUq5w0ajYZ+/frRunXrM7b9cUoOJa4g7p18moIitWG1Vr0UVhsAOxblsnu3YJumx3Fd5GPvMoD7X4znAMn89a+lZ27cAhBCsLlwLg7FgsVVxraiv5tbpPMOdQfdgvHz87iPy7Lc7AmcAwICCAoKwt/f/7Snog4HfPop3Ja0FP+YQFxGI8rhw6A7wSPqyBEoKqrzvEIRrJ+Ridsl2GpuQ5nt6M/hpMWe1L4Dcp++EBICCQloRo6s1+cbP95jf/sw+lmYO9eTYLIR8dMed1cush1md+mKGttZXGUsz/6GNXk/kWPZfcZx/XWhBOnrt8hVUTlf+PFHKCmB+/ZMhvvua7DHF4C50MGWxcVYFQNphSfkOgwI8GnusrFjPevGD0OfgUWLYKdasENF5XQcWz8B+PvAI6GhxMfHI0kS8fG15x/7/bMCcmxh3Ds+C/fyZZ5DsmMbR4cDZVt6vebd9ddhCo5YqdCGsqPwhEPFEw4cJVlGM2as51poKPLAgche5G194KV4jtCKP/+9ut5964NJG1L1WqCwqXA2Vpe5xrbbixeRVvA7q3Onn3FcjawlzBiPTlYLpqionImp7zgYrVtI8oOj691X6tYNqVdv5AsuQGrdumqvZ7NLpJnbYXMd3TfqdMe9y3yUu6z/YC09Y3KY+lcylJX5ZMzGRuK480d9HEFUfINqLGvBTJgwgUsuuYTbb7+dkJCQZpVFkiSuueYaJk2aVFWF7WRmzIC8PLj/wOOIUaMgKxMlbQPywEFIfft5jh5bt/YYuerIkSX7yNhppV20mSKrHzsLTzAEnbjYkyTkXr3QXnsd2tGXIp0hzOFkdDq45x74Zn0KZUGJHhe5RqRP1BV0Ch1KqCEOAIPsh9lRAIBLcVRVY1JRUakbQgjS0tKYOXMm+/fXnMx56lQYnZJBstgHd93lk3l3/raTogI3ybEWdhdFUFB5fJPuS+8yrRbuvRe+W5tMaXiyp+SwiopKjbRr147rr7+eSy+9lNGj67+Zawx57r33XoYMGVJru6mvlTNYs4quvTWI3buhshLNuPFIrdtAcDByl6619q+GEKT/vBO3w0VQgMK6rHgUcXSjdfKBY0gI2jFj0V5zbf3mOIHefTVckJjF1CWdPKcSjUS4MYF+UdfQOrAXsqTFpA2m3FGAS3EghILTbatTcnIVFRXvWL/cxvq8JB4Yn+lVXmpJq0XTpw9y9x5IskzmykNk7LLRPrqc3IpAdheesE/0sXeZJMEDj5qY7b6Ug1Nm+mRMX1Jmz6PIdqRKh0mSRK/IyzBpggjUhdMtXM211tSoOctaMAEBAQwcOLC5xcBisfDxxx9jNpsJCgri3nvvrXZqe4xZs6BvxzI6796IuPNtMJchd+mKpNOh6dkTevas85zC4UCUlrLt9dmUlXSnlS6PPHcAW/Oi6J9wNPHsiYu9Y7nLGsBtt8Fzz0ksGfowly8+8ylkQ9BrTCQH96NtUF+2FM5jn3kt+8xrMcj+2BXP6Yle9qN/zHVcGHcLDreVcOPp8725hYvtRYvQyno6hQ5VTx5Uzjv27NnD7NmzkSSJ9PR0HnrooWqHDNnZnmJw03v95EkCdmLotrc4HGz5PQOIITLIzo6CQHYURDLU/5Dn/oneZT7IXXb77fDvf0ssGPQ41y58v8Hiq6icy6SkpDS3CACsWrWKBQsWADBy5EgGDBhQYzurFZYdbMU7vRcj9eoNdhtSTIxnDVWPZNRCCCgrw7JkLWlLzITKLoJsRRwuSeBQaTBtQks9DU/KXeYLJtxu4PEXhuBYvhj9+MYzUkb5tSHKrw2JAd1ZkfMt6/J/QyPpcAsXngqWkBTQg86hFxFpalN1MHk6CqwZHDRvpl3IBWdsq6JyLiGEYPXq1WRlZdGzZ0/at29/xj6zP8slnADG/KvXGdvWQQB2/LwNszWCpDgreQUy2/Mj6RFzNP3Qid5lPspdduP9ITzwpIu5v1Ry/7MNHs5nZFfuYmPBHwC0Dx5Ax9DBAET7JRPtl9ycop3XqJ5lKmfkwIEDmM0eF3ez2UxGRkaN7dLS4IKwfRAQgDR4MNrLxiHXozSvEAJRWYmSnYX7u29xf/wxG7eZMBoEEhDqKmBzbgwVjhMqN53gXSaEQDl4ENdf83HN+RNl2zbEiVUyz0BSkmf/nGYY6PEGOVpxrjGRJInMym1V748ZygAcioW1eT8TpI8iwpRUqwGsxJbF4YotHDCvp8JZ9zBXFZVzhbKj7vRCCBRFoaKieo6atDTP9wGZP0OfPj6Zs2JpGlt2mwgLl5AlgUYSbMqNrd7Ih95l8fGegsBp2gtgxw6wWBo8poqKSuOyYcOGGl+fzNZNbtxouWCwHs3gwWiGj0DS6eo8j3A4UGw23H8vwP3Tj+z6aDH59mAi/SwEiAoqKmFHwQne+Sd5lwmLBfe6tbhm/4F76RJEYWG9P2vf0eE4MLBtXt2raTaEfOsBBB5PfLdwcsxQBnCoYgt51n3E+nfAqK09r9Ke0lXkWfdxoKxx862pqLQ0tm3bxoIFC9ixYwc//PBD1X6vNtLWu+kjb0LTrXOD5xf7D5C2wobRX4skS4QYbazPicfuOuFw0cfeZQEB0DUqn7T9IT4Zz1cUWg9XvS6wHWw+QVSqoXqWqZyR2NhYZFlGURRkWSYm5tQqHGYz7NkDT/VZA717n7bCnLDbEfv3IyUkIAUFsX//8RRm7k2bEYcOerwvXCFY12ay3xJLZJDHgBQRZGefxY+/D7QlLrD8+KCKAb7bi5KzAX3eIbrFFyNJoGRlwcEMNGPGItWh4p0kQWoqpJW0B7sdtm+vlzect/hpQ7C4Smu8Z3dXogg3slS7R0qoIY5Yv45oZT0BuoZ52KmonI1069aNtLQ08vPzSUlJIS6uundAWhpEhLlJLEiD1H+d0l8IAeXloNcjHQ0rEMKzPrPba5jQ4eDQl3socHSgfaCnQYSfhR0FkWzKicGoPWaoj4ASN3yzAXTdCYvUEB3t/edMTYUNOW1BUWDzZs9JayNjd1ciS1o1l4+Kihe0atWKkqNhia1and5DfMOcfHSE021M4mnbKFlZYLMhtW2L1SqxfbtHT4nyctxLFoMiQChQrGXrnhBcWiN6uQgkCZNOsDYrnkj/E4zsIha270d8sB634iY5qIDwADsiJwf33r3Ioy9FTqh7VcwePSVk3KStstO7zr2850xV4crreHiYHNyPA2VptA5qCqlVVFoOJx4sCiGwWq0EBQXV2ictI4y74pZ78kPUgdxcKC2t4YYQlH+1mX1FoURGexwUIvwsHC4LZuWRVtX3ei4XfL8RwgfhF+FHLaq0TqR2dZC2sJPH4SKucb1JhVDIKN+ExVlKgC6cOP+O6DWmU9olBnYlu3InbuGiTWBqo8qkUndUY5nKGQkPD2fixIkcOHCAtm3bEl5DzrFNmzwLtj45s+Ha0/+BK6tXIfbuhZAQtNdex8KFsHKlx9gmZUeA82jie7sNKTcEt6wnUZ8JUdHoKiuRS8v5Zn1Hj2VLr/OkPBTgLi1Dvxk6dU4iJaYUvVbxjJOTg7JyJfLgwXUKTezTBz7+KAQhyUhpaU1iLIs2tSOjvObTZo2kR6qDA6hG1pEaNd7XoqmoeI3VasVmsxEaGtok85lMJu677z6cTid6vcf7VFEUli5dSmVlJevWXUpqUhFSMR6L0wkIIVAWL0Ls3w+ShDx0KHL7Dths8OWXnnofp+ToLyiDPe3A3x+dphihKIQqhWzNi+aVeT08i0iDwWOodw6CHVb89pdywZhw7r3X+8+Zmgpvvx2I0Ok9OqqRjWVl9jxW5HyLVtZzUfzdamU4FZV6ctlll5GY6DGA9axlTZG2rJKu5GDoX3NokzCbUeb8CXgKP2W72zB9Ohw8CKJCgoLjucakgnzc5RaigyshOBg0GqLNeWw+FM/2I6me9dPRQ0RhScX9oZvYtgau7e9mSMejFc+FQFn4N9KVVyGdYfN8DD8/6BxRQNq+IO6uU4+GEVFLegoAvebUlCE1EePXnhi/M4efqaica/To0YP09HRycnLo1asXUWdIUZGdDbm2UFK71z1y58cfPftEm+2kGxUVsD0eq8aPBFMxACadC6ei4ZO0kwzXFguishLd4VLaD/HjX/+qs62uRlIvCuKrhfHYVv+F8erGNZZlVe5gR/GiqveHK7YwJO62U9qFGuK4pNWDCKGglfWn3FdpHtQwzHpy8OBB7rrrLtq0aYPJZCI5OZlnn30Wh8PR3KI1KrGxsQwaNIjY2Nga729Y48Skd5OSuQDRvfvpBzqWeP/o91tugdFDLfibs9H7a+nUSdC1k5uu0g666vfSI/Qwkp/JY02rqKCjNoOump10lXfQNTiTLpEFBBvtaHUSg1jF/f3WHzeUHUXs2ukx0NWB1FTIL5DJajcUNm6sU5+GEqA/vTHBLRwUWA82iRwq5y5NrbcKCwt5++23effdd1m9unEro52IJElVhjLwfO5ly5aRlpbGunUuUv13QUSEx6X/RIqKPIYy8GwQ16wBwGSCu++Gzp09i7ygIEhOhuTWbpJt20kOyqdTdLEn3LugAE15KT1Me0jWHSZZOkCycxdt/POQ9RoQgoGatdx4XcOKd6SmQkmJREbKpfXWUUfK09lUMJsSe06t7dxuJ/tK17GlcD7F9kwECk7FdjTMSUXFO87X9ZNWqyU1NZXU1FQ0p8lbmJ6ezurNEr38d3uMWzWh13u+JAnJ35927Tz6qWNoHkp5BQlttHTtJtE1NJOuYhs9Qo8QYyrzeOuXlBDoKqWXfjtdtbvoqt1N16gCkkNLwGgi3nWQGyMWcGGHk3SDw4H7z9kIRalZphpI7WIjrTIFCgrq3MdbJElGL5/qoXGMrIrtjS6DyrnPuay7/Pz8uOeee/jPf/7D+PHjz+hYkLbc45manApz5szh0KFDZ5zjllugb1/PoaNOB23bQts2grauvbTVZ9IjoRj56LRCCDqFZNEmIJ82IcW0DS2hjSEbf2cpdqeGruaVTJxgaZChDCB1RCgudKTPy2rYQLXg/H/27js8qip//Pj7zkxmJr2HBEICIZSETugdpYgKFhDBhtgVda2r7tcVdXd/LPa1gLrrYkMFFrGiCKhIkd57DYQEUkjvU87vj0liQgoz6Qmf1/PkIdw5995zh3s+nHvuKfYiLPYibPaK9b6c4rRqFyHRawZpKGtmpGeZiw4dOoTdbue9994jOjqaffv2cffdd5OXl8crr7zS1NlrMmf2pBHp64Yh1YbdaqG6UKvrFwedoh1PnTgeRm/osoOoISl8sbkTBzK6EhWah1dxMfj5OaJqNcsFFxfYOJoVjL+5kLvidnHZyY/RJQ5AtancjV6lJEOXLo7fbTYoKECrYlXPqCjHn4m+sYSnN/zcX6WrNvkZQ8ksPldlmuqWRBfCWY0dt06fPo2lZM6/w4cPVzuhdUMLCgrCbDaTl2fh/HkTnd3iHQ1lF1YGL3yALff3iAh47DH4+mv4/nvHsMxOxkT0mang749COVZ+K+l6ptMUOs3xe6HNjaMJHoS1K+DGYbsZznp08WHgX/tJcUvCGPE+vYhK2e7UPnZl40TWNg5l/gbA+cIExra/v0KatILTFNlyySxM5mRuxZ6uvQOvwMsYiLvBtVWGhShP6k9Vs1gsLF++nLSC+/Hzqr4hWzOb0U+fAVYrWskk110jC3ii1wqWFkfxc3w0WZ7tiSTREcN8fKC4GNLTKx/MauFcjjupBd4MDE/kpoD/0TYzFZU32TGhT3m5uY63BSULO6m8PEev2WqeVtt30PHL2hDHeYODq0xTX9IKTtPOM5b4nJ0oKjfo5VkyG/T84tJwKcQunRPT1QAc252GjnbsO7uFo1vbsWvXLp566qlqXwSAY/21++6Drl1hyRLHtD1dgjIwnjsNvh6gK5kKIz8PcnLR2e0YHZnC6unLidw2GFUGt3RYx9WBWzHH+0Hnuq0K2THKUQ9MTLAzoE5Hqlpy/jG2piwHoI0pGg0dCjsaemICHAuxnS88Q05xChHevS863Y5oOtJY5qIrrriiwjLkUVFRHD58mAULFlQbMIuKiigqN+mNM5MnNjcbNmxg8+bNjBw5kv4XTI6t7HYKMgoxl5Zzn2reiuLo+UG5FeoAdG3bEhd5gIi2VhbnxbDhs3T8ioMJC7WjVdNglV7sxZkcP3p2Ostt/Q7QyTcVleqOOnjI8TR5QWVPC3N0sVVKYftqOaSnoxsxEt0Fq2W5l7ygLDB4Q0HDT1C7M+17UgpOoENPe89eJORVngTcXIsHVIu9iGJbAR4GX1kZU9QqbkHtY1fXrl3ZtGkTWVlZTdZQBuDj48Ojjz5KerqVv/0NPOy5VS5zrvn7o/Xrh9q5E4xGdKNGV/jc3R1uvBE6d4bPPray78dcOunc8TIYHA+jVSwGklLkS3KxP3G+R7i1x3EiInVwwFrnlTFLY1Sh3rOKMQ1VO5r5O0ez/ujhp9cqvrXMKT7PpuTF1e6fkLOfoW2nu55ZIcpp7DjUXGRnZ/P555+j1+u56aabKq0mfubMGTRNo9huxGioueepZjKBqdzcgSYTPm29mTXsMF1GtmXpz5nsP2aic1A4poKMKsaPg9Wu43huGCZLMTPi9jKpyxHcTplgXxYcOYLqd8ELRx+fssBjj4/Hvuon8PJCP+1GtCrimNlDTyEGKMhw8huqncyic2VxK9KrDwm5e7FT8XprM8+iUop8ayYmvaf08BBA4z37JSUlsWbNGoKDgxk/frzTDVj1xW63s3HjRqxWKyNGjKjUALZ79242rD2COxMpLFlMw2AwOPWcodfD2LHQsSN88oliz1eZtMtxIzC8pFKTk+NomC8np9jEyUw/OoWkcMuww/QOyUVL8q2XlTHL6lIFVffwqquT2X/0/E8uOlb2++DQaQSaw7ErO5vPLcGODZ1mIMK7hlFZoklJY1k9yMrKIiCg+knV586dywsvvNCIOap/69evp7CwkA0bNlRuLDt0kKJsPUa943ZSOTkVP7fbHTM7+vpWWbHSRUWhtb2NUIOB2YdP0PnHb1laOJyklBzaVXGHZlvcOVsUwKQ2W7ihVxLeAR6AHhXVEW3vvkqVPa1nL3SdSpbcVcoxpBNQWZmVjl06gqtIM1X5AJxTnMa+9NWY9d70DBxX54qUxe542LVjQ6+r+uHZ01B942NVsoqS2Xjuc2zKQqR3X3oGjq1THkXrdLG4BbWPXZ6enjzwwAO1zVq9MhqN6ErKqUkVOnqrVkEf1x/Vt59jiFMVFb/SBUAizm5n0dqD/FbQn07FWXhYKvd8PVvoT57NzLS265jcZjNmfQAQXnFlzL61611W2tZXqLk7GupcotHBux9RF0xirdP0ZW89q1Jsl1U3RcNoyDjUXBw6dIhz5xw9x48fP07Pnj3LPlNKsXTpUux2OxZlQEcxBQUFuLv/MbRQ5eeD3V5lb3hNp0N//fXoCwsZ4+5Op6SP+GS3G5uz+9KH1EqdaAEO54fTwT2ZmztsoG+so5e/ah+BOhkPF75wdHdHf/WkP2Jiab0pL88x4XYVdTqjCYoxVqpDKaU4krmR1MKTdPYdTBuPaCe/wapZ7X/EPzu2Sg1lAN7GIJePuyttBYl5BzDoTAwPu0UWTRJVaohnvxUrVpCYmMiJEyfo2LEjXbt2rWs2XXL48GHWrFkDgK+vL30vqKesXbsWuy0cI8VYNY2+ffsydOhQlxr1OnWCJ647zrKfVvNjfn9s+XaCzZUbyrKt7pwuCOayoN3MCFtLYFgUmpvZMTrg0CHHypjjat+7rPSdQ1Gxcx0KCq25HMxYi15zIzZg9EWf/zILqx4t5K53dIDQ0Agwh5NZdBYfY83zxImmJXOW1dGxY8d46623uLeGGZufeeYZsrKyyn4SEhIaMYf1Y+jQoXh6elbZS0QVFGA02Cm2l7RsXRDwbKtXYVv2P2zffVvtGG3NbEbT63H75ScGue/Fzd2ASVW1BB0YdVb0mp1+vsfxMv1RGdM6RkFkJBw9BlYbWv/+6Gfejn7w4D/S6HTor7wK3aDB6PpWHq5Z+uxptORX2QPlUMY6zhcmkJh3gMTcA1XmzxV9gq4iyqc/3fxHUWSterjp5pRl2OzOzxWUmHcAm3JMvHkqZ1e137m4dDkTt6B1xC74o33MojfX2MCk6XQ1vyEtLiZ483dcFnYQoxvodfbKQzoBTVN4GwqYGLIds97yx0sCLy9HT4+VK6vs8eGM0udPN1thlTGqKtF+g+kdNJFhoTfRI/AyPNz8Knzu6ebHyLYzGRQyrcr9u/mPrFVehajJpRKHunbtSnBwMGFhYUSVzvVQwm63U1jSQ9Sos2C16Sv0RlGpKdg+/wzb559hr+a6NZ0OzcMDjh4l4vgvdIkswqCKq2woAzBgI9CYQy/fP+Ya0oxGtKFD0QoL0E6ehKAgtGnT0N90c9mQTwCtew90Q4agm3ilo5dbFYry7ZipHJ9yLKkczdpIZtFZdqX9WP0X5qRAc3t6Bo4nymcAZp0nHnq/SmlSCk5wOqdyj/3qWO3FJOYdKPm9iKS8Q3XOp2h9GurZr3RBJE3TLroiZUPw9/dHV1IPqmoxNw8PD3RudooxorfZiIuLIyjItQZpZbfj/vY/mZi7GC+T1TFtTxW95HUozDoL44J3EmDMhcySnqpubo4eZStXVjtNjzNKq4Imc/V1PruycSRzA4cy1nEkcwOJeQc5nbub+OyLzxdrpepnWLPB8SJC0zQGh05jQsTDZav6KmWnyJYnz23NjDSWlXj66afRSnoUVPdz6FDF/zQTExO54ooruOGGG7j77urX/TGZTPj4+FT4aWlGjBjBE088wcCBAyt9puvcBXezotDqeCLVtWlTMUHJG1VSUx09u6pz9Chs3cpBc18yCs34m//ozZBrNZftatZbsCg9B3LaV+glomkaul690Ht7Y2jTBl2Hjth37kSlpFQ4jdamDbpevdCMld8KlMZrd0v2H310ccx7kZC7D3fDH292L3zgrA1PNz86+w3laOYGzhYc+SOP5YpmgTXL6eXPAQJM4VDSPdrfFCbDMFuxhoxb0DpiF1wwdDG/Dr2ktm6Fw4fZr3WnON+CSSsGsxkFFNv/6GER6JZDWrEPh3LDHRvKrwhavndZLRQUOP50t1U9pLQqes1Ae68e+JurX/HJ2xhEsEckHbwqvkTw07cl1LNuPUBE6yZxqGa+vr488MAD3HPPPXheMGxIr9czuOSFnlFXjB1PfMtN8K9S06B0cv0L6jIVKAU//YQ1O5+tmV3wLvci0WLXU2j7o64UZMzmaF5bUqjYm0Hz8EDXoyd6qw39iJFoZxJRe/c45nktTWMwoOvRE127dtVmJT/H5mgsKwm8SinO5h0h35KFTnO8VPU0+FV/LU7SNI1I797oNTeOZm8i35YJgF6r2Hv4XL5zCzyV7uvt9sfDf4Cp+usULV9ze/abPHky11xzDXfccUe1C6o1pNDQUP70pz/x8MMPExFReaXZyZMn4+3nTgHuDOjeg3Y1xIFqHT+OdvAgB/U9SS8wE+BeUBbjLHZ92bOep76QAruJg7klCzKVf8HYvr1jAtmNG10/f4nSulRN1ahz+Uc5krmRY1mbKLTlUfpsZdTXfvjnhXOTlT6jWexFrE36kFUJ89mSvAylnF9URTQsGYZZ4vHHH+f222+vMU35N4JJSUmMGTOGoUOH8v777zdw7po3zceHtiO7kLBOj9Xkge7wYceQgZJuubphw7Hv24uuS9eybZWUVPTIzWVXfmf0mkKv07BadBzLdzzgWZSezh5JmPUWfA15bMvuwhRjIabyQ4d0OggMhNWrsWVkgN2G7dBB9LfNdKrRKD7e8WdYwha4ZlJJ1uxsOPspxfYC2rhH0y94Eia9J4Hm9tUfyAU2u6WsJ1gps96bAptjuKheM+DhwlDMUM/ODNHPIN+aSZhHl3rJo2ieJG45x2RydOpKcotwVLDsdkescEVxMfz4I8Waia3HA/C1pEJWLlbfII7YumDNL8Zbn08H9xTcdI5K3d7sDgyIzkArXxsr37usFnOXJSU5/gxK3g996icGldcj6HK6+A0joygRP1MYJoPHxXcSlzSJQ3Uzbtw4evTowffv55OYGuqYKqKkwUyLjkZLSkJZrWgxMdUfpORl43HvPiQe8yHMOxPSS+Z3LQxGp9nwd8ujrek8/m65JOUGcMDelTAyKx6nbVvYuxe1dCl2gyM26fQGtB49nL6eo4esRGqJ0N7RCHgqZxf70lcD0D/4Wiz2ojoPwSwv35pZ4e8X1qd8jRe8wK2BpmkMDZ3BufyjeBkD8TdV/4JBtHzNLXa5ubnRp0+fej+uK2pq1AsJCeG628by4Xd6/AtdH+KMUmhr1oB/AHsMI9EVGdDrFDaDGyfzQsm1uWPSWYj2SMKgs+OpL2BbZmcmtdmC3lxu1dvyvctqOXfZyeN2QEfbTtWvputp8C+ZokIR5RNHqEc0es2Ntp7dqt2nVJCpI2lFJyts02roo5RacJLcko4RqYUnyS5OxdfkfOwSDUcay0oEBwcT7OSqPYmJiYwZM4a4uDgWLlzY6BMwNkf9B7uRlw9HOo6i2w8/YL9iAvpBjoqS5ukJhUXYT59C69y56hWUSip6GUGd2bsthECPfHIKvTmZ60MnzyQmtdnC+vRYtmd1po0xg2BjFqcLQjgWb6B7dMVhVcrTE7VvH5qHO6pr14qT4V7E9u0Q6G8jIn0nxD3vOB6UzeWjsDsVJF1hNnih0wzYlRUNHb7GNvQKnMDp3N0U2wuJ8umPUV99MK9KoDmcQMLrNZ+i+ZG45RxNg759FStPB/PnnBxSNmwgZMQI1w5S0qvsmM9gzhYH0t6YSIbNj4S0YLq3S2Gw935WHOjAvtxIOnsk4W/MY4elJ9NDs/Gi4sNbXeYu274djEZF7MnvIe4d167BSUaDmTaGTg1ybNH6SByqG03TaNu2LQN7HmXVyl7Y5r+D/tHHHI3sbm7gZoC0VFRKClqHDpUPUO5l4wF9FAVWA+5uVo7nh2JTeiaHbiLQLZuvk4dwMDeCzp6JuGlWdp0K4LIeaRXqZMpmA50Ga9bAsKGOxn0ne7CW2n7Ul+uCfgfTKMcxy73QdDf4EFrPD4Cehj967rppZjr7DcHd4E1S3mG8jUFE+w5y6XhuejPtvXtePKFo8SR2uS5uqOOZatvP2bT/i2ObslpRx4+Dtze6tjU0MJ84AZs2kRUWw76kDgR7FpBvMXAsO4J25hPcGLiOdendOZAbQQf3ZIKN2ZwuCCbe2o5Ovhd0Gqjj3GXbf0zBQKsqn0QAAQAASURBVCC9rqr+paOvqQ2Xhd+NUgoPN9fmjx4UOoVtyV+TXPhHz1aFIrPoLH6myr0Gvd2C0NBQKAyaEXcX56sWDUcay1yUmJjI6NGjiYyM5JVXXiE1NbXss9DQ0CbMWdMqnU9/m/9YYk6/Am5/DHG0790D2VmQnYVKSkK7sGtvuYreQX006QUeeLoVk2pry2Xh25gR9BMBbrkM8DvKN8mD+D55AJlWTwpsRvYf1IiNKC4bUqmyslAnTkBREWzbDu3aoY0e4/RQxO3bIS4yDS0Dx2zegE7TMTT0Js4XnqatZw1vduugs+9gEvMO0CtwAgFmRyNXD1PFifnTChzziwS5RzZIHkTrJXELevWy8sUix7We+/571xrLSnqVYTCwPyucQpMvZ91MWJWBqzsfZlr3A3ibiunVuYBPt8eyLbkrAT7FnC82cyQ9mH5hZyserw69y7Zvh15RuRgPFZXFKCFaAolDNYsb4807K0PJOZ6KX2mdJT0ddcQxRYN9x3Z0VTWWlbxstLVtz5ad4Rh0iv1pobQLSuVGnxUM8TmApkFnr7N8emY0B3Ii8NAXcfB8G1JPbCOkyx+TlKujR6GwCJKS0IKDUJdd5li+zknp6XAyN5i4/n/MQRTp3Rc3nQmT3rNBekqEe3UnueAYXm5B9AmaWFbfC/P8Y3L0Yls+KQUnCXGPcvnloxCXcuxKSUkhNzeXjh07ljTsQxv3LLbvM3JdSRr7+nWO2AFw5VVVD9NWClatguxsDvoNI73AHT9zIcfTAxjULpFbuuwiLGknQ/0P8kXSSNae74mHvpBcuzuHPAcQrZ2ueLw69i7b9ksu3TmHeXCfGtO5G1wb9p9emEhm8Tl83YJxd/Omu8flHEj/peSlgeJY1hb6h1xTaT9vYxBDw24mvTCBNh7RGPWuvaQQDUcay1y0atUqjh07xrFjxwgPr9hz51KekM/Pz7HCyY6Acdy68wm0zp3LPtPaR6Di48FsRqtqIsiSih7h4ew+FkpGgRl/fRY399zP5V0T0WldIC8Pc0E+NwTsI9rzLJ+dGcW+nEi2ZHbhusLNuJUtY1kyoaKvL1pSkmNlzOPHoFx+arJ9O8zscAhCQx3DEUp4G4NqtaqSszr7DaGzX+XFE0plFJ1lU/ISAIaF3YJ/FW8lhKiOxC0YPNiNd94JIiEgiujMTNd2LulVZu0QzZb17cgpNtHOJ4fpPXYxtH0COs3xHUb45fDYqO18fTiX74904XyBO3uTQyo3lkGte5dt3w4jAk46esx27+7adQjRhCQO1WzAVaHwNOzOjmZ0aY94Hx/HT3Y2usgOlXcq97LxpE8/zmT7UFSsMbTNMW4ZcJh2vu4oa2/IzqarzcaTpi9ZenY4q1P7kFrsy4GUIEK6lJvKorjYMUTd07NsZUwtPR2c7H2z4/ciwETcaO+ybTpNR7iX88M4XeXh5suItrfVmGZn6vekFsYTbO7AoNAbGiwvonW6VGNXTk4O7733Hna7neuuu45evXqhadCvYzrbD7Z3TPRsNqOyssrvVPXBSnqV0a4du0+GkV7gjqfRws299nBV56OYDDaUf3cC0tK4x289nVMyWJY8gqz8ELamFXGVOl150ZI69C7bfsBMnPcO8O/j0n41sdiL+P3cFyjsGHQmrPbKk/x71ND45m8Kk+e7ZujS7ENaB7fffjtKqSp/mqPk5GROnz598YT1oH9/2JoWhaYU2qZNZdt13bqhv/kW9DNucqzYVF65il6+ZzDH0gMYHrCPPwf/l7EF36CzFDom2fTyQhccgi4slH6+x3kq+n9MDNlGoTITX1QusAQGOiqW5Sp7mpP/NImJjvmA+metcfTYaFYT4ytAAzQMWs3LFQtxoZYSt7Kzs7FYLBdPWAulnbCOdL8Nj717nd+xXK+ykwWh5FmMXN7xJE8P38DwiNNlDWWlzAYr02L388jgTfQOTWZfSghF1ip6jtViZcy8PDh4EOKsmx090tzcLr6TEM1ES4lDpSwWC0eOHCGvDiuuuaJbN3DXF7Fp8x9Vc83NDf3UG9DfdDO6qnqSlnvZeDQ9EE9DEbf6fc3DPgsJy3Ss6qgZDGgBAeiCg/EJcmNWxGru77CCcHMah4orrs6pRUY6err6+qJlZaEdPeZSj43fv0zCixw6T2xei4Kokom59TqJmcJ1LS12NaT09HTc3A+wTcWR9fNaAPRDhkJwMFqnTmjRVZT9cr3Kcr1COZQWRFzbJB4b8jvXxxzCZHDUgTQ3N7SwMNxiujB+lIWnxu1kVIfTpOV7cCa7ikamWq6MmZcH+9JC6d856+KJXaBDh0HneEbz0FceRmnSe9HVb3i9nlM0POlZ1oqlpKTw3nvvoZRi6tSpdK+nXghKKc6cOYO/vz9eXn+sDnnllTBzsSfH2o4g6pVXUO7u6Lp0QQsJqdxIVqpcRc9ksHFD9wPE5m/BK+eco33Iaq0w55jm6QnR0QSnpjA7ZCM7dAMI8y3443O9Hq1zZ1RmJio5GS0pCS0316nr+vRTMJvsjN7/Njz1r1p9Nw1l3/k1lK7Ckl2cgrex8pLOQjQXJ0+eZNeuXcTExNCtm3Nz/O3evZuvvvoKb29vZs+ejcmFuQad0aULhIXB/wzTuXzd847Y40yP05JeZURFEagKmBJzgGERCZgN1mp30TToF3aW9j5Z7DoXikFXzapGLvYuW77csTbB6D1vwjPSO0KIhvTVV19x4MABAgICeOihh+rtuDk5OWRmZhIeHl5higiDASb1imfhzst4YvESdNGd0Pr2RdPrq26wKveykQ4d6K5LpYNnCl3PlqwQV1y5V4PWMQpdUiIjfRKI7rSeTK+KvWQ0f3/w9kYlJoLVipabi1ZQANXV4cqx22HhEk+u9VqDrv9k176UBpSSf5K0Qsc0FtlFqShlR9Okr4AQF+Pt7c29995bNgwTHC812/Q+Q9r2q1g9bzdTrpyAFhKC4drrqj9QuV5lRoOdidFHGdAuybESZg2i/DN4YuhGNiRE4GuuHM+AWvUu++L1JGwqlCtuq99h4XqdG6PaziLPmoG/sR2ZRUlsTP687HMvQ4A02LdA0ljWihUXF5e99SgoqDkguWLTpk389NNPeHp68uijj6IvmW9n2jR49MFi5nv/mVdXX4N97Fhs59MwXHNt9QdbtQrOnQNAn5nJYE6gNCvKakEzmiA5uVIPLw3Q9AaMKAazBRIrH1YDxzxmvr7wyy9w2WWOXmfVsNlgwQKYEb2NgHM6uKH5PIjalZ2s4nMlf9NIL0qknVfDzJ0mRF3Z7XY+//xzLBYLe/fu5cknn8Td/eJzxCSVLPOYk5NDXl5evTaWWSwWDh48yG23deHtt7swzz8Sn3ffhVdfrXnH0l5leXlw/jwBnOdy0zFIdu68wcA481GoYhRmmcxMp+cumz8fxnY5TfSJQ1DDkvVCiLorrTcVFhZeJKXzLBYLCxYsoKCggIkTJzJw4MCyz9S5c9w3+gCX7byOX+a+z5jZmehC26C1q2axnmPHHI35APHxlM4Gqwx6VEEhml05Vv8tRyv5wWAgnLOE55+Fikn+SBMSAmlpsHYtXH/9Ra9t5ZIsTuaGsOjBfNdXG25AGUV/VBLzbZlY7IUY9bLKr2hdLBYLJ0+eJDw8HA8nGredFRISQkhISNnfIyMjefjR4Wz57jQfrO/NlIwM8Pev/gClvcqSk8FkwphyhgmeZyATLlyMtyqewHiP05BeQyKr1em5y5SCd960caVxDR3vm3DxDLjIbPDCbHB0JPE3t8VN547F7vi/JMyzS72fTzQ8aSxrhux2OytXriQ5OZmxY8dWGh/vrPDwcKZNm0Z+fj59XVxxrSalFcfi4mLsdjva2bOQno4pNpZZl8fz35/G8ne9F6ZNm9Cuvrrmg7m5wZCKc3U5KmrOzTF2UR07OlZyKi6uMdkPP8CpU/CA99Nw/50ur/7UENIKTpFWeJpAczjhXj04k7vPMfeHZ2xTZ02IammahtFoxGKxYDAYyhrTL2b48OFYrVZCQ0MJCAi4+A4u+OWXX/j999/x9GxPYeEdfDL4dWYvvBP+9reae0wUFDi6e3TtWn2auoqJcVT0iouhhkbFnTvh99/hy7YvOR5cw2ReCyGqkpCQwOrVqwkLC2P8+PG1XrXuuuuuY8+ePXR2cs5TZ9jt9rKh5kVFRRQWFrJt2zYiIyNpBwzvlkp3r3je3TuCMV4FaIE1zJVqtTp6x1or9nIta+yqD506OT0lxfwXUumjnWTwnPp/AHWVxV7EqZxdoCDI3JET2duwKQttPKJx08kE/6L1Wb58OQcPHiQoKIjZs2c32Hk0TaNHj+786Zks7nx0HMdf/YhOf59V807p6Y5Y0lDat3fU1bKyLtpYtvmXfHamtucfN/5cYeRSQ9A0HUNDZ3AqZxeebv5Eevdp0POJhiGNZc3Q8ePH2bJlCwA//vgjd911V62PFRNT/z2QRowYQWBgIKGhoRiUwvbjD6AUOg3uezaC1742sbjv37l987yqx66Xd889lTbZtm1DHTqIbsRIdJGNs/Lj/PkwoGMq/eN/hXv/0yjnrElqQTybk5cCGseyNtE/+Do6+QzApPeQN6KiWdM0jVmzZnHgwAE6d+6M0ejcHHve3t5MmjSpQfLk7e2YbDoiQs9118H8XVfxQEYm2uLFMKuGSp6vL8yZ0yB5ctWCBRAeXMikpHfhgTVNnR0hmq0VK1Zw7tw5Tp8+TefOnelUy4c0b29vhg0bVq95M5lM3HnnnaSkpNC9e3d+/vlnNm7ciNFo5KmnnkI/cCD33ZDKIwuv5lz854TX9OIuJgaefbbCJpWTg23F9+Dtjf6KiWiN1MMr/riN7w9F8d7Qj9CC+jTKOWuyJfl/ZBQ5uvT6GEO4vN29FNpz8XYLcnp1dCFakvz8fKB+RhKlpKTwzTffEB0dzejRo6tMc+M9vjz+VC7vzbfy0ov26nuTahr85S91zlN9mf9/Z+iIgQlzRzfK+WzKQkZREgadUWJPC9V8+kmLMn5+fmVvQoOqWj2yiRkMBnr16uXolmswOB4oNQ0CAomO82PiRI3/l3YPBUmZ8PLLLh9fHT0CBQWoU/H1nveqrF/v6Fk2O+MfcM01EBV18Z0aWFrBKRzvhhUaGucLT+NtDJKGMtEiBAYGMmLEiGazpPrgwYN56KGHuOWWW3jgAThwzMh3cXPgH/+Akgpmc5aQAIsWKe51/wRD924wcmSjnt9mt6JUNfOuCdHMlNabdDodfn5+TZuZKoSGhtKrVy/0ej1hJT1EQ0ND0el06Pr04bY3BuDtVsgzL5rh/HmXjq3OnYPsbMeKRY0Y256acpQA0rnp5X6Nds7q2OyOh1PHPK+K7OJkNE3DxxgsD6ui1br++usZO3Yst91W88qwzti7dy+JiYn89ttv1S5i4OEBd07JYkHGdE6/9HmVaZqbPRty+GJTB2b3+A1dx8bpjHEqZxdZxec4lrUJm71hFrASDUtTl+JSHk0sOzsbX19fsrKy8PGpegnZ5ORkzp8/T5cuXTAYmkcHQKUUKSkp+Pn5VZhPSNntjolgS3qQHD4MffrA/T3X89quy2DHDuhR/bLhKicH+549YDKh690blZKCOnkSXa9eaNV8P/UlPx9694aQ7KP8VjAQ/YG9UMthr/UpOf84W1O+RENDoegXPJm2ng04FKyEM/emuHS1hvtDKcdiJHt2WNmfFY7f/TPg9debOlvVUgomToR9m3LYl9Uev7XfNGpj2emcPew9/xNGvSfDwm7Cw1B5haf61hruM9FwLnZ/WK1Wjhw5QlBQUIW5dppaQUEBeXl5lV6CFhYWYjKZKjTkfPxmJjP/5MfXo15j8q+PVXtMpRTqyGFUcgpadDRaSAj2HdvRvLzRxTbOlA3/+1ciNzzSjs+u/JQZ39/SKOesiVKKdUkfkW1JQwM83fwZ1faOBm8ok7glatKS7o/09HR++OEHoqKiGHLBVDnlZWVBj3bpxBTuZOWxaLQOjdMAVRsWCwwKO4UlI5dth7wxdY64+E71IL3wDLvSfiTEvSM9Ai9v8PO1pPuspZDGsibQUm/krVu3smLFCoKDg3nggQdqTPvqq/Dkk4p1kbcyLOiwY7Kdahr9rP9b6pjkWim0mFj0wxtvWd3HHoMF79jYXRxDlw+ehjvuqPMxrfZi0gpOEWAOx6iv3dwYSilO5ewiuziFIPdI2no6t6Jg+f23pCwjs+gcg9pMxc/kXA+flnpvisbRWu6PM2ege3e4vus+Fm7r5ZjAesSIps5WlT74AO66C1YYr2XivRHw5puNev5fE/9LrsXRuyXWfwxRvv0b/Jyt5T4TDaMl3h82m43XX3+dvLw8pk2bdtEpMpSCyf3OsG2Xnv2f7CTgliurTGePj8e+6qeSecU09NOno5VbpbyhpZ6z0b19NsPNW1mWPALNo+7zgWUWncOubASY29X6GLmWdE5m78CgudHRJ65swm1npRWcYlvq17Rxj6ZvcNXf/YVa4n0pGk9d7o/jx49TUFBAbGxsredgbCgrv8zjiimevB/zOnfvf8TpOQ4b299vO8Lzn0Sx+f++Je7vNazc2YwU2fLZePYzdJqeoWE34aa7+BxrEofqX/MqcaJZKyoqqvBnTR55BAYP1phl+w/52w/CSy9Vnzg721EzBFR2Vn1k1Snr18Mbbyj+Yf47Xa7oVPPcRS7Ykfot21K/KplzrHpJeYdYefptDqT/UmG7UnY2JS9hX/pqkgtOEGByvaebTVlILYjHYi8gvfCMy/sLUd/y8/P57LPP+Pbbb7HbKw/ps1qtVW5vCOHhjs5kH27twYpujzkayZvhcMyEBHjsMcWskO+Z2H4fzJ3b6HkI9XBMbq5DT6C5vcv7F1pzscsQTnGJU0pVmNj/YjQN3vuuHYVu3jx8d371wzFL60xKgbI7Vu5tRA9ecRSb1c6Cz/zqraFs/dlP2HjuM1IKTlabzma3sPHs56w58z65xRW/m9SCk6xN/JBTOTsx6IwuN5QBpBaewmov4lz+EZf3FaI+HTp0iE8//ZRly5bx22+/NXV2KplwvSd3TjjD4wfv5PS8z5o6O1XasyGHFz/pwNMdlxD3t2ubOjtOyylOJc+aQY4ljTxLTcuBioYkjWXCaUOHDmXGjBnceeedF02r18PChZCQauaumA3Yn30OvvyyyrS6fnFlO+l69a63/KrcXOy7dmI/U7mxKCEBbr7JzmDv/fxJexPef7/e3oaUjkm3KWuN6c7k7sdiL+BUzu4K23Ms5zlfeBqAIlturSprBp2RfsGTiPYdTIR3L5f3F6K+HT16lKNHj7Jjxw7S0tIqfJacnMy8efOYP38+NputwfOyf/9+/P2/YuxYK3ef/ydnEpSj+1YjNdY5o6gIZs4Eb3s2r6XcDP/970VXeWoIXf2GMyLsNi4LvwdfUxuX9j2ds5fVZxbw+7mWMZ+JEA3FYDBw7733cvPNN9O7t3P1nLbtNN581cqiwqm81v+zKhv0tejOUNqTrF04BAfXS36VUtiPH8e+Zzeqmsa9ebcfYMnubrxz9Q+0mTSwXs5rL1dvqml+nxzLedKLzlBgzSKl4ESFz07l7Ebh+H/kePbWWuUjyqc/UT4DiAu+plb7C1FfsrIcDeKappX93ty8ujgcX08rU/7SjZwfNzR1dipISSjihvGZdNUd5a8rhzfbnm9VCTS3p5vfSGL9x+BrbB5zAF+KmsdkWKJF0Ol0dOnSxen0XbvCJ5/AjTf2wi9qBe9Mn4T27TcwoeKy4ro+fdC6dQO9Hs3NrV7yqpTC9t23kJMDgHbNtWglc5ekpsK4sXZ0aaksVdeiX/2NY9nhetIvZBLn8o8S4l7zQgHRvoOw2S209ao4HMPd4IObzoTF7qig+hhde0AtFebRpVHmORPCGdHR0XTq1AkvL69Kc/ZkZmZitVpJT0/HYrGg1+sbNC8rVqwgPz+fe+8N4fHHhzLebQe/fRFNkN+D8M47TV6Zslrh5pth4zorK62T8Xv1uUaf1L+UpmkuN5KVKh2+mStvRIUgICCAgIAAl/a59SE/Dm5P5PGPHsJn4Bvcte0+KLdCpubhgf7G6VBYCO7u9TYvlzp+DPsvJb3eExMxTKw4FPHdRw/x9EexPNdtCdOXT6+XcwIEmMMZGDIFm7KW9Wqtiq8xhEjvvhRas2nrGXPBZ6Gcyz8KgF8tHzCNOndi/EfJggCiyfXt25eUlBQKCgrKVqa02+1lwzFTUlJYtGgR4eHhTJ06tUnuWV9f+Ga1J6OHd+Waq7fz/a/bcR8e1+j5uFBmqoUJPRPJzndn/SfZmDp3b+osUWDNwaT3QKddvJ6raTqi/QY1Qq5ETaSxTDSoqVPh3//WuPPO8dgjvuKdSdeiX/wZXFdxvLhW0/LoTlAFBahDB9HCw9GCQxxDEsoNR1A5OWghISQmwrjL7WTGZ7KeMbT75h2o76Xh9Z5Eeve5aLoAczhDwipXMt10JoaH3crZ/CP4m9rWat6O+Oyd7E9fQ4R3b3oGjnN5fyHqm6enJ7fcUvXkz126dGHq1Kn4+vpirmMscMbIkSM5ePAgo0d3YfVqGD7ch3HhB1m5IIYQgLffrn4Z9AZmscDttyu+Wq740n49o/46yjG5YgvUxW8o7gbvWg0lF0I4/GNhO7IyznD3N49Q2PtNHtw2C7y9yz7XdDrH0nR1YI+Ph5wctNhYNL0esnP++DA7u0LaN+7ax6Mf9ODhiK94fuc11c5HW1shHhdfkVzTdPQMHFvlZ9G+g3A3eGOxFxLuVf3iUtWx2ItYn/QJxfYChobehLcx0OVjCFFfjEYjkyZNKvv7smXLOHDgAFOmTCE2NpbTp0+TnZ3NoUOHsNvtDf6ysTp9B5v4foWNCRMHcuXorXzz/Ua8JwxtkrwApJwu5IpeiZzK8ue3t/bQ6ZbRTZaXUmdy97MrbQV+xjCGt236xVCEc2QYpmhwd9zhGEH07zNXMCP0Z7KnzHLMYVaPw63sW7Zg37YN2w8/Ao7Ko27oUHB3h8gOaJGR7NkDwwdZyD2Zwm+Gy4n+8Z1KvdyaC083f6J9B9VqjiCAlIITKFTZ21UhmjNN0+jevTvhjbQS7aBBg7j99tsJCgqic2dYswbOWQIZ0eYIp99dAbfc0uhz/4BjlNWU6+ws/cLG5/YbmfxCf3jhhUbPR20V2wpYl/QxaxM/pNCai0FnpKNPXK17pgkhHB1d3/4qnMemneGhIw/zVOdlFO05XG/HV7m52Ff9hH3T76jDjuNqMTHQpg14eqIb4njgLcq38cTobTz6QQ+e7vIlbxyeiGa++ITTjU3TNMK9utPRJ86pCbEvlGfJIM+agcVeSEZRUgPkUIjaO3bsGHa7nfj4eAB69+7N6NGjmTZtWpM1lJUaPt6DlT8odmr9uGyiifjXl5fNSd2Y9q8+y4huKZzN8mTt/AP0eHB0o+ehKoXWXAAKbDkXSVnRmdx9HEj/FYutsCGyJS5CGstEo5g1C5Yu1fghYzA9vOL56ak1jh5dhw7Vy/G1wJKhDQH+2LZuwb5vH1q3GAy33IoaM56//0NH/342vJMOsT70Brqs/TeMGVMv526OuvmPpL1XD/oEObeKkxCXsh49HAt+FLv70dvjCB//zwPVs2SVzEby++/QN7aI1SuK+IZruOHNkfDcc00+JNQV6UVnyCpOJseSSlrJvItCiLrTNHjli3Be+lMiryXfTP8+Frb/6eP6eeloNDpeLGoaymbDtmE9FBVhmHwNhptuRhcRwdb/naJf0GneXNuL10Z+xdz9k5tlQ1l98DW2oZvfSKJ8+tPOxZXIhWho06ZNY+jQoYwsmZrBzc2NUaNG0bVr3addOXPmDAcPHqxysSWLxYJyouFr+HgPfl3vRop7JD0eG8eC3u9iTzpX57w5w2pRzJ2ylX7jAtBZilj3+Rl63j+8Uc7tjCjf/vQLnsTQUOeHrhdac9mV9gMnsrcSn7OzAXMnqiONZa1MTk4On376KatXr27qrFRy/fWwd69G5wF+TGAl9xx6lOzeI+qll5muR0/0N9+C1ikatWsX9t83Qno6e/bAoD6FvPC8nT/b5rL1/oVEHPgR+vevp6tqnnyMwfQOmkiwe4emzooQjS4tLY0NGzaQkZHh9D6dOsH27XD1dUZmWv7D5MyPSRo9Ax5+uEF7mRUUwJOP2xg+zI7f6d1s73QjV2x5ER56qMHO2VCCzJGEeXShjXs0bTw6NXV2hHDZ1q1b+fDDD0lOTm7qrFSiafDkG+3YtsmGIcifQW/exF8jPqJod91eOmpGI/rpM9Dfcitq9y7UgQPYtmwGHL3Jnrl8C4NvCMfdnsuOhXt4dO219T70sjnRNI1ov0HEBoxBr6ufeXSFqC8dO3Zk3LhxeHm5vsprTc6ePcsHH3zAkiVL2LCh4iT9Bw4cYO7cuSxfvtypY/UZZGLfuSBuGZ/CA3vvZ1zkYeLf+KpBe5kdWHOWoUFHePbLfjzSYw07E4KJnt68nvV0mp62nt3wdPN3eh+j3h1vtyB06PE3uT4tj6g7aSxrZY4ePcrx48fZsGEDxcXF9Xbc48eP85///Ie1F/S0KCoq4uTJk1W+hahKhw6wejUsWACf26YRazzKy0+lcT5qALz8MlywSp4rNA8PdCEhYDCwO60d984soH9fK5YDx9jUbip/XzsS0zuvNcmKctVJyT/J0czfyybzF6Ils9vtrFixgmXLljkVf/Lz8+s1ToFjcY8PP/yQ1atX8/HHH7u0b0CAY1GSr7+GbaahdHc/wYJ3NfK7D4D33oPc3HrLp80G3y230LdTNm+9bmUuf2HDM98Ts28pxNV9Yly7srHh7GesPP0W6YWJ9ZDjizPojMSFXMOANtfVaviTEE1t7dq1nDp1ij179tTbMa1WK19//TUfffRRpZWAz54961KjPkDvQWa2JLbjuTuT+GfSrcT0MfJy7084//X6Wj+MagYDmtmMVjIU/nyxH/Ou+o2uvmd59ec+/G3ID2xKjqLH7c3n4dNiK+Ro5u+kFsQ3dVaEaPHyy622m3/ByrupqakopTh3zvkeYt7e8O7KKFb9L4tjxlh6PDqWR9ou4fDL3zgWJKknu5Ye5Z7Y9fQdG0BOvo4Nr25m3t4rMYf61ds5mpJO0zOy7e1MiHyYIPeIps7OJUkay1qgtLQ0Vq9eTUpKSqXPYmJi6NWrF+PGjcNoNNbbOX/66ScSExP59ddfyS432evixYv5+OOP+e2335w+lqbBffc5epmNudaPZ93+Sbszm7j96TZsaXst6raZsGEDuPgQXVQEny8xMPrvV9D/L1fx/fcaz/u/ybaXf6H/4UVNtppcdYpthWxJWcbhzPUcz9rc1NkRos5SUlLYunUr+/bt48SJEzWmTUxM5JVXXuHNN99skAaz8n8CnDt3jl27djl1rsmTYf9+jck3mJltfYN2SVt49L4CDoeOcvT4OnCg1nlLTYV5T2cQHZjOpOvdCDy7l50D7uXPW2/A8I8XwFQ/jUx5lgwyihKx2Atl7kIhSiil2Lp1K5s3b65ySNGECROIjY0lrh4arEsdP36cXbt2ER8fz8aNG8u2JyQk8O9//5v58+dTVOTaCzM3N3juPxHs2GJj+IAint17I+2u7c/t/l+x+YmlqLOuD3uyF1nYciSIO/7ZnYhJfZizYiCj259g1+eH+MvGqzH4Np8XjQBHs37ncOZ6tiQvw2qv3/9DhLjUREVFMXHiRIYNG8aoUaMqfDZs2DCuu+46brrpJpePO3aKL/vOBfOnaef47Px4uv15MmN9NvPldZ9gPXy8VnktzCzk09m/M9RnH32ndWbF4SieG7OenQnBDH6s6RYVaCiapqHXWm9v3uZOvvkW6Pvvvyc+Pp74+HjuuuuuCp+5u7tz3QUrTdaHjh07kpKSQkBAAJ7lemaVrlxXmxXsOnRw9OJ47TUd//2vkXfn38xHp2+jw+cJ9P9kE3H6F4iLyiRuqImAYTEQG+voFWY2o6w2Thyzs32zhe3rC9l+yJNt5zuQpXy5jG38b+CnTH4hDrfxjzTZqnYXY9C54a73psCWjZdbw662lGfJJLXgBG09YzDq3Rv0XOLSFRwcTK9evSgsLKRDhw41ps3OzkYpRX5+PhaLpd4a9zVN4/bbb+fQoUPExsYCjuHp//nPf7DZbBw/fpwpU6Zc9DgBAfDRR/D88xrvv+/Ff95/iDfSH+Hy935j4tsfENcll34jvfAZ0t3REyw21vEEe4GiAjt7vz/N9hXJrN1oYNmRnmjKneluy1g87RwD5lyJFvthvVx7eV5ugXT0jiPHkkqkd+96P74QLVFCQgIrVqwAHPEqKqriyos9e/akZ8+e9XrONm3aYDQaKS4uJjIysmy7W0m8MBqN6GpZT+k5wMzHW2J4NUXx32dP8O6iYXz0agi+r2bSz7iBuPbJxPVV9Lk8EN8O/rj7GsFgoCCziMxUC7vXZrJts5XtJ/zZkdOZbHoSZTjFPyauZ9ZrvQjs1rxeMpbn5RYEgLvBB10DPkgqpUjKO4RRbybYvWODnUeIpqRpGgMHDqzyM4PBQK9evWp9bG9v+MfiaJ4rgv+9lcT81yKY8tUovL/Kpp/bRuLCk+nf10bcuAAiR0Rg9PNAczejLFaKsgo5viOL7T+ksH2bYvupQHbmdSGfIYz138aXT2xg0osDMbi3rXX+hKiJppyZrU/Uq+zsbHx9fcnKysLHx8fl/detW8fPP//MiBEjuOyyyxogh5UppTh//jy+vr5lFTxwDLvKzMzE398frY4TUdtssHIlrFllZ/vaHHYccCenyPEAbaIQdwpww0IhZgpwx4ojH+21M8QFxRPXLZ8p19mJubEXtG0ZQdNmt1BsL8Dd4Pp94Iq1iQvJsaTRzjOWvsFXVZuurvemaN3q8/5QSnHo0CG8vb3rdRXM4uJikpKSCA8Px1Ayr05GRgZvvvkmANHR0dx8880uH7eoCJYuhQ/+Y2fLJjv5RY5jd+YIfdlJgD4Ld283dG46CjRPci0m9uZ3Yl9RNBaM6LHSw3iEW7ptZ9btisC7r4d6nnOktZA4JGpSl/sjNzeX9957D7vdzr333tto91dBQQFFRUX4+flV2J6Tk4Obm1utXjhWxWaDX79MZ9OXSWzfAdtPB3O6sObVaCPdEokLSyKup4UhE3wYdV8MOremXVXPWfnWLEw6jwadW+xc/lG2pXwFwJh2d1U735DELVETuT8q2vV7AT/OP8G2rYrtp4OILwgt+0zDjhsWiqnY076z6RRx7c4R19vGpLva0PXKljc3aq4lnYPpazHpPeneAPMiyn1W/6SxrAnUx41ss9mafInghma3w7FjsGMHpCUVU5CYjqXQilkrxuyuEdXBTr/BRkL6hbeoFeOqkm/JJDHvEO28YvAw+Nb78bclf8W5gqN08RtKF79h1aaTICtq0hLuj//85z8kJibSqVMnbrnllrLtBw8eJCEhgUGDBuHrW7cyZrPBvHlfs3Wrney0SGy5UeSkFVGQD3a7wl1XjLublZigVOKis4i73I9e10fj3i6grpd3SWgJ95loOnW9P0rnWK1tb66WJi1Vse/nFPJS8ijIsaLZrJi93fDy1dP9sjYERTav4ZWuUkpxJm8/GhrtPGPr/OL2QllFyaw/+ykGnRtj2t2FUe9RZTqJW6ImDXF/KKXYuXMnOp2O3r171/u9X57NZuPEiRO0adOmQe7v82mKHStTObcvjYJcG8UFNkxmcPfUEx5lpO+1kfi2qZ+XCk1p07klJauFK2L9xxDlW7/zQEocqn8yDLOFau0NZeAYPdmli+MHjEDoRfZoGnZlJ7MoCW9jcK0ntd5zfiVphafJKEpkYJspWOxF6DR9vY1RjwuZTIE1p8F7sAnR1NLT0wE4f/58he0xMTHExMTUuG9ycjK+vr4X7eWh10O/fiYsls10725j6tR+1aSMqma7EKKpXCqNZKWCgjVG31hz77KmVGDNxmIvxMcYUqv9M4uS2J32A+AYfu5rDMFiL6q3KSd8TW0Y2/5+dJpeFi4RjaawsPCidZGEhAS+/fZbAEJCQmjbgKNqvvnmG/bs2YPZbOaRRx7BVE/zq5YKDNIYd3MIULs40JiKbflkFCURZI50uWeYm84MqJLfJZ60BJdWjaGeTJ48mYiICMxmM2FhYdx6660kJSU1dbZEEzmQ/jMbz33OhrOfVjlhsDMCzRGARoA5nNM5e1l5+k1WJywgt/j8RfcFx9ulfefXsPHs5+Ra0it9rmk6PNx8G/StkxDNwY033khcXBxTp051ab/du3fz7rvv8sEHHziVfsKECTz88MNOzX8mhHCQ+pMor8CazS+J/+G3pI84m3e4VsfwcPPDpPfEpPfCqDOzNmkhPyW8zb7zq50+RmbRWdaf/ZQjmRur/Nyk95AH20tcY8auH3/8kXnz5rFu3boa0/n7++Pp6Ym3t3elId6uSk5O5sMPP+Snn36q8lmm9AVkYWEhhfW4mmVLtPHc52xNWc7u8z+6vG/PwHF09h1Cz4BxhHv1aIDcifomjWW1MGbMGJYsWcLhw4dZtmwZx48fd/nBTLQehbbckj/zan2Mzn5DuDLyMaJ9B3EqZycAFnshZ51cxS7fmkV8zg7Si86QkLO31vkQrdel8pAaGRnJ1VdfTbt27Vzar3Rols1mcyq9pmn1MlejEJcSqT+J8iz2IuzKEXNrW4cy6T0ZG34/Y8PvI9eSUfbC8FTOLqePcTJ7B5lFZzmSuQGb3VKrfIjWrTFj19mzZyv8WR1vb28ef/xxHn30UTw8qh4e7Kz169dz6tQpfv/9d1JTUyt9PmnSJHr27MmkSZPqPJVFS2ctiRG1iRVGvTtd/YcT6dNH6o8thMxZVg+++eYbrr32WoqKiipMfl+d1jieOC8vj2+++Qa9Xs+kSZNwd790VlwstOZyJnc/we4d8DXVfajD8awtHMxYiw49Q8Nuws908eGnStnZnvIN2ZYU4oKvqXU+WuO9KRxef/11hgwZQlhYGImJiTzxxBMAbNxY9Zv0qrTm+0MpRWJiIgEBAXWudIq6ac33majI1foTtM77Y+fOnezYsYOBAwfW+2qczd25vKMU2nKI8O6NTqvbFCPFtgLWJi2kyJZHmEcX4kKucWq/tIJT7Er7gRD3KHoFja/VuVvjfSmq15DPfpmZmRw6dIgePXrg1UgLAe3evZuvvvqKgIAA7r333npbobw1yrNkkFZwijDPrvU23Lu+SByqfzJnWR2lp6ezaNEihg4dWm2wLCoqoqioqOzv2dnZjZW9RrN9+3aOHDkCQEREBIMHD27iHDUes8GLaL9B9Xa8Tr4DaePRGTedEZPeuYl3NU1H/zbX1lseROvz6KOPlv0eGRnJ008/zbXXXovFYrmkY1cpTdPqdVVOIUTNnKk/QeuPQ3a7ne+++w673U5KSsol11gW6tm53o5l1Lszpt1d5Fuz8HYLcnq/IPdIxra/r97yIVq3hn728/Pza/TnqN69e9O1a1fc3NwafV7stLQ0VqxYQUREBKNHj27Uc9eGp5t/taviitZHhmHW0lNPPYWnpyeBgYGcPn2ar7/+utq0c+fOxdfXt+ynffv2jZjTxtGuXTs0TUPTtDpPMJmens4PP/zAqVOn6il3LY+Xm7/TDWVCuMrZh9RLIXaJPyTnn+Bc/rGmzoZo5VypP0Hrj0M6na5s2Hhdr00pxdatW/nll1+wWq31kb0Wx6Az4mMMliFOot619mc/s9ncJAvIbdu2jZMnT7J27VoKCgoa/fxC1ESGYZZ4+umnmTdvXo1pDh48SLdu3QBHK3h6ejqnTp3ihRdewNfXl++++67K/5yrervQvn37Zt1F0mq1smHDBtzc3Bg8eLBTq0dlZWWhaVqdr+nzzz/nyJEjeHl58fjjj9fpWC2FUoqkvENomo62nl2bLB/Sfbd1e+qpp3j77bfJz89n8ODBfPfddwQGBlabviXGLlE7GUVJbDi7CIDBbW4kyD2iyfIicahlacj6E7TMOHT69Gn2799Pv379aNPm4tMi2Gw2UlNTCQ4OrtPD6tmzZ3n//fcBxxxD/fpVt1Jv65JvzeJc3hHCPLvhbvBukjxI3Gp55NmveUhMTGTZsmVERERwzTXXSEN3HUgcqn/SWFYiNTW1bKWP6kRFRVU5hvvMmTO0b9+ejRs3MmTIkIueq6Fu5GPHjmG1WsuCel1s2bKFH35wLMV9ww03EBsbW+djOmvjxo2sWrWK7t27XzIT/6YVnGJT8hIAhobOIMDcNMPBJMi2LA39kHohuT8uLjMzk2XLlmGxWLjmmmsICwtr6iw5JdeSztrEhQCMaHsbPsbgJsuL3GctS2PWn6Bh7o+8vDwOHjxIly5d6uWY8+bNo7CwkMDAQB588MF6yKFzCgoKmD9/PoWFhdxxxx0tJv7U1fqkT8ksPkugOYIhoTc2SR4kbrU8reHZr7lSSnH48GE8PT1bRK+6xpSQs4/M4rN08Rta76OILrX7rDHInGUlgoODCQ6u3cNB6Spq5d8gNLbU1FQWLXL0Cpg1axYREXXrFVB+pZPGLmxDhw6lX79+mEyXzjLdJr0nOvSgIcMvhdMef/xxbr/99hrTREVFlf0eFBREUFAQXbp0ISYmhvbt27Np0yanH1LFxa1bt47ExESUUqxatYrbbrutqbPkFC+3AC4LvwdQuBukgiWc19LrTwDff/89Bw8eZP/+/cycObPOx/P19aWwsBA/P7+6Z84F7u7uPPLII9jtdqcXTGgNPN38ySw+i6fBr6mzIlqQ1hC7mqsTJ06wePFiAJ544gk8PeXZBsBiK2T3eUdnFDedmW7+I5o4R+JipLHMRZs3b2br1q0MHz4cf39/jh8/zl//+lc6derUpA+c7u7umM1mbDYb3t5174LetWtX7r77bgwGAyEhIfWQQ9eYzeZGP2dT8jYGcXn7ewENk15W4hPOkYpe8+Pt7Y1Sql6GpDe2phq+JC4NzbX+BI5YevDgwVrH0wvdfvvtJCYm1vnFZW3o9fommXeoKfUJmkhnvyF4GmTSbVH/mnPsaq58fHwwGAx4eHjIyprlGHQmAk3tySw+S5A5sqmzI5wgwzBdtHfvXv70pz+xe/du8vLyCAsL44orruDZZ58tm6D1Yhqqi2RxcTFKqUuqR5aoX9J9t3WqrqKXnJzM/v37nY4Zcn9cnM1mY8uWLVgsFgYNGiTxuBbkPmud6qP+BA13f+Tl5eHh4SHz5YhakbjVejXnZ7/mzGKxoNPpLrnGe2eUvlStb5fifdbQpGeZi3r27MnPP//c1NmokrTcCyGq4uHhwZdffsmcOXMqVfSkMad+6fV6edMsRBWac/0JkGFCQogqNffY1VxdSkPBXSUvZVoOaSwTQohWTip6QgghhBBCCOE8XVNnQAghhBBCCCGEEEKI5kIay4QQQgghhBBCCCGEKCGNZUIIIYQQQgghhBBClJDGMiGEEEIIIYQQQgghSkhjmRBCCCGEEEIIIYQQJWQ1zCaglAIgOzu7iXMiREWl92TpPSpEeRK7RGOQOCRqInFINEcSt0RNJG6JxiBxqP5JY1kTyMnJAaB9+/ZNnBMhqpaTk4Ovr29TZ0M0MxK7RGOSOCSqInFINGcSt0RVJG6JxiRxqP5oSpoeG53dbicpKQlvb280Tavz8bKzs2nfvj0JCQn4+PjUQw5bjkv52qH+r18pRU5ODm3btkWnk1HaoqLaxC4po3L9rl6/xCFRE6lD1R+5dqk/icZR17glZVWu3ZlrlzhU/6RnWRPQ6XSEh4fX+3F9fHwuuSBS6lK+dqjf65c3EaI6dYldUkbl+l25folDojpSh6p/cu1SfxINq77ilpRVufaLkThUv6TJUQghhBBCCCGEEEKIEtJYJoQQQgghhBBCCCFECWksawVMJhNz5szBZDI1dVYa3aV87SDXL5q/S/0eleu/tK9fNH+X8j0q135pXrtoeS7l+1Wu/dK89uZCJvgXQgghhBBCCCGEEKKE9CwTQgghhBBCCCGEEKKENJYJIYQQQgghhBBCCFFCGsuEEEIIIYQQQgghhCghjWVCCCGEEEIIIYQQQpSQxrJWJj4+njvvvJOOHTvi7u5Op06dmDNnDsXFxU2dtQbxzjvv0KFDB8xmM4MGDWLLli1NnaUGN3fuXAYMGIC3tzchISFce+21HD58uKmzJcRFXWrxCS7NGAUSp0TLc6nFJ4lNEptEyySxqvXHKolTzYc0lrUyhw4dwm63895777F//35ef/113n33Xf7yl780ddbq3eLFi3nssceYM2cOO3bsoHfv3kyYMIGUlJSmzlqDWrt2LbNnz2bTpk2sWrUKi8XC+PHjycvLa+qsCVGjSyk+waUbo0DilGh5LqX4JLFJYpNouSRWtf5YJXGq+dCUUqqpMyEa1ssvv8yCBQs4ceJEU2elXg0aNIgBAwbw9ttvA2C322nfvj0PPfQQTz/9dBPnrvGkpqYSEhLC2rVrGTlyZFNnRwiXtNb4BBKjypM4JVqi1hqfJDb9QWKTaA0kVrVuEqeajvQsuwRkZWUREBDQ1NmoV8XFxWzfvp2xY8eWbdPpdIwdO5bff/+9CXPW+LKysgBa3b+xuDS0xvgEEqMuJHFKtEStMT5JbKpIYpNoDSRWtW4Sp5qONJa1cseOHeOtt97i3nvvbeqs1Ku0tDRsNhtt2rSpsL1NmzacO3euiXLV+Ox2O4888gjDhg2jR48eTZ0dIVzSWuMTSIwqT+KUaIlaa3yS2PQHiU2iNZBY1bpJnGpa0ljWQjz99NNomlbjz6FDhyrsk5iYyBVXXMENN9zA3Xff3UQ5Fw1p9uzZ7Nu3jy+++KKpsyIuYRKfRE0kTommJPFJVEdik2hOJFaJqkicalqGps6AcM7jjz/O7bffXmOaqKiost+TkpIYM2YMQ4cO5f3332/g3DW+oKAg9Ho9ycnJFbYnJycTGhraRLlqXA8++CDfffcdv/32G+Hh4U2dHXEJk/hUmcQoB4lToqlJfKpIYpODxCbR3EisqkhilcSp5kAay1qI4OBggoODnUqbmJjImDFjiIuLY+HCheh0ra8DodFoJC4ujjVr1nDttdcCjm6qa9as4cEHH2zazDUwpRQPPfQQy5cv59dff6Vjx45NnSVxiZP4VNmlHKNA4pRoPiQ+VSSxSWKTaJ4kVlV0KccqiVPNhzSWtTKJiYmMHj2ayMhIXnnlFVJTU8s+a22t8I899hgzZ86kf//+DBw4kDfeeIO8vDxmzZrV1FlrULNnz+azzz7j66+/xtvbu2zcvq+vL+7u7k2cOyGqdynFJ7h0YxRInBItz6UUnyQ2SWwSLZfEqtYfqyRONSNKtCoLFy5UQJU/rdFbb72lIiIilNFoVAMHDlSbNm1q6iw1uOr+fRcuXNjUWROiRpdafFLq0oxRSkmcEi3PpRafJDZJbBItk8Sq1h+rJE41H5pSStV/E5wQQgghhBBCCCGEEC1P6xvgLIQQQgghhBBCCCFELUljmRBCCCGEEEIIIYQQJaSxTAghhBBCCCGEEEKIEtJYJoQQQgghhBBCCCFECWksE0IIIYQQQgghhBCihDSWCSGEEEIIIYQQQghRQhrLhBBCCCGEEEIIIYQoIY1lQgghhBBCCCGEEEKUkMYyIYQQQgghhBBCCCFKSGOZEEIIIYQQQgghhBAlpLFMtFg9evTg73//O/fddx/+/v6EhobyxhtvNHW2hBACkBglhGi+JD4JIZoriU+iudCUUqqpMyGEq4qKivDy8qJjx4688MILDBgwgAULFvD222+Tnp6Op6dnU2dRCHEJkxglhGiuJD4JIZoriU+iOZHGMtEibd++nf79+/PDDz9wxRVXALB371569epFSkoKwcHBTZxDIcSlTGKUEKK5kvgkhGiuJD6J5kSGYYoWaffu3YSGhjJhwoSybampqRiNRgICApowZ0IIITFKCNF8SXwSQjRXEp9EcyKNZaJF2rVrF/3790fTtArbevTogV6vb8KcCSGExCghRPMl8UkI0VxJfBLNiTSWiRZp9+7d9OnTp8K2Xbt2VdomhBBNQWKUEKK5kvgkhGiuJD6J5kQay0SLVFUg3blzpwRSIUSzIDFKCNFcSXwSQjRXEp9EcyKNZaLFiY+PJysrq0LQLCoq4tChQ/Tt27fpMiaEEEiMEkI0XxKfhBDNlcQn0dwYmjoDQriqQ4cOXLiI6759+7DZbPTu3buJciWEEA4So4QQzZXEJyFEcyXxSTQ30rNMtAo7d+4kKioKb2/vps6KEEJUIjFKCNFcSXwSQjRXEp9EU5LGMtEqyMSPQojmTGKUEKK5kvgkhGiuJD6JpqSpC/s6CiGEEEIIIYQQQghxiZKeZUIIIYQQQgghhBBClJDGMiGEEEIIIYQQQgghSkhjmRBCCCGEEEIIIYQQJaSxTAghhBBCCCGEEEKIEtJYJoQQQgghhBBCCCFECWksE0IIIYQQQgghhBCihDSWCSGEEEIIIYQQQghRQhrLhBBCCCGEEEIIIYQoIY1lQgghhBBCCCGEEEKUkMYyIYQQQgghhBBCCCFKSGOZEEIIIYQQQgghhBAlpLFMCCGEEEIIIYQQQogS0lgmhBBCCCGEEEIIIUQJaSwTQgghhBBCCCGEEKKENJYJIYQQQgghhBBCCFFCGsuEEEIIIYQQQgghhCghjWWizp5//nk0TWvqbAghqiDl89K0ZMkSAgICyM3NbeqslLn99tvp0KFDrfYdPXo0o0ePrtf8NCVN03j++edd2mf69OlMmzatYTIkmozEaCGaJymbl6aXXnqJbt26YbfbmzorZepSB+rQoQO33357veanqcTHx6NpGh9++KFL+w0ePJg///nPtTqnNJY1oZMnT/Lggw/SpUsXPDw88PDwIDY2ltmzZ7Nnz54q9/nzn/+MpmnceOONFbZrmubUz6+//toIV9Z0PvjgA2JiYjCbzXTu3Jm33nqrUprly5czYcIE2rZti8lkIjw8nKlTp7Jv374myPHF5ebm8sgjjxAeHo7JZCImJoYFCxZUmTYzM5N77rmH4OBgPD09GTNmDDt27Kgy7TfffEO/fv0wm81EREQwZ84crFZrQ15Ki1GbsglSPi9GymfjlE+bzcacOXN46KGH8PLyqvW1ieblqaeeYtmyZezevbups9IsSB2q/jkTozt06FDt99O5c+cmyHXNkpOTmTVrFiEhIbi7u9OvXz+WLl1aZdrExESmTZuGn58fPj4+XHPNNZw4caLKtM58V5ciqT81DCmbjVM2s7OzmTdvHk899RQ6nTSTtBZPPfUU77zzDufOnXN5X00ppRogT+IivvvuO2688UYMBgM333wzvXv3RqfTcejQIb788ktOnTrFyZMniYyMLNtHKUVERAQGg4Hk5GSSk5Px9vYG4NNPP61w/I8//phVq1bxySefVNg+btw42rRpU6/XYrVasVqtmM3mej2uq9577z3uu+8+pkyZwoQJE1i3bh2ffPIJ//znP3nqqafK0r344oscOHCAvn37EhQUxLlz5/jvf//L2bNn+f333+ndu3cTXkVFNpuNkSNHsm3bNmbPnk3nzp1ZuXIlX3/9Nf/4xz/4y1/+UpbWbrczYsQIdu/ezZNPPklQUBDz588nISGB7du3V/iP8ocffuCqq65i9OjRzJgxg7179/LOO+9wzz33VPugf6moTdkEKZ8XI+Wz8crnV199xfXXX09CQgLt2rVrkGuvjdtv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V2mM/cCBA8nPz+fIkSNl6aDyd9W2bVvCw8Or/K4uFbUpmyDl82KkfDZe+dy+fTvFxcX069evys/XrVvH448/zsyZM3n++ec5ePAgV199Ne+88w5vvvkmDzzwAE8++SS///47d9xxR4V9P/zwQ6ZNm4Zer2fu3LncfffdfPnllwwfPpzMzMyydD/99BNTpkxB0zTmzp3Ltddey6xZs9i2bVul/Nx77708+eSTDBs2jH/961/MmjWLRYsWMWHCBCwWS43XWpUXXniBW2+9FTc3N1588UVeeOEF2rdvz88//1yW5vnnn2f27Nm0bduWV199lSlTpvDee+8xfvz4Cud09nrBMVxnwoQJhISE8MorrzBlyhQA7rrrLt544w3Gjx/PP//5T9zc3Ljqqqsq5fu+++5jwYIFTJkyhfnz5/PEE0/g7u7OwYMHK6SLjY3F3d2dDRs2uPzdtBZSh2oeMbr8vgcPHqwwbMoVx44d46abbmLSpEnMnTuXjIwMJk2axKJFi3j00Ue55ZZbeOGFFzh+/DjTpk1zadLtoqIi3N3dK22/MEbb7Xb27NlT6frBEaOPHz9e9n9DXb6r1kzqT1I2W3rZ3LhxI0C19adFixYxf/58HnroIR5//HHWrl3LtGnTePbZZ/nxxx956qmnuOeee/j222954oknKuzrbL3jgw8+4N577yU0NJSXXnqJYcOGMXnyZBISEiocz263M3nyZF555RUmTZrEW2+9xbXXXsvrr79ead4/Z91555088sgjtG/fnnnz5vH0009jNpvZtGlTWZq77rqL5557jn79+vH6668zatQo5s6dy/Tp02t1vVB12VVKcc011/DJJ59wyy238Pe//50zZ84wc+bMSvmeMmUKy5cvZ9asWcyfP5+HH36YnJwcTp8+XSFdXFwcgOv1J5ea1kSdZWVlKUBde+21lT7LyMhQqampZT/5+flln/3vf/9TgDp69KhSyvEW2mw2q9dff73K81T35gVQ7777rsv5Ln27cuFwofKflQcoo9Gojh07Vrat9I34W2+9VbZtxowZKiQkRFmt1rJtZ8+eVTqdTr344otO52/27NlKr9dX+VlwcLCaPn16pe1du3ZVgAKUl5eXevbZZyv1+riY0u/0s88+K9t26NAhBSidTlfhDdvKlStd7jr66quvKkCtW7euwvann35aAerqq68u2+bp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nBzCw8OZOnUqvXv3LuuduHXr1kpvRletWoWHhwfjxo1z+ntpbaQOVVFjx+hSixYtwmQyMWXKlPq4jAYTGxvLDTfcQEREBCdPnmTBggUEBATw7rvvVkj3wAMP8O9//5urrrqKJ554Ajc3N1577TXatGlTNoE11O67uhRI/akyKZs1a25lMyoqih49erB69WruuOOOertOV+odf//737n33nu57LLLuPHGGzl58iQLFy6sNGfZrbfeypIlS7jvvvv45ZdfGDZsGDabjUOHDrFkyRJWrlzp0gvmMWPGcOutt/Lmm29y9OhRrrjiCux2O+vWrWPMmDE8+OCD9O7dm5kzZ/L++++TmZnJqFGj2LJlCx999BHXXnstY8aMcel6azJp0iSGDRvG008/TXx8PLGxsXz55ZeVXiweOXKEyy+/nGnTphEbG4vBYGD58uUkJydXWNwLHPWniIgI+vbt6/T3AlywHq5oVMeOHVP333+/io6OVmazWbm7u6tu3bqp++67T+3atUsppVTPnj1VREREjccZPXq0CgkJqbBsbXVLK3fv3r1WeS1dPjk1NbXaz8oD1OzZsyulrW752lWrVilAaZqmEhISapVHpRzL63bt2lUZjUbVqVMn9frrr5cteVs+v/3791f+/v7KYDCotm3bqunTp6s9e/a4fL7qvtPIyEh11VVXVdpe3fdSk0cffVRFRUUpk8mkgoOD1U033aSOHz9eZdr09HR15513qsDAQOXh4aFGjRqltm7dWmXa5cuXqz59+iiTyaTCw8PVs88+q4qLi13KW2vlTNlUSsqnq6R8Nk75/PLLL5Wmaer06dMXvb7SJdEvXHb7l19+UYBaunRphe2LFy9Wffv2VSaTSQUEBKibb75ZnTlzplIeli1bpmJiYpTJZFKxsbHqyy+/VDNnzlSRkZGV0r7//vsqLi5Oubu7K29vb9WzZ0/15z//WSUlJZWlGTVqVIVl02vy3//+tyyP/v7+atSoUWrVqlUV0rz99tuqW7duys3NTbVp00bdf//9KiMjo9KxnLnemTNnKk9PzyrzUlBQoB5++GEVGBioPD091aRJk1RCQoIC1Jw5c5RSShUVFaknn3xS9e7dW3l7eytPT0/Vu3dvNX/+/ErHGzRokLrllluc+h5aO6lD/aExY7RSSmVlZSmz2ayuv/76Wp9LKddicXWx6mKmT5+u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9OjRWm318vJyTa8/XUilUrZy5Uqd1m1BPctMrKqqCgDanKFs7Nix8PDw0HzdPhDjpk2bMHjwYISHhwMAHBwcMG3aNGzatEmv/ctkMixbtqzL8T/22GM6rzthwgSEhYVpfo6JiYGjo6PW7CX3338/ioqKtAYs/O677yAIgl6VcYVC0ap3RwsbGxsoFIpWyzdu3Ig9e/Zg/fr16NevHxQKBVQqlc77bGFvb69VUY+MjISzszP69eundYet5fv2Zm9pywMPPAAnJyc89NBDSEpKQmZmJj755BOsX78eALSOS6FQQCaTtdpGywCVLeu2/Nveum39rnqDrp6bAJ2fnaHz03TnZ8udbRcXlzZfHz9+PIKDgzU/txz37NmzNQMq37685fdx5swZFBUVYdWqVVqD3k6bNg19+/bFzz//DADIz89HcnIylixZAicnJ816EydORP/+/bVi2bZtG5ycnDBx4kSUlJRovuLj42Fvb4+DBw92eKx3+uGHHyAIAv72t7+16sHHcRwAYP/+/VAqlXjyySe11lmxYgUcHR01x6Hr8d5u5cqVWj//8ssvAIA//elPWsuffPLJVu91dnbGyZMnkZeX1+lxuri4oKSkpNP1rBG1oSwnRwPq3g1btmzBoEGD0K9fP533d7v+/ftj+PDhmp9bcs9dd92FwMDAVsv1ydEPP/wwRCIR5s2bh99//x03btzA2rVrsWPHDgC659071+3K78qaUfuJzk2g55+bpaWlEIvF7c4iPnfuXK12TctxL1q0CGKxWGu5UqlEbm4uAP3bHY899pjWcSxdulRrv4C6/dSvXz/07dtXq/101113AYDe7afvv/9eM/HQnVraTy1tmqefflrr9WeeeQYANMeh6/G2aOvc/eWXXyAWi7XaVSKRCE888YTWenK5HFKpFIcOHUJ5eXmnx9mV9hMVy0ys5WLkztlKAPUMHklJSa1mfqmoqMAvv/yCxMREpKena75GjhyJM2fOaB7f0YWfn1+7iUQXISEhOq97eyJt4eLiovVhnjJlCpycnPDtt99qln377beIjY1Fnz59dN6XXC6HUqls87X6+vo2u/oOHz4ckydPxsqVK7F37158/fXXWLNmjc77bOHv769JJC2cnJwQEBDQahkAnU7mFt7e3vjxxx/R0NCASZMmISQkBM8995xmGuTbE7pcLkdDQ0OrbdTX12te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Wp8dVIeS4RfIGKa/39H7/KpPDQ+lHkVERERERERERDooWSYiIiIiIiIiItJBybLznNPp5JFHHsHpdAa7KEExmp9/ND+7nJ9G++/saH7+0fzsErpG8+/laH520PPL+W20//6O5ucfzc8eDJrgX0REREREREREpIN6lomIiIiIiIiIiHRQskxERERERERERKSDkmUiIiIiIiIiIiIdlCwTERERERERERHpoGTZCHLkyBHuuOMOJkyYgMvlYuLEiTzyyCN4vd5gF21I/PrXv2b8+PFERESwePFiPvnkk2AXaVj87Gc/Y9GiRcTExJCSksLatWs5cOBAsIsl0m+jLVaB4pXilYQyxaTREZMUj2SkUewaHbELFL+CRcmyEaSgoADTNHn66afJz8/nl7/8Jb/5zW946KGHgl20gHvxxRe57777eOSRR/j000+ZM2cOV1xxBRUVFcEu2pDbunUrd911F9u3b+fdd9+lra2Nyy+/nKampmAXTaRfRlOsAsUrxSsJdYpJoyMmKR7JSKPYNTpiFyh+BYthWZYV7ELI0PnFL37BU089RVFRUbCLElCLFy9m0aJFPPHEEwCYpklGRgb33HMP69atC3LphldlZSUpKSls3bqVSy65JNjFERmUkRqrQPHqTIpXcr5QTBr5FI9kJFLsGh0Uv4aHepaNcHV1dSQkJAS7GAHl9XrJyclh9erVndtsNhurV6/m448/DmLJgqOurg5gxP2cZXQZibEKFK++SPFKzheKSSOf4pGMRIpdo4Pi1/BQsmwEKyws5PHHH+fOO+8MdlEC6uTJk/h8PlJTU7tsT01NpaysLEilCg7TNPn+97/PsmXLmDlzZrCLIzIoIzVWgeLVmRSv5HyhmDTyKR7JSKTYNToofg0fJcvOA+vWrcMwjD4/BQUFXc4pKSlhzZo1XH/99XzrW98KUsllqN11113s3buXF154IdhFEVGskj4pXslwU0yS3igeSShT7JK+KH4NH0ewCyBnd//993Prrbf2eUx2dnbn16WlpaxcuZKlS5fy29/+dohLN/ySkpKw2+2Ul5d32V5eXk5aWlqQSjX87r77bt544w3ef/99xo0bF+ziiChW9UDxyk/xSoJBMak7xSTFIwl9il3dKXb5KX4NLyXLzgPJyckkJyf369iSkhJWrlzJggULePbZZ7HZRl7nwfDwcBYsWMB7773H2rVrAX931Pfee4+77747uIUbBpZlcc899/CXv/yFLVu2MGHChGAXSQRQrOqJ4pXilQSPYlJ3ozkmKR7J+UKxq7vRHLtA8StYlCwbQUpKSrj00kvJysri0UcfpbKysnPfSMu433fffdxyyy0sXLiQCy+8kMcee4ympiZuu+22YBdtyN1111388Y9/5LXXXiMmJqZznL7b7cblcgW5dCJnN5piFSheKV5JqFNMGh0xSfFIRhrFrtERu0DxK2gsGTGeffZZC+jxMxI9/vjjVmZmphUeHm5deOGF1vbt24NdpGHR28/42WefDXbRRPpltMUqy1K8UrySUKaYNDpikuKRjDSKXaMjdlmW4lewGJZlWYFPwYmIiIiIiIiIiJx/RuagZhERERERERERkUFQskxERERERERERKSDkmUiIiIiIiIiIiIdlCwTERERERERERHpoGSZiIiIiIiIiIhIByXLREREREREREREOihZJiIiIiIiIiIi0kHJMhERERERERERkQ5KlomIiIiIiIiIiHRQskxERERERERERKSDkmVy3po5cyb/8i//wre//W3i4+NJS0vjscceC3axREQAxSgRCV2KTyISqhSfJFQYlmVZwS6EyEB5PB6io6OZMGECP/nJT1i0aBFPPfUUTzzxBNXV1URFRQW7iCIyiilGiUioUnwSkVCl+CShRMkyOS/l5OSwcOFC3n77bdasWQPAnj17mD17NhUVFSQnJwe5hCIymilGiUioUnwSkVCl+CShRMMw5by0e/du0tLSuOKKKzq3VVZWEh4eTkJCQhBLJiKiGCUioUvxSURCleKThBIly+S8lJeXx8KFCzEMo8u2mTNnYrfbg1gyERHFKBEJXYpPIhKqFJ8klChZJuel3bt3M3fu3C7b8vLyum0TEQkGxSgRCVWKTyISqhSfJJQoWSbnpZ4CaW5urgKpiIQExSgRCVWKTyISqhSfJJQoWSbnnSNHjlBXV9claHo8HgoKCpg3b17wCiYigmKUiIQuxScRCVWKTxJqHMEugMhAjR8/ni8u4rp37158Ph9z5swJUqlERPwUo0QkVCk+iUioUnySUKOeZTIi5Obmkp2dTUxMTLCLIiLSjWKUiIQqxScRCVWKTxJMSpbJiKCJH0UklClGiUioUnwSkVCl+CTBZFhf7OsoIiIiIiIiIiIySqlnmYiIiIiIiIiISAcly0RERERERERERDooWSYiIiIiIiIiItJByTIREREREREREZEOSpaJiIiIiIiIiIh0ULJMRERERERERESkg5JlIiIiIiIiIiIiHZQsExERERERERER6aBkmYiIiIiIiIiISAcly0RERERERERERDr8fxT8zrdvzBzsAAAAAElFTkSuQmCC"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 15
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-08T14:55:11.050533Z",
+ "start_time": "2025-01-08T14:55:11.042804Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "c72a6778427adb55",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(700, 20, 0.5)"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 9
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "name": "python3",
+ "language": "python",
+ "display_name": "Python 3 (ipykernel)"
+ }
+ },
+ "nbformat": 5,
+ "nbformat_minor": 9
+}
diff --git a/notebooks/clustering_parton_and_gen_level.ipynb b/notebooks/clustering_parton_and_gen_level.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..f124e3a4bb30944d621d8ddb771b8897d055e552
--- /dev/null
+++ b/notebooks/clustering_parton_and_gen_level.ipynb
@@ -0,0 +1,17392 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-19T14:08:46.152785Z",
+ "start_time": "2025-03-19T14:08:40.892203Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import pickle\n",
+ "import torch\n",
+ "import os\n",
+ "import matplotlib.pyplot as plt\n",
+ "from src.utils.paths import get_path\n",
+ "from src.utils.utils import CPU_Unpickler\n",
+ "from pathlib import Path\n",
+ "import fastjet\n",
+ "from src.dataset.dataset import EventDataset\n",
+ "import numpy as np\n",
+ "filename = get_path(\"/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_41_16/eval_1.pkl\", \"results\")\n",
+ "# for rinv=0.7, see /work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_rinv07_2025_01_03_15_38_58\n",
+ "\n",
+ "result = CPU_Unpickler(open(filename, \"rb\")).load()\n",
+ "dataset = EventDataset.from_directory(result[\"filename\"], mmap=True)\n"
+ ],
+ "id": "862bda2d2f12153f",
+ "outputs": [
+ {
+ "ename": "FileNotFoundError",
+ "evalue": "[Errno 2] No such file or directory: '/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_41_16/eval_1.pkl'",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mFileNotFoundError\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[1], line 14\u001B[0m\n\u001B[1;32m 11\u001B[0m filename \u001B[38;5;241m=\u001B[39m get_path(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_41_16/eval_1.pkl\u001B[39m\u001B[38;5;124m\"\u001B[39m, \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mresults\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[1;32m 12\u001B[0m \u001B[38;5;66;03m# for rinv=0.7, see /work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_rinv07_2025_01_03_15_38_58\u001B[39;00m\n\u001B[0;32m---> 14\u001B[0m result \u001B[38;5;241m=\u001B[39m CPU_Unpickler(\u001B[38;5;28;43mopen\u001B[39;49m\u001B[43m(\u001B[49m\u001B[43mfilename\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mrb\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m)\u001B[49m)\u001B[38;5;241m.\u001B[39mload()\n\u001B[1;32m 15\u001B[0m dataset \u001B[38;5;241m=\u001B[39m EventDataset\u001B[38;5;241m.\u001B[39mfrom_directory(result[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mfilename\u001B[39m\u001B[38;5;124m\"\u001B[39m], mmap\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mTrue\u001B[39;00m)\n",
+ "File \u001B[0;32m/work/gkrzmanc/1gatr/lib/python3.10/site-packages/IPython/core/interactiveshell.py:324\u001B[0m, in \u001B[0;36m_modified_open\u001B[0;34m(file, *args, **kwargs)\u001B[0m\n\u001B[1;32m 317\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m file \u001B[38;5;129;01min\u001B[39;00m {\u001B[38;5;241m0\u001B[39m, \u001B[38;5;241m1\u001B[39m, \u001B[38;5;241m2\u001B[39m}:\n\u001B[1;32m 318\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[1;32m 319\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mIPython won\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mt let you open fd=\u001B[39m\u001B[38;5;132;01m{\u001B[39;00mfile\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m by default \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 320\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mas it is likely to crash IPython. If you know what you are doing, \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 321\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124myou can use builtins\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m open.\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 322\u001B[0m )\n\u001B[0;32m--> 324\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mio_open\u001B[49m\u001B[43m(\u001B[49m\u001B[43mfile\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n",
+ "\u001B[0;31mFileNotFoundError\u001B[0m: [Errno 2] No such file or directory: '/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_41_16/eval_1.pkl'"
+ ]
+ }
+ ],
+ "execution_count": 1
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-19T14:08:46.177874072Z",
+ "start_time": "2025-03-05T14:22:24.763317Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "9087767e438ba4e7",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-19T14:08:46.181119723Z",
+ "start_time": "2025-03-05T14:22:24.880737Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "d5c75efc6fdc491c",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-19T14:08:46.182137398Z",
+ "start_time": "2025-03-05T14:22:24.976045Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# plotly 3d plot of result[\"pred\"], colored by result[\"GT_cluster\"]\n",
+ "from src.plotting.plot_coordinates import plot_coordinates\n",
+ "filt = result[\"event_idx\"] == 15\n",
+ "# normalized coordinates\n",
+ "norm_coords = result[\"pred\"][filt, 1:4] #/ np.linalg.norm(result[\"pred\"][filt, 1:4] , axis=1 ,keepdims=1)\n",
+ "pt = torch.tensor(result[\"pt\"][filt])\n",
+ "plot_coordinates(norm_coords, torch.tensor(result[\"pt\"][filt]), torch.tensor(result[\"GT_cluster\"][filt])).show()\n"
+ ],
+ "id": "d584df4044d8a585",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[('X', (32, 1)), ('Y', (32, 1)), ('Z', (32, 1)), ('tIdx', (32, 1)), ('pt', (32, 1))]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/tmp/ipykernel_51221/2041003322.py:6: UserWarning:\n",
+ "\n",
+ "To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
+ "\n",
+ "/tmp/ipykernel_51221/2041003322.py:7: UserWarning:\n",
+ "\n",
+ "To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0
+ ],
+ "coloraxis": "coloraxis",
+ "opacity": 0.5,
+ "size": [
+ 5.429415225982666,
+ 0.6081729531288147,
+ 1.9733420610427856,
+ 1.3163951635360718,
+ 2.733966112136841,
+ 0.6446159482002258,
+ 1.9690138101577759,
+ 0.6289293169975281,
+ 0.5108833312988281,
+ 1.1707555055618286,
+ 1.1588191986083984,
+ 1.1909750699996948,
+ 2.0548150539398193,
+ 1.3339203596115112,
+ 2.0361104011535645,
+ 43.182132720947266,
+ 7.180440425872803,
+ 6.838322162628174,
+ 0.7990854978561401,
+ 6.540283679962158,
+ 5.935789585113525,
+ 19.336912155151367,
+ 6.375602722167969,
+ 28.59280776977539,
+ 5.872469902038574,
+ 5.258073329925537,
+ 0.9352484345436096,
+ 4.3812971115112305,
+ 58.224815368652344,
+ 113.52828216552734,
+ 108.6135025024414,
+ 93.19868469238281
+ ],
+ "sizemode": "area",
+ "sizeref": 0.2838207054138184,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ 0.4765247106552124,
+ 2.060394287109375,
+ 0.796140193939209,
+ 0.49241510033607483,
+ 1.5043977499008179,
+ 0.5099642872810364,
+ 0.7963659763336182,
+ 0.49603110551834106,
+ 0.49603211879730225,
+ -1.1970014572143555,
+ -1.2008448839187622,
+ 0.45484983921051025,
+ 0.488547146320343,
+ -0.9394121170043945,
+ 1.4640408754348755,
+ -1.3883676528930664,
+ -1.7735252380371094,
+ -1.7738075256347656,
+ -1.558084487915039,
+ -1.5148839950561523,
+ -1.7748527526855469,
+ -1.3806838989257812,
+ -0.07535076141357422,
+ -1.4020256996154785,
+ -0.08168691396713257,
+ -0.09156012535095215,
+ -1.5733389854431152,
+ -0.11341261863708496,
+ 0.5200929641723633,
+ 0.4879298210144043,
+ 0.48917853832244873,
+ 0.49674737453460693
+ ],
+ "y": [
+ 0.7626745700836182,
+ 3.982333183288574,
+ 0.9171181917190552,
+ 0.6865851283073425,
+ 1.3591046333312988,
+ 0.8154962062835693,
+ 0.9174587726593018,
+ 0.7961084246635437,
+ 0.7655313611030579,
+ -2.334413528442383,
+ -2.340780735015869,
+ 0.6274768114089966,
+ 0.74968421459198,
+ -2.924154281616211,
+ 1.3262934684753418,
+ -0.6972968578338623,
+ -1.4630308151245117,
+ -1.463027000427246,
+ -1.14402437210083,
+ -0.9294133186340332,
+ -1.4630327224731445,
+ -0.6878607273101807,
+ -0.10533404350280762,
+ -0.661689281463623,
+ -0.11552739143371582,
+ -0.13159489631652832,
+ -0.8759052753448486,
+ -0.16657257080078125,
+ 0.42116332054138184,
+ 0.3869478702545166,
+ 0.38782334327697754,
+ 0.3934662342071533
+ ],
+ "z": [
+ 7.322221755981445,
+ 3.7022809982299805,
+ -3.1507797241210938,
+ 4.770708084106445,
+ 6.06634521484375,
+ 7.479061126708984,
+ -3.1502552032470703,
+ 7.526288986206055,
+ 7.372432708740234,
+ -4.201669692993164,
+ -4.191755294799805,
+ 5.064359664916992,
+ 7.274496078491211,
+ -2.9367713928222656,
+ 6.063165664672852,
+ -3.712099075317383,
+ -2.535440444946289,
+ -2.5349302291870117,
+ -4.268980026245117,
+ -3.4681921005249023,
+ -2.5334043502807617,
+ -3.7572383880615234,
+ -4.83375358581543,
+ -3.750673294067383,
+ -4.817991256713867,
+ -4.801008224487305,
+ -3.85335636138916,
+ -4.787126541137695,
+ -5.682256698608398,
+ -5.670263290405273,
+ -5.674249649047852,
+ -5.692686080932617
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 25
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-05T14:22:25.141362Z",
+ "start_time": "2025-03-05T14:22:25.137456Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "c52bf5ccd6385464",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-05T14:22:25.345863Z",
+ "start_time": "2025-03-05T14:22:25.242556Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import hdbscan\n",
+ "from time import time\n",
+ "clusterer = hdbscan.HDBSCAN(metric='euclidean', min_cluster_size=4, min_samples=2, cluster_selection_epsilon=0.5)\n",
+ "def custom_metric(xyz, pt):\n",
+ " \"\"\"\n",
+ " Computes the distance matrix where the distance function is defined as:\n",
+ " Euclidean distance between two points in xyz space * min(pt1, pt2)\n",
+ "\n",
+ " Parameters:\n",
+ " xyz (numpy.ndarray): An (N, 3) array of N points in 3D space.\n",
+ " pt (numpy.ndarray): A (N,) array of scalars associated with each point.\n",
+ "\n",
+ " Returns:\n",
+ " numpy.ndarray: An (N, N) distance matrix.\n",
+ " \"\"\"\n",
+ " N = xyz.shape[0]\n",
+ " distance_matrix = np.zeros((N, N))\n",
+ "\n",
+ " for i in range(N):\n",
+ " for j in range(N):\n",
+ " if i != j:\n",
+ " euclidean_distance = np.linalg.norm(xyz[i] - xyz[j])\n",
+ " scale_factor = min(pt[i], pt[j])\n",
+ " distance_matrix[i, j] = euclidean_distance * scale_factor\n",
+ "\n",
+ " return distance_matrix\n",
+ "\n",
+ "t0 = time()\n",
+ "#cluster_labels = clusterer.fit_predict(custom_metric(norm_coords, pt))\n",
+ "cluster_labels= clusterer.fit_predict(norm_coords)\n",
+ "t1 = time()\n",
+ "print(t1 - t0)\n",
+ "plot_coordinates(result[\"pred\"][filt, 1:4], result[\"pt\"][filt], torch.tensor(cluster_labels)).show()\n"
+ ],
+ "id": "20aca7fd9d085be4",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.007281064987182617\n",
+ "[('X', (32, 1)), ('Y', (32, 1)), ('Z', (32, 1)), ('tIdx', (32, 1)), ('pt', (32, 1))]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/1gatr/lib/python3.10/site-packages/sklearn/utils/deprecation.py:151: FutureWarning:\n",
+ "\n",
+ "'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
+ "\n",
+ "/work/gkrzmanc/1gatr/lib/python3.10/site-packages/sklearn/utils/deprecation.py:151: FutureWarning:\n",
+ "\n",
+ "'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ 0.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ 1.0,
+ 1.0,
+ 0.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 2.0,
+ 1.0,
+ 2.0,
+ 2.0,
+ 1.0,
+ 2.0,
+ 3.0,
+ 3.0,
+ 3.0,
+ 3.0
+ ],
+ "coloraxis": "coloraxis",
+ "opacity": 0.5,
+ "size": [
+ 5.429415225982666,
+ 0.6081729531288147,
+ 1.9733420610427856,
+ 1.3163951635360718,
+ 2.733966112136841,
+ 0.6446159482002258,
+ 1.9690138101577759,
+ 0.6289293169975281,
+ 0.5108833312988281,
+ 1.1707555055618286,
+ 1.1588191986083984,
+ 1.1909750699996948,
+ 2.0548150539398193,
+ 1.3339203596115112,
+ 2.0361104011535645,
+ 43.182132720947266,
+ 7.180440425872803,
+ 6.838322162628174,
+ 0.7990854978561401,
+ 6.540283679962158,
+ 5.935789585113525,
+ 19.336912155151367,
+ 6.375602722167969,
+ 28.59280776977539,
+ 5.872469902038574,
+ 5.258073329925537,
+ 0.9352484345436096,
+ 4.3812971115112305,
+ 58.224815368652344,
+ 113.52828216552734,
+ 108.6135025024414,
+ 93.19868469238281
+ ],
+ "sizemode": "area",
+ "sizeref": 0.2838207054138184,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ 0.4765247106552124,
+ 2.060394287109375,
+ 0.796140193939209,
+ 0.49241510033607483,
+ 1.5043977499008179,
+ 0.5099642872810364,
+ 0.7963659763336182,
+ 0.49603110551834106,
+ 0.49603211879730225,
+ -1.1970014572143555,
+ -1.2008448839187622,
+ 0.45484983921051025,
+ 0.488547146320343,
+ -0.9394121170043945,
+ 1.4640408754348755,
+ -1.3883676528930664,
+ -1.7735252380371094,
+ -1.7738075256347656,
+ -1.558084487915039,
+ -1.5148839950561523,
+ -1.7748527526855469,
+ -1.3806838989257812,
+ -0.07535076141357422,
+ -1.4020256996154785,
+ -0.08168691396713257,
+ -0.09156012535095215,
+ -1.5733389854431152,
+ -0.11341261863708496,
+ 0.5200929641723633,
+ 0.4879298210144043,
+ 0.48917853832244873,
+ 0.49674737453460693
+ ],
+ "y": [
+ 0.7626745700836182,
+ 3.982333183288574,
+ 0.9171181917190552,
+ 0.6865851283073425,
+ 1.3591046333312988,
+ 0.8154962062835693,
+ 0.9174587726593018,
+ 0.7961084246635437,
+ 0.7655313611030579,
+ -2.334413528442383,
+ -2.340780735015869,
+ 0.6274768114089966,
+ 0.74968421459198,
+ -2.924154281616211,
+ 1.3262934684753418,
+ -0.6972968578338623,
+ -1.4630308151245117,
+ -1.463027000427246,
+ -1.14402437210083,
+ -0.9294133186340332,
+ -1.4630327224731445,
+ -0.6878607273101807,
+ -0.10533404350280762,
+ -0.661689281463623,
+ -0.11552739143371582,
+ -0.13159489631652832,
+ -0.8759052753448486,
+ -0.16657257080078125,
+ 0.42116332054138184,
+ 0.3869478702545166,
+ 0.38782334327697754,
+ 0.3934662342071533
+ ],
+ "z": [
+ 7.322221755981445,
+ 3.7022809982299805,
+ -3.1507797241210938,
+ 4.770708084106445,
+ 6.06634521484375,
+ 7.479061126708984,
+ -3.1502552032470703,
+ 7.526288986206055,
+ 7.372432708740234,
+ -4.201669692993164,
+ -4.191755294799805,
+ 5.064359664916992,
+ 7.274496078491211,
+ -2.9367713928222656,
+ 6.063165664672852,
+ -3.712099075317383,
+ -2.535440444946289,
+ -2.5349302291870117,
+ -4.268980026245117,
+ -3.4681921005249023,
+ -2.5334043502807617,
+ -3.7572383880615234,
+ -4.83375358581543,
+ -3.750673294067383,
+ -4.817991256713867,
+ -4.801008224487305,
+ -3.85335636138916,
+ -4.787126541137695,
+ -5.682256698608398,
+ -5.670263290405273,
+ -5.674249649047852,
+ -5.692686080932617
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 26
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-05T09:21:31.421479Z",
+ "start_time": "2025-03-05T09:21:31.222552Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "from sklearn.cluster import DBSCAN\n",
+ "\n",
+ "#clusterer = hdbscan.HDBSCAN(metric='precomputed', min_cluster_size=4, min_samples=2, cluster_selection_epsilon=0.05)\n",
+ "clusterer = DBSCAN(eps=1.0, min_samples=4)\n",
+ "\n",
+ "t0 = time()\n",
+ "cluster_labels = clusterer.fit_predict(norm_coords, sample_weight=pt)\n",
+ "t1 = time()\n",
+ "print(t1 - t0)\n",
+ "plot_coordinates(result[\"pred\"][filt, 1:4], result[\"pt\"][filt], torch.tensor(cluster_labels)).show()\n"
+ ],
+ "id": "de29678634e96a7b",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.005666017532348633\n",
+ "[('X', (47, 1)), ('Y', (47, 1)), ('Z', (47, 1)), ('tIdx', (47, 1)), ('pt', (47, 1))]\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ 0.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 2.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 3.0,
+ 4.0,
+ 5.0,
+ 6.0,
+ 7.0,
+ 5.0,
+ 3.0,
+ 8.0,
+ 6.0,
+ 5.0,
+ 5.0,
+ 5.0,
+ 5.0,
+ 5.0,
+ 5.0,
+ 7.0,
+ 5.0,
+ 7.0,
+ 2.0,
+ 9.0,
+ 2.0,
+ 7.0,
+ 9.0,
+ 10.0,
+ 7.0,
+ 3.0,
+ 11.0,
+ 11.0,
+ 12.0,
+ 3.0,
+ 12.0,
+ 12.0
+ ],
+ "coloraxis": "coloraxis",
+ "opacity": 0.5,
+ "size": [
+ 5.216217041015625,
+ 2.8779313564300537,
+ 4.781583786010742,
+ 5.201897621154785,
+ 1.1283886432647705,
+ 1.4790658950805664,
+ 1.0375325679779053,
+ 1.2261675596237183,
+ 3.0635132789611816,
+ 1.2777342796325684,
+ 4.959547519683838,
+ 4.508871555328369,
+ 4.270727634429932,
+ 0.5232042074203491,
+ 0.7054126262664795,
+ 136.40850830078125,
+ 47.96998596191406,
+ 184.125244140625,
+ 15.4256591796875,
+ 42.840152740478516,
+ 161.47142028808594,
+ 136.87876892089844,
+ 8.651361465454102,
+ 7.852224349975586,
+ 18.58675193786621,
+ 54.31939697265625,
+ 49.082584381103516,
+ 16.83722496032715,
+ 36.65693283081055,
+ 20.384780883789062,
+ 11.087272644042969,
+ 22.26816749572754,
+ 10.073822021484375,
+ 7.5476975440979,
+ 8.027702331542969,
+ 3.5462992191314697,
+ 3.954371213912964,
+ 7.9175567626953125,
+ 9.64089584350586,
+ 2.297090768814087,
+ 7.037780284881592,
+ 4.7475409507751465,
+ 4.648265361785889,
+ 8.497712135314941,
+ 12.30878734588623,
+ 6.461857318878174,
+ 5.19363260269165
+ ],
+ "sizemode": "area",
+ "sizeref": 0.4603131103515625,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ -0.48713767528533936,
+ 0.15796494483947754,
+ -0.09517890214920044,
+ -0.48724937438964844,
+ -0.06181001663208008,
+ -3.315865993499756,
+ -3.597691535949707,
+ 0.027304768562316895,
+ -0.7527557611465454,
+ -0.13356000185012817,
+ -0.4624054431915283,
+ -0.09437686204910278,
+ -0.0911986231803894,
+ 1.3551769256591797,
+ -2.8669729232788086,
+ 2.5328493118286133,
+ -0.30333924293518066,
+ -2.429722309112549,
+ 0.03933250904083252,
+ -1.671905517578125,
+ -2.4296603202819824,
+ 2.546412467956543,
+ 2.116917610168457,
+ 0.1098930835723877,
+ -2.407378673553467,
+ -2.4353318214416504,
+ -2.434706687927246,
+ -2.4075403213500977,
+ -2.4220566749572754,
+ -2.4201765060424805,
+ -1.511425495147705,
+ -2.3703484535217285,
+ -1.4938483238220215,
+ -3.2450337409973145,
+ 0.25489258766174316,
+ -3.1988143920898438,
+ -2.1918206214904785,
+ 0.2463827133178711,
+ -0.30340588092803955,
+ -1.5440425872802734,
+ 2.593926429748535,
+ -0.19776344299316406,
+ -0.19835591316223145,
+ 1.1595702171325684,
+ 2.597095489501953,
+ 1.1534624099731445,
+ 0.9966316223144531
+ ],
+ "y": [
+ 2.189202308654785,
+ 1.6480464935302734,
+ -0.18081820011138916,
+ 2.1893444061279297,
+ 0.6486057043075562,
+ -0.0319826602935791,
+ 1.5806584358215332,
+ 2.562300682067871,
+ -3.798463821411133,
+ -0.2046339511871338,
+ 2.161046028137207,
+ -0.18367618322372437,
+ -0.18338829278945923,
+ 1.864171028137207,
+ 2.605013847351074,
+ 0.39429616928100586,
+ 2.054427146911621,
+ -1.1288607120513916,
+ 0.3108537197113037,
+ 1.844365119934082,
+ -1.1298604011535645,
+ 0.38235270977020264,
+ -1.4690423011779785,
+ 0.36299049854278564,
+ -1.1367583274841309,
+ -1.1378235816955566,
+ -1.1382675170898438,
+ -1.136991262435913,
+ -1.1380908489227295,
+ -1.1397721767425537,
+ 1.7434139251708984,
+ -1.0436148643493652,
+ 1.749852180480957,
+ 1.4017181396484375,
+ -3.1543502807617188,
+ 1.437540054321289,
+ 1.779109001159668,
+ -3.189316749572754,
+ -3.296733856201172,
+ 1.723245620727539,
+ 0.3660883903503418,
+ 2.054553985595703,
+ 2.0535202026367188,
+ 1.4805793762207031,
+ 0.37113797664642334,
+ 1.4822907447814941,
+ 1.5494251251220703
+ ],
+ "z": [
+ -4.489553451538086,
+ -4.854707717895508,
+ 9.540733337402344,
+ -4.490108489990234,
+ -7.933082580566406,
+ 4.214221000671387,
+ 1.1107072830200195,
+ 5.373956680297852,
+ 3.091557502746582,
+ 10.010051727294922,
+ -4.590703964233398,
+ 9.611438751220703,
+ 9.661678314208984,
+ 4.606515884399414,
+ 1.5523481369018555,
+ 2.941220283508301,
+ 4.197595596313477,
+ -2.9692792892456055,
+ 7.600072860717773,
+ -1.0645098686218262,
+ -2.97042179107666,
+ 2.9721670150756836,
+ -1.8046841621398926,
+ 8.058698654174805,
+ -2.9659910202026367,
+ -2.9767818450927734,
+ -2.9772157669067383,
+ -2.9660444259643555,
+ -2.973971366882324,
+ -2.9733047485351562,
+ -1.4824934005737305,
+ -2.5327463150024414,
+ -1.5378875732421875,
+ 0.8453917503356934,
+ 1.1869838237762451,
+ 0.7501213550567627,
+ -0.5688894987106323,
+ 1.1888632774353027,
+ 4.1339006423950195,
+ -1.3828821182250977,
+ 3.1117477416992188,
+ 0.47097063064575195,
+ 0.46922731399536133,
+ 1.108544945716858,
+ 3.0523834228515625,
+ 1.107752799987793,
+ 1.0099059343338013
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 15
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-04T17:48:18.482578Z",
+ "start_time": "2025-03-04T17:48:18.341707Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "filename = get_path(\"/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_2025_03_04_15_54_50/eval_0.pkl\", \"results\")\n",
+ "# for rinv=0.7, see /work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_rinv07_2025_01_03_15_38_58\n",
+ "\n",
+ "result = CPU_Unpickler(open(filename, \"rb\")).load()\n",
+ "dataset = EventDataset.from_directory(result[\"filename\"], mmap=True)\n",
+ "# plotly 3d plot of result[\"pred\"], colored by result[\"GT_cluster\"]\n",
+ "from src.plotting.plot_coordinates import plot_coordinates\n",
+ "filt = result[\"event_idx\"] == 5\n",
+ "# normalized coordinates\n",
+ "norm_coords = result[\"pred\"][filt, 1:4] / np.linalg.norm(result[\"pred\"][filt, 1:4] , axis=1 ,keepdims=1)\n",
+ "plot_coordinates(norm_coords, torch.tensor(result[\"pt\"][filt]), torch.tensor(result[\"GT_cluster\"][filt])).show()\n"
+ ],
+ "id": "c0c09fd4b6a69064",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[('X', (439, 1)), ('Y', (439, 1)), ('Z', (439, 1)), ('tIdx', (439, 1)), ('pt', (439, 1))]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/jetclustering/code/src/utils/utils.py:91: FutureWarning:\n",
+ "\n",
+ "You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
+ "\n",
+ "/tmp/ipykernel_40067/2366440542.py:11: UserWarning:\n",
+ "\n",
+ "To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0
+ ],
+ "coloraxis": "coloraxis",
+ "opacity": 0.5,
+ "size": [
+ 0.615234375,
+ 0.54052734375,
+ 4.40234375,
+ 0.2548828125,
+ 0.1575927734375,
+ 0.4326171875,
+ 0.62255859375,
+ 0.4228515625,
+ 0.8134765625,
+ 0.363525390625,
+ 0.07470703125,
+ 0.7978515625,
+ 0.08807373046875,
+ 0.0762939453125,
+ 1.267578125,
+ 1.6337890625,
+ 0.1307373046875,
+ 0.0352783203125,
+ 0.62451171875,
+ 0.319091796875,
+ 0.52978515625,
+ 0.7236328125,
+ 0.339111328125,
+ 1.0107421875,
+ 0.369384765625,
+ 0.6435546875,
+ 0.2607421875,
+ 1.3203125,
+ 0.138916015625,
+ 0.2401123046875,
+ 0.4150390625,
+ 0.853515625,
+ 0.630859375,
+ 0.126708984375,
+ 1.4365234375,
+ 17.875,
+ 0.19287109375,
+ 0.763671875,
+ 0.64404296875,
+ 1.947265625,
+ 0.45751953125,
+ 1.384765625,
+ 0.395263671875,
+ 1.021484375,
+ 0.81494140625,
+ 1.9208984375,
+ 1.65625,
+ 0.86767578125,
+ 0.53857421875,
+ 0.146484375,
+ 0.53955078125,
+ 0.8193359375,
+ 0.1912841796875,
+ 0.225830078125,
+ 0.273193359375,
+ 0.6396484375,
+ 0.446533203125,
+ 0.16455078125,
+ 0.28515625,
+ 0.433349609375,
+ 1.3857421875,
+ 0.279296875,
+ 0.67626953125,
+ 0.1248779296875,
+ 0.214111328125,
+ 0.54833984375,
+ 0.146728515625,
+ 1.0751953125,
+ 0.346435546875,
+ 1.37890625,
+ 0.775390625,
+ 0.2176513671875,
+ 0.31201171875,
+ 0.414306640625,
+ 0.55419921875,
+ 0.1690673828125,
+ 0.8564453125,
+ 0.455078125,
+ 0.81005859375,
+ 0.77099609375,
+ 0.318115234375,
+ 0.215087890625,
+ 0.5185546875,
+ 0.97900390625,
+ 0.166015625,
+ 0.6728515625,
+ 1.556640625,
+ 0.312255859375,
+ 0.5341796875,
+ 0.943359375,
+ 0.1639404296875,
+ 0.302490234375,
+ 0.998046875,
+ 0.630859375,
+ 1.5556640625,
+ 0.72412109375,
+ 0.306396484375,
+ 1.314453125,
+ 0.330078125,
+ 0.892578125,
+ 1.0263671875,
+ 0.58837890625,
+ 0.77197265625,
+ 0.050201416015625,
+ 0.91259765625,
+ 0.85205078125,
+ 0.205078125,
+ 0.474365234375,
+ 1.7919921875,
+ 0.0692138671875,
+ 1.12109375,
+ 1.716796875,
+ 0.4130859375,
+ 1.1943359375,
+ 0.358642578125,
+ 0.12548828125,
+ 0.404296875,
+ 0.341796875,
+ 0.345458984375,
+ 0.10125732421875,
+ 0.458984375,
+ 1.39453125,
+ 1.14453125,
+ 0.36181640625,
+ 0.324951171875,
+ 0.10906982421875,
+ 0.2998046875,
+ 0.53564453125,
+ 0.1842041015625,
+ 0.1630859375,
+ 0.461669921875,
+ 0.267822265625,
+ 0.10333251953125,
+ 0.79443359375,
+ 1.1484375,
+ 0.1407470703125,
+ 0.142578125,
+ 5.671875,
+ 16.875,
+ 38.21875,
+ 71.0,
+ 0.387939453125,
+ 0.251708984375,
+ 0.56298828125,
+ 0.63720703125,
+ 0.20068359375,
+ 0.1806640625,
+ 0.422119140625,
+ 0.309326171875,
+ 0.1455078125,
+ 0.10345458984375,
+ 0.2027587890625,
+ 0.1556396484375,
+ 0.324462890625,
+ 0.5107421875,
+ 0.11572265625,
+ 0.1982421875,
+ 0.17333984375,
+ 0.2471923828125,
+ 0.78466796875,
+ 0.95166015625,
+ 0.1201171875,
+ 0.1767578125,
+ 0.568359375,
+ 0.0205078125,
+ 0.305419921875,
+ 0.294677734375,
+ 0.019012451171875,
+ 0.48876953125,
+ 0.426513671875,
+ 0.1439208984375,
+ 0.1402587890625,
+ 0.191650390625,
+ 0.50439453125,
+ 0.8486328125,
+ 0.21142578125,
+ 0.10382080078125,
+ 1.5556640625,
+ 0.0721435546875,
+ 0.043792724609375,
+ 0.5126953125,
+ 0.95068359375,
+ 0.319580078125,
+ 1.099609375,
+ 0.9619140625,
+ 0.01233673095703125,
+ 0.2138671875,
+ 0.49462890625,
+ 0.8818359375,
+ 0.16259765625,
+ 0.261962890625,
+ 1.134765625,
+ 0.42333984375,
+ 0.003917694091796875,
+ 0.375244140625,
+ 0.140625,
+ 0.14697265625,
+ 0.87890625,
+ 0.47509765625,
+ 0.1939697265625,
+ 0.54248046875,
+ 0.490966796875,
+ 0.018890380859375,
+ 0.4970703125,
+ 0.10858154296875,
+ 2.75390625,
+ 0.39990234375,
+ 5.22265625,
+ 0.441650390625,
+ 0.1529541015625,
+ 0.50439453125,
+ 0.529296875,
+ 0.1573486328125,
+ 0.298583984375,
+ 0.0921630859375,
+ 0.144775390625,
+ 0.22509765625,
+ 0.9853515625,
+ 0.469970703125,
+ 0.367919921875,
+ 0.2017822265625,
+ 0.0704345703125,
+ 0.18798828125,
+ 1.46484375,
+ 0.49755859375,
+ 0.277099609375,
+ 0.100341796875,
+ 0.3359375,
+ 0.043121337890625,
+ 0.40625,
+ 0.1861572265625,
+ 0.434814453125,
+ 0.0079803466796875,
+ 0.10430908203125,
+ 0.348388671875,
+ 0.0196533203125,
+ 0.1290283203125,
+ 0.28515625,
+ 0.052886962890625,
+ 0.2352294921875,
+ 0.334716796875,
+ 0.344970703125,
+ 0.0195465087890625,
+ 0.2305908203125,
+ 0.026031494140625,
+ 0.31640625,
+ 0.40771484375,
+ 0.06927490234375,
+ 0.763671875,
+ 0.252197265625,
+ 0.5537109375,
+ 0.274169921875,
+ 0.474365234375,
+ 0.1246337890625,
+ 0.59521484375,
+ 0.92724609375,
+ 0.2269287109375,
+ 0.20947265625,
+ 0.1251220703125,
+ 0.377685546875,
+ 0.05828857421875,
+ 0.191162109375,
+ 0.0811767578125,
+ 0.02642822265625,
+ 0.0379638671875,
+ 0.380615234375,
+ 0.01161956787109375,
+ 0.623046875,
+ 0.247802734375,
+ 0.046142578125,
+ 0.3125,
+ 0.6796875,
+ 0.132568359375,
+ 0.15234375,
+ 0.030548095703125,
+ 0.151123046875,
+ 0.277587890625,
+ 0.252685546875,
+ 0.09893798828125,
+ 0.38330078125,
+ 0.0889892578125,
+ 0.03594970703125,
+ 0.07366943359375,
+ 0.0775146484375,
+ 1.017578125,
+ 0.1290283203125,
+ 0.38330078125,
+ 0.134033203125,
+ 0.31005859375,
+ 0.37548828125,
+ 0.08538818359375,
+ 0.10205078125,
+ 2.009765625,
+ 0.10345458984375,
+ 1.25,
+ 0.0791015625,
+ 0.271240234375,
+ 0.01467132568359375,
+ 0.1295166015625,
+ 0.218994140625,
+ 0.0706787109375,
+ 0.01202392578125,
+ 0.1790771484375,
+ 0.18310546875,
+ 0.48681640625,
+ 0.055572509765625,
+ 0.343505859375,
+ 0.01806640625,
+ 0.13720703125,
+ 0.112060546875,
+ 0.05694580078125,
+ 0.07147216796875,
+ 0.19970703125,
+ 0.12493896484375,
+ 0.2388916015625,
+ 0.10479736328125,
+ 0.2342529296875,
+ 0.083984375,
+ 0.3427734375,
+ 0.06854248046875,
+ 0.59521484375,
+ 0.040771484375,
+ 0.60400390625,
+ 0.234130859375,
+ 0.08056640625,
+ 0.0772705078125,
+ 0.1656494140625,
+ 0.0215301513671875,
+ 0.157958984375,
+ 0.196044921875,
+ 0.135986328125,
+ 0.02520751953125,
+ 0.06500244140625,
+ 0.126953125,
+ 0.0672607421875,
+ 0.115234375,
+ 0.210693359375,
+ 0.029205322265625,
+ 29.71875,
+ 13.7890625,
+ 11.1484375,
+ 1.21875,
+ 2.265625,
+ 2.9296875,
+ 6.015625,
+ 9.1875,
+ 0.40673828125,
+ 2.337890625,
+ 1.568359375,
+ 4.26171875,
+ 1.39453125,
+ 0.07220458984375,
+ 0.72509765625,
+ 0.320068359375,
+ 0.6005859375,
+ 3.63671875,
+ 2.693359375,
+ 2.37109375,
+ 0.59765625,
+ 0.1495361328125,
+ 0.1451416015625,
+ 0.468505859375,
+ 0.8642578125,
+ 7.68359375,
+ 0.75537109375,
+ 0.11578369140625,
+ 0.7314453125,
+ 1.6982421875,
+ 25.75,
+ 1.4951171875,
+ 2.8984375,
+ 0.443603515625,
+ 3.453125,
+ 2.4296875,
+ 3.826171875,
+ 0.5439453125,
+ 0.31689453125,
+ 0.79345703125,
+ 1.474609375,
+ 3.0859375,
+ 2.138671875,
+ 1.23046875,
+ 1.5556640625,
+ 4.03125,
+ 4.01953125,
+ 0.97705078125,
+ 1.888671875,
+ 17.796875,
+ 0.7734375,
+ 1.4599609375,
+ 26.34375,
+ 3.89453125,
+ 1.916015625,
+ 1.146484375,
+ 5.328125,
+ 0.044525146484375,
+ 0.132080078125,
+ 0.69189453125,
+ 0.09136962890625,
+ 0.28662109375,
+ 0.306884765625,
+ 0.3935546875,
+ 2.294921875,
+ 1.2705078125,
+ 3.626953125,
+ 0.71142578125,
+ 0.8720703125,
+ 0.07440185546875,
+ 0.2484130859375,
+ 0.044952392578125,
+ 0.142822265625,
+ 0.9345703125,
+ 2.109375,
+ 0.2337646484375,
+ 1.990234375,
+ 0.40869140625,
+ 1.7880859375,
+ 1.4111328125,
+ 0.8876953125,
+ 0.11041259765625,
+ 1.013671875,
+ 0.232666015625,
+ 1.837890625,
+ 0.273681640625,
+ 0.1556396484375,
+ 1.0732421875,
+ 1.416015625,
+ 1.4990234375,
+ 0.0195465087890625,
+ 1.3310546875,
+ 3.244140625,
+ 0.06817626953125,
+ 0.1566162109375,
+ 0.11688232421875,
+ 0.1859130859375,
+ 0.84814453125,
+ 0.016815185546875,
+ 0.013031005859375,
+ 0.060516357421875
+ ],
+ "sizemode": "area",
+ "sizeref": 0.1775,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ -0.0011398595524951816,
+ 0.809627890586853,
+ 0.06974762678146362,
+ 0.0963250994682312,
+ 0.04117647558450699,
+ 0.041160568594932556,
+ 0.07165680080652237,
+ -0.8779297471046448,
+ -0.5878046154975891,
+ -0.08863263577222824,
+ 0.029038336127996445,
+ -0.18764065206050873,
+ 0.059420179575681686,
+ 0.02056777849793434,
+ -0.7368565797805786,
+ -0.05108256638050079,
+ -0.026935776695609093,
+ -0.19005054235458374,
+ -0.6567605137825012,
+ 0.05606631189584732,
+ -0.04781376197934151,
+ 0.7773208618164062,
+ 0.19786116480827332,
+ 0.7527506351470947,
+ -0.7066736221313477,
+ -0.6901432871818542,
+ -0.6761177778244019,
+ -0.7099840044975281,
+ -0.602024257183075,
+ -0.5585185289382935,
+ -0.6319113969802856,
+ 0.2904660105705261,
+ 0.7303995490074158,
+ -0.45350757241249084,
+ 0.848791241645813,
+ 0.8328090906143188,
+ 0.06413032859563828,
+ 0.0710625872015953,
+ 0.05069432407617569,
+ 0.10986027866601944,
+ 0.1970905065536499,
+ 0.2279222011566162,
+ -0.04842767491936684,
+ -0.47877660393714905,
+ -0.054754987359046936,
+ -0.40584075450897217,
+ -0.1883830726146698,
+ -0.7887542247772217,
+ -0.03422154113650322,
+ 0.07333353906869888,
+ 0.03365639969706535,
+ 0.052973322570323944,
+ 0.04122944548726082,
+ 0.052910223603248596,
+ 0.025029484182596207,
+ 0.7223454117774963,
+ -0.6870201230049133,
+ -0.556106448173523,
+ 0.12420516461133957,
+ -0.4224154055118561,
+ -0.7816706299781799,
+ -0.366450697183609,
+ 0.48679953813552856,
+ 0.05666666105389595,
+ 0.763699471950531,
+ -0.7150017023086548,
+ 0.033930446952581406,
+ 0.030831286683678627,
+ -0.9209955334663391,
+ -0.4054332971572876,
+ 0.046205002814531326,
+ -0.7186921238899231,
+ -0.7330082654953003,
+ 0.04797657951712608,
+ -0.7936450242996216,
+ -0.7193343043327332,
+ -0.730349600315094,
+ -0.7116192579269409,
+ -0.7141682505607605,
+ -0.6940267086029053,
+ 0.20943017303943634,
+ -0.7015073895454407,
+ 0.025537943467497826,
+ -0.24608799815177917,
+ -0.0421074703335762,
+ -0.11350720375776291,
+ -0.6745553612709045,
+ 0.013017826713621616,
+ 0.9792338609695435,
+ 0.8296754956245422,
+ 0.8472424149513245,
+ 0.05232561379671097,
+ -0.7321237325668335,
+ -0.05570441484451294,
+ -0.7420641183853149,
+ -0.7219606041908264,
+ -0.7297453284263611,
+ -0.7223954796791077,
+ -0.6876248121261597,
+ -0.7353065609931946,
+ -0.7228459119796753,
+ -0.17189143598079681,
+ -0.38604849576950073,
+ -0.024125978350639343,
+ -0.5239417552947998,
+ 0.9031001925468445,
+ 0.03663995862007141,
+ 0.05142136290669441,
+ 0.055118899792432785,
+ 0.032401856034994125,
+ 0.03710038587450981,
+ 0.15421798825263977,
+ -0.1702696979045868,
+ 0.19591106474399567,
+ -0.6432356238365173,
+ 0.02205345593392849,
+ 0.040139004588127136,
+ 0.04921097680926323,
+ -7.249904447235167E-4,
+ -0.22495222091674805,
+ -0.7264729142189026,
+ -0.6920855641365051,
+ -0.9181551337242126,
+ -0.7301520705223083,
+ -0.70099937915802,
+ -0.3870975077152252,
+ -0.5571581721305847,
+ -0.28836140036582947,
+ 0.020672721788287163,
+ -0.0027095857076346874,
+ 0.05337756127119064,
+ 0.04265901446342468,
+ -0.30283021926879883,
+ -0.47514113783836365,
+ -0.728896975517273,
+ -0.7021428346633911,
+ 0.00931551307439804,
+ 0.9118783473968506,
+ -0.5564721822738647,
+ 0.8940155506134033,
+ 0.9217650890350342,
+ 0.037775445729494095,
+ 0.027295434847474098,
+ 0.05244326964020729,
+ -0.25380825996398926,
+ -0.25703030824661255,
+ 0.11356037855148315,
+ 0.010189581662416458,
+ -0.6997936367988586,
+ -0.7163465619087219,
+ -0.6102805733680725,
+ -0.7050689458847046,
+ -0.7190935015678406,
+ -0.7321537137031555,
+ -0.7419948577880859,
+ -0.7279207110404968,
+ -0.7188764214515686,
+ -0.42464178800582886,
+ -0.7253665328025818,
+ -0.7330521941184998,
+ -0.7217390537261963,
+ -0.4202941656112671,
+ -0.13390839099884033,
+ -0.05241693556308746,
+ -0.20245100557804108,
+ -0.2756772041320801,
+ -0.5093344449996948,
+ -0.13546434044837952,
+ -0.1414567232131958,
+ -0.09718021750450134,
+ -0.1876874715089798,
+ 0.045983266085386276,
+ 0.4467388391494751,
+ -0.6732386350631714,
+ -0.6460868120193481,
+ -0.7732229232788086,
+ -0.2314450740814209,
+ -0.653906524181366,
+ -0.6579458117485046,
+ -0.33056291937828064,
+ -0.2684735059738159,
+ -0.5791526436805725,
+ -0.6413567662239075,
+ 0.5648340582847595,
+ 0.8456774950027466,
+ -0.1616477370262146,
+ 0.38907694816589355,
+ 0.7367023229598999,
+ 0.873211145401001,
+ -0.5645747780799866,
+ -0.6627042889595032,
+ -0.7364152669906616,
+ -0.7114137411117554,
+ -0.25183168053627014,
+ -0.7274817228317261,
+ -0.6655542254447937,
+ -0.4479897618293762,
+ -0.684563398361206,
+ -0.6741992235183716,
+ 0.3975055515766144,
+ -0.7103220820426941,
+ 0.4325457215309143,
+ 0.0768018588423729,
+ 0.5752980709075928,
+ -0.6452240943908691,
+ 0.7414750456809998,
+ 0.8289605975151062,
+ 0.8546562790870667,
+ 0.8655644059181213,
+ 0.0054762051440775394,
+ 0.022736096754670143,
+ 0.02128562331199646,
+ -0.07149296253919601,
+ 0.02446196787059307,
+ 0.03633088245987892,
+ 0.013175562024116516,
+ 0.07835343480110168,
+ 0.07143526524305344,
+ 0.13227644562721252,
+ 0.08236099034547806,
+ 0.07790619879961014,
+ 0.046067021787166595,
+ 0.565322756767273,
+ 0.7316933870315552,
+ -0.4346209466457367,
+ -0.07084443420171738,
+ 0.0010278142290189862,
+ 0.13256415724754333,
+ 0.024044102057814598,
+ 0.12312287092208862,
+ 0.07185087352991104,
+ 0.23499110341072083,
+ -0.17068572342395782,
+ -0.6682272553443909,
+ -0.7276057004928589,
+ 0.3221725821495056,
+ -0.677288830280304,
+ -0.822158694267273,
+ -0.5051053166389465,
+ -0.11646917462348938,
+ 0.16467739641666412,
+ 0.8650332093238831,
+ -0.3163501024246216,
+ -0.16679412126541138,
+ -0.23082387447357178,
+ 0.04417457431554794,
+ 0.008096275851130486,
+ -0.033422280102968216,
+ 0.12107793241739273,
+ 0.014182604849338531,
+ 0.29028740525245667,
+ 0.34212586283683777,
+ 0.4193885326385498,
+ 0.4197191894054413,
+ -0.7085763216018677,
+ -0.7196729183197021,
+ -0.5033406019210815,
+ 0.6543252468109131,
+ 0.031390879303216934,
+ -0.0037865526974201202,
+ 0.00328606809489429,
+ 0.061127278953790665,
+ -0.060382697731256485,
+ -0.23022930324077606,
+ -0.4674068093299866,
+ -0.671694815158844,
+ -0.2490738481283188,
+ -0.705955982208252,
+ -0.8240906596183777,
+ -0.6267858743667603,
+ -0.7222918272018433,
+ -0.7588716745376587,
+ -0.4952603876590729,
+ -0.40812769532203674,
+ 0.4208625555038452,
+ -0.02420545183122158,
+ -0.05676959827542305,
+ 0.035987257957458496,
+ 0.017881469801068306,
+ 0.015257909893989563,
+ 0.002173120155930519,
+ -0.08461256325244904,
+ -0.046754371374845505,
+ -0.1855904459953308,
+ 0.053307805210351944,
+ -0.01872209459543228,
+ 0.032131556421518326,
+ 0.1030074954032898,
+ 0.6574462652206421,
+ -0.6904854774475098,
+ -0.5693529844284058,
+ -0.6202643513679504,
+ -0.7345667481422424,
+ -0.6136926412582397,
+ -0.7273955345153809,
+ -0.7009496092796326,
+ -0.7254331707954407,
+ -0.47035640478134155,
+ -0.6992074251174927,
+ -0.6876731514930725,
+ -0.6709646582603455,
+ 0.10886523872613907,
+ -0.6495754718780518,
+ -0.6562865376472473,
+ -0.2569567561149597,
+ -0.09854105114936829,
+ -0.021854696795344353,
+ -0.06706412136554718,
+ 0.4222886264324188,
+ 0.055413663387298584,
+ -0.2184714376926422,
+ -0.658990204334259,
+ -0.6959242224693298,
+ 0.008863944560289383,
+ -0.025872543454170227,
+ -0.08362074196338654,
+ 0.04926034435629845,
+ -0.0019682766869664192,
+ 0.0455695241689682,
+ 0.036311402916908264,
+ 0.07174324989318848,
+ -0.009514701552689075,
+ 0.19290976226329803,
+ -0.006408065557479858,
+ -0.061075177043676376,
+ -0.17157086730003357,
+ -0.14536869525909424,
+ -0.13993486762046814,
+ 0.05780040845274925,
+ -0.1653759479522705,
+ -0.1879323422908783,
+ -0.06380297243595123,
+ 0.04797293245792389,
+ 0.04131830483675003,
+ 0.03306829556822777,
+ 0.040519848465919495,
+ 0.06560929119586945,
+ -0.06223201006650925,
+ -0.6714877486228943,
+ -0.668586254119873,
+ -0.6725595593452454,
+ -0.6120314002037048,
+ -0.6815723180770874,
+ -0.688214123249054,
+ -0.6789411306381226,
+ -0.6614192128181458,
+ -0.17518550157546997,
+ -0.2100098580121994,
+ -0.38580837845802307,
+ 0.8662015199661255,
+ 0.8518232107162476,
+ 0.5880253314971924,
+ 0.7809062600135803,
+ 0.8193395733833313,
+ 0.09380659461021423,
+ 0.3780820071697235,
+ -0.7491925358772278,
+ -0.7431026697158813,
+ -0.5127692222595215,
+ 0.6245383024215698,
+ 0.2704538106918335,
+ 0.8577351570129395,
+ 0.3282805383205414,
+ 0.8782883286476135,
+ 0.792903482913971,
+ -0.6156633496284485,
+ 0.9703330993652344,
+ 0.7723748087882996,
+ -0.6627740263938904,
+ -0.601904571056366,
+ -0.6411561965942383,
+ -0.864931583404541,
+ -0.6601561307907104,
+ -0.6716697216033936,
+ -0.6482905149459839,
+ -0.6513003706932068,
+ 0.8156620264053345,
+ 0.2553466856479645,
+ 0.40835994482040405,
+ -0.7588714957237244,
+ 0.3685096204280853,
+ 0.5121188163757324,
+ 0.24431969225406647,
+ 0.528382420539856,
+ -0.6706420183181763,
+ 0.33355942368507385,
+ 0.8524879813194275,
+ -0.6735787391662598,
+ -0.6395411491394043,
+ -0.6202766299247742,
+ -0.664509117603302,
+ -0.6512538194656372,
+ -0.6353956460952759,
+ -0.6672720909118652,
+ -0.6575061678886414,
+ -0.5257205963134766,
+ -0.4624637961387634,
+ 0.7692215442657471,
+ 0.810077965259552,
+ 0.5855278372764587,
+ 0.7745266556739807,
+ 0.8632791042327881,
+ 0.8638334274291992,
+ 0.8771855235099792,
+ 0.8550805449485779,
+ -0.6622002720832825,
+ -0.673192024230957,
+ -0.8964987397193909,
+ 0.20889988541603088,
+ -0.06234037131071091,
+ 0.3726654350757599,
+ 0.5980188846588135,
+ 0.4161195158958435,
+ 0.2633375823497772,
+ 0.44150376319885254,
+ -0.9211280345916748,
+ -0.7881079912185669,
+ 0.012994705699384212,
+ 0.07774166762828827,
+ 0.5950238704681396,
+ 0.502331018447876,
+ 0.30125540494918823,
+ 0.6298440098762512,
+ -0.9458382725715637,
+ -0.5367382168769836,
+ 0.9245848655700684,
+ 0.9231136441230774,
+ 0.573512613773346,
+ 0.43961405754089355,
+ -0.6633566617965698,
+ -0.6650965213775635,
+ 0.7325651049613953,
+ 0.8398680686950684,
+ -0.6661885380744934,
+ -0.44028589129447937,
+ 0.3038759231567383,
+ 0.4990460276603699,
+ -0.2007579207420349,
+ -0.5200492739677429
+ ],
+ "y": [
+ -0.018674299120903015,
+ 0.24805636703968048,
+ -0.02638666331768036,
+ -0.03306969255208969,
+ -0.017424896359443665,
+ -0.030737752094864845,
+ -0.5156904458999634,
+ 0.42971450090408325,
+ -0.3598346412181854,
+ 0.0025287913158535957,
+ 0.045539405196905136,
+ 0.004702780395746231,
+ 0.013240671716630459,
+ -0.03213915973901749,
+ 0.027393633499741554,
+ -0.8171963095664978,
+ -0.8919878602027893,
+ -0.08416147530078888,
+ 0.689404308795929,
+ -0.016640733927488327,
+ 0.016104018315672874,
+ 0.2865713834762573,
+ 0.8189224004745483,
+ 0.2309594303369522,
+ -0.6838052272796631,
+ -0.7131826877593994,
+ -0.626899778842926,
+ -0.6844364404678345,
+ -0.6548484563827515,
+ -0.41763070225715637,
+ -0.6937478184700012,
+ -0.4657087028026581,
+ 0.5598005056381226,
+ -0.4464969336986542,
+ 0.07950218766927719,
+ -0.022913211956620216,
+ -0.015928789973258972,
+ -0.016184942796826363,
+ -0.016305657103657722,
+ -0.0336410328745842,
+ -0.0248273853212595,
+ -0.04283851385116577,
+ -0.1739131659269333,
+ 0.6939753890037537,
+ 0.15316353738307953,
+ 0.6542943120002747,
+ -0.9770134091377258,
+ -0.5959995985031128,
+ -0.012953829020261765,
+ -0.004930038936436176,
+ -0.021871350705623627,
+ -0.0161505825817585,
+ -0.024803703650832176,
+ -0.02386685088276863,
+ -0.034202493727207184,
+ -0.4132509231567383,
+ -0.6035439372062683,
+ -0.4333980679512024,
+ 0.5805549621582031,
+ -0.1635126769542694,
+ -0.6186167597770691,
+ -0.8033138513565063,
+ -0.7620169520378113,
+ 0.7827224135398865,
+ 0.5227838158607483,
+ -0.22576400637626648,
+ -0.02015569992363453,
+ -0.014565558172762394,
+ -0.04092080146074295,
+ 0.8701378703117371,
+ -0.016367660835385323,
+ -0.6679295897483826,
+ -0.6398253440856934,
+ -0.021323807537555695,
+ -0.09139224141836166,
+ -0.6653264760971069,
+ -0.6470897197723389,
+ -0.6876797676086426,
+ -0.6666207313537598,
+ -0.6999855637550354,
+ -0.43153998255729675,
+ -0.6703540682792664,
+ 0.0626009851694107,
+ 0.18839475512504578,
+ 0.08309358358383179,
+ -0.08366020768880844,
+ -0.3400706946849823,
+ -0.10761280357837677,
+ 0.04952056705951691,
+ -0.5200297832489014,
+ 0.5171307921409607,
+ -0.0775466337800026,
+ -0.21038158237934113,
+ 0.9902110695838928,
+ -0.6174695491790771,
+ -0.6635432839393616,
+ -0.6468299031257629,
+ -0.6614500284194946,
+ -0.6986761093139648,
+ -0.6413640379905701,
+ -0.665330171585083,
+ -0.7770305871963501,
+ -0.6442868113517761,
+ -0.40529075264930725,
+ -0.7833847403526306,
+ 0.09154053777456284,
+ -0.024557696655392647,
+ -0.016349326819181442,
+ -0.021512918174266815,
+ -0.02181260660290718,
+ -0.018776504322886467,
+ -0.04554426670074463,
+ 0.02602347545325756,
+ -0.9747735857963562,
+ -0.2177213579416275,
+ -0.023143144324421883,
+ -0.018208302557468414,
+ -0.01644260250031948,
+ 0.9994505643844604,
+ 0.972690999507904,
+ -0.6697397828102112,
+ -0.7035051584243774,
+ 0.38310813903808594,
+ -0.6577508449554443,
+ -0.67193603515625,
+ -0.5492812395095825,
+ -0.5276050567626953,
+ 0.9435939192771912,
+ -0.015241469256579876,
+ -0.04492774233222008,
+ -0.01811555027961731,
+ -0.018077418208122253,
+ -0.25946685671806335,
+ -0.26939913630485535,
+ -0.653998076915741,
+ -0.6899176836013794,
+ -0.03532273694872856,
+ 0.3178308308124542,
+ 0.8293931484222412,
+ 0.03781206160783768,
+ 0.08286594599485397,
+ -0.050469983369112015,
+ 0.07995034754276276,
+ -0.016701437532901764,
+ 0.15639181435108185,
+ 0.05851634591817856,
+ -0.008189890533685684,
+ -0.36512112617492676,
+ -0.7020251154899597,
+ -0.6736712455749512,
+ -0.6515661478042603,
+ -0.6910709142684937,
+ -0.6708459854125977,
+ -0.6423221230506897,
+ -0.6225466132164001,
+ -0.6505694389343262,
+ -0.6756730675697327,
+ -0.44943225383758545,
+ -0.6615647673606873,
+ -0.6432532072067261,
+ -0.6649566888809204,
+ -0.4092273712158203,
+ 0.032632894814014435,
+ 0.16534635424613953,
+ -0.21276633441448212,
+ 0.09687406569719315,
+ -0.16456137597560883,
+ -0.18940792977809906,
+ 0.08642453700304031,
+ 0.1196681335568428,
+ -0.032438285648822784,
+ 0.34186479449272156,
+ 0.8946600556373596,
+ -0.32397565245628357,
+ -0.4083586633205414,
+ 0.608862578868866,
+ 0.14442893862724304,
+ -0.3993036150932312,
+ -0.1743355393409729,
+ -0.3535681664943695,
+ -0.9425238370895386,
+ -0.37502676248550415,
+ -0.6718838214874268,
+ -0.7799630165100098,
+ -0.4555708169937134,
+ -0.15977051854133606,
+ -0.7915419936180115,
+ -0.47926077246665955,
+ 0.24287672340869904,
+ -0.7208194732666016,
+ -0.7241337895393372,
+ -0.6321106553077698,
+ -0.677838146686554,
+ -0.3872012495994568,
+ -0.651806116104126,
+ -0.6909002065658569,
+ -0.44872164726257324,
+ -0.7227917909622192,
+ -0.7326792478561401,
+ -0.3689688444137573,
+ -0.6710150837898254,
+ 0.06982285529375076,
+ -0.1892741173505783,
+ 0.07957816123962402,
+ -0.6898192167282104,
+ -0.06892593950033188,
+ 0.13048169016838074,
+ -0.028767811134457588,
+ 0.14862792193889618,
+ -0.035451214760541916,
+ -0.018043309450149536,
+ -0.018779629841446877,
+ 0.01965133287012577,
+ -0.025112882256507874,
+ -0.03029714524745941,
+ -0.04282688722014427,
+ -0.03382624313235283,
+ -0.033939991146326065,
+ -0.08381835371255875,
+ -0.01021291222423315,
+ -0.005703117232769728,
+ 0.004994526505470276,
+ -0.26929670572280884,
+ -0.04601676017045975,
+ 0.8795770406723022,
+ 0.5408568382263184,
+ 0.029619168490171432,
+ 0.012167303822934628,
+ -0.017177939414978027,
+ -0.0717184841632843,
+ -0.017756158486008644,
+ -0.04214857891201973,
+ -0.13990864157676697,
+ -0.6378054618835449,
+ -0.663585901260376,
+ -0.049804434180259705,
+ -0.6988391280174255,
+ 0.22298948466777802,
+ -0.5779998898506165,
+ -0.17491208016872406,
+ -0.08955225348472595,
+ -0.0895887091755867,
+ -0.26539257168769836,
+ 0.05829829350113869,
+ -0.20114991068840027,
+ -0.01662137545645237,
+ -0.030352897942066193,
+ -0.038138411939144135,
+ 0.05358550325036049,
+ 0.048927322030067444,
+ -0.9456944465637207,
+ -0.6073108911514282,
+ -0.3322969675064087,
+ -0.12640447914600372,
+ -0.6854430437088013,
+ -0.6659093499183655,
+ -0.7328958511352539,
+ -0.10776042193174362,
+ -0.024222394451498985,
+ -0.0576920285820961,
+ -0.05186845362186432,
+ -0.05206436291337013,
+ -0.0724758729338646,
+ -0.1268094927072525,
+ 0.7879969477653503,
+ -0.3192436695098877,
+ -0.19456051290035248,
+ -0.2197311669588089,
+ -0.25283119082450867,
+ -0.6192461848258972,
+ -0.6764324307441711,
+ -0.64186030626297,
+ -0.5592206120491028,
+ -0.1008397787809372,
+ 0.09852902591228485,
+ -0.008655737154185772,
+ 0.013468414545059204,
+ -0.054650820791721344,
+ -0.04026064649224281,
+ -0.03207840025424957,
+ -0.03104386478662491,
+ 0.010438408702611923,
+ -0.027150141075253487,
+ 0.025454584509134293,
+ -0.016149064525961876,
+ -0.02786032296717167,
+ -0.021587898954749107,
+ -0.010810716077685356,
+ -0.1884923130273819,
+ -0.711418867111206,
+ -0.7119019627571106,
+ -0.653114378452301,
+ -0.6363973617553711,
+ -0.6532569527626038,
+ -0.651462733745575,
+ -0.6877374649047852,
+ -0.655946671962738,
+ -0.6725693941116333,
+ -0.6962853670120239,
+ -0.7070018649101257,
+ -0.6577903628349304,
+ -0.010506951250135899,
+ -0.6487892866134644,
+ -0.6375510096549988,
+ 0.1308039128780365,
+ 0.03622090816497803,
+ -0.9069985151290894,
+ -0.5168417692184448,
+ -0.40273910760879517,
+ -0.8759897351264954,
+ -0.6727734804153442,
+ -0.6471818089485168,
+ -0.7024239897727966,
+ -0.023641349747776985,
+ -0.04431089013814926,
+ -0.06400628387928009,
+ -0.02317158132791519,
+ 0.025820933282375336,
+ -0.035109542310237885,
+ -0.01541768666356802,
+ -0.04409339278936386,
+ -0.04388292878866196,
+ -0.07859423011541367,
+ 0.04085201770067215,
+ -0.17328405380249023,
+ 0.05247490480542183,
+ 0.11458826810121536,
+ -0.013600061647593975,
+ 0.963301956653595,
+ 0.8890361189842224,
+ 0.07153508067131042,
+ -0.014001845382153988,
+ -0.029653750360012054,
+ -0.03645433485507965,
+ -0.027713103219866753,
+ -0.006913586985319853,
+ 0.00663621723651886,
+ 0.00894822645932436,
+ -0.2977917194366455,
+ -0.313458114862442,
+ -0.3080196976661682,
+ -0.4416261911392212,
+ -0.061333343386650085,
+ -0.3066385090351105,
+ -0.33916619420051575,
+ -0.36527809500694275,
+ 0.9838041663169861,
+ 0.9681852459907532,
+ 0.8773671984672546,
+ -0.003829403780400753,
+ 0.07985233515501022,
+ 0.25836631655693054,
+ 0.13452787697315216,
+ 0.2665937542915344,
+ -0.9683425426483154,
+ -0.7811500430107117,
+ 0.3929261267185211,
+ 0.3114566504955292,
+ 0.8538468480110168,
+ 0.32818177342414856,
+ 0.9615811705589294,
+ 0.07323306053876877,
+ -0.9220800399780273,
+ -0.1374577283859253,
+ 0.3432832658290863,
+ 0.41103264689445496,
+ 0.01775982603430748,
+ 0.4314282536506653,
+ -0.2899169623851776,
+ -0.4214915335178375,
+ -0.3455054461956024,
+ 0.24258819222450256,
+ -0.102960966527462,
+ -0.29542696475982666,
+ -0.3633171319961548,
+ -0.307557612657547,
+ 0.0820944681763649,
+ -0.7632875442504883,
+ -0.7734123468399048,
+ 0.23747409880161285,
+ -0.9232854247093201,
+ -0.854989230632782,
+ 0.9128401279449463,
+ 0.5675595998764038,
+ 0.027125036343932152,
+ -0.9275726079940796,
+ -0.28065618872642517,
+ -0.2998053729534149,
+ -0.4101729393005371,
+ -0.3804727792739868,
+ -0.29005908966064453,
+ -0.34813305735588074,
+ -0.37179136276245117,
+ 0.4314357340335846,
+ 0.3162822127342224,
+ -0.5938930511474609,
+ 0.8830918073654175,
+ 0.11067628860473633,
+ 0.06756053864955902,
+ 0.7670525312423706,
+ 0.22792351245880127,
+ 0.16409516334533691,
+ -0.004199131857603788,
+ 0.08020174503326416,
+ -0.007221693638712168,
+ 0.6982879638671875,
+ 0.48155930638313293,
+ 0.03843793272972107,
+ 0.97738116979599,
+ 0.35574689507484436,
+ 0.48920130729675293,
+ -0.6148430705070496,
+ -0.7834866046905518,
+ -0.942107617855072,
+ -0.7420948147773743,
+ 0.16041319072246552,
+ 0.2871788740158081,
+ -0.9968980550765991,
+ -0.9789736866950989,
+ -0.3179907202720642,
+ -0.814441442489624,
+ 0.9018077254295349,
+ 0.5895714163780212,
+ 0.21353040635585785,
+ 0.8400093913078308,
+ -0.04482244327664375,
+ -0.005752770695835352,
+ 0.7624872922897339,
+ 0.10339661687612534,
+ 0.41904616355895996,
+ 0.4018731415271759,
+ 0.21101903915405273,
+ 0.2975347936153412,
+ -0.584449291229248,
+ 0.8266994953155518,
+ -0.7861741781234741,
+ -0.835517168045044,
+ -0.02581600658595562,
+ -0.07100936770439148
+ ],
+ "z": [
+ -0.9998250007629395,
+ 0.5319499969482422,
+ -0.9972156286239624,
+ -0.9948004484176636,
+ -0.9989999532699585,
+ -0.9986796379089355,
+ -0.8537731766700745,
+ -0.21115121245384216,
+ -0.7245720624923706,
+ -0.9960612058639526,
+ -0.9985404014587402,
+ -0.9822264313697815,
+ -0.9981452226638794,
+ -0.9992717504501343,
+ -0.6754940152168274,
+ -0.5740912556648254,
+ -0.4512561559677124,
+ -0.9781603813171387,
+ -0.3055933713912964,
+ -0.9982883334159851,
+ -0.9987264275550842,
+ -0.5600439310073853,
+ -0.5387179255485535,
+ 0.6164610385894775,
+ 0.1817217320203781,
+ 0.12277030944824219,
+ 0.38711950182914734,
+ 0.16573922336101532,
+ 0.45688092708587646,
+ 0.7166879773139954,
+ 0.3455459177494049,
+ 0.8359096646308899,
+ 0.391330748796463,
+ 0.7713438272476196,
+ 0.5227168798446655,
+ 0.55308598279953,
+ -0.997814416885376,
+ -0.9973405599594116,
+ -0.9985811710357666,
+ -0.9933775663375854,
+ -0.9800708889961243,
+ -0.9727365374565125,
+ -0.9835695624351501,
+ -0.5377463698387146,
+ -0.9866827726364136,
+ -0.6381160616874695,
+ -0.09978191554546356,
+ -0.1505032479763031,
+ -0.9993303418159485,
+ -0.9972952604293823,
+ -0.9991941452026367,
+ -0.9984652996063232,
+ -0.9988417625427246,
+ -0.9983140230178833,
+ -0.999101459980011,
+ -0.5544734001159668,
+ 0.404645711183548,
+ 0.709162712097168,
+ 0.8046918511390686,
+ 0.8915317058563232,
+ 0.07939998805522919,
+ 0.4694686830043793,
+ 0.42703187465667725,
+ -0.6197859048843384,
+ 0.37876150012016296,
+ -0.661666989326477,
+ -0.9992209672927856,
+ -0.9994184374809265,
+ -0.3874182403087616,
+ 0.28014954924583435,
+ -0.9987978935241699,
+ 0.19326607882976532,
+ 0.23091615736484528,
+ -0.9986208081245422,
+ -0.601477324962616,
+ 0.1997470110654831,
+ 0.21877937018871307,
+ 0.14385561645030975,
+ 0.21349605917930603,
+ 0.16836634278297424,
+ 0.8774464130401611,
+ 0.24189414083957672,
+ -0.9977118968963623,
+ -0.9507618546485901,
+ -0.9956517815589905,
+ -0.9900086522102356,
+ -0.6552305221557617,
+ -0.9941076040267944,
+ 0.19659288227558136,
+ -0.2029966562986374,
+ 0.12147442251443863,
+ -0.9956146478652954,
+ -0.6478692293167114,
+ 0.1279810070991516,
+ 0.2609063684940338,
+ 0.19617179036140442,
+ 0.22154611349105835,
+ 0.20156511664390564,
+ 0.19754396378993988,
+ 0.2190350741147995,
+ 0.18662703037261963,
+ 0.6055384874343872,
+ 0.6601977348327637,
+ 0.9138693809509277,
+ 0.3343551456928253,
+ 0.41955986618995667,
+ -0.9990267157554626,
+ -0.9985432028770447,
+ -0.9982479810714722,
+ -0.9992368221282959,
+ -0.9991351366043091,
+ -0.9869865775108337,
+ -0.9850537776947021,
+ -0.10693623870611191,
+ -0.7340608835220337,
+ -0.999488890171051,
+ -0.999028205871582,
+ -0.9986530542373657,
+ 0.03313785791397095,
+ 0.05717131122946739,
+ 0.15390141308307648,
+ -0.16154895722866058,
+ -0.10109037160873413,
+ 0.18504545092582703,
+ 0.23895969986915588,
+ 0.740571141242981,
+ 0.6412547826766968,
+ 0.1627214252948761,
+ -0.999670147895813,
+ -0.9989866018295288,
+ -0.9984101057052612,
+ -0.9989261031150818,
+ -0.9170446395874023,
+ -0.8376544117927551,
+ 0.20247386395931244,
+ 0.17609374225139618,
+ -0.9993324875831604,
+ -0.25973355770111084,
+ 0.04945412278175354,
+ 0.4464375972747803,
+ 0.37879058718681335,
+ -0.9980109333992004,
+ -0.9964250922203064,
+ -0.9984842538833618,
+ -0.9545276165008545,
+ -0.9646300673484802,
+ -0.993497371673584,
+ -0.9309042692184448,
+ 0.13209658861160278,
+ 0.1816994696855545,
+ 0.4505765736103058,
+ 0.15905536711215973,
+ 0.18130184710025787,
+ 0.22665655612945557,
+ 0.24875561892986298,
+ 0.21654295921325684,
+ 0.16334791481494904,
+ 0.7859325408935547,
+ 0.19019854068756104,
+ 0.2210426777601242,
+ 0.19215941429138184,
+ 0.8098676800727844,
+ -0.9904562830924988,
+ -0.9848415851593018,
+ -0.9558996558189392,
+ -0.9563563466072083,
+ -0.8446880578994751,
+ -0.9725091457366943,
+ -0.9861647486686707,
+ -0.9880462884902954,
+ -0.9816930294036865,
+ -0.9386234879493713,
+ -0.0028078414034098387,
+ -0.6646723747253418,
+ -0.6448372006416321,
+ 0.17723599076271057,
+ -0.9620672464370728,
+ -0.6426219344139099,
+ -0.7326080799102783,
+ -0.8750529885292053,
+ -0.19892406463623047,
+ -0.7238350510597229,
+ -0.37045037746429443,
+ -0.26948121190071106,
+ -0.2780015170574188,
+ -0.9738292098045349,
+ -0.47125405073165894,
+ 0.47705212235450745,
+ 0.42250826954841614,
+ 0.40208765864372253,
+ 0.19092769920825958,
+ 0.2410990446805954,
+ 0.18554221093654633,
+ 0.8869363069534302,
+ 0.21428793668746948,
+ 0.2823023200035095,
+ 0.7732748985290527,
+ 0.09457867592573166,
+ 0.0929328203201294,
+ 0.8401495218276978,
+ 0.21255925297737122,
+ 0.8989043235778809,
+ 0.9789161086082458,
+ 0.814063549041748,
+ 0.3283829689025879,
+ 0.6674308776855469,
+ 0.5438740253448486,
+ 0.5183965563774109,
+ 0.4782344102859497,
+ -0.9993563890457153,
+ -0.9995787143707275,
+ -0.9995970129966736,
+ -0.9972475171089172,
+ -0.9993852972984314,
+ -0.9988804459571838,
+ -0.9989956617355347,
+ -0.9963515400886536,
+ -0.9968676567077637,
+ -0.9876626133918762,
+ -0.9965502619743347,
+ -0.9969444274902344,
+ -0.9989258646965027,
+ -0.7796726822853088,
+ -0.6800788640975952,
+ 0.19351699948310852,
+ -0.8381258845329285,
+ -0.9995606541633606,
+ -0.9910997748374939,
+ -0.9995632767677307,
+ -0.9897965788841248,
+ -0.9972572922706604,
+ -0.9710832238197327,
+ -0.9753419756889343,
+ 0.38298389315605164,
+ 0.17390695214271545,
+ 0.9453699588775635,
+ 0.2300080507993698,
+ -0.5237659215927124,
+ 0.6409249305725098,
+ -0.9776710867881775,
+ -0.9822737574577332,
+ -0.49365103244781494,
+ -0.9107630848884583,
+ -0.9842667579650879,
+ -0.9519762992858887,
+ -0.9988855719566345,
+ -0.9995064735412598,
+ -0.9987133741378784,
+ -0.9911956191062927,
+ -0.9987016320228577,
+ -0.14627093076705933,
+ -0.7170239090919495,
+ 0.844802975654602,
+ 0.898809015750885,
+ 0.16759295761585236,
+ 0.19655945897102356,
+ 0.4577246904373169,
+ 0.7484959363937378,
+ -0.999213695526123,
+ -0.9983272552490234,
+ -0.9986485242843628,
+ -0.9967711567878723,
+ -0.9955406188964844,
+ -0.9648388028144836,
+ 0.40073904395103455,
+ -0.6685128808021545,
+ -0.9487404227256775,
+ -0.6733085513114929,
+ -0.5069034099578857,
+ 0.4729415476322174,
+ 0.14399182796478271,
+ 0.11013153195381165,
+ 0.6648228764533997,
+ 0.9073385000228882,
+ 0.901757538318634,
+ -0.9996694922447205,
+ -0.9982964992523193,
+ -0.997856855392456,
+ -0.9990292191505432,
+ -0.9993689060211182,
+ -0.9995157122612,
+ -0.9963592290878296,
+ -0.9985373616218567,
+ -0.982297420501709,
+ -0.9984475374221802,
+ -0.9994364976882935,
+ -0.9992504715919495,
+ -0.9946218729019165,
+ -0.729544460773468,
+ 0.13081692159175873,
+ 0.4111359417438507,
+ 0.4344121217727661,
+ 0.23539365828037262,
+ 0.44343745708465576,
+ 0.21562045812606812,
+ 0.18890966475009918,
+ 0.2085203230381012,
+ 0.5713275074958801,
+ 0.16215910017490387,
+ 0.16508808732032776,
+ 0.342225581407547,
+ 0.994001030921936,
+ 0.39638879895210266,
+ 0.4035053551197052,
+ -0.9575299024581909,
+ -0.9944735765457153,
+ -0.4205664098262787,
+ -0.8534500002861023,
+ -0.8120797872543335,
+ -0.47913601994514465,
+ 0.7068564295768738,
+ 0.38325926661491394,
+ 0.14929836988449097,
+ -0.9996812343597412,
+ -0.9986827373504639,
+ -0.994439959526062,
+ -0.9985170960426331,
+ -0.9996646642684937,
+ -0.9983440041542053,
+ -0.9992216229438782,
+ -0.9964480400085449,
+ -0.9989913702011108,
+ -0.9780638217926025,
+ -0.9991446733474731,
+ -0.9829763174057007,
+ -0.9837732911109924,
+ -0.9827194213867188,
+ -0.9900673031806946,
+ 0.2621228098869324,
+ 0.4269258677959442,
+ -0.9795734286308289,
+ -0.9978642463684082,
+ -0.998408317565918,
+ -0.9984807372093201,
+ -0.9990687966346741,
+ -0.999154806137085,
+ -0.9978233575820923,
+ -0.9980216026306152,
+ -0.6785457730293274,
+ -0.6743414998054504,
+ -0.6728948950767517,
+ -0.6560365557670593,
+ -0.729175865650177,
+ -0.6575212478637695,
+ -0.6511568427085876,
+ -0.6550546288490295,
+ 0.03793833404779434,
+ 0.13606302440166473,
+ 0.28526952862739563,
+ 0.49968013167381287,
+ 0.5177072882652283,
+ 0.7664679288864136,
+ 0.6099898219108582,
+ 0.5075535178184509,
+ 0.23132891952991486,
+ 0.49684855341911316,
+ -0.5332163572311401,
+ -0.5922779440879822,
+ 0.08951752632856369,
+ 0.7086949944496155,
+ -0.047079022973775864,
+ 0.508849024772644,
+ 0.2049398124217987,
+ 0.45794638991355896,
+ 0.5034486651420593,
+ 0.6723175048828125,
+ 0.2411186546087265,
+ 0.46616169810295105,
+ -0.6904191970825195,
+ -0.6782740950584412,
+ -0.6852334141731262,
+ -0.4393681287765503,
+ -0.7440382242202759,
+ -0.6793988347053528,
+ -0.6691187620162964,
+ -0.693697452545166,
+ 0.5726743936538696,
+ 0.5934562087059021,
+ 0.48484575748443604,
+ -0.6063992977142334,
+ 0.10837338864803314,
+ 0.08202214539051056,
+ 0.3271557092666626,
+ 0.6314175724983215,
+ -0.7412850856781006,
+ 0.1683662235736847,
+ 0.4410174787044525,
+ -0.6755800843238831,
+ -0.6501885652542114,
+ -0.6859281659126282,
+ -0.6886897087097168,
+ -0.674293577671051,
+ -0.6767891049385071,
+ -0.6071336269378662,
+ -0.6838502883911133,
+ -0.609022855758667,
+ 0.07922202348709106,
+ 0.629324197769165,
+ 0.5824167728424072,
+ 0.26227378845214844,
+ 0.590050220489502,
+ 0.47730711102485657,
+ 0.5037599802017212,
+ 0.47340619564056396,
+ 0.5184448957443237,
+ -0.2718174457550049,
+ -0.5611712336540222,
+ 0.44137564301490784,
+ 0.03296774998307228,
+ 0.9325007796287537,
+ 0.7885445356369019,
+ 0.5141414403915405,
+ 0.46151190996170044,
+ 0.20757274329662323,
+ 0.5043507218360901,
+ -0.3546701669692993,
+ -0.5444391965866089,
+ -0.07762427628040314,
+ -0.18859106302261353,
+ 0.7381250262260437,
+ 0.2904283404350281,
+ 0.3098192811012268,
+ 0.5056700110435486,
+ -0.24452947080135345,
+ 0.07934940606355667,
+ 0.3783303201198578,
+ 0.3844843804836273,
+ 0.2994934916496277,
+ 0.8922156095504761,
+ -0.6199662685394287,
+ -0.6294002532958984,
+ 0.6471624970436096,
+ 0.45397672057151794,
+ -0.4632622301578522,
+ -0.3503090441226959,
+ 0.5381353497505188,
+ 0.22992178797721863,
+ 0.9793006777763367,
+ -0.8511794805526733
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 9
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "19729e3e192bd791"
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T11:30:18.197063Z",
+ "start_time": "2025-02-12T11:30:15.639834Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import hdbscan\n",
+ "clusterer = hdbscan.HDBSCAN(min_cluster_size=10, min_samples=10, cluster_selection_epsilon=0.1)\n",
+ "from time import time\n",
+ "t0 = time()\n",
+ "cluster_labels = clusterer.fit_predict(norm_coords)\n",
+ "t1 = time()\n",
+ "print(t1 - t0)\n",
+ "plot_coordinates(result[\"pred\"][filt, 1:4], result[\"pt\"][filt], torch.tensor(cluster_labels)).show()\n"
+ ],
+ "id": "2cdfdce76e7e5e08",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.005829334259033203\n",
+ "[('X', (141, 1)), ('Y', (141, 1)), ('Z', (141, 1)), ('tIdx', (141, 1)), ('pt', (141, 1))]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/1gatr/lib/python3.10/site-packages/sklearn/utils/deprecation.py:151: FutureWarning:\n",
+ "\n",
+ "'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
+ "\n",
+ "/work/gkrzmanc/1gatr/lib/python3.10/site-packages/sklearn/utils/deprecation.py:151: FutureWarning:\n",
+ "\n",
+ "'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ 2.0,
+ 1.0,
+ 1.0,
+ 2.0,
+ 2.0,
+ 2.0,
+ 1.0,
+ 2.0,
+ 1.0,
+ 2.0,
+ 1.0,
+ 2.0,
+ 2.0,
+ 1.0,
+ -1.0,
+ 2.0,
+ 1.0,
+ 0.0,
+ 1.0,
+ 1.0,
+ 0.0,
+ 1.0,
+ 2.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 2.0,
+ 1.0,
+ 0.0,
+ 0.0,
+ 1.0,
+ 1.0,
+ 0.0,
+ 1.0,
+ 2.0,
+ 2.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ 2.0,
+ 0.0,
+ 2.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ 2.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ 0.0,
+ 2.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ 2.0,
+ 2.0,
+ 1.0,
+ 1.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ 2.0,
+ 2.0,
+ 1.0,
+ 1.0,
+ 2.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 2.0,
+ 2.0,
+ 0.0,
+ 2.0,
+ 2.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ 2.0,
+ 0.0,
+ 2.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 2.0,
+ 0.0,
+ 2.0,
+ 1.0,
+ 2.0,
+ -1.0,
+ 0.0,
+ 2.0,
+ 1.0,
+ 0.0,
+ 2.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ 2.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 2.0,
+ 1.0,
+ 2.0,
+ 2.0,
+ 1.0,
+ -1.0,
+ 2.0,
+ 1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ 2.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ 0.0
+ ],
+ "coloraxis": "coloraxis",
+ "size": [
+ 56.21875,
+ 30.3125,
+ 8.1953125,
+ 7.85546875,
+ 6.6015625,
+ 5.43359375,
+ 4.359375,
+ 4.11328125,
+ 3.79296875,
+ 3.615234375,
+ 3.3828125,
+ 3.3125,
+ 3.169921875,
+ 2.876953125,
+ 2.810546875,
+ 2.677734375,
+ 2.646484375,
+ 2.5703125,
+ 2.5625,
+ 2.54296875,
+ 2.51171875,
+ 2.50390625,
+ 2.357421875,
+ 2.330078125,
+ 2.310546875,
+ 2.224609375,
+ 2.181640625,
+ 2.119140625,
+ 2.111328125,
+ 2.0390625,
+ 1.9365234375,
+ 1.923828125,
+ 1.8955078125,
+ 1.859375,
+ 1.787109375,
+ 1.767578125,
+ 1.6845703125,
+ 1.6826171875,
+ 1.6708984375,
+ 1.662109375,
+ 1.6552734375,
+ 1.6376953125,
+ 1.5673828125,
+ 1.564453125,
+ 1.533203125,
+ 1.5087890625,
+ 1.4853515625,
+ 1.4580078125,
+ 1.4033203125,
+ 1.4013671875,
+ 1.396484375,
+ 1.375,
+ 1.345703125,
+ 1.3291015625,
+ 1.326171875,
+ 1.294921875,
+ 1.2822265625,
+ 1.2763671875,
+ 1.275390625,
+ 1.2529296875,
+ 1.21875,
+ 1.2099609375,
+ 1.185546875,
+ 1.181640625,
+ 1.1689453125,
+ 1.1669921875,
+ 1.1474609375,
+ 1.1376953125,
+ 1.1376953125,
+ 1.1103515625,
+ 1.0986328125,
+ 1.0810546875,
+ 1.0791015625,
+ 1.064453125,
+ 1.0419921875,
+ 1.0390625,
+ 1.0234375,
+ 1.021484375,
+ 0.98779296875,
+ 0.9326171875,
+ 0.92822265625,
+ 0.91748046875,
+ 0.916015625,
+ 0.91455078125,
+ 0.9091796875,
+ 0.89697265625,
+ 0.888671875,
+ 0.88330078125,
+ 0.869140625,
+ 0.85498046875,
+ 0.8515625,
+ 0.84765625,
+ 0.84375,
+ 0.84130859375,
+ 0.8408203125,
+ 0.83837890625,
+ 0.82763671875,
+ 0.826171875,
+ 0.82275390625,
+ 0.818359375,
+ 0.8173828125,
+ 0.810546875,
+ 0.806640625,
+ 0.7880859375,
+ 0.76953125,
+ 0.7666015625,
+ 0.76123046875,
+ 0.7607421875,
+ 0.75732421875,
+ 0.75732421875,
+ 0.75,
+ 0.7470703125,
+ 0.74365234375,
+ 0.72705078125,
+ 0.712890625,
+ 0.71240234375,
+ 0.70849609375,
+ 0.70703125,
+ 0.70166015625,
+ 0.69970703125,
+ 0.69677734375,
+ 0.69580078125,
+ 0.68896484375,
+ 0.68408203125,
+ 0.65966796875,
+ 0.654296875,
+ 0.63916015625,
+ 0.63330078125,
+ 0.6328125,
+ 0.6318359375,
+ 0.6298828125,
+ 0.6279296875,
+ 0.623046875,
+ 0.61767578125,
+ 0.61767578125,
+ 0.61376953125,
+ 0.61376953125,
+ 0.61083984375,
+ 0.6083984375,
+ 0.6064453125,
+ 0.6015625
+ ],
+ "sizemode": "area",
+ "sizeref": 0.140546875,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ 1.8411712646484375,
+ -2.522686719894409,
+ -2.4129951000213623,
+ 1.9901788234710693,
+ 1.6636333465576172,
+ 1.6867585182189941,
+ -2.3150012493133545,
+ 1.7260633707046509,
+ -1.747094988822937,
+ 1.6223530769348145,
+ -2.061624765396118,
+ 1.9998637437820435,
+ 1.6998132467269897,
+ -2.3290047645568848,
+ 3.0216383934020996,
+ 1.840533971786499,
+ -2.2175347805023193,
+ 0.36496007442474365,
+ 0.15621675550937653,
+ -2.407304525375366,
+ -1.974696159362793,
+ -2.872187852859497,
+ 1.8141885995864868,
+ -2.7332513332366943,
+ -0.5611585378646851,
+ -2.169691562652588,
+ 2.278728723526001,
+ 1.689452886581421,
+ -2.301179885864258,
+ -0.7461513876914978,
+ -2.2872955799102783,
+ -2.5275323390960693,
+ -1.7118428945541382,
+ -1.6773886680603027,
+ -2.574779510498047,
+ 1.561798095703125,
+ 1.7997194528579712,
+ 3.645848035812378,
+ -2.235827922821045,
+ 1.8425447940826416,
+ 0.41018256545066833,
+ -1.212222695350647,
+ 1.9937679767608643,
+ 1.5113431215286255,
+ -0.8121848702430725,
+ -3.029036045074463,
+ 2.2207300662994385,
+ -2.6509389877319336,
+ 3.599907636642456,
+ -2.5486032962799072,
+ 1.6542530059814453,
+ -2.10996150970459,
+ 1.5152677297592163,
+ -2.1622543334960938,
+ 1.7261897325515747,
+ 1.2757388353347778,
+ 1.6777442693710327,
+ -2.0802419185638428,
+ -1.777970552444458,
+ -3.620804786682129,
+ 1.6916468143463135,
+ 1.6863940954208374,
+ -2.5542445182800293,
+ -0.6825491786003113,
+ 2.595134735107422,
+ -2.843463182449341,
+ 2.387848138809204,
+ -0.354938805103302,
+ 1.5272729396820068,
+ 1.8800228834152222,
+ -2.120563507080078,
+ -1.9567219018936157,
+ 1.8392518758773804,
+ 3.3408432006835938,
+ -0.7955878973007202,
+ 3.2810914516448975,
+ 1.6434342861175537,
+ 1.7120492458343506,
+ 1.0976753234863281,
+ 0.16248370707035065,
+ 1.7139579057693481,
+ -2.5007987022399902,
+ -2.1329963207244873,
+ -2.4087326526641846,
+ -3.048182249069214,
+ -1.6931315660476685,
+ -1.667431116104126,
+ -2.529144763946533,
+ -0.7144979238510132,
+ 2.798675775527954,
+ -2.318450450897217,
+ 3.0250344276428223,
+ 3.3414969444274902,
+ -1.683628797531128,
+ 0.8422178626060486,
+ -1.2700635194778442,
+ 3.224628448486328,
+ -2.1929819583892822,
+ 3.2866179943084717,
+ -2.264336109161377,
+ 0.015907974913716316,
+ -2.0944478511810303,
+ 3.215803861618042,
+ -1.8754534721374512,
+ -2.7968456745147705,
+ 3.7824931144714355,
+ 2.0464158058166504,
+ -2.7814836502075195,
+ 1.783958911895752,
+ -1.7874057292938232,
+ 1.5332332849502563,
+ 3.0009734630584717,
+ -3.0661377906799316,
+ 0.8484869003295898,
+ -2.1037070751190186,
+ 1.5366361141204834,
+ 1.2627863883972168,
+ -1.126605749130249,
+ 2.282327175140381,
+ -0.9385878443717957,
+ 2.4155123233795166,
+ -2.885427713394165,
+ 1.556852102279663,
+ 1.7129369974136353,
+ 2.7353992462158203,
+ 1.3975930213928223,
+ -1.8982449769973755,
+ 2.6141178607940674,
+ 0.9802422523498535,
+ -1.9378496408462524,
+ -3.3062102794647217,
+ 1.6210947036743164,
+ -1.8668112754821777,
+ -1.29080331325531,
+ -2.6802406311035156,
+ 3.518674373626709,
+ 2.160449981689453,
+ -1.0534309148788452,
+ -2.5538363456726074,
+ 2.947633981704712,
+ 0.35545453429222107
+ ],
+ "y": [
+ 11.484721183776855,
+ 8.731682777404785,
+ 8.241484642028809,
+ 10.398521423339844,
+ 10.179244041442871,
+ 9.956130027770996,
+ 7.946946144104004,
+ 9.621484756469727,
+ 8.317768096923828,
+ 9.602851867675781,
+ 8.096202850341797,
+ 8.428861618041992,
+ 7.713281631469727,
+ 7.759325981140137,
+ 2.001000165939331,
+ 8.673704147338867,
+ 7.815395355224609,
+ -1.8945016860961914,
+ 5.307507038116455,
+ 7.635284423828125,
+ -4.762759208679199,
+ 6.974043846130371,
+ 9.353918075561523,
+ 7.169582843780518,
+ 7.842984199523926,
+ 7.738143444061279,
+ 3.8158230781555176,
+ 9.230376243591309,
+ 7.659114837646484,
+ -1.241110920906067,
+ -4.673916816711426,
+ 7.331056118011475,
+ 8.126399040222168,
+ -6.183385372161865,
+ 7.399578094482422,
+ 7.569636821746826,
+ 9.191303253173828,
+ 2.0824391841888428,
+ 7.539384841918945,
+ -5.831722736358643,
+ 1.1391910314559937,
+ -6.635079383850098,
+ 8.075276374816895,
+ -3.04512357711792,
+ -0.6494570374488831,
+ 0.5757555365562439,
+ 3.355726718902588,
+ -2.798525333404541,
+ 0.47095903754234314,
+ 7.09736967086792,
+ 8.699042320251465,
+ 0.3937191665172577,
+ -6.4269280433654785,
+ 7.501816749572754,
+ 0.9359796047210693,
+ -6.08197546005249,
+ 8.978398323059082,
+ -2.8815436363220215,
+ 7.695521831512451,
+ 4.2803826332092285,
+ 9.004857063293457,
+ 8.947896003723145,
+ 6.97410249710083,
+ 1.9161756038665771,
+ -3.0744786262512207,
+ 6.716772556304932,
+ -3.30195689201355,
+ 6.058880805969238,
+ 3.539236545562744,
+ 8.700676918029785,
+ 7.578433990478516,
+ 6.164597034454346,
+ 8.811245918273926,
+ -1.006975769996643,
+ -5.035004138946533,
+ 0.25036776065826416,
+ 8.851595878601074,
+ 4.802543640136719,
+ -3.9611656665802,
+ 1.8577446937561035,
+ 8.845459938049316,
+ 5.3601861000061035,
+ 7.407097816467285,
+ 7.300731182098389,
+ 5.122791767120361,
+ -1.0425262451171875,
+ -2.0254790782928467,
+ 4.59906005859375,
+ 5.5377349853515625,
+ 7.0722126960754395,
+ -3.6198534965515137,
+ 7.7057366371154785,
+ 0.7627019286155701,
+ 7.704476833343506,
+ -5.568854808807373,
+ -2.8196332454681396,
+ 2.8956897258758545,
+ 7.310884475708008,
+ -1.9668323993682861,
+ 7.258252143859863,
+ 2.040471076965332,
+ -1.3508975505828857,
+ 3.6582324504852295,
+ 7.501095294952393,
+ 3.844759941101074,
+ 5.517116546630859,
+ 5.136075019836426,
+ -1.670976161956787,
+ 8.753059387207031,
+ 3.6817221641540527,
+ 8.523528099060059,
+ 3.124119997024536,
+ -1.3789392709732056,
+ 6.031548976898193,
+ 7.365862846374512,
+ -4.676599025726318,
+ 7.970692157745361,
+ -5.706074237823486,
+ 1.5437520742416382,
+ 2.5718445777893066,
+ 5.178225994110107,
+ -1.7867119312286377,
+ -3.9174883365631104,
+ -6.325456142425537,
+ 2.165548801422119,
+ 7.667225360870361,
+ 7.437671184539795,
+ 6.005098342895508,
+ 2.5892181396484375,
+ 7.4688401222229,
+ 2.550855875015259,
+ 8.82972240447998,
+ 7.493037223815918,
+ -5.2092204093933105,
+ 6.904902935028076,
+ 2.0044095516204834,
+ 6.942010879516602,
+ -3.196828842163086,
+ 6.915232181549072,
+ -2.55283522605896,
+ -5.1857733726501465
+ ],
+ "z": [
+ 0.9599736928939819,
+ 0.9545231461524963,
+ 0.9484756588935852,
+ 0.8629654049873352,
+ 0.9065804481506348,
+ 0.9346697926521301,
+ 0.9416508674621582,
+ 0.9376319050788879,
+ 0.6251171231269836,
+ 0.9200356602668762,
+ 0.814395546913147,
+ 0.20510144531726837,
+ 0.14036493003368378,
+ 0.9411420226097107,
+ 0.011215683072805405,
+ 0.22863861918449402,
+ 0.9380825161933899,
+ 0.013005613349378109,
+ 0.029080139473080635,
+ 0.937067449092865,
+ 0.006106241140514612,
+ 0.8271619081497192,
+ 0.8916909098625183,
+ 0.8522865176200867,
+ 0.021532395854592323,
+ 0.9406567811965942,
+ 0.012383528053760529,
+ 0.9469900131225586,
+ 0.9406611323356628,
+ 0.02189617231488228,
+ 0.00513895507901907,
+ 0.9315266609191895,
+ 0.6846194863319397,
+ 0.00252342177554965,
+ 0.9255027770996094,
+ 0.12604449689388275,
+ 0.8625036478042603,
+ 0.022475941106677055,
+ 0.9427933096885681,
+ 0.002689987886697054,
+ 0.023181047290563583,
+ 0.0020413780584931374,
+ 0.23801666498184204,
+ 0.004571772180497646,
+ 0.0267456267029047,
+ 0.07405140995979309,
+ 0.013269828632473946,
+ 0.014075732789933681,
+ 0.018177680671215057,
+ 0.8879609704017639,
+ 0.5017601251602173,
+ 0.052536748349666595,
+ 0.0013182642869651318,
+ 0.9114360809326172,
+ 0.013911278918385506,
+ 0.002193354768678546,
+ 0.9450902938842773,
+ 0.01495618000626564,
+ 0.7675567269325256,
+ 0.3331969380378723,
+ 0.9254684448242188,
+ 0.9329370260238647,
+ 0.9176525473594666,
+ 0.013932841829955578,
+ 0.00535422982648015,
+ 0.8387388586997986,
+ 0.004764800425618887,
+ 0.02386591210961342,
+ 0.04008623957633972,
+ 0.5606747269630432,
+ 0.9332547783851624,
+ 0.02354300580918789,
+ 0.7222034931182861,
+ 0.010339915752410889,
+ 0.0051331170834600925,
+ 0.015859361737966537,
+ 0.928329586982727,
+ 0.07042752951383591,
+ 0.0033885720185935497,
+ 0.02866990491747856,
+ 0.9165403246879578,
+ 0.03584417700767517,
+ 0.9447782635688782,
+ 0.9416751265525818,
+ 0.5410656929016113,
+ 0.02953338623046875,
+ 0.009083312004804611,
+ 0.32500940561294556,
+ 0.07135940343141556,
+ 0.21336644887924194,
+ 0.00776125630363822,
+ 0.0751323252916336,
+ 0.020248418673872948,
+ 0.7727653980255127,
+ 0.0019125656690448523,
+ 0.0154165243729949,
+ 0.014082311652600765,
+ 0.9479771256446838,
+ 0.00926204677671194,
+ 0.9451633095741272,
+ 0.018092600628733635,
+ 0.03380986675620079,
+ 0.013082841411232948,
+ 0.8813718557357788,
+ 0.03869924694299698,
+ 0.043908167630434036,
+ 0.07465846836566925,
+ 0.020705657079815865,
+ 0.840247631072998,
+ 0.01788754016160965,
+ 0.7686178684234619,
+ 0.04338349774479866,
+ 0.03050147369503975,
+ 0.04970092326402664,
+ 0.8392722010612488,
+ 0.002669614041224122,
+ 0.11674889177083969,
+ 0.00298236939124763,
+ 0.012624367140233517,
+ 0.01754012331366539,
+ 0.09177706390619278,
+ 0.021733084693551064,
+ 0.004724114201962948,
+ 0.0017189689679071307,
+ 0.030842922627925873,
+ 0.02060762234032154,
+ 0.90532386302948,
+ 0.11719930917024612,
+ 0.019032690674066544,
+ 0.8460276126861572,
+ 0.1660507172346115,
+ 0.8996521830558777,
+ 0.7967191338539124,
+ 0.003243226557970047,
+ 0.913471519947052,
+ 0.0244155190885067,
+ 0.18375305831432343,
+ 0.006471569649875164,
+ 0.9159026741981506,
+ 0.007738111540675163,
+ 0.002430642256513238
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T11:30:18.274639Z",
+ "start_time": "2025-02-12T11:30:18.261125Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "def get_distance_matrix(v):\n",
+ " # compute the cosine similarity between vectors in matrix, fast format\n",
+ " # v is a numpy array\n",
+ " # returns a numpy array\n",
+ " dot_product = np.dot(v, v.T)\n",
+ " magnitude = np.sqrt(np.sum(np.square(v), axis=1))\n",
+ " magnitude = magnitude[:, np.newaxis]\n",
+ " return dot_product / (magnitude * magnitude.T)\n",
+ "\n",
+ "def get_distance_matrix_Lorentz(v):\n",
+ " # Lorentz cosine similarity distance metric\n",
+ " # Lorentz dot product:\n",
+ " dot_product = np.outer(coords[:, 0], coords[:, 0]) - np.outer(coords[:, 1], coords[:, 1]) - np.outer(coords[:, 2], coords[:, 2]) - np.outer(coords[:, 3], coords[:, 3])\n",
+ " #magnitude = np.sqrt(np.abs(np.sum(np.square(v), axis=1)))\n",
+ " # lorentz magnitude\n",
+ " magnitude = np.sqrt(np.abs(v[:, 0]**2 - v[:, 1]**2 - v[:, 2] ** 2 - v[:, 3]**2))\n",
+ " magnitude = magnitude[:, np.newaxis]\n",
+ " return dot_product / (magnitude * magnitude.T)"
+ ],
+ "id": "2dd7ac91e991f2ea",
+ "outputs": [],
+ "execution_count": 7
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T11:10:19.367089Z",
+ "start_time": "2025-01-20T11:10:19.258556Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "import sklearn\n",
+ "\n",
+ "def cosine_similarity(vec1, vec2):\n",
+ " # Ensure the vectors are numpy arrays\n",
+ " vec1 = np.array(vec1)\n",
+ " vec2 = np.array(vec2)\n",
+ "\n",
+ " # Compute the dot product and the magnitudes\n",
+ " dot_product = np.dot(vec1, vec2)\n",
+ " magnitude_vec1 = np.linalg.norm(vec1)\n",
+ " magnitude_vec2 = np.linalg.norm(vec2)\n",
+ "\n",
+ " # Compute cosine similarity\n",
+ " if magnitude_vec1 == 0 or magnitude_vec2 == 0:\n",
+ " return 0.0 # Handle edge case where a vector has zero magnitude\n",
+ " return dot_product / (magnitude_vec1 * magnitude_vec2)\n",
+ "\n",
+ "def lorentz_norm(vec1, vec2):\n",
+ " diff = vec1-vec2\n",
+ " norm_squared = np.abs(diff[0]**2 - diff[1]**2 - diff[2] ** 2 - diff[3]**2)\n",
+ " return np.sqrt(norm_squared)\n",
+ "\n",
+ "\n",
+ "clusterer = hdbscan.HDBSCAN(min_cluster_size=5, min_samples=10, cluster_selection_epsilon=0.1)\n",
+ "from time import time\n",
+ "coords = result[\"pred\"][filt, 1:4]\n",
+ "t0 = time()\n",
+ "cluster_labels = clusterer.fit_predict(coords)\n",
+ "t1 = time()\n",
+ "print(t1-t0)\n",
+ "plot_coordinates(result[\"pred\"][filt, 1:4], result[\"pt\"][filt], torch.tensor(cluster_labels)).show()\n"
+ ],
+ "id": "a910d5bb50d552a9",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.010918378829956055\n",
+ "[('X', (141, 1)), ('Y', (141, 1)), ('Z', (141, 1)), ('tIdx', (141, 1)), ('pt', (141, 1))]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/1gatr/lib/python3.10/site-packages/sklearn/utils/deprecation.py:151: FutureWarning:\n",
+ "\n",
+ "'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
+ "\n",
+ "/work/gkrzmanc/1gatr/lib/python3.10/site-packages/sklearn/utils/deprecation.py:151: FutureWarning:\n",
+ "\n",
+ "'force_all_finite' was renamed to 'ensure_all_finite' in 1.6 and will be removed in 1.8.\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ -1.0,
+ 3.0,
+ 3.0,
+ 2.0,
+ 2.0,
+ 2.0,
+ 3.0,
+ 2.0,
+ 3.0,
+ 2.0,
+ 3.0,
+ 2.0,
+ 2.0,
+ 3.0,
+ 1.0,
+ 2.0,
+ 3.0,
+ 0.0,
+ -1.0,
+ 3.0,
+ 0.0,
+ 3.0,
+ 2.0,
+ 3.0,
+ 3.0,
+ 3.0,
+ 1.0,
+ 2.0,
+ 3.0,
+ 0.0,
+ 0.0,
+ 3.0,
+ 3.0,
+ -1.0,
+ 3.0,
+ 2.0,
+ 2.0,
+ -1.0,
+ 3.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 2.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ 3.0,
+ 2.0,
+ 0.0,
+ -1.0,
+ 3.0,
+ -1.0,
+ 0.0,
+ 2.0,
+ 0.0,
+ 3.0,
+ -1.0,
+ 2.0,
+ 2.0,
+ 3.0,
+ -1.0,
+ -1.0,
+ 3.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 2.0,
+ 3.0,
+ 3.0,
+ 2.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 2.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 2.0,
+ 3.0,
+ 3.0,
+ 3.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 2.0,
+ -1.0,
+ 3.0,
+ 0.0,
+ 0.0,
+ 1.0,
+ 3.0,
+ -1.0,
+ 3.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 3.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 2.0,
+ -1.0,
+ 2.0,
+ 1.0,
+ 0.0,
+ 2.0,
+ 3.0,
+ 0.0,
+ 2.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ 2.0,
+ 3.0,
+ -1.0,
+ 1.0,
+ 3.0,
+ -1.0,
+ 2.0,
+ 3.0,
+ 0.0,
+ 3.0,
+ 1.0,
+ 2.0,
+ 0.0,
+ 3.0,
+ -1.0,
+ 0.0
+ ],
+ "coloraxis": "coloraxis",
+ "size": [
+ 56.21875,
+ 30.3125,
+ 8.1953125,
+ 7.85546875,
+ 6.6015625,
+ 5.43359375,
+ 4.359375,
+ 4.11328125,
+ 3.79296875,
+ 3.615234375,
+ 3.3828125,
+ 3.3125,
+ 3.169921875,
+ 2.876953125,
+ 2.810546875,
+ 2.677734375,
+ 2.646484375,
+ 2.5703125,
+ 2.5625,
+ 2.54296875,
+ 2.51171875,
+ 2.50390625,
+ 2.357421875,
+ 2.330078125,
+ 2.310546875,
+ 2.224609375,
+ 2.181640625,
+ 2.119140625,
+ 2.111328125,
+ 2.0390625,
+ 1.9365234375,
+ 1.923828125,
+ 1.8955078125,
+ 1.859375,
+ 1.787109375,
+ 1.767578125,
+ 1.6845703125,
+ 1.6826171875,
+ 1.6708984375,
+ 1.662109375,
+ 1.6552734375,
+ 1.6376953125,
+ 1.5673828125,
+ 1.564453125,
+ 1.533203125,
+ 1.5087890625,
+ 1.4853515625,
+ 1.4580078125,
+ 1.4033203125,
+ 1.4013671875,
+ 1.396484375,
+ 1.375,
+ 1.345703125,
+ 1.3291015625,
+ 1.326171875,
+ 1.294921875,
+ 1.2822265625,
+ 1.2763671875,
+ 1.275390625,
+ 1.2529296875,
+ 1.21875,
+ 1.2099609375,
+ 1.185546875,
+ 1.181640625,
+ 1.1689453125,
+ 1.1669921875,
+ 1.1474609375,
+ 1.1376953125,
+ 1.1376953125,
+ 1.1103515625,
+ 1.0986328125,
+ 1.0810546875,
+ 1.0791015625,
+ 1.064453125,
+ 1.0419921875,
+ 1.0390625,
+ 1.0234375,
+ 1.021484375,
+ 0.98779296875,
+ 0.9326171875,
+ 0.92822265625,
+ 0.91748046875,
+ 0.916015625,
+ 0.91455078125,
+ 0.9091796875,
+ 0.89697265625,
+ 0.888671875,
+ 0.88330078125,
+ 0.869140625,
+ 0.85498046875,
+ 0.8515625,
+ 0.84765625,
+ 0.84375,
+ 0.84130859375,
+ 0.8408203125,
+ 0.83837890625,
+ 0.82763671875,
+ 0.826171875,
+ 0.82275390625,
+ 0.818359375,
+ 0.8173828125,
+ 0.810546875,
+ 0.806640625,
+ 0.7880859375,
+ 0.76953125,
+ 0.7666015625,
+ 0.76123046875,
+ 0.7607421875,
+ 0.75732421875,
+ 0.75732421875,
+ 0.75,
+ 0.7470703125,
+ 0.74365234375,
+ 0.72705078125,
+ 0.712890625,
+ 0.71240234375,
+ 0.70849609375,
+ 0.70703125,
+ 0.70166015625,
+ 0.69970703125,
+ 0.69677734375,
+ 0.69580078125,
+ 0.68896484375,
+ 0.68408203125,
+ 0.65966796875,
+ 0.654296875,
+ 0.63916015625,
+ 0.63330078125,
+ 0.6328125,
+ 0.6318359375,
+ 0.6298828125,
+ 0.6279296875,
+ 0.623046875,
+ 0.61767578125,
+ 0.61767578125,
+ 0.61376953125,
+ 0.61376953125,
+ 0.61083984375,
+ 0.6083984375,
+ 0.6064453125,
+ 0.6015625
+ ],
+ "sizemode": "area",
+ "sizeref": 0.140546875,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ 1.8411712646484375,
+ -2.522686719894409,
+ -2.4129951000213623,
+ 1.9901788234710693,
+ 1.6636333465576172,
+ 1.6867585182189941,
+ -2.3150012493133545,
+ 1.7260633707046509,
+ -1.747094988822937,
+ 1.6223530769348145,
+ -2.061624765396118,
+ 1.9998637437820435,
+ 1.6998132467269897,
+ -2.3290047645568848,
+ 3.0216383934020996,
+ 1.840533971786499,
+ -2.2175347805023193,
+ 0.36496007442474365,
+ 0.15621675550937653,
+ -2.407304525375366,
+ -1.974696159362793,
+ -2.872187852859497,
+ 1.8141885995864868,
+ -2.7332513332366943,
+ -0.5611585378646851,
+ -2.169691562652588,
+ 2.278728723526001,
+ 1.689452886581421,
+ -2.301179885864258,
+ -0.7461513876914978,
+ -2.2872955799102783,
+ -2.5275323390960693,
+ -1.7118428945541382,
+ -1.6773886680603027,
+ -2.574779510498047,
+ 1.561798095703125,
+ 1.7997194528579712,
+ 3.645848035812378,
+ -2.235827922821045,
+ 1.8425447940826416,
+ 0.41018256545066833,
+ -1.212222695350647,
+ 1.9937679767608643,
+ 1.5113431215286255,
+ -0.8121848702430725,
+ -3.029036045074463,
+ 2.2207300662994385,
+ -2.6509389877319336,
+ 3.599907636642456,
+ -2.5486032962799072,
+ 1.6542530059814453,
+ -2.10996150970459,
+ 1.5152677297592163,
+ -2.1622543334960938,
+ 1.7261897325515747,
+ 1.2757388353347778,
+ 1.6777442693710327,
+ -2.0802419185638428,
+ -1.777970552444458,
+ -3.620804786682129,
+ 1.6916468143463135,
+ 1.6863940954208374,
+ -2.5542445182800293,
+ -0.6825491786003113,
+ 2.595134735107422,
+ -2.843463182449341,
+ 2.387848138809204,
+ -0.354938805103302,
+ 1.5272729396820068,
+ 1.8800228834152222,
+ -2.120563507080078,
+ -1.9567219018936157,
+ 1.8392518758773804,
+ 3.3408432006835938,
+ -0.7955878973007202,
+ 3.2810914516448975,
+ 1.6434342861175537,
+ 1.7120492458343506,
+ 1.0976753234863281,
+ 0.16248370707035065,
+ 1.7139579057693481,
+ -2.5007987022399902,
+ -2.1329963207244873,
+ -2.4087326526641846,
+ -3.048182249069214,
+ -1.6931315660476685,
+ -1.667431116104126,
+ -2.529144763946533,
+ -0.7144979238510132,
+ 2.798675775527954,
+ -2.318450450897217,
+ 3.0250344276428223,
+ 3.3414969444274902,
+ -1.683628797531128,
+ 0.8422178626060486,
+ -1.2700635194778442,
+ 3.224628448486328,
+ -2.1929819583892822,
+ 3.2866179943084717,
+ -2.264336109161377,
+ 0.015907974913716316,
+ -2.0944478511810303,
+ 3.215803861618042,
+ -1.8754534721374512,
+ -2.7968456745147705,
+ 3.7824931144714355,
+ 2.0464158058166504,
+ -2.7814836502075195,
+ 1.783958911895752,
+ -1.7874057292938232,
+ 1.5332332849502563,
+ 3.0009734630584717,
+ -3.0661377906799316,
+ 0.8484869003295898,
+ -2.1037070751190186,
+ 1.5366361141204834,
+ 1.2627863883972168,
+ -1.126605749130249,
+ 2.282327175140381,
+ -0.9385878443717957,
+ 2.4155123233795166,
+ -2.885427713394165,
+ 1.556852102279663,
+ 1.7129369974136353,
+ 2.7353992462158203,
+ 1.3975930213928223,
+ -1.8982449769973755,
+ 2.6141178607940674,
+ 0.9802422523498535,
+ -1.9378496408462524,
+ -3.3062102794647217,
+ 1.6210947036743164,
+ -1.8668112754821777,
+ -1.29080331325531,
+ -2.6802406311035156,
+ 3.518674373626709,
+ 2.160449981689453,
+ -1.0534309148788452,
+ -2.5538363456726074,
+ 2.947633981704712,
+ 0.35545453429222107
+ ],
+ "y": [
+ 11.484721183776855,
+ 8.731682777404785,
+ 8.241484642028809,
+ 10.398521423339844,
+ 10.179244041442871,
+ 9.956130027770996,
+ 7.946946144104004,
+ 9.621484756469727,
+ 8.317768096923828,
+ 9.602851867675781,
+ 8.096202850341797,
+ 8.428861618041992,
+ 7.713281631469727,
+ 7.759325981140137,
+ 2.001000165939331,
+ 8.673704147338867,
+ 7.815395355224609,
+ -1.8945016860961914,
+ 5.307507038116455,
+ 7.635284423828125,
+ -4.762759208679199,
+ 6.974043846130371,
+ 9.353918075561523,
+ 7.169582843780518,
+ 7.842984199523926,
+ 7.738143444061279,
+ 3.8158230781555176,
+ 9.230376243591309,
+ 7.659114837646484,
+ -1.241110920906067,
+ -4.673916816711426,
+ 7.331056118011475,
+ 8.126399040222168,
+ -6.183385372161865,
+ 7.399578094482422,
+ 7.569636821746826,
+ 9.191303253173828,
+ 2.0824391841888428,
+ 7.539384841918945,
+ -5.831722736358643,
+ 1.1391910314559937,
+ -6.635079383850098,
+ 8.075276374816895,
+ -3.04512357711792,
+ -0.6494570374488831,
+ 0.5757555365562439,
+ 3.355726718902588,
+ -2.798525333404541,
+ 0.47095903754234314,
+ 7.09736967086792,
+ 8.699042320251465,
+ 0.3937191665172577,
+ -6.4269280433654785,
+ 7.501816749572754,
+ 0.9359796047210693,
+ -6.08197546005249,
+ 8.978398323059082,
+ -2.8815436363220215,
+ 7.695521831512451,
+ 4.2803826332092285,
+ 9.004857063293457,
+ 8.947896003723145,
+ 6.97410249710083,
+ 1.9161756038665771,
+ -3.0744786262512207,
+ 6.716772556304932,
+ -3.30195689201355,
+ 6.058880805969238,
+ 3.539236545562744,
+ 8.700676918029785,
+ 7.578433990478516,
+ 6.164597034454346,
+ 8.811245918273926,
+ -1.006975769996643,
+ -5.035004138946533,
+ 0.25036776065826416,
+ 8.851595878601074,
+ 4.802543640136719,
+ -3.9611656665802,
+ 1.8577446937561035,
+ 8.845459938049316,
+ 5.3601861000061035,
+ 7.407097816467285,
+ 7.300731182098389,
+ 5.122791767120361,
+ -1.0425262451171875,
+ -2.0254790782928467,
+ 4.59906005859375,
+ 5.5377349853515625,
+ 7.0722126960754395,
+ -3.6198534965515137,
+ 7.7057366371154785,
+ 0.7627019286155701,
+ 7.704476833343506,
+ -5.568854808807373,
+ -2.8196332454681396,
+ 2.8956897258758545,
+ 7.310884475708008,
+ -1.9668323993682861,
+ 7.258252143859863,
+ 2.040471076965332,
+ -1.3508975505828857,
+ 3.6582324504852295,
+ 7.501095294952393,
+ 3.844759941101074,
+ 5.517116546630859,
+ 5.136075019836426,
+ -1.670976161956787,
+ 8.753059387207031,
+ 3.6817221641540527,
+ 8.523528099060059,
+ 3.124119997024536,
+ -1.3789392709732056,
+ 6.031548976898193,
+ 7.365862846374512,
+ -4.676599025726318,
+ 7.970692157745361,
+ -5.706074237823486,
+ 1.5437520742416382,
+ 2.5718445777893066,
+ 5.178225994110107,
+ -1.7867119312286377,
+ -3.9174883365631104,
+ -6.325456142425537,
+ 2.165548801422119,
+ 7.667225360870361,
+ 7.437671184539795,
+ 6.005098342895508,
+ 2.5892181396484375,
+ 7.4688401222229,
+ 2.550855875015259,
+ 8.82972240447998,
+ 7.493037223815918,
+ -5.2092204093933105,
+ 6.904902935028076,
+ 2.0044095516204834,
+ 6.942010879516602,
+ -3.196828842163086,
+ 6.915232181549072,
+ -2.55283522605896,
+ -5.1857733726501465
+ ],
+ "z": [
+ 0.9599736928939819,
+ 0.9545231461524963,
+ 0.9484756588935852,
+ 0.8629654049873352,
+ 0.9065804481506348,
+ 0.9346697926521301,
+ 0.9416508674621582,
+ 0.9376319050788879,
+ 0.6251171231269836,
+ 0.9200356602668762,
+ 0.814395546913147,
+ 0.20510144531726837,
+ 0.14036493003368378,
+ 0.9411420226097107,
+ 0.011215683072805405,
+ 0.22863861918449402,
+ 0.9380825161933899,
+ 0.013005613349378109,
+ 0.029080139473080635,
+ 0.937067449092865,
+ 0.006106241140514612,
+ 0.8271619081497192,
+ 0.8916909098625183,
+ 0.8522865176200867,
+ 0.021532395854592323,
+ 0.9406567811965942,
+ 0.012383528053760529,
+ 0.9469900131225586,
+ 0.9406611323356628,
+ 0.02189617231488228,
+ 0.00513895507901907,
+ 0.9315266609191895,
+ 0.6846194863319397,
+ 0.00252342177554965,
+ 0.9255027770996094,
+ 0.12604449689388275,
+ 0.8625036478042603,
+ 0.022475941106677055,
+ 0.9427933096885681,
+ 0.002689987886697054,
+ 0.023181047290563583,
+ 0.0020413780584931374,
+ 0.23801666498184204,
+ 0.004571772180497646,
+ 0.0267456267029047,
+ 0.07405140995979309,
+ 0.013269828632473946,
+ 0.014075732789933681,
+ 0.018177680671215057,
+ 0.8879609704017639,
+ 0.5017601251602173,
+ 0.052536748349666595,
+ 0.0013182642869651318,
+ 0.9114360809326172,
+ 0.013911278918385506,
+ 0.002193354768678546,
+ 0.9450902938842773,
+ 0.01495618000626564,
+ 0.7675567269325256,
+ 0.3331969380378723,
+ 0.9254684448242188,
+ 0.9329370260238647,
+ 0.9176525473594666,
+ 0.013932841829955578,
+ 0.00535422982648015,
+ 0.8387388586997986,
+ 0.004764800425618887,
+ 0.02386591210961342,
+ 0.04008623957633972,
+ 0.5606747269630432,
+ 0.9332547783851624,
+ 0.02354300580918789,
+ 0.7222034931182861,
+ 0.010339915752410889,
+ 0.0051331170834600925,
+ 0.015859361737966537,
+ 0.928329586982727,
+ 0.07042752951383591,
+ 0.0033885720185935497,
+ 0.02866990491747856,
+ 0.9165403246879578,
+ 0.03584417700767517,
+ 0.9447782635688782,
+ 0.9416751265525818,
+ 0.5410656929016113,
+ 0.02953338623046875,
+ 0.009083312004804611,
+ 0.32500940561294556,
+ 0.07135940343141556,
+ 0.21336644887924194,
+ 0.00776125630363822,
+ 0.0751323252916336,
+ 0.020248418673872948,
+ 0.7727653980255127,
+ 0.0019125656690448523,
+ 0.0154165243729949,
+ 0.014082311652600765,
+ 0.9479771256446838,
+ 0.00926204677671194,
+ 0.9451633095741272,
+ 0.018092600628733635,
+ 0.03380986675620079,
+ 0.013082841411232948,
+ 0.8813718557357788,
+ 0.03869924694299698,
+ 0.043908167630434036,
+ 0.07465846836566925,
+ 0.020705657079815865,
+ 0.840247631072998,
+ 0.01788754016160965,
+ 0.7686178684234619,
+ 0.04338349774479866,
+ 0.03050147369503975,
+ 0.04970092326402664,
+ 0.8392722010612488,
+ 0.002669614041224122,
+ 0.11674889177083969,
+ 0.00298236939124763,
+ 0.012624367140233517,
+ 0.01754012331366539,
+ 0.09177706390619278,
+ 0.021733084693551064,
+ 0.004724114201962948,
+ 0.0017189689679071307,
+ 0.030842922627925873,
+ 0.02060762234032154,
+ 0.90532386302948,
+ 0.11719930917024612,
+ 0.019032690674066544,
+ 0.8460276126861572,
+ 0.1660507172346115,
+ 0.8996521830558777,
+ 0.7967191338539124,
+ 0.003243226557970047,
+ 0.913471519947052,
+ 0.0244155190885067,
+ 0.18375305831432343,
+ 0.006471569649875164,
+ 0.9159026741981506,
+ 0.007738111540675163,
+ 0.002430642256513238
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 25
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T11:14:21.791759Z",
+ "start_time": "2025-01-20T11:14:21.687717Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "clusterer = hdbscan.HDBSCAN(min_cluster_size=5, min_samples=15, cluster_selection_epsilon=0.1, metric=\"precomputed\")\n",
+ "from time import time\n",
+ "t0 = time()\n",
+ "\n",
+ "cluster_labels = clusterer.fit_predict(get_distance_matrix(np.array(norm_coords.double())))\n",
+ "print(cluster_labels.shape, \"cluster_labels.shape\")\n",
+ "t1 = time()\n",
+ "print(t1-t0)\n",
+ "#plot_coordinates(result[\"pred\"][filt, 1:4], result[\"pt\"][filt], torch.tensor(cluster_labels)).show()\n"
+ ],
+ "id": "3cc8032e63dd7ff5",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(141,) cluster_labels.shape\n",
+ "0.011168956756591797\n",
+ "[('X', (141, 1)), ('Y', (141, 1)), ('Z', (141, 1)), ('tIdx', (141, 1)), ('pt', (141, 1))]\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 1.0
+ ],
+ "coloraxis": "coloraxis",
+ "size": [
+ 56.21875,
+ 30.3125,
+ 8.1953125,
+ 7.85546875,
+ 6.6015625,
+ 5.43359375,
+ 4.359375,
+ 4.11328125,
+ 3.79296875,
+ 3.615234375,
+ 3.3828125,
+ 3.3125,
+ 3.169921875,
+ 2.876953125,
+ 2.810546875,
+ 2.677734375,
+ 2.646484375,
+ 2.5703125,
+ 2.5625,
+ 2.54296875,
+ 2.51171875,
+ 2.50390625,
+ 2.357421875,
+ 2.330078125,
+ 2.310546875,
+ 2.224609375,
+ 2.181640625,
+ 2.119140625,
+ 2.111328125,
+ 2.0390625,
+ 1.9365234375,
+ 1.923828125,
+ 1.8955078125,
+ 1.859375,
+ 1.787109375,
+ 1.767578125,
+ 1.6845703125,
+ 1.6826171875,
+ 1.6708984375,
+ 1.662109375,
+ 1.6552734375,
+ 1.6376953125,
+ 1.5673828125,
+ 1.564453125,
+ 1.533203125,
+ 1.5087890625,
+ 1.4853515625,
+ 1.4580078125,
+ 1.4033203125,
+ 1.4013671875,
+ 1.396484375,
+ 1.375,
+ 1.345703125,
+ 1.3291015625,
+ 1.326171875,
+ 1.294921875,
+ 1.2822265625,
+ 1.2763671875,
+ 1.275390625,
+ 1.2529296875,
+ 1.21875,
+ 1.2099609375,
+ 1.185546875,
+ 1.181640625,
+ 1.1689453125,
+ 1.1669921875,
+ 1.1474609375,
+ 1.1376953125,
+ 1.1376953125,
+ 1.1103515625,
+ 1.0986328125,
+ 1.0810546875,
+ 1.0791015625,
+ 1.064453125,
+ 1.0419921875,
+ 1.0390625,
+ 1.0234375,
+ 1.021484375,
+ 0.98779296875,
+ 0.9326171875,
+ 0.92822265625,
+ 0.91748046875,
+ 0.916015625,
+ 0.91455078125,
+ 0.9091796875,
+ 0.89697265625,
+ 0.888671875,
+ 0.88330078125,
+ 0.869140625,
+ 0.85498046875,
+ 0.8515625,
+ 0.84765625,
+ 0.84375,
+ 0.84130859375,
+ 0.8408203125,
+ 0.83837890625,
+ 0.82763671875,
+ 0.826171875,
+ 0.82275390625,
+ 0.818359375,
+ 0.8173828125,
+ 0.810546875,
+ 0.806640625,
+ 0.7880859375,
+ 0.76953125,
+ 0.7666015625,
+ 0.76123046875,
+ 0.7607421875,
+ 0.75732421875,
+ 0.75732421875,
+ 0.75,
+ 0.7470703125,
+ 0.74365234375,
+ 0.72705078125,
+ 0.712890625,
+ 0.71240234375,
+ 0.70849609375,
+ 0.70703125,
+ 0.70166015625,
+ 0.69970703125,
+ 0.69677734375,
+ 0.69580078125,
+ 0.68896484375,
+ 0.68408203125,
+ 0.65966796875,
+ 0.654296875,
+ 0.63916015625,
+ 0.63330078125,
+ 0.6328125,
+ 0.6318359375,
+ 0.6298828125,
+ 0.6279296875,
+ 0.623046875,
+ 0.61767578125,
+ 0.61767578125,
+ 0.61376953125,
+ 0.61376953125,
+ 0.61083984375,
+ 0.6083984375,
+ 0.6064453125,
+ 0.6015625
+ ],
+ "sizemode": "area",
+ "sizeref": 0.140546875,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ 1.8411712646484375,
+ -2.522686719894409,
+ -2.4129951000213623,
+ 1.9901788234710693,
+ 1.6636333465576172,
+ 1.6867585182189941,
+ -2.3150012493133545,
+ 1.7260633707046509,
+ -1.747094988822937,
+ 1.6223530769348145,
+ -2.061624765396118,
+ 1.9998637437820435,
+ 1.6998132467269897,
+ -2.3290047645568848,
+ 3.0216383934020996,
+ 1.840533971786499,
+ -2.2175347805023193,
+ 0.36496007442474365,
+ 0.15621675550937653,
+ -2.407304525375366,
+ -1.974696159362793,
+ -2.872187852859497,
+ 1.8141885995864868,
+ -2.7332513332366943,
+ -0.5611585378646851,
+ -2.169691562652588,
+ 2.278728723526001,
+ 1.689452886581421,
+ -2.301179885864258,
+ -0.7461513876914978,
+ -2.2872955799102783,
+ -2.5275323390960693,
+ -1.7118428945541382,
+ -1.6773886680603027,
+ -2.574779510498047,
+ 1.561798095703125,
+ 1.7997194528579712,
+ 3.645848035812378,
+ -2.235827922821045,
+ 1.8425447940826416,
+ 0.41018256545066833,
+ -1.212222695350647,
+ 1.9937679767608643,
+ 1.5113431215286255,
+ -0.8121848702430725,
+ -3.029036045074463,
+ 2.2207300662994385,
+ -2.6509389877319336,
+ 3.599907636642456,
+ -2.5486032962799072,
+ 1.6542530059814453,
+ -2.10996150970459,
+ 1.5152677297592163,
+ -2.1622543334960938,
+ 1.7261897325515747,
+ 1.2757388353347778,
+ 1.6777442693710327,
+ -2.0802419185638428,
+ -1.777970552444458,
+ -3.620804786682129,
+ 1.6916468143463135,
+ 1.6863940954208374,
+ -2.5542445182800293,
+ -0.6825491786003113,
+ 2.595134735107422,
+ -2.843463182449341,
+ 2.387848138809204,
+ -0.354938805103302,
+ 1.5272729396820068,
+ 1.8800228834152222,
+ -2.120563507080078,
+ -1.9567219018936157,
+ 1.8392518758773804,
+ 3.3408432006835938,
+ -0.7955878973007202,
+ 3.2810914516448975,
+ 1.6434342861175537,
+ 1.7120492458343506,
+ 1.0976753234863281,
+ 0.16248370707035065,
+ 1.7139579057693481,
+ -2.5007987022399902,
+ -2.1329963207244873,
+ -2.4087326526641846,
+ -3.048182249069214,
+ -1.6931315660476685,
+ -1.667431116104126,
+ -2.529144763946533,
+ -0.7144979238510132,
+ 2.798675775527954,
+ -2.318450450897217,
+ 3.0250344276428223,
+ 3.3414969444274902,
+ -1.683628797531128,
+ 0.8422178626060486,
+ -1.2700635194778442,
+ 3.224628448486328,
+ -2.1929819583892822,
+ 3.2866179943084717,
+ -2.264336109161377,
+ 0.015907974913716316,
+ -2.0944478511810303,
+ 3.215803861618042,
+ -1.8754534721374512,
+ -2.7968456745147705,
+ 3.7824931144714355,
+ 2.0464158058166504,
+ -2.7814836502075195,
+ 1.783958911895752,
+ -1.7874057292938232,
+ 1.5332332849502563,
+ 3.0009734630584717,
+ -3.0661377906799316,
+ 0.8484869003295898,
+ -2.1037070751190186,
+ 1.5366361141204834,
+ 1.2627863883972168,
+ -1.126605749130249,
+ 2.282327175140381,
+ -0.9385878443717957,
+ 2.4155123233795166,
+ -2.885427713394165,
+ 1.556852102279663,
+ 1.7129369974136353,
+ 2.7353992462158203,
+ 1.3975930213928223,
+ -1.8982449769973755,
+ 2.6141178607940674,
+ 0.9802422523498535,
+ -1.9378496408462524,
+ -3.3062102794647217,
+ 1.6210947036743164,
+ -1.8668112754821777,
+ -1.29080331325531,
+ -2.6802406311035156,
+ 3.518674373626709,
+ 2.160449981689453,
+ -1.0534309148788452,
+ -2.5538363456726074,
+ 2.947633981704712,
+ 0.35545453429222107
+ ],
+ "y": [
+ 11.484721183776855,
+ 8.731682777404785,
+ 8.241484642028809,
+ 10.398521423339844,
+ 10.179244041442871,
+ 9.956130027770996,
+ 7.946946144104004,
+ 9.621484756469727,
+ 8.317768096923828,
+ 9.602851867675781,
+ 8.096202850341797,
+ 8.428861618041992,
+ 7.713281631469727,
+ 7.759325981140137,
+ 2.001000165939331,
+ 8.673704147338867,
+ 7.815395355224609,
+ -1.8945016860961914,
+ 5.307507038116455,
+ 7.635284423828125,
+ -4.762759208679199,
+ 6.974043846130371,
+ 9.353918075561523,
+ 7.169582843780518,
+ 7.842984199523926,
+ 7.738143444061279,
+ 3.8158230781555176,
+ 9.230376243591309,
+ 7.659114837646484,
+ -1.241110920906067,
+ -4.673916816711426,
+ 7.331056118011475,
+ 8.126399040222168,
+ -6.183385372161865,
+ 7.399578094482422,
+ 7.569636821746826,
+ 9.191303253173828,
+ 2.0824391841888428,
+ 7.539384841918945,
+ -5.831722736358643,
+ 1.1391910314559937,
+ -6.635079383850098,
+ 8.075276374816895,
+ -3.04512357711792,
+ -0.6494570374488831,
+ 0.5757555365562439,
+ 3.355726718902588,
+ -2.798525333404541,
+ 0.47095903754234314,
+ 7.09736967086792,
+ 8.699042320251465,
+ 0.3937191665172577,
+ -6.4269280433654785,
+ 7.501816749572754,
+ 0.9359796047210693,
+ -6.08197546005249,
+ 8.978398323059082,
+ -2.8815436363220215,
+ 7.695521831512451,
+ 4.2803826332092285,
+ 9.004857063293457,
+ 8.947896003723145,
+ 6.97410249710083,
+ 1.9161756038665771,
+ -3.0744786262512207,
+ 6.716772556304932,
+ -3.30195689201355,
+ 6.058880805969238,
+ 3.539236545562744,
+ 8.700676918029785,
+ 7.578433990478516,
+ 6.164597034454346,
+ 8.811245918273926,
+ -1.006975769996643,
+ -5.035004138946533,
+ 0.25036776065826416,
+ 8.851595878601074,
+ 4.802543640136719,
+ -3.9611656665802,
+ 1.8577446937561035,
+ 8.845459938049316,
+ 5.3601861000061035,
+ 7.407097816467285,
+ 7.300731182098389,
+ 5.122791767120361,
+ -1.0425262451171875,
+ -2.0254790782928467,
+ 4.59906005859375,
+ 5.5377349853515625,
+ 7.0722126960754395,
+ -3.6198534965515137,
+ 7.7057366371154785,
+ 0.7627019286155701,
+ 7.704476833343506,
+ -5.568854808807373,
+ -2.8196332454681396,
+ 2.8956897258758545,
+ 7.310884475708008,
+ -1.9668323993682861,
+ 7.258252143859863,
+ 2.040471076965332,
+ -1.3508975505828857,
+ 3.6582324504852295,
+ 7.501095294952393,
+ 3.844759941101074,
+ 5.517116546630859,
+ 5.136075019836426,
+ -1.670976161956787,
+ 8.753059387207031,
+ 3.6817221641540527,
+ 8.523528099060059,
+ 3.124119997024536,
+ -1.3789392709732056,
+ 6.031548976898193,
+ 7.365862846374512,
+ -4.676599025726318,
+ 7.970692157745361,
+ -5.706074237823486,
+ 1.5437520742416382,
+ 2.5718445777893066,
+ 5.178225994110107,
+ -1.7867119312286377,
+ -3.9174883365631104,
+ -6.325456142425537,
+ 2.165548801422119,
+ 7.667225360870361,
+ 7.437671184539795,
+ 6.005098342895508,
+ 2.5892181396484375,
+ 7.4688401222229,
+ 2.550855875015259,
+ 8.82972240447998,
+ 7.493037223815918,
+ -5.2092204093933105,
+ 6.904902935028076,
+ 2.0044095516204834,
+ 6.942010879516602,
+ -3.196828842163086,
+ 6.915232181549072,
+ -2.55283522605896,
+ -5.1857733726501465
+ ],
+ "z": [
+ 0.9599736928939819,
+ 0.9545231461524963,
+ 0.9484756588935852,
+ 0.8629654049873352,
+ 0.9065804481506348,
+ 0.9346697926521301,
+ 0.9416508674621582,
+ 0.9376319050788879,
+ 0.6251171231269836,
+ 0.9200356602668762,
+ 0.814395546913147,
+ 0.20510144531726837,
+ 0.14036493003368378,
+ 0.9411420226097107,
+ 0.011215683072805405,
+ 0.22863861918449402,
+ 0.9380825161933899,
+ 0.013005613349378109,
+ 0.029080139473080635,
+ 0.937067449092865,
+ 0.006106241140514612,
+ 0.8271619081497192,
+ 0.8916909098625183,
+ 0.8522865176200867,
+ 0.021532395854592323,
+ 0.9406567811965942,
+ 0.012383528053760529,
+ 0.9469900131225586,
+ 0.9406611323356628,
+ 0.02189617231488228,
+ 0.00513895507901907,
+ 0.9315266609191895,
+ 0.6846194863319397,
+ 0.00252342177554965,
+ 0.9255027770996094,
+ 0.12604449689388275,
+ 0.8625036478042603,
+ 0.022475941106677055,
+ 0.9427933096885681,
+ 0.002689987886697054,
+ 0.023181047290563583,
+ 0.0020413780584931374,
+ 0.23801666498184204,
+ 0.004571772180497646,
+ 0.0267456267029047,
+ 0.07405140995979309,
+ 0.013269828632473946,
+ 0.014075732789933681,
+ 0.018177680671215057,
+ 0.8879609704017639,
+ 0.5017601251602173,
+ 0.052536748349666595,
+ 0.0013182642869651318,
+ 0.9114360809326172,
+ 0.013911278918385506,
+ 0.002193354768678546,
+ 0.9450902938842773,
+ 0.01495618000626564,
+ 0.7675567269325256,
+ 0.3331969380378723,
+ 0.9254684448242188,
+ 0.9329370260238647,
+ 0.9176525473594666,
+ 0.013932841829955578,
+ 0.00535422982648015,
+ 0.8387388586997986,
+ 0.004764800425618887,
+ 0.02386591210961342,
+ 0.04008623957633972,
+ 0.5606747269630432,
+ 0.9332547783851624,
+ 0.02354300580918789,
+ 0.7222034931182861,
+ 0.010339915752410889,
+ 0.0051331170834600925,
+ 0.015859361737966537,
+ 0.928329586982727,
+ 0.07042752951383591,
+ 0.0033885720185935497,
+ 0.02866990491747856,
+ 0.9165403246879578,
+ 0.03584417700767517,
+ 0.9447782635688782,
+ 0.9416751265525818,
+ 0.5410656929016113,
+ 0.02953338623046875,
+ 0.009083312004804611,
+ 0.32500940561294556,
+ 0.07135940343141556,
+ 0.21336644887924194,
+ 0.00776125630363822,
+ 0.0751323252916336,
+ 0.020248418673872948,
+ 0.7727653980255127,
+ 0.0019125656690448523,
+ 0.0154165243729949,
+ 0.014082311652600765,
+ 0.9479771256446838,
+ 0.00926204677671194,
+ 0.9451633095741272,
+ 0.018092600628733635,
+ 0.03380986675620079,
+ 0.013082841411232948,
+ 0.8813718557357788,
+ 0.03869924694299698,
+ 0.043908167630434036,
+ 0.07465846836566925,
+ 0.020705657079815865,
+ 0.840247631072998,
+ 0.01788754016160965,
+ 0.7686178684234619,
+ 0.04338349774479866,
+ 0.03050147369503975,
+ 0.04970092326402664,
+ 0.8392722010612488,
+ 0.002669614041224122,
+ 0.11674889177083969,
+ 0.00298236939124763,
+ 0.012624367140233517,
+ 0.01754012331366539,
+ 0.09177706390619278,
+ 0.021733084693551064,
+ 0.004724114201962948,
+ 0.0017189689679071307,
+ 0.030842922627925873,
+ 0.02060762234032154,
+ 0.90532386302948,
+ 0.11719930917024612,
+ 0.019032690674066544,
+ 0.8460276126861572,
+ 0.1660507172346115,
+ 0.8996521830558777,
+ 0.7967191338539124,
+ 0.003243226557970047,
+ 0.913471519947052,
+ 0.0244155190885067,
+ 0.18375305831432343,
+ 0.006471569649875164,
+ 0.9159026741981506,
+ 0.007738111540675163,
+ 0.002430642256513238
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 33
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T11:11:01.513232Z",
+ "start_time": "2025-01-20T11:11:01.493501Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "2c07216975e2e25e",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([[ 1.5776e-01, 9.8405e-01, 8.2254e-02],\n",
+ " [-2.7604e-01, 9.5545e-01, 1.0445e-01],\n",
+ " [-2.7929e-01, 9.5391e-01, 1.0978e-01],\n",
+ " [ 1.8736e-01, 9.7893e-01, 8.1240e-02],\n",
+ " [ 1.6067e-01, 9.8312e-01, 8.7558e-02],\n",
+ " [ 1.6633e-01, 9.8175e-01, 9.2166e-02],\n",
+ " [-2.7789e-01, 9.5394e-01, 1.1303e-01],\n",
+ " [ 1.7577e-01, 9.7979e-01, 9.5482e-02],\n",
+ " [-2.0500e-01, 9.7601e-01, 7.3351e-02],\n",
+ " [ 1.6585e-01, 9.8166e-01, 9.4051e-02],\n",
+ " [-2.4560e-01, 9.6450e-01, 9.7019e-02],\n",
+ " [ 2.3079e-01, 9.7272e-01, 2.3669e-02],\n",
+ " [ 2.1518e-01, 9.7641e-01, 1.7769e-02],\n",
+ " [-2.8556e-01, 9.5139e-01, 1.1540e-01],\n",
+ " [ 8.3375e-01, 5.5213e-01, 3.0947e-03],\n",
+ " [ 2.0751e-01, 9.7789e-01, 2.5777e-02],\n",
+ " [-2.7116e-01, 9.5567e-01, 1.1471e-01],\n",
+ " [ 1.8916e-01, -9.8192e-01, 6.7408e-03],\n",
+ " [ 2.9420e-02, 9.9955e-01, 5.4766e-03],\n",
+ " [-2.9866e-01, 9.4725e-01, 1.1626e-01],\n",
+ " [-3.8300e-01, -9.2375e-01, 1.1843e-03],\n",
+ " [-3.7854e-01, 9.1914e-01, 1.0902e-01],\n",
+ " [ 1.8957e-01, 9.7744e-01, 9.3177e-02],\n",
+ " [-3.5404e-01, 9.2869e-01, 1.1040e-01],\n",
+ " [-7.1366e-02, 9.9745e-01, 2.7384e-03],\n",
+ " [-2.6815e-01, 9.5634e-01, 1.1625e-01],\n",
+ " [ 5.1271e-01, 8.5856e-01, 2.7863e-03],\n",
+ " [ 1.7913e-01, 9.7869e-01, 1.0041e-01],\n",
+ " [-2.8577e-01, 9.5115e-01, 1.1682e-01],\n",
+ " [-5.1519e-01, -8.5694e-01, 1.5119e-02],\n",
+ " [-4.3956e-01, -8.9821e-01, 9.8758e-04],\n",
+ " [-3.2362e-01, 9.3864e-01, 1.1927e-01],\n",
+ " [-2.0543e-01, 9.7522e-01, 8.2158e-02],\n",
+ " [-2.6181e-01, -9.6512e-01, 3.9386e-04],\n",
+ " [-3.2637e-01, 9.3794e-01, 1.1731e-01],\n",
+ " [ 2.0204e-01, 9.7924e-01, 1.6306e-02],\n",
+ " [ 1.9135e-01, 9.7723e-01, 9.1702e-02],\n",
+ " [ 8.6832e-01, 4.9597e-01, 5.3530e-03],\n",
+ " [-2.8229e-01, 9.5191e-01, 1.1904e-01],\n",
+ " [ 3.0127e-01, -9.5354e-01, 4.3984e-04],\n",
+ " [ 3.3871e-01, 9.4070e-01, 1.9142e-02],\n",
+ " [-1.7972e-01, -9.8372e-01, 3.0265e-04],\n",
+ " [ 2.3960e-01, 9.7045e-01, 2.8604e-02],\n",
+ " [ 4.4457e-01, -8.9574e-01, 1.3448e-03],\n",
+ " [-7.8075e-01, -6.2432e-01, 2.5710e-02],\n",
+ " [-9.8213e-01, 1.8668e-01, 2.4010e-02],\n",
+ " [ 5.5187e-01, 8.3392e-01, 3.2977e-03],\n",
+ " [-6.8770e-01, -7.2599e-01, 3.6515e-03],\n",
+ " [ 9.9154e-01, 1.2972e-01, 5.0068e-03],\n",
+ " [-3.3564e-01, 9.3470e-01, 1.1694e-01],\n",
+ " [ 1.8652e-01, 9.8082e-01, 5.6574e-02],\n",
+ " [-9.8274e-01, 1.8338e-01, 2.4470e-02],\n",
+ " [ 2.2948e-01, -9.7331e-01, 1.9964e-04],\n",
+ " [-2.7509e-01, 9.5440e-01, 1.1596e-01],\n",
+ " [ 8.7907e-01, 4.7665e-01, 7.0843e-03],\n",
+ " [ 2.0529e-01, -9.7870e-01, 3.5295e-04],\n",
+ " [ 1.8271e-01, 9.7776e-01, 1.0292e-01],\n",
+ " [-5.8532e-01, -8.1079e-01, 4.2083e-03],\n",
+ " [-2.2405e-01, 9.6976e-01, 9.6725e-02],\n",
+ " [-6.4469e-01, 7.6213e-01, 5.9327e-02],\n",
+ " [ 1.8370e-01, 9.7783e-01, 1.0050e-01],\n",
+ " [ 1.8424e-01, 9.7758e-01, 1.0193e-01],\n",
+ " [-3.4131e-01, 9.3192e-01, 1.2262e-01],\n",
+ " [-3.3554e-01, 9.4200e-01, 6.8494e-03],\n",
+ " [ 6.4502e-01, -7.6416e-01, 1.3308e-03],\n",
+ " [-3.8729e-01, 9.1485e-01, 1.1424e-01],\n",
+ " [ 5.8599e-01, -8.1032e-01, 1.1693e-03],\n",
+ " [-5.8481e-02, 9.9828e-01, 3.9322e-03],\n",
+ " [ 3.9619e-01, 9.1811e-01, 1.0399e-02],\n",
+ " [ 2.1079e-01, 9.7551e-01, 6.2862e-02],\n",
+ " [-2.6759e-01, 9.5631e-01, 1.1777e-01],\n",
+ " [-3.0254e-01, 9.5313e-01, 3.6401e-03],\n",
+ " [ 2.0368e-01, 9.7577e-01, 7.9977e-02],\n",
+ " [ 9.5745e-01, -2.8859e-01, 2.9633e-03],\n",
+ " [-1.5607e-01, -9.8774e-01, 1.0070e-03],\n",
+ " [ 9.9709e-01, 7.6084e-02, 4.8195e-03],\n",
+ " [ 1.8158e-01, 9.7801e-01, 1.0257e-01],\n",
+ " [ 3.3576e-01, 9.4185e-01, 1.3812e-02],\n",
+ " [ 2.6705e-01, -9.6368e-01, 8.2438e-04],\n",
+ " [ 8.7120e-02, 9.9608e-01, 1.5372e-02],\n",
+ " [ 1.8925e-01, 9.7670e-01, 1.0120e-01],\n",
+ " [-4.2279e-01, 9.0621e-01, 6.0599e-03],\n",
+ " [-2.7467e-01, 9.5381e-01, 1.2166e-01],\n",
+ " [-3.1099e-01, 9.4260e-01, 1.2158e-01],\n",
+ " [-5.0925e-01, 8.5586e-01, 9.0395e-02],\n",
+ " [-8.5143e-01, -5.2426e-01, 1.4852e-02],\n",
+ " [-6.3556e-01, -7.7204e-01, 3.4622e-03],\n",
+ " [-4.8095e-01, 8.7457e-01, 6.1805e-02],\n",
+ " [-1.2795e-01, 9.9170e-01, 1.2779e-02],\n",
+ " [ 3.6782e-01, 9.2947e-01, 2.8042e-02],\n",
+ " [-5.3934e-01, -8.4209e-01, 1.8055e-03],\n",
+ " [ 3.6541e-01, 9.3080e-01, 9.0755e-03],\n",
+ " [ 9.7491e-01, 2.2252e-01, 5.9076e-03],\n",
+ " [-2.1247e-01, 9.7229e-01, 9.7521e-02],\n",
+ " [ 1.4954e-01, -9.8876e-01, 3.3958e-04],\n",
+ " [-4.1069e-01, -9.1176e-01, 4.9851e-03],\n",
+ " [ 7.4403e-01, 6.6814e-01, 3.2493e-03],\n",
+ " [-2.8512e-01, 9.5053e-01, 1.2325e-01],\n",
+ " [ 8.5808e-01, -5.1351e-01, 2.4182e-03],\n",
+ " [-2.9554e-01, 9.4733e-01, 1.2336e-01],\n",
+ " [ 7.7957e-03, 9.9993e-01, 8.8663e-03],\n",
+ " [-8.4029e-01, -5.4198e-01, 1.3564e-02],\n",
+ " [ 6.6023e-01, 7.5106e-01, 2.6860e-03],\n",
+ " [-2.4100e-01, 9.6389e-01, 1.1326e-01],\n",
+ " [-5.8824e-01, 8.0864e-01, 8.1394e-03],\n",
+ " [ 5.6545e-01, 8.2476e-01, 6.5639e-03],\n",
+ " [ 3.7011e-01, 9.2889e-01, 1.3502e-02],\n",
+ " [-8.5719e-01, -5.1496e-01, 6.3810e-03],\n",
+ " [ 1.9883e-01, 9.7555e-01, 9.3648e-02],\n",
+ " [-4.3673e-01, 8.9958e-01, 4.3706e-03],\n",
+ " [ 1.7635e-01, 9.8035e-01, 8.8404e-02],\n",
+ " [ 6.9272e-01, 7.2114e-01, 1.0014e-02],\n",
+ " [-9.1198e-01, -4.1014e-01, 9.0722e-03],\n",
+ " [ 1.3930e-01, 9.9022e-01, 8.1595e-03],\n",
+ " [-2.7299e-01, 9.5583e-01, 1.0891e-01],\n",
+ " [ 3.1216e-01, -9.5003e-01, 5.4232e-04],\n",
+ " [ 1.5646e-01, 9.8758e-01, 1.4465e-02],\n",
+ " [-1.9370e-01, -9.8106e-01, 5.1277e-04],\n",
+ " [ 8.2830e-01, 5.6026e-01, 4.5816e-03],\n",
+ " [-3.4282e-01, 9.3938e-01, 6.4066e-03],\n",
+ " [ 4.2269e-01, 9.0613e-01, 1.6060e-02],\n",
+ " [-8.5018e-01, -5.2645e-01, 6.4036e-03],\n",
+ " [ 3.6932e-01, -9.2930e-01, 1.1207e-03],\n",
+ " [ 2.6139e-01, -9.6523e-01, 2.6231e-04],\n",
+ " [ 7.8401e-01, 6.2068e-01, 8.8401e-03],\n",
+ " [ 1.7933e-01, 9.8379e-01, 2.6442e-03],\n",
+ " [-2.4559e-01, 9.6227e-01, 1.1713e-01],\n",
+ " [ 3.9907e-01, 9.1674e-01, 1.7892e-02],\n",
+ " [ 3.5405e-01, 9.3520e-01, 6.8744e-03],\n",
+ " [-2.4965e-01, 9.6218e-01, 1.0899e-01],\n",
+ " [-7.9112e-01, 6.1037e-01, 3.9733e-02],\n",
+ " [ 1.7968e-01, 9.7866e-01, 9.9715e-02],\n",
+ " [-2.4047e-01, 9.6521e-01, 1.0263e-01],\n",
+ " [-2.4052e-01, -9.7064e-01, 6.0432e-04],\n",
+ " [-3.5914e-01, 9.2522e-01, 1.2240e-01],\n",
+ " [ 8.6889e-01, 4.9496e-01, 6.0291e-03],\n",
+ " [ 2.9706e-01, 9.5452e-01, 2.5266e-02],\n",
+ " [-3.1297e-01, -9.4976e-01, 1.9227e-03],\n",
+ " [-3.4379e-01, 9.3092e-01, 1.2330e-01],\n",
+ " [ 7.5591e-01, -6.5467e-01, 1.9844e-03],\n",
+ " [ 6.8384e-02, -9.9766e-01, 4.6762e-04]])"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 27
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:47.541174Z",
+ "start_time": "2025-01-15T13:26:42.640256Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "from src.jetfinder.basicjetfinder import basicjetfinder\n",
+ "from src.jetfinder.basicjetfinder_types import PseudoJet"
+ ],
+ "id": "3d306ff55aba8f56",
+ "outputs": [],
+ "execution_count": 62
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T11:30:57.051315Z",
+ "start_time": "2025-02-12T11:30:56.738611Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "event = dataset[1]",
+ "id": "f22d322fe5c58d62",
+ "outputs": [],
+ "execution_count": 11
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T11:30:57.798195Z",
+ "start_time": "2025-02-12T11:30:57.789047Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "def get_pseudojets(event):\n",
+ " pseudojets = []\n",
+ " for i in range(len(event.pfcands)):\n",
+ " pseudojets.append(PseudoJet(event.pfcands.pxyz[i, 0].item(), event.pfcands.pxyz[i, 1].item(), event.pfcands.pxyz[i, 2].item(), event.pfcands.E[i].item()))\n",
+ " return pseudojets\n",
+ "def get_pseudojets_fastjet(event):\n",
+ " pseudojets = []\n",
+ " for i in range(len(event.pfcands)):\n",
+ " pseudojets.append(fastjet.PseudoJet(event.pfcands.pxyz[i, 0].item(), event.pfcands.pxyz[i, 1].item(), event.pfcands.pxyz[i, 2].item(), event.pfcands.E[i].item()))\n",
+ " return pseudojets"
+ ],
+ "id": "d82147109550e95d",
+ "outputs": [],
+ "execution_count": 12
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.214374164Z",
+ "start_time": "2025-01-05T10:22:51.003001Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "pj = get_pseudojets(event)\n",
+ "init_jets, history = basicjetfinder(pj, return_raw=True)"
+ ],
+ "id": "109f80517d6d8ebe",
+ "outputs": [],
+ "execution_count": 9
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.218588253Z",
+ "start_time": "2025-01-05T10:22:51.189299Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "pj[0].phi, pj[0].rap",
+ "id": "d447c0086cf78673",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(5.176739997422374, -1.1044922730459195)"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 10
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.220185691Z",
+ "start_time": "2025-01-05T10:22:51.295388Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "event.pfcands.phi[0].item(), event.pfcands.eta[0].item()",
+ "id": "829888c538a224ce",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(-1.1064453125, -1.1044921875)"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 11
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.222836564Z",
+ "start_time": "2025-01-05T10:22:53.423595Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "history.parent1[-1], history.parent2[-1]\n",
+ "history.jetp_index[305]"
+ ],
+ "id": "5066f1dbfc75c415",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "305"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 12
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.225401392Z",
+ "start_time": "2025-01-05T10:22:53.613292Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "jets = basicjetfinder(pj, return_raw=0, ptmin=100)",
+ "id": "111438c86429cb73",
+ "outputs": [],
+ "execution_count": 13
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.227766958Z",
+ "start_time": "2025-01-05T10:23:02.561963Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "print(len(jets))\n",
+ "import numpy as np\n",
+ "pts = [jet.pt for jet in jets]\n",
+ "ax.hist(pts, bins=np.linspace(100, 300, 30))\n",
+ "fig.show()"
+ ],
+ "id": "c9b6a5bae8fb77a0",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "12\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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t97q/snLLpdLwcHB9QL5p9dhQ9fp+ft8RUPr+6njx49r/vz59b5VOG/ePN11110KDQ3V+++/r4ceekjff/+9Hnnkkasx9WZpbH333nuvevbsqW7duumTTz7RrFmzVFJSojfeeEOS/+yf1Lw9XLFihfr27atbbrnF47gv7+GePXvkdDp15swZtW3bVuvXr1e/fv1UXFzsc9ffNRcj15KzZ8/qt7/9rYwxWrZsmcd9aWlp7n8eOHCggoOD9Yc//EFZWVk+/yOPf/e737n/ecCAARo4cKBuvPFGFRQUaNiwYRZndmXk5uZq4sSJCgkJ8TjuL3s4ffp0ffrpp9q6davtqVwRTa2voqJCo0aNUr9+/fT000973Ddnzhz3Pw8aNEhVVVVatGiRT/yH7LzG1ve/YTVgwAB17dpVw4YN0/79+3XjjTde7Wlekqb28PTp01q1apXHfp3ny3vYu3dvFRcXq7y8XOvWrdOkSZO0ZcsW29Nq0DX3bZqoqChJqveu4bKyMvd9UVFROnr0qMf9586d04kTJ9xjfN35EPn666+1adOmJn8tdEJCgs6dO6eDBw9enQleRjfccIPCw8O1b98+SS1j/87797//rZKSEj3wwANNjvXFPUxNTdU777yjzZs3q0ePHu7jUVFRqqmp0cmTJz3G//Q6bOg6PX+fL2hsfedVVlZqxIgRateundavX6/WrVtf8PESEhL0zTffqLq6+kpN2StNre9/JSQkSJLHdejr+yc1b43r1q3TqVOnlJyc3OTj+dIeBgcH66abblJ8fLyysrIUGxur559/3ievv2suRnr16qWoqCjl5+e7j1VUVGj79u1yOp2SJKfTqZMnT6qoqMg95sMPP1RdXZ37gvNl50Nk7969+uCDD9S5c+cmzykuLlZgYGC9b2/4g2+++UbfffedunbtKsn/9+9/rVixQvHx8YqNjW1yrC/toTFGqampWr9+vT788EP16tXL4/74+Hi1bt3a4zosKSlRaWmpx3W4Z88ej7A8H9b9+vW7OgtpRFPrk37498rw4cMVHByst99+u94rWw0pLi5Wx44drb+y1Zz1/VRxcbEkeVyHvrp/kndrXLFihcaMGaMuXbo0+bi+socNqaurU3V1tW9ef5f9LbE+oLKy0uzevdvs3r3bSDLZ2dlm9+7d7k+TLFy40HTo0MG89dZb5pNPPjFjx441vXr1MqdPn3Y/xogRI8ygQYPM9u3bzdatW83NN99sJkyYYGtJHi60vpqaGjNmzBjTo0cPU1xcbI4cOeK+nX8H9LZt28xzzz1niouLzf79+80///lP06VLF5OcnGx5ZT+40PoqKyvNY489ZgoLC82BAwfMBx98YAYPHmxuvvlmc+bMGfdj+PL+GdP016gxxpSXl5vQ0FCzbNmyeuf7+h5OmzbNtG/f3hQUFHh8DZ46dco9ZurUqeb66683H374odm5c6dxOp3G6XS67z937pzp37+/GT58uCkuLjZ5eXmmS5cuJj093caSPDS1vvLycpOQkGAGDBhg9u3b5zHm3Llzxhhj3n77bbN8+XKzZ88es3fvXvPCCy+Y0NBQk5GRYXNpxpim17dv3z4zb948s3PnTnPgwAHz1ltvmRtuuMHcfvvt7sfw5f0zpnlfo8YYs3fvXhMQEGDefffdeo/hy3s4e/Zss2XLFnPgwAHzySefmNmzZ5uAgADz/vvvG2N87/prkTGyefNmI6nebdKkScaYHz7eO2fOHBMZGWkcDocZNmyYKSkp8XiM7777zkyYMMG0bdvWhIWFmZSUFFNZWWlhNfVdaH0HDhxo8D5JZvPmzcYYY4qKikxCQoJp3769CQkJMX379jULFizw+I+5TRda36lTp8zw4cNNly5dTOvWrU3Pnj3NlClTPD5+Zoxv758xTX+NGmPMP/7xD9OmTRtz8uTJeuf7+h429jX48ssvu8ecPn3aPPTQQ6Zjx44mNDTU/PrXvzZHjhzxeJyDBw+akSNHmjZt2pjw8HDzxz/+0eOjsbY0tb7G9leSOXDggDHmh4+bx8XFmbZt25rrrrvOxMbGmpycHFNbW2tvYf9fU+srLS01t99+u+nUqZNxOBzmpptuMo8//rgpLy/3eBxf3T9jmvc1aowx6enpJjo6usF98eU9vP/++03Pnj1NcHCw6dKlixk2bJg7RIzxvesvwBgf+wwSAAC4plxz7xkBAAC+hRgBAABWESMAAMAqYgQAAFhFjAAAAKuIEQAAYBUxAgAArCJGAACAVcQIAACwihgBAABWESMAAMAqYgQAAFj1/wA2Rm2NuOD1owAAAABJRU5ErkJggg=="
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 15
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.228831708Z",
+ "start_time": "2025-01-05T10:23:12.488535Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "pts",
+ "id": "8173000a212c5561",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[106.4914540483752,\n",
+ " 126.82878103484677,\n",
+ " 128.75701244217592,\n",
+ " 139.36815083799416,\n",
+ " 141.45818096650805,\n",
+ " 157.3921266403816,\n",
+ " 263.460560295077,\n",
+ " 510.77385760617676,\n",
+ " 1265.8454239380796,\n",
+ " 3240.9516711140454,\n",
+ " 9355.60575745164,\n",
+ " 12409.915133671686]"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 16
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.232599293Z",
+ "start_time": "2025-01-04T21:42:24.952081Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "history.parent1[-1], history.parent2[-1]\n",
+ "id": "ca12ef3d85430a6c",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(305, -1)"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 14
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.235836146Z",
+ "start_time": "2025-01-04T21:42:25.992473Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "history.parent1",
+ "id": "648b5a6c3f3469db",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 335, 0,\n",
+ " 337, 338, 339, 340, 6, 341, 7, 343, 345, 346, 347, 348, 5,\n",
+ " 349, 351, 352, 353, 127, 350, 356, 354, 358, 13, 359, 357, 362,\n",
+ " 363, 361, 365, 366, 367, 368, 369, 370, 371, 372, 364, 374, 373,\n",
+ " 376, 377, 378, 379, 82, 375, 382, 383, 344, 385, 386, 387, 384,\n",
+ " 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401,\n",
+ " 402, 403, 404, 405, 406, 342, 408, 409, 410, 407, 412, 413, 414,\n",
+ " 415, 416, 417, 418, 419, 420, 421, 422, 423, 411, 425, 424, 427,\n",
+ " 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440,\n",
+ " 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 426,\n",
+ " 9, 455, 453, 454, 458, 33, 460, 388, 459, 463, 464, 465, 25,\n",
+ " 466, 468, 469, 456, 470, 472, 473, 474, 475, 476, 477, 478, 479,\n",
+ " 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 462, 35, 491,\n",
+ " 461, 494, 495, 493, 497, 498, 499, 20, 496, 502, 500, 504, 503,\n",
+ " 506, 507, 505, 509, 510, 511, 512, 513, 514, 515, 516, 508, 518,\n",
+ " 519, 501, 520, 22, 521, 92, 522, 524, 526, 91, 528, 248, 530,\n",
+ " 527, 523, 65, 177, 533, 537, 538, 467, 539, 48, 40, 540, 93,\n",
+ " 541, 37, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557,\n",
+ " 558, 559, 560, 561, 542, 534, 57, 529, 564, 563, 568, 566, 570,\n",
+ " 571, 572, 573, 574, 575, 565, 577, 569, 185, 102, 581, 62, 583,\n",
+ " 52, 43, 586, 587, 588, 589, 590, 591, 582, 50, 594, 595, 596,\n",
+ " 597, 598, 599, 600, 27, 602, 603, 604, 98, 606, 607, 543, 544,\n",
+ " 608, 609, 567, 579, 614, 611, 605, 617, 593, 619, 620, 621, 89,\n",
+ " 623, 624, 625, 626, 627, 628, 629, 612, 631, 632, 633, 634, 635,\n",
+ " 636, 637, 610, 616, 640, 84, 192, 642, 644, 645, 646, 647, 545,\n",
+ " 649, 650, 651, 652, 653, 654, 190, 104, 657, 658, 659, 660, 661,\n",
+ " 49, 137, 664, 656, 126, 166, 305])"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 15
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.239141583Z",
+ "start_time": "2025-01-04T21:42:40.173588Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "history.parent2",
+ "id": "7f4ba4d2fac40d0b",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n",
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 2, 336,\n",
+ " 213, 4, 134, 197, 243, 169, 31, 323, 222, 230, 325, 155, 12,\n",
+ " 167, 142, 327, 198, 141, 45, 47, 106, 310, 116, 270, 16, 100,\n",
+ " 74, 11, 221, 299, 59, 67, 58, 277, 129, 189, 17, 184, 303,\n",
+ " 139, 146, 79, -1, 123, 77, 294, 258, 32, 36, 18, 14, 360,\n",
+ " 124, 63, 292, 19, 204, 112, 29, 103, 109, 263, 73, 131, 199,\n",
+ " 55, 266, 54, 309, 41, 15, 21, 30, 8, 233, 285, 46, 241,\n",
+ " 38, 68, 246, 96, 85, 122, 316, 191, 86, 90, 229, 157, 289,\n",
+ " 26, 28, 117, 135, 24, 61, 214, 23, 326, 224, 201, 179, 237,\n",
+ " 76, 115, 42, 172, 256, 143, 219, 78, 281, 308, 44, 206, 128,\n",
+ " 53, 60, -1, 183, 251, 34, 255, 175, 333, 105, 268, 133, 317,\n",
+ " 381, 227, 321, 158, 94, 39, 355, 10, 252, 80, 101, 471, 290,\n",
+ " 70, 284, 83, 275, 291, 210, 262, 261, 253, -1, 153, 334, 280,\n",
+ " 108, 140, 492, 147, 125, 174, 295, 232, 288, 287, 161, 265, 56,\n",
+ " 307, 195, 247, 150, 164, 202, 274, 95, 64, 244, -1, 186, 272,\n",
+ " 208, 329, 162, 273, 111, 107, 223, 160, 218, 163, 286, 271, -1,\n",
+ " 250, 130, 330, 531, 313, 259, 69, 324, 152, 99, 165, 278, 242,\n",
+ " -1, 536, 217, 203, 211, 159, 145, 331, 88, 226, 535, 216, 151,\n",
+ " 231, 187, 301, -1, 260, 297, 72, 525, 264, 120, 87, 269, 235,\n",
+ " 318, 228, 194, 220, 178, 576, -1, 314, 188, 113, 245, 97, 156,\n",
+ " 584, 585, 66, 132, 279, 81, 296, -1, 282, 298, 180, 580, 234,\n",
+ " 71, 200, 168, -1, 170, 302, 171, 154, 207, 304, 110, 320, 238,\n",
+ " 312, 181, -1, 138, -1, 283, 276, -1, 267, 121, 328, 182, 622,\n",
+ " 215, 209, 212, 173, 306, 193, -1, 114, 75, 119, 149, 51, 240,\n",
+ " 205, -1, -1, 148, -1, 257, 236, 118, 176, 144, 196, -1, 300,\n",
+ " 322, 136, 293, 319, 332, -1, 311, 249, 254, 315, 225, 643, -1,\n",
+ " -1, 239, -1, -1, -1, -1, -1])"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 16
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T11:37:26.356164Z",
+ "start_time": "2025-02-12T11:37:26.334334Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import fastjet\n",
+ "jetdef = fastjet.JetDefinition(fastjet.antikt_algorithm, 0.8)\n",
+ "array = get_pseudojets_fastjet(event)\n",
+ "\n",
+ "cluster = fastjet.ClusterSequence(array, jetdef)\n",
+ "inc_jets = cluster.inclusive_jets()\n",
+ "for elem in inc_jets:\n",
+ " pt = elem.pt()\n",
+ " if pt < 100:\n",
+ " continue\n",
+ " print(\"pt:\", elem.pt(), \"eta:\", elem.rap(), \"phi:\", elem.phi(), \"m\", elem.m())\n",
+ "\n",
+ "\n",
+ "def get_jets(event, jetdef):\n",
+ " pt = []\n",
+ " eta = []\n",
+ " phis = []\n",
+ " mass = []\n",
+ " array = get_pseudojets_fastjet(event)\n",
+ "\n",
+ " cluster = fastjet.ClusterSequence(array, jetdef)\n",
+ " inc_jets = cluster.inclusive_jets()\n",
+ " for elem in inc_jets:\n",
+ " if elem.pt() < 100:\n",
+ " continue\n",
+ " #print(\"pt:\", elem.pt(), \"eta:\", elem.rap(), \"phi:\", elem.phi())ž\n",
+ " pt.append(elem.pt())\n",
+ " eta.append(elem.rap())\n",
+ " phi = elem.phi()\n",
+ " if phi > np.pi:\n",
+ " phi -= 2*np.pi\n",
+ " phis.append(phi)\n",
+ " mass.append(elem.m())\n",
+ " return pt, eta, phis, mass\n"
+ ],
+ "id": "fe26fce41ce8a6e0",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "pt: 170.28684882840693 eta: 1.4439809865649234 phi: 3.443388811838133 m 34.279811963116074\n"
+ ]
+ }
+ ],
+ "execution_count": 26
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T11:37:27.360232Z",
+ "start_time": "2025-02-12T11:37:27.350919Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "event.fatjets.pt.tolist(), event.fatjets.eta.tolist(), event.fatjets.phi.tolist()",
+ "id": "d1e783a1ef0b7d2",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "([170.28684997558594], [1.462087869644165], [-2.839796543121338])"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 27
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T11:37:44.517906Z",
+ "start_time": "2025-02-12T11:37:44.500190Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "jetdef = fastjet.JetDefinition(fastjet.antikt_algorithm, 0.8)\n",
+ "\n",
+ "jets = get_jets(event, jetdef)\n",
+ "print(jets)"
+ ],
+ "id": "4a70177cc18e6294",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "([170.28684882840693], [1.4439809865649234], [-2.8397964953414534], [34.279811963116074])\n"
+ ]
+ }
+ ],
+ "execution_count": 32
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.246660551Z",
+ "start_time": "2025-01-08T13:38:47.767966Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "model_clusters_file =\"/work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_2025_01_03_15_07_14/HDBSCAN_10_20.pkl\"\n",
+ "model_output_file = \"/work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_2025_01_03_15_07_14/eval_0.pkl\"\n"
+ ],
+ "id": "2b10ddbf4eec8cb5",
+ "outputs": [],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.248147149Z",
+ "start_time": "2025-01-08T13:38:47.884029Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "ds = EventDataset.from_directory(\"/work/gkrzmanc/jetclustering/preprocessed_data/scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-900_mDark-20_rinv-0.3\",\n",
+ " model_clusters_file=model_clusters_file, model_output_file=model_output_file)"
+ ],
+ "id": "45e33b8f47a24359",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/jetclustering/code/src/utils/utils.py:91: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
+ " return lambda b: torch.load(io.BytesIO(b), map_location='cpu')\n"
+ ]
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.249374772Z",
+ "start_time": "2025-01-08T13:38:48.434363Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "labels = CPU_Unpickler(open(\"/work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_2025_01_03_15_07_14/HDBSCAN_10_20.pkl\", \"rb\")).load()\n",
+ "labels"
+ ],
+ "id": "9e23e7eff0c80073",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 0, 2, 2, ..., 1, 0, -1])"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 7
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.250785451Z",
+ "start_time": "2025-01-08T13:38:48.566720Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "from src.plotting.plot_event import plot_event\n",
+ "clist = ['#1f78b4', '#b3df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbe6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928']\n",
+ "colors = {\n",
+ " -1: \"gray\",\n",
+ " 0: clist[0],\n",
+ " 1: clist[1],\n",
+ " 2: clist[2],\n",
+ " 3: clist[3],\n",
+ " 4: clist[4],\n",
+ " 5: clist[5],\n",
+ " 6: clist[6],\n",
+ " 7: clist[7],\n",
+ "}\n",
+ "\n",
+ "idx = 4\n",
+ "c = [colors[i] for i in labels[result[\"event_idx\"] == idx]]\n",
+ "\n",
+ "plot_event(ds[idx], colors=c).show()\n",
+ "\n",
+ "print(ds[idx].model_jets.pt)"
+ ],
+ "id": "349e83cf3a97bbd6",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "tensor([427.9641, 391.8387])\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 8
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "4a2509d55bd64836"
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.252545623Z",
+ "start_time": "2025-01-07T15:45:38.549155Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "pt_model_jet = []\n",
+ "for i in range(200):\n",
+ " pt_model_jet += ds[i].model_jets.pt.tolist()"
+ ],
+ "id": "831cb3f91dc26650",
+ "outputs": [
+ {
+ "ename": "NameError",
+ "evalue": "name 'ds' is not defined",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mNameError\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[4], line 3\u001B[0m\n\u001B[1;32m 1\u001B[0m pt_model_jet \u001B[38;5;241m=\u001B[39m []\n\u001B[1;32m 2\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m i \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mrange\u001B[39m(\u001B[38;5;241m200\u001B[39m):\n\u001B[0;32m----> 3\u001B[0m pt_model_jet \u001B[38;5;241m+\u001B[39m\u001B[38;5;241m=\u001B[39m \u001B[43mds\u001B[49m[i]\u001B[38;5;241m.\u001B[39mmodel_jets\u001B[38;5;241m.\u001B[39mpt\u001B[38;5;241m.\u001B[39mtolist()\n",
+ "\u001B[0;31mNameError\u001B[0m: name 'ds' is not defined"
+ ]
+ }
+ ],
+ "execution_count": 4
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.253846859Z",
+ "start_time": "2025-01-07T15:45:47.111072Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "ax.hist(pt_model_jet, bins=np.linspace(0, 300, 30))\n",
+ "fig.show()"
+ ],
+ "id": "ac8f0f719e587403",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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AKsQNwAAwCrEzS0WFRWlBQsWKCoqqqmn0uyxVg3HWjUca9VwrFXDsVYN1xzWqlV+oBgAANiLOzcAAMAqxA0AALAKcQMAAKxC3AAAAKsQN7fQ0qVL1aNHD0VHRystLU07duxo6ik1uV//+tcKCwsL2vr27Rs4XllZqWnTpqljx45q3769xo0bp9LS0iaccePZtm2bfvSjHykpKUlhYWFav3590HFjjObPn6/OnTurXbt2crvdOnLkSNCY8+fPa8KECXI4HIqNjVV2drYuXrzYiFfROG60Vo8++uhVr7ORI0cGjWkta5WXl6d7771XHTp0UKdOnZSZmani4uKgMQ1535WUlGj06NG67bbb1KlTJ82ePVuXL19uzEsJuYas1f3333/Va+vxxx8PGtMa1mrZsmUaNGhQ4Iv5XC6XPvjgg8Dx5vaaIm5ukTVr1ignJ0cLFizQ7t27NXjwYGVkZKisrKypp9bk7r77bp0+fTqwffLJJ4FjTz31lN5//32tXbtWW7du1alTpzR27NgmnG3jqaio0ODBg7V06dJ6j7/00ktavHixli9frsLCQt1+++3KyMhQZWVlYMyECRN04MAB5efna8OGDdq2bZumTp3aWJfQaG60VpI0cuTIoNfZ22+/HXS8tazV1q1bNW3aNH366afKz89XTU2NRowYoYqKisCYG73vamtrNXr0aFVXV2v79u36y1/+ohUrVmj+/PlNcUkh05C1kqQpU6YEvbZeeumlwLHWslZdu3bViy++qKKiIu3atUsPPPCAxowZowMHDkhqhq8pg1siNTXVTJs2LfDn2tpak5SUZPLy8ppwVk1vwYIFZvDgwfUeKy8vN23btjVr164N7Dt06JCRZDweTyPNsHmQZNatWxf4c11dnXE6nebll18O7CsvLzdRUVHm7bffNsYYc/DgQSPJ7Ny5MzDmgw8+MGFhYebkyZONNvfG9r9rZYwxkyZNMmPGjLnmOa11rYwxpqyszEgyW7duNcY07H23ceNGEx4ebrxeb2DMsmXLjMPhMFVVVY17AY3of9fKGGOGDx9uZs6cec1zWutaGWPMHXfcYf74xz82y9cUd25ugerqahUVFcntdgf2hYeHy+12y+PxNOHMmocjR44oKSlJvXr10oQJE1RSUiJJKioqUk1NTdC69e3bV926dWv163bs2DF5vd6gtYmJiVFaWlpg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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.255093897Z",
+ "start_time": "2025-01-15T10:16:58.042882Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "v1 = np.array([1, 2, 2, 2])\n",
+ "v2 = np.array([3, 3, 2, 1])\n",
+ "from scipy.spatial.distance import minkowski"
+ ],
+ "id": "d4a0921e620054b5",
+ "outputs": [],
+ "execution_count": 25
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.256269976Z",
+ "start_time": "2025-01-15T10:16:59.189155Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "minkowski(v1, v2, 2)",
+ "id": "f8dd3da5642a12bd",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2.449489742783178"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 26
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-15T13:26:48.257490963Z",
+ "start_time": "2025-01-15T10:17:12.055427Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "diff = v2-v1",
+ "id": "b6a8812cb07ba219",
+ "outputs": [],
+ "execution_count": 27
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T15:16:23.853431Z",
+ "start_time": "2025-01-20T15:16:23.118842Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "filename = get_path(\"/work/gkrzmanc/jetclustering/results/train/Eval_LGATr_no_coords_loss_1_2025_01_18_15_21_00/eval_3.pkl\", \"results\")\n",
+ "# for rinv=0.7, see /work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_rinv07_2025_01_03_15_38_58\n",
+ "\n",
+ "result = CPU_Unpickler(open(filename, \"rb\")).load()\n",
+ "dataset = EventDataset.from_directory(result[\"filename\"], mmap=True)\n"
+ ],
+ "id": "78667573e6fbbb9e",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/jetclustering/code/src/utils/utils.py:91: FutureWarning:\n",
+ "\n",
+ "You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
+ "\n"
+ ]
+ }
+ ],
+ "execution_count": 34
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T15:17:12.581333Z",
+ "start_time": "2025-01-20T15:17:12.483045Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# plotly 3d plot of result[\"pred\"], colored by result[\"GT_cluster\"]\n",
+ "from src.plotting.plot_coordinates import plot_coordinates\n",
+ "filt = result[\"event_idx\"] == 6\n",
+ "# normalized coordinates\n",
+ "norm_coords = result[\"pred\"][filt, 1:4] #/ np.linalg.norm(result[\"pred\"][filt, 1:4] , axis=1 ,keepdims=1)\n",
+ "plot_coordinates(norm_coords, torch.tensor(result[\"pt\"][filt]), torch.tensor(result[\"GT_cluster\"][filt])).show()\n"
+ ],
+ "id": "6aa3604655d72882",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[('X', (220, 1)), ('Y', (220, 1)), ('Z', (220, 1)), ('tIdx', (220, 1)), ('pt', (220, 1))]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/tmp/ipykernel_48257/4193388651.py:6: UserWarning:\n",
+ "\n",
+ "To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0
+ ],
+ "coloraxis": "coloraxis",
+ "size": [
+ 159.5,
+ 34.96875,
+ 18.359375,
+ 17.578125,
+ 13.1640625,
+ 12.6796875,
+ 9.21875,
+ 8.484375,
+ 8.234375,
+ 7.23046875,
+ 7.06640625,
+ 6.51171875,
+ 5.50390625,
+ 5.36328125,
+ 5.26171875,
+ 4.3125,
+ 4.0234375,
+ 3.994140625,
+ 3.884765625,
+ 3.669921875,
+ 3.5,
+ 3.44921875,
+ 3.431640625,
+ 3.40625,
+ 3.228515625,
+ 3.0859375,
+ 3.03515625,
+ 2.84765625,
+ 2.72265625,
+ 2.70703125,
+ 2.6484375,
+ 2.630859375,
+ 2.603515625,
+ 2.515625,
+ 2.478515625,
+ 2.4375,
+ 2.353515625,
+ 2.30078125,
+ 2.30078125,
+ 2.232421875,
+ 2.203125,
+ 2.1953125,
+ 2.1640625,
+ 2.154296875,
+ 2.09375,
+ 2.068359375,
+ 2.068359375,
+ 2.046875,
+ 2.041015625,
+ 2.017578125,
+ 1.9921875,
+ 1.9560546875,
+ 1.953125,
+ 1.9296875,
+ 1.8818359375,
+ 1.8291015625,
+ 1.7568359375,
+ 1.7373046875,
+ 1.7119140625,
+ 1.70703125,
+ 1.7001953125,
+ 1.6611328125,
+ 1.6611328125,
+ 1.634765625,
+ 1.6328125,
+ 1.6318359375,
+ 1.6279296875,
+ 1.615234375,
+ 1.58984375,
+ 1.53125,
+ 1.52734375,
+ 1.509765625,
+ 1.50390625,
+ 1.494140625,
+ 1.490234375,
+ 1.486328125,
+ 1.466796875,
+ 1.45703125,
+ 1.4267578125,
+ 1.3740234375,
+ 1.359375,
+ 1.34375,
+ 1.3388671875,
+ 1.3330078125,
+ 1.3154296875,
+ 1.30859375,
+ 1.27734375,
+ 1.275390625,
+ 1.271484375,
+ 1.2568359375,
+ 1.2314453125,
+ 1.23046875,
+ 1.2216796875,
+ 1.220703125,
+ 1.21875,
+ 1.2119140625,
+ 1.19921875,
+ 1.1826171875,
+ 1.1806640625,
+ 1.1796875,
+ 1.177734375,
+ 1.1748046875,
+ 1.1552734375,
+ 1.15234375,
+ 1.14453125,
+ 1.0859375,
+ 1.0810546875,
+ 1.0810546875,
+ 1.080078125,
+ 1.072265625,
+ 1.0703125,
+ 1.0615234375,
+ 1.05859375,
+ 1.05859375,
+ 1.0556640625,
+ 1.0478515625,
+ 1.0458984375,
+ 1.0419921875,
+ 1.0390625,
+ 1.0390625,
+ 1.033203125,
+ 1.0302734375,
+ 1.0234375,
+ 1.0107421875,
+ 1.009765625,
+ 0.99072265625,
+ 0.9892578125,
+ 0.98193359375,
+ 0.9814453125,
+ 0.97705078125,
+ 0.96533203125,
+ 0.96240234375,
+ 0.9609375,
+ 0.95703125,
+ 0.95263671875,
+ 0.9482421875,
+ 0.9453125,
+ 0.93798828125,
+ 0.9296875,
+ 0.9169921875,
+ 0.9072265625,
+ 0.8955078125,
+ 0.89306640625,
+ 0.890625,
+ 0.880859375,
+ 0.87841796875,
+ 0.87744140625,
+ 0.87646484375,
+ 0.875,
+ 0.86962890625,
+ 0.857421875,
+ 0.8564453125,
+ 0.8564453125,
+ 0.8544921875,
+ 0.8525390625,
+ 0.8486328125,
+ 0.841796875,
+ 0.8232421875,
+ 0.81591796875,
+ 0.80419921875,
+ 0.80322265625,
+ 0.80224609375,
+ 0.798828125,
+ 0.78173828125,
+ 0.7763671875,
+ 0.77587890625,
+ 0.77587890625,
+ 0.76953125,
+ 0.76171875,
+ 0.76025390625,
+ 0.75830078125,
+ 0.75732421875,
+ 0.7509765625,
+ 0.74267578125,
+ 0.73779296875,
+ 0.73681640625,
+ 0.736328125,
+ 0.7333984375,
+ 0.720703125,
+ 0.71435546875,
+ 0.7138671875,
+ 0.71142578125,
+ 0.7099609375,
+ 0.703125,
+ 0.701171875,
+ 0.6953125,
+ 0.69091796875,
+ 0.68896484375,
+ 0.68505859375,
+ 0.6845703125,
+ 0.6826171875,
+ 0.681640625,
+ 0.669921875,
+ 0.65380859375,
+ 0.6533203125,
+ 0.6513671875,
+ 0.64892578125,
+ 0.64794921875,
+ 0.64794921875,
+ 0.6474609375,
+ 0.64697265625,
+ 0.64501953125,
+ 0.640625,
+ 0.63916015625,
+ 0.63818359375,
+ 0.634765625,
+ 0.6337890625,
+ 0.63037109375,
+ 0.6279296875,
+ 0.6259765625,
+ 0.6240234375,
+ 0.62158203125,
+ 0.62060546875,
+ 0.61865234375,
+ 0.615234375,
+ 0.61376953125,
+ 0.61083984375,
+ 0.6103515625,
+ 0.6083984375,
+ 0.6005859375
+ ],
+ "sizemode": "area",
+ "sizeref": 0.39875,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ -1.145566463470459,
+ -9.17282772064209,
+ -0.1544457972049713,
+ -0.03206736594438553,
+ -3.191534996032715,
+ 0.06160777062177658,
+ -0.01849440112709999,
+ -0.07442258298397064,
+ 0.24249786138534546,
+ 0.07763376832008362,
+ -1.5661542415618896,
+ 1.5138580799102783,
+ -0.035179972648620605,
+ 0.1322631537914276,
+ -0.1867426335811615,
+ -0.02442461997270584,
+ -0.8579702377319336,
+ -0.025149542838335037,
+ 0.063359335064888,
+ -0.7400716543197632,
+ -0.7001846432685852,
+ -0.08937383443117142,
+ -0.06883974373340607,
+ -0.020012114197015762,
+ -0.27416834235191345,
+ -0.6095934510231018,
+ -0.28896665573120117,
+ 0.12173996865749359,
+ 0.2396065890789032,
+ -0.04889238625764847,
+ 0.005061838775873184,
+ -0.008135572075843811,
+ 0.022905105724930763,
+ 9.161531925201416E-4,
+ -0.07336436957120895,
+ 0.2475009709596634,
+ -0.1814754605293274,
+ -0.003176070749759674,
+ -0.00991784781217575,
+ -0.32287126779556274,
+ -0.40930619835853577,
+ -0.028525158762931824,
+ -0.15037879347801208,
+ 0.06300292909145355,
+ -0.01658960059285164,
+ -0.3570789098739624,
+ 0.12885531783103943,
+ -0.025219034403562546,
+ -0.0712917149066925,
+ -0.2646598219871521,
+ -0.019399385899305344,
+ -0.04249408096075058,
+ 0.08223821967840195,
+ -0.13200430572032928,
+ 0.0119771808385849,
+ 0.0034895408898591995,
+ -0.17140574753284454,
+ 0.08772282302379608,
+ 0.2343517541885376,
+ 0.010836375877261162,
+ -0.10224762558937073,
+ 0.3142911195755005,
+ -0.11850552260875702,
+ -0.1623058021068573,
+ -0.020945997908711433,
+ -0.22512201964855194,
+ -0.14978303015232086,
+ 0.06669245660305023,
+ -0.05465732514858246,
+ -0.0025866772048175335,
+ -0.10953883826732635,
+ 0.081199511885643,
+ 0.04832106828689575,
+ 0.17550113797187805,
+ -0.033505283296108246,
+ -0.02620818093419075,
+ 0.09938223659992218,
+ -0.022636981680989265,
+ 0.02242308109998703,
+ -0.04074521362781525,
+ -0.038519810885190964,
+ 0.09729605913162231,
+ 0.27140069007873535,
+ -0.05003005266189575,
+ 0.019344374537467957,
+ 0.023949138820171356,
+ -0.3510080575942993,
+ -0.32405441999435425,
+ 0.10039915889501572,
+ 0.005976450629532337,
+ -0.03436433896422386,
+ -0.04855574667453766,
+ 0.06749404221773148,
+ 0.03396110236644745,
+ -0.09369347244501114,
+ 0.19181981682777405,
+ -0.09510169178247452,
+ -0.02858716994524002,
+ -0.11648781597614288,
+ -0.16982495784759521,
+ 0.040474750101566315,
+ 0.07641766965389252,
+ -0.015696704387664795,
+ -0.011957932263612747,
+ -0.06439025700092316,
+ 0.024435995146632195,
+ -0.07680678367614746,
+ -0.017858952283859253,
+ -0.07167769968509674,
+ -0.04418134689331055,
+ 0.042628247290849686,
+ 0.2034423053264618,
+ -0.13793742656707764,
+ -0.08002099394798279,
+ 0.04729217663407326,
+ 0.017960436642169952,
+ -0.004174098372459412,
+ -0.13969486951828003,
+ -0.005818609148263931,
+ 0.03536226600408554,
+ -0.0970236212015152,
+ 0.020566988736391068,
+ 0.04585854709148407,
+ -0.06659353524446487,
+ 0.03408137708902359,
+ -0.017989875748753548,
+ -0.011268973350524902,
+ -0.02298586070537567,
+ -0.07207773625850677,
+ 0.05488932877779007,
+ -0.0428549163043499,
+ 0.03718726709485054,
+ 0.10386288166046143,
+ 0.06478244811296463,
+ -0.049350474029779434,
+ -0.019686680287122726,
+ 0.19794988632202148,
+ 0.018894720822572708,
+ -0.09328575432300568,
+ 0.0048791877925395966,
+ -0.03858213499188423,
+ -0.00832878053188324,
+ -0.12840212881565094,
+ 0.0185209009796381,
+ -0.03766559064388275,
+ 0.06204339861869812,
+ 0.0036713965237140656,
+ -0.038168057799339294,
+ -0.01399959996342659,
+ -0.03032180666923523,
+ -0.05279902368783951,
+ -0.193888321518898,
+ -0.024778110906481743,
+ 0.06445755809545517,
+ -0.05161897465586662,
+ 0.20709624886512756,
+ -0.045680999755859375,
+ -0.005126815289258957,
+ 0.08210811764001846,
+ -0.034338898956775665,
+ 0.1000724583864212,
+ 0.030750565230846405,
+ -0.04400577023625374,
+ 3.6394596099853516E-4,
+ -0.03562963008880615,
+ 0.02300225757062435,
+ -0.044625021517276764,
+ -0.021673329174518585,
+ 0.11569524556398392,
+ -0.20308828353881836,
+ 0.055647291243076324,
+ 0.3032436966896057,
+ -0.04011087119579315,
+ -0.0401085764169693,
+ 0.005297832190990448,
+ -0.02433885633945465,
+ -0.005357099696993828,
+ 0.04145478457212448,
+ -0.03483331948518753,
+ -0.041098516434431076,
+ 0.0356760211288929,
+ -0.051088348031044006,
+ -0.028475917875766754,
+ 0.05039922893047333,
+ 0.025925859808921814,
+ 0.04737988859415054,
+ -0.038079798221588135,
+ -0.029578804969787598,
+ 0.008485380560159683,
+ -0.035919830203056335,
+ -0.035210806876420975,
+ 0.06112639605998993,
+ 0.04192691296339035,
+ 0.03462737798690796,
+ -0.05213895067572594,
+ 0.05020655691623688,
+ 0.24719490110874176,
+ -0.017039692029356956,
+ 0.03670356422662735,
+ 0.0507826954126358,
+ 0.05267968028783798,
+ -0.016750125214457512,
+ -0.027282752096652985,
+ -0.09137330949306488,
+ 0.009974021464586258,
+ 0.0011080056428909302,
+ -0.24741512537002563,
+ -0.19731612503528595,
+ -0.10197511315345764,
+ 0.0069472286850214005,
+ -0.019670281559228897,
+ 0.023070931434631348,
+ 0.13288620114326477,
+ 0.0026833489537239075,
+ 0.2681457996368408,
+ 0.005945507436990738,
+ -0.03972424566745758,
+ 0.026485387235879898,
+ -0.14425107836723328,
+ -0.05073212832212448
+ ],
+ "y": [
+ 44.173152923583984,
+ 1.6763535737991333,
+ 4.1546735763549805,
+ 3.946983814239502,
+ 0.5121366381645203,
+ 2.6225204467773438,
+ 1.708194375038147,
+ 1.3190487623214722,
+ -1.238325834274292,
+ 1.0367403030395508,
+ 0.294779896736145,
+ -0.017687246203422546,
+ 0.7392834424972534,
+ -0.5043148398399353,
+ 1.192878246307373,
+ 0.23018452525138855,
+ -0.0937630757689476,
+ 0.48921263217926025,
+ -0.46524572372436523,
+ 0.13460345566272736,
+ 0.1290343701839447,
+ -0.42159968614578247,
+ -0.45335856080055237,
+ 0.17320093512535095,
+ -0.27014854550361633,
+ 0.09480801224708557,
+ 0.1138511598110199,
+ -0.38489222526550293,
+ 0.5089240074157715,
+ -0.25325095653533936,
+ 0.09113259613513947,
+ -0.08011235296726227,
+ -0.15904337167739868,
+ 0.10945360362529755,
+ -0.3611851930618286,
+ -0.25554078817367554,
+ 0.1422576755285263,
+ 0.10234372317790985,
+ 0.11978735029697418,
+ -0.32110679149627686,
+ -0.001106449868530035,
+ -0.11664755642414093,
+ -0.35202375054359436,
+ -0.36483922600746155,
+ 0.1255616694688797,
+ 0.1251968890428543,
+ -0.3809102177619934,
+ 0.360446035861969,
+ 0.09347914159297943,
+ -0.00944456085562706,
+ 0.13234074413776398,
+ 0.38413938879966736,
+ -0.08355319499969482,
+ -0.07494863122701645,
+ -0.1270984411239624,
+ 0.12046545743942261,
+ 0.031215636059641838,
+ 0.283917635679245,
+ -0.22621837258338928,
+ -0.10765474289655685,
+ -0.05018395930528641,
+ 0.007415375206619501,
+ 0.06429027765989304,
+ 0.15102256834506989,
+ 0.12829619646072388,
+ -0.020383695140480995,
+ -0.036758534610271454,
+ -0.11159849166870117,
+ -0.08789849281311035,
+ 0.12911255657672882,
+ 0.01573832333087921,
+ -0.18406793475151062,
+ -0.3661337196826935,
+ 0.20229937136173248,
+ 0.04454140365123749,
+ -0.07747909426689148,
+ 0.03407933562994003,
+ 0.2451433390378952,
+ -0.05064184218645096,
+ -0.02676915004849434,
+ 0.3562154471874237,
+ 0.03936778008937836,
+ -0.17530842125415802,
+ -0.07972632348537445,
+ 0.0026791393756866455,
+ -0.040674030780792236,
+ 0.06923139095306396,
+ -0.1464168280363083,
+ -0.1968105435371399,
+ -0.12205876410007477,
+ 0.09740330278873444,
+ -0.3500618636608124,
+ 0.06116318702697754,
+ 0.025653913617134094,
+ 0.026904746890068054,
+ 0.07573847472667694,
+ -0.012444796040654182,
+ 0.011047989130020142,
+ -0.0967923030257225,
+ 0.019441261887550354,
+ 0.10574030876159668,
+ -0.34123894572257996,
+ 0.035743433982133865,
+ -0.09674933552742004,
+ -0.25610029697418213,
+ 0.14810211956501007,
+ -0.14422498643398285,
+ 0.043499890714883804,
+ 0.04519820213317871,
+ -0.06807196140289307,
+ 0.0236203670501709,
+ -0.10907566547393799,
+ 0.034706130623817444,
+ 0.07019686698913574,
+ -0.32806044816970825,
+ -0.07895952463150024,
+ 0.08137988299131393,
+ -0.033785149455070496,
+ 0.047107137739658356,
+ 0.024663634598255157,
+ -0.10297558456659317,
+ 0.09862454235553741,
+ 0.3467845022678375,
+ 0.018742557615041733,
+ -0.1172918975353241,
+ 0.1425522416830063,
+ 0.02333802729845047,
+ -0.0657871887087822,
+ 0.005717810243368149,
+ 0.005799718201160431,
+ 0.12678202986717224,
+ 0.02564946562051773,
+ -0.11743289232254028,
+ -0.034194327890872955,
+ -0.29518425464630127,
+ 0.053442761301994324,
+ -0.25245940685272217,
+ -0.06523191183805466,
+ -0.07299986481666565,
+ -0.06006929278373718,
+ -0.013551868498325348,
+ -0.001416967250406742,
+ -0.0068840887397527695,
+ -0.3139260709285736,
+ 0.02586068958044052,
+ -0.018316034227609634,
+ -0.058623477816581726,
+ -0.003457404673099518,
+ 0.05847764015197754,
+ 0.05201653391122818,
+ -0.007582411170005798,
+ -0.24342606961727142,
+ -0.09110108017921448,
+ 0.028537066653370857,
+ -0.004813693463802338,
+ -0.26205044984817505,
+ 0.02813364565372467,
+ -0.023644335567951202,
+ 0.05865045636892319,
+ -0.10463105142116547,
+ 0.2058057188987732,
+ 0.01688055321574211,
+ 0.018313296139240265,
+ 0.008065491914749146,
+ 0.035032302141189575,
+ -0.06539855152368546,
+ 0.0025829486548900604,
+ 0.04494538530707359,
+ 0.16758787631988525,
+ -0.2539977729320526,
+ 0.01861993782222271,
+ -0.1306481808423996,
+ 0.0950707197189331,
+ -0.013152604922652245,
+ 0.009537570178508759,
+ 0.035489656031131744,
+ 0.047833822667598724,
+ -0.016572464257478714,
+ -0.12069139629602432,
+ 0.002328811213374138,
+ 0.04854089766740799,
+ -0.0185052789747715,
+ 0.050754763185977936,
+ 0.003845077008008957,
+ 0.0062447600066661835,
+ 0.022916674613952637,
+ 0.0360400564968586,
+ -0.006708836182951927,
+ 0.0402669794857502,
+ 0.010295823216438293,
+ -0.006546054035425186,
+ 0.0025092000141739845,
+ -0.009739726781845093,
+ 0.05359366536140442,
+ -0.01901191473007202,
+ 0.013321876525878906,
+ -0.020110517740249634,
+ -0.047452546656131744,
+ -0.02735402062535286,
+ -0.014164309948682785,
+ 0.03844656050205231,
+ -0.05418328195810318,
+ 0.013757157139480114,
+ -0.0227963849902153,
+ 0.0451679565012455,
+ -0.023626532405614853,
+ 0.0317029170691967,
+ 0.12410106509923935,
+ -0.023852989077568054,
+ 0.04490052908658981,
+ -0.011871240101754665,
+ -0.015537332743406296,
+ -0.27054253220558167,
+ 0.018203571438789368,
+ 0.028964772820472717,
+ -0.003254372626543045,
+ -0.007085427641868591,
+ 0.021512102335691452,
+ 0.10553969442844391,
+ -0.039854712784290314
+ ],
+ "z": [
+ 16.934005737304688,
+ 29.324642181396484,
+ 1.6329689025878906,
+ 1.6461281776428223,
+ 10.245269775390625,
+ 1.2487258911132812,
+ 0.8600143194198608,
+ 0.1211313009262085,
+ -0.272579550743103,
+ 0.5000199675559998,
+ 4.913707733154297,
+ -6.6543073654174805,
+ 0.11539880931377411,
+ 0.2234395146369934,
+ -5.956740379333496,
+ 0.059739142656326294,
+ -3.623108148574829,
+ 0.1335909068584442,
+ 0.06866855174303055,
+ 2.4196970462799072,
+ 2.293219566345215,
+ 0.19950802624225616,
+ -0.48167550563812256,
+ 0.04972586780786514,
+ -0.6224935054779053,
+ 2.0360488891601562,
+ -0.4550785422325134,
+ -0.08775391429662704,
+ -2.623530864715576,
+ 0.3929612934589386,
+ 0.018656756728887558,
+ -0.01752334088087082,
+ -0.173678457736969,
+ 0.007063612341880798,
+ 0.20077374577522278,
+ 0.2358059287071228,
+ 0.3935275375843048,
+ -0.03093075007200241,
+ 0.02484121173620224,
+ 2.4783079624176025,
+ 1.3881701231002808,
+ 0.09915456175804138,
+ -0.10656123608350754,
+ 0.16426044702529907,
+ -0.016387131065130234,
+ -1.4773920774459839,
+ -1.7871227264404297,
+ -1.287170648574829,
+ -0.031902015209198,
+ -0.6962382197380066,
+ 0.011911185458302498,
+ 0.07231125235557556,
+ 0.07150933146476746,
+ 0.2512466609477997,
+ -0.013713855296373367,
+ -0.03628021478652954,
+ -0.4510926306247711,
+ 1.140985369682312,
+ -0.21302542090415955,
+ -0.045295774936676025,
+ 0.15639646351337433,
+ 1.59432053565979,
+ 0.3248116075992584,
+ -0.35758256912231445,
+ 0.01771138608455658,
+ 0.7627900838851929,
+ 0.34328493475914,
+ 0.23892438411712646,
+ -0.12342536449432373,
+ -0.32775118947029114,
+ -0.18251806497573853,
+ -0.49373385310173035,
+ 0.0559140108525753,
+ 1.260310173034668,
+ 0.07653127610683441,
+ 0.20805004239082336,
+ 0.1421893984079361,
+ -1.067915678024292,
+ 0.081154465675354,
+ -0.009983764961361885,
+ 0.09843280911445618,
+ -0.17755001783370972,
+ -0.1929617077112198,
+ 0.14817342162132263,
+ -0.008570626378059387,
+ -0.026238270103931427,
+ 0.06148534640669823,
+ -0.06926185637712479,
+ 1.212209701538086,
+ -0.33802565932273865,
+ 0.017878059297800064,
+ -0.07358194887638092,
+ -0.053463131189346313,
+ 0.009474970400333405,
+ -0.037121593952178955,
+ 1.0548614263534546,
+ 0.040771063417196274,
+ -0.018346257507801056,
+ 0.6529847979545593,
+ 0.7484455108642578,
+ -0.27240321040153503,
+ -0.08486877381801605,
+ -0.017236441373825073,
+ 0.22752264142036438,
+ 0.30352622270584106,
+ 0.4987502992153168,
+ 0.8795862197875977,
+ -0.01854146644473076,
+ 0.033648550510406494,
+ 0.047080617398023605,
+ -0.02453210949897766,
+ -0.30032992362976074,
+ 0.4527944326400757,
+ -0.30011552572250366,
+ -0.15293514728546143,
+ -0.028545424342155457,
+ 0.06060219928622246,
+ 0.41089436411857605,
+ -0.059685081243515015,
+ -0.026073642075061798,
+ 0.4119086265563965,
+ -0.2562134265899658,
+ -0.0075821056962013245,
+ -0.051130786538124084,
+ 0.4985712468624115,
+ 0.6703544855117798,
+ 0.004010587930679321,
+ -0.011701047420501709,
+ -0.043777741491794586,
+ -0.033738747239112854,
+ 0.5023496150970459,
+ 0.004548918455839157,
+ 0.38430488109588623,
+ -0.03894048184156418,
+ 0.23705267906188965,
+ 0.09033466875553131,
+ 0.1728883981704712,
+ -0.03455973416566849,
+ -0.6334809064865112,
+ 0.07378696650266647,
+ 0.011462215334177017,
+ 0.0403888076543808,
+ 0.4139549732208252,
+ 0.18187186121940613,
+ -0.14739340543746948,
+ -0.03550306707620621,
+ -0.041997626423835754,
+ -0.03709228336811066,
+ 0.011460080742835999,
+ 0.04897792637348175,
+ -0.022002261132001877,
+ -0.2015048861503601,
+ -0.383110374212265,
+ -0.1608130931854248,
+ -0.012913325801491737,
+ 0.06318163871765137,
+ 0.06815429031848907,
+ -0.021079346537590027,
+ -0.4206259548664093,
+ -0.37488484382629395,
+ 0.3491401970386505,
+ -0.027882635593414307,
+ 0.0023272372782230377,
+ 0.03868488967418671,
+ -0.02854609489440918,
+ -0.2040747106075287,
+ -0.02022966369986534,
+ -0.055367521941661835,
+ 0.3735021948814392,
+ -0.10776666551828384,
+ -0.23825973272323608,
+ -0.05463423579931259,
+ 0.5472646951675415,
+ -0.022801809012889862,
+ 0.019406557083129883,
+ 0.05731916427612305,
+ -0.031002052128314972,
+ -0.01629875972867012,
+ 0.41086870431900024,
+ -0.027547195553779602,
+ 0.034790970385074615,
+ 0.1792594939470291,
+ 0.17878663539886475,
+ 0.04149293899536133,
+ 0.06571963429450989,
+ -0.016515761613845825,
+ -0.0277192872017622,
+ 0.16277435421943665,
+ 0.020906049758195877,
+ -0.008417649194598198,
+ -0.0053132157772779465,
+ 0.209367036819458,
+ -0.008367877453565598,
+ -0.20157325267791748,
+ -0.025798825547099113,
+ -0.007884498685598373,
+ 0.2972039580345154,
+ -0.16270066797733307,
+ -0.033034004271030426,
+ 0.18459807336330414,
+ -0.030292581766843796,
+ -0.023575162515044212,
+ -0.045117005705833435,
+ 0.4390559792518616,
+ -0.029419880360364914,
+ 0.05676189064979553,
+ -0.3105788826942444,
+ -0.3331488370895386,
+ -0.3605833649635315,
+ 0.05214318633079529,
+ 0.053797200322151184,
+ -0.11211633682250977,
+ -0.12172768265008926,
+ 0.04860451817512512,
+ 0.21482759714126587,
+ 0.001030251383781433,
+ -0.0679427981376648,
+ -0.016557499766349792,
+ 0.3949545621871948,
+ -0.019975917413830757
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 37
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "clustering.ipynb",
+ "id": "67e8075635fc7b15"
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T15:18:32.585983Z",
+ "start_time": "2025-01-20T15:18:32.572863Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "result[\"pt\"][result[\"event_idx\"]==6]",
+ "id": "c2112079f56bb616",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([159.5000, 34.9688, 18.3594, 17.5781, 13.1641, 12.6797, 9.2188,\n",
+ " 8.4844, 8.2344, 7.2305, 7.0664, 6.5117, 5.5039, 5.3633,\n",
+ " 5.2617, 4.3125, 4.0234, 3.9941, 3.8848, 3.6699, 3.5000,\n",
+ " 3.4492, 3.4316, 3.4062, 3.2285, 3.0859, 3.0352, 2.8477,\n",
+ " 2.7227, 2.7070, 2.6484, 2.6309, 2.6035, 2.5156, 2.4785,\n",
+ " 2.4375, 2.3535, 2.3008, 2.3008, 2.2324, 2.2031, 2.1953,\n",
+ " 2.1641, 2.1543, 2.0938, 2.0684, 2.0684, 2.0469, 2.0410,\n",
+ " 2.0176, 1.9922, 1.9561, 1.9531, 1.9297, 1.8818, 1.8291,\n",
+ " 1.7568, 1.7373, 1.7119, 1.7070, 1.7002, 1.6611, 1.6611,\n",
+ " 1.6348, 1.6328, 1.6318, 1.6279, 1.6152, 1.5898, 1.5312,\n",
+ " 1.5273, 1.5098, 1.5039, 1.4941, 1.4902, 1.4863, 1.4668,\n",
+ " 1.4570, 1.4268, 1.3740, 1.3594, 1.3438, 1.3389, 1.3330,\n",
+ " 1.3154, 1.3086, 1.2773, 1.2754, 1.2715, 1.2568, 1.2314,\n",
+ " 1.2305, 1.2217, 1.2207, 1.2188, 1.2119, 1.1992, 1.1826,\n",
+ " 1.1807, 1.1797, 1.1777, 1.1748, 1.1553, 1.1523, 1.1445,\n",
+ " 1.0859, 1.0811, 1.0811, 1.0801, 1.0723, 1.0703, 1.0615,\n",
+ " 1.0586, 1.0586, 1.0557, 1.0479, 1.0459, 1.0420, 1.0391,\n",
+ " 1.0391, 1.0332, 1.0303, 1.0234, 1.0107, 1.0098, 0.9907,\n",
+ " 0.9893, 0.9819, 0.9814, 0.9771, 0.9653, 0.9624, 0.9609,\n",
+ " 0.9570, 0.9526, 0.9482, 0.9453, 0.9380, 0.9297, 0.9170,\n",
+ " 0.9072, 0.8955, 0.8931, 0.8906, 0.8809, 0.8784, 0.8774,\n",
+ " 0.8765, 0.8750, 0.8696, 0.8574, 0.8564, 0.8564, 0.8545,\n",
+ " 0.8525, 0.8486, 0.8418, 0.8232, 0.8159, 0.8042, 0.8032,\n",
+ " 0.8022, 0.7988, 0.7817, 0.7764, 0.7759, 0.7759, 0.7695,\n",
+ " 0.7617, 0.7603, 0.7583, 0.7573, 0.7510, 0.7427, 0.7378,\n",
+ " 0.7368, 0.7363, 0.7334, 0.7207, 0.7144, 0.7139, 0.7114,\n",
+ " 0.7100, 0.7031, 0.7012, 0.6953, 0.6909, 0.6890, 0.6851,\n",
+ " 0.6846, 0.6826, 0.6816, 0.6699, 0.6538, 0.6533, 0.6514,\n",
+ " 0.6489, 0.6479, 0.6479, 0.6475, 0.6470, 0.6450, 0.6406,\n",
+ " 0.6392, 0.6382, 0.6348, 0.6338, 0.6304, 0.6279, 0.6260,\n",
+ " 0.6240, 0.6216, 0.6206, 0.6187, 0.6152, 0.6138, 0.6108,\n",
+ " 0.6104, 0.6084, 0.6006])"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 39
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T15:19:21.065491Z",
+ "start_time": "2025-01-20T15:19:20.974966Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "plot_coordinates(dataset[6].pfcands.pxyz, torch.tensor(result[\"pt\"][filt]), torch.tensor(result[\"GT_cluster\"][filt])).show()\n",
+ "id": "6e2a07e42eca8496",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[('X', (220, 1)), ('Y', (220, 1)), ('Z', (220, 1)), ('tIdx', (220, 1)), ('pt', (220, 1))]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/tmp/ipykernel_48257/919745444.py:1: UserWarning:\n",
+ "\n",
+ "To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 1.0,
+ -1.0,
+ 0.0,
+ 1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ -1.0,
+ 0.0
+ ],
+ "coloraxis": "coloraxis",
+ "size": [
+ 159.5,
+ 34.96875,
+ 18.359375,
+ 17.578125,
+ 13.1640625,
+ 12.6796875,
+ 9.21875,
+ 8.484375,
+ 8.234375,
+ 7.23046875,
+ 7.06640625,
+ 6.51171875,
+ 5.50390625,
+ 5.36328125,
+ 5.26171875,
+ 4.3125,
+ 4.0234375,
+ 3.994140625,
+ 3.884765625,
+ 3.669921875,
+ 3.5,
+ 3.44921875,
+ 3.431640625,
+ 3.40625,
+ 3.228515625,
+ 3.0859375,
+ 3.03515625,
+ 2.84765625,
+ 2.72265625,
+ 2.70703125,
+ 2.6484375,
+ 2.630859375,
+ 2.603515625,
+ 2.515625,
+ 2.478515625,
+ 2.4375,
+ 2.353515625,
+ 2.30078125,
+ 2.30078125,
+ 2.232421875,
+ 2.203125,
+ 2.1953125,
+ 2.1640625,
+ 2.154296875,
+ 2.09375,
+ 2.068359375,
+ 2.068359375,
+ 2.046875,
+ 2.041015625,
+ 2.017578125,
+ 1.9921875,
+ 1.9560546875,
+ 1.953125,
+ 1.9296875,
+ 1.8818359375,
+ 1.8291015625,
+ 1.7568359375,
+ 1.7373046875,
+ 1.7119140625,
+ 1.70703125,
+ 1.7001953125,
+ 1.6611328125,
+ 1.6611328125,
+ 1.634765625,
+ 1.6328125,
+ 1.6318359375,
+ 1.6279296875,
+ 1.615234375,
+ 1.58984375,
+ 1.53125,
+ 1.52734375,
+ 1.509765625,
+ 1.50390625,
+ 1.494140625,
+ 1.490234375,
+ 1.486328125,
+ 1.466796875,
+ 1.45703125,
+ 1.4267578125,
+ 1.3740234375,
+ 1.359375,
+ 1.34375,
+ 1.3388671875,
+ 1.3330078125,
+ 1.3154296875,
+ 1.30859375,
+ 1.27734375,
+ 1.275390625,
+ 1.271484375,
+ 1.2568359375,
+ 1.2314453125,
+ 1.23046875,
+ 1.2216796875,
+ 1.220703125,
+ 1.21875,
+ 1.2119140625,
+ 1.19921875,
+ 1.1826171875,
+ 1.1806640625,
+ 1.1796875,
+ 1.177734375,
+ 1.1748046875,
+ 1.1552734375,
+ 1.15234375,
+ 1.14453125,
+ 1.0859375,
+ 1.0810546875,
+ 1.0810546875,
+ 1.080078125,
+ 1.072265625,
+ 1.0703125,
+ 1.0615234375,
+ 1.05859375,
+ 1.05859375,
+ 1.0556640625,
+ 1.0478515625,
+ 1.0458984375,
+ 1.0419921875,
+ 1.0390625,
+ 1.0390625,
+ 1.033203125,
+ 1.0302734375,
+ 1.0234375,
+ 1.0107421875,
+ 1.009765625,
+ 0.99072265625,
+ 0.9892578125,
+ 0.98193359375,
+ 0.9814453125,
+ 0.97705078125,
+ 0.96533203125,
+ 0.96240234375,
+ 0.9609375,
+ 0.95703125,
+ 0.95263671875,
+ 0.9482421875,
+ 0.9453125,
+ 0.93798828125,
+ 0.9296875,
+ 0.9169921875,
+ 0.9072265625,
+ 0.8955078125,
+ 0.89306640625,
+ 0.890625,
+ 0.880859375,
+ 0.87841796875,
+ 0.87744140625,
+ 0.87646484375,
+ 0.875,
+ 0.86962890625,
+ 0.857421875,
+ 0.8564453125,
+ 0.8564453125,
+ 0.8544921875,
+ 0.8525390625,
+ 0.8486328125,
+ 0.841796875,
+ 0.8232421875,
+ 0.81591796875,
+ 0.80419921875,
+ 0.80322265625,
+ 0.80224609375,
+ 0.798828125,
+ 0.78173828125,
+ 0.7763671875,
+ 0.77587890625,
+ 0.77587890625,
+ 0.76953125,
+ 0.76171875,
+ 0.76025390625,
+ 0.75830078125,
+ 0.75732421875,
+ 0.7509765625,
+ 0.74267578125,
+ 0.73779296875,
+ 0.73681640625,
+ 0.736328125,
+ 0.7333984375,
+ 0.720703125,
+ 0.71435546875,
+ 0.7138671875,
+ 0.71142578125,
+ 0.7099609375,
+ 0.703125,
+ 0.701171875,
+ 0.6953125,
+ 0.69091796875,
+ 0.68896484375,
+ 0.68505859375,
+ 0.6845703125,
+ 0.6826171875,
+ 0.681640625,
+ 0.669921875,
+ 0.65380859375,
+ 0.6533203125,
+ 0.6513671875,
+ 0.64892578125,
+ 0.64794921875,
+ 0.64794921875,
+ 0.6474609375,
+ 0.64697265625,
+ 0.64501953125,
+ 0.640625,
+ 0.63916015625,
+ 0.63818359375,
+ 0.634765625,
+ 0.6337890625,
+ 0.63037109375,
+ 0.6279296875,
+ 0.6259765625,
+ 0.6240234375,
+ 0.62158203125,
+ 0.62060546875,
+ 0.61865234375,
+ 0.615234375,
+ 0.61376953125,
+ 0.61083984375,
+ 0.6103515625,
+ 0.6083984375,
+ 0.6005859375
+ ],
+ "sizemode": "area",
+ "sizeref": 0.39875,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ -4.12793493270874,
+ -34.39967727661133,
+ -0.6185178756713867,
+ -0.07732567191123962,
+ -12.99765682220459,
+ 0.37755414843559265,
+ -0.004542407114058733,
+ -0.3686274290084839,
+ 1.4518446922302246,
+ 0.6662861704826355,
+ -6.943850040435791,
+ 6.510962963104248,
+ -0.08870667219161987,
+ 1.1408414840698242,
+ -0.8112109303474426,
+ -0.09897902607917786,
+ -3.9989686012268066,
+ 0.02533547207713127,
+ 0.2596585750579834,
+ -3.6114792823791504,
+ -3.4430415630340576,
+ -0.9427974224090576,
+ -0.6413302421569824,
+ 0.1479637771844864,
+ -2.338512659072876,
+ -3.050656795501709,
+ -2.8031342029571533,
+ 0.6328779458999634,
+ 1.1715459823608398,
+ -0.6351057887077332,
+ 0.5152474641799927,
+ -0.37002992630004883,
+ 0.06735702604055405,
+ 0.5014517903327942,
+ -0.6704810857772827,
+ 1.5660808086395264,
+ -1.8174329996109009,
+ 0.5419580340385437,
+ 0.5615896582603455,
+ -1.5774143934249878,
+ -2.202998161315918,
+ -1.013720154762268,
+ -0.9804973006248474,
+ 0.22154946625232697,
+ 0.562439501285553,
+ -1.9599592685699463,
+ 0.656032383441925,
+ -0.14879590272903442,
+ 1.4603742361068726,
+ -2.0156309604644775,
+ 0.5013442635536194,
+ -0.10025078803300858,
+ 0.9018709659576416,
+ -1.7374249696731567,
+ -0.2937577962875366,
+ 0.13651154935359955,
+ -1.735702395439148,
+ 0.5138875246047974,
+ 1.1869324445724487,
+ -0.2565864324569702,
+ -1.6213911771774292,
+ 1.6610350608825684,
+ -1.4708079099655151,
+ -1.1774863004684448,
+ 0.2941655218601227,
+ -1.6222596168518066,
+ -1.5894825458526611,
+ 0.6836154460906982,
+ -1.0740110874176025,
+ -0.057564664632081985,
+ -1.4912723302841187,
+ 0.5755434036254883,
+ 0.15612362325191498,
+ 0.9843525290489197,
+ 0.9768427610397339,
+ -0.5234110951423645,
+ 1.4542791843414307,
+ -0.1526854783296585,
+ -0.49982431530952454,
+ -1.341572880744934,
+ -0.12792165577411652,
+ 1.294181227684021,
+ 1.120571255683899,
+ -0.900506854057312,
+ -1.3026256561279297,
+ -0.3931867480278015,
+ -1.251834511756897,
+ -1.1640820503234863,
+ 0.5672034025192261,
+ 0.025153987109661102,
+ 0.19934359192848206,
+ -0.16949543356895447,
+ -0.9613374471664429,
+ 1.191710114479065,
+ 1.122589349746704,
+ 1.131553053855896,
+ 1.1968128681182861,
+ 0.05137159675359726,
+ -0.8893681764602661,
+ -1.1752355098724365,
+ 0.4500316083431244,
+ 0.2622131407260895,
+ 1.1541857719421387,
+ -0.24952532351016998,
+ -0.27069488167762756,
+ 0.1841556578874588,
+ -0.49356701970100403,
+ 1.03094482421875,
+ 0.7143377065658569,
+ 0.8250175714492798,
+ -0.23176249861717224,
+ 0.9421731233596802,
+ -1.029413104057312,
+ -0.8081961870193481,
+ 0.1688535362482071,
+ 0.13723281025886536,
+ -0.20047980546951294,
+ -1.0108482837677002,
+ 0.2249867022037506,
+ -0.04514498636126518,
+ -0.7083249688148499,
+ 0.22995415329933167,
+ 0.11717339605093002,
+ 0.9279888272285461,
+ 0.26078730821609497,
+ -0.14317545294761658,
+ 0.7294012904167175,
+ 0.7502824068069458,
+ 0.9339855909347534,
+ -0.7207288146018982,
+ -0.31689465045928955,
+ -0.20839597284793854,
+ 0.6327207088470459,
+ -0.6241544485092163,
+ -0.13490919768810272,
+ 0.16354209184646606,
+ 0.599541962146759,
+ 0.14369834959506989,
+ -0.7026962041854858,
+ 0.2609589397907257,
+ 0.487190842628479,
+ 0.8934829235076904,
+ -0.8906726837158203,
+ 0.076006680727005,
+ -0.8032786846160889,
+ -0.6291242837905884,
+ 0.2611800730228424,
+ 0.5920856595039368,
+ -0.32406696677207947,
+ 0.09703242778778076,
+ 0.6950924396514893,
+ -0.5102196931838989,
+ -0.222005233168602,
+ 0.8150096535682678,
+ 0.6067954301834106,
+ 0.5446067452430725,
+ 0.5265469551086426,
+ -0.5007103085517883,
+ 0.6686011552810669,
+ -0.24537621438503265,
+ 0.323517769575119,
+ -0.7865349650382996,
+ 0.2563258707523346,
+ -0.7362639307975769,
+ 0.1695857048034668,
+ 0.20038248598575592,
+ 0.2746374309062958,
+ 0.6489536762237549,
+ 0.4084237515926361,
+ -0.45172104239463806,
+ 0.7198478579521179,
+ 0.7062424421310425,
+ -0.3178417980670929,
+ 0.6656503081321716,
+ -0.7069792747497559,
+ 0.10077623277902603,
+ -0.26936522126197815,
+ 0.098179891705513,
+ -0.1854586899280548,
+ 0.5889520645141602,
+ -0.15457883477210999,
+ -0.6870209574699402,
+ -0.3004824221134186,
+ -0.6238359808921814,
+ -0.656621515750885,
+ -0.15188658237457275,
+ -0.5833857655525208,
+ -0.6288359761238098,
+ -0.6008774042129517,
+ 0.04108657315373421,
+ 0.35069239139556885,
+ 0.6790277361869812,
+ 0.20999924838542938,
+ 0.3749932646751404,
+ -0.09504661709070206,
+ 0.0789966955780983,
+ 0.6485247611999512,
+ -0.2742367088794708,
+ 0.5409148335456848,
+ 0.5866796970367432,
+ -0.03315833583474159,
+ 0.41030457615852356,
+ 0.625477135181427,
+ -0.6142215728759766,
+ -0.5989366769790649,
+ 0.39849740266799927,
+ -0.632266640663147,
+ -0.5529099702835083,
+ -0.6041032075881958,
+ 0.18807879090309143,
+ 0.6228002905845642,
+ 0.5112594366073608,
+ 0.3015126883983612,
+ -0.4223620593547821,
+ 0.6076338887214661,
+ 0.5994020700454712,
+ 0.4846867620944977,
+ -0.6090458631515503,
+ -0.5111470818519592,
+ -0.025508172810077667
+ ],
+ "y": [
+ 159.44656372070312,
+ 6.282978534698486,
+ 18.348953247070312,
+ 17.577957153320312,
+ 2.0864977836608887,
+ 12.674065589904785,
+ 9.218749046325684,
+ 8.476363182067871,
+ -8.10537338256836,
+ 7.199704170227051,
+ 1.3103591203689575,
+ -0.09920806437730789,
+ 5.5031914710998535,
+ -5.240540981292725,
+ 5.198809623718262,
+ 4.31136417388916,
+ -0.4430564045906067,
+ 3.994060516357422,
+ -3.8760783672332764,
+ 0.6523374915122986,
+ 0.6288594007492065,
+ -3.3178672790527344,
+ -3.3711793422698975,
+ 3.4030349254608154,
+ -2.2259089946746826,
+ 0.4653008282184601,
+ 1.1638777256011963,
+ -2.7764387130737305,
+ 2.457709789276123,
+ -2.631474494934082,
+ -2.5978341102600098,
+ 2.6047072410583496,
+ -2.602644205093384,
+ -2.465139865875244,
+ -2.3861045837402344,
+ -1.8678319454193115,
+ 1.495316982269287,
+ -2.2360401153564453,
+ -2.2311906814575195,
+ -1.579705834388733,
+ -0.02364630252122879,
+ -1.9472461938858032,
+ -1.929194450378418,
+ -2.142874240875244,
+ -2.0167922973632812,
+ 0.6608107686042786,
+ -1.9615637063980103,
+ 2.041459560394287,
+ -1.4258513450622559,
+ -0.08861660212278366,
+ -1.9280728101730347,
+ 1.9534841775894165,
+ -1.7324336767196655,
+ -0.8396713733673096,
+ 1.8587664365768433,
+ -1.824000358581543,
+ 0.27167966961860657,
+ 1.6595624685287476,
+ -1.2336292266845703,
+ 1.6876370906829834,
+ -0.5116194486618042,
+ 0.0179959274828434,
+ 0.7720663547515869,
+ 1.1340124607086182,
+ -1.6060956716537476,
+ -0.17652781307697296,
+ -0.35171011090278625,
+ -1.4634382724761963,
+ -1.1722215414047241,
+ 1.5301676988601685,
+ 0.3299787938594818,
+ -1.3957586288452148,
+ -1.4957804679870605,
+ 1.1240580081939697,
+ -1.1254229545593262,
+ -1.3911190032958984,
+ 0.1912192404270172,
+ 1.4490091800689697,
+ 1.3363434076309204,
+ 0.29685431718826294,
+ 1.3533426523208618,
+ 0.3616063594818115,
+ -0.7327248454093933,
+ -0.9828516244888306,
+ -0.18308961391448975,
+ -1.2481273412704468,
+ 0.2540023624897003,
+ -0.5210896134376526,
+ -1.1379599571228027,
+ -1.2565842866897583,
+ -1.2152034044265747,
+ -1.2187390327453613,
+ -0.7538775205612183,
+ -0.26446789503097534,
+ -0.47449395060539246,
+ 0.4339624345302582,
+ -0.07592508941888809,
+ 1.1815009117126465,
+ -0.7765255570411682,
+ 0.10239192843437195,
+ 1.088361144065857,
+ -1.1451681852340698,
+ 0.05011850595474243,
+ -1.125003695487976,
+ -1.1120593547821045,
+ 1.0702089071273804,
+ -0.9618059992790222,
+ -0.32531803846359253,
+ -0.8101174235343933,
+ 0.6849085092544556,
+ -1.0449185371398926,
+ -0.48902130126953125,
+ 0.24683888256549835,
+ 0.6836955547332764,
+ -1.0420724153518677,
+ 1.0388263463974,
+ -1.0265045166015625,
+ -0.252851277589798,
+ 1.0144120454788208,
+ -1.038081407546997,
+ -0.7521864771842957,
+ 1.00428307056427,
+ 1.0167077779769897,
+ -0.4005454182624817,
+ -0.9755083918571472,
+ 0.9803224802017212,
+ 0.6682850122451782,
+ 0.6334586143493652,
+ -0.30150607228279114,
+ -0.6596803665161133,
+ 0.9118353128433228,
+ -0.939568817615509,
+ -0.723232626914978,
+ 0.7254928350448608,
+ -0.9430357217788696,
+ -0.9340327382087708,
+ -0.7308660745620728,
+ 0.9269156455993652,
+ -0.6087174415588379,
+ 0.8790763020515442,
+ 0.7653137445449829,
+ -0.060187119990587234,
+ -0.06534374505281448,
+ -0.8873758912086487,
+ 0.3614645004272461,
+ 0.6130421757698059,
+ 0.8376683592796326,
+ 0.646239161491394,
+ -0.8127764463424683,
+ -0.8641985058784485,
+ -0.5020146369934082,
+ -0.6878767609596252,
+ -0.8271712064743042,
+ 0.2567414343357086,
+ -0.5988506078720093,
+ -0.6508310437202454,
+ -0.6567878127098083,
+ 0.6534653306007385,
+ 0.4676479399204254,
+ -0.7658504843711853,
+ 0.7351889610290527,
+ -0.15799234807491302,
+ -0.7565867304801941,
+ 0.262736052274704,
+ -0.7576191425323486,
+ -0.7495564818382263,
+ -0.7256461977958679,
+ -0.4135666489601135,
+ 0.642966091632843,
+ -0.6115015149116516,
+ 0.23840951919555664,
+ -0.2734256684780121,
+ 0.68039870262146,
+ -0.3293585181236267,
+ -0.21099485456943512,
+ -0.7298921346664429,
+ -0.6852893233299255,
+ 0.7267971038818359,
+ -0.6964324116706848,
+ -0.40427619218826294,
+ -0.6969301700592041,
+ -0.18474002182483673,
+ 0.643237829208374,
+ -0.32436618208885193,
+ 0.24594764411449432,
+ 0.6785203218460083,
+ -0.3701739013195038,
+ -0.28149208426475525,
+ -0.32901617884635925,
+ -0.6833361983299255,
+ -0.585645854473114,
+ -0.059625498950481415,
+ 0.6361568570137024,
+ 0.5355798602104187,
+ -0.6463695168495178,
+ 0.6465591788291931,
+ -0.022809097543358803,
+ -0.5870540738105774,
+ 0.35672029852867126,
+ -0.2738841772079468,
+ 0.6461223363876343,
+ -0.4976949989795685,
+ 0.13848735392093658,
+ -0.1767980009317398,
+ 0.22034785151481628,
+ 0.49409228563308716,
+ 0.043903522193431854,
+ 0.3027511537075043,
+ -0.17133308947086334,
+ -0.5970536470413208,
+ -0.03905210271477699,
+ -0.35352230072021484,
+ -0.5424400568008423,
+ -0.4520409405231476,
+ 0.09640730917453766,
+ -0.1320234090089798,
+ 0.37175804376602173,
+ 0.03990119695663452,
+ 0.3299656808376312,
+ -0.6000440120697021
+ ],
+ "z": [
+ 61.14083480834961,
+ 109.97122955322266,
+ 7.215564727783203,
+ 7.334517478942871,
+ 41.73957061767578,
+ 6.029707908630371,
+ 4.626885890960693,
+ 0.7752528786659241,
+ -1.7806880474090576,
+ 3.4755589962005615,
+ 21.793861389160156,
+ -28.59650993347168,
+ 0.8492100834846497,
+ 2.297551155090332,
+ -25.997623443603516,
+ 1.1710225343704224,
+ -16.87262535095215,
+ 1.1058084964752197,
+ 0.579244077205658,
+ 11.780083656311035,
+ 11.246148109436035,
+ 1.6058093309402466,
+ -3.5921437740325928,
+ 1.0644251108169556,
+ -5.177775859832764,
+ 10.151461601257324,
+ -4.433924674987793,
+ -0.6300406455993652,
+ -12.82355785369873,
+ 4.111102104187012,
+ -0.5274890065193176,
+ 0.7163841128349304,
+ -2.716092348098755,
+ -0.08269701153039932,
+ 1.3216403722763062,
+ 1.5889374017715454,
+ 4.069220542907715,
+ 0.9018344283103943,
+ -0.391412615776062,
+ 12.039240837097168,
+ 7.41935396194458,
+ 1.781711220741272,
+ -0.6524865627288818,
+ 0.9034466743469238,
+ 0.44127538800239563,
+ -8.149513244628906,
+ -9.174704551696777,
+ -7.438782215118408,
+ 0.7621334195137024,
+ -5.311079978942871,
+ -0.04259136691689491,
+ 0.3027705252170563,
+ 1.1697030067443848,
+ 3.1521291732788086,
+ 0.38933804631233215,
+ 0.7855040431022644,
+ -4.533698558807373,
+ 6.735616683959961,
+ -1.1976650953292847,
+ 0.9826887249946594,
+ 2.23941969871521,
+ 8.422775268554688,
+ 4.00758171081543,
+ -2.76640248298645,
+ -0.09213370084762573,
+ 5.46195650100708,
+ 3.557032823562622,
+ 2.907904863357544,
+ -1.8647947311401367,
+ -4.0519700050354,
+ -2.4749655723571777,
+ -3.7872776985168457,
+ 0.1647256463766098,
+ 7.093734264373779,
+ -1.8194559812545776,
+ 3.5032808780670166,
+ 1.9343677759170532,
+ -6.501946926116943,
+ -1.7751282453536987,
+ 0.06405314058065414,
+ 0.3165855407714844,
+ -2.325961112976074,
+ -0.8704293966293335,
+ 1.9542534351348877,
+ 2.2462801933288574,
+ -0.5211724638938904,
+ 0.17439444363117218,
+ -0.292392373085022,
+ 6.843387603759766,
+ -3.438567876815796,
+ -0.18422462046146393,
+ -0.2947443127632141,
+ 1.0910518169403076,
+ 0.7317593097686768,
+ 0.6701875925064087,
+ 6.2685227394104,
+ -0.470370888710022,
+ -0.5842012166976929,
+ 4.931369781494141,
+ 5.067688941955566,
+ -2.963700771331787,
+ -0.3169282078742981,
+ -0.04669191688299179,
+ 2.5178756713867188,
+ 1.2257362604141235,
+ 3.525172710418701,
+ 5.625130653381348,
+ -0.043692268431186676,
+ -0.46555960178375244,
+ -0.6100335121154785,
+ 0.23787593841552734,
+ -1.4802660942077637,
+ 3.188589334487915,
+ -3.0724215507507324,
+ -0.509441614151001,
+ 0.4855785071849823,
+ -0.7738745212554932,
+ 2.76883864402771,
+ -1.3635772466659546,
+ 0.5195189714431763,
+ 2.7742621898651123,
+ -2.7577595710754395,
+ -0.02455144189298153,
+ 1.1486034393310547,
+ 3.9149115085601807,
+ 4.656937122344971,
+ 1.0383261442184448,
+ 0.06843826919794083,
+ 0.8771471977233887,
+ 0.39529815316200256,
+ 3.5153379440307617,
+ -0.6704369783401489,
+ 2.177493095397949,
+ 0.7719159126281738,
+ 0.7281505465507507,
+ -1.3414580821990967,
+ 0.5035542249679565,
+ 0.6679949760437012,
+ -4.8761444091796875,
+ -1.0225145816802979,
+ -0.7311757206916809,
+ -2.1196882724761963,
+ 2.656973361968994,
+ 0.518234372138977,
+ -3.136991262435913,
+ 0.7593696117401123,
+ 0.9752068519592285,
+ 0.8128414154052734,
+ -0.44922420382499695,
+ -0.8105602860450745,
+ 0.27320539951324463,
+ -0.5448623895645142,
+ -3.463963508605957,
+ -2.059335470199585,
+ -0.12764528393745422,
+ 0.19211140275001526,
+ -1.0394827127456665,
+ 1.0856672525405884,
+ -3.655606508255005,
+ -2.9078667163848877,
+ 1.1831400394439697,
+ 1.6322163343429565,
+ -0.4802280366420746,
+ 2.275926351547241,
+ 0.747655987739563,
+ -2.2988317012786865,
+ 0.2613760828971863,
+ 0.8071561455726624,
+ 1.343957543373108,
+ -0.2024041712284088,
+ -3.438488483428955,
+ -0.07272830605506897,
+ 3.9545109272003174,
+ 0.6813639402389526,
+ 2.0802032947540283,
+ -1.0636945962905884,
+ 0.9556541442871094,
+ 0.43755465745925903,
+ 2.1485953330993652,
+ 0.9282801747322083,
+ -0.7442314624786377,
+ 2.0626821517944336,
+ 2.0584352016448975,
+ -0.9227214455604553,
+ -1.612755537033081,
+ 0.2215515375137329,
+ -0.030013658106327057,
+ 2.889232635498047,
+ -0.8279802203178406,
+ -0.6055589914321899,
+ -0.6357957124710083,
+ 2.1857616901397705,
+ 0.47749122977256775,
+ -2.2516560554504395,
+ 0.04561474174261093,
+ 0.3451731503009796,
+ 0.8003113269805908,
+ -2.0692408084869385,
+ -0.4425398111343384,
+ 2.074037551879883,
+ -0.028124365955591202,
+ 0.07948871701955795,
+ 1.1533164978027344,
+ 2.7074100971221924,
+ -0.5179486870765686,
+ -1.3112627267837524,
+ -0.766014575958252,
+ -0.8960452079772949,
+ -2.3523616790771484,
+ -1.014356017112732,
+ -1.289072036743164,
+ -2.8241827487945557,
+ -0.1766979694366455,
+ -1.7120229005813599,
+ 0.5458309650421143,
+ -2.1791656017303467,
+ 0.9932394623756409,
+ 1.1185901165008545,
+ 1.3052642345428467,
+ 0.11618176102638245
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 45
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "5987e409c20461ad"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "name": "python3",
+ "language": "python",
+ "display_name": "Python 3 (ipykernel)"
+ }
+ },
+ "nbformat": 5,
+ "nbformat_minor": 9
+}
diff --git a/notebooks/comparison_clustering_parton_and_gen_level.ipynb b/notebooks/comparison_clustering_parton_and_gen_level.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..541cf267f4a9f397171495d53d0e16eb520e0322
--- /dev/null
+++ b/notebooks/comparison_clustering_parton_and_gen_level.ipynb
@@ -0,0 +1,1354 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-06T13:45:15.381351Z",
+ "start_time": "2025-03-06T13:45:10.161490Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import pickle\n",
+ "import torch\n",
+ "import os\n",
+ "import matplotlib.pyplot as plt\n",
+ "from src.utils.paths import get_path\n",
+ "from src.utils.utils import CPU_Unpickler\n",
+ "from pathlib import Path\n",
+ "import fastjet\n",
+ "from src.dataset.dataset import EventDataset\n",
+ "import numpy as np\n",
+ "from src.plotting.plot_coordinates import plot_coordinates\n",
+ "\n",
+ "\n",
+ "filename_parton_level = get_path(\"/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_41_16/eval_1.pkl\", \"results\")\n",
+ "result_parton_level = CPU_Unpickler(open(filename_parton_level, \"rb\")).load()\n",
+ "dataset_parton_level = EventDataset.from_directory(result_parton_level[\"filename\"], mmap=True)\n",
+ "\n",
+ "filename_gen_level = get_path(\"/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_40_30/eval_1.pkl\", \"results\")\n",
+ "result_gen_level = CPU_Unpickler(open(filename_gen_level, \"rb\")).load()\n",
+ "dataset_gen_level = EventDataset.from_directory(result_gen_level[\"filename\"], mmap=True)\n",
+ "\n",
+ "filename_pfcands_level = get_path(\"/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_41_38/eval_1.pkl\", \"results\")\n",
+ "result_pfcands_level = CPU_Unpickler(open(filename_pfcands_level, \"rb\")).load()\n",
+ "dataset_pfcands_level = EventDataset.from_directory(result_pfcands_level[\"filename\"], mmap=True)\n"
+ ],
+ "id": "862bda2d2f12153f",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Exception ignored in: OpenBLAS blas_thread_init: pthread_create failed for thread 54 of 64: Resource temporarily unavailable\n",
+ ">\n",
+ "Traceback (most recent call last):\n",
+ " File \"/work/gkrzmanc/1gatr/lib/python3.10/site-packages/ipykernel/ipkernel.py\", line 775, in _clean_thread_parent_frames\n",
+ "OpenBLAS blas_thread_init: RLIMIT_NPROC 4096 current, 514581 max\n",
+ "OpenBLAS blas_thread_init: pthread_create failed for thread 55 of 64: Resource temporarily unavailable\n",
+ "OpenBLAS blas_thread_init: RLIMIT_NPROC 4096 current, 514581 max\n",
+ "OpenBLAS blas_thread_init: pthread_create failed for thread 56 of 64: Resource temporarily unavailable\n",
+ "OpenBLAS blas_thread_init: RLIMIT_NPROC 4096 current, 514581 max\n",
+ "OpenBLAS blas_thread_init: pthread_create failed for thread 57 of 64: Resource temporarily unavailable\n",
+ "OpenBLAS blas_thread_init: RLIMIT_NPROC 4096 current, 514581 max\n",
+ "OpenBLAS blas_thread_init: pthread_create failed for thread 58 of 64: Resource temporarily unavailable\n",
+ "OpenBLAS blas_thread_init: RLIMIT_NPROC 4096 current, 514581 max\n",
+ "OpenBLAS blas_thread_init: pthread_create failed for thread 59 of 64: Resource temporarily unavailable\n",
+ "OpenBLAS blas_thread_init: RLIMIT_NPROC 4096 current, 514581 max\n",
+ "OpenBLAS blas_thread_init: pthread_create failed for thread 60 of 64: Resource temporarily unavailable\n",
+ "OpenBLAS blas_thread_init: RLIMIT_NPROC 4096 current, 514581 max\n",
+ "OpenBLAS blas_thread_init: pthread_create failed for thread 61 of 64: Resource temporarily unavailable\n",
+ "OpenBLAS blas_thread_init: RLIMIT_NPROC 4096 current, 514581 max\n",
+ "OpenBLAS blas_thread_init: pthread_create failed for thread 62 of 64: Resource temporarily unavailable\n",
+ "OpenBLAS blas_thread_init: RLIMIT_NPROC 4096 current, 514581 max\n",
+ "OpenBLAS blas_thread_init: pthread_create failed for thread 63 of 64: Resource temporarily unavailable\n",
+ "OpenBLAS blas_thread_init: RLIMIT_NPROC 4096 current, 514581 max\n",
+ " def _clean_thread_parent_frames(\n",
+ "KeyboardInterrupt: \n",
+ "/work/gkrzmanc/jetclustering/code/src/utils/utils.py:91: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
+ " return lambda b: torch.load(io.BytesIO(b), map_location='cpu')\n"
+ ]
+ }
+ ],
+ "execution_count": 1
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-06T11:21:19.564382290Z",
+ "start_time": "2025-03-06T11:20:56.393854Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# plotly 3d plot of result[\"pred\"], colored by result[\"GT_cluster\"]\n",
+ "def plot_result(result, dataset_path):\n",
+ " filt = result[\"event_idx\"] == 15\n",
+ " # normalized coordinates\n",
+ " norm_coords = result[\"pred\"][filt, 1:4] #/ np.linalg.norm(result[\"pred\"][filt, 1:4] , axis=1 ,keepdims=1)\n",
+ " pt = torch.tensor(result[\"pt\"][filt])\n",
+ " clusters_file = get_path(os.path.join(dataset_path, f\"clustering_hdbscan_4_05_1.pkl\"), \"results\")\n",
+ " #clusters_file=None\n",
+ " model_clusters = CPU_Unpickler(open(clusters_file, \"rb\")).load()\n",
+ " plot_coordinates(norm_coords, pt, torch.tensor(model_clusters[filt])).show()\n",
+ " print(\"-----\")\n",
+ "\n"
+ ],
+ "id": "d584df4044d8a585",
+ "outputs": [],
+ "execution_count": 2
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-06T11:21:19.571882420Z",
+ "start_time": "2025-03-06T11:20:56.637833Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "plot_result(result_parton_level, \"/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_41_16\")\n",
+ "id": "a887bb652ed54eac",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[('X', (32, 1)), ('Y', (32, 1)), ('Z', (32, 1)), ('tIdx', (32, 1)), ('pt', (32, 1))]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/tmp/ipykernel_42283/481596008.py:6: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
+ " pt = torch.tensor(result[\"pt\"][filt])\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "hovertemplate": "X=%{x}
Y=%{y}
Z=%{z}
pt=%{marker.size}
tIdx=%{marker.color}",
+ "legendgroup": "",
+ "marker": {
+ "color": [
+ 0.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ -1.0,
+ 0.0,
+ 0.0,
+ 1.0,
+ 1.0,
+ 0.0,
+ 0.0,
+ 1.0,
+ 0.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 1.0,
+ 2.0,
+ 1.0,
+ 2.0,
+ 2.0,
+ 1.0,
+ 2.0,
+ 3.0,
+ 3.0,
+ 3.0,
+ 3.0
+ ],
+ "coloraxis": "coloraxis",
+ "opacity": 0.5,
+ "size": [
+ 5.429415225982666,
+ 0.6081729531288147,
+ 1.9733420610427856,
+ 1.3163951635360718,
+ 2.733966112136841,
+ 0.6446159482002258,
+ 1.9690138101577759,
+ 0.6289293169975281,
+ 0.5108833312988281,
+ 1.1707555055618286,
+ 1.1588191986083984,
+ 1.1909750699996948,
+ 2.0548150539398193,
+ 1.3339203596115112,
+ 2.0361104011535645,
+ 43.182132720947266,
+ 7.180440425872803,
+ 6.838322162628174,
+ 0.7990854978561401,
+ 6.540283679962158,
+ 5.935789585113525,
+ 19.336912155151367,
+ 6.375602722167969,
+ 28.59280776977539,
+ 5.872469902038574,
+ 5.258073329925537,
+ 0.9352484345436096,
+ 4.3812971115112305,
+ 58.224815368652344,
+ 113.52828216552734,
+ 108.6135025024414,
+ 93.19868469238281
+ ],
+ "sizemode": "area",
+ "sizeref": 0.2838207054138184,
+ "symbol": "circle",
+ "line": {
+ "width": 0
+ }
+ },
+ "mode": "markers",
+ "name": "",
+ "scene": "scene",
+ "showlegend": false,
+ "x": [
+ 0.4765247106552124,
+ 2.060394287109375,
+ 0.796140193939209,
+ 0.49241510033607483,
+ 1.5043977499008179,
+ 0.5099642872810364,
+ 0.7963659763336182,
+ 0.49603110551834106,
+ 0.49603211879730225,
+ -1.1970014572143555,
+ -1.2008448839187622,
+ 0.45484983921051025,
+ 0.488547146320343,
+ -0.9394121170043945,
+ 1.4640408754348755,
+ -1.3883676528930664,
+ -1.7735252380371094,
+ -1.7738075256347656,
+ -1.558084487915039,
+ -1.5148839950561523,
+ -1.7748527526855469,
+ -1.3806838989257812,
+ -0.07535076141357422,
+ -1.4020256996154785,
+ -0.08168691396713257,
+ -0.09156012535095215,
+ -1.5733389854431152,
+ -0.11341261863708496,
+ 0.5200929641723633,
+ 0.4879298210144043,
+ 0.48917853832244873,
+ 0.49674737453460693
+ ],
+ "y": [
+ 0.7626745700836182,
+ 3.982333183288574,
+ 0.9171181917190552,
+ 0.6865851283073425,
+ 1.3591046333312988,
+ 0.8154962062835693,
+ 0.9174587726593018,
+ 0.7961084246635437,
+ 0.7655313611030579,
+ -2.334413528442383,
+ -2.340780735015869,
+ 0.6274768114089966,
+ 0.74968421459198,
+ -2.924154281616211,
+ 1.3262934684753418,
+ -0.6972968578338623,
+ -1.4630308151245117,
+ -1.463027000427246,
+ -1.14402437210083,
+ -0.9294133186340332,
+ -1.4630327224731445,
+ -0.6878607273101807,
+ -0.10533404350280762,
+ -0.661689281463623,
+ -0.11552739143371582,
+ -0.13159489631652832,
+ -0.8759052753448486,
+ -0.16657257080078125,
+ 0.42116332054138184,
+ 0.3869478702545166,
+ 0.38782334327697754,
+ 0.3934662342071533
+ ],
+ "z": [
+ 7.322221755981445,
+ 3.7022809982299805,
+ -3.1507797241210938,
+ 4.770708084106445,
+ 6.06634521484375,
+ 7.479061126708984,
+ -3.1502552032470703,
+ 7.526288986206055,
+ 7.372432708740234,
+ -4.201669692993164,
+ -4.191755294799805,
+ 5.064359664916992,
+ 7.274496078491211,
+ -2.9367713928222656,
+ 6.063165664672852,
+ -3.712099075317383,
+ -2.535440444946289,
+ -2.5349302291870117,
+ -4.268980026245117,
+ -3.4681921005249023,
+ -2.5334043502807617,
+ -3.7572383880615234,
+ -4.83375358581543,
+ -3.750673294067383,
+ -4.817991256713867,
+ -4.801008224487305,
+ -3.85335636138916,
+ -4.787126541137695,
+ -5.682256698608398,
+ -5.670263290405273,
+ -5.674249649047852,
+ -5.692686080932617
+ ],
+ "type": "scatter3d"
+ }
+ ],
+ "layout": {
+ "template": {
+ "data": {
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#f2f5fa"
+ },
+ "error_y": {
+ "color": "#f2f5fa"
+ },
+ "marker": {
+ "line": {
+ "color": "rgb(17,17,17)",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "baxis": {
+ "endlinecolor": "#A2B1C6",
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "minorgridcolor": "#506784",
+ "startlinecolor": "#A2B1C6"
+ },
+ "type": "carpet"
+ }
+ ],
+ "choropleth": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "choropleth"
+ }
+ ],
+ "contourcarpet": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "contourcarpet"
+ }
+ ],
+ "contour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "contour"
+ }
+ ],
+ "heatmapgl": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmapgl"
+ }
+ ],
+ "heatmap": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "heatmap"
+ }
+ ],
+ "histogram2dcontour": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2dcontour"
+ }
+ ],
+ "histogram2d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "histogram2d"
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "mesh3d": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "type": "mesh3d"
+ }
+ ],
+ "parcoords": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "parcoords"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ],
+ "scatter3d": [
+ {
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatter3d"
+ }
+ ],
+ "scattercarpet": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattercarpet"
+ }
+ ],
+ "scattergeo": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattergeo"
+ }
+ ],
+ "scattergl": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scattergl"
+ }
+ ],
+ "scattermapbox": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scattermapbox"
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolargl"
+ }
+ ],
+ "scatterpolar": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterpolar"
+ }
+ ],
+ "scatter": [
+ {
+ "marker": {
+ "line": {
+ "color": "#283442"
+ }
+ },
+ "type": "scatter"
+ }
+ ],
+ "scatterternary": [
+ {
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "type": "scatterternary"
+ }
+ ],
+ "surface": [
+ {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "type": "surface"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#506784"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#2a3f5f"
+ },
+ "line": {
+ "color": "rgb(17,17,17)"
+ }
+ },
+ "type": "table"
+ }
+ ]
+ },
+ "layout": {
+ "annotationdefaults": {
+ "arrowcolor": "#f2f5fa",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "autotypenumbers": "strict",
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ],
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ },
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#f2f5fa"
+ },
+ "geo": {
+ "bgcolor": "rgb(17,17,17)",
+ "lakecolor": "rgb(17,17,17)",
+ "landcolor": "rgb(17,17,17)",
+ "showlakes": true,
+ "showland": true,
+ "subunitcolor": "#506784"
+ },
+ "hoverlabel": {
+ "align": "left"
+ },
+ "hovermode": "closest",
+ "mapbox": {
+ "style": "dark"
+ },
+ "paper_bgcolor": "rgb(17,17,17)",
+ "plot_bgcolor": "rgb(17,17,17)",
+ "polar": {
+ "angularaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "radialaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "yaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ },
+ "zaxis": {
+ "backgroundcolor": "rgb(17,17,17)",
+ "gridcolor": "#506784",
+ "gridwidth": 2,
+ "linecolor": "#506784",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "#C8D4E3"
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#f2f5fa"
+ }
+ },
+ "sliderdefaults": {
+ "bgcolor": "#C8D4E3",
+ "bordercolor": "rgb(17,17,17)",
+ "borderwidth": 1,
+ "tickwidth": 0
+ },
+ "ternary": {
+ "aaxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ },
+ "bgcolor": "rgb(17,17,17)",
+ "caxis": {
+ "gridcolor": "#506784",
+ "linecolor": "#506784",
+ "ticks": ""
+ }
+ },
+ "title": {
+ "x": 0.05
+ },
+ "updatemenudefaults": {
+ "bgcolor": "#506784",
+ "borderwidth": 0
+ },
+ "xaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "automargin": true,
+ "gridcolor": "#283442",
+ "linecolor": "#506784",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "#283442",
+ "zerolinewidth": 2
+ }
+ }
+ },
+ "scene": {
+ "domain": {
+ "x": [
+ 0.0,
+ 1.0
+ ],
+ "y": [
+ 0.0,
+ 1.0
+ ]
+ },
+ "xaxis": {
+ "title": {
+ "text": "X"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Y"
+ }
+ },
+ "zaxis": {
+ "title": {
+ "text": "Z"
+ }
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "title": {
+ "text": "tIdx"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(150,0,90)"
+ ],
+ [
+ 0.125,
+ "rgb(0,0,200)"
+ ],
+ [
+ 0.25,
+ "rgb(0,25,255)"
+ ],
+ [
+ 0.375,
+ "rgb(0,152,255)"
+ ],
+ [
+ 0.5,
+ "rgb(44,255,150)"
+ ],
+ [
+ 0.625,
+ "rgb(151,255,0)"
+ ],
+ [
+ 0.75,
+ "rgb(255,234,0)"
+ ],
+ [
+ 0.875,
+ "rgb(255,111,0)"
+ ],
+ [
+ 1.0,
+ "rgb(255,0,0)"
+ ]
+ ]
+ },
+ "legend": {
+ "tracegroupgap": 0,
+ "itemsizing": "constant"
+ },
+ "margin": {
+ "t": 60
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-----\n"
+ ]
+ }
+ ],
+ "execution_count": 3
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-06T11:21:19.583236325Z",
+ "start_time": "2025-03-06T11:20:57.587961Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "plot_result(result_gen_level, \"/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_40_30\")\n",
+ "id": "c52bf5ccd6385464",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-06T11:21:19.558535887Z",
+ "start_time": "2025-03-06T08:43:19.834577Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "plot_result(result_pfcands_level, \"/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_41_38\")",
+ "id": "6501e8a55e915b23",
+ "outputs": [
+ {
+ "ename": "NameError",
+ "evalue": "name 'plot_result' is not defined",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mNameError\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[2], line 1\u001B[0m\n\u001B[0;32m----> 1\u001B[0m \u001B[43mplot_result\u001B[49m(result_pfcands_level, \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_41_38\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n",
+ "\u001B[0;31mNameError\u001B[0m: name 'plot_result' is not defined"
+ ]
+ }
+ ],
+ "execution_count": 2
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-06T11:21:19.559769479Z",
+ "start_time": "2025-03-05T14:14:46.437920Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "c386fe40cc978955",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-06T11:21:19.560855633Z",
+ "start_time": "2025-03-05T14:14:46.486981Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "cbc3d8a28e3beb4e",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "fcdc97a790d3cbc0"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "name": "python3",
+ "language": "python",
+ "display_name": "Python 3 (ipykernel)"
+ }
+ },
+ "nbformat": 5,
+ "nbformat_minor": 9
+}
diff --git a/notebooks/comparison_clustering_parton_and_gen_level.py b/notebooks/comparison_clustering_parton_and_gen_level.py
new file mode 100644
index 0000000000000000000000000000000000000000..bea9d17513741d27b2d72884b4683db5e841f79f
--- /dev/null
+++ b/notebooks/comparison_clustering_parton_and_gen_level.py
@@ -0,0 +1,45 @@
+import pickle
+import torch
+import os
+import matplotlib.pyplot as plt
+from src.utils.paths import get_path
+from src.utils.utils import CPU_Unpickler
+from pathlib import Path
+import fastjet
+from src.dataset.dataset import EventDataset
+import numpy as np
+from src.plotting.plot_coordinates import plot_coordinates
+
+
+filename_parton_level = get_path("/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_41_16/eval_1.pkl", "results")
+result_parton_level = CPU_Unpickler(open(filename_parton_level, "rb")).load()
+dataset_parton_level = EventDataset.from_directory(result_parton_level["filename"], mmap=True)
+
+filename_gen_level = get_path("/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_40_30/eval_1.pkl", "results")
+result_gen_level = CPU_Unpickler(open(filename_gen_level, "rb")).load()
+dataset_gen_level = EventDataset.from_directory(result_gen_level["filename"], mmap=True)
+
+filename_pfcands_level = get_path("/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_41_38/eval_1.pkl", "results")
+result_pfcands_level = CPU_Unpickler(open(filename_pfcands_level, "rb")).load()
+dataset_pfcands_level = EventDataset.from_directory(result_pfcands_level["filename"], mmap=True)
+
+EVENT_ID=15
+
+# plotly 3d plot of result["pred"], colored by result["GT_cluster"]
+def plot_result(result, dataset_path, save_dir):
+ filt = result["event_idx"] == EVENT_ID
+ # normalized coordinates
+ norm_coords = result["pred"][filt, 1:4] #/ np.linalg.norm(result["pred"][filt, 1:4] , axis=1 ,keepdims=1)
+ pt = torch.tensor(result["pt"][filt])
+ clusters_file = get_path(os.path.join(dataset_path, f"clustering_hdbscan_4_05_1.pkl"), "results")
+ #clusters_file=None
+ model_clusters = CPU_Unpickler(open(clusters_file, "rb")).load()# torch.tensor(model_clusters[filt])
+ plot_coordinates(norm_coords, pt, result["GT_cluster"][filt]).write_html(save_dir)
+ print("-----")
+
+
+plot_result(result_parton_level, "/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_41_16", "/work/gkrzmanc/jetclustering/results/GT_color_parton_level_{}.html".format(EVENT_ID))
+plot_result(result_gen_level, "/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_40_30", "/work/gkrzmanc/jetclustering/results/GT_color_gen_level_{}.html".format(EVENT_ID))
+plot_result(result_pfcands_level, "/work/gkrzmanc/jetclustering/results/train/Eval_no_pid_eval_1_2025_03_05_14_41_38", "/work/gkrzmanc/jetclustering/results/GT_color_pfcands_level_{}.html".format(EVENT_ID))
+
+
diff --git a/notebooks/data_exploration_IRC.ipynb b/notebooks/data_exploration_IRC.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..ac26466003af8813517e060ba76d79f24db65f20
--- /dev/null
+++ b/notebooks/data_exploration_IRC.ipynb
@@ -0,0 +1,237 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-14T08:09:47.447782Z",
+ "start_time": "2025-04-14T08:09:37.767746Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import torch\n",
+ "import sys\n",
+ "import os.path as osp\n",
+ "import os\n",
+ "import sys\n",
+ "import numpy as np\n",
+ "from src.dataset.dataset import SimpleIterDataset, EventDataset\n",
+ "from src.utils.utils import to_filelist\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import matplotlib\n",
+ "matplotlib.rc('font', size=13)\n",
+ "from src.plotting.plot_event import plot_event_comparison\n",
+ "from src.dataset.functions_data import concat_events\n",
+ "from src.utils.paths import get_path\n",
+ "from dotenv import load_dotenv\n",
+ "load_dotenv()"
+ ],
+ "id": "6bae9707acf4a848",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 1
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-14T08:09:48.837368Z",
+ "start_time": "2025-04-14T08:09:48.832767Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "def remove_from_list(lst):\n",
+ " out = []\n",
+ " for item in lst:\n",
+ " if item in [\"hgcal\", \"data.txt\", \"test_file.root\"]:\n",
+ " continue\n",
+ " out.append(item)\n",
+ " return out\n",
+ "\n",
+ "#path = \"/eos/user/g/gkrzmanc/jetclustering/data/SVJ_std_UL2018_scouting_test_large/SVJ_mMed-700GeV_mDark-20GeV_rinv-0.7_alpha-peak\"\n",
+ "def get_iter(path_to_ds):\n",
+ " return iter(EventDataset.from_directory(path_to_ds))\n"
+ ],
+ "id": "e7a7ef680143801e",
+ "outputs": [],
+ "execution_count": 2
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-14T08:09:49.693906Z",
+ "start_time": "2025-04-14T08:09:49.608366Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "dataset = get_iter(get_path(\"Feb26_2025_E1000_N500_noPartonFilter_GluonFixF/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000\", \"preprocessed_data\"))",
+ "id": "1549361c5b028634",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "get_pfcands_key\n"
+ ]
+ }
+ ],
+ "execution_count": 3
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-14T08:09:51.053269Z",
+ "start_time": "2025-04-14T08:09:50.666358Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "e = next(dataset)",
+ "id": "e0d491f2943f20e9",
+ "outputs": [],
+ "execution_count": 4
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-14T08:09:51.767492Z",
+ "start_time": "2025-04-14T08:09:51.755352Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "random_generator = np.random.RandomState(seed=3)\n",
+ "spl = EventDataset.pfcands_split_particles(e.pfcands, random_generator)"
+ ],
+ "id": "87c6ab0ccf50fa58",
+ "outputs": [],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-14T08:09:52.738157Z",
+ "start_time": "2025-04-14T08:09:52.725056Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "spl.pt",
+ "id": "6919a7adaa7a6376",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([44.3125, 5.3385, 15.2578, 13.7188, 9.7969, 7.9609, 7.3008, 7.0039,\n",
+ " 6.9883, 6.7812, 5.3281, 4.8477, 4.6211, 4.5586, 4.4844, 4.4727,\n",
+ " 4.2148, 3.7598, 3.2539, 3.2305, 3.1270, 3.0469, 3.0195, 3.0156,\n",
+ " 2.7480, 2.6699, 2.5801, 2.3555, 2.3496, 2.2910, 2.1953, 2.1738,\n",
+ " 2.0859, 2.0742, 2.0020, 1.9785, 1.9619, 1.9199, 1.8711, 1.8574,\n",
+ " 1.8320, 1.7842, 1.7832, 1.7764, 1.7617, 1.6924, 1.6641, 1.6318,\n",
+ " 1.6230, 1.6152, 1.6143, 1.5576, 1.5547, 1.5449, 1.5283, 1.4854,\n",
+ " 1.4404, 1.4287, 1.3828, 1.3701, 1.3682, 1.3252, 1.2891, 1.2490,\n",
+ " 1.2451, 1.2383, 1.2256, 1.2217, 1.2217, 1.1807, 1.1719, 1.1416,\n",
+ " 1.1094, 1.1025, 1.1016, 1.0830, 1.0801, 1.0742, 1.0732, 1.0713,\n",
+ " 1.0625, 1.0557, 1.0410, 1.0254, 1.0186, 1.0137, 1.0107, 0.9756,\n",
+ " 0.9731, 0.9683, 0.9668, 0.9463, 0.9370, 0.9360, 0.9287, 0.9072,\n",
+ " 0.9053, 0.8984, 0.8760, 0.8755, 0.8706, 0.8677, 0.8647, 0.8511,\n",
+ " 0.8472, 0.8438, 0.8354, 0.8286, 0.8267, 0.8247, 0.8193, 0.8062,\n",
+ " 0.8057, 0.7949, 0.7822, 0.7739, 0.7715, 0.7520, 0.7490, 0.7461,\n",
+ " 0.7368, 0.7354, 0.7310, 0.7275, 0.7246, 0.7178, 0.7129, 0.7109,\n",
+ " 0.7070, 0.7070, 0.7031, 0.6997, 0.6865, 0.6802, 0.6802, 0.6655,\n",
+ " 0.6572, 0.6562, 0.6514, 0.6504, 0.6475, 0.6411, 0.6396, 0.6367,\n",
+ " 0.6353, 0.6338, 0.6211, 0.6162, 0.6147, 0.6138, 0.6108, 0.6084,\n",
+ " 0.6055, 0.6050, 0.6016, 0.6016, 44.3125, 5.3385, 5.3385],\n",
+ " dtype=torch.float64)"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-14T08:09:54.479093Z",
+ "start_time": "2025-04-14T08:09:54.468976Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "e.pfcands.pt",
+ "id": "2d7e0400c013c243",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([88.6250, 16.0156, 15.2578, 13.7188, 9.7969, 7.9609, 7.3008, 7.0039,\n",
+ " 6.9883, 6.7812, 5.3281, 4.8477, 4.6211, 4.5586, 4.4844, 4.4727,\n",
+ " 4.2148, 3.7598, 3.2539, 3.2305, 3.1270, 3.0469, 3.0195, 3.0156,\n",
+ " 2.7480, 2.6699, 2.5801, 2.3555, 2.3496, 2.2910, 2.1953, 2.1738,\n",
+ " 2.0859, 2.0742, 2.0020, 1.9785, 1.9619, 1.9199, 1.8711, 1.8574,\n",
+ " 1.8320, 1.7842, 1.7832, 1.7764, 1.7617, 1.6924, 1.6641, 1.6318,\n",
+ " 1.6230, 1.6152, 1.6143, 1.5576, 1.5547, 1.5449, 1.5283, 1.4854,\n",
+ " 1.4404, 1.4287, 1.3828, 1.3701, 1.3682, 1.3252, 1.2891, 1.2490,\n",
+ " 1.2451, 1.2383, 1.2256, 1.2217, 1.2217, 1.1807, 1.1719, 1.1416,\n",
+ " 1.1094, 1.1025, 1.1016, 1.0830, 1.0801, 1.0742, 1.0732, 1.0713,\n",
+ " 1.0625, 1.0557, 1.0410, 1.0254, 1.0186, 1.0137, 1.0107, 0.9756,\n",
+ " 0.9731, 0.9683, 0.9668, 0.9463, 0.9370, 0.9360, 0.9287, 0.9072,\n",
+ " 0.9053, 0.8984, 0.8760, 0.8755, 0.8706, 0.8677, 0.8647, 0.8511,\n",
+ " 0.8472, 0.8438, 0.8354, 0.8286, 0.8267, 0.8247, 0.8193, 0.8062,\n",
+ " 0.8057, 0.7949, 0.7822, 0.7739, 0.7715, 0.7520, 0.7490, 0.7461,\n",
+ " 0.7368, 0.7354, 0.7310, 0.7275, 0.7246, 0.7178, 0.7129, 0.7109,\n",
+ " 0.7070, 0.7070, 0.7031, 0.6997, 0.6865, 0.6802, 0.6802, 0.6655,\n",
+ " 0.6572, 0.6562, 0.6514, 0.6504, 0.6475, 0.6411, 0.6396, 0.6367,\n",
+ " 0.6353, 0.6338, 0.6211, 0.6162, 0.6147, 0.6138, 0.6108, 0.6084,\n",
+ " 0.6055, 0.6050, 0.6016, 0.6016], dtype=torch.float64)"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 7
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "8f771993addd4bc1"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/data_exploration_comparison_Delphes_vs_FullSim.ipynb b/notebooks/data_exploration_comparison_Delphes_vs_FullSim.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..b70395d0247c4baf203c22c9a6976724cdf54ee5
--- /dev/null
+++ b/notebooks/data_exploration_comparison_Delphes_vs_FullSim.ipynb
@@ -0,0 +1,805 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-14T20:03:21.888211Z",
+ "start_time": "2025-05-14T20:03:12.632050Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import torch\n",
+ "import sys\n",
+ "import os.path as osp\n",
+ "import os\n",
+ "import sys\n",
+ "import numpy as np\n",
+ "from src.dataset.dataset import SimpleIterDataset, EventDataset, EventDatasetCollection\n",
+ "from src.utils.utils import to_filelist\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import matplotlib\n",
+ "matplotlib.rc('font', size=13)\n",
+ "from src.plotting.plot_event import plot_event_comparison\n",
+ "from src.dataset.functions_data import concat_events\n",
+ "from src.utils.paths import get_path\n",
+ "from dotenv import load_dotenv\n",
+ "load_dotenv()"
+ ],
+ "id": "6bae9707acf4a848",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 1
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-14T20:03:22.129786Z",
+ "start_time": "2025-05-14T20:03:22.120105Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "def remove_from_list(lst):\n",
+ " out = []\n",
+ " for item in lst:\n",
+ " if item in [\"hgcal\", \"data.txt\", \"test_file.root\"]:\n",
+ " continue\n",
+ " out.append(item)\n",
+ " return out\n",
+ "\n",
+ "#path = \"/eos/user/g/gkrzmanc/jetclustering/data/SVJ_std_UL2018_scouting_test_large/SVJ_mMed-700GeV_mDark-20GeV_rinv-0.7_alpha-peak\"\n",
+ "def get_iter(path_to_ds):\n",
+ " return iter(EventDatasetCollection(path_to_ds, args=None))\n",
+ "\n",
+ "inputs = {\n",
+ " \"Delphes\": [\"Delphes_020425_test_PU_PFfix_part0/SVJ_mZprime-900_mDark-20_rinv-0.3_alpha-peak\"],\n",
+ " \"CMS FullSim\": [\"Feb26_2025_E1000_N500_noPartonFilter_GluonFix_FullF_part0/PFNano_s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000\",\n",
+ " \"Feb26_2025_E1000_N500_noPartonFilter_GluonFix_FullF_part1/PFNano_s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000\",\n",
+ " \"Feb26_2025_E1000_N500_noPartonFilter_GluonFix_FullF_part2/PFNano_s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000\",\n",
+ " \"Feb26_2025_E1000_N500_noPartonFilter_GluonFix_FullF_part3/PFNano_s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000\",\n",
+ " \"Feb26_2025_E1000_N500_noPartonFilter_GluonFix_FullF_part4/PFNano_s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000\"]\n",
+ "}\n"
+ ],
+ "id": "e7a7ef680143801e",
+ "outputs": [],
+ "execution_count": 2
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-14T20:03:27.596552Z",
+ "start_time": "2025-05-14T20:03:27.359469Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "datasets = {\n",
+ " key: get_iter([get_path(x, \"preprocessed_data\") for x in value]) for key, value in inputs.items()\n",
+ "}"
+ ],
+ "id": "1549361c5b028634",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Getting query for path Delphes_020425_test_PU_PFfix_part0/SVJ_mZprime-900_mDark-20_rinv-0.3_alpha-peak | Preproc. data root= /work/gkrzmanc/jetclustering/preprocessed_data\n",
+ "get_pfcands_key\n",
+ "Getting query for path Feb26_2025_E1000_N500_noPartonFilter_GluonFix_FullF_part0/PFNano_s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 | Preproc. data root= /work/gkrzmanc/jetclustering/preprocessed_data\n",
+ "Getting query for path Feb26_2025_E1000_N500_noPartonFilter_GluonFix_FullF_part1/PFNano_s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 | Preproc. data root= /work/gkrzmanc/jetclustering/preprocessed_data\n",
+ "Getting query for path Feb26_2025_E1000_N500_noPartonFilter_GluonFix_FullF_part2/PFNano_s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 | Preproc. data root= /work/gkrzmanc/jetclustering/preprocessed_data\n",
+ "Getting query for path Feb26_2025_E1000_N500_noPartonFilter_GluonFix_FullF_part3/PFNano_s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 | Preproc. data root= /work/gkrzmanc/jetclustering/preprocessed_data\n",
+ "Getting query for path Feb26_2025_E1000_N500_noPartonFilter_GluonFix_FullF_part4/PFNano_s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 | Preproc. data root= /work/gkrzmanc/jetclustering/preprocessed_data\n",
+ "get_pfcands_key\n",
+ "get_pfcands_key\n",
+ "get_pfcands_key\n",
+ "get_pfcands_key\n",
+ "get_pfcands_key\n"
+ ]
+ }
+ ],
+ "execution_count": 3
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:52:58.871921Z",
+ "start_time": "2025-04-30T09:52:58.833485Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "e.final_parton_level_particles.pid",
+ "id": "baf454ab625e31d0",
+ "outputs": [
+ {
+ "ename": "NameError",
+ "evalue": "name 'e' is not defined",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mNameError\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[8], line 1\u001B[0m\n\u001B[0;32m----> 1\u001B[0m \u001B[43me\u001B[49m\u001B[38;5;241m.\u001B[39mfinal_parton_level_particles\u001B[38;5;241m.\u001B[39mpid\n",
+ "\u001B[0;31mNameError\u001B[0m: name 'e' is not defined"
+ ]
+ }
+ ],
+ "execution_count": 8
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T12:04:56.009469Z",
+ "start_time": "2025-04-30T12:04:55.991970Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "e = next(datasets[\"Delphes\"])",
+ "id": "9240584690041d12",
+ "outputs": [],
+ "execution_count": 4
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-13T08:51:59.698564Z",
+ "start_time": "2025-05-13T08:51:58.939680Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "pid_masses = {}\n",
+ "for i in range(100):\n",
+ " e = next(datasets[\"CMS FullSim\"])\n",
+ " for i in range(len(e.pfcands)):\n",
+ " pid = e.pfcands.pid[i].item()\n",
+ " if pid not in pid_masses:\n",
+ " pid_masses[pid] = []\n",
+ " pid_masses[pid].append(e.pfcands.mass[i].item())"
+ ],
+ "id": "f16775ce378fd545",
+ "outputs": [],
+ "execution_count": 6
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "source": "e = next(datasets[\"CMS FullSim\"])",
+ "id": "3b87ced12eea20ac",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "source": "pid_masses[211]",
+ "id": "b7c865969840fb02",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-14T20:03:31.983545Z",
+ "start_time": "2025-05-14T20:03:31.961690Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "from tqdm import tqdm\n",
+ "ch_pids = torch.tensor([211, -211])\n",
+ "nh_pids = torch.tensor([130, 2112.0])\n",
+ "def get_stats(ds):\n",
+ " LE_pfcands_PID= []\n",
+ " result = {\n",
+ " \"n_pfcands\": [],\n",
+ " \"pfcands_pt\": [],\n",
+ " \"pfcands_eta\": [],\n",
+ " \"pfcands_phi\": [],\n",
+ " \"pfcands_pid\": [],\n",
+ " \"pfcands_mass\": [],\n",
+ " \"n_genp\": [],\n",
+ " \"n_parton_level\": [],\n",
+ " \"genp_pt\": [],\n",
+ " \"parton_level_pt\": [],\n",
+ " \"pt_ch\": [], # low-pt CH\n",
+ " \"pt_nh\": [], # low-pt NH\n",
+ " \"pt_gamma\": [],\n",
+ " \"E_vis\": [],\n",
+ " \"n_ch\": [],\n",
+ " \"n_nh\": [],\n",
+ " \"n_gamma\": []\n",
+ " # \"n_dq\": []\n",
+ " }\n",
+ " for _ in tqdm(range(10000)):\n",
+ " event = next(ds)\n",
+ " result[\"n_pfcands\"].append(len(event.pfcands))\n",
+ " result[\"pfcands_pt\"] += torch.log10(event.pfcands.pt).tolist()\n",
+ " result[\"pfcands_eta\"] += event.pfcands.eta.tolist()\n",
+ " result[\"pfcands_phi\"] += event.pfcands.phi.tolist()\n",
+ " result[\"pfcands_pid\"] += event.pfcands.pid.tolist()\n",
+ " result[\"pfcands_mass\"] += event.pfcands.mass.tolist()\n",
+ " result[\"n_genp\"].append(len(event.final_gen_particles))\n",
+ " result[\"n_parton_level\"].append(len(event.final_parton_level_particles))\n",
+ " result[\"genp_pt\"] += torch.log10(event.final_gen_particles.pt).tolist()\n",
+ " result[\"parton_level_pt\"] += torch.log10(event.final_parton_level_particles.pt).tolist()\n",
+ "# result[\"pt_ch\"] += event.pfcands.pt[event.pfcands.pid.isin(ch_pids)].tolist()\n",
+ " #result[\"n_dq\"].append(len(event.matrix_element_gen_particles))\n",
+ " result[\"pt_ch\"] += torch.log10(event.pfcands.pt[torch.isin(event.pfcands.pid, ch_pids)]).tolist()\n",
+ " result[\"pt_nh\"] += torch.log10(event.pfcands.pt[torch.isin(event.pfcands.pid, nh_pids)]).tolist()\n",
+ " result[\"pt_gamma\"] += torch.log10(event.pfcands.pt[event.pfcands.pid == 22]).tolist()\n",
+ " result[\"E_vis\"].append(torch.sum(event.pfcands.E).item())\n",
+ " result[\"n_ch\"].append(torch.isin(event.pfcands.pid, ch_pids).sum().item())\n",
+ " result[\"n_nh\"].append(torch.isin(event.pfcands.pid, nh_pids).sum().item())\n",
+ " result[\"n_gamma\"].append((event.pfcands.pid == 22).sum().item())\n",
+ " return result, LE_pfcands_PID"
+ ],
+ "id": "e0d491f2943f20e9",
+ "outputs": [],
+ "execution_count": 4
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-14T20:04:32.479877Z",
+ "start_time": "2025-05-14T20:03:32.248813Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "results = {\n",
+ " key: get_stats(value)[0] for key, value in datasets.items()\n",
+ "}\n",
+ "\n",
+ "#results_PID = {\n",
+ "# key: get_stats(value)[1] for key, value in datasets.items()\n",
+ "#}"
+ ],
+ "id": "87c6ab0ccf50fa58",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 10000/10000 [00:25<00:00, 397.09it/s]\n",
+ "100%|██████████| 10000/10000 [00:35<00:00, 285.44it/s]\n"
+ ]
+ }
+ ],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-13T09:10:44.582809Z",
+ "start_time": "2025-05-13T09:10:44.554540Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "ev = next(datasets[\"Delphes\"])\n",
+ "print(ev.pfcands.pid)\n",
+ "print(ev.pfcands.eta)"
+ ],
+ "id": "60d9dfce90fc3301",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "tensor([ -211., -211., 211., 211., -211., -211., -211., 2212., 211.,\n",
+ " 321., 211., -211., 211., 211., -211., 211., 321., -321.,\n",
+ " -211., -211., 13., -211., -211., -211., -211., 211., 211.,\n",
+ " 2212., -2212., 211., 211., -211., 211., -211., -321., 2212.,\n",
+ " -211., 321., -211., 211., -2212., -211., 211., 211., -211.,\n",
+ " 211., 211., -211., 211., -211., 2212., -211., 211., 321.,\n",
+ " 2212., 211., -2212., 211., -211., -211., 211., 211., 211.,\n",
+ " -211., 211., -211., -211., -211., -211., -211., 211., 211.,\n",
+ " 211., 211., -2212., 211., -211., 211., 321., -321., 211.,\n",
+ " -211., -211., -211., -211., -211., -211., 2212., 211., 211.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 22., 22., 22., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
+ " 0., 0., 0., 0.], dtype=torch.float64)\n",
+ "tensor([-2.3296e+00, -2.3419e+00, -2.2888e+00, -2.2427e+00, -2.0035e+00,\n",
+ " -1.9182e+00, -1.7687e+00, -1.6575e+00, -1.5705e+00, -1.5510e+00,\n",
+ " -1.5122e+00, -1.5308e+00, -1.4512e+00, -1.3991e+00, -1.4467e+00,\n",
+ " -1.3438e+00, -1.3369e+00, -1.3319e+00, -1.3057e+00, -1.3777e+00,\n",
+ " -1.3628e+00, -1.1651e+00, -7.1665e-01, -7.5901e-01, -6.2174e-01,\n",
+ " -5.3450e-01, -5.8215e-01, -4.3081e-01, -3.0314e-01, -2.6323e-01,\n",
+ " -2.2304e-01, -1.8626e-01, -6.1589e-02, -2.1350e-02, -3.8317e-02,\n",
+ " 8.4537e-02, 7.1163e-02, 8.2808e-02, 1.0621e-01, 9.5661e-02,\n",
+ " 1.2104e-01, 2.8841e-01, 2.9900e-01, 3.1743e-01, 2.8026e-01,\n",
+ " 4.7656e-01, 9.7945e-01, 1.0045e+00, 9.7821e-01, 1.1411e+00,\n",
+ " 1.1461e+00, 1.2028e+00, 1.1635e+00, 1.3571e+00, 1.3081e+00,\n",
+ " 1.3183e+00, 1.4194e+00, 1.4447e+00, 1.4046e+00, 1.4660e+00,\n",
+ " 1.4236e+00, 1.5504e+00, 1.4970e+00, 1.6392e+00, 1.7054e+00,\n",
+ " 1.7276e+00, 1.7297e+00, 1.6749e+00, 1.6981e+00, 1.8182e+00,\n",
+ " 1.7623e+00, 1.8918e+00, 1.8611e+00, 1.8781e+00, 2.0039e+00,\n",
+ " 2.0201e+00, 2.0069e+00, 1.9426e+00, 1.9770e+00, 1.9896e+00,\n",
+ " 2.1409e+00, 2.0636e+00, 2.3024e+00, 2.2780e+00, 2.1801e+00,\n",
+ " 2.1831e+00, 2.2532e+00, 2.2503e+00, 2.3362e+00, 2.3564e+00,\n",
+ " -2.3982e+00, -2.3817e+00, -2.3568e+00, -2.3634e+00, -2.3399e+00,\n",
+ " -2.2820e+00, -2.2661e+00, -2.2641e+00, -2.2505e+00, -2.2231e+00,\n",
+ " -2.1852e+00, -2.1669e+00, -2.0865e+00, -2.0821e+00, -2.0730e+00,\n",
+ " -2.0419e+00, -2.0387e+00, -2.0028e+00, -2.0106e+00, -1.9600e+00,\n",
+ " -1.9628e+00, -1.9500e+00, -1.9509e+00, -1.9362e+00, -1.9166e+00,\n",
+ " -1.9285e+00, -1.9020e+00, -1.9019e+00, -1.9127e+00, -1.8655e+00,\n",
+ " -1.8309e+00, -1.8309e+00, -1.8203e+00, -1.8035e+00, -1.8080e+00,\n",
+ " -1.8014e+00, -1.7744e+00, -1.7268e+00, -1.6515e+00, -1.6413e+00,\n",
+ " -1.5739e+00, -1.5823e+00, -1.5328e+00, -1.4862e+00, -1.4698e+00,\n",
+ " -1.4443e+00, -1.3977e+00, -1.3856e+00, -1.3577e+00, -1.3433e+00,\n",
+ " -1.3439e+00, -1.3355e+00, -1.3105e+00, -1.3017e+00, -1.3038e+00,\n",
+ " -1.2762e+00, -1.2424e+00, -1.2041e+00, -1.2037e+00, -1.1910e+00,\n",
+ " -1.1503e+00, -1.1485e+00, -1.1530e+00, -1.0762e+00, -1.0490e+00,\n",
+ " -9.7511e-01, -9.8171e-01, -9.4584e-01, -9.2720e-01, -8.5740e-01,\n",
+ " -8.2333e-01, -7.4154e-01, -6.2226e-01, -5.4987e-01, -4.5973e-01,\n",
+ " -4.6473e-01, -4.3213e-01, -3.8526e-01, -3.8403e-01, -3.6908e-01,\n",
+ " -3.5098e-01, -1.7645e-01, -1.5925e-01, -1.5969e-01, -1.3599e-01,\n",
+ " -7.9646e-02, -7.6998e-02, 9.3435e-03, 1.2693e-02, 1.2792e-03,\n",
+ " 3.0444e-02, 3.9928e-02, 3.7316e-02, 5.5591e-02, 7.2189e-02,\n",
+ " 7.8277e-02, 1.1180e-01, 1.2563e-01, 1.4195e-01, 1.4067e-01,\n",
+ " 1.5710e-01, 1.6616e-01, 1.7680e-01, 1.8215e-01, 2.8873e-01,\n",
+ " 2.9478e-01, 3.0073e-01, 3.0561e-01, 3.2253e-01, 3.2248e-01,\n",
+ " 3.4815e-01, 3.8435e-01, 4.4838e-01, 4.8266e-01, 5.8324e-01,\n",
+ " 6.1958e-01, 6.4221e-01, 6.6830e-01, 7.0539e-01, 7.3842e-01,\n",
+ " 7.5799e-01, 8.0994e-01, 8.0769e-01, 8.4399e-01, 8.9490e-01,\n",
+ " 8.9686e-01, 8.9048e-01, 9.2633e-01, 1.0361e+00, 1.0936e+00,\n",
+ " 1.0812e+00, 1.1154e+00, 1.1470e+00, 1.1460e+00, 1.1656e+00,\n",
+ " 1.1700e+00, 1.1798e+00, 1.1765e+00, 1.1860e+00, 1.2078e+00,\n",
+ " 1.2313e+00, 1.2569e+00, 1.2722e+00, 1.2794e+00, 1.2748e+00,\n",
+ " 1.2947e+00, 1.2940e+00, 1.3166e+00, 1.3193e+00, 1.3669e+00,\n",
+ " 1.4039e+00, 1.3981e+00, 1.4154e+00, 1.4412e+00, 1.6286e+00,\n",
+ " 1.6277e+00, 1.6349e+00, 1.6406e+00, 1.6420e+00, 1.6641e+00,\n",
+ " 1.6672e+00, 1.6568e+00, 1.6972e+00, 1.7200e+00, 1.7401e+00,\n",
+ " 1.7746e+00, 1.7978e+00, 1.8077e+00, 1.8001e+00, 1.8443e+00,\n",
+ " 1.8455e+00, 1.8621e+00, 1.8777e+00, 1.9216e+00, 1.9216e+00,\n",
+ " 1.9337e+00, 1.9447e+00, 1.9463e+00, 1.9688e+00, 1.9943e+00,\n",
+ " 2.0017e+00, 2.0304e+00, 2.0290e+00, 2.1523e+00, 2.1873e+00,\n",
+ " 2.1857e+00, 2.2069e+00, 2.2201e+00, 2.2317e+00, 2.2487e+00,\n",
+ " 2.2689e+00, 2.2658e+00, 2.2984e+00, 2.3055e+00, 2.3153e+00,\n",
+ " 2.3277e+00, 2.3164e+00, -2.3537e+00, -2.3556e+00, -2.3951e+00,\n",
+ " -2.2735e+00, -2.2700e+00, -2.2406e+00, -2.2392e+00, -2.2806e+00,\n",
+ " -2.2649e+00, -2.2264e+00, -2.1847e+00, -2.1721e+00, -2.2998e+00,\n",
+ " -2.3074e+00, -2.2730e+00, -2.0876e+00, -2.1041e+00, -2.1365e+00,\n",
+ " -2.0971e+00, -2.1630e+00, -2.0427e+00, -1.9508e+00, -2.0174e+00,\n",
+ " -1.9918e+00, -1.9762e+00, -1.9464e+00, -2.0405e+00, -1.9158e+00,\n",
+ " -1.8576e+00, -1.9262e+00, -1.8580e+00, -1.8908e+00, -1.7837e+00,\n",
+ " -1.7404e+00, -1.8266e+00, -1.7896e+00, -1.7744e+00, -1.7861e+00,\n",
+ " -1.6578e+00, -1.7214e+00, -1.5828e+00, -1.6093e+00, -1.5578e+00,\n",
+ " -1.5591e+00, -1.4846e+00, -1.4993e+00, -1.5091e+00, -1.4577e+00,\n",
+ " -1.4351e+00, -1.3813e+00, -1.3467e+00, -1.3686e+00, -1.2636e+00,\n",
+ " -1.2187e+00, -1.2381e+00, -1.0476e+00, -1.0450e+00, -9.5719e-01,\n",
+ " -6.6280e-01, -6.7957e-01, -5.2311e-01, -3.9292e-01, -3.4694e-01,\n",
+ " -2.7141e-01, -2.1141e-01, -1.9284e-01, -2.9014e-02, -8.2851e-02,\n",
+ " 1.1202e-01, 2.6212e-01, 3.3185e-01, 2.7445e-01, 3.0566e-01,\n",
+ " 4.7407e-01, 5.3634e-01, 7.0303e-01, 8.4515e-01, 8.8403e-01,\n",
+ " 9.6265e-01, 1.0807e+00, 1.2028e+00, 1.2579e+00, 1.2459e+00,\n",
+ " 1.3814e+00, 1.4318e+00, 1.4390e+00, 1.5167e+00, 1.4945e+00,\n",
+ " 1.6372e+00, 1.5679e+00, 1.5791e+00, 1.7265e+00, 1.6831e+00,\n",
+ " 1.7620e+00, 1.8049e+00, 1.7676e+00, 1.8118e+00, 1.9101e+00,\n",
+ " 1.8410e+00, 1.8918e+00, 1.8759e+00, 1.8738e+00, 1.9979e+00,\n",
+ " 1.9510e+00, 1.9407e+00, 1.9732e+00, 2.0328e+00, 1.9553e+00,\n",
+ " 1.9690e+00, 2.1409e+00, 2.0641e+00, 2.1046e+00, 2.1248e+00,\n",
+ " 2.1466e+00, 2.1669e+00, 2.1427e+00, 2.0848e+00, 2.0757e+00,\n",
+ " 2.1897e+00, 2.2124e+00, 2.1922e+00, 2.2634e+00, 2.1988e+00,\n",
+ " 2.2759e+00, 2.3182e+00, 2.1913e+00, 2.2827e+00, 2.2021e+00,\n",
+ " 2.2547e+00, 2.2670e+00, 2.3976e+00], dtype=torch.float64)\n"
+ ]
+ }
+ ],
+ "execution_count": 32
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T10:10:59.379157Z",
+ "start_time": "2025-04-30T10:10:58.996269Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import pandas as pd\n",
+ "for key in results:\n",
+ " print(\"#######\", key, \"#######\")\n",
+ " pids = results[key][\"pfcands_pid\"]\n",
+ " print(pd.Series(pids).value_counts(normalize=True))\n",
+ " print(\"dq\", pd.Series(results[key][\"n_dq\"]).value_counts())"
+ ],
+ "id": "1fbd0a62f4b32c62",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "####### Delphes #######\n",
+ "211.0 0.591530\n",
+ "22.0 0.257798\n",
+ "2112.0 0.150672\n",
+ "Name: proportion, dtype: float64\n"
+ ]
+ },
+ {
+ "ename": "KeyError",
+ "evalue": "'n_dq'",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mKeyError\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[35], line 6\u001B[0m\n\u001B[1;32m 4\u001B[0m pids \u001B[38;5;241m=\u001B[39m results[key][\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mpfcands_pid\u001B[39m\u001B[38;5;124m\"\u001B[39m]\n\u001B[1;32m 5\u001B[0m \u001B[38;5;28mprint\u001B[39m(pd\u001B[38;5;241m.\u001B[39mSeries(pids)\u001B[38;5;241m.\u001B[39mvalue_counts(normalize\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mTrue\u001B[39;00m))\n\u001B[0;32m----> 6\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mdq\u001B[39m\u001B[38;5;124m\"\u001B[39m, pd\u001B[38;5;241m.\u001B[39mSeries(\u001B[43mresults\u001B[49m\u001B[43m[\u001B[49m\u001B[43mkey\u001B[49m\u001B[43m]\u001B[49m\u001B[43m[\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mn_dq\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m]\u001B[49m)\u001B[38;5;241m.\u001B[39mvalue_counts())\n",
+ "\u001B[0;31mKeyError\u001B[0m: 'n_dq'"
+ ]
+ }
+ ],
+ "execution_count": 35
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-14T20:11:07.612392Z",
+ "start_time": "2025-05-14T20:11:03.681914Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "bins = {\n",
+ " \"n_pfcands\": np.linspace(0, 600, 50),\n",
+ " \"pfcands_pt\": np.linspace(-0.6, 2, 200),\n",
+ " \"pfcands_eta\": np.linspace(-2.4, 2.4, 200),\n",
+ " \"pfcands_phi\": np.linspace(-3.14, 3.14, 200),\n",
+ " \"pfcands_mass\": np.linspace(0, 2, 100),\n",
+ " \"n_genp\": np.linspace(0,600,50),\n",
+ " \"n_parton_level\": np.linspace(0,600,50),\n",
+ " \"genp_pt\": np.linspace(-1, 3, 200),\n",
+ " \"parton_level_pt\": np.linspace(-1, 3, 200),\n",
+ " \"pt_ch\": np.linspace(-1, 3, 200),\n",
+ " \"pt_nh\": np.linspace(-1, 3, 200),\n",
+ " \"pt_gamma\": np.linspace(-1, 3, 200),\n",
+ " \"E_vis\": np.linspace(500, 10000, 200),\n",
+ " \"n_gamma\": np.linspace(0, 1200, 200),\n",
+ " \"n_ch\": np.linspace(0, 1200, 200),\n",
+ " \"n_nh\": np.linspace(0, 1200, 200),\n",
+ " #\"n_dq\": np.linspace(0, 3, 3)\n",
+ "}\n",
+ "fig, ax = plt.subplots(10, 2, figsize=(10, 20))\n",
+ "for key in results:\n",
+ " for i, (k, v) in enumerate(results[key].items()):\n",
+ " if k == \"pfcands_pid\":\n",
+ " continue\n",
+ " ax[i // 2, i % 2].hist(v, bins=bins[k], alpha=0.5, label=key, density=\"pt\" in k)\n",
+ " ax[i // 2, i % 2].set_title(k)\n",
+ " if k == \"pfcands_pt\" or \"mass\" in k:# or \"_pt\" in k:\n",
+ " if not k == \"pfcands_pt\":\n",
+ " ax[i//2, i%2].set_yscale(\"log\")\n",
+ " #ax[i//2, i%2].set_xscale(\"log\")\n",
+ " ax[i // 2, i % 2].legend()\n",
+ "\n",
+ "fig.show()\n"
+ ],
+ "id": "d819dae53f16cf8",
+ "outputs": [
+ {
+ "ename": "KeyboardInterrupt",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mKeyboardInterrupt\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[12], line 25\u001B[0m\n\u001B[1;32m 23\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m k \u001B[38;5;241m==\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mpfcands_pid\u001B[39m\u001B[38;5;124m\"\u001B[39m:\n\u001B[1;32m 24\u001B[0m \u001B[38;5;28;01mcontinue\u001B[39;00m\n\u001B[0;32m---> 25\u001B[0m \u001B[43max\u001B[49m\u001B[43m[\u001B[49m\u001B[43mi\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m/\u001B[39;49m\u001B[38;5;241;43m/\u001B[39;49m\u001B[43m \u001B[49m\u001B[38;5;241;43m2\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mi\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m%\u001B[39;49m\u001B[43m \u001B[49m\u001B[38;5;241;43m2\u001B[39;49m\u001B[43m]\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mhist\u001B[49m\u001B[43m(\u001B[49m\u001B[43mv\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mbins\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mbins\u001B[49m\u001B[43m[\u001B[49m\u001B[43mk\u001B[49m\u001B[43m]\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43malpha\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;241;43m0.5\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mlabel\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mkey\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mdensity\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mpt\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mk\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 26\u001B[0m ax[i \u001B[38;5;241m/\u001B[39m\u001B[38;5;241m/\u001B[39m \u001B[38;5;241m2\u001B[39m, i \u001B[38;5;241m%\u001B[39m \u001B[38;5;241m2\u001B[39m]\u001B[38;5;241m.\u001B[39mset_title(k)\n\u001B[1;32m 27\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m k \u001B[38;5;241m==\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mpfcands_pt\u001B[39m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mmass\u001B[39m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;129;01min\u001B[39;00m k:\u001B[38;5;66;03m# or \"_pt\" in k:\u001B[39;00m\n",
+ "File \u001B[0;32m/work/gkrzmanc/1gatr/lib/python3.10/site-packages/matplotlib/_api/deprecation.py:453\u001B[0m, in \u001B[0;36mmake_keyword_only..wrapper\u001B[0;34m(*args, **kwargs)\u001B[0m\n\u001B[1;32m 447\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mlen\u001B[39m(args) \u001B[38;5;241m>\u001B[39m name_idx:\n\u001B[1;32m 448\u001B[0m warn_deprecated(\n\u001B[1;32m 449\u001B[0m since, message\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mPassing the \u001B[39m\u001B[38;5;132;01m%(name)s\u001B[39;00m\u001B[38;5;124m \u001B[39m\u001B[38;5;132;01m%(obj_type)s\u001B[39;00m\u001B[38;5;124m \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 450\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mpositionally is deprecated since Matplotlib \u001B[39m\u001B[38;5;132;01m%(since)s\u001B[39;00m\u001B[38;5;124m; the \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 451\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mparameter will become keyword-only in \u001B[39m\u001B[38;5;132;01m%(removal)s\u001B[39;00m\u001B[38;5;124m.\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[1;32m 452\u001B[0m name\u001B[38;5;241m=\u001B[39mname, obj_type\u001B[38;5;241m=\u001B[39m\u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mparameter of \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mfunc\u001B[38;5;241m.\u001B[39m\u001B[38;5;18m__name__\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m()\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[0;32m--> 453\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n",
+ "File \u001B[0;32m/work/gkrzmanc/1gatr/lib/python3.10/site-packages/matplotlib/__init__.py:1521\u001B[0m, in \u001B[0;36m_preprocess_data..inner\u001B[0;34m(ax, data, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1518\u001B[0m \u001B[38;5;129m@functools\u001B[39m\u001B[38;5;241m.\u001B[39mwraps(func)\n\u001B[1;32m 1519\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21minner\u001B[39m(ax, \u001B[38;5;241m*\u001B[39margs, data\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mNone\u001B[39;00m, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs):\n\u001B[1;32m 1520\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m data \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[0;32m-> 1521\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 1522\u001B[0m \u001B[43m \u001B[49m\u001B[43max\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1523\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;28;43mmap\u001B[39;49m\u001B[43m(\u001B[49m\u001B[43mcbook\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43msanitize_sequence\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43margs\u001B[49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1524\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43m{\u001B[49m\u001B[43mk\u001B[49m\u001B[43m:\u001B[49m\u001B[43m \u001B[49m\u001B[43mcbook\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43msanitize_sequence\u001B[49m\u001B[43m(\u001B[49m\u001B[43mv\u001B[49m\u001B[43m)\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43;01mfor\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mk\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mv\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mkwargs\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mitems\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\u001B[43m}\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1526\u001B[0m bound \u001B[38;5;241m=\u001B[39m new_sig\u001B[38;5;241m.\u001B[39mbind(ax, \u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[1;32m 1527\u001B[0m auto_label \u001B[38;5;241m=\u001B[39m (bound\u001B[38;5;241m.\u001B[39marguments\u001B[38;5;241m.\u001B[39mget(label_namer)\n\u001B[1;32m 1528\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m bound\u001B[38;5;241m.\u001B[39mkwargs\u001B[38;5;241m.\u001B[39mget(label_namer))\n",
+ "File \u001B[0;32m/work/gkrzmanc/1gatr/lib/python3.10/site-packages/matplotlib/axes/_axes.py:7006\u001B[0m, in \u001B[0;36mAxes.hist\u001B[0;34m(self, x, bins, range, density, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, **kwargs)\u001B[0m\n\u001B[1;32m 7003\u001B[0m stacked \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mTrue\u001B[39;00m\n\u001B[1;32m 7005\u001B[0m \u001B[38;5;66;03m# Massage 'x' for processing.\u001B[39;00m\n\u001B[0;32m-> 7006\u001B[0m x \u001B[38;5;241m=\u001B[39m \u001B[43mcbook\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_reshape_2D\u001B[49m\u001B[43m(\u001B[49m\u001B[43mx\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[38;5;124;43mx\u001B[39;49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[43m)\u001B[49m\n\u001B[1;32m 7007\u001B[0m nx \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mlen\u001B[39m(x) \u001B[38;5;66;03m# number of datasets\u001B[39;00m\n\u001B[1;32m 7009\u001B[0m \u001B[38;5;66;03m# Process unit information. _process_unit_info sets the unit and\u001B[39;00m\n\u001B[1;32m 7010\u001B[0m \u001B[38;5;66;03m# converts the first dataset; then we convert each following dataset\u001B[39;00m\n\u001B[1;32m 7011\u001B[0m \u001B[38;5;66;03m# one at a time.\u001B[39;00m\n",
+ "File \u001B[0;32m/work/gkrzmanc/1gatr/lib/python3.10/site-packages/matplotlib/cbook.py:1409\u001B[0m, in \u001B[0;36m_reshape_2D\u001B[0;34m(X, name)\u001B[0m\n\u001B[1;32m 1407\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m 1408\u001B[0m is_1d \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mFalse\u001B[39;00m\n\u001B[0;32m-> 1409\u001B[0m xi \u001B[38;5;241m=\u001B[39m \u001B[43mnp\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43masanyarray\u001B[49m\u001B[43m(\u001B[49m\u001B[43mxi\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1410\u001B[0m nd \u001B[38;5;241m=\u001B[39m np\u001B[38;5;241m.\u001B[39mndim(xi)\n\u001B[1;32m 1411\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m nd \u001B[38;5;241m>\u001B[39m \u001B[38;5;241m1\u001B[39m:\n",
+ "\u001B[0;31mKeyboardInterrupt\u001B[0m: "
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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JHm8wp4n9Vf8+8UvfqGRI0eqS5curvOuzp07p88//7xR22mM1NRUSd7398iRI17Xbd26te644w4tX75ce/bs0T/+8Q9NnDhRp0+f1pQpU2ybIwAAQKggUAGN9Pvf/97j5dd/9atfSZL69+/fqPOnpIvnY0m64kf46p0+fVqS54/uvfzyy17fmbLim9/8pqT/269LvfTSS43eVseOHbV48WJJ0kcffeT75AAAAEIMgQpopHPnzmnatGlu5xx9/PHH+tnPfiZJmjp1aqO39cADD+jqq6/WH/7wBz3++OMNzmM6duyY20fkevbsKenieUpfD0979+7VrFmzLO2PN/fff7/i4uK0detWbd682e2x5cuX63/+538arFNVVaWCggKPNxj+7W9/K+n/3pUDAABoTghUQCONHz9ev/vd79StWzf94Ac/0B133KFbbrlFp06d0g9/+EMNHz680dtKTEzUr3/9ayUnJ+vpp59Wenq6RowYoZEjR+qWW25RZmamXn/9ddfyP/7xj9W6dWutXr1a1113nX7wgx/o9ttvV9++fTVkyBBlZGTYtp9dunTRc889J4fDobFjx6pfv34aO3as+vTpo7y8PI/BsaamRnl5eercubNuueUWjR49Wj/4wQ9000036aGHHlJkZKQreAIAADQnBCqgkbKysrR7927169dPf/jDH7Rjxw5de+21Kioq0tq1a5u8vZycHH300UfKz89X27Zt9bvf/U5vvvmmqqqq9PDDD2vUqFGuZfv376/3339fd9xxh06fPq3XX39dp06d0jPPPKNNmzbZuZuSpIkTJ+rNN99Ubm6uPv74Y/32t79V27Zt9eabb2rEiBENlo+Pj9dzzz2n733ve6qsrNTvfvc7/fa3v9X58+f1wx/+UB9++KHuuece2+cJAAAQbA5j58kXQDM0b948zZ8/X08++aTmzZsX7OkAAAAghPAOFQAAAABYRKACADRLS5Ys0ciRI5WVlSWHw+H1ptRXsmHDBt10002KjY1Vp06d9MADD+jEiRP2ThYAELYad41noJn49a9/rV//+teNWrZnz5768Y9/7N8JAfCbJ554Qu3bt9fNN9+sM2fOWNpGQUGB8vLylJubq2effVbHjx/XsmXL9N5772n37t1q06aNvZMGAIQdzqFCi1J/PlRj5ObmaseOHf6dEAC/+eyzz5SVlSVJuuGGG1RZWXnZG1Nf6uTJk8rIyND111+v9957T61atZIkvf7667rnnnu0aNEiPfHEE/6YOgAgjBCoAADNnpVAtW7dOk2ePFkbNmzQ+PHj3R675pprFB0drX379tk8UwBAuOEcKgAAPCguLpYkfeMb32jwWL9+/XTgwAFVVlYGeloAgBDTLM+hqqurU1lZmRISEuRwOII9HQBoMYwxOnv2rFJSUhQREd6v2ZWVlUmSUlNTGzyWmpoqY4zKysrUo0ePBo87nU45nU7X93V1dTp9+rSuuuoq+hIABJi/e1OzDFRlZWVKS0sL9jQAoMU6duyYunTpEuxp+KSqqkqSFB0d3eCxmJgYt2UutWTJkkafrwkACAx/9aZmGagSEhIkXSxaYmJikGcDAC1HRUWF0tLSXMfhcBYXFyfp4rtNsbGxbo9VV1e7LXOpWbNmKS8vz/V9eXm50tPT6UsAEAT+7k3NMlDVf5wiMTGRxgUAQdAcPtaWkpIiSSotLVW3bt3cHistLZXD4XAtc6no6GiP72zRlwAgePzVm8L7A+4AAPhJdna2JOm9995r8Nj777+va6+9VvHx8YGeFgAgxBCoAAAt3tGjR3XgwAF99dVXrrHvfOc7io2NVVFRkWpra13jr7/+uj777DONGzcuGFMFAISYZvmRPwAANm7cqJKSEknSiRMnVFNTo4ULF0qSMjIy3O4tNWHCBO3cuVOHDx9WZmamJKlDhw5asGCBZs6cqSFDhmjMmDEqLS3V0qVL1bNnT02fPj3QuwQACEEEKiBEFLz1qcfxGUMbXpIZwJU9//zz2rlzp9vYnDlzJEm5ubkNbtbrSX5+vq666ioVFBRo2rRpSkxM1KhRo/TTn/6Uj/sBACQRqAAAzdSOHTtsWfa+++7Tfffd5/N8AADNE4FKUm1trdvn5gFJat26tVq1ahXsaQAAACCEtehAZYzR559/rvLychljgj0dhBiHw6GkpCR17ty5WVwCGgAAAPZr0YGqvLxcZ86cUYcOHdSmTRv+0QwXY4zOnTunEydOKDY2Vm3btg32lAAAABCCWmygMsboiy++UGJiopKTk4M9HYSg2NhYOZ1OffHFF0pKSiJwAwAAoIEWG6hqa2tVW1vLHetxWYmJiaqoqFBtba0iI0Pvz4UrAwIAAARXi72x74ULFyQpJP+RjNBR//tR//sCAAAAfF2LDVT1+BgXLoffDwAAAFxOiw9UAAAAAGAVgQoAAAAALOIEIthix44dGjx4sF588UXdd999lrYxaNAgHTlyREeOHLF1bqHE20UkAAAAEJ4IVF6E2j98fb1qW33gqRcREaHExESlpqbqlltu0ZgxY/Ttb3+bc4ZCUKj9LgIAAOD/EKhamDFjxuiuu+6SMUZnz57VJ598ol//+tfasGGDhgwZoldeeYWb2AIAAACNRKBqYW6++Wbde++9bmPLli3TY489pmXLlmnMmDH63e9+F6TZAQAAAOGFi1JArVq10tKlSzVgwAC98cYbevfdd12PlZeX6/HHH1e3bt0UHR2tDh06aMyYMfrss8+uuN0dO3bI4XDol7/8pVasWKEePXooJiZGPXr00IoVK7yuV1ZWpjFjxqhdu3aKi4vTt7/9bX36acOPvTmdTi1evFjXX3+9YmJi1LZtWw0bNkwffvih23J1dXVavny5evfurYSEBCUmJuraa6/V/fffr6+++qoJlWq8grc+9fgFAACA5oV3qOBy//33691339XWrVs1YMAAlZeXq3///jp69Kh++MMf6vrrr9c//vEPPffcc7r11lv1P//zP8rIyLjidlesWKHPP/9cDz30kBISErR582ZNmzZNp0+f1pNPPum27Llz5/TNb35T/fr10+LFi3X48GE9++yz+s53vqOPP/5YrVq1kiR99dVXuuOOO7Rr1y6NHz9eU6ZMUXl5udauXavbbrtN77zzjvr27StJWrRokebOnathw4bp4YcfVqtWrXT48GG99tprcjqdat26tf3FBAAAQItAoIJL7969Jcn1btDcuXP12Wef6f3339e//Mu/uJa77777dOONN+rJJ5/UL3/5yytu99NPP9X+/fvVpUsXSdIjjzyiAQMGaOHChbr//vtd45J08uRJPfroo3rsscdcYx06dNBjjz2mt99+W9/+9rclSUVFRdqxY4feeOMN15gk/fu//7tuuOEGzZw5Uzt27JAk/fd//7euu+46vfbaa27z+ulPf9qE6gAAAAANEajgkpiYKEmqqKiQMUYvvfSSvvnNbyo1NVUnT550LdemTRv169dPv//97xu13XHjxrmFpqioKM2YMUNjx47V66+/rn/7t39zPRYREaFp06a5rX/77bdLkv7+97+7wtOmTZvUs2dP3XLLLW5zk6ShQ4dq/fr1On/+vGJjY5WU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5ca+rVu3VkpKik6ePClJSklJkSSPH9WrH6v/iF+7du0UGxvrcVmn06mTJ08qNzf3sj8/Ojra6ztcAAAAAOAvtrxDVV1drePHj6tTp06SpBtvvFHR0dF67733Giz7/vvvS5L69u17cQIREbr55pv14YcfNniXavfu3TLGuJYFAAAAgFDSpEB16tQpj+Nz5szRhQsXNGzYMEkXL48+bNgw7dixQ//7v//rWq6yslLr1q1T9+7dlZOT4xofM2aMqqqqtGbNGrftLl++XJGRkRo9enRTpgkAAAAAAdGkj/wtXLhQ77//vgYPHqz09HRVVlZq27Zt2r59u2699VbXTXmlixeK+MMf/qBvfetbmjFjhhITE7V27VqVlpZq69atrpv6Shdv4vviiy8qLy9PR44c0XXXXadt27bpv//7v/WTn/xEmZmZtu0wAAAAANilSYFq0KBB2rdvn9avX69Tp06pVatW6t69uxYtWqS8vDy3+0h169ZNf/7zn/XjH/9YP/3pT1VTU6Obb75Zb7zxhoYMGeK23aioKL399tv6yU9+os2bN+vUqVO65pprtGLFCj3yyCP27CkAy7zdj2vG0B4BngkAAEBocRhjTLAnYbeKigolJSWpvLxciYmJwZ4Owhg39r08AhUuxfHXM+oCAMHj72OwLRelAAAAAICWiEAFAAAAABYRqAAAAADAIgIVAAAAAFhEoAIANEt1dXUqKChQz549FRMTo7S0NOXn5+vcuXONWt/hcHj8io+P9/PMAQDhpEmXTQcAIFzMmDFDhYWFGj58uPLz87V//34VFhbqww8/1Ntvv62IiCu/pjhw4EA9+OCDbmOtW7f215QBAGGIQAUAaHb+9re/acWKFRoxYoS2bNniGu/ataumTZuml19+WWPHjr3idrKysnTvvff6c6oAgDBHoALE/aaA5mbz5s0yxmj69Olu45MnT9aPf/xjbdq0qVGBSpJqampUU1PDR/0AAB4RqABYdrkgyk1/EUzFxcWKiIhQTk6O23hMTIz69Omj4uLiRm3n1Vdf1aZNm1RbW6sOHTpo9OjRWrhwoZKSkvwxbQBAGCJQAQCanbKyMiUnJys6OrrBY6mpqdq1a5dqamoUFRXldRs5OTkaOXKkunXrpoqKCm3btk1FRUXauXOndu3addl3rJxOp5xOp+v7iooK33YIABCyCFQAgGanqqrK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Vos2ffp0vffee1q8eLGuvfZaSRefA0ken6uvP09XWrZ++fpl0DQPP/ywsrKylJeX53UZnqvgOnv2rCQpISFB27dvdx27vvvd7yorK0tPPPGEJk6caNvzdOmyLYGvfaM59x1/7JunnhBu7KhLY46/4cjX2jT2mBcREV7vI9jxOxMfH68bbrhB99xzj/r376/Tp09r5cqVGjt2rH7zm99o6NChfpl7OLCzr4XXb5afxMXFyel0enysurratQwCY86cOSoqKtKDDz6oWbNmucbrnwNPz9Wlz9Pllq1fnue06TZt2qS33npLq1atUuvWrb0ux3MVXLGxsZKkMWPGuDXadu3a6Z577tHnn3+uTz75xLbnqSUeJ33tG82579i9b956QrjxtS6NPf6GI19r09hjXrjxtS5//etf1b9/fw0dOlQ///nPNXz4cN1///1699131blzZ02ePFm1tbV+mXs4sLOvEagkpaSk6OTJkx4LWlpaquTk5LB8lTAczZs3TwsXLtSkSZP0i1/8wu2xlJQUSZ4/VlQ/Vv+2bbt27RQbG+txWafTqZMnT3p8ixfeOZ1O5eXl6a677lLnzp118OBBHTx4UCUlJZIu3kfq4MGDOnPmDM9VkHXp0kWS1Llz5waPXX311ZIuftSyKc9TU5ZtCXztG82579i5b5frCeHGl7o05fgbjnz9nWnsMS/c+FqXgoICVVdXa+TIkW7jcXFxuvvuu1VSUqIjR47YPe2wcaW+5nA4XMtciW2BKqRurtVE2dnZqqur0+7du93Gq6urtXfvXvXt29evPx8XzZs3T/Pnz9fEiRO1bt06ORwOt8dvvPFGRUdH67333muw7vvvvy9JrucqIiJCN998sz788MMGB6Ldu3fLGMPz2kTnz5/XiRMntHXrVnXv3t31NWjQIEkXXz3t3r271q1bx3MVZPUnMNefxP919WMdO3ZUdna2JHl9nhwOh2655RZJF/9Rkpqa6nr+Ll1WUsg9T/7sS7169fKpbzTnvmPXvl2pJ4QbX+rSlONvOPL1d6axx7xw42td6oOCp3ehLly44PbfluhKPfDaa69VfHx84zbWpOsLXoZC6OZaTfXRRx9d9jr/Gzdu9NvPxkXz5883ksz48eMve6O673//+yYiIsLs3bvXNVZ/b6Pu3bu73duoqKjI672NIiMjzeHDh23fj+aspqbGvPLK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AAAAAMAiAhUAAAAAWESgAgAAAACLCFQAAAAAYBGBCgAAAAAsIlABAAAAgEUEKgAAAACwiEAFAAAAABYRqAAAAADAIgIVAAAAAFhEoAIAAAAAiwhUAAAAAGARgQoAAAAALCJQAQAAAIBFBCoAAAAAsIhABQAAAAAWEagAAAAAwCICFQAAAABYRKACAAAAAItsC1R1dXUqKChQz549FRMTo7S0NOXn5+vcuXONWt/hcHj8io+Pt2uKAIAWhL4EAAiESLs2NGPGDBUWFmr48OHKz8/X/v37VVhYqA8//FBvv/22IiKunN0GDhyoBx980G2sdevWdk0RANCC0JcAAIFgS6D629/+phUrVmjEiBHasmWLa7xr166aNm2aXn75ZY0dO/aK28nKytK9995rx5QAAC0YfQkAECi2fORv8+bNMsZo+vTpbuOTJ09WXFycNm3a1Oht1dTUqLKy0o5pAQBaKPoSACBQbAlUxcXFioiIUE5Ojtt4TEyM+vTpo+Li4kZt59VXX1VcXJwSEhLUsWNHTZ06VeXl5XZMEQDQgtCXAACBYstH/srKypScnKzo6OgGj6WmpmrXrl2qqalRVFSU123k5ORo5MiR6tatmyoqKrRt2zYVFRVp586d2rVr12VPAnY6nXI6na7vKyoqfNshAEBYoy8BAALFlkBVVVXlsWlJF18NrF/mco3rgw8+cPt+woQJ6t27t2bPnq1nn31Ws2fP9rrukiVLNH/+fAszBwA0R/QlAECg2PKRv7i4OLdX4r6uurratUxTPfroo4qKitLWrVsvu9ysWbNUXl7u+jp27FiTfxYAoPmgLwEAAsWWd6hSUlK0b98+OZ3OBq8IlpaWKjk5+bKvAnrTunVrpaSk6OTJk5ddLjo62usrkQCAloe+BAAIFFveocrOzlZdXZ12797tNl5dXa29e/eqb9++lrZbXV2t48ePq1OnTnZMEwDQQtCXAACBYkugGj16tBwOh5YvX+42vnbtWlVVVWncuHGusUOHDunAgQNuy506dcrjdufMmaMLFy5o2LBhdkwTANBC0JcAAIHiMMYYOzY0depUFRUVafjw4brrrrtcd6S/7bbb9Mc//tF1R/rMzEyVlJTo6z92xowZev/99zV48GClp6ersrJS27Zt0/bt23Xrrbdq+/btio2NbfRcKioqlJSUpPLyciUmJtqxewCARgil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Jj4+3owdO9YUFhaaVatWmVGjRhlJpnfv3qaqqipAe+Efdj7n+fn5Jj4+3kgyjzzyiJ9mHBi+1uXIkSMmMzPTJCcnm8cff9w8//zzZtmyZea+++4zmzdvDsAe+IcvdamtrTUDBgwwERERZtKkSWb16tWmoKDA5OTkGEnmscceC9Be+Ick0759ezNkyBDTrl07k5GR0eRtLFu2zEgyubm5ZvXq1WbOnDmmTZs2plevXqaystL+SQcAfck7epNn9CXv6E2e0Zu8C6XeFBaB6uOPPzYOh8OMGDHCbbywsNBIMi+99JJf1w9Vvu5XcXGxOXPmTIPx2bNnG0lmxYoVts43kOx8zvfs2WNatWplli5dGvaNy466DBgwwHTp0sWUlZX5a5oB52tddu3aZSSZ/7+9u4+tsr7/P/46tfTm0BvBw42tvaEDrOgIW2hlTFNIJNk0uEG+QASBEVddMiC9cTMdAakVujmxrJQxKM5xY1jC+GMukN1l/NgMOhoz4hzUrQwKttkEKi2l9nRtP78/TE849DpYrnNd5waej6SZvc51HT7Xm/a89jqcc66ysrKg7X6/30yaNMlkZmY6veSIOnPmTOC/H3zwwVsOrYsXLxqv12uKiopMf39/YPtbb71lJJlNmzY5tdSIIZdCI5uskUuhkU3WyKabi6VsiotCNfQg+uc//zlo+6effmq8Xq/5+te/7urxscqt83r//feNJPPcc885scyocGo2/f395stf/rJ54oknzNmzZ+M+uMKdy7Fjx4wkU19fb4wxpq+vz1y7ds219UZKuHP57W9/aySZV155ZdhtRUVFJisry9H1RpOd0GpsbDSSzN69e4fdVlBQYB544AGHVhc55FJoZJM1cik0sska2TRy0c6muHgPVVNTkxISElRcXBy0PSUlRTNmzFBTU5Orx8cqt87ro48+kiRNmDAh7DVGi1OzqaurU3NzsxoaGtxYZsSFO5cjR45IknJzczV//nylpqZq9OjRmjp1qvbv3+/aut0W7lyKi4t1991365VXXtHBgwd1/vx5NTc3q6qqSu+99542btzo4upj39D8vvKVrwy7bdasWWpublZ3d3eklxUWcik0sskauRQa2WSNbHKXk9kUF4Wqvb1dPp9PycnJw27Lzs7WpUuX1NfX59rxscqN8xoYGFBNTY0SExO1dOlSp5YacU7M5uzZs3rx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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 12
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:56:02.626682Z",
+ "start_time": "2025-04-30T09:56:02.572415Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "min(results[\"Delphes\"][\"pfcands_pt\"])",
+ "id": "379df7edfcf5942d",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "-0.3010289602264827"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 17
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:56:04.424861Z",
+ "start_time": "2025-04-30T09:56:04.395017Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "min(results[\"CMS FullSim\"][\"pfcands_pt\"])\n",
+ "id": "ddc61b4dc9883c28",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "-0.22177806941733907"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 18
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:56:12.573254Z",
+ "start_time": "2025-04-30T09:56:12.545197Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "min(results[\"CMS FullSim\"][\"pfcands_eta\"])\n",
+ "id": "1205b61b7f7623d3",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "-2.3984375"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 19
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-13T09:08:14.486690Z",
+ "start_time": "2025-05-13T09:08:14.481653Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "np.array(results[\"Delphes\"][\"n_nh\"])\n",
+ "id": "9f80bcfce6445fae",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([0, 0, 0, ..., 0, 0, 0])"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 27
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:56:18.234763Z",
+ "start_time": "2025-04-30T09:56:18.131626Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "t = torch.tensor(results[\"CMS FullSim\"][\"pfcands_pt\"])",
+ "id": "f412edaf53f77bad",
+ "outputs": [],
+ "execution_count": 21
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:56:18.506369Z",
+ "start_time": "2025-04-30T09:56:18.494594Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "t[t<0.222]",
+ "id": "88b97beb3a57c575",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([ 0.2212, 0.2194, 0.2191, ..., -0.2158, -0.2172, -0.2200])"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 22
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:56:18.878548Z",
+ "start_time": "2025-04-30T09:56:18.777117Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import pandas as pd\n",
+ "for key in results_PID:\n",
+ " print(key, \"number of PFCands in sample:\", len(results_PID[key]))\n",
+ " print(pd.value_counts(pd.Series(results_PID[key]), normalize=False))\n"
+ ],
+ "id": "461362524bad047f",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Delphes number of PFCands in sample: 426711\n",
+ "211.0 306595\n",
+ "22.0 95529\n",
+ "2112.0 24587\n",
+ "Name: count, dtype: int64\n",
+ "CMS FullSim number of PFCands in sample: 149427\n",
+ " 22.0 75853\n",
+ " 130.0 28642\n",
+ " 211.0 22569\n",
+ "-211.0 22363\n",
+ "Name: count, dtype: int64\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/tmp/ipykernel_61141/3118960101.py:4: FutureWarning: pandas.value_counts is deprecated and will be removed in a future version. Use pd.Series(obj).value_counts() instead.\n",
+ " print(pd.value_counts(pd.Series(results_PID[key]), normalize=False))\n"
+ ]
+ }
+ ],
+ "execution_count": 23
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-14T20:12:22.593341Z",
+ "start_time": "2025-05-14T20:12:10.328335Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots(1, 2, figsize=(10, 5))\n",
+ "ax[0].hist(results[\"Delphes\"][\"n_pfcands\"], bins=bins[\"n_pfcands\"], histtype=\"step\", density=True, label=\"PFCands\")\n",
+ "ax[1].hist(results[\"Delphes\"][\"pfcands_pt\"], bins=bins[\"pfcands_pt\"], histtype=\"step\", density=True, label=\"PFCands\")\n",
+ "ax[1].hist(results[\"Delphes\"][\"genp_pt\"], bins=bins[\"genp_pt\"], histtype=\"step\", density=True, label=\"Final-state particles\")\n",
+ "ax[0].hist(results[\"Delphes\"][\"n_genp\"], bins=bins[\"n_genp\"], histtype=\"step\", density=True, label=\"Final-state particles\")\n",
+ "ax[0].hist(results[\"Delphes\"][\"n_parton_level\"], bins=bins[\"n_parton_level\"], histtype=\"step\", density=True, label=\"Parton-level particles\")\n",
+ "ax[1].hist(results[\"Delphes\"][\"parton_level_pt\"], bins=bins[\"parton_level_pt\"], histtype=\"step\", density=True, label=\"Parton-level particles\")\n",
+ "\n",
+ "ax[0].set_ylabel(\"Density\")\n",
+ "ax[0].set_xlabel(\"Number of particles\")\n",
+ "ax[1].set_ylabel(\"Density\")\n",
+ "ax[1].set_xlabel(r\"$log_{10}(p_T)$\")\n",
+ "ax[0].grid()\n",
+ "ax[0].legend()\n",
+ "ax[1].grid()\n",
+ "ax[1].legend()\n",
+ "fig.tight_layout()\n",
+ "fig.show()\n",
+ "fig.savefig(\"/work/gkrzmanc/jetclustering/plot_dataset_stats_900_03.pdf\")"
+ ],
+ "id": "71a35d13854c9396",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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kNOnT0MikWD//v1We43k5GR4enri999/t9prEFkDA2qiJujXrx+ys7MdtufU1qqqqlBWVmax8/35559o1aqVxc5nSRqNBuXl5fWWk8lk8PT0tEGNiIjI2Wi1Wpw+fRp9+vSxd1UaZP78+Rg8eDBGjhxptdcYO3YsevfujRdeeMFqr0FkDQyoiZpg4sSJiI6OxooVK5Cfn19veXPzmbds2QI3NzccPHjQsG3RokVwc3PD2bNnMXfuXKhUKigUCgwfPhznz58HAOzevRt9+/aFXC5HREQENm7caPa1U1JSMHDgQCgUCrRp0wb//Oc/UVJSYlKuqKgIL7zwAjp16gSZTIbg4GA89thjuHTpkmidU1JS8Prrr6Njx47w8vLCzp0767wGWq0WK1asQI8ePeDl5YXAwECMGzcO//vf/0zOnZGRgUOHDhmG1y9atMjseTMzMw1ltm/fjjvuuANeXl5o164dFi1aBK1Wa1T+t99+w//7f/8PPXv2hI+PDxQKBaKjo7F582aTc+t/FmfOnMH8+fPRtm1beHl54dNPP4WbmxsA4KOPPjLUU78NMD8P+tSpU5gwYQJat24NmUyG8PBwPPbYY/jjjz/qvH4A8PPPP2PcuHEICgqCTCZD165dsXTpUpM2njlzBhMmTEBYWBhkMhnatGmDYcOGYc+ePfW+BhERWd/Zs2dRUVHhFAF1amoq9u/fj/nz51v9tf75z3/iiy++wJkzZ6z+WkSWIrF3BYickZubG/79739j5MiRWLp0Kd555x2Lv8aUKVOgVCrxr3/9Czdu3MDKlStx77334vXXX8fzzz+P5557DtOmTcP777+PZ599Fj169MCQIUOMznHy5El89tlnmD59Op588kkcOHAAa9aswenTp7F//364u+s+UysqKsLdd9+NK1euYNq0aejZsydycnKwYcMG3HXXXfj555/Rvn17o3MvWLAAGo0G06dPh6+vL7p27VpneyZPnoydO3di5MiReO655/Dnn39i/fr1GDRoEA4fPow+ffrgb3/7G7Zu3Yp58+YhKCgIL730EgDgjjvuqPd6ffXVV7h06RJmzpyJNm3a4KuvvsLixYtx+fJlfPjhh4ZyBw8exA8//IAxY8agQ4cOKC0txa5duzB9+nTcuHEDCQkJonWXy+WIj4+Hm5sb+vTpg61btyIuLg4xMTF45pln6q0fAHz9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w8ORnp5uGF596tQp+Pj4GNazBoABAwbg3nvvRWJioiGg1g/3vuOOO3DHHXc0eErRyZMnoVQqDStf1LZ69WqMGzeO86fJqTDLNxERERGRE9BoNNBqtUbbysvLMWXKFAiCgLlz5xrtq6qqQnl5OTQaDQRBQHl5OSoqKgz7n376aSxfvhzZ2dm4ceMGFi1ahKeeesqwKobeypUrkZqain379gHQBd5SqdTs0l3mnDx5ElFRUaK9119++SVOnz5tWI2EyFmwh5qInFpERESdS04RERG5iiNHjuDpp5/GY489hnbt2uHatWvYtm0bMjMz8e6775ok8tq6datRwk25XI727dsb5lL/61//Ql5eHnr27Inq6mo88sgjogFtz549jQJ5fa+2WGbyutSVkOyhhx5CZWVlo85H5AiYlIyIiIiIyAn8/PPPeP755/Hrr7+iqKgI/v7+uPvuu7FgwQLExMTYpA6CIMDPzw9jxozBf/7zH5u8JpEjY0BNRERERERE1AScQ01ERERERETUBAyoiYiIiIiIiJqAATURERERERFREzCgJiIiIiIiImoCBtRERERERERETcCAmoiIiIiIiKgJGFATERERERERNQEDaiIiIiIiIqImYEBNRERERERE1AQMqImIiIiIiIiagAE1ERERERERURP8f7nQC72F+GqVAAAAAElFTkSuQmCC"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 14
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "26173542a2a972b6"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/data_exploration_comparison_QCD_vs_signal.ipynb b/notebooks/data_exploration_comparison_QCD_vs_signal.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..5531c1bdfb31d8d38dbc5ffca32f3550fc60e433
--- /dev/null
+++ b/notebooks/data_exploration_comparison_QCD_vs_signal.ipynb
@@ -0,0 +1,1179 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-31T10:57:54.370070Z",
+ "start_time": "2025-05-31T10:57:50.042007Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import torch\n",
+ "import sys\n",
+ "import os.path as osp\n",
+ "import os\n",
+ "import sys\n",
+ "import numpy as np\n",
+ "from src.dataset.dataset import SimpleIterDataset, EventDataset, EventDatasetCollection\n",
+ "from src.utils.utils import to_filelist\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import matplotlib\n",
+ "matplotlib.rc('font', size=13)\n",
+ "from src.plotting.plot_event import plot_event_comparison\n",
+ "from src.dataset.functions_data import concat_events\n",
+ "from src.utils.paths import get_path\n",
+ "from dotenv import load_dotenv\n",
+ "load_dotenv()"
+ ],
+ "id": "6bae9707acf4a848",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 1
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-31T10:57:56.609949Z",
+ "start_time": "2025-05-31T10:57:56.601868Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "def remove_from_list(lst):\n",
+ " out = []\n",
+ " for item in lst:\n",
+ " if item in [\"hgcal\", \"data.txt\", \"test_file.root\"]:\n",
+ " continue\n",
+ " out.append(item)\n",
+ " return out\n",
+ "\n",
+ "#path = \"/eos/user/g/gkrzmanc/jetclustering/data/SVJ_std_UL2018_scouting_test_large/SVJ_mMed-700GeV_mDark-20GeV_rinv-0.7_alpha-peak\"\n",
+ "def get_iter(path_to_ds):\n",
+ " return iter(EventDatasetCollection(path_to_ds, args=None))\n",
+ "\n",
+ "inputs = {\n",
+ " \"r_inv.=0.3, m_Z'=900 GeV\": [\"Delphes_020425_test_PU_PFfix_part0/SVJ_mZprime-900_mDark-20_rinv-0.3_alpha-peak\"],\n",
+ " \"QCD\": [\"QCD_test_part0/qcd_test\"]}\n"
+ ],
+ "id": "e7a7ef680143801e",
+ "outputs": [],
+ "execution_count": 2
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-31T10:57:58.118511Z",
+ "start_time": "2025-05-31T10:57:58.031290Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "datasets = {\n",
+ " key: get_iter([get_path(x, \"preprocessed_data\") for x in value]) for key, value in inputs.items()\n",
+ "}"
+ ],
+ "id": "1549361c5b028634",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Getting query for path Delphes_020425_test_PU_PFfix_part0/SVJ_mZprime-900_mDark-20_rinv-0.3_alpha-peak | Preproc. data root= /work/gkrzmanc/jetclustering/preprocessed_data\n",
+ "File: final_gen_particles.pkl\n",
+ "File: final_parton_level_particles.pkl\n",
+ "File: pfcands.pkl\n",
+ "File: matrix_element_gen_particles.pkl\n",
+ "get_pfcands_key\n",
+ "Getting query for path QCD_test_part0/qcd_test | Preproc. data root= /work/gkrzmanc/jetclustering/preprocessed_data\n",
+ "File: final_gen_particles.pkl\n",
+ "File: matrix_element_gen_particles.pkl\n",
+ "File: pfcands.pkl\n",
+ "File: final_parton_level_particles.pkl\n",
+ "get_pfcands_key\n"
+ ]
+ }
+ ],
+ "execution_count": 3
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:52:58.871921Z",
+ "start_time": "2025-04-30T09:52:58.833485Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "e.final_parton_level_particles.pid",
+ "id": "baf454ab625e31d0",
+ "outputs": [
+ {
+ "ename": "NameError",
+ "evalue": "name 'e' is not defined",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mNameError\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[8], line 1\u001B[0m\n\u001B[0;32m----> 1\u001B[0m \u001B[43me\u001B[49m\u001B[38;5;241m.\u001B[39mfinal_parton_level_particles\u001B[38;5;241m.\u001B[39mpid\n",
+ "\u001B[0;31mNameError\u001B[0m: name 'e' is not defined"
+ ]
+ }
+ ],
+ "execution_count": 8
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-31T10:58:01.440411Z",
+ "start_time": "2025-05-31T10:58:01.074984Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "e = next(datasets[\"QCD\"])\n",
+ "# print"
+ ],
+ "id": "9240584690041d12",
+ "outputs": [],
+ "execution_count": 4
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-31T10:58:55.184136Z",
+ "start_time": "2025-05-31T10:58:55.157910Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "for i in range(len(e.pfcands)):\n",
+ " # print pt,eta,phi,mass,charge\n",
+ " print(e.pfcands.pt[i].item(), e.pfcands.eta[i].item(), e.pfcands.phi[i].item(), e.pfcands.mass[i].item(), e.pfcands.charge[i].item())"
+ ],
+ "id": "1aac41993f716f83",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1.285908579826355 -2.2064461708068848 2.6301612854003906 0.9382699728012085 1.0\n",
+ "0.7487459778785706 -2.094208240509033 -0.05120047181844711 0.4936800003051758 -1.0\n",
+ "0.5246888995170593 -2.007927417755127 2.989550828933716 0.4936800003051758 -1.0\n",
+ "2.7525248527526855 -1.9870414733886719 -0.4528072476387024 0.13956999778747559 1.0\n",
+ "0.7956375479698181 -2.04066801071167 2.194350004196167 0.13956999778747559 -1.0\n",
+ "0.9809597134590149 -1.8432270288467407 -2.1718909740448 0.13956999778747559 1.0\n",
+ "0.6347672343254089 -1.8870458602905273 -2.357295513153076 0.13956999778747559 -1.0\n",
+ "0.5286186337471008 -1.8677940368652344 -1.5477248430252075 0.13956999778747559 -1.0\n",
+ "11.700090408325195 -1.7546323537826538 -0.2974643111228943 0.13956999778747559 1.0\n",
+ "4.672840118408203 -1.7406619787216187 -0.5989688038825989 0.13956999778747559 -1.0\n",
+ "0.9087695479393005 -1.68337881565094 -2.4570295810699463 0.13956999778747559 -1.0\n",
+ "3.460341215133667 -1.703657627105713 -0.5562939047813416 0.13956999778747559 1.0\n",
+ "1.8114593029022217 -1.3267972469329834 -0.5191969275474548 0.4936800003051758 -1.0\n",
+ "1.7149032354354858 -1.1945360898971558 0.32848119735717773 0.4936800003051758 -1.0\n",
+ "1.2845592498779297 -1.03621506690979 1.9651798009872437 0.4936800003051758 1.0\n",
+ "0.8349813222885132 -0.5699279308319092 -0.029887989163398743 0.13956999778747559 1.0\n",
+ "1.1308070421218872 -0.4994378685951233 2.56583833694458 0.13956999778747559 1.0\n",
+ "0.8581411838531494 -0.4269869029521942 0.5446347594261169 0.13956999778747559 -1.0\n",
+ "1.0720726251602173 -0.3555384576320648 -3.059396505355835 0.13956999778747559 1.0\n",
+ "1.3427362442016602 -0.1894076019525528 -2.8412978649139404 0.13956999778747559 -1.0\n",
+ "1.3493661880493164 0.4127936065196991 1.7053676843643188 0.13956999778747559 1.0\n",
+ "1.55831778049469 0.4903299808502197 -1.5499778985977173 0.13956999778747559 1.0\n",
+ "6.850871562957764 0.4772738814353943 -1.4543260335922241 0.13956999778747559 1.0\n",
+ "8.582344055175781 0.5117385387420654 -1.4390026330947876 0.4936800003051758 1.0\n",
+ "7.369996070861816 0.4535500705242157 -1.4423576593399048 0.4936800003051758 -1.0\n",
+ "1.6464149951934814 0.5791456699371338 -1.9467434883117676 0.4936800003051758 1.0\n",
+ "21.498641967773438 0.5266798138618469 -1.4554439783096313 0.4936800003051758 -1.0\n",
+ "8.963800430297852 0.5426040291786194 -1.3467090129852295 0.13956999778747559 -1.0\n",
+ "1.332951545715332 0.6667371988296509 -1.456124186515808 0.13956999778747559 -1.0\n",
+ "1.4493573904037476 0.7821112275123596 1.338742971420288 0.13956999778747559 -1.0\n",
+ "2.704180955886841 0.9362266063690186 1.8429251909255981 0.13956999778747559 1.0\n",
+ "18.941211700439453 0.9151712656021118 2.007201910018921 0.4936800003051758 1.0\n",
+ "16.181575775146484 0.8733822107315063 2.063425064086914 0.0005110002239234746 -1.0\n",
+ "4.140904426574707 0.9097205996513367 2.311692476272583 0.13956999778747559 1.0\n",
+ "1.65585196018219 0.9911935329437256 -2.927703619003296 0.13956999778747559 -1.0\n",
+ "0.8846070766448975 1.0426397323608398 1.066613793373108 0.13956999778747559 1.0\n",
+ "1.054222583770752 0.9839426279067993 1.3207497596740723 0.9382699728012085 1.0\n",
+ "2.8340156078338623 1.0142217874526978 1.9148632287979126 0.13956999778747559 -1.0\n",
+ "3.116788387298584 1.0746370553970337 1.7928866147994995 0.13956999778747559 -1.0\n",
+ "1.8012828826904297 1.1586496829986572 1.6795539855957031 0.13956999778747559 1.0\n",
+ "3.0504701137542725 1.1395117044448853 1.8572102785110474 0.13956999778747559 -1.0\n",
+ "2.317504405975342 1.235701084136963 1.8641473054885864 0.13956999778747559 -1.0\n",
+ "1.3057663440704346 1.4062622785568237 -2.100675582885742 0.13956999778747559 1.0\n",
+ "0.8453368544578552 1.419650673866272 -2.91204571723938 0.13956999778747559 -1.0\n",
+ "0.5769703984260559 1.603403091430664 -2.7231976985931396 0.13956999778747559 1.0\n",
+ "0.8172481656074524 1.690572738647461 -2.174063205718994 0.13956999778747559 1.0\n",
+ "0.7432761788368225 1.9709503650665283 -0.6545511484146118 0.13956999778747559 1.0\n",
+ "1.003330111503601 1.957755446434021 0.7579545378684998 0.13956999778747559 -1.0\n",
+ "1.8586223125457764 2.074205160140991 1.968035340309143 0.9382699728012085 -1.0\n",
+ "8.109560012817383 2.1814541816711426 2.3149867057800293 0.13956999778747559 1.0\n",
+ "0.6520617604255676 2.3831369876861572 -1.781076431274414 0.4936800003051758 -1.0\n",
+ "0.550498902797699 2.361708164215088 1.9065485000610352 0.13956999778747559 1.0\n",
+ "1.11271071434021 -2.3813540935516357 0.09735637158155441 0.0 0.0\n",
+ "1.5287894010543823 -2.221574068069458 -2.210566759109497 -8.429369557916289e-08 0.0\n",
+ "0.6183608770370483 -2.221240282058716 0.6431254148483276 -4.214684778958144e-08 0.0\n",
+ "1.211024522781372 -1.9566999673843384 2.333557367324829 5.960464477539063e-08 0.0\n",
+ "0.6445324420928955 -1.9420228004455566 2.208566188812256 2.9802322387695312e-08 0.0\n",
+ "0.7663082480430603 -1.9107446670532227 -1.6390632390975952 0.0 0.0\n",
+ "0.6305390000343323 -1.8952817916870117 -2.6273038387298584 2.9802322387695312e-08 0.0\n",
+ "1.6763824224472046 -1.8914414644241333 -0.3428950607776642 0.0 0.0\n",
+ "0.9485975503921509 -1.8628748655319214 1.868783950805664 4.214684778958144e-08 0.0\n",
+ "1.5745559930801392 -1.8449265956878662 -0.42849770188331604 -8.429369557916289e-08 0.0\n",
+ "2.108532190322876 -1.8357230424880981 -0.3890358805656433 -8.429369557916289e-08 0.0\n",
+ "3.032390594482422 -1.825714111328125 -0.3301529586315155 2.0647654253025394e-07 0.0\n",
+ "2.1467669010162354 -1.8234453201293945 -0.28642016649246216 8.429369557916289e-08 0.0\n",
+ "1.2778874635696411 -1.7949914932250977 -0.5542489886283875 4.214684778958144e-08 0.0\n",
+ "0.912905216217041 -1.6805322170257568 1.1381043195724487 -5.1619135632563484e-08 0.0\n",
+ "1.2532317638397217 -1.4871019124984741 -1.4817794561386108 0.0 0.0\n",
+ "1.5387523174285889 -1.4224203824996948 1.4819539785385132 0.0 0.0\n",
+ "2.6689887046813965 -1.358622670173645 0.7036111354827881 5.960464477539063e-08 0.0\n",
+ "2.3188722133636475 -1.3341741561889648 -1.752328872680664 8.429369557916289e-08 0.0\n",
+ "0.9236962199211121 -1.3245621919631958 2.707490921020508 0.0 0.0\n",
+ "1.8177824020385742 -1.3222960233688354 -2.190955400466919 -8.429369557916289e-08 0.0\n",
+ "1.052416443824768 -1.1373424530029297 -2.9189302921295166 2.107342389479072e-08 0.0\n",
+ "2.123594045639038 -1.0880649089813232 -1.0246020555496216 -7.300048565639372e-08 0.0\n",
+ "1.964095950126648 -1.0772368907928467 2.488572597503662 4.214684778958144e-08 0.0\n",
+ "3.922567367553711 -1.0374717712402344 0.7515174150466919 -8.429369557916289e-08 0.0\n",
+ "2.100248336791992 -0.8209442496299744 2.760209560394287 4.214684778958144e-08 0.0\n",
+ "0.9352098703384399 -0.7315458059310913 -1.216559648513794 -1.4901161193847656e-08 0.0\n",
+ "2.568833827972412 -0.7045775055885315 1.833177924156189 -4.214684778958144e-08 0.0\n",
+ "1.773956060409546 -0.6078402400016785 2.5342376232147217 -4.214684778958144e-08 0.0\n",
+ "1.5694565773010254 -0.5785274505615234 2.5093085765838623 2.107342389479072e-08 0.0\n",
+ "6.7839274406433105 -0.56248939037323 -2.986403703689575 8.429369557916289e-08 0.0\n",
+ "1.114939570426941 -0.5575534105300903 1.69455087184906 0.0 0.0\n",
+ "5.507236480712891 -0.5244992971420288 1.4929091930389404 0.0 0.0\n",
+ "1.4401556253433228 -0.43264350295066833 -0.8002614974975586 -2.107342389479072e-08 0.0\n",
+ "0.9767805337905884 -0.4173221290111542 2.409954309463501 -1.4901161193847656e-08 0.0\n",
+ "1.0076097249984741 -0.33927080035209656 -0.8337658643722534 0.0 0.0\n",
+ "0.9146650433540344 -0.25581979751586914 2.703824281692505 -1.053671194739536e-08 0.0\n",
+ "2.7623322010040283 -0.23812629282474518 1.6750667095184326 4.214684778958144e-08 0.0\n",
+ "3.0144832134246826 -0.1469791680574417 -2.739244222640991 0.0 0.0\n",
+ "1.2508047819137573 -0.10098464041948318 1.2938188314437866 -2.107342389479072e-08 0.0\n",
+ "1.5031671524047852 -0.08642241358757019 0.2731858789920807 0.0 0.0\n",
+ "1.6019104719161987 0.04195768013596535 2.943544864654541 2.9802322387695312e-08 0.0\n",
+ "1.2830278873443604 0.10771942883729935 -1.7636317014694214 1.4901161193847656e-08 0.0\n",
+ "1.0977004766464233 0.12400612235069275 -2.623702049255371 1.4901161193847656e-08 0.0\n",
+ "2.416353940963745 0.14923568069934845 -2.7312326431274414 2.9802322387695312e-08 0.0\n",
+ "0.9454912543296814 0.16614419221878052 -0.15826834738254547 -1.053671194739536e-08 0.0\n",
+ "1.4195258617401123 0.1856943517923355 -1.3715684413909912 0.0 0.0\n",
+ "1.466599464416504 0.19532646238803864 -2.791978597640991 0.0 0.0\n",
+ "1.2122124433517456 0.33461156487464905 -2.915593385696411 0.0 0.0\n",
+ "1.063982367515564 0.3451996445655823 2.4413726329803467 -1.4901161193847656e-08 0.0\n",
+ "1.974306344985962 0.40378034114837646 -1.3983423709869385 0.0 0.0\n",
+ "1.2610113620758057 0.4231224060058594 1.3117077350616455 -2.5809567816281742e-08 0.0\n",
+ "1.067973017692566 0.4646882116794586 -1.5197961330413818 0.0 0.0\n",
+ "0.9496509432792664 0.454303115606308 -1.5131986141204834 1.4901161193847656e-08 0.0\n",
+ "5.379319190979004 0.507723867893219 -1.5240904092788696 -1.1920928955078125e-07 0.0\n",
+ "1.0865429639816284 0.5226010084152222 -1.3985254764556885 2.107342389479072e-08 0.0\n",
+ "2.5317349433898926 0.5376036763191223 -1.3957425355911255 -4.214684778958144e-08 0.0\n",
+ "2.101804256439209 0.567628800868988 -1.4079632759094238 -2.9802322387695312e-08 0.0\n",
+ "1.073519229888916 0.5969709753990173 2.5630249977111816 -2.5809567816281742e-08 0.0\n",
+ "1.2746238708496094 0.6607993841171265 -2.3673558235168457 -2.9802322387695312e-08 0.0\n",
+ "1.4170644283294678 0.7265937924385071 -1.0004215240478516 0.0 0.0\n",
+ "21.549448013305664 0.7210296988487244 2.681602716445923 3.3717478231665154e-07 0.0\n",
+ "1.186550498008728 0.9094470739364624 -1.1081290245056152 2.9802322387695312e-08 0.0\n",
+ "5.117948055267334 0.9290409684181213 2.0253491401672363 -8.429369557916289e-08 0.0\n",
+ "1.4861501455307007 0.927351713180542 2.08944034576416 2.9802322387695312e-08 0.0\n",
+ "1.6318336725234985 0.9757713675498962 2.031212568283081 0.0 0.0\n",
+ "2.2725889682769775 1.0470476150512695 1.774751901626587 4.214684778958144e-08 0.0\n",
+ "2.2264885902404785 1.0503500699996948 2.0158731937408447 4.214684778958144e-08 0.0\n",
+ "2.373934507369995 1.0720634460449219 1.7128148078918457 5.960464477539063e-08 0.0\n",
+ "1.510032296180725 1.0847829580307007 1.788780689239502 -4.214684778958144e-08 0.0\n",
+ "1.0372703075408936 1.1195467710494995 1.7879420518875122 -2.107342389479072e-08 0.0\n",
+ "1.6704843044281006 1.1290236711502075 2.63218092918396 0.0 0.0\n",
+ "1.5184695720672607 1.1395208835601807 0.6326195597648621 0.0 0.0\n",
+ "2.458073854446411 1.1461107730865479 2.1871731281280518 -5.960464477539063e-08 0.0\n",
+ "0.9845534563064575 1.1658501625061035 -2.487612009048462 4.214684778958144e-08 0.0\n",
+ "1.1499491930007935 1.2241127490997314 2.0117104053497314 0.0 0.0\n",
+ "2.342416524887085 1.2601044178009033 -2.865402936935425 8.429369557916289e-08 0.0\n",
+ "1.6687431335449219 1.264404535293579 -2.7039778232574463 0.0 0.0\n",
+ "0.942179262638092 1.2608128786087036 -2.173363447189331 2.107342389479072e-08 0.0\n",
+ "2.430110216140747 1.3443554639816284 1.084045648574829 0.0 0.0\n",
+ "1.1220529079437256 1.3586798906326294 -2.7192015647888184 2.9802322387695312e-08 0.0\n",
+ "0.9340591430664062 1.407522201538086 -1.102454662322998 -2.9802322387695312e-08 0.0\n",
+ "1.0246495008468628 1.462624192237854 1.6913436651229858 0.0 0.0\n",
+ "1.4762156009674072 1.5041680335998535 -2.0925133228302 -5.960464477539063e-08 0.0\n",
+ "1.1961791515350342 1.6974965333938599 2.9264731407165527 -4.214684778958144e-08 0.0\n",
+ "1.170003056526184 1.7321628332138062 -1.885603904724121 7.300048565639372e-08 0.0\n",
+ "0.8677659034729004 1.776269555091858 -1.0198577642440796 2.9802322387695312e-08 0.0\n",
+ "1.2435728311538696 1.792218565940857 2.3297061920166016 4.214684778958144e-08 0.0\n",
+ "1.5453228950500488 1.886936902999878 1.781978964805603 0.0 0.0\n",
+ "1.3733431100845337 1.930077075958252 -1.5155688524246216 0.0 0.0\n",
+ "1.8659189939498901 1.9565192461013794 -2.7270472049713135 -8.429369557916289e-08 0.0\n",
+ "0.7111741900444031 1.9646193981170654 0.9764125943183899 0.0 0.0\n",
+ "0.9559435248374939 1.990791916847229 -1.3449255228042603 -4.214684778958144e-08 0.0\n",
+ "0.5481534004211426 2.0411131381988525 2.115036964416504 2.9802322387695312e-08 0.0\n",
+ "0.6668163537979126 2.11537766456604 -2.5837104320526123 4.214684778958144e-08 0.0\n",
+ "0.8508790731430054 2.116328001022339 2.6630513668060303 -5.960464477539063e-08 0.0\n",
+ "0.574717104434967 2.1371636390686035 -1.8287789821624756 0.0 0.0\n",
+ "0.8047783970832825 2.178757667541504 -1.245346188545227 -7.300048565639372e-08 0.0\n",
+ "0.8451277017593384 2.2011194229125977 -2.35445237159729 5.960464477539063e-08 0.0\n",
+ "0.5195921659469604 2.2657599449157715 1.3243736028671265 5.1619135632563484e-08 0.0\n",
+ "1.773646593093872 2.3771986961364746 -1.769016981124878 -1.1920928955078125e-07 0.0\n",
+ "0.8486307263374329 2.3816046714782715 2.2308528423309326 5.960464477539063e-08 0.0\n",
+ "0.5535151362419128 2.3867456912994385 2.7641613483428955 0.0 0.0\n",
+ "2.14668345451355 -2.3751988410949707 2.311453342437744 0.0 0.0\n",
+ "0.6837480664253235 -2.186457633972168 -2.4202277660369873 7.300048565639372e-08 0.0\n",
+ "1.3086609840393066 -2.2517738342285156 -2.0693366527557373 1.1920928955078125e-07 0.0\n",
+ "1.37867271900177 -2.3172683715820312 0.28218093514442444 1.1920928955078125e-07 0.0\n",
+ "1.4008444547653198 -2.1907434463500977 1.6201627254486084 -1.4600097131278744e-07 0.0\n",
+ "0.6493402123451233 -2.285156726837158 2.7235107421875 -4.214684778958144e-08 0.0\n",
+ "1.9425572156906128 -2.1691806316375732 -1.8143287897109985 -1.6858739115832577e-07 0.0\n",
+ "4.072310447692871 -2.1499369144439697 -0.32157376408576965 -2.384185791015625e-07 0.0\n",
+ "2.0302693843841553 -2.0925817489624023 0.8865287899971008 -1.1920928955078125e-07 0.0\n",
+ "0.6822447180747986 -2.1702165603637695 2.6732733249664307 5.960464477539063e-08 0.0\n",
+ "2.26128888130188 -2.0112273693084717 -0.5584373474121094 0.0 0.0\n",
+ "0.7309778332710266 -1.9732179641723633 -0.48347586393356323 5.1619135632563484e-08 0.0\n",
+ "0.9792591333389282 -1.9414142370224 1.3102360963821411 -5.960464477539063e-08 0.0\n",
+ "0.7947579026222229 -1.871991515159607 0.043286506086587906 4.214684778958144e-08 0.0\n",
+ "2.9958581924438477 -1.894801139831543 1.3340555429458618 0.0 0.0\n",
+ "1.3717169761657715 -1.770559310913086 0.2786767780780792 5.960464477539063e-08 0.0\n",
+ "1.6252373456954956 -1.6567153930664062 -0.9181476831436157 -1.1920928955078125e-07 0.0\n",
+ "1.0862658023834229 -1.669396996498108 0.12108343839645386 5.960464477539063e-08 0.0\n",
+ "0.9765737056732178 -1.709842324256897 2.9964423179626465 4.214684778958144e-08 0.0\n",
+ "1.3598674535751343 -1.6167751550674438 -1.387428641319275 -5.960464477539063e-08 0.0\n",
+ "1.540661096572876 -1.6482267379760742 -0.6648080348968506 -5.960464477539063e-08 0.0\n",
+ "0.9882071614265442 -1.5459697246551514 3.0894415378570557 4.214684778958144e-08 0.0\n",
+ "5.031430721282959 -1.3029768466949463 0.6553076505661011 -1.1920928955078125e-07 0.0\n",
+ "4.969926357269287 -0.7845442891120911 0.1257995218038559 0.0 0.0\n",
+ "3.623232126235962 -0.729340672492981 1.2001070976257324 8.429369557916289e-08 0.0\n",
+ "2.3016204833984375 -0.7202723622322083 2.8280344009399414 -4.214684778958144e-08 0.0\n",
+ "3.707531452178955 0.10967028141021729 2.6346709728240967 0.0 0.0\n",
+ "4.368841171264648 0.27448317408561707 2.8184525966644287 0.0 0.0\n",
+ "5.135048866271973 0.3629467785358429 -1.9716287851333618 0.0 0.0\n",
+ "6.2958502769470215 0.5086323022842407 -1.33573317527771 1.1920928955078125e-07 0.0\n",
+ "18.9145450592041 0.5627573132514954 -1.526337742805481 4.129530850605079e-07 0.0\n",
+ "27.008743286132812 0.5341193675994873 -1.4042218923568726 3.3717478231665154e-07 0.0\n",
+ "4.9520182609558105 0.8790699243545532 1.5594884157180786 0.0 0.0\n",
+ "9.025590896606445 0.952949583530426 1.991207242012024 0.0 0.0\n",
+ "2.931777238845825 0.9628041982650757 0.594099760055542 0.0 0.0\n",
+ "7.537154197692871 1.0371758937835693 1.971123456954956 2.384185791015625e-07 0.0\n",
+ "1.747841715812683 0.9850072860717773 3.0346620082855225 2.9802322387695312e-08 0.0\n",
+ "4.371508598327637 1.1126658916473389 2.414412260055542 -8.429369557916289e-08 0.0\n",
+ "4.516269683837891 1.2004128694534302 -1.5071179866790771 1.6858739115832577e-07 0.0\n",
+ "1.1334846019744873 1.6010987758636475 0.7184727787971497 4.214684778958144e-08 0.0\n",
+ "1.9245989322662354 1.7122374773025513 -0.4310254156589508 1.0323827126512697e-07 0.0\n",
+ "0.6634104251861572 1.8963481187820435 -2.920619249343872 -5.1619135632563484e-08 0.0\n",
+ "2.821107864379883 2.0347177982330322 -1.4565924406051636 -1.1920928955078125e-07 0.0\n",
+ "0.7319841384887695 1.9863393306732178 0.5638716220855713 0.0 0.0\n",
+ "3.1192986965179443 2.1410231590270996 -2.515263557434082 2.384185791015625e-07 0.0\n",
+ "1.8092724084854126 2.1304163932800293 -1.3424131870269775 -8.429369557916289e-08 0.0\n",
+ "2.0621554851531982 2.0444157123565674 -1.0585908889770508 0.0 0.0\n",
+ "1.0223002433776855 2.093787431716919 0.09411664307117462 8.429369557916289e-08 0.0\n",
+ "3.8310790061950684 2.1458427906036377 2.119062900543213 -2.384185791015625e-07 0.0\n",
+ "0.8777185082435608 2.09102201461792 2.960874319076538 -4.214684778958144e-08 0.0\n",
+ "0.6919015645980835 2.1753132343292236 -2.4146268367767334 4.214684778958144e-08 0.0\n",
+ "1.3393781185150146 2.2663276195526123 -1.5143184661865234 -8.429369557916289e-08 0.0\n",
+ "1.5414893627166748 2.301482915878296 -1.2570381164550781 0.0 0.0\n",
+ "1.2063852548599243 2.2947213649749756 2.9315013885498047 8.429369557916289e-08 0.0\n",
+ "0.64225172996521 2.3136825561523438 3.0582072734832764 0.0 0.0\n",
+ "0.8877096176147461 2.3556394577026367 -0.6877276301383972 0.0 0.0\n",
+ "0.5291316509246826 2.3665153980255127 0.487789511680603 4.214684778958144e-08 0.0\n"
+ ]
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-13T08:51:59.698564Z",
+ "start_time": "2025-05-13T08:51:58.939680Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "pid_masses = {}\n",
+ "for i in range(100):\n",
+ " e = next(datasets[\"CMS FullSim\"])\n",
+ " for i in range(len(e.pfcands)):\n",
+ " pid = e.pfcands.pid[i].item()\n",
+ " if pid not in pid_masses:\n",
+ " pid_masses[pid] = []\n",
+ " pid_masses[pid].append(e.pfcands.mass[i].item())"
+ ],
+ "id": "f16775ce378fd545",
+ "outputs": [],
+ "execution_count": 6
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "source": "e = next(datasets[\"CMS FullSim\"])",
+ "id": "3b87ced12eea20ac",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "source": "pid_masses[211]",
+ "id": "b7c865969840fb02",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-27T15:00:46.445192Z",
+ "start_time": "2025-05-27T15:00:46.424756Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "from tqdm import tqdm\n",
+ "ch_pids = torch.tensor([211, -211])\n",
+ "nh_pids = torch.tensor([130, 2112.0])\n",
+ "def get_stats(ds):\n",
+ " LE_pfcands_PID= []\n",
+ " result = {\n",
+ " \"n_pfcands\": [],\n",
+ " \"pfcands_pt\": [],\n",
+ " \"pfcands_eta\": [],\n",
+ " \"pfcands_phi\": [],\n",
+ " \"pfcands_pid\": [],\n",
+ " \"pfcands_mass\": [],\n",
+ " \"n_genp\": [],\n",
+ " \"n_parton_level\": [],\n",
+ " \"genp_pt\": [],\n",
+ " \"parton_level_pt\": [],\n",
+ " \"pt_ch\": [], # low-pt CH\n",
+ " \"pt_nh\": [], # low-pt NH\n",
+ " \"pt_gamma\": [],\n",
+ " \"E_vis\": [],\n",
+ " \"n_ch\": [],\n",
+ " \"n_nh\": [],\n",
+ " \"n_gamma\": []\n",
+ " # \"n_dq\": []\n",
+ " }\n",
+ " for _ in tqdm(range(10000)):\n",
+ " event = next(ds)\n",
+ " result[\"n_pfcands\"].append(len(event.pfcands))\n",
+ " result[\"pfcands_pt\"] += torch.log10(event.pfcands.pt).tolist()\n",
+ " result[\"pfcands_eta\"] += event.pfcands.eta.tolist()\n",
+ " result[\"pfcands_phi\"] += event.pfcands.phi.tolist()\n",
+ " result[\"pfcands_pid\"] += event.pfcands.pid.tolist()\n",
+ " result[\"pfcands_mass\"] += event.pfcands.mass.tolist()\n",
+ " result[\"n_genp\"].append(len(event.final_gen_particles))\n",
+ " result[\"n_parton_level\"].append(len(event.final_parton_level_particles))\n",
+ " result[\"genp_pt\"] += torch.log10(event.final_gen_particles.pt).tolist()\n",
+ " result[\"parton_level_pt\"] += torch.log10(event.final_parton_level_particles.pt).tolist()\n",
+ "# result[\"pt_ch\"] += event.pfcands.pt[event.pfcands.pid.isin(ch_pids)].tolist()\n",
+ " #result[\"n_dq\"].append(len(event.matrix_element_gen_particles))\n",
+ " result[\"pt_ch\"] += torch.log10(event.pfcands.pt[torch.isin(event.pfcands.pid, ch_pids)]).tolist()\n",
+ " result[\"pt_nh\"] += torch.log10(event.pfcands.pt[torch.isin(event.pfcands.pid, nh_pids)]).tolist()\n",
+ " result[\"pt_gamma\"] += torch.log10(event.pfcands.pt[event.pfcands.pid == 22]).tolist()\n",
+ " result[\"E_vis\"].append(torch.sum(event.pfcands.E).item())\n",
+ " result[\"n_ch\"].append(torch.isin(event.pfcands.pid, ch_pids).sum().item())\n",
+ " result[\"n_nh\"].append(torch.isin(event.pfcands.pid, nh_pids).sum().item())\n",
+ " result[\"n_gamma\"].append((event.pfcands.pid == 22).sum().item())\n",
+ " return result, LE_pfcands_PID"
+ ],
+ "id": "e0d491f2943f20e9",
+ "outputs": [],
+ "execution_count": 4
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-27T15:01:46.975430Z",
+ "start_time": "2025-05-27T15:00:50.166395Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "results = {\n",
+ " key: get_stats(value)[0] for key, value in datasets.items()\n",
+ "}\n",
+ "\n",
+ "#results_PID = {\n",
+ "# key: get_stats(value)[1] for key, value in datasets.items()\n",
+ "#}"
+ ],
+ "id": "87c6ab0ccf50fa58",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 10000/10000 [00:31<00:00, 322.14it/s]\n",
+ "100%|██████████| 10000/10000 [00:25<00:00, 388.36it/s]\n"
+ ]
+ }
+ ],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-27T15:03:25.674440Z",
+ "start_time": "2025-05-27T15:03:25.324847Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots(figsize=(4,4))\n",
+ "for key in results:\n",
+ " ax.hist(results[key][\"n_pfcands\"], bins=np.linspace(0, 600, 100), histtype=\"step\", label=key, density=0)\n",
+ "\n",
+ "ax.legend()\n",
+ "fig.show()"
+ ],
+ "id": "60d9dfce90fc3301",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 9
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T10:10:59.379157Z",
+ "start_time": "2025-04-30T10:10:58.996269Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import pandas as pd\n",
+ "for key in results:\n",
+ " print(\"#######\", key, \"#######\")\n",
+ " pids = results[key][\"pfcands_pid\"]\n",
+ " print(pd.Series(pids).value_counts(normalize=True))\n",
+ " print(\"dq\", pd.Series(results[key][\"n_dq\"]).value_counts())"
+ ],
+ "id": "1fbd0a62f4b32c62",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "####### Delphes #######\n",
+ "211.0 0.591530\n",
+ "22.0 0.257798\n",
+ "2112.0 0.150672\n",
+ "Name: proportion, dtype: float64\n"
+ ]
+ },
+ {
+ "ename": "KeyError",
+ "evalue": "'n_dq'",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mKeyError\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[35], line 6\u001B[0m\n\u001B[1;32m 4\u001B[0m pids \u001B[38;5;241m=\u001B[39m results[key][\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mpfcands_pid\u001B[39m\u001B[38;5;124m\"\u001B[39m]\n\u001B[1;32m 5\u001B[0m \u001B[38;5;28mprint\u001B[39m(pd\u001B[38;5;241m.\u001B[39mSeries(pids)\u001B[38;5;241m.\u001B[39mvalue_counts(normalize\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mTrue\u001B[39;00m))\n\u001B[0;32m----> 6\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mdq\u001B[39m\u001B[38;5;124m\"\u001B[39m, pd\u001B[38;5;241m.\u001B[39mSeries(\u001B[43mresults\u001B[49m\u001B[43m[\u001B[49m\u001B[43mkey\u001B[49m\u001B[43m]\u001B[49m\u001B[43m[\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mn_dq\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m]\u001B[49m)\u001B[38;5;241m.\u001B[39mvalue_counts())\n",
+ "\u001B[0;31mKeyError\u001B[0m: 'n_dq'"
+ ]
+ }
+ ],
+ "execution_count": 35
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-14T20:11:07.612392Z",
+ "start_time": "2025-05-14T20:11:03.681914Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "bins = {\n",
+ " \"n_pfcands\": np.linspace(0, 600, 50),\n",
+ " \"pfcands_pt\": np.linspace(-0.6, 2, 200),\n",
+ " \"pfcands_eta\": np.linspace(-2.4, 2.4, 200),\n",
+ " \"pfcands_phi\": np.linspace(-3.14, 3.14, 200),\n",
+ " \"pfcands_mass\": np.linspace(0, 2, 100),\n",
+ " \"n_genp\": np.linspace(0,600,50),\n",
+ " \"n_parton_level\": np.linspace(0,600,50),\n",
+ " \"genp_pt\": np.linspace(-1, 3, 200),\n",
+ " \"parton_level_pt\": np.linspace(-1, 3, 200),\n",
+ " \"pt_ch\": np.linspace(-1, 3, 200),\n",
+ " \"pt_nh\": np.linspace(-1, 3, 200),\n",
+ " \"pt_gamma\": np.linspace(-1, 3, 200),\n",
+ " \"E_vis\": np.linspace(500, 10000, 200),\n",
+ " \"n_gamma\": np.linspace(0, 1200, 200),\n",
+ " \"n_ch\": np.linspace(0, 1200, 200),\n",
+ " \"n_nh\": np.linspace(0, 1200, 200),\n",
+ " #\"n_dq\": np.linspace(0, 3, 3)\n",
+ "}\n",
+ "fig, ax = plt.subplots(10, 2, figsize=(10, 20))\n",
+ "for key in results:\n",
+ " for i, (k, v) in enumerate(results[key].items()):\n",
+ " if k == \"pfcands_pid\":\n",
+ " continue\n",
+ " ax[i // 2, i % 2].hist(v, bins=bins[k], alpha=0.5, label=key, density=\"pt\" in k)\n",
+ " ax[i // 2, i % 2].set_title(k)\n",
+ " if k == \"pfcands_pt\" or \"mass\" in k:# or \"_pt\" in k:\n",
+ " if not k == \"pfcands_pt\":\n",
+ " ax[i//2, i%2].set_yscale(\"log\")\n",
+ " #ax[i//2, i%2].set_xscale(\"log\")\n",
+ " ax[i // 2, i % 2].legend()\n",
+ "\n",
+ "fig.show()\n"
+ ],
+ "id": "d819dae53f16cf8",
+ "outputs": [
+ {
+ "ename": "KeyboardInterrupt",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mKeyboardInterrupt\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[12], line 25\u001B[0m\n\u001B[1;32m 23\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m k \u001B[38;5;241m==\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mpfcands_pid\u001B[39m\u001B[38;5;124m\"\u001B[39m:\n\u001B[1;32m 24\u001B[0m \u001B[38;5;28;01mcontinue\u001B[39;00m\n\u001B[0;32m---> 25\u001B[0m \u001B[43max\u001B[49m\u001B[43m[\u001B[49m\u001B[43mi\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m/\u001B[39;49m\u001B[38;5;241;43m/\u001B[39;49m\u001B[43m \u001B[49m\u001B[38;5;241;43m2\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mi\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m%\u001B[39;49m\u001B[43m \u001B[49m\u001B[38;5;241;43m2\u001B[39;49m\u001B[43m]\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mhist\u001B[49m\u001B[43m(\u001B[49m\u001B[43mv\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mbins\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mbins\u001B[49m\u001B[43m[\u001B[49m\u001B[43mk\u001B[49m\u001B[43m]\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43malpha\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;241;43m0.5\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mlabel\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mkey\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mdensity\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mpt\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mk\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 26\u001B[0m ax[i \u001B[38;5;241m/\u001B[39m\u001B[38;5;241m/\u001B[39m \u001B[38;5;241m2\u001B[39m, i \u001B[38;5;241m%\u001B[39m \u001B[38;5;241m2\u001B[39m]\u001B[38;5;241m.\u001B[39mset_title(k)\n\u001B[1;32m 27\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m k \u001B[38;5;241m==\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mpfcands_pt\u001B[39m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mmass\u001B[39m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;129;01min\u001B[39;00m k:\u001B[38;5;66;03m# or \"_pt\" in k:\u001B[39;00m\n",
+ "File \u001B[0;32m/work/gkrzmanc/1gatr/lib/python3.10/site-packages/matplotlib/_api/deprecation.py:453\u001B[0m, in \u001B[0;36mmake_keyword_only..wrapper\u001B[0;34m(*args, **kwargs)\u001B[0m\n\u001B[1;32m 447\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mlen\u001B[39m(args) \u001B[38;5;241m>\u001B[39m name_idx:\n\u001B[1;32m 448\u001B[0m warn_deprecated(\n\u001B[1;32m 449\u001B[0m since, message\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mPassing the \u001B[39m\u001B[38;5;132;01m%(name)s\u001B[39;00m\u001B[38;5;124m \u001B[39m\u001B[38;5;132;01m%(obj_type)s\u001B[39;00m\u001B[38;5;124m \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 450\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mpositionally is deprecated since Matplotlib \u001B[39m\u001B[38;5;132;01m%(since)s\u001B[39;00m\u001B[38;5;124m; the \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 451\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mparameter will become keyword-only in \u001B[39m\u001B[38;5;132;01m%(removal)s\u001B[39;00m\u001B[38;5;124m.\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[1;32m 452\u001B[0m name\u001B[38;5;241m=\u001B[39mname, obj_type\u001B[38;5;241m=\u001B[39m\u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mparameter of \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mfunc\u001B[38;5;241m.\u001B[39m\u001B[38;5;18m__name__\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m()\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[0;32m--> 453\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n",
+ "File \u001B[0;32m/work/gkrzmanc/1gatr/lib/python3.10/site-packages/matplotlib/__init__.py:1521\u001B[0m, in \u001B[0;36m_preprocess_data..inner\u001B[0;34m(ax, data, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1518\u001B[0m \u001B[38;5;129m@functools\u001B[39m\u001B[38;5;241m.\u001B[39mwraps(func)\n\u001B[1;32m 1519\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21minner\u001B[39m(ax, \u001B[38;5;241m*\u001B[39margs, data\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mNone\u001B[39;00m, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs):\n\u001B[1;32m 1520\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m data \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[0;32m-> 1521\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 1522\u001B[0m \u001B[43m \u001B[49m\u001B[43max\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1523\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;28;43mmap\u001B[39;49m\u001B[43m(\u001B[49m\u001B[43mcbook\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43msanitize_sequence\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43margs\u001B[49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1524\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43m{\u001B[49m\u001B[43mk\u001B[49m\u001B[43m:\u001B[49m\u001B[43m \u001B[49m\u001B[43mcbook\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43msanitize_sequence\u001B[49m\u001B[43m(\u001B[49m\u001B[43mv\u001B[49m\u001B[43m)\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43;01mfor\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mk\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mv\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mkwargs\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mitems\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\u001B[43m}\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1526\u001B[0m bound \u001B[38;5;241m=\u001B[39m new_sig\u001B[38;5;241m.\u001B[39mbind(ax, \u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[1;32m 1527\u001B[0m auto_label \u001B[38;5;241m=\u001B[39m (bound\u001B[38;5;241m.\u001B[39marguments\u001B[38;5;241m.\u001B[39mget(label_namer)\n\u001B[1;32m 1528\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m bound\u001B[38;5;241m.\u001B[39mkwargs\u001B[38;5;241m.\u001B[39mget(label_namer))\n",
+ "File \u001B[0;32m/work/gkrzmanc/1gatr/lib/python3.10/site-packages/matplotlib/axes/_axes.py:7006\u001B[0m, in \u001B[0;36mAxes.hist\u001B[0;34m(self, x, bins, range, density, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, **kwargs)\u001B[0m\n\u001B[1;32m 7003\u001B[0m stacked \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mTrue\u001B[39;00m\n\u001B[1;32m 7005\u001B[0m \u001B[38;5;66;03m# Massage 'x' for processing.\u001B[39;00m\n\u001B[0;32m-> 7006\u001B[0m x \u001B[38;5;241m=\u001B[39m \u001B[43mcbook\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_reshape_2D\u001B[49m\u001B[43m(\u001B[49m\u001B[43mx\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[38;5;124;43mx\u001B[39;49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[43m)\u001B[49m\n\u001B[1;32m 7007\u001B[0m nx \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mlen\u001B[39m(x) \u001B[38;5;66;03m# number of datasets\u001B[39;00m\n\u001B[1;32m 7009\u001B[0m \u001B[38;5;66;03m# Process unit information. _process_unit_info sets the unit and\u001B[39;00m\n\u001B[1;32m 7010\u001B[0m \u001B[38;5;66;03m# converts the first dataset; then we convert each following dataset\u001B[39;00m\n\u001B[1;32m 7011\u001B[0m \u001B[38;5;66;03m# one at a time.\u001B[39;00m\n",
+ "File \u001B[0;32m/work/gkrzmanc/1gatr/lib/python3.10/site-packages/matplotlib/cbook.py:1409\u001B[0m, in \u001B[0;36m_reshape_2D\u001B[0;34m(X, name)\u001B[0m\n\u001B[1;32m 1407\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m 1408\u001B[0m is_1d \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mFalse\u001B[39;00m\n\u001B[0;32m-> 1409\u001B[0m xi \u001B[38;5;241m=\u001B[39m \u001B[43mnp\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43masanyarray\u001B[49m\u001B[43m(\u001B[49m\u001B[43mxi\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1410\u001B[0m nd \u001B[38;5;241m=\u001B[39m np\u001B[38;5;241m.\u001B[39mndim(xi)\n\u001B[1;32m 1411\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m nd \u001B[38;5;241m>\u001B[39m \u001B[38;5;241m1\u001B[39m:\n",
+ "\u001B[0;31mKeyboardInterrupt\u001B[0m: "
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1QAAAZMCAYAAAAJ3MMMAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA8uhJREFUeJzs3Xt8lOWd///3hJATOQCGgwk5EAERlUUlkSI04ELr4YcttEABAami7goUEtQiBUFOrRWCIUg5qOVgcVfZbbVQrbaAtahkqay1gBaEAEmtHCQhhEwkuX5/8M2sQ2YgueeeU/J6Ph55aK657zvX/Znk/vCemfu+HcYYIwAAAABAk0UEewIAAAAAEK4IVAAAAABgEYEKAAAAACwiUAEAAACARQQqAAAAALCIQAUAAAAAFhGoAAAAAMAiAhUAAAAAWESgAgAAAACLCFSAH+3du1d33nmn2rdvr4iICDkcDu3YsSPY0/LJjh075HA4NGjQoGBPBQAAIOgigz0BoLmqrKzUsGHDdPz4cfXr10/du3dXRESEOnfuHOypAQAAwCYEKsBPdu/erePHj2vgwIF65513gj0dAAAA+AEf+QP85Pjx45KkrKysIM8EAAAA/kKgQthzOBxyOBySpI0bN6pv376Ki4tT+/bt9f3vf1+HDh3yafvz5s2Tw+HQvHnz9Nlnn2nMmDHq2LGjYmJi9C//8i/6xS9+IWOMa/n6c4wmTpwoSVq/fr1rjpeed/TFF1/oiSeeUO/evRUfH6+EhAT17NlTDz/8sD7++GO3Zbds2aL77rtPvXr1UlJSkmJjY9WzZ0/NnDlTJ0+e9Dj3zMxMORwOHTlyRNu2bdPAgQOVkJCgxMRE3XHHHfrLX/7idb//8Ic/aPDgwUpISFDbtm11++236w9/+MNla7Vz50595zvfUWZmpqKjo3XVVVfp+uuv17/927/5/DwAAACEIgIVmo0nnnhC999/v9q2bau77rpLcXFx2rJliwYOHKhTp075vP3PPvtMffv21bvvvqvbb79dubm52r9/v/7t3/5NDz30kGu5zp07a+LEibrtttskSddcc40mTpyoiRMn6o477nAtt2fPHt14441asmSJ/vnPf2rIkCG644471KZNG61du1avvvqq288fPXq0/uu//kuJiYn69re/rcGDB+vLL7/U0qVLlZ2drRMnTnid++rVqzVs2DBJ0p133qmOHTvqzTff1De/+U19+umnDZbfuHGjhg4dqh07dqhXr1666667dOrUKX3rW9/Sf/3Xf3n8GS+88IIGDRqk3/72t0pNTdWIESPUr18/SdIvfvELFRcXN7LSAAAAYcQAYU6SkWQ6dOhg/vrXv7rGz549a2699VYjycyfP9/y9p988knXzxg9erSprq52Pfa///u/pn379kaS+c1vfuO23osvvmgkmYkTJzbYZkVFhUlJSTGSTF5ennE6nW6PHz161PzP//yP29h//ud/mqqqKrex8+fPm/vvv99IMg899FCDn5ORkWEkmZiYGLNjxw7XeE1Njfnud79rJJlJkya5rXP8+HHTpk0bI8ls2rTJ7bFnnnnGVYvc3Fy3xzIzM40k89577zWYx9///nfz2WefNRgHAAAId7xDhWbjqaee0g033OD6Pj4+XjNnzpQkbd++3eftx8XFqaioSNHR0a6x3r1767HHHpMkPfvss43e1rp161RWVqbbb79dS5cuVVRUlNvjaWlpuuWWW9zGRo4cqdjYWLexmJgYrVixQpGRkdqyZYvXn/ejH/1Iubm5ru9bt26t2bNnS2pYm+eff17nzp3TnXfeqXHjxrk9lp+f32Be9b744gu1bdvW9a7U13Xr1k1du3b1Oj8AAIBwxVX+0GzceeedDcauvfZaSVJZWZnP2//Wt76l5OTkBuP33nuvfvzjH2vXrl26cOGCIiOv/Gf1xhtvSJJ++MMfNmkO+/fv15tvvqlDhw7p3LlzqqurkyRFRUXp5MmT+vLLL9WuXbsG6zWlNjt37pSkBmGq3r333qs9e/Y0GO/bt6/eeecd3XfffZoxY4Z69+7tOrcNAACguSJQodlIS0trMJaQkCBJcjqdPm8/MzPT43hKSoqioqJUXV2tU6dOqVOnTlfc1tGjRyX9X6i5kgsXLuihhx7SCy+8cNnlKioqPAaqy9WmpqbGbby0tFSS9/31Nr5q1SqNGDFC69ev1/r169WuXTv169dP3/72tzVhwgSP8wIAAAh3fOQPzUZERPj8Ojf1nZvly5frhRdeUGpqqv7zP/9Tx44dk9PplDFGxhhdffXVkuR2tcGvC0RtevXqpb/+9a/63e9+px/96Efq2rWr3nzzTU2fPl3dunXz+K4WAABAuAuff4ECQVZSUuJxvKysTDU1Na7LhDdGenq6JHm8wp4n9Vf8+8UvfqGRI0eqS5curvOuzp07p88//7xR22mM1NRUSd7398iRI17Xbd26te644w4tX75ce/bs0T/+8Q9NnDhRp0+f1pQpU2ybIwAAQKggUAGN9Pvf/97j5dd/9atfSZL69+/fqPOnpIvnY0m64kf46p0+fVqS54/uvfzyy17fmbLim9/8pqT/269LvfTSS43eVseOHbV48WJJ0kcffeT75AAAAEIMgQpopHPnzmnatGlu5xx9/PHH+tnPfiZJmjp1aqO39cADD+jqq6/WH/7wBz3++OMNzmM6duyY20fkevbsKenieUpfD0979+7VrFmzLO2PN/fff7/i4uK0detWbd682e2x5cuX63/+538arFNVVaWCggKPNxj+7W9/K+n/3pUDAABoTghUQCONHz9ev/vd79StWzf94Ac/0B133KFbbrlFp06d0g9/+EMNHz680dtKTEzUr3/9ayUnJ+vpp59Wenq6RowYoZEjR+qWW25RZmamXn/9ddfyP/7xj9W6dWutXr1a1113nX7wgx/o9ttvV9++fTVkyBBlZGTYtp9dunTRc889J4fDobFjx6pfv34aO3as+vTpo7y8PI/BsaamRnl5eercubNuueUWjR49Wj/4wQ9000036aGHHlJkZKQreAIAADQnBCqgkbKysrR7927169dPf/jDH7Rjxw5de+21Kioq0tq1a5u8vZycHH300UfKz89X27Zt9bvf/U5vvvmmqqqq9PDDD2vUqFGuZfv376/3339fd9xxh06fPq3XX39dp06d0jPPPKNNmzbZuZuSpIkTJ+rNN99Ubm6uPv74Y/32t79V27Zt9eabb2rEiBENlo+Pj9dzzz2n733ve6qsrNTvfvc7/fa3v9X58+f1wx/+UB9++KHuuece2+cJAAAQbA5j58kXQDM0b948zZ8/X08++aTmzZsX7OkAAAAghPAOFQAAAABYRKACADRLS5Ys0ciRI5WVlSWHw+H1ptRXsmHDBt10002KjY1Vp06d9MADD+jEiRP2ThYAELYad41noJn49a9/rV//+teNWrZnz5768Y9/7N8JAfCbJ554Qu3bt9fNN9+sM2fOWNpGQUGB8vLylJubq2effVbHjx/XsmXL9N5772n37t1q06aNvZMGAIQdzqFCi1J/PlRj5ObmaseOHf6dEAC/+eyzz5SVlSVJuuGGG1RZWXnZG1Nf6uTJk8rIyND111+v9957T61atZIkvf7667rnnnu0aNEiPfHEE/6YOgAgjBCoAADNnpVAtW7dOk2ePFkbNmzQ+PHj3R675pprFB0drX379tk8UwBAuOEcKgAAPCguLpYkfeMb32jwWL9+/XTgwAFVVlYGeloAgBDTLM+hqqurU1lZmRISEuRwOII9HQBoMYwxOnv2rFJSUhQREd6v2ZWVlUmSUlNTGzyWmpoqY4zKysrUo0ePBo87nU45nU7X93V1dTp9+rSuuuoq+hIABJi/e1OzDFRlZWVKS0sL9jQAoMU6duyYunTpEuxp+KSqqkqSFB0d3eCxmJgYt2UutWTJkkafrwkACAx/9aZmGagSEhIkXSxaYmJikGcDAC1HRUWF0tLSXMfhcBYXFyfp4rtNsbGxbo9VV1e7LXOpWbNmKS8vz/V9eXm50tPT6UsAEAT+7k3NMlDVf5wiMTGRxgUAQdAcPtaWkpIiSSotLVW3bt3cHistLZXD4XAtc6no6GiP72zRlwAgePzVm8L7A+4AAPhJdna2JOm9995r8Nj777+va6+9VvHx8YGeFgAgxBCoAAAt3tGjR3XgwAF99dVXrrHvfOc7io2NVVFRkWpra13jr7/+uj777DONGzcuGFMFAISYZvmRPwAANm7cqJKSEknSiRMnVFNTo4ULF0qSMjIy3O4tNWHCBO3cuVOHDx9WZmamJKlDhw5asGCBZs6cqSFDhmjMmDEqLS3V0qVL1bNnT02fPj3QuwQACEEEKiBEFLz1qcfxGUMbXpIZwJU9//zz2rlzp9vYnDlzJEm5ubkNbtbrSX5+vq666ioVFBRo2rRpSkxM1KhRo/TTn/6Uj/sBACQRqAAAzdSOHTtsWfa+++7Tfffd5/N8AADNE4FKUm1trdvn5gFJat26tVq1ahXsaQAAACCEtehAZYzR559/rvLychljgj0dhBiHw6GkpCR17ty5WVwCGgAAAPZr0YGqvLxcZ86cUYcOHdSmTRv+0QwXY4zOnTunEydOKDY2Vm3btg32lAAAABCCWmygMsboiy++UGJiopKTk4M9HYSg2NhYOZ1OffHFF0pKSiJwAwAAoIEWG6hqa2tVW1vLHetxWYmJiaqoqFBtba0iI0Pvz4UrAwIAAARXi72x74ULFyQpJP+RjNBR//tR//sCAAAAfF2LDVT1+BgXLoffDwAAAFxOiw9UAAAAAGAVgQoAAAAALOIEIthix44dGjx4sF588UXdd999lrYxaNAgHTlyREeOHLF1bqHE20UkAAAAEJ4IVF6E2j98fb1qW33gqRcREaHExESlpqbqlltu0ZgxY/Ttb3+bc4ZCUKj9LgIAAOD/EKhamDFjxuiuu+6SMUZnz57VJ598ol//+tfasGGDhgwZoldeeYWb2AIAAACNRKBqYW6++Wbde++9bmPLli3TY489pmXLlmnMmDH63e9+F6TZAQAAAOGFi1JArVq10tKlSzVgwAC98cYbevfdd12PlZeX6/HHH1e3bt0UHR2tDh06aMyYMfrss8+uuN0dO3bI4XDol7/8pVasWKEePXooJiZGPXr00IoVK7yuV1ZWpjFjxqhdu3aKi4vTt7/9bX36acOPvTmdTi1evFjXX3+9YmJi1LZtWw0bNkwffvih23J1dXVavny5evfurYSEBCUmJuraa6/V/fffr6+++qoJlWq8grc+9fgFAACA5oV3qOBy//33691339XWrVs1YMAAlZeXq3///jp69Kh++MMf6vrrr9c//vEPPffcc7r11lv1P//zP8rIyLjidlesWKHPP/9cDz30kBISErR582ZNmzZNp0+f1pNPPum27Llz5/TNb35T/fr10+LFi3X48GE9++yz+s53vqOPP/5YrVq1kiR99dVXuuOOO7Rr1y6NHz9eU6ZMUXl5udauXavbbrtN77zzjvr27StJWrRokebOnathw4bp4YcfVqtWrXT48GG99tprcjqdat26tf3FBAAAQItAoIJL7969Jcn1btDcuXP12Wef6f3339e//Mu/uJa77777dOONN+rJJ5/UL3/5yytu99NPP9X+/fvVpUsXSdIjjzyiAQMGaOHChbr//vtd45J08uRJPfroo3rsscdcYx06dNBjjz2mt99+W9/+9rclSUVFRdqxY4feeOMN15gk/fu//7tuuOEGzZw5Uzt27JAk/fd//7euu+46vfbaa27z+ulPf9qE6gAAAAANEajgkpiYKEmqqKiQMUYvvfSSvvnNbyo1NVUnT550LdemTRv169dPv//97xu13XHjxrmFpqioKM2YMUNjx47V66+/rn/7t39zPRYREaFp06a5rX/77bdLkv7+97+7wtOmTZvUs2dP3XLLLW5zk6ShQ4dq/fr1On/+vGJjY5WUlKRDhw7p3Xff1YABA5pQkfB1uY8X+nrFSAAAAPwfAhVcKioqJF0MVidOnNCpU6f0+9//Xh06dPC4fERE407Bu+666xqM9erVS5IanIuVkpKimJgYt7GrrrpKknTq1CnX2P79+3X+/Hmvc5MuvtuVlpamxYsX67vf/a4GDhyolJQUDRo0SHfffbe+//3vKyoqqlH7AAAAAHhCoILLRx99JEm69tprZYyRJA0ZMkSPP/54wOZQf46UJ/Vzqv//G2+8UcuWLfO6fH3Y+sY3vqFDhw7pzTff1Pbt27V9+3b96le/0sKFC/Xuu++qffv29u0AAAAAWhQCFVyef/55SdLdd9+tDh06qG3btqqoqNCQIUN82u7+/fsbjO3bt0+SlJWVZWmb3bt314kTJ3T77bc36p2y+Ph4fe9739P3vvc9SdJzzz2nRx55RM8//7weffRRS3MAAAAAuGw6VFtbq5kzZ+rdd9/VXXfdpdtuu00REREaN26cdu/erVdffdXjel988UWjtv/SSy/p+PHjru9rampUUFCgVq1a6f/7//4/S3OeMGGCPv/8c6/vUP3zn/90/f+l51hJF+/HJUmnT5+29PPDGZd0BwAAsA/vULUwf/nLX7Rp0yZJ0tmzZ/XJJ5/o17/+tUpKSvStb31Lv/rVr1zLLlq0SH/+8581atQojRo1Sv369VNUVJRKSkq0bds23XLLLY26yl+PHj1066236uGHH1ZCQoJ+9atfqbi4WHPmzFFaWpql/fjRj36kt956S48++qj++Mc/6vbbb1diYqKOHj2qP/zhD4qJidH27dslXTyHq1+/frr11luVkpKif/zjH1qzZo2ioqL0gx/8wNLPBwAAACQCVYuzefNmbd68WREREYqPj1eXLl2Um5urMWPG6I477nBbNikpSX/+85+1dOlS/ed//qd+85vfKDIyUl26dNGAAQP0wAMPNOpnTp06VRUVFVqxYoWOHj2q9PR0LV++XD/60Y8s70fr1q21detWPffcc9q4caPrflYpKSnKycnRxIkTXcvm5+dr27ZtKiwsVHl5uTp27Kh+/fpp1qxZbpeDBwAAAJrKYb5+pn8zUVFRoaSkJJWXl7suBX6p6upqHT58WF27dm1wVTnYY8eOHRo8eLBefPFF3XfffcGejiVWf0/C8SN0XE4ddmjM8bcloi4AEDz+PgZzDhUAAAAAWMRH/gCLwvFdKAAAANiLd6gAAAAAwCLeoYLfDBo0SM3wFD0AAADAhXeoAAAAAMAiAhUAAAAAWNTiP/LHR9JwOS3p9+NyF9ngkuoAAACetdh3qCIjL2bJCxcuBHkmCGX1vx/1vy8AAADA17XYQNWqVSu1atVKFRUVwZ4KQlhFRYXrdwUAAAC4VIt92d3hcKhjx476xz/+oejoaLVp00YOhyPY00KIMMbo3Llzqqio0NVXX83vBgAAADxqcqDy9g/LNm3aqLKy0m3sk08+0eOPP66dO3eqpqZGN998s+bPn6/bb7+9wfrl5eX6yU9+ov/6r//SqVOndM0112jKlCl6+OGH/faP2aSkJJ0/f14nT57UiRMn/PIzEL4cDofatm2rpKSkYE8FAAAAIcrSO1QDBw7Ugw8+6DbWunVrt+8PHTqk/v37KzIyUo899piSkpK0du1affvb39bvfvc7DRkyxLVsTU2Nhg4dqg8//FBTp07Vddddp9/97nf693//d/3zn//UvHnzrEzzihwOh66++mp17NhRX331lV9+BsJX69at+agfAAAALstSoMrKytK999572WVmzZqlM2fOaM+ePerTp48kacKECbr++uv1yCOP6MCBA653ntatW6fi4mIVFhZq6tSpkqTJkyfre9/7nhYvXqxJkyYpIyPDylQbhXNkAAAAAFhh+aIUNTU1DT7iV+/cuXN67bXXNGjQIFeYkqT4+Hg98MAD+vTTT1VcXOwa/9WvfqW4uDhNnjzZbTvTp0/XV199pf/4j/+wOk0AAAAA8BtL71C9+uqr2rRpk2pra9WhQweNHj1aCxcudJ1r8tFHH8npdOob3/hGg3X79esnSSouLlZOTo7q6ur0l7/8RTfffLNiYmLcls3JyZHD4XALX0AgXe7eTAAAAECTA1VOTo5Gjhypbt26qaKiQtu2bVNRUZF27typXbt2KT4+XmVlZZKk1NTUBuvXj5WWlkqSvvzyS50/f97jstHR0UpOTnYt643T6ZTT6XR9z6XQAQAAAARCkwPVBx984Pb9hAkT1Lt3b82ePVvPPvusZs+eraqqKkkXA9Gl6t+Fql/mcsvWL1+/jDdLlizR/Pnzm7YjAAAAAOAjW27s++ijjyoqKkpbt26VJMXFxUmS27tG9aqrq92Wudyy9cvXL+PNrFmzVF5e7vo6duyYtR0BAAAAgCaw5ca+rVu3VkpKik6ePClJSklJkSSPH9WrH6v/iF+7du0UGxvrcVmn06mTJ08qNzf3sj8/Ojra6ztcAAAAAOAvtrxDVV1drePHj6tTp06SpBtvvFHR0dF67733Giz7/vvvS5L69u17cQIREbr55pv14YcfNniXavfu3TLGuJYFAAAAgFDSpEB16tQpj+Nz5szRhQsXNGzYMEkXL48+bNgw7dixQ//7v//rWq6yslLr1q1T9+7dlZOT4xofM2aMqqqqtGbNGrftLl++XJGRkRo9enRTpgkAAAAAAdGkj/wtXLhQ77//vgYPHqz09HRVVlZq27Zt2r59u2699VbXTXmlixeK+MMf/qBvfetbmjFjhhITE7V27VqVlpZq69atrpv6Shdv4vviiy8qLy9PR44c0XXXXadt27bpv//7v/WTn/xEmZmZtu0wAAAAANilSYFq0KBB2rdvn9avX69Tp06pVatW6t69uxYtWqS8vDy3+0h169ZNf/7zn/XjH/9YP/3pT1VTU6Obb75Zb7zxhoYMGeK23aioKL399tv6yU9+os2bN+vUqVO65pprtGLFCj3yyCP27CkAy7zdj2vG0B4BngkAAEBocRhjTLAnYbeKigolJSWpvLxciYmJwZ4Owhg39r08AhUuxfHXM+oCAMHj72OwLRelAAAAAICWiEAFAAAAABYRqAAAAADAIgIVAAAAAFhEoAIANEt1dXUqKChQz549FRMTo7S0NOXn5+vcuXONWt/hcHj8io+P9/PMAQDhpEmXTQcAIFzMmDFDhYWFGj58uPLz87V//34VFhbqww8/1Ntvv62IiCu/pjhw4EA9+OCDbmOtW7f215QBAGGIQAUAaHb+9re/acWKFRoxYoS2bNniGu/ataumTZuml19+WWPHjr3idrKysnTvvff6c6oAgDBHoALE/aaA5mbz5s0yxmj69Olu45MnT9aPf/xjbdq0qVGBSpJqampUU1PDR/0AAB4RqABYdrkgyk1/EUzFxcWKiIhQTk6O23hMTIz69Omj4uLiRm3n1Vdf1aZNm1RbW6sOHTpo9OjRWrhwoZKSkvwxbQBAGCJQAQCanbKyMiUnJys6OrrBY6mpqdq1a5dqamoUFRXldRs5OTkaOXKkunXrpoqKCm3btk1FRUXauXOndu3addl3rJxOp5xOp+v7iooK33YIABCyCFQAgGanqqrKY5iSLr5LVb/M5QLVBx984Pb9hAkT1Lt3b82ePVvPPvusZs+e7XXdJUuWaP78+RZmDgAIN1w2HQDQ7MTFxbm9Q/R11dXVrmWa6tFHH1VUVJS2bt162eVmzZql8vJy19exY8ea/LMAAOGBd6gAAM1OSkqK9u3bJ6fT2eCdqtLSUiUnJ1/23SlvWrdurZSUFJ08efKyy0VHR3t9hwwA0LzwDhUAoNnJzs5WXV2ddu/e7TZeXV2tvXv3qm/fvpa2W11drePHj6tTp052TBMA0AwQqAAAzc7o0aPlcDi0fPlyt/G1a9eqqqpK48aNc40dOnRIBw4ccFvu1KlTHrc7Z84cXbhwQcOGDbN9zgCA8MRH/gAAzc6NN96oRx55REVFRRoxYoTuuusu7d+/X4WFhcrNzXW7B9W//uu/qqSkRMYY19jChQv1/vvva/DgwUpPT1dlZaW2bdum7du369Zbb9XUqVODsVsAgBBEoAIANEvLly9XZmam1qxZo61btyo5OVlTp07VU089pYiIy39AY9CgQdq3b5/Wr1+vU6dOqVWrVurevbsWLVqkvLw815UCAQBwmK+/JNdMVFRUKCkpSeXl5UpMTAz2dBAGLneDWljDjX1bJo6/nlEXAAgefx+DOYcKAAAAACwiUAEAAACARZxDBcAvvH2Mko8CAgCA5oR3qAAAAADAIgIVAAAAAFhEoAIAAAAAiziHCi0Gl0YHAACA3XiHCgAAAAAsIlABAAAAgEUEKgAAAACwiEAFAAAAABYRqAAAAADAIgIVAAAAAFhEoAIAAAAAiwhUAAAAAGARgQoAAAAALCJQAQAAAIBFBCoAAAAAsCgy2BMA0LIUvPWp18dmDO0RwJkAAAD4jkAFIGR4C1sELQAAEKoIVGh2LvcOCAAAAGAnzqECAAAAAIsIVAAAAABgEYEKAAAAACwiUAEAAACARQQqAAAAALCIq/whLHElPwAAAIQC3qECAAAAAIt4hwpAyLvcO5Lc9BcAAAQT71ABAAAAgEUEKgAAAACwiEAFAAAAABYRqAAAAADAIgIVAAAAAFhEoAIAAAAAiwhUAAAAAGARgQoAAAAALCJQAQAAAIBFkcGeAAD4ouCtT70+NmNojwDOBAAAtES8QwUAAAAAFvEOFULa5d59AAAAAIKNd6gAAAAAwCICFQAAAABYRKACAAAAAIsIVAAAAABgERelANBsebuoCZdTBwAAdiFQIei4kh8CjXtXAQAAu/CRPwAAAACwiEAFAAAAABYRqAAAAADAIs6hQsBwrhQAAACam5AKVHV1dXr22We1evVqHTlyRB06dNCoUaP01FNPqU2bNsGeHoAWwErw50IWocvXvkJfAgBcSUgFqhkzZqiwsFDDhw9Xfn6+9u/fr8LCQn344Yd6++23FRHBJxRDHe9CAQglvvYV+hIA4EpCJlD97W9/04oVKzRixAht2bLFNd61a1dNmzZNL7/8ssaOHRvEGQKAZ9zvKjT52lfoSwCAxgiZl9Y2b94sY4ymT5/uNj558mTFxcVp06ZNwZkYPCp461OPXwAQKnztK/QlAEBjhMw7VMXFxYqIiFBOTo7beExMjPr06aPi4uIgzQwArOF8rODyta/QlwAAjREygaqsrEzJycmKjo5u8Fhqaqp27dqlmpoaRUVFNXjc6XTK6XS6vi8vL5ckVVRU+G/CzcjKPx4M9hQA/D9Lfv2XJq/zyO3d/DATa+qPu8aYIM/Et77i6/r0JQAIHf7uTSETqKqqqjw2Leniq4H1y3hqXEuWLNH8+fMbjKelpdk7SQAIQU8EewIenD17VklJSUGdgy99xdf16UsAEHpOnTrll94UMoEqLi5OX3zxhcfHqqurXct4MmvWLOXl5bm+r6ur0+nTp3XVVVfJ4XA0eS4VFRVKS0vTsWPHlJiY2OT1ERg8T+GD5yp8+PpcGWN09uxZpaSk+GF2TeNLX/F1/Uv70pkzZ5SRkaGjR48GPWiGGo4PnlEX76iNZ9TFu/LycqWnp6t9+/Z+2X7IBKqUlBTt27dPTqezwSuCpaWlSk5O9voqYnR0dIN12rZt6/OcEhMT+YUMAzxP4YPnKnz48lyFSmDwpa/4ur6nviRdrA1/A55xfPCMunhHbTyjLt7561YXIXOVv+zsbNXV1Wn37t1u49XV1dq7d6/69u0bpJkBAMKRr32FvgQAaIyQCVSjR4+Ww+HQ8uXL3cbXrl2rqqoqjRs3LjgTAwCEpab0lUOHDunAgQOW1wcAtFwh85G/G2+8UY888oiKioo0YsQI3XXXXa470ufm5gb05onR0dF68sknvZ6MjNDA8xQ+eK7CR3N6rprSV/71X/9VJSUlbleAsrMvNae62o3aeEZdvKM2nlEX7/xdG4cJhWvb/j+1tbVavny51qxZoyNHjig5OVmjR4/WU089pfj4+GBPDwAQZhrbVzIzMxsEqqasDwBouUIqUAEAAABAOAmZc6gAAAAAINwQqAAAAADAIgIVAAAAAFhEoPp/6urqVFBQoJ49eyomJkZpaWnKz8/XuXPngj21Zu/TTz/V3Llz1a9fP3Xo0EEJCQnq06ePFi1a5LH+n3zyib773e+qXbt2atOmjQYOHKg//vGPHrddXl6uqVOnKjU1VTExMbr++uu1atWqBieew5qqqiplZWXJ4XBoypQpDR7nuQqu06dPa+bMmerWrZtiYmLUoUMHDR48WH/605/clvvggw80ZMgQJSQkKDExUXfccYf27t3rcZtlZWWaMGGCOnTooNjYWPXt21evvPJKAPYm9PjaN5pz3/Fl35raE8KJnc/5lY6/4caO2jT2mBdOfK1LZWWlFi9erBtvvFEJCQlKTk5W//799ctf/jLs++uSJUs0cuRI199BZmampe1s2LBBN910k2JjY9WpUyc98MADOnHiRNM2YmCMMWbatGlGkhk+fLhZs2aNmTFjhomMjDSDBw82tbW1wZ5es/b444+b+Ph4M3bsWFNYWGhWrVplRo0aZSSZ3r17m6qqKteyBw8eNO3btzcdO3Y0ixcvNitXrjR9+vQxkZGR5q233nLbrtPpNNnZ2SYyMtLMmDHDrFmzxgwfPtxIMk8++WSA97J5ys/PN/Hx8UaSeeSRR9we47kKriNHjpjMzEyTnJxsHn/8cfP888+bZcuWmfvuu89s3rzZtdx7771noqOjTVZWllm2bJlZtmyZycrKMvHx8eajjz5y2+apU6dM165dTZs2bcycOXPM6tWrTW5urpFkXnjhhUDvYtD52jeac9/xZd+a0hPCjZ3P+eWOv+HI19o09pgXbnypS21trRkwYICJiIgwkyZNMqtXrzYFBQUmJyfHSDKPPfZYgPbCPySZ9u3bmyFDhph27dqZjIyMJm9j2bJlRpLJzc01q1evNnPmzDFt2rQxvXr1MpWVlY2fS5N/cjP08ccfG4fDYUaMGOE2XlhYaCSZl156KUgzaxmKi4vNmTNnGozPnj3bSDIrVqxwjY0cOdJERESYDz/80DV29uxZk56ebnr06GHq6upc4ytXrjSSTGFhodt2R4wYYVq3bm2OHDli/860IHv27DGtWrUyS5cu9djQea6Ca8CAAaZLly6mrKzssstlZ2ebhIQEc/z4cdfY8ePHTUJCghk6dKjbso8++qiRZF577TXX2IULF0x2drZp3769OXv2rL07EcJ87RvNue/4um9N6QnhxM7n/ErH33BjR20ae8wLJ77WZdeuXUaSmT59utu40+k0Xbt2NUlJSXZPOaAOHTrk+v/rr7++yYHqxIkTJi4uzmRnZ5sLFy64xl977TUjySxatKjR2yJQmf87SL/zzjtu4+fPnzdxcXHmzjvvDNLMWraPPvrISDIPPfSQMcaYyspKEx0dbW6//fYGyz711FNGkvnggw9cY7fddpuJi4sz58+fd1v2nXfeMZLMz372M//uQDN24cIFc/PNN5u7777bHD58uEFD57kKrp07d7oF1JqaGnPu3LkGy/397383kswPf/jDBo/98Ic/NA6Hw/zjH/9wjaWmppprrrmmwbIbNmwwksx//Md/2LgXoc3XvtGc+46/9u3SnhBu7KrLlY6/4cjX2jT2mBdufK3LG2+8YSSZp59+usFj2dnZJiUlxdb5BpOVQLV27VojyWzYsKHBY1lZWea6665r9LY4h0pScXGxIiIilJOT4zYeExOjPn36qLi4OEgza9mOHz8uSerUqZMk6aOPPpLT6dQ3vvGNBsv269dPklzPVV1dnf7yl7/opptuUkxMjNuyOTk5cjgcPK8+KCgo0IEDB1RUVOTxcZ6r4Nq2bZskKT09XcOGDVNsbKzatGmjHj16aNOmTa7l6uvq7XkyxmjPnj2SpH/84x8qLS11PX+XLvv17bUEvvaN5tx3/LVvl/aEcGNXXa50/A1Hvtamsce8cONrXXJyctS2bVs9/fTTeuWVV3T06FEdOHBAs2bN0p49ezRv3jw/zj70XakHHjhwQJWVlY3aFoFKF0+yTk5OVnR0dIPHUlNTdfLkSdXU1ARhZi1XbW2tFixYoMjISI0dO1bSxedJuvicXKp+rLS0VJL05Zdf6vz58x6XjY6OVnJysmtZNM3hw4f15JNPau7cuV5PAOW5Cq5PPvlEkjR58mSdPn1a69ev1wsvvKCoqCiNHz9eL774oqSmPU9NWbYl8LVvNOe+449989QTwo0ddWnM8Tcc+Vqbxh7zwo2vdWnXrp1ee+01tW/fXqNGjVJGRoauu+46rVy5Ulu2bNHkyZP9Of2Qd6W+ZoxxLXMlkbbOLExVVVV5/GWV5HrFvKqqSlFRUYGcVos2ffp0vffee1q8eLGuvfZaSRefA0ken6uvP09XWrZ++fpl0DQPP/ywsrKylJeX53UZnqvgOnv2rCQpISFB27dvdx27vvvd7yorK0tPPPGEJk6caNvzdOmyLYGvfaM59x1/7JunnhBu7KhLY46/4cjX2jT2mBcREV7vI9jxOxMfH68bbrhB99xzj/r376/Tp09r5cqVGjt2rH7zm99o6NChfpl7OLCzr4XXb5afxMXFyel0enysurratQwCY86cOSoqKtKDDz6oWbNmucbrnwNPz9Wlz9Pllq1fnue06TZt2qS33npLq1atUuvWrb0ux3MVXLGxsZKkMWPGuDXadu3a6Z577tHnn3+uTz75xLbnqSUeJ33tG82579i9b956QrjxtS6NPf6GI19r09hjXrjxtS5//etf1b9/fw0dOlQ///nPNXz4cN1///1699131blzZ02ePFm1tbV+mXs4sLOvEagkpaSk6OTJkx4LWlpaquTk5LB8lTAczZs3TwsXLtSkSZP0i1/8wu2xlJQUSZ4/VlQ/Vv+2bbt27RQbG+txWafTqZMnT3p8ixfeOZ1O5eXl6a677lLnzp118OBBHTx4UCUlJZIu3kfq4MGDOnPmDM9VkHXp0kWS1Llz5waPXX311ZIuftSyKc9TU5ZtCXztG82579i5b5frCeHGl7o05fgbjnz9nWnsMS/c+FqXgoICVVdXa+TIkW7jcXFxuvvuu1VSUqIjR47YPe2wcaW+5nA4XMtciW2BKqRurtVE2dnZqqur0+7du93Gq6urtXfvXvXt29evPx8XzZs3T/Pnz9fEiRO1bt06ORwOt8dvvPFGRUdH67333muw7vvvvy9JrucqIiJCN998sz788MMGB6Ldu3fLGMPz2kTnz5/XiRMntHXrVnXv3t31NWjQIEkXXz3t3r271q1bx3MVZPUnMNefxP919WMdO3ZUdna2JHl9nhwOh2655RZJF/9Rkpqa6nr+Ll1WUsg9T/7sS7169fKpbzTnvmPXvl2pJ4QbX+rSlONvOPL1d6axx7xw42td6oOCp3ehLly44PbfluhKPfDaa69VfHx84zbWpOsLXoZC6OZaTfXRRx9d9jr/Gzdu9NvPxkXz5883ksz48eMve6O673//+yYiIsLs3bvXNVZ/b6Pu3bu73duoqKjI672NIiMjzeHDh23fj+aspqbGvPLK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AAAAAMAiAhUAAAAAWESgAgAAAACLCFQAAAAAYBGBCgAAAAAsIlABAAAAgEUEKgAAAACwiEAFAAAAABYRqAAAAADAIgIVAAAAAFhEoAIAAAAAiwhUAAAAAGARgQoAAAAALCJQAQAAAIBFBCoAAAAAsIhABQAAAAAWEagAAAAAwCICFQAAAABYRKACAAAAAItsC1R1dXUqKChQz549FRMTo7S0NOXn5+vcuXONWt/hcHj8io+Pt2uKAIAWhL4EAAiESLs2NGPGDBUWFmr48OHKz8/X/v37VVhYqA8//FBvv/22IiKunN0GDhyoBx980G2sdevWdk0RANCC0JcAAIFgS6D629/+phUrVmjEiBHasmWLa7xr166aNm2aXn75ZY0dO/aK28nKytK9995rx5QAAC0YfQkAECi2fORv8+bNMsZo+vTpbuOTJ09WXFycNm3a1Oht1dTUqLKy0o5pAQBaKPoSACBQbAlUxcXFioiIUE5Ojtt4TEyM+vTpo+Li4kZt59VXX1VcXJwSEhLUsWNHTZ06VeXl5XZMEQDQgtCXAACBYstH/srKypScnKzo6OgGj6WmpmrXrl2qqalRVFSU123k5ORo5MiR6tatmyoqKrRt2zYVFRVp586d2rVr12VPAnY6nXI6na7vKyoqfNshAEBYoy8BAALFlkBVVVXlsWlJF18NrF/mco3rgw8+cPt+woQJ6t27t2bPnq1nn31Ws2fP9rrukiVLNH/+fAszBwA0R/QlAECg2PKRv7i4OLdX4r6uurratUxTPfroo4qKitLWrVsvu9ysWbNUXl7u+jp27FiTfxYAoPmgLwEAAsWWd6hSUlK0b98+OZ3OBq8IlpaWKjk5+bKvAnrTunVrpaSk6OTJk5ddLjo62usrkQCAloe+BAAIFFveocrOzlZdXZ12797tNl5dXa29e/eqb9++lrZbXV2t48ePq1OnTnZMEwDQQtCXAACBYkugGj16tBwOh5YvX+42vnbtWlVVVWncuHGusUOHDunAgQNuy506dcrjdufMmaMLFy5o2LBhdkwTANBC0JcAAIHiMMYYOzY0depUFRUVafjw4brrrrtcd6S/7bbb9Mc//tF1R/rMzEyVlJTo6z92xowZev/99zV48GClp6ersrJS27Zt0/bt23Xrrbdq+/btio2NbfRcKioqlJSUpPLyciUmJtqxewCARgil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Jj4+3owdO9YUFhaaVatWmVGjRhlJpnfv3qaqqipAe+Efdj7n+fn5Jj4+3kgyjzzyiJ9mHBi+1uXIkSMmMzPTJCcnm8cff9w8//zzZtmyZea+++4zmzdvDsAe+IcvdamtrTUDBgwwERERZtKkSWb16tWmoKDA5OTkGEnmscceC9Be+Ick0759ezNkyBDTrl07k5GR0eRtLFu2zEgyubm5ZvXq1WbOnDmmTZs2plevXqaystL+SQcAfck7epNn9CXv6E2e0Zu8C6XeFBaB6uOPPzYOh8OMGDHCbbywsNBIMi+99JJf1w9Vvu5XcXGxOXPmTIPx2bNnG0lmxYoVts43kOx8zvfs2WNatWplli5dGvaNy466DBgwwHTp0sWUlZX5a5oB52tddu3aZSSZ/7+9u4+tsr7/P/46tfTm0BvBw42tvaEDrOgIW2hlTFNIJNk0uEG+QASBEVddMiC9cTMdAakVujmxrJQxKM5xY1jC+GMukN1l/NgMOhoz4hzUrQwKttkEKi2l9nRtP78/TE849DpYrnNd5waej6SZvc51HT7Xm/a89jqcc66ysrKg7X6/30yaNMlkZmY6veSIOnPmTOC/H3zwwVsOrYsXLxqv12uKiopMf39/YPtbb71lJJlNmzY5tdSIIZdCI5uskUuhkU3WyKabi6VsiotCNfQg+uc//zlo+6effmq8Xq/5+te/7urxscqt83r//feNJPPcc885scyocGo2/f395stf/rJ54oknzNmzZ+M+uMKdy7Fjx4wkU19fb4wxpq+vz1y7ds219UZKuHP57W9/aySZV155ZdhtRUVFJisry9H1RpOd0GpsbDSSzN69e4fdVlBQYB544AGHVhc55FJoZJM1cik0sska2TRy0c6muHgPVVNTkxISElRcXBy0PSUlRTNmzFBTU5Orx8cqt87ro48+kiRNmDAh7DVGi1OzqaurU3NzsxoaGtxYZsSFO5cjR45IknJzczV//nylpqZq9OjRmjp1qvbv3+/aut0W7lyKi4t1991365VXXtHBgwd1/vx5NTc3q6qqSu+99542btzo4upj39D8vvKVrwy7bdasWWpublZ3d3eklxUWcik0sskauRQa2WSNbHKXk9kUF4Wqvb1dPp9PycnJw27Lzs7WpUuX1NfX59rxscqN8xoYGFBNTY0SExO1dOlSp5YacU7M5uzZs3rx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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 12
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:56:02.626682Z",
+ "start_time": "2025-04-30T09:56:02.572415Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "min(results[\"Delphes\"][\"pfcands_pt\"])",
+ "id": "379df7edfcf5942d",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "-0.3010289602264827"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 17
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:56:04.424861Z",
+ "start_time": "2025-04-30T09:56:04.395017Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "min(results[\"CMS FullSim\"][\"pfcands_pt\"])\n",
+ "id": "ddc61b4dc9883c28",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "-0.22177806941733907"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 18
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:56:12.573254Z",
+ "start_time": "2025-04-30T09:56:12.545197Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "min(results[\"CMS FullSim\"][\"pfcands_eta\"])\n",
+ "id": "1205b61b7f7623d3",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "-2.3984375"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 19
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-13T09:08:14.486690Z",
+ "start_time": "2025-05-13T09:08:14.481653Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "np.array(results[\"Delphes\"][\"n_nh\"])\n",
+ "id": "9f80bcfce6445fae",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([0, 0, 0, ..., 0, 0, 0])"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 27
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:56:18.234763Z",
+ "start_time": "2025-04-30T09:56:18.131626Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "t = torch.tensor(results[\"CMS FullSim\"][\"pfcands_pt\"])",
+ "id": "f412edaf53f77bad",
+ "outputs": [],
+ "execution_count": 21
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:56:18.506369Z",
+ "start_time": "2025-04-30T09:56:18.494594Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "t[t<0.222]",
+ "id": "88b97beb3a57c575",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([ 0.2212, 0.2194, 0.2191, ..., -0.2158, -0.2172, -0.2200])"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 22
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-30T09:56:18.878548Z",
+ "start_time": "2025-04-30T09:56:18.777117Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import pandas as pd\n",
+ "for key in results_PID:\n",
+ " print(key, \"number of PFCands in sample:\", len(results_PID[key]))\n",
+ " print(pd.value_counts(pd.Series(results_PID[key]), normalize=False))\n"
+ ],
+ "id": "461362524bad047f",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Delphes number of PFCands in sample: 426711\n",
+ "211.0 306595\n",
+ "22.0 95529\n",
+ "2112.0 24587\n",
+ "Name: count, dtype: int64\n",
+ "CMS FullSim number of PFCands in sample: 149427\n",
+ " 22.0 75853\n",
+ " 130.0 28642\n",
+ " 211.0 22569\n",
+ "-211.0 22363\n",
+ "Name: count, dtype: int64\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/tmp/ipykernel_61141/3118960101.py:4: FutureWarning: pandas.value_counts is deprecated and will be removed in a future version. Use pd.Series(obj).value_counts() instead.\n",
+ " print(pd.value_counts(pd.Series(results_PID[key]), normalize=False))\n"
+ ]
+ }
+ ],
+ "execution_count": 23
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-14T20:12:22.593341Z",
+ "start_time": "2025-05-14T20:12:10.328335Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots(1, 2, figsize=(10, 5))\n",
+ "ax[0].hist(results[\"Delphes\"][\"n_pfcands\"], bins=bins[\"n_pfcands\"], histtype=\"step\", density=True, label=\"PFCands\")\n",
+ "ax[1].hist(results[\"Delphes\"][\"pfcands_pt\"], bins=bins[\"pfcands_pt\"], histtype=\"step\", density=True, label=\"PFCands\")\n",
+ "ax[1].hist(results[\"Delphes\"][\"genp_pt\"], bins=bins[\"genp_pt\"], histtype=\"step\", density=True, label=\"Final-state particles\")\n",
+ "ax[0].hist(results[\"Delphes\"][\"n_genp\"], bins=bins[\"n_genp\"], histtype=\"step\", density=True, label=\"Final-state particles\")\n",
+ "ax[0].hist(results[\"Delphes\"][\"n_parton_level\"], bins=bins[\"n_parton_level\"], histtype=\"step\", density=True, label=\"Parton-level particles\")\n",
+ "ax[1].hist(results[\"Delphes\"][\"parton_level_pt\"], bins=bins[\"parton_level_pt\"], histtype=\"step\", density=True, label=\"Parton-level particles\")\n",
+ "\n",
+ "ax[0].set_ylabel(\"Density\")\n",
+ "ax[0].set_xlabel(\"Number of particles\")\n",
+ "ax[1].set_ylabel(\"Density\")\n",
+ "ax[1].set_xlabel(r\"$log_{10}(p_T)$\")\n",
+ "ax[0].grid()\n",
+ "ax[0].legend()\n",
+ "ax[1].grid()\n",
+ "ax[1].legend()\n",
+ "fig.tight_layout()\n",
+ "fig.show()\n",
+ "fig.savefig(\"/work/gkrzmanc/jetclustering/plot_dataset_stats_900_03.pdf\")"
+ ],
+ "id": "71a35d13854c9396",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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kNOnT0MikWD//v1We43k5GR4enri999/t9prEFkDA2qiJujXrx+ys7MdtufU1qqqqlBWVmax8/35559o1aqVxc5nSRqNBuXl5fWWk8lk8PT0tEGNiIjI2Wi1Wpw+fRp9+vSxd1UaZP78+Rg8eDBGjhxptdcYO3YsevfujRdeeMFqr0FkDQyoiZpg4sSJiI6OxooVK5Cfn19veXPzmbds2QI3NzccPHjQsG3RokVwc3PD2bNnMXfuXKhUKigUCgwfPhznz58HAOzevRt9+/aFXC5HREQENm7caPa1U1JSMHDgQCgUCrRp0wb//Oc/UVJSYlKuqKgIL7zwAjp16gSZTIbg4GA89thjuHTpkmidU1JS8Prrr6Njx47w8vLCzp0767wGWq0WK1asQI8ePeDl5YXAwECMGzcO//vf/0zOnZGRgUOHDhmG1y9atMjseTMzMw1ltm/fjjvuuANeXl5o164dFi1aBK1Wa1T+t99+w//7f/8PPXv2hI+PDxQKBaKjo7F582aTc+t/FmfOnMH8+fPRtm1beHl54dNPP4WbmxsA4KOPPjLUU78NMD8P+tSpU5gwYQJat24NmUyG8PBwPPbYY/jjjz/qvH4A8PPPP2PcuHEICgqCTCZD165dsXTpUpM2njlzBhMmTEBYWBhkMhnatGmDYcOGYc+ePfW+BhERWd/Zs2dRUVHhFAF1amoq9u/fj/nz51v9tf75z3/iiy++wJkzZ6z+WkSWIrF3BYickZubG/79739j5MiRWLp0Kd555x2Lv8aUKVOgVCrxr3/9Czdu3MDKlStx77334vXXX8fzzz+P5557DtOmTcP777+PZ599Fj169MCQIUOMznHy5El89tlnmD59Op588kkcOHAAa9aswenTp7F//364u+s+UysqKsLdd9+NK1euYNq0aejZsydycnKwYcMG3HXXXfj555/Rvn17o3MvWLAAGo0G06dPh6+vL7p27VpneyZPnoydO3di5MiReO655/Dnn39i/fr1GDRoEA4fPow+ffrgb3/7G7Zu3Yp58+YhKCgIL730EgDgjjvuqPd6ffXVV7h06RJmzpyJNm3a4KuvvsLixYtx+fJlfPjhh4ZyBw8exA8//IAxY8agQ4cOKC0txa5duzB9+nTcuHEDCQkJonWXy+WIj4+Hm5sb+vTpg61btyIuLg4xMTF45pln6q0fAHz9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w8ORnp5uGF596tQp+Pj4GNazBoABAwbg3nvvRWJioiGg1g/3vuOOO3DHHXc0eErRyZMnoVQqDStf1LZ69WqMGzeO86fJqTDLNxERERGRE9BoNNBqtUbbysvLMWXKFAiCgLlz5xrtq6qqQnl5OTQaDQRBQHl5OSoqKgz7n376aSxfvhzZ2dm4ceMGFi1ahKeeesqwKobeypUrkZqain379gHQBd5SqdTs0l3mnDx5ElFRUaK9119++SVOnz5tWI2EyFmwh5qInFpERESdS04RERG5iiNHjuDpp5/GY489hnbt2uHatWvYtm0bMjMz8e6775ok8tq6datRwk25XI727dsb5lL/61//Ql5eHnr27Inq6mo88sgjogFtz549jQJ5fa+2WGbyutSVkOyhhx5CZWVlo85H5AiYlIyIiIiIyAn8/PPPeP755/Hrr7+iqKgI/v7+uPvuu7FgwQLExMTYpA6CIMDPzw9jxozBf/7zH5u8JpEjY0BNRERERERE1AScQ01ERERERETUBAyoiYiIiIiIiJqAATURERERERFREzCgJiIiIiIiImoCBtRERERERERETcCAmoiIiIiIiKgJGFATERERERERNQEDaiIiIiIiIqImYEBNRERERERE1AQMqImIiIiIiIiagAE1ERERERERURP8f7nQC72F+GqVAAAAAElFTkSuQmCC"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 14
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-31T11:15:14.440909Z",
+ "start_time": "2025-05-31T11:15:14.387047Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "coords = [[-1.5495, 1.5181, -4.9033],\n",
+ " [ 1.8002, -0.5530, -3.8560],\n",
+ " [-1.9474, 0.6230, -4.3363],\n",
+ " [ 1.7321, -0.6857, -3.8155],\n",
+ " [-1.2961, 1.6802, -4.8287],\n",
+ " [-1.2839, -2.1370, -4.4393],\n",
+ " [-1.4424, -1.7286, -4.2799],\n",
+ " [ 0.1110, -2.0428, -4.0486],\n",
+ " [ 1.7312, -0.6954, -3.8144],\n",
+ " [ 1.7297, -0.6824, -3.8322],\n",
+ " [-1.8395, -1.7283, -3.9620],\n",
+ " [ 1.7296, -0.6818, -3.8273],\n",
+ " [ 1.8919, -0.8495, -3.5727],\n",
+ " [ 2.1612, 1.0300, -2.7974],\n",
+ " [-0.8509, 2.2663, -2.4021],\n",
+ " [ 2.4569, 0.3862, -1.1353],\n",
+ " [-2.3553, 1.1776, -1.1737],\n",
+ " [ 1.9910, 1.1444, -1.0023],\n",
+ " [-2.5883, 0.0416, -0.7842],\n",
+ " [-2.5706, -0.4352, -0.3717],\n",
+ " [-1.0482, 1.9849, 2.2524],\n",
+ " [ 0.2583, -3.0923, 1.6670],\n",
+ " [ 0.2733, -3.0734, 1.6618],\n",
+ " [ 0.2736, -3.0727, 1.6619],\n",
+ " [ 0.2721, -3.0689, 1.6643],\n",
+ " [ 0.2788, -3.1115, 1.6720],\n",
+ " [ 0.2725, -3.0669, 1.6684],\n",
+ " [ 0.2710, -3.0689, 1.6641],\n",
+ " [ 0.2585, -3.0979, 1.6599],\n",
+ " [-1.0291, 2.0454, 2.2981],\n",
+ " [-1.0465, 1.9903, 2.2726],\n",
+ " [-1.0302, 1.9728, 2.2429],\n",
+ " [-1.0280, 1.9718, 2.2419],\n",
+ " [-1.0539, 1.9851, 2.2746],\n",
+ " [-2.5836, -0.1239, 2.0100],\n",
+ " [ 0.6796, 2.2723, 2.5656],\n",
+ " [-0.1359, 2.5075, 2.0266],\n",
+ " [-1.0477, 1.9909, 2.2711],\n",
+ " [-1.0507, 1.9939, 2.2730],\n",
+ " [-1.0606, 2.0036, 2.2905],\n",
+ " [-1.0532, 1.9953, 2.2756],\n",
+ " [-1.0605, 1.9991, 2.2831],\n",
+ " [-1.5282, -1.5603, 3.4762],\n",
+ " [-2.2670, -0.2648, 2.6845],\n",
+ " [-1.9903, -0.6650, 3.4736],\n",
+ " [-1.4865, -1.2766, 3.9683],\n",
+ " [ 1.7136, -0.7725, 4.5989],\n",
+ " [ 1.8753, 1.3465, 4.3027],\n",
+ " [-0.5179, 1.5121, 4.1774],\n",
+ " [-0.8766, 0.8558, 4.4702],\n",
+ " [-0.0182, -1.2837, 4.9791],\n",
+ " [-0.1444, 1.1217, 4.6578],\n",
+ " [ 1.7559, -0.6154, -3.8510],\n",
+ " [-1.2387, -1.9353, -4.9707],\n",
+ " [ 1.7268, 1.1658, -4.3823],\n",
+ " [-1.4515, 1.6441, -4.8593],\n",
+ " [-1.3179, 1.6815, -4.7743],\n",
+ " [-0.1045, -2.3308, -4.3743],\n",
+ " [-1.8832, -1.3721, -4.3317],\n",
+ " [ 1.7287, -0.6889, -3.8307],\n",
+ " [-0.6607, 2.0334, -4.5526],\n",
+ " [ 1.7270, -0.6859, -3.8331],\n",
+ " [ 1.7289, -0.6878, -3.8302],\n",
+ " [ 1.7307, -0.6913, -3.8281],\n",
+ " [ 1.7300, -0.6917, -3.8338],\n",
+ " [ 1.7237, -0.6834, -3.8404],\n",
+ " [ 0.9324, 2.1103, -3.8345],\n",
+ " [ 0.1314, -2.6416, -3.7561],\n",
+ " [ 0.4108, 2.4644, -3.4821],\n",
+ " [ 1.8581, 1.6913, -2.9619],\n",
+ " [-0.6988, -2.8416, -3.4301],\n",
+ " [-2.4096, 1.0791, -3.0608],\n",
+ " [-1.9346, -2.3986, -3.2612],\n",
+ " [-2.8202, -0.3674, -2.5191],\n",
+ " [ 1.5948, -2.3387, -2.6920],\n",
+ " [-2.3447, 1.4450, -2.6945],\n",
+ " [ 1.8883, 1.8531, -2.4968],\n",
+ " [-2.7066, 0.8713, -2.0058],\n",
+ " [ 1.2271, -2.0250, -1.7775],\n",
+ " [-0.4909, 2.5491, -1.7718],\n",
+ " [-2.4650, 1.2539, -1.6431],\n",
+ " [-2.4215, 1.2844, -1.5542],\n",
+ " [-2.9195, -0.0815, -1.5910],\n",
+ " [-0.2205, 2.4693, -1.3814],\n",
+ " [ 0.1663, 2.6569, -1.5103],\n",
+ " [ 2.1484, -1.5973, -1.3556],\n",
+ " [-2.2260, 1.4108, -0.9103],\n",
+ " [ 1.9613, -1.7548, -1.1233],\n",
+ " [-2.4416, 1.0491, -0.3177],\n",
+ " [-0.2563, 2.7018, -0.8662],\n",
+ " [-2.7791, -0.5757, -0.5431],\n",
+ " [ 0.4024, 2.6131, -0.4431],\n",
+ " [ 2.5178, 0.8502, 0.4847],\n",
+ " [-2.6602, 0.8035, 0.3658],\n",
+ " [ 0.2553, -3.0933, 1.7118],\n",
+ " [-2.5910, -1.0201, 0.2433],\n",
+ " [-2.7835, -0.8216, 0.2306],\n",
+ " [ 2.5159, -0.1739, 0.9913],\n",
+ " [ 0.2363, -3.0927, 1.6966],\n",
+ " [-2.7367, -0.6971, 0.3999],\n",
+ " [-2.7609, -0.3865, 0.7086],\n",
+ " [-1.6522, 1.8659, 1.7182],\n",
+ " [ 0.2578, -3.0862, 1.6667],\n",
+ " [-0.2298, 2.6499, 1.5963],\n",
+ " [ 0.2508, -3.0918, 1.6665],\n",
+ " [ 0.2482, -3.0926, 1.6696],\n",
+ " [ 0.2737, -3.0784, 1.6605],\n",
+ " [ 0.2481, -3.0917, 1.6644],\n",
+ " [ 0.2647, -3.0850, 1.6596],\n",
+ " [ 0.2623, -3.0884, 1.6588],\n",
+ " [-1.4646, 1.8452, 2.0915],\n",
+ " [-2.2643, -1.6206, 1.0842],\n",
+ " [ 0.2301, -3.1009, 1.6605],\n",
+ " [-1.4628, 1.8018, 2.2425],\n",
+ " [ 0.2339, -3.0795, 1.6793],\n",
+ " [-1.0385, 1.9833, 2.2603],\n",
+ " [-1.0577, 1.9904, 2.2839],\n",
+ " [-1.0558, 1.9922, 2.2834],\n",
+ " [-1.0527, 1.9960, 2.2797],\n",
+ " [-1.0536, 1.9928, 2.2801],\n",
+ " [-1.0539, 1.9982, 2.2807],\n",
+ " [-1.0590, 1.9991, 2.2892],\n",
+ " [-1.0658, 2.0011, 2.3000],\n",
+ " [-1.2474, 1.8863, 2.3004],\n",
+ " [ 2.1478, 1.7096, 2.9009],\n",
+ " [-1.0622, 1.9916, 2.2844],\n",
+ " [-2.3035, -1.0750, 2.2711],\n",
+ " [-1.0710, 1.9968, 2.3003],\n",
+ " [-2.6559, -0.5099, 2.6154],\n",
+ " [-2.5435, -0.7722, 2.6196],\n",
+ " [-1.7327, -1.5407, 2.8306],\n",
+ " [ 1.4247, 2.1963, 3.1533],\n",
+ " [-2.4239, -0.7195, 2.7774],\n",
+ " [ 1.0783, -1.5793, 3.5572],\n",
+ " [-1.0719, 2.0107, 2.3254],\n",
+ " [-1.5413, -1.5747, 3.8089],\n",
+ " [-1.9877, 0.3660, 3.7720],\n",
+ " [-0.8537, -1.5105, 4.3160],\n",
+ " [ 1.2687, -1.1840, 4.4178],\n",
+ " [-1.1016, 1.9143, 2.5185],\n",
+ " [-0.5844, 1.9916, 3.0937],\n",
+ " [ 0.4118, -1.4831, 4.8097],\n",
+ " [-1.9231, -0.8451, 4.5775],\n",
+ " [ 1.6286, 1.5225, 4.2854],\n",
+ " [ 0.6973, -1.3760, 4.7879],\n",
+ " [-0.7651, 1.6440, 3.5630],\n",
+ " [-1.6317, -0.8411, 4.5377],\n",
+ " [-1.3141, 0.5300, 4.4915],\n",
+ " [-0.2546, -1.3260, 4.7748],\n",
+ " [ 0.8105, -1.3046, 4.9323],\n",
+ " [-1.2935, -1.0732, 4.7983],\n",
+ " [ 1.1187, 1.4635, 4.6111],\n",
+ " [ 0.1263, -1.4405, 5.2035],\n",
+ " [-0.7197, 0.8044, 4.7162],\n",
+ " [-1.2921, 0.2434, 4.8551],\n",
+ " [-1.4319, 1.6379, -4.9875],\n",
+ " [-1.3789, -1.7148, -4.7961],\n",
+ " [-1.0506, -1.9610, -4.9114],\n",
+ " [ 1.8139, -0.3751, -3.9478],\n",
+ " [-0.4422, 2.0030, -4.6756],\n",
+ " [-1.5153, 1.4905, -4.8983],\n",
+ " [-0.7448, -2.0965, -4.8363],\n",
+ " [ 1.7369, -0.6929, -3.8165],\n",
+ " [ 1.1666, 1.8592, -4.3868],\n",
+ " [-1.5347, 1.4869, -4.8752],\n",
+ " [ 1.7298, -0.6822, -3.8200],\n",
+ " [ 1.7221, -0.6895, -3.8375],\n",
+ " [ 0.5449, 2.1305, -4.2536],\n",
+ " [ 1.8106, -0.5354, -3.8379],\n",
+ " [ 0.4226, 2.2470, -4.3040],\n",
+ " [ 2.0053, -0.0148, -3.8170],\n",
+ " [ 1.7022, -0.7035, -3.8582],\n",
+ " [ 1.9207, -0.2926, -3.7746],\n",
+ " [-2.5486, 0.5570, -4.0015],\n",
+ " [ 0.4743, -2.4599, -3.9817],\n",
+ " [ 1.7211, -0.6852, -3.8501],\n",
+ " [-2.7976, 0.2078, -3.4566],\n",
+ " [ 1.9234, 1.6622, -2.9035],\n",
+ " [ 2.6970, 0.6452, -1.9762],\n",
+ " [ 0.8624, 2.4908, -1.7694],\n",
+ " [-2.7716, 0.7279, -1.8379],\n",
+ " [-2.5015, 1.3891, 0.7576],\n",
+ " [-2.5478, 1.2249, 1.2333],\n",
+ " [ 0.2852, -3.1159, 1.6838],\n",
+ " [ 0.2703, -3.0723, 1.6628],\n",
+ " [ 0.2747, -3.0758, 1.6664],\n",
+ " [ 0.2716, -3.0663, 1.6699],\n",
+ " [-1.0502, 1.9967, 2.2694],\n",
+ " [-1.0356, 1.9797, 2.2523],\n",
+ " [ 2.3012, 1.7356, 2.6705],\n",
+ " [-1.0417, 1.9858, 2.2603],\n",
+ " [-2.5048, 0.7891, 2.2492],\n",
+ " [-1.0761, 1.9841, 2.2889],\n",
+ " [ 0.2233, -2.7180, 1.8989],\n",
+ " [ 2.0025, 1.5902, 3.8203],\n",
+ " [ 2.3503, -0.5705, 4.4868],\n",
+ " [-1.9414, -0.4823, 4.0726],\n",
+ " [ 0.5874, -1.5055, 5.0040],\n",
+ " [ 2.0987, 1.1740, 4.4301],\n",
+ " [-1.5761, -1.0223, 4.9043],\n",
+ " [ 0.7406, -1.4267, 5.0236],\n",
+ " [ 1.1782, -1.2781, 4.8671],\n",
+ " [ 2.3957, 0.4659, 4.7731],\n",
+ " [-0.7265, 1.0960, 4.3860],\n",
+ " [-1.6559, 0.0731, 4.6102],\n",
+ " [-1.4022, -0.9981, 4.6817],\n",
+ " [ 0.4934, -1.4326, 5.1184],\n",
+ " [ 0.8276, -1.3685, 5.1070],\n",
+ " [-1.5080, 0.0846, 4.9621],\n",
+ " [-1.5497, -0.0830, 4.8425],\n",
+ " [ 1.5397, -0.8816, 4.9830],\n",
+ " [ 2.0744, 0.9103, 4.7717]]\n",
+ "coords = torch.tensor(coords)"
+ ],
+ "id": "26173542a2a972b6",
+ "outputs": [],
+ "execution_count": 9
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-31T11:15:30.659463Z",
+ "start_time": "2025-05-31T11:15:30.464237Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "ax.scatter(coords[:, 0], coords[:, 2], s=10, c=coords[:, 1], cmap=\"viridis\")"
+ ],
+ "id": "5430f012112dae35",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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li5dalIy0ZnJ65z/SIFygM8//5xTTz21/jglJYUHH3yQiy66yMRUoevee+8F4JJLLjE5iegIdu3aRWJiYpNLi3ft2pVFixbhdrux2+0mpBOdkc/n4y9/+QtWq5Xzzz/f7DgdTocqUEpLS3nkkUea/fg5c+YQHx9ffzx+/HgWLlxITU0Na9eu5fXXX6ekpASv14vV2qF+VE1q68/vQA8++CBvvfUWs2fPZurUqe2UMPi1589QNFRdXX3IfU8cDkf9Y6RAEYFy00038fPPP/O3v/2Nfv36mR2n4zF7EEx72rZtmwKa/WfTpk2HPV9ubq5KSEhQs2fPDtB3YK72+vnNnz9faZqmZsyYodxud4C/C3O1189QBsk2NnjwYJWcnNzk12bOnKkA5XK5ApwqdMkg2ba56667FNBp3h/M0KFG5GVmZqKUavaf3r17H/Z8aWlpTJs2jWeffRaXyxWg78I87fHze+6555g9ezYnnHACCxYswGazmfCdmKe9/w2K/dLS0igsLGzydzE3N5fExETpPREBcd999/HAAw9w6aWX8tRTT5kdp8PqUAWKP9TU1ODz+SgvLzc7StB77rnnuOKKK5g2bRrvvfeebEMu2tWYMWMwDIMlS5Y0aK+trWXlypWMHj3apGSiM7nvvvuYO3cul1xyCc8884wsqOhHUqAA+fn5TbavXbuWr776il69epGUlBTgVKHl+eef58orr2Tq1Km8//779WMChGgvs2bNQtO0RmN85s+fT3V1NRdccIE5wUSncf/99zN37lwuuuginnvuOVkWwM86/sjPZpg3bx4LFy5kxowZ9V30WVlZvPTSS3g8Hp588kmzIwa1Dz74gMsvv5zo6GhmzZrFggULGnw9MjKSM844w5xwIeTDDz9k1apVAPVbLDzwwAMAxMbGcv3115uWLRgMGTKE6667jieeeIKzzjqL6dOns27dOh577DGmTJkisyia4aWXXmLHjh0AFBQU4Ha76/+NZWRkyIzFw3jyySe599576d69O9OmTePVV19t8PWUlBSOP/54k9J1UP4e5BIKFi5cqM4++2yVkZGhnE6nstvtqkePHur3v/+9ysrKMjte0Lv33nsPOxBUBuI1zyWXXCI/wyPwer3q3//+t+rbt6+y2+0qLS1N3XzzzaqiosLsaCFhypQph/w3NmXKFLPjBbXD/X7Kz88/ZC8eIYQQQgQduYEmhBBCiKAjBYoQQgghgo4UKEIIIYQIOlKgCCGEECLoSIEihBBCiKAjBYoQQgghgo4UKEIIIYQIOlKgCCGEECLoSIEihBBCiKAjBYoQQgghgo4UKEIIIYQIOlKgCCGEECLoSIEihBBCiKDz//EeEmLWWxd7AAAAAElFTkSuQmCC"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 12
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "43aba95d09ade39c"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/data_exploration_genParticles_vs_parton_level.ipynb b/notebooks/data_exploration_genParticles_vs_parton_level.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..ecd905e1ede82f702e3ba812e6dfbbce4945082c
--- /dev/null
+++ b/notebooks/data_exploration_genParticles_vs_parton_level.ipynb
@@ -0,0 +1,459 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-27T12:45:54.704119Z",
+ "start_time": "2025-05-27T12:45:54.694959Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import torch\n",
+ "import sys\n",
+ "import os.path as osp\n",
+ "import os\n",
+ "import sys\n",
+ "import numpy as np\n",
+ "from src.dataset.dataset import SimpleIterDataset, EventDataset\n",
+ "from src.utils.utils import to_filelist\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import matplotlib\n",
+ "matplotlib.rc('font', size=13)\n",
+ "from src.plotting.plot_event import plot_event_comparison\n",
+ "from src.dataset.functions_data import concat_events"
+ ],
+ "id": "6bae9707acf4a848",
+ "outputs": [],
+ "execution_count": 12
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-27T12:45:55.569647Z",
+ "start_time": "2025-05-27T12:45:55.555057Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "def remove_from_list(lst):\n",
+ " out = []\n",
+ " for item in lst:\n",
+ " if item in [\"hgcal\", \"data.txt\", \"test_file.root\"]:\n",
+ " continue\n",
+ " out.append(item)\n",
+ " return out\n",
+ "\n",
+ "#path = \"/eos/user/g/gkrzmanc/jetclustering/data/SVJ_std_UL2018_scouting_test_large/SVJ_mMed-700GeV_mDark-20GeV_rinv-0.7_alpha-peak\"\n",
+ "def get_iter(path_to_root_file):\n",
+ " datasets = [path_to_root_file]\n",
+ " class Args:\n",
+ " def __init__(self):\n",
+ " self.data_train = datasets\n",
+ " self.data_val = datasets\n",
+ " #self.data_train = files_train\n",
+ " self.data_config = '/work/gkrzmanc/jetclustering/code/config_files/config_jets_2_delphes.yaml'\n",
+ " self.extra_selection = None\n",
+ " self.train_val_split = 1\n",
+ " self.data_fraction = 1\n",
+ " self.file_fraction = 1\n",
+ " self.fetch_by_files = False\n",
+ " self.fetch_step = 1\n",
+ " self.steps_per_epoch = None\n",
+ " self.in_memory = False\n",
+ " self.local_rank = None\n",
+ " self.copy_inputs = False\n",
+ " self.no_remake_weights = False\n",
+ " self.batch_size = 10\n",
+ " self.num_workers = 0\n",
+ " self.demo = False\n",
+ " self.laplace = False\n",
+ " self.diffs = False\n",
+ " self.class_edges = False\n",
+ "\n",
+ " args = Args()\n",
+ " train_range = (0, args.train_val_split)\n",
+ " train_file_dict, train_files = to_filelist(args, 'train')\n",
+ " train_data = SimpleIterDataset(train_file_dict, args.data_config, for_training=True,\n",
+ " extra_selection=args.extra_selection,\n",
+ " remake_weights=True,\n",
+ " load_range_and_fraction=(train_range, args.data_fraction),\n",
+ " file_fraction=args.file_fraction,\n",
+ " fetch_by_files=args.fetch_by_files,\n",
+ " fetch_step=args.fetch_step,\n",
+ " infinity_mode=False,\n",
+ " in_memory=args.in_memory,\n",
+ " async_load=False,\n",
+ " name='train', jets=True)\n",
+ "\n",
+ " iterator = iter(train_data)\n",
+ "\n",
+ " return iterator\n"
+ ],
+ "id": "e7a7ef680143801e",
+ "outputs": [],
+ "execution_count": 13
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-27T12:46:41.336552Z",
+ "start_time": "2025-05-27T12:46:40.557108Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "dataset = iter(EventDataset.from_directory(\"/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/preprocessed_data/Delphes_020425_test_PU_PFfix_part0/SVJ_mZprime-900_mDark-20_rinv-0.7_alpha-peak\"))#/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/preprocessed_data/Delphes_020425_test_PU_PFfix_part0/SVJ_mZprime-900_mDark-20_rinv-0.3_alpha-peak\"\"))",
+ "id": "1549361c5b028634",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "File: final_parton_level_particles.pkl\n",
+ "File: pfcands.pkl\n",
+ "File: matrix_element_gen_particles.pkl\n",
+ "File: final_gen_particles.pkl\n",
+ "get_pfcands_key\n"
+ ]
+ }
+ ],
+ "execution_count": 19
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-27T12:58:39.216087Z",
+ "start_time": "2025-05-27T12:58:39.150338Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "dataset = iter(EventDataset.from_directory(\"/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/preprocessed_data/QCD_test_part0/qcd_test/\"))#/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/preprocessed_data/Delphes_020425_test_PU_PFfix_part0/SVJ_mZprime-900_mDark-20_rinv-0.3_alpha-peak\"\"))",
+ "id": "cbc562e72f04a48c",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "File: final_parton_level_particles.pkl\n",
+ "File: pfcands.pkl\n",
+ "File: matrix_element_gen_particles.pkl\n",
+ "File: final_gen_particles.pkl\n",
+ "get_pfcands_key\n"
+ ]
+ }
+ ],
+ "execution_count": 66
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-27T12:59:02.366835Z",
+ "start_time": "2025-05-27T12:59:02.354380Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "evt = next(dataset)",
+ "id": "e0d491f2943f20e9",
+ "outputs": [],
+ "execution_count": 78
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-27T12:59:08.777938Z",
+ "start_time": "2025-05-27T12:59:08.457983Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots(figsize=(4,4))\n",
+ "ax.scatter(evt.pfcands.eta, evt.pfcands.phi, s=evt.pfcands.pt, alpha=0.6, color=\"black\")\n",
+ "# put white triangles as matrix element gen particles\n",
+ "\n",
+ "# put black background to the whole plot\n",
+ "e, ph = evt.matrix_element_gen_particles.eta, evt.matrix_element_gen_particles.phi\n",
+ "ax.scatter(e, ph, s=evt.matrix_element_gen_particles.pt, color=\"blue\", alpha=0.3, marker=\"^\")\n",
+ "# put the white circle and the triangle in the custom legend, where the circle has label 'PFCand' and the triangle has label 'quark'\n",
+ "from matplotlib.lines import Line2D\n",
+ "\n",
+ "# Custom legend\n",
+ "legend_elements = [\n",
+ " Line2D([0], [0], marker='o', color='black', label='PFCand',\n",
+ " markerfacecolor='black', markersize=10, linestyle='None', alpha=0.6),\n",
+ " Line2D([0], [0], marker='^', color='blue', label='quark', linestyle=\"None\", markersize=10, alpha=0.6)\n",
+ "]\n",
+ "ax.legend(handles=legend_elements, loc='upper right', fontsize=11)\n",
+ "# put legend in top right\n",
+ "\n",
+ "#ax.set_facecolor(\"black\")\n",
+ "ax.set_xlabel(\"$\\eta$\")\n",
+ "ax.set_ylabel(\"$\\phi$\")\n",
+ "fig.tight_layout()\n",
+ "fig.show()\n",
+ "fig.savefig(\"/work/gkrzmanc/jetclustering/fig_QCD.png\")"
+ ],
+ "id": "439703711bc9d1ab",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 80
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-27T12:58:45.300368Z",
+ "start_time": "2025-05-27T12:58:45.294336Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "labels = [\"scounting PFCands\", \"genParticles\", \"parton level\"]\n",
+ "colors = [\"gray\", \"blue\", \"red\"]\n",
+ "classes = [\"pfcands\", \"final_gen_particles\", \"final_parton_level_particles\"]"
+ ],
+ "id": "87c6ab0ccf50fa58",
+ "outputs": [],
+ "execution_count": 71
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-21T10:23:07.102431Z",
+ "start_time": "2025-05-21T10:23:06.030865Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots(1, 3, figsize=(12, 4))\n",
+ "for k in range(3):\n",
+ " evt = next(dataset)\n",
+ " for i in range(3):\n",
+ " pt = getattr(evt, classes[i]).pt\n",
+ " eta = getattr(evt, classes[i]).eta\n",
+ " phi = getattr(evt, classes[i]).phi\n",
+ " eta_dq, phi_dq = evt.matrix_element_gen_particles.eta, evt.matrix_element_gen_particles.phi\n",
+ " pt_dq = evt.matrix_element_gen_particles.pt\n",
+ " #ax[i].scatter(eta, phi, s=pt, color=colors[i], alpha=0.3)\n",
+ " # plot the matrix element gen particles - with a size of pt and a blue triangle symbol\n",
+ " #ax[i].scatter(eta_dq, phi_dq, s=pt_dq, color=\"blue\", alpha=0.3, marker=\"^\")\n",
+ " #ax[i].set_title(labels[i])\n",
+ " ax[k].set_xlabel(\"$\\eta$\")\n",
+ " ax[k].set_ylabel(\"$\\phi$\")\n",
+ " ax[k].scatter(eta, phi, s=pt, color=colors[i], alpha=0.3, label=labels[i])\n",
+ " # put PID where the circles are\n",
+ " #for j, txt in enumerate(getattr(evt, classes[i]).pid):\n",
+ " # ax[i].annotate(txt.int().item(), (eta[j], phi[j]), size=5)\n",
+ " #ax[-1].set_title(\"all\")\n",
+ "fig.tight_layout()\n",
+ "fig.savefig(\"/work/gkrzmanc/jetclustering/results/event_example.pdf\")\n",
+ "fig.show()"
+ ],
+ "id": "1fbd0a62f4b32c62",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 18
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T11:54:49.319156Z",
+ "start_time": "2025-04-10T11:54:45.182837Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots(1, 4, figsize=(20, 5))\n",
+ "for i in range(3):\n",
+ " pt = getattr(evt, classes[i]).pt\n",
+ " eta = getattr(evt, classes[i]).eta\n",
+ " phi = getattr(evt, classes[i]).phi\n",
+ " eta_dq, phi_dq = evt.matrix_element_gen_particles.eta, evt.matrix_element_gen_particles.phi\n",
+ " pt_dq = evt.matrix_element_gen_particles.pt\n",
+ " ax[i].scatter(eta, phi, s=pt, color=colors[i], alpha=0.3)\n",
+ " # plot the matrix element gen particles - with a size of pt and a blue triangle symbol\n",
+ " ax[i].scatter(eta_dq, phi_dq, s=pt_dq, color=\"blue\", alpha=0.3, marker=\"^\")\n",
+ " #ax[i].set_title(labels[i])\n",
+ " ax[i].set_xlabel(\"eta\")\n",
+ " ax[i].set_ylabel(\"phi\")\n",
+ " ax[-1].scatter(eta, phi, s=pt, color=colors[i], alpha=0.3, label=labels[i])\n",
+ " # put PID where the circles are\n",
+ " for j, txt in enumerate(getattr(evt, classes[i]).pid):\n",
+ " ax[i].annotate(txt.int().item(), (eta[j], phi[j]), size=5)\n",
+ "ax[-1].set_title(\"all\")\n",
+ "fig.savefig(\"/work/gkrzmanc/jetclustering/results/event_with_PIDs.pdf\")\n",
+ "fig.show()"
+ ],
+ "id": "cfb0094f1c9bdb1f",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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gZEr165d44033gBg2LBhBSYizh9evnr1as6dO1dgm1dfffWe5cVKKr9n16lTp2y636JERkbSrVs3cnJyeOONNwrUQs7v4euomjdvzvvvv4+iKPTs2ZMvv/yy0AOe2Wxm27ZttGrViv379wOWv5v80mS3P1h+/fXXrFmzxqZx5v9dzZo1iz///NO63GAwMGLECPR6faFtjh8/zvr168nJySmwXFEUduzYAWAd6SWEqDz69u1L7dq1OX78OHPnzi3w3rZt29iwYUOhbQYPHkxISAhffvklH374YZE160+ePMmmTZvKLe47yR+xsWTJEnJzc63LL168yNChQ8u079LeC0ePHo2HhwfLly/n888/L3SPPn36NKdPn77nfsaMGYOXlxfvvfcey5YtK1QLWlEUfv755wKJ81WrVlkT/LdKSEjgt99+A+TaLYQoH/Pnz+fw4cPWn/Py8hg7dizJyck0a9bMmvSHv67dCxYsKLCPXbt2MXv27DLFca9rd37noQkTJhR4rjIajYwYMYK0tDTatGlTYA6UiuLi4sLkyZMxGo08++yz/Prrr4XW0ev1fPPNN0V2VnvxxRdRq9WsXbvWmvjPT8TcLv8Z64UXXrA+o9zKaDSybdu2Yt2vhBBCFFaezylCOCJJuoh7Wrx4MQ0aNCAqKoqePXsyYMAAOnToQIsWLTAajbz11lsEBgZa1//kk0/o0qULv/76Kw0aNOCJJ56gf//+1nqNt19MFy5cSOPGjfnhhx+IjIykb9++REdHExUVxR9//EGHDh2YOnVqgW0ee+wxOnfuTHp6Og8++CDPPPMMTz75JA0bNsTZ2Zm2bdva9Bz07NkTgI4dO/L888/z2muv8dprr9n0GLdauHAhwcHBbNiwgXr16tGvXz+efvppmjZtykMPPWRtIMrvdexIJk6cyOzZs8nLy2PIkCHUrl2brl27MmDAAJ5++mkCAwPp0aMH58+fJyIiAgAnJycmTpwIWGr1P/roo/Tv35/mzZvz0ksv8fbbb9s0xl69ejFo0CBSUlJo2bIlTz31FM8//zz169fn3//+Ny+99FKhbeLj4+nXrx81a9akffv29O/fn169ehEeHs6aNWuoU6cO48aNs2mcQojy5+npyVdffYWLiwujR4+mWbNm1uvQs88+y4gRI4CC11svLy/++c9/EhwczIQJEwgNDaVTp068+OKL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Mz4+gIXtqUkWxNr7UOYoRHZMqwVu3QJ8fY1fJDn2offxXBDVLTfXOCtLoZA6ErJE9e1DbWKmy+DBgzF48GCpwyBqErlcjnbt2sHPzw9OTk5wcnKSOiQiIiKzcHTkNSiyfcxRiOyYUgnUsLE0ERFZPm9vqSMgW2ATRRciWyGXy+Hq6ip1GERERERERERERETUCI1f5I6IiIiIiIiIiIiIiIhMWHQhIiIiIiIiIiIiIiISAYsuREREREREREREREREImDRhYiIiIiIiIiIiIiISAQsuhAREREREREREREREYmARRciIiIiIiIiIiIiIiIRsOhCREREREREREREREQkAhZdiIiIiIiIiIiIiIiIRMCiCxERERERERERERERkQhYdCEiIiIiIiIiIiIiIhIBiy5EREREREREREREREQiYNGFiIiIiIiIiIiIiIhIBCy6EBERERERERERERERicBR6gAskSAIAAC1Wi1xJERE1qei76zoS+0ZxxMiosbjeFIVxxQiosbjmHIfxxMiosar73jCoksNCgsLAQBBQUESR0JEZL0KCwvh6ekpdRiS4nhCRNR0HE+MOKYQETUdxxSOJ0REYnjYeCITWOavxmAwICMjAyqVCjKZTOpwABiraEFBQbh9+zY8PDykDkcyPA88BwDPAWDZ50AQBBQWFsLf3x9yuX2vYmkp44klv1/MhW1mm22VPbWZ40lVjRlT7On98iB7bjtg3+2357YD9t3+utrOMeU+S8lRHmRv712217axvbarvuMJZ7rUQC6XIzAwUOowauTh4WHzb9764HngOQB4DgDLPQf2fvdYBUsbTyz1/WJObLN9YJttF8eT+5oyptjL+6Um9tx2wL7bb89tB+y7/bW1nWOKkaXlKA+yt/cu22vb2F7bVJ/xxL7L+0RERERERERERERERCJh0YWIiIiIiIiIiIiIiEgELLpYCaVSiaVLl0KpVEodiqR4HngOAJ4DgOeAGsYe3y9ss31gm4nqZs/vF3tuO2Df7bfntgP23X57brstsLffH9tr29hekgmCIEgdBBERERERERERERERkbXjTBciIiIiIiIiIiIiIiIRsOhCREREREREREREREQkAhZdiIiIiIiIiIiIiIiIRMCiCxERERERERERERERkQhYdLFS6enpWL16Nfr37w8/Pz+4ubmha9eueO+995CTkyN1eM3myy+/xMSJE9G5c2c4ODhAJpNJHZJZGAwGrF+/Hp07d4azszOCgoKwYMECFBcXSx1as1m9ejXGjx+P0NBQyGQyhISESB1Ss0tMTMSHH36IJ598Ei1btoRKpUKPHj2wcuVKu3ov0MOFhIRAJpPV+JWdnV3v1/n5558xePBgqFQqeHh44MUXX8Tly5fNF3gjiTUmTpkypdbzdvDgQTO2oHZN7f+tbfwQo58bMGBArb/HX375xcwtaJza4nV3d6/3a8TExOCpp56Cm5sbvL29MX78eNy6dcuMUZO10mg0+Oijj9C1a1e4uLjA29sb/fr1wz//+U+pQ2tWBoMB/fr1g0wmw8iRI6UOx6zsJXe0tjFPLMwRqtJoNKaccfbs2VKHQ3Wwp5zFVvMVe8pVmKcwT2koR6kDoMY5cuQIli1bhhEjRuC9996DSqXC+fPnsWHDBuzduxcXLlxAmzZtpA7T7FavXo2cnBw8/vjjKC4uRlpamtQhmcX8+fOxceNGjB49GgsWLMD169exceNGXLp0CbGxsZDLbb9++uc//xne3t544oknkJ+fL3U4ktixYwc2b96Ml156CRMnToSTkxOOHz+OJUuWYP/+/Th37hxcXFykDpMsROfOnbF48eJqx1UqVb1+/ty5cxgwYAACAgLw0UcfAQAiIyPx7LPP4syZM+jWrZuo8TaF2GNidHR0tWN9+vQRM+R6a2r/b23jh1j9nK+vL9avX1/teGhoqDnCFsWzzz6LGTNmVDnm5ORUr5/95ptvMG7cOHTv3h2fffYZCgoKsGHDBjz99NP45Zdf4O/vb46QyQrl5eXh+eefR1JSEqZOnYqIiAgUFxfj+vXrSE1NlTq8ZrVlyxZcuXJF6jCahb3kjtY25omFOUJVH374IbKysqQOg+rJXnIWW81X7ClXYZ7CPKXBBLJKV65cEe7cuVPt+LZt2wQAwoIFCySIqvndunVL0Ov1giAIwogRIwRbfEtfuXJFkMlkwpgxY6oc37hxowBA2LNnj0SRNa/ffvvN9P9du3YVgoODpQtGIhcuXBDy8/OrHV+8eLEAQNi0aZMEUZElCg4OFvr379+k1+jdu7egUqmEtLQ007G0tDRBpVIJQ4YMaWKE4hJrTJw8ebJFjSNN7f+tcfwQo5/r37+/1Y0RAITJkyc36md1Op3g7+8vtG3bVigsLDQdv3TpkiCXy4Xp06eLFCXZgtdee01QqVTC1atXpQ5FUrdv3xZUKpWwdu1aAYAwYsQIqUMyK3vIHa1xzBMLc4T74uPjBQcHB9Nne9asWVKHRHWwp5zFFvMVe8tVmKc0nL3nKZZTMqQG6dq1a41V8AkTJgCA3dy1FRISYlGVb3P4v//7PwiCgHnz5lU5Pn36dLi6uuLrr7+WJrBmZslV/+bSq1cveHp6Vjtub597qr/y8nKo1eoG/1xycjIuXLiA8ePHIyAgwHQ8ICAA48ePR2xsLO7evStmqE0i9pgoCALUajUMBoMo8TVWU/t/axw/xOznDAYD1Go1BEEQLT5z0+l0KCoqatDPnDx5EhkZGZg2bVqVaf49evTAgAEDsG/fPpSVlYkdKlmhlJQU/P3vf8f06dPRpUsX6PX6Br/fbMWsWbMQGhqKuXPnSh1Ks7CH3NEaxzyxMEcw0uv1mD59Ol588UWMGTNG6nCoAewhZ7HFfMXechXmKcxTGsq2r1bboYrltVq3bi1xJCSWCxcuQC6XV5sq6uzsjB49euDChQsSRUaWgp97qsnPP/8MV1dXeHp6wsvLC5MnT0ZGRka9fraiX+nXr1+1x5588kkIgoD4+HhR4zWHxn42PD094enpCRcXFwwZMgQ///yzOcJ7qKb2/7Y0fjT0d5meng53d3d4enrC3d0dY8aMQUJCgjlDbLKDBw/C1dUVKpUKrVq1wjvvvIOCgoKH/tzDPq9qtRqJiYmix0vW51//+hcMBgO6dOmCSZMmmd5vgYGBNS5zYasOHjyII0eOYOvWrXBwcJA6HEnZ0t+QtjTmicWWfr/1sX79eiQkJCAyMlLqUKgB7D1nseZ8hbmKEfOU2tl7nsI9XWzM0qVLAQCTJ0+WOBISS0ZGBnx9faFUKqs9FhAQgDNnzkCn00GhUEgQHUlNr9djxYoVcHR0xB//+EepwyEL0bVrV0ybNg2PPPIIysrKcOLECWzfvh1xcXE4f/78Q9dNrUh0Kt8xVqHiWHp6uviBi6yhY2KbNm0wf/589OzZE25ubvj111+xYcMGPPvss4iJicHgwYPNGW41Te3/bWX8aGg/165dOzz99NN47LHH4ODggJ9//hmRkZGIi4vDTz/9ZDFre1fWp08fjB8/HmFhYVCr1YiJiUFkZCROnjyJM2fO1LlRZX0/r127djVP8GQ1bty4AQD44IMP4Ovri61bt0KhUGDr1q2IiIhAfn4+li9fLnGU5lVQUIA5c+bgT3/6E5588kmpw5GcLeWOtjLmicXecoRbt25h6dKl+PDDDxESEoKUlBSpQ6J6YM5i3fkKcxXmKcxT6saii8Ty8/OxYcOGej9/zpw58Pb2rvGxtWvX4sCBA5gxYwYGDRokUoTmJ+Y5sEUajabGQQgw3gFQ8RxLHojIfObNm4ezZ89i1apV6NSpk9ThkIia0jcePXq0ymOvvPIKnnvuOUycOBFLly7Ftm3b6nwtjUYDADX2PZX7HbFJPSZ+8sknVb4PDw/HH//4R/To0QMzZ85EUlJSvWMTQ1P7f1sZPxraz+3cubPK9+PGjcNLL72EAQMGICIiAseOHTNXqI324N2Jr7/+Oh577DEsXrwYX3zxRY0bzFaQ6vNK0mlsX1lYWAjAuDzEqVOn4OPjAwD4wx/+gC5dumDNmjWYN28eWrRoYY6wRdOUsWLhwoUwGAxYvXq1maIzL6nHSUtmK2OeWOwtR3jrrbcQGhqKiIgIqUOxO/aWs0jdD1tSvsJchXkK85SHkGYrGapw69YtAUC9v5KSkmp8nW3btgkymUwYMWKEoNPpmrkVTSPWORgxYoTFbCgmpkcffVRo1apVjY+NHz9eACBotdpmjkpaXbt2tbrNx8xhyZIlAgBhxowZUodCZiBW31hZSEiI4Ofn99Dnff755wIAISYmptpjR48eFQAIX375ZaPaVRdLHROnTJkiABBu3LjR5NdqiKb2/7YwfojZzw0YMEBwcHAQNBqNCJGZn06nExQKhdCvX786nzd79mwBgHDt2rVqj23evFkAIHz//ffmCpMk0Ni+suK9MnHixGqv+eGHH9ba71uaxrb/xx9/FGQymfD1119XeT0AwogRI6RoSoNZ6jhpCWxhzBOLveUI0dHRgkwmE06dOmU6VvFZmTVrloSR2Qd7y1kstR+WIl+x91yFeQrzlIfhni4SCwkJgSAI9f4KCwur9ho7duzAjBkzMHToUPzjH/+Ak5OTBC1pPDHOgS3z9/dHdnY2tFpttcfS09Ph6+tr0ZV/Mo9ly5bh448/xtSpU7F161apwyEzMEffGBISguzs7Ic+r2Iqf03T8SuO1TRFuKksdUwMCQkBgHqdOzE1tf+39vFD7H4uJCQEer0eeXl5IkRnfk5OTqbfYV2k+rySdBrbVwYGBgJAjRv5+vn5AYBVfD4a2/7Zs2eje/fu6Nu3L5KTk01fgPEuy+Tk5Gbv5xvKUsdJS2DtY55Y7C1H0Gq1iIiIwPDhw9GmTRvT5zo1NRWAcUnB5ORk5OfnSxuoDbO3nMVS+2Ep8hV7zlWYpzBPqQ8WXazcjh07MG3aNAwePBiHDh2qdWoeWa/evXvDYDDg/PnzVY6Xlpbi8uXL6NWrl0SRkVSWLVuG5cuXY/Lkydi+fTtkMpnUIZGVSE5OrtcGf7179wYAnD17ttpj586dg0wmQ8+ePUWPr6nMNSZWTNNv7o1om9r/W/P4YY5+LikpCY6OjlazRGlpaSnS0tIe+r572OfVw8MDHTt2NEuMZF0qNqqt2PC1sopjrVq1ataYmlNqaiouX76MDh06VPkCgOPHj6NDhw5YtmyZtEGamS3njtY85onFHnOEkpISZGVl4ejRo1U+1wMGDAAAfP311+jQoQO2b98ubaDUILacs9hSvmKvuQrzFOYp9faQmTBkwXbu3CnI5XLh+eeft5opaOZkq8uL/ec//xFkMpkwZsyYKsc3btwoABCio6Mlikw69ry82PLlywUAwqRJkwS9Xi91OGSBcnJyajweGRkpABBmzpxZ5XhWVpZw/fp1IT8/v8rxXr16CSqVSkhPTzcdS09PF1QqlfD888+LH3gTNWRMrKnNRUVFQklJSbXnXrx4UVAoFMIjjzwieswP05D+Pzk5Wbh+/Xqjf96S1Lefy8jIEK5fvy4UFxebjuXn5wvl5eXVnvvdd98JAIRhw4aZJeamyM7OrvH4u+++KwAQPv30U9Oxmtqs0+kEPz8/oW3btkJhYaHp+OXLlwW5XC68+eab5guerEp5ebkQHBwsuLq6CmlpaabjRUVFQlBQkODl5SUUFRVJGKF5HT58WDhw4EC1LwBCz549hQMHDgiXLl2SOkyzsfXc0VrHPLHYa46g0+lq/Fxv2bJFACC8+OKLwoEDB5p9iVh6OHvMWWwtX7HHXIV5ihHzlPqRCYIgNHOdh0Tw7bffYvTo0fDw8MCaNWvg4uJS5XF3d3eEh4dLE1wzOnLkCH799VcAxrtYbty4gRUrVgAAvLy8MHv2bCnDE80777yDyMhIjB49GsOHD8f169exceNGPP300/j3v/8Nudz2J61FR0ebpolv2rQJOp0OCxYsAAAEBwdj0qRJUobXLDZv3ozZs2ejbdu2WLFiRbXfe+vWrTFkyBCJoiNLsWHDBkRFReHFF19ESEgIysvLceLECRw6dAjt27fH2bNn0bJlS9PzK+7U2blzJ6ZMmWI6fubMGQwcOBCBgYF45513ABg/e/fu3cPp06fRvXv35m5arRo6JtbU5suXL2PYsGEIDw9Hhw4d4Obmhl9//RU7duyAXC7HDz/8gGeeeaYZW2VU3/4/JCQEqampePDPOmsbPxrSz02ZMgW7d+/G8ePHTXe0Hjp0CBERERg1ahRCQ0Ph6OiI8+fP4+uvv4a3tzdOnz5tcXdTzZ8/H+fOncPAgQPRtm1bFBUVISYmBsePH0ffvn1x/Phx03u6pjYDwIEDBzBhwgR0794d06dPh1qtxvr16yGTyRAfH2/T0/apYWJiYvDSSy/B398fb7/9NhQKBXbu3IkrV64gKioKb7zxhtQhNjuZTIYRI0bgu+++kzoUs7GX3NHaxjyxMEeoLiUlBe3atcOsWbMQGRkpdThUA3vLWWw1X7GnXIV5CvOUBpO25kONtXTp0jo367KXWQCTJ0+2i3NQXl4ufP7550LHjh0FhUIh+Pv7C/Pnz69SKbZ1/fv3r/V33b9/f6nDaxZ1vd/t6TxQ3X766Sdh1KhRQlBQkODs7CwolUqhc+fOwqJFi4S8vLxqz68YT3bu3FntsTNnzgiDBg0S3NzcBHd3d2Ho0KFCfHy8+RvRQA0dE2tq8507d4TXXntN6NSpk6BSqQRHR0chKChIeP3116vdldWc6tv/BwcH1zjb09rGj4b0cxXPPX78uOnYtWvXhPHjxwuhoaGCm5uboFAohNDQUOHtt9+ucme/JTl06JAwdOhQwd/fX1AqlYKrq6vQvXt3YeXKldXuZqypzRWOHDki9O3bV3BxcRG8vLyEsWPHCsnJyc3UCrImJ06cEAYOHCi4u7sLLi4uwlNPPSV8++23UoclGQDCiBEjpA7DrOwld7S2MU8szBGqq9jsfNasWVKHQrWwt5zFVvMVe8pVmKcwT2koznQhIiIiIiIiIiIiIiISgeXM0yIiIiIiIiIiIiIiIrJiLLoQERERERERERERERGJgEUXIiIiIiIiIiIiIiIiEbDoQkREREREREREREREJAIWXYiIiIiIiIiIiIiIiETAogsREREREREREREREZEIWHQhIiIiIiIiIiIiIiISAYsuREREREREREREREREImDRhYiIiIiIiIiIiIiISAQsuhAREREREREREREREYmARRciK5KSkoJly5bh8uXLUodCRERWjOMJERGJgeMJERERUXUsuhBZkZSUFCxfvpxJDRERNQnHEyIiEgPHEyIiIqLqWHQhIiIiIiIiIiIiIiISAYsuRBZAq9Vi1apV6Nq1K5ydneHl5YVRo0bh0qVLpufs2rULAwcOBABMnToVMpkMMpkMAwYMAAAYDAasXLkSzz33HNq0aQOFQoG2bdti5syZyMnJkaJZRETUzDieEBGRGDieEBERETWeTBAEQeogiOxZWVkZhg4dijNnzmDSpEno2bMnCgoKsG3bNty5cwc//vgjevXqhZs3byIqKgqrVq3CjBkz8OyzzwIAWrdujSFDhqC0tBRt2rTB2LFj0aVLF7i5ueHChQuIjo5Gp06dEB8fD4VCIXFriYjIXDieEBGRGDieEBERETUNiy5EElu/fj0iIiLwr3/9Cy+88ILpuFqtxqOPPorQ0FCcOHECAHDixAkMHDgQO3fuxJQpU6q8jiAIKC0thYuLS5XjUVFRmDZtGvbt24c//OEP5m4OERFJhOMJERGJgeMJERERUdNweTEiiX399dfo3LkzevbsiezsbNOXTqfDkCFD8NNPP6GkpOShryOTyUwJjV6vR35+PrKzszFo0CAAwM8//2zWdhARkbQ4nhARkRg4nhARERE1jaPUARDZu+vXr6OkpAQtW7as9TnZ2dkICgp66Gvt378fa9euxaVLl1BWVlblsby8vCbHSkRElovjCRERiYHjCREREVHTsOhCJDFBENCtWzesW7eu1ufUlfBU+OabbzBhwgT06dMHX3zxBYKCguDs7Ay9Xo8XX3wRBoNBzLCJiMjCcDwhIiIxcDwhIiIiahoWXYgk1qFDB2RlZWHQoEGQy+te8U8mk9X6WHR0NJydnXH8+HG4urqajickJIgWKxERWS6OJ0REJAaOJ0RERERNwz1diCT2+uuv4+7du7XeSXbv3j3T/7u7uwMAcnNzqz3PwcEBMpmsyh1jgiDg448/FjliIiKyRBxPiIhIDBxPiIiIiJqGM12IJDZ37lwcO3YM7733Hv79739j0KBB8PDwwO+//464uDjT3WEA0KVLF6hUKmzZsgWurq7w8vJCq1atMGjQIIwbNw7/+Mc/MGjQILz++usoKyvDoUOHoNFoJG4hERE1B44nREQkBo4nRERERE0jEwRBkDoIIntXXl6OLVu2IDo6GteuXQMA+Pv7o0+fPpg8eTKGDh1qem5MTAyWLFmCa9euQavVon///jhx4gQAYNu2bVi/fj1u3ryJFi1aYNSoUfjkk0/g4+ODyZMnY9euXRK0joiImgvHEyIiEgPHEyIiIqLGY9GFiIiIiIiIiIiIiIhIBNzThYiIiIiIiIiIiIiISAQsuhAREREREREREREREYmARRciIiIiIiIiIiIiIiIRsOhCREREREREREREREQkAhZdiIiIiIiIiIiIiIiIRMCiCxERERERERERERERkQhYdCEiIiIiIiIiIiIiIhIBiy5EREREREREREREREQiYNGFiIiIiIiIiIiIiIhIBCy6EBERERERERERERERiYBFFyIiIiIiIiIiIiIiIhGw6EJERERERERERERERCSC/w9QYkiA9s5XZAAAAABJRU5ErkJggg=="
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 11
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T11:53:39.420606Z",
+ "start_time": "2025-04-10T11:53:38.307380Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "# plot status 51 and 52 with differnt colors\n",
+ "status = evt.final_parton_level_particles.status.int()\n",
+ "# also keep the plot style as from above\n",
+ "pt = evt.final_parton_level_particles.pt\n",
+ "eta = evt.final_parton_level_particles.eta\n",
+ "phi = evt.final_parton_level_particles.phi\n",
+ "\n",
+ "statuses = torch.unique(status)\n",
+ "for s in statuses:\n",
+ " status_filt = status == s\n",
+ " ax.scatter(eta[status_filt], phi[status_filt], s=pt[status_filt], alpha=0.3, label=s.item())\n",
+ "\n",
+ "ax.set_title(\"parton level\")\n",
+ "ax.set_xlabel(\"eta\")\n",
+ "ax.legend()\n",
+ "ax.set_ylabel(\"phi\")\n",
+ "# put PID where the circles are\n",
+ "for j, txt in enumerate(evt.final_parton_level_particles.pid):\n",
+ " ax.annotate(txt.int().item(), (eta[j], phi[j]), size=5)\n",
+ "fig.show()\n",
+ "fig.savefig(\"/work/gkrzmanc/jetclustering/results/event_with_PIDs_parton_level_status.pdf\")"
+ ],
+ "id": "3cf9ca2561ffcaab",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj8AAAHRCAYAAACFCthYAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAULRJREFUeJzt3Xl8VPW9//HXzGSWrBOyELaQsKgICggWtYgsXr2KCy5FbGWRWrmiIBSlhZ8bKJbWCrig0ipIBa217ii1RQUXrEpBrCyyCAHCnpDMZJ2ZzJzfHylp0wQJ2U4y5/18POZxzTnfOecz59LMO9/zPd+vzTAMAxERERGLsJtdgIiIiEhzUvgRERERS1H4EREREUtR+BERERFLUfgRERERS1H4EREREUtR+BERERFLUfgRERERS1H4EREREUtR+BEROQU333wzNpuNpUuXml1KneXk5GCz2cjOzja7FJEWQeFHRFoEm82GzWYzuwwRsQCFHxEREbEUhR8RERGxFIUfEYs6fpvJMAyeeeYZ+vTpQ1xcHOnp6fz4xz/mu+++q/GeUCjEsmXLGDVqFKeffjoJCQkkJCTQp08fHnzwQUpKSup0rv79+5OQkEBycjJLly6tdrvreNvaboNFIhGWLl3KoEGDSE5OxuPxcMYZZzB9+nTy8vJqnHfNmjXYbDaGDBlCIBDggQceoHv37rjdbjp16sTUqVNPWHN9vfvuu1xxxRW0bdsWl8tFZmYmP/3pT9m1a1e1dk8++SQ2m40xY8ac8Fh/+tOfsNlsXHbZZTX2rV27lpEjR9KhQwdcLhft2rXjhhtuYOPGjY36eUSikiEilgQYgDFlyhTD4XAYQ4cONW688Uaja9euBmC0adPG+Oabb6q9Z9++fQZgpKSkGAMHDjRGjRplXHLJJYbX6zUAo3///kZpaekJzzVx4kQjJiam6lw//OEPjU8++cQYN25cVZtx48ZVex0XiUSMG264wQAMt9ttXHbZZcYNN9xgdOzY0QCMzMxMY8eOHdXOu3r1agMwLrjgAmPw4MFGcnKyMWLECGP48OFGYmKiARiXXnrpKV2347U+//zzNfZNnDjRAAyXy2UMHDjQ+NGPfmT07NnTAAyv12t88cUXVW2PHj1qOJ1OIz4+3igqKqr1XMOHDzcA46WXXqq2/de//rVhs9kMu91uDBgwwBg5cqTRv3//qnO//fbb1drv3r3bAIysrKxT+qwi0UrhR8SijoeN+Ph4Y+3atVXbKyoqjP/7v/8zAOOcc86p9h6/32+sWLHCCIVC1bYXFhZWfVHPnTv3hOdq06aNsWHDhu+t50SefPLJWkNOeXm58ZOf/MQAjAEDBlR7z/HwczwAHTt2rGrfzp07q0LbRx99dMLz/rcThZ+nnnrKAIy+ffvWCGHPPPOMARhdu3atdu2uueYaAzCWLl1a4zyHDh0yYmJijKSkpGqB8p133jEAo3Pnzsb69eurveftt982YmJiDK/Xa+Tn51dtV/gRqU7hR8SijoeC6dOn19hXXFxspKamGoDx8ccf1+l427dvNwDj3HPPPeG5agtG/93mRLp06WIAxvLly2vsKygoqAoyn3zySdX24+HHbrcbmzdvrvG+O+64wwCMWbNmnezjVakt/FRUVBjt2rUz7HZ7jeBz3FVXXWUAxltvvVW17fXXXzcAY9iwYTXaL1iwwACMW265pdr2H/zgBwZgfPjhh7WeZ/LkyQZgPP7441XbFH5EqtOYHxGLu+mmm2psi4+P59prrwXg448/rrF/3bp1PPLII9xxxx2MHz+em2++mTlz5gCwffv2E57rmmuuqVeNubm57N69G5fLxY033lhjf3JyMtdddx0AH330UY39nTt3pmfPnjW2n3HGGQAcOHCgXnUdt3HjRg4dOsQ555xD9+7da21z0UUXAfD5559XbbviiitITU1lzZo17Nu3r1r7F154AYBx48ZVbcvLy2PdunWkpaUxZMiQOp9HRKqLMbsAETHXiSa+O749Nze3altxcTE33ngj77777gmP5/f7T7gvKyurXjXu378fqAwxDoej1jZdu3at1vY/ZWZm1vqexMREAAKBQL3qOu74YOb169efdK6io0ePVv23y+Xixz/+MQsXLmT58uXMnDkTgM2bN/PVV1/RpUsXLrzwwqr2u3fvBipDkN3+/X+7/ud5RKQ6hR8RqbMZM2bw7rvv0qtXL37zm99w7rnnkpKSgtPpJBgM4na7v/f9sbGxzVRpdScLCg0VDoeBynA2dOjQ72173nnnVft57NixLFy4kGXLllWFn+O9PmPHjq0Wpo6fJyUlhauuuup7z9OjR49T+xAiFqLwI2Jxe/bsoXfv3jW25+TkANCxY8eqba+++ioAL7/8MmeddVa19jt37myyGo/XsHfvXsLhcK29P8d7X/6z3uZyvGepc+fOp7zsxQ9+8APOPPNMtm7dyrp16+jfvz8vvvgiNpuNsWPH1nqeuLi4VrW8hkhLozE/Ihb30ksv1dhWWlrKW2+9Bfx7DAnAsWPHgNpvI/3xj39sUB1OpxOAioqKGvs6depEly5dCAaDvPzyyzX2+3w+3njjDQAGDx7coDrqY8CAAaSkpPDll1/WGLtTF8fH9bzwwgt88MEH7N+/n4EDB1bdyjuuY8eOnHXWWeTm5vLFF180Su0iVqTwI2JxTz31VLXBseFwmOnTp3P06FH69OnDoEGDqvYdv5Xy9NNPVzvG+++/z7x58xpUx/Eem61bt9a6/+c//zkAM2fOrDYBYzAYZNKkSRQWFjJgwIBqY2Sai9Pp5N577yUYDDJixIhaJxosLS3lpZde4vDhwzX2jR49Grvdzssvv8ySJUuA6gOd/9ODDz4IwI9//ONaB3cHg0FWrFjBt99+24BPJBLlzH7cTETMwb8eLb/zzjsNh8NhDBs2zLjxxhuNbt26GYCRnJxsfP3119Xe86c//anqfeecc47x4x//2LjgggsMwJgxY8YJH1c/0fb/9POf/9wAjPT0dGPUqFHGLbfcUu0x73A4bIwcOdIADI/HY1x++eXGqFGjjE6dOhmA0alTpxNOcjh48OBaz/n8889XTaxYV983yeGkSZMMwLDZbMY555xjXH/99cYNN9xgnHfeeYbb7TYAY+vWrbUe95JLLqm6TrGxsYbP5zthDb/5zW8Mu91uAEbPnj2Na665xrjxxhuNQYMGGQkJCQZg/OUvf6lqr0fdRapT+BGxqONftJFIxHjyySeNs846y/B4PEZqaqoxatSoE85X8/777xuDBg0ykpOTjYSEBOO8884zXnjhhWrHPNG5vk9paakxbdo0o0uXLobT6az1PeFw2FiyZIkxcOBAIzEx0XC5XEb37t2Nu+66yzhy5EiNYzZ3+DEMw/jwww+NkSNHGh07djRcLpfRpk0bo2fPnsa4ceOM119/3QgGg7W+b/ny5VWf+cYbbzxpHevXrzfGjRtnZGdnG26320hKSjLOOOMMY+TIkcby5cuN4uLiqrYKPyLV2QzDMJq0a0lEWqTjTxHpV4CIWI3G/IiIiIilKPyIiIiIpSj8iIiIiKVokkMRi9JYHxGxKvX8iIiIiKUo/IiIiIil6LZXLSKRCAcOHCAxMfGkKzSLiIhIy2AYBkVFRXTo0OF7FzRW+KnFgQMHal27SERERFq+ffv20alTpxPuV/ipRWJiIlB58ZKSkkyuRkREROrC7/eTmZlZ9T1+Igo/tTh+qyspKUnhR0REpJU52ZAVDXgWERERS1H4EREREUtR+BERERFLUfgRERERS1H4EREREUvR016NJBQKEQ6HzS6j1XM4HDidTrPLEBGRKKbw00B+v5+8vDwCgYDZpUQNt9tNWlqaphkQEZEmofDTAH6/n/3795OQkEBaWhpOp1PLYTSAYRiEQiF8Ph/79+8HUAASEZFGp/DTAHl5eSQkJNCpUyeFnkYSGxtLYmIiubm55OXlKfyIiEij04DnegqFQgQCAbxer4JPI7PZbHi9XgKBAKFQyOxymsWbb77JrbfeyqhRo/jb3/520u0iIlJ/NsMwDLOLaGn8fj9erxefz3fCnofy8nJ2795NdnY2sbGxzVxh9CsrKyMnJ4cuXbrg8XjMLqfZFBQUcPfdd7N48eI6bRcRkX+ry/c3qOenwdTr0zSsel3nzJnDHXfcUeftIiJy6jTmR8REuQWl+MpCtE/y8JuH7ufyyy/nnHPOYdshPwd95WSnxvHMbx/i8ssvp1+/fmaXKyISFRR+RExypKicj7cfpbA0xFd/eYn177+Pz+dj4+ZvyRhwJaXBMH949hk2frgKn8/Hzp07ue2228wuW0Sk1VP4aYHKgmEO+MooC4apiBjE2G3Euhx08MYS63KYXZ40kkAoQmkwTKzTwcU/upnH5/w/4lwxFJYGeW/TISoiIa76yS08M/dePE79/11EpLEo/LQgx0qC7MkrYcfRYnylQeA/x70YeONcnJaeQFZaPCnxrmav70TjcOLj4ykuLq76+csvv2T58uWsX7+er7/+mpKSEp5//nluvvnmZqq0dWjn9XBWRy8HfWWc2S6JOFfl/xyT41xceFoax0qCtPN6FHxEpFmNGDGCVatW8eKLL3LttdeaXU6TUPhpIXLySvh8dz6+shDJHidZKfHY7f8OG5GIQUFpkC/3HGPbkSLO75JKdlp8s9c5aNAgJkyYUG3bfy9HsXLlSp566il69OhBnz59+Oyzz5qzxFbD6bBzftfUWvd1ahNHpzZxzVyRiAi89dZbDBkyxOwympTCTwuQk1fCJzuOYsNGt7SEWtvY7TZSE9ykJrg55Cvnkx1HAZo9AHXt2pXRo0d/b5uJEycyffp04uPjefXVVxV+RERauLKSYlxuD44Ya8QCPepusmMlQT7fnY8NG+28dZvPpp3Xgw0bn+/O51hJsIkrrCkYDFa7zfXfMjIyiI9v/l4pERE5dXu2f80//7qYG0ZcSt++ffjHP/5hdklNTuHHZHvySvCVheocfI5r5/XgKwuxJ6+kiSqr3auvvkpcXByJiYm0bduWyZMn4/P5mrUGERFpPL6Du4gc28P0MZfy4d/+wu9+9zvWrVvHlClTeO2118wur0lYo3+rhSoLhtlxtJhkj/PkjWuR7HGy42gxPdonNctTYAMGDGDkyJF0794dv9/PypUrWbhwIR999BGfffYZCQm137ITEZGWK6N7H3LLivAkZ+BNzeDZZ5/l2WefNbusJqXwY6IDvjJ8pUGyUup3i6hNnIs9x0o44CujW3rTB48vvvii2s9jx46ld+/e3HPPPTz++OPcc889TV6DiIg0royOXcno2NXsMpqVbnuZqCwYBmzVnuo6FXa7DaPqOOaYPn06LpeLd99917QaREREToXCj4kqIo2zpmxjHac+nE4nHTp0IC8vz7QaREREToXCj4li6tnj01THqY/y8nJyc3PJyMgwrQYREZFTofBjospBygaRevbcRCIGtqrjNK38/Pxat993331UVFRw1VVXNXkNIiIijUEDnk3UwRuLN85FQWmQ1AT3Kb+/oDSIN85FB29sE1RX3Zw5c/j8888ZOnQonTt3pri4mJUrV7J69WrOO+88Jk+eXNV2z549LFu2DIDNmzcDsGLFCnJzcwEYM2YMWVlZTV6ziIhIbRR+TBTrcnBaegJf7jlWr/BTWB5iQFZKs/T8DBkyhC1btvCHP/yB/Px8HA4Hp512Gg8//DDTpk3D4/n3PEW7d+/mvvvuq/b+119/nddffx2ACy+8UOFHRERMo/Bjsqy0eLYdKeKQr/yUJjo85CvHG+skq5mWtxgxYgQjRoyoU9shQ4ZgGOYNwhYREfk+GvNjspR4F+d3ScXA4JCvvE7vOeQrx8Dg/C6ppqzuLiIi0ppFTfjZvn07999/P+effz7p6ekkJibSt29fHn74YUpKmncJiFOVnRbPoNPSiYmx8V1eMfnFgRqDoCMRg/ziAN/lFRMTY2PQaemmrOouIiLS2kXNba8lS5bw1FNPcfXVV3PTTTfhdDpZvXo19957L6+88gqff/45sbFNPzC4vrLT4kmKdbInr4QdR4vZc6yE/4w/NsAb52JAVgpZafHq8REREamnqAk/P/rRj5g5cyZer7dq22233VY1KHfx4sVMmjTJxApPLiXeRUq8ix7tkzjgK6MsGKYiYhBjtxHrctDBG9ssg5tFRESiWdSEn3PPPbfW7aNGjeLhhx9m06ZNzVxR/cW6HM2yVpeIiIgVRU34OZHjc8t83wzEgUCAQCBQ9bPf72/yukRERMQcUTPguTbhcJiHHnqImJgYfvKTn5yw3dy5c/F6vVWvzMzMZqxSREREmlNUh5+pU6fy97//nQcffJAzzjjjhO1mzpyJz+ereu3bt68ZqxQREZHmFLW3ve677z4WLlzIhAkTmDlz5ve2dbvduN2nPsOyiIiItD5R2fMza9Ys5syZw/jx41m0aJHZ5YiIiEgLEnXhZ9asWcyePZtx48bx3HPPYbPZzC5JREREWpCoCj8PPvggs2fPZsyYMSxZsgS7Pao+noiIiDSCqBnz89RTT/HAAw/QuXNn/ud//oeXXnqp2v6MjAwuueQSk6o7RYEi8OVCsBTCQXC4wBUH3k7gTjS7OhERkVYtasLPunXrANi7dy/jxo2rsX/w4MEtP/wUH4G8nZC/A8p9YLNXvoxI5Ss2GVK6Q1p3SGjb7OWd6BZifHw8xcXFABiGwYsvvsg777zDP/7xDw4cOEBaWhp9+/blnnvu4bzzzmvOkkVERGqImvCzdOlSli5danYZ9Xd0G+z5DALFEJcCqd0qg89xRgTKCmH/esjbBlkDIf30Zi9z0KBBTJgwodo2p9NZ9d+BQIAxY8bQt29fbrzxRrp06cLBgwdZtGgRF1xwAS+88AKjR49u7rJFRFqErVu38vjjj5OXl8fFF1/MxIkT69VGGsZmGIZx8mbW4vf78Xq9+Hw+kpKSam1TXl7O7t276dKlCx6Pp2EnPLoddq2GGDcknHgm6ipFhypvh3Ud2qwByGazMW7cuO8NmRUVFaxdu5bBgwdX23748GF69eqFw+Hg4MGDJx2P1ajXV0SkhYlEIowdO5bly5c3qI1UV5fvb4iyAc+tUvER2LO27sEHILFd5TigPWsr39/MgsFg1W2u/xYTE1Mj+EDlmKvBgwdz5MgRjhxp/ppFRFqKt99+myuuuILhw4c3qI3Un8KP2fJ2Vt7qqmvwOS6xXeX78r9rmrpO4NVXXyUuLo7ExETatm3L5MmT8fl8dXpvbm4uLpeL5OTkpi1SRKSliUQqf98X7uPqq6/mL3/5Cy+++OJ/NTHILw4QCkdO2EYaR9SM+WmVAkVwbGflGJ/6iEupHBzd7mxwN/0q8AMGDGDkyJF0794dv9/PypUrWbhwIR999BGfffYZCQknrmHlypV8+eWXjBkzRrexRMR6SvNg98es+XoXr288RiAUrtGrszu/hL9/l4d/19d8+/kHBAIB9fw0EYUfM/lyKwcxp3ar3/tjkyt7fnz7oO2ZjVlZrb744otqP48dO5bevXtzzz338Pjjj3PPPffU+r4dO3YwZswYOnbsyLx585q8ThGRFseTDOmnM+Syvgy55Ryo5elZl8OOK8bBBRdexO0/GdH8NVqIbnuZKVj678fZ68NmB2wQKm3Usk7F9OnTcblcvPvuu7Xu3717NxdffDE2m42//OUvpKenN3OFIiItQIwLsi+ETv1qDT4AmSlxXNm7PX06JTdvbRaknh8zhYP1Dz7H2e1QEWyceurB6XTSoUMH8vLyauzLyclh6NChFBcX88EHH3D22WebUKGISOsR59LXcnNQz4+ZHK7K+XsaIhKp/IvCJOXl5eTm5pKRUX3Adk5ODkOGDMHn87Fq1SrOOecckyoUERGpTuHHTK64f8/eXB9GBDDAGdeoZdUmPz+/1u333XcfFRUVXHXVVVXb9uzZw9ChQyksLORvf/sb/fv3b/L6RERE6kr9a2bydqoctFxWWL8nvsoKK9/vzWzcumoxZ84cPv/8c4YOHUrnzp0pLi5m5cqVrF69mvPOO4/JkycDUFRUxNChQ8nJyWHy5Mls27aNbdu2VTvWJZdcUqOnSEREpLko/JjJnVi5Vtf+9fULP6XHoNO5zfKY+5AhQ9iyZQt/+MMfyM/Px+FwcNppp/Hwww8zbdq0qsfX8/Pz2b17NwBPPvlkrcdavXq1wo+IiJhG4cdsad0r1+oqPnxqEx0WHaoMPfV9TP4UjRgxghEjTv7oZXZ2NloxRUREWjKN+TFbQtvKRUorApWBpi6Or+2VNdCU1d1FRERaM4WfliD99MpFSqFy+vPSYzUHQRuRyu15Oyt/buZFTUVERKKFbnu1FOmn/3vG5vwd/1qzy1Y5j0/kX091xSZXjvFJ7aYeHxERkXpS+GlJEtpWvtqdVbn0Rai0cgLDGFfl4+zezGYZ3CwiIhLNFH5aIndis6zVJSIiYkUa8yMiIiKWovDTQHqsu2nouoqISFNR+Kknh8MBQCgUMrmS6HT8uh6/ziIiIo1F4aeenE4nbrcbn8+nXopGZhgGPp8Pt9uN0+k0uxwREYkyGvDcAGlpaezfv5/c3Fy8Xi9OpxObzWZ2Wa2WYRiEQiF8Ph/FxcV07NjR7JJERCQKKfw0QFJSEgB5eXns37/f5Gqih9vtpmPHjlXXV0REpDEp/DRQUlISSUlJhEIhwuGw2eW0eg6HQ7e6RESkSSn8NBKn06kvbRERkVZAA55FRETEUhR+RERExFJ020tEJJqFQ1Dur1wr0IiA3QGueHAnVf63iAUp/IiIRJtwBfj3w7Fd4D8AoRIIBeD4VBzO2MoA1CYb2nSpXFBZ03SIhSj8iIhEE18u7F9f+X8BPF6IS4cYd2XAMSIQKoNgCexbBwe/hpSu0LE/xKWYW7tIM1H4ERGJBuEKOLARDm6svNWV1AliXDXb2eyVvT6u+Moen2ApHPkWig5B5nmQfnpzVy7S7DTgWUSktQtXwN6/V75c8ZCSXXvwqY0rDlK7QSQE330IhzY1aakiLYHCj4hIa3dgY+UrqT3EJp/6+202SGxfGZz2flY5Vkgkiin8iIi0Zr79lbe64tMqw0tDxKcBtsqxQIGixqhOpEVS+BERaa3CFbD/HxAO1q/HpzaJHaD4kG5/SVRT+BERaa2KDlT2/CR1bLxj2u0QlwZ529X7I1FLT3uJiLRW+bsAo+6Dm/+lpLScwWN+wQN33MS7H30JQJzHzbwZt3LwyDGm//Y5HKESxt8aYej145k3bx67d+8mFAqxaNEi1q1bx7x588jMzOTRRx8FqFMbkZZCPT8iIq3R8YkM3Umn/NbfPPdnbrh8EMd8RYQqwiyaPZl26W1Yu2ELi1/7KzNuvYGl94/n2aXLCQaDbNiwgYULF3L22Wfz6aefMmDAAH7zm99UHa8ubURaEvX8iIi0RgF/5WSFpzgx4aq1G+jZrTPlgSCpyYn06t6Zqb/6HQW+Yjq3b0vuoXwy26djd5RBRTn5R4+Qnp4OQFZWFrm5uTWOmZ+ff9I2Ii2Jwo+ISGsUKoWK8sqZm0/Bmi+/oaSsnC079xLrcfPGwnux2+3c9/gL9OjaiR179pN7KI+kzGQwwqR648nLywNg79699O7du8YxU1NTT9pGpCVR+BERaY0Mo/JlO7XRCw//fBwAS19fRVqbJB54cjl5BX7apiTT98xutE1JZsb854khws9GDMLljKFfv35MmTKFQCDA7bffzvbt25k9ezabN2/m97//PRMmTKhTG5GWwmYYhmF2ES2N3+/H6/Xi8/lISjr1++kiIk3OfwA2vwHJWU2zOnu5HyrK4OwbKmeBFmkF6vr9rQHPIiKtkSu+cnX2UFnTHD9UCq7EynOIRBmFHxGR1siVWPkKlTTN8YMlkJhRufSFSJRR+BERaY3sdmiTDeW+xj92pKJyPFFi+8Y/tkgLoPAjItJatckGZxwEihv3uCV5kJAO3k6Ne1yRFkLhR0SktYpPg5RulctcGJHGOWZFsDJMte15yo/Ri7QWURV+5s6dy8iRI+natSs2m43s7GyzSxIRaTo2G3TsVxmCig41/HiGAb69kNYN2p7Z8OOJtFBRFX7+3//7f3z44Yd069aNNm3amF2OiEjTi02GzPPBCEPxkfofxzCgYA/EpUKnAeBwNlqJIi1NVE1y+N1339G1a1cAzjrrLIqLG/k+uIhIS5TaDcJByFkLhfsqV3m31/zb9pHn/sz2nP0cPebn+V/9nJTkxModFUHw7atcKqPrkMqeJJEoFlXh53jwERGxnLZnVs7Jk7sO8ndQFJPMkWAsJaEI8e4YMpI8VU2/23uQ9Zt3csn5Z0NpXuUYn7RulT0+Cj5iAVEVfkRELK1NNsSnc2TnenK2fInLtxtPuIwSm4vvEtsx/uqBzFr4J4xwEHvxAShMgvh06HQupPfQrS6xDIUfIBAIEAgEqn72+/0mViMiUn+RmDjWh7KJse3ktNgD2MMGf/3oazZ+9z4/HTEQI1KB2+Nhu9/DxWdcDt5MiHGZXbZIs4qqAc/1NXfuXLxeb9UrMzPT7JJEROqlqLyCwNHdtI8cwJ/am2PtB+FPOZvy+EyefHczRmJ74lM7EkrqXDlWSMFHLEjhB5g5cyY+n6/qtW/fPrNLEhGpF7sd4oP5RAyIOCrn6bnq0sHcfttPiY/1YAsHycrKYtSoUSZXKmIe3fYC3G43brcm8xKR1i/R4yTNG09xfgh3OILDYSdUEaE4EGL2z66g87mXQYdzzC5TxFTq+RERiTLdT+tBcmIixYVHOOwvo6AsSGd3GRnpKZDYwezyREynnh8RkSiTmN6Z0/oPpd13XxIO5OOMsZOY2AZH5rmVK7WLWFxUhZ9ly5axZ88eAI4ePUowGGTOnDkAZGVlMWbMGDPLExFpHjYbzsz+pKRkQfFhwAaJ7SonMRQRbIZhGGYX0ViGDBnCRx99VOu+wYMHs2bNmjodx+/34/V68fl8JCUlNWKFIiIiArBr1y4efvhhfD4fr776aqMcs67f31E15mfNmjUYhlHrq67BR0RERJpe165dWbx4sSnnjqrwIyIiInIyCj8iIiLSbHYdLWbNtiPkFwdO3riJKPyIiIhIs9l2qIivcwvZmnOA2267ja+++oq5c+c2aw1R9bSXiIiItGx9MpNp5/XQvW0CFy5aZEoNCj8iIiLSbDokx9IhOdbUGnTbS0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFH5BS8+eab3HrrrYwaNYq//e1vZpcjIiL1YDMMwzC7iJbG7/fj9Xrx+XwkJSWZXY60QAUFBdx9990sXrzY7FJERORf6vr9HVU9P5FIhAULFtCjRw88Hg+ZmZncddddlJSUmF2aRJk5c+Zwxx13mF2GiIjUQ1SFn5///OdMmzaNnj178uSTTzJy5EieeOIJrrrqKiKRiNnlSStWEqhg55Fi8osD/PKXv+Tyyy+nX79+ZpclIiL1EGN2AY1l8+bNPPnkk1x33XW89tprVdu7dOnCnXfeycsvv8xPfvITEyuU1sowDP7+XR47jhTzj3dfYsMH7+Pz+di5cye33Xab2eWJiMgpipqenz/+8Y8YhsHUqVOrbb/11luJi4tj+fLl5hQmUaE8FCEUjnDJyJv5+LPPWbRokYKPiEgrFTU9P+vWrcNutzNgwIBq2z0eD3379mXdunUmVSatnc1mY0DXFNp7PaQnekj0OM0uSUREGiBqws+BAwdIS0vD7XbX2NexY0c+++wzgsEgLperxv5AIEAgEKj62e/3N2mt0vq0TfTQNtFjdhkiItIIoua2V2lpaa3BByp7f463qc3cuXPxer1Vr8zMzCarU0RERMwVNeEnLi6uWu/NfyovL69qU5uZM2fi8/mqXvv27WuyOkVERMRcUXPbq0OHDmzZsoVAIFCjB2j//v2kpaXVessLwO12n7DXSERERKJL1PT8/OAHPyASifDll19W215eXs7GjRs599xzTapMREREWpKoCT+jRo3CZrPx2GOPVdv+7LPPUlpayk033WROYSIiItKiRM1tr7PPPps77riDhQsXct111zF8+HC2bt3KE088weDBgzXBoYiIiABRFH4AHnvsMbKzs/n973/Pu+++S1paGpMnT+bBBx/Ebo+aTi4RERFpAK3qXgut6i4iItL6WHJVdxEREZGTUfgRERERS1H4EREREUtR+BEREcubP38+/fr1Y9OmTWaXIs0gqp72EhER+T6GYbAnv5TdeSWUBcN0Somle9sEpk2bpkWtLeSUws/HH38MwEUXXVTt55M53l5ERMRM2w4V8fdd+RgGuGLs7C0o5aCvnCFnpJtdmjSjUwo/Q4YMwWazUVZWhsvlqvr5RAzDwGazEQ6HG1yoiIhIQwQqwmw+4MflsJOR5AHgvTf+xKsbvyLxvpkmVyfN6ZTCz5IlS7DZbDidTgCef/75JilKRESksZUFw5QGK2gT9+9Fri+7dhRnDLqSDz/4K++88w5bt27l3nvv5eyzzzaxUmlqmuSwFprkUEQk+gQqwrzz9UGCFRHSE90AVIQj7C0o5eIzM+iWnmByhdJQmuRQRETkP7hjHJzZPpGyUJjcglIO+8vJOVZK55Q4OibHml2eNKNGedprx44d7Nixg/z8fGrrSBo7dmxjnEZERKRBerRLwuN0sOtoCaXBCnp2SOK0jEQ8TofZpUkzatBtr8OHDzNu3DhWrVoFUGvwaY0DnnXbS0REpPWp6/d3g3p+Jk2axKpVq5g4cSLDhg0jNTW1IYcTERERaXINCj+rVq3itttuY+HChY1Vj4iIiEiTatCA50gkQp8+fRqrFhEREZEm16DwM2jQIL7++uvGqkVERESkyTUo/Myf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KMTOnTuZNWsWAMOHDze3MBEREWkxoir8/PWvf+Wqq66q+jkjI4N58+YxZsyY731fIBAgEAhU/ez3+5usRhERETFXiwo/hYWFPPbYY3Vuf+edd5KSklL18/nnn8+qVasoKytjy5YtvPzyyxQUFFBRUUFMzIk/6ty5c5k9e3ZDShcREZFWokUNeM7JyaFLly51br9jxw66d+9+wv0HDhygd+/eXH/99fzud787Ybvaen4yMzM14FlEpJm8+eabvPvuu/j9fm655RYuvfRSs0uSVqiuA55bVPhpCjfeeCOvvvoqJSUluN3uOr1HT3uJiJijoKCAu+++m8WLF5tdirRCetrrX8rKygiHwxrHIyLSCsyZM4c77rjD7DIkykVF+Dl8+HCt27ds2cIHH3xAt27dSE9Pb+aqRETkZAzD4LC/nIKSAL/85S+5/PLL6devn9llSZRrUQOe62vu3LmsWrWKK664guzsbAzDYNOmTSxbtoxQKMRTTz1ldokiIlKLw/4AH357mPdf/QNfffA+Pp+PnTt3ctttt5ldmkSxqAg/V155Jbm5ubzyyiscOXKEcDhMx44dGTlyJHfffTe9evUyu0QREalFjMOG02HnutE/4+lf3YPH6TC7JLGAqB/wXB8a8Cwi0nyKykM4HXYFH2mwun5/R0XPj4iItF6JHqfZJYjFRMWAZxEREZG6UvgRERERS1H4EREREUtR+BERERFLUfgRERERS1H4EREREUtR+BERERFLUfgRERERS1H4EREREUtR+BERERFLUfgRERERS1H4EREREUtR+BERERFL0arutTAMAwC/329yJSIiIlJXx7+3j3+Pn4jCTy2KiooAyMzMNLkSEREROVVFRUV4vd4T7rcZJ4tHFhSJRDhw4ACJiYnYbLYGHcvv95OZmcm+fftISkpqpArlZHTdm5+uefPTNTeHrnvzq+s1NwyDoqIiOnTogN1+4pE96vmphd1up1OnTo16zKSkJP2PxAS67s1P17z56ZqbQ9e9+dXlmn9fj89xGvAsIiIilqLwIyIiIpai8NPE3G43DzzwAG632+xSLEXXvfnpmjc/XXNz6Lo3v8a+5hrwLCIiIpainh8RERGxFIUfERERsRSFHxEREbEUhR8RERGxFIUfk5SWlvLggw/Sq1cvYmNjSUlJ4YILLuCNN94wu7SoF4lEuOCCC7DZbFx55ZVmlxO19u/fz9y5cxk8eDDt27cnPj6eXr16MX36dPLz880ur1WLRCIsWLCAHj164PF4yMzM5K677qKkpMTs0qLS9u3buf/++zn//PNJT08nMTGRvn378vDDD+uaN6PS0lK6du2KzWZj0qRJDTqWZng2QUFBARdffDE7duxg/PjxTJs2jZKSErZu3cqePXvMLi/qPf3002zatMnsMqLeihUrmDVrFldccQXTp08nMTGRL7/8kscee4yXX36ZdevW0a5dO7PLbJV+/vOf88QTT3Dttddy1113sXXrVp544gm++uor3n///e+d1l9O3ZIlS3jqqae4+uqruemmm3A6naxevZp7772XV155hc8//5zY2Fizy4x6999/P0ePHm2cgxnS7EaPHm0kJiYamzdvNrsUy9m3b5+RmJhozJs3zwCMK664wuySotamTZuMgwcP1tj+7LPPGoBx1113mVBV67dp0ybDZrMZ1113XbXtTzzxhAEYL774okmVRa9169YZhYWFNbbfc889BmA8+eSTJlRlLevXrzccDkfV7+477rijQcfTnwfNLCcnh5deeolbb72Vnj17Eg6HKS4uNrssy7jjjjvo2rUrU6ZMMbuUqNerV69ae3ZGjRoFoN63evrjH/+IYRhMnTq12vZbb72VuLg4li9fbk5hUezcc8+tdb0o/VtuHuFwmFtvvZXLLruM6667rlGOqfDTzN577z0ikQg9e/ZkzJgxxMXFkZiYSKdOnViwYIHZ5UW1V199lRUrVrBo0SIcDofZ5VhWbm4uABkZGSZX0jqtW7cOu93OgAEDqm33eDz07duXdevWmVSZ9ejfcvNYsGAB3377LQsXLmy0Yyr8NLNt27YBMHPmTNavX8+iRYtYvnw5Xbp0Ydq0aTzwwAMmVxidfD4fd955J//3f//H+eefb3Y5lnb83/i4ceNMrqR1OnDgAGlpabVO89+xY0fy8vIIBoMmVGYt4XCYhx56iJiYGH7yk5+YXU7U2r17Nw888AD3338/2dnZjXZcDXiup8LCQh577LE6t7/zzjtJSUmhqKgIgGAwyCeffEJqaioAN9xwAz179uSRRx5h6tSptGnTpinKbtXqe80BfvGLXxCJRJg7d24TVRe9GnLd/9u8efP485//zIQJExg2bFgjVWgtpaWlJ1zfyOPxVLVxuVzNWZblTJ06lb///e/86le/4owzzjC7nKh122230bVrV6ZNm9a4B26coUjWs3v3bgOo82vHjh2GYRjGpEmTDMC46aabahzz/vvvNwBj5cqVzf1xWoX6XvOPP/7YsNlsxvLly6sdDw14rpP6Xvf/9uyzzxo2m8244oorjGAw2MyfInqcddZZRtu2bWvdN3LkSAMwAoFAM1dlLffee68BGBMmTDC7lKi2bNkyw2azGZ988knVtuO/jxo64Fk9P/WUnZ2NUY81YTt16gRQ60DQ9u3bA5WPwktN9b3mkyZNok+fPpx33nns3Lmz2r7S0lJ27txJcnIyaWlpjVVqVKnvdf9PS5YsYcKECVx66aW89tprOJ3ORqrOejp06MCWLVsIBAI1eoD2799PWlqaen2a0KxZs5gzZw7jx49n0aJFZpcTtQKBANOmTWP48OG0a9eu6nf3/v37gcqhDDt37iQtLY3k5ORTP0GDopOcsg8//NAAjFGjRtXYd/yxyVWrVplQWfTyer0n7a1o6F8RcmKLFy82bDabcckllxhlZWVml9PqHf898fHHH1fbXlZWZsTFxRmXXXaZSZVFvwceeMAAjHHjxhnhcNjscqJaQUFBnXqaf/vb39br+DbDaOCfdHJKwuEw3bp14+jRo2zfvp2OHTsCUFJSwplnnklRURG5ubnEx8ebXGn0ePvtt2sdADpy5Ej69+/PjBkz6N69O3379m3+4qLc0qVLueWWWxg6dCgrVqzQRHCN4JtvvqFPnz5ce+21vPbaa1Xbn3zySe68806WLVvG6NGjTawwOj344IM88MADjBkzhqVLl2oiySYWCoV46623amw/evQot99+O5dddhm33HILvXv35vTTTz/l4yv8mGDlypVcffXVdOjQgdtvvx2Xy8Xzzz/Ppk2bWLx4MT/96U/NLtESbDYbV1xxBe+8847ZpUSlt99+m2uvvZakpCQeeeSRGsEnISGBa665xpziWrnJkyezcOFCrr32WoYPH141w/PAgQP58MMP9cXcyJ566ikmTZpE586deeihh2pc34yMDC655BKTqrOWnJwcunTpwh133NGgR9815scEw4cP54MPPmD27Nk8/PDDhMNhzjnnHN5++22uuuoqs8sTaRQbNmwgEolQWFjIhAkTauzPyspS+Kmnxx57jOzsbH7/+9/z7rvvkpaWxuTJk3nwwQcVfJrA8bmT9u7dW+sUDYMHD1b4aWXU8yMiIiKWoj8RRERExFIUfkRERMRSFH5ERETEUhR+RERExFIUfkRERMRSFH5ERETEUhR+RERExFIUfkRERMRSFH5ERETEUhR+RMQScnJymDVrFhs3bjS7FBExmcKPiFhCTk4Os2fPVvgREYUfERERsRaFHxFp1QKBAL/61a/o1asXHo+H5ORkrrrqKr766quqNkuXLmXo0KEAjB8/HpvNhs1mY8iQIQBEIhEefvhhLrroItq1a4fL5aJz585MnDiR/Px8Mz6WiDQhreouIq1WKBTi0ksv5bPPPmPMmDH0798fn8/Hs88+y8GDB/n4448599xz2bVrF4sXL+ZXv/oVEyZMYNCgQQBkZGRwySWXUF5eTrt27bj++uvp2bMn8fHxrFu3jmXLlnHGGWewfv16XC6XyZ9WRBqLwo+ItFoLFixg2rRpvPfee/zv//5v1Xa/389ZZ51F165dWbNmDQBr1qxh6NChPP/889x8883VjmMYBuXl5cTGxlbbvnjxYn72s5/xpz/9iRtuuKGpP46INBPd9hKRVmv58uX06NGD/v37k5eXV/UKBoNccsklfPrpp5SVlZ30ODabrSr4hMNhCgsLycvLY9iwYQB88cUXTfo5RKR5xZhdgIhIfW3dupWysjLS09NP2CYvL4/MzMyTHuuVV15h3rx5fPXVV4RCoWr7CgoKGlyriLQcCj8i0moZhsHZZ5/N/PnzT9jm+4LRca+//jqjRo1iwIABPP7442RmZuLxeAiHw1x22WVEIpHGLFtETKbwIyKt1mmnncbRo0cZNmwYdvv338W32Wwn3Lds2TI8Hg+rV68mLi6uavu3337baLWKSMuhMT8i0mqNHTuWQ4cOnbDn5/Dhw1X/nZCQAMCxY8dqtHM4HNhstmo9PIZhMGfOnEauWERaAvX8iEirNWXKFFatWsX06dP58MMPGTZsGElJSezdu5cPPvigqjcHoGfPniQmJvL0008TFxdHcnIybdu2ZdiwYfzoRz/itddeY9iwYYwdO5ZQKMSbb75JaWmpyZ9QRJqCHnUXkVatoqKCp59+mmXLlrFlyxYAOnTowIABAxg3bhyXXnppVduVK1dy7733smXLFgKBAIMHD656FP7ZZ59lwYIF7Nq1izZt2nDVVVfx61//mtTUVMaNG8fSpUtN+HQi0hQUfkRERMRSNOZHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELEXhR0RERCxF4UdEREQsReFHRERELOX/AwjgjhdRRiHgAAAAAElFTkSuQmCC"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 7
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T11:53:39.504443Z",
+ "start_time": "2025-04-10T11:53:39.474441Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "ds = EventDataset.from_directory(\"/work/gkrzmanc/jetclustering/preprocessed_data/Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000\")",
+ "id": "185f6ac7919b907a",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "get_pfcands_key\n"
+ ]
+ }
+ ],
+ "execution_count": 8
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T11:53:39.572039Z",
+ "start_time": "2025-04-10T11:53:39.544703Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "ds[0].final_gen_particles.pid",
+ "id": "d7218d90cc461454",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([ 321., -211., 321., 3122., -2212., 321., -211., 211., -211.,\n",
+ " -321., -211., -211., 211., -211., 3112., -3312., -321., -211.,\n",
+ " 2212., 211., -2212., 211., -2112., 130., 310., -321., 130.,\n",
+ " -211., 130., 211., 310., 211., -211., 211., -211., 211.,\n",
+ " 211., 2112., 211., -211., -211., 22., 211., -211., 22.,\n",
+ " 22., 321., -321., 22., 22., -211., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., -211., 22., 22., 22.,\n",
+ " 22., 22., 22., 22., 22., 211., 211., 2112., -2112.,\n",
+ " -211., 130., 130., 321., -211., 130., -211., 211., 211.,\n",
+ " -211., 22., 22., 22., 22., 22., 22.],\n",
+ " dtype=torch.float64)"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 9
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T11:53:39.614990Z",
+ "start_time": "2025-04-10T11:53:39.612445Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "42cff04605effb08",
+ "outputs": [],
+ "execution_count": null
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/data_exploration_jets.ipynb b/notebooks/data_exploration_jets.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..6f76850ad0fc446be73d6bf8d5f1dc69cc9d9b7a
--- /dev/null
+++ b/notebooks/data_exploration_jets.ipynb
@@ -0,0 +1,958 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-27T12:38:09.184770Z",
+ "start_time": "2025-05-27T12:38:09.175372Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import torch\n",
+ "import sys\n",
+ "import os.path as osp\n",
+ "import os\n",
+ "import sys\n",
+ "import numpy as np\n",
+ "from src.dataset.dataset import SimpleIterDataset, EventDataset\n",
+ "from src.utils.utils import to_filelist\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import matplotlib\n",
+ "matplotlib.rc('font', size=13)\n",
+ "from src.plotting.plot_event import plot_event_comparison\n",
+ "from src.dataset.functions_data import concat_events"
+ ],
+ "id": "6bae9707acf4a848",
+ "outputs": [],
+ "execution_count": 2
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-27T12:38:10.099015Z",
+ "start_time": "2025-05-27T12:38:10.070328Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "def remove_from_list(lst):\n",
+ " out = []\n",
+ " for item in lst:\n",
+ " if item in [\"hgcal\", \"data.txt\", \"test_file.root\"]:\n",
+ " continue\n",
+ " out.append(item)\n",
+ " return out\n",
+ "\n",
+ "#path = \"/eos/user/g/gkrzmanc/jetclustering/data/SVJ_std_UL2018_scouting_test_large/SVJ_mMed-700GeV_mDark-20GeV_rinv-0.7_alpha-peak\"\n",
+ "def get_iter(path, full_dataloader):\n",
+ " if full_dataloader:\n",
+ " datasets = os.listdir(path)\n",
+ " datasets = [os.path.join(path, x) for x in datasets]\n",
+ " datasets = datasets[:10]\n",
+ "\n",
+ " class Args:\n",
+ " def __init__(self):\n",
+ " self.data_train = datasets\n",
+ " self.data_val = datasets\n",
+ " #self.data_train = files_train\n",
+ " self.data_config = '/work/gkrzmanc/jetclustering/code/config_files/config_jets_2_delphes.yaml'\n",
+ " self.extra_selection = None\n",
+ " self.train_val_split = 0.8\n",
+ " self.data_fraction = 1\n",
+ " self.file_fraction = 1\n",
+ " self.fetch_by_files = False\n",
+ " self.fetch_step = 0.2\n",
+ " self.steps_per_epoch = None\n",
+ " self.in_memory = False\n",
+ " self.local_rank = None\n",
+ " self.copy_inputs = False\n",
+ " self.no_remake_weights = False\n",
+ " self.batch_size = 10\n",
+ " self.num_workers = 0\n",
+ " self.demo = False\n",
+ " self.laplace = False\n",
+ " self.diffs = False\n",
+ " self.class_edges = False\n",
+ "\n",
+ " args = Args()\n",
+ " train_range = (0, args.train_val_split)\n",
+ " train_file_dict, train_files = to_filelist(args, 'train')\n",
+ " train_data = SimpleIterDataset(train_file_dict, args.data_config, for_training=True,\n",
+ " extra_selection=args.extra_selection,\n",
+ " remake_weights=True,\n",
+ " load_range_and_fraction=(train_range, args.data_fraction),\n",
+ " file_fraction=args.file_fraction,\n",
+ " fetch_by_files=args.fetch_by_files,\n",
+ " fetch_step=args.fetch_step,\n",
+ " infinity_mode=False,\n",
+ " in_memory=args.in_memory,\n",
+ " async_load=False,\n",
+ " name='train', jets=True)\n",
+ "\n",
+ " iterator = iter(train_data)\n",
+ " else:\n",
+ " ds = EventDataset.from_directory(path)\n",
+ " print(\"Num events:\", len(ds))\n",
+ " iterator = iter(ds)\n",
+ " return iterator\n",
+ "def get_histogram(path, full_dataloader=True):\n",
+ " iterator = get_iter(path, full_dataloader)\n",
+ " pt_jet = []\n",
+ " pt_jet_all = []\n",
+ " njets = []\n",
+ " njets_gen = []\n",
+ " jet_pt_gen = []\n",
+ " jet_mass, jet_mass_filtered = [], []\n",
+ " jet_area, jet_area_filtered = [], []\n",
+ " met_pt_lst, met_phi_lst = [], []\n",
+ " n = 0\n",
+ " while True:\n",
+ " try:\n",
+ " data = next(iterator)\n",
+ " n += 1\n",
+ " njgen = len(data.genjets)\n",
+ " nj = len(data.jets)\n",
+ " j_m = data.jets.mass.tolist()\n",
+ " jet_mass += list(j_m)\n",
+ " njets.append(nj)\n",
+ " njets_gen.append(njgen)\n",
+ " jet_pt = data.jets.pt.tolist()\n",
+ " met_pt = data.MET.pt.item()\n",
+ " met_phi = data.MET.phi.item()\n",
+ " met_pt_lst.append(met_pt)\n",
+ " met_phi_lst.append(met_phi)\n",
+ " pt_jet_all += list(jet_pt)\n",
+ " gen_jet_pt = data.genjets.pt.tolist()\n",
+ " jet_pt_gen += list(gen_jet_pt)\n",
+ " if nj < 2:\n",
+ " continue\n",
+ " jet_eta = data.jets.eta.tolist()\n",
+ " max_idx = np.argmax(jet_pt)\n",
+ " if jet_pt[max_idx] < 100 or abs(jet_eta[max_idx]) > 2.4:\n",
+ " continue\n",
+ " pt_jet.append(jet_pt[max_idx])\n",
+ " jet_mass_filtered += list(j_m)\n",
+ " except StopIteration:\n",
+ " break\n",
+ " #len(pt_jet), n\n",
+ " return pt_jet, n, jet_mass, jet_area, njets, jet_mass_filtered, jet_area_filtered, pt_jet_all, jet_pt_gen, njets_gen, met_pt_lst, met_phi_lst"
+ ],
+ "id": "e7a7ef680143801e",
+ "outputs": [],
+ "execution_count": 3
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-27T12:38:11.149360Z",
+ "start_time": "2025-05-27T12:38:11.011204Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "dataset = get_iter(\"/work/gkrzmanc/jetclustering/preprocessed_data/QCD_test_part0/qcd_test\", full_dataloader=0)",
+ "id": "1549361c5b028634",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "File: final_gen_particles.pkl\n",
+ "File: matrix_element_gen_particles.pkl\n",
+ "File: pfcands.pkl\n",
+ "File: final_parton_level_particles.pkl\n",
+ "get_pfcands_key\n",
+ "Num events: 10000\n"
+ ]
+ }
+ ],
+ "execution_count": 4
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "5a56bd6f35d1c77e"
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-15T14:48:09.951649Z",
+ "start_time": "2025-05-15T14:48:08.122447Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "n_pfc = []\n",
+ "pfc_pt = []\n",
+ "from tqdm import tqdm\n",
+ "for i in tqdm(range(500)):\n",
+ " data = next(dataset)\n",
+ " n_pfc.append(len(data.pfcands) - (data.pfcands.pt<0.5).sum())\n",
+ " pfc_pt += torch.log10(data.pfcands.pt).tolist()"
+ ],
+ "id": "4cc3bf30c839c6c0",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 500/500 [00:01<00:00, 275.15it/s]\n"
+ ]
+ }
+ ],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-15T14:48:10.799487Z",
+ "start_time": "2025-05-15T14:48:10.535134Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "ax.hist(n_pfc, bins=100, histtype=\"step\", label=\"Charged hadrons\")\n",
+ "fig.show()\n"
+ ],
+ "id": "5c20c3e1dff48004",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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2rEI93nh8XiszZs3N3n84he/sCRZd9xxh7V582brwIEDlmWF/7y4VPzar87fbbThFNvq1avl8XiUl5cnSerXr5+mTZvmrbtr1y7deuut6tu3r+bMmeNd5x//+If++Mc/6oYbbvDW/eabb3TTTTfpm2++UW5urlwul1599VVt375d69at08yZM9txLy+uteNQXFysO++8UxMmTNCgQYMUFxenP/3pT9qwYYMiIyP13nvv6fvf/77Ptu+66y69/fbbmjlzpvdOrevXr9fUqVP93u3VtLVr1+qJJ57QFVdcoaVLlza5O+Rll12msWPHSpJKSkp08803Kzo6WnPnzlW3bt30/PPP67PPPtOWLVt0++23e9fzeDwaOXKk/vSnP+nJJ5/U4MGD9c477+iNN97Q/PnztXTp0nbdz4tp7ThUVFRowIABmjBhggYPHqzk5GQdOHBA69atU1VVlV599VVlZ2f7rDtnzhytWbNGEydO1Lhx47x35Bw1apS2bt3a4e7IOXHiRB07dky33Xab+vXrp3Pnzmnfvn167bXX1LVrV23fvl2ZmZmSwntOSK0fi84wL/w5fPiwBgwYoMcff9zna8DhPi8umelE1BFkZWVZkvw+srKymtTftWuXddttt1lxcXFWfHy89YMf/MDat2+f320fOXLEmjp1qtWjRw/L4XBYN954o/Xaa6/ZvEdt09pxOHbsmDV16lTrqquushISEqwuXbpYqamp1oMPPmh98cUXfrftdrutn/70p1a/fv2smJgYa8CAAdaSJUssj8fTTnsXmIYbv7V2Xvz5z3+27r77bisxMdFyOp3WqFGjrPfff9/vtsvLy63HH3/cuvzyy71nlFavXu3z11FH0dpxOHfunDVz5kwrIyPDSkpKsrp06WL17t3buueee3xu9nShb7/91nrmmWesK6+80oqJibH69OljzZ07t8PdwbjBpk2brPHjx1t9+/a1HA6HFRsba1111VXWE088YZWWljapH65zwrJaPxadYV744+/GaA3CeV5cKs6QAAAA4zr+uS8AABD2CCQAAMA4AgkAADCOQAIAAIwjkAAAAOMIJAAAwDgCCQAAMI5AAgAAjCOQAAAA4wgkAADAOAIJAAAwjkACAACMI5AAAADj/h/KGelhGIR6dgAAAABJRU5ErkJggg=="
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-15T14:48:13.157577Z",
+ "start_time": "2025-05-15T14:48:12.582144Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "fig, ax = plt.subplots()\n",
+ "ax.hist(pfc_pt, bins=100, histtype=\"step\", label=\"Charged hadrons\")\n",
+ "ax.grid(1)\n",
+ "fig.show()\n"
+ ],
+ "id": "94879bf33c875cf",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 7
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-15T14:32:39.717056Z",
+ "start_time": "2025-05-15T14:32:38.619003Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "evt = next(dataset)\n",
+ "labels = [\"scounting PFCands\", \"genParticles\", \"parton level\"]\n",
+ "colors = [\"gray\", \"blue\", \"red\"]\n",
+ "classes = [\"pfcands\", \"final_gen_particles\", \"final_parton_level_particles\"]\n",
+ "\n",
+ "fig, ax = plt.subplots(1, 4, figsize=(20, 5))\n",
+ "for i in range(3):\n",
+ " pt = getattr(evt, classes[i]).pt\n",
+ " eta = getattr(evt, classes[i]).eta\n",
+ " phi = getattr(evt, classes[i]).phi\n",
+ " eta_dq, phi_dq = evt.matrix_element_gen_particles.eta, evt.matrix_element_gen_particles.phi\n",
+ " pt_dq = evt.matrix_element_gen_particles.pt\n",
+ " pid_dq = evt.matrix_element_gen_particles.pid\n",
+ " print(\"pt\", pt_dq)\n",
+ " ax[i].scatter(eta_dq, phi_dq, s=pt_dq, color=\"blue\", alpha=0.3, marker=\"^\")\n",
+ " # print pt at the place of the dark quark\n",
+ " for j, pid in enumerate(pid_dq):\n",
+ " txt = \"pt=\" + str(round(pt_dq[j].item(), 2)) + \" PID=\"+str(pid.int().item())\n",
+ " ax[i].annotate(txt, (eta_dq[j], phi_dq[j]), size=5)\n",
+ " #ax[i].scatter(eta_dq, phi_dq, s=pt_dq, color=\"blue\", alpha=0.3)\n",
+ "\n",
+ " ax[i].scatter(eta, phi, s=pt, color=colors[i], alpha=0.3)\n",
+ " ax[i].set_title(labels[i])\n",
+ " ax[i].set_xlabel(\"eta\")\n",
+ " ax[i].set_ylabel(\"phi\")\n",
+ " ax[-1].scatter(eta, phi, s=pt, color=colors[i], alpha=0.3, label=labels[i])\n",
+ " # Put PID where the circles are\n",
+ " #for j, txt in enumerate(getattr(evt, classes[i]).pid):\n",
+ " # ax[i].annotate(txt.int().item(), (eta[j], phi[j]), size=5)\n",
+ "ax[-1].set_title(\"all\")\n",
+ "fig.savefig(\"/work/gkrzmanc/jetclustering/results/qcd_event_example_5_withPt.pdf\")\n",
+ "fig.show()"
+ ],
+ "id": "90d172b82bdfe82a",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "pt tensor([119.6564, 119.6564], dtype=torch.float64)\n",
+ "pt tensor([119.6564, 119.6564], dtype=torch.float64)\n",
+ "pt tensor([119.6564, 119.6564], dtype=torch.float64)\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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OZ599ln885//xHPPPYezzjorKu+JiGg8Gkk7hSjuCKIjuPzyywUAcd999/V5rqWlRXz66ae9tl177bUCgJg5c6YoLy/v9ZzX6xWvvvpqr23nnXeeACBOPfVU4XK5erbX1taK6dOnCwDihhtu6LXPmjVrBADx5z//ud+YFy9eLACIjRs39rtdURTx17/+tWd7OBzuifvEE0/sczwA4nD/XW699VYBQNx66639bgcgrr32WhEMBnuee/bZZwUAYbVahdvt7rXfWWedJQCI8847T3g8np7te/bsEdnZ2T3HPHDgwIAxfV1BQUG/n4kQQjz44IMCgDAajaK7u3tQ+3xdWVlZT1zV1dWDjiuiurpavP322yIcDvfaXl9fL+bOnSsA9Po3E0KIAwcO9JyzpKREVFVV9TzX0NAgioqKBADxl7/8pdd+L7zwggAgUlNTxbZt23q2ezyent/Hr/97VlRUCAAiPz9fNDY29on/3XffFV1dXUN+30SkLrfbLbKysgQA8Ytf/KLXc//4xz+EVqsVAERBQUHP9q6uLlFYWCgAiF//+tciFAr1PFdTU9NzzXrkkUd6HW+496ChXr//8Y9/iPb29l6vCwaD4mc/+5kAIE477bQ+x4nENpx7a8TGjRsFALF48eJe2ysqKoTVahUAxK9+9aten5cQQuzatUvs3LnziMc5ePCgcDgcQq/X97kf7Nq1q+dzeuutt3q233bbbQKAuOaaa/rE29nZKd57771+3wsR0XBFrqVJSUni3Xff7dkeDAbFd7/7XQFAzJkzp9c+LpdLvPTSSyIQCPTa3t7eLs444wwBQNx7770DnislJUV89tlnh41nIL///e8FAJGXlyf27dvXs93r9YqLL75YABALFizotU/kOg1AHHvssaK1tbXnubKyMmG32wUAsXnz5gHP+3UDte8eeOABAUAcddRRveITQoiHHnpIABDFxcW9PrtzzjlHABAbNmzoc576+nqh0+mEzWbr1e55+eWXe77rf719++KLLwqdTifsdrtoaWnp2R5pixz6HYGIiAY21HbKkfr2BtNXRaQWJl3oiCJf9Ldu3XrE19bX1wu9Xi90Op3Yv3//EV9fUVEhFEURer2+3wRC5Au91WrtlXwYadLlggsu6LNPU1OTACAMBoPw+/29nhtp0qWgoEB4vd4++0WSSps2berZduDAAaEoijAa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EdHwjWY7hSgWMelCR/Tggw9i3759fbZv374dlZWV0Gg0PaWkMjMzcdVVVyEYDOLcc89FZWVlr318Pl/PQriArD+8cuVKBINBXH311b1mrjQ0NGDt2rUAgO9973u9FiKOTC9//PHHsX///l77fPvb3z5iebGhiozs2rVrV1SP25/i4mKcccYZ8Hq9WLt2ba9ayJERvrHqqKOOwp133gkhBFauXIk//OEPfRp44XAYL730EubPn4/NmzcDkL83kdJkX29YPvHEE3jyySejGmfk9+rnP/85vvzyy57tPp8P1157Lbq7u/vss3XrVjzzzDPwer29tgsh8OqrrwJAz0wvIoof559/PjIyMrB161b87//+b6/nXnrpJTz77LN99rnqqquQm5uLP/zhD7jvvvv6rVm/c+dOPP/886MW90AiMzb+9Kc/IRAI9GyvqKjANddcM6JjD/deuG7dOiQlJeHRRx/F7373uz736N27d2P37t1HPM7/+3//D8nJybjtttvwyCOP9KkFLYTAxx9/3Ctx/thjj/Uk+A9VU1ODbdu2AeC1m4hGxwMPPIAPPvig5+dQKITrr78eTU1NmD17dk/SH/jq2v3ggw/2Osabb76JX/3qVyOK40jX7sjgofXr1/dqV/n9flx77bVob2/HggULeq2BMlb0ej1uvvlm+P1+nH322fj888/7vKa7uxtPPfVUv4PVvvnNb0Kj0eDpp5/uSfxHEjFfF2ljXXTRRT1tlEP5/X689NJLg7pfERFRX6PZTiGKRUy60BH98Y9/xOTJk1FSUoKVK1fikksuwZIlSzB37lz4/X78+Mc/RnZ2ds/rf/nLX+LUU0/F559/jsmTJ+Okk07CxRdf3FOv8esX04ceeghTp07Fv/71LxQXF+P888/HOeecg5KSEmzfvh1LlizB7bff3mufRYsW4ZRTTkFHRwfmzJmD5cuX47TTTkNpaSl0Oh2OO+64qH4GK1euBAAsXboUF154Ia688kpceeWVUT3HoR566CFMmDABzz77LCZOnIgLLrgAZ555JmbOnIljjjmmp4MoMuo4ltx000341a9+hVAohKuvvhoZGRk4/fTTcckll+DMM89EdnY2VqxYgfLychQVFQEAtFotbrrpJgCyVv8JJ5yAiy++GEcddRQuvfRS/OQnP4lqjOeeey6uuOIKNDc3Y968eVi2bBkuvPBCTJo0CW+88QYuvfTSPvtUVlbiggsuQFpaGhYvXoyLL74Y5557LgoKCvDkk08iMzMTN9xwQ1TjJKLRZ7Va8Ze//AV6vR7r1q3D7Nmze65DZ599Nq699loAva+3ycnJePnllzFhwgSsX78eeXl5OPnkk/HNb34Ty5cvR0FBAaZPnz7g7JnRdN1118Fms+GVV15BSUkJVq9ejWXLlmHq1KnIzs4e0f0xci+8/vrrsWLFip57YX+zTg9VWFiIp59+GmazGT/4wQ967vXnnnsuZs2ahalTp/bqmBxIQUEBnn/+eZhMJlx55ZUoLCzEsmXLcMkll2DZsmXIzs7GggUL8NZbb/Xs8/zzz2Pu3LnIz8/HWWedhW9+85s49dRTUVJSgsbGRqxevbrPOgBERNHwrW99CyeccAKWLl2Kiy66CKWlpXjwwQfhcDjw2GOP9VpT5OabbwYgv0fPnTsXF198MY477jiccsop+MEPfjCiOI7Ujvn+97+P888/H9XV1ZgxYwbOOOMMXHjhhZg4cSKeeOIJ5ObmRn0A1FD86Ec/wrXXXoutW7di7ty5mDt3LlatWoULLrgA3/jGN5CamopLLrmk3/LLEyZMwNKlS9Hc3NxzH1q9enW/51m5ciV+/vOfo7KyEkuWLMH06dOxcuVKXHTRRVi0aBGcTidWrFhx2DLEREQ0sNFspxDFJEF0BC+99JK46qqrxOzZs4XT6RRGo1EUFBSI5cuXi1dffbXffYLBoHj00UfF4sWLhcPhEAaDQeTl5YkzzzxT/PWvf+3zepfLJW699VYxffp0YTKZRFJSkpg3b574zW9+I3w+X7/ncLvd4oc//KGYMGGCMBgMorCwUNx0003C4/GIxYsXCwBi48aNvfYZaHtEQUGBACAOHDjQa3t3d7dYt26dKCoqEnq9XgAQh/73ufXWWwUAceutt/bab6DtEWvWrBEAxJ///Oc+zx08eFB861vfEpmZmcJoNIrJkyeLu+66S3i9XmEwGIRGoxEej6ff4x7uvQ303qO1T0RlZaW48cYbxbx580RKSorQ6XQiJSVFHHvsseLWW28VlZWVffZ5+umnxdFHHy2Sk5OF3W4XS5YsEa+88oo4cOCAACAKCgp6vX6g7REbN24UAMTixYv7PBcKhcT9998vZsyYIYxGo0hLSxPnn3++2LdvX7//bnV1deKee+4Rp512migoKBAmk0mkpKSI2bNni1tuuUU0NDQM+TMiotjx4YcfimXLlgmbzSaSkpLEMcccI5555hmxZcsWAUAce+yxffZpbW0Vd955p5g/f75ITk4WRqNR5Ofni0WLFol77rlHlJWV9Xr9cO9BQ70W79u3T6xatUrk5OQIk8kkSktLxa233iq8Xu+w748RDz74oJg9e7Ywm80998LIPoe75kbi+u53vyuKioqEwWAQDodDzJw5U/y///f/et0TjnScgwcPihtuuEHMnDlTJCUlCbPZLIqKisQpp5wifvOb34iDBw/2vHbz5s3iuuuuE/PnzxcZGRnCYDCI3NxcsXTpUvHXv/5VBIPBI32cRERDErk2hsNh8fvf/17MmDFDmEwm4XQ6xQUXXCD27dvX735vvvmmWLhwoXA4HMJqtYpjjjlGPPbYY72OOdC5DudI7Rgh5PfiRx99VBx//PEiOTlZGAwGMWnSJPHjH/9YNDY29jnmka7Tf/7znwUAsWbNmsPGdqjDtYuEEOLtt98W559/fk/bLyUlRUybNk2sWbNGPP/888Lv9/e73xNPPNHzni+88MIjxvHpp5+KNWvWiMLCQmE0GoXNZhOlpaXi/PPPF0888YRwu909rz1SW4SIiHobajtlpG0XIjUpQggxahkdIoq6d999FyeccAKmT5/eqzQWERFF3913342bb74Z3//+93H//ferHQ4REcW4yAwWNrOJiIiIxi+WFyOKQcFgsN8a9Hv27MFVV10FYOB6xERENDT19fWoqanps/1f//oX7rnnHgDAZZddNtZhEREREREREVEc0qkdABH15fV6MXfuXBQWFmLKlCmw2WyorKzEp59+imAwiEWLFuGHP/yh2mESESWETz75BCtWrMCsWbNQWFgIjUaDvXv3YseOHQDk4sILFixQOUoiIiIiIiIiigcsL0YUg4LBIG655Ra89dZbOHDgANrb22GxWDB16lRceOGF+N73vtdrUWciIhq+yspK3Hvvvdi8eTPq6+vhdruRkpKCefPm4eqrr8bZZ5+tdohERBQnWF6MiIiIiJh0ISIiIiIiIiIiIiIiigKu6UJERERERERERERERBQFTLoQERERERERERERERFFgU7tAGJROBxGbW0tkpOTe2ryEhHR4Agh0NnZiZycHGg04zu3z/sJEdHw8X7SG+8pRETDx3vKV3g/ISIavsHe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0ktVUVGh//N//o/8fv+020OhkN7xjnfYE1ye/OhHP9Lzzz8vSXrggQe0Y8cOffrTn5YkVVZW6pprrrEzvJy49tprddddd+nSSy/VhRdeqG3btunOO+/UmWeeqV//+tcl8YF0NPfff7/27dsnSfrKV76iZDKpG264QZK0bNkyXX755XaGt6i++tWv6pprrlFra6s+/elPH/F/3dDQoPPOO8+m6FBKyCflkU8kcko55xSJvILFQx6xkEvIJeQScglyh9xSHnmFnFK+OaVk84ldm8kgd26++eajbr5VDpsvXXHFFSV//Ol02vz85z9vrl692vR4PGZzc7P593//9+bo6KjdoeXF5s2bZ/0/3rx5s93hLaqj/X6Xw/Ejf8gn5ZFPTJOcUs45xTTJK1g85BELuYRcUg6fo+QS5Au5pTzyCjmlfHNKqeYTZroAAAAAAAAAAADkQGnPzQIAAAAAAAAAAMgTmi4AAAAAAAAAAAA5QNMFAAAAAAAAAAAgB2i6AAAAAAAAAAAA5ABNFwAAAAAAAAAAgByg6QIAAAAAAAAAAJADNF0AAAAAAAAAAABygKYLAAAAAAAAAABADtB0AQAAAAAAAAAAyAGaLgAAAAAAAAAAADlA0wUoIh0dHbrlllv03HPP2R0KAKCIkU8AALlAPgEAADgSTRegiHR0dOjWW2/lpAYAsCDkEwBALpBPAAAAjkTTBQAAAAAAAAAAIAdougAFIJFI6HOf+5zWr18vn8+nyspKve1tb9Ozzz47dZ/77rtPb37zmyVJV155pQzDkGEYOvvssyVJ2WxWn/3sZ/WmN71JjY2N8ng8am1t1Uc/+lENDg7acVgAgDwjnwAAcoF8AgAAMH+GaZqm3UEA5SyVSun888/XH/7wB11++eU69dRTNTIyorvvvls9PT16/PHHddppp2nPnj361re+pc997nO6+uqrtWnTJklSQ0ODzjvvPMXjcTU2Nupd73qX1q1bp2AwqKeeekr333+/1qxZo2eeeUYej8fmowUALBbyCQAgF8gnAAAAC0PTBbDZl770JV1//fX6+c9/rre85S1T10ejUR1//PFasWKFHnvsMUnSY489pje/+c2699579aEPfWja45imqXg8Lr/fP+36b33rW/rIRz6i7373u3rve9+72IcDALAJ+QQAkAvkEwAAgIVheTHAZg888IDWrl2rU089VQMDA1OXZDKp8847T7/73e80MTHxuo9jGMbUCU0mk9Hw8LAGBga0ZcsWSdKf/vSnRT0OAIC9yCcAgFwgnwAAACyMy+4AgHK3bds2TUxMqK6ubtb7DAwMaOnSpa/7WN/73vf0hS98Qc8++6xSqdS02w4dOrTgWAEAhYt8AgDIBfIJAADAwtB0AWxmmqZOOOEEffGLX5z1Pkc74Zn0P//zP7rsssu0ceNGffnLX9bSpUvl8/mUyWR0wQUXKJvN5jJsAECBIZ8AAHKBfAIAALAwNF0Am61atUoHDx7Uli1b5HAcfcU/wzBmve3++++Xz+fTo48+qkAgMHX99u3bcxYrAKBwkU8AALlAPgEAAFgY9nQBbPbBD35Qvb29s44k6+vrm/o6FApJkoaGho64n9PplGEY00aMmaapz3zmMzmOGABQiMgnAIBcIJ8AAAAsDDNdAJt9/OMf18MPP6wbb7xRv/71r7VlyxZVVFRo//79euSRR6ZGh0nSunXrFA6H9bWvfU2BQECVlZWqr6/Xli1b9O53v1sPPfSQtmzZog9+8INKpVL6/ve/r/HxcZuPEACQD+QTAEAukE8AAAAWxjBN07Q7CKDcpdNpfe1rX9P999+vrVu3SpKam5u1ceNGXXHFFTr//POn7vvTn/5Un/rUp7R161YlEglt3rxZjz32mCTp7rvv1pe+9CXt2bNHVVVVetvb3qZ/+Zd/UU1Nja644grdd999NhwdACBfyCcAgFwgnwAAAMwfTRcAAAAAAAAAAIAcYE8XAAAAAAAAAACAHKDpAgAAAAAAAAAAkAM0XQAAAAAAAAAAAHKApgsAAAAAAAAAAEAO0HQBAAAAAAAAAADIAZouAAAAAAAAAAAAOUDTBQAAAAAAAAAAIAdougAAAAAAAAAAAOQATRcAAAAAAAAAAIAcoOkCAAAAAAAAAACQAzRdAAAAAAAAAAAAcoCmCwAAAAAAAAAAQA78/+na4VIlWIUfAAAAAElFTkSuQmCC"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 18
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.417431Z",
+ "start_time": "2025-04-10T12:56:36.016599Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "1/0",
+ "id": "5b74cae8548bb02e",
+ "outputs": [
+ {
+ "ename": "ZeroDivisionError",
+ "evalue": "division by zero",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mZeroDivisionError\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[6], line 1\u001B[0m\n\u001B[0;32m----> 1\u001B[0m \u001B[38;5;241;43m1\u001B[39;49m\u001B[38;5;241;43m/\u001B[39;49m\u001B[38;5;241;43m0\u001B[39;49m\n",
+ "\u001B[0;31mZeroDivisionError\u001B[0m: division by zero"
+ ]
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.485565764Z",
+ "start_time": "2025-02-28T11:18:20.193273Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "ds = EventDataset.from_directory(\"/work/gkrzmanc/jetclustering/preprocessed_data/scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-900_mDark-20_rinv-0.3\")",
+ "id": "e0d491f2943f20e9",
+ "outputs": [],
+ "execution_count": 4
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.514906710Z",
+ "start_time": "2025-02-28T11:18:23.066146Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "e = concat_events([ds[0], ds[1], ds[2], ds[3]])\n",
+ "def get_idx_for_event(obj, i):\n",
+ " return obj.batch_number[i], obj.batch_number[i+1]\n",
+ "\n",
+ "def get_labels_jets(b, pfcands, jets):\n",
+ " # b: Batch of events\n",
+ " R = 0.8\n",
+ " labels = torch.zeros(len(pfcands)).long()\n",
+ " for i in range(len(b)):\n",
+ " s, e = get_idx_for_event(jets, i)\n",
+ " dq_eta = jets.eta[s:e]\n",
+ " dq_phi = jets.phi[s:e]\n",
+ " s, e = get_idx_for_event(pfcands, i)\n",
+ " pfcands_eta = pfcands.eta[s:e]\n",
+ " pfcands_phi = pfcands.phi[s:e]\n",
+ " # calculate the distance matrix between each dark quark and pfcands\n",
+ " dist_matrix = torch.cdist(\n",
+ " torch.stack([dq_eta, dq_phi], dim=1),\n",
+ " torch.stack([pfcands_eta, pfcands_phi], dim=1),\n",
+ " p=2\n",
+ " )\n",
+ " dist_matrix = dist_matrix.T\n",
+ " closest_quark_dist, closest_quark_idx = dist_matrix.min(dim=1)\n",
+ " closest_quark_idx[closest_quark_dist > R] = -1\n",
+ " labels[s:e] = closest_quark_idx\n",
+ " return (labels>=0).float()\n",
+ "get_labels_jets(e, e.pfcands, e.fatjets)"
+ ],
+ "id": "3320a4443a647b8e",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([1., 1., 1., ..., 1., 1., 1.])"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.516324372Z",
+ "start_time": "2025-02-28T11:18:24.394600Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "data = next(dataset)\n",
+ "plot_event_comparison(data).show()\n",
+ "print(\"Red circle: (fat)jets, blue star: genjet, red triangle: dark quark,\")\n",
+ "print(\"gray triangle: PFCand satisfying certain criteria - fields with Electrons, Muons, Photons\")\n",
+ "print(\"Fatjet = AK8, jet = AK4\")"
+ ],
+ "id": "76303de5eb9da1e6",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "N jets: 4\n",
+ "Red circle: (fat)jets, blue star: genjet, red triangle: dark quark,\n",
+ "gray triangle: PFCand satisfying certain criteria - fields with Electrons, Muons, Photons\n",
+ "Fatjet = AK8, jet = AK4\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.528147579Z",
+ "start_time": "2025-02-28T11:18:53.573147Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "data.pfcands.pt[data.pfcands.pid==2]",
+ "id": "80cfb9bd3d9332f7",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([4.3327, 4.0157])"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 11
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.528668324Z",
+ "start_time": "2025-02-28T11:19:56.042017Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "488066a866e11b84",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([ 31, 225])"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 16
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.532144591Z",
+ "start_time": "2025-02-28T11:20:14.290340Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "d488edca914d63c7",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(tensor([-0.7817, -1.5188]), tensor([2.9668, 0.0652]))"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 18
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.532772684Z",
+ "start_time": "2024-12-25T10:54:03.693404Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "R=0.8\n",
+ "jets = [data.fatjets.eta, data.fatjets.phi]\n",
+ "dq = [data.matrix_element_gen_particles.eta, data.matrix_element_gen_particles.phi]\n",
+ "# calculate deltaR between each jet and each quark\n",
+ "distance_matrix = np.zeros((len(data.fatjets), len(data.matrix_element_gen_particles)))\n",
+ "for i in range(len(data.fatjets)):\n",
+ " for j in range(len(data.matrix_element_gen_particles)):\n",
+ " deta = jets[0][i] - dq[0][j]\n",
+ " dphi = jets[1][i] - dq[1][j]\n",
+ " distance_matrix[i, j] = np.sqrt(deta**2 + dphi**2)\n",
+ "# row-wise argmin\n",
+ "distance_matrix = distance_matrix.T\n",
+ "#min_distance = np.min(distance_matrix, axis=1)\n",
+ "if len(data.fatjets):\n",
+ " quark_to_jet = np.min(distance_matrix, axis=1)\n",
+ " quark_to_jet[quark_to_jet > R] = -1\n",
+ " filt = quark_to_jet == -1\n",
+ "else:\n",
+ " filt = torch.ones(len(data.matrix_element_gen_particles)).bool()\n",
+ " quark_to_jet = torch.ones(len(data.matrix_element_gen_particles)).long() * -1\n",
+ "\n",
+ "visible_E_event = torch.sum(data.pfcands.E) #+ torch.sum(data.special_pfcands.E)\n",
+ "print(\"quark_to_jet:\", quark_to_jet)\n",
+ "matched_quarks = np.where(quark_to_jet != -1)[0]\n",
+ "for i in range(len(data.matrix_element_gen_particles)):\n",
+ " dq_coords = [dq[0][i], dq[1][i]]\n",
+ " cone_filter = torch.sqrt((data.pfcands.eta - dq_coords[0])**2 + (data.pfcands.phi - dq_coords[1])**2) < R\n",
+ " #cone_filter_special = torch.sqrt(\n",
+ " # (data.special_pfcands.eta - dq_coords[0]) ** 2 + (data.special_pfcands.phi - dq_coords[1]) ** 2) < R\n",
+ " E_in_cone = data.pfcands.E[cone_filter].sum() #+ data.special_pfcands.E[cone_filter_special].sum()\n",
+ " print(\"Matched?:\", i in matched_quarks, \"frac_E_in_cone:\", E_in_cone / visible_E_event)"
+ ],
+ "id": "7650a65e1d0c86a",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "quark_to_jet: [0.03256156 0.10826813]\n",
+ "Matched?: True frac_E_in_cone: tensor(0.2263)\n",
+ "Matched?: True frac_E_in_cone: tensor(0.2795)\n"
+ ]
+ }
+ ],
+ "execution_count": 14
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "392e067f2540e3bc"
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.533337989Z",
+ "start_time": "2024-12-17T10:31:52.474189Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "np.linalg.norm(data.matrix_element_gen_particles.pxyz, axis=1), data.matrix_element_gen_particles.mass",
+ "id": "51b574ea2fbcaa98",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(array([ 921.4706, 1422.0653], dtype=float32), tensor([10., 10.]))"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.533709271Z",
+ "start_time": "2024-12-17T10:31:52.535915Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "plot_event_comparison(data, special_pfcands_size=10).show()",
+ "id": "6af3f59717589820",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "N jets: 2\n",
+ "N special PFCands: 5\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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4vDhw9i4caPaodhFfn4+IiIi0L9//6rHJElCcHCw2/1/JPJUnpBz3TXfAp6Tc5lvnZtO7QA8xZEjR2r8fPHiRaxZswZz585VKSL7aNGiBVq0aKF2GIq7evUqAKBNmzZVj2k0GoSHh8NoNKoVll2EhoYiNDQU/v7+aodiFy1atMCpU6dqPJacnIydO3fivffeUykqIlKSJ+Rcd823gOfkXOZb58aRJBWsX78egwYNgre3N1566SW1wyEr5OTkwM/PD1qttsbjAQEByM7OVikqaiqLxYIvv/wSw4cPR1RUFH75y1+qHRIRKYw51/Uw57ofV8y3LJLsYOfOndDpdFVfy5YtAwAYjUZMnz4dkydPRmxsLPbv31/jKomrqet9uqOWLVuiuLgYZrO5xuP5+fkICgpSKSpqirS0NIwYMQLz589HfHw8tm/fjmbNmqkdFhHZyBNyriflW4A51924ar7ldDs7iIuLQ2pqatXPbdq0QXp6OoYMGQKTyYQVK1bggQcegCRJKkbZdLW9T3fVunVrAEBmZibatWsHQFwVycrKcuv37a6SkpIwevRohIaGYtu2bRg1apTaIRFRI3lCzvWkfAsw57oTV863LJLswM/PD927d6/xWHx8PJo3b45Nmzahffv2KkWmrNrep7uKiYlBaGgo1q9fjwULFgAQ//Hz8vIwevRolaMjW5jNZsyePRu9evXC2rVr0bJlS7VDIqIm8ISc60n5FmDOdReunm9ZJDlAVlYWdu/ejXfffRcVFRU4d+5c1XO+vr6IiIhQMTqyhl6vxzPPPINXX30VrVu3RkBAAJ599lnMnDmz6ioXuYakpCRcvHgRb731FnJycpCTk1P1XEBAAMLCwlSMjoiaijnX9THnugdXz7cskhwgMzMTALBo0SIsWrSoxnMjRozAjh07VIiKbPXaa6+hoqICL7zwAoqLizFlyhQsXrxY7bDIRhkZGQCARx555K7n5s+fjy+++MLBERGRkphz3QNzrutz9XwrybIsqx0EERERERGRs2B3OyIiIiIiompYJBEREREREVXDIomIiIiIiKgaFklERERERETVsEgiIiIiIiKqhkUSERERERFRNSySiIiIiIiIqmGRREREREREVA2LJCIiIiIiompYJBEREREREVXDIomIiIiIiKgaFklERA4wcuRIDBkyBO+//z6io6Ph7++PQYMGYcOGDWqHRkRE5DaUyrcskoiIHGTfvn145513MHToULz11lvw9vbGpEmTsHHjRrVDIyIichtK5FtJlmXZjjESERHEla3U1FTs2rUL0dHRAICKigrce++9aNeuHTZt2qRyhERERK5PqXzLkSQiIgeJiYmpOmEDgF6vR1xcHE6fPq1iVERERO5FiXzLIomISEUaDU/DRERE9mZrvmV2JiIiIiIiqoZFEhERERERUTUskoiIiIiIiKphkURERERERFSNTu0AiIg8wY4dO9QOgYiIyO0plW85kkRERERERFQNiyQiIiIiIqJqWCQRERERERFVI8myLKsdBBERERERkbPgSBIREREREVE1LJKIiIiIiIiqYZFERERERERUDYskIiIiIiKialgkERERERERVcMiiYiIiIiIqBoWSURERERERNWwSCIiIiIiIqqGRRIREREREVE1LJKIiIiIiIiqYZFERERERERUzf8DxUFoikSfQmYAAAAASUVORK5CYII="
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.533964755Z",
+ "start_time": "2024-12-17T10:31:53.407393Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "np.sqrt(data.matrix_element_gen_particles.E**2 - np.linalg.norm(data.matrix_element_gen_particles.pxyz, axis=1)**2)",
+ "id": "87b503f3786126bb",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([10.0031, 10.0000])"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 7
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.534180778Z",
+ "start_time": "2024-12-17T10:31:53.479140Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "paths = {\n",
+ " 0.3: \"/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.3\",\n",
+ " 0.5: \"/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.5\",\n",
+ " 0.7: \"/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.7\"\n",
+ "}\n",
+ "#paths = {\n",
+ "# 0.3: \"/eos/user/g/gkrzmanc/jetclustering/preprocessed_data/SVJ_std_UL2018_scouting_test_large/SVJ_mMed-700GeV_mDark-20GeV_rinv-0.3_alpha-peak\",\n",
+ "# 0.5: \"/eos/user/g/gkrzmanc/jetclustering/preprocessed_data/SVJ_std_UL2018_scouting_test_large/SVJ_mMed-700GeV_mDark-20GeV_rinv-0.5_alpha-peak\",\n",
+ "# 0.7: \"/eos/user/g/gkrzmanc/jetclustering/preprocessed_data/SVJ_std_UL2018_scouting_test_large/SVJ_mMed-700GeV_mDark-20GeV_rinv-0.7_alpha-peak\"\n",
+ "#}\n",
+ "\n"
+ ],
+ "id": "6a604e3546d14c68",
+ "outputs": [],
+ "execution_count": 8
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.534386952Z",
+ "start_time": "2024-12-17T10:31:53.506925Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "results = {}\n",
+ "for rinv in paths:\n",
+ " print(rinv)\n",
+ " results[rinv] = get_histogram(paths[rinv], full_dataloader=True)"
+ ],
+ "id": "b929a65fe27a7257",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.3\n",
+ "['/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.3/PFNano_s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000_part-10.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.3/PFNano_s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000_part-12.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.3/PFNano_s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000_part-14.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.3/PFNano_s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000_part-15.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.3/PFNano_s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000_part-16.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.3/PFNano_s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000_part-17.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.3/PFNano_s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000_part-18.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.3/PFNano_s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000_part-19.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.3/PFNano_s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000_part-2.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.3/PFNano_s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000_part-20.root']\n",
+ "=== Restarting DataIter train, seed=None ===\n",
+ "0.5\n",
+ "['/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.5/PFNano_s-channel_mMed-800_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000_part-1.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.5/PFNano_s-channel_mMed-800_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000_part-10.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.5/PFNano_s-channel_mMed-800_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000_part-11.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.5/PFNano_s-channel_mMed-800_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000_part-12.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.5/PFNano_s-channel_mMed-800_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000_part-13.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.5/PFNano_s-channel_mMed-800_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000_part-14.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.5/PFNano_s-channel_mMed-800_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000_part-15.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.5/PFNano_s-channel_mMed-800_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000_part-17.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.5/PFNano_s-channel_mMed-800_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000_part-18.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.5/PFNano_s-channel_mMed-800_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000_part-19.root']\n",
+ "=== Restarting DataIter train, seed=None ===\n",
+ "0.7\n",
+ "['/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.7/PFNano_s-channel_mMed-800_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000_part-10.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.7/PFNano_s-channel_mMed-800_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000_part-11.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.7/PFNano_s-channel_mMed-800_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000_part-12.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.7/PFNano_s-channel_mMed-800_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000_part-14.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.7/PFNano_s-channel_mMed-800_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000_part-15.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.7/PFNano_s-channel_mMed-800_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000_part-16.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.7/PFNano_s-channel_mMed-800_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000_part-17.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.7/PFNano_s-channel_mMed-800_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000_part-18.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.7/PFNano_s-channel_mMed-800_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000_part-19.root', '/eos/user/g/gkrzmanc/jetclustering/data/scouting_PFNano_signals/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.7/PFNano_s-channel_mMed-800_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000_part-2.root']\n",
+ "=== Restarting DataIter train, seed=None ===\n"
+ ]
+ }
+ ],
+ "execution_count": 9
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.534553666Z",
+ "start_time": "2024-12-17T10:35:34.924826Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots(figsize=(6, 6))\n",
+ "figmass, axmass = plt.subplots(figsize=(6, 6))\n",
+ "fig_nj, ax_nj = plt.subplots(figsize=(6, 6))\n",
+ "\n",
+ "bins = np.linspace(100, 600, 50)\n",
+ "bins_mass = np.linspace(0, 50, 150)\n",
+ "bins_area = np.linspace(0.49, 0.51, 150)\n",
+ "bins_nj = list(range(30))\n",
+ "\n",
+ "for key in results:\n",
+ " result = results[key]\n",
+ " ax.hist(result[0], bins=bins, label=\"rinv=\" + str(key) + \" n_events = \" + str(result[1]) + \" n_selected = \" + str(len(result[0])) , histtype=\"step\", density=True)\n",
+ " axmass.hist(result[2], bins=bins_mass, label=str(key), density=True, histtype=\"step\")\n",
+ " ax_nj.hist(result[4], bins=bins_nj, label=str(key), density=True, histtype=\"step\")\n",
+ " #axmass.hist(result[4], bins=bins_mass, label=str(key) + \" filtered\", density=True, histtype=\"step\")\n",
+ "\n",
+ "ax.legend()\n",
+ "ax.grid()\n",
+ "ax.set_title('(filtered events: Main jet p_T > 100 GeV, abs. eta < 2.4, min. 2 jets)')\n",
+ "ax.set_xlabel(\"p_T of the highest p_T jet [GeV]\")\n",
+ "\n",
+ "axmass.grid()\n",
+ "axmass.set_xlabel(\"Jet mass [GeV]\")\n",
+ "axmass.legend()\n",
+ "ax_nj.legend()\n",
+ "ax_nj.grid()\n",
+ "ax_nj.set_xlabel(\"Number of jets\")\n",
+ "\n",
+ "fig.show()\n",
+ "figmass.show()\n",
+ "fig_nj.show()"
+ ],
+ "id": "bb1ca345b2cb2d67",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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/4iGhgY0NDRg3LhxiIuLw5YtWzB16lQsWLAAV155JVasWIEXXngBn3/+OXJychAIBDBp0iQUFBRg0aJFWLduHe666y688soruPzyy09UnwkhhBAi4Ph6mEWLFqG4uBgLFy7Eddddh7PPPhvPPfccAGD58uU45ZRTgiWICRMm4PXXX8f777+PCy+8EJs2bcK7776LnJwcAIDP58M777wDTdMwZ84cPPXUU/iP//gPJgeEEEJIlImppzkSQgghZGDgragIIYQQEoanEwSlFEpKSlBQUIDs7GzccsstaG1tjXazSAyglMLEiROxfv36kPnvv/8+vv71ryM5ORnnnHMOPvnkk+g0cBDQmyMCtLa24u6770Z+fj4SExNx3nnnYfXq1cH3GUeyI9J11d+VV16JUaNGITMzE9dff33ITQv/9Kc/4atf/SpSUlJw8cUXY/v27Y627+kEofvBU8uWLcPzzz+PNWvWYN68edFu1qDh6aefRnx8fNi/bdu2RbtpUaWjowO//vWvsWXLlpD53Q8nKyoqwptvvonTTz8dF1xwQdilvF6gN0etra0YMWJEWEyVlJREp6FR4r777sN///d/49FHH8W7776LSZMmYfbs2fjiiy8YR0exc8Q46krAr776auzduxevvvoq/vjHP2LTpk247rrrAADvvfcerr32Wnzve9/D66+/jsTERJx77rk4cuSIo514ko6ODpWZmameeuqp4LyPPvpIaZqmdu/eHcWWDR7uvPNOdfHFF6vPP/885F97e3u0mxY1ysrK1PDhwxW6nlygKioqgu/9+Mc/VjNnzlSWZSmllDJNUxUWFqoHH3wwSq2NDnaOKioqFAC1bt26kJjat29f9Bo8wFiWpU466ST1xBNPhMybOnWq+rd/+zfGkZIdMY6UqqqqUgDU+vXrg/PefvttBUDV19erK6+8Ul177bXB944cOaJSUlLUCy+8EPE+PDuCsGnTJvj9fsyZMyc476yzzkJaWhpWrVoVxZYNHqqqqvC1r30NEydODPk3bNiwaDctalx11VX45JNP8MYbb4S999Zbb2HOnDnBW3nruo5LLrkEb7755kA3M6rYOaqqqsKYMWMwderUkJjqz63TY43m5mbk5ubia1/7WnCepmkYNWoUdu/ezTiC7Ihx1HVn4QsuuAATJ/7jSbDdD25rb28PxlE38fHxmD17tqM48myC4PTBU16kqqoK69atC/7hXXzxxZ6shR5LRkYGJk+ejAkTJoS919vDx7wWT3aOqqqqMHz4cHzjG99Aeno6pkyZguXLl0f88JihQEpKCqqqqvDVr341OG/9+vX429/+hunTpzOOIDtiHAHTpk3D22+/jeHDh0Mphb179+KRRx4JnnPQ0tLS7zjybILg9MFTXqO1tRU7d+7EwYMHUVpaiv/3//4fUlNTce6553r+HITekB5ORroShP379+Oaa67BG2+8gZtvvhn33nsvli1bFu2mRQXLsvBf//VfOPfcc3Haaafh1ltvZRwdR0+OGEehzJkzB9nZ2fjTn/6El156CY2NjQDQ7zhy9kD3IYTTB095jWHDhmH37t3IzMxEXFwcAGDmzJk47bTT8Oyzz+LBBx+McgsHH9LDyQhQWlqKYcOGITk5GQAwffp0NDc3Y/ny5fjpT38a5dYNLNu2bcONN96I8vJyfO9738Pjjz+OkSNHMo6OoTdHjKNQfv/732P37t1YsWIFZsyYgXXr1gFAv+PIswnCsQ+eGjt2LAD7B095DZ/Ph7y8vLB5U6ZMwa5du6LUqsGN9HAygh5rxNOmTcOePXvQ0dHhmfNbPv74Y8yePRsZGRl45513cP755wffYxx1YeeIcQTU1NTgwIEDmDJlCsaMGYMxY8ZgxowZWLlyJVauXImkpKR+x5FnSwxOHzzlNd5++21MnDgxJBmwLAuff/45TjvttCi2bPAiPZzM65imienTp6O0tDRkfmVlJQoKCjzxoQ50efjnf/5nnHnmmfjkk09CvvgAxhFg74hx1MXrr7+OCy64AIFAIDjPNE0cOXIEw4YNC8ZRN21tbXjnnXecxZF7F13EHkuWLFFpaWnqlVdeUW+//bY67bTT1NVXXx3tZg0KWltb1bhx49TZZ5+t/vznP6uPPvpI3XzzzWrUqFGeupSoN7788suwS/iqqqrUiBEj1D333KM++ugjddttt6mkpCRVW1sbvYZGkZ4c3XPPPeqkk05SpaWl6tNPP1VPP/20SkpKUitWrIhaOweaDz/8UAFQzz//vNq6dWvIv7179zKOlOyIcaTU9u3bVXx8vPqXf/kXtXbtWrV69Wp1zTXXqMzMTLVv3z717rvvKsMw1COPPKJWr16tvvOd76gxY8ao1tbWiPfh6QTBsiz185//XJ188skqMzNT3XLLLY7kDXWqqqrUZZddppKTk1V6erq64oor1JYtW6LdrEFBT19+Sin13nvvqRkzZqjExERVVFSkPv300+g0cBDQk6OOjg517733qry8PBUfH6+mTJminn/++eA1/17gj3/8Y/AeEcf/u+GGG5RSjCPJEeOoizfffFNNnz5djRw5UmVkZKhvf/vbqrKyMvj+Sy+9pM4880yVnJysvvGNb6jt27c72j4f1kQIIYSQMDx7DgIhhBBCeocJAiGEEELCYIJACCGEkDCYIBBCCCEkDCYIhBBCCAmDCQIhhBBCwmCCQAghhJAwmCAQQgghJAwmCIQQQnrlxhtvhKZp+MUvftHrMikpKbjxxhsHrlEANE3D/PnzB3SffeE3v/kNRo8ejcLCwl6X6Xb83nvvDVzDIoAJAiGEEJEHH3wQO3bsiHYzYordu3fj7rvvRlZWFv71X/+11+Wuv/56lJaW4pRTTnG0/aamJpSUlODDDz/sb1N7hAkCIYQQW3RdRyAQwF133RXtpsQU27dvh1IK99xzD2699dZel7vwwgsxf/585ObmOtp+U1MTFi9ezASBEEJIdBgxYgTuuusu/PnPfw55hDCxp/tRRyNGjIhyS/oGEwRCCCEi//7v/46cnBzccccdaGtrs102Pz8fl19+uTh/1qxZ+Pa3v41PP/0UF110EVJSUjBz5kx88MEHOHToEG6++Wbk5uZi9OjR+MEPfoD29vawbb788suYOXMmkpKS8LWvfQ3PPfdc2DI7duzANddcg7FjxyIpKQnnn38+3nrrrZBlbrzxRkyePBm7du3CpZdeioyMDNs+btq0CVdccQWys7ORmZmJSy65BB9//HHw/ZKSEpx//vkAgKuvvhr5+fm9bqukpASapqG+vj447/Dhw1i4cCEmTZqEhIQEnHHGGXjiiSeCScd//ud/4uSTTwYA/OQnP4GmacF1//SnP2HGjBlISkpCRkYGvvOd72Dr1q22/ekJJgiEEEJEEhMT8fDDD2Pbtm1YtmyZa9utrq7Gd77zHZx55pm49dZbsX79enz729/G+eefj5qaGhQXF2Ps2LF4+umn8bvf/S5k3VWrVuH73/8+pk6dijvvvBPNzc248cYb8cgjjwSX+fzzz3HmmWfio48+wrx583DnnXeitrYWF198MV566aWQ7R06dAhz5syBYRj48Y9/3GubP/roI0yfPh2ffPIJ5s2bh1tuuQVbtmzB17/+dbz55psAgDlz5uCOO+4AANx8881YvHhxxE7a29tx9tln4/e//z3OP/98LFq0COnp6SguLsadd94JAPinf/onlJSUAAC+9a1vobS0FADwyiuv4Oqrr0ZbWxsWLFiAK664AqtWrcLll1+Ozs7OiNsAAHDx0dSEEEKGGDfccIMaOXKkUkopy7LUrFmzVHx8vPryyy+DyyQnJ6sbbrgh+P9x48apyy67LGxbx88/77zzFAD11ltvBectXrxYAVDf/OY3lWVZSiml9u3bp3RdV9/97neDywFQANRrr70WnNfc3KwKCwtVSkqKampqUkopdcUVV6hTTz1VtbS0BJdrbW1VZ555psrMzFSBQCDYTwDq5z//uejk3HPPVSkpKaqmpiY4r76+XuXm5qopU6Yo0zSVUkq9++67CoB66aWXbLd3//33KwBq//79SimlHnnkETV8+HC1YcOG4DKWZanbbrtNAVCfffaZUkqpL7/8UgFQy5YtCy531VVXqfT0dNXe3h6c9/vf/16lp6erqqoqsW/HwhEEQgghEaFpGh5//HF0dna6dsJiVlYWLrzwwuD/J02aBAD4/ve/Hxw2Hz16NDIyMnDkyJGQdU8//XRcdtllwf8nJSXh7rvvRlNTEz755BMcOXIEr732Gq666io0NzejpqYGNTU1OHDgAK6++mr4/X5s3rw5ZJu33367bXsPHjyI999/HzfddFPISYXp6em47bbbsGHDBtTW1vZNxlFeeuklnH322UhLSwu2uba2Fv/8z/8MAHjnnXd6XTcuLg4NDQ145513guWIW2+9FfX19ZgwYYKjdvj63gVCCCFeY9KkSbjrrrvwyCOP4C9/+UvIF3RfSE9PD/m/YRi284/ljDPOCKm9A8CUKVMAANu2bUNmZiaArks0H3zwwR737/f7g9M+ny+4Tm9s374dAHq8r0H3vG3btmHMmDG227Fj69atOHDgQK/bOLbNx/Ozn/0Mf/vb33DppZeioKAAF154IS6++GJccskliI+Pd9QOJgiEEEIc8e///u944YUXcOedd+KCCy6IeD3p5EY36P7VHB8fj0AgAAC48847Q0YpjuX0008PTg8fPhy6HtnA+vGJCYDgut377SuBQACzZ8/u9d4J3Scn9sTkyZOxZcsWvPbaa/i///s/vPrqq/jd736Hk08+GW+++SYKCgoibgcTBEIIIY5ISkrCww8/jOuuu67XExYtywr5/8GDB21/+faF48sDALB+/XoAwPjx4zF+/Phge4+/qmL37t3YuXMnRo0a5WifX/nKVwAAlZWVvbbH6Q2PjqegoACdnZ1hbW5pacHGjRuRlZXV67qfffYZkpKScO211+Laa6+FZVl45ZVXcNVVV2HZsmV46qmnIm4Hz0EghBDimGuvvRbnnXceHnzwQbS2toa8l5CQgKqqqpBf0k888YTrbVi/fn3IfRmam5vx8MMPY+zYsZg+fToSExNx7rnn4umnn8aBAweCy7W3t+M73/kObr311h5LF3YkJibinHPOwYoVK7Bnz57g/AMHDuDJJ5/EpEmT+lVeAIDLLrsMf//73/HBBx+EzP/5z3+O8847L2wk5thk7Lvf/S6uuOIKmKYJoGtU45JLLkFCQkJY0ibBEQRCCCGO6T5h8cwzzwx+GXUze/ZslJWV4Vvf+hauuOIKVFRUYNWqVcETEN3iq1/9Kr7zne/glltuQXp6Ol588UVs3boVL7zwAoYNGwYAePjhh3HuuediypQpmDdvHizLwmuvvYaqqir87//+b4+lAolf//rXmDVrFs466yzMmzcPuq7jhRdegN/vx4oVKyIuU/TG3XffjT/84Q+48MILcdNNNyErKwvvvfce3n33Xdxzzz3BkyO7+/jqq69i1KhRuPnmmzF37lz88pe/RFFREWbNmoXDhw/jjTfeQHt7O+bNm+eoHRxBIIQQ0icmT54cvC7/WB566CH84Ac/wCeffIL7778f9fX1eOedd2yHxvvCjTfeiLKyMnz00Ud47LHHkJmZib/85S/47ne/G1xm+vTp+PTTTzFt2jQ899xzeOqpp5CZmYm33367x5s5RcKMGTOwdu1anHnmmfjP//xPPPPMM5gwYQI+/PBDXHTRRf3uV2JiIj799FPMmzcPb731Fn71q1/hwIEDeOqpp7B06dLgctnZ2fjRj36ErVu34ic/+QmArvNDFi9ejPr6ejz22GP4n//5H+Tn5+PNN9/Eueee66gdmuo+o4MQQgghA05JSQkWL16M/fv3Oz4n4kTCEQRCCCEkijQ2Nka7CT3CcxAIIYSQKGCaJp544gm89NJLGDlyJFJTU6PdpBA4gkAIIYREgc7OTtx9990YOXIk/vM//9PxFRUnGp6DQAghhJAwOIJACCGEkDCYIBBCCCEkDCYIhBBCCAmDCQIhhBBCwmCCQAghhJAwmCAQQgghJAwmCIQQQggJgwkCIYQQQsL4/wFXz9wq/CIrPwAAAABJRU5ErkJggg=="
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 10
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.534750343Z",
+ "start_time": "2024-12-17T10:35:36.311048Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "pt = results[0.3][7]\n",
+ "pt_gen= results[0.3][8]"
+ ],
+ "id": "fe06877f75e4c420",
+ "outputs": [],
+ "execution_count": 11
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.534916218Z",
+ "start_time": "2024-12-17T10:35:36.343320Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots(figsize=(6,6))\n",
+ "ax.hist(pt, bins=100, histtype=\"step\", density=True, label=\"p_T of jets\")\n",
+ "ax.hist(pt_gen, bins=100, histtype=\"step\", density=True, label=\"p_T of gen_fat_jets\")\n",
+ "ax.legend()\n",
+ "ax.set_title(\"All jets, all events\")\n",
+ "ax.set_xlabel(\"p_T [GeV]\")\n",
+ "fig.show()"
+ ],
+ "id": "e769f59c3b046d84",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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UCkrK6ta3ZycHHz++ec4ePBgnfqhUChgbW2tT9eJiIiatbu9DV75vF9t9Hr40MfHBw4ODoiPj5dlaWlpuHbtGgIDA6vVDwoKQnx8vLyvodFosGfPHgwcOFCr3kcffQQvLy9069ZNn+4QERGRgel1xcDExASzZ8/GwoUL4eTkBCsrK8yZMwfjxo2Dm5sb8vLykJeXh3bt2sHExATTp0/HmjVrsGDBAowdOxaxsbFQq9WYOnWqVrvbt2/HoEGDDLpjREREpD+9BzhatGgRQkJCEBoaiokTJ6JPnz7YsGEDAGDVqlXo0KGDnNbR09MTCQkJSE1NRVBQENLT05GSkgIXFxfZXnZ2No4dO4aAgAAD7RIRERHVl0LU9f2Fe0DlXNIqlaraswv1pclNR+mOx2EycheU9j7VPhMREf0b1PUcykmUiIiISGIwICIiIonBgIiIiCQGAyIiIpL0el3xXpGTkwNvb2+dy0JCQhASEtLIPSIiImp6MTExiImJ0blM15xGujTLYODo6IgzZ840dTeIiIjuKXf647jyrYTa8FYCERERSQwGREREJDEYEBERkcRgQERERBKDAREREUkMBkRERCQxGBAREZHEYEBEREQSgwERERFJzXLkQw6JTEREVB2HRCYiIiKJQyITERGRQTEYEBERkcRgQERERBKDAREREUkMBkRERCQxGBAREZHEYEBEREQSgwERERFJDAZEREQkNcuRDzkkMhERUXUcEpmIiIgkDolMREREBsVgQERERBKDAREREUkMBkRERCQxGBAREZHEYEBEREQSgwERERFJDAZEREQkMRgQERGR1CxHPuSQyERERNVxSGQiIiKSOCQyERERGRSDAREREUkMBkRERCTpHQyEEIiIiICHhwecnZ0xbdo0FBUV1Vg/NTUV/v7+sLGxQb9+/XD06FGt5Tdv3sTLL7+MBx54AK1bt8bzzz+PgoIC/feEiIiI7prewWDJkiWIjo7G8uXLERcXh8OHD2Py5Mk662ZkZGDIkCHo27cvEhMT0blzZwwYMACZmZmyztNPP42DBw/iww8/xAcffICkpCS8/PLL9d8jIiIiqje93kooLS1FTEwMoqKiMHr0aABAbGwsevXqhczMTLi6umrVX7duHXx9fbF06VIoFAp0794d+/fvx8aNGxEWFoYzZ85gx44d+OOPP+Ds7AwAMDExwerV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X75ca53KKwwmJib6dI2IiIgMQK8rBiYmJpg9ezYWLlwIJycnWFlZYc6cORg3bhzc3NyQl5eHvLw8tGvXDiYmJpg+fTrWrFmDBQsWYOzYsYiNjYVarcbUqVMBACNGjMCSJUvg6+uLRx55BL/++iteeeUVTJ48Gaampg2yw0RERFQzvaddXrRoEUpLSxEaGoqioiIMHz4c0dHRAIBVq1YhMjISFy9ehLu7Ozw9PZGQkIAFCxZgzZo1ePjhh5GSkgIXFxcAQGhoKK5fv47w8HBkZ2ejbdu2eOaZZ7BgwQLD7iURERHViUI0o/GHK+eSVqlU1Z5dqC9NbjpKdzwOk5G7oLT3qfYZAC7+JRD2uQZRTynR3kFR7TMREdG9rq7nUE6iRERERBKDAREREUkMBkRERCQxGBAREZGk91sJ94KcnBx4e3vrXBYSElLrkMpERET/RjExMYiJidG5TNecRro0y2Dg6OiIM2fONHU3iIiI7il3+uO48q2E2vBWAhEREUkMBkRERCQxGBAREZHEYEBEREQSgwERERFJDAZEREQkMRgQERGRxGBAREREEoMBERERSc1y5EMOiUxERFQdh0QmIiIiiUMiExERkUExGBAREZHEYEBEREQSgwERERFJDAZEREQkMRgQERGRxGBAREREEoMBERERSQwGREREJDXLkQ85JDIREVF1HBKZiIiIJA6JTERERAbFYEBEREQSgwERERFJDAZEREQkMRgQERGRxGBAREREEoMBERERSQwGREREJDEYEBERkdQsRz7kkMhERETVcUhkIiIikjgkMhERERkUgwERERFJDAZEREQk6R0MhBCIiIiAh4cHnJ2dMW3aNBQVFdVYPzU1Ff7+/rCxsUG/fv1w9OhRreU///wzBg0aBFtbW7i6umLGjBn4+++/9d8TIiIiumt6B4MlS5YgOjoay5cvR1xcHA4fPozJkyfrrJuRkYEhQ4agb9++SExMROfOnTFgwABkZmYCAP755x8MGjQIFhYW2Lt3L9avX48DBw5gwoQJEELc3Z4RERGR3vR6K6G0tBQxMTGIiorC6NGjAQCxsbHo1asXMjMz4erqqlV/3bp18PX1xdKlS6FQKNC9e3fs378fGzduRFhYGPbs2YPc3Fx88sknaNWqFQDA2dkZvr6+yMjIgJeXl2H2koiIiOpErysG6enpyMnJQXBwsCzz8/ODnZ0dkpOTq9VPSkpCcHAwFApFxcaUSgwZMgSJiYkAgIKCAgQEBMhQAABt2rQBAPz555967wwRERHdHb2CQXZ2NoCKv+plA0olXFxcdA6ckJ2dDZVKpVWmUqlk3alTp8qQAFQ8v7Bq1SqYmJigS5cu+nSNiIiIDECvWwl5eXmwsLCAkZGRVrmVlRVyc3N11re0tKxT3atXr2L+/PmIjY3FkiVL4OjoWGM/hBAoKCjQp+tazMzMYGZmVu/1iYiIGltJSQlKSkrqvX5dn93TKxjY2dmhqKgI5eXlWuEgPz8ftra2OusXFhZqld1eVwiBL774ArNnz0ZZWRnWrVuHadOm3bEfarUaNjY2+nRdS3h4OCIiIuq9PhERUWOLiopCZGRkg29Hr2Dg5OQEAMjKyoKbmxsAQKPRQK1Wa91eqFq/8g2ESllZWVp1X3vtNSxfvhxPPPEE/ve//93xSkElFxcXnD17Vp+ua+HVAiIiam7CwsIQGhpa7/U7duwItVpdaz29goGPjw8cHBwQHx+PGTNmAADS0tJw7do1BAYGVqsfFBSE+Ph4LF68GAqFAhqNBnv27MGkSZMAAN999x2WL1+Ot99+G/Pnz5cPKdZGoVDA2tpan64TERE1a3d7G7yu51i9goGJiQlmz56NhQsXwsnJCVZWVpgzZw7GjRsHNzc35OXlIS8vD+3atYOJiQmmT5+ONWvWYMGCBRg7dixiY2OhVqsxdepUAMDmzZuhUqkwatQoXLhwQWtbKpUKLVq00Kd7REREdJf0HuBo0aJFCAkJQWhoKCZOnIg+ffpgw4YNAIBVq1ahQ4cOcvYmT09PJCQkIDU1FUFBQUhPT0dKSgpcXFwAAJmZmcjKyoKnpyc6dOig9XPkyBED7iYRERHVhd7TLisUCrzxxht44403qi2LiIio9lBfQEAADh06pLOtb775Rt/NExERUQPiJEpEREQkMRgQERGRxGBAREREEoMBERERSXo/fHgvyMnJgbe3t85lISEhCAkJaeQeERERNb2YmBjExMToXKZrTiNdmmUwcHR0xJkzZ5q6G0RERPeUO/1x7OrqKocTuBPeSiAiIiKJwYCIiIgkBgMiIiKSmuUzBveKrLyKua2tzAF767pNTkFERHQvYzCoBytzwMwYWL1XABAwMwbenaxkOCAiomaPwaAe7K0VeHeyEoXFFVcNVu8VKCwG7DkTNBERNXMMBvVkb62oEgREU3aFiIjIYPjwIREREUkMBkRERCQ1y1sJHBKZiIioOg6JTERERBKHRCYiIiKDYjAgIiIiicGAiIiIJAYDIiIikhgMiIiISGIwICIiIonBgIiIiCQGAyIiIpIYDIiIiEhqliMfckhkIiKi6jgkMhEREUkcEpmIiIgMisGAiIiIJAYDIiIikhgMiIiISGIwICIiIonBgIiIiCQGAyIiIpIYDIiIiEhiMCAiIiKpWY58yCGRiYiIquOQyERERCRxSGQiIiIyKAYDIiIikhgMiIiISGIwICIiIknvYCCEQEREBDw8PODs7Ixp06ahqKioxvqpqanw9/eHjY0N+vXrh6NHj+qsd/jwYfj6+urbHSIiIjIgvYPBkiVLEB0djeXLlyMuLg6HDx/G5MmTddbNyMjAkCFD0LdvXyQmJqJz584YMGAAMjMzteplZWXh1Vdfrd8eEBERkcHoFQxKS0sRExODqKgojB49GgMGDEBsbCy++uqraid7AFi3bh18fX2xdOlS9OzZE6tXr4arqys2btwo6/Tr1w+urq74/vvv735viIiI6K7oFQzS09ORk5OD4OBgWebn5wc7OzskJydXq5+UlITg4GAoFIqKjSmVGDJkCBITE2Wdjz76CKdPn8bMmTPruw9ERERkIHoNcJSdnQ0AcHZ2lmVKpRIuLi46R1TKzs6GSqXSKlOpVEhISJCfH3roIQCAg4NDnfshhEBBQYE+XddiZmYGMzOzeq9PRETU2EpKSlBSUlLv9YUQdaqnVzDIy8uDhYUFjIyMtMqtrKyQm5urs76lpWWd6upDrVbDxsam3uuHh4cjIiLirvpARETUmKKiohAZGdng29ErGNjZ2aGoqAjl5eVa4SA/Px+2trY66xcWFmqV1VRXHy4uLjh79my912+IqwVZebeSmJU5YG+tMPg2iIjo/hUWFobQ0NB6r9+xY0eo1epa6+kVDJycnABUvEXg5uYGANBoNFCr1Vq3F6rW1/UGgq66+lAoFLC2tr6rNgzFyhwwMwZW7xUAKsKBmTHw7mQlwwERERnM3d4Gr3zerzZ6PXzo4+MDBwcHxMfHy7K0tDRcu3YNgYGB1eoHBQUhPj5e3tfQaDTYs2cPBg4cqM9m72n21gq8O1mJqKcqfmYPVqCkDCgsbuqeERER6U+vKwYmJiaYPXs2Fi5cCCcnJ1hZWWHOnDkYN24c3NzckJeXh7y8PLRr1w4mJiaYPn061qxZgwULFmDs2LGIjY2FWq3G1KlTG2p/moS9tQL2Whcw6vaABxER0b1G7wGOFi1ahJCQEISGhmLixIno06cPNmzYAABYtWoVOnToIKd19PT0REJCAlJTUxEUFIT09HSkpKTAxcXFsHtBREREBqF3MFAoFHjjjTfw22+/ITs7G+vXr0eLFi0AABERERBCwN3dXdYPCAjAoUOHUFBQgO+//x6PPPKIznYjIiJw4sSJeu0EERERGQYnUSIiIiKJwYCIiIgkBgMiIiKSGAyIiIhI0ut1xXtFTk4OvL29dS4LCQlBSEhII/eIiIio6cXExCAmJkbnMl1zGunSLIOBo6Mjzpw509TdICIiuqfc6Y9jV1dXOZzAnfBWAhEREUkMBkRERCQxGBAREZHEYEBEREQSgwERERFJDAZEREQkNcvXFZuDrLyKqZetzCumZSYiImoOGAwMzMocMDMGVu8VAATMjIF3JysZDoiIqFlgMDAwe2sF3p2sRGFxxVWD1XsFCosBe+um7hkREVHtmmUwuNeHRLa3VlQJAqIpu0JERPcRDolMREREEodEJiIiIoNiMCAiIiKJwYCIiIikZvmMQXNTOaYBwHENiIjo3sZg0IBuH9MAAMc1ICKiexqDQQOqOqYBwHENiIjo3sdg0MC0xzQAOK4BERHdy/jwIREREUnN8orBvT7yIRERUVPgyIfNFGdeJCKihmCIkQ+bZTBorjjzIhER3esYDBoRZ14kIqJ7HYNBI+PMi0REdC+7799KKL15U+t/qWGVlJQgIiICJSUlTd2V+waPeePi8W58POaGdd8Hg5ulpVr/29iy8gQu/lXxk1vw77+CUFJSgsjISP4fuBHxmDcuHu/Gx2NuWLyV0ERqGi45dLgS1i34xgIRETUNBoMmcvtwyQU3gPd2axD1tQaAdkgAGBSIiKhxMBg0oduHS64MCreHBEB78qXcAiEDBXDn0FC1LsMFERHVhsHgHlI1KNQ0+RIgMG+jBiVlt9ar6RZEboF2XY6bQEREtWmWweB+GBJZ1+RLlSMmlpQBswcroLJT6LwFUXnyLyy+VRcAx00gIvqX45DI9wntBxUr/tvLRSH/8r990KRzagFV8a2hl1V2lVcItN96uP2WhD794a0LIqJ7D4dEvk/c/qDi7SfcyqsLFQFCVHvTwcocWrclgFvPMVS9JVFXtz8YWen2NnXVu35dCVvXrvg9VwnLYt2vZzJQEBE1HQaDBhYTE2OQWxvVby0An8RE4ZknHpef7QCsGC5QVOVV3hbWtmht7YrKuRluDw1ho6qf4AFgy5YtmDBhQrVyXQ9GVlXZJlBTvRYY9MqPeGsXANTchq7gAdQtNBjqmP+b2m5IzfWY8Hg3btuN0X5Daa7HvL5tK4QQzWZUncrLICqVCpmZmQZps/D3IzD99kncDPoCVu16QpObjtIdj8Nk5C4o7X0AABf/Egj7XIOop5Ro76DfX7Le3t4NcttDXM9CflxftDCppaJxC5gMWAOYt8a1fwSuC1uUW6gAVJxkWyvVEMV/V1tt3Lhx2Lp1KwBAYW4LhaVKLruanYkbBdXXAQALM6BVSwUU5ra4qnGpdqvi+vV/EBDwKA7s3Qwr41sLNaYV/artSkbV0GBUlAXlzb+rtVG175UMdRWioX6fDdl2QUEBbGxskJ+fD2trwz9g0hyPSUO2zePd+O3zmNet7bqeQ3nFoJkSxX+jhQlgHLACilYeuisVX0Vp8kyU7n0WANASQMsqQQEFV3EzeSZQdqPaqp9PBkp3/P+rEVXXKb4Ky+SZsNSxTqXS/79O67FJsHeoCBTiehZE8d/4x+gfdLM5i/ZpI6Aor5IaKrfRsnW1qx6VrpcAn32vwaadgJUiDy+Zh8BMcasfJaIFVhXHIGj8f/HB5lNa65oaARP7KWFpVr3dyjADVA9BRET3G72DgRACkZGRiIuLwz///IPg4GBER0fDwsJCZ/3U1FSEhYUhPT0dXbp0wYoVK+Dn5yeXZ2VlYcaMGThw4ADatm2L0NBQTJkypf57dJ9RtPKQVzZ0MR2bdOuKwG1BAUDFCXnwJxUn/SrkX916rFNJXPsVZfv/A032j1C0+lu2gbIbMAWw+z9OEMCtNnQFGB3ttgGwqMqJXWPUAlf9PoHG1A7Km3mwPToT81s8V+OxQFrNiyoHxBZGLWAatKbGffNy0ECTm65VdnuYqAxBNS0nIrqX6R0MlixZgujoaKxfvx7W1tZ46aWXMHnyZGzbtq1a3YyMDAwZMgRz5szBe++9hw0bNmDAgAH4+eef4erqirKyMgQGBsLDwwO7d+/GiRMn8Pzzz8PW1hYjRowwyA7e7xSWKq2TklZQQM0nrXN/KWXgqOs6lYS5LWDcAmX7/3Or8P+HiX/KzfHoo49i/5FTMHfyrLFfddo3c1u4VD0hu1e0oetWwrV/7nwV4mb5rasQiqoh6DZaV1Kq7luVKyqlt1+Fqbr8DnSFjqr7ynBBRI1Br2BQWlqKmJgYREVFYfTo0QCA2NhY9OrVC5mZmXB1ddWqv27dOvj6+mLp0qVQKBTo3r079u/fj40bNyIsLAx79uzB77//jh9//BHW1tbo06cP0tPTERMTw2DQQG4PCg2xjsJSVWOYEAUFOPHHTcDC+a77VVM/q4aaSnb2FQ9n6vJyOyFHnAzfvRemmjyd9UyNgIv738LSNxfLssorFVWvqGiMWuDvnreuZNjdtrwmOkNHpTqEC4YHIjIEvYJBeno6cnJyEBwcLMv8/PxgZ2eH5OTkarcAkpKSMH78eCgUFfdvlUolhgwZgsTERISFhSEpKQl9+/bVelhk6NChGD16NMrLy2FkZHQ3+0ZNyBAn+sZS9Y2PhZNdUVjsWq1O5UORZX0+xysJ2svsFHthpbgVJgqFHfKSXeRnZ+O9ePHRazqfb6hq/quvIuZ/y+TzDpVXOXSFD51uCw8MCkRUH3oFg+zsbACAs/Otv/aUSiVcXFx0jqiUnZ0NlUr7HyaVSoWEhIQ7Li8vL8fVq1fh4OCgteyvv/4CAFy+fLnaevqoDCoAIMpvQlGSB2H2OBRGpoCmFCi+CizsDygrgkm5BrheDOyPAoz0nKj66tU8uLo41ruvNdKUAzevAYsHAMraXk3QX05OTrUrQIZQ+RJMx44dtX4PhtRQfdcIIDf3Klq3vvMtgdvXuV4MrK3juz87fYfC0rziv68XA5XvDClRDqVCAwtTQOdhExooSzOhwIBbRVBAY9IKAgqYmhjjoQ4eDXLM8/Pz4ezUAN/xZtq2EILH2wDtKxU1fNd1EELAxAjo6Nkwx7zB/h2vrW2FEaDQPuno8yLhX3/9pXWurDyHV55La6JXMMjLy4OFhUW1v+StrKyQm5urs76lpWWNdfPy8vDQQw9VWw4Aubm51YJBeXk5AECj0UCtVuvT9Tq4ctvnq9VqXM+vX8tZl+/8S7g7Ddd2XUbIqi/D//60NWTfsy83XNsAUHSHZYV6t3br/5c5f93+HTecG8UN9z1srm3zeDd+++rshjvmDfnveEO2revf2spzaU30CgZ2dnYoKiqqdpk/Pz8ftra2OusXFmr/U1a1bk3LAehsz9zcHMXFxTAyMkKbNm306bqWhvpLlYiIqCHdzdBDV65cQXl5OczNze9YT69g4OTkBKDirzE3NzcAt/56r3p7oWr92wdRyMrKknWdnJxw+vTpasuVSmW1qwUA8M8//+jTXSIiItKTXnfMfXx84ODggPj4eFmWlpaGa9euITAwsFr9oKAgxMfHy4Sj0WiwZ88eDBw4UC4/cOCAvEoAAAkJCQgMDOSDh0RERE1A7yGR33zzTaxcuRIfffQRrKysMGfOHPj4+GDLli3Iy8tDXl4e2rVrBxMTE2RkZKBr166YM2cOxo4di9jYWGzatAlnz56Fi4sLysrK0KlTJ3h4eGDRokX46aefMHfuXHz11VcYPnx4Q+0zERER1UDPZ+yBRYsWISQkBKGhoZg4cSL69OmDDRs2AABWrVqFDh06yAe/PD09kZCQgNTUVAQFBSE9PR0pKSlwcal4lcvY2BjfffcdFAoFgoODsXbtWnz88ccMBURERE2kWU2iRERERA1L7ysGRERE9O/FYEBERETSfRsMhBCIiIiAh4cHnJ2dMW3aNBQV3WloGapNUVERXnnlFbi7u8PKygoBAQE4dOiQXJ6amgp/f3/Y2NigX79+OHr0qNb6WVlZePzxx2FnZ4eHH35YPrtCtUtPT4e5uTlOnDghy7Zu3Ypu3bqhVatWGDx4MH777Tetdc6cOYPAwEDY2NigR48eckRSqtm2bdvQu3dvWFpaonfv3jhy5Ihcxu+34RUWFiIkJAQuLi6wt7fHxIkT5eh9AL/jDUbcp9544w1hZ2cntm/fLr799lvh7e0txowZ09Tdatbmzp0rnJycxPbt28WPP/4oZs6cKczNzUVGRoY4d+6caNGihXj11VfF4cOHxcyZM4W1tbX4888/hRBClJaWioceekgEBweLAwcOiJiYGGFsbCx27NjRxHt177tx44bw8fERAMTx48eFEEKkpKQIY2Nj8c4774iDBw+KsWPHCpVKJYqKioQQQly9elXY29uLKVOmiMOHD4uIiAhhYmIijh492oR7cm/7+uuvRcuWLcXatWvF999/L8aNGydat24trly5wu93A3n66aeFl5eXSEpKEgcOHBB9+vQR/v7+QqPR8DvegO7LYHDz5k3h6Ogo1q5dK8uOHDkiFAqF/D8y6Uej0QhLS0vx/vvva5V17dpVvPbaa2LevHmid+/eQqPRCCGEKC8vF97e3uL//u//hBBC7Nq1S5iZmYn8/Hy5/syZM8WgQYMad0eaoZdffrlaMBg7dqx46qmnZJ0bN26IVq1aiU2bNgkhhIiOjhaurq6itLRU1hk6dKiYPn16o/a9OenRo4dYvny5/Jyfny8CAwNFYmIiv98N4MaNG8LIyEgrPJ04cUIAEBcuXOB3vAHdl7cSapslkvSXn58PlUqFHj16yDKFQgF7e3v8+eefSEpKQnBwsM6ZNgHUONNmcnJyreN638/27NmDuLg4rF27Vqu88nhXMjc3R2BgoNbxHjx4MIyNbw1+OnToULmctF26dAlpaWmYMGGCLLO2tkZycjIGDhzI73cDKC0thUajQcuWLWVZ5dw7xcXF/I43oPsyGOg7SyTVrlWrVjh37hy6desmy06cOIH9+/eje/fuNc6kWXm8a5tpk6q7cuUKpk6dig8//FCODQJUPOtRUFBQr+Odk5NzV2Ox/1v98ccfUCqVOHHiBHr16oU2bdrgsccew+HDhwHc+XjeaTm/3zWzsrLC0KFD8dZbbyEnJwf5+flYvHgxOnXqBHd3d37HG9B9GQz0nSWS9KPRaPDpp5/i0UcfRceOHfHCCy/UaaZNXcsB8HeigxAC06ZNQ3BwMMaMGaO17O+//waAeh3vGzdu4MaNGw3Y8+bp8uXLEEJg3rx5mD9/Pnbv3o2OHTvisccew6+//srvdwPZsGEDjh8/DicnJ7Rq1Qpbt27F9u3b+R1vYHpNovRvoe8skVR3Fy5cwLPPPosffvgBTz/9NFavXo2WLVsafKbN+9369etx5swZHD9+vNqyyuNVn+NtamqKFi1aNFCvmy9TU1MIIRAbG4u+ffsCALp37479+/fjo48+4ve7AeTn5yMwMBCBgYF46aWXYGpqig0bNmDQoEHYv38/AH7HG8p9GQz0nSWS6iYtLQ2BgYFwcHDAd999h8cee0wuM/RMm/e7AwcO4OLFi3L68cpLoz169JD3sms73jUt57Tk1VX+m9G5c2dZplQq4e3tjT///JPf7wawe/duXL58GceOHYOJiQkAoFevXujatSs2bdrE73gDui9vJeg7SyTVrry8HBMmTICvry+OHj2qFQoAzrRpaFFRUfj5559x4sQJnDhxQn6XN2/ejNjYWHm8KxUXF+O7777TOt6JiYkoKyuTdRISEuRy0ta5c2dYWVkhLS1NlpWXl+PkyZPw9PTk97sBVI4rc/tJXKFQ4J9//uF3vCE13QsRTatyHIOvvvpKfPvtt6Jjx45i/PjxTd2tZuvgwYMCgIiLixPnz5/X+snOztZ6z/vIkSNixowZwtraWmRlZQkhtN/zPnjwoFi9erUwNjYWu3btauI9ax4uXrxYbRwDIyMj8e6774pDhw6JMWPGiLZt29b4jnd4eLgwMTERP/30UxPuxb1t3rx5ws3NTXz11VciLS1NPPPMM6JVq1bi8uXL/H43ALVaLezt7cWECRPEwYMHRVpamggJCRHm5ubi9OnT/I43oPs2GGg0GrF48WLRvn174ejoKKZNmya/UKS/LVu2CAA6f6ZMmSKEEGLfvn2iV69ewsrKSvTt21ccO3ZMq43MzEwxbNgw0apVK9G5c2fx6aefNsGeNE+3BwMhhPjyyy+Fr6+vsLGxEYMGDRK//fab1jrp6emif//+wtraWnTv3l3s2bOnkXvdvJSVlYkFCxaIBx98UB7T9PR0uZzfb8NLT08Xjz/+uLC3txc2NjYiMDBQ/PDDD3I5v+MNg7MrEhERkXRfPmNAREREujEYEBERkcRgQERERBKDAREREUkMBkRERCQxGBAREZHEYEBEREQSgwEREd1Xnn32WSgUilp/+vfvX2Mb/fv3l/VGjRqltay0tBQffPAB+vXrBzs7O1hZWcHPzw+vvfYa8vLy6tXna9euwdTUFI8++miNdf7++28YGxtj0KBBiIuL09oXfWbxvC8nUSIiovvXpEmT4OfnJz+fP38eq1atwsSJE9GrVy9ZrlKp7tiOk5MTFi5ciPbt28uyK1euIDg4GEePHkW3bt3wzDPPoHXr1jh27BiWL1+ODz/8EPv370eXLl306nOrVq0wePBgfPPNN8jOzpYTe1UVHx+P8vJyjB07Ft27d0d0dDTi4+ORkJCg17bu2yGRiYiIhKiYWwSAiI2NrfM6AQEBolOnTtXKhw4dKoyNjcXq1auFRqPRWnbw4EFhYWEh3N3dRWFhod79/PTTTwUA8f777+tcPn78eKFUKkV2drYsCw8PFwDElStX6rwd3kogIiIygJSUFCQkJGDhwoUICQmpNjNk79698dZbb+HSpUvYtWuX3u2PGDECpqam2Lp1a7VlJSUl2LNnD/r16wdHR8d67wPAZwyIiKgZUCgUWLlyJbZs2YK+ffvCxsYGffr0wZdfftnUXZOWL18OW1tbhIaG1ljnmWeeQXh4OCwtLbXKc3NzMW3aNHTo0AGWlpbo2bMnNm/erFXHxsYGQ4cOxb59+3DlyhWtZfv27UNhYSHGjRt31/vBYEBERM3Ctm3bMGXKFPj4+GDu3Lm4du0aJkyYgHXr1jV11wAA6enp6N69O6ytrWusY2dnh4iICDz++OOy7MqVK/D19cXOnTsxcuRIvPrqqygrK8OTTz6J9957T2v9CRMmQKPRYMeOHVrllZ9Hjx591/vBYEBERM3CDz/8gC+++AIffPABIiMjkZaWBh8fH/z3v//FjRs3mrRvRUVF+PPPP9GhQ4dqy/Ly8pCZman1c/nyZbn8zTffRHFxMU6cOIF33nkH//3vf5GWloZhw4Zh4cKFWm8UPP744zA3N9e6nSCEwM6dO9G7d+9aH5isCwYDIiJqFjp16oQRI0bIz5aWlpg3bx6ys7Nx9OjRJuwZUFxcDAAwNq7+st9LL72Etm3bav307t1bLv/yyy8RHBwMIYRWcJgwYQKKi4tx8OBBWdfKygrBwcFITk6Wrz7+9NNPyMrKMshtBIDBgIiImokuXbpUe6Cvc+fOAIDffvutKbok2dnZoU2bNrhw4UK1ZfPmzcOuXbvkT0BAgFxWWFiI7OxsbNy4sVp4mDJlCgAgJydHq70JEyagrKwMO3fuBHDrNsKYMWMMsi8cx4CIiJoFXX+NK5UVf9/evHmzsbtTjZeXF3788UcUFxfD3Nxclnft2hVdu3aVnyMjI+V/l5eXAwCeeuopPP300zrb7dSpk9bnYcOGoUWLFti2bRueffZZ7Ny5E35+fnB3dzfIfvCKARERNQvnzp2rVnb69GkAgIeHR2N3p5pp06YhJycHMTExNdb55ZdfcPLkSfm5VatWaN26NYyNjTF8+HCtnx49eqBVq1Zo06aNVhuWlpYYNmwYEhMTcerUKZw8eRJjx4412H4wGBARUbPw448/IiUlRX6+fv063nnnHbRu3VprJMOmMnnyZPj5+WHx4sXYsGFDteW///47nnzySZSWlmqVDxs2DF9++aXWbQiNRoPp06dj+PDhOq+UPPHEE7h58yZefPFFADBoMOCtBCIiahacnZ0xbNgwPP/887C1tcWXX36Js2fPYs2aNbCysmrq7kGpVOKzzz7DoEGD8Oyzz2LNmjXo2bMnHB0dcebMGXz11Vfo1q0bZs6cifj4eLnem2++id27d8PPzw/PPfccLCwssHfvXvz44494//33tW5LVAoODoaFhQUOHz6MLl266Hwbot77YbCWiIiIGtCYMWPw4Ycf4sCBA3jvvfdgbW2NL774AjNmzGjqrkkPPfQQTp06hfDwcFy/fh0ffvghoqKi8Ouvv+Ldd9/Fd999h8GDB2ut4+bmhpMnT2LIkCHYunUrVq5cCYVCgS+//BIzZ87UuR0LCws5FoIhrxYAgEIIIQzaIhERkYEpFAqEhIRg9erVTd0VABWzK+bm5iI9Pb2pu3JHERERiIyMxJUrV2Bvb1+ndXgrgYiImr3CwkJcvXq1TnXt7OzuODrh/Y7BgIiImr3NmzfjhRdeqFPdFStWYO7cuXe9zatXr2L16tVo3749hg0bdtftGVJGRgaSkpKQlpam97oMBkRE1OwNGjSozjMWent7G2Sb2dnZmDNnDkaOHHnPBYMff/wRc+bMqde6fMaAiIiIJL6VQERERBKDAREREUkMBkRERCQxGBAREZHEYEBEREQSgwERERFJDAZEREQkMRgQERGRxGBARERE0v8Dad/4AMi7ql8AAAAASUVORK5CYII="
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 12
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.535099694Z",
+ "start_time": "2024-12-17T10:37:04.146526Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "ax.hist(results[0.3][10], bins=100, histtype=\"step\", density=True, label=\"0.3\")\n",
+ "ax.hist(results[0.5][10], bins=100, histtype=\"step\", density=True, label=\"0.5\")\n",
+ "ax.hist(results[0.7][10], bins=100, histtype=\"step\", density=True, label=\"0.7\")\n",
+ "ax.set_yscale(\"log\")\n",
+ "ax.legend()\n",
+ "ax.set_title(\"MET\")\n",
+ "fig.show()\n"
+ ],
+ "id": "f612d485e38e653",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 16
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T12:56:36.535297349Z",
+ "start_time": "2024-12-17T10:37:23.528456Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "ax.hist(results[0.3][11], bins=100, histtype=\"step\", density=True, label=\"0.3\")\n",
+ "ax.hist(results[0.5][11], bins=100, histtype=\"step\", density=True, label=\"0.5\")\n",
+ "ax.hist(results[0.7][11], bins=100, histtype=\"step\", density=True, label=\"0.7\")\n",
+ "ax.legend()\n",
+ "ax.set_title(\"MET_phi\")\n",
+ "fig.show()\n",
+ "\n"
+ ],
+ "id": "5dfda8238d980baa",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzwAAANECAYAAAB1hypCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACHtUlEQVR4nOzdfXxb9X33//eRJVt2bEVSHMexTRIeCQRCupYu9IKOLh2FBlK6x8UVVnqz9OYH3do6YU2gLRTW3IwWSklpCV6vx0jHGLRXQ5d113aNNGS0pNC1o7R0HQ1JSUYCkWPZjiTbie8k6/v7QySg6PhGtm6PXs/Hww/I+R4dfXTOV+ect86dZYwxAgAAAAAHchW7AAAAAADIFwIPAAAAAMci8AAAAABwLAIPAAAAAMci8AAAAABwLAIPAAAAAMci8AAAAABwLAIPAAAAAMci8AAAAABwLAIPACDN3/3d38myLFmWpfXr1086/rZt286Mv3nz5jPDTw+b7M/v92f9mtN/f/d3f5f7GWDj4x//uCzL0pEjR6Y0/qJFiwpaHwBgfO5iFwAAKF3/8A//oG984xuqqqoad5zvf//7E05j1apVE7bPmjVrwnGfe+45RaNRXXLJJQoGg2ltra2tE067WFauXKlwOFyy9QFAJSHwAABseTwedXV16ZlnntG73/1u23FeffVV/cd//Ieqq6s1OjpqO84Pf/jDKb+n3bjvfve7tW/fPt17773j1lFqHnnkkWKXAAB4Hae0AQBsnT7a8vjjj487zq5duyRJ733vewtSEwAA2SLwAABs/d7v/Z7OP/987dq1S4lEwnac73//+2poaJj0tLVSY1mWPvWpT6m7u1s33XSTmpub5ff79Z73vEd/+7d/K2PMuK/93ve+p4svvli1tbVqa2vT2rVr9dprr6WNk+01PwCA/CHwAABsWZalD3zgA+ru7ta+ffsy2o8dO6af/exnev/73y+v11uECmemp6dH73jHO/Ttb39bjY2Nmjdvnn70ox/pxhtv1Cc/+Unb0PPAAw/oQx/6kE6cOKGLL75YkUhEjz32mFatWqXh4eEifAoAwGQIPACAcX3gAx+QZH9a2+nT2f7kT/6koDXlyj/+4z9qZGREv/zlL/Xiiy/q4MGD+vd//3c1NTXp29/+tp566qmM1zzwwAN6+OGH9eqrr+rf//3fdejQIS1atEgvvfSSnnvuuSJ8CgDAZAg8AIBxLV++XBdccIF27dqleDye1vb9739f9fX1k57ONtmtpT/+8Y/n8RNM7P7779fb3/72M/++7LLLtG3bNknSPffckzH+xz/+8bR6W1pa9Gd/9meSpP/+7//Ob7EAgGnhLm0AgHGdPq1t69at+vGPf3zm5gSdnZ366U9/qg996EOqra2dcBqTBaK3vOUtOas3G/X19br++uszhn/wgx/Un//5n+vXv/51Rpvd0az58+fnozwAQI4QeAAAEzodeB5//PEzgSeb09myuS11IZ177rlyuzM3g263W+eee65++9vfqq+vT7Nnzz7TtmjRogJWCADIBU5pAwBM6KKLLtKyZcv0j//4j2eetfP9739fs2bN0tVXX13k6qbPLuycdvpBqyMjI2nDa2pq8loTACD3CDwAgEl94AMfUDQa1VNPPaXjx4/r2Wef1fvf//5JT2crZa+88ortndiSyaT++7//Wz6fT3Pnzi1CZQCAXCLwAAAmdfrUtZ07d+of//EfZYwp27uznRaLxbR79+6M4Y8//rhOnjyp3/u935NlWUWoDACQSwQeAMCkli1bpuXLl+uf/umf9J3vfEezZs3SNddcU+yyZmzdunV66aWXzvz7P/7jP7RhwwZJ0u23316ssgAAOcRNCwAAU/KBD3xAX/rSl/Szn/1MN9xww5RPZ5vKdT5f+tKX9M53vnOmJWbl/PPPl5S69fZb3vIWjYyM6MCBA5Kkj370o44IdAAAAg8AYIr+5E/+RF/60pfO/P9U7dmzZ9JxPvWpT027rumaP3++fvCDH+gLX/iCnnnmGXV2dmrlypX6yEc+optuuonT2QDAISxjd8UmAAAOZlmWVq5cqaeffrrYpQAA8oxreAAAAAA4Fqe0AQDK1uc//3n95je/yeo19957b56qAQCUIgIPAKBsPffcc9q3b19Wr7ntttvyVA0AoBQReAAAZYtrcAAAkyHwAAAqDvfrAYDKwU0LAAAAADhWWR3hmTVrloaHh1VVVaWmpqZilwMAAACgSLq7uzU2Niav16tTp06NO15ZPYenqqpKyWSy2GUAAAAAKBEul0tjY2PjtpfVEZ7Tgcflcmn+/PlpbeFwWPPmzcvL++Zj2sYYdXZ2qqWlJedP8y63eZHP6eZr2vlcflL5zWeWXzrmc36ny/Ir3LTzNd1y3Aay/N5Qjssvn9Mut+k6afkdP35cyWRSVVVVE7/YlJHW1lYjybS2tma0XXjhhXl733xMu6+vz0gyfX19OZ92uc2LfE43X9PO5/IzpvzmM8svHfM5v9Nl+RVu2vmabjluA1l+byjH5ZfPaZfbdJ20/CbKBm/GTQsAAAAAOBaBBwAAAIBjEXgAAAAAOBaBBwAAAIBjEXgAAAAAOFZZ3Zb6tHA4rGXLlqUNi0ajWrZsmdrb29Xe3p7T98v19PItn/Xma9rlWHM+ldt8ZvmlYz7nf7r5VI7zohxrzpdynBflWHO+MJ/zP918ykfNHR0d6ujoOLOv/2bhcHhK0yirB4+2tbUpFAqptbVVx44dK3Y5M9Lf36/Zs2err69PPp+v2OUgSyy/8sbyK28sv/LHMixvLL/y5qTlN9VswCltAAAAAByLwAMAAADAsQg8AAAAAByLwAMAAADAscryLm0AAABAJentNxoYnvl0Tp50KdB2sY72ulQ/bNTglRp91swnXMIIPAAAAEAJ6+03uuXRpEYSuZhard576y/05X+RpKRq3NK2ta6sQ48xRlu2bNFjjz2mU6dOafXq1dq+fbvq6uoyxh0bG9PXvvY1ffvb39bx48d10UUX6ctf/rKuvPLKXHygSRF4AAAAgBI2MCyNJKR1qyy1Bmd2NObkyVNaufIPtW/fT9Q3WqcH96SOHDVmeYfqu+66S9u3b9eOHTvk8/l08803a+3atdq1a1fGuN/+9rf15S9/WX/913+t5cuX6+///u917bXX6r/+67903nnnzejzTAWBp0hqamq0adMm1dTUFLsUTAPLr7yx/Moby6/8sQzLG8uveFqDls5tmlngGZnt0c03/rHOb/Wos8+SlP0jOePxuDo6OnT33XfruuuukyQ9/PDDuvTSS3Xs2DG1tbWljf/www/rpptu0tq1ayVJb33rW7Vr1y79y7/8izZu3DijzzMV3LSgSGpqarR582ZWFmWK5VfeWH7ljeVX/liG5Y3lV95ysfxefPFFhcNhrV69+sywFStWKBgM6qmnnsoYf+HChfqjP/qjM/92uVxqamrS8HAOLkqaAo7wAAAAAJiyrq4uSdL8+fPPDHO5XGppaVE4HM4Y/3vf+96Z/x8aGtK//uu/6qWXXtLVV1+d/2JF4AEAAACQhUgkorq6OlVVVaUNb2hoUG9v77iv27lzpz74wQ9Kkr72ta/p7W9/e17rPI3AAwAAAGDKgsGgBgcHNTY2lhZ6+vr6FAgExn3dNddco1//+td6/vnndeutt8rn8+nP/uzP8l4v1/AAAAAAmLLm5mZJUigUOjMsmUyqs7Mz7TQ3SRoZGdHPf/5znTx5Uj6fT29961t144036tOf/rQeeeSRgtRL4AEAAAAwZcuXL1dTU5OeeOKJM8Oee+45xWIxXXHFFWnjGmP0zne+M+NmBgMDA6quri5IvZzSBgAAAGDKPB6P1q1bpzvuuEPNzc1qaGjQ+vXrdf3112vBggWKRCKKRCJauHChvF6vVq1apdtuu001NTVqaWnRs88+q4ceekgPPfRQQeol8AAAAABlIBTJ/pk5+ZrenXfeqXg8ro0bN2pwcFDXXnuttm/fLkl64IEHtGXLFr3yyitatGiRHn74Yd166636+Mc/roGBAS1dulQPPfTQmefy5JtljMntnMujtrY2hUIhtba26tixY8UuBwAAAMi73n6jWx5NaiSR+2nXuKVta11q9M3sgabFMNVswBEeAAAAoIQ1+ixtW+vSQB6e09ngVVmGnWwQeAAAAIAS1+iz1OgrdhXlibu0AQAAAHAsAg8AAAAAxyLwAAAAAHAsAg8AAAAAxyLwAAAAAHAsAg8AAAAAx+K21AAAYELmZEhmOGrbZnkDsupbC1wRAEwdgQcAAIzLnAxpdNdVUmLIfgR3rarX7CX0AHk20Q8PM1EJP1oQeAAAwLjMcFRKDMm98n5Z/iXpbbFDSuzbIDMcdfwOE1BMk/7wMBPT/NHCGKMtW7boscce06lTp7R69Wpt375ddXV1ua9xhgg8AABgUpZ/iVyNy9OGJYtUC1BpJvrhYUbTncGPFnfddZe2b9+uHTt2yOfz6eabb9batWu1a9eujHEHBwc1Z84cGWPSht92223avHnzTD7ClBB4AAAAgDJg98PDTEz3R4t4PK6Ojg7dfffduu666yRJDz/8sC699FIdO3ZMbW1taeP/7ne/0/DwsH71q1+ptrb2zPA5c+ZMt/SslGXgCYfDWrZsmW1be3u72tvbC1wRAGA8vf1GA8P2bQ1eqdFnFbYgIEcm6tsS/RvO9eKLLyocDmv16tVnhq1YsULBYFBPPfWUPvaxj6WNf+DAAZ1zzjm6+OKLs36vjo4OdXR02LaFw+EpTaMsA8+8efO0f//+YpcBAJhEb7/RLY8mNZKwb69xS9vWutgpRNmZrG9L9G84V1dXlyRp/vz5Z4a5XC61tLTYhpADBw6opqZG733ve/XLX/5SbW1tuvHGG9Xe3q6qqqoJ32uigxltbW0KhUKT1luWgQcAUB4GhqWRhLRulaXWYPpOXyhi9OCe1C/kjb4iFQhM00R9W6J/w9kikYjq6uoywkpDQ4N6e3szxj9w4IB6enp022236ctf/rL+/d//XbfffrsGBwd122235b1eAg8AIO9ag5bObbL7ldvYDAPKx/h9W6J/w6mCwaAGBwc1NjaWFnr6+voUCAQyxt++fbuqq6s1e/ZsSdIll1yivr4+PfDAAwUJPK68vwMAAAAAx2hubpaktNPJksmkOjs7005zO23u3Llnws5pb3/723X8+HGNjo7mt1gReAAAAABkYfny5WpqatITTzxxZthzzz2nWCymK664Im3csbExXXLJJdq+fXva8P3792vJkiWqrq7Oe72c0gYAAACUARM7lNPnX5nYoWm9zuPxaN26dbrjjjvU3NyshoYGrV+/Xtdff70WLFigSCSiSCSihQsXyuPx6IorrtAXv/hFWZald77znfrVr36lL3/5y/rmN7+Zw08zPgIPAAAAUMIsb0By1yqxb0PuJ+6uTU0/S3feeafi8bg2btyowcFBXXvttWeO4jzwwAPasmWLXnnlFS1atEh33XWXqqqq9NWvflW9vb1aunSp/vqv/1of/vCHc/1pbBF4AAAAgCyYkyGZ4ahtm+UNyKpvzen7WfWtql6zd9z3nNG0p1mvZVnaunWrtm7dmtG2efNmbd68+cy/PR6PvvKVr+grX/nKTEqdNgIPAAAAMEXmZEiju66SEkP2I7hrVb1mb15CT66nWSkIPAAAAMAUmeGolBiSe+X9svxL0ttih5TYt0FmOEo4KSEEHgAAACBLln+JXI3L04bl8oYCyB1uSw0AAADAsQg8AAAAAByLwAMAAADAsQg8AAAAAByLwAMAAADAsbhLGwAAAFDiEp1dSkZjOZ+uK+CXu6U559MtJQQeAAAAoIQlOrvUfc0NMkPDOZ+2VetV0+6dWYceY4y2bNmixx57TKdOndLq1au1fft21dXV5bzGmSLwAAAAACUsGY3JDA0rcN8WuRcvytl0E4ePKHrrptSRoywDz1133aXt27drx44d8vl8uvnmm7V27Vrt2rUr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X1atV9FbN9m2W7VeuQL+whZVBAQeAAAAwIHcLc1q2r1TyWjMtt0V8Mvd0lzYooqAwAMAAAA4lLulWaqAUDMRbloAAAAAwLEIPAAAAAAcK+vAY4zR5s2btWTJEs2fP1833nijBgcHJ33dPffco89+9rMZw/v7+/WRj3xETU1NuuCCC3TvvffKGJNtWQAAAACQIetreO666y5t375dO3bskM/n080336y1a9dq165d477m+eef1/33368PfehDGW3XXXedBgYG9P3vf1+dnZ365Cc/qdraWq1fvz7b0gAAAAAgTVaBJx6Pq6OjQ3fffbeuu+46SdLDDz+sSy+9VMeOHVNbW1va+OFwWMuXL1dvb6/t9F588UX96Ec/0sGDB3X++edLkl577TU9+OCDWrdunSzLms5nAgAAAABJWQaeF198UeFwWKtXrz4zbMWKFQoGg3rqqaf0sY99LG38YDCoH//4x5KkT3ziExnT27t3rxYvXnwm7EjSNddcoy984Qt69dVXtXDhQts6jDHq7+/PpvQ0NTU1qqmpmfbrAQAAAMzMyMiIRkZGpv36qV4Gk1Xg6erqkiTNnz//zDCXy6WWlhaFw+GM8T0ej5YvXy5JmjVrlu30Wltb04ad/nc4HB438HR2dmr27NnZlJ5m06ZN2rx587RfDwAAAGBm7r77bm3ZsiXv75NV4IlEIqqrq1NVVVXa8IaGhnFPW5tsevX19RnTkjTh9FpaWvTSSy9l/X6ncXQHAAAAKK7bb79dGzdunPbrL7zwQnV2dk46XlaBJxgManBwUGNjY2mhp6+vT4FAIOsig8GgDh48mDasr69PkiacnmVZ8vl8Wb8fAAAAgNIw08tMpnq9f1a3pW5uTj2lNRQKnRmWTCbV2dmZdppbNtM7duxY2rDT057O9AAAAADgzbIKPMuXL1dTU5OeeOKJM8Oee+45xWIxXXHFFVm/+ZVXXqlXXnlFBw4cODNs9+7dOu+888a9fgcAAAAApiqrU9o8Ho/WrVunO+64Q83NzWpoaND69et1/fXXa8GCBYpEIopEIlq4cKE8Hs+k03vLW96iK664Qh/96Ed133336dixY7rrrrt07733cktqAAAAADOW9YNH77zzTsXjcW3cuFGDg4O69tprtX37dknSAw88oC1btuiVV17RokWLpjS9H/zgB/rUpz6lNWvWKBgMavPm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bVt7e7va29sLXBEAAACAXOvo6FBHR4dtWzgcntI0yjLwzJs3T/v37y92GQAAAADyaKKDGW1tbQqFQpNOg1PaAAAAADgWgQcAAACAYxF4AAAAADgWgQcAAACAYxF4AAAAADgWgQcAAACAYxF4AAAAADgWgQcAAACAYxF4AAAAADgWgQcAAACAYxF4AAAAADgWgQcAAACAYxF4AAAAADgWgadIRkZGtHnzZo2MjBS7FEwDy6+8sfzKG8uv/LEMyxvLr7xV4vIj8BTJyMiItmzZUlGdzUlYfuWN5VfeWH7lj2VY3lh+5a0Slx+BBwAAAIBjEXgAAAAAOBaBBwAAAIBjEXgAAAAAOBaBBwAAAIBjEXgAAAAAOBaBBwAAAIBjOSbwdHR0lOW086Ec50U51pxP5TafWX7pmM/5n24+leO8KMea86Uc50U51pwvzOf8TzefSnb5mTLS2tpqJJnW1taMtgsvvDBv72s37Vd+st8cO+8d5uRdS8xYz39lPc2+vj4jyfT19eWixDSFnhelPN18TTufy8+Y8pvPLL90zOf8TpflV7hp52u65bgNZPm9oRyXXz6nXW7Tnenye+1f/8UcO+8d5rV//ZeMtkIvv4mywZs55ggPAAAAAJwt68BjjNHmzZu1ZMkSzZ8/XzfeeKMGBwfHHf8nP/mJ/uAP/kCzZ8/Wu971Lj3//PNp7aFQSO9///sVDAb11re+VY888kj2nwIAAAAAbGQdeO666y5t375dX/va1/TYY4/p5z//udauXWs77sGDB3X11Vfr8ssv15NPPqm3vOUtes973qNjx45JkhKJhK644golk0n9v//3//Tnf/7nuummm/TP//zPM/tUAAAAACDJnc3I8XhcHR0duvvuu3XddddJkh5++GFdeumlOnbsmNra2tLGf+ihh/S2t71N99xzjyzL0iWXXKJ9+/bp0Ucf1e23364f/vCHOnr0qH7xi1/I5/Ppne98p1588UV1dHToj//4j3P3KQEAAABUpKyO8Lz44osKh8NavXr1mWErVqxQMBjUU089lTH+3r17tXr1almWlXozl0tXX321nnzyyTPtl19+uXw+35nXXHPNNXrqqac0NjY2rQ8EAAAAAKdldYSnq6tLkjR//vwzw1wul1paWhQOh23Hb21tTRvW2tqq3bt3T9g+NjamEydOqKmpKa2tu7tbknT8+PGM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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 17
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "b2c511f7af1f1f0d"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/dataloader_debug.ipynb b/notebooks/dataloader_debug.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..5a10b751dea295b1ca959e91b443ad1ed21aac52
--- /dev/null
+++ b/notebooks/dataloader_debug.ipynb
@@ -0,0 +1,314 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T09:06:33.918985Z",
+ "start_time": "2025-04-10T09:06:30.413364Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import os\n",
+ "import ast\n",
+ "import glob\n",
+ "import functools\n",
+ "import math\n",
+ "import torch\n",
+ "\n",
+ "from torch.utils.data import DataLoader\n",
+ "from src.logger.logger import _logger, _configLogger\n",
+ "from src.dataset.dataset import EventDatasetCollection, EventDataset\n",
+ "from src.utils.import_tools import import_module\n",
+ "from src.dataset.functions_graph import graph_batch_func\n",
+ "from src.dataset.functions_data import concat_events\n",
+ "from src.utils.paths import get_path\n"
+ ],
+ "id": "e3d819c470939dc",
+ "outputs": [],
+ "execution_count": 1
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-10T09:06:34.311191Z",
+ "start_time": "2025-04-10T09:06:34.004349Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "train_data = EventDataset.from_directory(\"/work/gkrzmanc/jetclustering/preprocessed_data/scouting_PFNano_signals1/SVJ_hadronic_std3/s-channel_mMed-1100_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000\", mmap=True)\n",
+ "print(\"N events:\", len(train_data))\n",
+ "train_loader = DataLoader(\n",
+ " train_data,\n",
+ " batch_size=8,\n",
+ " drop_last=True,\n",
+ " pin_memory=True,\n",
+ " num_workers=1,\n",
+ " collate_fn=concat_events,\n",
+ " persistent_workers=1\n",
+ " )\n"
+ ],
+ "id": "8c937e192df126b9",
+ "outputs": [
+ {
+ "ename": "FileNotFoundError",
+ "evalue": "[Errno 2] No such file or directory: '/work/gkrzmanc/jetclustering/preprocessed_data/scouting_PFNano_signals1/SVJ_hadronic_std3/s-channel_mMed-1100_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000'",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mFileNotFoundError\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[2], line 1\u001B[0m\n\u001B[0;32m----> 1\u001B[0m train_data \u001B[38;5;241m=\u001B[39m \u001B[43mEventDataset\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mfrom_directory\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43m/work/gkrzmanc/jetclustering/preprocessed_data/scouting_PFNano_signals1/SVJ_hadronic_std3/s-channel_mMed-1100_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mmmap\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mTrue\u001B[39;49;00m\u001B[43m)\u001B[49m\n\u001B[1;32m 2\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mN events:\u001B[39m\u001B[38;5;124m\"\u001B[39m, \u001B[38;5;28mlen\u001B[39m(train_data))\n\u001B[1;32m 3\u001B[0m train_loader \u001B[38;5;241m=\u001B[39m DataLoader(\n\u001B[1;32m 4\u001B[0m train_data,\n\u001B[1;32m 5\u001B[0m batch_size\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m8\u001B[39m,\n\u001B[0;32m (...)\u001B[0m\n\u001B[1;32m 10\u001B[0m persistent_workers\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m1\u001B[39m\n\u001B[1;32m 11\u001B[0m )\n",
+ "File \u001B[0;32m/work/gkrzmanc/jetclustering/code/src/dataset/dataset.py:377\u001B[0m, in \u001B[0;36mEventDataset.from_directory\u001B[0;34m(dir, mmap, model_clusters_file, model_output_file, include_model_jets_unfiltered, fastjet_R, parton_level, gen_level, aug_soft, seed, aug_collinear)\u001B[0m\n\u001B[1;32m 374\u001B[0m \u001B[38;5;129m@staticmethod\u001B[39m\n\u001B[1;32m 375\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21mfrom_directory\u001B[39m(\u001B[38;5;28mdir\u001B[39m, mmap\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mTrue\u001B[39;00m, model_clusters_file\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mNone\u001B[39;00m, model_output_file\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mNone\u001B[39;00m, include_model_jets_unfiltered\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mFalse\u001B[39;00m, fastjet_R\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mNone\u001B[39;00m, parton_level\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mFalse\u001B[39;00m, gen_level\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mFalse\u001B[39;00m, aug_soft\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mFalse\u001B[39;00m, seed\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m0\u001B[39m, aug_collinear\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mFalse\u001B[39;00m):\n\u001B[1;32m 376\u001B[0m result \u001B[38;5;241m=\u001B[39m {}\n\u001B[0;32m--> 377\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m file \u001B[38;5;129;01min\u001B[39;00m \u001B[43mos\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mlistdir\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43mdir\u001B[39;49m\u001B[43m)\u001B[49m:\n\u001B[1;32m 378\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m file \u001B[38;5;241m==\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mmetadata.pkl\u001B[39m\u001B[38;5;124m\"\u001B[39m:\n\u001B[1;32m 379\u001B[0m metadata \u001B[38;5;241m=\u001B[39m pickle\u001B[38;5;241m.\u001B[39mload(\u001B[38;5;28mopen\u001B[39m(os\u001B[38;5;241m.\u001B[39mpath\u001B[38;5;241m.\u001B[39mjoin(\u001B[38;5;28mdir\u001B[39m, file), \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mrb\u001B[39m\u001B[38;5;124m\"\u001B[39m))\n",
+ "\u001B[0;31mFileNotFoundError\u001B[0m: [Errno 2] No such file or directory: '/work/gkrzmanc/jetclustering/preprocessed_data/scouting_PFNano_signals1/SVJ_hadronic_std3/s-channel_mMed-1100_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-2000'"
+ ]
+ }
+ ],
+ "execution_count": 2
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2024-12-19T17:19:10.625599Z",
+ "start_time": "2024-12-19T17:19:10.457272Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "b = next(iter(train_loader))",
+ "id": "6ddf6f2f4c0f3c37",
+ "outputs": [],
+ "execution_count": 3
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2024-12-19T17:19:20.974583Z",
+ "start_time": "2024-12-19T17:19:20.965173Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "b.pfcands.pid.unique()",
+ "id": "5f2a6492abfac378",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([-211., -13., -11., 13., 22., 130., 211.])"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2024-12-18T14:37:13.995401Z",
+ "start_time": "2024-12-18T14:37:13.986881Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "dir(b)",
+ "id": "df59e9660ebabc72",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['MET',\n",
+ " '__class__',\n",
+ " '__delattr__',\n",
+ " '__dict__',\n",
+ " '__dir__',\n",
+ " '__doc__',\n",
+ " '__eq__',\n",
+ " '__format__',\n",
+ " '__ge__',\n",
+ " '__getattribute__',\n",
+ " '__gt__',\n",
+ " '__hash__',\n",
+ " '__init__',\n",
+ " '__init_subclass__',\n",
+ " '__le__',\n",
+ " '__len__',\n",
+ " '__lt__',\n",
+ " '__module__',\n",
+ " '__ne__',\n",
+ " '__new__',\n",
+ " '__reduce__',\n",
+ " '__reduce_ex__',\n",
+ " '__repr__',\n",
+ " '__setattr__',\n",
+ " '__sizeof__',\n",
+ " '__str__',\n",
+ " '__subclasshook__',\n",
+ " '__weakref__',\n",
+ " 'evt_collections',\n",
+ " 'fatjets',\n",
+ " 'genjets',\n",
+ " 'init_attrs',\n",
+ " 'jets',\n",
+ " 'matrix_element_gen_particles',\n",
+ " 'n_events',\n",
+ " 'offline_pfcands',\n",
+ " 'pfcands',\n",
+ " 'serialize',\n",
+ " 'special_pfcands']"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2024-12-18T14:37:14.126468Z",
+ "start_time": "2024-12-18T14:37:14.116496Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "len(b.pfcands), b.pfcands.batch_number",
+ "id": "d286a98188187c6",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(2023, tensor([ 0, 331, 636, 821, 1044, 1404, 1619, 1787, 2023]))"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2024-12-18T14:41:22.295628Z",
+ "start_time": "2024-12-18T14:41:22.277888Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "def get_idx_for_event(obj, i):\n",
+ " return obj.batch_number[i], obj.batch_number[i+1]\n",
+ "\n",
+ "def get_labels(pfcands):\n",
+ " labels = torch.zeros(len(pfcands)).long()\n",
+ " R = 0.8\n",
+ " for i in range(len(b)):\n",
+ " s, e = get_idx_for_event(b.matrix_element_gen_particles, i)\n",
+ " dq_eta = b.matrix_element_gen_particles.eta[s:e]\n",
+ " dq_phi = b.matrix_element_gen_particles.phi[s:e]\n",
+ " # dq_pt = b.matrix_element_gen_particles.pt[s:e] # Maybe we can somehow weigh the loss by pt?\n",
+ " s, e = get_idx_for_event(pfcands, i)\n",
+ " pfcands_eta = pfcands.eta[s:e]\n",
+ " pfcands_phi = pfcands.phi[s:e]\n",
+ " # calculate the distance matrix between each dark quark and pfcands\n",
+ " dist_matrix = torch.cdist(\n",
+ " torch.stack([dq_eta, dq_phi], dim=1),\n",
+ " torch.stack([pfcands_eta, pfcands_phi], dim=1),\n",
+ " p=2\n",
+ " )\n",
+ " dist_matrix = dist_matrix.T\n",
+ " closest_quark_dist, closest_quark_idx = dist_matrix.min(dim=1)\n",
+ " closest_quark_idx[closest_quark_dist > R] = -1\n",
+ " labels[s:e] = closest_quark_idx\n",
+ " return labels"
+ ],
+ "id": "1311033e4b878a6b",
+ "outputs": [],
+ "execution_count": 22
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2024-12-29T11:28:01.367425Z",
+ "start_time": "2024-12-29T11:28:01.348995Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "878ebfeda196f1ea",
+ "outputs": [],
+ "execution_count": 1
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": [
+ "import os\n",
+ "from src.dataset.dataset import SimpleIterDataset, EventDataset\n",
+ "from src.utils.utils import to_filelist\n",
+ "from src.utils.paths import get_path\n",
+ "\n",
+ "class Args:\n",
+ " def __init__(self):\n",
+ " self.data_train = datasets\n",
+ " self.data_val = datasets\n",
+ " #self.data_train = files_train\n",
+ " self.data_config = \"config_files/config_jets_1_delphes.yaml\"\n",
+ " self.extra_selection = None\n",
+ " self.train_val_split = 1.0\n",
+ " self.data_fraction = 1\n",
+ " self.file_fraction = 1\n",
+ " self.fetch_by_files = False\n",
+ " self.fetch_step = 1\n",
+ " self.steps_per_epoch = None\n",
+ " self.in_memory = False\n",
+ " self.local_rank = None\n",
+ " self.copy_inputs = False\n",
+ " self.no_remake_weights = False\n",
+ " self.batch_size = 10\n",
+ " self.num_workers = 0\n",
+ " self.demo = False\n",
+ " self.laplace = False\n",
+ " self.diffs = False\n",
+ " self.class_edges = False\n",
+ "args = Args()\n",
+ "train_range = (0, args.train_val_split)\n",
+ "train_file_dict, train_files = to_filelist(args, 'train')\n",
+ "train_data = SimpleIterDataset(train_file_dict, args.data_config, for_training=True,\n",
+ " extra_selection=args.extra_selection,\n",
+ " remake_weights=True,\n",
+ " load_range_and_fraction=(train_range, args.data_fraction),\n",
+ " file_fraction=args.file_fraction,\n",
+ " fetch_by_files=args.fetch_by_files,\n",
+ " fetch_step=args.fetch_step,\n",
+ " infinity_mode=False,\n",
+ " in_memory=args.in_memory,\n",
+ " async_load=False,\n",
+ " name='train', jets=True)\n",
+ "iterator = iter(train_data)"
+ ],
+ "id": "7475933352961325"
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "5759f10b89b33d82"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "name": "python3",
+ "language": "python",
+ "display_name": "Python 3 (ipykernel)"
+ }
+ },
+ "nbformat": 5,
+ "nbformat_minor": 9
+}
diff --git a/notebooks/demo.py b/notebooks/demo.py
new file mode 100644
index 0000000000000000000000000000000000000000..bc7fd7f5573edf7fb5d940c7b677ca197bbac9b1
--- /dev/null
+++ b/notebooks/demo.py
@@ -0,0 +1,4 @@
+
+
+print("Hello 23")
+
diff --git a/notebooks/export_dataset_sample_HF.py b/notebooks/export_dataset_sample_HF.py
new file mode 100644
index 0000000000000000000000000000000000000000..ac4a45da605525ebdbef032712552d6e81fa6407
--- /dev/null
+++ b/notebooks/export_dataset_sample_HF.py
@@ -0,0 +1,37 @@
+# Export a couple of events for each dataset into txt files for demo
+from pathlib import Path
+import os
+from src.dataset.dataset import EventDatasetCollection, EventDataset
+
+from src.utils.paths import get_path
+
+n_events_per_dataset = 50
+
+inputs = {
+ "QCD": "QCD_test_part0/qcd_test"
+}
+
+for rinv in [0.3, 0.5, 0.7]:
+ for mmed in [700, 800, 900, 1000, 1100, 1200]:
+ inputs[f"r_inv.={rinv}, m_med.={mmed} GeV"] = f"Delphes_020425_test_PU_PFfix_part0/SVJ_mZprime-{mmed}_mDark-20_rinv-{rinv}_alpha-peak"
+
+print(inputs)
+
+Path("demo_datasets").mkdir(exist_ok=True)
+for key in inputs:
+ Path(os.path.join("demo_datasets", key)).mkdir(exist_ok=True)
+ dataset = EventDataset.from_directory(get_path(inputs[key], "preprocessed_data"), mmap=True)
+ for n in range(n_events_per_dataset):
+ event = dataset[n]
+ pfcands_out = ""
+ for i in range(len(event.pfcands)):
+ pfcands_out += f"{event.pfcands.pt[i].item()} {event.pfcands.eta[i].item()} {event.pfcands.phi[i].item()} {event.pfcands.mass[i].item()} {event.pfcands.charge[i].item()}\n"
+ gen_particles_out = ""
+ for i in range(len(event.matrix_element_gen_particles)):
+ gen_particles_out += f"{event.matrix_element_gen_particles.pt[i].item()} {event.matrix_element_gen_particles.eta[i].item()} {event.matrix_element_gen_particles.phi[i].item()}\n"
+ # write the pfcands_out and gen_particles_out to os.path.join("demo_datasets", key, "n".txt) and n_quarks.txt
+ with open(os.path.join("demo_datasets", key, str(n)+".txt"), "w") as f:
+ f.write(pfcands_out)
+ with open(os.path.join("demo_datasets", key, str(n)+"_quarks.txt"), "w") as f:
+ f.write(gen_particles_out)
+
diff --git a/notebooks/gen_ak_cmds.py b/notebooks/gen_ak_cmds.py
new file mode 100644
index 0000000000000000000000000000000000000000..46b6a5da03ae123b26d35bae0265950fceb1dc81
--- /dev/null
+++ b/notebooks/gen_ak_cmds.py
@@ -0,0 +1,29 @@
+
+
+'''for pt in [30, 40, 50, 60, 70, 80, 90]:
+ #for suffix in ["", "-pl", "-gl"]:
+ for suffix in [""]:
+ #cmd = f"python -m scripts.test_plot_jobs --tag DelphesPFfix_FullDataset_TrainDSstudy_QCD --input QCD_test_part0 --submit-AKX -pt {pt} {suffix}"
+ cmd = f"python -m scripts.test_plot_jobs --tag DelphesPFfix_FullDataset_TrainDSstudy --input Delphes_020425_test_PU_PFfix_part0 --submit-AKX -pt {pt} {suffix}"
+ print(cmd)
+'''
+
+
+'''for pt in [30, 40, 50, 60, 70, 80, 90]:
+ #cmd = f"python -m scripts.test_plot_jobs --tag DelphesPFfix_FullDataset_TrainDSstudy --input Delphes_020425_test_PU_PFfix_part0 -pt {pt}"
+ #print(cmd)
+ cmd = f"/work/gkrzmanc/1gatr/bin/python -m scripts.plot_eval_count_matched_quarks --input QCD_test_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_QCD_pt_{str(int(pt))}.0"
+ #cmd = f"/work/gkrzmanc/1gatr/bin/python -m scripts.plot_eval_count_matched_quarks --input Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_pt_{str(int(pt))}.0"
+ print(cmd)
+'''
+
+# first AK
+
+for ti in [ ["DelphesPFfix_FullDataset_TrainDSstudy_QCD", "QCD_test_part0"] , ["DelphesPFfix_FullDataset_TrainDSstudy", "Delphes_020425_test_PU_PFfix_part0"] ]:
+ tag, inp = ti
+ for low_high_eta in ["", "--high-eta-only", "--low-eta-only"]:
+ #for level in ["", "-pl", "-gl"]:
+ # cmd = f"python -m scripts.test_plot_jobs --tag {tag} --input {inp} --submit-AKX {low_high_eta} {level}"
+ # print(cmd)
+ cmd = f"/work/gkrzmanc/1gatr/bin/python -m scripts.test_plot_jobs --tag {tag} --input {inp} {low_high_eta} -ow"
+ print(cmd)
\ No newline at end of file
diff --git a/notebooks/gen_test_job_cmd_gen.py b/notebooks/gen_test_job_cmd_gen.py
new file mode 100644
index 0000000000000000000000000000000000000000..dc5c12b203f6979ba8df4cdba4a74e4d697c219a
--- /dev/null
+++ b/notebooks/gen_test_job_cmd_gen.py
@@ -0,0 +1,317 @@
+# This script is used as a tool to make it easier to generate test jobs from clustering training
+"""
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_2025_02_28_12_42_59 -step 40000 -template t3 -tag no_pid_eval_1 -gl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_2.0_2025_02_28_12_48_58 -step 40000 -template t3 -tag no_pid_eval_1 -gl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_700_07_2025_02_28_13_01_59 -step 40000 -template t3 -tag no_pid_eval_1 -gl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_AllData_2025_02_28_13_42_59 -step 40000 -template t3 -tag no_pid_eval_1 -gl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_2025_02_28_12_42_59 -step 40000 -template t3 -tag no_pid_eval_1 -pl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_2.0_2025_02_28_12_48_58 -step 40000 -template t3 -tag no_pid_eval_1 -pl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_700_07_2025_02_28_13_01_59 -step 40000 -template t3 -tag no_pid_eval_1 -pl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_AllData_2025_02_28_13_42_59 -step 40000 -template t3 -tag no_pid_eval_1 -pl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+
+
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_2025_02_28_12_42_59 -step 40000 -template t3 -tag no_pid_eval_1 --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_2.0_2025_02_28_12_48_58 -step 40000 -template t3 -tag no_pid_eval_1 --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_700_07_2025_02_28_13_01_59 -step 40000 -template t3 -tag no_pid_eval_1 --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_AllData_2025_02_28_13_42_59 -step 40000 -template t3 -tag no_pid_eval_1 --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+"""
+
+#runs = ["LGATr_training_NoPID_10_16_64_0.8_2025_02_28_12_42_59", "LGATr_training_NoPID_10_16_64_2.0_2025_02_28_12_48_58", "LGATr_training_NoPID_10_16_64_0.8_700_07_2025_02_28_13_01_59", "LGATr_training_NoPID_10_16_64_0.8_AllData_2025_02_28_13_42_59"]
+
+#runs1 = ["LGATr_training_NoPID_10_16_64_0.8_2025_02_28_12_42_59", "LGATr_training_NoPID_10_16_64_2.0_2025_02_28_12_48_58"]# Trained on 03_900, on scouting PFCands
+#runs2 = ["LGATr_training_NoPIDGL_10_16_64_0.8_2025_03_17_20_05_04", "LGATr_training_NoPIDGL_10_16_64_2.0_2025_03_17_20_05_04"] # Trained on 03_900 dataset (rinv=0.3, m=900), Gen level
+#runs_alldata = ["LGATr_training_NoPID_10_16_64_0.8_AllData_2025_02_28_13_42_59", ]
+# Transformer
+runs_tr = ["Transformer_training_NoPID_10_16_64_0.8_2025_03_03_15_55_50", "Transformer_training_NoPID_10_16_64_2.0_2025_03_03_17_00_38"]
+#runs = runs1+runs2
+
+# Test run with no filtering
+# "LGATr_training_NoPID_10_16_64_0.8_2025_02_28_12_42_59": "900_03",
+# "LGATr_training_NoPID_10_16_64_2.0_2025_02_28_12_48_58": "900_03",
+
+#runs = runs_tr
+runs = ["LGATr_training_NoPID_10_16_64_0.8_2025_02_28_12_42_59", "LGATr_training_NoPID_10_16_64_2.0_2025_02_28_12_48_58"]
+# TODO: add transformer runs into eval
+
+#runs = runs_tr
+
+#runs = ["LGATr_training_NoPID_10_16_64_0.8_Aug_Finetune_2025_03_27_12_46_12_740"] # test the aug. finetuning
+#runs = ["LGATr_training_NoPID_10_16_64_2.0_Aug_Finetune_2025_03_27_17_09_14_641"] # R=2.0 version of the above run
+
+
+runs = ["LGATr_training_NoPID_10_16_64_2.0_Aug_Finetune_vanishing_momentum_2025_03_28_10_43_36_81", "LGATr_training_NoPID_10_16_64_0.8_Aug_Finetune_vanishing_momentum_2025_03_28_10_43_37_44"]
+
+runs = ["LGATr_training_NoPID_10_16_64_0.8_Aug_Finetune_vanishing_momentum_QCap05_2025_03_28_17_12_25_820", "LGATr_training_NoPID_10_16_64_2.0_Aug_Finetune_vanishing_momentum_QCap05_2025_03_28_17_12_26_400"]
+# Parton-level training - loss seems very high, maybe something is wrong with the ds?
+
+#runs = ["LGATr_training_NoPIDPL_10_16_64_2.0_2025_03_21_14_51_15_195"]
+runs = ["LGATr_training_NoPID_10_16_64_2.0_Aug_Finetune_vanishing_momentum_QCap05_1e-2_2025_03_29_14_58_38_650", "LGATr_training_NoPID_10_16_64_0.8_Aug_Finetune_vanishing_momentum_QCap05_1e-2_2025_03_29_14_58_36_446"]
+runs = ["LGATr_training_NoPID_10_16_64_0.8_Aug_Finetune_2025_03_27_12_46_12_740"]
+
+# fixed 500 particles per event and pt=1e-2
+runs = ["LGATr_pt_1e-2_500part_2025_04_01_10_33_28_457"]
+runs = ["LGATr_pt_1e-2_500part_2025_04_01_12_18_23_661"]
+
+# FT on parton-level + aug clustering
+runs = ["LGATr_pt_1e-2_500part_2025_04_01_16_49_08_406"]
+
+runs = ["LGATr_pt_1e-2_500part_2025_04_01_21_14_07_350"] + ["LGATr_pt_1e-2_500part_2025_04_01_16_49_08_406"]
+
+
+# Again eval on the 'old' run that was trained on 500 ghosts with pt=0.01
+runs = ["LGATr_pt_1e-2_500part_2025_04_01_10_33_28_457"]
+
+runs = ["LGATr_pt_1e-2_500part_NoQMin_2025_04_03_23_15_17_745", "LGATr_pt_1e-2_500part_NoQMin_2025_04_03_23_15_35_810"]
+runs = ["LGATr_training_NoPID_10_16_64_0.8_Aug_Finetune_vanishing_momentum_2025_03_28_10_43_37_44", "LGATr_training_NoPID_10_16_64_2.0_Aug_Finetune_vanishing_momentum_2025_03_28_10_43_36_81"]
+
+
+# Try to reproduce the results without qmin
+runs = ["LGATr_pt_1e-2_500part_NoQMin_10_to_1000p_2025_04_04_12_57_47_788", "LGATr_pt_1e-2_500part_NoQMin_10_to_1000p_2025_04_04_12_57_51_536"]
+
+runs = ["LGATr_pt_1e-2_500part_NoQMin_10_to_1000p_CW0_2025_04_04_15_30_16_839", "LGATr_pt_1e-2_500part_NoQMin_10_to_1000p_CW0_2025_04_04_15_30_20_113"]
+
+runs = ["debug_IRC_loss_weighted100_plus_ghosts_2025_04_08_22_40_33_972"] # Short irc loss training, high coord loss - not super useful I think
+
+runs = ["debug_IRC_loss_weighted100_plus_ghosts_2025_04_09_13_48_55_569",# Longer irc loss training, coord loss converges to a lower number - probably more useful - latest step 9960
+ "LGATr_500part_NOQMin_2025_04_09_21_53_37_210"] # Reproduce the results with 500 ghosts, no qmin
+#runs = ["debug_IRC_loss_weighted100_plus_ghosts_2025_04_09_13_48_55_569"] #just the 2nd one
+#runs = ["debug_IRC_loss_weighted100_plus_ghosts_Qmin05_2025_04_09_14_45_51_381"] # qmin=0.5, otherwise same as above
+#runs = ["debug_IRC_loss_weighted100_plus_ghosts_Qmin05_CoordLossWeight1_2025_04_09_15_29_29_203"]
+#runs = ["IRC_loss_Split_and_Noise_alternate_NoAug_2025_04_11_16_15_48_955"] # Split and noise alternate
+#runs = ["LGATr_training_NoPID_10_16_64_0.8_2025_02_28_12_42_59"] # pick step 50k of this one - results without ghosts (might work better on parton-level)
+
+#runs = ["IRC_loss_Split_and_Noise_alternate_Aug_2025_04_14_11_10_21_788", "IRC_loss_Split_and_Noise_alternate_NoAug_2025_04_11_16_15_48_955"] # pick step 12900 of these
+
+
+runs = [["LGATr_training_NoPID_Delphes_10_16_64_0.8_2025_04_17_18_07_38_405", 60000],
+ ["LGATr_500part_NOQMin_Delphes_2025_04_19_11_15_24_417", 14820],
+ ["Delphes_IRC_aug_SplitOnly_2025_04_20_15_50_33_553", 14280]
+ ] # step 60k: initial clustering training on Delphes 900_03 dataset
+
+#runs = ["LGATr_500part_NOQMin_Delphes_2025_04_19_11_15_24_417"]#, "Delphes_IRC_aug_2025_04_19_11_16_17_130"]#step 12660
+
+#runs = ["Delphes_IRC_aug_SplitOnly_2025_04_20_15_50_33_553"] # IRC loss only with splitting
+#runs = ["Delphes_IRC_NOAug_SplitOnly_2025_04_21_12_58_36_99", "Delphes_IRC_NOAug_SplitAndNoise_2025_04_21_19_32_08_865"]
+#runs = ["CONT_Delphes_IRC_aug_SplitOnly_2025_04_21_12_53_27_730"]
+
+
+
+# PFfix Delphes runs
+runs = [
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_10_16_64_0.8_2025_05_03_18_35_53_134", 2000],
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_10_16_64_0.8_2025_05_03_18_35_53_134", 4000],
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_10_16_64_0.8_2025_05_03_18_35_53_134", 10000],
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_10_16_64_0.8_2025_05_03_18_35_53_134", 20000],
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_10_16_64_0.8_2025_05_03_18_35_53_134", 40000],
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_10_16_64_0.8_2025_05_03_18_35_53_134", 50000],
+]
+
+
+runs = [
+ #["Transformer_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_05_20_755", 2000],
+ #["Transformer_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_05_20_755", 4000],
+ #["Transformer_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_05_20_755", 10000],
+ #["Transformer_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_05_20_755", 20000],
+ #["Transformer_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_05_20_755", 40000],
+ #["Transformer_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_05_20_755", 50000],
+ ["Transformer_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_05_20_755", 70000],
+]
+
+'''runs = [ #OLD GATR DONT USE
+ ["GATr_training_NoPID_Delphes_PU_10_16_64_0.8_2025_05_03_18_35_48_163", 2000],
+ ["GATr_training_NoPID_Delphes_PU_10_16_64_0.8_2025_05_03_18_35_48_163", 4000],
+ ["GATr_training_NoPID_Delphes_PU_10_16_64_0.8_2025_05_03_18_35_48_163", 10000],
+ ["GATr_training_NoPID_Delphes_PU_10_16_64_0.8_2025_05_03_18_35_48_163", 20000],
+ ["GATr_training_NoPID_Delphes_PU_10_16_64_0.8_2025_05_03_18_35_48_163", 40000],
+ ["GATr_training_NoPID_Delphes_PU_10_16_64_0.8_2025_05_03_18_35_48_163", 50000],
+]
+runs = [["LGATr_training_NoPID_Delphes_PU_PFfix_10_16_64_0.8_2025_05_03_18_35_53_134", 70000]]
+
+'''
+
+runs = [
+ ["GATr_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_06_27_898", 2000],
+ ["GATr_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_06_27_898", 4000],
+ ["GATr_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_06_27_898", 10000],
+ ["GATr_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_06_27_898", 20000],
+ ["GATr_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_06_27_898", 40000],
+ ["GATr_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_06_27_898", 50000],
+]
+
+
+# IRC loss on L-GATr and its variants
+
+runs = [
+ # ["LGATr_Aug_2025_05_06_10_08_05_956", 15000], # LGATr with the ghosts training
+ #["Delphes_Aug_IRCSplit_CONT_2025_05_07_11_00_18_422", 6180] # LGATr with the ghosts + IRC_split training
+ #["Delphes_Aug_IRC_Split_and_Noise_2025_05_07_14_43_13_968", 15000]
+ #["Delphes_Aug_IRCSplit_CONT_2025_05_07_11_00_18_422", 1320], ["LGATr_Aug_2025_05_06_10_08_05_956", 10140]
+ ["LGATr_Aug_2025_05_06_10_08_05_956", 5040], ["Delphes_Aug_IRCSplit_2025_05_06_10_09_00_567", 5040]
+]
+
+
+# For the smaller dataset (500 event training) evaluation
+run_ids = [
+ #"GATr_training_NoPID_Delphes_PU_CoordFix_SmallDS_10_16_64_0.8_2025_05_05_16_24_13_579",
+ "LGATr_training_NoPID_Delphes_PU_PFfix_SmallDS_10_16_64_0.8_2025_05_05_16_24_16_127",
+ #"Transformer_training_NoPID_Delphes_PU_CoordFix_SmallDS_10_16_64_0.8_2025_05_05_16_24_19_936"
+]
+
+runs = []
+for r in run_ids:
+ for step in [10000,12000,16000, 20000]:
+ runs.append([r, step])
+
+runs = [
+ #["Delphes_Aug_IRCSplit_50k_from10k_2025_05_11_14_08_49_675", 12900], # step 26k
+ #["Delphes_Aug_IRCSplit_50k_2025_05_09_15_22_38_956", 9960],
+ #["LGATr_Aug_50k_2025_05_09_15_25_32_34", 25020],
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_10_16_64_0.8_2025_05_03_18_35_53_134", 50000]
+]
+
+
+# Different training DS study
+'''runs = [
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_10_16_64_0.8_2025_05_03_18_35_53_134", 50000], # 900_03
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_16_19_44_46_795", 50000], # 700_07
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_16_19_46_57_48", 50000], # QCD
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_16_21_04_26_991", 50000], # 700_07 and 900_03
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_16_21_04_26_937", 50000] # 700_07, 900_03 and QCD
+]'''
+
+#runs = [["Delphes_Aug_IRCSplit_50k_SN_from3kFT_2025_05_16_14_07_29_474", 22020]]
+
+'''runs = [
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_SmallDS_10_16_64_0.8_2025_05_09_15_56_50_875", 100],
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_SmallDS_10_16_64_0.8_2025_05_09_15_56_50_875", 500],
+ ["LGATr_training_NoPID_Delphes_PU_PFfix_SmallDS_10_16_64_0.8_2025_05_09_15_56_50_875", 1000],
+ ["Transformer_training_NoPID_Delphes_PU_CoordFix_SmallDS_10_16_64_0.8_2025_05_09_15_56_50_216", 100],
+ ["Transformer_training_NoPID_Delphes_PU_CoordFix_SmallDS_10_16_64_0.8_2025_05_09_15_56_50_216", 500],
+ ["Transformer_training_NoPID_Delphes_PU_CoordFix_SmallDS_10_16_64_0.8_2025_05_09_15_56_50_216", 1000],
+ ["GATr_training_NoPID_Delphes_PU_CoordFix_SmallDS_10_16_64_0.8_2025_05_09_15_34_13_531", 100],
+ ["GATr_training_NoPID_Delphes_PU_CoordFix_SmallDS_10_16_64_0.8_2025_05_09_15_34_13_531", 500],
+ ["GATr_training_NoPID_Delphes_PU_CoordFix_SmallDS_10_16_64_0.8_2025_05_09_15_34_13_531", 1000]
+]
+'''
+
+runs = [
+ # GP RUNS
+ # ["GP_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_19_21_29_06_946", 24000],
+ #["GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_19_21_38_20_376", 24000],
+ ["GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_20_13_12_54_359", 24000],
+ ["GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_20_13_13_00_503", 24000],
+]
+
+'''
+runs = [ #GP IRC S
+ ["GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_20_15_29_30_29", 24000],
+ ["GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_20_15_29_28_959", 24000],
+ # The above two have been started, the below two not yet
+ ["GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_20_15_11_35_476", 24000],
+ ["GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_20_15_11_20_735", 24000]
+]'''
+
+runs = [ # GP_IRC_SN TRAININGS
+ ["GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_24_23_00_54_948", 24000],
+ ["GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_24_23_00_56_910", 24000],
+ ["GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_24_23_01_01_212", 24000],
+ ["GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_24_23_01_07_703", 24000]
+]
+runs =[["Delphes_Aug_IRCSplit_50k_SN_from3kFT_2025_05_16_14_07_29_474", 21060]] #This SN starts from 3k
+
+final_models = [
+ # dataset, loss, run name, step
+ # GP_IRC_SN
+ ["900_03", "GP_IRC_SN", "Delphes_Aug_IRCSplit_50k_SN_from3kFT_2025_05_16_14_07_29_474", 21060],
+ ["QCD", "GP_IRC_SN" "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_24_23_00_54_948", 24000],
+ ["700_07+900_03+QCD", "GP_IRC_SN", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_24_23_00_56_910", 24000],
+ ["700_07+900_03", "GP_IRC_SN", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_24_23_01_01_212", 24000],
+ ["700_07", "GP_IRC_SN", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_24_23_01_07_703", 24000]
+
+ # GP_IRC_S
+ ["700_07+900_03", "GP_IRC_S", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_20_15_29_30_29", 24000],
+ ["700_07+900_03+QCD", "GP_IRC_S", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_20_15_29_28_959", 24000],
+ ["700_07", "GP_IRC_S", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_20_15_11_35_476", 24000],
+ ["QCD", "GP_IRC_S", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_20_15_11_20_735", 24000],
+ ["900_03", "GP_IRC_S", "Delphes_Aug_IRCSplit_50k_from10k_2025_05_11_14_08_49_675", 9960],
+
+ # GP
+ ["900_03", "GP", "LGATr_Aug_50k_2025_05_09_15_25_32_34", 24000],
+ ["700_07", "GP", "GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_19_21_38_20_376", 24000],
+ ["700_07+900_03", "GP", "GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_20_13_13_00_503", 24000],
+ ["700_07+900_03+QCD", "GP", "GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_20_13_12_54_359", 24000],
+ ["QCD", "GP", "GP_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_19_21_29_06_946", 24000]
+
+ # Base training
+ ["900_03", "base", "LGATr_training_NoPID_Delphes_PU_PFfix_10_16_64_0.8_2025_05_03_18_35_53_134", 50000],
+ ["700_07", "base", "LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_16_19_44_46_795", 50000],
+ ["QCD", "base", "LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_16_19_46_57_48", 50000],
+ ["700_07+900_03", "base", "LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_16_21_04_26_991", 50000],
+ ["700_07+900_03+QCD", "base", "LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_16_21_04_26_937", 50000]
+]
+
+test_files = [ "PFNano_s-channel_mMed-1000_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-1000_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-1000_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-1100_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-1100_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-1100_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-1200_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-1200_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-700_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-800_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-800_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-900_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000",
+ "PFNano_s-channel_mMed-900_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000"
+ ]
+
+
+test_files_smaller = ["PFNano_s-channel_mMed-1000_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000",
+"PFNano_s-channel_mMed-1000_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000",
+"PFNano_s-channel_mMed-1000_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000",
+"PFNano_s-channel_mMed-1100_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000",
+"PFNano_s-channel_mMed-1100_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000",
+"PFNano_s-channel_mMed-1100_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000",
+"PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000",
+"PFNano_s-channel_mMed-1200_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000",
+"PFNano_s-channel_mMed-1200_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000",
+"PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000",
+"PFNano_s-channel_mMed-700_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000",
+"PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000",
+"PFNano_s-channel_mMed-800_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"]
+
+test_files_delphes = ['SVJ_mZprime-1100_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-700_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-1500_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-1000_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-1200_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-900_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-1400_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-1100_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-1300_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-700_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-800_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-1500_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-1000_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-1400_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-1500_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-800_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-1300_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-1100_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-1200_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-900_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-1300_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-700_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-800_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-1400_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-900_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-1200_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-1000_mDark-20_rinv-0.3_alpha-peak']
+test_files_delphes = 'SVJ_mZprime-1000_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-1000_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-1000_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-1100_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-1100_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-1100_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-1200_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-1200_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-1200_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-700_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-700_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-700_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-800_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-800_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-800_mDark-20_rinv-0.7_alpha-peak', 'SVJ_mZprime-900_mDark-20_rinv-0.3_alpha-peak', 'SVJ_mZprime-900_mDark-20_rinv-0.5_alpha-peak', 'SVJ_mZprime-900_mDark-20_rinv-0.7_alpha-peak'
+
+
+#test_files = ["Feb26_2025_E1000_N500_noPartonFilter_C_F/" + x for x in test_files]
+#test_files = ["Feb26_2025_E1000_N500_noPartonFilter_GluonFixF/" + x for x in test_files]
+test_files = ["Feb26_2025_E1000_N500_noPartonFilter_GluonFix_Small2K_F_part0/" + x for x in test_files]
+#test_files = ["Feb26_2025_E1000_N500_folders/" + x for x in test_files_smaller]
+test_files = ["Delphes_020425_test_PU_PFfix_part0/" + x for x in test_files_delphes] # Delphes test files
+
+#print("QCD")
+#test_files = ["QCD_test_part0/qcd_test"]
+print("------")
+
+for run, step in runs:
+ #for level in ["-pl", ""]:
+ #for level in ["-pl", ""]:
+ for level in ["-gl", "", "-pl"]:
+ #for level in ["-pl"]:
+ #for level in ["-gl", "-pl", ""]:
+ #for level in [""]:
+ #for aug_suffix in ["-aug-soft"]:
+ aug_suffixes = ["-aug-soft"]
+ if step >= 40000:
+ aug_suffixes = [""] # without ghosts for the base clustering
+ #aug_suffixes = [""]
+ for aug_suffix in aug_suffixes:
+ print("python -m scripts.generate_test_jobs -run {} -step {} --steps-from-zero -template t3 -tag DelphesPFfix_FullDataset_TrainDSstudy {} --custom-test-files \"{}\" {} ".format(run, step, level, " ".join(test_files), aug_suffix))
+print("-----")
diff --git a/notebooks/histograms_debug.ipynb b/notebooks/histograms_debug.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..6df723a8da29fa65283050e7e96118239131a1b2
--- /dev/null
+++ b/notebooks/histograms_debug.ipynb
@@ -0,0 +1,497 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T12:09:23.794375Z",
+ "start_time": "2025-03-26T12:09:23.764205Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# This file is for quick plotting of histograms of particle properties, to debug potential issues with cuts etc.\n",
+ "import torch\n",
+ "import sys\n",
+ "import os.path as osp\n",
+ "import os\n",
+ "import sys\n",
+ "import numpy as np\n",
+ "from src.dataset.dataset import SimpleIterDataset, EventDataset\n",
+ "from src.utils.utils import to_filelist\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import matplotlib\n",
+ "matplotlib.rc('font', size=13)\n",
+ "from src.plotting.plot_event import plot_event_comparison\n",
+ "from src.dataset.functions_data import concat_events\n",
+ "from src.utils.paths import get_path\n",
+ "from dotenv import load_dotenv\n",
+ "load_dotenv()\n"
+ ],
+ "id": "6bae9707acf4a848",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 8
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T12:09:24.032716Z",
+ "start_time": "2025-03-26T12:09:24.025330Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "def remove_from_list(lst):\n",
+ " out = []\n",
+ " for item in lst:\n",
+ " if item in [\"hgcal\", \"data.txt\", \"test_file.root\"]:\n",
+ " continue\n",
+ " out.append(item)\n",
+ " return out\n",
+ "\n",
+ "#path = \"/eos/user/g/gkrzmanc/jetclustering/data/SVJ_std_UL2018_scouting_test_large/SVJ_mMed-700GeV_mDark-20GeV_rinv-0.7_alpha-peak\"\n",
+ "def get_iter(path_to_ds):\n",
+ " return iter(EventDataset.from_directory(path_to_ds, aug_soft=1))\n",
+ "\n"
+ ],
+ "id": "e7a7ef680143801e",
+ "outputs": [],
+ "execution_count": 9
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T12:09:25.100190Z",
+ "start_time": "2025-03-26T12:09:24.892228Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "dataset = get_iter(get_path(\"/work/gkrzmanc/jetclustering/preprocessed_data/Feb26_2025_E1000_N500_noPartonFilter_C_F/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000\", \"preprocessed_data\"))",
+ "id": "1549361c5b028634",
+ "outputs": [],
+ "execution_count": 10
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T12:09:40.759101Z",
+ "start_time": "2025-03-26T12:09:40.266868Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "e = next(dataset)",
+ "id": "f30e59b8aae67705",
+ "outputs": [],
+ "execution_count": 12
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T12:09:49.754801Z",
+ "start_time": "2025-03-26T12:09:49.730129Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "e.pfcands.pt",
+ "id": "2ab3b47ae54cff1",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "tensor([1.0700e+02, 4.8500e+01, 3.3562e+01, 2.3875e+01, 1.8922e+01, 1.8766e+01,\n",
+ " 1.6797e+01, 1.6500e+01, 1.6406e+01, 1.5891e+01, 1.3500e+01, 1.3406e+01,\n",
+ " 1.1125e+01, 1.1117e+01, 1.1102e+01, 9.8750e+00, 9.7266e+00, 9.4219e+00,\n",
+ " 8.6875e+00, 8.3203e+00, 7.5938e+00, 7.4844e+00, 7.4453e+00, 7.2773e+00,\n",
+ " 6.1211e+00, 5.0430e+00, 4.9062e+00, 4.5938e+00, 4.5391e+00, 4.3047e+00,\n",
+ " 3.9805e+00, 3.8125e+00, 3.7480e+00, 3.6621e+00, 3.6250e+00, 3.2383e+00,\n",
+ " 3.2266e+00, 3.1133e+00, 2.9336e+00, 2.9160e+00, 2.8828e+00, 2.7891e+00,\n",
+ " 2.7793e+00, 2.7305e+00, 2.6016e+00, 2.5352e+00, 2.5098e+00, 2.4316e+00,\n",
+ " 2.3555e+00, 2.3281e+00, 2.2852e+00, 2.2480e+00, 2.2461e+00, 2.1680e+00,\n",
+ " 2.1250e+00, 2.0801e+00, 2.0234e+00, 2.0195e+00, 2.0195e+00, 2.0020e+00,\n",
+ " 1.9668e+00, 1.9453e+00, 1.9082e+00, 1.8906e+00, 1.8867e+00, 1.8799e+00,\n",
+ " 1.8760e+00, 1.8613e+00, 1.8350e+00, 1.8271e+00, 1.8115e+00, 1.8096e+00,\n",
+ " 1.8037e+00, 1.7969e+00, 1.7891e+00, 1.7803e+00, 1.7305e+00, 1.7246e+00,\n",
+ " 1.6738e+00, 1.6709e+00, 1.6416e+00, 1.6338e+00, 1.5762e+00, 1.5371e+00,\n",
+ " 1.5303e+00, 1.5293e+00, 1.4932e+00, 1.4863e+00, 1.4727e+00, 1.4355e+00,\n",
+ " 1.4287e+00, 1.4209e+00, 1.4082e+00, 1.3994e+00, 1.3818e+00, 1.3730e+00,\n",
+ " 1.3564e+00, 1.3271e+00, 1.3232e+00, 1.3184e+00, 1.3076e+00, 1.3037e+00,\n",
+ " 1.2930e+00, 1.2920e+00, 1.2900e+00, 1.2881e+00, 1.2842e+00, 1.2734e+00,\n",
+ " 1.2686e+00, 1.2676e+00, 1.2568e+00, 1.2490e+00, 1.2451e+00, 1.2285e+00,\n",
+ " 1.2236e+00, 1.2227e+00, 1.2090e+00, 1.1953e+00, 1.1826e+00, 1.1758e+00,\n",
+ " 1.1641e+00, 1.1406e+00, 1.1270e+00, 1.1143e+00, 1.1133e+00, 1.1055e+00,\n",
+ " 1.1006e+00, 1.0977e+00, 1.0830e+00, 1.0674e+00, 1.0664e+00, 1.0654e+00,\n",
+ " 1.0498e+00, 1.0488e+00, 1.0410e+00, 1.0381e+00, 1.0225e+00, 1.0205e+00,\n",
+ " 1.0146e+00, 1.0098e+00, 1.0088e+00, 1.0010e+00, 9.9463e-01, 9.9023e-01,\n",
+ " 9.8926e-01, 9.8242e-01, 9.7803e-01, 9.7607e-01, 9.7559e-01, 9.5264e-01,\n",
+ " 9.3848e-01, 9.3652e-01, 9.3164e-01, 9.2188e-01, 9.1748e-01, 9.1455e-01,\n",
+ " 9.1211e-01, 9.0430e-01, 8.9844e-01, 8.8232e-01, 8.7695e-01, 8.7061e-01,\n",
+ " 8.6475e-01, 8.6426e-01, 8.5742e-01, 8.5352e-01, 8.4668e-01, 8.3691e-01,\n",
+ " 8.2666e-01, 8.2324e-01, 8.1592e-01, 8.1445e-01, 8.1152e-01, 8.1152e-01,\n",
+ " 8.1104e-01, 8.0713e-01, 8.0176e-01, 7.9785e-01, 7.9590e-01, 7.8613e-01,\n",
+ " 7.8320e-01, 7.6025e-01, 7.5684e-01, 7.5635e-01, 7.5537e-01, 7.4512e-01,\n",
+ " 7.4414e-01, 7.3730e-01, 7.3438e-01, 7.3340e-01, 7.2998e-01, 7.2168e-01,\n",
+ " 7.2070e-01, 7.1777e-01, 7.1533e-01, 7.1387e-01, 7.1191e-01, 7.0703e-01,\n",
+ " 6.9043e-01, 6.8799e-01, 6.8701e-01, 6.8457e-01, 6.8359e-01, 6.8262e-01,\n",
+ " 6.8213e-01, 6.8213e-01, 6.8018e-01, 6.7725e-01, 6.6797e-01, 6.6602e-01,\n",
+ " 6.6504e-01, 6.5869e-01, 6.5381e-01, 6.4600e-01, 6.3428e-01, 6.3232e-01,\n",
+ " 6.2305e-01, 6.1865e-01, 6.1816e-01, 6.1572e-01, 6.1523e-01, 6.1475e-01,\n",
+ " 6.1182e-01, 6.0693e-01, 5.1716e-02, 2.4676e-01, 2.3036e-01, 1.1734e-01,\n",
+ " 2.2332e-01, 1.9172e-01, 9.8568e-02, 2.3186e-01, 1.4614e-01, 2.7059e-01,\n",
+ " 3.6877e-02, 4.5499e-01, 4.1185e-01, 2.8524e-01, 4.2887e-01, 4.8195e-01,\n",
+ " 7.3051e-02, 3.2280e-01, 4.9904e-01, 4.9419e-01, 3.0960e-01, 8.1450e-02,\n",
+ " 2.9993e-01, 2.0991e-02, 1.1548e-01, 4.7894e-01, 1.7861e-01, 3.2643e-01,\n",
+ " 1.5481e-01, 4.7495e-01, 3.6971e-01, 1.7823e-01, 4.0005e-01, 7.1919e-02,\n",
+ " 2.0831e-01, 1.2618e-01, 3.4819e-01, 6.9174e-02, 2.1057e-01, 1.5279e-01,\n",
+ " 2.6304e-01, 1.8795e-01, 3.5908e-01, 3.1797e-02, 3.2431e-01, 1.3067e-01,\n",
+ " 1.4898e-01, 4.0412e-01, 4.7867e-01, 1.7194e-01, 4.1687e-01, 6.9916e-02,\n",
+ " 3.2431e-01, 3.8050e-01, 9.4869e-02, 2.2448e-01, 4.4850e-01, 6.9718e-02,\n",
+ " 2.8686e-02, 3.0348e-01, 2.2906e-01, 4.0337e-01, 4.6326e-01, 1.6359e-01,\n",
+ " 2.0643e-01, 2.5341e-01, 3.0231e-01, 4.9225e-01, 3.5472e-01, 2.0698e-01,\n",
+ " 1.4661e-01, 4.7342e-01, 8.5063e-02, 3.6573e-01, 4.6419e-01, 3.3904e-01,\n",
+ " 2.2307e-01, 1.1552e-01, 1.9639e-01, 3.5930e-01, 3.3178e-01, 4.6543e-01,\n",
+ " 4.3609e-01, 4.1175e-01, 4.5750e-01, 1.5264e-01, 1.9737e-01, 2.0235e-01,\n",
+ " 2.8902e-01, 3.4074e-01, 1.5762e-01, 2.9342e-02, 2.1163e-01, 1.6809e-01,\n",
+ " 4.7225e-01, 4.4637e-01, 4.3295e-01, 3.3344e-01, 1.8526e-01, 2.8345e-01,\n",
+ " 4.1131e-01, 6.7333e-02, 4.0452e-01, 3.9766e-02, 4.1188e-01, 4.0763e-01,\n",
+ " 4.4484e-02, 3.2104e-01, 2.6118e-01, 1.0151e-01, 9.1222e-02, 3.9116e-01,\n",
+ " 2.9249e-01, 4.9184e-01, 4.9148e-01, 4.9648e-01, 7.6935e-02, 4.7036e-01,\n",
+ " 1.3739e-01, 2.3994e-01, 3.8356e-01, 1.1774e-01, 2.9183e-01, 1.0919e-01,\n",
+ " 7.0273e-02, 7.5948e-02, 1.9167e-01, 2.2234e-02, 2.2393e-01, 3.3881e-01,\n",
+ " 2.1281e-01, 6.1181e-02, 5.0091e-02, 1.5350e-01, 1.0127e-01, 4.8325e-01,\n",
+ " 9.2591e-02, 4.0662e-01, 3.0133e-01, 2.9326e-01, 2.6580e-01, 4.8645e-01,\n",
+ " 1.9465e-01, 3.9820e-01, 2.8654e-01, 2.0990e-01, 4.7862e-01, 3.0719e-01,\n",
+ " 7.7080e-02, 2.2042e-01, 3.9516e-01, 3.5300e-01, 4.5984e-01, 1.4450e-01,\n",
+ " 3.8393e-01, 2.4074e-01, 2.9533e-01, 4.7842e-01, 4.9006e-01, 4.3356e-01,\n",
+ " 1.9237e-01, 4.4610e-01, 3.2653e-01, 2.2640e-01, 3.7156e-02, 3.8966e-01,\n",
+ " 2.6101e-01, 3.9737e-01, 3.7905e-01, 4.0091e-01, 1.6431e-01, 4.0438e-01,\n",
+ " 2.8345e-01, 2.4720e-01, 3.4406e-01, 3.0252e-02, 6.9112e-02, 1.6025e-01,\n",
+ " 4.9184e-01, 8.7078e-02, 1.7869e-01, 4.4505e-02, 1.7901e-01, 1.7376e-01,\n",
+ " 4.7447e-01, 4.2567e-01, 2.0373e-01, 3.1889e-02, 4.1889e-01, 3.3706e-01,\n",
+ " 9.3135e-02, 4.9811e-01, 6.8112e-02, 4.3621e-01, 1.6125e-01, 2.2897e-01,\n",
+ " 4.0182e-01, 3.4520e-01, 4.7017e-01, 3.1815e-01, 6.6949e-02, 4.4449e-01,\n",
+ " 3.8919e-01, 3.6170e-01, 4.5792e-02, 2.1019e-01, 1.0037e-01, 4.1451e-01,\n",
+ " 3.5625e-01, 4.4388e-01, 4.8396e-01, 3.9188e-01, 4.9723e-01, 3.1509e-01,\n",
+ " 3.7822e-02, 2.6841e-02, 1.8421e-01, 4.1527e-01, 4.3574e-01, 4.8119e-01,\n",
+ " 5.1258e-02, 4.1394e-02, 4.5838e-01, 1.6642e-01, 2.8783e-01, 4.9157e-01,\n",
+ " 2.1222e-01, 3.3962e-01, 2.1242e-01, 3.8873e-01, 2.7330e-01, 1.3401e-01,\n",
+ " 1.5023e-01, 1.4387e-01, 2.7551e-01, 3.5753e-01, 4.7565e-01, 3.5316e-01,\n",
+ " 3.9497e-01, 1.0108e-01, 1.9955e-01, 2.1861e-01, 3.4946e-01, 1.6203e-01,\n",
+ " 1.6558e-01, 1.9083e-01, 4.0894e-01, 2.9724e-01, 5.6133e-02, 5.7558e-02,\n",
+ " 1.9822e-01, 3.8796e-01, 3.5057e-01, 3.5983e-01, 3.8826e-01, 1.5783e-01,\n",
+ " 2.8316e-01, 2.8081e-01, 3.7502e-01, 4.7930e-01, 1.5344e-01, 4.0078e-01,\n",
+ " 3.3679e-01, 2.9851e-01, 3.9194e-01, 4.7314e-01, 3.7612e-02, 9.0752e-02,\n",
+ " 3.8302e-01, 6.0220e-02, 2.6774e-01, 1.2553e-01, 1.5166e-01, 3.5688e-01,\n",
+ " 3.4493e-02, 4.3919e-01, 2.3335e-01, 2.6115e-01, 2.7922e-01, 3.2986e-01,\n",
+ " 1.8553e-01, 6.8532e-02, 1.7282e-01, 1.0071e-01, 2.8694e-01, 1.7265e-01,\n",
+ " 4.7987e-01, 4.8355e-01, 3.1766e-01, 3.1640e-01, 4.9298e-01, 4.4590e-01,\n",
+ " 3.8723e-01, 1.7052e-01, 1.9546e-01, 1.1661e-01, 2.5383e-01, 4.9538e-01,\n",
+ " 4.5783e-01, 7.6808e-02, 3.2091e-02, 4.5135e-01, 2.7784e-01, 1.1609e-01,\n",
+ " 3.4335e-01, 3.2923e-01, 7.8601e-02, 1.4461e-01, 4.8837e-02, 1.2073e-01,\n",
+ " 8.3507e-02, 1.1275e-01, 3.4902e-01, 4.3760e-02, 6.8890e-02, 8.4403e-02,\n",
+ " 1.7194e-01, 1.6340e-01, 1.4243e-01, 3.8026e-01, 4.9905e-01, 2.7631e-01,\n",
+ " 4.7322e-01, 2.1037e-01, 7.1208e-02, 2.1621e-01, 1.6214e-01, 2.5684e-01,\n",
+ " 3.3538e-01, 2.4130e-01, 4.6888e-01, 4.4469e-01, 3.5695e-01, 2.5505e-01,\n",
+ " 8.3210e-02, 2.1057e-01, 3.5811e-01, 1.5675e-01, 6.9914e-02, 4.5579e-01,\n",
+ " 3.6034e-01, 3.1533e-01, 4.0040e-01, 4.2111e-01, 2.5206e-01, 4.4297e-01,\n",
+ " 4.5988e-01, 1.5034e-01, 3.1162e-01, 2.7276e-01, 2.7821e-01, 4.7008e-01,\n",
+ " 1.6649e-01, 4.9205e-01, 4.5302e-01, 2.4019e-01, 4.1238e-01, 3.8914e-01,\n",
+ " 3.4539e-01, 1.7352e-01, 1.1430e-01, 3.4233e-01, 4.2463e-01, 2.7801e-02,\n",
+ " 3.2855e-01, 2.3258e-01, 4.5108e-01, 1.7431e-01, 2.4761e-01, 2.6709e-01,\n",
+ " 8.7411e-02, 3.6219e-01, 4.1863e-01, 4.7796e-02, 1.5987e-01, 3.8261e-02,\n",
+ " 4.7914e-01, 3.4024e-01, 4.8282e-01, 2.7512e-01, 4.0499e-01, 1.9972e-01,\n",
+ " 1.8983e-01, 2.0157e-01, 3.3577e-01, 1.9254e-01, 4.5218e-01, 4.9197e-01,\n",
+ " 3.4605e-02, 1.1294e-01, 7.3880e-02, 4.0335e-02, 1.2932e-01, 2.3446e-01,\n",
+ " 4.2176e-01, 1.2648e-01, 2.5709e-01, 4.6622e-01, 3.4026e-01, 4.0308e-01,\n",
+ " 2.8448e-01, 4.9062e-01, 3.0256e-01, 4.1845e-02, 1.1503e-01, 2.1429e-01,\n",
+ " 3.0861e-01, 3.9053e-01, 2.1828e-01, 3.6083e-01, 3.9914e-01, 1.7228e-01,\n",
+ " 4.9005e-01, 3.3184e-01, 4.4288e-01, 2.8685e-01, 3.7597e-01, 3.8986e-01,\n",
+ " 4.5596e-01, 9.2168e-02, 2.8798e-01, 2.2562e-01, 4.6312e-01, 7.0445e-02,\n",
+ " 4.9164e-01, 4.4022e-01, 5.5437e-02, 2.5566e-01, 3.6443e-01, 3.7431e-01,\n",
+ " 4.5512e-01, 4.0394e-01, 1.6925e-01, 2.5925e-01, 3.5686e-01, 8.6450e-02,\n",
+ " 1.1312e-01, 2.5090e-01, 1.6316e-01, 4.3403e-01, 3.0141e-01, 1.8736e-01,\n",
+ " 4.2744e-01, 4.0634e-01, 4.9921e-01, 4.2671e-01, 2.1894e-01, 8.1199e-02,\n",
+ " 4.2351e-01, 4.8684e-02, 1.8813e-01, 4.6147e-01, 4.8117e-01, 3.2747e-01,\n",
+ " 3.5055e-01, 4.0378e-02, 2.6695e-01, 2.8250e-01, 1.8325e-01, 5.2926e-02,\n",
+ " 1.2988e-01, 1.9183e-01, 2.2887e-01, 3.0364e-01, 3.6675e-01, 1.7246e-01,\n",
+ " 1.7790e-01, 2.9452e-02, 3.9620e-02, 1.4375e-01, 3.7532e-01, 3.2159e-01,\n",
+ " 3.8950e-01, 3.8908e-01, 4.3115e-01, 3.6575e-01, 4.8993e-01, 4.5144e-01,\n",
+ " 3.0162e-01, 3.0232e-01, 3.6448e-02, 4.9929e-01, 8.3156e-02, 3.7537e-01,\n",
+ " 4.1409e-01, 1.9907e-01, 1.1449e-01, 6.7405e-02, 3.7933e-01, 2.3727e-01,\n",
+ " 3.6258e-01, 4.5940e-01, 9.0360e-02, 4.6120e-01, 2.1758e-01, 1.6653e-01,\n",
+ " 4.7267e-01, 4.9551e-01, 1.1547e-01, 3.3528e-01, 7.1118e-02, 3.3244e-01,\n",
+ " 4.1711e-01, 3.4856e-01, 2.2032e-01, 2.0387e-01, 2.0870e-01, 3.0306e-01,\n",
+ " 4.4315e-01, 4.6595e-01, 4.5694e-02, 1.0718e-01, 7.3868e-02, 1.1280e-01,\n",
+ " 1.8637e-01, 2.6314e-01, 3.2214e-01, 3.7143e-01, 4.4725e-01, 4.9476e-01,\n",
+ " 3.3817e-01, 4.2577e-01, 3.9346e-01, 1.6762e-01, 4.4033e-01, 4.0526e-02,\n",
+ " 2.0176e-02, 1.5139e-01, 2.4181e-01, 3.2641e-01, 6.8850e-02, 3.4304e-01,\n",
+ " 4.0487e-01, 1.0895e-01, 2.1926e-01, 2.6959e-01, 2.3687e-01, 4.0392e-01,\n",
+ " 4.8105e-01, 4.0350e-01, 5.7437e-02, 4.0637e-01, 5.1966e-02, 1.3327e-01,\n",
+ " 9.3487e-02, 1.1481e-01, 2.7359e-01, 3.4241e-01, 2.4575e-01, 4.8065e-01,\n",
+ " 1.3534e-01, 3.8631e-01, 4.3769e-01], dtype=torch.float64)"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 14
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T11:04:20.343152Z",
+ "start_time": "2025-03-26T11:04:15.037372Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "parton_eta, parton_pt = [], []\n",
+ "gen_eta, gen_pt = [], []\n",
+ "pfcand_eta, pfcand_phi = [], []\n",
+ "pfcand_pt = []\n",
+ "parton_phi = []\n",
+ "gen_phi = []\n",
+ "from tqdm import tqdm\n",
+ "for event in tqdm(dataset):\n",
+ " parton_eta += event.final_parton_level_particles.eta.tolist()\n",
+ " parton_pt += event.final_parton_level_particles.pt.tolist()\n",
+ " gen_eta += event.final_gen_particles.eta.tolist()\n",
+ " gen_pt += event.final_gen_particles.pt.tolist()\n",
+ " pfcand_eta += event.pfcands.eta.tolist()\n",
+ " pfcand_phi += event.pfcands.phi.tolist()\n",
+ " pfcand_pt += event.pfcands.pt.tolist()\n",
+ " parton_phi += event.final_parton_level_particles.phi.tolist()\n",
+ " gen_phi += event.final_gen_particles.phi.tolist()\n",
+ " pfcand_phi += event.pfcands.phi.tolist()\n"
+ ],
+ "id": "d867de5b313084ea",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "717it [00:04, 164.43it/s]\n"
+ ]
+ },
+ {
+ "ename": "KeyboardInterrupt",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mKeyboardInterrupt\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[4], line 8\u001B[0m\n\u001B[1;32m 6\u001B[0m gen_phi \u001B[38;5;241m=\u001B[39m []\n\u001B[1;32m 7\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21;01mtqdm\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;28;01mimport\u001B[39;00m tqdm\n\u001B[0;32m----> 8\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m event \u001B[38;5;129;01min\u001B[39;00m tqdm(dataset):\n\u001B[1;32m 9\u001B[0m parton_eta \u001B[38;5;241m+\u001B[39m\u001B[38;5;241m=\u001B[39m event\u001B[38;5;241m.\u001B[39mfinal_parton_level_particles\u001B[38;5;241m.\u001B[39meta\u001B[38;5;241m.\u001B[39mtolist()\n\u001B[1;32m 10\u001B[0m parton_pt \u001B[38;5;241m+\u001B[39m\u001B[38;5;241m=\u001B[39m event\u001B[38;5;241m.\u001B[39mfinal_parton_level_particles\u001B[38;5;241m.\u001B[39mpt\u001B[38;5;241m.\u001B[39mtolist()\n",
+ "File \u001B[0;32m/work/gkrzmanc/1gatr/lib/python3.10/site-packages/tqdm/std.py:1181\u001B[0m, in \u001B[0;36mtqdm.__iter__\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m 1178\u001B[0m time \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_time\n\u001B[1;32m 1180\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[0;32m-> 1181\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m obj \u001B[38;5;129;01min\u001B[39;00m iterable:\n\u001B[1;32m 1182\u001B[0m \u001B[38;5;28;01myield\u001B[39;00m obj\n\u001B[1;32m 1183\u001B[0m \u001B[38;5;66;03m# Update and possibly print the progressbar.\u001B[39;00m\n\u001B[1;32m 1184\u001B[0m \u001B[38;5;66;03m# Note: does not call self.update(1) for speed optimisation.\u001B[39;00m\n",
+ "File \u001B[0;32m/work/gkrzmanc/jetclustering/code/src/dataset/dataset.py:657\u001B[0m, in \u001B[0;36mEventDataset.get_iter\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m 655\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mi \u001B[38;5;241m=\u001B[39m \u001B[38;5;241m0\u001B[39m\n\u001B[1;32m 656\u001B[0m \u001B[38;5;28;01mwhile\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mi \u001B[38;5;241m<\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mn_events:\n\u001B[0;32m--> 657\u001B[0m \u001B[38;5;28;01myield\u001B[39;00m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mget_idx\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mi\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 658\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mi \u001B[38;5;241m+\u001B[39m\u001B[38;5;241m=\u001B[39m \u001B[38;5;241m1\u001B[39m\n",
+ "File \u001B[0;32m/work/gkrzmanc/jetclustering/code/src/dataset/dataset.py:494\u001B[0m, in \u001B[0;36mEventDataset.get_idx\u001B[0;34m(self, i)\u001B[0m\n\u001B[1;32m 492\u001B[0m end \u001B[38;5;241m=\u001B[39m {key: \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mmetadata[key \u001B[38;5;241m+\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m_batch_idx\u001B[39m\u001B[38;5;124m\"\u001B[39m][i \u001B[38;5;241m+\u001B[39m \u001B[38;5;241m1\u001B[39m] \u001B[38;5;28;01mfor\u001B[39;00m key \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mattrs}\n\u001B[1;32m 493\u001B[0m result \u001B[38;5;241m=\u001B[39m {key: \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mevents[key][start[key]:end[key]] \u001B[38;5;28;01mfor\u001B[39;00m key \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mattrs}\n\u001B[0;32m--> 494\u001B[0m result \u001B[38;5;241m=\u001B[39m {key: EventCollection\u001B[38;5;241m.\u001B[39mdeserialize(result[key], batch_number\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mNone\u001B[39;00m, \u001B[38;5;28mcls\u001B[39m\u001B[38;5;241m=\u001B[39mEvent\u001B[38;5;241m.\u001B[39mevt_collections[key]) \u001B[38;5;28;01mfor\u001B[39;00m\n\u001B[1;32m 495\u001B[0m key \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mattrs}\n\u001B[1;32m 496\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mfinal_parton_level_particles\u001B[39m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;129;01min\u001B[39;00m result:\n\u001B[1;32m 497\u001B[0m \u001B[38;5;66;03m#print(\"i=\", i)\u001B[39;00m\n\u001B[1;32m 498\u001B[0m \u001B[38;5;66;03m#print(\"BEFORE:\", len(result[\"final_parton_level_particles\"]))\u001B[39;00m\n\u001B[1;32m 499\u001B[0m result[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mfinal_parton_level_particles\u001B[39m\u001B[38;5;124m\"\u001B[39m] \u001B[38;5;241m=\u001B[39m filter_pfcands(result[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mfinal_parton_level_particles\u001B[39m\u001B[38;5;124m\"\u001B[39m])\n",
+ "File \u001B[0;32m/work/gkrzmanc/jetclustering/code/src/dataset/dataset.py:494\u001B[0m, in \u001B[0;36m\u001B[0;34m(.0)\u001B[0m\n\u001B[1;32m 492\u001B[0m end \u001B[38;5;241m=\u001B[39m {key: \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mmetadata[key \u001B[38;5;241m+\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m_batch_idx\u001B[39m\u001B[38;5;124m\"\u001B[39m][i \u001B[38;5;241m+\u001B[39m \u001B[38;5;241m1\u001B[39m] \u001B[38;5;28;01mfor\u001B[39;00m key \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mattrs}\n\u001B[1;32m 493\u001B[0m result \u001B[38;5;241m=\u001B[39m {key: \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mevents[key][start[key]:end[key]] \u001B[38;5;28;01mfor\u001B[39;00m key \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mattrs}\n\u001B[0;32m--> 494\u001B[0m result \u001B[38;5;241m=\u001B[39m {key: \u001B[43mEventCollection\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mdeserialize\u001B[49m\u001B[43m(\u001B[49m\u001B[43mresult\u001B[49m\u001B[43m[\u001B[49m\u001B[43mkey\u001B[49m\u001B[43m]\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mbatch_number\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mNone\u001B[39;49;00m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43mcls\u001B[39;49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mEvent\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mevt_collections\u001B[49m\u001B[43m[\u001B[49m\u001B[43mkey\u001B[49m\u001B[43m]\u001B[49m\u001B[43m)\u001B[49m \u001B[38;5;28;01mfor\u001B[39;00m\n\u001B[1;32m 495\u001B[0m key \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mattrs}\n\u001B[1;32m 496\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mfinal_parton_level_particles\u001B[39m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;129;01min\u001B[39;00m result:\n\u001B[1;32m 497\u001B[0m \u001B[38;5;66;03m#print(\"i=\", i)\u001B[39;00m\n\u001B[1;32m 498\u001B[0m \u001B[38;5;66;03m#print(\"BEFORE:\", len(result[\"final_parton_level_particles\"]))\u001B[39;00m\n\u001B[1;32m 499\u001B[0m result[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mfinal_parton_level_particles\u001B[39m\u001B[38;5;124m\"\u001B[39m] \u001B[38;5;241m=\u001B[39m filter_pfcands(result[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mfinal_parton_level_particles\u001B[39m\u001B[38;5;124m\"\u001B[39m])\n",
+ "File \u001B[0;32m/work/gkrzmanc/jetclustering/code/src/dataset/functions_data.py:488\u001B[0m, in \u001B[0;36mEventCollection.deserialize\u001B[0;34m(data_matrix, batch_number, cls)\u001B[0m\n\u001B[1;32m 485\u001B[0m data[key] \u001B[38;5;241m=\u001B[39m data_matrix[:, i]\n\u001B[1;32m 486\u001B[0m \u001B[38;5;66;03m#if key == \"pid\" and pid_filter:\u001B[39;00m\n\u001B[1;32m 487\u001B[0m \u001B[38;5;66;03m# filt = ~np.bool(np.abs(data[key]) >= 10000 + (np.abs(data[key]) >= 50 * np.abs(data[key]) <= 60))\u001B[39;00m\n\u001B[0;32m--> 488\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43mcls\u001B[39;49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mdata\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mbatch_number\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mbatch_number\u001B[49m\u001B[43m)\u001B[49m\n",
+ "File \u001B[0;32m/work/gkrzmanc/jetclustering/code/src/dataset/functions_data.py:716\u001B[0m, in \u001B[0;36mEventPFCands.__init__\u001B[0;34m(self, pt, eta, phi, mass, charge, pid, jet_idx, pfcands_idx, batch_number, offline, pf_cand_jet_idx, status, pid_filter)\u001B[0m\n\u001B[1;32m 709\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mpxyz \u001B[38;5;241m=\u001B[39m torch\u001B[38;5;241m.\u001B[39mstack(\n\u001B[1;32m 710\u001B[0m (\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mp \u001B[38;5;241m*\u001B[39m torch\u001B[38;5;241m.\u001B[39mcos(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mphi) \u001B[38;5;241m*\u001B[39m torch\u001B[38;5;241m.\u001B[39msin(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mtheta),\n\u001B[1;32m 711\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mp \u001B[38;5;241m*\u001B[39m torch\u001B[38;5;241m.\u001B[39msin(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mphi) \u001B[38;5;241m*\u001B[39m torch\u001B[38;5;241m.\u001B[39msin(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mtheta),\n\u001B[1;32m 712\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mp \u001B[38;5;241m*\u001B[39m torch\u001B[38;5;241m.\u001B[39mcos(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mtheta)),\n\u001B[1;32m 713\u001B[0m dim\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m1\u001B[39m\n\u001B[1;32m 714\u001B[0m )\n\u001B[1;32m 715\u001B[0m \u001B[38;5;66;03m#assert (torch.abs(torch.norm(self.pxyz, dim=1) - self.p) < 0.1).all(), (torch.abs(torch.norm(self.pxyz, dim=1) - self.p).max())\u001B[39;00m\n\u001B[0;32m--> 716\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m (torch\u001B[38;5;241m.\u001B[39mabs(\u001B[43mtorch\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mnorm\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mpxyz\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mdim\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;241;43m1\u001B[39;49m\u001B[43m)\u001B[49m \u001B[38;5;241m-\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mp) \u001B[38;5;241m<\u001B[39m \u001B[38;5;241m0.05\u001B[39m)\u001B[38;5;241m.\u001B[39mall():\n\u001B[1;32m 717\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m!!!!!\u001B[39m\u001B[38;5;124m\"\u001B[39m, (torch\u001B[38;5;241m.\u001B[39mabs(torch\u001B[38;5;241m.\u001B[39mnorm(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mpxyz, dim\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m1\u001B[39m) \u001B[38;5;241m-\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mp))\u001B[38;5;241m.\u001B[39mmax())\n\u001B[1;32m 718\u001B[0m \u001B[38;5;66;03m# argmax\u001B[39;00m\n",
+ "File \u001B[0;32m/work/gkrzmanc/1gatr/lib/python3.10/site-packages/torch/functional.py:1788\u001B[0m, in \u001B[0;36mnorm\u001B[0;34m(input, p, dim, keepdim, out, dtype)\u001B[0m\n\u001B[1;32m 1781\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28minput\u001B[39m\u001B[38;5;241m.\u001B[39mlayout \u001B[38;5;241m==\u001B[39m torch\u001B[38;5;241m.\u001B[39mstrided \u001B[38;5;129;01mand\u001B[39;00m \u001B[38;5;28minput\u001B[39m\u001B[38;5;241m.\u001B[39mdevice\u001B[38;5;241m.\u001B[39mtype \u001B[38;5;129;01min\u001B[39;00m (\n\u001B[1;32m 1782\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mcpu\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[1;32m 1783\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mcuda\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[1;32m 1784\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mmeta\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[1;32m 1785\u001B[0m torch\u001B[38;5;241m.\u001B[39mutils\u001B[38;5;241m.\u001B[39mbackend_registration\u001B[38;5;241m.\u001B[39m_privateuse1_backend_name,\n\u001B[1;32m 1786\u001B[0m ):\n\u001B[1;32m 1787\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m dim \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[0;32m-> 1788\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28;43misinstance\u001B[39;49m\u001B[43m(\u001B[49m\u001B[43mdim\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43mint\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mtorch\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mSymInt\u001B[49m\u001B[43m)\u001B[49m\u001B[43m)\u001B[49m:\n\u001B[1;32m 1789\u001B[0m _dim \u001B[38;5;241m=\u001B[39m [dim]\n\u001B[1;32m 1790\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n",
+ "\u001B[0;31mKeyboardInterrupt\u001B[0m: "
+ ]
+ }
+ ],
+ "execution_count": 4
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T11:04:25.653278Z",
+ "start_time": "2025-03-26T11:04:23.589153Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "ax.hist(parton_eta, bins=100, label=\"parton level\", histtype=\"step\", density=True)\n",
+ "ax.hist(gen_eta, bins=100, alpha=0.5, label=\"gen level\", histtype=\"step\", density=True)\n",
+ "ax.hist(pfcand_eta, bins=100, alpha=0.5, label=\"pfcands\", histtype=\"step\", density=True)\n",
+ "ax.set_title(\"Eta distribution\")\n",
+ "ax.legend()\n",
+ "fig.show()\n"
+ ],
+ "id": "baf6c2c3905faecd",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T11:04:34.208397Z",
+ "start_time": "2025-03-26T11:04:31.211003Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "bins = np.linspace(0, 200, 100)\n",
+ "logbins = np.geomspace(0.1, 200, 100)\n",
+ "ax.hist(parton_pt, bins=logbins, label=\"parton level\", histtype=\"step\", density=True)\n",
+ "ax.hist(gen_pt, bins=logbins, alpha=0.5, label=\"gen level\", histtype=\"step\", density=True)\n",
+ "ax.hist(pfcand_pt, bins=logbins, alpha=0.5, label=\"pfcands\", histtype=\"step\", density=True)\n",
+ "ax.set_title(\"pt distribution\")\n",
+ "ax.legend()\n",
+ "ax.set_yscale(\"log\")\n",
+ "ax.set_xscale(\"log\")\n",
+ "ax.set_xlim([0, 200])\n",
+ "fig.show()\n"
+ ],
+ "id": "d0d0426e2fdac522",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/tmp/ipykernel_59226/1458644762.py:11: UserWarning: Attempt to set non-positive xlim on a log-scaled axis will be ignored.\n",
+ " ax.set_xlim([0, 200])\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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ROS1Nm3aBIVCgd27d2PJkiWIi4uDUqlE37598f777zc7fteuXRg/fjwSEhIQHByMiIgI3HXXXdi3b1+zY4cPH474+Hj89ttveOCBBxAVFYWwsDBs2rQJt912GwBg+vTpUCgUUCgUGD58uPHcyspKLFy4ENdffz2USiU6dOiAhx56CGfOnBHdY+/evVAoFNi0aRM2btyIG264AUqlEnFxcXjppZda/f3ZvXs37rrrLkREREClUqFv37544403RMfceOONaN++vdlNWb/66isoFAqsXr3a2CYIAtauXYtBgwYhJCQEbdq0wW233Ybc3NxW99cZXD5FtWjRIkRFRWHgwIEoLS21euy8efOQmZmJsWPHIj09HUePHkVmZiYOHTqE3bt3w8+vMR4zRM4RERHGcw3/ZlRNRCRfTz/9NCorK/HYY48BADZu3IiJEydCp9Nh2rRpxuM2bdqEK1eu4KGHHkLnzp1x/vx5vPXWW7j99tuRm5uLW2+9VXTdiooKJCUl4eabb8Y//vEPXLp0CcOGDcOiRYuwYsUKzJo1y3hO+/btATSuJj1y5Ej8+9//xgMPPID09HScOHECa9euxa5du/DDDz+gc+fOovu88cYbuHjxImbMmIGIiAhs2bIFTz/9NDp37oxJkyY59D1Zt24dZs+ejaFDh+Lvf/87QkND8fXXX+PRRx/FqVOn8PLLLwMApk6ditTUVOzcuRP33nuv6BqbN29GQECAqA9TpkzB1q1b8cADD2D69OmoqanBu+++izvvvBMff/wx7rvvPof66zSCi506dcr47xtuuEGIi4sze9x///tfQaFQCMnJyaL2zMxMAYDw7rvvGtuuXr0qABCOHTtmbLt06ZIAQDh58qRN/SorKxMACGVlZXZ8GttcqrwkZB/KFi5VXnL6tcl+/O9BclRdXS0UFBQI1dXVzd47/HupEPf0F8Lh30s90DPzWtunjRs3CgCE6667TigtvXaN0tJS4brrrhMiIyOFqqoqY3tFRUWza1y4cEFo27atcM8994jak5KSBADC3//+92bn5ObmCgCEjRs3Nntv3bp1AgDhqaeeErV/8cUXAgDhwQcfbHadjh07ivpfWVkpaDQaYejQoS1/EwRBACBMnTrV+LqoqEhQKpXCxIkTmx2blpYm+Pn5GX9PX758WQgKChJSUlJEx2m1WiEkJEQYPXq0se3j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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-25T20:19:48.681506Z",
+ "start_time": "2025-03-25T20:19:48.668899Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "min(gen_pt)",
+ "id": "947882371da9f90",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.5"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 10
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-25T20:19:56.114241Z",
+ "start_time": "2025-03-25T20:19:56.105091Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "min(parton_pt)",
+ "id": "1390eb5e3c6f7307",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3.0814879110195774e-33"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 11
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T11:04:50.083990Z",
+ "start_time": "2025-03-26T11:04:46.815469Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "ax.hist(parton_phi, bins=100, label=\"parton level\", histtype=\"step\", density=True)\n",
+ "ax.hist(gen_phi, bins=100, alpha=0.5, label=\"gen level\", histtype=\"step\", density=True)\n",
+ "ax.hist(pfcand_phi, bins=100, alpha=0.5, label=\"pfcands\", histtype=\"step\", density=True)\n",
+ "ax.set_title(\"Phi distribution\")\n",
+ "ax.legend()\n",
+ "fig.show()\n"
+ ],
+ "id": "95a96baa38ba1190",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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itdffx316tXD999/j3379qF58+aIj4/Hnj172ApEbk8iCILg6EoQERER1TS2BBEREZFbYhBEREREbolBEBEREbklBkFERETklioVBGm1Wrz33nto2bIl5HI5IiMjERcXh4KCggr3vXDhAl577TV0794doaGhCAgIQIcOHfDGG29Y3P/8+fMYNWoU6tSpAz8/P/Tp0wc///yzaNnc3FzExsYiIiICcrkcbdq0wZo1a8D8byIiIjJUqdFhzz77LBISEjB69GgMHToUSUlJWLVqFfr06YN9+/aVu+7MSy+9hPfffx8jR45E9+7d4eXlhQMHDuCLL75A+/btceTIEaP1fJKTk9G1a1dIpVLMnTsXQUFBWLduHU6fPo0ff/wRgwYN0pctKipC7969ceLECcTGxqJVq1b48ccf8dVXX+H111/HokWLbD1VIiIiqqVsDoLOnDmDdu3aYfTo0dixY4d++6pVqzBnzhx8+umnmDRpksX9//zzT9x3331mix0uXLgQb7zxBlatWoVnnnlGv338+PHYsWMHjh8/jg4dOgAoW3+nTZs2kMvlOHfuHCQSCQDggw8+wOzZs5GQkKCfERUom8/ju+++w8WLF61eNVqr1SIjIwMBAQH64xMREZFzEwQBeXl5CA8Pr3gxYMFGr7zyigBA+PXXX422FxYWCr6+vsLQoUNtPaQgCILwzz//CACE//u//9Nvy8/PF2QymTBgwACz8kuWLBEACEePHtVv69Wrl+Dr6ysUFhYalf31118FAMLKlSutrs/Vq1cFAPzhD3/4wx/+8McFf65evVrhtd7mZTMSExPh4eGBrl27Gm2Xy+Xo0KEDEhMTbT0kAODatWsAgLCwMP22f/75BxqNRr8Yo6Hu3bvr69O1a1dotVr89ddfeOCBB8xmQe3atSskEolNdQsICABQtrpzYGCgzedDRERENU+pVCIyMlJ/HS+PzUFQRkYGFAoFZDKZ2WMRERE4dOgQioqK9KsfW6O0tBRLly6FVCo16krLyMjQH1fsuQAgPT0dAJCdnY3CwkLRsjKZDAqFQl9WjEajgUaj0f+el5cHAAgMDGQQRERE5GKsSWWxeXSYSqUSDYAA6FtgbFkhGgDmzp2Lw4cPY8mSJWjRooXRcwEQfT7T5yqvrK58efVasWIFgoKC9D+RkZE2nQMRERG5FpuDIF9fX6MWE0NqtVpf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5zN9LlvKilmwYAFyc3P1P1evXq1a5YmIiMip2ZwY7evri1u3bok+plar9WXsQXccjUZT4XPZUlaMTCazGNwRERFR7WNzS1B4eDgyMzNFg4309HQoFAp4e3vbpXLh4eH644o9F3Cvq8uWskREREQ2B0FdunSBVqvFsWPHjLar1WqcPHkSnTt3tlvlunTpAgA4fPiw2WNHjhyBRCJBp06dAAANGjRAREQEjhw5IloWgF3rRkRERK7N5iBowoQJkEgkiI+PN9q+bt06qFQqTJ48Wb8tOTkZ586dq3TlmjVrpp/xWZf4DJQlQX/55ZcYMGAA6tevr98+ceJEJCcn47vvvtNvKy0txapVqxAcHIxhw4ZVui5ERERUu9icE9SuXTvMnj0bq1evxpgxYzBs2DAkJSUhISEBMTExRhMlDhw4EGlpaRAEwegYW7ZsQVpaGgDg9u3bKCoqwrJlywAAUVFRmDp1qr7sf//7X/Tv3x99+vRBbGwsAGDVqlXQarV45513jI770ksv4csvv8SkSZMwf/58REREYNu2bUhMTMT69esREBBg6+kSERFRLWVzEAQA8fHxiI6Oxtq1a7Fr1y4oFArExsZiyZIl8PCouHFpw4YN+OWXX4y2vfrqqwCAmJgYoyCoZ8+eOHjwIBYuXIiFCxdCIpGgZ8+e+PLLL3H//fcbHaNu3br4448/8NJLL+H9999Hfn4+Wrduje3bt2PChAmVOVUiIiKqpSoVBHl6eiIuLg5xcXHllktNTRXdfvDgQZuer0ePHti/f79VZSMiIrBlyxabjk9ERETup1ILqBIRERG5OgZBRERE5JYYBBEREZFbYhBEREREbolBEBEREbklBkFERETklhgEERERkVtiEERERERuiUEQERERuSUGQUREROSWGAQRERGRW2IQRERERG6JQRARERG5JQZBRERE5JYYBBEREZFbYhBEREREbolBEBEREbklBkFERETklhgEERERkVtiEERERERuiUEQERERuSUGQUREROSWGAQRERGRW2IQRERERG6JQRARERG5JQZBRERE5JYYBBEREZFbYhBEREREbolBEBEREbklBkFERETklhgEERERkVuyOQjSarV477330LJlS8jlckRGRiIuLg4FBQV23f/gwYOQSCTl/vzxxx9WlX/44YdtPU0iIiKq5aS27jBv3jwkJCRg9OjRiIuLQ1JSEhISEnDixAns27cPHh7lx1XW7t+qVSts2bLFbH+NRoNZs2ZBoVCga9euZo/PmjULffr0MdrWsGFDW0+TiIiIajmbgqAzZ85g1apVGDNmDHbs2KHf3rhxY8yZMwfbt2/HpEmT7LJ/WFgYpkyZYnaMbdu2QavV4rHHHoOXl5fZ4z169BDdj4iIiMiQTd1h27ZtgyAImDt3rtH2mTNnwtfXF1u3bq3W/QFg/fr1AIAnn3zSYpmCggKo1eoKj0VERETuy6YgKDExER4eHmbdUHK5HB06dEBiYmK17p+SkoIDBw6gd+/eaNGihWiZZ599Fv7+/vDx8UHz5s3x3//+F4IgWHF2RERE5E5sCoIyMjKgUCggk8nMHouIiEBmZiaKioqqbf+PP/4YgiCItgJ5eXlh5MiR+M9//oNvv/0WH374IYKDgzF37lw88cQTFZ6bRqOBUqk0+iEiIqLay6acIJVKJRrAAGWtOboy3t7edt+/tLQUmzZtQmBgIMaNG2f2eK9evfDNN98YbZs5cyaGDRuGTZs24cknn0SvXr0sntuKFSuwePFii48TERFR7WJTS5Cvry80Go3oY7ocHF9f32rZf8+ePbh27RomTpxY7nMY8vDwwIIFCwAAu3btKrfsggULkJubq/+5evWqVc9BRERErsmmICg8PByZmZmigUx6ejoUCoXFVqCq7r9hwwYA5SdEi4mOjgYAZGZmlltOJpMhMDDQ6IeIiIhqL5uCoC5dukCr1eLYsWNG29VqNU6ePInOnTtXy/63bt3Cd999h/vvv7/C5zB18eJFAGVD7omIiIh0bAqCJkyYAIlEgvj4eKPt69atg0qlwuTJk/XbkpOTce7cuUrvb2jz5s0oLi7GjBkzLNYtKyvLbJtGo8GiRYsAACNGjCjnzIiIiMjd2JQY3a5dO8yePRurV6/GmDFjMGzYMP2MzzExMUYTJQ4cOBBpaWlGw9Nt2d/Qhg0bIJfLy50E8aGHHkJ4eDg6deqE8PBwZGRkYOvWrbh48SJiY2NFZ5cmIiIi92Xzshnx8fGIjo7G2rVrsWvXLigUCsTGxmLJkiUVLplRmf0PHTqEc+fOYdKkSahTp47F444dOxZff/01Vq1ahZycHPj5+aFjx45YvHgxJk6caOtpEhERUS0nETiToCilUomgoCDk5ubaPUn68JmjWLPnVTw9ZCl6tOlm12MTERE5u9uq21hz+ENIfz2HMVNeR8v7mtvt2LZcv21eRZ6IiIioNmAQRERERG6JQRARERG5JQZBRERE5JYYBBEREZFbYhBEREREbolBEBEREbklBkFERETklhgEERERkVtiEERERERuiUEQERERuSUGQUREROSWGAQRERGRW2IQRERERG6JQRARERG5JQZBRERE5JYYBBEREZFbYhBEREREbolBEBEREbklBkFERETklhgEERERkVtiEERERERuiUEQERERuSUGQUREROSWGAQRERGRW2IQRERERG6JQRARERG5JQZBRERE5JYYBBEREZFbYhBEREREbolBEBEREbklBkFERETklioVBGm1Wrz33nto2bIl5HI5IiMjERcXh4KCArvv369fP0gkEtGfP//806x8bm4uYmNjERERAblcjjZt2mDNmjUQBKEyp0pERES1lLQyO82bNw8JCQkYPXo04uLikJSUhISEBJw4cQL79u2Dh0f5sZWt+ysUCrz33ntmx2nSpInR70VFRRg8eDBOnDiB2NhYtGrVCj/++CP+/e9/4+bNm1i0aFFlTpfI4QRBQGlpKUpKShxdFSJRUqkUnp6ekEgkjq4KkdVsDoLOnDmDVatWYcyYMdixY4d+e+PGjTFnzhxs374dkyZNsuv+fn5+mDJlSoV1W79+PRITE5GQkIDY2FgAwMyZM/Hoo49i+fLlmD59OqKiomw9ZSKHEQQBOTk5uH37NkpLSx1dHaJyeXp6ol69eggKCmIwRC7B5iBo27ZtEAQBc+fONdo+c+ZMvPTSS9i6dWu5QVBl99dqtcjPz0dAQIDFD9dnn30GX19fzJw502j73LlzsXPnTnz++ed44YUXrDtRIidw48YN5OTkIDAwEIGBgZBKpby4kNMRBAElJSVQKpW4fv06CgsL0aBBA0dXi6hCNgdBiYmJ8PDwQNeuXY22y+VydOjQAYmJiXbfPz09Hf7+/igsLISvry+GDBmC5cuXo2XLlvoyWq0Wf/31Fx544AHI5XKj/bt27QqJRFJh3YicSWlpKXJzcxEaGgqFQuHo6hBVKCAgADKZDJmZmahXrx48PT0dXSWictkcBGVkZEChUEAmk5k9FhERgUOHDqGoqAje3t522b9x48bo1asX2rdvD09PTxw9ehSrV6/G/v378fvvv6Ndu3YAgOzsbBQWFiIi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vBhTp07Fxx9/7NbTTZi6ceOG6PYDBw7g9OnT6N69ew3XyHqcMdpFzJ07F3v37sXw4cP1XSKnT5/Gli1bUFxcjG+//RZDhgxxdDUd5ttvv8Xo0aMRGBiI//znP2azt/r7+2PUqFGOqZyT+O677/D3338DALZu3Yrz589j6dKlAIDg4GA888wzjqxejYiNjcXq1asxevRoDBs2DElJSUhISECvXr3w888/u/WFbcuWLUhLSwMArFq1CkVFRYiLiwNQNt+LO49Aff/99/HMM8+gUaNGWLp0qdn7JCwsDIMHD3ZQ7Rxv9OjRuH79OgYMGICoqCio1WocP34c27dvh6+vLw4ePIgOHTo4upriqjfliOxl7969wqOPPipERUUJPj4+gre3t9C4cWPh8ccfF06fPu3o6jnc66+/Xm6CMJM8BWHatGlu//qUlJQIb7/9ttC8eXPB29tbCA8PF+bNmyfk5eU5umoOFxMTY/H9ERMT4+jqOVR5nx2+PoLw+eefC8OHDxcaNmwoyGQyQS6XCy1atBCeeeYZIS0tzdHVKxdbgoiIiMgtuW/bLxEREbk1BkFERETklhgEERERkVtiEERERERuiUEQERERuSUGQUREROSWGAQRERGRW2IQRERERG6JQRARERG5JQZBRERE5JYYBBEREZFbYhBEREREbun/Ab0iiB19k7VqAAAAAElFTkSuQmCC"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 7
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "1c903a13377dcb3c"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/m.ipynb b/notebooks/m.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..6616177851071b059bc55b7eea4ee0517fd3a084
--- /dev/null
+++ b/notebooks/m.ipynb
@@ -0,0 +1,268 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T16:43:31.599099Z",
+ "start_time": "2025-01-20T16:43:30.574398Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import pickle\n",
+ "import torch\n",
+ "import os\n",
+ "import matplotlib.pyplot as plt\n",
+ "from src.utils.paths import get_path\n",
+ "from src.utils.utils import CPU_Unpickler\n",
+ "from pathlib import Path\n",
+ "from src.dataset.dataset import EventDataset\n",
+ "import numpy as np\n",
+ "\n",
+ "filename = get_path(\"/work/gkrzmanc/jetclustering/results/train/Eval_Quark_dist_loss_2025_01_18_13_11_16/eval_3.pkl\", \"results\")\n",
+ "# for rinv=0.7, see /work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_rinv07_2025_01_03_15_38_58\n",
+ "\n",
+ "result = CPU_Unpickler(open(\"/work/gkrzmanc/jetclustering/results/scouting_PFNano_signals2/SVJ_hadronic_std/tmp_debug/count_matched_quarks/result_m.pkl\", \"rb\")).load()\n"
+ ],
+ "id": "b993ec55869ac6d0",
+ "outputs": [],
+ "execution_count": 14
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T16:43:31.622449Z",
+ "start_time": "2025-01-20T16:43:31.616161Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "result.keys()",
+ "id": "3ca5687deb30c9a5",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "dict_keys([700, 900, 1500, 800, 1000, 3000])"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 15
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T16:43:31.694398Z",
+ "start_time": "2025-01-20T16:43:31.688618Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "result[900][20][0.3].keys()",
+ "id": "410a7d416d05dc66",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "dict_keys(['m_true', 'm_pred', 'mt_true', 'mt_pred'])"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 16
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T16:44:44.450829Z",
+ "start_time": "2025-01-20T16:44:44.443944Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "mt_true = np.array([x.item() for x in result[900][20][0.3][\"mt_true\"]])",
+ "id": "115ca46deb648af0",
+ "outputs": [],
+ "execution_count": 20
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T16:44:55.764798Z",
+ "start_time": "2025-01-20T16:44:55.757837Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "mt_pred = np.array([x.item() for x in result[900][20][0.3][\"mt_pred\"]])",
+ "id": "fc03eacf2b9ca4c8",
+ "outputs": [],
+ "execution_count": 21
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T16:45:17.226239Z",
+ "start_time": "2025-01-20T16:45:16.698714Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "ax.hist(mt_pred/mt_true, bins=100, range=(0, 2))\n",
+ "fig.show()"
+ ],
+ "id": "40e0f3eca165073c",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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ye8BNG7cOL388stau3at5s+fr/Xr1yszM1P19fWO1n8mLZlf37599cILL2jlypX685//rIaGBo0cOVJfffWVpPBaP+ns13Dz5s3auXOnbr31Vr/2cFnDljjVc9Dj8ei7775z5HEfTh599FHV1tbqhhtu8LWlpqaquLhYq1ev1sKFC1VRUaHLLrtMR44cCWGlzZOYmKhFixbp9ddf1+uvv67k5GSlpaWprKxMkjN/b4WTgwcP6p133mn0HAzXNWxoaNCMGTM0atQoDRgw4JT9wuG1MCj/vDpCr7CwUEuXLlVJSYnfhzInT57s+/PAgQM1aNAg9enTRyUlJbryyitDUWqzjRgxwu+XE44cOVIXXXSRnnnmGT344IMhrCw4nn/+eQ0cOFDDhw/3a4/kNfwxWbx4sebNm6eVK1f6fSYiMzPT9+dBgwYpNTVVPXv21LJly3TLLbeEotRm69u3r/r27evbHzlypPbs2aPHH39cf/rTn0JYWXC89NJL6tixoyZOnOjXHq5rmJOTo507d4bs8yeBiNg7H126dFHbtm116NAhv/ZDhw6pe/fuTZ7TvXv30/Y/8d9ArhksLZnfCY8++qgKCwv13nvvadCgQafte/7556tLly4qLy8/65oDcTbzO6Fdu3a6+OKLfbWH0/pJZzfHuro6LV26tFl/kYVqDVviVM/BuLg4tW/f3pHHRThYunSpbr31Vi1btqzR7e2TdezYURdeeGFErF9Thg8f7qu9tayf9MO3PV544QVNnTpV0dHRp+0bDmt411136a233tK6det03nnnnbZvOLwWRmz4iI6O1iWXXKK1a9f62hoaGrR27Vq//zv+XyNGjPDrL0lr1qzx9e/du7e6d+/u18fj8WjTpk2nvGawtGR+0g+fUH7wwQe1evVqXXrppWcc56uvvtI333yjxMRER+purpbO73/V19drx44dvtrDaf2ks5vja6+9Jq/Xq5tuuumM44RqDVviTM9BJx4XobZkyRJNmzZNS5Ys8fuK9KnU1tZqz549EbF+Tdm+fbuv9tawfiesX79e5eXlzfofgFCuoTFGd911l5YvX64PPvhAvXv3PuM5YfFa6MjHVkNk6dKlxu12m+LiYvOPf/zD3H777aZjx46mqqrKGGPM1KlTTV5enq//Rx99ZKKiosyjjz5qPv/8czN37lzTrl07s2PHDl+fwsJC07FjR7Ny5Urz6aefmgkTJpjevXub7777LuznV1hYaKKjo81f/vIX8/XXX/u2I0eOGGOMOXLkiPnNb35jNmzYYCoqKsz7779vhg4dai644AJz7NixsJ/fvHnzzLvvvmv27Nljtm7daiZPnmxiYmLMZ5995usTTutnTOBzPGH06NFm0qRJjdrDbQ2PHDlitm3bZrZt22Ykmccee8xs27bN7Nu3zxhjTF5enpk6daqv/5dffmnOOeccM3PmTPP555+boqIi07ZtW7N69WpfnzP9zMJ5fq+88oqJiooyRUVFfs/Bw4cP+/rcd999pqSkxFRUVJiPPvrIZGRkmC5dupjq6uqwn9/jjz9uVqxYYXbv3m127Nhh7rnnHtOmTRvz/vvv+/qE0/oZE/gcT7jppptMampqk9cMpzW88847TXx8vCkpKfF7zB09etTXJxxfCyM6fBhjzFNPPWV69OhhoqOjzfDhw83GjRt9x6644gqTnZ3t13/ZsmXmwgsvNNHR0SYlJcWsWrXK73hDQ4OZPXu26datm3G73ebKK680u3btsjGVJgUyv549expJjba5c+caY4w5evSoGTNmjDn33HNNu3btTM+ePc1tt90Wsr8UjAlsfjNmzPD17datm7n66qtNWVmZ3/XCbf2MCfwx+s9//tNIMu+9916ja4XbGp746uXJ24k5ZWdnmyuuuKLROUOGDDHR0dHm/PPPNy+++GKj657uZ2ZToPO74oorTtvfmB++WpyYmGiio6PNT37yEzNp0iRTXl5ud2L/L9D5zZ8/3/Tp08fExMSYhIQEk5aWZj744ING1w2X9TOmZY/Rw4cPm/bt25tnn322yWuG0xo2NTdJfs+rcHwtdP1/8QAAAFZE7Gc+AABAZCJ8AAAAqwgfAADAKsIHAACwivABAACsInwAAACrCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwCrCBwAAsOr/ABrNhGmaeaZDAAAAAElFTkSuQmCC"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 22
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T16:45:55.382211Z",
+ "start_time": "2025-01-20T16:45:55.375728Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "m_pred = np.array(result[900][20][0.3][\"m_pred\"])\n",
+ "m_true = np.array(result[900][20][0.3][\"m_true\"])"
+ ],
+ "id": "5fa29e5695d1bfca",
+ "outputs": [],
+ "execution_count": 26
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T16:45:57.602573Z",
+ "start_time": "2025-01-20T16:45:57.591567Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "m_pred",
+ "id": "9ae01bf63ee1b36f",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 641.83105469, 866.09069824, 851.73724365, 1062.89428711,\n",
+ " 1655.16564941, 320.83901978, 502.70303345, 799.65283203,\n",
+ " 55.62595749, 51.16765976, 863.53631592, 89.45400238,\n",
+ " 533.7557373 , 376.30004883, 597.72265625, 0. ,\n",
+ " 560.80645752, 68.12836456, 706.06408691, 724.22351074,\n",
+ " 693.24047852, 195.38005066, 744.99951172, 57.83921051,\n",
+ " 649.59234619, 55.398983 , 665.58978271, 638.02868652,\n",
+ " 587.02825928, 828.62927246, 604.92059326, 467.78771973,\n",
+ " 813.63787842, 422.85968018, 513.59490967, 371.32543945,\n",
+ " 43.02356339, 60.69647217, 0. , 0. ,\n",
+ " 674.59191895, 50.23223877, 659.35571289, 694.15087891,\n",
+ " 974.06951904, 833.8213501 , 883.08532715, 960.33508301,\n",
+ " 161.08520508, 564.60180664, 667.60766602, 520.25 ,\n",
+ " 696.6227417 , 863.53314209, 755.36712646, 796.23413086,\n",
+ " 955.74468994, 419.76861572, 0. , 79.88526917,\n",
+ " 397.43603516, 713.16229248, 963.28955078, 1234.15795898,\n",
+ " 933.11053467, 410.34863281, 964.00817871, 701.77362061,\n",
+ " 710.20819092, 0. , 38.19056702, 859.89935303,\n",
+ " 578.93334961, 0. , 83.25089264, 854.06091309,\n",
+ " 573.23419189, 319.66473389, 620.66796875, 574.55157471,\n",
+ " 633.9387207 , 736.91552734, 103.39178467, 0. ,\n",
+ " 63.62294388, 574.7265625 , 839.99731445, 39.05511093,\n",
+ " 1220.18579102, 665.93878174, 569.78582764, 78.19033051,\n",
+ " 620.31622314, 505.46517944, 505.6192627 , 0. ,\n",
+ " 551.67333984, 576.76025391, 783.02429199, 727.16680908,\n",
+ " 390.37368774, 835.3927002 , 269.57330322, 772.62982178,\n",
+ " 431.72564697, 46.47593689, 0. , 825.40423584,\n",
+ " 0. , 125.83854675, 87.26153564, 52.30726242,\n",
+ " 1022.72241211, 825.33642578, 65.16733551, 346.05007935,\n",
+ " 49.73982239, 0. , 927.04187012, 126.74888611,\n",
+ " 80.24756622, 789.6151123 , 154.5710144 , 0. ,\n",
+ " 72.56481171, 569.58227539, 212.6068573 , 454.64471436,\n",
+ " 0. , 61.39545441, 1323.9161377 , 973.59503174,\n",
+ " 0. , 70.69458008, 52.61137772, 429.90161133,\n",
+ " 327.41027832, 1543.80065918, 450.53570557, 656.1696167 ,\n",
+ " 554.34863281, 75.0789032 , 0. , 441.059021 ,\n",
+ " 962.46099854, 1233.72070312, 86.19637299, 99.10082245,\n",
+ " 753.31530762, 80.64937592, 654.20300293, 359.01773071,\n",
+ " 46.40773392, 623.61798096, 715.72955322, 699.6496582 ,\n",
+ " 806.04907227, 459.5423584 , 292.88635254, 86.0062561 ,\n",
+ " 78.19236755, 531.13598633, 741.38250732, 526.87329102,\n",
+ " 931.67663574, 923.42736816, 571.89642334, 618.13098145,\n",
+ " 455.69778442, 732.64801025, 634.58886719, 557.38726807,\n",
+ " 60.73313522, 266.79779053, 472.7807312 , 657.72692871,\n",
+ " 865.62432861, 451.86126709, 651.08013916, 562.9463501 ,\n",
+ " 889.04656982, 801.86724854, 465.27664185, 0. ,\n",
+ " 790.24377441, 406.2520752 , 197.88163757, 587.32617188,\n",
+ " 0. , 830.54193115, 792.55230713, 62.69068527,\n",
+ " 819.86328125, 59.33326721, 50.91682434, 643.00366211,\n",
+ " 144.71479797, 430.67797852, 575.26391602, 118.92771149])"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 27
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T16:46:04.936810Z",
+ "start_time": "2025-01-20T16:46:04.529710Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "ax.hist(m_pred/m_true, bins=100, range=(0, 2))\n",
+ "fig.show()"
+ ],
+ "id": "be29fd7740c32212",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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V199VWvWrNGcOXO0bt06ZWZmqq6uztH6z6Q58+vdu7defvllLV++XH/5y19UX1+vYcOG6euvv5YUXOsnnf0abtq0STt27NDtt9/u0x4sa9gcp3oNVldX6/vvv3fkeR9MnnjiCdXU1Oimm27ytqWkpKioqEgrV67UvHnzVF5eriuuuEJHjhxpwUqbJi4uTvPnz9ebb76pN998UwkJCUpNTVVpaakkZ75uBZMDBw7ovffea/AaDNY1rK+v19SpUzV8+HD169fvlP2C4b0wIL9eHS2voKBAixcvVnFxsc+HMsePH+/9d//+/TVgwAD16tVLxcXFuvrqq1ui1CYbOnSozx8nHDZsmC655BI9//zzeuSRR1qwssB46aWX1L9/fw0ZMsSnPZTX8FyycOFCzZ49W8uXL/f5TERmZqb33wMGDFBKSop69OihJUuW6LbbbmuJUpusd+/e6t27t3d/2LBh2r17t5566in9+c9/bsHKAmPBggXq2LGjxo4d69MerGs4efJk7dixo8U+f+KPkL3z0aVLF7Vt21YHDx70aT948KBiY2MbPSc2Nva0/U/8159rBkpz5nfCE088oYKCAr3//vsaMGDAafteeOGF6tKli8rKys66Zn+czfxOaNeunS699FJv7cG0ftLZzbG2tlaLFy9u0heyllrD5jjVazAqKkrt27d35HkRDBYvXqzbb79dS5YsaXB7+2QdO3bUxRdfHBLr15ghQ4Z4a28t6yf9+NMeL7/8siZOnKjw8PDT9g2GNbznnnv0zjvvaO3atbrgggtO2zcY3gtDNnyEh4frsssu05o1a7xt9fX1WrNmjc//Hf/U0KFDffpL0urVq739ExMTFRsb69OnurpaGzduPOU1A6U585N+/ITyI488opUrV+ryyy8/4zhff/21vv32W8XFxTlSd1M1d34/VVdXp+3bt3trD6b1k85ujm+88YY8Ho9uueWWM47TUmvYHGd6DTrxvGhpixYt0qRJk7Ro0SKfH5E+lZqaGu3evTsk1q8x27Zt89beGtbvhHXr1qmsrKxJ/wPQkmtojNE999yjpUuX6sMPP1RiYuIZzwmK90JHPrbaQhYvXmzcbrcpKioy//znP82dd95pOnbsaCorK40xxkycONHk5uZ6+3/88ccmLCzMPPHEE+aLL74ws2bNMu3atTPbt2/39ikoKDAdO3Y0y5cvN5999pkZM2aMSUxMNN9//33Qz6+goMCEh4ebv/71r+abb77xbkeOHDHGGHPkyBHzu9/9zqxfv96Ul5ebDz74wAwaNMhcdNFF5tixY0E/v9mzZ5tVq1aZ3bt3my1btpjx48ebiIgI8/nnn3v7BNP6GeP/HE8YMWKEGTduXIP2YFvDI0eOmK1bt5qtW7caSebJJ580W7duNXv37jXGGJObm2smTpzo7f/VV1+Z8847z0ybNs188cUXprCw0LRt29asXLnS2+dMj1kwz++1114zYWFhprCw0Oc1ePjwYW+fBx54wBQXF5vy8nLz8ccfm/T0dNOlSxdz6NChoJ/fU089ZZYtW2Z27dpltm/fbu677z7Tpk0b88EHH3j7BNP6GeP/HE+45ZZbTEpKSqPXDKY1vPvuu010dLQpLi72ec4dPXrU2ycY3wtDOnwYY8yzzz5runfvbsLDw82QIUPMhg0bvMeuuuoqk52d7dN/yZIl5uKLLzbh4eEmKSnJrFixwud4fX29mTFjhunWrZtxu93m6quvNjt37rQxlUb5M78ePXoYSQ22WbNmGWOMOXr0qBk5cqQ5//zzTbt27UyPHj3MHXfc0WJfFIzxb35Tp0719u3WrZu59tprTWlpqc/1gm39jPH/Ofqvf/3LSDLvv/9+g2sF2xqe+NHLk7cTc8rOzjZXXXVVg3MGDhxowsPDzYUXXmheeeWVBtc93WNmk7/zu+qqq07b35gff7Q4Li7OhIeHm5/97Gdm3LhxpqyszO7E/p+/85szZ47p1auXiYiIMDExMSY1NdV8+OGHDa4bLOtnTPOeo4cPHzbt27c3L7zwQqPXDKY1bGxuknxeV8H4Xuj6/+IBAACsCNnPfAAAgNBE+AAAAFYRPgAAgFWEDwAAYBXhAwAAWEX4AAAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGDV/wFA8o+52iBlAwAAAABJRU5ErkJggg=="
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 28
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "d3dfc25078295551"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "name": "python3",
+ "language": "python",
+ "display_name": "Python 3 (ipykernel)"
+ }
+ },
+ "nbformat": 5,
+ "nbformat_minor": 9
+}
diff --git a/notebooks/model_jets_obj_score.ipynb b/notebooks/model_jets_obj_score.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..429eaa3fc96cd14595f9ac0bb218058381dd012e
--- /dev/null
+++ b/notebooks/model_jets_obj_score.ipynb
@@ -0,0 +1,301 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T14:32:10.766770Z",
+ "start_time": "2025-02-12T14:32:07.793979Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "from src.dataset.dataset import EventDataset\n",
+ "from src.utils.paths import get_path"
+ ],
+ "id": "7b407a8095806d09",
+ "outputs": [],
+ "execution_count": 1
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T14:32:12.034102Z",
+ "start_time": "2025-02-12T14:32:10.864499Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "model_output_file = \"/work/gkrzmanc/jetclustering/results/train/Eval_objectness_score_2025_02_12_11_50_03/eval_9.pkl\"\n",
+ "\n",
+ "model_clusters_file = None\n",
+ "\n",
+ "path = get_path(\"/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/preprocessed_data/scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-900_mDark-20_rinv-0.3\", \"preprocessed_data\")\n",
+ "dataset = EventDataset.from_directory(path, model_clusters_file=model_clusters_file,\n",
+ " model_output_file=model_output_file,\n",
+ " include_model_jets_unfiltered=True)"
+ ],
+ "id": "8d275fbf162ad4fc",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/jetclustering/code/src/utils/utils.py:91: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
+ " return lambda b: torch.load(io.BytesIO(b), map_location='cpu')\n"
+ ]
+ }
+ ],
+ "execution_count": 2
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T14:32:12.482044Z",
+ "start_time": "2025-02-12T14:32:12.246175Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "max_events = 1000\n",
+ "import torch\n",
+ "all_obj_scores = []\n",
+ "target_obj_scores = []\n",
+ "for i in range(len(dataset)):\n",
+ " if i > max_events:\n",
+ " break\n",
+ " event = dataset[i]\n",
+ " all_obj_scores += torch.sigmoid(event.model_jets.obj_score).tolist()\n",
+ " assert len(event.model_jets) == len(event.model_jets.obj_score), f\"{len(event.model_jets)} {len(event.model_jets.obj_score)}\"\n",
+ " target_obj_scores += event.model_jets.target_obj_score.tolist()\n"
+ ],
+ "id": "b4822c0dc7f98f51",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "tensor([ 2, 0, 0, 2, 2, 0, 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 2,\n",
+ " 2, 0, 0, 2, 2, 0, 0, 2, 0, 2, 2, 2, 2, 2, -1, 0, 0, 2,\n",
+ " 0, 0, 2, 0, 0, 0, 2, 2, 2, 0, 0, 2, 2, 2, 0, 2, 2, 2,\n",
+ " 0, 2, 2, 1, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 0, 0, 1, 0,\n",
+ " 2, 2, 0, 2, 1, 0, 0, 1, -1, 2, 2, 0, 2, 0, 1, 0, -1, 2,\n",
+ " 2, 0, 2, 0, 2, 2, 1, 2, 0, 0, 2, 1, 2, 2, 2, 2, 0, 2,\n",
+ " 2, 2, 2, 2, -1, 0, 2, 2, 0, 2, 2, 2, -1, 1, 0, 2, -1, 2,\n",
+ " 2, -1, 2, -1, 0, 2, 0, 1, -1, 2, 0, 2, -1, 1, 2, 0, 2, -1,\n",
+ " 2, -1, 1, 0, 0, 0, 2, 0, 1, 0, -1, 1, 0, 2, 2, 2, 2, 2,\n",
+ " 2, 2, -1, 2, 1, 0, 0, 1, 1, 2, 0, 2, 2, 0, 2, 0, 0, 1,\n",
+ " 2, 2, 0, 2, 1, -1, -1, 2, -1, -1, -1, 0, 0, 2, 1, 1, 2, 2,\n",
+ " -1, 1, 0, 2, 2, -1, 0, -1, 0, 0, 2, 2, 2, 2, 0, 1, 0, 2,\n",
+ " -1, 2, 2, -1, 2, 2, 2, -1, 1, 0, 0])\n",
+ "Jets pt tensor([315.0177, 24.9858, 306.9994]) obj score tensor([ 2.4366, -4.1073, -1.8993])\n",
+ "tensor([ 2, 0, 0, 2, 2, 0, 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 2,\n",
+ " 2, 0, 0, 2, 2, 0, 0, 2, 0, 2, 2, 2, 2, 2, -1, 0, 0, 2,\n",
+ " 0, 0, 2, 0, 0, 0, 2, 2, 2, 0, 0, 2, 2, 2, 0, 2, 2, 2,\n",
+ " 0, 2, 2, 1, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 0, 0, 1, 0,\n",
+ " 2, 2, 0, 2, 1, 0, 0, 1, -1, 2, 2, 0, 2, 0, 1, 0, -1, 2,\n",
+ " 2, 0, 2, 0, 2, 2, 1, 2, 0, 0, 2, 1, 2, 2, 2, 2, 0, 2,\n",
+ " 2, 2, 2, 2, -1, 0, 2, 2, 0, 2, 2, 2, -1, 1, 0, 2, -1, 2,\n",
+ " 2, -1, 2, -1, 0, 2, 0, 1, -1, 2, 0, 2, -1, 1, 2, 0, 2, -1,\n",
+ " 2, -1, 1, 0, 0, 0, 2, 0, 1, 0, -1, 1, 0, 2, 2, 2, 2, 2,\n",
+ " 2, 2, -1, 2, 1, 0, 0, 1, 1, 2, 0, 2, 2, 0, 2, 0, 0, 1,\n",
+ " 2, 2, 0, 2, 1, -1, -1, 2, -1, -1, -1, 0, 0, 2, 1, 1, 2, 2,\n",
+ " -1, 1, 0, 2, 2, -1, 0, -1, 0, 0, 2, 2, 2, 2, 0, 1, 0, 2,\n",
+ " -1, 2, 2, -1, 2, 2, 2, -1, 1, 0, 0])\n",
+ "tensor([4, 4, 4, 4, 4, 5, 5, 3, 5, 5, 5, 4, 5, 5, 3, 5, 5, 5, 3, 5, 4, 5, 4, 5,\n",
+ " 5, 3, 5, 4, 5, 5, 5, 3, 3, 5, 5, 5, 3, 3, 5, 5, 3, 5, 5, 2, 5, 5, 5, 5,\n",
+ " 4, 3, 3, 3, 2, 5, 5, 5, 5, 4, 4, 4, 5, 5, 5, 5, 3, 3, 5, 4, 5, 4, 5, 3,\n",
+ " 4, 5, 5, 3, 5, 5, 5, 4, 5, 2, 5, 5, 3, 5, 5, 4, 3, 4, 5, 2, 2, 5, 5, 3,\n",
+ " 5, 2, 2, 4, 5, 5, 2, 5, 3, 5, 4, 2, 5, 5, 2, 4, 5, 3, 3, 5, 5, 5, 2, 3,\n",
+ " 4, 3, 5, 5, 5, 3, 5, 5, 5, 4, 4, 5, 5, 5, 4, 5, 3, 4, 4, 4, 5, 5, 4, 5,\n",
+ " 5, 3, 4, 3, 5, 3, 3, 3, 2, 3, 4, 4, 2, 5, 5, 3, 4, 3, 5, 2, 3, 3, 4, 4,\n",
+ " 3, 4, 4, 4, 5, 2, 3, 3, 2, 3, 2, 5, 3, 3, 4, 5, 5, 3, 2, 3, 3, 4, 5, 5,\n",
+ " 3, 3, 5, 5, 2, 4, 4, 5, 3, 5, 3, 3, 5, 3, 5, 2, 5, 4, 5, 3, 4, 4, 5, 4,\n",
+ " 3, 3, 2, 5, 5, 4, 4, 5, 5, 3, 3, 5, 5, 5, 4, 3, 4, 5, 3, 2, 3, 5, 3, 4,\n",
+ " 3, 5, 5, 5, 3, 2, 5, 3, 3, 3, 4, 5, 5, 5, 3, 5, 5, 2, 5, 4, 4, 5, 5, 5,\n",
+ " 4, 3, 5, 3, 5, 5, 4, 3, 5, 4, 3, 5, 4, 4, 3, 5, 3, 5, 3, 2, 5, 5, 4, 5,\n",
+ " 5, 5, 5, 5, 5, 3, 5, 3, 2, 4, 3, 4, 5, 3, 4, 4, 5, 3, 4, 4, 5, 5, 4, 5,\n",
+ " 5, 4, 4, 3, 5, 3, 2, 3, 3, 5, 3, 4, 3, 4, 5, 4, 3, 4, 3, 3, 3, 5, 5])\n",
+ "Jets pt tensor([ 0.0000, 0.0000, 12.2053, 60.9335, 447.7638, 361.8791]) obj score tensor([-4.4648, -1.0421, 0.6614])\n"
+ ]
+ },
+ {
+ "ename": "AssertionError",
+ "evalue": "Error! len(obj_score)=3, len(jets_pt)=6",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mAssertionError\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[3], line 8\u001B[0m\n\u001B[1;32m 6\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m i \u001B[38;5;241m>\u001B[39m max_events:\n\u001B[1;32m 7\u001B[0m \u001B[38;5;28;01mbreak\u001B[39;00m\n\u001B[0;32m----> 8\u001B[0m event \u001B[38;5;241m=\u001B[39m \u001B[43mdataset\u001B[49m\u001B[43m[\u001B[49m\u001B[43mi\u001B[49m\u001B[43m]\u001B[49m\n\u001B[1;32m 9\u001B[0m all_obj_scores \u001B[38;5;241m+\u001B[39m\u001B[38;5;241m=\u001B[39m torch\u001B[38;5;241m.\u001B[39msigmoid(event\u001B[38;5;241m.\u001B[39mmodel_jets\u001B[38;5;241m.\u001B[39mobj_score)\u001B[38;5;241m.\u001B[39mtolist()\n\u001B[1;32m 10\u001B[0m \u001B[38;5;28;01massert\u001B[39;00m \u001B[38;5;28mlen\u001B[39m(event\u001B[38;5;241m.\u001B[39mmodel_jets) \u001B[38;5;241m==\u001B[39m \u001B[38;5;28mlen\u001B[39m(event\u001B[38;5;241m.\u001B[39mmodel_jets\u001B[38;5;241m.\u001B[39mobj_score), \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;132;01m{\u001B[39;00m\u001B[38;5;28mlen\u001B[39m(event\u001B[38;5;241m.\u001B[39mmodel_jets)\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m \u001B[39m\u001B[38;5;132;01m{\u001B[39;00m\u001B[38;5;28mlen\u001B[39m(event\u001B[38;5;241m.\u001B[39mmodel_jets\u001B[38;5;241m.\u001B[39mobj_score)\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m\"\u001B[39m\n",
+ "File \u001B[0;32m/work/gkrzmanc/jetclustering/code/src/dataset/dataset.py:558\u001B[0m, in \u001B[0;36mEventDataset.__getitem__\u001B[0;34m(self, i)\u001B[0m\n\u001B[1;32m 556\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21m__getitem__\u001B[39m(\u001B[38;5;28mself\u001B[39m, i):\n\u001B[1;32m 557\u001B[0m \u001B[38;5;28;01massert\u001B[39;00m i \u001B[38;5;241m<\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mn_events, \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mIndex out of bounds: \u001B[39m\u001B[38;5;132;01m%d\u001B[39;00m\u001B[38;5;124m >= \u001B[39m\u001B[38;5;132;01m%d\u001B[39;00m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;241m%\u001B[39m (i, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mn_events)\n\u001B[0;32m--> 558\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mget_idx\u001B[49m\u001B[43m(\u001B[49m\u001B[43mi\u001B[49m\u001B[43m)\u001B[49m\n",
+ "File \u001B[0;32m/work/gkrzmanc/jetclustering/code/src/dataset/dataset.py:419\u001B[0m, in \u001B[0;36mEventDataset.get_idx\u001B[0;34m(self, i)\u001B[0m\n\u001B[1;32m 416\u001B[0m result \u001B[38;5;241m=\u001B[39m {key: EventCollection\u001B[38;5;241m.\u001B[39mdeserialize(result[key], batch_number\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mNone\u001B[39;00m, \u001B[38;5;28mcls\u001B[39m\u001B[38;5;241m=\u001B[39mEvent\u001B[38;5;241m.\u001B[39mevt_collections[key]) \u001B[38;5;28;01mfor\u001B[39;00m\n\u001B[1;32m 417\u001B[0m key \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mattrs}\n\u001B[1;32m 418\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mmodel_output \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[0;32m--> 419\u001B[0m result[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mmodel_jets\u001B[39m\u001B[38;5;124m\"\u001B[39m], bc_scores_pfcands, bc_labels_pfcands \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mget_model_jets\u001B[49m\u001B[43m(\u001B[49m\u001B[43mi\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mpfcands\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mresult\u001B[49m\u001B[43m[\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mpfcands\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m]\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43minclude_target\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;241;43m1\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mdq\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mresult\u001B[49m\u001B[43m[\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mmatrix_element_gen_particles\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m]\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 420\u001B[0m result[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mpfcands\u001B[39m\u001B[38;5;124m\"\u001B[39m]\u001B[38;5;241m.\u001B[39mbc_scores_pfcands \u001B[38;5;241m=\u001B[39m bc_scores_pfcands\n\u001B[1;32m 421\u001B[0m result[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mpfcands\u001B[39m\u001B[38;5;124m\"\u001B[39m]\u001B[38;5;241m.\u001B[39mbc_labels_pfcands \u001B[38;5;241m=\u001B[39m bc_labels_pfcands\n",
+ "File \u001B[0;32m/work/gkrzmanc/jetclustering/code/src/dataset/dataset.py:536\u001B[0m, in \u001B[0;36mEventDataset.get_model_jets\u001B[0;34m(self, i, pfcands, filter, dq, include_target)\u001B[0m\n\u001B[1;32m 534\u001B[0m obj_score \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mmodel_output[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mobj_score_pred\u001B[39m\u001B[38;5;124m\"\u001B[39m][(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mmodel_output[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mevent_clusters_idx\u001B[39m\u001B[38;5;124m\"\u001B[39m] \u001B[38;5;241m==\u001B[39m i)]\n\u001B[1;32m 535\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mJets pt\u001B[39m\u001B[38;5;124m\"\u001B[39m, jets_pt, \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mobj score\u001B[39m\u001B[38;5;124m\"\u001B[39m, obj_score)\n\u001B[0;32m--> 536\u001B[0m \u001B[38;5;28;01massert\u001B[39;00m \u001B[38;5;28mlen\u001B[39m(obj_score) \u001B[38;5;241m==\u001B[39m \u001B[38;5;28mlen\u001B[39m(jets_pt), \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mError! len(obj_score)=\u001B[39m\u001B[38;5;132;01m%d\u001B[39;00m\u001B[38;5;124m, len(jets_pt)=\u001B[39m\u001B[38;5;132;01m%d\u001B[39;00m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;241m%\u001B[39m (\n\u001B[1;32m 537\u001B[0m \u001B[38;5;28mlen\u001B[39m(obj_score), \u001B[38;5;28mlen\u001B[39m(jets_pt))\n\u001B[1;32m 538\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m include_target:\n\u001B[1;32m 539\u001B[0m target_obj_score \u001B[38;5;241m=\u001B[39m EventDataset\u001B[38;5;241m.\u001B[39mget_target_obj_score(jets_eta, jets_phi, jets_pt, torch\u001B[38;5;241m.\u001B[39mzeros(jets_pt\u001B[38;5;241m.\u001B[39msize(\u001B[38;5;241m0\u001B[39m)), dq\u001B[38;5;241m.\u001B[39meta, dq\u001B[38;5;241m.\u001B[39mphi, torch\u001B[38;5;241m.\u001B[39mzeros(dq\u001B[38;5;241m.\u001B[39meta\u001B[38;5;241m.\u001B[39msize(\u001B[38;5;241m0\u001B[39m)))\n",
+ "\u001B[0;31mAssertionError\u001B[0m: Error! len(obj_score)=3, len(jets_pt)=6"
+ ]
+ }
+ ],
+ "execution_count": 3
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T14:30:56.370301947Z",
+ "start_time": "2025-02-11T12:51:26.851410Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "dir(event.model_jets)",
+ "id": "6512f5fdd101ad0a",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['E',\n",
+ " '__class__',\n",
+ " '__delattr__',\n",
+ " '__dict__',\n",
+ " '__dir__',\n",
+ " '__doc__',\n",
+ " '__eq__',\n",
+ " '__format__',\n",
+ " '__ge__',\n",
+ " '__getattribute__',\n",
+ " '__getitem__',\n",
+ " '__gt__',\n",
+ " '__hash__',\n",
+ " '__init__',\n",
+ " '__init_subclass__',\n",
+ " '__le__',\n",
+ " '__len__',\n",
+ " '__lt__',\n",
+ " '__module__',\n",
+ " '__ne__',\n",
+ " '__new__',\n",
+ " '__reduce__',\n",
+ " '__reduce_ex__',\n",
+ " '__repr__',\n",
+ " '__setattr__',\n",
+ " '__sizeof__',\n",
+ " '__str__',\n",
+ " '__subclasshook__',\n",
+ " '__weakref__',\n",
+ " 'area',\n",
+ " 'copy',\n",
+ " 'deserialize',\n",
+ " 'eta',\n",
+ " 'init_attrs',\n",
+ " 'mask',\n",
+ " 'mass',\n",
+ " 'obj_score',\n",
+ " 'p',\n",
+ " 'phi',\n",
+ " 'pt',\n",
+ " 'pxyz',\n",
+ " 'serialize',\n",
+ " 'target_obj_score',\n",
+ " 'theta']"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 4
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T14:30:56.389354987Z",
+ "start_time": "2025-02-11T12:51:26.920277Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "len(all_obj_scores)\n",
+ "target_obj_scores = torch.tensor(target_obj_scores).int()\n",
+ "print(len(target_obj_scores))\n",
+ "print(len(all_obj_scores))\n",
+ "all_obj_scores = torch.tensor(all_obj_scores)"
+ ],
+ "id": "75269b8834cec48e",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1679\n",
+ "1679\n"
+ ]
+ }
+ ],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T14:30:56.390925882Z",
+ "start_time": "2025-02-11T12:51:26.979844Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "fig, ax = plt.subplots()\n",
+ "ax.hist(all_obj_scores, histtype=\"step\", bins=100, label=\"all\")\n",
+ "ax.hist(all_obj_scores[target_obj_scores==1], histtype=\"step\", bins=100, color=\"green\", label=\"\")\n",
+ "ax.hist(all_obj_scores[target_obj_scores==0], histtype=\"step\", bins=100, color=\"gray\")\n",
+ "ax.set_yscale(\"log\")\n",
+ "fig.show()"
+ ],
+ "id": "5ca859cb55f86fe7",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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v/qV/umf/kmtra1FiHB6yaW/3377bf3iF7/Qn/3Zn+npp59We3u7Pve5zykSiejuu+8uRthlKZe+/uQnP6lgMKiPfvSjMk1Tw8PD+qu/+iv97d/+bTFCnlHS/X7s7e3VwMCAamtrC9LutHtygvLxjW98Q48++qhaWlrkcDhKHc600tfXp23btul73/ue3G53qcOZEUZHR9XU1KSHHnpIK1as0JYtW/TlL39ZDz74YKlDm3YOHTqkr3/96/rud7+r1157TU8++aSeeuop3XPPPaUODXky7Z6cuN1uVVZW6syZMwnbz5w5o/PPPz/lMeeff35W+2NMLn0d9a1vfUvf+MY39Nxzz+mKK64oZJjTQrZ9/dZbb+n3v/+9rr/++ti20dFRSVJVVZXeeOMNXXzxxYUNuozl8t72eDyy2+2qrKyMbWtubtbp06c1NDSk6urqgsZcrnLp67vuukvbtm3TX/7lX0qSLr/8cvX39+u2227Tl7/8ZVVU8Hd3vqT7/Th79uyCPTWRpuGTk+rqaq1YsUIHDhyIbRsdHdWBAwe0Zs2alMesWbMmYX9J+vd///e0+2NMLn0tSd/85jd1zz336JlnntHVV19djFDLXrZ9/aEPfUi//e1v1draGvv/G264QevWrVNra6sWLlxYzPDLTi7v7Y985CNqb2+PJYGS9Oabb8rj8ZCYTCCXvjYMY1wCEk0KTZaLy6uS/X4s6HDbEnn00UfNmpoa85FHHjGPHj1q3nbbbWZDQ4N5+vRp0zRNc9u2beadd94Z2//FF180q6qqzG9961tmW1ubeffddzOVOEPZ9vU3vvENs7q62nziiSfMQCAQ+/++vr5SXULZyLavkzFbJzvZ9ndHR4dZX19v7ty503zjjTfMn/3sZ2ZTU5P5D//wD6W6hLKRbV/ffffdZn19vfnjH//YfPvtt81nn33WvPjii83NmzeX6hLKRl9fn3nkyBHzyJEjpiTzvvvuM48cOWK+8847pmma5p133mlu27Yttn90KvFf//Vfm21tbabf72cq8VR8+9vfNr1er1ldXW2uWrXK/PWvfx372bXXXmtu3749Yf/HH3/cXLJkiVldXW1eeuml5lNPPVXkiMtXNn39gQ98wJQ07v/vvvvu4gdehrJ9X8cjOcletv39H//xH+bq1avNmpoac9GiReY//uM/msPDw0WOujxl09eRSMT8+7//e/Piiy82HQ6HuXDhQvNzn/uc2d3dXfzAy8zBgwdT/hsc7d/t27eb11577bhjli1bZlZXV5uLFi0y//mf/7ngcdpMk2dgAADAOqbdmBMAAFDeSE4AAIClkJwAAABLITkBAACWQnICAAAsheQEAABYCskJAACwFJITAABgKSQnAADAUkhOAACApZCcAAAASyE5AQAAlvL/A7+/DImP9q7CAAAAAElFTkSuQmCC"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T14:30:56.404842685Z",
+ "start_time": "2025-02-11T12:51:28.121209Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "b1d52ebccd4befee",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-02-12T14:30:56.415139614Z",
+ "start_time": "2025-02-11T12:51:28.174332Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "5052a19722e9e60b",
+ "outputs": [],
+ "execution_count": null
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "name": "python3",
+ "language": "python",
+ "display_name": "Python 3 (ipykernel)"
+ }
+ },
+ "nbformat": 5,
+ "nbformat_minor": 9
+}
diff --git a/notebooks/optuna_viz.ipynb b/notebooks/optuna_viz.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..6c94545446b5b020d58232d1365567ef7b658106
--- /dev/null
+++ b/notebooks/optuna_viz.ipynb
@@ -0,0 +1,17789 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "id": "initial_id",
+ "metadata": {
+ "collapsed": true,
+ "ExecuteTime": {
+ "end_time": "2025-01-21T09:41:42.114098Z",
+ "start_time": "2025-01-21T09:41:41.778362Z"
+ }
+ },
+ "source": "import optuna",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/1gatr/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
+ " from .autonotebook import tqdm as notebook_tqdm\n"
+ ]
+ }
+ ],
+ "execution_count": 1
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-21T09:41:42.412127Z",
+ "start_time": "2025-01-21T09:41:42.282001Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "studies = {\n",
+ " \"LGATr_rinv_03_m_900\": \"/work/gkrzmanc/jetclustering/results/train/Eval_LGATr_ValidationSetSTD2_2025_01_13_17_40_58/clustering_tuning_3.log\",\n",
+ " \"LGATr_rinv_03_m_900_spatial_only\": \"/work/gkrzmanc/jetclustering/results/train/Eval_LGATr_ValidationSetSTD2_2025_01_13_17_40_58/clustering_tuning_3_sp_comp_only.log\",\n",
+ " #\"LGATr_cos_sim\": \"/work/gkrzmanc/jetclustering/results/train/Eval_LGATr_ValidationSetSTD2_2025_01_13_17_40_58/clustering_tuning_3_cos_sim.log\",\n",
+ " #\"LGATr_L_cos_sim\": \"/work/gkrzmanc/jetclustering/results/train/Eval_LGATr_ValidationSetSTD2_2025_01_13_17_40_58/clustering_tuning_3_lorentz_cos_sim.log\",\n",
+ " \"Identity_rinv_03_m_900\": \"/work/gkrzmanc/jetclustering/results/train/Eval_Identity_ValSet_STD2_2025_01_13_17_59_01/clustering_tuning_3.log\",\n",
+ " \"LGATr_cos_sim\": \"/work/gkrzmanc/jetclustering/results/train/Eval_Quark_dist_loss_2025_01_18_13_11_16/clustering_tuning_3_cos_sim.log\",\n",
+ " \"LGATr_qd_norm\": \"/work/gkrzmanc/jetclustering/results/train/Eval_Quark_dist_loss_2025_01_18_13_11_16/clustering_tuning_3_norm.log\",\n",
+ " \"lgatr_no_coords_loss\": \"/work/gkrzmanc/jetclustering/results/train/Eval_LGATr_no_coords_loss_1_2025_01_20_16_22_21/clustering_tuning_3_sp_comp_only.log\",\n",
+ " # clustering_tuning_3_norm.log\n",
+ "}\n",
+ "studies = {key: optuna.load_study(study_name=\"clustering\", storage=optuna.storages.JournalStorage(\n",
+ " optuna.storages.journal.JournalFileBackend(studies[key])\n",
+ ")) for key in studies}"
+ ],
+ "id": "8f347dab4e47fecb",
+ "outputs": [],
+ "execution_count": 2
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:42.610682Z",
+ "start_time": "2025-01-20T14:00:42.563361Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "# Visualize the study\n",
+ "study = studies[\"LGATr_rinv_03_m_900\"]\n",
+ "print(study.best_params)\n",
+ "# best value:\n",
+ "print(study.best_value)\n",
+ "suffix = \"{}-{}-{}\".format(study.best_params[\"min_cluster_size\"], study.best_params[\"min_samples\"], study.best_params[\"epsilon\"])\n",
+ "print(suffix)\n",
+ "optuna.visualization.plot_optimization_history(study)\n"
+ ],
+ "id": "34b0b005d1e3ac5a",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'min_cluster_size': 11, 'min_samples': 18, 'epsilon': 0.47532971250006545}\n",
+ "0.7560372377379465\n",
+ "11-18-0.47532971250006545\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "mode": "markers",
+ "name": "Objective Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103
+ ],
+ "y": [
+ 0.7527412434448526,
+ 0.7416098985124426,
+ 0.7526683431126012,
+ 0.7517276251474801,
+ 0.732224163111022,
+ 0.7546770011431121,
+ 0.7089335534931389,
+ 0.7492181229415185,
+ 0.7513066563424683,
+ 0.750772141684521,
+ 0.7489077501043551,
+ 0.7495501481050854,
+ 0.7386985721541848,
+ 0.7376711362032463,
+ 0.7346163657492703,
+ 0.7346163657492703,
+ 0.7376711362032463,
+ 0.7356908081151536,
+ 0.7534128506686685,
+ 0.7534128506686685,
+ 0.7529713029198096,
+ 0.7531135939371988,
+ 0.7535319196366373,
+ 0.7528052252554011,
+ 0.7531135939371988,
+ 0.7530709450990224,
+ 0.7528262386601534,
+ 0.7529378925331471,
+ 0.7550077898953929,
+ 0.7548048922539313,
+ 0.7533900890158343,
+ 0.7491105181231932,
+ 0.7494443209602134,
+ 0.7538926975491965,
+ 0.7544146591633633,
+ 0.7546049711495783,
+ 0.7543937461883906,
+ 0.7549922343021965,
+ 0.7522593921192404,
+ 0.7451732088785177,
+ 0.7409469201436246,
+ 0.7494536501701292,
+ 0.7546770011431121,
+ 0.7452551900706852,
+ 0.7452551900706852,
+ 0.7540901362914241,
+ 0.7543918353689142,
+ 0.7543341323373656,
+ 0.7527687660812171,
+ 0.7543341323373656,
+ 0.7452120669891239,
+ 0.7500980996692641,
+ 0.7535315673165683,
+ 0.7505888951205832,
+ 0.713831478537361,
+ 0.7527687660812171,
+ 0.7519995525476817,
+ 0.7452120669891239,
+ 0.7134883984474601,
+ 0.7530918972880041,
+ 0.7546070159857904,
+ 0.7551088405153266,
+ 0.7551088405153266,
+ 0.7550187421907539,
+ 0.7558323832828185,
+ 0.7550187421907539,
+ 0.7558323832828185,
+ 0.7544960035523979,
+ 0.7546834176441157,
+ 0.7547043944742474,
+ 0.7547043944742474,
+ 0.7546834176441157,
+ 0.7546834176441157,
+ 0.7547999332183204,
+ 0.7547999332183204,
+ 0.7542888919783124,
+ 0.7542888919783124,
+ 0.7542888919783124,
+ 0.7524901229759056,
+ 0.75535431539765,
+ 0.7548845470692718,
+ 0.7530335077368362,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7548290408525754,
+ 0.7560372377379465,
+ 0.7533642240781333,
+ 0.7560372377379465,
+ 0.755443234836703,
+ 0.7235449735449735,
+ 0.7536554178017457,
+ 0.755443234836703,
+ 0.755443234836703,
+ 0.755443234836703,
+ 0.7554084867359991,
+ 0.755443234836703,
+ 0.755443234836703,
+ 0.7538958147818344,
+ 0.7553626575411068,
+ 0.7542691589826447,
+ 0.7542691589826447,
+ 0.7530682102802437,
+ 0.7530682102802437,
+ 0.755443234836703
+ ],
+ "type": "scatter"
+ },
+ {
+ "mode": "lines",
+ "name": "Best Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105
+ ],
+ "y": [
+ 0.7527412434448526,
+ 0.7527412434448526,
+ 0.7527412434448526,
+ 0.7527412434448526,
+ 0.7527412434448526,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7546770011431121,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7550077898953929,
+ 0.7551088405153266,
+ 0.7551088405153266,
+ 0.7551088405153266,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7558323832828185,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465,
+ 0.7560372377379465
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc"
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Optimization History Plot"
+ },
+ "xaxis": {
+ "title": {
+ "text": "Trial"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 56
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:42.689701Z",
+ "start_time": "2025-01-20T14:00:42.662870Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "optuna.visualization.plot_contour(study, params=[\"min_cluster_size\", \"min_samples\"])",
+ "id": "c01a0cab54a63489",
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "colorbar": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(247,251,255)"
+ ],
+ [
+ 0.125,
+ "rgb(222,235,247)"
+ ],
+ [
+ 0.25,
+ "rgb(198,219,239)"
+ ],
+ [
+ 0.375,
+ "rgb(158,202,225)"
+ ],
+ [
+ 0.5,
+ "rgb(107,174,214)"
+ ],
+ [
+ 0.625,
+ "rgb(66,146,198)"
+ ],
+ [
+ 0.75,
+ "rgb(33,113,181)"
+ ],
+ [
+ 0.875,
+ "rgb(8,81,156)"
+ ],
+ [
+ 1.0,
+ "rgb(8,48,107)"
+ ]
+ ],
+ "connectgaps": true,
+ "contours": {
+ "coloring": "heatmap"
+ },
+ "hoverinfo": "none",
+ "line": {
+ "smoothing": 1.3
+ },
+ "reversescale": false,
+ "x": [
+ 3.75,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 20,
+ 21,
+ 22,
+ 24,
+ 29,
+ 30,
+ 31.25
+ ],
+ "y": [
+ 0.5999999999999999,
+ 2,
+ 5,
+ 6,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 26,
+ 27,
+ 30,
+ 31.4
+ ],
+ "z": [
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7494443209602134,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.7517276251474801,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.750772141684521,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.7527412434448526,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7495501481050854,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ 0.7529378925331471,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.7526683431126012,
+ null,
+ null,
+ null,
+ 0.7535319196366373,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ 0.7530709450990224,
+ 0.7529713029198096,
+ null,
+ 0.7534128506686685,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ 0.7542691589826447,
+ null,
+ 0.7538958147818344,
+ null,
+ 0.7536554178017457,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.7543918353689142,
+ 0.7543341323373656,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ 0.7550077898953929,
+ null,
+ null,
+ null,
+ null,
+ 0.7548845470692718,
+ 0.7549922343021965,
+ null,
+ null,
+ null,
+ null,
+ 0.7513066563424683,
+ 0.7494536501701292,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ 0.7553626575411068,
+ 0.7554084867359991,
+ null,
+ 0.755443234836703,
+ null,
+ null,
+ 0.7546049711495783,
+ 0.7544146591633633,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7547043944742474,
+ null,
+ null,
+ 0.7546070159857904,
+ null,
+ 0.7533900890158343,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7558323832828185,
+ 0.7560372377379465,
+ 0.75535431539765,
+ 0.7551088405153266,
+ null,
+ 0.7538926975491965,
+ 0.7533642240781333,
+ 0.7530918972880041,
+ null,
+ null,
+ null,
+ null,
+ 0.7416098985124426,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7547999332183204,
+ null,
+ 0.7542888919783124,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7409469201436246,
+ null,
+ 0.7134883984474601,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7530682102802437,
+ 0.7524901229759056,
+ null,
+ 0.7522593921192404,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7451732088785177,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ 0.7546770011431121,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7489077501043551,
+ null,
+ null,
+ 0.7452551900706852,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7089335534931389,
+ null
+ ],
+ [
+ null,
+ 0.7535315673165683,
+ 0.7527687660812171,
+ 0.7519995525476817,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7452120669891239,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.713831478537361,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.7505888951205832,
+ 0.7500980996692641,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7386985721541848,
+ 0.7376711362032463,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7356908081151536,
+ 0.7346163657492703,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.732224163111022,
+ null,
+ null,
+ null,
+ 0.7235449735449735,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ]
+ ],
+ "type": "contour"
+ },
+ {
+ "marker": {
+ "color": "black",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Feasible Trial",
+ "showlegend": false,
+ "x": [
+ 5,
+ 24,
+ 5,
+ 5,
+ 5,
+ 6,
+ 30,
+ 18,
+ 20,
+ 13,
+ 18,
+ 18,
+ 11,
+ 12,
+ 12,
+ 12,
+ 12,
+ 11,
+ 11,
+ 11,
+ 9,
+ 9,
+ 9,
+ 8,
+ 9,
+ 8,
+ 8,
+ 8,
+ 8,
+ 14,
+ 15,
+ 15,
+ 15,
+ 15,
+ 15,
+ 14,
+ 15,
+ 14,
+ 14,
+ 22,
+ 24,
+ 21,
+ 6,
+ 22,
+ 22,
+ 6,
+ 5,
+ 6,
+ 6,
+ 6,
+ 17,
+ 6,
+ 5,
+ 5,
+ 29,
+ 6,
+ 7,
+ 17,
+ 30,
+ 17,
+ 13,
+ 13,
+ 13,
+ 13,
+ 10,
+ 13,
+ 10,
+ 13,
+ 10,
+ 10,
+ 10,
+ 10,
+ 10,
+ 10,
+ 10,
+ 12,
+ 12,
+ 12,
+ 12,
+ 12,
+ 13,
+ 11,
+ 11,
+ 11,
+ 13,
+ 11,
+ 16,
+ 11,
+ 11,
+ 9,
+ 11,
+ 11,
+ 11,
+ 11,
+ 9,
+ 11,
+ 11,
+ 9,
+ 8,
+ 7,
+ 7,
+ 11,
+ 11,
+ 11
+ ],
+ "y": [
+ 6,
+ 18,
+ 11,
+ 5,
+ 30,
+ 21,
+ 22,
+ 6,
+ 15,
+ 5,
+ 21,
+ 6,
+ 26,
+ 26,
+ 27,
+ 27,
+ 26,
+ 27,
+ 12,
+ 12,
+ 12,
+ 11,
+ 11,
+ 10,
+ 11,
+ 12,
+ 10,
+ 10,
+ 15,
+ 15,
+ 17,
+ 2,
+ 2,
+ 18,
+ 16,
+ 16,
+ 16,
+ 15,
+ 20,
+ 20,
+ 19,
+ 15,
+ 21,
+ 21,
+ 21,
+ 14,
+ 14,
+ 14,
+ 23,
+ 14,
+ 23,
+ 24,
+ 23,
+ 24,
+ 23,
+ 23,
+ 23,
+ 23,
+ 19,
+ 18,
+ 17,
+ 18,
+ 18,
+ 18,
+ 18,
+ 18,
+ 18,
+ 17,
+ 17,
+ 17,
+ 17,
+ 17,
+ 17,
+ 19,
+ 19,
+ 19,
+ 19,
+ 19,
+ 20,
+ 18,
+ 15,
+ 20,
+ 18,
+ 18,
+ 15,
+ 18,
+ 18,
+ 18,
+ 16,
+ 30,
+ 13,
+ 16,
+ 16,
+ 16,
+ 16,
+ 16,
+ 16,
+ 13,
+ 16,
+ 13,
+ 13,
+ 20,
+ 20,
+ 16
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Contour Plot"
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ },
+ "xaxis": {
+ "title": {
+ "text": "min_cluster_size"
+ },
+ "range": [
+ 3.75,
+ 31.25
+ ]
+ },
+ "yaxis": {
+ "title": {
+ "text": "min_samples"
+ },
+ "range": [
+ 0.5999999999999999,
+ 31.4
+ ]
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 57
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:42.747923Z",
+ "start_time": "2025-01-20T14:00:42.713720Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "optuna.visualization.plot_contour(study, params=[\"min_cluster_size\", \"epsilon\"])\n",
+ "id": "9f4f8415f559acf2",
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "colorbar": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(247,251,255)"
+ ],
+ [
+ 0.125,
+ "rgb(222,235,247)"
+ ],
+ [
+ 0.25,
+ "rgb(198,219,239)"
+ ],
+ [
+ 0.375,
+ "rgb(158,202,225)"
+ ],
+ [
+ 0.5,
+ "rgb(107,174,214)"
+ ],
+ [
+ 0.625,
+ "rgb(66,146,198)"
+ ],
+ [
+ 0.75,
+ "rgb(33,113,181)"
+ ],
+ [
+ 0.875,
+ "rgb(8,81,156)"
+ ],
+ [
+ 1.0,
+ "rgb(8,48,107)"
+ ]
+ ],
+ "connectgaps": true,
+ "contours": {
+ "coloring": "heatmap"
+ },
+ "hoverinfo": "none",
+ "line": {
+ "smoothing": 1.3
+ },
+ "reversescale": false,
+ "x": [
+ -0.012952436055636535,
+ 0.011462725129060491,
+ 0.013906441763968026,
+ 0.018836149928239204,
+ 0.022987048818077428,
+ 0.03551703720921899,
+ 0.051208070675276066,
+ 0.05292583222008445,
+ 0.061785461489583166,
+ 0.08243257643160541,
+ 0.08499319665108682,
+ 0.08654417808275268,
+ 0.09906171624803761,
+ 0.10026227935307097,
+ 0.13191165923493475,
+ 0.1327405758199739,
+ 0.14868943698828835,
+ 0.15203089566188602,
+ 0.15643729251056349,
+ 0.167411193175869,
+ 0.170028574114359,
+ 0.17410935308598827,
+ 0.18433806887581886,
+ 0.19120336999184576,
+ 0.21536126063508682,
+ 0.21632774865716925,
+ 0.22014735775994554,
+ 0.2234924284097016,
+ 0.22375490548957666,
+ 0.22700027364506797,
+ 0.22724920703994125,
+ 0.24534624174801892,
+ 0.2530114798533376,
+ 0.27026849579712864,
+ 0.28131782294287294,
+ 0.2834204869358135,
+ 0.28887934504566226,
+ 0.28888535845580415,
+ 0.2957746335366408,
+ 0.2968832664046441,
+ 0.3042516222440772,
+ 0.326573980098689,
+ 0.3303459321192753,
+ 0.3461103302828612,
+ 0.3462669917046425,
+ 0.35521504853677116,
+ 0.35615944002462246,
+ 0.3562992217787199,
+ 0.36695140263027887,
+ 0.37327840213930247,
+ 0.37679141310512176,
+ 0.37769235761690845,
+ 0.38481071545202994,
+ 0.385219484059104,
+ 0.38551483488411564,
+ 0.39047738469753135,
+ 0.3929625027334567,
+ 0.39476066389864806,
+ 0.39915829485855553,
+ 0.40738062017011617,
+ 0.40865844551767366,
+ 0.41086122690634935,
+ 0.4146769782463874,
+ 0.41789060957834573,
+ 0.4232324148744977,
+ 0.4252442976686744,
+ 0.42792234961476716,
+ 0.43292981449255147,
+ 0.43471546433148534,
+ 0.43665880447313854,
+ 0.443123459274774,
+ 0.44400419870206076,
+ 0.44871610107245535,
+ 0.4490452259847953,
+ 0.4492030086643146,
+ 0.4520795007415043,
+ 0.4590546424546449,
+ 0.4595978455156164,
+ 0.46106624883426467,
+ 0.4614674113763814,
+ 0.4620483779494062,
+ 0.46710140748004936,
+ 0.46802573836745837,
+ 0.4687526220023154,
+ 0.4695021437193326,
+ 0.47009257271086013,
+ 0.47200395121413835,
+ 0.47532971250006545,
+ 0.476771030072234,
+ 0.4772559983806227,
+ 0.4777577168560422,
+ 0.47834142087030246,
+ 0.47840298648223034,
+ 0.48195181652006674,
+ 0.48534816218068577,
+ 0.4855975057180826,
+ 0.4857832612969738,
+ 0.48628885880417483,
+ 0.48658871434286494,
+ 0.4889535595054149,
+ 0.4910588508656176,
+ 0.4964325395274634,
+ 0.4980073491131503,
+ 0.4985223144614186,
+ 0.49976594882300096,
+ 0.524181110007698
+ ],
+ "y": [
+ 3.75,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 20,
+ 21,
+ 22,
+ 24,
+ 29,
+ 30,
+ 31.25
+ ],
+ "z": [
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ 0.7526683431126012,
+ 0.7535315673165683,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7505888951205832,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.732224163111022,
+ null,
+ null,
+ 0.7517276251474801,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7543918353689142,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7527412434448526,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ 0.7527687660812171,
+ null,
+ null,
+ null,
+ 0.7546770011431121,
+ null,
+ null,
+ null,
+ null,
+ 0.7500980996692641,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7546770011431121,
+ null,
+ null,
+ null,
+ null,
+ 0.7540901362914241,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7527687660812171,
+ null,
+ null,
+ 0.7543341323373656,
+ 0.7543341323373656,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7519995525476817,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7542691589826447,
+ 0.7542691589826447,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7528052252554011,
+ null,
+ 0.7530709450990224,
+ null,
+ 0.7528262386601534,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7529378925331471,
+ null,
+ null,
+ 0.7550077898953929,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7553626575411068,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7531135939371988,
+ null,
+ 0.7529713029198096,
+ null,
+ 0.7531135939371988,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7538958147818344,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7235449735449735,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7554084867359991,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7535319196366373,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7546834176441157,
+ 0.7546834176441157,
+ 0.7547999332183204,
+ 0.7546834176441157,
+ null,
+ null,
+ 0.7547043944742474,
+ null,
+ 0.7558323832828185,
+ 0.7547043944742474,
+ null,
+ null,
+ null,
+ 0.7558323832828185,
+ 0.7547999332183204,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7534128506686685,
+ 0.7534128506686685,
+ null,
+ null,
+ null,
+ 0.7356908081151536,
+ 0.7386985721541848,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.755443234836703,
+ null,
+ 0.755443234836703,
+ 0.755443234836703,
+ null,
+ null,
+ null,
+ 0.7560372377379465,
+ 0.7536554178017457,
+ 0.755443234836703,
+ null,
+ 0.7560372377379465,
+ null,
+ null,
+ null,
+ 0.7560372377379465,
+ null,
+ 0.7560372377379465,
+ 0.7530335077368362,
+ null,
+ null,
+ 0.755443234836703,
+ null,
+ 0.755443234836703,
+ 0.7530682102802437,
+ 0.755443234836703,
+ 0.7530682102802437,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7376711362032463,
+ 0.7346163657492703,
+ 0.7376711362032463,
+ null,
+ null,
+ 0.7346163657492703,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7542888919783124,
+ 0.7542888919783124,
+ null,
+ null,
+ 0.7542888919783124,
+ 0.7524901229759056,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.75535431539765,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7550187421907539,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.750772141684521,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7544960035523979,
+ 0.7550187421907539,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7548290408525754,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7548845470692718,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7551088405153266,
+ null,
+ 0.7546070159857904,
+ 0.7551088405153266,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7522593921192404,
+ null,
+ null,
+ null,
+ null,
+ 0.7548048922539313,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7546049711495783,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7549922343021965,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7543937461883906,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7538926975491965,
+ null,
+ null,
+ 0.7491105181231932,
+ 0.7544146591633633,
+ null,
+ null,
+ 0.7533900890158343,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7494443209602134,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7533642240781333,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7452120669891239,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7530918972880041,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7452120669891239,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7489077501043551,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7492181229415185,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7495501481050854,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7513066563424683,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7494536501701292,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7452551900706852,
+ 0.7452551900706852,
+ null,
+ 0.7451732088785177,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7416098985124426,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7409469201436246,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.713831478537361,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.7134883984474601,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7089335534931389,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ]
+ ],
+ "type": "contour"
+ },
+ {
+ "marker": {
+ "color": "black",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Feasible Trial",
+ "showlegend": false,
+ "x": [
+ 0.49976594882300096,
+ 0.13191165923493475,
+ 0.013906441763968026,
+ 0.22724920703994125,
+ 0.2234924284097016,
+ 0.17410935308598827,
+ 0.47200395121413835,
+ 0.14868943698828835,
+ 0.40738062017011617,
+ 0.2530114798533376,
+ 0.05292583222008445,
+ 0.3929625027334567,
+ 0.3562992217787199,
+ 0.3461103302828612,
+ 0.36695140263027887,
+ 0.3462669917046425,
+ 0.35521504853677116,
+ 0.35615944002462246,
+ 0.326573980098689,
+ 0.3303459321192753,
+ 0.15203089566188602,
+ 0.1327405758199739,
+ 0.4985223144614186,
+ 0.15643729251056349,
+ 0.167411193175869,
+ 0.170028574114359,
+ 0.18433806887581886,
+ 0.2834204869358135,
+ 0.2957746335366408,
+ 0.2968832664046441,
+ 0.3042516222440772,
+ 0.28887934504566226,
+ 0.42792234961476716,
+ 0.27026849579712864,
+ 0.28888535845580415,
+ 0.48534816218068577,
+ 0.09906171624803761,
+ 0.4910588508656176,
+ 0.28131782294287294,
+ 0.24534624174801892,
+ 0.21632774865716925,
+ 0.21536126063508682,
+ 0.061785461489583166,
+ 0.22375490548957666,
+ 0.22700027364506797,
+ 0.22014735775994554,
+ 0.43471546433148534,
+ 0.4590546424546449,
+ 0.4490452259847953,
+ 0.4595978455156164,
+ 0.443123459274774,
+ 0.10026227935307097,
+ 0.018836149928239204,
+ 0.08499319665108682,
+ 0.08243257643160541,
+ 0.022987048818077428,
+ 0.051208070675276066,
+ 0.03551703720921899,
+ 0.011462725129060491,
+ 0.08654417808275268,
+ 0.4964325395274634,
+ 0.4889535595054149,
+ 0.4980073491131503,
+ 0.19120336999184576,
+ 0.4146769782463874,
+ 0.38551483488411564,
+ 0.39476066389864806,
+ 0.385219484059104,
+ 0.37679141310512176,
+ 0.39915829485855553,
+ 0.39047738469753135,
+ 0.37327840213930247,
+ 0.38481071545202994,
+ 0.37769235761690845,
+ 0.41789060957834573,
+ 0.40865844551767366,
+ 0.41086122690634935,
+ 0.4232324148744977,
+ 0.4252442976686744,
+ 0.476771030072234,
+ 0.47840298648223034,
+ 0.4777577168560422,
+ 0.47532971250006545,
+ 0.4772559983806227,
+ 0.46802573836745837,
+ 0.4687526220023154,
+ 0.44400419870206076,
+ 0.4614674113763814,
+ 0.46710140748004936,
+ 0.46106624883426467,
+ 0.4620483779494062,
+ 0.48628885880417483,
+ 0.48195181652006674,
+ 0.4855975057180826,
+ 0.47834142087030246,
+ 0.4492030086643146,
+ 0.4520795007415043,
+ 0.43292981449255147,
+ 0.43665880447313854,
+ 0.47009257271086013,
+ 0.4695021437193326,
+ 0.4857832612969738,
+ 0.48658871434286494,
+ 0.44871610107245535
+ ],
+ "y": [
+ 5,
+ 24,
+ 5,
+ 5,
+ 5,
+ 6,
+ 30,
+ 18,
+ 20,
+ 13,
+ 18,
+ 18,
+ 11,
+ 12,
+ 12,
+ 12,
+ 12,
+ 11,
+ 11,
+ 11,
+ 9,
+ 9,
+ 9,
+ 8,
+ 9,
+ 8,
+ 8,
+ 8,
+ 8,
+ 14,
+ 15,
+ 15,
+ 15,
+ 15,
+ 15,
+ 14,
+ 15,
+ 14,
+ 14,
+ 22,
+ 24,
+ 21,
+ 6,
+ 22,
+ 22,
+ 6,
+ 5,
+ 6,
+ 6,
+ 6,
+ 17,
+ 6,
+ 5,
+ 5,
+ 29,
+ 6,
+ 7,
+ 17,
+ 30,
+ 17,
+ 13,
+ 13,
+ 13,
+ 13,
+ 10,
+ 13,
+ 10,
+ 13,
+ 10,
+ 10,
+ 10,
+ 10,
+ 10,
+ 10,
+ 10,
+ 12,
+ 12,
+ 12,
+ 12,
+ 12,
+ 13,
+ 11,
+ 11,
+ 11,
+ 13,
+ 11,
+ 16,
+ 11,
+ 11,
+ 9,
+ 11,
+ 11,
+ 11,
+ 11,
+ 9,
+ 11,
+ 11,
+ 9,
+ 8,
+ 7,
+ 7,
+ 11,
+ 11,
+ 11
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Contour Plot"
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ },
+ "xaxis": {
+ "title": {
+ "text": "epsilon"
+ },
+ "range": [
+ -0.012952436055636535,
+ 0.524181110007698
+ ]
+ },
+ "yaxis": {
+ "title": {
+ "text": "min_cluster_size"
+ },
+ "range": [
+ 3.75,
+ 31.25
+ ]
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 58
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:42.825689Z",
+ "start_time": "2025-01-20T14:00:42.793582Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# visualize the study\n",
+ "study = studies[\"Identity_rinv_03_m_900\"]\n",
+ "print(study.best_params)\n",
+ "print(study.best_value)\n",
+ "\n",
+ "optuna.visualization.plot_optimization_history(study)\n"
+ ],
+ "id": "64a387a752d949a6",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'min_cluster_size': 9, 'min_samples': 2, 'epsilon': 0.05112552955378122}\n",
+ "0.7000755330893034\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "mode": "markers",
+ "name": "Objective Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93
+ ],
+ "y": [
+ 0.6445299873644618,
+ 0.4659474915518586,
+ 0.5471884451577063,
+ 0.34944822166797634,
+ 0.48621376695160357,
+ 0.6363041408852929,
+ 0.4162038114876775,
+ 0.6145268054147535,
+ 0.5070031545741325,
+ 0.540342828802579,
+ 0.529184832042154,
+ 0.5376531853191556,
+ 0.5274842098680508,
+ 0.576738499159407,
+ 0.5830690412295682,
+ 0.5463091814330334,
+ 0.5794507111329082,
+ 0.4694970607446114,
+ 0.3157675339562997,
+ 0.2979170440137656,
+ 0.48722349969232753,
+ 0.6563702028951462,
+ 0.6055815067672775,
+ 0.6145451292602201,
+ 0.653686899832614,
+ 0.6524001293394868,
+ 0.6468578832675658,
+ 0.6468578832675658,
+ 0.6280325048935287,
+ 0.6379136818424013,
+ 0.6280511314767031,
+ 0.5915595220087733,
+ 0.6683768656716418,
+ 0.6431301075900995,
+ 0.6742863807330087,
+ 0.6797168574674474,
+ 0.6536501540649443,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830253872507394,
+ 0.6830253872507394,
+ 0.6763164026095061,
+ 0.7000755330893034,
+ 0.6784781237800667,
+ 0.6860039260496325,
+ 0.6783580072670491,
+ 0.6782154437372404,
+ 0.6782154437372404,
+ 0.6941686065356396,
+ 0.6913558731265249,
+ 0.27532152908903057,
+ 0.2965673462275658,
+ 0.6914161220043572,
+ 0.6914362072972345,
+ 0.6907569859989542,
+ 0.6854841046744139,
+ 0.6884732492387995,
+ 0.6937702265372169,
+ 0.5909804395073653,
+ 0.6093811350388112,
+ 0.6341084808501746,
+ 0.6341084808501746,
+ 0.6926747447872986,
+ 0.680678873977468,
+ 0.6822740524781341,
+ 0.668419668682619,
+ 0.6445450270397366,
+ 0.6445299873644618,
+ 0.48843800322061187,
+ 0.4900888145192431,
+ 0.6705834448257809,
+ 0.5629210372512227,
+ 0.6842886669965941,
+ 0.6696358396646581,
+ 0.6843269678621332,
+ 0.6636230611647643,
+ 0.5458451383916062,
+ 0.3117822203317737,
+ 0.28272743714957493,
+ 0.29302292160666815,
+ 0.5880674054956733,
+ 0.6887213685126123,
+ 0.6884732492387995,
+ 0.6887213685126123,
+ 0.6887998141047985,
+ 0.6520120753832175,
+ 0.6744809890366223,
+ 0.6372401592215834,
+ 0.6518443658413341,
+ 0.6578209791877869,
+ 0.6804879479209431,
+ 0.6168062200956939
+ ],
+ "type": "scatter"
+ },
+ {
+ "mode": "lines",
+ "name": "Best Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96
+ ],
+ "y": [
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6683768656716418,
+ 0.6683768656716418,
+ 0.6742863807330087,
+ 0.6797168574674474,
+ 0.6797168574674474,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc"
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Optimization History Plot"
+ },
+ "xaxis": {
+ "title": {
+ "text": "Trial"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 59
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:42.918625Z",
+ "start_time": "2025-01-20T14:00:42.893260Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "optuna.visualization.plot_contour(study, params=[\"min_cluster_size\", \"min_samples\"])\n",
+ "id": "58174d74f894b680",
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "colorbar": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(247,251,255)"
+ ],
+ [
+ 0.125,
+ "rgb(222,235,247)"
+ ],
+ [
+ 0.25,
+ "rgb(198,219,239)"
+ ],
+ [
+ 0.375,
+ "rgb(158,202,225)"
+ ],
+ [
+ 0.5,
+ "rgb(107,174,214)"
+ ],
+ [
+ 0.625,
+ "rgb(66,146,198)"
+ ],
+ [
+ 0.75,
+ "rgb(33,113,181)"
+ ],
+ [
+ 0.875,
+ "rgb(8,81,156)"
+ ],
+ [
+ 1.0,
+ "rgb(8,48,107)"
+ ]
+ ],
+ "connectgaps": true,
+ "contours": {
+ "coloring": "heatmap"
+ },
+ "hoverinfo": "none",
+ "line": {
+ "smoothing": 1.3
+ },
+ "reversescale": false,
+ "x": [
+ 3.75,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 17,
+ 18,
+ 20,
+ 21,
+ 25,
+ 26,
+ 27,
+ 28,
+ 30,
+ 31.25
+ ],
+ "y": [
+ 0.5999999999999999,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 14,
+ 15,
+ 17,
+ 18,
+ 19,
+ 20,
+ 22,
+ 23,
+ 24,
+ 27,
+ 29,
+ 30,
+ 31.4
+ ],
+ "z": [
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.2979170440137656,
+ 0.6784781237800667,
+ 0.3117822203317737,
+ null,
+ 0.7000755330893034,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ 0.6941686065356396,
+ null,
+ 0.6518443658413341,
+ 0.6887998141047985,
+ 0.6937702265372169,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6520120753832175,
+ 0.6372401592215834,
+ null,
+ 0.5909804395073653,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ 0.6914362072972345,
+ 0.6887213685126123,
+ 0.6854841046744139,
+ 0.5458451383916062,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5471884451577063,
+ 0.2965673462275658,
+ null
+ ],
+ [
+ null,
+ null,
+ 0.6860039260496325,
+ null,
+ 0.6843269678621332,
+ null,
+ null,
+ 0.6636230611647643,
+ 0.6705834448257809,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.6830453879941435,
+ null,
+ null,
+ 0.6797168574674474,
+ 0.6763164026095061,
+ null,
+ 0.6683768656716418,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.6536501540649443,
+ null,
+ null,
+ 0.6744809890366223,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6431301075900995,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.540342828802579,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ 0.668419668682619,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6445450270397366,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ 0.6363041408852929,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6145451292602201,
+ 0.6055815067672775,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.6563702028951462,
+ null,
+ 0.653686899832614,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5070031545741325,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ 0.6468578832675658,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ 0.6379136818424013,
+ null,
+ null,
+ null,
+ null,
+ 0.6280511314767031,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5830690412295682,
+ null,
+ 0.576738499159407,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5463091814330334,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ 0.6168062200956939,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5915595220087733,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5880674054956733,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ 0.34944822166797634,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.4659474915518586,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5629210372512227,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.4162038114876775,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5376531853191556,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.529184832042154,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.48621376695160357,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.4900888145192431,
+ 0.48843800322061187,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.48722349969232753,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.4694970607446114,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ]
+ ],
+ "type": "contour"
+ },
+ {
+ "marker": {
+ "color": "black",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Feasible Trial",
+ "showlegend": false,
+ "x": [
+ 14,
+ 5,
+ 28,
+ 7,
+ 21,
+ 7,
+ 9,
+ 17,
+ 27,
+ 26,
+ 13,
+ 15,
+ 21,
+ 13,
+ 11,
+ 21,
+ 10,
+ 9,
+ 9,
+ 5,
+ 5,
+ 5,
+ 18,
+ 17,
+ 7,
+ 7,
+ 7,
+ 7,
+ 12,
+ 7,
+ 12,
+ 11,
+ 11,
+ 15,
+ 8,
+ 8,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 9,
+ 9,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 8,
+ 8,
+ 30,
+ 8,
+ 8,
+ 8,
+ 10,
+ 9,
+ 10,
+ 25,
+ 10,
+ 10,
+ 10,
+ 10,
+ 10,
+ 9,
+ 8,
+ 14,
+ 14,
+ 14,
+ 13,
+ 12,
+ 12,
+ 8,
+ 12,
+ 8,
+ 11,
+ 11,
+ 7,
+ 7,
+ 7,
+ 9,
+ 9,
+ 9,
+ 9,
+ 9,
+ 18,
+ 8,
+ 20,
+ 8,
+ 6,
+ 6,
+ 6
+ ],
+ "y": [
+ 8,
+ 20,
+ 4,
+ 19,
+ 24,
+ 9,
+ 22,
+ 9,
+ 10,
+ 7,
+ 23,
+ 22,
+ 14,
+ 14,
+ 14,
+ 14,
+ 4,
+ 30,
+ 4,
+ 2,
+ 29,
+ 10,
+ 9,
+ 9,
+ 10,
+ 10,
+ 11,
+ 11,
+ 12,
+ 12,
+ 12,
+ 17,
+ 6,
+ 7,
+ 7,
+ 6,
+ 7,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 2,
+ 2,
+ 5,
+ 2,
+ 2,
+ 2,
+ 3,
+ 4,
+ 4,
+ 4,
+ 4,
+ 4,
+ 4,
+ 4,
+ 4,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 8,
+ 8,
+ 8,
+ 27,
+ 27,
+ 5,
+ 20,
+ 5,
+ 5,
+ 5,
+ 5,
+ 4,
+ 2,
+ 2,
+ 2,
+ 18,
+ 4,
+ 4,
+ 4,
+ 3,
+ 3,
+ 7,
+ 3,
+ 3,
+ 3,
+ 5,
+ 15
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Contour Plot"
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ },
+ "xaxis": {
+ "title": {
+ "text": "min_cluster_size"
+ },
+ "range": [
+ 3.75,
+ 31.25
+ ]
+ },
+ "yaxis": {
+ "title": {
+ "text": "min_samples"
+ },
+ "range": [
+ 0.5999999999999999,
+ 31.4
+ ]
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 60
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:43.012657Z",
+ "start_time": "2025-01-20T14:00:42.972008Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "optuna.visualization.plot_contour(study, params=[\"min_cluster_size\", \"epsilon\"])\n",
+ "id": "61970be4f9dd0a52",
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "colorbar": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(247,251,255)"
+ ],
+ [
+ 0.125,
+ "rgb(222,235,247)"
+ ],
+ [
+ 0.25,
+ "rgb(198,219,239)"
+ ],
+ [
+ 0.375,
+ "rgb(158,202,225)"
+ ],
+ [
+ 0.5,
+ "rgb(107,174,214)"
+ ],
+ [
+ 0.625,
+ "rgb(66,146,198)"
+ ],
+ [
+ 0.75,
+ "rgb(33,113,181)"
+ ],
+ [
+ 0.875,
+ "rgb(8,81,156)"
+ ],
+ [
+ 1.0,
+ "rgb(8,48,107)"
+ ]
+ ],
+ "connectgaps": true,
+ "contours": {
+ "coloring": "heatmap"
+ },
+ "hoverinfo": "none",
+ "line": {
+ "smoothing": 1.3
+ },
+ "reversescale": false,
+ "x": [
+ -0.012855098919541005,
+ 0.011263226459545889,
+ 0.013630020043986453,
+ 0.016267773234105474,
+ 0.021950029012550436,
+ 0.024475439353389312,
+ 0.03165932986472511,
+ 0.03217219010617994,
+ 0.03688430433046225,
+ 0.03822246814313676,
+ 0.03835485739579715,
+ 0.040659430256419084,
+ 0.044199192523817155,
+ 0.04674681612215488,
+ 0.04887132738158265,
+ 0.048925942003726935,
+ 0.0498549420385372,
+ 0.0501456146084194,
+ 0.05112552955378122,
+ 0.0588572002048303,
+ 0.059404290631778746,
+ 0.059829787975593754,
+ 0.061566946451765414,
+ 0.061646551459528305,
+ 0.065927942967217,
+ 0.06745441862837374,
+ 0.07046370761739812,
+ 0.07212971495510849,
+ 0.0738655530336822,
+ 0.07487733826147724,
+ 0.07576805408845919,
+ 0.07691518490732062,
+ 0.07801971683099954,
+ 0.07832420100059283,
+ 0.07879644717236631,
+ 0.07939422235829016,
+ 0.08255193716329551,
+ 0.08370767472015733,
+ 0.08478156596751255,
+ 0.08495103643694721,
+ 0.08741522054151135,
+ 0.08804265742891054,
+ 0.09015577481282054,
+ 0.09180152733901467,
+ 0.09184301968320846,
+ 0.09331486853054542,
+ 0.09462503601614727,
+ 0.09697004508260854,
+ 0.10076362835567448,
+ 0.10126559533240051,
+ 0.10311931998174755,
+ 0.10688635236122257,
+ 0.10692189484879672,
+ 0.10740470761531976,
+ 0.10839412662529492,
+ 0.10943578005466859,
+ 0.11481090354070173,
+ 0.11618914824591976,
+ 0.1206650228048842,
+ 0.12142261524707477,
+ 0.12143616224311836,
+ 0.12368284060442458,
+ 0.12956336281064562,
+ 0.13257255926566458,
+ 0.13842115118156287,
+ 0.1391491625488669,
+ 0.13951950351144252,
+ 0.14098675841298333,
+ 0.14846569510331847,
+ 0.14883554516436837,
+ 0.15113619842976073,
+ 0.16172706734587736,
+ 0.1617298963589536,
+ 0.17485511719664615,
+ 0.17568436953783512,
+ 0.17958865484802544,
+ 0.19529504930173058,
+ 0.20065989932586775,
+ 0.20789625836006717,
+ 0.21735492024391928,
+ 0.2295971014499739,
+ 0.2534115610265647,
+ 0.25698704515514065,
+ 0.2670911045647954,
+ 0.2923162374391224,
+ 0.3247276298158274,
+ 0.33451471526946835,
+ 0.34541128204946103,
+ 0.35368454660132287,
+ 0.3866894133473552,
+ 0.394601513604858,
+ 0.4439544855483355,
+ 0.48049991966967187,
+ 0.48951533793958846,
+ 0.49362973404128374,
+ 0.5177480594203706
+ ],
+ "y": [
+ 3.75,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 17,
+ 18,
+ 20,
+ 21,
+ 25,
+ 26,
+ 27,
+ 28,
+ 30,
+ 31.25
+ ],
+ "z": [
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6830253872507394,
+ null,
+ 0.6830253872507394,
+ null,
+ null,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ null,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.48722349969232753,
+ 0.6563702028951462,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6536501540649443,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.2979170440137656,
+ null,
+ null,
+ null,
+ 0.4659474915518586,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ 0.6782154437372404,
+ 0.6782154437372404,
+ 0.6783580072670491,
+ null,
+ 0.6784781237800667,
+ null,
+ 0.6860039260496325,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6168062200956939,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6941686065356396,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6804879479209431,
+ null,
+ null,
+ null,
+ null,
+ 0.6578209791877869,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.6379136818424013,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.653686899832614,
+ null,
+ 0.6468578832675658,
+ null,
+ null,
+ null,
+ 0.6468578832675658,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6524001293394868,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6363041408852929,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.3117822203317737,
+ null,
+ null,
+ 0.29302292160666815,
+ 0.28272743714957493,
+ null,
+ null,
+ null,
+ 0.34944822166797634,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6797168574674474,
+ null,
+ null,
+ 0.6742863807330087,
+ null,
+ null,
+ null,
+ null,
+ 0.6842886669965941,
+ null,
+ 0.6843269678621332,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6907569859989542,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6913558731265249,
+ null,
+ 0.6914161220043572,
+ 0.6914362072972345,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6744809890366223,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.668419668682619,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6518443658413341,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.27532152908903057,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6763164026095061,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7000755330893034,
+ 0.5880674054956733,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6884732492387995,
+ 0.6884732492387995,
+ null,
+ null,
+ 0.6887213685126123,
+ null,
+ null,
+ null,
+ 0.6887213685126123,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6887998141047985,
+ null,
+ null,
+ null,
+ 0.6822740524781341,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.4694970607446114,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.3157675339562997,
+ null,
+ null,
+ null,
+ 0.4162038114876775,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6854841046744139,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6937702265372169,
+ null,
+ null,
+ null,
+ null,
+ 0.6926747447872986,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.680678873977468,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6341084808501746,
+ 0.6341084808501746,
+ null,
+ 0.6093811350388112,
+ null,
+ null,
+ 0.5794507111329082,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5915595220087733,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6683768656716418,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6636230611647643,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5458451383916062,
+ null,
+ 0.5830690412295682,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6280325048935287,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6705834448257809,
+ null,
+ 0.5629210372512227,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6696358396646581,
+ null,
+ null,
+ 0.6280511314767031,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.529184832042154,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.4900888145192431,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.576738499159407,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6445299873644618,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.48843800322061187,
+ null,
+ null,
+ null,
+ null,
+ 0.6445299873644618,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6445450270397366,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6431301075900995,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5376531853191556,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6145268054147535,
+ 0.6145451292602201,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6520120753832175,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6055815067672775,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6372401592215834,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5463091814330334,
+ null,
+ null,
+ 0.5274842098680508,
+ 0.48621376695160357,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5909804395073653,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.540342828802579,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5070031545741325,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5471884451577063,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.2965673462275658,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ]
+ ],
+ "type": "contour"
+ },
+ {
+ "marker": {
+ "color": "black",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Feasible Trial",
+ "showlegend": false,
+ "x": [
+ 0.059404290631778746,
+ 0.394601513604858,
+ 0.08370767472015733,
+ 0.48951533793958846,
+ 0.2923162374391224,
+ 0.19529504930173058,
+ 0.4439544855483355,
+ 0.13951950351144252,
+ 0.17958865484802544,
+ 0.040659430256419084,
+ 0.024475439353389312,
+ 0.12956336281064562,
+ 0.2670911045647954,
+ 0.25698704515514065,
+ 0.2534115610265647,
+ 0.2295971014499739,
+ 0.20065989932586775,
+ 0.20789625836006717,
+ 0.34541128204946103,
+ 0.33451471526946835,
+ 0.09697004508260854,
+ 0.10076362835567448,
+ 0.13842115118156287,
+ 0.14098675841298333,
+ 0.061646551459528305,
+ 0.14883554516436837,
+ 0.06745441862837374,
+ 0.07487733826147724,
+ 0.07046370761739812,
+ 0.011263226459545889,
+ 0.11618914824591976,
+ 0.10311931998174755,
+ 0.11481090354070173,
+ 0.10126559533240051,
+ 0.0501456146084194,
+ 0.04887132738158265,
+ 0.17485511719664615,
+ 0.04674681612215488,
+ 0.044199192523817155,
+ 0.048925942003726935,
+ 0.0498549420385372,
+ 0.03217219010617994,
+ 0.03822246814313676,
+ 0.03835485739579715,
+ 0.05112552955378122,
+ 0.03165932986472511,
+ 0.03688430433046225,
+ 0.021950029012550436,
+ 0.016267773234105474,
+ 0.013630020043986453,
+ 0.07832420100059283,
+ 0.08255193716329551,
+ 0.48049991966967187,
+ 0.49362973404128374,
+ 0.08478156596751255,
+ 0.08495103643694721,
+ 0.07576805408845919,
+ 0.07879644717236631,
+ 0.07212971495510849,
+ 0.08741522054151135,
+ 0.07801971683099954,
+ 0.17568436953783512,
+ 0.1617298963589536,
+ 0.16172706734587736,
+ 0.09331486853054542,
+ 0.12143616224311836,
+ 0.12142261524707477,
+ 0.12368284060442458,
+ 0.1206650228048842,
+ 0.09462503601614727,
+ 0.08804265742891054,
+ 0.09180152733901467,
+ 0.09015577481282054,
+ 0.09184301968320846,
+ 0.061566946451765414,
+ 0.10839412662529492,
+ 0.065927942967217,
+ 0.1391491625488669,
+ 0.21735492024391928,
+ 0.3247276298158274,
+ 0.3866894133473552,
+ 0.35368454660132287,
+ 0.0588572002048303,
+ 0.07691518490732062,
+ 0.0738655530336822,
+ 0.07939422235829016,
+ 0.10943578005466859,
+ 0.10740470761531976,
+ 0.10692189484879672,
+ 0.10688635236122257,
+ 0.15113619842976073,
+ 0.14846569510331847,
+ 0.13257255926566458,
+ 0.059829787975593754
+ ],
+ "y": [
+ 14,
+ 5,
+ 28,
+ 7,
+ 21,
+ 7,
+ 9,
+ 17,
+ 27,
+ 26,
+ 13,
+ 15,
+ 21,
+ 13,
+ 11,
+ 21,
+ 10,
+ 9,
+ 9,
+ 5,
+ 5,
+ 5,
+ 18,
+ 17,
+ 7,
+ 7,
+ 7,
+ 7,
+ 12,
+ 7,
+ 12,
+ 11,
+ 11,
+ 15,
+ 8,
+ 8,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 9,
+ 9,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 8,
+ 8,
+ 30,
+ 8,
+ 8,
+ 8,
+ 10,
+ 9,
+ 10,
+ 25,
+ 10,
+ 10,
+ 10,
+ 10,
+ 10,
+ 9,
+ 8,
+ 14,
+ 14,
+ 14,
+ 13,
+ 12,
+ 12,
+ 8,
+ 12,
+ 8,
+ 11,
+ 11,
+ 7,
+ 7,
+ 7,
+ 9,
+ 9,
+ 9,
+ 9,
+ 9,
+ 18,
+ 8,
+ 20,
+ 8,
+ 6,
+ 6,
+ 6
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Contour Plot"
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ },
+ "xaxis": {
+ "title": {
+ "text": "epsilon"
+ },
+ "range": [
+ -0.012855098919541005,
+ 0.5177480594203706
+ ]
+ },
+ "yaxis": {
+ "title": {
+ "text": "min_cluster_size"
+ },
+ "range": [
+ 3.75,
+ 31.25
+ ]
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 61
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:43.132879Z",
+ "start_time": "2025-01-20T14:00:43.091696Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# visualize the study\n",
+ "study = studies[\"LGATr_L_cos_sim\"]\n",
+ "print(study.best_params)\n",
+ "# Best value:\n",
+ "print(study.best_value)\n",
+ "optuna.visualization.plot_optimization_history(study)\n"
+ ],
+ "id": "fe06d322540f8aa7",
+ "outputs": [
+ {
+ "ename": "KeyError",
+ "evalue": "'LGATr_L_cos_sim'",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mKeyError\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[62], line 2\u001B[0m\n\u001B[1;32m 1\u001B[0m \u001B[38;5;66;03m# visualize the study\u001B[39;00m\n\u001B[0;32m----> 2\u001B[0m study \u001B[38;5;241m=\u001B[39m \u001B[43mstudies\u001B[49m\u001B[43m[\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mLGATr_L_cos_sim\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m]\u001B[49m\n\u001B[1;32m 3\u001B[0m \u001B[38;5;28mprint\u001B[39m(study\u001B[38;5;241m.\u001B[39mbest_params)\n\u001B[1;32m 4\u001B[0m \u001B[38;5;66;03m# Best value:\u001B[39;00m\n",
+ "\u001B[0;31mKeyError\u001B[0m: 'LGATr_L_cos_sim'"
+ ]
+ }
+ ],
+ "execution_count": 62
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:47.873330Z",
+ "start_time": "2025-01-20T14:00:47.851270Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# visualize the study\n",
+ "study = studies[\"LGATr_cos_sim\"]\n",
+ "print(study.best_params)\n",
+ "# Best value:\n",
+ "print(study.best_value)\n",
+ "optuna.visualization.plot_optimization_history(study)\n"
+ ],
+ "id": "ce72217e1d2486e",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'min_cluster_size': 9, 'min_samples': 2, 'epsilon': 0.291086113355078}\n",
+ "0.3893832582148773\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "mode": "markers",
+ "name": "Objective Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 26,
+ 27
+ ],
+ "y": [
+ 0.3893832582148773,
+ 0.035740442361212835,
+ 0.17813146299793184,
+ 0.0235491181397182,
+ 0.21915648403626328,
+ 0.017705242334322455,
+ 0.12193986782090666,
+ 0.04383615021187473,
+ 0.08281770585435508,
+ 0.037333854573885855,
+ 0.012108580219343953,
+ 0.35401672826298386,
+ 0.35401672826298386,
+ 0.35401672826298386,
+ 0.3849649541708388,
+ 0.14311960316002204,
+ 0.1477340420657105,
+ 0.1477340420657105,
+ 0.20768789443488242,
+ 0.20768789443488242,
+ 0.2735049938893337,
+ 0.11591227251516566,
+ 0.35401672826298386,
+ 0.35401672826298386,
+ 0.29263420724094885,
+ 0.15145702018817941,
+ 0.3009427720807145
+ ],
+ "type": "scatter"
+ },
+ {
+ "mode": "lines",
+ "name": "Best Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28
+ ],
+ "y": [
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc"
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Optimization History Plot"
+ },
+ "xaxis": {
+ "title": {
+ "text": "Trial"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 63
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:48.152022Z",
+ "start_time": "2025-01-20T14:00:48.114242Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# visualize the study\n",
+ "study = studies[\"LGATr_qd_norm\"]\n",
+ "print(study.best_params)\n",
+ "# Best value:\n",
+ "print(study.best_value)\n",
+ "optuna.visualization.plot_optimization_history(study)\n"
+ ],
+ "id": "9d31914104d982bd",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'min_cluster_size': 8, 'min_samples': 3, 'epsilon': 0.09454847291075721}\n",
+ "0.7531938948558508\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "mode": "markers",
+ "name": "Objective Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 182,
+ 184,
+ 185,
+ 186,
+ 188,
+ 189,
+ 190,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 206,
+ 207,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235
+ ],
+ "y": [
+ 0.7281221513217867,
+ 0.5625920471281296,
+ 0.6974308812106216,
+ 0.6192373363688104,
+ 0.713149811981514,
+ 0.7205494224820502,
+ 0.32300611389709416,
+ 0.6176796573106071,
+ 0.656228847229171,
+ 0.7056665424632406,
+ 0.7044825996773451,
+ 0.7342309215364597,
+ 0.35713080168776373,
+ 0.7159283154121865,
+ 0.6859764013501428,
+ 0.33129463217958793,
+ 0.36762928139691065,
+ 0.7126640045636051,
+ 0.6859800127086823,
+ 0.6813913043478261,
+ 0.6813913043478261,
+ 0.6828703033112199,
+ 0.6846372111876773,
+ 0.6813913043478261,
+ 0.6914459700120642,
+ 0.7011836011207044,
+ 0.7383534875817734,
+ 0.7354879018516414,
+ 0.7383534875817734,
+ 0.7376607158062044,
+ 0.7372302107263393,
+ 0.7097380945595485,
+ 0.737762138539686,
+ 0.7398951989803144,
+ 0.737753306465346,
+ 0.738625417870701,
+ 0.7399099328745009,
+ 0.7369287539029237,
+ 0.7398618033529679,
+ 0.7394004707750773,
+ 0.7386789240721826,
+ 0.7382432240669788,
+ 0.735386799148332,
+ 0.7305430057113631,
+ 0.7247219846022241,
+ 0.7316990029258871,
+ 0.7371736662883087,
+ 0.7325007096224807,
+ 0.7319815982279774,
+ 0.7318375461516615,
+ 0.7345085015186352,
+ 0.7352072685973878,
+ 0.7321042449072493,
+ 0.7304189435336976,
+ 0.7239775094899678,
+ 0.7303828091646507,
+ 0.7269202258082911,
+ 0.6834905111188729,
+ 0.7462323635027003,
+ 0.6310361273399309,
+ 0.7385459999434022,
+ 0.7384894020431843,
+ 0.7442426989207717,
+ 0.7494838070994201,
+ 0.7484374558104019,
+ 0.7467429477738756,
+ 0.7458299113590666,
+ 0.7493567813622097,
+ 0.7455550829434284,
+ 0.7497524962520861,
+ 0.7499929288643755,
+ 0.7336520402936657,
+ 0.7395883605393896,
+ 0.7456195066628862,
+ 0.7428279560738912,
+ 0.7446820579726587,
+ 0.4600645161290323,
+ 0.7427631765473052,
+ 0.7483633271928581,
+ 0.7472808337829779,
+ 0.7473051174401453,
+ 0.7476105391531239,
+ 0.7409124314545763,
+ 0.7471098674354844,
+ 0.7480065599728553,
+ 0.7517264802445376,
+ 0.7471098674354844,
+ 0.746030388551555,
+ 0.7446315729276871,
+ 0.7475860502101556,
+ 0.7472164478742488,
+ 0.7475017793594305,
+ 0.7467288656274889,
+ 0.7513940388915621,
+ 0.7514529142921625,
+ 0.7481697147864431,
+ 0.7511572767302699,
+ 0.7292852087756547,
+ 0.751079624036806,
+ 0.7499505942802293,
+ 0.7499717673630718,
+ 0.7295023931575518,
+ 0.7498588368153586,
+ 0.7500917431192661,
+ 0.7499788285109386,
+ 0.751093428144135,
+ 0.7476941302569599,
+ 0.7497459062676454,
+ 0.7519013013351361,
+ 0.7519576361895104,
+ 0.7520117457718045,
+ 0.7519576361895104,
+ 0.7520630897056753,
+ 0.7517153748411689,
+ 0.7518801228065234,
+ 0.7517153748411689,
+ 0.7519128151557074,
+ 0.747715220579939,
+ 0.7515812062344702,
+ 0.7518449664807616,
+ 0.7502743464925856,
+ 0.7518877493519667,
+ 0.7497046413502109,
+ 0.7518170037748607,
+ 0.747994483069215,
+ 0.7515708207714632,
+ 0.7493952860437644,
+ 0.7513033676201213,
+ 0.7513809040694397,
+ 0.7513173838306987,
+ 0.7512893498294958,
+ 0.7511485667578003,
+ 0.7514301011638065,
+ 0.7511837655016911,
+ 0.7512965050732808,
+ 0.7497605229052797,
+ 0.7499154357875746,
+ 0.7507253725457056,
+ 0.7500493305144468,
+ 0.7481337502464859,
+ 0.7490486794261071,
+ 0.7397299057218085,
+ 0.7424499491007804,
+ 0.7484607128735242,
+ 0.7490697936633217,
+ 0.7404052983131438,
+ 0.7481337502464859,
+ 0.7481900898616862,
+ 0.7512263884973217,
+ 0.7484111515973222,
+ 0.7486162882638654,
+ 0.7511842995713964,
+ 0.7486374290474712,
+ 0.7513675069080246,
+ 0.751205209889769,
+ 0.3512135427289415,
+ 0.7518678282443825,
+ 0.750662531716944,
+ 0.7518818189506921,
+ 0.7489157983666572,
+ 0.746129242265561,
+ 0.7518890267283185,
+ 0.7502251238180999,
+ 0.7479436619718309,
+ 0.7478795051709075,
+ 0.7503447499507501,
+ 0.37595190380761523,
+ 0.39262335936202025,
+ 0.7479436619718309,
+ 0.7514562008708929,
+ 0.7501829028082616,
+ 0.7515127523610247,
+ 0.7515134370579915,
+ 0.7514208963664639,
+ 0.7518516424492565,
+ 0.7517878847838991,
+ 0.7515199502304669,
+ 0.7515905556341016,
+ 0.7517013526106232,
+ 0.4716950736218063,
+ 0.7490566573041677,
+ 0.4988451194431261,
+ 0.46786549988780973,
+ 0.7504229164317131,
+ 0.752496473906911,
+ 0.7170317900088543,
+ 0.752080336238752,
+ 0.7518371961560203,
+ 0.7113963771216658,
+ 0.7523422508183768,
+ 0.7522433545911168,
+ 0.7196824762285486,
+ 0.7529890613075553,
+ 0.7526577697353539,
+ 0.7531938948558508,
+ 0.7529185629081041,
+ 0.7512148265340716,
+ 0.7518394271699601,
+ 0.7512288829877395,
+ 0.7501201209688815,
+ 0.7498728166864508,
+ 0.7486226089904785,
+ 0.7513824624760185,
+ 0.7504087500704741,
+ 0.7503875968992247,
+ 0.7517478574650429,
+ 0.751113617141246,
+ 0.7511067249400818,
+ 0.7516221858601817,
+ 0.7498091549096665,
+ 0.7499363885669051,
+ 0.7505216263463599,
+ 0.7508495695514272,
+ 0.39929504871479404,
+ 0.6091800896209277,
+ 0.7503381424706943,
+ 0.7521685254027262,
+ 0.7515295046378528,
+ 0.7519945871275128,
+ 0.7513496707086125,
+ 0.7511023176936124,
+ 0.7523220688292256,
+ 0.7524562394127612,
+ 0.7522583559168925,
+ 0.7520203447301497,
+ 0.7410363075529898
+ ],
+ "type": "scatter"
+ },
+ {
+ "mode": "lines",
+ "name": "Best Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238
+ ],
+ "y": [
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7383534875817734,
+ 0.7383534875817734,
+ 0.7383534875817734,
+ 0.7383534875817734,
+ 0.7383534875817734,
+ 0.7383534875817734,
+ 0.7383534875817734,
+ 0.7398951989803144,
+ 0.7398951989803144,
+ 0.7398951989803144,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7462323635027003,
+ 0.7462323635027003,
+ 0.7462323635027003,
+ 0.7462323635027003,
+ 0.7462323635027003,
+ 0.7494838070994201,
+ 0.7494838070994201,
+ 0.7494838070994201,
+ 0.7494838070994201,
+ 0.7494838070994201,
+ 0.7494838070994201,
+ 0.7497524962520861,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7519013013351361,
+ 0.7519576361895104,
+ 0.7520117457718045,
+ 0.7520117457718045,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.7529890613075553,
+ 0.7529890613075553,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc"
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Optimization History Plot"
+ },
+ "xaxis": {
+ "title": {
+ "text": "Trial"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 64
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-21T09:42:08.901011Z",
+ "start_time": "2025-01-21T09:42:08.853074Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "# Visualize the study\n",
+ "study = studies[\"lgatr_no_coords_loss\"]\n",
+ "print(study.best_params)\n",
+ "# best value:\n",
+ "print(study.best_value)\n",
+ "suffix = \"{}-{}-{}\".format(study.best_params[\"min_cluster_size\"], study.best_params[\"min_samples\"], study.best_params[\"epsilon\"])\n",
+ "print(suffix)\n",
+ "optuna.visualization.plot_optimization_history(study)\n"
+ ],
+ "id": "bc127cb3f4324232",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'min_cluster_size': 5, 'min_samples': 19, 'epsilon': 0.17149658495077644}\n",
+ "0.7360948769849189\n",
+ "5-19-0.17149658495077644\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "mode": "markers",
+ "name": "Objective Value",
+ "x": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 100
+ ],
+ "y": [
+ 0.7265052337354897,
+ 0.7298445743618994,
+ 0.7309347564124635,
+ 0.7345016554401188,
+ 0.7289177193581428,
+ 0.7352278881509563,
+ 0.7279573266394729,
+ 0.7356570809701598,
+ 0.7239190797302657,
+ 0.7331905781584582,
+ 0.7344292133553268,
+ 0.7296147211040828,
+ 0.7349579592418412,
+ 0.7345777373093558,
+ 0.7011484176382922,
+ 0.695823780363932,
+ 0.7356210454312261,
+ 0.7232410611303345,
+ 0.7318376375283675,
+ 0.7318376375283675,
+ 0.6956672243696994,
+ 0.6956672243696994,
+ 0.7326017820817694,
+ 0.730130855945165,
+ 0.7287958115183245,
+ 0.7287958115183245,
+ 0.734475496613353,
+ 0.734806629834254,
+ 0.7357474571925127,
+ 0.7355033289705799,
+ 0.7345809322759171,
+ 0.7345809322759171,
+ 0.7345809322759171,
+ 0.7326026146029572,
+ 0.7251100817750328,
+ 0.7297120232432278,
+ 0.7273505248744866,
+ 0.7356904755121227,
+ 0.7356904755121227,
+ 0.7349829351535836,
+ 0.7349829351535836,
+ 0.735201251600057,
+ 0.735201251600057,
+ 0.7328443913809768,
+ 0.732980117358856,
+ 0.7216677628756899,
+ 0.7331156556109297,
+ 0.7331519404267506,
+ 0.732980117358856,
+ 0.7330716107401781,
+ 0.7342747111681642,
+ 0.7342747111681642,
+ 0.7342747111681642,
+ 0.7342747111681642,
+ 0.7350925291295407,
+ 0.7350925291295407,
+ 0.735061236115067,
+ 0.7351607290567329,
+ 0.7350753711566409,
+ 0.7298580927434444,
+ 0.7355033289705799,
+ 0.7355033289705799,
+ 0.7290497946908796,
+ 0.7291178766588603,
+ 0.7360948769849189,
+ 0.7354316341658114,
+ 0.7357474571925127,
+ 0.7356223664730669,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7343149260957481,
+ 0.7343149260957481,
+ 0.7349627812794113,
+ 0.7343149260957481,
+ 0.7343149260957481,
+ 0.7349627812794113,
+ 0.7343149260957481,
+ 0.7143019425195956,
+ 0.7349033472087587,
+ 0.735061236115067,
+ 0.734806629834254,
+ 0.7317169998582165,
+ 0.7343176581036102,
+ 0.7340310562539105,
+ 0.7356223664730669,
+ 0.7356223664730669,
+ 0.7356223664730669,
+ 0.7353912746326461,
+ 0.7357973990417522,
+ 0.7339753665018718,
+ 0.7357973990417522,
+ 0.7357973990417522,
+ 0.7357973990417522,
+ 0.7342315283617951,
+ 0.7357973990417522,
+ 0.7357973990417522,
+ 0.7357973990417522
+ ],
+ "type": "scatter"
+ },
+ {
+ "mode": "lines",
+ "name": "Best Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105
+ ],
+ "y": [
+ null,
+ 0.7265052337354897,
+ 0.7298445743618994,
+ 0.7309347564124635,
+ 0.7345016554401188,
+ 0.7345016554401188,
+ 0.7352278881509563,
+ 0.7352278881509563,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc"
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Optimization History Plot"
+ },
+ "xaxis": {
+ "title": {
+ "text": "Trial"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 4
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "554fd6477e5feec9"
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "f8590170a7ea9216"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/optuna_viz_1.ipynb b/notebooks/optuna_viz_1.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..317b81142b78c373560276e6e762f071645d8063
--- /dev/null
+++ b/notebooks/optuna_viz_1.ipynb
@@ -0,0 +1,17296 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "id": "initial_id",
+ "metadata": {
+ "collapsed": true,
+ "ExecuteTime": {
+ "end_time": "2025-04-14T13:25:43.285053Z",
+ "start_time": "2025-04-14T13:25:43.279088Z"
+ }
+ },
+ "source": "import optuna",
+ "outputs": [],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-14T13:25:43.644175Z",
+ "start_time": "2025-04-14T13:25:43.584065Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "studies = {\n",
+ " #\"PL\": \"/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/results/train/Eval_eval_19March2025_pt1e-2_500particles_2025_04_01_11_57_07_994/clustering_tuning_11_sp_comp_only.log\",\n",
+ " #\"PL_R20\": \"/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/results/train/Eval_eval_19March2025_pt1e-2_500particles_2025_04_01_14_04_05_945/clustering_tuning_11_sp_comp_only.log\",\n",
+ " #\"PL_FTPL\": \"/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/results/train/Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_01_18_23_46_933/clustering_tuning_11_sp_comp_only.log\",\n",
+ " #\"R20\": \"/work/gkrzmanc/jetclustering/results/train/Eval_eval_19March2025_pt1e-2_500particles_NoQMinReprod_2025_04_04_10_31_53_462/clustering_tuning_11_sp_comp_only.log\",\n",
+ " \"PLgluons\": \"/work/gkrzmanc/jetclustering/results/train/Eval_IRCLossDebug_Reproduce_GluonFix_2025_04_14_10_24_23_167/clustering_tuning_11_sp_comp_only.log\"\n",
+ "}\n",
+ "#studies = {\n",
+ "# \"PL_IRC\": \"/work/gkrzmanc/jetclustering/results/train/Eval_IRCLossDebugW100PlusGhosts_2025_04_09_09_39_23_20/clustering_tuning_11_sp_comp_only.log\",\n",
+ "# #\"GL_IRC\": \"/work/gkrzmanc/jetclustering/results/train/Eval_IRCLossDebugW100PlusGhosts_2025_04_09_09_39_27_409/clustering_tuning_11_sp_comp_only.log\",\n",
+ "# \"scouting_IRC\": \"/work/gkrzmanc/jetclustering/results/train/Eval_IRCLossDebugW100PlusGhosts_2025_04_09_09_39_21_844/clustering_tuning_11_sp_comp_only.log\",\n",
+ "#}\n",
+ "studies = {key: optuna.load_study(study_name=\"clustering\", storage=optuna.storages.JournalStorage(\n",
+ " optuna.storages.journal.JournalFileBackend(studies[key])\n",
+ ")) for key in studies}"
+ ],
+ "id": "8f347dab4e47fecb",
+ "outputs": [],
+ "execution_count": 7
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-14T13:25:45.570519Z",
+ "start_time": "2025-04-14T13:25:45.499259Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "# Visualize the study\n",
+ "study = studies[\"PLgluons\"]\n",
+ "print(study.best_params)\n",
+ "# best value:\n",
+ "print(study.best_value)\n",
+ "suffix = \"{}-{}-{}\".format(study.best_params[\"min_cluster_size\"], study.best_params[\"min_samples\"], study.best_params[\"epsilon\"])\n",
+ "print(suffix)\n",
+ "optuna.visualization.plot_optimization_history(study)\n"
+ ],
+ "id": "34b0b005d1e3ac5a",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'min_cluster_size': 3, 'min_samples': 1, 'epsilon': 0.393586795619727}\n",
+ "0.3039183404675667\n",
+ "3-1-0.393586795619727\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "mode": "markers",
+ "name": "Objective Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292
+ ],
+ "y": [
+ 0.2876344086021505,
+ 0.293990344597969,
+ 0.2813403640074843,
+ 0.288351795904666,
+ 0.29715805218547453,
+ 0.2789984670413899,
+ 0.29643153526970956,
+ 0.2805398940714164,
+ 0.28677337826453236,
+ 0.2899180739006855,
+ 0.2888777050830398,
+ 0.29870560902754734,
+ 0.2996031746031746,
+ 0.2833870694043781,
+ 0.27427979989649814,
+ 0.2793391245103049,
+ 0.0,
+ 0.28348327957901887,
+ 0.29494007989347537,
+ 0.2774842338503494,
+ 0.2847983802935718,
+ 0.2805168310098606,
+ 0.30024855012427504,
+ 0.29730628533422016,
+ 0.0,
+ 0.2984084880636605,
+ 0.29955364523061667,
+ 0.2996031746031746,
+ 0.29955364523061667,
+ 0.2981263472061018,
+ 0.2993219778402514,
+ 0.29869053538869555,
+ 0.29892294946147474,
+ 0.29869053538869555,
+ 0.29869053538869555,
+ 0.2981263472061018,
+ 0.2984084880636605,
+ 0.3001156833581226,
+ 0.3001156833581226,
+ 0.28523825391536156,
+ 0.29781601588352086,
+ 0.29781601588352086,
+ 0.29763284224466147,
+ 0.28238039673278875,
+ 0.29801324503311255,
+ 0.29732868757259,
+ 0.2970954356846473,
+ 0.2973780285429804,
+ 0.2910907577019151,
+ 0.2970954356846473,
+ 0.28761873021163137,
+ 0.2970954356846473,
+ 0.2970461334218387,
+ 0.29801324503311255,
+ 0.29806259314456035,
+ 0.2908786610878661,
+ 0.29082998661311915,
+ 0.292007341898882,
+ 0.29082998661311915,
+ 0.292,
+ 0.29195134144309276,
+ 0.2920486747791298,
+ 0.2920486747791298,
+ 0.2959641255605382,
+ 0.2920486747791298,
+ 0.2959641255605382,
+ 0.2959641255605382,
+ 0.2960504480584136,
+ 0.2981613384131191,
+ 0.29715805218547453,
+ 0.29715805218547453,
+ 0.2978228352999834,
+ 0.2986560477849676,
+ 0.2972525653757034,
+ 0.29799236767877885,
+ 0.298987887838062,
+ 0.2978723404255319,
+ 0.29810568295114653,
+ 0.29810568295114653,
+ 0.2978723404255319,
+ 0.2841197361745307,
+ 0.29815522685723783,
+ 0.28344056891296987,
+ 0.29869053538869555,
+ 0.0,
+ 0.29645649642322414,
+ 0.0,
+ 0.0,
+ 0.2957652550850284,
+ 0.0,
+ 0.2984084880636605,
+ 0.29915520954116287,
+ 0.29555666500249633,
+ 0.29555666500249633,
+ 0.2858587561098938,
+ 0.29555666500249633,
+ 0.29915520954116287,
+ 0.29555666500249633,
+ 0.29555666500249633,
+ 0.29555666500249633,
+ 0.29913964262078097,
+ 0.29597605586963754,
+ 0.29913964262078097,
+ 0.29897248922770964,
+ 0.29897248922770964,
+ 0.2987744286187479,
+ 0.29952010590766176,
+ 0.29942100909842845,
+ 0.2987744286187479,
+ 0.2987744286187479,
+ 0.2954960943992022,
+ 0.2987744286187479,
+ 0.2987744286187479,
+ 0.2987744286187479,
+ 0.2987744286187479,
+ 0.2987744286187479,
+ 0.2976466688763672,
+ 0.2978793903247184,
+ 0.29957109864731113,
+ 0.29985155863433943,
+ 0.30018142833580735,
+ 0.29985155863433943,
+ 0.29985155863433943,
+ 0.29957109864731113,
+ 0.29985155863433943,
+ 0.29957109864731113,
+ 0.3005112980372753,
+ 0.30338927278710104,
+ 0.30003307972213034,
+ 0.30338927278710104,
+ 0.30024772914946324,
+ 0.2864828513786147,
+ 0.2988923789056042,
+ 0.2988923789056042,
+ 0.2988923789056042,
+ 0.2986111111111111,
+ 0.29866049280635026,
+ 0.29837909361561366,
+ 0.29866049280635026,
+ 0.2981325400760205,
+ 0.2988923789056042,
+ 0.29841374752148053,
+ 0.2992724867724868,
+ 0.29841374752148053,
+ 0.2993219778402514,
+ 0.29808327825512226,
+ 0.2992724867724868,
+ 0.29808327825512226,
+ 0.2987442167878387,
+ 0.30048037104522113,
+ 0.30258181220194047,
+ 0.3023026315789474,
+ 0.3020730503455084,
+ 0.3021227579397729,
+ 0.30386831275720166,
+ 0.300761841669427,
+ 0.3020730503455084,
+ 0.3021227579397729,
+ 0.27663230240549824,
+ 0.3021227579397729,
+ 0.3026207351244437,
+ 0.27663230240549824,
+ 0.3039183404675667,
+ 0.30048037104522113,
+ 0.300761841669427,
+ 0.30048037104522113,
+ 0.3023829087921117,
+ 0.30048037104522113,
+ 0.3024823277987835,
+ 0.30258181220194047,
+ 0.30048037104522113,
+ 0.30043060616098044,
+ 0.30043060616098044,
+ 0.30048037104522113,
+ 0.30019880715705766,
+ 0.30048037104522113,
+ 0.30043060616098044,
+ 0.30048037104522113,
+ 0.3023829087921117,
+ 0.3023829087921117,
+ 0.3025624178712221,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.3025624178712221,
+ 0.30177514792899407,
+ 0.3015455442288721,
+ 0.3015455442288721,
+ 0.3021227579397729,
+ 0.3020730503455084,
+ 0.30281111293769525,
+ 0.3020730503455084,
+ 0.3021227579397729,
+ 0.3021227579397729,
+ 0.3021227579397729,
+ 0.3024823277987835,
+ 0.3020542317173377,
+ 0.3024823277987835,
+ 0.3020542317173377,
+ 0.3023829087921117,
+ 0.30258181220194047,
+ 0.30210387902695596,
+ 0.30210387902695596,
+ 0.3024823277987835,
+ 0.3027613412228797,
+ 0.30223390275952694,
+ 0.3025624178712221,
+ 0.3025624178712221,
+ 0.3027613412228797,
+ 0.3027613412228797,
+ 0.3024823277987835,
+ 0.2885906040268456,
+ 0.2885906040268456,
+ 0.3027613412228797,
+ 0.3024823277987835,
+ 0.30258181220194047,
+ 0.3024823277987835,
+ 0.2746042670337233,
+ 0.3027613412228797,
+ 0.3027613412228797,
+ 0.3024823277987835,
+ 0.3020046007229708,
+ 0.3025127278699294,
+ 0.3020046007229708,
+ 0.3025624178712221,
+ 0.30258181220194047,
+ 0.301954986035814,
+ 0.30258181220194047,
+ 0.0,
+ 0.30258181220194047,
+ 0.3026315789473684,
+ 0.3020542317173377,
+ 0.30258181220194047,
+ 0.3020046007229708,
+ 0.3020046007229708,
+ 0.28532792427315756,
+ 0.28542475933119404,
+ 0.30258181220194047,
+ 0.3027115858668858,
+ 0.3027115858668858,
+ 0.3027115858668858,
+ 0.3027613412228797,
+ 0.3027613412228797,
+ 0.3026315789473684,
+ 0.0,
+ 0.3026315789473684,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.30258181220194047,
+ 0.3026315789473684,
+ 0.3026315789473684,
+ 0.3026315789473684,
+ 0.3026315789473684,
+ 0.30245186769787724,
+ 0.3027613412228797,
+ 0.3027115858668858,
+ 0.30235236058562265,
+ 0.28787116255661804,
+ 0.30281111293769525,
+ 0.3027613412228797,
+ 0.3027613412228797,
+ 0.30281111293769525,
+ 0.30281111293769525,
+ 0.30281111293769525,
+ 0.30281111293769525,
+ 0.3020730503455084,
+ 0.30202335910511596,
+ 0.3027613412228797,
+ 0.3027613412228797,
+ 0.30281111293769525,
+ 0.30281111293769525,
+ 0.30281111293769525,
+ 0.3027613412228797,
+ 0.3024823277987835,
+ 0.30281111293769525,
+ 0.30281111293769525,
+ 0.30281111293769525,
+ 0.3027613412228797,
+ 0.30281111293769525,
+ 0.30281111293769525,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.29922557258197396,
+ 0.0,
+ 0.0
+ ],
+ "type": "scatter"
+ },
+ {
+ "mode": "lines",
+ "name": "Best Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ 305
+ ],
+ "y": [
+ 0.2876344086021505,
+ 0.293990344597969,
+ 0.293990344597969,
+ 0.293990344597969,
+ 0.29715805218547453,
+ 0.29715805218547453,
+ 0.29715805218547453,
+ 0.29715805218547453,
+ 0.29715805218547453,
+ 0.29715805218547453,
+ 0.29715805218547453,
+ 0.29870560902754734,
+ 0.2996031746031746,
+ 0.2996031746031746,
+ 0.2996031746031746,
+ 0.2996031746031746,
+ 0.2996031746031746,
+ 0.2996031746031746,
+ 0.2996031746031746,
+ 0.2996031746031746,
+ 0.2996031746031746,
+ 0.2996031746031746,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.30024855012427504,
+ 0.3005112980372753,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30338927278710104,
+ 0.30386831275720166,
+ 0.30386831275720166,
+ 0.30386831275720166,
+ 0.30386831275720166,
+ 0.30386831275720166,
+ 0.30386831275720166,
+ 0.30386831275720166,
+ 0.30386831275720166,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667,
+ 0.3039183404675667
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc"
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Optimization History Plot"
+ },
+ "xaxis": {
+ "title": {
+ "text": "Trial"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 8
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-02T12:21:03.943158Z",
+ "start_time": "2025-04-02T12:21:03.807388Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "# Visualize the study\n",
+ "study = studies[\"PL\"]\n",
+ "print(study.best_params)\n",
+ "# best value:\n",
+ "print(study.best_value)\n",
+ "suffix = \"{}-{}-{}\".format(study.best_params[\"min_cluster_size\"], study.best_params[\"min_samples\"], study.best_params[\"epsilon\"])\n",
+ "print(suffix)\n",
+ "optuna.visualization.plot_optimization_history(study)\n"
+ ],
+ "id": "c01a0cab54a63489",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'min_cluster_size': 2, 'min_samples': 1, 'epsilon': 0.3875578273817563}\n",
+ "0.3050233039875712\n",
+ "2-1-0.3875578273817563\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "mode": "markers",
+ "name": "Objective Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ 305,
+ 306,
+ 307,
+ 308,
+ 309,
+ 310,
+ 311,
+ 312,
+ 313,
+ 314,
+ 315,
+ 316,
+ 317,
+ 318,
+ 319,
+ 320,
+ 321,
+ 322,
+ 323,
+ 324,
+ 325,
+ 326,
+ 327,
+ 328,
+ 329,
+ 330,
+ 331,
+ 332,
+ 333,
+ 334,
+ 335,
+ 336,
+ 337,
+ 338,
+ 339,
+ 340,
+ 341,
+ 342,
+ 343,
+ 344,
+ 345,
+ 346,
+ 347,
+ 348,
+ 349,
+ 351,
+ 352,
+ 353,
+ 354,
+ 355,
+ 356,
+ 357,
+ 358,
+ 359,
+ 360,
+ 361,
+ 362,
+ 363,
+ 364,
+ 365,
+ 366,
+ 367,
+ 368,
+ 369,
+ 370,
+ 371,
+ 372,
+ 373,
+ 375,
+ 376,
+ 378,
+ 379,
+ 380,
+ 381,
+ 382,
+ 383,
+ 384,
+ 385,
+ 386,
+ 387,
+ 388,
+ 389,
+ 390,
+ 391,
+ 392,
+ 393,
+ 394,
+ 395,
+ 396,
+ 397,
+ 398,
+ 399,
+ 400,
+ 401,
+ 402,
+ 403,
+ 404,
+ 405,
+ 406,
+ 407,
+ 408,
+ 409,
+ 410,
+ 411,
+ 412,
+ 413,
+ 414,
+ 415,
+ 416,
+ 417,
+ 418,
+ 419,
+ 420,
+ 421,
+ 422,
+ 423,
+ 424,
+ 425,
+ 426,
+ 427,
+ 428,
+ 429,
+ 430,
+ 431,
+ 432,
+ 433,
+ 434,
+ 435,
+ 436,
+ 437,
+ 438,
+ 439,
+ 440,
+ 441,
+ 442,
+ 443,
+ 444,
+ 445,
+ 446,
+ 447,
+ 448,
+ 449,
+ 450,
+ 451,
+ 452,
+ 453,
+ 454
+ ],
+ "y": [
+ 0.2547144028423066,
+ 0.2595918367346939,
+ 0.0,
+ 0.27545551982851013,
+ 0.0,
+ 0.2750869681562751,
+ 0.25573770491803277,
+ 0.26760183436741297,
+ 0.2642529046203729,
+ 0.2376731301939058,
+ 0.26068027210884354,
+ 0.2595212187159956,
+ 0.276931301790965,
+ 0.26760183436741297,
+ 0.26814135419476665,
+ 0.2690752224319224,
+ 0.2846541213888153,
+ 0.2848067760719958,
+ 0.2937794040773654,
+ 0.2716778523489933,
+ 0.27530798071772894,
+ 0.25320600272851296,
+ 0.2739946380697051,
+ 0.25320600272851296,
+ 0.27438370846730975,
+ 0.25999456078324723,
+ 0.2582402615091256,
+ 0.26821370750134915,
+ 0.2663779101245262,
+ 0.26763990267639903,
+ 0.0,
+ 0.25730674679049437,
+ 0.251782775644542,
+ 0.2843501326259947,
+ 0.2869242985706723,
+ 0.2856385797562268,
+ 0.2865466101694915,
+ 0.0,
+ 0.2874536791953415,
+ 0.26897110450985684,
+ 0.27287405812701826,
+ 0.27604726100966703,
+ 0.2764358561460011,
+ 0.28873611845584346,
+ 0.28986272439281946,
+ 0.2822151224707135,
+ 0.29091869060190073,
+ 0.28115015974440893,
+ 0.2694691457828079,
+ 0.26799676462658395,
+ 0.2945043386799895,
+ 0.26138828633405636,
+ 0.2648648648648649,
+ 0.0,
+ 0.0,
+ 0.29637414608512874,
+ 0.26806903991370007,
+ 0.29877252546356753,
+ 0.2989286647504573,
+ 0.297727866283625,
+ 0.2938239159001314,
+ 0.2691065662002153,
+ 0.0,
+ 0.2691790040376851,
+ 0.30194552529182883,
+ 0.29691583899634083,
+ 0.2921584054550223,
+ 0.28548686654284955,
+ 0.2859416445623342,
+ 0.2804780876494024,
+ 0.28548686654284955,
+ 0.27948990435706694,
+ 0.2804780876494024,
+ 0.2916338840807763,
+ 0.2916338840807763,
+ 0.2951507208387943,
+ 0.30049647243271493,
+ 0.2961025372743918,
+ 0.2996078431372549,
+ 0.3002610966057441,
+ 0.3002610966057441,
+ 0.2996078431372549,
+ 0.3003395142334813,
+ 0.3003395142334813,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.29647058823529415,
+ 0.29602510460251047,
+ 0.30077922077922076,
+ 0.3021022579807942,
+ 0.2997645827883861,
+ 0.29263157894736846,
+ 0.2930171277997365,
+ 0.3011422637590862,
+ 0.3030617540217955,
+ 0.3035806953814219,
+ 0.30262133402543473,
+ 0.3032191069574247,
+ 0.30314041007007525,
+ 0.3035019455252918,
+ 0.3040207522697795,
+ 0.25368248772504093,
+ 0.0,
+ 0.0,
+ 0.2602331255082678,
+ 0.0,
+ 0.0,
+ 0.25634033269702755,
+ 0.3032191069574247,
+ 0.0,
+ 0.0,
+ 0.3024162120031177,
+ 0.3028571428571429,
+ 0.3021806853582555,
+ 0.30262133402543473,
+ 0.30314041007007525,
+ 0.3021806853582555,
+ 0.30262133402543473,
+ 0.30262133402543473,
+ 0.3021806853582555,
+ 0.3021806853582555,
+ 0.261646803900325,
+ 0.261646803900325,
+ 0.29241306638566916,
+ 0.2633144092998107,
+ 0.30314041007007525,
+ 0.2998430141287284,
+ 0.2647932991083491,
+ 0.2933122696155872,
+ 0.2933122696155872,
+ 0.2998430141287284,
+ 0.2607752778530767,
+ 0.2900158478605388,
+ 0.2900158478605388,
+ 0.3009355509355509,
+ 0.3009355509355509,
+ 0.3033445683173451,
+ 0.3039419087136929,
+ 0.3039419087136929,
+ 0.3033445683173451,
+ 0.3033445683173451,
+ 0.2997645827883861,
+ 0.29924143342924403,
+ 0.26818058934847255,
+ 0.0,
+ 0.299163179916318,
+ 0.299163179916318,
+ 0.2997645827883861,
+ 0.2601360544217687,
+ 0.299163179916318,
+ 0.0,
+ 0.299163179916318,
+ 0.0,
+ 0.3018181818181818,
+ 0.30414507772020727,
+ 0.3043027475375843,
+ 0.3018965965185762,
+ 0.3038631060409645,
+ 0.3018965965185762,
+ 0.30314041007007525,
+ 0.3018965965185762,
+ 0.3032191069574247,
+ 0.3045843045843046,
+ 0.0,
+ 0.0,
+ 0.3043027475375843,
+ 0.3035806953814219,
+ 0.3032191069574247,
+ 0.3045843045843046,
+ 0.3043027475375843,
+ 0.30186721991701243,
+ 0.3036269430051813,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.3036269430051813,
+ 0.30186721991701243,
+ 0.303784344219803,
+ 0.303784344219803,
+ 0.303784344219803,
+ 0.303784344219803,
+ 0.3043027475375843,
+ 0.29908496732026146,
+ 0.2996861924686193,
+ 0.0,
+ 0.0,
+ 0.303784344219803,
+ 0.3047421611816533,
+ 0.3034232365145228,
+ 0.30098598858329007,
+ 0.3005450298468726,
+ 0.3009079118028534,
+ 0.3005450298468726,
+ 0.3005450298468726,
+ 0.3005450298468726,
+ 0.3010641058915131,
+ 0.30186721991701243,
+ 0.30186721991701243,
+ 0.30194552529182883,
+ 0.2974385781495035,
+ 0.2974385781495035,
+ 0.29973890339425585,
+ 0.29997386987196234,
+ 0.29885057471264365,
+ 0.29997386987196234,
+ 0.3000522739153162,
+ 0.29973890339425585,
+ 0.29997386987196234,
+ 0.30450543759709997,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3047421611816533,
+ 0.3034232365145228,
+ 0.3047421611816533,
+ 0.3038631060409645,
+ 0.3047421611816533,
+ 0.3043027475375843,
+ 0.3047421611816533,
+ 0.3043027475375843,
+ 0.3047421611816533,
+ 0.30466321243523314,
+ 0.2650081124932396,
+ 0.2676740420939018,
+ 0.2668106940318661,
+ 0.3047421611816533,
+ 0.2687853487745758,
+ 0.3034232365145228,
+ 0.3047421611816533,
+ 0.2683189655172414,
+ 0.3034232365145228,
+ 0.3043027475375843,
+ 0.3034232365145228,
+ 0.2686084142394822,
+ 0.3050233039875712,
+ 0.30450543759709997,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.30450543759709997,
+ 0.3045843045843046,
+ 0.30450543759709997,
+ 0.30450543759709997,
+ 0.3045843045843046,
+ 0.30450543759709997,
+ 0.0,
+ 0.3045843045843046,
+ 0.30450543759709997,
+ 0.30450543759709997,
+ 0.30450543759709997,
+ 0.30450543759709997,
+ 0.30450543759709997,
+ 0.30450543759709997,
+ 0.30466321243523314,
+ 0.2703723691311387,
+ 0.29075585988938635,
+ 0.30117647058823527,
+ 0.30117647058823527,
+ 0.29997386987196234,
+ 0.30117647058823527,
+ 0.28069241011984025,
+ 0.29908496732026146,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.3027475375842405,
+ 0.28999211977935385,
+ 0.3028260305937257,
+ 0.28819353142256116,
+ 0.3043816437645839,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.30466321243523314,
+ 0.3047421611816533,
+ 0.30194552529182883,
+ 0.30186721991701243,
+ 0.3043816437645839,
+ 0.3043816437645839,
+ 0.3043816437645839,
+ 0.30194552529182883,
+ 0.30186721991701243,
+ 0.29895287958115185,
+ 0.2984293193717278,
+ 0.3047421611816533,
+ 0.0,
+ 0.25639629831246596,
+ 0.0,
+ 0.2987964416535845,
+ 0.2945938887437973,
+ 0.25876596901331883,
+ 0.2697599136768276,
+ 0.2732885906040269,
+ 0.2995295347621537,
+ 0.26986264476164823,
+ 0.30049647243271493,
+ 0.2739946380697051,
+ 0.2693965517241379,
+ 0.2594506391079684,
+ 0.30041797283176597,
+ 0.30049647243271493,
+ 0.30041797283176597,
+ 0.2966256866335339,
+ 0.29618001046572473,
+ 0.3003395142334813,
+ 0.0,
+ 0.27661851257356873,
+ 0.30466321243523314,
+ 0.30077922077922076,
+ 0.3008573655494933,
+ 0.3033445683173451,
+ 0.3033445683173451,
+ 0.3033445683173451,
+ 0.3034232365145228,
+ 0.3033445683173451,
+ 0.30370562321845035,
+ 0.0,
+ 0.0,
+ 0.30028773214752813,
+ 0.2719439956919763,
+ 0.27715355805243447,
+ 0.2776143353837925,
+ 0.2776143353837925,
+ 0.26627059141236836,
+ 0.3003663003663003,
+ 0.2662355160334142,
+ 0.2984060621897047,
+ 0.299163179916318,
+ 0.29908496732026146,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30450543759709997,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.29973890339425585,
+ 0.3003395142334813,
+ 0.3003395142334813,
+ 0.30041797283176597,
+ 0.0,
+ 0.0,
+ 0.2965481171548117,
+ 0.30049647243271493,
+ 0.2989286647504573,
+ 0.2996078431372549,
+ 0.2793803418803419,
+ 0.3034232365145228,
+ 0.30370562321845035,
+ 0.3036269430051813,
+ 0.29739583333333336,
+ 0.30098598858329007,
+ 0.3036269430051813,
+ 0.2986472424557752,
+ 0.303784344219803,
+ 0.2683189655172414,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.30370562321845035,
+ 0.30370562321845035,
+ 0.3033445683173451,
+ 0.3034232365145228,
+ 0.3034232365145228,
+ 0.2577896138482024,
+ 0.30450543759709997,
+ 0.299163179916318,
+ 0.2772117962466488,
+ 0.29997386987196234,
+ 0.2998955067920585,
+ 0.26374221500135386,
+ 0.30057501306847884,
+ 0.2603260869565217,
+ 0.29374671571203365,
+ 0.30186721991701243,
+ 0.2597826086956522,
+ 0.30186721991701243,
+ 0.30186721991701243,
+ 0.30186721991701243,
+ 0.3047421611816533,
+ 0.2930171277997365,
+ 0.29256721138639963,
+ 0.3034232365145228,
+ 0.2650081124932396,
+ 0.30049647243271493,
+ 0.28488063660477453,
+ 0.30446058091286304,
+ 0.30117647058823527,
+ 0.2601360544217687,
+ 0.3006535947712418,
+ 0.3043816437645839,
+ 0.0,
+ 0.0,
+ 0.30370562321845035,
+ 0.303784344219803,
+ 0.3028260305937257,
+ 0.30370562321845035,
+ 0.3033445683173451,
+ 0.3034232365145228,
+ 0.3027475375842405,
+ 0.3028260305937257,
+ 0.3033445683173451,
+ 0.3028260305937257,
+ 0.30450543759709997,
+ 0.3035806953814219,
+ 0.2996861924686193,
+ 0.29895287958115185,
+ 0.27960438385458436,
+ 0.0,
+ 0.2993980633342057,
+ 0.2998430141287284,
+ 0.2993730407523511,
+ 0.29908496732026146,
+ 0.29981718464351004,
+ 0.29973890339425585,
+ 0.3045843045843046,
+ 0.30466321243523314,
+ 0.26724371111712203,
+ 0.30466321243523314,
+ 0.30070111659309273,
+ 0.0,
+ 0.2666307568004309,
+ 0.29050865233350814,
+ 0.3039419087136929,
+ 0.3034232365145228,
+ 0.3012987012987013,
+ 0.290956749672346,
+ 0.30370562321845035,
+ 0.30370562321845035,
+ 0.3027475375842405,
+ 0.0,
+ 0.2672064777327935,
+ 0.30041797283176597,
+ 0.2938239159001314,
+ 0.30057501306847884,
+ 0.3002610966057441,
+ 0.2890295358649789,
+ 0.29885057471264365,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.2669183068212456,
+ 0.3043816437645839,
+ 0.26630727762803236,
+ 0.3043816437645839,
+ 0.30446058091286304,
+ 0.30466321243523314,
+ 0.30466321243523314,
+ 0.30466321243523314
+ ],
+ "type": "scatter"
+ },
+ {
+ "mode": "lines",
+ "name": "Best Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ 305,
+ 306,
+ 307,
+ 308,
+ 309,
+ 310,
+ 311,
+ 312,
+ 313,
+ 314,
+ 315,
+ 316,
+ 317,
+ 318,
+ 319,
+ 320,
+ 321,
+ 322,
+ 323,
+ 324,
+ 325,
+ 326,
+ 327,
+ 328,
+ 329,
+ 330,
+ 331,
+ 332,
+ 333,
+ 334,
+ 335,
+ 336,
+ 337,
+ 338,
+ 339,
+ 340,
+ 341,
+ 342,
+ 343,
+ 344,
+ 345,
+ 346,
+ 347,
+ 348,
+ 349,
+ 350,
+ 351,
+ 352,
+ 353,
+ 354,
+ 355,
+ 356,
+ 357,
+ 358,
+ 359,
+ 360,
+ 361,
+ 362,
+ 363,
+ 364,
+ 365,
+ 366,
+ 367,
+ 368,
+ 369,
+ 370,
+ 371,
+ 372,
+ 373,
+ 374,
+ 375,
+ 376,
+ 377,
+ 378,
+ 379,
+ 380,
+ 381,
+ 382,
+ 383,
+ 384,
+ 385,
+ 386,
+ 387,
+ 388,
+ 389,
+ 390,
+ 391,
+ 392,
+ 393,
+ 394,
+ 395,
+ 396,
+ 397,
+ 398,
+ 399,
+ 400,
+ 401,
+ 402,
+ 403,
+ 404,
+ 405,
+ 406,
+ 407,
+ 408,
+ 409,
+ 410,
+ 411,
+ 412,
+ 413,
+ 414,
+ 415,
+ 416,
+ 417,
+ 418,
+ 419,
+ 420,
+ 421,
+ 422,
+ 423,
+ 424,
+ 425,
+ 426,
+ 427,
+ 428,
+ 429,
+ 430,
+ 431,
+ 432,
+ 433,
+ 434,
+ 435,
+ 436,
+ 437,
+ 438,
+ 439,
+ 440,
+ 441,
+ 442,
+ 443,
+ 444,
+ 445,
+ 446,
+ 447,
+ 448,
+ 449,
+ 450,
+ 451,
+ 452,
+ 453,
+ 454,
+ 455,
+ 456,
+ 457,
+ 458,
+ 459
+ ],
+ "y": [
+ 0.2547144028423066,
+ 0.2595918367346939,
+ 0.2595918367346939,
+ 0.27545551982851013,
+ 0.27545551982851013,
+ 0.27545551982851013,
+ 0.27545551982851013,
+ 0.27545551982851013,
+ 0.27545551982851013,
+ 0.27545551982851013,
+ 0.27545551982851013,
+ 0.27545551982851013,
+ 0.276931301790965,
+ 0.276931301790965,
+ 0.276931301790965,
+ 0.276931301790965,
+ 0.2846541213888153,
+ 0.2848067760719958,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2937794040773654,
+ 0.2945043386799895,
+ 0.2945043386799895,
+ 0.2945043386799895,
+ 0.2945043386799895,
+ 0.2945043386799895,
+ 0.29637414608512874,
+ 0.29637414608512874,
+ 0.29877252546356753,
+ 0.2989286647504573,
+ 0.2989286647504573,
+ 0.2989286647504573,
+ 0.2989286647504573,
+ 0.2989286647504573,
+ 0.2989286647504573,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.30194552529182883,
+ 0.3021022579807942,
+ 0.3021022579807942,
+ 0.3021022579807942,
+ 0.3021022579807942,
+ 0.3021022579807942,
+ 0.3030617540217955,
+ 0.3035806953814219,
+ 0.3035806953814219,
+ 0.3035806953814219,
+ 0.3035806953814219,
+ 0.3035806953814219,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.3040207522697795,
+ 0.30414507772020727,
+ 0.3043027475375843,
+ 0.3043027475375843,
+ 0.3043027475375843,
+ 0.3043027475375843,
+ 0.3043027475375843,
+ 0.3043027475375843,
+ 0.3043027475375843,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3045843045843046,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3047421611816533,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712,
+ 0.3050233039875712
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc"
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Optimization History Plot"
+ },
+ "xaxis": {
+ "title": {
+ "text": "Trial"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 10
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-04-02T12:19:46.100812136Z",
+ "start_time": "2025-04-01T13:19:52.111359Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "optuna.visualization.plot_contour(study, params=[\"min_cluster_size\", \"min_samples\"])\n",
+ "id": "9f4f8415f559acf2",
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "colorbar": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(247,251,255)"
+ ],
+ [
+ 0.125,
+ "rgb(222,235,247)"
+ ],
+ [
+ 0.25,
+ "rgb(198,219,239)"
+ ],
+ [
+ 0.375,
+ "rgb(158,202,225)"
+ ],
+ [
+ 0.5,
+ "rgb(107,174,214)"
+ ],
+ [
+ 0.625,
+ "rgb(66,146,198)"
+ ],
+ [
+ 0.75,
+ "rgb(33,113,181)"
+ ],
+ [
+ 0.875,
+ "rgb(8,81,156)"
+ ],
+ [
+ 1.0,
+ "rgb(8,48,107)"
+ ]
+ ],
+ "connectgaps": true,
+ "contours": {
+ "coloring": "heatmap"
+ },
+ "hoverinfo": "none",
+ "line": {
+ "smoothing": 1.3
+ },
+ "reversescale": false,
+ "x": [
+ 1.1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 17,
+ 18,
+ 20,
+ 20.9
+ ],
+ "y": [
+ -0.5,
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 9,
+ 10,
+ 10.5
+ ],
+ "z": [
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.0,
+ 0.0,
+ 0.0,
+ null,
+ 0.0,
+ 0.0,
+ null,
+ null,
+ 0.0,
+ null,
+ 0.0,
+ null,
+ null,
+ null,
+ null,
+ 0.0,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.3035806953814219,
+ 0.30049647243271493,
+ 0.29637414608512874,
+ null,
+ 0.27545551982851013,
+ 0.26806903991370007,
+ null,
+ null,
+ null,
+ 0.2648648648648649,
+ null,
+ null,
+ null,
+ null,
+ 0.2691790040376851,
+ null,
+ 0.25320600272851296,
+ null
+ ],
+ [
+ null,
+ 0.29691583899634083,
+ 0.29877252546356753,
+ 0.27438370846730975,
+ 0.2859416445623342,
+ null,
+ null,
+ null,
+ 0.2376731301939058,
+ null,
+ null,
+ null,
+ 0.2690752224319224,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.276931301790965,
+ 0.28986272439281946,
+ 0.29091869060190073,
+ 0.2822151224707135,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.26814135419476665,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.26763990267639903,
+ null,
+ null,
+ 0.28115015974440893,
+ null,
+ null,
+ 0.2694691457828079,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.26760183436741297,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ 0.26897110450985684,
+ null,
+ 0.2764358561460011,
+ null,
+ 0.251782775644542,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ 0.26068027210884354,
+ null,
+ null,
+ 0.2750869681562751,
+ null,
+ null,
+ null,
+ 0.2595212187159956,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ 0.26760183436741297,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.25573770491803277,
+ null,
+ 0.26138828633405636,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.2547144028423066,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.2642529046203729,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.25730674679049437,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ]
+ ],
+ "type": "contour"
+ },
+ {
+ "marker": {
+ "color": "black",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Feasible Trial",
+ "showlegend": false,
+ "x": [
+ 7,
+ 8,
+ 6,
+ 6,
+ 10,
+ 6,
+ 10,
+ 3,
+ 17,
+ 9,
+ 3,
+ 10,
+ 2,
+ 15,
+ 14,
+ 13,
+ 2,
+ 2,
+ 2,
+ 2,
+ 4,
+ 20,
+ 4,
+ 20,
+ 4,
+ 5,
+ 5,
+ 5,
+ 2,
+ 2,
+ 2,
+ 7,
+ 8,
+ 3,
+ 3,
+ 3,
+ 3,
+ 7,
+ 4,
+ 4,
+ 6,
+ 6,
+ 6,
+ 3,
+ 3,
+ 5,
+ 4,
+ 5,
+ 8,
+ 8,
+ 4,
+ 12,
+ 11,
+ 12,
+ 4,
+ 4,
+ 7,
+ 3,
+ 3,
+ 3,
+ 4,
+ 17,
+ 18,
+ 17,
+ 2,
+ 2,
+ 2,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 2,
+ 2,
+ 2,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 2,
+ 2,
+ 3,
+ 4,
+ 4,
+ 2,
+ 2,
+ 2,
+ 2
+ ],
+ "y": [
+ 9,
+ 4,
+ 0,
+ 1,
+ 0,
+ 6,
+ 7,
+ 7,
+ 9,
+ 2,
+ 6,
+ 6,
+ 3,
+ 4,
+ 3,
+ 2,
+ 2,
+ 2,
+ 1,
+ 3,
+ 1,
+ 1,
+ 1,
+ 1,
+ 2,
+ 2,
+ 2,
+ 4,
+ 4,
+ 4,
+ 0,
+ 10,
+ 5,
+ 3,
+ 3,
+ 3,
+ 3,
+ 0,
+ 3,
+ 5,
+ 5,
+ 5,
+ 5,
+ 3,
+ 3,
+ 3,
+ 3,
+ 4,
+ 4,
+ 4,
+ 1,
+ 7,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 2,
+ 1,
+ 2,
+ 1,
+ 1,
+ 0,
+ 1,
+ 1,
+ 2,
+ 2,
+ 2,
+ 2,
+ 2,
+ 2,
+ 2,
+ 2,
+ 2,
+ 2,
+ 2,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Contour Plot"
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ },
+ "xaxis": {
+ "title": {
+ "text": "min_cluster_size"
+ },
+ "range": [
+ 1.1,
+ 20.9
+ ]
+ },
+ "yaxis": {
+ "title": {
+ "text": "min_samples"
+ },
+ "range": [
+ -0.5,
+ 10.5
+ ]
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 7
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:42.825689Z",
+ "start_time": "2025-01-20T14:00:42.793582Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# visualize the study\n",
+ "study = studies[\"Identity_rinv_03_m_900\"]\n",
+ "print(study.best_params)\n",
+ "print(study.best_value)\n",
+ "\n",
+ "optuna.visualization.plot_optimization_history(study)\n"
+ ],
+ "id": "64a387a752d949a6",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'min_cluster_size': 9, 'min_samples': 2, 'epsilon': 0.05112552955378122}\n",
+ "0.7000755330893034\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "mode": "markers",
+ "name": "Objective Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93
+ ],
+ "y": [
+ 0.6445299873644618,
+ 0.4659474915518586,
+ 0.5471884451577063,
+ 0.34944822166797634,
+ 0.48621376695160357,
+ 0.6363041408852929,
+ 0.4162038114876775,
+ 0.6145268054147535,
+ 0.5070031545741325,
+ 0.540342828802579,
+ 0.529184832042154,
+ 0.5376531853191556,
+ 0.5274842098680508,
+ 0.576738499159407,
+ 0.5830690412295682,
+ 0.5463091814330334,
+ 0.5794507111329082,
+ 0.4694970607446114,
+ 0.3157675339562997,
+ 0.2979170440137656,
+ 0.48722349969232753,
+ 0.6563702028951462,
+ 0.6055815067672775,
+ 0.6145451292602201,
+ 0.653686899832614,
+ 0.6524001293394868,
+ 0.6468578832675658,
+ 0.6468578832675658,
+ 0.6280325048935287,
+ 0.6379136818424013,
+ 0.6280511314767031,
+ 0.5915595220087733,
+ 0.6683768656716418,
+ 0.6431301075900995,
+ 0.6742863807330087,
+ 0.6797168574674474,
+ 0.6536501540649443,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830253872507394,
+ 0.6830253872507394,
+ 0.6763164026095061,
+ 0.7000755330893034,
+ 0.6784781237800667,
+ 0.6860039260496325,
+ 0.6783580072670491,
+ 0.6782154437372404,
+ 0.6782154437372404,
+ 0.6941686065356396,
+ 0.6913558731265249,
+ 0.27532152908903057,
+ 0.2965673462275658,
+ 0.6914161220043572,
+ 0.6914362072972345,
+ 0.6907569859989542,
+ 0.6854841046744139,
+ 0.6884732492387995,
+ 0.6937702265372169,
+ 0.5909804395073653,
+ 0.6093811350388112,
+ 0.6341084808501746,
+ 0.6341084808501746,
+ 0.6926747447872986,
+ 0.680678873977468,
+ 0.6822740524781341,
+ 0.668419668682619,
+ 0.6445450270397366,
+ 0.6445299873644618,
+ 0.48843800322061187,
+ 0.4900888145192431,
+ 0.6705834448257809,
+ 0.5629210372512227,
+ 0.6842886669965941,
+ 0.6696358396646581,
+ 0.6843269678621332,
+ 0.6636230611647643,
+ 0.5458451383916062,
+ 0.3117822203317737,
+ 0.28272743714957493,
+ 0.29302292160666815,
+ 0.5880674054956733,
+ 0.6887213685126123,
+ 0.6884732492387995,
+ 0.6887213685126123,
+ 0.6887998141047985,
+ 0.6520120753832175,
+ 0.6744809890366223,
+ 0.6372401592215834,
+ 0.6518443658413341,
+ 0.6578209791877869,
+ 0.6804879479209431,
+ 0.6168062200956939
+ ],
+ "type": "scatter"
+ },
+ {
+ "mode": "lines",
+ "name": "Best Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96
+ ],
+ "y": [
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6445299873644618,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6563702028951462,
+ 0.6683768656716418,
+ 0.6683768656716418,
+ 0.6742863807330087,
+ 0.6797168574674474,
+ 0.6797168574674474,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034,
+ 0.7000755330893034
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc"
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Optimization History Plot"
+ },
+ "xaxis": {
+ "title": {
+ "text": "Trial"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 59
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:42.918625Z",
+ "start_time": "2025-01-20T14:00:42.893260Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "optuna.visualization.plot_contour(study, params=[\"min_cluster_size\", \"min_samples\"])\n",
+ "id": "58174d74f894b680",
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "colorbar": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(247,251,255)"
+ ],
+ [
+ 0.125,
+ "rgb(222,235,247)"
+ ],
+ [
+ 0.25,
+ "rgb(198,219,239)"
+ ],
+ [
+ 0.375,
+ "rgb(158,202,225)"
+ ],
+ [
+ 0.5,
+ "rgb(107,174,214)"
+ ],
+ [
+ 0.625,
+ "rgb(66,146,198)"
+ ],
+ [
+ 0.75,
+ "rgb(33,113,181)"
+ ],
+ [
+ 0.875,
+ "rgb(8,81,156)"
+ ],
+ [
+ 1.0,
+ "rgb(8,48,107)"
+ ]
+ ],
+ "connectgaps": true,
+ "contours": {
+ "coloring": "heatmap"
+ },
+ "hoverinfo": "none",
+ "line": {
+ "smoothing": 1.3
+ },
+ "reversescale": false,
+ "x": [
+ 3.75,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 17,
+ 18,
+ 20,
+ 21,
+ 25,
+ 26,
+ 27,
+ 28,
+ 30,
+ 31.25
+ ],
+ "y": [
+ 0.5999999999999999,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 14,
+ 15,
+ 17,
+ 18,
+ 19,
+ 20,
+ 22,
+ 23,
+ 24,
+ 27,
+ 29,
+ 30,
+ 31.4
+ ],
+ "z": [
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.2979170440137656,
+ 0.6784781237800667,
+ 0.3117822203317737,
+ null,
+ 0.7000755330893034,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ 0.6941686065356396,
+ null,
+ 0.6518443658413341,
+ 0.6887998141047985,
+ 0.6937702265372169,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6520120753832175,
+ 0.6372401592215834,
+ null,
+ 0.5909804395073653,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ 0.6914362072972345,
+ 0.6887213685126123,
+ 0.6854841046744139,
+ 0.5458451383916062,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5471884451577063,
+ 0.2965673462275658,
+ null
+ ],
+ [
+ null,
+ null,
+ 0.6860039260496325,
+ null,
+ 0.6843269678621332,
+ null,
+ null,
+ 0.6636230611647643,
+ 0.6705834448257809,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.6830453879941435,
+ null,
+ null,
+ 0.6797168574674474,
+ 0.6763164026095061,
+ null,
+ 0.6683768656716418,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.6536501540649443,
+ null,
+ null,
+ 0.6744809890366223,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6431301075900995,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.540342828802579,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ 0.668419668682619,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6445450270397366,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ 0.6363041408852929,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6145451292602201,
+ 0.6055815067672775,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.6563702028951462,
+ null,
+ 0.653686899832614,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5070031545741325,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ 0.6468578832675658,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ 0.6379136818424013,
+ null,
+ null,
+ null,
+ null,
+ 0.6280511314767031,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5830690412295682,
+ null,
+ 0.576738499159407,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5463091814330334,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ 0.6168062200956939,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5915595220087733,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5880674054956733,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ 0.34944822166797634,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.4659474915518586,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5629210372512227,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.4162038114876775,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5376531853191556,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.529184832042154,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.48621376695160357,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.4900888145192431,
+ 0.48843800322061187,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.48722349969232753,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.4694970607446114,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ]
+ ],
+ "type": "contour"
+ },
+ {
+ "marker": {
+ "color": "black",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Feasible Trial",
+ "showlegend": false,
+ "x": [
+ 14,
+ 5,
+ 28,
+ 7,
+ 21,
+ 7,
+ 9,
+ 17,
+ 27,
+ 26,
+ 13,
+ 15,
+ 21,
+ 13,
+ 11,
+ 21,
+ 10,
+ 9,
+ 9,
+ 5,
+ 5,
+ 5,
+ 18,
+ 17,
+ 7,
+ 7,
+ 7,
+ 7,
+ 12,
+ 7,
+ 12,
+ 11,
+ 11,
+ 15,
+ 8,
+ 8,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 9,
+ 9,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 8,
+ 8,
+ 30,
+ 8,
+ 8,
+ 8,
+ 10,
+ 9,
+ 10,
+ 25,
+ 10,
+ 10,
+ 10,
+ 10,
+ 10,
+ 9,
+ 8,
+ 14,
+ 14,
+ 14,
+ 13,
+ 12,
+ 12,
+ 8,
+ 12,
+ 8,
+ 11,
+ 11,
+ 7,
+ 7,
+ 7,
+ 9,
+ 9,
+ 9,
+ 9,
+ 9,
+ 18,
+ 8,
+ 20,
+ 8,
+ 6,
+ 6,
+ 6
+ ],
+ "y": [
+ 8,
+ 20,
+ 4,
+ 19,
+ 24,
+ 9,
+ 22,
+ 9,
+ 10,
+ 7,
+ 23,
+ 22,
+ 14,
+ 14,
+ 14,
+ 14,
+ 4,
+ 30,
+ 4,
+ 2,
+ 29,
+ 10,
+ 9,
+ 9,
+ 10,
+ 10,
+ 11,
+ 11,
+ 12,
+ 12,
+ 12,
+ 17,
+ 6,
+ 7,
+ 7,
+ 6,
+ 7,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 2,
+ 2,
+ 5,
+ 2,
+ 2,
+ 2,
+ 3,
+ 4,
+ 4,
+ 4,
+ 4,
+ 4,
+ 4,
+ 4,
+ 4,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 3,
+ 8,
+ 8,
+ 8,
+ 27,
+ 27,
+ 5,
+ 20,
+ 5,
+ 5,
+ 5,
+ 5,
+ 4,
+ 2,
+ 2,
+ 2,
+ 18,
+ 4,
+ 4,
+ 4,
+ 3,
+ 3,
+ 7,
+ 3,
+ 3,
+ 3,
+ 5,
+ 15
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Contour Plot"
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ },
+ "xaxis": {
+ "title": {
+ "text": "min_cluster_size"
+ },
+ "range": [
+ 3.75,
+ 31.25
+ ]
+ },
+ "yaxis": {
+ "title": {
+ "text": "min_samples"
+ },
+ "range": [
+ 0.5999999999999999,
+ 31.4
+ ]
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 60
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:43.012657Z",
+ "start_time": "2025-01-20T14:00:42.972008Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "optuna.visualization.plot_contour(study, params=[\"min_cluster_size\", \"epsilon\"])\n",
+ "id": "61970be4f9dd0a52",
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "colorbar": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "rgb(247,251,255)"
+ ],
+ [
+ 0.125,
+ "rgb(222,235,247)"
+ ],
+ [
+ 0.25,
+ "rgb(198,219,239)"
+ ],
+ [
+ 0.375,
+ "rgb(158,202,225)"
+ ],
+ [
+ 0.5,
+ "rgb(107,174,214)"
+ ],
+ [
+ 0.625,
+ "rgb(66,146,198)"
+ ],
+ [
+ 0.75,
+ "rgb(33,113,181)"
+ ],
+ [
+ 0.875,
+ "rgb(8,81,156)"
+ ],
+ [
+ 1.0,
+ "rgb(8,48,107)"
+ ]
+ ],
+ "connectgaps": true,
+ "contours": {
+ "coloring": "heatmap"
+ },
+ "hoverinfo": "none",
+ "line": {
+ "smoothing": 1.3
+ },
+ "reversescale": false,
+ "x": [
+ -0.012855098919541005,
+ 0.011263226459545889,
+ 0.013630020043986453,
+ 0.016267773234105474,
+ 0.021950029012550436,
+ 0.024475439353389312,
+ 0.03165932986472511,
+ 0.03217219010617994,
+ 0.03688430433046225,
+ 0.03822246814313676,
+ 0.03835485739579715,
+ 0.040659430256419084,
+ 0.044199192523817155,
+ 0.04674681612215488,
+ 0.04887132738158265,
+ 0.048925942003726935,
+ 0.0498549420385372,
+ 0.0501456146084194,
+ 0.05112552955378122,
+ 0.0588572002048303,
+ 0.059404290631778746,
+ 0.059829787975593754,
+ 0.061566946451765414,
+ 0.061646551459528305,
+ 0.065927942967217,
+ 0.06745441862837374,
+ 0.07046370761739812,
+ 0.07212971495510849,
+ 0.0738655530336822,
+ 0.07487733826147724,
+ 0.07576805408845919,
+ 0.07691518490732062,
+ 0.07801971683099954,
+ 0.07832420100059283,
+ 0.07879644717236631,
+ 0.07939422235829016,
+ 0.08255193716329551,
+ 0.08370767472015733,
+ 0.08478156596751255,
+ 0.08495103643694721,
+ 0.08741522054151135,
+ 0.08804265742891054,
+ 0.09015577481282054,
+ 0.09180152733901467,
+ 0.09184301968320846,
+ 0.09331486853054542,
+ 0.09462503601614727,
+ 0.09697004508260854,
+ 0.10076362835567448,
+ 0.10126559533240051,
+ 0.10311931998174755,
+ 0.10688635236122257,
+ 0.10692189484879672,
+ 0.10740470761531976,
+ 0.10839412662529492,
+ 0.10943578005466859,
+ 0.11481090354070173,
+ 0.11618914824591976,
+ 0.1206650228048842,
+ 0.12142261524707477,
+ 0.12143616224311836,
+ 0.12368284060442458,
+ 0.12956336281064562,
+ 0.13257255926566458,
+ 0.13842115118156287,
+ 0.1391491625488669,
+ 0.13951950351144252,
+ 0.14098675841298333,
+ 0.14846569510331847,
+ 0.14883554516436837,
+ 0.15113619842976073,
+ 0.16172706734587736,
+ 0.1617298963589536,
+ 0.17485511719664615,
+ 0.17568436953783512,
+ 0.17958865484802544,
+ 0.19529504930173058,
+ 0.20065989932586775,
+ 0.20789625836006717,
+ 0.21735492024391928,
+ 0.2295971014499739,
+ 0.2534115610265647,
+ 0.25698704515514065,
+ 0.2670911045647954,
+ 0.2923162374391224,
+ 0.3247276298158274,
+ 0.33451471526946835,
+ 0.34541128204946103,
+ 0.35368454660132287,
+ 0.3866894133473552,
+ 0.394601513604858,
+ 0.4439544855483355,
+ 0.48049991966967187,
+ 0.48951533793958846,
+ 0.49362973404128374,
+ 0.5177480594203706
+ ],
+ "y": [
+ 3.75,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 17,
+ 18,
+ 20,
+ 21,
+ 25,
+ 26,
+ 27,
+ 28,
+ 30,
+ 31.25
+ ],
+ "z": [
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6830253872507394,
+ null,
+ 0.6830253872507394,
+ null,
+ null,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ null,
+ 0.6830453879941435,
+ 0.6830453879941435,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.48722349969232753,
+ 0.6563702028951462,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6536501540649443,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.2979170440137656,
+ null,
+ null,
+ null,
+ 0.4659474915518586,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ 0.6782154437372404,
+ 0.6782154437372404,
+ 0.6783580072670491,
+ null,
+ 0.6784781237800667,
+ null,
+ 0.6860039260496325,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6168062200956939,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6941686065356396,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6804879479209431,
+ null,
+ null,
+ null,
+ null,
+ 0.6578209791877869,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ 0.6379136818424013,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.653686899832614,
+ null,
+ 0.6468578832675658,
+ null,
+ null,
+ null,
+ 0.6468578832675658,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6524001293394868,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6363041408852929,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.3117822203317737,
+ null,
+ null,
+ 0.29302292160666815,
+ 0.28272743714957493,
+ null,
+ null,
+ null,
+ 0.34944822166797634,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6797168574674474,
+ null,
+ null,
+ 0.6742863807330087,
+ null,
+ null,
+ null,
+ null,
+ 0.6842886669965941,
+ null,
+ 0.6843269678621332,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6907569859989542,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6913558731265249,
+ null,
+ 0.6914161220043572,
+ 0.6914362072972345,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6744809890366223,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.668419668682619,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6518443658413341,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.27532152908903057,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6763164026095061,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.7000755330893034,
+ 0.5880674054956733,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6884732492387995,
+ 0.6884732492387995,
+ null,
+ null,
+ 0.6887213685126123,
+ null,
+ null,
+ null,
+ 0.6887213685126123,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6887998141047985,
+ null,
+ null,
+ null,
+ 0.6822740524781341,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.4694970607446114,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.3157675339562997,
+ null,
+ null,
+ null,
+ 0.4162038114876775,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6854841046744139,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6937702265372169,
+ null,
+ null,
+ null,
+ null,
+ 0.6926747447872986,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.680678873977468,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6341084808501746,
+ 0.6341084808501746,
+ null,
+ 0.6093811350388112,
+ null,
+ null,
+ 0.5794507111329082,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5915595220087733,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6683768656716418,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6636230611647643,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5458451383916062,
+ null,
+ 0.5830690412295682,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6280325048935287,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6705834448257809,
+ null,
+ 0.5629210372512227,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6696358396646581,
+ null,
+ null,
+ 0.6280511314767031,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.529184832042154,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.4900888145192431,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.576738499159407,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6445299873644618,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.48843800322061187,
+ null,
+ null,
+ null,
+ null,
+ 0.6445299873644618,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6445450270397366,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6431301075900995,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5376531853191556,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6145268054147535,
+ 0.6145451292602201,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6520120753832175,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6055815067672775,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.6372401592215834,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5463091814330334,
+ null,
+ null,
+ 0.5274842098680508,
+ 0.48621376695160357,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5909804395073653,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.540342828802579,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5070031545741325,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.5471884451577063,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 0.2965673462275658,
+ null
+ ],
+ [
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
+ ]
+ ],
+ "type": "contour"
+ },
+ {
+ "marker": {
+ "color": "black",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Feasible Trial",
+ "showlegend": false,
+ "x": [
+ 0.059404290631778746,
+ 0.394601513604858,
+ 0.08370767472015733,
+ 0.48951533793958846,
+ 0.2923162374391224,
+ 0.19529504930173058,
+ 0.4439544855483355,
+ 0.13951950351144252,
+ 0.17958865484802544,
+ 0.040659430256419084,
+ 0.024475439353389312,
+ 0.12956336281064562,
+ 0.2670911045647954,
+ 0.25698704515514065,
+ 0.2534115610265647,
+ 0.2295971014499739,
+ 0.20065989932586775,
+ 0.20789625836006717,
+ 0.34541128204946103,
+ 0.33451471526946835,
+ 0.09697004508260854,
+ 0.10076362835567448,
+ 0.13842115118156287,
+ 0.14098675841298333,
+ 0.061646551459528305,
+ 0.14883554516436837,
+ 0.06745441862837374,
+ 0.07487733826147724,
+ 0.07046370761739812,
+ 0.011263226459545889,
+ 0.11618914824591976,
+ 0.10311931998174755,
+ 0.11481090354070173,
+ 0.10126559533240051,
+ 0.0501456146084194,
+ 0.04887132738158265,
+ 0.17485511719664615,
+ 0.04674681612215488,
+ 0.044199192523817155,
+ 0.048925942003726935,
+ 0.0498549420385372,
+ 0.03217219010617994,
+ 0.03822246814313676,
+ 0.03835485739579715,
+ 0.05112552955378122,
+ 0.03165932986472511,
+ 0.03688430433046225,
+ 0.021950029012550436,
+ 0.016267773234105474,
+ 0.013630020043986453,
+ 0.07832420100059283,
+ 0.08255193716329551,
+ 0.48049991966967187,
+ 0.49362973404128374,
+ 0.08478156596751255,
+ 0.08495103643694721,
+ 0.07576805408845919,
+ 0.07879644717236631,
+ 0.07212971495510849,
+ 0.08741522054151135,
+ 0.07801971683099954,
+ 0.17568436953783512,
+ 0.1617298963589536,
+ 0.16172706734587736,
+ 0.09331486853054542,
+ 0.12143616224311836,
+ 0.12142261524707477,
+ 0.12368284060442458,
+ 0.1206650228048842,
+ 0.09462503601614727,
+ 0.08804265742891054,
+ 0.09180152733901467,
+ 0.09015577481282054,
+ 0.09184301968320846,
+ 0.061566946451765414,
+ 0.10839412662529492,
+ 0.065927942967217,
+ 0.1391491625488669,
+ 0.21735492024391928,
+ 0.3247276298158274,
+ 0.3866894133473552,
+ 0.35368454660132287,
+ 0.0588572002048303,
+ 0.07691518490732062,
+ 0.0738655530336822,
+ 0.07939422235829016,
+ 0.10943578005466859,
+ 0.10740470761531976,
+ 0.10692189484879672,
+ 0.10688635236122257,
+ 0.15113619842976073,
+ 0.14846569510331847,
+ 0.13257255926566458,
+ 0.059829787975593754
+ ],
+ "y": [
+ 14,
+ 5,
+ 28,
+ 7,
+ 21,
+ 7,
+ 9,
+ 17,
+ 27,
+ 26,
+ 13,
+ 15,
+ 21,
+ 13,
+ 11,
+ 21,
+ 10,
+ 9,
+ 9,
+ 5,
+ 5,
+ 5,
+ 18,
+ 17,
+ 7,
+ 7,
+ 7,
+ 7,
+ 12,
+ 7,
+ 12,
+ 11,
+ 11,
+ 15,
+ 8,
+ 8,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 9,
+ 9,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 6,
+ 8,
+ 8,
+ 30,
+ 8,
+ 8,
+ 8,
+ 10,
+ 9,
+ 10,
+ 25,
+ 10,
+ 10,
+ 10,
+ 10,
+ 10,
+ 9,
+ 8,
+ 14,
+ 14,
+ 14,
+ 13,
+ 12,
+ 12,
+ 8,
+ 12,
+ 8,
+ 11,
+ 11,
+ 7,
+ 7,
+ 7,
+ 9,
+ 9,
+ 9,
+ 9,
+ 9,
+ 18,
+ 8,
+ 20,
+ 8,
+ 6,
+ 6,
+ 6
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc",
+ "line": {
+ "color": "Gray",
+ "width": 2.0
+ }
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Contour Plot"
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ },
+ "xaxis": {
+ "title": {
+ "text": "epsilon"
+ },
+ "range": [
+ -0.012855098919541005,
+ 0.5177480594203706
+ ]
+ },
+ "yaxis": {
+ "title": {
+ "text": "min_cluster_size"
+ },
+ "range": [
+ 3.75,
+ 31.25
+ ]
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 61
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:43.132879Z",
+ "start_time": "2025-01-20T14:00:43.091696Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# visualize the study\n",
+ "study = studies[\"LGATr_L_cos_sim\"]\n",
+ "print(study.best_params)\n",
+ "# Best value:\n",
+ "print(study.best_value)\n",
+ "optuna.visualization.plot_optimization_history(study)\n"
+ ],
+ "id": "fe06d322540f8aa7",
+ "outputs": [
+ {
+ "ename": "KeyError",
+ "evalue": "'LGATr_L_cos_sim'",
+ "output_type": "error",
+ "traceback": [
+ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+ "\u001B[0;31mKeyError\u001B[0m Traceback (most recent call last)",
+ "Cell \u001B[0;32mIn[62], line 2\u001B[0m\n\u001B[1;32m 1\u001B[0m \u001B[38;5;66;03m# visualize the study\u001B[39;00m\n\u001B[0;32m----> 2\u001B[0m study \u001B[38;5;241m=\u001B[39m \u001B[43mstudies\u001B[49m\u001B[43m[\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mLGATr_L_cos_sim\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m]\u001B[49m\n\u001B[1;32m 3\u001B[0m \u001B[38;5;28mprint\u001B[39m(study\u001B[38;5;241m.\u001B[39mbest_params)\n\u001B[1;32m 4\u001B[0m \u001B[38;5;66;03m# Best value:\u001B[39;00m\n",
+ "\u001B[0;31mKeyError\u001B[0m: 'LGATr_L_cos_sim'"
+ ]
+ }
+ ],
+ "execution_count": 62
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:47.873330Z",
+ "start_time": "2025-01-20T14:00:47.851270Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# visualize the study\n",
+ "study = studies[\"LGATr_cos_sim\"]\n",
+ "print(study.best_params)\n",
+ "# Best value:\n",
+ "print(study.best_value)\n",
+ "optuna.visualization.plot_optimization_history(study)\n"
+ ],
+ "id": "ce72217e1d2486e",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'min_cluster_size': 9, 'min_samples': 2, 'epsilon': 0.291086113355078}\n",
+ "0.3893832582148773\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "mode": "markers",
+ "name": "Objective Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 26,
+ 27
+ ],
+ "y": [
+ 0.3893832582148773,
+ 0.035740442361212835,
+ 0.17813146299793184,
+ 0.0235491181397182,
+ 0.21915648403626328,
+ 0.017705242334322455,
+ 0.12193986782090666,
+ 0.04383615021187473,
+ 0.08281770585435508,
+ 0.037333854573885855,
+ 0.012108580219343953,
+ 0.35401672826298386,
+ 0.35401672826298386,
+ 0.35401672826298386,
+ 0.3849649541708388,
+ 0.14311960316002204,
+ 0.1477340420657105,
+ 0.1477340420657105,
+ 0.20768789443488242,
+ 0.20768789443488242,
+ 0.2735049938893337,
+ 0.11591227251516566,
+ 0.35401672826298386,
+ 0.35401672826298386,
+ 0.29263420724094885,
+ 0.15145702018817941,
+ 0.3009427720807145
+ ],
+ "type": "scatter"
+ },
+ {
+ "mode": "lines",
+ "name": "Best Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28
+ ],
+ "y": [
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773,
+ 0.3893832582148773
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc"
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Optimization History Plot"
+ },
+ "xaxis": {
+ "title": {
+ "text": "Trial"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 63
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-20T14:00:48.152022Z",
+ "start_time": "2025-01-20T14:00:48.114242Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# visualize the study\n",
+ "study = studies[\"LGATr_qd_norm\"]\n",
+ "print(study.best_params)\n",
+ "# Best value:\n",
+ "print(study.best_value)\n",
+ "optuna.visualization.plot_optimization_history(study)\n"
+ ],
+ "id": "9d31914104d982bd",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'min_cluster_size': 8, 'min_samples': 3, 'epsilon': 0.09454847291075721}\n",
+ "0.7531938948558508\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "mode": "markers",
+ "name": "Objective Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 182,
+ 184,
+ 185,
+ 186,
+ 188,
+ 189,
+ 190,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 206,
+ 207,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235
+ ],
+ "y": [
+ 0.7281221513217867,
+ 0.5625920471281296,
+ 0.6974308812106216,
+ 0.6192373363688104,
+ 0.713149811981514,
+ 0.7205494224820502,
+ 0.32300611389709416,
+ 0.6176796573106071,
+ 0.656228847229171,
+ 0.7056665424632406,
+ 0.7044825996773451,
+ 0.7342309215364597,
+ 0.35713080168776373,
+ 0.7159283154121865,
+ 0.6859764013501428,
+ 0.33129463217958793,
+ 0.36762928139691065,
+ 0.7126640045636051,
+ 0.6859800127086823,
+ 0.6813913043478261,
+ 0.6813913043478261,
+ 0.6828703033112199,
+ 0.6846372111876773,
+ 0.6813913043478261,
+ 0.6914459700120642,
+ 0.7011836011207044,
+ 0.7383534875817734,
+ 0.7354879018516414,
+ 0.7383534875817734,
+ 0.7376607158062044,
+ 0.7372302107263393,
+ 0.7097380945595485,
+ 0.737762138539686,
+ 0.7398951989803144,
+ 0.737753306465346,
+ 0.738625417870701,
+ 0.7399099328745009,
+ 0.7369287539029237,
+ 0.7398618033529679,
+ 0.7394004707750773,
+ 0.7386789240721826,
+ 0.7382432240669788,
+ 0.735386799148332,
+ 0.7305430057113631,
+ 0.7247219846022241,
+ 0.7316990029258871,
+ 0.7371736662883087,
+ 0.7325007096224807,
+ 0.7319815982279774,
+ 0.7318375461516615,
+ 0.7345085015186352,
+ 0.7352072685973878,
+ 0.7321042449072493,
+ 0.7304189435336976,
+ 0.7239775094899678,
+ 0.7303828091646507,
+ 0.7269202258082911,
+ 0.6834905111188729,
+ 0.7462323635027003,
+ 0.6310361273399309,
+ 0.7385459999434022,
+ 0.7384894020431843,
+ 0.7442426989207717,
+ 0.7494838070994201,
+ 0.7484374558104019,
+ 0.7467429477738756,
+ 0.7458299113590666,
+ 0.7493567813622097,
+ 0.7455550829434284,
+ 0.7497524962520861,
+ 0.7499929288643755,
+ 0.7336520402936657,
+ 0.7395883605393896,
+ 0.7456195066628862,
+ 0.7428279560738912,
+ 0.7446820579726587,
+ 0.4600645161290323,
+ 0.7427631765473052,
+ 0.7483633271928581,
+ 0.7472808337829779,
+ 0.7473051174401453,
+ 0.7476105391531239,
+ 0.7409124314545763,
+ 0.7471098674354844,
+ 0.7480065599728553,
+ 0.7517264802445376,
+ 0.7471098674354844,
+ 0.746030388551555,
+ 0.7446315729276871,
+ 0.7475860502101556,
+ 0.7472164478742488,
+ 0.7475017793594305,
+ 0.7467288656274889,
+ 0.7513940388915621,
+ 0.7514529142921625,
+ 0.7481697147864431,
+ 0.7511572767302699,
+ 0.7292852087756547,
+ 0.751079624036806,
+ 0.7499505942802293,
+ 0.7499717673630718,
+ 0.7295023931575518,
+ 0.7498588368153586,
+ 0.7500917431192661,
+ 0.7499788285109386,
+ 0.751093428144135,
+ 0.7476941302569599,
+ 0.7497459062676454,
+ 0.7519013013351361,
+ 0.7519576361895104,
+ 0.7520117457718045,
+ 0.7519576361895104,
+ 0.7520630897056753,
+ 0.7517153748411689,
+ 0.7518801228065234,
+ 0.7517153748411689,
+ 0.7519128151557074,
+ 0.747715220579939,
+ 0.7515812062344702,
+ 0.7518449664807616,
+ 0.7502743464925856,
+ 0.7518877493519667,
+ 0.7497046413502109,
+ 0.7518170037748607,
+ 0.747994483069215,
+ 0.7515708207714632,
+ 0.7493952860437644,
+ 0.7513033676201213,
+ 0.7513809040694397,
+ 0.7513173838306987,
+ 0.7512893498294958,
+ 0.7511485667578003,
+ 0.7514301011638065,
+ 0.7511837655016911,
+ 0.7512965050732808,
+ 0.7497605229052797,
+ 0.7499154357875746,
+ 0.7507253725457056,
+ 0.7500493305144468,
+ 0.7481337502464859,
+ 0.7490486794261071,
+ 0.7397299057218085,
+ 0.7424499491007804,
+ 0.7484607128735242,
+ 0.7490697936633217,
+ 0.7404052983131438,
+ 0.7481337502464859,
+ 0.7481900898616862,
+ 0.7512263884973217,
+ 0.7484111515973222,
+ 0.7486162882638654,
+ 0.7511842995713964,
+ 0.7486374290474712,
+ 0.7513675069080246,
+ 0.751205209889769,
+ 0.3512135427289415,
+ 0.7518678282443825,
+ 0.750662531716944,
+ 0.7518818189506921,
+ 0.7489157983666572,
+ 0.746129242265561,
+ 0.7518890267283185,
+ 0.7502251238180999,
+ 0.7479436619718309,
+ 0.7478795051709075,
+ 0.7503447499507501,
+ 0.37595190380761523,
+ 0.39262335936202025,
+ 0.7479436619718309,
+ 0.7514562008708929,
+ 0.7501829028082616,
+ 0.7515127523610247,
+ 0.7515134370579915,
+ 0.7514208963664639,
+ 0.7518516424492565,
+ 0.7517878847838991,
+ 0.7515199502304669,
+ 0.7515905556341016,
+ 0.7517013526106232,
+ 0.4716950736218063,
+ 0.7490566573041677,
+ 0.4988451194431261,
+ 0.46786549988780973,
+ 0.7504229164317131,
+ 0.752496473906911,
+ 0.7170317900088543,
+ 0.752080336238752,
+ 0.7518371961560203,
+ 0.7113963771216658,
+ 0.7523422508183768,
+ 0.7522433545911168,
+ 0.7196824762285486,
+ 0.7529890613075553,
+ 0.7526577697353539,
+ 0.7531938948558508,
+ 0.7529185629081041,
+ 0.7512148265340716,
+ 0.7518394271699601,
+ 0.7512288829877395,
+ 0.7501201209688815,
+ 0.7498728166864508,
+ 0.7486226089904785,
+ 0.7513824624760185,
+ 0.7504087500704741,
+ 0.7503875968992247,
+ 0.7517478574650429,
+ 0.751113617141246,
+ 0.7511067249400818,
+ 0.7516221858601817,
+ 0.7498091549096665,
+ 0.7499363885669051,
+ 0.7505216263463599,
+ 0.7508495695514272,
+ 0.39929504871479404,
+ 0.6091800896209277,
+ 0.7503381424706943,
+ 0.7521685254027262,
+ 0.7515295046378528,
+ 0.7519945871275128,
+ 0.7513496707086125,
+ 0.7511023176936124,
+ 0.7523220688292256,
+ 0.7524562394127612,
+ 0.7522583559168925,
+ 0.7520203447301497,
+ 0.7410363075529898
+ ],
+ "type": "scatter"
+ },
+ {
+ "mode": "lines",
+ "name": "Best Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238
+ ],
+ "y": [
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7281221513217867,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7342309215364597,
+ 0.7383534875817734,
+ 0.7383534875817734,
+ 0.7383534875817734,
+ 0.7383534875817734,
+ 0.7383534875817734,
+ 0.7383534875817734,
+ 0.7383534875817734,
+ 0.7398951989803144,
+ 0.7398951989803144,
+ 0.7398951989803144,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7399099328745009,
+ 0.7462323635027003,
+ 0.7462323635027003,
+ 0.7462323635027003,
+ 0.7462323635027003,
+ 0.7462323635027003,
+ 0.7494838070994201,
+ 0.7494838070994201,
+ 0.7494838070994201,
+ 0.7494838070994201,
+ 0.7494838070994201,
+ 0.7494838070994201,
+ 0.7497524962520861,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7499929288643755,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7517264802445376,
+ 0.7519013013351361,
+ 0.7519576361895104,
+ 0.7520117457718045,
+ 0.7520117457718045,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.7520630897056753,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.752496473906911,
+ 0.7529890613075553,
+ 0.7529890613075553,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508,
+ 0.7531938948558508
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc"
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Optimization History Plot"
+ },
+ "xaxis": {
+ "title": {
+ "text": "Trial"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 64
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-01-21T09:42:08.901011Z",
+ "start_time": "2025-01-21T09:42:08.853074Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "# Visualize the study\n",
+ "study = studies[\"lgatr_no_coords_loss\"]\n",
+ "print(study.best_params)\n",
+ "# best value:\n",
+ "print(study.best_value)\n",
+ "suffix = \"{}-{}-{}\".format(study.best_params[\"min_cluster_size\"], study.best_params[\"min_samples\"], study.best_params[\"epsilon\"])\n",
+ "print(suffix)\n",
+ "optuna.visualization.plot_optimization_history(study)\n"
+ ],
+ "id": "bc127cb3f4324232",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'min_cluster_size': 5, 'min_samples': 19, 'epsilon': 0.17149658495077644}\n",
+ "0.7360948769849189\n",
+ "5-19-0.17149658495077644\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.plotly.v1+json": {
+ "data": [
+ {
+ "mode": "markers",
+ "name": "Objective Value",
+ "x": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 100
+ ],
+ "y": [
+ 0.7265052337354897,
+ 0.7298445743618994,
+ 0.7309347564124635,
+ 0.7345016554401188,
+ 0.7289177193581428,
+ 0.7352278881509563,
+ 0.7279573266394729,
+ 0.7356570809701598,
+ 0.7239190797302657,
+ 0.7331905781584582,
+ 0.7344292133553268,
+ 0.7296147211040828,
+ 0.7349579592418412,
+ 0.7345777373093558,
+ 0.7011484176382922,
+ 0.695823780363932,
+ 0.7356210454312261,
+ 0.7232410611303345,
+ 0.7318376375283675,
+ 0.7318376375283675,
+ 0.6956672243696994,
+ 0.6956672243696994,
+ 0.7326017820817694,
+ 0.730130855945165,
+ 0.7287958115183245,
+ 0.7287958115183245,
+ 0.734475496613353,
+ 0.734806629834254,
+ 0.7357474571925127,
+ 0.7355033289705799,
+ 0.7345809322759171,
+ 0.7345809322759171,
+ 0.7345809322759171,
+ 0.7326026146029572,
+ 0.7251100817750328,
+ 0.7297120232432278,
+ 0.7273505248744866,
+ 0.7356904755121227,
+ 0.7356904755121227,
+ 0.7349829351535836,
+ 0.7349829351535836,
+ 0.735201251600057,
+ 0.735201251600057,
+ 0.7328443913809768,
+ 0.732980117358856,
+ 0.7216677628756899,
+ 0.7331156556109297,
+ 0.7331519404267506,
+ 0.732980117358856,
+ 0.7330716107401781,
+ 0.7342747111681642,
+ 0.7342747111681642,
+ 0.7342747111681642,
+ 0.7342747111681642,
+ 0.7350925291295407,
+ 0.7350925291295407,
+ 0.735061236115067,
+ 0.7351607290567329,
+ 0.7350753711566409,
+ 0.7298580927434444,
+ 0.7355033289705799,
+ 0.7355033289705799,
+ 0.7290497946908796,
+ 0.7291178766588603,
+ 0.7360948769849189,
+ 0.7354316341658114,
+ 0.7357474571925127,
+ 0.7356223664730669,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7343149260957481,
+ 0.7343149260957481,
+ 0.7349627812794113,
+ 0.7343149260957481,
+ 0.7343149260957481,
+ 0.7349627812794113,
+ 0.7343149260957481,
+ 0.7143019425195956,
+ 0.7349033472087587,
+ 0.735061236115067,
+ 0.734806629834254,
+ 0.7317169998582165,
+ 0.7343176581036102,
+ 0.7340310562539105,
+ 0.7356223664730669,
+ 0.7356223664730669,
+ 0.7356223664730669,
+ 0.7353912746326461,
+ 0.7357973990417522,
+ 0.7339753665018718,
+ 0.7357973990417522,
+ 0.7357973990417522,
+ 0.7357973990417522,
+ 0.7342315283617951,
+ 0.7357973990417522,
+ 0.7357973990417522,
+ 0.7357973990417522
+ ],
+ "type": "scatter"
+ },
+ {
+ "mode": "lines",
+ "name": "Best Value",
+ "x": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105
+ ],
+ "y": [
+ null,
+ 0.7265052337354897,
+ 0.7298445743618994,
+ 0.7309347564124635,
+ 0.7345016554401188,
+ 0.7345016554401188,
+ 0.7352278881509563,
+ 0.7352278881509563,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7356570809701598,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7357474571925127,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189,
+ 0.7360948769849189
+ ],
+ "type": "scatter"
+ },
+ {
+ "marker": {
+ "color": "#cccccc"
+ },
+ "mode": "markers",
+ "name": "Infeasible Trial",
+ "showlegend": false,
+ "x": [],
+ "y": [],
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": {
+ "text": "Optimization History Plot"
+ },
+ "xaxis": {
+ "title": {
+ "text": "Trial"
+ }
+ },
+ "yaxis": {
+ "title": {
+ "text": "Objective Value"
+ }
+ },
+ "template": {
+ "data": {
+ "histogram2dcontour": [
+ {
+ "type": "histogram2dcontour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "choropleth": [
+ {
+ "type": "choropleth",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "histogram2d": [
+ {
+ "type": "histogram2d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmap": [
+ {
+ "type": "heatmap",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "heatmapgl": [
+ {
+ "type": "heatmapgl",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "contourcarpet": [
+ {
+ "type": "contourcarpet",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "contour": [
+ {
+ "type": "contour",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "surface": [
+ {
+ "type": "surface",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ },
+ "colorscale": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ]
+ }
+ ],
+ "mesh3d": [
+ {
+ "type": "mesh3d",
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ ],
+ "scatter": [
+ {
+ "fillpattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ },
+ "type": "scatter"
+ }
+ ],
+ "parcoords": [
+ {
+ "type": "parcoords",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolargl": [
+ {
+ "type": "scatterpolargl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "bar": [
+ {
+ "error_x": {
+ "color": "#2a3f5f"
+ },
+ "error_y": {
+ "color": "#2a3f5f"
+ },
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "bar"
+ }
+ ],
+ "scattergeo": [
+ {
+ "type": "scattergeo",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterpolar": [
+ {
+ "type": "scatterpolar",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "histogram": [
+ {
+ "marker": {
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "histogram"
+ }
+ ],
+ "scattergl": [
+ {
+ "type": "scattergl",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatter3d": [
+ {
+ "type": "scatter3d",
+ "line": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattermapbox": [
+ {
+ "type": "scattermapbox",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scatterternary": [
+ {
+ "type": "scatterternary",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "scattercarpet": [
+ {
+ "type": "scattercarpet",
+ "marker": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ }
+ }
+ ],
+ "carpet": [
+ {
+ "aaxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "baxis": {
+ "endlinecolor": "#2a3f5f",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "minorgridcolor": "white",
+ "startlinecolor": "#2a3f5f"
+ },
+ "type": "carpet"
+ }
+ ],
+ "table": [
+ {
+ "cells": {
+ "fill": {
+ "color": "#EBF0F8"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "header": {
+ "fill": {
+ "color": "#C8D4E3"
+ },
+ "line": {
+ "color": "white"
+ }
+ },
+ "type": "table"
+ }
+ ],
+ "barpolar": [
+ {
+ "marker": {
+ "line": {
+ "color": "#E5ECF6",
+ "width": 0.5
+ },
+ "pattern": {
+ "fillmode": "overlay",
+ "size": 10,
+ "solidity": 0.2
+ }
+ },
+ "type": "barpolar"
+ }
+ ],
+ "pie": [
+ {
+ "automargin": true,
+ "type": "pie"
+ }
+ ]
+ },
+ "layout": {
+ "autotypenumbers": "strict",
+ "colorway": [
+ "#636efa",
+ "#EF553B",
+ "#00cc96",
+ "#ab63fa",
+ "#FFA15A",
+ "#19d3f3",
+ "#FF6692",
+ "#B6E880",
+ "#FF97FF",
+ "#FECB52"
+ ],
+ "font": {
+ "color": "#2a3f5f"
+ },
+ "hovermode": "closest",
+ "hoverlabel": {
+ "align": "left"
+ },
+ "paper_bgcolor": "white",
+ "plot_bgcolor": "#E5ECF6",
+ "polar": {
+ "bgcolor": "#E5ECF6",
+ "angularaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "radialaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "ternary": {
+ "bgcolor": "#E5ECF6",
+ "aaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "baxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ },
+ "caxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": ""
+ }
+ },
+ "coloraxis": {
+ "colorbar": {
+ "outlinewidth": 0,
+ "ticks": ""
+ }
+ },
+ "colorscale": {
+ "sequential": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "sequentialminus": [
+ [
+ 0.0,
+ "#0d0887"
+ ],
+ [
+ 0.1111111111111111,
+ "#46039f"
+ ],
+ [
+ 0.2222222222222222,
+ "#7201a8"
+ ],
+ [
+ 0.3333333333333333,
+ "#9c179e"
+ ],
+ [
+ 0.4444444444444444,
+ "#bd3786"
+ ],
+ [
+ 0.5555555555555556,
+ "#d8576b"
+ ],
+ [
+ 0.6666666666666666,
+ "#ed7953"
+ ],
+ [
+ 0.7777777777777778,
+ "#fb9f3a"
+ ],
+ [
+ 0.8888888888888888,
+ "#fdca26"
+ ],
+ [
+ 1.0,
+ "#f0f921"
+ ]
+ ],
+ "diverging": [
+ [
+ 0,
+ "#8e0152"
+ ],
+ [
+ 0.1,
+ "#c51b7d"
+ ],
+ [
+ 0.2,
+ "#de77ae"
+ ],
+ [
+ 0.3,
+ "#f1b6da"
+ ],
+ [
+ 0.4,
+ "#fde0ef"
+ ],
+ [
+ 0.5,
+ "#f7f7f7"
+ ],
+ [
+ 0.6,
+ "#e6f5d0"
+ ],
+ [
+ 0.7,
+ "#b8e186"
+ ],
+ [
+ 0.8,
+ "#7fbc41"
+ ],
+ [
+ 0.9,
+ "#4d9221"
+ ],
+ [
+ 1,
+ "#276419"
+ ]
+ ]
+ },
+ "xaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "yaxis": {
+ "gridcolor": "white",
+ "linecolor": "white",
+ "ticks": "",
+ "title": {
+ "standoff": 15
+ },
+ "zerolinecolor": "white",
+ "automargin": true,
+ "zerolinewidth": 2
+ },
+ "scene": {
+ "xaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "yaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ },
+ "zaxis": {
+ "backgroundcolor": "#E5ECF6",
+ "gridcolor": "white",
+ "linecolor": "white",
+ "showbackground": true,
+ "ticks": "",
+ "zerolinecolor": "white",
+ "gridwidth": 2
+ }
+ },
+ "shapedefaults": {
+ "line": {
+ "color": "#2a3f5f"
+ }
+ },
+ "annotationdefaults": {
+ "arrowcolor": "#2a3f5f",
+ "arrowhead": 0,
+ "arrowwidth": 1
+ },
+ "geo": {
+ "bgcolor": "white",
+ "landcolor": "#E5ECF6",
+ "subunitcolor": "white",
+ "showland": true,
+ "showlakes": true,
+ "lakecolor": "white"
+ },
+ "title": {
+ "x": 0.05
+ },
+ "mapbox": {
+ "style": "light"
+ }
+ }
+ }
+ },
+ "config": {
+ "plotlyServerURL": "https://plot.ly"
+ }
+ },
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 4
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "554fd6477e5feec9"
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "f8590170a7ea9216"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/parton_level_clustering_debug.ipynb b/notebooks/parton_level_clustering_debug.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..3270bb8cece06a9ebbd8003039f2bc376771fa84
--- /dev/null
+++ b/notebooks/parton_level_clustering_debug.ipynb
@@ -0,0 +1,388 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T14:01:33.036983Z",
+ "start_time": "2025-03-26T14:01:27.913144Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# This file is for quick plotting of histograms of particle properties, to debug potential issues with cuts etc.\n",
+ "import torch\n",
+ "import sys\n",
+ "import os.path as osp\n",
+ "import os\n",
+ "import sys\n",
+ "import numpy as np\n",
+ "from src.dataset.dataset import SimpleIterDataset, EventDataset\n",
+ "from src.utils.utils import to_filelist\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import matplotlib\n",
+ "import pickle\n",
+ "import torch\n",
+ "import os\n",
+ "import matplotlib.pyplot as plt\n",
+ "from src.utils.paths import get_path\n",
+ "from src.utils.utils import CPU_Unpickler\n",
+ "from pathlib import Path\n",
+ "import fastjet\n",
+ "from src.dataset.dataset import EventDataset\n",
+ "import numpy as np\n",
+ "from src.plotting.plot_coordinates import plot_coordinates\n",
+ "\n",
+ "matplotlib.rc('font', size=13)\n",
+ "from src.plotting.plot_event import plot_event_comparison\n",
+ "from src.dataset.functions_data import concat_events\n",
+ "from src.utils.paths import get_path\n",
+ "from dotenv import load_dotenv\n",
+ "load_dotenv()\n"
+ ],
+ "id": "6bae9707acf4a848",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 1
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T14:01:33.066009Z",
+ "start_time": "2025-03-26T14:01:33.060240Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "def remove_from_list(lst):\n",
+ " out = []\n",
+ " for item in lst:\n",
+ " if item in [\"hgcal\", \"data.txt\", \"test_file.root\"]:\n",
+ " continue\n",
+ " out.append(item)\n",
+ " return out\n",
+ "\n",
+ "#path = \"/eos/user/g/gkrzmanc/jetclustering/data/SVJ_std_UL2018_scouting_test_large/SVJ_mMed-700GeV_mDark-20GeV_rinv-0.7_alpha-peak\"\n",
+ "def get_iter(path_to_ds):\n",
+ " return iter()"
+ ],
+ "id": "e7a7ef680143801e",
+ "outputs": [],
+ "execution_count": 2
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T14:01:40.095236Z",
+ "start_time": "2025-03-26T14:01:33.330168Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "filename_parton_level = get_path(\"train/Eval_eval_19March2025_2025_03_19_22_08_15/eval_1.pkl\", \"results\", fallback=True)\n",
+ "result_parton_level = CPU_Unpickler(open(filename_parton_level, \"rb\")).load()\n",
+ "print(result_parton_level[\"filename\"])\n",
+ "dataset_parton_level = EventDataset.from_directory(result_parton_level[\"filename\"], mmap=True, model_output_file=filename_parton_level, parton_level=True)\n",
+ "\n",
+ "filename_gen_level = get_path(\"train/Eval_eval_19March2025_2025_03_19_22_08_18/eval_1.pkl\", \"results\", fallback=True)\n",
+ "result_gen_level = CPU_Unpickler(open(filename_gen_level, \"rb\")).load()\n",
+ "dataset_gen_level = EventDataset.from_directory(result_gen_level[\"filename\"], mmap=True, model_output_file=filename_gen_level, gen_level=True)\n",
+ "\n",
+ "filename_pfcands_level = get_path(\"train/Eval_eval_19March2025_2025_03_19_22_08_22/eval_1.pkl\", \"results\", fallback=True)\n",
+ "result_pfcands_level = CPU_Unpickler(open(filename_pfcands_level, \"rb\")).load()\n",
+ "dataset_pfcands_level = EventDataset.from_directory(result_pfcands_level[\"filename\"], mmap=True, model_output_file=filename_pfcands_level)\n"
+ ],
+ "id": "1c903a13377dcb3c",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/jetclustering/preprocessed_data/Feb26_2025_E1000_N500_full/PFNano_s-channel_mMed-1000_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/work/gkrzmanc/jetclustering/code/src/utils/utils.py:91: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
+ " return lambda b: torch.load(io.BytesIO(b), map_location='cpu')\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Batch idx torch.Size([501263]) tensor([3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131,\n",
+ " 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131,\n",
+ " 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3132, 3132, 3132,\n",
+ " 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132,\n",
+ " 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132,\n",
+ " 3132, 3132, 3132, 3133, 3133, 3133, 3133, 3133, 3133, 3133, 3133, 3133,\n",
+ " 3133, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134,\n",
+ " 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134,\n",
+ " 3134, 3134, 3134, 3134, 3134, 3135, 3135, 3135, 3135, 3135, 3135, 3135,\n",
+ " 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135,\n",
+ " 3135, 3135, 3135, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,\n",
+ " 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,\n",
+ " 3136, 3136, 3136, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137,\n",
+ " 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137,\n",
+ " 3137, 3137, 3137, 3137, 3137, 3138, 3138, 3138, 3138, 3138, 3138, 3138,\n",
+ " 3138, 3138, 3138, 3138, 3138, 3138, 3138, 3138, 3138, 3138, 3138, 3139,\n",
+ " 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139])\n",
+ "skipped [19289, 15787, 12804, 12703, 12368, 9642, 6843, 6378, 5789, 5629, 5624, 3766, 2690, 1883]\n",
+ "result torch.Size([19983]) [78887.0, 78898.0, 78931.0, 78961.0, 78971.0, 78999.0, 79021.0, 79045.0, 79071.0, 79089.0]\n",
+ "get_pfcands_key\n",
+ "Batch idx torch.Size([2982887]) tensor([3131, 3131, 3131, ..., 3139, 3139, 3139])\n",
+ "skipped []\n",
+ "result torch.Size([19969]) [467445.0, 467565.0, 467712.0, 467879.0, 467956.0, 468058.0, 468160.0, 468362.0, 468530.0, 468643.0]\n",
+ "get_pfcands_key\n",
+ "Batch idx torch.Size([5032092]) tensor([3131, 3131, 3131, ..., 3139, 3139, 3139])\n",
+ "skipped []\n",
+ "result torch.Size([19969]) [784483.0, 784702.0, 784927.0, 785193.0, 785287.0, 785462.0, 785727.0, 786175.0, 786452.0, 786634.0]\n",
+ "get_pfcands_key\n",
+ "Found pfcands_key=pfcands\n"
+ ]
+ }
+ ],
+ "execution_count": 3
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T14:01:40.138249Z",
+ "start_time": "2025-03-26T14:01:40.128129Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "dataset_gen_level[0]",
+ "id": "8175bcf087430364",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 4
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T14:01:50.734250Z",
+ "start_time": "2025-03-26T14:01:50.717027Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "dataset_parton_level[0]",
+ "id": "e93a7d6c2a4ebec0",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 5
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T14:01:53.461228Z",
+ "start_time": "2025-03-26T14:01:53.443790Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "dataset_pfcands_level[0]",
+ "id": "66e9f682b4f8c364",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 6
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T14:19:22.465519Z",
+ "start_time": "2025-03-26T14:19:10.976384Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# make a histogram of the number of particles within R=0.8 of dark quarks\n",
+ "data = {\n",
+ " \"PL\": [],\n",
+ " \"GL\": [],\n",
+ " \"PFCands\": []\n",
+ "}\n",
+ "R = 2.0\n",
+ "from tqdm import tqdm\n",
+ "for i in tqdm(range(200)):\n",
+ " event = dataset_pfcands_level[i]\n",
+ " particles = event.pfcands\n",
+ " data[\"PFCands\"] += [0]\n",
+ " for dq in range(len(event.matrix_element_gen_particles)):\n",
+ " coords = event.matrix_element_gen_particles.eta[dq], event.matrix_element_gen_particles.phi[dq]\n",
+ " for p in range(len(particles)):\n",
+ " if np.sqrt((particles.eta[p] - coords[0])**2 + (particles.phi[p] - coords[1])**2) < R:\n",
+ " data[\"PFCands\"][-1] += 1\n",
+ " event = dataset_parton_level[i]\n",
+ " particles = event.final_parton_level_particles\n",
+ " data[\"PL\"] += [0]\n",
+ " for dq in range(len(event.matrix_element_gen_particles)):\n",
+ " coords = event.matrix_element_gen_particles.eta[dq], event.matrix_element_gen_particles.phi[dq]\n",
+ " for p in range(len(particles)):\n",
+ " if np.sqrt((particles.eta[p] - coords[0])**2 + (particles.phi[p] - coords[1])**2) < R:\n",
+ " data[\"PL\"][-1] += 1\n",
+ " particles = event.final_gen_particles\n",
+ " data[\"GL\"] += [0]\n",
+ " for dq in range(len(event.matrix_element_gen_particles)):\n",
+ " coords = event.matrix_element_gen_particles.eta[dq], event.matrix_element_gen_particles.phi[dq]\n",
+ " for p in range(len(particles)):\n",
+ " if np.sqrt((particles.eta[p] - coords[0])**2 + (particles.phi[p] - coords[1])**2) < 0.8:\n",
+ " data[\"GL\"][-1] += 1"
+ ],
+ "id": "232234c10680aaba",
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ " 0%| | 0/200 [00:00, ?it/s]/tmp/ipykernel_22622/2504941977.py:16: DeprecationWarning: __array_wrap__ must accept context and return_scalar arguments (positionally) in the future. (Deprecated NumPy 2.0)\n",
+ " if np.sqrt((particles.eta[p] - coords[0])**2 + (particles.phi[p] - coords[1])**2) < R:\n",
+ "/tmp/ipykernel_22622/2504941977.py:24: DeprecationWarning: __array_wrap__ must accept context and return_scalar arguments (positionally) in the future. (Deprecated NumPy 2.0)\n",
+ " if np.sqrt((particles.eta[p] - coords[0])**2 + (particles.phi[p] - coords[1])**2) < R:\n",
+ "/tmp/ipykernel_22622/2504941977.py:31: DeprecationWarning: __array_wrap__ must accept context and return_scalar arguments (positionally) in the future. (Deprecated NumPy 2.0)\n",
+ " if np.sqrt((particles.eta[p] - coords[0])**2 + (particles.phi[p] - coords[1])**2) < 0.8:\n",
+ "100%|██████████| 200/200 [00:11<00:00, 17.44it/s]\n"
+ ]
+ }
+ ],
+ "execution_count": 15
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T14:18:44.349092Z",
+ "start_time": "2025-03-26T14:18:44.095676Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "bins = np.linspace(0, 100, 30)\n",
+ "ax.hist(data[\"PL\"], bins=bins, histtype=\"step\", label=\"Parton level\")\n",
+ "ax.hist(data[\"GL\"], bins=bins, histtype=\"step\", label=\"Gen level\")\n",
+ "ax.hist(data[\"PFCands\"], bins=bins, histtype=\"step\", label=\"PFCands\")\n",
+ "ax.legend()\n",
+ "fig.show()"
+ ],
+ "id": "f9271904d6e00747",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiQAAAGhCAYAAABRZq+GAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAARGFJREFUeJzt3Xd4VFXi//HPpPcCCZKEUCJBEHARAQOKICK4IEVXUFwFCxZWdCkiZlWKLa4uoIhYQJdmxUJccVEUsVCUzVIWFTACCiEKgRRCkgkk5/dHfpmvY4IyJblM8n49zzwy955z75lDmHy895x7bMYYIwAAAAv5Wd0AAAAAAgkAALAcgQQAAFiOQAIAACxHIAEAAJYjkAAAAMsRSAAAgOUIJAAAwHIBVjfgVFRWVurAgQOKjIyUzWazujkAAOAUGGN09OhRJSYmys/vt6+B+EQgOXDggJKTk61uBgAAcMO+ffvUokWL3yzjE4EkMjJSUtUHioqKsrg1AADgVBQVFSk5Odnxe/y3+EQgqb5NExUVRSABAMDHnMpwCwa1AgAAyxFIAACA5QgkAADAcgQSAABgOQIJAACwnE/MsgGAxsYYo4qKCp04ccLqpgA1BAYGyt/f36vHJJAAwGnEGKOCggIdOnRIFRUVVjcHOKmYmBg1b97ca09QJ5AAwGnkp59+UkFBgeO5SwEBASyZgdOKMUYlJSU6ePCgJCkhIcErxyWQAMBpoqKiQoWFhYqPj1dcXJzVzQFOKjQ0VJJ08OBBNWvWzCu3bxjUCgCniePHj8sYo/DwcKubAvyusLAwSVU/t95AIAGA0wy3aOALvP1zSiABAACWI5AAAADLMajVYjkFpco/Vu52/djwICXFhHqxRQBOZ55+Z3gb30HuW7RokW688UZ98skn6tu3r9XNcbCqXQQSC+UUlKr/rE9Vetz9Zw2EBvrro8l9+EIAGgFvfGd4myffQWvXrtXFF1/stC08PFxnnXWWRo8erfHjx3v94VsrVqzQli1bNGPGDK8eF54jkFgo/1i5So9X6Mmru6htswiX62cfLNaE17co/1g5gQRoBDz9zvA2b30HjRo1SoMGDZIxRgcOHNCiRYs0YcIEff3113rhhRe82OKqQLJ48WICyWmIQHIaaNssQp2Soq1uBgAf0dC+M7p27arrrrvO8X7cuHHq0KGDFi5cqIceekhnnHGGx+c4evSoIiMjPT4O6g6DWgEAp5WoqCj17NlTxhjt3r1blZWVeuSRR3TRRRepefPmCgoKUsuWLTVu3DgdPnzYqe7evXtls9k0Y8YMvf766zrvvPMUGhqqO++8U3379tXixYslVU1ZrX4tWrTIUX/btm264oor1LRpU4WEhOjss8/W448/XuMx/jfccINsNpsKCws1btw4NWvWTCEhIbrgggv05ZdfevT57Xa7Hn30UXXs2FEhISGKiYnRkCFDtHnzZkeZb7/9VjabTZMmTar1GKNGjVJQUJAOHTrk2Jabm6tx48apZcuWCgoKUmJiom699VbHE1etxhUSAMBpxRij7OxsSVJcXJzKy8v1xBNP6E9/+pOGDRum8PBwbdq0SS+++KK++OILZWVlKSgoyOkYK1as0Ny5czVu3DjdfvvtioqKUpMmTVRZWanPP/9cS5cudZTt1auXJOk///mP+vTpo8DAQN1xxx1q3ry5/vWvf2nq1KnaunWrXn755RptHThwoOLj4zVt2jQdPnxYs2fP1uDBg7Vnzx63rsgcP35cl112mdavX6/rr79e48ePV2FhoRYsWKALLrhAn332mbp166YOHTqoe/fueuWVV/TEE084jbUpKipSZmam/vjHPyo+Pl6S9OOPP6pnz54qLy/XzTffrDPPPFPZ2dl69tln9cknn+g///mPoqOtvepGIAEAWKqkpER5eXkyxig3N1dPP/20tm7dqrS0NKWmpjq2Vz+uXJJuv/129erVS2PHjtWKFSs0cuRIp2N+/fXX2rZtmzp06OC0/eWXX9bnn3/udIuo2l//+lfZ7XZt2LBB55xzjiRp/Pjxuvrqq/XKK6/opptu0iWXXOJUp2vXrpo/f77j/dlnn62RI0fqlVde0W233eZyX8ybN09r167VqlWrNHDgQMf2v/zlL+rUqZPuvvturV27VpI0ZswYjR8/Xh988IEGDRrkKLt8+XKVlpZqzJgxjm133nmnjh8/rs2bN6tFixaO7SNGjFBaWprmzJlj+bgabtkAACw1ffp0xcfHq1mzZvrDH/6gl156SUOHDtWKFSskVd1eqQ4jFRUVKigoUF5envr16ydJtd4iGTx4cI0w8lsOHjyo9evXa+jQoY4wUn3u++67T5L0zjvv1Kg3ceJEp/fVbfruu+9O+dy/tGzZMrVv317nnXee8vLyHK/y8nJdeuml+uKLL1RaWirp/27LLFmyxOkYS5YsUZMmTXT55ZdLkgoLC/Xee+9p6NChCgkJcTpu69at1bZtW3344YdutdebuEICALDUrbfeqhEjRshmsyk8PFzt2rVTkyZNnMq88cYbmjVrljZv3lxj7ZT8/Pwax2zXrp1LbdizZ48kqWPHjjX2dejQQX5+ftq9e3eNfSkpKU7vmzZtKkk1xracqm+//ValpaWOWy21ycvLU3JysiN0ZGZmqqioSFFRUdq7d68+//xzjRs3znEba+fOnaqsrNSLL76oF198sdZj/vpzWMHlQHKyZ9eHh4eruLjYadvOnTs1depUffrppyovL1fXrl01c+ZMR4IEACA1NVX9+/c/6f63335bV199tXr06KGnnnpKycnJCgkJUUVFhS677DJVVlbWqFO98FtdO9lzUowxbh3PGKPOnTtr9uzZJy3zy7AyevRovf3223rjjTc0duxYLV26VMYYp9s11W257rrrnLb/0i9vh1nFrSskvXv31q233uq0LTAw0On9999/r169eikgIED33HOPoqOjtWDBAg0cOFD//ve/f/OHDwCAakuXLlVISIg++eQTp6CxY8cOl491sv+pbtOmjaSqsSe/tmPHDlVWVtbLVYTU1FQdOnRI/fr1k5/f74+qGDRokOLi4rRkyRJHIGnfvr169OjhKNO2bVvZbDaVl5ef1r973QokKSkptQ4I+qX09HQVFBQoKytLXbp0kVSV5Dp27Kg77rhDO3bsYEVLAMDv8vf3l81mc7oSYozRww8/7PKxIiKqHih35MgRp9tCzZo1U69evfSvf/1L27dvV6dOnRznycjIkCRdccUVnnyMUzJ69GhNmTJFs2fP1t13311j/88//+z0XJbAwEBde+21evrpp/XKK6/ou+++c7S3WtOmTTVo0CC9/fbb2rhxo9LS0pz2G2OUl5f3m7eJ6oPbY0jKy8tVXl7u+Mv9pWPHjundd99V3759HWFEqvpBGDt2rKZNm6ZNmzY5JTgAAGpz1VVX6a233lK/fv00evRoHT9+XCtWrFBJSYnLx0pLS9O8efP0l7/8RYMHD1ZgYKDOP/98tWnTRk899ZT69Omj3r17O6b9vvfee/rggw907bXX1phhUxf++te/avXq1ZoyZYrWrFmjfv36KSoqSj/++KM+/vhjx5WiXxozZoxjirOfn1+tFwyeffZZXXjhhbrooos0evRonXvuuaqsrNTu3buVmZmp0aNHWz7Lxq1A8uabb2rZsmWqqKhQfHy8rr76aj388MOOOczbtm2T3W5Xz549a9StTmYEEgBwT/bB4t8vVA/qqx3XXHONjh49qjlz5ujuu+9WbGyshgwZoscee8wxiPRUjRo1Sps3b9Zrr72m5cuXq7KyUv/85z/Vpk0bdevWTevXr9f06dM1f/58HTt2TCkpKfr73/+uyZMn19GncxYYGKiVK1dq/vz5Wrp0qaZPny5JSkxMVI8ePWodA9K1a1d16tRJ27dvV//+/Z2m9VZLTk5WVlaW/v73vyszM1PLli1TSEiIkpOTNWTIkBrTpq1gMy6OvDn//PM1YsQItW3bVkVFRXr//ff1+uuvq3Pnzlq/fr0iIiL01ltv6aqrrtL8+fM1btw4p/rffPONOnbsqPT0dD366KO1nsNut8tutzveFxUVKTk5WYWFhYqKinLjY56etucU6vKnv9B7d17o1mOgPa0P4PRSVlamPXv2qE2bNgoJCamxv6Etrgff9ns/r1LV7+/o6OhT+v3t8hWSX8/3Hj16tM455xzdd999euqpp3Tfffc5LqMFBwfXqF/d6N+61JaRkaGZM2e62jQAaNCSYkL10eQ+yj9WbnVTHGLDgwgj8AqvPIdkypQpmjlzplauXKn77rvPMQr6l1c5qpWVlUn67SlZ6enpTs/nr75CAgCNXVJMKAEADZJXAklgYKASExOVl5cnqepelyTl5OTUKFu9LSkp6aTHCw4OrvXqCgAAaJi88uj4srIy7d+/3zEVqXPnzgoODtaGDRtqlN24caMkqVu3bt44NQAAaABcCiQnexTuAw88oBMnTmjIkCGSqqb3DhkyRGvXrtXWrVsd5YqLi7Vw4UKlpqYywwYAADi4dMvm4Ycf1saNG3XxxRerZcuWKi4u1vvvv69PPvlE559/vu68805H2YyMDH388ccaMGCAJk6cqKioKC1YsEA5OTlauXIlD0UDAAAOLgWSvn376ptvvtHixYt1+PBh+fv7KzU1VY888ogmTZrkNO2nbdu2Wrdune6991499thjjrVsVq1adVo/uhYAANQ/lwLJsGHDNGzYsFMu36FDB2VmZrrcKAAA0Lh4ZVArAACAJwgkAADAcgQSAABgOQIJAACwnFee1AoAqCcF+6SS2p8JZYmwplJMw17aY+/evWrTpo2mT5+uGTNmWN0ch9O1Xe4ikACAryjYJz3TQzp+8sVJ611gmHTHVx6FkrKyMr300kt688039b///U8FBQUKDw9Xamqq+vXrpxtvvFHt27f3YqNxOiKQAICvKDlcFUauXCDFtbO6NVLeLuntW6ra5WYg2b17ty6//HJ9++236tOnjyZOnKiEhAQVFxdry5Yteumll/SPf/xDP/7442+ugQbfRyABAF8T105K7GJ1KzxWWlqqwYMH6/vvv9fbb7+tK664okaZsrIyzZkzh6d7NwIMagUAWGLhwoXasWOHpkyZUmsYkaSQkBClp6c7VpGvVlhYqKlTp6pt27YKDg5WfHy8Ro0apd27dzuVW7RokWw2m9asWaN//OMfOvPMMxUcHKx27dpp8eLFHn+G119/XRdeeKEiIyMVFham888/X2+++aZjf0VFhRITE9W1a9da6z///POy2WxasWKFY5vdbtejjz6qjh07KiQkRDExMRoyZIg2b97scXtPZwQSAIAlqn9xjx071qV6hYWF6tWrl+bPn6/Bgwfr6aef1vjx47VmzRqdf/75+uGHH2rU+dvf/qalS5fqtttu0+OPPy4/Pz/dcMMNWrdundvtv//++3XNNdcoMjJSDz30kB577DGFhYVpxIgReuaZZyRJ/v7+uu6667R582Z9/fXXNY6xZMkSxcXFafDgwZKk48eP67LLLtPMmTPVs2dPzZkzR/fee6+++eYbXXDBBfrPf/7jdntPe8YHFBYWGkmmsLDQ6qZ41f/2F5hWU98z/9tfYEl9AKeX0tJS880335jS0tLaC+RsNmZ6VNV/TwcetqdJkyYmKiqqxvYTJ06YQ4cOOb1KSkoc+++66y4TEhJitmzZ4lRv7969JjIy0owZM8ax7Z///KeRZLp06WLsdrtj+/79+01QUJC55pprfrede/bsMZLM9OnTHduysrKMJJOenl6j/LBhw0xkZKQpKioyxhizfft2I8lMmTLFqVx2draRZO68807HttmzZxtJZtWqVU5lCwsLTXJysunTp89vtqs+/e7Pq3Ht9zdXSAAAligqKlJUVFSN7d9++63i4+OdXtVXHIwxevnll3XRRRcpKSlJeXl5jld4eLjS0tL04Ycf1jjmX/7yFwUFBTneJyUlqV27dvruu+/cavvLL78sm82mMWPG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bt06SdJNN91Uo+7UqVP12GOPSZK2b98uSerSpcspn/v+++9XRkaG07a77rpL5557rh5++OFaA0nXrl01f/58x/uzzz5bI0eO1CuvvKLbbrtNkvTPf/5TmzZt0rRp0zRz5kynshMnTlSrVq0c2z744AOVlJTo1VdfVY8ePU657Q0JgQQAYLnp06dr+vTpjvd+fn4aOnSo04BWSZo2bZp69+7ttK1169aOPxcVFUmquuVzqsLDwx1/LikpUWlpqYwx6tevn5577jkVFRXVON7EiROd3vfr10+S9N133zm2rVixQv7+/po8ebJT2XHjxjl9VkmKjo6WJGVmZuqcc85RSEjIKbe/oSCQAAAsd+utt2rEiBGy2WwKDw9Xu3bt1KRJkxrlOnfurP79+5/0ONXB4ejRo4qNjT2lcx88eFD333+/MjMzdfDgwRr7CwoKagSSlBTnWU7Vt2AOHz7s2LZ7924lJCTUqBscHKyUlBTl5//f82SuueYaLVu2TI8++qjmzJmjtLQ0DRw4UNdcc43TlZSGjEGtAADLpaamqn///rrkkkuUlpZWaxg5FZ06dZIkbd68+ZTKG2M0YMAALV68WGPGjNHrr7+uVatWafXq1Y5bNZWVlTXq+fv7n/R47ggODtbq1av15ZdfKj09Xf7+/po2bZrat29f6+DahohAAgBoMP70pz9JkhYuXHhK5bdt26atW7fq3nvv1eOPP66RI0dq4MCB6t+/vyoqKjxqS0pKinJzcx23karZ7faTzhzq0aOHHnjgAa1evVrZ2dkKDw/X/fff71E7fAWBBADQYAwZMkQXXXSRXn31VadBp7+UnZ3tGMRafaXj11c2tm/f7vGViWHDhqmiokKzZs1y2v7ss8/WCCm/njkkSS1atFB8fLyOHDniUTt8BWNIAAANhs1m05tvvqkhQ4bojjvu0NKlSzV06FA1b95cBQUF+uKLL/Tuu+86rqR06NBBHTt21OOPP66SkhKdddZZ2rVrl55//nl17tz5pM8MORU33nijXnjhBT344IPas2ePevbsqc2bN2v58uU688wzdeLECUfZhx9+WB9++KEuv/xytWnTRsYY/etf/9KOHTt0zz33eNwvvoBAAgA+ZnfhqT8orC6dLu34tfj4eH3++eeOtWxmzZqlwsJCRUVF6Q9/+IOeeuopx7o4/v7+Wrlype6++24tXrxY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CxYsMJMmTTIBAQGmT58+PKnVRfPmzTOSTMuWLc3ixYvN0qVLnV4ffviho+x3331nYmNjTbNmzUxGRobj6aH+/v5m1apVFn4K31Xbc0iMoa899fzzzxtJpmPHjmbWrFkmIyPDtGzZ0gQGBpoPPvjAUW7dunUmKCjIpKSkmDlz5pg5c+aYlJQUEx4e7hQGUdPevXtNkyZNjM1mM9ddd5159tlnzSOPPGJat25tJJlnnnnGUZZ+PjVLliwxDz30kHnooYdMs2bNTExMjOP9kiVLnMq60qd5eXmmVatWJiIiwkybNs08//zzpm/fvkaSWbhwoVfa3mgDyYkTJ8w//vEP065dOxMUFGQSExPNxIkTvfK0ucZmzJgxRtJJX3369HEq/80335ihQ4ea6OhoExoaai644AIeZe6BkwUSY+hrT7311lvm/PPPN2FhYSYiIsJceuml5osvvqhRbv369aZfv34mPDzcREREmAEDBpisrCwLWux7srOzzejRo01SUpIJCAgwkZGRpnfv3uatt96qUZZ+/n3Vj3M/le9iY1zr0/3795vrrrvONG3a1AQHB5tzzz3XvPbaa15ru82YX61eBAAAUM8a5aBWAABweiGQAAAAyxFIAACA5QgkAADAcgQSAABgOQIJAACwHIEEAABYjkACAAAsRyABAACWI5AAAADLEUgAAIDlCCQAAMByBBIAAGC5/wd+Q6CVFvliMQAAAABJRU5ErkJggg=="
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 14
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-26T14:19:26.343487Z",
+ "start_time": "2025-03-26T14:19:26.019458Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "bins = np.linspace(0, 100, 30)\n",
+ "ax.hist(data[\"PL\"], bins=bins, histtype=\"step\", label=\"Parton level\")\n",
+ "ax.hist(data[\"GL\"], bins=bins, histtype=\"step\", label=\"Gen level\")\n",
+ "ax.hist(data[\"PFCands\"], bins=bins, histtype=\"step\", label=\"PFCands\")\n",
+ "ax.legend()\n",
+ "ax.set_title(\"R=2.0\")\n",
+ "fig.show()"
+ ],
+ "id": "f934c81528bf400e",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 16
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "f094b8a0a5862408"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/playground_venn.ipynb b/notebooks/playground_venn.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..2982cbdf21ff88d89ef0223e52cc82f96a28577f
--- /dev/null
+++ b/notebooks/playground_venn.ipynb
@@ -0,0 +1,204 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "id": "initial_id",
+ "metadata": {
+ "collapsed": true,
+ "ExecuteTime": {
+ "end_time": "2025-05-23T14:09:34.025041Z",
+ "start_time": "2025-05-23T14:09:34.022690Z"
+ }
+ },
+ "source": "",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-25T12:26:39.029220Z",
+ "start_time": "2025-05-25T12:26:37.525933Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "from matplotlib_venn import venn3\n",
+ "venn3(subsets = (1, 1, 1, 2, 1, 2, 2), set_labels = ('Set1', 'Set2', 'Set3'), set_colors=(\"orange\", \"purple\", \"gray\"), alpha=0.2)"
+ ],
+ "id": "47fc98546a30284e",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAGJCAYAAACJuIhgAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPR5JREFUeJzt3XuQXNV9J/DvOefe27dfMz2SQEKKHhgEiiHYMYjYwaEQXsULGIJZQQheR0AIcZWLpOzCpAA/liykXMZrkcLepHZTtpMlOIQgYTCI1wYnlRJscBlkZHZByBIIB73n1c977zln/7gzo3lPd09333Pv/X2oKaHRzPSZme5vn/6d3zmXaa01CCGEJB6PegCEEEJ6gwKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEEJSggKfEBKJ119/HVu2bMHatWvhui5WrVqFzZs348EHH2z5az388MN44IEHZrz/4MGDuOeee3DhhRdiYGAAy5YtwyWXXIIXXnihA99B/DCttY56EISQdNm1axc2bdqENWvWYOvWrVixYgUOHjyIl19+Gfv27cPbb7/d0tf71Kc+hT179uDAgQNT3v/tb38bd9xxB66++mpcdNFFCIIAf/u3f4uf/vSn+O53v4ubbrqpg9+V+SjwCSE9d8UVV+CVV17BW2+9hVKpNOXfjhw5glNPPbWlrzdX4P/85z/H8uXLsWzZson3NRoNfPjDH0a5XMbBgwfb/RZiiUo6hJCe27dvH84555wZYQ9gRtg/9NBDOP/885HNZrFkyRJcf/31U4L6kksuwVNPPYV33nkHjDEwxrBu3ToAwDnnnDMl7AEgk8ng8ssvx3vvvYfR0dGOf28ms6IeACEkfdauXYuXXnoJe/bswbnnnjvnx9133334yle+guuuuw633HILjh49igcffBAXX3wxXn31VZRKJdx9990YHh7Ge++9h23btgEACoXCvLd/6NAh5HI55HK5jn5fxtOEENJjzz33nBZCaCGE/tjHPqbvuOMO/eyzz2rP8yY+5sCBA1oIoe+7774pn/v6669ry7KmvP+K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8SQQBIFxawGccwghYFkWbNueCHhqmyTdRIFPUkFKORH8SilIKSf+f/rbYjHGIISAEGIi2CcH/PjfCek1CnxCJtFazxr+4zPvyTPw6e9jjE28EWIiCnxCCEkJel1JCCEpQYFPCCEpQYFPCCEpQYFPCCEpQYFPCCEpQYFPCCEpQYFPCCEpQYFPCCEpQYFPCCEpQYFPCCEpQYFPCCEpQYFPCCEpQYFPUuP111/Hli1bsHbtWriui1WrVmHz5s148MEHW/5aDz/8MB544IEZ76/VaviDP/gDnHvuuejv70ehUMCHPvQh/MVf/AVdopFEjk7LJKmwa9cubNq0CWvWrMHWrVuxYsUKHDx4EC+//DL27duHt99+u6Wv96lPfQp79uzBgQMHprz/xIkTuPzyy3HxxRdj3bp14Jxj165deOihh3D99dfj4Ycf7uB3RUhrKPBJKlxxxRV45ZVX8NZbb6FUKk35tyNHjuDUU09t6evNFfhzue222/Dtb38b77//PlasWNHSbRHSKVTSIamwb98+nHPOOTPCHsCMsH/ooYdw/vnnI5vNYsmSJbj++utx8ODBiX+/5JJL8NRTT+Gdd96ZuODJunXr5r398X8fGhpa5HdCSPvoCskkFdauXYuXXnoJe/bswbnnnjvnx9133334yle+guuuuw633HILjh49igcffBAXX3wxXn31VZRKJdx9990YHh7Ge++9h23btgEACoXClK/jeR5GRkZQq9Xwk5/8BN/85jexdu1anHnmmV39PgmZlyYkBZ577jkthNBCCP2xj31M33HHHfrZZ5/VnudNfMyBAwe0EELfd999Uz739ddf15ZlTXn/FVdcodeuXTvn7f3gBz/QACbeLrjgAv2zn/2s498XIa2gkg5Jhc2bN+Oll17CVVddhd27d+Mb3/gGPvnJT2LVqlV44oknAADbt2+HUgrXXXcdjh07NvG2YsUKrF+/Hi+++GLTt7dp0yY8//zzePTRR/G5z30Otm2jUql069sjpClU0iGpsXHjRmzfvh2e52H37t3YsWMHtm3bhi1btuC1117D3r17obXG+vXrZ/1827abvq3ly5dj+fLlAIAtW7bgz//8z7F582bs3buXFm1JZCjwSeo4joONGzdi48aNOOuss3DTTTfh0UcfhVIKjDHs3LkTQogZnze9Tt+KLVu24O6778YPf/hD/NEf/dFihk9I2yjwSapdcMEFAID3338fZ5xxBrTWOP3003HWWWfN+3mMsZZup1arAQCGh4fbGyghHUA1fJIKL774IvQsW06efvppAMDZZ5+Na665BkII3HPPPTM+VmuN48ePT/w9n8/PGt7Hjh2b9Xb++q//GsDJJxhCokAzfJIKt912G6rVKj796U9jw4YN8DwPu3btwiOPPIJ169bhpptuQqlUwr333os777wTBw4cwNVXX41isYj9+/djx44duPXWW3H77bcDAM4//3w88sgj+OIXv4iNGzeiUCjgyiuvxEMPPYS/+qu/wtVXX40PfOADGB0dxbPPPovnn38eV155JS699NKIfxIk1aJsESKkV3bu3KlvvvlmvWHDBl0oFLTjOPrMM8/Ut912mz58+PCUj33sscf0xz/+cZ3P53U+n9cbNmzQn//85/Wbb7458THlclnfcMMNulQqaQATLZqvvPKKvvbaa/WaNWt0JpPR+Xxef+QjH9Hf+ta3tO/7vfyWCZmBjlYghJCUoBo+IYSkBAU+IYSkBAU+IYSkBAU+IYSkBAU+IYSkBAU+IYSkBAU+IYSkBAU+IYSkBAU+IYSkBAU+IYSkBAU+IYSkBAU+IYSkBAU+IYSkxP8HUk/48216rrgAAAAASUVORK5CYII="
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 1
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-25T12:26:39.101647Z",
+ "start_time": "2025-05-25T12:26:39.088224Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "from matplotlib_venn import venn3\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "def plot_venn3_from_index_dict(ax, data_dict, set_labels=('Set 0', 'Set 1', 'Set 2'), set_colors=(\"orange\", \"purple\", \"gray\")):\n",
+ " \"\"\"\n",
+ " Generate a 3-set Venn diagram from a dictionary where keys are strings of '0', '1', and '2'\n",
+ " indicating set membership, and values are counts.\n",
+ "\n",
+ " Parameters:\n",
+ " - data_dict (dict): Dictionary with keys like '0', '01', '012', etc.\n",
+ " - set_labels (tuple): Labels for the three sets.\n",
+ " \"\"\"\n",
+ " # Mapping of set index combinations to venn3 region codes\n",
+ " index_to_region = {\n",
+ " '100': '100', # Only in Set 0\n",
+ " '010': '010', # Only in Set 1\n",
+ " '001': '001', # Only in Set 2\n",
+ " '110': '110', # In Set 0 and Set 1\n",
+ " '101': '101', # In Set 0 and Set 2\n",
+ " '011': '011', # In Set 1 and Set 2\n",
+ " '111': '111', # In all three\n",
+ " }\n",
+ "\n",
+ " # Initialize region counts\n",
+ " venn_counts = {region: 0 for region in index_to_region.values()}\n",
+ "\n",
+ " # Convert data_dict keys to binary keys for region mapping\n",
+ " for k, v in data_dict.items():\n",
+ " binary_key = ''.join(['1' if str(i) in k else '0' for i in range(3)])\n",
+ " if binary_key in index_to_region:\n",
+ " venn_counts[index_to_region[binary_key]] += v\n",
+ "\n",
+ " # Plotting\n",
+ " #plt.figure(figsize=(8, 8))\n",
+ " venn3(subsets=venn_counts, set_labels=set_labels, set_colors=set_colors, alpha=0.25, ax=ax)\n",
+ " #plt.title(\"3-Set Venn Diagram from Index Dictionary\")\n",
+ " #plt.show()\n",
+ "\n",
+ "\n",
+ "# Example dictionary to test\n",
+ "example_index_data = {\n",
+ " '': 12, '0': 35, '1': 31, '2': 20,\n",
+ " '01': 25, '02': 35, '12': 55, '012': 10\n",
+ "}"
+ ],
+ "id": "a5177b788c5d4616",
+ "outputs": [],
+ "execution_count": 2
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-25T12:26:40.126185Z",
+ "start_time": "2025-05-25T12:26:39.971883Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "fig, ax = plt.subplots()\n",
+ "plot_venn3_from_index_dict(ax, example_index_data, set_labels=('Set 0', 'Set 1', 'Set 2'))"
+ ],
+ "id": "ab518e01ea76a275",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbgAAAGHCAYAAADC5kfLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASIRJREFUeJzt3XmYXFW9L/zv2lPN1dVj0gmZyAgJwUACV5QINxBfQEEQo6+Ps8DB63Dl6oGLIhAG9QQ1cDiiR3hVJHDgIMkLCggqiHoCR85ljCiEQCCBDJ1Op7tr3LX3XvePSpp00kl3VVfVnr6f5+kn6erqrl9XV+3vXmuvQUgpJYiIiAJGcbsAIiKiRmDAERFRIDHgiIgokBhwREQUSAw4IiIKJAYcEREFEgOOiIgCiQFHRESBxIAjIqJAYsAREVEgMeCIiCiQGHBERBRIDDgiIgokBhwREQUSA46IiAKJAUdERIHEgCMiokBiwBERUSAx4IiIKJAYcEREFEgMOCIiCiQGHBERBRIDjoiIAokBR0REgcSAIyJqkBdffBHnn38+pk2bhmg0ismTJ+P000/HzTffXNPPu+uuu3DjjTeO+f6PPvooPv/5z2PBggVQVRXTp0+v6XH9SkgppdtFEBEFzfr163Hqqadi6tSp+PSnP42JEydiy5YteOqpp7Bp0ya8+uqrVf/MD3zgA9iwYQM2b948pvt/5jOfwT333IPjjjsOb775JlRVHfP3BoHmdgFEREF0/fXXo6WlBU8//TQymcywr+3cubMpNXz729/GrbfeCl3Xh8IxTNhFSUTUAJs2bcL8+fMPCjcA6OrqOui2NWvW4Pjjj0csFkNbWxs+9rGPYcuWLUNfP+WUU/Dggw/ijTfegBACQohRuxwnTZoEXdfH+6v4FltwREQNMG3aNDz55JPYsGEDFixYcNj7Xn/99fjWt76FFStW4IILLkBPTw9uvvlmLF26FM8++ywymQy++c1vor+/H1u3bsXq1asBAMlkshm/im/xGhwRUQP89re/xRlnnAEAOOGEE3DyySdj2bJlOPXUU4e1qt544w3MnDkT11xzDb7xjW8M3b5hwwYsWrQIK1euHLq92mtw+xvP9/oVuyiJiBrg9NNPx5NPPomzzz4bzz//PFatWoX3v//9mDx5Mh544IGh+61duxaO42DFihXYtWvX0MfEiRMxe/ZsPP744y7+Fv7GLkoiogZZsmQJ1q5dC9M08fzzz2PdunVYvXo1zj//fDz33HM4+uijsXHjRkgpMXv27BF/RpivoY1XIAPuxRdfxMqVK/H0009jx44daG9vx9FHH42zzz4bX/7yl6v+eXfddRd27tyJr371q2P+nvXr1+PSSy/FM888g3Q6jRUrVuDb3/42+8yJQsgwDCxZsgRLlizBnDlz8NnPfhb33nsvrrrqKjiOAyEEHn74YaiqetD38phRu8AF3P5zTy688MJhc09uuummmgNuw4YNYw645557DsuWLcNRRx2FH/zgB9i6dSu+973vYePGjXj44YerfnwiCo7FixcDALZt2wYAmDlzJqSUmDFjBubMmXPY7xVCNLy+IAlcwHlh7sk3vvENtLa24g9/+APS6TQAYPr06bjwwgvx6KOPYvny5U2pg4jc8/jjj+OUU045KJQeeughAMDcuXMBAOeddx4uv/xyrFy5EmvWrBl2fykldu/ejfb2dgBAIpFAf39/k34D/wvcKMp58+ahu7t7zBdm16xZg9WrV+Oll15CLBbD8uXLccMNN2DKlCkAKnNPnnjiiWHfM23atEOORBoYGEB7ezsuueQSrFq1auh20zTR3t6Oj370o7jttttq++WIyDcWLFiAfD6Pc889F/PmzYNpmli/fj3uueceTJkyZWj4PwB897vfxeWXX46TTjoJH/rQh5BKpfD6669j3bp1uOiii/D1r38dAHDDDTfg0ksvxSWXXIIlS5YgmUzigx/84CFreOGFF4YGtKxZswY7duzA1772NQDAsccee9jvDQQZMMuXL5epVEq++OKLo973uuuuk0II+dGPflTecsstcuXKlbKjo0NOnz5d9vX1SSmlfPTRR+W73vUu2dHRIe+44w55xx13yHXr1h3yZ/75z3+WAOQ999xz0Nfe+973yuOOO67WX43Ik2zLluViWZayJVnYU5C5XTk5uG1Q9m/pl32v98m+zX1yz5t7ZP/Wfjnw9oDM7sjKXE9O5nvzstBXkMWBoixlS9LMm9IqWdJxHLd/pbp4+OGH5ec+9zk5b948mUwmpWEYctasWfLLX/6y3LFjx0H3v+++++R73/temUgkZCKRkPPmzZNf/OIX5csvvzx0n2w2Kz/+8Y/LTCYjAchp06Ydtoaf/exnEsCIH5/+9Kfr/Bt7T+BacG7PPfnl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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 3
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-24T17:23:56.599969Z",
+ "start_time": "2025-05-24T17:23:56.404346Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "labels = [\"LGATr_GP_IRC_S_QCD\", \"AK8\", \"LGATr_GP_IRC_S_50k\"]\n",
+ "data = {'': 8286,\n",
+ " '0': 86,\n",
+ " '1': 85,\n",
+ " '2': 190,\n",
+ " '01': 112,\n",
+ " '02': 420,\n",
+ " '12': 107,\n",
+ " '012': 0}#10714}\n",
+ "plot_venn3_from_index_dict(data, labels)"
+ ],
+ "id": "2eab762fe17f32ad",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqUAAAKDCAYAAAAjLXMZAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAkfxJREFUeJzs3XecFPX9P/DX1O17nYMDBASlo1hjAURRo6jRIAKKFI2aaCyJxhpji8QWY2/RWEF/wRI1VvyqiUZNiKhYo1SVdndc374zn98fe7ey3HFc2duZnX0987jgzbb33u3NvvZTJSGEABERERGRhWSrCyAiIiIiYiglIiIiIssxlBIRERGR5RhKiYiIiMhyDKVEREREZDmGUiIiIiKyHEMpEREREVmOoZSIiIiILMdQSkRERESWYyglIlsYOnQoFixYYHUZltmyZQtOPPFElJWVQZIk3HbbbVaXlHP58hp4++23IUkS3n777azdpyRJuPrqq7N2f0T5iKGUHOnzzz/HzJkzseuuu8Lr9aK8vByTJ0/Giy++2OX7iMfjuP322zFx4kQEg0EUFxdj7NixOPPMM/HVV191u6aNGzfi6quvxscff7zT6x533HHwer1obm7e4XVOOeUU6LqOrVu3druWvnbIIYdAkiRIkgRZlhEMBjFy5EiceuqpWLZsmdXl2dKvfvUrvPbaa7jsssvw+OOP48c//rHVJe3QunXrIEkSbrnlFqtL6bW259L2pWkaysvLceCBB+Lyyy/Ht99+m7XHevnllxk8iTqhWl0AUV9Yv349mpubMX/+fFRVVSEcDuOZZ57Bcccdh/vvvx9nnnnmTu9jxowZeOWVVzBnzhycccYZSCQS+Oqrr/D3v/8dBx54IEaNGtWtmjZu3IhrrrkGQ4cOxZ577tnpdU855RS8+OKLeO655zBv3rx2l4fDYTz//PP48Y9/jLKysm7VkSuDBg3CH/7wBwBAKBTCqlWr8Oyzz+KJJ57ASSedhCeeeAKapqWv/7///Q+yXLifk99880385Cc/wUUXXWR1KQVpzpw5OProo2GaJurr67F8+XLcdtttuP322/HQQw9h9uzZ6etOnjwZkUgEuq536zFefvll3H333R0G00gkAlXlWzIVNv4FkCMdffTROProozOO/fKXv8Tee++NW2+9daehdPny5fj73/+O66+/HpdffnnGZXfddRcaGhqyXXKG4447DoFAAEuWLOkwlD7//PMIhUI45ZRT+rSO3igqKsLcuXMzjt1www0477zzcM8992Do0KG48cYb05e5XK5clwggFfC9Xq8lj72t6upqFBcX7/R6oVAIPp+v7wsqMHvttVe71+v69etxxBFHYP78+Rg9ejT22GMPAIAsy3C73Vl9/GzfX7bZ5e+EnK1wmyWo4CiKgsGDB3cpUK5evRoAcNBBB3V4P9u3Tm7YsAGnnXYaKisr4XK5MHbsWPzlL39JX/72229j3333BQAsXLgw3VX4yCOPdPj4Ho8HP/3pT/F///d/qK6ubnf5kiVLEAgEcNxxxwEAGhoacMEFF2Dw4MFwuVwYMWIEbrzxRpimmb7Ntl2uDzzwAIYPHw6Xy4V9990Xy5cvz7j/BQsWwO/3Y8OGDTj++OPh9/tRUVGBiy66CIZh7PTntyOKouCOO+7AmDFjcNddd6GxsTF92fbjCevq6nDRRRdh/Pjx8Pv9CAaDOOqoo/DJJ5+0u9/169fjuOOOg8/nQ79+/dJd4duP+zvkkEMwbtw4fPjhh5g8eTK8Xm/6Q8fzzz+P6dOno6qqCi6XC8OHD8d1113X7vm23cfKlSsxZcoUeL1ejBgxAk8//TQA4B//+Af2339/eDwejBw5Em+88UanP5NHHnkEkiRBCIG77747/drY9rJ//OMfOPvss9GvXz8MGjQofdt77rkHY8eOhcvlQlVVFc4555x2r+9s17uz5/Gvf/0Lv/71r1FRUQGfz4cTTjgBNTU1GdcVQuD3v/89Bg0aBK/Xi6lTp+Lzzz/v8H539toWQmDq1KmoqKjI+FuJx+MYP348hg8fjlAo1KPnNGTIEDzyyCOIx+O46aab0sd3NKb03//+N44++miUlJTA5/NhwoQJuP322wGk/qbuvvtuAMgYLtCmozGlH330EY466igEg0H4/X4cdthh+OCDDzKu052fe3df49v/ncyfPx/l5eVIJBLtflZHHHEERo4c2bUfLNGOCCIHa2lpETU1NWLVqlXi1ltvFYqiiJNPPnmnt3vvvfcEAHHGGWeIRCLR6XU3b94sBg0aJAYPHiyuvfZace+994rjjjtOABB/+tOf0te59tprBQBx5plniscff1w8/vjjYvXq1Tu839dff10AEHfeeWfG8a1btwpN08S8efOEEEKEQiExYcIEUVZWJi6//HJx3333iXnz5glJksT555+fvt3atWsFADFx4kQxYsQIceONN4qbbrpJlJeXi0GDBol4PJ6+7vz584Xb7RZjx44Vp512mrj33nvFjBkzBABxzz337PTnN2XKFDF27NgdXn7dddcJAOLvf/97+tiQIUPE/Pnz098vX75cDB8+XFx66aXi/vvvF9dee60YOHCgKCoqEhs2bEhfr6WlRey6667C4/GISy+9VNx2221iv/32E3vssYcAIN56662Muvr37y8qKirEueeeK+6//37xt7/9TQghxPHHHy9OOukkcfPNN4t7771XzJw5UwAQF110UbvnVlVVJQYPHix+85vfiDvvvFOMGTNGKIoinnrqKdG/f39x9dVXi9tuuy1db1NT0w5/FqtXrxaPP/64ACAOP/zw9GtDCCEefvhhAUCMGTNGTJkyRdx5553ihhtuEEIIcdVVVwkAYtq0aeLOO+8Uv/zlL4WiKGLffffN+F1mu14hfngt3XzzzeljbbVOnDhRHHrooeLOO+8UF154oVAURZx00kkZt//tb38rAIijjz5a3HXXXeK0004TVVVVory8POM10NXX9po1a4Tf7xcnnHBC+till14qJEkS//jHP7r9XLY3fPhwUVFRkf7+rbfeavfaev3114Wu62LIkCHiqquuEvfee68477zzxLRp04QQqXPK4YcfLgCkf8dtv2chhAAgrrrqqvT3n332mfD5fGLAgAHiuuuuEzfccIMYNmyYcLlc4oMPPujRz707r/GO/k6WLVsmAIgXX3wx4/qbNm0SiqKIa6+9ttOfNdHOMJSSo5111lkCgAAgZFkWJ554oqirq9vp7UzTFFOmTBEARGVlpZgzZ464++67xfr169td9/TTTxcDBgwQtbW1Gcdnz54tioqKRDgcFkKkQhYA8fDDD3ep9mQyKQYMGCAOOOCAjOP33XefACBee+01IUQq4Pl8PvH1119nXO/SSy8ViqKIb7/9Vgjxw5tvWVlZxs/g+eefb/dGM3/+fAGg3ZvMxIkTxd57773T2ncWSp977jkBQNx+++3pY9uH0mg0KgzDyLjd2rVrhcvlyqjrj3/8owCQDpdCCBGJRMSoUaM6DKUAxH333deuprbf07bOOuss4fV6RTQabXcfS5YsSR/76quv0q+xbQPDa6+91uXfOQBxzjnnZBxrCxwHH3ywSCaT6ePV1dVC13VxxBFHZPyM7rrrLgFA/OUvf+nTejsLpdOmTROmaaaP/+pXvxKKooiGhoaM2qdPn55xvcsvv1wAyHgNdPW1LYQQ999/vwAgnnjiCfHBBx8IRVHEBRdc0Onz2NFz2d5PfvITAUA0NjYKIdqH0mQyKYYNGyaGDBki6uvrM2677XM855xzxI7agrYPpccff7zQdT3jg+vGjRtFIBAQkydPTh/r6s9diO6/xrf/OzEMQwwaNEjMmjUr4/itt94qJEkSa9as6fC5EXUVu+/J0S644AIsW7YMjz76KI466igYhoF4PL7T20mShNdeew2///3vUVJSgieffBLnnHMOhgwZglmzZqW7SIUQeOaZZ3DsscdCCIHa2tr015FHHonGxkasWLGiR7UrioLZs2fj/fffx7p169LHlyxZgsrKShx22GEAgKVLl2LSpEkoKSnJePxp06bBMAz885//zLjfWbNmoaSkJP39pEmTAABr1qxpV8PPf/7zjO8nTZrU4fW6y+/3A0Cnqwu4XK70xCfDMLB161b4/X6MHDky42f66quvYuDAgemhDEBqfN4ZZ5yxw/tduHBhu+Mejyf9383NzaitrcWkSZMQDofbrbbg9/szJr6MHDkSxcXFGD16NPbff//08bb/7u3P7IwzzoCiKOnv33jjDcTjcVxwwQUZk8POOOMMBINBvPTSS5bVe+aZZ2Z0S0+aNAmGYWD9+vUZtZ977rkZ17vgggva3Vd3XttnnnkmjjzySJx77rk49dRTMXz4cCxatKjHz2NbO3u9fvTRR1i7di0uuOCCduOCt32OXWUYBl5//XUcf/zx2HXXXdPHBwwYgJNPPhnvvvsumpqaMm6zs5870L3XeEd/J7Is45RTTsELL7yQ8bNYvHgxDjzwQAwbNqzbz5VoWwyl5GijRo3CtGnTMG/ePPz9739HS0tLOkACQGNjIzZv3pz+qqurS9/W5XLhiiuuwJdffomNGzfiySefxI9+9CP89a9/xS9/+UsAQE1NDRoaGvDAAw+goqIi46vthN7RmNCuapvItGTJEgDA999/j3feeQezZ89Oh5RvvvkGr776arvHnzZtWoePv8suu2R83xZQ6+vrM4673W5UVFS0u+721+uJlpYWAEAgENjhdUzTxJ/+9CfstttucLlcKC8vR0VFBVauXJkxFnX9+vUYPnx4uzf/ESNGdHi/AwcO7HDW9Oeff44TTjgBRUVFCAaDqKioSE982fbxgNTKAts/XlFREQYPHtzuGND+Z9td27/ZtwWN7cfw6bqOXXfdNSOI5Lrenb2+2mrbbbfdMq5XUVGR8WEJ6P5r+6GHHkI4HMY333yDRx55JCOE9cbOXq9tY9DHjRuXlcerqalBOBzucIzm6NGjYZomvvvuu4zjXfm77s5rfEd/J/PmzUMkEsFzzz0HILVqxocffohTTz21B8+UKBNn31NBOfHEE3HWWWfh66+/xsiRI3H++efj0UcfTV8+ZcqUDhfEHjBgAGbPno0ZM2Zg7Nix+Otf/4pHHnkkPdli7ty5mD9/foePOWHChB7Xu/fee2PUqFF48skncfnll+PJJ5+EECJj1r1pmjj88MNx8cUXd3gfu+++e8b327a4bastqO/setnw2WefAdhxcASARYsW4corr8Rpp52G6667DqWlpZBlGRdccEHGBK7u6iioNDQ0YMqUKQgGg7j22msxfPhwuN1urFixApdcckm7x9vRz6arP9ts1Nwduaw3m/fZ3df222+/jVgsBgD49NNPccABB3T7MTvy2WefoV+/fggGg1m5v76ws597d1/jO3rNjRkzBnvvvTeeeOIJzJs3D0888QR0XcdJJ52U3SdEBYmhlApKJBIB8EOrwMUXX5yxDMz2LTXb0zQNEyZMwDfffIPa2lpUVFQgEAjAMIx0682O9KQbD0i1ll555ZVYuXIllixZgt122y09kx8Ahg8fjpaWlp0+vl0YhoElS5bA6/Xi4IMP3uH1nn76aUydOhUPPfRQxvGGhgaUl5envx8yZAi++OILCCEyfsarVq3qck1vv/02tm7dimeffRaTJ09OH1+7dm2X7yOXhgwZAiDVSrVt9248HsfatWtt/Vpoq/2bb77JqL2mpqZdC213XtubNm3CueeeiyOOOAK6ruOiiy7CkUcemX68nnr//fexevXqdstFbV8nkAqvndXa1XNARUUFvF4v/ve//7W77KuvvoIsy+1auXcmm6/xefPm4de//jU2bdqEJUuWYPr06Ts9dxJ1BbvvyZE66jJPJBJ47LHH4PF4MGbMGACpT/3Tpk1Lf+29994AUm+YHe3k0tDQgPfffx8lJSWoqKiAoiiYMWMGnnnmmXTr37a2XZKlbW3J7q5x2tYq+rvf/Q4ff/xxu7VJTzrpJLz//vt47bXXOqw3mUx26/H6kmEYOO+88/Dll1/ivPPO67TlSVGUdq1rS5cuxYYNGzKOHXnkkdiwYQNeeOGF9LFoNIo///nPXa6rrZVp28eLx+O45557unwfuTRt2jTouo477rgjo+aHHnoIjY2NmD59uoXVdW7atGnQNA133nlnRu0dbavandf2GWecAdM08dBDD+GBBx6Aqqo4/fTTe9Xqu379eixYsAC6ruM3v/nNDq+31157YdiwYbjtttva/X1v+/hdPQcoioIjjjgCzz//fMZ48i1btmDJkiU4+OCDu91qm83X+Jw5cyBJEs4//3ysWbOm08BO1B1sKSVHOuuss9DU1ITJkydj4MCB2Lx5MxYvXoyvvvoKf/zjH9MTF3bkk08+wcknn4yjjjoKkyZNQmlpKTZs2IBHH30UGzduxG233ZY+yd9www146623sP/+++OMM87AmDFjUFdXhxUrVuCNN95Ij1MdPnw4iouLcd999yEQCMDn82H//fff6eSAYcOG4cADD8Tzzz8PAO1C6W9+8xu88MILOOaYY7BgwQLsvffeCIVC+PTTT/H0009j3bp1GS2LudLY2IgnnngCQGrh7bYdnVavXo3Zs2fjuuuu6/T2xxxzDK699losXLgQBx54ID799FMsXrw4o3UNSP2u77rrLsyZMwfnn38+BgwYgMWLF6cXI+9K69SBBx6IkpISzJ8/H+eddx4kScLjjz/e6273vlJRUYHLLrsM11xzDX784x/juOOOw//+9z/cc8892HfffW0dEtrWu/3DH/6AY445BkcffTQ++ugjvPLKK+1ep119bT/88MN46aWX8Mgjj6TXcb3zzjsxd+5c3HvvvTj77LN3WteKFSvwxBNPwDRNNDQ0YPny5XjmmWfSr4XOhuHIsox7770Xxx57LPbcc08sXLgQAwYMwFdffYXPP/88HarbPvSed955OPLII9OTGTvy+9//HsuWLcPBBx+Ms88+G6qq4v7770csFstYM7Wrsvkar6iowI9//GMsXboUxcXFtv4QRHkmx7P9iXLiySefFNOmTROVlZVCVVVRUlIipk2bJp5//vku3X7Lli3ihhtuEFOmTBEDBgxI38ehhx4qnn766Q6vf84554jBgwcLTdNE//79xWGHHSYeeOCBjOs9//zzYsyYMUJV1W4tD3X33XcLAGK//fbr8PLm5mZx2WWXiREjRghd10V5ebk48MADxS233JJes7KzpW+w3XI08+fPFz6fr9312tbG3Jm2JWXavvx+v9htt93E3Llzxeuvv97hbTpaEurCCy8UAwYMEB6PRxx00EHi/fffF1OmTBFTpkzJuO2aNWvE9OnThcfjERUVFeLCCy8UzzzzjACQseRRZ0tV/etf/xI/+tGPhMfjEVVVVeLiiy9OL5G0/bJSHd3HkCFDxPTp09sdRwdLPXWko+u1LfezfPnyDm9z1113iVGjRglN00RlZaX4xS9+0W5Jor6ot7MlobavtaM1PQ3DENdcc036d3vIIYeIzz77rN1rQIidv7a/++47UVRUJI499th2dZ5wwgnC5/N1ulRR23Np+1JVVZSWlor9999fXHbZZR0uA9fRcxJCiHfffVccfvjhIhAICJ/PJyZMmJCxznAymRTnnnuuqKioEJIkZfwtbf83KIQQK1asEEceeaTw+/3C6/WKqVOnivfeey/jOt35uff2Nb6tv/71r+l1l4myRRLCpk0BRES9cNttt+FXv/oVvv/+ewwcONDqcogc5fnnn8fxxx+Pf/7zn+ll5Yh6i6GUiPJeJBLJmC0cjUYxceJEGIaBr7/+2sLKiJzpmGOOwZdffolVq1b1eBIn0fY4ppSI8t5Pf/pT7LLLLthzzz3TY1m/+uorLF682OrSiBzlqaeewsqVK/HSSy/h9ttvZyClrGJLKRHlvdtuuw0PPvgg1q1bB8MwMGbMGFx88cWYNWuW1aUROYokSfD7/Zg1axbuu+8+qCrbtih7GEqJiIiIyHJcp5SIiIiILMdQSkRERESWYyglIiIiIssxlBIRERGR5RhKiYiIiMhyDKVEREREZDmGUiIiIiKyHEMpEREREVmOoZSIiIiILMdQSkRERESWYyglIiIiIssxlBIRERGR5RhKiYiIiMhyDKVEREREZDmGUiIiIiKyHEMpEREREVmOoZSIiIiILMdQSkRERESWYyglIiIiIssxlBIRERGR5RhKiYiIiMhyDKVEREREZDmGUiIiIiKyHEMpEREREVmOoZSIiIiILMdQSkRERESWYyglIiIiIssxlBIRERGR5RhKiYiIiMhyDKVEREREZDmGUiIiIiKyHEMpEREREVmOoZSIiIiILMdQSkRERESW63YofeSRRyBJEv773/92er2mpiZcf/312GeffVBUVASXy4UhQ4Zg1qxZeOmll3Z4u5dffhmSJKGqqgqmaaaPH3LIIZAkaadfV199dXefUo/rfvvttzMeW9M07Lrrrpg3bx7WrFnTrcc95JBDMG7cuIxjQ4cOzbh/n8+H/fbbD4899tgOa7/mmmuwxx57wO/3w+PxYNy4cbjkkkuwcePGbtWzbt06LFy4EMOHD4fb7Ub//v0xefJkXHXVVd26nzaff/455s6di4EDB8LlcqGqqgpz587FF198scPbrF69GmeddRZ23XVXuN1uBINBHHTQQbj99tsRiUTS19v25yTLMoqLizF+/HiceeaZ+Pe//92jeomIiCi3JCGE6M4NHnnkESxcuBDLly/HPvvs0+F1Vq1ahSOPPBLr16/HCSecgEmTJsHv9+O7777Dyy+/jP/85z947LHHcOqpp7a77SmnnIL33nsP69atw7JlyzBt2jQAwLJly7Bly5b09ZYvX4477rgDl19+OUaPHp0+PmHCBEyYMKE7T6nHdb/99tuYOnUqzjvvPOy7775IJBJYsWIFHnjgAfj9fnz66aeoqqrq0mMfcsghqK2txWeffZY+NnToUJSUlODCCy8EAGzatAkPPvggvv76azzwwAM444wz0tdds2YNpk2bhm+//RYzZ87EwQcfDF3XsXLlSjz55JMoLS3F119/3eWfw7777guPx4PTTjsNQ4cOxaZNm7BixQq88soriEajXf2RAgCeffZZzJkzB6WlpTj99NMxbNgwrFu3Dg899BDq6urw//7f/8NPfvKTjNu89NJLmDlzJlwuF+bNm4dx48YhHo/j3XffxTPPPIMFCxbggQce6PDn1NzcjC+//BJLly7F5s2b8atf/Qq33nprt2omIiKiHBPd9PDDDwsAYvny5R1enkgkxLhx44TP5xPvvvtuh9d57bXXxMsvv9zueEtLi/D5fOKOO+4QEydOFAsWLNhhHUuXLhUAxFtvvdVpvS0tLZ1e3pu633rrLQFALF26NON6d9xxhwAgFi1a1KXHFkKIKVOmiLFjx2YcGzJkiJg+fXrGserqauH3+8Xo0aMzat9jjz2E1+sV77zzTrv7bmxsFJdffnmXazn77LOFqqpi3bp17S7bsmVLl+9HCCFWrVolvF6vGDVqlKiurs64rKamRowaNUr4/X6xZs2a9PE1a9YIv98vRo0aJTZu3NjuPr/55htx2223pb/v6OckhBDhcFgcf/zxAoC45557ulU3ERER5VbWx5QuXboUn332Ga688kocdNBBHV7niCOOwFFHHdXu+HPPPYdIJIKZM2di9uzZePbZZ7vVKnf11VdDkiR88cUXOPnkk1FSUoKDDz64z+ve3qGHHgoAWLt2bZdr76qKigqMGjUKq1evTh975pln8Mknn+CKK67o8PkGg0Fcf/31XX6M1atXY9CgQRgyZEi7y/r169etem+++WaEw2E88MADqKioyLisvLwc999/P1paWnDzzTenj990001oaWnBQw89hAEDBrS7zxEjRuD888/f6WN7PB48/vjjKC0txfXXXw/RvU4BIiIiyqGsh9IXX3wRADB37txu33bx4sWYOnUq+vfvj9mzZ6O5uTl9f90xc+ZMhMNhLFq0KKOLuzO9qXt7bYGxrKys1/e1vWQyie+//x4lJSXpYy+88AIAdDgcoieGDBmC7777Dm+++Wav7+vFF1/E0KFDMWnSpA4vnzx5MoYOHZrxe37xxRex66674sADD+z14/v9fpxwwgnYsGFDp+NXiYiIyFpZD6VfffUViouLMXDgwIzjoVAItbW16a+mpqaMy6urq/HGG29g9uzZAIBddtkFBxxwABYvXtztGvbYYw/87W9/wy9+8QucffbZfVo3kBrDWFtbi02bNuHll1/G+eefD0mSMGPGjG7Xvr1EIpF+7M8++wynnXYaNm/ejBNPPDF9nS+//BJFRUUYPHhwrx8PAM477zzouo7DDjsMEydOxAUXXIDnn38e4XC4W/fT2NiIjRs3Yo899uj0ehMmTMD333+P5uZmNDU1YcOGDRg/fnxvnkKGtglk27YuExERkb1kPZQ2NTXB7/e3O37FFVegoqIi/XXyySdnXP7UU09BluWMIDdnzhy88sorqK+v71YNP//5z3NWNwCcdtppqKioQFVVFaZPn45QKIRHH310hxPBuuP1119PP/b48ePx+OOPY+HChRnd3U1NTQgEAr1+rDZjx47Fxx9/jLlz52LdunW4/fbbcfzxx6OyshJ//vOfu3w/zc3NALDT2toubwulXblNd7T9XtvqISIiIvvJeigNBAJoaWlpd/zss8/GsmXLsGzZMlRWVra7/IknnsB+++2HrVu3YtWqVVi1ahUmTpyIeDyOpUuXdquGYcOG5axuAPjd736H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lmMoJSIiIiLLMZQSERERkeUYSomIiIjIcgylRERERGQ5hlIiIiIishxDKRERERFZjqGUiIiIiCzHUEpERERElmMoJSIiIiLLMZQSERERkeUYSomIiIjIcgylREQOc/XVV0OSJNTW1lpdChFRlzGUEmXZI488AkmS8N///rfT6zU1NeH666/HPvvsg6KiIrhcLgwZMgSzZs3CSy+9tMPbvfzyy5AkCVVVVTBNM338kEMOgSRJO/26+uqre/X8ulP322+/nfHYmqZh1113xbx587BmzZpuPe4hhxyCcePGZRwbOnRoxv37fD7st99+eOyxx3ZY+zXXXIM99tgDfr8fHo8H48aNwyWXXIKNGzd2q55169Zh4cKFGD58ONxuN/r374/Jkyfjqquu6tb9bP8z2vbrgw8+aHf99957DwcffDC8Xi/69++P8847Dy0tLd16TCIiO1KtLoCoEK1atQpHHnkk1q9fjxNOOAHz5s2D3+/Hd999h5dffhnHHHMMHnvsMZx66qntbrt48WIMHToU69atw5tvvolp06YBAK644gr87Gc/S19v+fLluOOOO3D55Zdj9OjR6eMTJkzIed3nnXce9t13XyQSCaxYsQIPPPAAXnrpJXz66aeoqqrqcT0AsOeee+LCCy8EAGzatAkPPvgg5s+fj1gshjPOOCN9vTVr1mDatGn49ttvMXPmTJx55pnQdR0rV67EQw89hOeeew5ff/11l38O++67LzweD0477TQMHToUmzZtwooVK3DjjTfimmuu6fbzaPsZbWvEiBEZ33/88cc47LDDMHr0aNx66634/vvvccstt+Cbb77BK6+80u3HJCKyFUFEWfXwww8LAGL58uUdXp5IJMS4ceOEz+cT7777bofXee2118TLL7/c7nhLS4vw+XzijjvuEBMnThQLFizYYR1Lly4VAMRbb73Vab0tLS2dXt6but966y0BQCxdujTjenfccYcAIBYtWtSlxxZCiClTpoixY8dmHBsyZIiYPn16xrHq6mrh9/vF6NGjM2rfY489hNfrFe+88067+25sbBSXX355l2s5++yzhaqqYt26de0u27JlS5fvR4gd/4w6ctRRR4kBAwaIxsbG9LE///nPAoB47bXX0seuuuoqAUDU1NR0qxYiIiux+54ox5YuXYrPPvsMV155JQ466KAOr3PEEUfgqKOOanf8ueeeQyQSwcyZMzF79mw8++yziEajXX7strGGX3zxBU4++WSUlJTg4IMP7vO6t3fooYcCANauXdvl2ruqoqICo0aNwurVq9PHnnnmGXzyySe44oorOny+wWAQ119/fZcfY/Xq1Rg0aBCGDBnS7rJ+/fr1rHAAzc3NSCaTHV7W1NSEZcuWYe7cuQgGg+njba3Vf/3rXzu97/Xr12PEiBEYN24ctmzZ0uMaiYj6CkMpUY69+OKLAIC5c+d2+7aLFy/G1KlT0b9/f8yePRvNzc3p++uOmTNnIhwOY9GiRRld3J3pTd3bawuMZWVlvb6v7SWTSXz//fcoKSlJH3vhhRcAoMPhED0xZMgQfPfdd3jzzTezcn8AsHDhQgSDQbjdbkydOrXdmORPP/0UyWQS++yzT8ZxXdex55574qOPPtrhfa9evRqTJ09GIBDA22+/jcrKyqzVTUSULRxTSpRjX331FYqLizFw4MCM46FQCJFIJP29rusZLWLV1dV44403cO+99wIAdtllFxxwwAFYvHgxZs6c2a0a9thjDyxZsiQndQOpFsDa2lokEgl89NFHOP/88yFJEmbMmNGtGjqSSCTSs8w3b96Mm266CZs3b8Y555yTvs6XX36JoqIiDB48uNePB6TGfz7++OM47LDDsOeee2LKlCmYOnUqDj/8cHi93m7dl67rmDFjBo4++miUl5fjiy++wC233IJJkybhvffew8SJEwGkxssCwIABA9rdx4ABA/DOO+90eP9fffUVDjvsMAwcOBCvvfZaRlgnIrITtpQS5VhTUxP8fn+741dccQUqKirSXyeffHLG5U899RRkWc4IcnPmzMErr7yC+vr6btXw85//PGd1A8Bpp52GiooKVFVVYfr06QiFQnj00Ufbtfr1xOuvv55+7PHjx+Pxxx/HwoULcfPNN2fUHggEev1YbcaOHYuPP/4Yc+fOxbp163D77bfj+OOPR2VlJf785z93674OPPBAPP300zjttNNw3HHH4dJLL8UHH3wASZJw2WWXpa/XFvxdLle7+3C73RkfDNp89tlnmDJlCoYOHYo33niDgZSIbI2hlCjHAoFAh0v4nH322Vi2bBmWLVvWYffqE0888f/bu7uQpsIwDuB/dWdMM5cjgwijoJbUBplktLQliBYahY15E2QEC1phBCERSB8oRRZ460VWevpAKDAQw8hg2AdhqWA3rkWa7cJsldrHIt4uZAfX5trKeST/PzgXnj287zMG8nDe97wPcnNzMTo6CrfbDbfbjezsbPj9frS0tMSUw8qVK2ctbwCorq5GR0cHHjx4gL6+Prx7927GltI3bdqEjo4OtLe3o66uDosWLYLP54NWq1Vi0tLSMDY2NiPzBRiNRjQ1NeH9+/fo6+tDbW0tNBoNHA4H7t+//09jr1q1Crt27UJnZyd+/vwJAEhOTgYAfP/+PST+27dvyudT7dy5EwsXLsS9e/dCnl4TEc01XL4nmmVZWVno6enB8PBw0FK40WiE0WgEMPnka6qBgQE8e/YMALB69eqQMWVZhsPhiDqHcAVMPPIOMJvNytFVM23x4sXK2MXFxcjKykJpaSnq6+tx7NgxJfcXL15gaGhoxpbwA5KSkmA2m2E2m7F582YUFBRAluV//r6ZmZnw+/2YmJhAWlqasmwfWMafyuv1hj1aa8+ePbh69SpkWcbBgwf/KR8ionjjk1KiWVZaWgpgspCMlizLkCQJN2/eREtLS9BVWVkJl8uFwcHBeKUM4O/yVkNJSQmsVitqa2sxMTEBYPKJITD5tDmeAtsRwhWOsfJ4PNDpdMqWCZPJBI1GE/IClN/vR09PD9avXx8yxoULF3DgwAEcOnQo5j3ERESzjUUp0Syz2+1Yu3Ytzp49G7ZjDwAIIYL+lmUZ+fn5KC8vh81mC7qOHz8OALhx48acy1stVVVVGB0dVfZ32mw2mM1m1NTU4PHjxyHxY2NjOHnyZNTju1wu/PjxI+R+W1sbAGDNmjVRjzUyMhJyr7e3F62trSgqKkJi4uS/ab1ej8LCQjQ3NwdtRWhqasL4+HjYl90SEhLQ0NAAm82Gffv2KacQEBHNRVy+J4qTy5cvo729PeR+ZWUl7ty5g+LiYuTl5aGsrAz5+flYsGABhoeH0draisHBQZSUlAAAnj59CrfbjcOHD4edZ9myZdiwYQNkWUZVVVXcvo8kSTHlraYdO3bAZDLh0qVLcDqdkCQJt2/fRmFhIbZu3Qq73Y4tW7ZAkiT09/fj+vXrSE9Pj/qs0vPnz6O7uxtlZWVKh6znz5/j2rVrMBgMOHr0aNS5lpeXIzk5GRaLBUuWLMHLly/R0NCAlJQUnDt3Lii2pqYGFosFVqsVDocDb9++xcWLF1FUVITt27eHHT8xMRHNzc3YvXs37HY72tralHNiiYjmFLVP7yf63wQ6Ok13DQ0NCSGE+Pjxozhz5ozIzs4WqampQqvViszMTGGz2cTdu3eV8Y4cOSIAiFevXk0756lTpwQA0dvbq9wL19FpJjr9RJu3ELF1K/qTaDs6BVy5ckUAEI2Njco9n88nqqurhdlsFikpKUKn0wmTySROnDghvF5v1Ll0dXUJp9MpTCaT0Ov1QpIksXz5clFRURHxdwqnvr5e5ObmCoPBIDQajVi6dKnYu3evGBgYCBvvcrmExWIROp1OZGRkCKfTKT5//hwUE+53/vLli7BarSI1NVU8efIkphyJiGZDghBzZL2NiIiIiOYt7iklIiIiItVxTynRPOf3+/Hhw4eIMXq9/q+OkYrGyMiIchZnOFqtFgaDIS5z/+7r16/49OlTxBiDwRB0Bup0xsfHw57rOlVGRgaSkpJiypGI6H/FopRonnv06BEKCgoixjQ2NqKioiIu82/cuBFv3ryZ9nOr1YqHDx/GZe7f3bp1C/v3748Y09nZiW3btv1xrLq6Opw+fTpizOvXr7FixYoYMiQi+n9xTynRPOfz+dDd3R0xZt26dWF7rs+Erq6usC0yA9LT05GTkxOXuX/n9XrR398fMSYnJyeqdp0ejwcejydiTF5e3rQNB4iI5hsWpURERESkOr7oRERERESqY1FKRERERKpjUUpEREREqmNRSkRERESqY1FKRERERKpjUUpEREREqmNRSkRERESqY1FKRERERKpjUUpEREREqmNRSkRERESqY1FKRERERKpjUUpEREREqvsFP1okbdX5YuQAAAAASUVORK5CYII="
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 5
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "294a35a41aaf998e"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/plotting_playground.ipynb b/notebooks/plotting_playground.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..f38e50cefd60158cf2177969a29cc12bae0812eb
--- /dev/null
+++ b/notebooks/plotting_playground.ipynb
@@ -0,0 +1,267 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "initial_id",
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-19T14:18:52.936653Z",
+ "start_time": "2025-05-19T14:18:52.005816Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "\n",
+ "# Data\n",
+ "labels = ['text1', 'text2', 'text3', 'text4', 'text5']\n",
+ "values = np.random.rand(5)\n",
+ "\n",
+ "# Colors: one per label\n",
+ "colors = plt.cm.tab10(np.arange(len(labels)))\n",
+ "\n",
+ "# Plot setup\n",
+ "fig, ax = plt.subplots(figsize=(2, 2)) # Square plot\n",
+ "\n",
+ "# Create bars\n",
+ "bars = ax.barh(range(len(labels)), values, color=colors)\n",
+ "\n",
+ "# Add labels on the bars\n",
+ "for i, (bar, label) in enumerate(zip(bars, labels)):\n",
+ " ax.text(bar.get_width(), bar.get_y() + bar.get_height()/2, label,\n",
+ " va='center', ha='left', fontsize=8)\n",
+ "\n",
+ "# Clean up everything around\n",
+ "ax.set_yticks([])\n",
+ "ax.set_xticks([])\n",
+ "ax.spines['top'].set_visible(False)\n",
+ "ax.spines['right'].set_visible(False)\n",
+ "ax.spines['left'].set_visible(False)\n",
+ "ax.spines['bottom'].set_visible(False)\n",
+ "\n",
+ "ax.set_xlim(0, max(values)*1.1) # Add padding on the right\n",
+ "\n",
+ "plt.tight_layout()\n",
+ "plt.show()\n"
+ ],
+ "id": "6c89db30c7a70d4f",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 1
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-19T14:20:27.149882Z",
+ "start_time": "2025-05-19T14:20:27.082592Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "\n",
+ "# Data\n",
+ "labels = ['text1', 'text2', 'text3', 'text4', 'text5']\n",
+ "values = np.random.rand(5)\n",
+ "\n",
+ "# Colors: one per label\n",
+ "colors = plt.cm.tab10(np.arange(len(labels)))\n",
+ "\n",
+ "# Plot setup\n",
+ "fig, ax = plt.subplots(figsize=(2, 2)) # Square plot\n",
+ "\n",
+ "# Create bars\n",
+ "bars = ax.barh(range(len(labels)), values, color=colors)\n",
+ "\n",
+ "# Add labels inside the bars, left-aligned\n",
+ "for i, (bar, label) in enumerate(zip(bars, labels)):\n",
+ " ax.text(0.05, bar.get_y() + bar.get_height()/2, label,\n",
+ " va='center', ha='left', fontsize=8, color='white', clip_on=True)\n",
+ "\n",
+ "# Clean up everything around\n",
+ "ax.set_yticks([])\n",
+ "ax.set_xticks([])\n",
+ "for spine in ax.spines.values():\n",
+ " spine.set_visible(False)\n",
+ "\n",
+ "ax.set_xlim(0, max(values)*1.1) # Padding to the right\n",
+ "\n",
+ "plt.tight_layout()\n",
+ "plt.show()\n"
+ ],
+ "id": "d7d0a70cdca8ea0e",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 2
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-19T14:46:31.714058Z",
+ "start_time": "2025-05-19T14:46:31.610196Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "\n",
+ "# Data\n",
+ "labels = ['LGATr', 'LGATr_GP_IRC_SN', 'text3', 'text4', 'text5']\n",
+ "values = [0.7, 0.71, 0.725, 0.728, 0.711]\n",
+ "\n",
+ "# Colors: one per label\n",
+ "colors = plt.cm.tab10(np.arange(len(labels)))\n",
+ "\n",
+ "# Plot setup\n",
+ "fig, ax = plt.subplots(figsize=(2, 2)) # Square plot\n",
+ "\n",
+ "def ax_tiny_histogram(ax, labels, colors, values):\n",
+ " # Create bars\n",
+ " bars = ax.barh(range(len(labels)), values, color=colors, alpha=0.5)\n",
+ "\n",
+ " # Add labels inside the bars, left-aligned\n",
+ " for i, (bar, label) in enumerate(zip(bars, labels)):\n",
+ " ax.text(min(values)-0.002, bar.get_y() + bar.get_height()/2, label,\n",
+ " va='center', ha='left', fontsize=8, color='black', clip_on=True)\n",
+ " ax.text(max(values)+0.002, bar.get_y() + bar.get_height()/2, f'{values[i]:.3f}',\n",
+ " va='center', ha='right', fontsize=8)\n",
+ "\n",
+ " ax.set_yticks([])\n",
+ " ax.set_xticks([]) # Hide ticks for minimal look\n",
+ " for spine in ax.spines.values():\n",
+ " spine.set_visible(False)\n",
+ "\n",
+ " ax.set_xlim(min(values)-0.005, max(values)+0.005)\n",
+ " return ax\n",
+ "\n",
+ "ax_tiny_histogram(ax,labels, colors, values)\n",
+ "plt.tight_layout()\n",
+ "plt.show()\n"
+ ],
+ "id": "3c83c5af70dd3e27",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 17
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-05-19T14:46:35.602660Z",
+ "start_time": "2025-05-19T14:46:35.271849Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "r_invs = [0.3, 0.5, 0.7]\n",
+ "mediator_masses = [700, 800, 900, 1000, 1100, 1200]\n",
+ "fig, ax = plt.subplots()\n",
+ "ax.set_xticks(range(len(r_invs)))\n",
+ "ax.set_xticklabels(r_invs)\n",
+ "ax.set_yticks(range(len(mediator_masses)))\n",
+ "ax.set_yticklabels(mediator_masses)\n",
+ "ax.set_xlabel(\"$r_{inv}$\")\n",
+ "ax.set_ylabel(\"$m_{Z'}$ [GeV]\")\n",
+ "# put the tiny histogram in [0,0] tick, need to create a new ax at the right position\n",
+ "ax_new = fig.add_axes([0.1, 0.1, 0.2, 0.2])\n",
+ "ax_tiny_histogram(ax_new, labels, colors, values)\n",
+ "\n"
+ ],
+ "id": "105a2ea4d6f16a0e",
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlIAAAG3CAYAAAB/vrvfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAP2FJREFUeJzt3Xt8zvX/x/HnNTuaHSxshpmzEeZsRNRCyNehopwbKocSCd8yyin0rQjpsPB1SMkhJDWnpOZsTjGU2TTbZLbLFrPD9fvDz/VtOWQfO1zjcb/drtut6/1+f97X692t63Y9+3w+e39MFovFIgAAAOSaXWEXAAAAUFQRpAAAAAwiSAEAABhEkAIAADCIIAUAAGAQQQoAAMAgghQAAIBBBCkAAACDCFIAAAAGEaQAAAAMspkgtX37dj3xxBPy9fWVyWTSmjVrrH0ZGRkaM2aM6tSpI1dXV/n6+qpv376Ki4vLMUdSUpJ69eold3d3eXp6KiQkRKmpqTnGHDp0SC1btpSzs7MqVKigGTNmFMTyAADAPchmglRaWprq1aunuXPn3tD3559/av/+/Ro/frz279+vVatWKSoqSp07d84xrlevXjp69KjCw8O1fv16bd++XYMHD7b2m81mtW3bVhUrVtS+ffs0c+ZMTZw4UR9//HG+rw8AANx7TLb40GKTyaTVq1erS5cutxyzZ88eNWnSRGfOnJGfn5+OHTumWrVqac+ePWrUqJEkaePGjerQoYPOnj0rX19fffjhh3r99dcVHx8vR0dHSdLYsWO1Zs0aHT9+vCCWBgAA7iH2hV2AUSkpKTKZTPL09JQkRUREyNPT0xqiJCk4OFh2dnbatWuXunbtqoiICLVq1coaoiSpXbt2mj59ui5evKiSJUve8Dnp6elKT0+3vs/OzlZSUpIeeOABmUym/FsgAADIMxaLRZcuXZKvr6/s7PLuglyRDFJXrlzRmDFj9Mwzz8jd3V2SFB8frzJlyuQYZ29vLy8vL8XHx1vHVKpUKccYb29va9/NgtS0adP05ptv5scyAABAAYuNjVX58uXzbL4iF6QyMjL09NNPy2Kx6MMPP8z3zxs3bpxGjhxpfZ+SkiI/Pz/FxsZaQxwAALBtZrNZFSpUkJubW57OW6SC1PUQdebMGW3ZsiVHkPHx8VFiYmKO8ZmZmUpKSpKPj491TEJCQo4x199fH/N3Tk5OcnJyuqHd3d2dIAUAQBGT17fl2Mxf7f2T6yHq5MmT2rRpkx544IEc/UFBQUpOTta+ffusbVu2bFF2draaNm1qHbN9+3ZlZGRYx4SHh6tGjRo3vawHAABwOzYTpFJTUxUZGanIyEhJ0unTpxUZGamYmBhlZGToySef1N69e7V06VJlZWUpPj5e8fHxunr1qiQpICBA7du316BBg7R792799NNPGjZsmHr27ClfX19J0rPPPitHR0eFhITo6NGj+uKLLzRr1qwcl+4AAADulM1sf7Bt2za1adPmhvZ+/fpp4sSJN9wkft3WrVvVunVrSdc25Bw2bJjWrVsnOzs7de/eXbNnz1aJEiWs4w8dOqShQ4dqz549KlWqlIYPH64xY8bccZ1ms1keHh5KSUnh0h4AAEVEfv1+20yQKioIUgAAFD359fttM5f2AAAAihqCFAAAgEEEKQAAAIMIUgAAAAYRpAAAAAwiSAEAABhEkAIAADCIIAUAAGAQQQoAAMAgghQAAIBBBCkAAACDCFIAAAAGEaQAAAAMIkgBAAAYRJACAAAwiCAFAABgEEEKAADAIIIUAACAQQQpAAAAgwhSAAAABhGkAAAADCJIAQAAGESQAgAAMIggBQAAYBBBCgAAwCCCFAAAgEEEKQAAAIMIUgAAAAYRpAAAAAwiSAEAABhEkAIAADCIIAUAAGAQQQoAAMAgghQAAIBBBCkAAACDCFIAAAAGEaQAAAAMIkgBAAAYRJACAAAwiCAFAABgEEEKAADAIIIUAACAQQQpAAAAgwhSAAAABhGkAAAADCJIAQAAGESQAgAAMIggBQAAYBBBCgAAwCCCFAAAgEEEKQAAAIMIUgAAAAYRpAAAAAwiSAEAABhEkAIAADCIIAUAAGAQQQoAAMAgghQAAIBBBCkAAACDCFIAAAAGEaQAAAAMIkgBAAAYRJACAAAwyGaC1Pbt2/XEE0/I19dXJpNJa9asydG/atUqtW3bVg888IBMJpMiIyNvmOPKlSsaOnSoHnjgAZUoUULdu3dXQkJCjjExMTHq2LGjihcvrjJlymj06NHKzMzMx5UBAIB7lc0EqbS0NNWrV09z5869Zf9DDz2k6dOn33KOV155RevWrdOKFSv0ww8/KC4uTt26dbP2Z2VlqWPHjrp69ap+/vlnLVq0SAsXLlRoaGierwcAANz7TBaLxVLYRfydyWTS6tWr1aVLlxv6oqOjValSJR04cECBgYHW9pSUFJUuXVrLli3Tk08+KUk6fvy4AgICFBERoWbNmunbb79Vp06dFBcXJ29vb0nS/PnzNWbMGJ0/f16Ojo7/WJvZbJaHh4dSUlLk7u6eJ+sFAAD5K79+v23mjNTd2rdvnzIyMhQcHGxtq1mzpvz8/BQRESFJioiIUJ06dawhSpLatWsns9mso0eP3nTe9PR0mc3mHC8AAADpHgpS8fHxcnR0lKenZ452b29vxcfHW8f8NURd77/edzPTpk2Th4eH9VWhQoW8Lx4AABRJ90yQyi/jxo1TSkqK9RUbG1vYJQEAABthX9gF5BUfHx9dvXpVycnJOc5KJSQkyMfHxzpm9+7dOY67/ld918f8nZOTk5ycnPKnaAAAUKTdM2ekGjZsKAcHB23evNnaFhUVpZiYGAUFBUmSgoKCdPjwYSUmJlrHhIeHy93dXbVq1SrwmgEAQNFmM2ekUlNTderUKev706dPKzIyUl5eXvLz81NSUpJiYmIUFxcn6VpIkq6dSfLx8ZGHh4dCQkI0cuRIeXl5yd3dXcOHD1dQUJCaNWsmSWrbtq1q1aqlPn36aMaMGYqPj9cbb7yhoUOHctYJAADknsVGbN261SLphle/fv0sFovFsmDBgpv2T5gwwTrH5cuXLUOGDLGULFnSUrx4cUvXrl0t586dy/E50dHRlscff9zi4uJiKVWqlGXUqFGWjIyMO64zJSXFIsmSkpKSF8sGAAAFIL9+v21yHylbxj5SAAAUPewjBQAAYGMIUgAAAAYRpAAAAAwiSAEAABhEkAIAADCIIAUAAGAQQQoAAMAgghQAAIBBBCkAAACDCFIAAAAGEaQAAAAMIkgBAAAYRJACAAAwiCAFAABgEEEKAADAIIIUAACAQQQpAAAAgwhSAAAABhGkAAAADCJIAQAAGESQAgAAMIggBQAAYBBBCgAAwCCCFAAAgEEEKQAAAIMIUgAAAAYRpAAAAAwiSAEAABhEkAIAADCIIAUAAGAQQQoAAMAgghQAAIBBBCkAAACDCFIAAAAGEaQAAAAMIkgBAAAYRJACAAAwiCAFAABgEEEKAADAIIIUAACAQQQpAAAAgwhSAAAABhGkAAAADCJIAQAAGESQAgAAMIggBQAAYBBBCgAAwCCCFAAAgEEEKQAAAIMIUgAAAAYRpAAAAAwiSAEAABhEkAIAADCIIAUAAGAQQQoAAMAgghQAAIBBBCkAAACDCFIAAAAGEaQAAAAMIkgBAAAYRJACAAAwiCAFAABgEEEKAADAIJsJUtu3b9cTTzwhX19fmUwmrVmzJke/xWJRaGioypYtKxcXFwUHB+vkyZM5xiQlJalXr15yd3eXp6enQkJClJqammPMoUOH1LJlSzk7O6tChQqaMWNGfi8NAADco2wmSKWlpalevXqaO3fuTftnzJih2bNna/78+dq1a5dcXV3Vrl07XblyxTqmV69eOnr0qMLDw7V+/Xpt375dgwcPtvabzWa1bdtWFStW1L59+zRz5kxNnDhRH3/8cb6vDwAA3HtMFovFUthF/J3JZNLq1avVpUsXSdfORvn6+mrUqFF69dVXJUkpKSny9vbWwoUL1bNnTx07dky1atXSnj171KhRI0nSxo0b1aFDB509e1a+vr768MMP9frrrys+Pl6Ojo6SpLFjx2rNmjU6fvz4HdVmNpvl4eGhlJQUubu75/3iAQBAnsuv32+bOSN1O6dPn1Z8fLyCg4OtbR4eHmratKkiIiIkSREREfL09LSGKEkKDg6WnZ2ddu3aZR3TqlUra4iSpHbt2ikqKkoXL1686Wenp6fLbDbneAEAAEhFJEjFx8dLkry9vXO0e3t7W/vi4+NVpkyZHP329vby8vLKMeZmc/z1M/5u2rRp8vDwsL4qVKhw9wsCAAD3hCIRpArTuHHjlJKSYn3FxsYWdkkAAMBGFIkg5ePjI0lKSEjI0Z6QkGDt8/HxUWJiYo7+zMxMJSUl5Rhzszn++hl/5+TkJHd39xwvAAAAqYgEqUqVKsnHx0ebN2+2tpnNZu3atUtBQUGSpKCgICUnJ2vfvn3WMVu2bFF2draaNm1qHbN9+3ZlZGRYx4SHh6tGjRoqWbJkAa0GAADcK2wmSKWmpioyMlKRkZGSrt1gHhkZqZiYGJlMJo0YMUKTJ0/W2rVrdfjwYfXt21e+vr7Wv+wLCAhQ+/btNWjQIO3evVs//fSThg0bpp49e8rX11eS9Oyzz8rR0VEhISE6evSovvjiC82aNUsjR44spFUDAICiLFfbH6xduzbXH/DYY4/JxcXlH8dt27ZNbdq0uaG9X79+WrhwoSwWiyZMmKCPP/5YycnJeuihhzRv3jxVr17dOjYpKUnDhg3TunXrZGdnp+7du2v27NkqUaKEdcyhQ4c0dOhQ7dmzR6VKldLw4cM1ZsyYO14P2x8AAFD05Nfvd66ClJ1d7k5gmUwmnTx5UpUrV851YbaKIAUAQNFjM/tIxcfHKzs7+45exYsXz7NCAQAAbE2uglS/fv3u6DLddb179+asDQAAuGfl+hExR44c0YMPPphf9dg8Lu0BAFD02Mylvbp166pp06b65JNPdOnSpTwrBAAAoKjJdZD64YcfVLt2bY0aNUply5ZVv3799OOPP+ZHbQAAADYt10GqZcuW+uyzz3Tu3Dl98MEHio6O1sMPP6zq1atr+vTpt3xmHQAAwL3G8Iacrq6uGjBggH744QedOHFCTz31lObOnSs/Pz917tw5L2sEAACwSbm+2fxW0tLStHTpUo0bN07JycnKysrKi2ltDjebAwBQ9OTX77f93U6wfft2ffbZZ1q5cqXs7Oz09NNPKyQkJC9qAwAAsGmGglRcXJwWLlyohQsX6tSpU2revLlmz56tp59+Wq6urnldIwAAgE3KdZB6/PHHtWnTJpUqVUp9+/bVc889pxo1auRHbQAAADYt10HKwcFBX331lTp16qRixYrlR00AAABFQq6D1Nq1a/OjDgAAgCLH8PYHkvTjjz+qd+/eCgoK0u+//y5JWrx4sXbs2JEnxQEAANgyw0Fq5cqVateunVxcXHTgwAGlp6dLklJSUjR16tQ8KxAAAMBWGQ5SkydP1vz58/XJJ5/IwcHB2t6iRQvt378/T4oDAACwZYaDVFRUlFq1anVDu4eHh5KTk++mJgAAgCLBcJDy8fHRqVOnbmjfsWOHKleufFdFAQAAFAWGg9SgQYP08ssva9euXTKZTIqLi9PSpUv16quv6sUXX8zLGgEAAGyS4UfEjB07VtnZ2Xr00Uf1559/qlWrVnJyctKrr76q4cOH52WNAAAANumuH1p89epVnTp1SqmpqapVq5ZKlCiRV7XZJB5aDABA0WMzDy2+fPmyNm/erE6dOkmSJkyYYN36QJLs7e311ltvydnZOc+KBAAAsEW5DlKLFi3SN998Yw1Sc+bMUe3ateXi4iJJOn78uMqWLatXXnklbysFAACwMbm+2Xzp0qUaPHhwjrZly5Zp69at2rp1q2bOnKkvv/wyzwoEAACwVbkOUqdOnVKdOnWs752dnWVn979pmjRpol9++SVvqgMAALBhub60l5ycnOOeqPPnz+foz87OztEPAABwr8r1Gany5cvryJEjt+w/dOiQypcvf1dFAQAAFAW5DlIdOnRQaGiorly5ckPf5cuX9eabb6pjx455UhwAAIAty/U+UgkJCQoMDJSjo6OGDRum6tWrS7r27L05c+YoMzNTBw4ckLe3d74UXNjYRwoAgKLHZvaR8vb21s8//6wXX3xRY8eO1fUcZjKZ9Nhjj2nevHn3bIgCAAD4K0OPiKlUqZI2btyopKQk64OLq1atKi8vrzwtDgAAwJYZftaeJHl5ealJkyZ5VQsAAECRkqubzQ8dOqTs7Ow7Hn/06FFlZmbmuigAAICiIFdBqn79+rpw4cIdjw8KClJMTEyuiwIAACgKcnVpz2KxaPz48SpevPgdjb969aqhogAAAIqCXAWpVq1aKSoq6o7HBwUFWR9mDAAAcK/JVZDatm1bPpUBAABQ9OR6Z3MAAABcQ5ACAAAwiCAFAABgEEEKAADAIIIUAACAQXcdpNavX6/Ro0fr9OnTeVEPAABAkXFXz9qTpE6dOqlKlSrasGGDXFxc9Nxzz+VFXQAAADbvrs9IPfzww8rKytLQoUMJUQAA4L5y10HqyJEjateuncLDw2/oGzNmzN1ODwAAYLPuOkj5+flp7dq1CgkJUVhYWI6+m4UrAACAe8Vd3yNlMpnUsGFD/fjjj+rYsaN+++03TZkyRdK1hxwDAADcq+76jNT1sFSxYkXt2LFDO3fuVK9evZSRkXHXxQEAANiyuw5StWvXtv6zp6enNm7cKHt7ez366KNKTU292+kBAABs1l0HqSVLluR47+DgoEWLFql169b69ddf73Z6AAAAm2WyGLyRyWw2a8GCBYqPj1elSpVUr1491alTR8WLF7eOOXPmjCpWrJhnxdoCs9ksDw8PpaSkyN3dvbDLAQAAdyC/fr8N32zerVs3HTx4UI0bN9a6desUFRUlSapSpYrq1aunL7744p4LUQAAAH9lOEhFRERo27Ztaty4sSQpPT1dhw8fVmRkpA4ePJhnBQIAANgqw0Gqbt26srf/3+FOTk5q1KiRGjVqlCeFAQAA2DrDN5vPmDFDoaGhSk9Pz8t6AAAAigzDZ6T8/f1lNptVq1Yt9ejRQ82aNVP9+vVVoUKFvKwPAADAZhk+I9W9e3dFR0erRYsW+vnnn9WvXz/5+/urdOnSatu2bV7WCAAAYJMMn5E6cuSIIiIiVK9ePWtbdHS0Dhw4oEOHDuVJcQAAALbMcJBq3Lix0tLScrT5+/vL399fXbt2vevCAAAAbJ3hS3svv/yyJk6cqOTk5DwsBwAAoOgwfEbqySeflCRVq1ZNXbt2VdOmTVW/fn09+OCDcnR0zLMCAQAAbJXhIHX69GkdPHjQugHn1KlTFR0dLXt7e9WoUYP7pAAAwD3P8KW9ihUrqnPnzgoNDdXKlSv166+/Kjk5WZs2bdLzzz+flzVaXbp0SSNGjFDFihXl4uKi5s2ba8+ePdZ+i8Wi0NBQlS1bVi4uLgoODtbJkydzzJGUlKRevXrJ3d1dnp6eCgkJUWpqar7UCwAA7m2Gg9TNuLm5qWXLlho6dGheTms1cOBAhYeHa/HixTp8+LDatm2r4OBg/f7775KubRI6e/ZszZ8/X7t27ZKrq6vatWunK1euWOfo1auXjh49qvDwcK1fv17bt2/X4MGD86VeAABwbzNZLBZLYRdxJy5fviw3Nzd9/fXX6tixo7W9YcOGevzxxzVp0iT5+vpq1KhRevXVVyVJKSkp8vb21sKFC9WzZ08dO3ZMtWrV0p49e6yPstm4caM6dOigs2fPytfX94bPTU9Pz7F7u9lsVoUKFfL86dEAACD/mM1meXh45Pnvd56ekcpPmZmZysrKkrOzc452FxcX7dixQ6dPn1Z8fLyCg4OtfR4eHmratKkiIiIkXXvQsqenZ47nAQYHB8vOzk67du266edOmzZNHh4e1hc7twMAgOuKTJByc3NTUFCQJk2apLi4OGVlZWnJkiWKiIjQuXPnFB8fL0ny9vbOcZy3t7e1Lz4+XmXKlMnRb29vLy8vL+uYvxs3bpxSUlKsr9jY2HxYHQAAKIqKTJCSpMWLF8tisahcuXJycnLS7Nmz9cwzz8jOLv+W4eTkJHd39xwvAAAAqYgFqSpVquiHH35QamqqYmNjtXv3bmVkZKhy5cry8fGRJCUkJOQ4JiEhwdrn4+OjxMTEHP2ZmZlKSkqyjgEAALhTRSpIXefq6qqyZcvq4sWL+u677/Svf/1LlSpVko+PjzZv3mwdZzabtWvXLgUFBUmSgoKClJycrH379lnHbNmyRdnZ2WratGmBrwMAABRthjfkLAzfffedLBaLatSooVOnTmn06NGqWbOmBgwYIJPJpBEjRmjy5MmqVq2aKlWqpPHjx8vX11ddunSRJAUEBKh9+/YaNGiQ5s+fr4yMDA0bNkw9e/a86V/sAQAA3E6RClIpKSkaN26czp49Ky8vL3Xv3l1TpkyRg4ODJOm1115TWlqaBg8erOTkZD300EPauHFjjr/0W7p0qYYNG6ZHH31UdnZ26t69u2bPnl1YSwIAAEVYkdlHylbk1z4UAAAg/9z3+0gBAADYGoIUAACAQQQpAAAAgwhSAAAABhGkAAAADCJIAQAAGESQAgAAMIggBQAAYBBBCgAAwCCCFAAAgEEEKQAAAIMIUgAAAAYRpAAAAAwiSAEAABhEkAIAADCIIAUAAGAQQQoAAMAgghQAAIBBBCkAAACDCFIAAAAGEaQAAAAMIkgBAAAYRJACAAAwiCAFAABgEEEKAADAIIIUAACAQQQpAAAAgwhSAAAABhGkAAAADCJIAQAAGESQAgAAMIggBQAAYBBBCgAAwCCCFAAAgEEEKQAAAIMIUgAAAAYRpAAAAAwiSAEAABhEkAIAADCIIAUAAGAQQQoAAMAgghQAAIBBBCkAAACDCFIAAAAGEaQAAAAMIkgBAAAYRJACAAAwiCAFAABgEEEKAADAIPvCLqCocXd3l8ViKewyAACADeCMFAAAgEEEKQAAAIMIUgAAAAbdl/dI7V73W2GXkC+aPFG5sEsAAOC+whkpAAAAgwhSAAAABhGkAAAADCJI3YFPls1S+tV0w8ef+O0Xfb99XY62LgNb6akXg9X75U7q/XInhf+4/m7LtBknT55U8+bNVb16dTVu3FhHjx69YcyCBQsUGBhofZUqVUrdunWTJKWmpqpdu3YqVaqUPD09cxx3uz4AAAoaQeoOfLp8tq7eTZA6/ctNg9KU0bO1ZNZ6LZm1Xo+17HQ3JdqU559/XoMHD9aJEyc0ZswY9e/f/4YxAwYMUGRkpPXl4+OjXr16SZIcHBw0ZswYbdq06YbjbtcHAEBBI0j9g7fnvSFJen5cD/V+uZPOJf6uqXPGacCoruo1vIOmzvm3MjKu6szZ39RpQAv9Hh8jSVqy+hO9PKG/kpL/0MdL39e+wzvV++VO1vnuVYmJidq7d6969+4tSerevbtiY2N16tSpWx6za9cuJSYmqnPnzpIkJycnPfLIIzc943S7PgAAChpB6h+MHTJZkvTRtC+0ZNZ6LfhyrgJrNdaC/6zWktnfyGKxaPm6hapYvrKG9x+jf88Yrn2Hd+qrb5Zo4sj/yMuzlAb3GqGGdZppyaz11vkk6c33XtWzwx/X5NljdTHlQmEtMU/FxsaqbNmysre/trOGyWSSn5+fYmJibnlMWFiY+vTpIwcHh4IqEwCAPHFf7iN1N7bvCteRqANa9vVnkqT0q1dkZ3ctj7Z7uLP2Hd6plycM0JzJi1XS44FbzjN/2nL5lPZVZmaG5i95V2++P1rvT/isQNZgS9LS0rR8+XLt3LmzsEsBACDXCFK5ZLFIb4+dJ79ylW7oy8zK1G8xJ+Tu5qHzF+JvO49PaV9Jkr29g3p2HqCnXgzOl3oLWoUKFXTu3DllZmbK3t5eFotFMTEx8vPzu+n4FStWqHbt2qpVq1YBVwoAwN0rMpf2srKyNH78eFWqVEkuLi6qUqWKJk2aJIvFYh1jsVgUGhqqsmXLysXFRcHBwTp58mSOeZKSknL92cVdSij1z0uSpIebBeu/Kz9SZlamJMmcmqLYuGhJ0txFM+RXrrI+mrZcsxdMs7a7urhZj5eky1f+1KVUs/X999vXqXqleyNIlClTRg0aNNCSJUskSStXrlT58uVVtWrVm44PCwtTSEhIQZYIAECeMVn+mkRs2NSpU/Xuu+9q0aJFql27tvbu3asBAwZoypQpeumllyRJ06dP17Rp07Ro0SJVqlRJ48eP1+HDh/XLL7/I2dlZkvT444/rzSFzc/XZn34+Wxt/+FrOTi56542PtXjlx9p/ZKfsTHYqVsxew/qP0dWMdM1dNEML/rNazk4u2rxjgxZ9NV+fzFihjIyrGvHmAF2+/KfqBDRQn26DNXbaUGVnZ8kii3y9/TRy0Hj5epe/q39HtvKImKioKPXv318XLlyQu7u7FixYoDp16mjgwIHq3Lmz9abyqKgoNWrUSHFxcXJzc8sxR926dXX+/HklJCTI19dXbdq00eLFi/+xDwCAmzGbzfLw8FBKSorc3d3zbN4iE6Q6deokb29vhYWFWdu6d+8uFxcXLVmyRBaLRb6+vho1apReffVVSVJKSoq8vb21cOFC9ezZU8eOHVOtWrW0a+2vhbWMfGUrQQoAAFuTX0GqyFzaa968uTZv3qwTJ05Ikg4ePKgdO3bo8ccflySdPn1a8fHxCg7+371GHh4eatq0qSIiIiRJERER/Nk8AADIM0XmZvOxY8fKbDarZs2aKlasmLKysjRlyhTrJo7x8ddu7vb29s5xnLe3t7UvPj5eZcqUKdjCAQDAPavIBKkvv/xSS5cu1bJly1S7dm1FRkZqxIgR8vX1Vb9+/XI1F5fAAABAXigyQWr06NEaO3asevbsKUmqU6eOzpw5o2nTpqlfv37y8fGRJCUkJKhs2bLW4xISEhQYGChJ8vHxUWJiYoHXDgAA7k1F5h6pP//807rx5XXFihVTdna2JKlSpUry8fHR5s2brf1ms1m7du1SUFCQJCkoKEjJyckFVjMAALi3FZkzUk888YSmTJkiPz8/1a5dWwcOHNC7776r5557TtK1R5GMGDFCkydPVrVq1azbH/j6+qpLly6SpICAALVv374QVwEAAO4lRWb7g0uXLmn8+PFavXq1EhMT5evrq2eeeUahoaFydHSUdG1DzgkTJujjjz9WcnKyHnroIc2bN0/Vq1e3zpOUlKSspcsKaxm4S6WHDyvsEgAARdB9v49UXjr/wZzCLgEGEaQAAEbc9/tIAQAA2Joic49UYZqxYYNeeuwxOTs4GDr+8NmzOpWQoK4NG97Q9/nOnXp52VItHDhQHerWu9tSbcJviYkatmSJktJS5e7iotm9eqvmX/6SUrq27o9/2GZ9fy45Wc2qVNHCgYP0S1ycxq74Un9cuiT7YsVU36+i3n7qKbn8/yXcRYsW6Z133lGxYsVkMpk0ZcoUdejQoSCXCACAJILUHXln47d6vnVrw0Hq6O9nteHQoRuCVMyFC1r8889q6O+fB1Xajle/WK6+LZqrZ9NmWnfggF5aukTfvzo6x5hnmjXTM82aWd+3mjZV3Rs1liQ529tr2pNPqXa5csrKztYLixbqg02b9FqHDkpKStLw4cN14sQJ+fj4aMeOHerWrRvbWgAACgWX9v7Bq18slyR1nvW+2kx/W7FJSRr5+TK1e2emHn57mkYt/1xXMzN1KiFB9caPV/Qff0iS5m7erB7z5un8pUuavmGDfjp5Um2mv22dLzs7W698vkzTnnxSTvb3Tp49f+mSImNi9eT/h6JOgYH6/eJF/Xb+/C2P2RcdrT8uXVL7OnUkSZXLlFHtcuUkScXs7BToV1GxSRckXfv3ZrFYdOnSJUlScnKyype/u4c9AwBg1L3zC55P3unRU//96SetfXmEPIoX16jln6tplSp695lnZbFYNPLzz/XxD9s07NFgTejyLw1a8JkmdumqBT9u18ZRr6qUm5vGdOigDYcO6b+DBlvn/XDrVjWpXFn1/PwKcXV5L+7iRXl7uMu+WDFJ17alKF+ypH6/mKTKpUvf9JhlOyP0ZOPGcvj/Y/4qLT1dSyN+1utPdJYklSpVSvPnz1eDBg3k5eWly5cva9OmTfm3IAAAboMglUvfHjqkvadPa/7WrZKkKxkZ1o1CuzVspJ9OnlSPefP01bBhKuXmdtM5jsXFaf3BSK19eURBlW2z0tLTtXrffn07cuQNfVczMzV44QK1rhmgjvWu3T+WkpKiWbNmaffu3QoICNC6devUtWtXHTt2zLoNBgAABYUglUsWi/RZyEBVucnDjzOzsnQs7pw8XYsrPiX5lnPs/PVXxSYlqdmktyRJiWazXl2+XAkpZg1o2TK/Si8QviVLKiHFrMysLNkXKyaLxaKzFy+qXEmvm45fF3lANcr6qMbfbkbPyMrSoIUL5O3urindu1vbw8PD5enpqYCAAEnXNmp97rnndObMGVWrVi3/FgYAwE1wj9QdKOHkLPOVK5Kkx+vW0QebwpWZlSVJSv7zT+v9P5PWrVVV7zJa+/IITVyzxtpewtlZly5fsc43oGVLHZk8Rfsmvql9E99UQ39/vdOzZ5EPUZJU2s1NdSuU11d790iS1kdGytfT85aX9ZZGRKhXs6AcbZlZWRq8cIFKFi+u//R8RiaTydpXuXJlRUZGKj4+XpIUERGhzMxMVahQIZ9WBADArXFG6g68+EgbPTV3jlwcHbV40GDN2bxJj8yYLpPJJHs7O4X+6186lZCgrceOaeOoV1Xc0VFvde2mQQs+0zevjFSr6jU0b/MWPfz2NDWuVEnv9OhZ2EvKV+/06KnhS5fo/e+/l5uzs2b16i1JemXZMrWrU8d6U/mphAQd+f13fd6gQY7j1+zfr28OHlQtX189MmO6JKlJpcqa/vTTatCggV5//XU98sgjcnBwkL29vb788ks5OzsX7CIBABA7m6OIYWdzAIAR7GwOAABgYwhSAAAABt2Xl/YAAMD9hUt7AAAANoYgBQAAYBBBCgAAwKD7ch+peZHzCrsE/M2QwCGFXQIAALnGGSkAAACDCFIAAAAG3ZeX9nLrm/nfqO2AtnJwcjB0fGxUrBJOJ6hR+0bWtg9e/EDmC2aZTCY5uzrrqdeeUoWa98bz4hLPJOq/of9VWnKanEs4q89bfeRbxTfHmIivI7R12Vbr+9ALoWrVqpVWrVqlw4cPa+jQoUpMTJS9vb2aNGmiuXPnysXFRZJkMpn04IMPqlixYpKkDz74QC3vgecUAgCKnvtyH6nc3iM1tP5Qzdw+U8Xdihv6vIi1ETq09ZCef+95a9ufl/60zhe5JVIb5m/Qv7/8t6H5bc2swbPUpFMTBXUO0v7w/QpfGK4xS8fc9ph5vefpzTffVPfu3XXy5EldvnxZdevWVVZWlp599lkFBARo4sSJkq4FqYsXL8rT0zP/FwMAuCewj1Qh+Xzy55Kk9557T1N7TNWFuAta+tZSzeg9Q1OenqJlk5YpMyNTCdEJer3d6/rj7B+SpE3/3aQ5Q+foUtIlffPhNzqx94Sm9phqne+voexy6mXJVPBryw+Xki4p5pcYNenQRJJUP7i+LiZcVGJM4i2POX34tBITE9W5c2dJUrVq1VS3bl1JUrFixdS4cWNFR0fne+0AAOQWl/b+wTNvPKMdK3folc9eUXG34lo2aZmq1q+qXqG9ZLFYtOytZdq6bKse6/eYuo7oqrDXwtR1ZFdt/2K7Ri8eLTcvN3V8seMNZ6QkadEbi3Ri7wlJ0pAP7o2/WrsYf1HupdxVzP7aZTeTySQvHy9djL+oMn5lbnpMxJoI9enTRw4ON146TUtL06effqpp06blaH/00UeVmZmpRx99VJMmTZKrq2veLwYAgH9AkMqlg1sP6vSh09q8ZLMkKSM9Q6Zi104nNXq8kU7sPaG5Q+Zq+EfD5ebldtu5+k3uJ0nauXan1sxao6FzhuZv8TYo/XK69n23Tx/v/viGvqtXr6pHjx5q27atunbtam0/c+aM/Pz8lJaWphdeeEGjR4/WvHlsaQEAKHgEqdyySAPfGSjvit43dGVlZinuVJyKexRXSmLKHU/ZrHMzLZ+6XKnJqSrhWSIvqy1wJX1KyvyHWVmZWSpmX0wWi0VJ8Ukq6VPypuP3h+9X2cplVatWrRztGRkZ6tGjh8qWLatZs2bl6PPz85Mkubq6asiQIRo8eHD+LAYAgH/APVJ3wNnVWZcvXZYk1W1TV+ELwpWVmSVJ+tP8p/X+n69nfy1vf2+9EvaKVr23ytru4upy7T6o//fnpT+VnJhsfX9w60G5erjK1aPoX55y83JThZoVtHvDbknSgU0HVLJMydte1gvqEpSjLTMzUz179pSXl5c+/vhjmUz/u4Hs4sWL+vPPPyVJ2dnZ+uKLL1S/fv18Wg0AALfHX+3dgW8++kZ7N+yVg7ODXnj/BYUvCtfJvSdlsjOpWLFi6vJyF2VczdDXs7/Wa4tfk6OLo/aH79f3n32vUQtHKfNqpuYOm6v0y+mqXLey2j7XVmGvhV27LGgyqUTJEuo6sqsq1Lg3tj9IiE7Q4tDFSktJk7Ors3q/2VvlqpXT0jeXqs7DdVS3dV3ruOm9pmvq91M1ssVI6/FLly5V7969VbduXWuIatGihebOnauIiAg9//zzMplMyszMVIMGDTRr1ix5eXkVyloBAEVDfv3VHkEKNoFHxAAA8hPbHwAAANgYghQAAIBB9+WlPQAAcH/h0h4AAICNIUgBAAAYRJACAAAw6P7c2XzrtH8eU1S0GVfYFQAAcN/ijBQAAIBBBCkAAACDCFLIcydPnlTz5s1VvXp1NW7cWEePHr1hzIIFCxQYGGh9lSpVSt26dZMkpaamql27dipVqpQ8PT1vOHb9+vWqWbOmqlWrpm7duslsNuf3kgAAuCmC1B3wf2aGIk/F3dC+fMtBNX5xrqr1+Y8avTBXLV/+SCu3H8kx5re4JNk9+romLd4iSVr70zEFDvpAgYM+kE/3qSrddbL1/dJNkXdUT0Zmlt5ctFk1+72r2rVrq379+urSpYsiI68dv23bNrm4uCgwMFB169bVQw89pEOHDt1+jf7+1uP79++vcuXKKTAwUDVr1lSfPn2sDwqWpH379ql9+/aqXLmyGjVqpBYtWmjNmjXW/ueff16DBw/WiRMnNGbMGPXv31/z589X3bp1rXNu2rRJkZGRioyMVHJysi5duqSePXtKkhwcHHT69Gm9/fbbN9SZmpqqkJAQrVmzRidPnpSvr68mTZp0R//eAADIa/fnzeZ54NNv9uidL3/Uqjd7qZa/tyQpKua81v58LMe4z77dq0fqV9aCjfv0Ru826twiQJ1bBEiSJi7cpOTUK3p/WKcb5s/MypJ9sWI3/ewBM1Yq9XK6Iua8qJKd35Ikbdq0SVFRUQoMDJQk1ahRwxqM3n33XQ0YMED79u274/WNHj1aI0aMUHp6uh555BHNmTNHr732mo4ePap27dppwYIFeuKJJyRJcXFxCg8PlyQlJiZq7969+v777yVJ3bt31/PPP68pU6bo4MGD8vLyksVi0YEDB6yflZ6erszMTP3xxx+SJCcnJ7m7u6tEiRI31PXtt9+qfv36qlmzpiRpyJAhatu2rWbOnHnHawMAIK9wRsqgiYs26/2hnawhSpJq+JXW6J6trO+zsrK18Lv9mj2sk9xcnLTlwK+3nG9b5G+qPeB9hcxcqcBBH2j1j7/cdNzJs39o9Y6j+mx0d5V0c7G2BwcHq0ePHjc9pn379oqKisrtEiVdCzUPPfSQzpw5I0l6++239dxzz1lDlCT5+vqqX79+kqTY2FiVLVtW9vbXMrrJZJKXl5ccHR3l5uZmbWvQoIH1+NTUVD322GOaOnVqjjNfNxMTE6OKFSta3/v7++vcuXPKzMw0tD4AAO4GQcqAxIup+v0Ps5oGVLjtuO/2nFT50h6q5e+tkA6NFLZh723HH4s5r75t6yvyk+F6qnWdm445cCpOVX0fkJd78Tuud/ny5WrYsOEdj/+rlJQUbdu2Td27d5d07bJeUFBQrubw8PCQi4uL/Pz81KNHD82ZM0cXL16UJKWlpSktLU2DBg1SmzZt9N577xmqEwCAwkCQyiNtRn6iOiGzVKPvu9a2sG/36rnHrwWYXo8GasOuE7p46fIt56hctqQerlc5V5/766+/KjAwUDVq1NCAAQOs7dcv8wUGBur48eNatGhRruadOXOm6tatK29vb5UvX15t2rS5o+MqVKiQ4wyRxWLR2bNntXr1am3YsEEtWrTQqlWrVLduXSUlJWnFihVycHBQlSpVNGnSJM2aNUsXLly45fx+fn7Ws2OSFB0dneMMGAAABYkgZUCZkiVUrpS7dh+PtbZtfXeQ1k3pq4SLqZKk88mp+mZnlCYt3ir/Z2ao4QtzlJGVddsbyku4OP3jZ9ev6qtTcResgaxKlSqKjIzUuHHjrGd5pP/dIxUZGakvv/xS/v7+uVrj6NGjdejQIZ04cUJ79+7V/PnzJUkNGzZURETELY8rU6aMGjRooCVLlkiSVq5cqfLly6tatWqqX7++XnrpJW3evFklSpTQtm3bFBYWZr0Xyt/fX88++6wmT558y/nbt2+v/fv36/jx45KkefPmWW9SBwCgoBGkDArt+4hemfeNjsckWtvSLl+1/vN/vz+gLg8FKPaLMYr+/DVFf/6avprwrMK+vf3lvX9SrXwp/at5gEJmrlRy6v/ObqWlpd3VvLfi5+enDz74QG+99ZYuX76s1157TZ999pm++eYb65j4+PgcZ7w++ugjffTRR6pevbrefvtthYaG6tChQxo4cKDWrl2r2NhYnT9/XnZ2doqMjJSrq6v12DfeeENLlizRwYMHNXToUJnNZpUvX159+vSRJLm5uenTTz9Vly5dVLVqVZ09e1bjx4/Pl7UDAPBPuB5yh9qNWSCHv/wV3c65L8rV2VG9p65QStoVlfZwlbOjvea+3FnStct60we1zzHHY42qqv+Mr7T/xO9qUL2c4VoWjnlSU5ZuU9MhH8p+7EqVLFlSpUuX1pgxYwzPeTudO3fWe++9p3nz5mnUqFH69ttv9frrr2v48OFydXWVm5ubxo4dax1fo0aNHGet9u/fr+HDhys+Pl579+6VxWLR22+/rS5duujSpUs5zpaVKlVKL730kkJDQ7Vy5Uq1bt36pvV07tw5X9YKAEBumCwWi6WwiyhwPGsPAID7itlsloeHh1JSUuTu7p5n83JpDwAAwCAu7dmoF95bo52/xN7QHjHnBbk4ORib84UXtHPnzhvnjIiQi4vLTY7Inc6dOysmJiZHW8mSJbV169a7nhsAAFt0f17aAwAA9xUu7QEAANgYghQAAIBB9+U9Uu+Fn7jrOV55rHoeVAIAAIoyzkgBAAAYRJACAAAwiCB1Byb1eUS//3rshvbly5ercePGqlatmho1aqSWLVtq5cqVOcb89ttvsrOz06RJkyRJa9eutT5M2MfHR6VLl7a+X7p0aYGsJ7+dPHlSzZs3V/Xq1dW4cWMdPXr0hjELFiywrjswMFClSpVSt27drP3r169XzZo1Va1aNXXr1k1ms/mO+gAAKEj35fYHub1HalKfR/TcxLkqVyXA2uZ2ZrveeecdrVq1SrVq1ZIkRUVFae3atRo9erR13BtvvKGdO3fqt99+06+//iqTyWTtmzhxopKTk/X+++/f8JmZmZmyty+at7A98sgj6tu3r/r376+vvvpK06dP1549e257zIMPPqg333xT3bt3V2pqqqpUqaIffvhBNWvW1LBhw+Ti4qKZM2fetg8AgFth+wMbM3HiRL3//vvWECVde8bcX0NUVlaWFi5cqNmzZ8vNzU1btmy55Xzbtm1T7dq1FRISosDAQK1evTpf688viYmJ2rt3r3r37i1J6t69u2JjY3Xq1KlbHrNr1y4lJiZan5/37bffqn79+qpZs6YkaciQIfr888//sQ8AgIJGkDLg0sUL+v3339W0adPbjvvuu+9Uvnx51apVSyEhIQoLC7vt+GPHjqlv376KjIzUU089lZclF5jY2FiVLVvWejbNZDLJz8/vhh3P/yosLEx9+vSRg8O1HdtjYmJUsWJFa7+/v7/OnTunzMzM2/YBAFDQCFJ5pE2bNqpTp45q1KhhbQsLC9Nzzz0nSerVq5c2bNigixcv3nKOypUr6+GHH873Wm1JWlqali9frpCQkMIuBQCAXCNIGeBW8gGVK1dOu3fvtrZt3bpV69atU0JCgiTp/Pnz+uabbzRp0iT5+/urYcOGysjIuO0N5SVKlMj32vNbhQoVcpwhslgsiomJkZ+f303Hr1ixQrVr185xidTPz09nzpyxvo+Ojrae5bpdHwAABY0gZVBoaKheeeUVHT9+3NqWlpZm/ef//ve/6tKli2JjYxUdHa3o6Gh99dVX/3h5r6grU6aMGjRooCVLlkiSVq5cqfLly6tq1ao3HR8WFnbD2aj27dtr//791n+38+bNU8+ePf+xDwCAgsb/xt+hj8aFqNhfznocObBXrq6u6t27t1JSUlS6dGk5Oztr7ty5kq4FhOnTp+eY47HHHlP//v21f/9+NWjQoEDrL0gfffSR+vfvr6lTp8rd3V0LFiyQJA0cOFCdO3e23lQeFRWlyMhIbdiwIcfxbm5u+vTTT9WlSxdlZmbqwQcf1KJFi/6xDwCAglZktj/w9/fPcUnnuiFDhmju3Lm6cuWKRo0apeXLlys9PV3t2rXTvHnz5O3tbR0bExOjF198UcEj3rvrenhEDAAARcd9v/3Bnj17dO7cOesrPDxckqx/3fbKK69o3bp1WrFihX744QfFxcXl2OAxKytLHTt21NWrVwulfgAAcO8pMmek/m7EiBFav369Tp48KbPZrNKlS2vZsmV68sknJUnHjx9XQECAIiIi1KxZM3377bfq1KmT4uLitOxQyl1/Pmekii52QgeA+4/ZbFaFChWUnJwsDw+PPJu3SN4jdfXqVS1ZskQjR46UyWTSvn37lJGRoeDgYOuYmjVrys/PzxqkIiIiVKdOnf+/1Hf3QQpFV15+gQAARcuFCxcIUmvWrFFycrL69+8vSYqPj5ejo6M8PT1zjPP29lZ8fLx1zPX7pTibdH9LSSFI4+au/x9rbGxsnt5DAaDwpaSkyM/PT15eXnk6b5EMUmFhYXr88cfl6+tb2KWgCOIHEv/E3d2d/06Ae5SdXd7eHl5kbja/7syZM9q0aZMGDhxobfPx8dHVq1eVnJycY2xCQoJ8fHysY65vlgkAAJAXilyQWrBggcqUKaOOHTta2xo2bCgHBwdt3rzZ2hYVFaWYmBgFBQVJkoKCgnT48GElJiYWeM0AAODeVKSCVHZ2thYsWKB+/frleCSIh4eHQkJCNHLkSG3dulX79u3TgAEDFBQUpGbNmkmS2rZtq1q1aqlPnz46ePCgvvvuO5UpU0b//ve/c1VDenq6Jk6cqPT09DxdG4DC5+TkpAkTJsjJyamwSwGQx/Lr+12ktj/4/vvv1a5dO0VFRal69Zw3jF/fkPPzzz/PsSHn9Ut70rXLgi+++KK2bdsmV1dX9evXT2+//TbPaQMAAIYUqSAFAABgS4rUpT0AAABbQpACAAAwiCAFAABgEEEKAADAIILUTcydO1f+/v5ydnZW06ZNtXv37luOXbVqlRo1aiRPT0+5uroqMDBQixcvLsBqAeRGbr7fCxculMlkyvFydnYuwGoB5EZuvt+tW7e+4fttMply7FN5JwhSf/PFF19o5MiRmjBhgvbv36969eqpXbt2t9zI08vLS6+//roiIiJ06NAhDRgwQAMGDNB3331XwJUD+Ce5/X5L1x4Xc+7cOevrzJkzBVgxgDuV2+/3qlWrcny3jxw5omLFiumpp57K3QdbkEOTJk0sQ4cOtb7Pysqy+Pr6WqZNm3bHc9SvX9/yxhtv5Ed5AO5Cbr/fCxYssHh4eBRQdQDuxt3+fr/33nsWNzc3S2pqaq4+lzNSf3H16lXt27dPwcHB1jY7OzsFBwcrIiLiH4+3WCzavHmzoqKi1KpVq/wsFUAuGf1+p6amqmLFiqpQoYL+9a9/6ejRowVRLoBcuNvfb0kKCwtTz5495erqmqvPJkj9xR9//KGsrCx5e3vnaPf29lZ8fPwtj0tJSVGJEiXk6Oiojh076oMPPtBjjz2W3+UCyAUj3+8aNWros88+09dff60lS5YoOztbzZs319mzZwuiZAB3yOjv93W7d+/WkSNHNHDgwFx/Ns9GyQNubm6KjIxUamqqNm/erJEjR6py5cpq3bp1YZcG4C4EBQVZH3wuSc2bN1dAQIA++ugjTZo0qRArA5CXwsLCVKdOHTVp0iTXxxKk/qJUqVIqVqyYEhIScrQnJCTkeGbf39nZ2alq1aqSpMDAQB07dkzTpk0jSAE2xOj3+68cHBxUv359nTp1Kj9KBGDQ3Xy/09LStHz5cr311luGPptLe3/h6Oiohg0bavPmzda27Oxsbd68Ocf/lf6T7Oxspaen50eJAAzKi+93VlaWDh8+rLJly+ZXmQAMuJvv94oVK5Senq7evXsb+mzOSP3NyJEj1a9fPzVq1EhNmjTR+++/r7S0NA0YMECS1LdvX5UrV07Tpk2TJE2bNk2NGjVSlSpVlJ6erg0bNmjx4sX68MMPC3MZAG4it9/vt956S82aNVPVqlWVnJysmTNn6syZM4buowCQv3L7/b4uLCxMXbp00QMPPGDocwlSf9OjRw+dP39eoaGhio+PV2BgoDZu3Gi9gS0mJkZ2dv87kZeWlqYhQ4bo7NmzcnFxUc2aNbVkyRL16NGjsJYA4BZy+/2+ePGiBg0apPj4eJUsWVINGzbUzz//rFq1ahXWEgDcQm6/35IUFRWlHTt26Pvvvzf8uSaLxWK5q8oBAADuU9wjBQAAYBBBCgAAwCCCFAAAgEEEKQAAAIMIUgAAAAYRpAAAAAwiSAEAABhEkAIAADCIIAUAAGAQQQrAfS0zM7OwSwBQhBGkANw3oqOjZTKZ9OWXX6ply5ZycnLS2rVrC7ssAEUYDy0GcN84ePCgJGnmzJmaOnWqKlWqpNKlSxdyVQCKMoIUgPtGZGSkXF1dtWLFCvn7+0uStmzZogMHDmjUqFGFWxyAIslksVgshV0EABSEbt26ydnZWcuWLSvsUgDcI7hHCsB9IzIyUq1bt87R1rlzZx0+fFiS1KFDB4WGhqpFixaqXLmyjhw5ol27dumJJ56wjt+4caP69OlTkGUDsGEEKQD3BbPZrOjoaNWvXz9H+/Hjx1WzZk1J0pEjR+Tn56effvpJL730kr7++msFBAQoKirKOn7SpEkKDQ0t0NoB2C7ukQJwXzh48KCKFSumOnXqWNsuXbokZ2dnOTg4yGw2y2QyaeDAgZKkjIwMeXp6yt3dXVevXlVGRobCw8NVrVo1VatWrbCWAcDGcEYKwH3h4MGDqlGjhpydna1tR48eVe3atSVdOxvVuHFja9/hw4etfdWqVdOpU6c0efJkjR8/vmALB2DTCFIA7gvDhg3TkSNHcrQdPnzYeobqyJEjqlev3k37AgIC9J///EcBAQGqUqVKwRUNwOZxaQ/Afevw4cMKDg6WdC1IPfroo5Ku7XaenJysBx54QNK1IPXyyy/nuFcKACS2PwAAADCMS3sAAAAGEaQAAAAMIkgBAAAYRJACAAAwiCAFAABgEEEKAADAIIIUAACAQQQpAAAAgwhSAAAABhGkAAAADCJIAQAAGPR/NfAvk/JgrIEAAAAASUVORK5CYII="
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "execution_count": 18
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "536dfb070e3ea74"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/save_final_models.py b/notebooks/save_final_models.py
new file mode 100644
index 0000000000000000000000000000000000000000..e239a15dc0e00cb5ca3d33abd7e6968fde74fcc9
--- /dev/null
+++ b/notebooks/save_final_models.py
@@ -0,0 +1,63 @@
+# This script saves the final model weights in the "models/" directory, ready for upload to HF
+
+final_models = [
+ # dataset, loss, run name, step
+ # GP_IRC_SN
+ ["900_03", "GP_IRC_SN", "Delphes_Aug_IRCSplit_50k_SN_from3kFT_2025_05_16_14_07_29_474", 21060],
+ ["QCD", "GP_IRC_SN", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_24_23_00_54_948", 24000],
+ ["700_07+900_03+QCD", "GP_IRC_SN", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_24_23_00_56_910", 24000],
+ ["700_07+900_03", "GP_IRC_SN", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_24_23_01_01_212", 24000],
+ ["700_07", "GP_IRC_SN", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_24_23_01_07_703", 24000],
+
+ # GP_IRC_S
+ ["700_07+900_03", "GP_IRC_S", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_20_15_29_30_29", 24000],
+ ["700_07+900_03+QCD", "GP_IRC_S", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_20_15_29_28_959", 24000],
+ ["700_07", "GP_IRC_S", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_20_15_11_35_476", 24000],
+ ["QCD", "GP_IRC_S", "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_20_15_11_20_735", 24000],
+ ["900_03", "GP_IRC_S", "Delphes_Aug_IRCSplit_50k_from10k_2025_05_11_14_08_49_675", 9960],
+
+ # GP
+ ["900_03", "GP", "LGATr_Aug_50k_2025_05_09_15_25_32_34", 24000],
+ ["700_07", "GP", "GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_19_21_38_20_376", 24000],
+ ["700_07+900_03", "GP", "GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_20_13_13_00_503", 24000],
+ ["700_07+900_03+QCD", "GP", "GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_20_13_12_54_359", 24000],
+ ["QCD", "GP", "GP_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_19_21_29_06_946", 24000],
+
+ # Base training
+ ["900_03", "base", "LGATr_training_NoPID_Delphes_PU_PFfix_10_16_64_0.8_2025_05_03_18_35_53_134", 50000],
+ ["700_07", "base", "LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_16_19_44_46_795", 50000],
+ ["QCD", "base", "LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_16_19_46_57_48", 50000],
+ ["700_07+900_03", "base", "LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_16_21_04_26_991", 50000],
+ ["700_07+900_03+QCD", "base", "LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_16_21_04_26_937", 50000]
+]
+
+
+
+import os
+import shutil
+def get_run_step_direct(run_name, step):
+ # get the step of the run directly
+ p = os.path.join("/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/results/train", run_name)
+ lst = os.listdir(p)
+ lst = [x for x in lst if x.endswith(".ckpt")] # files are of format step_x_epoch_y.ckpt
+ steps = [int(x.split("_")[1]) for x in lst]
+ if step not in steps:
+ print("Available steps:", steps)
+ raise Exception("Step not found in run")
+ full_path = os.path.join(p, [x for x in lst if int(x.split("_")[1]) == step][0])
+ return full_path
+
+if not os.path.exists("models"):
+ os.makedirs("models")
+
+for model in final_models:
+ print(model)
+ dataset, loss, run_name, step = model
+ if not os.path.exists(os.path.join("models", loss)):
+ os.makedirs("models/" + loss)
+ p = get_run_step_direct(run_name, step)
+ # copy p to models/loss/dataset.ckpt
+ dst_path = f"models/{loss}/{dataset}.ckpt"
+ shutil.copyfileobj(open(p, "rb"), open(dst_path, "wb"))
+ print("Copied", p, "to", dst_path)
+
diff --git a/notebooks/wandb_cmd_gen.ipynb b/notebooks/wandb_cmd_gen.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..4fb688a7c1f0211644859dea61ca75976c41b8b1
--- /dev/null
+++ b/notebooks/wandb_cmd_gen.ipynb
@@ -0,0 +1,102 @@
+{
+ "cells": [
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-05T11:03:51.160379Z",
+ "start_time": "2025-03-05T11:03:51.154906Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "import wandb\n",
+ "id": "838f9f3375b3ef06",
+ "outputs": [],
+ "execution_count": 19
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-05T14:24:29.277738Z",
+ "start_time": "2025-03-05T14:24:29.041133Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# select wandb runs with a tag 'no_pid_eval'\n",
+ "runs = wandb.Api().runs(\"fcc_ml/svj_clustering\", {\"tags\": \"no_pid_eval_1\"})"
+ ],
+ "id": "f7dd12c142a7f496",
+ "outputs": [],
+ "execution_count": 27
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-05T14:24:31.314623Z",
+ "start_time": "2025-03-05T14:24:31.306493Z"
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "template = \"python -m scripts.compute_clustering --output-suffix hdbscan_pt_min --min-samples 4 --epsilon 0.2 --spatial-part-only --pt-hdbscan --input train/{}\"\n",
+ "template = \"python -m scripts.compute_clustering --output-suffix hdbscan_4_05 --min-samples 2 --epsilon 0.5 --min-cluster-size 4 --spatial-part-only --input train/{}\"\n",
+ "\n",
+ "# format with run.config.run_name and print it\n",
+ "for run in runs:\n",
+ " print(template.format(run.config[\"run_name\"]))"
+ ],
+ "id": "7a767d8b7bf962d6",
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "python -m scripts.compute_clustering --output-suffix hdbscan_4_05 --min-samples 2 --epsilon 0.5 --min-cluster-size 4 --spatial-part-only --input train/Eval_no_pid_eval_1_2025_03_05_14_35_14\n",
+ "python -m scripts.compute_clustering --output-suffix hdbscan_4_05 --min-samples 2 --epsilon 0.5 --min-cluster-size 4 --spatial-part-only --input train/Eval_no_pid_eval_1_2025_03_05_14_36_15\n",
+ "python -m scripts.compute_clustering --output-suffix hdbscan_4_05 --min-samples 2 --epsilon 0.5 --min-cluster-size 4 --spatial-part-only --input train/Eval_no_pid_eval_1_2025_03_05_14_37_53\n",
+ "python -m scripts.compute_clustering --output-suffix hdbscan_4_05 --min-samples 2 --epsilon 0.5 --min-cluster-size 4 --spatial-part-only --input train/Eval_no_pid_eval_1_2025_03_05_14_40_26\n",
+ "python -m scripts.compute_clustering --output-suffix hdbscan_4_05 --min-samples 2 --epsilon 0.5 --min-cluster-size 4 --spatial-part-only --input train/Eval_no_pid_eval_1_2025_03_05_14_40_27\n",
+ "python -m scripts.compute_clustering --output-suffix hdbscan_4_05 --min-samples 2 --epsilon 0.5 --min-cluster-size 4 --spatial-part-only --input train/Eval_no_pid_eval_1_2025_03_05_14_40_30\n",
+ "python -m scripts.compute_clustering --output-suffix hdbscan_4_05 --min-samples 2 --epsilon 0.5 --min-cluster-size 4 --spatial-part-only --input train/Eval_no_pid_eval_1_2025_03_05_14_40_31\n",
+ "python -m scripts.compute_clustering --output-suffix hdbscan_4_05 --min-samples 2 --epsilon 0.5 --min-cluster-size 4 --spatial-part-only --input train/Eval_no_pid_eval_1_2025_03_05_14_40_34\n",
+ "python -m scripts.compute_clustering --output-suffix hdbscan_4_05 --min-samples 2 --epsilon 0.5 --min-cluster-size 4 --spatial-part-only --input train/Eval_no_pid_eval_1_2025_03_05_14_41_16\n",
+ "python -m scripts.compute_clustering --output-suffix hdbscan_4_05 --min-samples 2 --epsilon 0.5 --min-cluster-size 4 --spatial-part-only --input train/Eval_no_pid_eval_1_2025_03_05_14_41_17\n",
+ "python -m scripts.compute_clustering --output-suffix hdbscan_4_05 --min-samples 2 --epsilon 0.5 --min-cluster-size 4 --spatial-part-only --input train/Eval_no_pid_eval_1_2025_03_05_14_41_37\n",
+ "python -m scripts.compute_clustering --output-suffix hdbscan_4_05 --min-samples 2 --epsilon 0.5 --min-cluster-size 4 --spatial-part-only --input train/Eval_no_pid_eval_1_2025_03_05_14_41_38\n"
+ ]
+ }
+ ],
+ "execution_count": 28
+ },
+ {
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2025-03-05T10:20:46.766093Z",
+ "start_time": "2025-03-05T10:20:46.761733Z"
+ }
+ },
+ "cell_type": "code",
+ "source": "",
+ "id": "4ec0759210f54f7b",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null,
+ "source": "",
+ "id": "ec30742e27c7207e"
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "name": "python3",
+ "language": "python",
+ "display_name": "Python 3 (ipykernel)"
+ }
+ },
+ "nbformat": 5,
+ "nbformat_minor": 9
+}
diff --git a/notebooks/wandb_runs.py b/notebooks/wandb_runs.py
new file mode 100644
index 0000000000000000000000000000000000000000..c8f72fd61fb0940ee1785760ac0f9b2a484ffbaf
--- /dev/null
+++ b/notebooks/wandb_runs.py
@@ -0,0 +1,39 @@
+import wandb
+import pandas as pd
+
+# Authenticate with wandb
+wandb.login()
+
+# Define your entity and project name
+entity = "fcc_ml" # replace with your entity
+project = "mlpf_debug" # replace with your project name
+
+# Initialize the wandb API
+api = wandb.Api()
+
+# Fetch the runs for the given project
+runs = api.runs(f"{entity}/{project}")
+
+# Extract required information
+data = []
+for run in runs:
+ run_name = run.name
+ run_url = run.url
+ print(dir(run))
+ 1/0
+ run_command = run.command #run.config.get('command', 'No command specified') # Assumes 'command' is a config parameter
+
+ data.append({
+ "Run Name": run_name,
+ "Run URL": run_url,
+ "Run Command": run_command
+ })
+
+# Create a DataFrame
+df = pd.DataFrame(data)
+
+# Print the DataFrame
+print(df)
+
+# Optionally, save to a CSV file
+df.to_csv("/eos/home-g/gkrzmanc/wandb_runs.csv", index=False)
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..872c63e8ebd9b632e6b93f72edad0c0de076b1b6
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,162 @@
+absl-py==2.1.0
+aiofiles==24.1.0
+aiohappyeyeballs==2.4.4
+aiohttp==3.11.11
+aiosignal==1.3.2
+alembic==1.14.0
+annotated-types==0.7.0
+anyio==4.9.0
+async-timeout==5.0.1
+attrdict==2.0.1
+attrs==24.3.0
+awkward==2.7.2
+awkward0==0.15.5
+awkward_cpp==43
+axial_positional_embedding==0.3.4
+blosc2==2.7.1
+certifi==2024.12.14
+charset-normalizer==3.4.1
+click==8.1.8
+clifford==1.4.0
+colorlog==6.9.0
+contourpy==1.3.1
+cramjam==2.9.1
+cycler==0.12.1
+dgl==2.1.0+cu118
+docker-pycreds==0.4.0
+einops==0.8.0
+exceptiongroup==1.3.0
+fastapi==0.115.12
+fastjet==3.4.3.1
+ffmpy==0.5.0
+filelock==3.13.1
+fonttools==4.55.3
+frozenlist==1.5.0
+fsspec==2024.2.0
+gitdb==4.0.12
+GitPython==3.1.44
+gradio==5.32.0
+gradio_client==1.10.2
+greenlet==3.1.1
+groovy==0.1.2
+grpcio==1.69.0
+h11==0.16.0
+h5py==3.12.1
+hdbscan==0.8.40
+hf-xet==1.1.2
+httpcore==1.0.9
+httpx==0.28.1
+huggingface-hub==0.32.3
+idna==3.10
+importlib_metadata==8.5.0
+Jinja2==3.1.3
+joblib==1.4.2
+kiwisolver==1.4.8
+lightning-utilities==0.11.9
+littleutils==0.2.4
+llvmlite==0.41.1
+local-attention==1.9.15
+lz4==4.3.3
+Mako==1.3.8
+Markdown==3.7
+markdown-it-py==3.0.0
+MarkupSafe==2.1.5
+matplotlib==3.10.0
+mdurl==0.1.2
+mpmath==1.3.0
+msgpack==1.1.0
+multidict==6.1.0
+ndindex==1.9.2
+networkx==3.2.1
+numba==0.58.1
+numexpr==2.10.2
+numpy==1.24.4
+nvidia-cublas-cu11==11.11.3.6
+nvidia-cuda-cupti-cu11==11.8.87
+nvidia-cuda-nvrtc-cu11==11.8.89
+nvidia-cuda-runtime-cu11==11.8.89
+nvidia-cudnn-cu11==9.1.0.70
+nvidia-cufft-cu11==10.9.0.58
+nvidia-curand-cu11==10.3.0.86
+nvidia-cusolver-cu11==11.4.1.48
+nvidia-cusparse-cu11==11.7.5.86
+nvidia-nccl-cu11==2.21.5
+nvidia-nvtx-cu11==11.8.86
+ogb==1.3.6
+opt_einsum @ git+https://github.com/dgasmith/opt_einsum.git@1a984b7b75f3e532e7129f6aa13f7ddc3da66e10
+optuna==4.1.0
+orjson==3.10.18
+outdated==0.2.2
+packaging==24.2
+pandas==2.2.3
+performer-pytorch==1.1.4
+pillow==10.2.0
+platformdirs==4.3.6
+plotly==5.24.1
+propcache==0.2.1
+protobuf==5.29.2
+psutil==6.1.1
+py-cpuinfo==9.0.0
+pydantic==2.10.4
+pydantic_core==2.27.2
+pydub==0.25.1
+pyg-lib==0.4.0+pt25cu118
+Pygments==2.19.1
+pyparsing==3.2.1
+python-dateutil==2.9.0.post0
+python-multipart==0.0.20
+pytorch-lightning==2.5.0.post0
+pytz==2024.2
+PyYAML==6.0.2
+requests==2.32.3
+rich==14.0.0
+ruff==0.11.12
+safehttpx==0.1.6
+scikit-learn==1.6.0
+scipy==1.15.0
+seaborn==0.13.2
+semantic-version==2.10.0
+sentry-sdk==2.19.2
+setproctitle==1.3.4
+shellingham==1.5.4
+six==1.17.0
+smmap==5.0.2
+sniffio==1.3.1
+sparse==0.15.4
+SQLAlchemy==2.0.37
+starlette==0.46.2
+sympy==1.13.1
+tables==3.10.1
+tenacity==9.0.0
+tensorboard==2.18.0
+tensorboard-data-server==0.7.2
+tensorboardX==2.6.2.2
+threadpoolctl==3.5.0
+tomlkit==0.13.2
+torch==2.5.1+cu118
+torch-geometric==2.6.1
+torch_cluster==1.6.3+pt25cu118
+torch_scatter==2.1.2+pt25cu118
+torch_sparse==0.6.18+pt25cu118
+torch_spline_conv==1.2.2+pt25cu118
+torchaudio==2.5.1+cu118
+torchdata==0.10.1
+torchmetrics==1.6.1
+torchvision==0.20.1+cu118
+tqdm==4.67.1
+triton==3.1.0
+typer==0.16.0
+typing_extensions==4.12.2
+tzdata==2024.2
+uproot==5.5.1
+urllib3==2.3.0
+uvicorn==0.34.2
+vector==1.5.2
+wandb==0.19.1
+websockets==15.0.1
+Werkzeug==3.1.3
+xformers==0.0.29.post1
+xxhash==3.5.0
+yacs==0.1.8
+yarl==1.18.3
+zipp==3.21.0
diff --git a/scripts/analysis/blueprint.py b/scripts/analysis/blueprint.py
new file mode 100644
index 0000000000000000000000000000000000000000..76f60891744ca990235035c4996aded7d7d30d97
--- /dev/null
+++ b/scripts/analysis/blueprint.py
@@ -0,0 +1,34 @@
+import os
+from tqdm import tqdm
+import argparse
+import numpy as np
+import pandas as pd
+import pickle
+from src.dataset.get_dataset import get_iter
+from src.utils.paths import get_path
+from pathlib import Path
+
+# This script attempts to open dataset files and prints the number of events in each one.
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--input", type=str, required=True)
+parser.add_argument("--dataset-cap", type=int, default=-1)
+parser.add_argument("--output", type=str, default="")
+parser.add_argument("--plot-only", action="store_true")
+
+args = parser.parse_args()
+path = get_path(args.input, "preprocessed_data")
+if args.output == "":
+ args.output = args.input
+output_path = os.path.join(get_path(args.output, "results"), "analysis_name")
+Path(output_path).mkdir(parents=True, exist_ok=True)
+
+if not args.plot_only:
+ pass
+ # Do some computations here
+ # pickle.dump(result, open(os.path.join(output_path, "result.pkl"), "wb"))
+#if args.plot_only:
+# result = pickle.load(open(os.path.join(output_path, "result.pkl"), "rb"))
+
+import matplotlib.pyplot as plt
+# Do some plotting here
diff --git a/scripts/analysis/count_matched_quarks.py b/scripts/analysis/count_matched_quarks.py
new file mode 100644
index 0000000000000000000000000000000000000000..425aaf93b4b3142caf20449b1c346de1952330d5
--- /dev/null
+++ b/scripts/analysis/count_matched_quarks.py
@@ -0,0 +1,671 @@
+import os
+from tqdm import tqdm
+import argparse
+import numpy as np
+import pandas as pd
+import pickle
+import torch
+import time
+from src.utils.utils import CPU_Unpickler
+from src.dataset.get_dataset import get_iter
+from src.plotting.eval_matrix import matrix_plot
+from src.utils.paths import get_path
+from pathlib import Path
+import matplotlib.pyplot as plt
+from src.dataset.dataset import EventDataset
+
+# This script attempts to open dataset files and prints the number of events in each one.
+R = 0.8
+
+parser = argparse.ArgumentParser()
+
+parser.add_argument("--input", type=str, required=True)
+parser.add_argument("--dataset-cap", type=int, default=-1)
+parser.add_argument("--output", type=str, default="")
+parser.add_argument("--augment-soft-particles", "-aug-soft", action="store_true")
+parser.add_argument("--plot-only", action="store_true")
+parser.add_argument("--jets-object", type=str, default="fatjets")
+parser.add_argument("--eval-dir", type=str, default="")
+parser.add_argument("--clustering-suffix", type=str, default="") # default: 1020, also want to try 1010 or others...?
+parser.add_argument("--pt-jet-cutoff", type=float, default=100.0)
+
+parser.add_argument("--high-eta-only", action="store_true") # eta > 1.5 quarks only
+parser.add_argument("--low-eta-only", action="store_true") # eta < 1.5 quarks only
+
+
+
+parser.add_argument("--parton-level", "-pl", action="store_true") # To be used together with 'fastjet_jets'
+parser.add_argument("--gen-level", "-gl", action="store_true")
+
+
+args = parser.parse_args()
+path = get_path(args.input, "preprocessed_data")
+
+import wandb
+api = wandb.Api()
+
+def get_run_by_name(name):
+ runs = api.runs(
+ path="fcc_ml/svj_clustering",
+ filters={"display_name": {"$eq": name.strip()}}
+ )
+ runs = api.runs(
+ path="fcc_ml/svj_clustering",
+ filters={"display_name": {"$eq": name.strip()}}
+ )
+
+ if runs.length != 1:
+ return None
+ return runs[0]
+
+
+def resolve_preproc_data_path(path):
+ rel_path = path.split("/preprocessed_data/")[-1]
+ return get_path(rel_path, "preprocessed_data")
+
+
+if args.eval_dir:
+ eval_dir = get_path(args.eval_dir, "results", fallback=True)
+ dataset_path_to_eval_file = {}
+ top_folder_name = eval_dir.split("/")[-1]
+ config = get_run_by_name(top_folder_name).config
+ for file in os.listdir(eval_dir):
+ if file.startswith("eval_") and file.endswith(".pkl"):
+ file_number = file.split("_")[1].split(".")[0]
+ clustering_file = "clustering_{}.pkl".format(file_number)
+ if args.clustering_suffix:
+ clustering_file = "clustering_{}_{}.pkl".format(args.clustering_suffix, file_number)
+ f = CPU_Unpickler(open(os.path.join(eval_dir, file), "rb")).load()
+ clustering_file = os.path.join(eval_dir, clustering_file)
+ if "model_cluster" in f and not args.clustering_suffix:
+ clustering_file = None
+ dataset_path_to_eval_file[resolve_preproc_data_path(f["filename"])] = [os.path.join(eval_dir, file), clustering_file]
+ print(dataset_path_to_eval_file)
+
+if args.output == "":
+ args.output = args.input
+
+output_path = os.path.join(get_path(args.output, "results"), "count_matched_quarks")
+Path(output_path).mkdir(parents=True, exist_ok=True)
+
+def get_bc_scores_for_jets(event):
+ scores = event.pfcands.bc_scores_pfcands
+ clusters = event.pfcands.bc_labels_pfcands
+ selected_clusters_idx = torch.where(event.model_jets.pt > 100)[0]
+ result = []
+ for c in selected_clusters_idx:
+ result.append(scores[clusters == c.item()])
+ return result
+
+def calculate_m(objects, mt=False):
+ # set a mask returning only the two highest pt jets
+ mask = objects.pt.argsort(descending=True)[:2]
+ total_E = objects.E[mask].sum()
+ total_pxyz = objects.pxyz[mask].sum(dim=0)
+ if mt:
+ return np.sqrt(total_E**2 - total_pxyz[0]**2 - total_pxyz[1]**2).item()
+ return np.sqrt(total_E**2 - total_pxyz[2]**2 - total_pxyz[1]**2 - total_pxyz[0]**2).item()
+
+thresholds = np.linspace(0.1, 1, 20)
+# also add 100 points between 0 and 0.1 at the beginning
+thresholds = np.concatenate([np.linspace(0, 0.1, 100), thresholds])
+
+def get_mc_gt_per_event(event):
+ # get the monte carlo GT pt for the event. This is pt of the particles closer than 0.8 to each of the dark quarks
+ result = []
+ dq = [event.matrix_element_gen_particles.eta, event.matrix_element_gen_particles.phi]
+ for i in range(len(dq[0])):
+ dq_coords = [dq[0][i], dq[1][i]]
+ cone_filter = torch.sqrt((event.pfcands.eta - dq_coords[0])**2 + (event.pfcands.phi - dq_coords[1])**2) < 0.8
+ #cone_filter_special = torch.sqrt(
+ # (event.special_pfcands.eta - dq_coords[0]) ** 2 + (event.special_pfcands.phi - dq_coords[1]) ** 2) < R
+ eta_cone, phi_cone, pt_cone = event.pfcands.eta[cone_filter], event.pfcands.phi[cone_filter], event.pfcands.pt[cone_filter]
+ px_cone = torch.sum(pt_cone * np.cos(phi_cone))
+ py_cone = torch.sum(pt_cone * np.sin(phi_cone))
+ pz_cone = torch.sum(pt_cone * np.sinh(eta_cone))
+ pt_cone = torch.sqrt(px_cone**2 + py_cone**2)
+ result.append(pt_cone.item())
+ return result
+
+if not args.plot_only:
+ n_matched_quarks = {}
+ unmatched_quarks = {}
+ n_fake_jets = {} # Number of jets that have not been matched to a quark
+ bc_scores_matched = {}
+ bc_scores_unmatched = {}
+ precision_and_recall = {} # Array of [n_relevant_retrieved, all_retrieved, all_relevant], or in our language, [n_matched_dark_quarks, n_jets, n_dark_quarks]
+ precision_and_recall_fastjets = {}
+ pr_obj_score_thresholds = {} # same as precision_and_recall, except it gives a dictionary instead of the array, and the keys are the thresholds for objectness score
+ mass_resolution = {} # Contains {'m_true': [], 'm_pred': [], 'mt_true': [], 'mt_pred': []} # mt = transverse mass, m = invariant mass
+ matched_jet_properties = {} # contains {'pt_gen_particle': [], 'pt_mc_truth': [], 'pt_pred': [], 'eta_gen_particle': [], 'eta_mc_truth': [], 'eta_pred': [], 'phi_gen_particle': [], 'phi_mc_truth': [], 'phi_pred': []}
+ matched_jet_properties_fastjets = {}
+ is_dq_matched_per_event = {}
+ dq_pt_per_event = {}
+ gt_pt_per_event = {}
+ gt_props_per_event = {"eta": {}, "phi": {}}
+ print("LISTING DIRECTORY", path, ":", os.listdir(path))
+ for subdataset in os.listdir(path):
+ print("-----", subdataset, "-----")
+ current_path = os.path.join(path, subdataset)
+ model_clusters_file = None
+ model_output_file = None
+ if subdataset not in precision_and_recall:
+ precision_and_recall[subdataset] = [0, 0, 0]
+ precision_and_recall_fastjets[subdataset] = {}
+ matched_jet_properties_fastjets[subdataset] = {}
+ is_dq_matched_per_event[subdataset] = []
+ dq_pt_per_event[subdataset] = []
+ gt_pt_per_event[subdataset] = []
+ if args.jets_object == "fastjet_jets":
+ is_dq_matched_per_event[subdataset] = {}
+ dq_pt_per_event[subdataset] = {}
+ gt_pt_per_event[subdataset] = {}
+ for key in gt_props_per_event:
+ if subdataset not in gt_props_per_event[key]:
+ gt_props_per_event[key][subdataset] = {}
+ else:
+ for key in gt_props_per_event:
+ if subdataset not in gt_props_per_event[key]:
+ gt_props_per_event[key][subdataset] = []
+ pr_obj_score_thresholds[subdataset] = {}
+ for i in range(len(thresholds)):
+ pr_obj_score_thresholds[subdataset][i] = [0, 0, 0]
+ if subdataset not in mass_resolution:
+ mass_resolution[subdataset] = {'m_true': [], 'm_pred': [], 'mt_true': [], 'mt_pred': [], 'n_jets': []}
+ if args.eval_dir:
+ if current_path not in dataset_path_to_eval_file:
+ print("Skipping", current_path)
+ print(dataset_path_to_eval_file)
+ continue
+ model_clusters_file = dataset_path_to_eval_file[current_path][1]
+ model_output_file = dataset_path_to_eval_file[current_path][0]
+ #dataset = get_iter(current_path, model_clusters_file=model_clusters_file, model_output_file=model_output_file,
+ # include_model_jets_unfiltered=True)
+ fastjet_R = None
+ if args.jets_object == "fastjet_jets":
+ fastjet_R = np.array([0.8])
+ config = {"parton_level": args.parton_level, "gen_level": args.gen_level}
+ print("Config:", config)
+ dataset = EventDataset.from_directory(current_path, model_clusters_file=model_clusters_file,
+ model_output_file=model_output_file,
+ include_model_jets_unfiltered=True, fastjet_R=fastjet_R,
+ parton_level=config.get("parton_level", False), gen_level=config.get("gen_level", False),
+ aug_soft=args.augment_soft_particles, seed=1000000, pt_jet_cutoff=args.pt_jet_cutoff)
+ n = 0
+ for x in tqdm(range(len(dataset))):
+ data = dataset[x]
+ if data is None:
+ print("Skipping", x)
+ continue
+ #try:
+ # data = dataset[x]
+ #except:
+ # print("Exception")
+ # break # skip this event
+ jets_object = data.__dict__[args.jets_object]
+ n += 1
+ if args.dataset_cap != -1 and n > args.dataset_cap:
+ break
+ if args.high_eta_only and torch.max(torch.abs(data.matrix_element_gen_particles.eta)) < 1.5:
+ continue
+ if args.low_eta_only and torch.max(torch.abs(data.matrix_element_gen_particles.eta)) > 1.5:
+ continue
+ if not args.jets_object == "fastjet_jets":
+ jets = [jets_object.eta, jets_object.phi]
+ dq = [data.matrix_element_gen_particles.eta, data.matrix_element_gen_particles.phi]
+ # calculate deltaR between each jet and each quark
+ distance_matrix = np.zeros((len(jets_object), len(data.matrix_element_gen_particles)))
+ for i in range(len(jets_object)):
+ for j in range(len(data.matrix_element_gen_particles)):
+ deta = jets[0][i] - dq[0][j]
+ dphi = abs(jets[1][i] - dq[1][j])
+ if dphi > np.pi:
+ dphi -= 2 * np.pi #- dphi
+ distance_matrix[i, j] = np.sqrt(deta**2 + dphi**2)
+ # row-wise argmin
+ distance_matrix = distance_matrix.T
+ #min_distance = np.min(distance_matrix, axis=1)
+ n_jets = len(jets_object)
+ precision_and_recall[subdataset][1] += n_jets
+ precision_and_recall[subdataset][2] += len(data.matrix_element_gen_particles)
+ if "obj_score" in jets_object.__dict__:
+ print("Also evaluating using objectness score")
+ for i in range(len(thresholds)):
+ filt = torch.sigmoid(jets_object.obj_score) >= thresholds[i]
+ pr_obj_score_thresholds[subdataset][i][1] += torch.sum(filt).item()
+ pr_obj_score_thresholds[subdataset][i][2] += len(data.matrix_element_gen_particles)
+ mass_resolution[subdataset]['m_true'].append(calculate_m(data.matrix_element_gen_particles))
+ mass_resolution[subdataset]['m_pred'].append(calculate_m(jets_object))
+ mass_resolution[subdataset]['mt_true'].append(calculate_m(data.matrix_element_gen_particles, mt=True))
+ mass_resolution[subdataset]['mt_pred'].append(calculate_m(jets_object, mt=True))
+ mass_resolution[subdataset]['n_jets'].append(n_jets)
+ if len(jets_object):
+ if subdataset not in matched_jet_properties:
+ matched_jet_properties[subdataset] = {'pt_gen_particle': [], 'pt_mc_truth': [], 'pt_pred': [],
+ 'eta_gen_particle': [], 'eta_pred': [],
+ 'phi_gen_particle': [], 'phi_pred': []}
+ quark_to_jet = np.min(distance_matrix, axis=1)
+ quark_to_jet_idx = np.argmin(distance_matrix, axis=1)
+ quark_to_jet[quark_to_jet > R] = -1
+ n_matched_quarks[subdataset] = n_matched_quarks.get(subdataset, []) + [np.sum(quark_to_jet != -1)]
+ n_fake_jets[subdataset] = n_fake_jets.get(subdataset, []) + [n_jets - np.sum(quark_to_jet != -1)]
+ f = quark_to_jet != -1
+ matched_jet_properties[subdataset]["pt_gen_particle"] += data.matrix_element_gen_particles.pt[f].tolist()
+ matched_jet_properties[subdataset]["pt_pred"] += jets_object.pt[quark_to_jet_idx[f]].tolist()
+ matched_jet_properties[subdataset]["eta_gen_particle"] += data.matrix_element_gen_particles.eta[f].tolist()
+ matched_jet_properties[subdataset]["eta_pred"] += jets_object.eta[quark_to_jet_idx[f]].tolist()
+ matched_jet_properties[subdataset]["phi_gen_particle"] += data.matrix_element_gen_particles.phi[f].tolist()
+ matched_jet_properties[subdataset]["phi_pred"] += jets_object.phi[quark_to_jet_idx[f]].tolist()
+ precision_and_recall[subdataset][0] += np.sum(quark_to_jet != -1)
+
+ if "obj_score" in jets_object.__dict__:
+ for i in range(len(thresholds)):
+ filt = torch.sigmoid(jets_object.obj_score) >= thresholds[i]
+ dist_matrix_filt = distance_matrix[:, filt.numpy()]
+ if filt.sum() == 0:
+ continue
+ quark_to_jet_filt = np.min(dist_matrix_filt, axis=1)
+ quark_to_jet_filt[quark_to_jet_filt > R] = -1
+ pr_obj_score_thresholds[subdataset][i][0] += np.sum(quark_to_jet_filt != -1)
+ filt = quark_to_jet == -1
+ #if args.jets_object == "model_jets":
+ #matched_jet_idx = sorted(np.argmin(distance_matrix, axis=1)[quark_to_jet != -1])
+ #unmatched_jet_idx = sorted(list(set(list(range(n_jets))) - set(matched_jet_idx)))
+ #scores = get_bc_scores_for_jets(data)
+ #for i in matched_jet_idx:
+ # bc_scores_matched[subdataset] = bc_scores_matched.get(subdataset, []) + [torch.mean(scores[i]).item()]
+ #for i in unmatched_jet_idx:
+ # bc_scores_unmatched[subdataset] = bc_scores_unmatched.get(subdataset, []) + [torch.mean(scores[i]).item()]
+ else:
+ n_matched_quarks[subdataset] = n_matched_quarks.get(subdataset, []) + [0]
+ n_fake_jets[subdataset] = n_fake_jets.get(subdataset, []) + [n_jets]
+ filt = torch.ones(len(data.matrix_element_gen_particles)).bool()
+ quark_to_jet = torch.ones(len(data.matrix_element_gen_particles)).long() * -1
+ is_dq_matched_per_event[subdataset].append(quark_to_jet.tolist())
+ dq_pt_per_event[subdataset].append(data.matrix_element_gen_particles.pt.tolist())
+ gt_pt_per_event[subdataset].append(get_mc_gt_per_event(data))
+ gt_props_per_event["eta"][subdataset].append(data.matrix_element_gen_particles.eta.tolist())
+ gt_props_per_event["phi"][subdataset].append(data.matrix_element_gen_particles.phi.tolist())
+ if subdataset not in unmatched_quarks:
+ unmatched_quarks[subdataset] = {"pt": [], "eta": [], "phi": [], "pt_all": [], "frac_evt_E_matched": [], "frac_evt_E_unmatched": []}
+ unmatched_quarks[subdataset]["pt"] += data.matrix_element_gen_particles.pt[filt].tolist()
+ unmatched_quarks[subdataset]["pt_all"] += data.matrix_element_gen_particles.pt.tolist()
+ unmatched_quarks[subdataset]["eta"] += data.matrix_element_gen_particles.eta[filt].tolist()
+ unmatched_quarks[subdataset]["phi"] += data.matrix_element_gen_particles.phi[filt].tolist()
+ visible_E_event = torch.sum(data.pfcands.E) #+ torch.sum(data.special_pfcands.E)
+ matched_quarks = np.where(quark_to_jet != -1)[0]
+ for i in range(len(data.matrix_element_gen_particles)):
+ dq_coords = [dq[0][i], dq[1][i]]
+ cone_filter = torch.sqrt((data.pfcands.eta - dq_coords[0])**2 + (data.pfcands.phi - dq_coords[1])**2) < R
+ #cone_filter_special = torch.sqrt(
+ # (data.special_pfcands.eta - dq_coords[0]) ** 2 + (data.special_pfcands.phi - dq_coords[1]) ** 2) < R
+ E_in_cone = data.pfcands.E[cone_filter].sum()# + data.special_pfcands.E[cone_filter_special].sum()
+ if i in matched_quarks:
+ unmatched_quarks[subdataset]["frac_evt_E_matched"].append(E_in_cone / visible_E_event)
+ else:
+ unmatched_quarks[subdataset]["frac_evt_E_unmatched"].append(E_in_cone / visible_E_event)
+ #print("Number of matched quarks:", np.sum(quark_to_jet != -1))
+ else:
+ for key in jets_object:
+ jets = [jets_object[key].eta, jets_object[key].phi]
+ dq = [data.matrix_element_gen_particles.eta, data.matrix_element_gen_particles.phi]
+ # calculate deltaR between each jet and each quark
+ distance_matrix = np.zeros((len(jets_object[key]), len(data.matrix_element_gen_particles)))
+ for i in range(len(jets_object[key])):
+ for j in range(len(data.matrix_element_gen_particles)):
+ deta = jets[0][i] - dq[0][j]
+ dphi = abs(jets[1][i] - dq[1][j])
+ if dphi > np.pi:
+ dphi -= 2 * np.pi
+ #elif dphi < -np.pi:
+ # dphi += 2 * np.pi
+ assert abs(dphi) <= np.pi, "dphi is not in [-pi, pi] range: {}".format(dphi)
+ distance_matrix[i, j] = np.sqrt(deta ** 2 + dphi ** 2)
+ # Row-wise argmin
+ distance_matrix = distance_matrix.T
+ # min_distance = np.min(distance_matrix, axis=1)
+ n_jets = len(jets_object[key])
+ if key not in precision_and_recall_fastjets[subdataset]:
+ precision_and_recall_fastjets[subdataset][key] = [0, 0, 0]
+ if key not in matched_jet_properties_fastjets[subdataset]:
+ is_dq_matched_per_event[subdataset][key] = []
+ dq_pt_per_event[subdataset][key] = []
+ gt_pt_per_event[subdataset][key] = []
+ for prop in gt_props_per_event:
+ if key not in gt_props_per_event[prop][subdataset]:
+ gt_props_per_event[prop][subdataset][key] = []
+ matched_jet_properties_fastjets[subdataset][key] = {"pt_gen_particle": [], "pt_pred": [],
+ "eta_gen_particle": [], "eta_pred": [],
+ "phi_gen_particle": [], "phi_pred": []}
+ precision_and_recall_fastjets[subdataset][key][1] += n_jets
+ precision_and_recall_fastjets[subdataset][key][2] += len(data.matrix_element_gen_particles)
+ if len(jets_object[key]):
+ quark_to_jet = np.min(distance_matrix, axis=1)
+ quark_to_jet_idx = np.argmin(distance_matrix, axis=1)
+ quark_to_jet[quark_to_jet > R] = -1
+ precision_and_recall_fastjets[subdataset][key][0] += np.sum(quark_to_jet != -1)
+ f = quark_to_jet != -1
+ matched_jet_properties_fastjets[subdataset][key]["pt_gen_particle"] += data.matrix_element_gen_particles.pt[f].tolist()
+ matched_jet_properties_fastjets[subdataset][key]["pt_pred"] += jets_object[key].pt[quark_to_jet_idx[f]].tolist()
+ matched_jet_properties_fastjets[subdataset][key]["eta_gen_particle"] += data.matrix_element_gen_particles.eta[f].tolist()
+ matched_jet_properties_fastjets[subdataset][key]["eta_pred"] += jets_object[key].eta[quark_to_jet_idx[f]].tolist()
+ matched_jet_properties_fastjets[subdataset][key]["phi_gen_particle"] += data.matrix_element_gen_particles.phi[f].tolist()
+ matched_jet_properties_fastjets[subdataset][key]["phi_pred"] += jets_object[key].phi[quark_to_jet_idx[f]].tolist()
+ else:
+ quark_to_jet = torch.ones(len(data.matrix_element_gen_particles)).long() * -1
+ is_dq_matched_per_event[subdataset][key].append(quark_to_jet.tolist())
+ dq_pt_per_event[subdataset][key].append(data.matrix_element_gen_particles.pt.tolist())
+ gt_pt_per_event[subdataset][key].append(get_mc_gt_per_event(data))
+ gt_props_per_event["eta"][subdataset][key].append(data.matrix_element_gen_particles.eta.tolist())
+ gt_props_per_event["phi"][subdataset][key].append(data.matrix_element_gen_particles.phi.tolist())
+ avg_n_matched_quarks = {}
+ avg_n_fake_jets = {}
+ for key in n_matched_quarks:
+ avg_n_matched_quarks[key] = np.mean(n_matched_quarks[key])
+ avg_n_fake_jets[key] = np.mean(n_fake_jets[key])
+ def get_properties(name):
+ if "qcd" in name.lower():
+ print("QCD file! Not using mMed, mDark, rinv")
+ return 0, 0, 0
+ # get mediator mass, dark quark mass, r_inv from the filename
+ parts = name.strip().strip("/").split("/")[-1].split("_")
+ try:
+ mMed = int(parts[1].split("-")[1])
+ mDark = int(parts[2].split("-")[1])
+ rinv = float(parts[3].split("-")[1])
+ except:
+ # another convention
+ mMed = int(parts[2].split("-")[1])
+ mDark = int(parts[3].split("-")[1])
+ rinv = float(parts[4].split("-")[1])
+ return mMed, mDark, rinv
+ result = {}
+ result_unmatched = {}
+ result_fakes = {}
+ result_bc = {}
+ result_PR = {}
+ result_PR_AKX = {}
+ result_PR_thresholds = {}
+ result_m = {}
+ result_jet_properties = {}
+ result_jet_properties_AKX = {}
+ result_quark_to_jet ={}
+ result_pt_mc_gt = {}
+ result_pt_dq = {}
+ result_props_dq = {"eta": {}, "phi": {}}
+ if args.jets_object != "fastjet_jets":
+ for key in avg_n_matched_quarks:
+ mMed, mDark, rinv = get_properties(key)
+ if mMed not in result:
+ result[mMed] = {}
+ result_unmatched[mMed] = {}
+ result_fakes[mMed] = {}
+ result_bc[mMed] = {}
+ result_PR[mMed] = {}
+ result_PR_AKX[mMed] = {}
+ result_PR_thresholds[mMed] = {}
+ result_m[mMed] = {}
+ result_jet_properties[mMed] = {}
+ result_jet_properties_AKX[mMed] = {}
+ result_quark_to_jet[mMed] = {}
+ result_pt_mc_gt[mMed] = {}
+ result_pt_dq[mMed] = {}
+ for prop in gt_props_per_event:
+ if mMed not in result_props_dq[prop]:
+ result_props_dq[prop][mMed] = {}
+ if mDark not in result[mMed]:
+ result[mMed][mDark] = {}
+ result_unmatched[mMed][mDark] = {}
+ result_fakes[mMed][mDark] = {}
+ result_bc[mMed][mDark] = {}
+ result_PR[mMed][mDark] = {}
+ result_PR_thresholds[mMed][mDark] = {}
+ result_PR_AKX[mMed][mDark] = {}
+ result_m[mMed][mDark] = {}
+ result_jet_properties[mMed][mDark] = {}
+ result_jet_properties_AKX[mMed][mDark] = {}
+ result_quark_to_jet[mMed][mDark] = {}
+ result_pt_mc_gt[mMed][mDark] = {}
+ result_pt_dq[mMed][mDark] = {}
+ for prop in gt_props_per_event:
+ if mDark not in result_props_dq[prop][mMed]:
+ result_props_dq[prop][mMed][mDark] = {}
+ result[mMed][mDark][rinv] = avg_n_matched_quarks[key]
+ result_unmatched[mMed][mDark][rinv] = unmatched_quarks[key]
+ result_fakes[mMed][mDark][rinv] = avg_n_fake_jets[key]
+ result_jet_properties[mMed][mDark][rinv] = matched_jet_properties[key]
+ result_quark_to_jet[mMed][mDark][rinv] = is_dq_matched_per_event[key]
+ result_pt_mc_gt[mMed][mDark][rinv] = gt_pt_per_event[key]
+ result_pt_dq[mMed][mDark][rinv] = dq_pt_per_event[key]
+ for prop in gt_props_per_event:
+ result_props_dq[prop][mMed][mDark][rinv] = gt_props_per_event[prop][key]
+ #result_bc[mMed][mDark][rinv] = {
+ # "matched": bc_scores_matched[key],
+ # "unmatched": bc_scores_unmatched[key]
+ #}
+ result_PR_thresholds[mMed][mDark][rinv] = pr_obj_score_thresholds[key]
+ if precision_and_recall[key][1] == 0 or precision_and_recall[key][2] == 0:
+ result_PR[mMed][mDark][rinv] = [0, 0]
+ print(mMed, mDark, rinv)
+ print("PR zero", key, precision_and_recall[key])
+ else:
+ result_PR[mMed][mDark][rinv] = [precision_and_recall[key][0] / precision_and_recall[key][1], precision_and_recall[key][0] / precision_and_recall[key][2]]
+ result_m[mMed][mDark][rinv] = {key: np.array(val) for key, val in mass_resolution[key].items()}
+ if args.jets_object == "fastjet_jets":
+ r = precision_and_recall_fastjets[key]
+ if rinv not in result_PR_AKX[mMed][mDark]:
+ result_PR_AKX[mMed][mDark][rinv] = {}
+ for k in r:
+ if r[k][1] == 0 or r[k][2] == 0:
+ result_PR_AKX[mMed][mDark][rinv][k] = [0, 0]
+ else:
+ result_PR_AKX[mMed][mDark][rinv][k] = [r[k][0] / r[k][1], r[k][0] / r[k][2]]
+ else:
+ for key in precision_and_recall_fastjets: # key=radius of AK
+ mMed, mDark, rinv = get_properties(key)
+ if mMed not in result_PR_AKX:
+ result_PR_AKX[mMed] = {}
+ result_jet_properties_AKX[mMed] = {}
+ result_quark_to_jet[mMed] = {}
+ result_pt_mc_gt[mMed] = {}
+ result_pt_dq[mMed] = {}
+ for prop in result_props_dq:
+ result_props_dq[prop][mMed] = {}
+ if mDark not in result_PR_AKX[mMed]:
+ result_PR_AKX[mMed][mDark] = {}
+ result_jet_properties_AKX[mMed][mDark] = {}
+ result_quark_to_jet[mMed][mDark] = {}
+ result_pt_mc_gt[mMed][mDark] = {}
+ result_pt_dq[mMed][mDark] = {}
+ for prop in result_props_dq:
+ result_props_dq[prop][mMed][mDark] = {}
+ r = precision_and_recall_fastjets[key]
+ if rinv not in result_PR_AKX[mMed][mDark]:
+ result_PR_AKX[mMed][mDark][rinv] = {}
+ result_jet_properties_AKX[mMed][mDark][rinv] = {}
+ result_quark_to_jet[mMed][mDark][rinv] = {}
+ result_pt_mc_gt[mMed][mDark][rinv] = {}
+ result_pt_dq[mMed][mDark][rinv] = {}
+ for prop in result_props_dq:
+ result_props_dq[prop][mMed][mDark][rinv] = {}
+ for k in r:
+ result_quark_to_jet[mMed][mDark][rinv][k] = is_dq_matched_per_event[key][k]
+ result_pt_mc_gt[mMed][mDark][rinv][k] = gt_pt_per_event[key][k]
+ result_pt_dq[mMed][mDark][rinv][k] = dq_pt_per_event[key][k]
+ for prop in result_props_dq:
+ result_props_dq[prop][mMed][mDark][rinv][k] = gt_props_per_event[prop][key][k]
+ result_jet_properties_AKX[mMed][mDark][rinv][k] = matched_jet_properties_fastjets[key][k]
+ if r[k][1] == 0 or r[k][2] == 0:
+ result_PR_AKX[mMed][mDark][rinv][k] = [0, 0]
+ else:
+ result_PR_AKX[mMed][mDark][rinv][k] = [r[k][0] / r[k][1], r[k][0] / r[k][2]]
+ pickle.dump(result_quark_to_jet, open(os.path.join(output_path, "result_quark_to_jet.pkl"), "wb"))
+ pickle.dump(result_pt_mc_gt, open(os.path.join(output_path, "result_pt_mc_gt.pkl"), "wb"))
+ pickle.dump(result_pt_dq, open(os.path.join(output_path, "result_pt_dq.pkl"), "wb"))
+ pickle.dump(result, open(os.path.join(output_path, "result.pkl"), "wb"))
+ pickle.dump(result_unmatched, open(os.path.join(output_path, "result_unmatched.pkl"), "wb"))
+ pickle.dump(result_fakes, open(os.path.join(output_path, "result_fakes.pkl"), "wb"))
+ pickle.dump(result_bc, open(os.path.join(output_path, "result_bc.pkl"), "wb"))
+ pickle.dump(result_props_dq, open(os.path.join(output_path, "result_props_dq.pkl"), "wb"))
+ if args.jets_object == "fastjet_jets":
+ pickle.dump(result_PR_AKX, open(os.path.join(output_path, "result_PR_AKX.pkl"), "wb"))
+ pickle.dump(result_jet_properties_AKX, open(os.path.join(output_path, "result_jet_properties_AKX.pkl"), "wb"))
+ pickle.dump(result_PR, open(os.path.join(output_path, "result_PR.pkl"), "wb"))
+ pickle.dump(result_PR_thresholds, open(os.path.join(output_path, "result_PR_thresholds.pkl"), "wb"))
+ pickle.dump(result_m, open(os.path.join(output_path, "result_m.pkl"), "wb"))
+ pickle.dump(result_jet_properties, open(os.path.join(output_path, "result_jet_properties.pkl"), "wb"))
+
+ with open(os.path.join(output_path, "eval_done.txt"), "w") as f:
+ f.write("True")
+ # Write the number of events to n_events.txt
+ with open(os.path.join(output_path, "n_events.txt"), "w") as f:
+ f.write(str(n))
+
+if args.plot_only:
+ result = pickle.load(open(os.path.join(output_path, "result.pkl"), "rb"))
+ result_unmatched = pickle.load(open(os.path.join(output_path, "result_unmatched.pkl"), "rb"))
+ result_fakes = pickle.load(open(os.path.join(output_path, "result_fakes.pkl"), "rb"))
+ result_bc = pickle.load(open(os.path.join(output_path, "result_bc.pkl"), "rb"))
+ result_PR = pickle.load(open(os.path.join(output_path, "result_PR.pkl"), "rb"))
+ result_PR_thresholds = pickle.load(open(os.path.join(output_path, "result_PR_thresholds.pkl"), "rb"))
+
+if args.jets_object == "fastjet_jets":
+ print("Only computing fastjet jets - exiting now, the metrics have been saved to disk")
+ import sys
+ sys.exit(0)
+
+fig, ax = plt.subplots(3, 1, figsize=(4, 12))
+
+def get_plots_for_params(mMed, mDark, rInv):
+ precisions = []
+ recalls = []
+ f1_scores = []
+ for i in range(len(thresholds)):
+ if result_PR_thresholds[mMed][mDark][rInv][i][1] == 0:
+ precisions.append(0)
+ else:
+ precisions.append(result_PR_thresholds[mMed][mDark][rInv][i][0] / result_PR_thresholds[mMed][mDark][rInv][i][1])
+ if result_PR_thresholds[mMed][mDark][rInv][i][2] == 0:
+ recalls.append(0)
+ else:
+ recalls.append(result_PR_thresholds[mMed][mDark][rInv][i][0] / result_PR_thresholds[mMed][mDark][rInv][i][2])
+ for i in range(len(thresholds)):
+ if precisions[i] + recalls[i] == 0:
+ f1_scores.append(0)
+ else:
+ f1_scores.append(2*precisions[i]*recalls[i] / (precisions[i] + recalls[i]))
+ return precisions, recalls, f1_scores
+
+
+def plot_for_params(a, b, c):
+ precisions, recalls, f1_scores = get_plots_for_params(a, b, c)
+ ax[0].plot(thresholds, precisions, ".--", label=f"mMed={a},rInv={c}")
+ ax[1].plot(thresholds, recalls, ".--", label=f"mMed={a},rInv={c}")
+ ax[2].plot(thresholds, f1_scores, ".--", label=f"mMed={a},rInv={c}")
+
+if "qcd" in args.input.lower():
+ print("QCD dataset - not plotting thresholds")
+ import sys
+ sys.exit(0)
+
+plot_for_params(900, 20, 0.3)
+plot_for_params(700, 20, 0.7)
+#plot_for_params(3000, 20, 0.3)
+plot_for_params(900, 20, 0.7)
+plot_for_params(1000, 20, 0.3)
+ax[0].grid()
+ax[1].grid()
+ax[2].grid()
+ax[0].set_ylabel("Precision")
+ax[1].set_ylabel("Recall")
+ax[2].set_ylabel("F1 score")
+ax[0].legend()
+ax[1].legend()
+ax[2].legend()
+ax[0].set_xscale("log")
+ax[1].set_xscale("log")
+ax[2].set_xscale("log")
+fig.tight_layout()
+fig.savefig(os.path.join(output_path, "pr_thresholds.pdf"))
+
+
+matrix_plot(result, "Blues", "Avg. matched dark quarks / event").savefig(os.path.join(output_path, "avg_matched_dark_quarks.pdf"))
+matrix_plot(result_fakes, "Greens", "Avg. unmatched jets / event").savefig(os.path.join(output_path, "avg_unmatched_jets.pdf"))
+matrix_plot(result_PR, "Reds", "Precision (N matched dark quarks / N predicted jets)", metric_comp_func = lambda r: r[0]).savefig(os.path.join(output_path, "precision.pdf"))
+matrix_plot(result_PR, "Reds", "Recall (N matched dark quarks / N dark quarks)", metric_comp_func = lambda r: r[1]).savefig(os.path.join(output_path, "recall.pdf"))
+matrix_plot(result_PR, "Purples", "F_1 score", metric_comp_func = lambda r: 2 * r[0] * r[1] / (r[0] + r[1])).savefig(os.path.join(output_path, "f1_score.pdf"))
+
+dark_masses = [20]
+mediator_masses = sorted(list(result.keys()))
+r_invs = sorted(list(set([rinv for mMed in result for mDark in result[mMed] for rinv in result[mMed][mDark]])))
+
+fig, ax = plt.subplots(len(r_invs), len(mediator_masses), figsize=(3*len(mediator_masses), 3 * len(r_invs)))
+for i in range(len(r_invs)):
+ for j in range(len(mediator_masses)):
+ data = result_unmatched[mediator_masses[j]][dark_masses[0]][r_invs[i]]["pt"]
+ ax[i, j].hist(data, bins=50, histtype="step", label="Unmatched")
+ ax[i, j].hist(result_unmatched[mediator_masses[j]][dark_masses[0]][r_invs[i]]["pt_all"], bins=50, histtype="step", label="All")
+ ax[i, j].set_title(f"mMed = {mediator_masses[j]}, rinv = {r_invs[i]}")
+ ax[i, j].set_xlabel("pt")
+ ax[i, j].legend()
+fig.tight_layout()
+fig.savefig(os.path.join(output_path, "unmatched_dark_quarks_pt.pdf"))
+
+fig, ax = plt.subplots(len(r_invs), len(mediator_masses), figsize=(3*len(mediator_masses), 3 * len(r_invs)))
+for i in range(len(r_invs)):
+ for j in range(len(mediator_masses)):
+ data_x = result_unmatched[mediator_masses[j]][dark_masses[0]][r_invs[i]]["eta"]
+ data_y = result_unmatched[mediator_masses[j]][dark_masses[0]][r_invs[i]]["phi"]
+ # 2d histogram
+ ax[i, j].hist2d(data_x, data_y, bins=10, cmap="Blues")
+ ax[i, j].set_title(f"mMed = {mediator_masses[j]}, rinv = {r_invs[i]}")
+ ax[i, j].set_xlabel("unmatched dark quark eta")
+ ax[i, j].set_ylabel("unmatched dark quark phi")
+
+fig.tight_layout()
+fig.savefig(os.path.join(output_path, "unmatched_dark_quarks_eta_phi.pdf"))
+
+
+fig, ax = plt.subplots(len(r_invs), len(mediator_masses), figsize=(3*len(mediator_masses), 3 * len(r_invs)))
+for i in range(len(r_invs)):
+ for j in range(len(mediator_masses)):
+ data = result_unmatched[mediator_masses[j]][dark_masses[0]][r_invs[i]]["frac_evt_E_matched"]
+ data_unmatched = result_unmatched[mediator_masses[j]][dark_masses[0]][r_invs[i]]["frac_evt_E_unmatched"]
+ bins = np.linspace(0, 1, 100)
+ ax[i, j].hist(data_unmatched, bins=bins, histtype="step", label="Unmatched")
+ ax[i, j].hist(data, bins=bins, histtype="step", label="Matched")
+ ax[i, j].set_title(f"mMed = {mediator_masses[j]}, rinv = {r_invs[i]}")
+ ax[i, j].set_xlabel("E (R<0.8) / event E")
+ ax[i, j].legend()
+fig.tight_layout()
+fig.savefig(os.path.join(output_path, "frac_E_in_cone.pdf"))
+
+fig, ax = plt.subplots(len(r_invs), len(mediator_masses), figsize=(3*len(mediator_masses), 3 * len(r_invs)))
+for i in range(len(r_invs)):
+ for j in range(len(mediator_masses)):
+ data = result_unmatched[mediator_masses[j]][dark_masses[0]][r_invs[i]]["frac_evt_E_matched"]
+ data_unmatched = result_unmatched[mediator_masses[j]][dark_masses[0]][r_invs[i]]["frac_evt_E_unmatched"]
+ bins = np.linspace(0, 1, 100)
+ ax[i, j].hist(data_unmatched, bins=bins, histtype="step", label="Unmatched dark quark", density=True)
+ ax[i, j].hist(data, bins=bins, histtype="step", label="Matched dark quark", density=True)
+ ax[i, j].set_title(f"mMed = {mediator_masses[j]}, rinv = {r_invs[i]}")
+ ax[i, j].set_xlabel("E (R<0.8) / event E")
+ ax[i, j].legend()
+fig.tight_layout()
+fig.savefig(os.path.join(output_path, "frac_E_in_cone_density.pdf"))
+
+'''
+fig, ax = plt.subplots(figsize=(5, 5))
+unmatched = result_bc[900][20][0.3]["unmatched"]
+matched = result_bc[900][20][0.3]["matched"]
+bins = np.linspace(0, 1, 100)
+ax.hist(unmatched, bins=bins, histtype="step", label="Unmatched jet")
+ax.hist(matched, bins=bins, histtype="step", label="Matched jet")
+ax.set_title("mMed = 900, mDark = 20, rinv = 0.3")
+ax.set_xlabel("BC score")
+ax.set_ylabel("count")
+ax.set_yscale("log")
+ax.legend()
+fig.tight_layout()
+fig.savefig(os.path.join(output_path, "avg_scores_matched_vs_unmatched_jet.pdf"))
+'''
\ No newline at end of file
diff --git a/scripts/analysis/dataset_stats.py b/scripts/analysis/dataset_stats.py
new file mode 100644
index 0000000000000000000000000000000000000000..678672fc6e37c71d8138d522dbf8e4bfd8455746
--- /dev/null
+++ b/scripts/analysis/dataset_stats.py
@@ -0,0 +1,112 @@
+import os
+from tqdm import tqdm
+import argparse
+import numpy as np
+import pandas as pd
+import pickle
+from src.dataset.get_dataset import get_iter
+from src.utils.paths import get_path
+from pathlib import Path
+import torch
+# This script attempts to open dataset files and prints the number of events in each one.
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--input", type=str, required=True)
+parser.add_argument("--dataset-cap", type=int, default=-1)
+parser.add_argument("--output", type=str, default="")
+parser.add_argument("--plot-only", action="store_true")
+
+# Plots of stats: total visible energy, visible mass, number of AK8 jets, number of pfcands + special_pfcands
+
+args = parser.parse_args()
+path = get_path(args.input, "preprocessed_data")
+if args.output == "":
+ args.output = args.input
+output_path = os.path.join(get_path(args.output, "results"), "dataset_stats")
+Path(output_path).mkdir(parents=True, exist_ok=True)
+
+if not args.plot_only:
+ stats = {}
+ for subdataset in os.listdir(path):
+ print("-----", subdataset, "-----")
+ current_path = os.path.join(path, subdataset)
+ dataset = get_iter(current_path)
+ n = 0
+ stats[subdataset] = {"total_visible_E": [], "visible_mass": [], "n_fatjets": [], "n_pfcands": [], "pt": [],
+ "fatjet_pt": [], "genjet_pt": []}
+ for data in tqdm(dataset):
+ n += 1
+ if args.dataset_cap != -1 and n > args.dataset_cap:
+ break
+ n_fatjets = len(data.fatjets)
+ n_pfcands = len(data.pfcands) #+ len(data.special_pfcands)
+ total_visible_E = torch.sum(data.pfcands.E) #+ torch.sum(data.special_pfcands.E)
+ pt = data.pfcands.pt.tolist()
+ visible_mass = torch.sqrt(torch.sum(data.pfcands.E)**2 - torch.sum(data.pfcands.p)**2)
+ stats[subdataset]["total_visible_E"].append(total_visible_E)
+ stats[subdataset]["visible_mass"].append(visible_mass)
+ stats[subdataset]["n_fatjets"].append(n_fatjets)
+ stats[subdataset]["n_pfcands"].append(n_pfcands)
+ stats[subdataset]["pt"] += pt
+ stats[subdataset]["fatjet_pt"] += data.fatjets.pt.tolist()
+ stats[subdataset]["genjet_pt"] += data.genjets.pt.tolist()
+ #stats[subdataset]["n_events"] = dataset.n_events
+ def get_properties(name):
+ # get mediator mass, dark quark mass, r_inv from the filename
+ parts = name.split("_")
+ mMed = int(parts[1].split("-")[1])
+ mDark = int(parts[2].split("-")[1])
+ rinv = float(parts[3].split("-")[1])
+ return mMed, mDark, rinv
+ result = {}
+ for key in stats:
+ mMed, mDark, rinv = get_properties(key)
+ if mMed not in result:
+ result[mMed] = {}
+ if mDark not in result[mMed]:
+ result[mMed][mDark] = {}
+ result[mMed][mDark][rinv] = stats[key]
+ pickle.dump(result, open(os.path.join(output_path, "result.pkl"), "wb"))
+if args.plot_only:
+ result = pickle.load(open(os.path.join(output_path, "result.pkl"), "rb"))
+
+import matplotlib.pyplot as plt
+# heatmap plots
+mediator_masses = sorted(list(result.keys()))
+dark_masses = [20]
+r_invs = sorted(list(set([rinv for mMed in result for mDark in result[mMed] for rinv in result[mMed][mDark]])))
+
+def plot_distribution(result, key_name):
+ print("---> key:", key_name)
+ fig, ax = plt.subplots(len(mediator_masses), len(r_invs), figsize=(3*len(r_invs), 3*len(mediator_masses)))
+ for i, mMed in enumerate(mediator_masses):
+ for j, rinv in enumerate(r_invs):
+ mDark = dark_masses[0]
+ data = result[mMed][mDark][rinv][key_name]
+ if key_name == "n_pfcands":
+ number_of_zeros = len(data) - np.count_nonzero(data)
+ print(f"Number of zeros in {mMed} {rinv}: {number_of_zeros}")
+ if key_name == "fatjet_pt":
+ print("Min fatjet_pt:", min(data))
+ if key_name == "genjet_pt":
+ print("Min genjet_pt:", min(data))
+ number_of_zeros = len(data) - np.count_nonzero(data)
+ print(f"Number of zeros in {mMed} {rinv}: {number_of_zeros}")
+ ax[i, j].hist(data, bins=50)
+ ax[i, j].set_title(f"$m_{{Z'}}$={mMed},$r_{{inv}}$={rinv} ($\Sigma$={int(sum(data))})")
+ if key_name == "pt":
+ ax[i, j].set_yscale("log")
+ # big title
+ fig.suptitle(key_name)
+ fig.tight_layout()
+ fig.savefig(os.path.join(output_path, f"{key_name}.pdf"))
+ #fig.show()
+plot_distribution(result, "total_visible_E")
+plot_distribution(result, "visible_mass")
+plot_distribution(result, "n_fatjets")
+plot_distribution(result, "n_pfcands")
+plot_distribution(result, "pt")
+plot_distribution(result, "fatjet_pt")
+plot_distribution(result, "genjet_pt")
+
+
diff --git a/scripts/compute_clustering.py b/scripts/compute_clustering.py
new file mode 100644
index 0000000000000000000000000000000000000000..6fbebb400c7a253e1a3890785c86860a8e517a1f
--- /dev/null
+++ b/scripts/compute_clustering.py
@@ -0,0 +1,85 @@
+import pickle
+import os
+from src.utils.paths import get_path
+from src.utils.utils import CPU_Unpickler
+import argparse
+from src.jetfinder.clustering import get_clustering_labels, get_clustering_labels_dbscan
+import torch
+# filename = get_path("/work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_2025_01_03_15_07_14/eval_0.pkl", "results")
+# for rinv=0.7, see /work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_rinv07_2025_01_03_15_38_58
+# keeping the clustering script here for now, so that it's separated from the GPU-heavy tasks like inference (clustering may be changed frequently...)
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--input", type=str, required=True) # train/Eval_eval_19March2025_small_aug_vanishing_momentum_Qcap05_p1e-2_reprod_1_2025_03_30_16_20_37_779
+# train/Eval_eval_19March2025_small_aug_vanishing_momentum_Qcap05_p1e-2_reprod_1_2025_03_30_16_20_39_153
+# train/Eval_eval_19March2025_pt1e-2_500particles_2025_04_01_11_57_07_994
+
+# python -m scripts.compute_clustering --input train/Eval_eval_19March2025_pt1e-2_500particles_2025_04_01_11_57_07_994 --output-suffix DefaultParams --min-cluster-size 15 --min-samples 5 --epsilon 0.1 --overwrite
+
+# python -m scripts.compute_clustering --input train/Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_01_18_23_46_933 --output-suffix FT --min-cluster-size 15 --min-samples 1 --epsilon 0.3
+# python -m scripts.compute_clustering --input train/Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_01_18_23_53_208 --output-suffix FT --min-cluster-size 15 --min-samples 1 --epsilon 0.3
+
+
+# python -m scripts.compute_clustering --input train/Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_02_12_31_39_996 --output-suffix FT --min-cluster-size 15 --min-samples 1 --epsilon 0.3
+# python -m scripts.compute_clustering --input train/Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_02_12_53_44_489 --output-suffix FT --min-cluster-size 15 --min-samples 1 --epsilon 0.3
+# python -m scripts.compute_clustering --input train/Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_02_13_13_02_174 --output-suffix FT --min-cluster-size 15 --min-samples 1 --epsilon 0.3
+# python -m scripts.compute_clustering --input train/Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_02_13_02_00_799 --output-suffix FT --min-cluster-size 15 --min-samples 1 --epsilon 0.3
+
+
+
+# python -m scripts.compute_clustering --input train/Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_02_14_40_58_35 --output-suffix FT --min-cluster-size 15 --min-samples 1 --epsilon 0.3
+# python -m scripts.compute_clustering --input train/Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_02_14_47_23_671 --output-suffix FT --min-cluster-size 15 --min-samples 1 --epsilon 0.3
+# python -m scripts.compute_clustering --input train/Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_02_14_51_32_144 --output-suffix FT --min-cluster-size 15 --min-samples 1 --epsilon 0.3
+# python -m scripts.compute_clustering --input train/Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_02_14_28_33_421 --output-suffix FT --min-cluster-size 15 --min-samples 1 --epsilon 0.3
+
+# python -m scripts.compute_clustering --input train/Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_02_21_22_21_86 --output-suffix FT --min-cluster-size 15 --min-samples 1 --epsilon 0.3
+# python -m scripts.compute_clustering --input train/Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_02_21_22_24_133 --output-suffix FT --min-cluster-size 15 --min-samples 1 --epsilon 0.3
+
+
+#
+parser.add_argument("--output-suffix", type=str, required=False, default="MinSamples0")
+parser.add_argument("--min-cluster-size", type=int, default=2)
+parser.add_argument("--min-samples", type=int, default=1)
+parser.add_argument("--epsilon", type=float, default=0.3)
+parser.add_argument("--overwrite", action="store_true")
+parser.add_argument("--spatial-part-only", action="store_true")
+parser.add_argument("--dbscan", action="store_true", help="Use DBSCAN (with pt weights) instead of HDBSCAN. Only epsilon and min-samples would then be considered for clustering.")
+parser.add_argument("--pt-hdbscan", action="store_true", help="Use the special distance function in HDBSCAN that is distance * min(pt1, pt2)")
+
+args = parser.parse_args()
+path = get_path(args.input, "results", fallback=True)
+
+#dir_results = get_path("/work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_2025_01_03_15_07_14/eval_0.pkl", "results")
+# For DBSCAN tests
+"""
+python -m scripts.compute_clustering --output-suffix dbscan_pt --min-cluster-size 4 --epsilon 0.1 --spatial-part-only --dbscan --input train/1
+"""
+
+for file in os.listdir(path):
+ if file.startswith("eval_") and file.endswith(".pkl"):
+ print("Computing clusters for file", file)
+ result = CPU_Unpickler(open(os.path.join(path, file), "rb")).load()
+ file_number = file.split("_")[1].split(".")[0]
+ labels_path = os.path.join(path, "clustering_{}_{}.pkl".format(args.output_suffix, file_number))
+ if not os.path.exists(labels_path) or args.overwrite:
+ #dataset = EventDataset.from_directory(result["filename"], mmap=True)
+ if result["pred"].shape[1] == 4:
+ coords = result["pred"][:, :3]
+ else:
+ coords = result["pred"][:, :4]
+ if args.spatial_part_only:
+ coords = coords[:, 1:4]
+ if args.dbscan:
+ labels = get_clustering_labels_dbscan(coords, result["pt"], result["event_idx"],
+ min_samples=args.min_samples, epsilon=args.epsilon)
+ else:
+ pt = None
+ if args.pt_hdbscan:
+ pt = result["pt"]
+ labels = torch.tensor(get_clustering_labels(coords, result["event_idx"], min_cluster_size=args.min_cluster_size,
+ min_samples=args.min_samples, epsilon=args.epsilon, pt=pt, bar=True))
+ with open(labels_path, "wb") as f:
+ pickle.dump(labels, f)
+ print("Saved labels to", labels_path)
+ else:
+ print("Labels already exist for this file at", labels_path)
diff --git a/scripts/dataset_stats.py b/scripts/dataset_stats.py
new file mode 100644
index 0000000000000000000000000000000000000000..9856240fad14a62e70ccdeed1acfd9274794e9bc
--- /dev/null
+++ b/scripts/dataset_stats.py
@@ -0,0 +1,18 @@
+import os
+from src.dataset.dataset import EventDataset
+from src.utils.paths import get_path
+import argparse
+
+# This script attempts to open dataset files and prints the number of events in each one.
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--input", type=str)
+#parser.add_argument("--output", type=str)
+args = parser.parse_args()
+path = get_path(args.input, "preprocessed_data")
+
+for dataset in sorted(os.listdir(path)):
+ ds = EventDataset.from_directory(os.path.join(path, dataset))
+ print(dataset + ":" , len(ds), "events")
+
+print("------------------")
diff --git a/scripts/generate_test_jobs.py b/scripts/generate_test_jobs.py
new file mode 100644
index 0000000000000000000000000000000000000000..fa0b64fa5a46839dd0d4dca0537d1a2a81f1170f
--- /dev/null
+++ b/scripts/generate_test_jobs.py
@@ -0,0 +1,139 @@
+# Eval a given a training run name at the given steps, taking into account the chaning of the training runs
+import wandb
+import argparse
+import os
+
+from src.utils.wandb_utils import get_run_initial_steps, get_run_step_direct, get_run_step_ckpt, get_steps_from_file, get_run_by_name
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--train-run-name", "-run", type=str, required=True)
+parser.add_argument("--steps", "-step", type=int, required=True)
+parser.add_argument("--template", "-template", type=str, required=True) # 'Vega' or 'T3'
+parser.add_argument("--tag", "-tag", type=str, required=False, default="") # 'Vega' or 'T3'
+parser.add_argument("--no-submit", "-ns", action="store_true") # do not submit the slurm job
+parser.add_argument("--os-weights", "-os", default=None, type=str) # train/scatter_mean_Obj_Score_LGATr_8_16_64_2025_02_07_16_31_26/OS_step_47000_epoch_70.ckpt # objectness score weights
+parser.add_argument("--global-features-obj-score", "-glob-f", action="store_true") # use global features for objectness score (setting of the OS run, not of the clustering run)
+parser.add_argument("--parton-level", "-pl", action="store_true") # use parton level
+parser.add_argument("--gen-level", "-gl", action="store_true") # use gen level
+parser.add_argument("--custom-test-files", type=str, default="")
+parser.add_argument("--aug-soft-particles", "-aug-soft", action="store_true")
+parser.add_argument("--steps-from-zero", action="store_true")
+
+# -os train/scatter_mean_Obj_Score_LGATr_8_16_64_2025_02_07_16_31_26/OS_step_47000_epoch_70.ckpt
+args = parser.parse_args()
+
+"""
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_2025_02_28_12_42_59 -step 40000 -template t3 -tag no_pid_eval_1 -gl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_2.0_2025_02_28_12_48_58 -step 40000 -template t3 -tag no_pid_eval_1 -gl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_700_07_2025_02_28_13_01_59 -step 40000 -template t3 -tag no_pid_eval_1 -gl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_AllData_2025_02_28_13_42_59 -step 40000 -template t3 -tag no_pid_eval_1 -gl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_2025_02_28_12_42_59 -step 40000 -template t3 -tag no_pid_eval_1 -pl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_2.0_2025_02_28_12_48_58 -step 40000 -template t3 -tag no_pid_eval_1 -pl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_700_07_2025_02_28_13_01_59 -step 40000 -template t3 -tag no_pid_eval_1 -pl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_AllData_2025_02_28_13_42_59 -step 40000 -template t3 -tag no_pid_eval_1 -pl --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+
+
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_2025_02_28_12_42_59 -step 40000 -template t3 -tag no_pid_eval_1 --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_2.0_2025_02_28_12_48_58 -step 40000 -template t3 -tag no_pid_eval_1 --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_700_07_2025_02_28_13_01_59 -step 40000 -template t3 -tag no_pid_eval_1 --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+python -m scripts.generate_test_jobs -run LGATr_training_NoPID_10_16_64_0.8_AllData_2025_02_28_13_42_59 -step 40000 -template t3 -tag no_pid_eval_1 --custom-test-files "Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 Feb26_2025_E1000_N500_folders/PFNano_s-channel_mMed-1200_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000"
+
+"""
+
+
+
+
+api = wandb.Api()
+import time
+
+# Dummy API call, for some reason it doesn't work without this?????
+'''
+train_run = get_run_by_name(args.train_run_name)
+print(get_run_initial_steps(train_run))
+print(get_run_initial_steps(get_run_by_name("lgatr_CONT_ds_cap_5000_2025_01_21_19_46_13")))
+print(get_run_step_ckpt(get_run_by_name("lgatr_CONT_ds_cap_5000_2025_01_21_19_46_13"), 20000))
+print(get_run_step_ckpt(get_run_by_name("lgatr_CONT_ds_cap_5000_2025_01_21_19_46_13"), 21000))
+print(get_run_step_ckpt(get_run_by_name("lgatr_CONT_ds_cap_5000_2025_01_21_19_46_13"), 15000))
+'''
+
+ckpt_file, train_run = get_run_step_ckpt(get_run_by_name(args.train_run_name), args.steps, args.steps_from_zero)
+
+test_files = "scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-700_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-900_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-1500_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-1000_mDark-20_rinv-0.7 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-1000_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-3000_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.7 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-700_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-900_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-3000_mDark-20_rinv-0.7 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-800_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-1500_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-1000_mDark-20_rinv-0.5 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-1500_mDark-20_rinv-0.7 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-3000_mDark-20_rinv-0.3 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-900_mDark-20_rinv-0.7 scouting_PFNano_signals2/SVJ_hadronic_std/s-channel_mMed-700_mDark-20_rinv-0.7"
+
+if args.custom_test_files:
+ test_files = args.custom_test_files
+ print("Using custom test files:", test_files)
+
+def get_log_number(tag):
+ numbers = set()
+ for file in os.listdir("jobs/logs"):
+ if tag in file:
+ numbers.add(int(file.split("_")[-2]))
+ if len(numbers) == 0:
+ return 0
+ return max(list(numbers)) + 1
+
+
+def get_slurm_file_text(template, run_name, tag, ckpt_file, log_number):
+ bindings = "-B /t3home/gkrzmanc/ -B /work/gkrzmanc/ -B /pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/ -H /t3home/gkrzmanc "
+ partition = "gpu"
+ account = "gpu_gres"
+ if template.lower().strip() == "vega":
+ bindings = " -B /ceph/hpc/home/krzmancg "
+ account = "s25t01-01-users"
+ tag_suffix = ""
+ if tag:
+ tag_suffix = " --tag " + tag
+ d = "jobs/logs/{}".format(tag)
+ err = d + "_{}_err.txt".format(log_number)
+ log = d + "_{}_log.txt".format(log_number)
+ obj_score_suffix = ""
+ glob_features_obj_score_suffix = ""
+ eval_suffix = ""
+ aug_suffix = ""
+ if args.aug_soft_particles:
+ aug_suffix = " --augment-soft-particles "
+ if args.parton_level:
+ eval_suffix = " --parton-level "
+ elif args.gen_level:
+ eval_suffix = " --gen-level "
+ if args.global_features_obj_score:
+ glob_features_obj_score_suffix = " --global-features-obj-score"
+ if args.os_weights:
+ obj_score_suffix = f" --train-objectness-score --load-objectness-score-weights {args.os_weights}"
+ file = f"""#!/bin/bash
+#SBATCH --partition={partition} # Specify the partition
+#SBATCH --account={account} # Specify the account
+#SBATCH --mem=25000 # Request 10GB of memory
+#SBATCH --time=24:00:00 # Set the time limit to 1 hour
+#SBATCH --job-name=SVJeval # Name the job
+#SBATCH --error={err} # Redirect stderr to a log file
+#SBATCH --output={log} # Redirect stderr to a log file
+#SBATCH --gres=gpu:1
+#SBATCH --mail-type=END,FAIL
+#SBATCH --mail-user=gkrzmanc@student.ethz.ch
+source env.sh
+export APPTAINER_TMPDIR=/work/gkrzmanc/singularity_tmp
+export APPTAINER_CACHEDIR=/work/gkrzmanc/singularity_cache
+nvidia-smi
+srun singularity exec {bindings} --nv docker://gkrz/lgatr:v3 python -m src.train -test {test_files} --gpus 0 -bs 16 --run-name Eval_{tag} --load-model-weights {ckpt_file} --num-workers 0 {tag_suffix} --load-from-run {run_name} --ckpt-step {args.steps} {obj_score_suffix} {glob_features_obj_score_suffix} {eval_suffix} --epsilon 0.3 --min-samples 1 --min-cluster-size 2 --test-dataset-max-size 10000 {aug_suffix}
+ """
+ return file
+
+
+if not os.path.exists("jobs/slurm_files"):
+ os.makedirs("jobs/slurm_files")
+if not os.path.exists("jobs/logs"):
+ os.makedirs("jobs/logs")
+
+log_number = get_log_number(args.tag)
+slurm_file_text = get_slurm_file_text(args.template, args.train_run_name, args.tag, ckpt_file, log_number)
+# write the file to jobs/slurm_files
+with open("jobs/slurm_files/{}_{}.slurm".format(args.tag, log_number), "w") as f:
+ f.write(slurm_file_text)
+ print("Wrote file to jobs/slurm_files/{}_{}.slurm".format(args.tag, log_number))
+
+if not args.no_submit:
+ os.system("sbatch jobs/slurm_files/{}_{}.slurm --nodelist=t3gpu02".format(args.tag, log_number))
+
diff --git a/scripts/metrics_plots_vs_pt_cutoff.py b/scripts/metrics_plots_vs_pt_cutoff.py
new file mode 100644
index 0000000000000000000000000000000000000000..2fc32b13da1988c909e05f4ccb42902a2abfed39
--- /dev/null
+++ b/scripts/metrics_plots_vs_pt_cutoff.py
@@ -0,0 +1,155 @@
+import os
+from tqdm import tqdm
+import argparse
+import pickle
+from src.plotting.eval_matrix import matrix_plot, scatter_plot
+from src.utils.paths import get_path
+import matplotlib.pyplot as plt
+import numpy as np
+
+# This script produces the pt cutoff vs. f1 score
+
+inputs = {
+ 30: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_pt_30.0",
+ 40: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_pt_40.0",
+ 50: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_pt_50.0",
+ 60: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_pt_60.0",
+ 70: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_pt_70.0",
+ 80: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_pt_80.0",
+ 90: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_pt_90.0",
+ 100: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset"
+}
+
+inputs = {
+ 30: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_pt_30.0",
+ 40: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_pt_40.0",
+ 50: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_pt_50.0",
+ 60: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_pt_60.0",
+ 70: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_pt_70.0",
+ 80: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_pt_80.0",
+ 90: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_pt_90.0",
+ 100: "Delphes_020425_test_PU_PFfix_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy",
+}
+'''
+print("PLOTTING QCD")
+inputs = {
+ 30: "QCD_test_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_QCD_pt_30.0",
+ 40: "QCD_test_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_QCD_pt_40.0",
+ 50: "QCD_test_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_QCD_pt_50.0",
+ 60: "QCD_test_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_QCD_pt_60.0",
+ 70: "QCD_test_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_QCD_pt_70.0",
+ 80: "QCD_test_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_QCD_pt_80.0",
+ 90: "QCD_test_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_QCD_pt_90.0",
+ 100: "QCD_test_part0/batch_eval_2k/DelphesPFfix_FullDataset_TrainDSstudy_QCD"
+}
+'''
+files = {
+ key: pickle.load(open(os.path.join(get_path(value, "results"), "precision_recall.pkl"), "rb")) for key, value in inputs.items()
+}
+
+titles = {key: set(value.keys()) for key, value in files.items()}
+# make a set of the intersections of titles
+intersections = sorted(list(set.intersection(*titles.values())))
+
+
+titles_to_plot = {
+ "AK, R=0.8": ["AK8", "gray"],
+ "GT_R=0.8 LGATr_GP_IRC_S_50k_s12900, sc. (aug)": ["LGATr_GP_IRC_S", "red"],
+ "GT_R=0.8 LGATr_GP_50k_s25020, sc. (aug)": ["LGATr_GP", "purple"],
+ "GT_R=0.8 base_LGATr_s50000, sc.": ["LGATr", "orange"]
+} # To plot different variations of the model
+
+print("QCD") # colors= [{"base_LGATr": "orange", "LGATr_700_07": "red", "LGATr_QCD": "purple", "LGATr_700_07+900_03": "blue", "LGATr_700_07+900_03+QCD": "green", "AK8": "gray"}, {"base_LGATr": "LGATr_900_03"}],
+titles_to_plot = {
+ "AK, R=0.8": ["AK8", "gray"],
+
+ "GT_R=0.8 base_LGATr_s50000, sc.": ["LGATr_900_03", "orange"],
+ "GT_R=0.8 LGATr_QCD_s50000, sc.": ["LGATr_QCD", "purple"],
+ "GT_R=0.8 LGATr_700_07_s50000, sc.": ["LGATr_700_07", "red"],
+ "GT_R=0.8 LGATr_700_07+900_03_s50000, sc.": ["LGATr_700_07+900_03", "blue"],
+ "GT_R=0.8 LGATr_700_07+900_03+QCD_s50000, sc.": ["LGATr_700_07+900_03+QCD", "green"],
+}
+
+titles_to_plot = {
+ "AK, R=0.8": ["AK8", "gray"],
+ "GT_R=0.8 LGATr_GP_IRC_S_50k_s12900, sc. (aug)": ["LGATr_900_03", "orange"],
+ "GT_R=0.8 LGATr_GP_IRC_S_QCD_s24000, sc. (aug)": ["LGATr_QCD", "purple"],
+ "GT_R=0.8 LGATr_GP_IRC_S_700_07_s24000, sc. (aug)": ["LGATr_700_07", "red"],
+ "GT_R=0.8 LGATr_GP_IRC_S_700_07+900_03_s24000, sc. (aug)": ["LGATr_700_07+900_03", "blue"],
+ "GT_R=0.8 LGATr_GP_IRC_S_700_07+900_03+QCD_s24000, sc. (aug)": ["LGATr_700_07+900_03+QCD", "green"],
+}
+
+
+intersections = sorted(list(titles_to_plot.keys()))
+
+output_dirs = []
+for _, value in inputs.items():
+ output_dirs.append(get_path(value, "results"))
+result = files[100][intersections[0]]
+mediator_masses = sorted(list(result.keys()))
+
+r_invs = sorted(list(set([rinv for mMed in result for mDark in result[mMed] for rinv in result[mMed][mDark]])))
+sz = 4
+
+#fig, ax = plt.subplots(len(inputs), len(titles_to_plot), figsize=(sz*len(titles_to_plot), sz*len(inputs)))
+fig, ax = plt.subplots(len(mediator_masses), len(r_invs), figsize=(sz*len(r_invs), sz*len(mediator_masses)))
+figp, axp = plt.subplots(len(mediator_masses), len(r_invs), figsize=(sz*len(r_invs), sz*len(mediator_masses)))
+figr, axr = plt.subplots(len(mediator_masses), len(r_invs), figsize=(sz*len(r_invs), sz*len(mediator_masses)))
+
+if len(r_invs) == 1 and len(mediator_masses) == 1:
+ ax = np.array([[ax]])
+ axp = np.array([[axp]])
+ axr = np.array([[axr]])
+grids = set()
+
+for i, mMed in enumerate(mediator_masses):
+ for j, rInv in enumerate(r_invs):
+ for k, title in enumerate(intersections):
+ label, color = titles_to_plot[title]
+ pts = sorted(list(inputs.keys()))
+ precisions = []
+ recalls = []
+ f1_scores = []
+ for pt in pts:
+ precision, recall = files[pt][title][mMed][20][rInv]
+ precisions.append(precision)
+ recalls.append(recall)
+ f1_score = 2 * precision * recall / (precision + recall)
+ f1_scores.append(f1_score)
+ ax[i, j].plot(pts, f1_scores, ".-", label=label, color=color)
+ axp[i, j].plot(pts, precisions, ".-", label=label, color=color)
+ axr[i, j].plot(pts, recalls, ".-", label=label, color=color)
+ ax[i, j].set_title(f"$m_{{Z'}} = {mMed}$ GeV, $r_{{inv.}}$ = {rInv}")
+ ax[i, j].set_xlabel("$p_T^{cutoff}$")
+ axp[i, j].set_title(f"$m_{{Z'}} = {mMed}$ GeV, $r_{{inv.}}$ = {rInv}")
+ axp[i, j].set_xlabel("$p_T^{cutoff}$")
+ axr[i, j].set_title(f"$m_{{Z'}} = {mMed}$ GeV, $r_{{inv.}}$ = {rInv}")
+ axr[i, j].set_xlabel("$p_T^{cutoff}$")
+ ax[i, j].set_ylabel("$F_1$ score")
+ axp[i, j].set_ylabel("Precision")
+ axr[i, j].set_ylabel("Recall")
+
+ ax[i, j].legend()
+ axp[i, j].legend()
+ axr[i, j].legend()
+ if (i, j) not in grids:
+ ax[i, j].grid()
+ axp[i, j].grid()
+ axr[i, j].grid()
+ grids.add((i, j))
+
+
+for f in output_dirs:
+ fig.tight_layout()
+ fname = os.path.join(f, "pt_cutoff_vs_f1_score.pdf")
+ fig.tight_layout()
+ fig.savefig(fname)
+ print("saved to", fname)
+
+ fname = os.path.join(f, "pt_cutoff_vs_precision.pdf")
+ figp.tight_layout()
+ figp.savefig(fname)
+ fname = os.path.join(f, "pt_cutoff_vs_recall.pdf")
+ figr.tight_layout()
+ figr.savefig(fname)
+
diff --git a/scripts/ntuplizer_command_gen.py b/scripts/ntuplizer_command_gen.py
new file mode 100644
index 0000000000000000000000000000000000000000..6d69e967812f3a834abbe34f3f08fce5d52f911a
--- /dev/null
+++ b/scripts/ntuplizer_command_gen.py
@@ -0,0 +1,44 @@
+import argparse
+import os
+
+# This file generates cmsRun commands that saves the datasets in the appropriate folders for further processing.
+
+# --input
+# --output
+
+parser = argparse.ArgumentParser(description='Generate ntuples from MiniAOD')
+parser.add_argument('--input', type=str, help='Input directory with MiniAOD files') # /pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/sim/Feb26_2025_E1000_N500/MINIAOD
+parser.add_argument("--local-prefix", type=str, default="/pnfs/psi.ch/cms/trivcat", help="Local prefix for the input files")
+parser.add_argument("--prod-prefix", type=str, default="/work/gkrzmanc/jetclustering", help="Prefix to use when running the script on CMS connect") # /work/gkrzmanc/jetclustering # root://t3se01.psi.ch:1094
+parser.add_argument('--output', type=str, default="data/26022025_E1000_N500", help='Output directory for root files') # data/26022025_E1000_N500
+parser.add_argument("--filelist", "-fl", action="store_true")
+args = parser.parse_args()
+
+filelists = {}
+
+# cmd example: cmsRun SVJScouting/test/ScoutingNanoAOD_fromMiniAOD_cfg.py inputFiles=file:root://t3se01.psi.ch:1094/store/user/gkrzmanc/jetclustering/sim/26feb/MINIAOD/step_MINIAOD_s-channel_mMed-700_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-10_part-9.root outputFile=out_26Feb_1.root maxEvents=-1 isMC=true era=2018 signal=True
+#print("------------------------------------------------------------------------------------------------")
+for file in os.listdir(args.local_prefix+args.input):
+ # filename looks like this. "step_MINIAOD_s-channel_mMed-1200_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000_part-440.root" extract the part with s-channel....n-1000
+ # and use it as the output folder name
+ parts = file.split("_")
+ output_folder = "_".join(parts[2:-1])
+ if output_folder not in filelists:
+ filelists[output_folder] = set()
+ output_filename = "PFNano_"+"_".join(parts[2:])
+ out_dir = args.prod_prefix+"/"+args.output+"/"+output_folder
+ if args.filelist:
+ #print("file:root://t3se01.psi.ch:1094"+args.local_prefix+args.input+"/"+file)
+ fname = os.path.join(args.local_prefix+ args.input, file)
+ #print(args.local_prefix)
+ print(fname)
+ filelists[output_folder].add(fname)
+ else:
+ if not os.path.exists(out_dir):
+ os.makedirs(out_dir)
+ print("cmsRun PhysicsTools/SVJScouting/test/ScoutingNanoAOD_fromMiniAOD_cfg.py inputFiles=" + args.input+"/"+file+" outputFile=" + args.prod_prefix + "/" + args.output + "/" + output_folder + "/" + output_filename + " maxEvents=-1 isMC=true era=2018 signal=True")
+
+if args.filelist:
+ import pickle
+ pickle.dump(filelists, open("filelist.pkl", "wb"))
+
diff --git a/scripts/plot_PRC_multiple_tag.py b/scripts/plot_PRC_multiple_tag.py
new file mode 100644
index 0000000000000000000000000000000000000000..6fe155692d06ea9053dc932e835a249ecf525aac
--- /dev/null
+++ b/scripts/plot_PRC_multiple_tag.py
@@ -0,0 +1,48 @@
+import os
+from tqdm import tqdm
+import argparse
+import pickle
+from src.plotting.eval_matrix import matrix_plot, scatter_plot
+from src.utils.paths import get_path
+import matplotlib.pyplot as plt
+import numpy as np
+
+inputs = {
+ "Delphes": "Delphes_020425_test/batch_eval_2k/DelphesTestCMSTrain",
+ "CMS FullSim": "Feb26_2025_E1000_N500_noPartonFilter_GluonFix_Small2K_F_part0/batch_eval_2k/SmallDSReprod2"
+}
+
+
+files = {
+ key: pickle.load(open(os.path.join(get_path(value, "results"), "precision_recall.pkl"), "rb")) for key, value in inputs.items()
+}
+titles = {key: set(value.keys()) for key, value in files.items()}
+# make a set of the intersections of titles
+intersections = sorted(list(set.intersection(*titles.values())))
+
+
+output_dirs = []
+for _, value in inputs.items():
+ output_dirs.append(os.path.join(get_path(value, "results"), "comparison.pdf"))
+
+min_file_len = 999
+for key, value in files.items():
+ if len(value) < min_file_len:
+ min_file_len = len(value)
+
+sz = 5.5
+
+fig, ax = plt.subplots(len(inputs), min_file_len, figsize=(sz*min_file_len, sz*len(inputs)))
+
+for i, key in enumerate(sorted(files.keys())):
+ for j, title in enumerate(intersections):
+ matrix = files[key][title]
+ matrix_plot(matrix, "Purples", r"$F_1$ score", metric_comp_func=lambda r: 2 * r[0] * r[1] / (r[0] + r[1]), ax=ax[i, j])
+ ax[i, j].set_title(key + " " + title)
+
+for f in output_dirs:
+ fig.tight_layout()
+ fig.savefig(f)
+ print("saved to", f)
+
+
diff --git a/scripts/plot_eval_count_matched_quarks.py b/scripts/plot_eval_count_matched_quarks.py
new file mode 100644
index 0000000000000000000000000000000000000000..03cc1c308f1bbbc331f6a0fe61f8c76a9e7aa208
--- /dev/null
+++ b/scripts/plot_eval_count_matched_quarks.py
@@ -0,0 +1,1443 @@
+import torch
+from itertools import chain, combinations
+
+import os
+from tqdm import tqdm
+import argparse
+import pickle
+from src.plotting.eval_matrix import matrix_plot, scatter_plot, multiple_matrix_plot, ax_tiny_histogram
+from src.utils.paths import get_path
+import matplotlib.pyplot as plt
+import numpy as np
+from collections import OrderedDict
+
+#### Plotting functions
+
+from matplotlib_venn import venn3
+import matplotlib.pyplot as plt
+from copy import copy
+
+
+def plot_venn3_from_index_dict(ax, data_dict, set_labels=('Set 0', 'Set 1', 'Set 2'), set_colors=("orange", "purple", "gray"), remove_max=True):
+ """
+ Generate a 3-set Venn diagram from a dictionary where keys are strings of '0', '1', and '2'
+ indicating set membership, and values are counts.
+
+ Parameters:
+ - data_dict (dict): Dictionary with keys like '0', '01', '012', etc.
+ - set_labels (tuple): Labels for the three sets.
+ - remove_max: if true, it will remove
+ """
+ # Mapping of set index combinations to venn3 region codes
+ index_to_region = {
+ '100': '100', # Only in Set 0
+ '010': '010', # Only in Set 1
+ '001': '001', # Only in Set 2
+ '110': '110', # In Set 0 and Set 1
+ '101': '101', # In Set 0 and Set 2
+ '011': '011', # In Set 1 and Set 2
+ '111': '111', # In all three
+ }
+
+ # Initialize region counts
+ venn_counts = {region: 0 for region in index_to_region.values()}
+ max_value = 0
+ for key in data_dict:
+ if data_dict[key] > max_value and key != "":
+ max_value = data_dict[key]
+ print("Max val", max_value)
+ data_dict = copy(data_dict)
+ new_data_dict = {}
+ for key in data_dict:
+ if remove_max and data_dict[key] == max_value:
+ # #data_dict[key] = 0
+ # del data_dict[key]
+ continue
+ else:
+ new_data_dict[key] = data_dict[key]
+ data_dict = new_data_dict
+ print("data dict", data_dict)
+ # Convert data_dict keys to binary keys for region mapping
+ for k, v in data_dict.items():
+ binary_key = ''.join(['1' if str(i) in k else '0' for i in range(3)])
+ if binary_key in index_to_region:
+ venn_counts[index_to_region[binary_key]] += v
+ # Plotting
+ #plt.figure(figsize=(8, 8))
+ del venn_counts['111']
+ venn = venn3(subsets=venn_counts, set_labels=set_labels, set_colors=set_colors, alpha=0.5, ax=ax)
+ venn.get_label_by_id("111").set_text(max_value)
+ #plt.title("3-Set Venn Diagram from Index Dictionary")
+ #plt.show()
+
+
+### Change this to make custom plots highlighting differences between different models (the histograms of pt_pred/pt_true, eta_pred-eta_true, and phi_pred-phi_true)
+histograms_dict = {
+ "": [{"base_LGATr": 50000, "base_Tr": 50000 , "base_GATr": 50000, "AK8": 50000}, {"base_LGATr": "orange", "base_Tr": "blue", "base_GATr": "green", "AK8": "gray"}],
+ "LGATr_comparison": [{"base_LGATr": 50000, "LGATr_GP_IRC_S_50k": 9960, "LGATr_GP_50k": 9960, "AK8": 50000, "LGATr_GP_IRC_SN_50k": 24000}, {"base_LGATr": "orange", "LGATr_GP_IRC_S_50k": "red", "LGATr_GP_50k": "purple", "LGATr_GP_IRC_SN_50k": "pink", "AK8": "gray"}],
+ "LGATr_comparsion_DifferentTrainingDS": [{"base_LGATr": 50000, "LGATr_700_07": 50000, "LGATr_QCD": 50000, "LGATr_700_07+900_03": 50000, "LGATr_700_07+900_03+QCD": 50000, "AK8": 50000}, {"base_LGATr": "orange", "LGATr_700_07": "red", "LGATr_QCD": "purple", "LGATr_700_07+900_03": "blue", "LGATr_700_07+900_03+QCD": "green", "AK8": "gray"}]
+}
+
+# This is a dictionary that contains the models and their colors for plotting - to plot the F1 scores etc. of the models
+results_dict = {
+ "LGATr_comparison_DifferentTrainingDS":
+ [{"base_LGATr": "orange", "LGATr_700_07": "red", "LGATr_QCD": "purple", "LGATr_700_07+900_03": "blue",
+ "LGATr_700_07+900_03+QCD": "green", "AK8": "gray"}, {"base_LGATr": "LGATr_900_03"}], # 2nd dict in list is rename dict
+ "LGATr_comparison": [{"base_LGATr": "orange", "LGATr_GP_IRC_S_50k": "red", "LGATr_GP_50k": "purple", "LGATr_GP_IRC_SN_50k": "pink", "AK8": "gray"},
+ {"base_LGATr": "LGATr", "LGATr_GP_IRC_S_50k": "LGATr_GP_IRC_S", "LGATr_GP_50k": "LGATr_GP", "LGATr_GP_IRC_SN_50k": "LGATr_GP_IRC_SN"}], # 2nd dict in list is rename dict
+ "LGATr_comparison_QCDtrain": [{"LGATr_QCD": "orange", "LGATr_GP_IRC_S_QCD": "red", "LGATr_GP_QCD": "purple", "LGATr_GP_IRC_SN_QCD": "pink", "AK8": "gray"},
+ {"LGATr_QCD": "LGATr", "LGATr_GP_IRC_S_QCD": "LGATr_GP_IRC_S", "LGATr_GP_QCD": "LGATr_GP", "LGATr_GP_IRC_SN_QCD": "LGATr_GP_IRC_SN"}], # 2nd dict in list is rename dict
+ "LGATr_comparison_GP_training": [
+ {"LGATr_GP_QCD": "purple", "LGATr_GP_700_07": "red", "LGATr_GP_700_07+900_03": "blue", "LGATr_GP_700_07+900_03+QCD": "green", "LGATr_GP_50k": "orange", "AK8": "gray"},
+ {"LGATr_GP_QCD": "QCD", "LGATr_GP_700_07": "700_07", "LGATr_GP_700_07+900_03": "700_07+900_03" , "LGATr_GP_50k": "900_03", "LGATr_GP_700_07+900_03+QCD": "700_07+900_03+QCD"} # 2nd dict in list is rename dict
+ ],
+ "LGATr_comparison_GP_IRC_S_training": [
+ {"LGATr_GP_IRC_S_QCD": "purple", "LGATr_GP_IRC_S_700_07": "red", "LGATr_GP_IRC_S_700_07+900_03": "blue", "LGATr_GP_IRC_S_700_07+900_03+QCD": "green", "LGATr_GP_IRC_S_50k": "orange", "AK8": "gray"},
+ {"LGATr_GP_IRC_S_QCD": "QCD", "LGATr_GP_IRC_S_700_07": "700_07", "LGATr_GP_IRC_S_700_07+900_03": "700_07+900_03", "LGATr_GP_IRC_S_50k": "900_03", "LGATr_GP_IRC_S_700_07+900_03+QCD": "700_07+900_03+QCD"} # 2nd dict in list is rename dict
+ ],
+ "LGATr_comparison_GP_IRC_SN_training": [
+ {"LGATr_GP_IRC_SN_QCD": "purple", "LGATr_GP_IRC_SN_700_07": "red", "LGATr_GP_IRC_SN_700_07+900_03": "blue", "LGATr_GP_IRC_SN_700_07+900_03+QCD": "green", "LGATr_GP_IRC_SN_50k": "orange", "AK8": "gray"},
+ {"LGATr_GP_IRC_SN_QCD": "QCD", "LGATr_GP_IRC_SN_700_07": "700_07", "LGATr_GP_IRC_SN_700_07+900_03": "700_07+900_03", "LGATr_GP_IRC_SN_50k": "900_03", "LGATr_GP_IRC_SN_700_07+900_03+QCD": "700_07+900_03+QCD"} # 2nd dict in list is rename dict
+ ]
+}
+
+
+'''
+ "GP_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_19_21_29_06_946": "LGATr_GP_QCD",
+ "GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_19_21_38_20_376": "LGATr_GP_700_07",
+ "GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_20_13_12_54_359": "LGATr_GP_700_07+900_03+QCD",
+ "GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_20_13_13_00_503": "LGATr_GP_700_07+900_03",
+ "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_20_15_29_30_29": "LGATr_GP_IRC_S_700_07+900_03",
+ "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_20_15_29_28_959": "LGATr_GP_IRC_S_700_07+900_03+QCD",
+ "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_20_15_11_35_476": "LGATr_GP_IRC_S_700_07",
+ "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_20_15_11_20_735": "LGATr_GP_IRC_S_QCD",
+
+'''
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--input", type=str, required=False, default="scouting_PFNano_signals2/SVJ_hadronic_std/batch_eval/objectness_score")
+parser.add_argument("--threshold-obj-score", "-os-threshold", type=float, default=-1)
+
+thresholds = np.linspace(0.1, 1, 20)
+# also add 100 points between 0 and 0.1 at the beginning
+thresholds = np.concatenate([np.linspace(0, 0.1, 100), thresholds])
+
+args = parser.parse_args()
+path = get_path(args.input, "results")
+
+models = sorted([x for x in os.listdir(path) if not os.path.isfile(os.path.join(path, x))])
+models = [x for x in models if "AKX" not in x]
+
+figures_all = {} # title to the f1 score figure to plot
+figures_all_sorted = {} # model used -> step -> level -> f1 figure
+print("Models:", models)
+
+radius = {
+ "LGATr_R10": 1.0,
+ "LGATr_R09": 0.9,
+ "LGATr_rinv_03_m_900": 0.8,
+ "LGATr_R06": 0.6,
+ "LGATr_R07": 0.7,
+ "LGATr_R11": 1.1,
+ "LGATr_R12": 1.2,
+ "LGATr_R13": 1.3,
+ "LGATr_R14": 1.4,
+ "LGATr_R20": 2.0,
+ "LGATr_R25": 2.5
+}
+
+comments = {
+ "Eval_params_study_2025_02_17_13_30_50": ", tr. on 07_700",
+ "Eval_objectness_score_2025_02_12_15_34_33": ", tr. on 03_900, GT=all",
+ "Eval_objectness_score_2025_02_18_08_48_13": ", tr. on 03_900, GT=closest",
+ "Eval_objectness_score_2025_02_14_11_10_14": ", tr. on 03_900, GT=closest",
+ "Eval_objectness_score_2025_02_21_14_51_07": ", tr. on 07_700",
+ "Eval_objectness_score_2025_02_10_14_59_49": ", tr. on 03_900, GT=all",
+ "Eval_objectness_score_2025_02_23_19_26_25": ", tr. on all, GT=closest",
+ "Eval_objectness_score_2025_02_23_21_04_33": ", tr. on 03_900, GT=closest"
+}
+
+out_file_PR = os.path.join(get_path(args.input, "results"), "precision_recall.pdf")
+out_file_PRf1 = os.path.join(get_path(args.input, "results"), "f1_score_sorted.pdf")
+
+out_file_PG = os.path.join(get_path(args.input, "results"), "PLoverGL.pdf")
+
+if args.threshold_obj_score != -1:
+ out_file_PR_OS = os.path.join(get_path(args.input, "results"), f"precision_recall_with_obj_score.pdf")
+
+out_file_avg_number_matched_quarks = os.path.join(get_path(args.input, "results"), "avg_number_matched_quarks.pdf")
+
+def get_plots_for_params(mMed, mDark, rInv, result_PR_thresholds):
+ precisions = []
+ recalls = []
+ f1_scores = []
+ for i in range(len(thresholds)):
+ if result_PR_thresholds[mMed][mDark][rInv][i][1] == 0:
+ precisions.append(0)
+ else:
+ precisions.append(
+ result_PR_thresholds[mMed][mDark][rInv][i][0] / result_PR_thresholds[mMed][mDark][rInv][i][1])
+ if result_PR_thresholds[mMed][mDark][rInv][i][2] == 0:
+ recalls.append(0)
+ else:
+ recalls.append(
+ result_PR_thresholds[mMed][mDark][rInv][i][0] / result_PR_thresholds[mMed][mDark][rInv][i][2])
+ for i in range(len(thresholds)):
+ if precisions[i] + recalls[i] == 0:
+ f1_scores.append(0)
+ else:
+ f1_scores.append(2 * precisions[i] * recalls[i] / (precisions[i] + recalls[i]))
+ return precisions, recalls, f1_scores
+
+sz = 5
+nplots = 9
+
+# Now make 3 plots, one for mMed=700,r_inv=0.7; one for mMed=700,r_inv=0.5; one for mMed=700,r_inv=0.3
+###fig, ax = plt.subplots(3, 3, figsize=(3 * sz, 3 * sz))
+
+'''fig, ax = plt.subplots(3, nplots, figsize=(nplots*sz, 3*sz))
+for mi, mass in enumerate([700, 900, 1500]):
+ start_idx = mi*3
+ for i0, rinv in enumerate([0.3, 0.5, 0.7]):
+ i = start_idx + i0
+ # 0 is precision, 1 is recall, 2 is f1 score
+ ax[0, i].set_title(f"r_inv={rinv}, m_med={mass} GeV")
+ ax[1, i].set_title(f"r_inv={rinv}, m_med={mass} GeV")
+ ax[2, i].set_title(f"r_inv={rinv}, m_med={mass} GeV")
+ ax[0, i].set_ylabel("Precision")
+ ax[1, i].set_ylabel("Recall")
+ ax[2, i].set_ylabel("F1 score")
+ ax[0, i].grid()
+ ax[1, i].grid()
+ ax[2, i].grid()
+ ylims = {} # key: j and i
+ default_ylims = [1, 0]
+ for j, model in enumerate(models):
+ result_PR_thresholds = os.path.join(path, model, "count_matched_quarks", "result_PR_thresholds.pkl")
+ if not os.path.exists(result_PR_thresholds):
+ continue
+ run_config = pickle.load(open(os.path.join(path, model, "run_config.pkl"), "rb"))
+ result_PR_thresholds = pickle.load(open(result_PR_thresholds, "rb"))
+ if mass not in result_PR_thresholds:
+ continue
+ if rinv not in result_PR_thresholds[mass]:
+ continue6
+ precisions, recalls, f1_scores = get_plots_for_params(mass, 20, rinv, result_PR_thresholds)
+ if not run_config["gt_radius"] == 0.8:
+ continue
+ label = "R={} gl.f.={} {}".format(run_config["gt_radius"], run_config.get("global_features_obj_score", False), comments.get(run_config["run_name"], run_config["run_name"]))
+ scatter_plot(ax[0, i], thresholds, precisions, label=label)
+ scatter_plot(ax[1, i], thresholds, recalls, label=label)
+ scatter_plot(ax[2, i], thresholds, f1_scores, label=label)
+ #ylims[0] = [min(ylims[0][0], min(precisions)), max(ylims[0][1], max(precisions))]
+ #ylims[1] = [min(ylims[1][0], min(recalls)), max(ylims[1][1], max(recalls))]
+ #ylims[2] = [min(ylims[2][0], min(f1_scores)), max(ylims[2][1], max(f1_scores))]
+ filt = thresholds < 0.2
+ precisions = np.array(precisions)[filt]
+ recalls = np.array(recalls)[filt]
+ f1_scores = np.array(f1_scores)[filt]
+ if (i, 0) not in ylims:
+ ylims[(i, 0)] = default_ylims
+ upper_factor = 1.01
+ lower_factor = 0.99
+ ylims[(i, 0)] = [min(ylims[(i, 0)][0], min(precisions)*lower_factor), max(ylims[(i, 0)][1], max(precisions)*upper_factor)]
+ if (i, 1) not in ylims:
+ ylims[(i, 1)] = default_ylims
+ ylims[(i, 1)] = [min(ylims[(i, 1)][0], min(recalls)*lower_factor), max(ylims[(i, 1)][1], max(recalls)*upper_factor)]
+ if (i, 2) not in ylims:
+ ylims[(i, 2)] = default_ylims
+ ylims[(i, 2)] = [min(ylims[(i, 2)][0], min(f1_scores)*lower_factor), max(ylims[(i, 2)][1], max(f1_scores)*upper_factor)]
+ for j in range(3):
+ ax[j, i].set_ylim(ylims[(i, j)])
+ ax[j, i].legend()
+ ax[j, i].set_xlim([0, 0.2])
+ ax[j, i].set_xlim([0, 0.2])
+ ax[j, i].set_xlim([0, 0.2])
+ # now adjust the ylim so that the plots are more readable
+
+fig.tight_layout()
+fig.savefig(os.path.join(get_path(args.input, "results"), "precision_recall_thresholds.pdf"))
+
+print("Saved to", os.path.join(get_path(args.input, "results"), "precision_recall_thresholds.pdf"))'''
+
+
+import wandb
+api = wandb.Api()
+
+def get_run_by_name(name):
+ clust_suffix = ""
+ if name.endswith("FT"):
+ #remove FT from the end
+ name = name[:-2]
+ clust_suffix = "FT"
+ if name.endswith("FT1"):
+ #remove FT from the end # min-samples 1 min-cluster-size 2 epsilon 0.3
+ name = name[:-3]
+ clust_suffix = "FT1"
+ if name.endswith("10_5"):
+ name = name[:-4]
+ clust_suffix = "10_5"
+ runs = api.runs(
+ path="fcc_ml/svj_clustering",
+ filters={"display_name": {"$eq": name.strip()}}
+ )
+ runs = api.runs(
+ path="fcc_ml/svj_clustering",
+ filters={"display_name": {"$eq": name.strip()}}
+ )
+ if runs.length != 1:
+ return None
+ return runs[0], clust_suffix
+
+
+def get_run_config(run_name):
+ r, clust_suffix = get_run_by_name(run_name)
+ if r is None:
+ print("Getting info from run", run_name, "failed")
+ return None, None
+ config = r.config
+ result = {}
+ if config["parton_level"]:
+ prefix = "PL"
+ result["level"] = "PL"
+ result["level_idx"] = 0
+ elif config["gen_level"]:
+ prefix = "GL"
+ result["level"] = "GL"
+ result["level_idx"] = 2
+ else:
+ prefix = "sc."
+ result["level"] = "scouting"
+ result["level_idx"] = 1
+ if config["augment_soft_particles"]:
+ result["ghosts"] = True
+ #result["level"] += "+ghosts"
+ gt_r = config["gt_radius"]
+ if config.get("augment_soft_particles", False):
+ prefix += " (aug)" # ["LGATr_training_NoPID_10_16_64_0.8_Aug_Finetune_vanishing_momentum_QCap05_2025_03_28_17_12_25_820", "LGATr_training_NoPID_10_16_64_2.0_Aug_Finetune_vanishing_momentum_QCap05_2025_03_28_17_12_26_400"]
+
+ training_datasets = {
+ "LGATr_training_NoPID_10_16_64_0.8_AllData_2025_02_28_13_42_59": "all",
+ "LGATr_training_NoPID_10_16_64_0.8_2025_02_28_12_42_59": "900_03",
+ "LGATr_training_NoPID_10_16_64_2.0_2025_02_28_12_48_58": "900_03",
+ "LGATr_training_NoPID_10_16_64_0.8_700_07_2025_02_28_13_01_59": "700_07",
+ "LGATr_training_NoPIDGL_10_16_64_0.8_2025_03_17_20_05_04": "900_03_GenLevel",
+ "LGATr_training_NoPIDGL_10_16_64_2.0_2025_03_17_20_05_04": "900_03_GenLevel",
+ "Transformer_training_NoPID_10_16_64_2.0_2025_03_03_17_00_38": "900_03_T",
+ "Transformer_training_NoPID_10_16_64_0.8_2025_03_03_15_55_50": "900_03_T",
+ "LGATr_training_NoPID_10_16_64_0.8_Aug_Finetune_2025_03_27_12_46_12_740": "900_03+SoftAug",
+ "LGATr_training_NoPID_10_16_64_2.0_Aug_Finetune_vanishing_momentum_2025_03_28_10_43_36_81": "900_03+SoftAugVM",
+ "LGATr_training_NoPID_10_16_64_0.8_Aug_Finetune_vanishing_momentum_2025_03_28_10_43_37_44": "900_03+SoftAugVM",
+ "LGATr_training_NoPID_10_16_64_0.8_Aug_Finetune_vanishing_momentum_QCap05_2025_03_28_17_12_25_820": "900_03+qcap05",
+ "LGATr_training_NoPID_10_16_64_2.0_Aug_Finetune_vanishing_momentum_QCap05_2025_03_28_17_12_26_400": "900_03+qcap05",
+ "LGATr_training_NoPID_10_16_64_2.0_Aug_Finetune_vanishing_momentum_QCap05_1e-2_2025_03_29_14_58_38_650": "pt 1e-2",
+ "LGATr_training_NoPID_10_16_64_0.8_Aug_Finetune_vanishing_momentum_QCap05_1e-2_2025_03_29_14_58_36_446": "pt 1e-2",
+ "LGATr_pt_1e-2_500part_2025_04_01_16_49_08_406": "500_pt_1e-2_PLFT",
+ "LGATr_pt_1e-2_500part_2025_04_01_21_14_07_350": "500_pt_1e-2_PLFT",
+ "LGATr_pt_1e-2_500part_NoQMin_2025_04_03_23_15_17_745": "500_1e-2_scFT",
+ "LGATr_pt_1e-2_500part_NoQMin_2025_04_03_23_15_35_810": "500_1e-2_scFT",
+ "LGATr_pt_1e-2_500part_NoQMin_10_to_1000p_2025_04_04_12_57_51_536": "10_1000_1e-2_scFT",
+ "LGATr_pt_1e-2_500part_NoQMin_10_to_1000p_2025_04_04_12_57_47_788": "10_1000_1e-2_scFT",
+ "LGATr_pt_1e-2_500part_NoQMin_10_to_1000p_CW0_2025_04_04_15_30_16_839": "10_1000_1e-2_CW0",
+ "LGATr_pt_1e-2_500part_NoQMin_10_to_1000p_CW0_2025_04_04_15_30_20_113": "10_1000_1e-2_CW0",
+ "debug_IRC_loss_weighted100_plus_ghosts_2025_04_08_22_40_33_972": "IRC_short_debug",
+ "debug_IRC_loss_weighted100_plus_ghosts_2025_04_09_13_48_55_569": "IRC",
+ "debug_IRC_loss_weighted100_plus_ghosts_Qmin05_2025_04_09_14_45_51_381": "IRC_qmin05",
+ "LGATr_500part_NOQMin_2025_04_09_21_53_37_210": "500part_NOQMin_reprod",
+ "IRC_loss_Split_and_Noise_alternate_Aug_2025_04_14_11_10_21_788": "IRC_Aug_S+N",
+ "IRC_loss_Split_and_Noise_alternate_NoAug_2025_04_11_16_15_48_955": "IRC_S+N",
+ "LGATr_training_NoPID_Delphes_10_16_64_0.8_2025_04_17_18_07_38_405": "DelphesTrain",
+ "Delphes_IRC_aug_2025_04_19_11_16_17_130": "DelphesTrain+IRC",
+ "LGATr_500part_NOQMin_Delphes_2025_04_19_11_15_24_417": "DelphesTrain+ghosts",
+ "Delphes_IRC_aug_SplitOnly_2025_04_20_15_50_33_553": "DelphesTrain+IRC_SplitOnly",
+ "Delphes_IRC_NOAug_SplitOnly_2025_04_21_12_58_36_99": "Delphes_IRC_NoAug_SplitOnly",
+ "Delphes_IRC_NOAug_SplitAndNoise_2025_04_21_19_32_08_865": "Delphes_IRC_NoAug_S+N",
+ "CONT_Delphes_IRC_aug_SplitOnly_2025_04_21_12_53_27_730": "IRC_aug_SplitOnly_ContFrom14k",
+ "Transformer_training_NoPID_Delphes_PU_10_16_64_0.8_2025_05_03_18_37_01_188": "base_Tr_Old",
+ "LGATr_training_NoPID_Delphes_PU_PFfix_10_16_64_0.8_2025_05_03_18_35_53_134": "base_LGATr",
+ "GATr_training_NoPID_Delphes_PU_10_16_64_0.8_2025_05_03_18_35_48_163": "base_GATr_Old",
+ "Transformer_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_05_20_755": "base_Tr",
+ "GATr_training_NoPID_Delphes_PU_CoordFix_SmallDS_10_16_64_0.8_2025_05_05_16_24_13_579": "base_GATr_SD",
+ "GATr_training_NoPID_Delphes_PU_CoordFix_10_16_64_0.8_2025_05_05_13_06_27_898": "base_GATr",
+ "LGATr_Aug_2025_05_06_10_08_05_956": "LGATr_GP",
+ "Delphes_Aug_IRCSplit_CONT_2025_05_07_11_00_18_422": "LGATr_GP_IRC_S",
+ "Delphes_Aug_IRC_Split_and_Noise_2025_05_07_14_43_13_968": "LGATr_GP_IRC_SN",
+ "Transformer_training_NoPID_Delphes_PU_CoordFix_SmallDS_10_16_64_0.8_2025_05_05_16_24_19_936": "base_Tr_SD",
+ "LGATr_training_NoPID_Delphes_PU_PFfix_SmallDS_10_16_64_0.8_2025_05_05_16_24_16_127": "base_LGATr_SD",
+ "Delphes_Aug_IRCSplit_2025_05_06_10_09_00_567": "LGATr_GP_IRC_S",
+ "GATr_training_NoPID_Delphes_PU_CoordFix_SmallDS_10_16_64_0.8_2025_05_09_15_34_13_531": "base_GATr_SD",
+ "Transformer_training_NoPID_Delphes_PU_CoordFix_SmallDS_10_16_64_0.8_2025_05_09_15_56_50_216": "base_Tr_SD",
+ "LGATr_training_NoPID_Delphes_PU_PFfix_SmallDS_10_16_64_0.8_2025_05_09_15_56_50_875": "base_LGATr_SD",
+ "Delphes_Aug_IRCSplit_50k_from10k_2025_05_11_14_08_49_675": "LGATr_GP_IRC_S_50k",
+ "LGATr_Aug_50k_2025_05_09_15_25_32_34": "LGATr_GP_50k",
+ "Delphes_Aug_IRCSplit_50k_2025_05_09_15_22_38_956": "LGATr_GP_IRC_S_50k",
+ "LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_16_21_04_26_937": "LGATr_700_07+900_03+QCD",
+ "LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_16_21_04_26_991": "LGATr_700_07+900_03",
+ "LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_16_19_46_57_48": "LGATr_QCD",
+ "LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_16_19_44_46_795": "LGATr_700_07",
+ "Delphes_Aug_IRCSplit_50k_SN_from3kFT_2025_05_16_14_07_29_474": "LGATr_GP_IRC_SN_50k",
+ "GP_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_19_21_29_06_946": "LGATr_GP_QCD",
+ "GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_19_21_38_20_376": "LGATr_GP_700_07",
+ "GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_20_13_12_54_359": "LGATr_GP_700_07+900_03+QCD",
+ "GP_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_20_13_13_00_503": "LGATr_GP_700_07+900_03",
+ "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_20_15_29_30_29": "LGATr_GP_IRC_S_700_07+900_03",
+ "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_20_15_29_28_959": "LGATr_GP_IRC_S_700_07+900_03+QCD",
+ "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_20_15_11_35_476": "LGATr_GP_IRC_S_700_07",
+ "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_20_15_11_20_735": "LGATr_GP_IRC_S_QCD",
+ "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_QCD_events_10_16_64_0.8_2025_05_24_23_00_54_948": "LGATr_GP_IRC_SN_QCD",
+ "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_AND_QCD_10_16_64_0.8_2025_05_24_23_00_56_910": "LGATr_GP_IRC_SN_700_07+900_03+QCD",
+ "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_AND_900_03_10_16_64_0.8_2025_05_24_23_01_01_212": "LGATr_GP_IRC_SN_700_07+900_03",
+ "GP_IRC_S_LGATr_training_NoPID_Delphes_PU_PFfix_700_07_10_16_64_0.8_2025_05_24_23_01_07_703": "LGATr_GP_IRC_SN_700_07",
+ }
+
+ train_name = config["load_from_run"]
+ ckpt_step = config["ckpt_step"]
+ print("train name", train_name)
+ if train_name not in training_datasets:
+ print("!! unknown run", train_name)
+ training_dataset = training_datasets.get(train_name, train_name) + "_s" + str(ckpt_step) + clust_suffix
+ if "plptfilt01" in run_name.lower():
+ training_dataset += "_PLPtFiltMinPt01" # min pt 0.1
+ elif "noplfilter" in run_name.lower():
+ training_dataset += "_noPLFilter"
+ elif "noplptfilter" in run_name.lower():
+ training_dataset += "_noPLPtFilter" # actually there was a 0.5 pt cut in the ntuplizer, removed by plptfilt01
+ elif "nopletafilter" in run_name.lower():
+ training_dataset += "_noPLEtaFilter"
+ result["GT_R"] = gt_r
+ result["training_dataset"] = training_dataset
+ result["training_dataset_nostep"] = training_datasets.get(train_name, train_name) + clust_suffix
+ result["ckpt_step"] = ckpt_step
+ return f"GT_R={gt_r} {training_dataset}, {prefix}", result
+
+
+def flatten_list(lst):# lst is like [[0,0],[1,1]...]
+ #return [item for sublist in lst for item in sublist]
+ return list(chain.from_iterable(lst))
+
+sz = 5
+ak_path = os.path.join(path, "AKX", "count_matched_quarks")
+
+result_PR_AKX = pickle.load(open(os.path.join(ak_path, "result_PR_AKX.pkl"), "rb"))
+result_jet_props_akx = pickle.load(open(os.path.join(ak_path, "result_jet_properties_AKX.pkl"), "rb"))
+result_qj_akx = pickle.load(open(os.path.join(ak_path, "result_quark_to_jet.pkl"), "rb"))
+result_dq_pt_akx = pickle.load(open(os.path.join(ak_path, "result_pt_dq.pkl"), "rb"))
+result_dq_mc_pt_akx = pickle.load(open(os.path.join(ak_path, "result_pt_mc_gt.pkl"), "rb"))
+result_dq_props_akx = pickle.load(open(os.path.join(ak_path, "result_props_dq.pkl"), "rb"))
+
+try:
+ result_PR_AKX_PL = pickle.load(open(os.path.join(os.path.join(path, "AKX_PL", "count_matched_quarks"), "result_PR_AKX.pkl"), "rb"))
+ result_qj_akx_PL = pickle.load(open(os.path.join(os.path.join(path, "AKX_PL", "count_matched_quarks"), "result_quark_to_jet.pkl"), "rb"))
+ result_dq_mc_pt_akx_PL = pickle.load(open(os.path.join(os.path.join(path, "AKX_PL", "count_matched_quarks"), "result_pt_mc_gt.pkl"), "rb"))
+ result_dq_pt_akx_PL = pickle.load(open(os.path.join(os.path.join(path, "AKX_PL", "count_matched_quarks"), "result_pt_dq.pkl"), "rb"))
+ result_dq_props_akx_PL = pickle.load(open(os.path.join(os.path.join(path, "AKX_PL", "count_matched_quarks"), "result_props_dq.pkl"), "rb"))
+except FileNotFoundError:
+ print("FileNotFoundError")
+ result_PR_AKX_PL = result_PR_AKX
+try:
+ result_PR_AKX_GL = pickle.load(open(os.path.join(os.path.join(path, "AKX_GL", "count_matched_quarks"), "result_PR_AKX.pkl"), "rb"))
+ result_qj_akx_GL = pickle.load(open(os.path.join(os.path.join(path, "AKX_GL", "count_matched_quarks"), "result_quark_to_jet.pkl"), "rb"))
+ result_dq_mc_pt_akx_GL = pickle.load(
+ open(os.path.join(os.path.join(path, "AKX_GL", "count_matched_quarks"), "result_pt_mc_gt.pkl"), "rb"))
+ result_dq_pt_akx_GL = pickle.load(
+ open(os.path.join(os.path.join(path, "AKX_GL", "count_matched_quarks"), "result_pt_dq.pkl"), "rb"))
+ result_dq_props_akx_GL = pickle.load(
+ open(os.path.join(os.path.join(path, "AKX_GL", "count_matched_quarks"), "result_props_dq.pkl"), "rb"))
+
+except FileNotFoundError:
+ print("FileNotFoundError")
+ result_PR_AKX_GL = result_PR_AKX
+
+#plot_only = ["LGATr_GP", "LGATr_GP_IRC_S", "LGATr_GP_IRC_SN", "LGATr_GP_50k", "LGATr_GP_IRC_S_50k"]
+plot_only = []
+
+radius = [0.8]
+def select_radius(d, radius, depth=3):
+ # from the dictionary, select radius at the level
+ if depth == 0:
+ return d[radius]
+ return {key: select_radius(d[key], radius, depth - 1) for key in d}
+
+if len(models): # temporarily do not plot this one
+ #fig, ax = plt.subplots(3, len(plot_only) + len(radius)*2, figsize=(sz * (len(plot_only)+len(radius)*2), sz * 3))
+ # three columns: PL, GL, scouting for each model
+ for i, model in tqdm(enumerate(sorted(models))):
+ output_path = os.path.join(path, model, "count_matched_quarks")
+ if not os.path.exists(os.path.join(output_path, "result.pkl")):
+ print("Result not exists for model", model)
+ continue
+ result = pickle.load(open(os.path.join(output_path, "result.pkl"), "rb"))
+ #result_unmatched = pickle.load(open(os.path.join(output_path, "result_unmatched.pkl"), "rb"))
+ #result_fakes = pickle.load(open(os.path.join(output_path, "result_fakes.pkl"), "rb"))
+ result_bc = pickle.load(open(os.path.join(output_path, "result_bc.pkl"), "rb"))
+ result_PR = pickle.load(open(os.path.join(output_path, "result_PR.pkl"), "rb"))
+ #matrix_plot(result, "Blues", "Avg. matched dark quarks / event").savefig(os.path.join(output_path, "avg_matched_dark_quarks.pdf"), ax=ax[0, i])
+ #matrix_plot(result_fakes, "Greens", "Avg. unmatched jets / event").savefig(os.path.join(output_path, "avg_unmatched_jets.pdf"), ax=ax[1, i])
+ #matrix_plot(result_PR, "Oranges", "Precision (N matched dark quarks / N predicted jets)", metric_comp_func = lambda r: r[0], ax=ax[0, i])
+ #matrix_plot(result_PR, "Reds", "Recall (N matched dark quarks / N dark quarks)", metric_comp_func = lambda r: r[1], ax=ax[1, i])
+ #matrix_plot(result_PR, "Purples", r"$F_1$ score", metric_comp_func = lambda r: 2 * r[0] * r[1] / (r[0] + r[1]), ax=ax[2, i])
+ print("Getting run config for model", model)
+ run_config_title, run_config = get_run_config(model)
+ print("RC title", run_config_title)
+ if run_config is None:
+ print("Skipping", model)
+ continue
+ #ax[0, i].set_title(run_config_title)
+ #ax[1, i].set_title(run_config_title)
+ #ax[2, i].set_title(run_config_title)
+ li = run_config["level_idx"]
+ #ax_f1[i, li].set_title(run_config_title)
+ #matrix_plot(result_PR, "Purples", r"$F_1$ score", metric_comp_func = lambda r: 2 * r[0] * r[1] / (r[0] + r[1]), ax=ax_f1[i, li])
+ figures_all[run_config_title] = result_PR
+ print(model, run_config_title)
+ td, gtr, level, tdns = run_config["training_dataset"], run_config["GT_R"], run_config["level_idx"], run_config["training_dataset_nostep"]
+ if tdns in plot_only or not len(plot_only):
+ td = "R=" + str(gtr) + " " + td
+ if td not in figures_all_sorted:
+ figures_all_sorted[td] = {}
+ figures_all_sorted[td][level] = figures_all[run_config_title]
+
+ result_AKX_current = select_radius(result_PR_AKX, 0.8)
+ result_AKX_PL = select_radius(result_PR_AKX_PL, 0.8)
+ result_AKX_GL = select_radius(result_PR_AKX_GL, 0.8)
+
+ figures_all_sorted["AK8"]: {
+ 0: result_AKX_PL,
+ 1: result_AKX_current,
+ 2: result_AKX_GL
+ }
+ for i, R in enumerate(radius):
+ result_PR_AKX_current = select_radius(result_PR_AKX, R)
+ #matrix_plot(result_PR_AKX_current, "Oranges", "Precision (N matched dark quarks / N predicted jets)",
+ # metric_comp_func=lambda r: r[0], ax=ax[0, i+len(models)])
+ #matrix_plot(result_PR_AKX_current, "Reds", "Recall (N matched dark quarks / N dark quarks)",
+ # metric_comp_func=lambda r: r[1], ax=ax[1, i+len(models)])
+ #matrix_plot(result_PR_AKX_current, "Purples", r"$F_1$ score", metric_comp_func=lambda r: 2 * r[0] * r[1] / (r[0] + r[1]),
+ # ax=ax[2, i+len(models)])
+ #ax[0, i+len(models)].set_title(f"AK, R={R}")
+ #ax[1, i+len(models)].set_title(f"AK, R={R}")
+ #ax[2, i+len(models)].set_title(f"AK, R={R}")
+ t = f"AK, R={R}"
+ figures_all[t] = result_PR_AKX_current
+ for i, R in enumerate(radius):
+ result_PR_AKX_current = select_radius(result_PR_AKX_PL, R)
+ #matrix_plot(result_PR_AKX_current, "Oranges", "Precision (N matched dark quarks / N predicted jets)",
+ # metric_comp_func=lambda r: r[0], ax=ax[0, i+len(models)+len(radius)])
+ #matrix_plot(result_PR_AKX_current, "Reds", "Recall (N matched dark quarks / N dark quarks)",
+ # metric_comp_func=lambda r: r[1], ax=ax[1, i+len(models)+len(radius)])
+ #matrix_plot(result_PR_AKX_current, "Purples", r"$F_1$ score", metric_comp_func=lambda r: 2 * r[0] * r[1] / (r[0] + r[1]),
+ # ax=ax[2, i+len(models)+len(radius)])
+ #ax[0, i+len(models)+len(radius)].set_title(f"AK PL, R={R}")
+ #ax[1, i+len(models)+len(radius)].set_title(f"AK PL, R={R}")
+ #ax[2, i+len(models)+len(radius)].set_title(f"AK PL, R={R}")
+ figures_all[f"AK PL, R={R}"] = result_PR_AKX_current
+ for i, R in enumerate(radius):
+ result_PR_AKX_current = select_radius(result_PR_AKX_GL, R)
+ figures_all[f"AK GL, R={R}"] = result_PR_AKX_current
+ #fig.tight_layout()
+ #fig.savefig(out_file_PR)
+ #print("Saved to", out_file_PR)
+ #fig_f1.tight_layout().463
+ #fig_f1.savefig(out_file_PRf1)
+ pickle.dump(figures_all, open(out_file_PR.replace(".pdf", ".pkl"), "wb"))
+
+figures_all_sorted["AK8"] = {
+ 0: select_radius(result_PR_AKX_PL, 0.8),
+ 1: select_radius(result_PR_AKX, 0.8),
+ 2: select_radius(result_PR_AKX_GL, 0.8)
+}
+text_level = ["PL", "PFCands", "GL"]
+
+fig_f1, ax_f1 = plt.subplots(len(figures_all_sorted), 3, figsize=(sz * 2.5, sz * len(figures_all_sorted)))
+if len(figures_all_sorted) == 1:
+ ax_f1 = np.array([ax_f1])
+for i in range(len(figures_all_sorted)):
+ model = list(figures_all_sorted.keys())[i]
+ renames = {
+ "R=0.8 base_LGATr_s50000": "LGATr",
+ "R=0.8 LGATr_GP_50k_s25020": "LGATr_GP",
+ "R=0.8 LGATr_GP_IRC_S_50k_s12900": "LGATr_GP_IRC_S",
+ "AK8": "AK8",
+ "R=0.8 LGATr_GP_IRC_SN_50k_s22020": "LGATr_GP_IRC_SN"
+ }
+ for j in range(3):
+ if j in figures_all_sorted[model]:
+ if j in figures_all_sorted[model]:
+ matrix_plot(figures_all_sorted[model][j], "Purples", r"$F_1$ score",
+ metric_comp_func=lambda r: 2 * r[0] * r[1] / (r[0] + r[1]), ax=ax_f1[i, j], is_qcd="qcd" in path.lower())
+ ax_f1[i, j].set_title(renames.get(model, model) + " "+ text_level[j])
+ ax_f1[i, j].set_xlabel("$m_{Z'}$")
+ ax_f1[i, j].set_ylabel("$r_{inv.}$")
+fig_f1.tight_layout()
+fig_f1.savefig(out_file_PRf1)
+
+
+import pandas as pd
+
+# plot QCD results:
+def get_qcd_results(i):
+ # i=0: precision, i=1: recall, i=2: f1 score
+ qcd_results = {}
+ for model in figures_all_sorted:
+ qcd_results[model] = {}
+ for level in figures_all_sorted[model]:
+ r = figures_all_sorted[model][level][0][0][0]
+ r = [float(x) for x in r] # append f1 score
+ r.append(r[0]*2*r[1] / (r[0]+r[1]))
+ qcd_results[model][text_level[level]] = r[i]
+ return pd.DataFrame(qcd_results).T
+
+if "qcd" in path.lower():
+ print("Precision:")
+ print(get_qcd_results(0))
+ print("----------------")
+ print("Recall:")
+ print(get_qcd_results(1))
+ print("----------------")
+ print("F1 score:")
+ print(get_qcd_results(2))
+## Now do the GT R vs metrics plots
+
+oranges = plt.get_cmap("Oranges")
+reds = plt.get_cmap("Reds")
+purples = plt.get_cmap("Purples")
+
+mDark = 20
+if "qcd" in path.lower():
+ print("QCD events")
+ mDark=0
+to_plot = {} # training dataset -> rInv -> mMed -> level -> "f1score" -> value
+to_plot_steps = {} # training dataset -> rInv -> mMed -> level -> step -> value
+to_plot_v2 = {} # level -> rInv -> mMed -> {"model": [P,R]}
+quark_to_jet = {} # level -> rInv -> mMed -> model -> quark to jet assignment list
+
+mc_gt_pt_of_dq = {}
+pt_of_dq = {}
+props_of_dq = {"eta": {}, "phi": {}} # Properties of dark quarks: eta and phi
+
+results_all = {}
+results_all_ak = {}
+jet_properties = {} # training dataset -> rInv -> mMed -> level -> step -> jet property dict
+jet_properties_ak = {} # rInv -> mMed -> level -> radius
+plotting_hypotheses = [[700, 0.7], [700, 0.5], [700, 0.3], [900, 0.3], [900, 0.7]]
+if "qcd" in path.lower():
+ plotting_hypotheses = [[0,0]]
+sz_small = 5
+for j, model in enumerate(models):
+ _, rc = get_run_config(model)
+ if rc is None or model in ["Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_02_14_28_33_421FT", "Eval_eval_19March2025_pt1e-2_500particles_FT_PL_2025_04_02_14_47_23_671FT", "Eval_eval_19March2025_small_aug_vanishing_momentum_2025_03_28_11_45_16_582", "Eval_eval_19March2025_small_aug_vanishing_momentum_2025_03_28_11_46_26_326"]:
+ print("Skipping", model)
+ continue
+ td = rc["training_dataset"]
+ td_raw = rc["training_dataset_nostep"]
+ level = rc["level"]
+ r = rc["GT_R"]
+ output_path = os.path.join(path, model, "count_matched_quarks")
+ if not os.path.exists(os.path.join(output_path, "result_PR.pkl")):
+ continue
+ result_PR = pickle.load(open(os.path.join(output_path, "result_PR.pkl"), "rb"))
+ result_QJ = pickle.load(open(os.path.join(output_path, "result_quark_to_jet.pkl"), "rb"))
+ result_jet_props = pickle.load(open(os.path.join(output_path, "result_jet_properties.pkl"), "rb"))
+ result_MC_PT = pickle.load(open(os.path.join(output_path, "result_pt_mc_gt.pkl"), "rb"))
+ result_PT_DQ = pickle.load(open(os.path.join(output_path, "result_pt_dq.pkl"), "rb"))
+ result_DQ_props = pickle.load(open(os.path.join(output_path, "result_props_dq.pkl"), "rb"))
+ print(level)
+ if td not in to_plot:
+ to_plot[td] = {}
+ results_all[td] = {}
+ if td_raw not in to_plot_steps:
+ to_plot_steps[td_raw] = {}
+ jet_properties[td_raw] = {}
+ level_idx = ["PL", "scouting", "GL"].index(level)
+ if level_idx not in to_plot_v2:
+ to_plot_v2[level_idx] = {}
+ quark_to_jet[level_idx] = {}
+ pt_of_dq[level_idx] = {}
+ mc_gt_pt_of_dq[level_idx] = {}
+ for prop in props_of_dq:
+ props_of_dq[prop][level_idx] = {}
+ for mMed_h in result_PR:
+ if mMed_h not in to_plot_v2[level_idx]:
+ to_plot_v2[level_idx][mMed_h] = {}
+ quark_to_jet[level_idx][mMed_h] = {}
+ pt_of_dq[level_idx][mMed_h] = {}
+ mc_gt_pt_of_dq[level_idx][mMed_h] = {}
+ for prop in props_of_dq:
+ props_of_dq[prop][level_idx][mMed_h] = {}
+ if mMed_h not in to_plot_steps[td_raw]:
+ to_plot_steps[td_raw][mMed_h] = {}
+ jet_properties[td_raw][mMed_h] = {}
+ if mMed_h not in results_all[td]:
+ results_all[td][mMed_h] = {mDark: {}}
+ for rInv_h in result_PR[mMed_h][mDark]:
+ if rInv_h not in to_plot_v2[level_idx][mMed_h]:
+ to_plot_v2[level_idx][mMed_h][rInv_h] = {}
+ quark_to_jet[level_idx][mMed_h][rInv_h] = {}
+ pt_of_dq[level_idx][mMed_h][rInv_h] = {}
+ mc_gt_pt_of_dq[level_idx][mMed_h][rInv_h] = {}
+ for prop in props_of_dq:
+ props_of_dq[prop][level_idx][mMed_h][rInv_h] = {}
+ if rInv_h not in to_plot_steps[td_raw][mMed_h]:
+ to_plot_steps[td_raw][mMed_h][rInv_h] = {}
+ jet_properties[td_raw][mMed_h][rInv_h] = {}
+ if level not in to_plot_steps[td_raw][mMed_h][rInv_h]:
+ to_plot_steps[td_raw][mMed_h][rInv_h][level] = {}
+ jet_properties[td_raw][mMed_h][rInv_h][level] = {}
+ if rInv_h not in results_all[td][mMed_h][mDark]:
+ results_all[td][mMed_h][mDark][rInv_h] = {}
+ #for level in ["PL+ghosts", "GL+ghosts", "scouting+ghosts"]:
+ if level not in results_all[td][mMed_h][mDark][rInv_h]:
+ results_all[td][mMed_h][mDark][rInv_h][level] = {}
+ precision = result_PR[mMed_h][mDark][rInv_h][0]
+ recall = result_PR[mMed_h][mDark][rInv_h][1]
+ f1score = 2 * precision * recall / (precision + recall)
+ to_plot_v2[level_idx][mMed_h][rInv_h][td_raw] = [precision, recall]
+ quark_to_jet[level_idx][mMed_h][rInv_h][td_raw] = result_QJ[mMed_h][mDark][rInv_h]
+ pt_of_dq[level_idx][mMed_h][rInv_h][td_raw] = flatten_list(result_PT_DQ[mMed_h][mDark][rInv_h])
+ mc_gt_pt_of_dq[level_idx][mMed_h][rInv_h][td_raw] = flatten_list(result_MC_PT[mMed_h][mDark][rInv_h])
+ for prop in props_of_dq:
+ props_of_dq[prop][level_idx][mMed_h][rInv_h][td_raw] = flatten_list(result_DQ_props[prop][mMed_h][mDark][rInv_h])
+ #print("qj", quark_to_jet[level_idx][mMed_h][rInv_h][td_raw])
+ if r not in results_all[td][mMed_h][mDark][rInv_h][level]:
+ results_all[td][mMed_h][mDark][rInv_h][level][r] = f1score
+ ckpt_step = rc["ckpt_step"]
+ to_plot_steps[td_raw][mMed_h][rInv_h][level][ckpt_step] = f1score
+ jet_properties[td_raw][mMed_h][rInv_h][level][ckpt_step] = result_jet_props[mMed_h][mDark][rInv_h]
+m_Meds = []
+r_invs = []
+for key in to_plot_steps:
+ m_Meds += list(to_plot_steps[key].keys())
+ for key2 in to_plot_steps[key]:
+ r_invs += list(to_plot_steps[key][key2].keys())
+
+m_Meds = sorted(list(set(m_Meds)))
+r_invs = sorted(list(set(r_invs)))
+
+result_AKX_current = select_radius(result_PR_AKX, 0.8)
+result_AKX_PL = select_radius(result_PR_AKX_PL, 0.8)
+result_AKX_GL = select_radius(result_PR_AKX_GL, 0.8)
+result_AKX_jet_properties = select_radius(result_jet_props_akx, 0.8)
+
+jet_properties["AK8"] = {}
+result_AKX_current_QJ = select_radius(result_qj_akx, 0.8)
+result_AKX_PL_QJ = select_radius(result_qj_akx_PL, 0.8)
+result_AKX_GL_QJ = select_radius(result_qj_akx_GL, 0.8)
+
+result_AKX_current_pt_dq = select_radius(result_dq_pt_akx, 0.8)
+result_AKX_PL_pt_dq = select_radius(result_dq_pt_akx_PL, 0.8)
+result_AKX_GL_pt_dq = select_radius(result_dq_pt_akx_GL, 0.8)
+
+result_AKX_current_MCpt_dq = select_radius(result_dq_mc_pt_akx, 0.8)
+result_AKX_PL_MCpt_dq = select_radius(result_dq_mc_pt_akx_PL, 0.8)
+result_AKX_GL_MCpt_dq = select_radius(result_dq_mc_pt_akx_GL, 0.8)
+
+result_AKX_current_props_dq = select_radius(result_dq_props_akx, 0.8, depth=4)
+result_AKX_PL_props_dq = select_radius(result_dq_props_akx_PL, 0.8, depth=4)
+result_AKX_GL_props_dq = select_radius(result_dq_props_akx_GL, 0.8, depth=4)
+
+from tqdm import tqdm
+
+for mMed_h in result_AKX_jet_properties:
+ for rInv_h in result_AKX_jet_properties[mMed_h][mDark]:
+ if 0 in to_plot_v2:
+ to_plot_v2[0][mMed_h][rInv_h]["AK8"] = result_AKX_PL[mMed_h][mDark][rInv_h]
+ to_plot_v2[1][mMed_h][rInv_h]["AK8"] = result_AKX_current[mMed_h][mDark][rInv_h]
+ to_plot_v2[2][mMed_h][rInv_h]["AK8"] = result_AKX_GL[mMed_h][mDark][rInv_h]
+ quark_to_jet[0][mMed_h][rInv_h]["AK8"] = result_AKX_PL_QJ[mMed_h][mDark][rInv_h]
+ quark_to_jet[1][mMed_h][rInv_h]["AK8"] = result_AKX_current_QJ[mMed_h][mDark][rInv_h]
+ quark_to_jet[2][mMed_h][rInv_h]["AK8"] = result_AKX_GL_QJ[mMed_h][mDark][rInv_h]
+ pt_of_dq[0][mMed_h][rInv_h]["AK8"] = flatten_list(result_AKX_PL_pt_dq[mMed_h][mDark][rInv_h])
+ pt_of_dq[1][mMed_h][rInv_h]["AK8"] = flatten_list(result_AKX_current_pt_dq[mMed_h][mDark][rInv_h])
+ pt_of_dq[2][mMed_h][rInv_h]["AK8"] = flatten_list(result_AKX_GL_pt_dq[mMed_h][mDark][rInv_h])
+ mc_gt_pt_of_dq[0][mMed_h][rInv_h]["AK8"] = flatten_list(result_AKX_PL_MCpt_dq[mMed_h][mDark][rInv_h])
+ mc_gt_pt_of_dq[1][mMed_h][rInv_h]["AK8"] = flatten_list(result_AKX_current_MCpt_dq[mMed_h][mDark][rInv_h])
+ mc_gt_pt_of_dq[2][mMed_h][rInv_h]["AK8"] = flatten_list(result_AKX_GL_MCpt_dq[mMed_h][mDark][rInv_h])
+ for k in props_of_dq:
+ props_of_dq[k][0][mMed_h][rInv_h]["AK8"] = flatten_list(result_AKX_PL_props_dq[k][mMed_h][mDark][rInv_h])
+ props_of_dq[k][1][mMed_h][rInv_h]["AK8"] = flatten_list(result_AKX_current_props_dq[k][mMed_h][mDark][rInv_h])
+ props_of_dq[k][2][mMed_h][rInv_h]["AK8"] = flatten_list(result_AKX_GL_props_dq[k][mMed_h][mDark][rInv_h])
+ if mMed_h not in jet_properties["AK8"]:
+ jet_properties["AK8"][mMed_h] = {}
+ if rInv_h not in jet_properties["AK8"][mMed_h]:
+ jet_properties["AK8"][mMed_h][rInv_h] = {}
+ jet_properties["AK8"][mMed_h][rInv_h] = {"scouting": {50000: result_AKX_jet_properties[mMed_h][mDark][rInv_h]}}
+
+rename_results_dict = {
+ "LGATr_comparison_DifferentTrainingDS": "base",
+ "LGATr_comparison_GP_training": "GP",
+ "LGATr_comparison_GP_IRC_S_training": "GP_IRC_S",
+ "LGATr_comparison_GP_IRC_SN_training": "GP_IRC_SN"
+}
+
+
+hypotheses_to_plot = [[0,0],[700,0.7],[700,0.5],[700,0.3]]
+
+
+
+def powerset(iterable):
+ "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
+ s = list(iterable)
+ return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
+
+
+def get_label_from_superset(lbl, labels_rename, labels):
+ if lbl == '':
+ return "Missed by all"
+ r = [labels[int(i)] for i in lbl]
+ r = [labels_rename.get(l,l) for l in r]
+ if len(r) == 2 and "QCD" in r and "900_03" in r:
+ return "Found by both models but not AK"
+ if len(r) == 3:
+ return "Found by all"
+ return ", ".join(r)
+
+
+for hyp_m, hyp_rinv in hypotheses_to_plot:
+ if 0 not in to_plot_v2:
+ continue # Not for the lower-pt thresholds, where only GL and PL are available
+ if hyp_m not in to_plot_v2[0] or hyp_rinv not in to_plot_v2[0][hyp_m]:
+ continue
+ # plot here the venn diagrams
+ labels = ["LGATr_GP_IRC_S_QCD", "AK8", "LGATr_GP_IRC_S_50k"]
+ labels_global = ["LGATr_GP_IRC_S_QCD", "AK8", "LGATr_GP_IRC_S_50k"]
+ labels_rename = {"LGATr_GP_IRC_S_QCD": "QCD", "LGATr_GP_IRC_S_50k": "900_03"}
+ fig_venn, ax_venn = plt.subplots(6, 3, figsize=(5 * 3, 5 * 6)) # the bottom ones are for pt of the DQ, pt of the MC GT, pt of MC GT / pt of DQ, eta, and phi distributions
+ fig_venn1, ax_venn1 = plt.subplots(6, 2, figsize=(5*2, 5*6)) # Only the PFCands-level, with full histogram on the left and density on the right
+ for level in range(3):
+ #labels = list(results_dict["LGATr_comparison_GP_IRC_S_training"][0].keys())
+ label_combination_to_number = {} # fill it with all possible label combinations e.g. if there are 3 labels: "NA", "0", "1", "2", "01", "012", "12", "02"
+ powerset_str = ["".join([str(x) for x in sorted(list(a))]) for a in powerset(range(len(labels)))]
+ set_to_count = {key: 0 for key in powerset_str}
+ set_to_stats = {key: {"pt_dq": [], "pt_mc_t": [], "pt_mc_t_dq_ratio": [], "eta": [], "phi": []} for key in powerset_str}
+ label_to_result = {}
+ #label_to_stats = {"pt_dq": , "pt_mc_t": [], "pt_mc_t_dq_ratio": [], "eta": [], "phi": []}
+ n_dq = 999999999
+ for j, label in enumerate(labels):
+ r = flatten_list(quark_to_jet[level][hyp_m][hyp_rinv][label])
+ n_dq = min(n_dq, len(r)) # Find the minimum number of dark quarks in all labels
+ for j, label in enumerate(labels):
+ r = torch.tensor(flatten_list(quark_to_jet[level][hyp_m][hyp_rinv][label]))
+ r = (r != -1) # Whether quark no. X is caught or not
+ label_to_result[j] = r.tolist()[:n_dq]
+ #r = torch.tensor(flatten_list(pt_of_dq[level][hyp_m][hyp_rinv][label]))
+ #r = r[:n_dq]
+ #label_to_stats["pt_dq"].append(r.tolist())
+ #r1 = torch.tensor(flatten_list(mc_gt_pt_of_dq[level][hyp_m][hyp_rinv][label]))
+ #r1 = r1[:n_dq]
+ #label_to_stats["pt_mc_t"].append(r1.tolist())
+ #r2 = r1 / r
+ #r2 = r2[:n_dq]
+ #label_to_stats["pt_mc_t_dq_ratio"].append(r2.tolist())
+ #r_eta = torch.tensor(flatten_list(props_of_dq["eta"][level][hyp_m][hyp_rinv][label]))
+ #r_eta = r_eta[:n_dq]
+ #label_to_stats["eta"].append(r_eta.tolist())
+ ##r_phi = torch.tensor(flatten_list(props_of_dq["phi"][level][hyp_m][hyp_rinv][label]))
+ #r_phi = r_phi[:n_dq]
+ #label_to_stats["phi"].append(r_phi.tolist())
+ assert len(label_to_result[j]) == n_dq, f"Label {label} has different number of quarks than others {n_dq} != {len(label_to_result[j])}"
+ #n_dq = min(n_dq, len(r))
+ #for j, label in enumerate(labels):
+ # assert len(label_to_result[j]) == n_dq, f"Label {label} has different number of quarks than others {n_dq} != {len(label_to_result[j])}"
+ for c in tqdm(range(n_dq)):
+ belonging_to_set = ""
+ for j, label in enumerate(labels):
+ if label_to_result[j][c] == 1:
+ belonging_to_set += str(j)
+ set_to_count[belonging_to_set] += 1
+ #for key in label_to_stats:
+ # for idx in belonging_to_set:
+ # idx_int = int(idx) # e.g. "0", "1" etc.
+ # set_to_stats[belonging_to_set]
+ for j, label in enumerate(labels):
+ current_dq_pt = pt_of_dq[level][hyp_m][hyp_rinv][label][c]
+ current_mc_gt_pt = mc_gt_pt_of_dq[level][hyp_m][hyp_rinv][label][c]
+ current_dq_eta = props_of_dq["eta"][level][hyp_m][hyp_rinv][label][c]
+ current_dq_phi = props_of_dq["phi"][level][hyp_m][hyp_rinv][label][c]
+ set_to_stats[belonging_to_set]["pt_dq"].append(current_dq_pt)
+ set_to_stats[belonging_to_set]["pt_mc_t"].append(current_mc_gt_pt)
+ set_to_stats[belonging_to_set]["pt_mc_t_dq_ratio"].append(current_mc_gt_pt/current_dq_pt)
+ set_to_stats[belonging_to_set]["eta"].append(current_dq_eta)
+ set_to_stats[belonging_to_set]["phi"].append(current_dq_phi)
+ #print("set_to_count for level", level, ":", set_to_count, "labels:", labels)
+ title = f"$m_{{Z'}}={hyp_m}$ GeV, $r_{{inv.}}={hyp_rinv}$, {text_level[level]} (missed by all: {set_to_count['']}) "
+ if hyp_m == 0 and hyp_rinv == 0:
+ title = f"QCD, {text_level[level]} (missed by all: {set_to_count['']})"
+ ax_venn[0, level].set_title(title)
+ plot_venn3_from_index_dict(ax_venn[0, level], set_to_count, set_labels=[labels_rename.get(l,l) for l in labels], set_colors=["orange", "gray", "red"])
+ if level == 1: #reco-level
+ plot_venn3_from_index_dict(ax_venn1[0, 1], set_to_count,
+ set_labels=[labels_rename.get(l,l) for l in labels],
+ set_colors=["orange", "gray", "red"])
+ bins = {
+ "pt_dq": np.linspace(90, 250, 50),
+ "pt_mc_t": np.linspace(0, 200, 50),
+ "pt_mc_t_dq_ratio": np.linspace(0, 1.3, 30),
+ "eta": np.linspace(-4, 4, 20),
+ "phi": np.linspace(-np.pi, np.pi, 20)
+ }
+ # 10 random colors
+ clrs = ["green", "red", "orange", "pink", "blue", "purple", "cyan", "magenta"]
+ key_rename_dict = {"pt_dq": "$p_T$ of quark", "pt_mc_t": "$p_T$ of particles within radius of R=0.8 of quark", "pt_mc_t_dq_ratio": "$p_T$ (part. within R=0.8 of quark) / $p_T$ (quark) ", "eta": "$\eta$ of quark", "phi": "$\phi$ of quark" }
+ for k, key in enumerate(["pt_dq", "pt_mc_t", "pt_mc_t_dq_ratio", "eta", "phi"]):
+ for s_idx, s in enumerate(sorted(set_to_stats.keys())):
+ if len(set_to_stats[s][key]) == 0:
+ continue
+ lbl = s
+ #if s == "":
+ # lbl = "none"
+ lbl1 = get_label_from_superset(lbl, labels_rename, labels)
+
+ if lbl1 not in ["Missed by all", "Found by both models but not AK", "AK8", "Found by all"]:
+ continue
+ if level == 1:
+ ax_venn1[k + 1, 1].hist(set_to_stats[s][key], bins=bins[key], histtype="step",
+ label=lbl1, color=clrs[s_idx], density=True)
+ ax_venn1[k + 1, 0].set_title(f"{key_rename_dict[key]}")
+ ax_venn1[k+1, 1].set_title(f"{key_rename_dict[key]}")
+ ax_venn1[k + 1, 1].set_ylabel("Density")
+ if lbl not in ["", "012"]:
+ # We are only interested in the differences...
+ ax_venn[k+1, level].hist(set_to_stats[s][key], bins=bins[key], histtype="step", label=lbl1, color=clrs[s_idx])
+ ax_venn[k+1, level].set_title(f"{key_rename_dict[key]}")
+ if level == 1:
+ ax_venn1[k + 1, 0].hist(set_to_stats[s][key], bins=bins[key], histtype="step",
+ label=lbl1,
+ color=clrs[s_idx])
+ #ax_venn[k+1, level].set_xlabel(key)
+ #ax_venn[k+1, level].set_ylabel("Count")
+ for k in range(5):
+ ax_venn[k+1, level].legend()
+ fig_venn.tight_layout()
+ for k in range(5):
+ ax_venn1[k+1, 0].legend()
+ ax_venn1[k+1, 1].legend()
+ fig_venn1.tight_layout()
+ f = os.path.join(get_path(args.input, "results"), f"venn_diagram_{hyp_m}_{hyp_rinv}.pdf")
+ fig_venn.savefig(f)
+ f1 = os.path.join(get_path(args.input, "results"), f"venn_diagram_{hyp_m}_{hyp_rinv}_reco_level_only.pdf")
+ fig_venn1.savefig(f1)
+
+ for i, lbl in enumerate(["precision", "recall", "F1"]): # 0=precision, 1=recall, 2=F1
+ sz_small1 = 2.5
+ fig, ax = plt.subplots(len(rename_results_dict), 3, figsize=(sz_small1 * 3, sz_small1 * len(rename_results_dict)))
+ for i1, key in enumerate(list(rename_results_dict.keys())):
+ for level in range(3):
+ level_text = text_level[level]
+ labels = list(results_dict[key][0].keys())
+ colors = [results_dict[key][0][l] for l in labels]
+ res_precision = np.array([to_plot_v2[level][hyp_m][hyp_rinv][l][0] for l in labels])
+ res_recall = np.array([to_plot_v2[level][hyp_m][hyp_rinv][l][1] for l in labels])
+ res_f1 = 2 * res_precision * res_recall / (res_precision + res_recall)
+ if i == 0:
+ values = res_precision
+ elif i == 1:
+ values = res_recall
+ else:
+ values = res_f1
+ rename_dict = results_dict[key][1]
+ labels_renamed = [rename_dict.get(l,l) for l in labels]
+ print(i1, level)
+ ax_tiny_histogram(ax[i1, level], labels_renamed, colors, values)
+ ax[i1, level].set_title(f"{rename_results_dict[key]} {level_text}")
+ fig.tight_layout()
+ fig.savefig(os.path.join(get_path(args.input, "results"), f"{lbl}_results_by_level_{hyp_m}_{hyp_rinv}_{key}.pdf"))
+
+
+for hyp_m, hyp_rinv in hypotheses_to_plot:
+ if 0 not in to_plot_v2:
+ continue # Not for the lower-pt thresholds, where only GL and PL are available
+ if hyp_m not in to_plot_v2[0] or hyp_rinv not in to_plot_v2[0][hyp_m]:
+ continue
+ # plot here the venn diagrams
+ labels = ["LGATr_GP_IRC_S_QCD", "AK8", "LGATr_GP_IRC_S_50k"]
+ labels_global = ["LGATr_GP_IRC_S_QCD", "AK8", "LGATr_GP_IRC_S_50k"]
+ labels_rename = {"LGATr_GP_IRC_S_QCD": "QCD", "LGATr_GP_IRC_S_50k": "900_03"}
+ fig_venn2, ax_venn2 = plt.subplots(1, len(labels), figsize=(4*len(labels), 4)) # the bottom ones are for pt of the DQ, pt of the MC GT, pt of MC GT / pt of DQ, eta, and phi distributions
+ for j, label in enumerate(labels):
+ #labels = list(results_dict["LGATr_comparison_GP_IRC_S_training"][0].keys())
+ label_combination_to_number = {} # fill it with all possible label combinations e.g. if there are 3 labels: "NA", "0", "1", "2", "01", "012", "12", "02"
+ powerset_str = ["".join([str(x) for x in sorted(list(a))]) for a in powerset(range(3))]
+ set_to_count = {key: 0 for key in powerset_str}
+ label_to_result = {}
+ n_dq = 99999999 # Sometimes, the last batch gets cut off etc. ...
+ for level in range(3):
+ r = flatten_list(quark_to_jet[level][hyp_m][hyp_rinv][label])
+ n_dq = min(n_dq, len(r))
+ for level in range(3):
+ r = torch.tensor(flatten_list(quark_to_jet[level][hyp_m][hyp_rinv][label]))
+ r = (r != -1)
+ label_to_result[level] = r.tolist()[:n_dq]
+ assert len(label_to_result[level]) == n_dq, f"Label {label} has different number of quarks than others {n_dq} != {len(label_to_result[level])}"
+ for c in tqdm(range(n_dq)):
+ belonging_to_set = ""
+ for lvl in range(3):
+ if label_to_result[lvl][c] == 1:
+ belonging_to_set += str(lvl)
+ set_to_count[belonging_to_set] += 1
+ if hyp_m == 0 and hyp_rinv == 0:
+ title = f"QCD, {label} (missed by all: {set_to_count['']}) "
+ else:
+ title = f"$m_{{Z'}}={hyp_m}$ GeV, $r_{{inv.}}={hyp_rinv}$, {label} (miss: {set_to_count['']}) "
+ ax_venn2[j].set_title(title)
+ plot_venn3_from_index_dict(ax_venn2[j], set_to_count, set_labels=text_level, set_colors=["orange", "gray", "red"], remove_max=1)
+ fig_venn2.tight_layout()
+ f = os.path.join(get_path(args.input, "results"), f"venn_diagram_{hyp_m}_{hyp_rinv}_Agreement_between_levels.pdf")
+ fig_venn2.savefig(f)
+
+
+for key in results_dict:
+ for level in range(3):
+ level_text = text_level[level]
+ labels = list(results_dict[key][0].keys())
+ if level in to_plot_v2:
+ f, a = multiple_matrix_plot(to_plot_v2[level], labels=labels, colors=[results_dict[key][0][l] for l in labels], rename_dict=results_dict[key][1])
+ if f is None:
+ print("No figure for", key, level)
+ continue
+ #f.suptitle(f"{level_text} $F_1$ score")
+ out_file = f"grid_stack_F1_{level_text}_{key}.pdf"
+ out_file = os.path.join(get_path(args.input, "results"), out_file)
+ f.savefig(out_file)
+ print("Saved to", out_file)
+
+from matplotlib.lines import Line2D
+
+# Define custom legend handles
+custom_lines = [
+ Line2D([0], [0], color='orange', linestyle='-', label='LGATr'),
+ Line2D([0], [0], color='green', linestyle='-', label='GATr'),
+ Line2D([0], [0], color='blue', linestyle='-', label='Transformer'),
+ Line2D([0], [0], color='gray', linestyle='-', label='AK8'),
+ Line2D([0], [0], color='black', linestyle='-', label='reco'),
+ Line2D([0], [0], color='black', linestyle=':', label='gen'),
+ Line2D([0], [0], color='black', linestyle='--', label='parton'),
+]
+
+if len(models):
+ fig_steps, ax_steps = plt.subplots(len(m_Meds), len(r_invs), figsize=(sz_small * len(r_invs), sz_small * len(m_Meds)))
+ if len(m_Meds) == 1 and len(r_invs) == 1:
+ ax_steps = np.array([[ax_steps]])
+ histograms = {}
+
+ for key in histograms_dict:
+ if key not in histograms:
+ histograms[key] = {}
+ for i in ["pt", "eta", "phi"]:
+ f, a = plt.subplots(len(m_Meds), len(r_invs), figsize=(sz_small * len(r_invs), sz_small * len(m_Meds)))
+ if len(r_invs) == 1 and len(m_Meds) == 1:
+ a = np.array([[a]])
+ histograms[key][i] = f, a
+ colors = {"base_LGATr": "orange", "base_Tr": "blue", "base_GATr": "green", "AK8": "gray"} # THE COLORS FOR THE STEP VS. F1 SCORE
+ #colors_small_dataset = {"base_LGATr_SD": "orange", "base_Tr_SD": "blue", "base_GATr_SD": "green", "AK8": "gray"}
+ #colors = colors_small_dataset
+ level_styles = {"scouting": "solid", "PL": "dashed", "GL": "dotted"}
+ #step_to_plot_histograms = 50000 # phi, eta, pt histograms...
+ level_to_plot_histograms = "scouting"
+
+
+ for i, mMed_h in enumerate(m_Meds):
+ for j, rInv_h in enumerate(r_invs):
+ ax_steps[i, j].set_title("$m_{{Z'}} = {}$ GeV, $r_{{inv.}} = {}$".format(mMed_h, rInv_h))
+ ax_steps[i, j].set_xlabel("Training step")
+ ax_steps[i, j].set_ylabel("Test $F_1$ score")
+ #if j == 0:
+ #ax_steps[i, j].set_ylabel("$m_{{Z'}} = {}$".format(mMed_h))
+ #for subset in histograms:
+ #for key in histograms[subset]:
+ #histograms[subset][key][1][i, j].set_ylabel("$m_{{Z'}} = {}$".format(mMed_h))
+ if i == len(m_Meds)-1:
+ ax_steps[i, j].set_xlabel("$r_{{inv.}} = {}$".format(rInv_h))
+ for subset in histograms:
+ for key in histograms[subset]:
+ histograms[subset][key][1][i, j].set_xlabel("$r_{{inv.}} = {}$".format(rInv_h))
+ for model in jet_properties:
+ if level_to_plot_histograms not in jet_properties[model][mMed_h][rInv_h]:
+ print("Skipping", model, level_to_plot_histograms, " - levels:", jet_properties[model][mMed_h][rInv_h].keys())
+ continue
+ for subset in histograms:
+ for key in histograms[subset]:
+ if model not in histograms_dict[subset][1]:
+ continue
+ step_to_plot_histograms = histograms_dict[subset][0][model]
+ if step_to_plot_histograms not in jet_properties[model][mMed_h][rInv_h][level_to_plot_histograms]:
+ print("Swapping the step to plot histograms", jet_properties[model][mMed_h][rInv_h][level_to_plot_histograms].keys())
+ step_to_plot_histograms = sorted(list(jet_properties[model][mMed_h][rInv_h][level_to_plot_histograms].keys()))[0]
+ pred = np.array(jet_properties[model][mMed_h][rInv_h][level_to_plot_histograms][step_to_plot_histograms][key + "_pred"])
+ truth = np.array(jet_properties[model][mMed_h][rInv_h][level_to_plot_histograms][step_to_plot_histograms][key + "_gen_particle"])
+ if key.startswith("pt"):
+ q = pred/truth
+ symbol = "/" # division instead of subtraction symbol for pt
+ quantity = "p_{T,pred}/p_{T,true}"
+ bins = np.linspace(0, 2.5, 100)
+ elif key.startswith("eta"):
+ q = (pred - truth)
+ symbol = "-"
+ quantity="\eta_{pred}-\eta_{true}"
+ bins = np.linspace(-0.8, 0.8, 50)
+ elif key.startswith("phi"):
+ q = pred - truth
+ symbol = "-"
+ quantity = "\phi_{pred}-\phi_{true}"
+ q[q > np.pi] -= 2 * np.pi
+ q[q< -np.pi] += 2 * np.pi
+ bins = np.linspace(-0.8, 0.8, 50)
+ print("Max", np.max(q), "Min", np.min(q))
+ rename = {"base_LGATr": "LGATr",
+ "LGATr_GP_IRC_S_50k": "LGATr_GP_IRC_S",
+ "AK8": "AK8",
+ "LGATr_GP_50k": "LGATr_GP"}
+ histograms[subset][key][1][i, j].hist(q, histtype="step", color=histograms_dict[subset][1][model], label=rename.get(model, model), bins=bins, density=True)
+ if mMed_h > 0:
+ histograms[subset][key][1][i, j].set_title(f"${quantity}$ $m_{{Z'}}={mMed_h}$ GeV, $r_{{inv.}}={rInv_h}$")
+ else:
+ histograms[subset][key][1][i, j].set_title(f"${quantity}$")
+ histograms[subset][key][1][i, j].legend()
+ histograms[subset][key][1][i, j].grid(True)
+ for model in to_plot_steps:
+ for lvl in to_plot_steps[model][mMed_h][rInv_h]:
+ if model not in colors:
+ print("Skipping", model)
+ continue
+ print(model)
+ ls = level_styles[lvl]
+ plt_dict = to_plot_steps[model][mMed_h][rInv_h][lvl]
+ x_pts = sorted(list(plt_dict.keys()))
+ y_pts = [plt_dict[k] for k in x_pts]
+ if ls == "solid":
+ ax_steps[i, j].plot(x_pts, y_pts, label=model, marker=".", linestyle=ls, color=colors[model])
+ else:
+ # No label
+ ax_steps[i, j].plot(x_pts, y_pts, marker=".", linestyle=ls, color=colors[model])
+ ax_steps[i, j].legend(handles=custom_lines)
+ # now plot a horizontal line for the AKX same level
+ if lvl == "scouting":
+ rc = result_AKX_current
+ elif lvl == "PL":
+ rc = result_AKX_PL
+ elif lvl == "GL":
+ rc = result_AKX_GL
+ else:
+ raise Exception
+ pr = rc[mMed_h][mDark][rInv_h][0]
+ rec = rc[mMed_h][mDark][rInv_h][1]
+ f1ak = 2 * pr * rec / (pr + rec)
+ ax_steps[i, j].axhline(f1ak, color="gray", linestyle=ls, alpha=0.5)
+ ax_steps[i, j].grid(1)
+ path_steps_fig = os.path.join(get_path(args.input, "results"), "score_vs_step_plots.pdf")
+ fig_steps.tight_layout()
+ fig_steps.savefig(path_steps_fig)
+ for subset in histograms:
+ for key in histograms[subset]:
+ fig = histograms[subset][key][0]
+ fig.tight_layout()
+ fig.savefig(os.path.join(get_path(args.input, "results"), "histogram_{}_{}.pdf".format(key, subset)))
+ print("Saved to", path_steps_fig)
+
+
+'''for i, h in enumerate(plotting_hypotheses):
+ mMed_h, rInv_h = h
+ if rInv_h not in to_plot[td]:
+ to_plot[td][rInv_h] = {}
+ print("Model", model)
+ if mMed_h not in to_plot[td][rInv_h]:
+ to_plot[td][rInv_h][mMed_h] = {} # level
+ if level not in to_plot[td][rInv_h][mMed_h]:
+ to_plot[td][rInv_h][mMed_h][level] = {"precision": [], "recall": [], "f1score": [], "R": []}
+ precision = result_PR[mMed_h][mDark][rInv_h][0]
+ recall = result_PR[mMed_h][mDark][rInv_h][1]
+ f1score = 2 * precision * recall / (precision + recall)
+ to_plot[td][rInv_h][mMed_h][level]["precision"].append(precision)
+ to_plot[td][rInv_h][mMed_h][level]["recall"].append(recall)
+ to_plot[td][rInv_h][mMed_h][level]["f1score"].append(f1score)
+ to_plot[td][rInv_h][mMed_h][level]["R"].append(r)
+
+'''
+to_plot_ak = {} # level ("scouting"/"GL"/"PL") -> rInv -> mMed -> {"f1score": [], "R": []}
+
+for j, model in enumerate(["AKX", "AKX_PL", "AKX_GL"]):
+ print(model)
+ if os.path.exists(os.path.join(path, model, "count_matched_quarks", "result_PR_AKX.pkl")):
+ result_PR_AKX = pickle.load(open(os.path.join(path, model, "count_matched_quarks", "result_PR_AKX.pkl"), "rb"))
+ else:
+ print("Skipping", model)
+ continue
+ level = "scouting"
+ if "PL" in model:
+ level = "PL"
+ elif "GL" in model:
+ level = "GL"
+ if level not in to_plot_ak:
+ to_plot_ak[level] = {}
+ for mMed_h in result_PR_AKX:
+ if mMed_h not in results_all_ak:
+ results_all_ak[mMed_h] = {mDark: {}}
+ for rInv_h in result_PR_AKX[mMed_h][mDark]:
+ if rInv_h not in results_all_ak[mMed_h][mDark]:
+ results_all_ak[mMed_h][mDark][rInv_h] = {}
+ if level not in results_all_ak[mMed_h][mDark][rInv_h]:
+ results_all_ak[mMed_h][mDark][rInv_h][level] = {}
+ for ridx, R in enumerate(result_PR_AKX[mMed_h][mDark][rInv_h]):
+ if R not in results_all_ak[mMed_h][mDark][rInv_h][level]:
+ precision = result_PR_AKX[mMed_h][mDark][rInv_h][R][0]
+ recall = result_PR_AKX[mMed_h][mDark][rInv_h][R][1]
+ f1score = 2 * precision * recall / (precision + recall)
+ results_all_ak[mMed_h][mDark][rInv_h][level][R] = f1score
+
+ for i, h in enumerate(plotting_hypotheses):
+ mMed_h, rInv_h = h
+ if rInv_h not in to_plot_ak[level]:
+ to_plot_ak[level][rInv_h] = {}
+ print("Model", model)
+ if mMed_h not in to_plot_ak[level][rInv_h]:
+ to_plot_ak[level][rInv_h][mMed_h] = {"precision": [], "recall": [], "f1score": [], "R": []}
+ rs = sorted(result_PR_AKX[mMed_h][mDark][rInv_h].keys())
+ precision = np.array([result_PR_AKX[mMed_h][mDark][rInv_h][i][0] for i in rs])
+ recall = np.array([result_PR_AKX[mMed_h][mDark][rInv_h][i][1] for i in rs])
+ f1score = 2 * precision * recall / (precision + recall)
+ to_plot_ak[level][rInv_h][mMed_h]["precision"] = precision
+ to_plot_ak[level][rInv_h][mMed_h]["recall"] = recall
+ to_plot_ak[level][rInv_h][mMed_h]["f1score"] = f1score
+ to_plot_ak[level][rInv_h][mMed_h]["R"] = rs
+print("AK:", to_plot_ak)
+fig, ax = plt.subplots(len(to_plot) + 1, len(plotting_hypotheses), figsize=(sz_small * len(plotting_hypotheses), sz_small * len(to_plot))) # also add AKX as last plot
+
+if len(to_plot) == 0:
+ ax = np.array([ax])
+colors = {
+ #"PL": "green",
+ #"GL": "blue",
+ #"scouting": "red",
+ "PL+ghosts": "green",
+ "GL+ghosts": "blue",
+ "scouting+ghosts": "red"
+}
+ak_colors = {
+ "PL": "green",
+ "GL": "blue",
+ "scouting": "red",
+}
+'''
+for i, td in enumerate(to_plot):
+ # for each training dataset
+ for j, h in enumerate(plotting_hypotheses):
+ ax[i, j].set_title(f"r_inv={h[1]}, m={h[0]}, tr. on {td}")
+ ax[i, j].set_ylabel("F1 score")
+ ax[i, j].set_xlabel("GT R")
+ ax[i, j].grid()
+ for level in sorted(list(to_plot[td][h[1]][h[0]].keys())):
+ print("level", level)
+ print("Plotting", td, h[1], h[0], level)
+ if level in colors:
+ ax[i, j].plot(to_plot[td][h[1]][h[0]][level]["R"], to_plot[td][h[1]][h[0]][level]["f1score"], ".-", label=level, color=colors[level])
+ ax[i, j].legend()
+for j, h in enumerate(plotting_hypotheses): # for to_plot_AK
+ ax[-1, j].set_title(f"r_inv={h[1]}, m={h[0]}, AK baseline")
+ ax[-1, j].set_ylabel("F1 score")
+ ax[-1, j].set_xlabel("GT R")
+ ax[-1, j].grid()
+ for i, ak_level in enumerate(sorted(list(to_plot_ak.keys()))):
+ mMed_h, rInv_h = h
+ if ak_level in ak_colors:
+ ax[-1, j].plot(to_plot_ak[ak_level][rInv_h][mMed_h]["R"], to_plot_ak[ak_level][rInv_h][mMed_h]["f1score"], ".-", label=ak_level, color=ak_colors[ak_level])
+ ax[-1, j].legend()
+fig.tight_layout()
+fig.savefig(os.path.join(get_path(args.input, "results"), "score_vs_GT_R_plots_1.pdf"))
+print("Saved to", os.path.join(get_path(args.input, "results"), "score_vs_GT_R_plots_1.pdf"))
+'''
+fig, ax = plt.subplots(1, len(results_all)*len(radius) + len(radius), figsize=(7 * len(results_all)*len(radius)+len(radius), 5))
+for i, model in enumerate(results_all):
+ for j, R in enumerate(radius):
+ #if r not in results_all[model][700][20][0.3]["scouting"]:
+ # continue
+ # for each training dataset
+ index = len(radius)*i + j
+ ax[index].set_title(model + " R={}".format(R))
+ matrix_plot(results_all[model], "Greens", r"PL/GL F1 score", ax=ax[index], metric_comp_func=lambda r: r["PL+ghosts"][R]/r["scouting+ghosts"][R])
+for i, R in enumerate(radius):
+ index = len(radius)*len(results_all) + i
+ ax[index].set_title("AK R={}".format(R))
+ matrix_plot(results_all_ak, "Greens", r"PL/GL F1 score", ax=ax[index], metric_comp_func=lambda r: r["PL"][R]/r["GL"][R])
+fig.tight_layout()
+fig.savefig(out_file_PG)
+
+print("Saved to", out_file_PG)
+1/0
+
+
+#print("Saved to", os.path.join(get_path(args.input, "results"), "score_vs_GT_R_plots_AK.pdf"))
+#print("Saved to", os.path.join(get_path(args.input, "results"), "score_vs_GT_R_plots_AK_ratio.pdf"))
+
+########### Now save the above plot with objectness score applied
+
+if args.threshold_obj_score != -1:
+ fig, ax = plt.subplots(3, len(models), figsize=(sz * len(models), sz * 3))
+ for i, model in tqdm(enumerate(models)):
+ output_path = os.path.join(path, model, "count_matched_quarks")
+ if not os.path.exists(os.path.join(output_path, "result.pkl")):
+ continue
+ result = pickle.load(open(os.path.join(output_path, "result.pkl"), "rb"))
+ #result_unmatched = pickle.load(open(os.path.join(output_path, "result_unmatched.pkl"), "rb"))
+ result_fakes = pickle.load(open(os.path.join(output_path, "result_fakes.pkl"), "rb"))
+ result_bc = pickle.load(open(os.path.join(output_path, "result_bc.pkl"), "rb"))
+ result_PR = pickle.load(open(os.path.join(output_path, "result_PR.pkl"), "rb"))
+ result_PR_thresholds = pickle.load(open(os.path.join(output_path, "result_PR_thresholds.pkl"), "rb"))
+ #thresholds = sorted(list(result_PR_thresholds[900][20][0.3].keys()))
+ #thresholds = np.array(thresholds)
+ # now linearly interpolate the thresholds and set the j according to args.threshold_obj_score
+ j = np.argmin(np.abs(thresholds - args.threshold_obj_score))
+ print("Thresholds", thresholds)
+ print("Chose j=", j, "for threshold", args.threshold_obj_score, "(effectively it's", thresholds[j], ")")
+ def wrap(r):
+ # compute [precision, recall] array from [n_relevant_retrieved, all_retrieved, all_relevant]
+ if r[1] == 0 or r[2] == 0:
+ return [0, 0]
+ return [r[0] / r[1], r[0] / r[2]]
+ matrix_plot(result_PR_thresholds, "Oranges", "Precision (N matched dark quarks / N predicted jets)", metric_comp_func = lambda r: wrap(r[j])[0], ax=ax[0, i])
+ matrix_plot(result_PR_thresholds, "Reds", "Recall (N matched dark quarks / N dark quarks)", metric_comp_func = lambda r: wrap(r[j])[1], ax=ax[1, i])
+ matrix_plot(result_PR_thresholds, "Purples", r"$F_1$ score", metric_comp_func = lambda r: 2 * wrap(r[j])[0] * wrap(r[j])[1] / (wrap(r[j])[0] + wrap(r[j])[1]), ax=ax[2, i])
+ ax[0, i].set_title(model)
+ ax[1, i].set_title(model)
+ ax[2, i].set_title(model)
+ fig.tight_layout()
+ fig.savefig(out_file_PR_OS)
+ print("Saved to", out_file_PR_OS)
+
+################
+# UNUSED PLOTS #
+################
+'''fig, ax = plt.subplots(2, len(models), figsize=(sz * len(models), sz * 2))
+for i, model in tqdm(enumerate(models)):
+ output_path = os.path.join(path, model, "count_matched_quarks")
+ if not os.path.exists(os.path.join(output_path, "result.pkl")):
+ continue
+ result = pickle.load(open(os.path.join(output_path, "result.pkl"), "rb"))
+ #result_unmatched = pickle.load(open(os.path.join(output_path, "result_unmatched.pkl"), "rb"))
+ result_fakes = pickle.load(open(os.path.join(output_path, "result_fakes.pkl"), "rb"))
+ result_bc = pickle.load(open(os.path.join(output_path, "result_bc.pkl"), "rb"))
+ result_PR = pickle.load(open(os.path.join(output_path, "result_PR.pkl"), "rb"))
+ matrix_plot(result, "Blues", "Avg. matched dark quarks / event", ax=ax[0, i])
+ matrix_plot(result_fakes, "Greens", "Avg. unmatched jets / event", ax=ax[1, i])
+ ax[0, i].set_title(model)
+ ax[1, i].set_title(model)
+fig.tight_layout()
+fig.savefig(out_file_avg_number_matched_quarks)
+print("Saved to", out_file_avg_number_matched_quarks)'''
+
+rinvs = [0.3, 0.5, 0.7]
+sz = 4
+fig, ax = plt.subplots(len(rinvs), 3, figsize=(3*sz, sz*len(rinvs)))
+fig_AK, ax_AK = plt.subplots(len(rinvs), 3, figsize=(3*sz, sz*len(rinvs)))
+fig_AK_ratio, ax_AK_ratio = plt.subplots(len(rinvs), 3, figsize=(3*sz, sz*len(rinvs)))
+
+
+to_plot = {} # r_inv -> m_med -> precision, recall, R
+to_plot_ak = {} # plotting for the AK baseline
+
+### Plotting the score vs GT R plots
+
+oranges = plt.get_cmap("Oranges")
+reds = plt.get_cmap("Reds") # Plot a plot for each mass at given r_inv of the precision, recall, F1 score
+purples = plt.get_cmap("Purples")
+
+mDark = 20
+
+for i, rinv in enumerate(rinvs):
+ if rinv not in to_plot:
+ to_plot[rinv] = {}
+ to_plot_ak[rinv] = {}
+ for j, model in enumerate(models):
+ print("Model", model)
+ if model not in radius:
+ continue
+ r = radius[model]
+ output_path = os.path.join(path, model, "count_matched_quarks")
+ if not os.path.exists(os.path.join(output_path, "result_PR.pkl")):
+ continue
+ result_PR = pickle.load(open(os.path.join(output_path, "result_PR.pkl"), "rb"))
+ #if radius not in to_plot[rinv]:
+ # to_plot[rinv][radius] = {}
+ for k, mMed in enumerate(sorted(result_PR.keys())):
+ if mMed not in to_plot[rinv]:
+ to_plot[rinv][mMed] = {"precision": [], "recall": [], "f1score": [], "R": []}
+ precision = result_PR[mMed][mDark][rinv][0]
+ recall = result_PR[mMed][mDark][rinv][1]
+ f1score = 2 * precision * recall / (precision + recall)
+ to_plot[rinv][mMed]["precision"].append(precision)
+ to_plot[rinv][mMed]["recall"].append(recall)
+ to_plot[rinv][mMed]["f1score"].append(f1score)
+ to_plot[rinv][mMed]["R"].append(r)
+ for mMed in sorted(to_plot[rinv].keys()):
+ # normalize mmed between 0 and 1 (originally between 700 and 3000)
+ mmed = (mMed - 500) / (3000 - 500)
+ r = to_plot[rinv][mMed]
+ print("Model R", r["R"])
+ scatter_plot(ax[0, i], r["R"], r["precision"], label="m={} GeV".format(round(mMed)), color=oranges(mmed))
+ scatter_plot(ax[1, i], r["R"], r["recall"], label="m={} GeV".format(round(mMed)), color=reds(mmed))
+ scatter_plot(ax[2, i], r["R"], r["f1score"], label="m={} GeV".format(round(mMed)), color=purples(mmed))
+ if not os.path.exists(os.path.join(ak_path, "result_PR_AKX.pkl")):
+ continue
+ result_PR_AKX = pickle.load(open(os.path.join(ak_path, "result_PR_AKX.pkl"), "rb"))
+ result_jet_props_akx = pickle.load(open(os.path.join(ak_path, "result_jet_properties_AKX.pkl"), "rb"))
+ #if radius not in to_plot[rinv]:
+ # to_plot[rinv][radius] = {}
+ for k, mMed in enumerate(sorted(result_PR_AKX.keys())):
+ if mMed not in to_plot_ak[rinv]:
+ to_plot_ak[rinv][mMed] = {"precision": [], "recall": [], "f1score": [], "R": []}
+ rs = sorted(result_PR_AKX[mMed][mDark][rinv].keys())
+ precision = np.array([result_PR_AKX[mMed][mDark][rinv][k][0] for k in rs])
+ recall = np.array([result_PR_AKX[mMed][mDark][rinv][k][1] for k in rs])
+ f1score = 2 * precision * recall / (precision + recall)
+ to_plot_ak[rinv][mMed]["precision"] += list(precision)
+ to_plot_ak[rinv][mMed]["recall"] += list(recall)
+ to_plot_ak[rinv][mMed]["f1score"] += list(f1score)
+ to_plot_ak[rinv][mMed]["R"] += rs
+
+ for mMed in sorted(to_plot_ak[rinv].keys()):
+ # Normalize mmed between 0 and 1 (originally between 700 and 3000)
+ mmed = (mMed - 500) / (3000 - 500)
+ r = to_plot_ak[rinv][mMed]
+ r_model = to_plot[rinv][mMed]
+ print("AK R", r["R"])
+ scatter_plot(ax_AK[0, i], r["R"], r["precision"], label="m={} GeV AK".format(round(mMed)), color=oranges(mmed), pattern=".--")
+ scatter_plot(ax_AK[1, i], r["R"], r["recall"], label="m={} GeV AK".format(round(mMed)), color=reds(mmed), pattern=".--")
+ scatter_plot(ax_AK[2, i], r["R"], r["f1score"], label="m={} GeV AK".format(round(mMed)), color=purples(mmed), pattern=".--")
+ # r["R"] has more points than r_model["R"] - pick those from r["R"] that are in r_model["R"]
+ r["R"] = np.array(r["R"])
+ r["precision"] = np.array(r["precision"])
+ r["recall"] = np.array(r["recall"])
+ r["f1score"] = np.array(r["f1score"])
+ filt = np.isin(r["R"], r_model["R"])
+ r["R"] = r["R"][filt]
+ r["precision"] = r["precision"][filt]
+ r["recall"] = r["recall"][filt]
+ r["f1score"] = r["f1score"][filt]
+ scatter_plot(ax_AK_ratio[0, i], r["R"], r["precision"]/np.array(r_model["precision"]), label="m={} GeV AK".format(round(mMed)), color=oranges(mmed), pattern=".--")
+ scatter_plot(ax_AK_ratio[1, i], r["R"], r["recall"]/np.array(r_model["recall"]), label="m={} GeV AK".format(round(mMed)), color=reds(mmed), pattern=".--")
+ scatter_plot(ax_AK_ratio[2, i], r["R"], r["f1score"]/np.array(r_model["f1score"]), label="m={} GeV AK".format(round(mMed)), color=purples(mmed), pattern=".--")
+
+ for ax1 in [ax, ax_AK, ax_AK_ratio]:
+ ax1[0, i].set_title(f"Precision r_inv = {rinv}")
+ ax1[1, i].set_title(f"Recall r_inv = {rinv}")
+ ax1[2, i].set_title(f"F1 score r_inv = {rinv}")
+ ax1[2, i].legend()
+ ax1[1, i].legend()
+ ax1[0, i].legend()
+ ax1[0, i].grid()
+ ax1[1, i].grid()
+ ax1[2, i].grid()
+ ax1[0, i].set_xlabel("GT R")
+ ax1[1, i].set_xlabel("GT R")
+ ax1[2, i].set_xlabel("GT R")
+ ax_AK_ratio[0, i].set_ylabel("Precision (model=1)")
+ ax_AK_ratio[1, i].set_ylabel("Recall (model=1)")
+ ax_AK_ratio[2, i].set_ylabel("F1 score (model=1)")
+fig.tight_layout()
+fig_AK.tight_layout()
+fig.savefig(os.path.join(get_path(args.input, "results"), "score_vs_GT_R_plots.pdf"))
+fig_AK.savefig(os.path.join(get_path(args.input, "results"), "score_vs_GT_R_plots_AK.pdf"))
+fig_AK_ratio.tight_layout()
+fig_AK_ratio.savefig(os.path.join(get_path(args.input, "results"), "score_vs_GT_R_plots_AK_ratio.pdf"))
+
+print("Saved to", os.path.join(get_path(args.input, "results"), "score_vs_GT_R_plots_AK.pdf"))
+print("Saved to", os.path.join(get_path(args.input, "results"), "score_vs_GT_R_plots_AK_ratio.pdf"))
+
diff --git a/scripts/plot_eval_n_params.py b/scripts/plot_eval_n_params.py
new file mode 100644
index 0000000000000000000000000000000000000000..2a44e0ebd2690abff9064da013a73bc9eeff2b06
--- /dev/null
+++ b/scripts/plot_eval_n_params.py
@@ -0,0 +1,223 @@
+import os
+from tqdm import tqdm
+import argparse
+import pickle
+from src.plotting.eval_matrix import matrix_plot, scatter_plot
+from src.utils.paths import get_path
+import matplotlib.pyplot as plt
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--input", type=str, required=False, default="scouting_PFNano_signals2/SVJ_hadronic_std/batch_eval/small_dataset")
+
+args = parser.parse_args()
+path = get_path(args.input, "results")
+
+def get_steps(config):
+ if "ckpt_step" in config:
+ return config["ckpt_step"]
+ # else, config["load_model_weights"] looks like /.../.../step_xxxx_epoch_y.ckpt (fallback)
+ return int(config["load_model_weights"].split("/")[-1].split("_")[1])
+
+def get_short(network_config):
+ if "transformer" in network_config.lower():
+ return "Transformer"
+ if "lgatr" in network_config.lower():
+ return "LGATr"
+ if "gatr" in network_config.lower():
+ return "GATr"
+ return "Unknown"
+
+def get_model_details(path_to_eval):
+ config = pickle.load(open(os.path.join(path_to_eval, "run_config.pkl"), "rb"))
+ return config["num_parameters"], get_short(config["network_config"]), get_steps(config)
+
+models = sorted([x for x in os.listdir(path) if not (os.path.isfile(os.path.join(path, x)) or "AK8" in x)])# + ["AK8", "AK8_GenJets"]
+data = [get_model_details(os.path.join(path, model)) for model in models] + [(0, "AK8", 0), (0, "AK8_GenJets", 0)]
+models = models + ["AK8", "AK8_GenJets"]
+
+out_file_PR = os.path.join(get_path(args.input, "results"), "precision_recall_n_params.pdf")
+
+sz = 5
+fig, ax = plt.subplots(3, len(models), figsize=(sz * len(models), sz * 3))
+result_scatter = {} # e.g. Transformer -> [xarr, yarr, yarr1, yarr2]
+result_scatter_900_03 = {}
+
+result_by_step = {"900_03": {}, "700_07": {}} # Model+n_params -> [step, p, r, f1]
+
+def get_arch_name(n_params, net_short):
+ if net_short == "Transformer":
+ if n_params == 4674:
+ return "Tr-2-16-4"
+ elif n_params == 1201108:
+ return "Tr"
+ elif n_params == 1322274:
+ return "Tr"
+ elif n_params == 167394:
+ return "Tr-5-64-4"
+ if net_short == "LGATr":
+ if n_params == 8424:
+ return "LGATr-2-4-4"
+ elif n_params == 1201108:
+ return "LGATr"
+ elif n_params == 156332:
+ return "LGATr-3-16-16"
+ if net_short == "GATr":
+ if n_params == 6533:
+ return "GATr-2-4-4"
+ if n_params == 926041:
+ return "GATr"
+ if "AK8" in net_short:
+ return net_short
+ return None
+# n_params, P, R, f1
+
+for i, model in tqdm(enumerate(models)):
+ output_path = os.path.join(path, model, "count_matched_quarks")
+ if not os.path.exists(os.path.join(output_path, "result.pkl")):
+ continue
+ result = pickle.load(open(os.path.join(output_path, "result.pkl"), "rb"))
+ result_fakes = pickle.load(open(os.path.join(output_path, "result_fakes.pkl"), "rb"))
+ result_bc = pickle.load(open(os.path.join(output_path, "result_bc.pkl"), "rb"))
+ result_PR = pickle.load(open(os.path.join(output_path, "result_PR.pkl"), "rb"))
+ #matrix_plot(result_PR, "Oranges", "Precision (N matched dark quarks / N predicted jets)", metric_comp_func = lambda r: r[0], ax=ax[0, i])
+ #matrix_plot(result_PR, "Reds", "Recall (N matched dark quarks / N dark quarks)", metric_comp_func = lambda r: r[1], ax=ax[1, i])
+ #matrix_plot(result_PR, "Purples", r"$F_1$ score", metric_comp_func = lambda r: 2 * r[0] * r[1] / (r[0] + r[1]), ax=ax[2, i])
+ arch = get_arch_name(data[i][0], data[i][1])
+ if arch is not None:
+ if result_by_step["900_03"].get(arch) is None:
+ for key in result_by_step:
+ result_by_step[key][arch] = [[], [], [], []]
+ pr = result_PR[900][20][0.3]
+ result_by_step["900_03"][arch][0].append(data[i][2])
+ result_by_step["900_03"][arch][1].append(pr[0])
+ result_by_step["900_03"][arch][2].append(pr[1])
+ result_by_step["900_03"][arch][3].append(2 * pr[0] * pr[1] / (pr[0] + pr[1]))
+ pr = result_PR[700][20][0.7]
+ result_by_step["700_07"][arch][0].append(data[i][2])
+ result_by_step["700_07"][arch][1].append(pr[0])
+ result_by_step["700_07"][arch][2].append(pr[1])
+ result_by_step["700_07"][arch][3].append(2 * pr[0] * pr[1] / (pr[0] + pr[1]))
+
+ if data[i][2] != 40000:
+ continue
+ ax[0, i].set_title(str(data[i][0]) + " " + data[i][1])
+ ax[1, i].set_title(str(data[i][0]) + " " + data[i][1])
+ ax[2, i].set_title(str(data[i][0]) + " " + data[i][1])
+ if data[i][1] not in result_scatter:
+ result_scatter[data[i][1]] = [[], [], [], []]
+ result_scatter_900_03[data[i][1]] = [[], [], [], []]
+ result_scatter[data[i][1]][0].append(data[i][0])
+ pr = result_PR[700][20][0.7]
+ pr_900_03 = result_PR[900][20][0.3]
+ result_scatter[data[i][1]][3].append(2 * pr[0] * pr[1] / (pr[0] + pr[1]))
+ result_scatter[data[i][1]][1].append(pr[0])
+ result_scatter[data[i][1]][2].append(pr[1])
+ result_scatter_900_03[data[i][1]][3].append(2 * pr_900_03[0] * pr_900_03[1] / (pr_900_03[0] + pr_900_03[1]))
+ result_scatter_900_03[data[i][1]][1].append(pr_900_03[0])
+ result_scatter_900_03[data[i][1]][2].append(pr_900_03[1])
+ result_scatter_900_03[data[i][1]][0].append(data[i][0])
+
+fig.tight_layout()
+fig.savefig(out_file_PR)
+print("Saved to", out_file_PR)
+
+fig_scatter, ax_scatter = plt.subplots(3, 1, figsize=(sz , sz * 3))
+
+colors = {
+ "Transformer": "green",
+ "GATr": "blue",
+ "LGATr": "red",
+}
+for key in result_scatter:
+ scatter_plot(ax_scatter[0], result_scatter[key][0], result_scatter[key][1], key)
+ scatter_plot(ax_scatter[1], result_scatter[key][0], result_scatter[key][2], key)
+ scatter_plot(ax_scatter[2], result_scatter[key][0], result_scatter[key][3], key)
+
+ax_scatter[0].set_ylabel("Precision")
+ax_scatter[1].set_ylabel("Recall")
+ax_scatter[2].set_ylabel("F1 score")
+ax_scatter[0].set_xlabel("N params")
+ax_scatter[1].set_xlabel("N params")
+ax_scatter[2].set_xlabel("N params")
+ax_scatter[0].legend()
+ax_scatter[1].legend()
+ax_scatter[2].legend()
+ax_scatter[0].grid()
+ax_scatter[1].grid()
+ax_scatter[2].grid()
+ax_scatter[0].set_xscale("log")
+ax_scatter[1].set_xscale("log")
+ax_scatter[2].set_xscale("log")
+
+fig_scatter.tight_layout()
+fig_scatter.savefig(out_file_PR.replace(".pdf", "_scatter_700_07.pdf"))
+print("Saved to", out_file_PR.replace(".pdf", "_scatter_700_07.pdf"))
+
+fig_scatter, ax_scatter = plt.subplots(3, 1, figsize=(sz, sz*3))
+
+for key in result_scatter_900_03:
+ scatter_plot(ax_scatter[0], result_scatter_900_03[key][0], result_scatter_900_03[key][1], key)
+ scatter_plot(ax_scatter[1], result_scatter_900_03[key][0], result_scatter_900_03[key][2], key)
+ scatter_plot(ax_scatter[2], result_scatter_900_03[key][0], result_scatter_900_03[key][3], key)
+
+ax_scatter[0].set_ylabel("Precision")
+ax_scatter[1].set_ylabel("Recall")
+ax_scatter[2].set_ylabel("F1 score")
+ax_scatter[0].set_xlabel("N params")
+ax_scatter[1].set_xlabel("N params")
+ax_scatter[2].set_xlabel("N params")
+ax_scatter[0].legend()
+ax_scatter[1].legend()
+ax_scatter[2].legend()
+ax_scatter[0].grid()
+ax_scatter[1].grid()
+ax_scatter[2].grid()
+ax_scatter[0].set_xscale("log")
+ax_scatter[1].set_xscale("log")
+ax_scatter[2].set_xscale("log")
+
+fig_scatter.tight_layout()
+fig_scatter.savefig(out_file_PR.replace(".pdf", "_scatter_900_03.pdf"))
+print("Saved to", out_file_PR.replace(".pdf", "_scatter_900_03.pdf"))
+
+
+fig_scatter, ax_scatter = plt.subplots(3, 2, figsize=(sz*2, sz*3))
+fig_params_paper, ax_params_paper = plt.subplots(1, 2, figsize=(sz, sz*1.5))
+
+for i, key in enumerate(sorted(list(result_by_step.keys()))):
+ for model in result_by_step[key]:
+ #scatter_plot(ax_scatter[], result_scatter_900_03[key][0], result_scatter_900_03[key][1], key)
+ #scatter_plot(ax_scatter[1], result_scatter_900_03[key][0], result_scatter_900_03[key][2], key)
+ #scatter_plot(ax_scatter[2], result_scatter_900_03[key][0], result_scatter_900_03[key][3], key)
+ if "AK8" in model:
+ # put a horizontal dotted line instead of a scatterplot, as there is only one dot
+ colors = {"AK8": "gray", "AK8_GenJets": "black"}
+ ax_scatter[0, i].axhline(result_by_step[key][model][1][0], label=model, color=colors[model], linestyle="--")
+ ax_scatter[1, i].axhline(result_by_step[key][model][2][0], label=model, color=colors[model], linestyle="--")
+ ax_scatter[2, i].axhline(result_by_step[key][model][3][0], label=model, color=colors[model], linestyle="--")
+ else:
+ scatter_plot(ax_scatter[0, i], result_by_step[key][model][0], result_by_step[key][model][1], model)
+ scatter_plot(ax_scatter[1, i], result_by_step[key][model][0], result_by_step[key][model][2], model)
+ scatter_plot(ax_scatter[2, i], result_by_step[key][model][0], result_by_step[key][model][3], model)
+ ax_scatter[0, i].set_title(key)
+ ax_scatter[1, i].set_title(key)
+ ax_scatter[2, i].set_title(key)
+ ax_scatter[0, i].set_ylabel("Precision")
+ ax_scatter[1, i].set_ylabel("Recall")
+ ax_scatter[2, i].set_ylabel("F_1 score")
+ ax_scatter[0, i].set_xlabel("training steps")
+ ax_scatter[1, i].set_xlabel("training steps")
+ ax_scatter[2, i].set_xlabel("training steps")
+ ax_scatter[0, i].legend()
+ ax_scatter[1, i].legend()
+ ax_scatter[2, i].legend()
+ ax_scatter[0, i].grid()
+ ax_scatter[1, i].grid()
+ ax_scatter[2, i].grid()
+ ax_scatter[0, i].set_xscale("log")
+ ax_scatter[1, i].set_xscale("log")
+ ax_scatter[2, i].set_xscale("log")
+fig_scatter.tight_layout()
+fig_scatter.savefig(out_file_PR.replace(".pdf", "_by_step.pdf"))
+print("Saved to", out_file_PR.replace(".pdf", "_by_step.pdf"))
+
diff --git a/scripts/plot_mass_resolution.py b/scripts/plot_mass_resolution.py
new file mode 100644
index 0000000000000000000000000000000000000000..67748ec2370ef8d482def14d4266e6469e48ed3a
--- /dev/null
+++ b/scripts/plot_mass_resolution.py
@@ -0,0 +1,150 @@
+import os
+from tqdm import tqdm
+import argparse
+import pickle
+from src.plotting.eval_matrix import matrix_plot, scatter_plot
+from src.utils.paths import get_path
+import matplotlib.pyplot as plt
+import numpy as np
+
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--input", type=str, required=False, default="scouting_PFNano_signals2/SVJ_hadronic_std/all_models_eval_FT_R")
+
+args = parser.parse_args()
+path = get_path(args.input, "results")
+
+models = sorted([x for x in os.listdir(path) if not os.path.isfile(os.path.join(path, x))])
+
+radius = {
+ "LGATr_R10": 1.0,
+ "LGATr_R09": 0.9,
+ "LGATr_rinv_03_m_900": 0.8,
+ "LGATr_R08": 0.8,
+ "LGATr_R06": 0.6,
+ "LGATr_R07": 0.7,
+ "LGATr_R11": 1.1,
+ "LGATr_R12": 1.2,
+ "LGATr_R13": 1.3,
+ "LGATr_R14": 1.4,
+ "LGATr_R20": 2.0,
+ "LGATr_R25": 2.5
+
+}
+
+out_file = {}
+
+sz = 5
+fig, ax = plt.subplots(len(models), 2, figsize=(sz * 2, sz/2 * len(models)))
+
+bins = np.linspace(0, 2, 100)
+for i, model in tqdm(enumerate(models)):
+ output_path = os.path.join(path, model, "count_matched_quarks")
+ f = os.path.join(output_path, "result_m.pkl")
+ if not os.path.isfile(f):
+ continue
+ result = pickle.load(open(f, "rb"))
+ f1 = os.path.join(output_path, "result_PR.pkl")
+ r = result[900][20][0.3]
+ ax[i, 0].hist(r["m_pred"] / r["m_true"], bins=bins, histtype="step", label="all")
+ ax[i, 1].hist(r["mt_pred"] / r["mt_true"], bins=bins, histtype="step", label="all")
+ if "n_jets" in r:
+ m_pred_over_true = r["m_pred"] / r["m_true"]
+ mt_pred_over_true = r["mt_pred"] / r["mt_true"]
+ ax[i, 0].hist(m_pred_over_true[r["n_jets"] == 0], bins=bins, histtype="step", label="0 jets")
+ ax[i, 1].hist(mt_pred_over_true[r["n_jets"] == 0], bins=bins, histtype="step", label="0 jets")
+ ax[i, 0].hist(m_pred_over_true[r["n_jets"] == 1], bins=bins, histtype="step", label="1 jet")
+ ax[i, 1].hist(mt_pred_over_true[r["n_jets"] == 1], bins=bins, histtype="step", label="1 jet")
+ # 2+ jets
+ ax[i, 0].hist(m_pred_over_true[r["n_jets"] > 1], bins=bins, histtype="step", label="2+ jets")
+ ax[i, 1].hist(mt_pred_over_true[r["n_jets"] > 1], bins=bins, histtype="step", label="2+ jets")
+ ax[i, 0].legend()
+ ax[i, 1].legend()
+ ax[i, 0].set_title(model)
+ ax[i, 1].set_title(model)
+ ax[i, 0].set_xlabel("m_pred / m_true")
+ ax[i, 1].set_xlabel("mt_pred / mt_true")
+ ax[i, 0].set_yscale("log")
+ ax[i, 1].set_yscale("log")
+fig.tight_layout()
+fig.savefig(os.path.join(path, "mass_histograms.pdf"))
+
+
+
+#######
+
+sz = 5
+r_invs = {"03": 0.3, "07": 0.7, "05": 0.5}
+c = {}
+for r_inv in r_invs:
+ fig, ax = plt.subplots(len(result), 2, figsize=(sz * 2, sz/2 * len(models)))
+ bins = np.linspace(0, 2, 100)
+ for i, mmed in tqdm(enumerate(sorted(result.keys()))):
+ for j, model in enumerate(models):
+ output_path = os.path.join(path, model, "count_matched_quarks")
+ f = os.path.join(output_path, "result_m.pkl")
+ if not os.path.isfile(f):
+ continue
+ if f not in c:
+ c[f] = pickle.load(open(f, "rb"))
+ result = c[f]
+ r = result[mmed][20][r_invs[r_inv]]
+ ax[i, 0].hist(r["m_pred"] / r["m_true"], bins=bins, histtype="step", label=model)
+ ax[i, 1].hist(r["mt_pred"] / r["mt_true"], bins=bins, histtype="step", label=model)
+ ax[i, 0].set_title("m_med = " + str(mmed))
+ ax[i, 1].set_title("m_med = " + str(mmed))
+ ax[i, 0].set_xlabel("m_pred / m_true")
+ ax[i, 1].set_xlabel("mt_pred / mt_true")
+ ax[i, 0].set_yscale("log")
+ ax[i, 1].set_yscale("log")
+ ax[i, 0].legend()
+ ax[i, 1].legend()
+ fig.tight_layout()
+ fig.savefig(os.path.join(path, "mass_histograms_model_comparison_{}.pdf".format(r_inv)))
+
+##########
+blues = plt.get_cmap("Blues")
+def get_color(model):
+ if model == "AK8":
+ return "gray"
+ if model == "AK8_GenJets":
+ return "black"
+ # else, get the radius
+ R = radius[model]
+ # normalize R between 0 and 1 (originally between 0.3 and 1.4)
+ r = (R - 0.3) / (2.5 - 0.3)
+ return blues(r)
+
+
+sz = 5
+r_invs = {"03": 0.3, "07": 0.7, "05": 0.5}
+c = {}
+for r_inv in r_invs:
+ fig, ax = plt.subplots(len(result), 2, figsize=(sz * 2, sz/2 * len(models)))
+ bins = np.linspace(0, 2, 100)
+ bins2 = np.linspace(0, 2, 50)
+
+ for i, mmed in tqdm(enumerate(sorted(result.keys()))):
+ for j, model in enumerate(models):
+ output_path = os.path.join(path, model, "count_matched_quarks")
+ f = os.path.join(output_path, "result_m.pkl")
+ if not os.path.isfile(f):
+ continue
+ if f not in c:
+ c[f] = pickle.load(open(f, "rb"))
+ result = c[f]
+ r = result[mmed][20][r_invs[r_inv]]
+ if "n_jets" in r and (model in radius or model in ["AK8", "AK8_GenJets"]):
+ ax[i, 0].hist((r["m_pred"] / r["m_true"])[r["n_jets"] == 2], bins=bins2, histtype="step", label=model, color=get_color(model))
+ ax[i, 1].hist((r["mt_pred"] / r["mt_true"])[r["n_jets"] == 2], bins=bins2, histtype="step", label=model, color=get_color(model))
+ ax[i, 0].set_title("m_med = " + str(mmed))
+ ax[i, 1].set_title("m_med = " + str(mmed))
+ ax[i, 0].set_xlabel("m_pred / m_true")
+ ax[i, 1].set_xlabel("mt_pred / mt_true")
+ ax[i, 0].set_yscale("log")
+ ax[i, 1].set_yscale("log")
+ ax[i, 0].legend()
+ ax[i, 1].legend()
+ fig.tight_layout()
+ fig.savefig(os.path.join(path, "mass_histograms_model_comparison_2jets_{}.pdf".format(r_inv)))
+
diff --git a/scripts/plot_multiple_models_clustering.py b/scripts/plot_multiple_models_clustering.py
new file mode 100644
index 0000000000000000000000000000000000000000..1e5150a7b4b93d3206fa884f2eba64cb8be3fe33
--- /dev/null
+++ b/scripts/plot_multiple_models_clustering.py
@@ -0,0 +1,302 @@
+import pickle
+import torch
+import os
+import matplotlib.pyplot as plt
+from src.utils.paths import get_path
+from src.utils.utils import CPU_Unpickler
+from pathlib import Path
+from src.dataset.dataset import EventDataset
+import numpy as np
+from src.plotting.plot_event import plot_event
+from pathlib import Path
+
+#%%
+
+def get_properties(name):
+ if "qcd" in name.lower():
+ return 0, 0, 0 # Standard Model events
+ # get mediator mass, dark quark mass, r_inv from the filename
+ parts = name.strip().strip("/").split("/")[-1].split("_")
+ try:
+ mMed = int(parts[1].split("-")[1])
+ mDark = int(parts[2].split("-")[1])
+ rinv = float(parts[3].split("-")[1])
+ except:
+ # another convention
+ mMed = int(parts[2].split("-")[1])
+ mDark = int(parts[3].split("-")[1])
+ rinv = float(parts[4].split("-")[1])
+ return mMed, mDark, rinv
+
+
+#%%
+
+clist = ['#1f78b4', '#b3df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbe6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928']
+colors = {
+ -1: "gray",
+ 0: clist[0],
+ 1: clist[1],
+ 2: clist[2],
+ 3: clist[3],
+ 4: clist[4],
+ 5: clist[5],
+ 6: clist[6],
+ 7: clist[7],
+}
+
+#%%
+# The 'default' models:
+import fastjet
+models = {
+ "GATr_rinv_03_m_900": "train/Test_betaPt_BC_all_datasets_2025_01_07_17_50_45",
+ "GATr_rinv_07_m_900": "train/Test_betaPt_BC_all_datasets_2025_01_08_10_54_58",
+ #"LGATr_rinv_03_m_900": "train/Test_LGATr_all_datasets_2025_01_08_19_27_54",
+ "LGATr_rinv_07_m_900_s31k": "train/Eval_LGATr_SB_spatial_part_only_1_2025_01_13_14_31_58"
+}
+
+# Models with the varying R study
+
+models = {
+ #"R06": "train/Eval_GT_R_lgatr_R06_2025_01_16_13_41_48",
+ #"R07": "train/Eval_GT_R_lgatr_R07_2025_01_16_13_41_41",
+ #"R09": "train/Eval_GT_R_lgatr_R09_2025_01_16_13_41_45",
+ "R=0.8": "train/Test_LGATr_all_datasets_2025_01_08_19_27_54",
+ "R=1.0": "train/Eval_GT_R_lgatr_R10_2025_01_16_13_41_52",
+ "R=1.4": "train/Eval_GT_R_lgatr_R14_2025_01_18_13_28_47",
+ "R=2.0": "train/Eval_GT_R_lgatr_R20_2025_01_22_10_51_30"
+}
+
+
+## Objectness score odels
+
+models = {
+ "R=2.0,OS_GT=closest_only": "train/Eval_objectness_score_2025_02_14_11_10_14",
+ "R=2.0,GT=all_in_radius": "train/Eval_objectness_score_2025_02_12_15_34_33",
+ "R=0.8,GT=all_in_radius": "train/Eval_objectness_score_2025_02_10_14_59_49"
+}
+
+# Parton-level, gen-level and scouting PFCands models
+models = {
+ "parton-level": "train/Eval_no_pid_eval_2025_03_04_15_55_38",
+ "gen-level": "train/Eval_no_pid_eval_2025_03_04_15_54_50",
+ "scouting": "train/Eval_no_pid_eval_2025_03_04_16_06_57"
+}
+
+# Parton-level, gen-level and scouting PFCands models
+models = {
+ "parton-level": "train/Eval_no_pid_eval_1_2025_03_05_14_41_16",
+ "gen-level": "train/Eval_no_pid_eval_1_2025_03_05_14_40_30",
+ "scouting": "train/Eval_no_pid_eval_1_2025_03_05_14_41_38"
+}
+
+models = {
+ "parton-level": "train/Eval_no_pid_eval_full_1_2025_03_18_16_56_02",
+ "scouting": "train/Eval_no_pid_eval_full_1_2025_03_17_21_19_22",
+ "gen-level": "train/Eval_no_pid_eval_full_1_2025_03_18_16_45_41"
+}
+
+# Trained on all data!
+
+models1 = {
+ "parton-level": "train/Eval_no_pid_eval_full_1_2025_03_17_23_44_49",
+ "scouting PFCands": "train/Eval_no_pid_eval_full_1_2025_03_18_15_31_41",
+ "gen-level": "train/Eval_no_pid_eval_full_1_2025_03_18_15_31_58"
+}
+
+
+# Trained on 900_03, but evaluated with eta and pt filters for the particles
+models = {
+ "parton-level": "train/Eval_eval_19March2025_2025_03_19_22_08_15",
+ "scouting PFCands": "train/Eval_eval_19March2025_2025_03_19_22_08_22",
+ "gen-level": "train/Eval_eval_19March2025_2025_03_19_22_08_18"
+}
+
+import wandb
+api = wandb.Api()
+
+def get_eval_run_names(tag):
+ # from the api, get all the runs with the tag that are finished
+ runs = api.runs(
+ path="fcc_ml/svj_clustering",
+ filters={"tags": {"$in": [tag.strip()]}}
+ )
+ return [run.name for run in runs if run.state == "finished"], [run.config for run in runs if run.state == "finished"]
+
+def get_run_by_name(name):
+ runs = api.runs(
+ path="fcc_ml/svj_clustering",
+ filters={"display_name": {"$eq": name.strip()}}
+ )
+ runs = api.runs(
+ path="fcc_ml/svj_clustering",
+ filters={"display_name": {"$eq": name.strip()}}
+ )
+ if runs.length != 1:
+ return None
+ return runs[0]
+
+def get_models_from_tag(tag):
+ models = {}
+ for run in get_eval_run_names(tag)[0]:
+ print("Run:", run)
+ run = get_run_by_name(run)
+ if run.config["parton_level"]:
+ name = "parton-level"
+ elif run.config[("gen_level")]:
+ name = "gen-level"
+ else:
+ name = "sc. "
+ if run.config["augment_soft_particles"]:
+ name += " (aug)"
+ if run.config["gt_radius"]:
+ name += " GT_R=" + str(run.config["gt_radius"])
+ if "transformer" in run.config["network_config"]:
+ name += " (T)"
+ if run.config["load_from_run"] == "debug_IRC_loss_weighted100_plus_ghosts_2025_04_09_13_48_55_569":
+ name += " IRC"
+ elif run.config["load_from_run"] == "LGATr_500part_NOQMin_2025_04_09_21_53_37_210":
+ name += " NoIRC"
+ elif run.config["load_from_run"] == "IRC_loss_Split_and_Noise_alternate_NoAug_2025_04_11_16_15_48_955":
+ name += " IRC S+N"
+ models[name] = "train/" + run.name
+ return models
+
+# with pt=1e-2 ghost particles, also trained on this
+
+#models = get_models_from_tag("eval_19March2025_small_aug_vanishing_momentum_Qcap05_p1e-2")
+
+#models = get_models_from_tag("eval_19March2025_small_aug_vanishing_momentum")
+#models = get_models_from_tag("SmallDSReprod2")
+#models = get_models_from_tag("eval_19March2025_pt1e-2_500particles_NoQMinReprod")
+
+'''
+models = {}
+#models["PL_aug_working"] = "train/Eval_eval_19March2025_small_aug_FTsoft1_2025_03_27_17_15_24_17" # This one was working ~ok for parton-level, why doesn't it work anymore?
+models["reprod1"] = "train/Eval_eval_19March2025_small_aug_vanishing_momentum_Qcap05_p1e-2_reprod_1_2025_03_30_16_20_37_779" # reprod1 is using the same model as above, but eval'd on pt=1e-2 particles
+# reprod2 has pt uniform 0.01-50 particles
+models["reprod2"] = "train/Eval_eval_19March2025_reprod_2_2025_03_30_17_37_54_193"
+# reprod3: hdbscan min_samples set to 0
+
+'''
+
+models = {
+ "L-GATr": "train/Eval_DelphesPFfix_2025_05_05_08_21_23_380"
+}
+
+models = {
+ "L-GATr": "train/Eval_DelphesPFfix_FullDataset_QCD_2025_05_15_17_42_39_541"
+}#
+
+models = {
+ "LGATrGP": "train/Eval_DelphesPFfix_FullDataset_TrainDSstudy_2025_05_29_09_11_46_534",
+ #"LGATr": ""
+}
+
+#models = {
+# "QCD": "train/Eval_DelphesPFfix_FullDataset_TrainDSstudy_QCD_2025_05_18_21_54_43_705",
+# "700_07+900_03+QCD": "train/Eval_DelphesPFfix_FullDataset_TrainDSstudy_QCD_2025_05_18_22_18_36_991"
+#}
+
+print(models)
+
+# R = 2.0 models
+#models = {
+# "parton-level": "train/Eval_eval_19March2025_2025_03_19_22_55_48",
+# "gen-level": "train/Eval_eval_19March2025_2025_03_19_23_20_01",
+# "scouting PFCands": "train/Eval_eval_19March2025_2025_03_19_23_4x3_07"
+#}
+
+
+output_path = get_path("LGATr_model_out_examples_GP", "results")
+#output_path=get_path("LGATr_model_output_examples", "results")
+Path(output_path).mkdir(parents=1, exist_ok=1)
+
+sz = 3
+n_events_per_file = 50
+# len(models) columns, n_events_per_file rows
+from src.layers.object_cond import calc_eta_phi
+
+for ds in range(25):
+ print("-------- DS:", ds)
+ fig, ax = plt.subplots(n_events_per_file, len(models) * 3, # Colored by the model clusters,
+ figsize=(len(models) * sz * 3, n_events_per_file * sz))
+ # also one only with real coordinates
+ fig1, ax1 = plt.subplots(n_events_per_file, len(models)+1,
+ figsize=(len(models) * sz, n_events_per_file * sz))
+ for mn, model in enumerate(sorted(models.keys())):
+ print(" -------- Model:", model)
+ dataset_path = models[model]
+ filename = get_path(os.path.join(dataset_path, f"eval_{str(ds)}.pkl"), "results", fallback=1)
+ clusters_file = get_path(os.path.join(dataset_path, f"clustering_hdbscan_4_05_{str(ds)}.pkl"), "results", fallback=1)
+ #clusters_file=None
+ if not os.path.exists(filename):
+ print("File does not exist:", filename)
+ continue
+ result = CPU_Unpickler(open(filename, "rb")).load()
+ print(result["filename"])
+ m_med, m_dark, r_inv = get_properties(result["filename"])
+ if os.path.exists(clusters_file):
+ clusters = CPU_Unpickler(open(clusters_file, "rb")).load()
+ else:
+ clusters = result["model_cluster"].numpy()
+ clusters_file = None
+ run_config = get_run_by_name(dataset_path.split("/")[-1]).config
+ dataset = EventDataset.from_directory(result["filename"], mmap=True, model_output_file=filename,
+ model_clusters_file=clusters_file, include_model_jets_unfiltered=True,
+ aug_soft=run_config["augment_soft_particles"], seed=1000000,
+ parton_level=run_config["parton_level"],
+ gen_level=run_config["gen_level"], fastjet_R=[0.8])
+ for e in range(n_events_per_file):
+ print(" ----- event:", e)
+ uj = dataset[e].model_jets_unfiltered
+ fj_jets, assignment = EventDataset.get_fastjet_jets_with_assignment(dataset[e], fastjet.JetDefinition(fastjet.antikt_algorithm, 0.8),
+ "pfcands", pt_cutoff=30)
+ cl = clusters[result["event_idx"] == e]
+ large_pt_clusters = []
+ for i in np.unique(cl):
+ if i == -1: continue
+ if uj.pt[i].item() >= 30:
+ large_pt_clusters.append(i)
+ #c = [colors.get(i, "purple") for i in clusters[result["event_idx"] == e]]
+ c_ak = []
+ c = []
+ print("Large pt clusters:", large_pt_clusters)
+ for i in range(len(cl)):
+ if i not in assignment:
+ c_ak.append("purple")
+ else:
+ c_ak.append(colors.get(assignment[i], "purple"))
+
+ for i in clusters[result["event_idx"] == e]:
+ if i in large_pt_clusters:
+ c.append(colors.get(large_pt_clusters.index(i), "purple"))
+ else:
+ c.append("purple")
+ model_coords = result["pred"][result["event_idx"] == e]
+ if model_coords.shape[1] == 5:
+ model_coords = model_coords[:, 1:]
+ model_coords = calc_eta_phi(model_coords, 0)
+ plot_event(dataset[e], colors=c, ax=ax[e, 3*mn], pfcands=dataset.pfcands_key)
+ plot_event(dataset[e], colors=c, ax=ax[e, 3*mn+2], custom_coords=model_coords, pfcands=dataset.pfcands_key)
+ plot_event(dataset[e], colors=c_ak, ax=ax[e, 3*mn+1], pfcands=dataset.pfcands_key)
+ plot_event(dataset[e], colors=c, ax=ax1[e, mn], pfcands=dataset.pfcands_key)
+
+ # print the pt of the jet in the middle of each cluster with font size 12
+ for j in range(len(fj_jets)):
+ if fj_jets.pt[j].item() >= 30:
+ ax[e, 3*mn+1].text(fj_jets.eta[j].item()+0.1, fj_jets.phi[j].item()+0.1, "AK pt="+str(round(fj_jets.pt[j].item(), 1)), color="blue", fontsize=6, alpha=0.5)
+ for i in range(len(uj.pt)):
+ if uj.pt[i].item() >= 30:
+ ax[e, 3*mn].text(uj.eta[i], uj.phi[i], "M pt=" + str(round(uj.pt[i].item(), 1)), color="black", fontsize=6, alpha=0.5)
+ ax1[e, mn].text(uj.eta[i], uj.phi[i], "M pt=" + str(round(uj.pt[i].item(), 1)), color="black", fontsize=6, alpha=0.5)
+ #ax[e, 2*mn+1].text(model_coords[0][i], model_coords[1][i], round(uj.pt[i].item(), 1), color="black", fontsize=10, alpha=0.5)
+ ax[e, 3 * mn].set_title(model)
+ ax1[e, mn].set_title(model)
+ ax[e, 3 * mn + 2].set_title(model + " (clust. space)")
+ ax[e, 3 * mn + 1].set_title(model + " (colored AK clust.)")
+ fig.tight_layout()
+ fig1.tight_layout()
+ fname = os.path.join(output_path, f"m_med_{m_med}_m_dark_{m_dark}_r_inv_{str(r_inv).replace('.','')}.pdf")
+ fig.savefig(fname)
+ fig1.savefig(os.path.join(output_path, f"m_med_{m_med}_m_dark_{m_dark}_r_inv_{str(r_inv).replace('.','')}_real_only.pdf"))
+ print("Saving to", fname)
diff --git a/scripts/test_plot_jobs.py b/scripts/test_plot_jobs.py
new file mode 100644
index 0000000000000000000000000000000000000000..d63adc0ec46678bd24779e344ea921c43cc782f1
--- /dev/null
+++ b/scripts/test_plot_jobs.py
@@ -0,0 +1,251 @@
+# Eval a given a training run name at the given steps, taking into account the chaning of the training runs
+
+import sys
+import pickle
+import wandb
+import argparse
+import os
+
+from src.utils.paths import get_path
+from src.utils.wandb_utils import get_run_initial_steps, get_run_step_direct, get_run_step_ckpt, get_steps_from_file, get_run_by_name
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--tag", "-tag", type=str, required=False, default="")
+parser.add_argument("--input", "-input", type=str, required=False, default="Feb26_2025_E1000_N500_noPartonFilter_C_F") # --input Feb26_2025_E1000_N500_full
+parser.add_argument("--clustering-suffix", "-c", type=str, required=False, default="") # -c MinSamples0
+parser.add_argument("--no-submit", "-ns", action="store_true") # do not submit the slurm job
+parser.add_argument("--submit-AKX", "-AKX", action="store_true")
+parser.add_argument("--submit-AK8", "-AK8", action="store_true")
+parser.add_argument("--parton-level", "-pl", action="store_true") # To be used together with 'fastjet_jets' and --submit-AKX
+parser.add_argument("--gen-level", "-gl", action="store_true")
+parser.add_argument("--overwrite", "-ow", action="store_true") # overwrite the slurm job if it exists
+parser.add_argument("--pt-cutoff-jet", "-pt", type=float, default=100.0, help="pt cutoff for what is considered a jet")
+parser.add_argument("--high-eta-only", "-he", action="store_true", help="Only evaluate high eta jets (eta > 1.5)")
+parser.add_argument("--low-eta-only", "-le", action="store_true", help="Only evaluate low eta jets (eta < 1.5)")
+parser.add_argument("--ds-cap", "-ds", type=int, default=10000, help="dataset cap ")
+
+args = parser.parse_args()
+api = wandb.Api()
+
+DSCAP = args.ds_cap
+
+def get_eval_run_names(tag):
+ # from the api, get all the runs with the tag that are finished
+ runs = api.runs(
+ path="fcc_ml/svj_clustering",
+ filters={"tags": {"$in": [tag.strip()]}}
+ )
+ return [run.name for run in runs if run.state == "finished"], [run.config for run in runs if run.state == "finished"]
+
+def get_log_number(tag):
+ numbers = set()
+ for file in os.listdir("jobs/slurm_files"):
+ if tag in file:
+ numbers.add(int(file.split("_")[-1].split(".")[0]))
+ if len(numbers) == 0:
+ return 0
+ return max(list(numbers)) + 1
+
+def get_slurm_file_text_AKX(tag, log_number):
+ bindings = "-B /t3home/gkrzmanc/ -B /work/gkrzmanc/"
+ partition = "standard"
+ account = "t3"
+ d = "jobs/logs/{}".format(tag)
+ err = d + "_{}_CPUerr.txt".format(log_number)
+ log = d + "_{}_CPUlog.txt".format(log_number)
+ suffix_pl = "--parton-level" if args.parton_level else ""
+ suffix_gl = "--gen-level" if args.gen_level else ""
+ pl_folder = "_PL" if args.parton_level else ""
+ gl_folder = "_GL" if args.gen_level else ""
+ if args.pt_cutoff_jet != 100.0:
+ pt_cutoff_suffix = f"_pt_{args.pt_cutoff_jet}"
+ pt_cutoff_suffix_cmd = " --pt-jet-cutoff {}".format(args.pt_cutoff_jet)
+ else:
+ pt_cutoff_suffix = ""
+ pt_cutoff_suffix_cmd = ""
+ if args.high_eta_only:
+ pt_cutoff_suffix += "_high_eta"
+ pt_cutoff_suffix_cmd += " --high-eta-only"
+ elif args.low_eta_only:
+ pt_cutoff_suffix += "_low_eta"
+ pt_cutoff_suffix_cmd += " --low-eta-only"
+ file = f"""#!/bin/bash
+#SBATCH --partition={partition} # Specify the partition
+#SBATCH --account={account} # Specify the account
+#SBATCH --mem=25000 # Request 10GB of memory
+#SBATCH --time=06:00:00 # Set the time limit to 1 hour
+#SBATCH --job-name=SVJan_AKX{pl_folder}{gl_folder}_{str(log_number)} # Name the job
+#SBATCH --error={err} # Redirect stderr to a log file
+#SBATCH --output={log} # Redirect stderr to a log file
+#SBATCH --mail-type=FAIL
+#SBATCH --mail-user=gkrzmanc@student.ethz.ch
+source env.sh
+export APPTAINER_TMPDIR=/work/gkrzmanc/singularity_tmp
+export APPTAINER_CACHEDIR=/work/gkrzmanc/singularity_cache
+nvidia-smi
+srun singularity exec {bindings} docker://gkrz/lgatr:v3 python -m scripts.analysis.count_matched_quarks --input {args.input} --output {args.input}/batch_eval_2k/{tag}{pt_cutoff_suffix}/AKX{pl_folder}{gl_folder} --jets-object fastjet_jets {suffix_pl} {suffix_gl} --dataset-cap {DSCAP} {pt_cutoff_suffix_cmd}
+ """
+ return file
+
+def get_slurm_file_text_AK(tag, log_number):
+ bindings = "-B /t3home/gkrzmanc/ -B /work/gkrzmanc/"
+ partition = "standard"
+ account = "t3"
+ d = "jobs/logs/{}".format(tag)
+ err = d + "_{}_CPUerr.txt".format(log_number)
+ log = d + "_{}_CPUlog.txt".format(log_number)
+ file = f"""#!/bin/bash
+#SBATCH --partition={partition} # Specify the partition
+#SBATCH --account={account} # Specify the account
+#SBATCH --mem=25000 # Request 10GB of memory
+#SBATCH --time=02:00:00 # Set the time limit to 1 hour
+#SBATCH --job-name=SVJan # Name the job
+#SBATCH --error={err} # Redirect stderr to a log file
+#SBATCH --output={log} # Redirect stderr to a log file
+#SBATCH --mail-type=END,FAIL
+#SBATCH --mail-user=gkrzmanc@student.ethz.ch
+source env.sh
+export APPTAINER_TMPDIR=/work/gkrzmanc/singularity_tmp
+export APPTAINER_CACHEDIR=/work/gkrzmanc/singularity_cache
+
+nvidia-smi
+srun singularity exec {bindings} docker://gkrz/lgatr:v3 python -m scripts.analysis.count_matched_quarks --input {args.input} --output {args.input}/batch_eval_2k/{tag}/AK8 --dataset-cap 1500
+srun singularity exec {bindings} docker://gkrz/lgatr:v3 python -m scripts.analysis.count_matched_quarks --input {args.input} --output {args.input}/batch_eval_2k/{tag}/AK8_GenJets --jets-object genjets --dataset-cap {DSCAP}
+ """
+ return file
+
+def get_slurm_file_text(tag, eval_job_name, log_number, aug_suffix = ""):
+ bindings = "-B /t3home/gkrzmanc/ -B /work/gkrzmanc/ -B /pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/ "
+ partition = "standard"
+ account = "t3"
+ d = "jobs/logs/{}".format(tag)
+ err = d + "_{}_CPUerr.txt".format(log_number)
+ log = d + "_{}_CPUlog.txt".format(log_number)
+ clust_suffix = ""
+ if args.clustering_suffix != "":
+ clust_suffix = f" --clustering-suffix {args.clustering_suffix}"
+ pt_cutoff_suffix_cmd = f" --pt-jet-cutoff {args.pt_cutoff_jet}"
+ pt_cutoff_suffix = ""
+ if args.pt_cutoff_jet != 100.0:
+ pt_cutoff_suffix = f"_pt_{args.pt_cutoff_jet}"
+ if args.high_eta_only:
+ pt_cutoff_suffix += "_high_eta"
+ #aug_suffix += " --high-eta-only"
+ elif args.low_eta_only:
+ pt_cutoff_suffix += "_low_eta"
+ #aug_suffix += " --low-eta-only"
+ file = f"""#!/bin/bash
+#SBATCH --partition={partition} # Specify the partition
+#SBATCH --account={account} # Specify the account
+#SBATCH --mem=25000 # Request 10GB of memory
+#SBATCH --time=02:00:00 # Set the time limit to 1 hour
+#SBATCH --job-name=SVJ_CPU_{eval_job_name}_{str(log_number)} # Name the job
+#SBATCH --error={err} # Redirect stderr to a log file
+#SBATCH --output={log} # Redirect stderr to a log file
+#SBATCH --mail-type=FAIL
+#SBATCH --mail-user=gkrzmanc@student.ethz.ch
+source env.sh
+export APPTAINER_TMPDIR=/work/gkrzmanc/singularity_tmp
+export APPTAINER_CACHEDIR=/work/gkrzmanc/singularity_cache
+nvidia-smi
+srun singularity exec {bindings} docker://gkrz/lgatr:v3 python -m scripts.analysis.count_matched_quarks --input {args.input} --output {args.input}/batch_eval_2k/{tag}{pt_cutoff_suffix}/{eval_job_name}{args.clustering_suffix} --eval-dir train/{eval_job_name} --jets-object model_jets --dataset-cap {DSCAP} {aug_suffix} {clust_suffix} {pt_cutoff_suffix_cmd}
+ """
+ return file
+
+runs, run_config = get_eval_run_names(args.tag)
+print("RUNS:", runs)
+
+
+if args.submit_AK8:
+ # Submit also ak and ak8
+ if not os.path.exists("jobs/slurm_files"):
+ os.makedirs("jobs/slurm_files")
+ if not os.path.exists("jobs/logs"):
+ os.makedirs("jobs/logs")
+ log_number = get_log_number(args.tag)
+ slurm_file_text = get_slurm_file_text_AK(args.tag, log_number)
+ # write the file to jobs/slurm_files
+ with open("jobs/slurm_files/evalCPU_{}_{}.slurm".format(args.tag, log_number), "w") as f:
+ f.write(slurm_file_text)
+ print("Wrote file to jobs/slurm_files/evalCPU_{}_{}.slurm".format(args.tag, log_number))
+ if not args.no_submit:
+ os.system("sbatch jobs/slurm_files/evalCPU_{}_{}.slurm".format(args.tag, log_number))
+ print("---- Submitted AK8 run -----")
+ sys.exit(0)
+
+def extract_n_events(filename):
+ if not os.path.exists(filename):
+ return -1
+ content = open(filename).read().strip()
+ try:
+ return int(content)
+ except:
+ return -1
+
+
+if args.submit_AKX:
+ # Submit also AKX
+ if not os.path.exists("jobs/slurm_files"):
+ os.makedirs("jobs/slurm_files")
+ if not os.path.exists("jobs/logs"):
+ os.makedirs("jobs/logs")
+ log_number = get_log_number(args.tag)
+ slurm_file_text = get_slurm_file_text_AKX(args.tag, log_number)
+ # write the file to jobs/slurm_files
+ with open("jobs/slurm_files/evalCPU_{}_{}.slurm".format(args.tag, log_number), "w") as f:
+ f.write(slurm_file_text)
+ print("Wrote file to jobs/slurm_files/evalCPU_{}_{}.slurm".format(args.tag, log_number))
+ if not args.no_submit:
+ os.system("sbatch jobs/slurm_files/evalCPU_{}_{}.slurm".format(args.tag, log_number))
+ print("---- Submitted AKX run -----")
+ sys.exit(0)
+
+for i, run in enumerate(runs):
+ #if get_run_by_name(run).state != "finished":
+ # print("Run not finished (failed or still in progress) - skipping", run)
+ # continue
+
+ conf = get_run_by_name(run).config
+ if( conf.get("parton_level") or conf.get("gen_level")) and args.pt_cutoff_jet != 100.0:
+ print("Skipping run", run, "because it is parton level or gen level and pt cutoff is not 100.0")
+ continue
+ aug_soft_p = conf.get("augment_soft_particles", False)
+ if aug_soft_p:
+ aug_suffix = "-aug-soft"
+ else:
+ aug_suffix = ""
+ if not os.path.exists("jobs/slurm_files"):
+ os.makedirs("jobs/slurm_files")
+ if not os.path.exists("jobs/logs"):
+ os.makedirs("jobs/logs")
+ log_number = get_log_number(args.tag)
+ pt_cutoff_suffix = ""
+ if args.pt_cutoff_jet != 100.0:
+ pt_cutoff_suffix = f"_pt_{args.pt_cutoff_jet}"
+ if args.high_eta_only:
+ pt_cutoff_suffix += "_high_eta"
+ aug_suffix += " --high-eta-only"
+ elif args.low_eta_only:
+ pt_cutoff_suffix += "_low_eta"
+ aug_suffix += " --low-eta-only"
+ slurm_file_text = get_slurm_file_text(args.tag, run, log_number, aug_suffix)
+ rel_path_save = f"{args.input}/batch_eval_2k/{args.tag}{pt_cutoff_suffix}/{run}{args.clustering_suffix}"
+ rel_path_save = get_path(rel_path_save, "results")
+ if not os.path.exists(rel_path_save):
+ os.makedirs(rel_path_save)
+ #if evaluated(rel_path_save):
+ n_events = extract_n_events(os.path.join(rel_path_save, "count_matched_quarks", "n_events.txt"))
+ if os.path.exists(os.path.join(rel_path_save, "count_matched_quarks", "n_events.txt")) and not args.overwrite and n_events > 0:
+ print("Skipping", run, "because this file exists:", os.path.join(rel_path_save, "count_matched_quarks", "n_events.txt"))
+ continue
+ else:
+ print("Evaluating", run)
+ # save run config here
+ with open(f"{rel_path_save}/run_config.pkl", "wb") as f:
+ pickle.dump(run_config[i], f)
+ # write the file to jobs/slurm_files
+ with open("jobs/slurm_files/evalCPU_{}_{}.slurm".format(args.tag, log_number), "w") as f:
+ f.write(slurm_file_text)
+ print("Wrote file to jobs/slurm_files/evalCPU_{}_{}.slurm".format(args.tag, log_number))
+ if not args.no_submit:
+ os.system("sbatch jobs/slurm_files/evalCPU_{}_{}.slurm".format(args.tag, log_number))
diff --git a/scripts/tune_clustering.py b/scripts/tune_clustering.py
new file mode 100644
index 0000000000000000000000000000000000000000..99a9087e286a3b2e9eb22d840e8e475e7a4f7e5e
--- /dev/null
+++ b/scripts/tune_clustering.py
@@ -0,0 +1,115 @@
+import pickle
+import os
+from src.utils.paths import get_path
+from src.utils.utils import CPU_Unpickler
+import argparse
+from src.jetfinder.clustering import get_clustering_labels
+import optuna
+from src.dataset.dataset import EventDataset
+from src.evaluation.clustering_metrics import compute_f1_score
+import torch
+
+import warnings
+warnings.filterwarnings("ignore")
+
+# filename = get_path("/work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_2025_01_03_15_07_14/eval_0.pkl", "results")
+# for rinv=0.7, see /work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_rinv07_2025_01_03_15_38_58
+# keeping the clustering script here for now, so that it's separated from the GPU-heavy tasks like inference (clustering may be changed frequently...)
+# parameters: min-cluster-size: [5, 30]
+# min-samples: [2, 30]
+# epsilon: [0.01, 0.5]
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--input", type=str, required=True)
+parser.add_argument("--dataset", type=int, required=False, default=11) # Which dataset to optimize on
+parser.add_argument("--dataset-cap", type=int, required=False, default=-1)
+parser.add_argument("--spatial-components-only", "-spatial-only", action="store_true")
+parser.add_argument("--lorentz-cos-sim", action="store_true")
+parser.add_argument("--cos-sim", action="store_true")
+parser.add_argument("--normalize", action="store_true")
+# --input train/ --dataset-cap 1000 --spatial-components-only
+args = parser.parse_args()
+path = get_path(args.input, "results")
+suffix = ""
+if args.spatial_components_only:
+ suffix = "_sp_comp_only"
+#if args.lorentz_norm:
+# suffix = "_lorentz_norm"
+if args.lorentz_cos_sim:
+ suffix = "_lorentz_cos_sim"
+if args.cos_sim:
+ suffix = "_cos_sim"
+if args.normalize:
+ suffix = "_norm"
+
+study_file = os.path.join(path, "clustering_tuning_{}{}.log".format(args.dataset, suffix))
+
+study_exists = os.path.exists(study_file)
+storage = optuna.storages.JournalStorage(
+ optuna.storages.journal.JournalFileBackend(study_file)
+)
+
+if study_exists:
+ study = optuna.load_study(storage=storage, study_name="clustering")
+else:
+ study = optuna.create_study(storage=storage, study_name="clustering", direction="maximize")
+
+eval_result_file = os.path.join(path, "eval_{}.pkl".format(args.dataset))
+eval_result = CPU_Unpickler(open(eval_result_file, "rb")).load()
+
+dataset_cap = args.dataset_cap
+
+
+def objective(trial):
+ min_clust_size = trial.suggest_int("min_cluster_size", 2, 20)
+ min_samples = trial.suggest_int("min_samples", 0, 10)
+ epsilon = trial.suggest_uniform("epsilon", 0.01, 0.5)
+ print("Starting trial with parameters:", trial.params)
+ suffix = "{}-{}-{}".format(min_clust_size, min_samples, epsilon)
+ if args.spatial_components_only:
+ suffix = "sp-" + suffix
+ #if args.lorentz_norm:
+ # suffix = "ln-" + suffix
+ if args.cos_sim:
+ suffix = "cs-" + suffix
+ if args.lorentz_cos_sim:
+ suffix = "lcs-" + suffix
+ if args.normalize:
+ suffix = "norm-" + suffix
+ clustering_file = os.path.join(path, "clustering_{}_{}.pkl".format(suffix, args.dataset))
+ if not os.path.exists(clustering_file):
+ if eval_result["pred"].shape[1] == 4:
+ coords = eval_result["pred"][:, :3]
+ else:
+ if args.spatial_components_only or args.cos_sim:
+ coords = eval_result["pred"][:, 1:4]
+ else:
+ coords = eval_result["pred"][:, :4]
+ event_idx = eval_result["event_idx"]
+ if dataset_cap > 0:
+ filt = event_idx < dataset_cap
+ event_idx = event_idx[filt]
+ coords = coords[filt]
+ if args.cos_sim or args.normalize:
+ coords = coords / torch.norm(coords, dim=1, keepdim=True)
+ labels = get_clustering_labels(coords, event_idx, min_cluster_size=min_clust_size,
+ min_samples=min_samples, epsilon=epsilon, bar=True,
+ lorentz_cos_sim=args.lorentz_cos_sim,
+ cos_sim=args.cos_sim)
+ with open(clustering_file, "wb") as f:
+ pickle.dump(labels, f)
+ print("Clustering saved to", clustering_file)
+ #else:
+ # labels = pickle.load(open(clustering_file, "rb"))
+ print("Dataset:", eval_result["filename"])
+ dataset = EventDataset.from_directory(eval_result["filename"],
+ model_clusters_file=clustering_file,
+ model_output_file=eval_result_file,
+ include_model_jets_unfiltered=True, parton_level=True, aug_soft=True)
+ score = compute_f1_score(dataset, dataset_cap=dataset_cap)
+ print("F1 score for", suffix, ":", score)
+ return score
+
+study.optimize(objective, n_trials=100)
+print(f"Best params is {study.best_params} with value {study.best_value}")
+
diff --git a/src/analyze_results.py b/src/analyze_results.py
new file mode 100644
index 0000000000000000000000000000000000000000..d6dbf9896be3bf2baacbc166ddbd166896ab8cca
--- /dev/null
+++ b/src/analyze_results.py
@@ -0,0 +1,95 @@
+import pickle
+import torch
+import os
+import matplotlib.pyplot as plt
+from src.utils.paths import get_path
+from src.utils.utils import CPU_Unpickler
+from pathlib import Path
+from src.plotting.histograms import score_histogram, per_pt_score_histogram, plot_roc_curve, confusion_matrix_plot
+import argparse
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--input", type=str, required=True)
+args = parser.parse_args()
+
+input_dir = get_path(args.input, "results")
+
+# for rinv=0.7, see /work/gkrzmanc/jetclustering/results/train/Test_betaPt_BC_rinv07_2025_01_03_15_38_58
+# for L-GATr: /work/gkrzmanc/jetclustering/results/train/Test_LGATr_all_datasets_2025_01_08_19_27_54
+
+
+def plot_score_histograms(result, eval_path):
+ pt = result["pt"]
+ y_true = (result["GT_cluster"] >= 0)
+ y_pred = result["pred"][:, -1]
+ score_histogram(y_true, y_pred, sz=5).savefig(os.path.join(eval_path, "binary_classifier_scores.pdf"))
+ per_pt_score_histogram(y_true, y_pred, pt).savefig(os.path.join(eval_path, "binary_classifier_scores_per_pt.pdf"))
+ plot_roc_curve(y_true, y_pred).savefig(os.path.join(eval_path, "roc_curve.pdf"))
+
+import numpy as np
+
+def plot_four_momentum_spectrum(result, eval_path):
+ y_true = (result["GT_cluster"] >= 0)
+ y_pred = result["pred"][:, :4]
+ mass_squared = y_pred[:, 0]**2 - y_pred[:, 1]**2 - y_pred[:, 2]**2 - y_pred[:, 3]**2
+ signal_masses = mass_squared[y_true]
+ bkg_masses = mass_squared[~y_true]
+ all_masses = mass_squared
+ fig, ax = plt.subplots()
+ bins = np.linspace(-25, 25, 200)
+ #ax.hist(signal_masses, bins=bins, histtype="step", label="Signal")
+ #ax.hist(bkg_masses, bins=bins, histtype="step", label="Background")
+ ax.hist(all_masses, bins=bins, histtype="step", label="All")
+ ax.set_xlabel("m^2")
+ ax.set_yscale("log")
+ ax.set_ylabel("count")
+ ax.legend()
+ fig.savefig(os.path.join(eval_path, "mass_squared.pdf"))
+
+def plot_cm(result, eval_path):
+ # Confusion matrices
+ y_true = (result["GT_cluster"] >= 0)
+ y_pred = result["pred"][:, 3]
+ pt = result["pt"]
+ sz = 5
+ fig, ax = plt.subplots(1, 3, figsize=(3*sz/2, sz/2))
+ confusion_matrix_plot(y_true, y_pred > 0.5, ax[0])
+ ax[0].set_title("Classifier (cut at 0.5)")
+ confusion_matrix_plot(y_true, result["radius_cluster_FatJets"], ax[2])
+ ax[2].set_title("FatJets")
+ confusion_matrix_plot(y_true, result["radius_cluster_GenJets"], ax[1])
+ ax[1].set_title("GenJets")
+ fig.tight_layout()
+ fig.savefig(os.path.join(eval_path, "confusion_matrix.pdf"))
+
+for file in os.listdir(input_dir):
+ print("File:", file)
+ filename = get_path(os.path.join(input_dir, file),"results")
+ if file.startswith("eval_") and file.endswith(".pkl"):
+ print("Plotting file", filename)
+ result = CPU_Unpickler(open(filename, "rb")).load()
+ eval_path = os.path.join(os.path.dirname(filename), "full_eval_" + file.split("_")[1].split(".")[0])
+
+ print(result.keys())
+ Path(eval_path).mkdir(parents=True, exist_ok=True)
+
+ def plotting_blueprint(result, eval_path):
+ pass
+
+ #plotting_jobs = [plot_score_histograms, plot_cm]
+ plotting_jobs = [plot_four_momentum_spectrum]
+ from time import time
+
+ for job in plotting_jobs:
+ t0 = time()
+ print("Starting plotting job", job.__name__)
+ try:
+ job(result, eval_path)
+ except Exception as e:
+ print(f"Error in {job.__name__}: {e}")
+ # print the traceback of the exception
+ import traceback
+ traceback.print_exc()
+
+ print(f"{job.__name__} took {time()-t0:.2f}s")
+
diff --git a/src/data/config.py b/src/data/config.py
new file mode 100644
index 0000000000000000000000000000000000000000..e2a5ce46893a362d67f3d1c0f3781678095a902c
--- /dev/null
+++ b/src/data/config.py
@@ -0,0 +1,218 @@
+import numpy as np
+import yaml
+import copy
+
+from src.logger.logger import _logger
+from src.data.tools import _get_variable_names
+
+
+def _as_list(x):
+ if x is None:
+ return None
+ elif isinstance(x, (list, tuple)):
+ return x
+ else:
+ return [x]
+
+
+def _md5(fname):
+ '''https://stackoverflow.com/questions/3431825/generating-an-md5-checksum-of-a-file'''
+ import hashlib
+ hash_md5 = hashlib.md5()
+ with open(fname, "rb") as f:
+ for chunk in iter(lambda: f.read(4096), b""):
+ hash_md5.update(chunk)
+ return hash_md5.hexdigest()
+
+
+class DataConfig(object):
+ r"""Data loading configuration.
+ """
+
+ def __init__(self, print_info=True, **kwargs):
+ opts = {
+ 'treename': None,
+ 'selection': None,
+ 'test_time_selection': None,
+ 'preprocess': {'method': 'manual', 'data_fraction': 0.1, 'params': None},
+ 'new_variables': {},
+ 'inputs': {},
+ 'labels': {},
+ 'observers': [],
+ 'monitor_variables': [],
+ 'weights': None,
+ 'graph_config': {},
+ 'custom_model_kwargs': {}
+ }
+ for k, v in kwargs.items():
+ if v is not None:
+ if isinstance(opts[k], dict):
+ opts[k].update(v)
+ else:
+ opts[k] = v
+ # only information in ``self.options'' will be persisted when exporting to YAML
+ self.options = opts
+ if print_info:
+ _logger.debug(opts)
+
+ self.selection = opts['selection']
+ self.test_time_selection = opts['test_time_selection'] if opts['test_time_selection'] else self.selection
+ self.var_funcs = copy.deepcopy(opts['new_variables'])
+ # preprocessing config
+ self.preprocess = opts['preprocess']
+ self._auto_standardization = opts['preprocess']['method'].lower().startswith('auto')
+ self._missing_standardization_info = False
+ self.preprocess_params = opts['preprocess']['params'] if opts['preprocess']['params'] is not None else {}
+ # inputs
+ self.input_names = tuple(opts['inputs'].keys())
+ self.input_dicts = {k: [] for k in self.input_names}
+ self.input_shapes = {}
+ for k, o in opts['inputs'].items():
+ self.input_shapes[k] = (-1, len(o['vars']), o['length'])
+ for v in o['vars']:
+ v = _as_list(v)
+ self.input_dicts[k].append(v[0])
+
+ if opts['preprocess']['params'] is None:
+
+ def _get(idx, default):
+ try:
+ return v[idx]
+ except IndexError:
+ return default
+
+ params = {'length': o['length'], 'pad_mode': o.get('pad_mode', 'constant').lower(),
+ 'center': _get(1, 'auto' if self._auto_standardization else None),
+ 'scale': _get(2, 1), 'min': _get(3, -5), 'max': _get(4, 5), 'pad_value': _get(5, 0)}
+
+ if v[0] in self.preprocess_params and params != self.preprocess_params[v[0]]:
+ raise RuntimeError(
+ 'Incompatible info for variable %s, had: \n %s\nnow got:\n %s' %
+ (v[0], str(self.preprocess_params[v[0]]), str(params)))
+ if k.endswith('_mask') and params['pad_mode'] != 'constant':
+ raise RuntimeError('The `pad_mode` must be set to `constant` for the mask input `%s`' % k)
+ if params['center'] == 'auto':
+ self._missing_standardization_info = True
+ self.preprocess_params[v[0]] = params
+
+ # observers
+ self.observer_names = tuple(opts['observers'])
+ # monitor variables
+ self.monitor_variables = tuple(opts['monitor_variables'])
+ # Z variables: returned as `Z` in the dataloader (use monitor_variables for training, observers for eval)
+ self.z_variables = self.observer_names if len(self.observer_names) > 0 else self.monitor_variables
+
+ # remove self mapping from var_funcs
+ for k, v in self.var_funcs.items():
+ if k == v:
+ del self.var_funcs[k]
+
+ if print_info:
+ def _log(msg, *args, **kwargs):
+ _logger.info(msg, *args, color='lightgray', **kwargs)
+ _log('preprocess config: %s', str(self.preprocess))
+ _log('selection: %s', str(self.selection))
+ _log('test_time_selection: %s', str(self.test_time_selection))
+ _log('var_funcs:\n - %s', '\n - '.join(str(it) for it in self.var_funcs.items()))
+ _log('input_names: %s', str(self.input_names))
+ _log('input_dicts:\n - %s', '\n - '.join(str(it) for it in self.input_dicts.items()))
+ _log('input_shapes:\n - %s', '\n - '.join(str(it) for it in self.input_shapes.items()))
+ _log('preprocess_params:\n - %s', '\n - '.join(str(it) for it in self.preprocess_params.items()))
+ #_log('label_names: %s', str(self.label_names))
+ _log('observer_names: %s', str(self.observer_names))
+ _log('monitor_variables: %s', str(self.monitor_variables))
+ if opts['weights'] is not None:
+ if self.use_precomputed_weights:
+ _log('weight: %s' % self.var_funcs[self.weight_name])
+ else:
+ for k in ['reweight_method', 'reweight_basewgt', 'reweight_branches', 'reweight_bins',
+ 'reweight_classes', 'class_weights', 'reweight_threshold',
+ 'reweight_discard_under_overflow']:
+ _log('%s: %s' % (k, getattr(self, k)))
+
+ # parse config
+ self.keep_branches = set()
+ aux_branches = set()
+ # selection
+ if self.selection:
+ aux_branches.update(_get_variable_names(self.selection))
+ # test time selection
+ if self.test_time_selection:
+ aux_branches.update(_get_variable_names(self.test_time_selection))
+ # var_funcs
+ self.keep_branches.update(self.var_funcs.keys())
+ for expr in self.var_funcs.values():
+ aux_branches.update(_get_variable_names(expr))
+ # inputs
+ for names in self.input_dicts.values():
+ self.keep_branches.update(names)
+ # labels
+ #self.keep_branches.update(self.label_names)
+ # weight
+ #if self.weight_name:
+ # self.keep_branches.add(self.weight_name)
+ # if not self.use_precomputed_weights:
+ # aux_branches.update(self.reweight_branches)
+ # aux_branches.update(self.reweight_classes)
+ # observers
+ self.keep_branches.update(self.observer_names)
+ # monitor variables
+ self.keep_branches.update(self.monitor_variables)
+ # keep and drop
+ self.drop_branches = (aux_branches - self.keep_branches)
+ self.load_branches = (aux_branches | self.keep_branches) - set(self.var_funcs.keys()) #- {self.weight_name, }
+ if print_info:
+ _logger.debug('drop_branches:\n %s', ','.join(self.drop_branches))
+ _logger.debug('load_branches:\n %s', ','.join(self.load_branches))
+
+ def __getattr__(self, name):
+ return self.options[name]
+
+ def dump(self, fp):
+ with open(fp, 'w') as f:
+ yaml.safe_dump(self.options, f, sort_keys=False)
+
+ @classmethod
+ def load(cls, fp, load_observers=True, load_reweight_info=True, extra_selection=None, extra_test_selection=None):
+ with open(fp) as f:
+ options = yaml.safe_load(f)
+ if not load_observers:
+ options['observers'] = None
+ if not load_reweight_info:
+ options['weights'] = None
+ if extra_selection:
+ options['selection'] = '(%s) & (%s)' % (options['selection'], extra_selection)
+ if extra_test_selection:
+ if 'test_time_selection' not in options:
+ raise RuntimeError('`test_time_selection` is not defined in the yaml file!')
+ options['test_time_selection'] = '(%s) & (%s)' % (options['test_time_selection'], extra_test_selection)
+ return cls(**options)
+
+ def copy(self):
+ return self.__class__(print_info=False, **copy.deepcopy(self.options))
+
+ def __copy__(self):
+ return self.copy()
+
+ def __deepcopy__(self, memo):
+ return self.copy()
+
+ def export_json(self, fp):
+ import json
+ j = {'output_names': self.label_value, 'input_names': self.input_names}
+ for k, v in self.input_dicts.items():
+ j[k] = {'var_names': v, 'var_infos': {}}
+ for var_name in v:
+ j[k]['var_length'] = self.preprocess_params[var_name]['length']
+ info = self.preprocess_params[var_name]
+ j[k]['var_infos'][var_name] = {
+ 'median': 0 if info['center'] is None else info['center'],
+ 'norm_factor': info['scale'],
+ 'replace_inf_value': 0,
+ 'lower_bound': -1e32 if info['center'] is None else info['min'],
+ 'upper_bound': 1e32 if info['center'] is None else info['max'],
+ 'pad': info['pad_value']
+ }
+ with open(fp, 'w') as f:
+ json.dump(j, f, indent=2)
+
diff --git a/src/data/fileio.py b/src/data/fileio.py
new file mode 100644
index 0000000000000000000000000000000000000000..aa0fb1b49312121021e6a8f5e2b8169a381a98f1
--- /dev/null
+++ b/src/data/fileio.py
@@ -0,0 +1,108 @@
+import math
+import awkward as ak
+import tqdm
+import traceback
+from src.data.tools import _concat
+from src.logger.logger import _logger
+
+
+def _read_hdf5(filepath, branches, load_range=None):
+ import tables
+ tables.set_blosc_max_threads(4)
+ with tables.open_file(filepath) as f:
+ outputs = {k: getattr(f.root, k)[:] for k in branches}
+ if load_range is None:
+ load_range = (0, 1)
+ start = math.trunc(load_range[0] * len(outputs[branches[0]]))
+ stop = max(start + 1, math.trunc(load_range[1] * len(outputs[branches[0]])))
+ for k, v in outputs.items():
+ outputs[k] = v[start:stop]
+ return ak.Array(outputs)
+
+
+def _read_root(filepath, branches, load_range=None, treename=None):
+ import uproot
+ with uproot.open(filepath) as f:
+ if treename is None:
+ treenames = set([k.split(';')[0] for k, v in f.items() if getattr(v, 'classname', '') == 'TTree'])
+ #if len(treenames) == 1:
+ # treename = treenames.pop()
+ #else:
+ # raise RuntimeError(
+ # 'Need to specify `treename` as more than one trees are found in file %s: %s' %
+ # (filepath, str(branches)))
+ # set treename to the first of the treenames
+ treename = treenames.pop()
+ tree = f[treename]
+ if load_range is not None:
+ start = math.trunc(load_range[0] * tree.num_entries)
+ stop = max(start + 1, math.trunc(load_range[1] * tree.num_entries))
+ else:
+ start, stop = None, None
+ outputs = tree.arrays(filter_name=branches, entry_start=start, entry_stop=stop)
+ return outputs
+
+
+def _read_awkd(filepath, branches, load_range=None):
+ import awkward0
+ with awkward0.load(filepath) as f:
+ outputs = {k: f[k] for k in branches}
+ if load_range is None:
+ load_range = (0, 1)
+ start = math.trunc(load_range[0] * len(outputs[branches[0]]))
+ stop = max(start + 1, math.trunc(load_range[1] * len(outputs[branches[0]])))
+ for k, v in outputs.items():
+ outputs[k] = ak.from_awkward0(v[start:stop])
+ return ak.Array(outputs)
+
+
+def _read_parquet(filepath, branches, load_range=None):
+ outputs = ak.from_parquet(filepath, columns=branches)
+ if load_range is not None:
+ start = math.trunc(load_range[0] * len(outputs))
+ stop = max(start + 1, math.trunc(load_range[1] * len(outputs)))
+ outputs = outputs[start:stop]
+ return outputs
+
+
+def _read_files(filelist, branches, load_range=None, show_progressbar=False, **kwargs):
+ import os
+ branches = list(branches)
+ table = []
+ if show_progressbar:
+ filelist = tqdm.tqdm(filelist)
+ for filepath in filelist:
+ ext = os.path.splitext(filepath)[1]
+ if ext not in ('.h5', '.root', '.awkd', '.parquet'):
+ raise RuntimeError('File %s of type `%s` is not supported!' % (filepath, ext))
+ try:
+ if ext == '.h5':
+ a = _read_hdf5(filepath, branches, load_range=load_range)
+ elif ext == '.root':
+ a = _read_root(filepath, branches, load_range=load_range, treename=kwargs.get('treename', None))
+ elif ext == '.awkd':
+ a = _read_awkd(filepath, branches, load_range=load_range)
+ elif ext == '.parquet':
+ a = _read_parquet(filepath, branches, load_range=load_range)
+ except Exception as e:
+ a = None
+ _logger.error('When reading file %s:', filepath)
+ _logger.error(traceback.format_exc())
+ if a is not None:
+ table.append(a)
+ table = _concat(table) # ak.Array
+ if len(table) == 0:
+ raise RuntimeError(f'Zero entries loaded when reading files {filelist} with `load_range`={load_range}.')
+ return table
+
+
+def _write_root(file, table, treename='Events', compression=-1, step=1048576):
+ import uproot
+ if compression == -1:
+ compression = uproot.LZ4(4)
+ with uproot.recreate(file, compression=compression) as fout:
+ tree = fout.mktree(treename, {k: v.dtype for k, v in table.items()})
+ start = 0
+ while start < len(list(table.values())[0]) - 1:
+ tree.extend({k: v[start:start + step] for k, v in table.items()})
+ start += step
\ No newline at end of file
diff --git a/src/data/preprocess.py b/src/data/preprocess.py
new file mode 100644
index 0000000000000000000000000000000000000000..7dba41da3d4d19f2629a5165026862c593b03b40
--- /dev/null
+++ b/src/data/preprocess.py
@@ -0,0 +1,284 @@
+import time
+import glob
+import copy
+import numpy as np
+import awkward as ak
+
+from src.logger.logger import _logger
+from src.data.tools import _get_variable_names, _eval_expr
+from src.data.fileio import _read_files
+
+
+def _apply_selection(table, selection):
+ if selection is None:
+ return table
+ selected = ak.values_astype(_eval_expr(selection, table), 'bool')
+ return table[selected]
+
+
+def _build_new_variables(table, funcs):
+ if funcs is None:
+ return table
+ for k, expr in funcs.items():
+ if k in table.fields:
+ continue
+ table[k] = _eval_expr(expr, table)
+ return table
+
+
+def _clean_up(table, drop_branches):
+ columns = [k for k in table.fields if k not in drop_branches]
+ return table[columns]
+
+
+def _build_weights(table, data_config, reweight_hists=None, warn=_logger.warning):
+ if data_config.weight_name is None:
+ raise RuntimeError('Error when building weights: `weight_name` is None!')
+ if data_config.use_precomputed_weights:
+ return ak.to_numpy(table[data_config.weight_name])
+ else:
+ x_var, y_var = data_config.reweight_branches
+ x_bins, y_bins = data_config.reweight_bins
+ rwgt_sel = None
+ if data_config.reweight_discard_under_overflow:
+ rwgt_sel = (table[x_var] >= min(x_bins)) & (table[x_var] <= max(x_bins)) & \
+ (table[y_var] >= min(y_bins)) & (table[y_var] <= max(y_bins))
+ # init w/ wgt=0: events not belonging to any class in `reweight_classes` will get a weight of 0 at the end
+ wgt = np.zeros(len(table), dtype='float32')
+ sum_evts = 0
+ if reweight_hists is None:
+ reweight_hists = data_config.reweight_hists
+ for label, hist in reweight_hists.items():
+ pos = table[label] == 1
+ if rwgt_sel is not None:
+ pos = (pos & rwgt_sel)
+ rwgt_x_vals = ak.to_numpy(table[x_var][pos])
+ rwgt_y_vals = ak.to_numpy(table[y_var][pos])
+ x_indices = np.clip(np.digitize(
+ rwgt_x_vals, x_bins) - 1, a_min=0, a_max=len(x_bins) - 2)
+ y_indices = np.clip(np.digitize(
+ rwgt_y_vals, y_bins) - 1, a_min=0, a_max=len(y_bins) - 2)
+ wgt[pos] = hist[x_indices, y_indices]
+ sum_evts += np.sum(pos)
+ if sum_evts != len(table):
+ warn(
+ 'Not all selected events used in the reweighting. '
+ 'Check consistency between `selection` and `reweight_classes` definition, or with the `reweight_vars` binnings '
+ '(under- and overflow bins are discarded by default, unless `reweight_discard_under_overflow` is set to `False` in the `weights` section).',
+ )
+ if data_config.reweight_basewgt:
+ wgt *= ak.to_numpy(table[data_config.basewgt_name])
+ return wgt
+
+
+class AutoStandardizer(object):
+ r"""AutoStandardizer.
+ Class to compute the variable standardization information.
+ Arguments:
+ filelist (list): list of files to be loaded.
+ data_config (DataConfig): object containing data format information.
+ """
+
+ def __init__(self, filelist, data_config):
+ if isinstance(filelist, dict):
+ filelist = sum(filelist.values(), [])
+ self._filelist = filelist if isinstance(
+ filelist, (list, tuple)) else glob.glob(filelist)
+ self._data_config = data_config.copy()
+ self.load_range = (0, data_config.preprocess.get('data_fraction', 0.1))
+
+ def read_file(self, filelist):
+ self.keep_branches = set()
+ self.load_branches = set()
+ for k, params in self._data_config.preprocess_params.items():
+ if params['center'] == 'auto':
+ self.keep_branches.add(k)
+ if k in self._data_config.var_funcs:
+ expr = self._data_config.var_funcs[k]
+ self.load_branches.update(_get_variable_names(expr))
+ else:
+ self.load_branches.add(k)
+ if self._data_config.selection:
+ self.load_branches.update(_get_variable_names(self._data_config.selection))
+ _logger.debug('[AutoStandardizer] keep_branches:\n %s', ','.join(self.keep_branches))
+ _logger.debug('[AutoStandardizer] load_branches:\n %s', ','.join(self.load_branches))
+
+ table = _read_files(filelist, self.load_branches, self.load_range,
+ show_progressbar=True, treename=self._data_config.treename)
+ table = _apply_selection(table, self._data_config.selection)
+ table = _build_new_variables(
+ table, {k: v for k, v in self._data_config.var_funcs.items() if k in self.keep_branches})
+ table = _clean_up(table, self.load_branches - self.keep_branches)
+ return table
+
+ def make_preprocess_params(self, table):
+ _logger.info('Using %d events to calculate standardization info', len(table))
+ preprocess_params = copy.deepcopy(self._data_config.preprocess_params)
+ for k, params in self._data_config.preprocess_params.items():
+ if params['center'] == 'auto':
+ if k.endswith('_mask'):
+ params['center'] = None
+ else:
+ a = ak.to_numpy(ak.flatten(table[k], axis=None))
+ # check for NaN
+ if np.any(np.isnan(a)):
+ _logger.warning('[AutoStandardizer] Found NaN in `%s`, will convert it to 0.', k)
+ time.sleep(10)
+ a = np.nan_to_num(a)
+ low, center, high = np.percentile(a, [16, 50, 84])
+ scale = max(high - center, center - low)
+ scale = 1 if scale == 0 else 1. / scale
+ params['center'] = float(center)
+ params['scale'] = float(scale)
+ preprocess_params[k] = params
+ _logger.info('[AutoStandardizer] %s low=%s, center=%s, high=%s, scale=%s', k, low, center, high, scale)
+ return preprocess_params
+
+ def produce(self, output=None):
+ table = self.read_file(self._filelist)
+ preprocess_params = self.make_preprocess_params(table)
+ self._data_config.preprocess_params = preprocess_params
+ # must also propogate the changes to `data_config.options` so it can be persisted
+ self._data_config.options['preprocess']['params'] = preprocess_params
+ if output:
+ _logger.info(
+ 'Writing YAML file w/ auto-generated preprocessing info to %s' % output)
+ self._data_config.dump(output)
+ return self._data_config
+
+
+class WeightMaker(object):
+ r"""WeightMaker.
+ Class to make reweighting information.
+ Arguments:
+ filelist (list): list of files to be loaded.
+ data_config (DataConfig): object containing data format information.
+ """
+
+ def __init__(self, filelist, data_config):
+ if isinstance(filelist, dict):
+ filelist = sum(filelist.values(), [])
+ self._filelist = filelist if isinstance(filelist, (list, tuple)) else glob.glob(filelist)
+ self._data_config = data_config.copy()
+
+ def read_file(self, filelist):
+ self.keep_branches = set(self._data_config.reweight_branches + self._data_config.reweight_classes +
+ (self._data_config.basewgt_name,))
+ self.load_branches = set()
+ for k in self.keep_branches:
+ if k in self._data_config.var_funcs:
+ expr = self._data_config.var_funcs[k]
+ self.load_branches.update(_get_variable_names(expr))
+ else:
+ self.load_branches.add(k)
+ if self._data_config.selection:
+ self.load_branches.update(_get_variable_names(self._data_config.selection))
+ _logger.debug('[WeightMaker] keep_branches:\n %s', ','.join(self.keep_branches))
+ _logger.debug('[WeightMaker] load_branches:\n %s', ','.join(self.load_branches))
+ table = _read_files(filelist, self.load_branches, show_progressbar=True, treename=self._data_config.treename)
+ table = _apply_selection(table, self._data_config.selection)
+ table = _build_new_variables(
+ table, {k: v for k, v in self._data_config.var_funcs.items() if k in self.keep_branches})
+ table = _clean_up(table, self.load_branches - self.keep_branches)
+ return table
+
+ def make_weights(self, table):
+ x_var, y_var = self._data_config.reweight_branches
+ x_bins, y_bins = self._data_config.reweight_bins
+ if not self._data_config.reweight_discard_under_overflow:
+ # clip variables to be within bin ranges
+ x_min, x_max = min(x_bins), max(x_bins)
+ y_min, y_max = min(y_bins), max(y_bins)
+ _logger.info(f'Clipping `{x_var}` to [{x_min}, {x_max}] to compute the shapes for reweighting.')
+ _logger.info(f'Clipping `{y_var}` to [{y_min}, {y_max}] to compute the shapes for reweighting.')
+ table[x_var] = np.clip(table[x_var], min(x_bins), max(x_bins))
+ table[y_var] = np.clip(table[y_var], min(y_bins), max(y_bins))
+
+ _logger.info('Using %d events to make weights', len(table))
+
+ sum_evts = 0
+ max_weight = 0.9
+ raw_hists = {}
+ class_events = {}
+ result = {}
+ for label in self._data_config.reweight_classes:
+ pos = (table[label] == 1)
+ x = ak.to_numpy(table[x_var][pos])
+ y = ak.to_numpy(table[y_var][pos])
+ hist, _, _ = np.histogram2d(x, y, bins=self._data_config.reweight_bins)
+ _logger.info('%s (unweighted):\n %s', label, str(hist.astype('int64')))
+ sum_evts += hist.sum()
+ if self._data_config.reweight_basewgt:
+ w = ak.to_numpy(table[self._data_config.basewgt_name][pos])
+ hist, _, _ = np.histogram2d(x, y, weights=w, bins=self._data_config.reweight_bins)
+ _logger.info('%s (weighted):\n %s', label, str(hist.astype('float32')))
+ raw_hists[label] = hist.astype('float32')
+ result[label] = hist.astype('float32')
+ if sum_evts != len(table):
+ _logger.warning(
+ 'Only %d (out of %d) events actually used in the reweighting. '
+ 'Check consistency between `selection` and `reweight_classes` definition, or with the `reweight_vars` binnings '
+ '(under- and overflow bins are discarded by default, unless `reweight_discard_under_overflow` is set to `False` in the `weights` section).',
+ sum_evts, len(table))
+ time.sleep(10)
+
+ if self._data_config.reweight_method == 'flat':
+ for label, classwgt in zip(self._data_config.reweight_classes, self._data_config.class_weights):
+ hist = result[label]
+ threshold_ = np.median(hist[hist > 0]) * 0.01
+ nonzero_vals = hist[hist > threshold_]
+ min_val, med_val = np.min(nonzero_vals), np.median(hist) # not really used
+ ref_val = np.percentile(nonzero_vals, self._data_config.reweight_threshold)
+ _logger.debug('label:%s, median=%f, min=%f, ref=%f, ref/min=%f' %
+ (label, med_val, min_val, ref_val, ref_val / min_val))
+ # wgt: bins w/ 0 elements will get a weight of 0; bins w/ content 0], 100 - self._data_config.reweight_threshold)
+ wgt = np.clip(ratio / upper, 0, 1) # -> [0,1]
+ result[label] = wgt
+ # divide by classwgt here will effective increase the weight later
+ class_events[label] = np.sum(raw_hists[label] * wgt) / classwgt
+ # ''equalize'' all classes
+ # multiply by max_weight (<1) to add some randomness in the sampling
+ min_nevt = min(class_events.values()) * max_weight
+ for label in self._data_config.reweight_classes:
+ class_wgt = float(min_nevt) / class_events[label]
+ result[label] *= class_wgt
+
+ if self._data_config.reweight_basewgt:
+ wgts = _build_weights(table, self._data_config, reweight_hists=result)
+ wgt_ref = np.percentile(wgts, 100 - self._data_config.reweight_threshold)
+ _logger.info('Set overall reweighting scale factor (%d threshold) to %s (max %s)' %
+ (100 - self._data_config.reweight_threshold, wgt_ref, np.max(wgts)))
+ for label in self._data_config.reweight_classes:
+ result[label] /= wgt_ref
+
+ _logger.info('weights:')
+ for label in self._data_config.reweight_classes:
+ _logger.info('%s:\n %s', label, str(result[label]))
+
+ _logger.info('Raw hist * weights:')
+ for label in self._data_config.reweight_classes:
+ _logger.info('%s:\n %s', label, str((raw_hists[label] * result[label]).astype('int32')))
+
+ return result
+
+ def produce(self, output=None):
+ table = self.read_file(self._filelist)
+ wgts = self.make_weights(table)
+ self._data_config.reweight_hists = wgts
+ # must also propogate the changes to `data_config.options` so it can be persisted
+ self._data_config.options['weights']['reweight_hists'] = {k: v.tolist() for k, v in wgts.items()}
+ if output:
+ _logger.info('Writing YAML file w/ reweighting info to %s' % output)
+ self._data_config.dump(output)
+ return self._data_config
\ No newline at end of file
diff --git a/src/data/tools.py b/src/data/tools.py
new file mode 100644
index 0000000000000000000000000000000000000000..c9fac2776f621d3bb37830c098d14fd248eb686d
--- /dev/null
+++ b/src/data/tools.py
@@ -0,0 +1,176 @@
+import numpy as np
+import math
+
+import awkward as ak
+
+
+def _concat(arrays, axis=0):
+ if len(arrays) == 0:
+ return np.array([])
+ if isinstance(arrays[0], np.ndarray):
+ return np.concatenate(arrays, axis=axis)
+ else:
+ return ak.concatenate(arrays, axis=axis)
+
+
+def _stack(arrays, axis=1):
+ if len(arrays) == 0:
+ return np.array([])
+ if isinstance(arrays[0], np.ndarray):
+ return np.stack(arrays, axis=axis)
+ else:
+ return ak.concatenate(arrays, axis=axis)
+
+
+def _pad_vector(a, value=-1, dtype="float32"):
+ maxlen = 2000
+ maxlen2 = 5
+
+ x = (np.ones((len(a), maxlen, maxlen2)) * value).astype(dtype)
+ for idx, s in enumerate(a):
+ for idx_vec, s_vec in enumerate(s):
+ x[idx, idx_vec, : len(s_vec)] = s_vec
+ return x
+
+
+def _pad(a, maxlen, value=0, dtype="float32"):
+ if isinstance(a, np.ndarray) and a.ndim >= 2 and a.shape[1] == maxlen:
+ return a
+ elif isinstance(a, ak.Array):
+ if a.ndim == 1:
+ a = ak.unflatten(a, 1)
+ a = ak.fill_none(ak.pad_none(a, maxlen, clip=True), value)
+ return ak.values_astype(a, dtype)
+ else:
+ x = (np.ones((len(a), maxlen)) * value).astype(dtype)
+ for idx, s in enumerate(a):
+ if not len(s):
+ continue
+ trunc = s[:maxlen].astype(dtype)
+ x[idx, : len(trunc)] = trunc
+ return x
+
+
+def _repeat_pad(a, maxlen, shuffle=False, dtype="float32"):
+ x = ak.to_numpy(ak.flatten(a))
+ x = np.tile(x, int(np.ceil(len(a) * maxlen / len(x))))
+ if shuffle:
+ np.random.shuffle(x)
+ x = x[: len(a) * maxlen].reshape((len(a), maxlen))
+ mask = _pad(ak.zeros_like(a), maxlen, value=1)
+ x = _pad(a, maxlen) + mask * x
+ return ak.values_astype(x, dtype)
+
+
+def _clip(a, a_min, a_max):
+ try:
+ return np.clip(a, a_min, a_max)
+ except ValueError:
+ return ak.unflatten(np.clip(ak.flatten(a), a_min, a_max), ak.num(a))
+
+
+def _knn(support, query, k, n_jobs=1):
+ from scipy.spatial import cKDTree
+
+ kdtree = cKDTree(support)
+ d, idx = kdtree.query(query, k, n_jobs=n_jobs)
+ return idx
+
+
+def _batch_knn(supports, queries, k, maxlen_s, maxlen_q=None, n_jobs=1):
+ assert len(supports) == len(queries)
+ if maxlen_q is None:
+ maxlen_q = maxlen_s
+ batch_knn_idx = np.ones((len(supports), maxlen_q, k), dtype="int32") * (
+ maxlen_s - 1
+ )
+ for i, (s, q) in enumerate(zip(supports, queries)):
+ batch_knn_idx[i, : len(q[:maxlen_q]), :] = _knn(
+ s[:maxlen_s], q[:maxlen_q], k, n_jobs=n_jobs
+ ).reshape(
+ (-1, k)
+ ) # (len(q), k)
+ return batch_knn_idx
+
+
+def _batch_permute_indices(array, maxlen):
+ batch_permute_idx = np.tile(np.arange(maxlen), (len(array), 1))
+ for i, a in enumerate(array):
+ batch_permute_idx[i, : len(a)] = np.random.permutation(len(a[:maxlen]))
+ return batch_permute_idx
+
+
+def _batch_argsort(array, maxlen):
+ batch_argsort_idx = np.tile(np.arange(maxlen), (len(array), 1))
+ for i, a in enumerate(array):
+ batch_argsort_idx[i, : len(a)] = np.argsort(a[:maxlen])
+ return batch_argsort_idx
+
+
+def _batch_gather(array, indices):
+ out = array.zeros_like()
+ for i, (a, idx) in enumerate(zip(array, indices)):
+ maxlen = min(len(a), len(idx))
+ out[i][:maxlen] = a[idx[:maxlen]]
+ return out
+
+
+def _p4_from_pxpypze(px, py, pz, energy):
+ import vector
+
+ vector.register_awkward()
+ return vector.zip({"px": px, "py": py, "pz": pz, "energy": energy})
+
+
+def _p4_from_ptetaphie(pt, eta, phi, energy):
+ import vector
+
+ vector.register_awkward()
+ return vector.zip({"pt": pt, "eta": eta, "phi": phi, "energy": energy})
+
+
+def _p4_from_ptetaphim(pt, eta, phi, mass):
+ import vector
+
+ vector.register_awkward()
+ return vector.zip({"pt": pt, "eta": eta, "phi": phi, "mass": mass})
+
+
+def _get_variable_names(expr, exclude=["awkward", "ak", "np", "numpy", "math"]):
+ import ast
+
+ root = ast.parse(expr)
+ return sorted(
+ {
+ node.id
+ for node in ast.walk(root)
+ if isinstance(node, ast.Name) and not node.id.startswith("_")
+ }
+ - set(exclude)
+ )
+
+
+def _eval_expr(expr, table):
+ tmp = {k: table[k] for k in _get_variable_names(expr)}
+ tmp.update(
+ {
+ "math": math,
+ "np": np,
+ "numpy": np,
+ "ak": ak,
+ "awkward": ak,
+ "_concat": _concat,
+ "_stack": _stack,
+ "_pad": _pad,
+ "_repeat_pad": _repeat_pad,
+ "_clip": _clip,
+ "_batch_knn": _batch_knn,
+ "_batch_permute_indices": _batch_permute_indices,
+ "_batch_argsort": _batch_argsort,
+ "_batch_gather": _batch_gather,
+ "_p4_from_pxpypze": _p4_from_pxpypze,
+ "_p4_from_ptetaphie": _p4_from_ptetaphie,
+ "_p4_from_ptetaphim": _p4_from_ptetaphim,
+ }
+ )
+ return eval(expr, tmp)
diff --git a/src/dataset/config_main/functions_data.py b/src/dataset/config_main/functions_data.py
new file mode 100644
index 0000000000000000000000000000000000000000..a9de6bb935417d028844caed032516c989f7eb3a
--- /dev/null
+++ b/src/dataset/config_main/functions_data.py
@@ -0,0 +1,569 @@
+import numpy as np
+import torch
+from torch_scatter import scatter_add, scatter_sum
+from sklearn.preprocessing import StandardScaler
+from torch_scatter import scatter_sum
+
+
+def get_ratios(e_hits, part_idx, y):
+ """Obtain the percentage of energy of the particle present in the hits
+
+ Args:
+ e_hits (_type_): _description_
+ part_idx (_type_): _description_
+ y (_type_): _description_
+
+ Returns:
+ _type_: _description_
+ """
+ energy_from_showers = scatter_sum(e_hits, part_idx.long(), dim=0)
+ # y_energy = y[:, 3]
+ y_energy = y.E
+ energy_from_showers = energy_from_showers[1:]
+ assert len(energy_from_showers) > 0
+ return (energy_from_showers.flatten() / y_energy).tolist()
+
+
+def get_number_hits(e_hits, part_idx):
+ number_of_hits = scatter_sum(torch.ones_like(e_hits), part_idx.long(), dim=0)
+ return (number_of_hits[1:].flatten()).tolist()
+
+
+def get_number_of_daughters(hit_type_feature, hit_particle_link, daughters):
+ a = hit_particle_link
+ b = daughters
+ a_u = torch.unique(a)
+ number_of_p = torch.zeros_like(a_u)
+ for p, i in enumerate(a_u):
+ mask2 = a == i
+ number_of_p[p] = torch.sum(torch.unique(b[mask2]) != -1)
+ return number_of_p
+
+
+def find_mask_no_energy(
+ hit_particle_link,
+ hit_type_a,
+ hit_energies,
+ y,
+ daughters,
+ predict=False,
+ is_Ks=False,
+):
+ """This function remove particles with tracks only and remove particles with low fractions
+ # Remove 2212 going to multiple particles without tracks for now
+ # remove particles below energy cut
+ # remove particles that decayed in the tracker
+ # remove particles with two tracks (due to bad tracking)
+ # remove particles with daughters for the moment
+
+ Args:
+ hit_particle_link (_type_): _description_
+ hit_type_a (_type_): _description_
+ hit_energies (_type_): _description_
+ y (_type_): _description_
+
+ Returns:
+ _type_: _description_
+ """
+
+ number_of_daughters = get_number_of_daughters(
+ hit_type_a, hit_particle_link, daughters
+ )
+ list_p = np.unique(hit_particle_link)
+ list_remove = []
+ part_frac = torch.tensor(get_ratios(hit_energies, hit_particle_link, y))
+ number_of_hits = get_number_hits(hit_energies, hit_particle_link)
+ if predict:
+ energy_cut = 0.1
+ filt1 = (torch.where(part_frac >= energy_cut)[0] + 1).long().tolist()
+ else:
+ energy_cut = 0.01
+ filt1 = (torch.where(part_frac >= energy_cut)[0] + 1).long().tolist()
+ number_of_tracks = scatter_add(1 * (hit_type_a == 1), hit_particle_link.long())[1:]
+ if is_Ks == False:
+ for index, p in enumerate(list_p):
+ mask = hit_particle_link == p
+ hit_types = np.unique(hit_type_a[mask])
+
+ if predict:
+ if (
+ np.array_equal(hit_types, [0, 1])
+ or int(p) not in filt1
+ or (number_of_hits[index] < 2)
+ or (y.decayed_in_tracker[index] == 1)
+ or number_of_tracks[index] == 2
+ or number_of_daughters[index] > 1
+ ):
+ list_remove.append(p)
+ else:
+ if (
+ np.array_equal(hit_types, [0, 1])
+ or int(p) not in filt1
+ or (number_of_hits[index] < 2)
+ or number_of_tracks[index] == 2
+ or number_of_daughters[index] > 1
+ ):
+ list_remove.append(p)
+ if len(list_remove) > 0:
+ mask = torch.tensor(np.full((len(hit_particle_link)), False, dtype=bool))
+ for p in list_remove:
+ mask1 = hit_particle_link == p
+ mask = mask1 + mask
+
+ else:
+ mask = np.full((len(hit_particle_link)), False, dtype=bool)
+
+ if len(list_remove) > 0:
+ mask_particles = np.full((len(list_p)), False, dtype=bool)
+ for p in list_remove:
+ mask_particles1 = list_p == p
+ mask_particles = mask_particles1 + mask_particles
+
+ else:
+ mask_particles = np.full((len(list_p)), False, dtype=bool)
+ return mask, mask_particles
+
+
+class CachedIndexList:
+ def __init__(self, lst):
+ self.lst = lst
+ self.cache = {}
+
+ def index(self, value):
+ if value in self.cache:
+ return self.cache[value]
+ else:
+ idx = self.lst.index(value)
+ self.cache[value] = idx
+ return idx
+
+
+def find_cluster_id(hit_particle_link):
+ unique_list_particles = list(np.unique(hit_particle_link))
+ if np.sum(np.array(unique_list_particles) == -1) > 0:
+ unique_list_particles = torch.tensor(unique_list_particles)
+
+ non_noise_idx = torch.where(torch.tensor(unique_list_particles) != -1)[0]
+ noise_idx = torch.where(torch.tensor(unique_list_particles) == -1)[0]
+ non_noise_particles = torch.tensor(unique_list_particles)[non_noise_idx]
+ c_non_noise_particles = CachedIndexList(non_noise_particles.tolist())
+ cluster_id = map(
+ lambda x: c_non_noise_particles.index(x), hit_particle_link.tolist()
+ )
+ cluster_id = torch.Tensor(list(cluster_id)) + 1
+ unique_list_particles[non_noise_idx] = cluster_id
+ unique_list_particles[noise_idx] = 0
+ else:
+ c_unique_list_particles = CachedIndexList(unique_list_particles)
+ cluster_id = map(
+ lambda x: c_unique_list_particles.index(x), hit_particle_link.tolist()
+ )
+ cluster_id = torch.Tensor(list(cluster_id)) + 1
+ # unique_list_particles1 = torch.unique(hit_particle_link)
+ # cluster_id = torch.searchsorted(
+ # unique_list_particles1, hit_particle_link, right=False
+ # )
+ # cluster_id = cluster_id + 1
+ return cluster_id, unique_list_particles
+
+
+def scatter_count(input: torch.Tensor):
+ return scatter_add(torch.ones_like(input, dtype=torch.long), input.long())
+
+
+def get_particle_features(unique_list_particles, output, prediction, connection_list):
+ unique_list_particles = torch.Tensor(unique_list_particles).to(torch.int64)
+ if prediction:
+ number_particle_features = 12 - 2
+ else:
+ number_particle_features = 9 - 2
+ if output["pf_features"].shape[0] == 18:
+ number_particle_features += 8 # add vertex information
+ features_particles = torch.permute(
+ torch.tensor(
+ output["pf_features"][
+ 2:number_particle_features, list(unique_list_particles)
+ ]
+ ),
+ (1, 0),
+ ) #
+ # particle_coord are just features 10, 11, 12
+ if features_particles.shape[1] == 16: # Using config with part_pxyz and part_vertex_xyz
+ #print("Using config with part_pxyz and part_vertex_xyz")
+ particle_coord = features_particles[:, 10:13]
+ vertex_coord = features_particles[:, 13:16]
+ # normalize particle coords
+ particle_coord = particle_coord# / np.linalg.norm(particle_coord, axis=1).reshape(-1, 1) # DO NOT NORMALIZE
+ #particle_coord, spherical_to_cartesian(
+ # features_particles[:, 1],
+ # features_particles[:, 0], # theta and phi are mixed!!!
+ # features_particles[:, 2],
+ # normalized=True,
+ #)
+ else:
+ particle_coord = spherical_to_cartesian(
+ features_particles[:, 1],
+ features_particles[:, 0], # theta and phi are mixed!!!
+ features_particles[:, 2],
+ normalized=True,
+ )
+ vertex_coord = torch.zeros_like(particle_coord)
+ y_mass = features_particles[:, 3].view(-1).unsqueeze(1)
+ y_mom = features_particles[:, 2].view(-1).unsqueeze(1)
+ y_energy = torch.sqrt(y_mass**2 + y_mom**2)
+ y_pid = features_particles[:, 4].view(-1).unsqueeze(1)
+ if prediction:
+ y_data_graph = Particles_GT(
+ particle_coord,
+ y_energy,
+ y_mom,
+ y_mass,
+ y_pid,
+ features_particles[:, 5].view(-1).unsqueeze(1),
+ features_particles[:, 6].view(-1).unsqueeze(1),
+ unique_list_particles=unique_list_particles,
+ vertex=vertex_coord,
+ )
+ else:
+ y_data_graph = Particles_GT(
+ particle_coord,
+ y_energy,
+ y_mom,
+ y_mass,
+ y_pid,
+ unique_list_particles=unique_list_particles,
+ vertex=vertex_coord,
+ )
+ return y_data_graph
+
+
+def modify_index_link_for_gamma_e(
+ hit_type_feature, hit_particle_link, daughters, output, number_part, is_Ks=False
+):
+ """Split all particles that have daughters, mostly for brems and conversions but also for protons and neutrons
+
+ Returns:
+ hit_particle_link: new link
+ hit_link_modified: bool for modified hits
+ """
+ hit_link_modified = torch.zeros_like(hit_particle_link).to(hit_particle_link.device)
+ mask = hit_type_feature > 1
+ a = hit_particle_link[mask]
+ b = daughters[mask]
+ a_u = torch.unique(a)
+ number_of_p = torch.zeros_like(a_u)
+ connections_list = []
+ for p, i in enumerate(a_u):
+ mask2 = a == i
+ list_of_daugthers = torch.unique(b[mask2])
+ number_of_p[p] = len(list_of_daugthers)
+ if (number_of_p[p] > 1) and (torch.sum(list_of_daugthers == i) > 0):
+ connections_list.append([i, torch.unique(b[mask2])])
+
+ pid_particles = torch.tensor(output["pf_features"][6, 0:number_part])
+ electron_photon_mask = (torch.abs(pid_particles[a_u.long()]) == 11) + (
+ pid_particles[a_u.long()] == 22
+ )
+ electron_photon_mask = (
+ electron_photon_mask * number_of_p > 1
+ ) # electron_photon_mask *
+ if is_Ks:
+ index_change = a_u # [electron_photon_mask]
+ else:
+ index_change = a_u[electron_photon_mask]
+ for i in index_change:
+ mask_n = mask * (hit_particle_link == i)
+ hit_particle_link[mask_n] = daughters[mask_n]
+ hit_link_modified[mask_n] = 1
+ return hit_particle_link, hit_link_modified, connections_list
+
+
+def get_hit_features(
+ output, number_hits, prediction, number_part, hit_chis, pos_pxpy, is_Ks=False
+):
+ hit_particle_link = torch.tensor(output["pf_vectoronly"][0, 0:number_hits])
+ if prediction:
+ indx_daugthers = 3
+ else:
+ indx_daugthers = 3
+ daughters = torch.tensor(output["pf_vectoronly"][indx_daugthers, 0:number_hits])
+ if prediction:
+ pandora_cluster = torch.tensor(output["pf_vectoronly"][1, 0:number_hits])
+ pandora_pfo_link = torch.tensor(output["pf_vectoronly"][2, 0:number_hits])
+ if is_Ks:
+ pandora_mom = torch.permute(
+ torch.tensor(output["pf_points_pfo"][0:3, 0:number_hits]), (1, 0)
+ )
+ pandora_ref_point = torch.permute(
+ torch.tensor(output["pf_points_pfo"][3:, 0:number_hits]), (1, 0)
+ )
+ else:
+ pandora_mom = None
+ pandora_ref_point = None
+ if is_Ks:
+ pandora_cluster_energy = torch.tensor(
+ output["pf_features"][9, 0:number_hits]
+ )
+ pfo_energy = torch.tensor(output["pf_features"][10, 0:number_hits])
+ chi_squared_tracks = torch.tensor(output["pf_features"][11, 0:number_hits])
+ elif hit_chis:
+ pandora_cluster_energy = torch.tensor(
+ output["pf_features"][-3, 0:number_hits]
+ )
+ pfo_energy = torch.tensor(output["pf_features"][-2, 0:number_hits])
+ chi_squared_tracks = torch.tensor(output["pf_features"][-1, 0:number_hits])
+ else:
+ pandora_cluster_energy = torch.tensor(
+ output["pf_features"][-2, 0:number_hits]
+ )
+ pfo_energy = torch.tensor(output["pf_features"][-1, 0:number_hits])
+ chi_squared_tracks = None
+
+ else:
+ pandora_cluster = None
+ pandora_pfo_link = None
+ pandora_cluster_energy = None
+ pfo_energy = None
+ chi_squared_tracks = None
+ pandora_mom = None
+ pandora_ref_point = None
+ # hit type
+ hit_type_feature = torch.permute(
+ torch.tensor(output["pf_vectors"][:, 0:number_hits]), (1, 0)
+ )[:, 0].to(torch.int64)
+ hit_link_modified = torch.zeros_like(hit_particle_link)
+ connection_list = []
+ (
+ hit_particle_link,
+ hit_link_modified,
+ connection_list,
+ ) = modify_index_link_for_gamma_e(
+ hit_type_feature, hit_particle_link, daughters, output, number_part, is_Ks
+ )
+ cluster_id, unique_list_particles = find_cluster_id(hit_particle_link)
+ # position, e, p
+ pos_xyz_hits = torch.permute(
+ torch.tensor(output["pf_points"][0:3, 0:number_hits]), (1, 0)
+ )
+ pf_features_hits = torch.permute(
+ torch.tensor(output["pf_features"][0:2, 0:number_hits]), (1, 0)
+ ) # removed theta, phi
+ p_hits = pf_features_hits[:, 0].unsqueeze(1)
+ p_hits[p_hits == -1] = 0 # correct p of Hcal hits to be 0
+ e_hits = pf_features_hits[:, 1].unsqueeze(1)
+ e_hits[e_hits == -1] = 0 # correct the energy of the tracks to be 0
+ if pos_pxpy:
+ pos_pxpypz = torch.permute(
+ torch.tensor(output["pf_points"][3:, 0:number_hits]), (1, 0)
+ )
+ else:
+ pos_pxpypz = pos_xyz_hits
+ # pos_pxpypz = pos_theta_phi
+ return (
+ pos_xyz_hits,
+ pos_pxpypz,
+ p_hits,
+ e_hits,
+ hit_particle_link,
+ pandora_cluster,
+ pandora_cluster_energy,
+ pfo_energy,
+ pandora_mom,
+ pandora_ref_point,
+ unique_list_particles,
+ cluster_id,
+ hit_type_feature,
+ pandora_pfo_link,
+ daughters,
+ hit_link_modified,
+ connection_list,
+ chi_squared_tracks,
+ )
+
+
+# def theta_phi_to_pxpypz(pos_theta_phi, pt):
+# px = (pt.view(-1) * torch.cos(pos_theta_phi[:, 0])).view(-1, 1)
+# py = (pt.view(-1) * torch.sin(pos_theta_phi[:, 0])).view(-1, 1)
+# pz = (pt.view(-1) * torch.cos(pos_theta_phi[:, 1])).view(-1, 1)
+# pxpypz = torch.cat(
+# (pos_theta_phi[:, 0].view(-1, 1), pos_theta_phi[:, 1].view(-1, 1), pz), dim=1
+# )
+# return pxpypz
+
+
+def standardize_coordinates(coord_cart_hits):
+ if len(coord_cart_hits) == 0:
+ return coord_cart_hits, None
+ std_scaler = StandardScaler()
+ coord_cart_hits = std_scaler.fit_transform(coord_cart_hits)
+ return torch.tensor(coord_cart_hits).float(), std_scaler
+
+
+def create_dif_interactions(i, j, pos, number_p):
+ x_interactions = pos
+ x_interactions = torch.reshape(x_interactions, [number_p, 1, 2])
+ x_interactions = x_interactions.repeat(1, number_p, 1)
+ xi = x_interactions[i, j, :]
+ xj = x_interactions[j, i, :]
+ x_interactions_m = xi - xj
+ return x_interactions_m
+
+
+def spherical_to_cartesian(phi, theta, r, normalized=False):
+ if normalized:
+ r = torch.ones_like(phi)
+ x = r * torch.sin(theta) * torch.cos(phi)
+ y = r * torch.sin(theta) * torch.sin(phi)
+ z = r * torch.cos(theta)
+ return torch.cat((x.unsqueeze(1), y.unsqueeze(1), z.unsqueeze(1)), dim=1)
+
+
+def calculate_distance_to_boundary(g):
+ r = 2150
+ r_in_endcap = 2307
+ mask_endcap = (torch.abs(g.ndata["pos_hits_xyz"][:, 2]) - r_in_endcap) > 0
+ mask_barrer = ~mask_endcap
+ weight = torch.ones_like(g.ndata["pos_hits_xyz"][:, 0])
+ C = g.ndata["pos_hits_xyz"]
+ A = torch.Tensor([0, 0, 1]).to(C.device)
+ P = (
+ r
+ * 1
+ / (torch.norm(torch.cross(A.view(1, -1), C, dim=-1), dim=1)).unsqueeze(1)
+ * C
+ )
+ P1 = torch.abs(r_in_endcap / g.ndata["pos_hits_xyz"][:, 2].unsqueeze(1)) * C
+ weight[mask_barrer] = torch.norm(P - C, dim=1)[mask_barrer]
+ weight[mask_endcap] = torch.norm(P1[mask_endcap] - C[mask_endcap], dim=1)
+ g.ndata["radial_distance"] = weight
+ weight_ = torch.exp(-(weight / 1000))
+ g.ndata["radial_distance_exp"] = weight_
+ return g
+
+
+class Particles_GT:
+ def __init__(
+ self,
+ coordinates,
+ energy,
+ momentum,
+ mass,
+ pid,
+ decayed_in_calo=None,
+ decayed_in_tracker=None,
+ batch_number=None,
+ unique_list_particles=None,
+ energy_corrected=None,
+ vertex=None,
+ ):
+ self.coord = coordinates
+ self.E = energy
+ self.E_corrected = energy
+ if energy_corrected is not None:
+ self.E_corrected = energy_corrected
+ if len(coordinates) != len(energy):
+ print("!!!!!!!!!!!!!!!!!!!")
+ raise Exception
+ self.m = momentum
+ self.mass = mass
+ self.pid = pid
+ self.vertex = vertex
+ if unique_list_particles is not None:
+ self.unique_list_particles = unique_list_particles
+ if decayed_in_calo is not None:
+ self.decayed_in_calo = decayed_in_calo
+ if decayed_in_tracker is not None:
+ self.decayed_in_tracker = decayed_in_tracker
+ if batch_number is not None:
+ self.batch_number = batch_number
+
+ def __len__(self):
+ return len(self.E)
+
+ def mask(self, mask):
+ for k in self.__dict__:
+ if getattr(self, k) is not None:
+ if type(getattr(self, k)) == list:
+ if getattr(self, k)[0] is not None:
+ setattr(self, k, getattr(self, k)[mask])
+ else:
+ setattr(self, k, getattr(self, k)[mask])
+
+ def copy(self):
+ obj = type(self).__new__(self.__class__)
+ obj.__dict__.update(self.__dict__)
+ return obj
+
+ def calculate_corrected_E(self, g, connections_list):
+ for element in connections_list:
+ # checked there is track
+ parent_particle = element[0]
+ mask_i = g.ndata["particle_number_nomap"] == parent_particle
+ track_number = torch.sum(g.ndata["hit_type"][mask_i] == 1)
+ if track_number > 0:
+ # find index in list
+ index_parent = torch.argmax(
+ 1 * (self.unique_list_particles == parent_particle)
+ )
+ energy_daugthers = 0
+ for daugther in element[1]:
+ if daugther != parent_particle:
+ if torch.sum(self.unique_list_particles == daugther) > 0:
+ index_daugthers = torch.argmax(
+ 1 * (self.unique_list_particles == daugther)
+ )
+ energy_daugthers = (
+ self.E[index_daugthers] + energy_daugthers
+ )
+ self.E_corrected[index_parent] = (
+ self.E_corrected[index_parent] - energy_daugthers
+ )
+ self.coord[index_parent] *= (1 - energy_daugthers / torch.norm(self.coord[index_parent]))
+
+def concatenate_Particles_GT(list_of_Particles_GT):
+ list_coord = [p[1].coord for p in list_of_Particles_GT]
+ list_vertex = [p[1].vertex for p in list_of_Particles_GT]
+ list_coord = torch.cat(list_coord, dim=0)
+ list_E = [p[1].E for p in list_of_Particles_GT]
+ list_E = torch.cat(list_E, dim=0)
+ list_E_corr = [p[1].E_corrected for p in list_of_Particles_GT]
+ list_E_corr = torch.cat(list_E_corr, dim=0)
+ list_m = [p[1].m for p in list_of_Particles_GT]
+ list_m = torch.cat(list_m, dim=0)
+ list_mass = [p[1].mass for p in list_of_Particles_GT]
+ list_mass = torch.cat(list_mass, dim=0)
+ list_pid = [p[1].pid for p in list_of_Particles_GT]
+ list_pid = torch.cat(list_pid, dim=0)
+ if list_vertex[0] is not None:
+ list_vertex = torch.cat(list_vertex, dim=0)
+ if hasattr(list_of_Particles_GT[0], "decayed_in_calo"):
+ list_dec_calo = [p[1].decayed_in_calo for p in list_of_Particles_GT]
+ list_dec_track = [p[1].decayed_in_tracker for p in list_of_Particles_GT]
+ list_dec_calo = torch.cat(list_dec_calo, dim=0)
+ list_dec_track = torch.cat(list_dec_track, dim=0)
+ else:
+ list_dec_calo = None
+ list_dec_track = None
+ batch_number = add_batch_number(list_of_Particles_GT)
+ return Particles_GT(
+ list_coord,
+ list_E,
+ list_m,
+ list_mass,
+ list_pid,
+ list_dec_calo,
+ list_dec_track,
+ batch_number,
+ energy_corrected=list_E_corr,
+ vertex=list_vertex,
+ )
+
+
+def add_batch_number(list_graphs):
+ list_y = []
+ for i, el in enumerate(list_graphs):
+ y = el[1]
+ batch_id = torch.ones(y.E.shape[0], 1) * i
+ list_y.append(batch_id)
+ list_y = torch.cat(list_y, dim=0)
+ return list_y
diff --git a/src/dataset/config_main/functions_graph.py b/src/dataset/config_main/functions_graph.py
new file mode 100644
index 0000000000000000000000000000000000000000..14a45cda2f7c497681a19db03d5083c93553a74b
--- /dev/null
+++ b/src/dataset/config_main/functions_graph.py
@@ -0,0 +1,308 @@
+import numpy as np
+import torch
+from torch_scatter import scatter_add, scatter_sum
+from sklearn.preprocessing import StandardScaler
+from torch_scatter import scatter_sum
+from src.dataset.functions_data import (
+ get_ratios,
+ find_mask_no_energy,
+ find_cluster_id,
+ get_particle_features,
+ get_hit_features,
+ calculate_distance_to_boundary,
+ concatenate_Particles_GT,
+)
+
+
+def create_inputs_from_table(
+ output, hits_only, prediction=False, hit_chis=False, pos_pxpy=False, is_Ks=False
+):
+ """Used by graph creation to get nodes and edge features
+
+ Args:
+ output (_type_): input from the root reading
+ hits_only (_type_): reading only hits or also tracks
+ prediction (bool, optional): if running in eval mode. Defaults to False.
+
+ Returns:
+ _type_: all information to construct a graph
+ """
+ number_hits = np.int32(np.sum(output["pf_mask"][0]))
+ number_part = np.int32(np.sum(output["pf_mask"][1]))
+
+
+ (
+ pos_xyz_hits,
+ pos_pxpypz,
+ p_hits,
+ e_hits,
+ hit_particle_link,
+ pandora_cluster,
+ pandora_cluster_energy,
+ pfo_energy,
+ pandora_mom,
+ pandora_ref_point,
+ unique_list_particles,
+ cluster_id,
+ hit_type_feature,
+ pandora_pfo_link,
+ daughters,
+ hit_link_modified,
+ connection_list,
+ chi_squared_tracks,
+ ) = get_hit_features(
+ output,
+ number_hits,
+ prediction,
+ number_part,
+ hit_chis=hit_chis,
+ pos_pxpy=pos_pxpy,
+ is_Ks=is_Ks,
+ )
+ # features particles
+ y_data_graph = get_particle_features(
+ unique_list_particles, output, prediction, connection_list
+ )
+ assert len(y_data_graph) == len(unique_list_particles)
+ # remove particles that have no energy, no hits or only track hits
+ mask_hits, mask_particles = find_mask_no_energy(
+ cluster_id,
+ hit_type_feature,
+ e_hits,
+ y_data_graph,
+ daughters,
+ prediction,
+ is_Ks=is_Ks,
+ )
+ # create mapping from links to number of particles in the event
+ cluster_id, unique_list_particles = find_cluster_id(hit_particle_link[~mask_hits])
+ y_data_graph.mask(~mask_particles)
+
+ if prediction:
+ if is_Ks:
+ result = [
+ y_data_graph, # y_data_graph[~mask_particles],
+ p_hits[~mask_hits],
+ e_hits[~mask_hits],
+ cluster_id,
+ hit_particle_link[~mask_hits],
+ pos_xyz_hits[~mask_hits],
+ pos_pxpypz[~mask_hits],
+ pandora_cluster[~mask_hits],
+ pandora_cluster_energy[~mask_hits],
+ pandora_mom[~mask_hits],
+ pandora_ref_point[~mask_hits],
+ pfo_energy[~mask_hits],
+ pandora_pfo_link[~mask_hits],
+ hit_type_feature[~mask_hits],
+ hit_link_modified[~mask_hits],
+ daughters[~mask_hits]
+ ]
+ else:
+ result = [
+ y_data_graph, # y_data_graph[~mask_particles],
+ p_hits[~mask_hits],
+ e_hits[~mask_hits],
+ cluster_id,
+ hit_particle_link[~mask_hits],
+ pos_xyz_hits[~mask_hits],
+ pos_pxpypz[~mask_hits],
+ pandora_cluster[~mask_hits],
+ pandora_cluster_energy[~mask_hits],
+ pandora_mom,
+ pandora_ref_point,
+ pfo_energy[~mask_hits],
+ pandora_pfo_link[~mask_hits],
+ hit_type_feature[~mask_hits],
+ hit_link_modified[~mask_hits],
+ ]
+ else:
+ result = [
+ y_data_graph, # y_data_graph[~mask_particles],
+ p_hits[~mask_hits],
+ e_hits[~mask_hits],
+ cluster_id,
+ hit_particle_link[~mask_hits],
+ pos_xyz_hits[~mask_hits],
+ pos_pxpypz[~mask_hits],
+ pandora_cluster,
+ pandora_cluster_energy,
+ pandora_mom,
+ pandora_ref_point,
+ pfo_energy,
+ pandora_pfo_link,
+ hit_type_feature[~mask_hits],
+ hit_link_modified[~mask_hits],
+ daughters[~mask_hits]
+ ]
+ if hit_chis:
+ result.append(
+ chi_squared_tracks[~mask_hits],
+ )
+ else:
+ result.append(None)
+ hit_type = hit_type_feature[~mask_hits]
+ # if hits only remove tracks, otherwise leave tracks
+ if hits_only:
+ hit_mask = (hit_type == 0) | (hit_type == 1)
+ hit_mask = ~hit_mask
+ for i in range(1, len(result)):
+ if result[i] is not None:
+ result[i] = result[i][hit_mask]
+ hit_type_one_hot = torch.nn.functional.one_hot(
+ hit_type_feature[~mask_hits][hit_mask] - 2, num_classes=2
+ )
+
+ else:
+ # if we want the tracks keep only 1 track hit per charged particle.
+ hit_mask = hit_type == 10
+ hit_mask = ~hit_mask
+ for i in range(1, len(result)):
+ if result[i] is not None:
+ # if len(result[i].shape) == 2 and result[i].shape[0] == 3:
+ # result[i] = result[i][:, hit_mask]
+ # else:
+ # result[i] = result[i][hit_mask]
+ result[i] = result[i][hit_mask]
+ hit_type_one_hot = torch.nn.functional.one_hot(
+ hit_type_feature[~mask_hits][hit_mask], num_classes=5
+ )
+ result.append(hit_type_one_hot)
+ result.append(connection_list)
+ return result
+
+def remove_hittype0(graph):
+ filt = graph.ndata["hit_type"] == 0
+ # graph.ndata["hit_type"] -= 1
+ return dgl.remove_nodes(graph, torch.where(filt)[0])
+
+def store_track_at_vertex_at_track_at_calo(graph):
+ # To make it compatible with clustering, remove the 0 hit type nodes and store them as pos_pxpypz_at_vertex
+ tracks_at_calo = graph.ndata["hit_type"] == 1
+ tracks_at_vertex = graph.ndata["hit_type"] == 0
+ part = graph.ndata["particle_number"].long()
+ assert (part[tracks_at_calo] == part[tracks_at_vertex]).all()
+ graph.ndata["pos_pxpypz_at_vertex"] = torch.zeros_like(graph.ndata["pos_pxpypz"])
+ graph.ndata["pos_pxpypz_at_vertex"][tracks_at_calo] = graph.ndata["pos_pxpypz"][tracks_at_vertex]
+ return remove_hittype0(graph)
+
+def create_graph(
+ output,
+ config=None,
+ n_noise=0,
+):
+ ks_dataset = np.float32(np.sum(output["pf_mask"][2]))
+ hits_only = config.graph_config.get(
+ "only_hits", False
+ ) # Whether to only include hits in the graph
+ # standardize_coords = config.graph_config.get("standardize_coords", False)
+ extended_coords = config.graph_config.get("extended_coords", False)
+ prediction = config.graph_config.get("prediction", False)
+ hit_chis = config.graph_config.get("hit_chis_track", False)
+ pos_pxpy = config.graph_config.get("pos_pxpy", False)
+ is_Ks = (torch.sum(torch.Tensor([ks_dataset])))!=0 #config.graph_config.get("ks", False)
+ (
+ y_data_graph,
+ p_hits,
+ e_hits,
+ cluster_id,
+ hit_particle_link,
+ pos_xyz_hits,
+ pos_pxpypz,
+ pandora_cluster,
+ pandora_cluster_energy,
+ pandora_mom,
+ pandora_ref_point,
+ pandora_pfo_energy,
+ pandora_pfo_link,
+ hit_type,
+ hit_link_modified,
+ daugthers,
+ chi_squared_tracks,
+ hit_type_one_hot,
+ connections_list,
+ ) = create_inputs_from_table(
+ output,
+ hits_only=hits_only,
+ prediction=prediction,
+ hit_chis=hit_chis,
+ pos_pxpy=pos_pxpy,
+ is_Ks=is_Ks,
+ )
+ graph_coordinates = pos_xyz_hits # / 3330 # divide by detector size
+ if pos_xyz_hits.shape[0] > 0:
+ graph_empty = False
+ g = dgl.graph(([], []))
+ g.add_nodes(graph_coordinates.shape[0])
+ if hits_only == False:
+ hit_features_graph = torch.cat(
+ (graph_coordinates, hit_type_one_hot, e_hits, p_hits), dim=1
+ ) # dims = 8
+ else:
+ hit_features_graph = torch.cat(
+ (graph_coordinates, hit_type_one_hot, e_hits, p_hits), dim=1
+ ) # dims = 9
+
+ g.ndata["h"] = hit_features_graph
+ g.ndata["pos_hits_xyz"] = pos_xyz_hits
+ g.ndata["pos_pxpypz"] = pos_pxpypz
+ g = calculate_distance_to_boundary(g)
+ g.ndata["hit_type"] = hit_type
+ g.ndata[
+ "e_hits"
+ ] = e_hits # if no tracks this is e and if there are tracks this fills the tracks e values with p
+ if hit_chis:
+ g.ndata["chi_squared_tracks"] = chi_squared_tracks
+ g.ndata["particle_number"] = cluster_id
+ g.ndata["hit_link_modified"] = hit_link_modified
+ g.ndata["daugthers"] = daugthers
+ g.ndata["particle_number_nomap"] = hit_particle_link
+ if prediction:
+ g.ndata["pandora_cluster"] = pandora_cluster
+ g.ndata["pandora_pfo"] = pandora_pfo_link
+ g.ndata["pandora_cluster_energy"] = pandora_cluster_energy
+ g.ndata["pandora_pfo_energy"] = pandora_pfo_energy
+ if is_Ks:
+ g.ndata["pandora_momentum"] = pandora_mom
+ g.ndata["pandora_reference_point"] = pandora_ref_point
+ y_data_graph.calculate_corrected_E(g, connections_list)
+ if ks_dataset>0: #is_Ks == True:
+ if y_data_graph.pid.flatten().shape[0] == 4 and np.count_nonzero(y_data_graph.pid.flatten() == 22) == 4:
+ graph_empty = False
+ else:
+ graph_empty = True
+ if g.ndata["h"].shape[0] < 10 or (set(g.ndata["hit_type"].unique().tolist()) == set([0, 1]) and g.ndata["hit_type"][g.ndata["hit_type"] == 1].shape[0] < 10):
+ graph_empty = True # less than 10 hits
+ if is_Ks == False:
+ if len(y_data_graph) < 4:
+ graph_empty = True
+ else:
+ graph_empty = True
+ g = 0
+ y_data_graph = 0
+ if pos_xyz_hits.shape[0] < 10:
+ graph_empty = True
+ print("graph_empty", graph_empty, pos_xyz_hits.shape[0])
+ if graph_empty:
+ return [g, y_data_graph], graph_empty
+
+ return [store_track_at_vertex_at_track_at_calo(g), y_data_graph], graph_empty
+
+
+def graph_batch_func(list_graphs):
+ """collator function for graph dataloader
+
+ Args:
+ list_graphs (list): list of graphs from the iterable dataset
+
+ Returns:
+ batch dgl: dgl batch of graphs
+ """
+ list_graphs_g = [el[0] for el in list_graphs]
+ # list_y = add_batch_number(list_graphs)
+ # ys = torch.cat(list_y, dim=0)
+ # ys = torch.reshape(ys, [-1, list_y[0].shape[1]])
+ ys = concatenate_Particles_GT(list_graphs)
+ bg = dgl.batch(list_graphs_g)
+ # reindex particle number
+ return bg, ys
diff --git a/src/dataset/dataset.py b/src/dataset/dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..bc1f8c4e42d150e17203111e130a020a97620a08
--- /dev/null
+++ b/src/dataset/dataset.py
@@ -0,0 +1,973 @@
+import fastjet
+import os
+import copy
+import json
+import numpy as np
+import awkward as ak
+import torch.utils.data
+import time
+import pickle
+from collections import OrderedDict
+from functools import partial
+from concurrent.futures.thread import ThreadPoolExecutor
+from src.logger.logger import _logger, warn_once
+from src.data.tools import _pad, _repeat_pad, _clip, _pad_vector
+from src.data.fileio import _read_files
+from src.data.config import DataConfig, _md5
+from src.data.preprocess import (
+ _apply_selection,
+ _build_new_variables,
+ _build_weights,
+ AutoStandardizer,
+ WeightMaker,
+)
+from src.dataset.functions_data import to_tensor
+from src.layers.object_cond import calc_eta_phi
+from torch_scatter import scatter_sum
+from src.dataset.functions_graph import (create_graph, create_jets_outputs,
+ create_jets_outputs_new, create_jets_outputs_Delphes, create_jets_outputs_Delphes2)
+from src.dataset.functions_data import Event, EventCollection, EventJets
+from src.utils.utils import CPU_Unpickler
+from src.dataset.functions_data import EventPFCands, concat_event_collection
+
+def get_pseudojets_fastjet(pfcands):
+ pseudojets = []
+ for i in range(len(pfcands)):
+ pseudojets.append(fastjet.PseudoJet(pfcands.pxyz[i, 0].item(), pfcands.pxyz[i, 1].item(), pfcands.pxyz[i, 2].item(), pfcands.E[i].item()))
+ return pseudojets
+
+def _finalize_inputs(table, data_config):
+ # transformation
+ output = {}
+ # transformation
+ for k, params in data_config.preprocess_params.items():
+ if data_config._auto_standardization and params["center"] == "auto":
+ raise ValueError("No valid standardization params for %s" % k)
+ # if params["center"] is not None:
+ # table[k] = (table[k] - params["center"]) * params["scale"]
+ if params["length"] is not None:
+ # if k == "hit_genlink":
+ # pad_fn = partial(_pad_vector, value=-1)
+ # table[k] = pad_fn(table[k])
+ # else:
+ pad_fn = partial(_pad, value=0)
+ table[k] = pad_fn(table[k], params["length"])
+
+ # stack variables for each input group
+ for k, names in data_config.input_dicts.items():
+ if (
+ len(names) == 1
+ and data_config.preprocess_params[names[0]]["length"] is None
+ ):
+ output["_" + k] = ak.to_numpy(ak.values_astype(table[names[0]], "float32"))
+ else:
+ output["_" + k] = ak.to_numpy(
+ np.stack(
+ [ak.to_numpy(table[n]).astype("float32") for n in names], axis=1
+ )
+ )
+ # copy monitor variables
+ for k in data_config.z_variables:
+ if k not in output:
+ output[k] = ak.to_numpy(table[k])
+ return output
+
+
+def _padlabel(table, _data_config):
+ for k in _data_config.label_value:
+ pad_fn = partial(_pad, value=0)
+ table[k] = pad_fn(table[k], 400)
+
+ return table
+
+
+def _preprocess(table, data_config, options):
+ # apply selection
+ table = _apply_selection(
+ table,
+ data_config.selection
+ if options["training"]
+ else data_config.test_time_selection,
+ )
+ if len(table) == 0:
+ return []
+ # table = _padlabel(table,data_config)
+ # define new variables
+ table = _build_new_variables(table, data_config.var_funcs)
+
+ # else:
+ indices = np.arange(
+ len(table[table.fields[0]])
+ ) # np.arange(len(table[data_config.label_names[0]]))
+ # shuffle
+ if options["shuffle"]:
+ np.random.shuffle(indices)
+ # perform input variable standardization, clipping, padding and stacking
+ table = _finalize_inputs(table, data_config)
+ return table, indices
+
+
+def _load_next(data_config, filelist, load_range, options):
+ table = _read_files(
+ filelist, data_config.load_branches, load_range, treename=data_config.treename
+ )
+ table, indices = _preprocess(table, data_config, options)
+ return table, indices
+
+
+class _SimpleIter(object):
+ r"""_SimpleIter
+ Iterator object for ``SimpleIterDataset''.
+ """
+
+ def __init__(self, **kwargs):
+ # inherit all properties from SimpleIterDataset
+ self.__dict__.update(**kwargs)
+ self.iter_count = 0 # to raise StopIteration when dataset_cap is reached
+ if "dataset_cap" in kwargs and kwargs["dataset_cap"] is not None:
+ self.dataset_cap = kwargs["dataset_cap"]
+ self._sampler_options["shuffle"] = False
+ print("!!! Dataset_cap flag set, disabling shuffling")
+ else:
+ self.dataset_cap = None
+
+ # executor to read files and run preprocessing asynchronously
+ self.executor = ThreadPoolExecutor(max_workers=1) if self._async_load else None
+
+ # init: prefetch holds table and indices for the next fetch
+ self.prefetch = None
+ self.table = None
+ self.indices = []
+ self.cursor = 0
+
+ self._seed = None
+ worker_info = torch.utils.data.get_worker_info()
+ file_dict = self._init_file_dict.copy()
+ if worker_info is not None:
+ # in a worker process
+ self._name += "_worker%d" % worker_info.id
+ self._seed = worker_info.seed & 0xFFFFFFFF
+ np.random.seed(self._seed)
+ # split workload by files
+ new_file_dict = {}
+ for name, files in file_dict.items():
+ new_files = files[worker_info.id :: worker_info.num_workers]
+ assert len(new_files) > 0
+ new_file_dict[name] = new_files
+ file_dict = new_file_dict
+ self.worker_file_dict = file_dict
+ self.worker_filelist = sum(file_dict.values(), [])
+ self.worker_info = worker_info
+
+ self.restart()
+
+ def restart(self):
+ print("=== Restarting DataIter %s, seed=%s ===" % (self._name, self._seed))
+ # re-shuffle filelist and load range if for training
+ filelist = self.worker_filelist.copy()
+ if self._sampler_options["shuffle"]:
+ np.random.shuffle(filelist)
+ if self._file_fraction < 1:
+ num_files = int(len(filelist) * self._file_fraction)
+ filelist = filelist[:num_files]
+ self.filelist = filelist
+
+ if self._init_load_range_and_fraction is None:
+ self.load_range = (0, 1)
+ else:
+ (start_pos, end_pos), load_frac = self._init_load_range_and_fraction
+ interval = (end_pos - start_pos) * load_frac
+ if self._sampler_options["shuffle"]:
+ offset = np.random.uniform(start_pos, end_pos - interval)
+ self.load_range = (offset, offset + interval)
+ else:
+ self.load_range = (start_pos, start_pos + interval)
+
+ _logger.debug(
+ "Init iter [%d], will load %d (out of %d*%s=%d) files with load_range=%s:\n%s",
+ 0 if self.worker_info is None else self.worker_info.id,
+ len(self.filelist),
+ len(sum(self._init_file_dict.values(), [])),
+ self._file_fraction,
+ int(len(sum(self._init_file_dict.values(), [])) * self._file_fraction),
+ str(self.load_range),
+ )
+ # '\n'.join(self.filelist[: 3]) + '\n ... ' + self.filelist[-1],)
+
+ _logger.info(
+ "Restarted DataIter %s, load_range=%s, file_list:\n%s"
+ % (
+ self._name,
+ str(self.load_range),
+ json.dumps(self.worker_file_dict, indent=2),
+ )
+ )
+
+ # reset file fetching cursor
+ self.ipos = 0 if self._fetch_by_files else self.load_range[0]
+ # prefetch the first entry asynchronously
+ self._try_get_next(init=True)
+
+ def __next__(self):
+ # print(self.ipos, self.cursor)
+ graph_empty = True
+ self.iter_count += 1
+ if self.dataset_cap is not None and self.iter_count > self.dataset_cap:
+ raise StopIteration
+ while graph_empty:
+ if len(self.filelist) == 0:
+ raise StopIteration
+ try:
+ i = self.indices[self.cursor]
+ except IndexError:
+ # case 1: first entry, `self.indices` is still empty
+ # case 2: running out of entries, `self.indices` is not empty
+ while True:
+ if self._in_memory and len(self.indices) > 0:
+ # only need to re-shuffle the indices, if this is not the first entry
+ if self._sampler_options["shuffle"]:
+ np.random.shuffle(self.indices)
+ break
+ if self.prefetch is None:
+ # reaching the end as prefetch got nothing
+ self.table = None
+ if self._async_load:
+ self.executor.shutdown(wait=False)
+ raise StopIteration
+ # get result from prefetch
+ if self._async_load:
+ self.table, self.indices = self.prefetch.result()
+ else:
+ self.table, self.indices = self.prefetch
+ # try to load the next ones asynchronously
+ self._try_get_next()
+ # check if any entries are fetched (i.e., passing selection) -- if not, do another fetch
+ if len(self.indices) > 0:
+ break
+ # reset cursor
+ self.cursor = 0
+ i = self.indices[self.cursor]
+ self.cursor += 1
+ data, graph_empty = self.get_data(i)
+ return data
+
+ def _try_get_next(self, init=False):
+ end_of_list = (
+ self.ipos >= len(self.filelist)
+ if self._fetch_by_files
+ else self.ipos >= self.load_range[1]
+ )
+ if end_of_list:
+ if init:
+ raise RuntimeError(
+ "Nothing to load for worker %d" % 0
+ if self.worker_info is None
+ else self.worker_info.id
+ )
+ if self._infinity_mode and not self._in_memory:
+ # infinity mode: re-start
+ self.restart()
+ return
+ else:
+ # finite mode: set prefetch to None, exit
+ self.prefetch = None
+ return
+ if self._fetch_by_files:
+ filelist = self.filelist[int(self.ipos) : int(self.ipos + self._fetch_step)]
+ load_range = self.load_range
+ else:
+ filelist = self.filelist
+ load_range = (
+ self.ipos,
+ min(self.ipos + self._fetch_step, self.load_range[1]),
+ )
+ # _logger.info('Start fetching next batch, len(filelist)=%d, load_range=%s'%(len(filelist), load_range))
+ if self._async_load:
+ self.prefetch = self.executor.submit(
+ _load_next,
+ self._data_config,
+ filelist,
+ load_range,
+ self._sampler_options,
+ )
+ else:
+ self.prefetch = _load_next(
+ self._data_config, filelist, load_range, self._sampler_options
+ )
+ self.ipos += self._fetch_step
+
+ def get_data(self, i):
+ # inputs
+ X = {k: self.table["_" + k][i].copy() for k in self._data_config.input_names}
+ if "EFlowPhoton" in X:
+ return create_jets_outputs_Delphes(X), False
+ elif "PFCands" in X:
+ # v2 config
+ return create_jets_outputs_Delphes2(X), False
+ return create_jets_outputs_new(X), False
+
+class EventDatasetCollection(torch.utils.data.Dataset):
+ def __init__(self, dir_list, args, aug_soft=False, aug_collinear=False, shuffle_seed=10):
+ self.event_collections_dict = OrderedDict()
+ if args:
+ aug_soft = args.augment_soft_particles
+ else:
+ aug_soft=False
+ for dir in dir_list:
+ self.event_collections_dict[dir] = EventDataset.from_directory(dir, mmap=True, aug_soft=aug_soft or aug_soft, seed=0, aug_collinear=aug_collinear)
+ self.n_events = sum([x.n_events for x in self.event_collections_dict.values()])
+ evt_idx = np.arange(0, self.n_events) # now shuffle this using the shuffle_seed and a separate random generator
+ rng = np.random.default_rng(shuffle_seed)
+ rng.shuffle(evt_idx)
+ self.old_to_new_idx = evt_idx
+ self.event_thresholds = [x.n_events for x in self.event_collections_dict.values()]
+ self.event_thresholds = np.cumsum([0] + self.event_thresholds)
+ self.dir_list = dir_list
+ def __len__(self):
+ return self.n_events
+ def get_idx(self, i):
+ assert i < self.n_events, "Index out of bounds: %d >= %d" % (i, self.n_events)
+ for j in range(len(self.event_thresholds)-1):
+ threshold = self.event_thresholds[j]
+ if i >= threshold and i < self.event_thresholds[j+1]:
+ #print("-------------", i, threshold, self.event_thresholds, j, self.dir_list[j])
+ return self.event_collections_dict[self.dir_list[j]][i - threshold]
+ def getitem(self, i):
+ return self.get_idx(i)
+ def __iter__(self):
+ for i in range(self.n_events):
+ yield self.get_idx(self.old_to_new_idx[i])
+ def __getitem__(self, i):
+ assert i < self.n_events, "Index out of bounds: %d >= %d" % (i, self.n_events)
+ return self.get_idx(self.old_to_new_idx[i])
+ # A collection of EventDatasets.
+ # You should use a sampler together with this, as by default it just concatenates the EventDatasets together!
+
+def get_batch_bounds(batch_idx):
+ # batch_idx: tensor of format [0,0,0,0,1,1,1...]
+ # returns tensor of format [0, 4, ...]
+ print("Batch idx", batch_idx.shape, batch_idx[(batch_idx>3130) & (batch_idx < 3140)])
+ batches = sorted(batch_idx.unique().tolist())
+ skipped = []
+ for i in range(batch_idx.max().int().item()):
+ if i not in batches:
+ skipped.append(i)
+ # reverse sort skipped
+ skipped = sorted(skipped, reverse=True)
+ result = torch.zeros(batch_idx.max().int().item() + 2 + len(skipped))
+ #for i, b in enumerate(batches):
+ # assert i == b
+ # result[i] = torch.where(batch_idx==b)[0].min()
+ # result[i+1] = torch.where(batch_idx==b)[0].max()
+ b_list = batch_idx.int().tolist()
+ prev = -1
+ for i, b in enumerate(b_list):
+ if b != prev:
+ result[b] = i
+ prev = b
+ result[-1] = len(b_list)
+ print("skipped", skipped)
+ for s in skipped:
+ if s == 0:
+ result[s] = 0
+ else:
+ result[s] = result[s+1]
+ print("result", result.shape, result[3130:3140].tolist())
+ return result
+
+
+def filter_pfcands(pfcands):
+ # filter the GenParticles so that dark matter particles are not present
+ # dark matter particles are defined as those with abs(pdgId) > 10000 or pdgId between 50-60
+ # TODO: filter out high eta - temporarily this is done here, but it should be done in the ntuplizer in order to avoid big files
+ mask = (torch.abs(pfcands.pid) < 10000) & ((torch.abs(pfcands.pid) < 50) | (torch.abs(pfcands.pid) > 60)) & (torch.abs(pfcands.eta) < 2.4) & (pfcands.pt > 0.5) #& (pfcands.pt > 0.5)
+ pfcands.mask(mask)
+ return pfcands
+
+
+class EventDataset(torch.utils.data.Dataset):
+ @staticmethod
+ def from_directory(dir, mmap=True, model_clusters_file=None, model_output_file=None, include_model_jets_unfiltered=False, fastjet_R=None, parton_level=False, gen_level=False, aug_soft=False, seed=0, aug_collinear=False, pt_jet_cutoff=100):
+ result = {}
+ for file in os.listdir(dir):
+ if file == "metadata.pkl":
+ metadata = pickle.load(open(os.path.join(dir, file), "rb"))
+ else:
+ print("File:", file)
+ result[file.split(".")[0]] = np.load(
+ os.path.join(dir, file), mmap_mode="r" if mmap else None
+ )
+ dataset = EventDataset(result, metadata, model_clusters_file=model_clusters_file,
+ model_output_file=model_output_file,
+ include_model_jets_unfiltered=include_model_jets_unfiltered,
+ fastjet_R=fastjet_R, parton_level=parton_level, gen_level=gen_level, aug_soft=aug_soft,
+ seed=seed, aug_collinear=aug_collinear, pt_jet_cutoff=pt_jet_cutoff)
+ return dataset
+ def get_pfcands_key(self):
+ pfcands_key = "pfcands"
+ print("get_pfcands_key")
+ if self.gen_level:
+ return "final_gen_particles"
+ if self.parton_level:
+ return "final_parton_level_particles"
+ if self.model_output is None:
+ if self.gen_level:
+ return "final_gen_particles"
+ if self.parton_level:
+ return "final_parton_level_particles"
+ return pfcands_key # ignore
+ for i in [0, 1, 2]: # try the first three if it fits
+ start = {key: self.metadata[key + "_batch_idx"][i] for key in self.attrs}
+ end = {key: self.metadata[key + "_batch_idx"][i + 1] for key in self.attrs}
+ result = {key: self.events[key][start[key]:end[key]] for key in self.attrs}
+ result = {key: EventCollection.deserialize(result[key], batch_number=None, cls=Event.evt_collections[key])
+ for key in self.attrs}
+ if "final_parton_level_particles" in result:
+ result["final_parton_level_particles"] = filter_pfcands(result["final_parton_level_particles"])
+ if "final_gen_particles" in result:
+ result["final_gen_particles"] = filter_pfcands(result["final_gen_particles"])
+ event_filter_s, event_filter_e = self.model_output["event_idx_bounds"][i].int().item(), \
+ self.model_output["event_idx_bounds"][i + 1].int().item()
+ diff = event_filter_e - event_filter_s
+ if diff != len(result["pfcands"]):
+ if diff == len(result["final_parton_level_particles"]):
+ pfcands_key = "final_parton_level_particles"
+ break
+ if diff == len(result["final_gen_particles"]):
+ pfcands_key = "final_gen_particles"
+ break
+ print("Found pfcands_key=%s" % pfcands_key)
+ return pfcands_key
+
+ def __init__(self, events, metadata, model_clusters_file=None, model_output_file=None, include_model_jets_unfiltered=False, fastjet_R=None, parton_level=False, gen_level=False, aug_soft=False, seed=0, aug_collinear=False, pt_jet_cutoff=100):
+ # events: serialized events dict
+ # metadata: dict with metadata
+ self.events = events
+ self.n_events = metadata["n_events"]
+ self.attrs = metadata["attrs"]
+ self.metadata = metadata
+ self.include_model_jets_unfiltered = include_model_jets_unfiltered
+ self.model_i = 0
+ self.parton_level = parton_level
+ self.gen_level = gen_level
+ self.augment_soft_particles = aug_soft
+ self.aug_collinear = aug_collinear
+ self.seed = seed
+ self.pt_jet_cutoff = pt_jet_cutoff
+ #self.pfcands_key = "pfcands"
+ # set to final_parton_level_particles or final_gen_particles in case needed
+ #for key in self.attrs:
+ # self.evt_idx_to_batch_idx[key] = {}
+ if model_output_file is not None:
+ if type(model_output_file) == str:
+ self.model_output = CPU_Unpickler(open(model_output_file, "rb")).load()
+ else:
+ self.model_output = model_output_file
+ self.model_output["event_idx_bounds"] = get_batch_bounds(self.model_output["event_idx"])
+ self.n_events = self.model_output["event_idx"].max().int().item() # sometimes the last batch gets cut off, which causes problems
+ if model_clusters_file is not None:
+ self.model_clusters = to_tensor(pickle.load((open(model_clusters_file, "rb"))))
+ else:
+ self.model_clusters = self.model_output["model_cluster"]
+ # model_output["batch_idx"] contains the batch index for each event. model_clusters is an array of the model labels for each event.
+ else:
+ self.model_output = None
+ self.model_clusters = None
+ if fastjet_R is not None:
+ self.fastjet_jetdef = {r: fastjet.JetDefinition(fastjet.antikt_algorithm, r) for r in fastjet_R}
+ ## fastjet_R is an array of radiuses for which to compute that
+
+ self.pfcands_key = self.get_pfcands_key()
+ def __len__(self):
+ return self.n_events
+ # def __next__(self):
+ def add_model_output(self, model_output):
+ if model_output is not None:
+ if type(model_output) == str:
+ self.model_output = CPU_Unpickler(open(model_output, "rb")).load()
+ else:
+ self.model_output = model_output
+ self.model_output["event_idx_bounds"] = get_batch_bounds(self.model_output["event_idx"])
+ self.n_events = self.model_output["event_idx"].max().int().item() # sometimes the last batch gets cut off, which causes problems
+ self.model_clusters = self.model_output["model_cluster"]
+ # model_output["batch_idx"] contains the batch index for each event. model_clusters is an array of the model labels for each event.
+ else:
+ self.model_output = None
+ self.model_clusters = None
+
+ @staticmethod
+ def pfcands_add_soft_particles(pfcands, n_soft, random_generator, add_original_particle_mapping=False):
+ # augment the dataset with soft particles
+ eta_bounds = [-2.4, 2.4]
+ phi_bounds = [-3.14, 3.14]
+ #pt_bounds = [0.02, 0.5]
+ # choose random eta and phi
+ # use the random generator for eta, phi
+ eta = random_generator.uniform(eta_bounds[0], eta_bounds[1], n_soft).astype(np.double)
+ phi = random_generator.uniform(phi_bounds[0], phi_bounds[1], n_soft).astype(np.double)
+ #pt = random_generator.uniform(pt_bounds[0], pt_bounds[1], n_soft).astype(np.double)
+ pt = np.ones(n_soft).astype(np.double) * 1e-2
+ charge = np.zeros(n_soft).astype(np.double)
+ pid = np.zeros(n_soft).astype(np.double)
+ mass = np.zeros(n_soft).astype(np.double)
+ if hasattr(pfcands, "status"):
+ status = np.zeros(n_soft)
+ soft_pfcands = EventPFCands(pt, eta, phi, mass, charge, pid, pf_cand_jet_idx=-1 * torch.ones(n_soft), status=status)
+ else:
+ soft_pfcands = EventPFCands(pt, eta, phi, mass, charge, pid, pf_cand_jet_idx=-1*torch.ones(n_soft))
+ soft_pfcands.original_particle_mapping = torch.tensor([-1] * len(soft_pfcands))
+ pfcandsc = copy.deepcopy(pfcands)
+ pfcandsc.original_particle_mapping = torch.arange(len(pfcands))
+ pfcandsc = concat_event_collection([pfcandsc, soft_pfcands], nobatch=1)
+ if not add_original_particle_mapping:
+ pfcandsc.original_particle_mapping = torch.arange(len(pfcandsc)) # For now, ignore the soft particles
+ #print("Original PM:", pfcandsc.original_particle_mapping.max())
+ return pfcandsc
+
+ @staticmethod
+ def pfcands_split_particles(pfcands, random_generator):
+ # Augment the dataset by spliting the harder particles
+ # 5 highest pt particles
+ k = min(5, len(pfcands))
+ highest_pt_idx = torch.topk(pfcands.pt, k)[1]
+ weights = pfcands.pt[highest_pt_idx]
+ # Pick a random particle to split according to weights
+ n_to_split = random_generator.randint(0, k)
+ #idx = random_generator.choice(highest_pt_idx, p=weights / weights.sum())
+ indices = highest_pt_idx[:n_to_split]
+ pfcandsc = copy.deepcopy(pfcands)
+ pfcandsc.original_particle_mapping = torch.arange(len(pfcands))
+ # assert that indices are all lower than len(pfcands)
+ if not torch.all(indices < len(pfcands)):
+ print("Indices:", indices)
+ print("PFCands:", pfcands.pt)
+ print("PFCands len:", len(pfcands.pt))
+ raise ValueError("Indices are out of bounds")
+ for idx in indices:
+ split_into = random_generator.randint(2, 5)
+ # split the particle into
+ eta = pfcands.eta[idx]
+ phi = pfcands.phi[idx]
+ pt = pfcands.pt[idx] / split_into
+ charge = pfcands.charge[idx]
+ mass = 0
+ pid = pfcands.pid[idx]
+ colinear_pfcands = EventPFCands(pt=[pt], eta=[eta], phi=[phi], mass=[mass], charge=[charge], pid=[pid], pf_cand_jet_idx=[pfcands.pf_cand_jet_idx[idx]], original_particle_mapping=[idx])
+ #pfcandsc.original_particle_mapping[idx] = idx
+ pfcandsc.pt[idx] = pt
+ for _ in range(split_into-1):
+ pfcandsc = concat_event_collection([pfcandsc, colinear_pfcands], nobatch=1)
+ if pfcandsc.original_particle_mapping.max() >= len(pfcands):
+ #print("Original PM:", pfcandsc.original_particle_mapping.max(), "len pfcands", len(pfcands))
+ raise ValueError("Original particle mapping is out of bounds")
+ return pfcandsc
+
+ def get_idx(self, i):
+ #print("Getting idx", i)
+ start = {key: self.metadata[key + "_batch_idx"][i] for key in self.attrs}
+ end = {key: self.metadata[key + "_batch_idx"][i + 1] for key in self.attrs}
+ result = {key: self.events[key][start[key]:end[key]] for key in self.attrs}
+ result = {key: EventCollection.deserialize(result[key], batch_number=None, cls=Event.evt_collections[key]) for
+ key in self.attrs}
+ result["pfcands"] = filter_pfcands(result["pfcands"])
+ if "final_parton_level_particles" in result:
+ #print("i=", i)
+ #print("BEFORE:", len(result["final_parton_level_particles"]))
+ result["final_parton_level_particles"] = filter_pfcands(result["final_parton_level_particles"])
+ #print("AFTER:", len(result["final_parton_level_particles"]))
+ #print("------")
+ if "final_gen_particles" in result:
+ result["final_gen_particles"] = filter_pfcands(result["final_gen_particles"])
+ ## augment pfcands here
+ if self.augment_soft_particles:
+ random_generator = np.random.RandomState(seed=i + self.seed)
+ #n_soft = int(random_generator.uniform(10, 1000))
+ n_soft = 500
+ #n_soft = 1000
+ result["pfcands"] = EventDataset.pfcands_add_soft_particles(result["pfcands"], n_soft, random_generator)
+ if "final_parton_level_particles" in result:
+ result["final_parton_level_particles"] = EventDataset.pfcands_add_soft_particles(result["final_parton_level_particles"], n_soft, random_generator) # Also augment parton-level event for testing
+ if "final_gen_particles" in result:
+ result["final_gen_particles"] = EventDataset.pfcands_add_soft_particles(result["final_gen_particles"], n_soft, random_generator)
+ else:
+ result["pfcands"].original_particle_mapping = torch.arange(len(result["pfcands"].pt))
+ if self.aug_collinear:
+ random_generator = np.random.RandomState(seed=i + self.seed)
+ if i % 2: # Every second one:
+ result["pfcands"] = EventDataset.pfcands_split_particles(result["pfcands"], random_generator)
+ if "final_parton_level_particles" in result:
+ result["final_parton_level_particles"] = EventDataset.pfcands_split_particles(
+ result["final_parton_level_particles"], random_generator
+ )
+ # Also augment parton-level event for testing
+ if "final_gen_particles" in result:
+ result["final_gen_particles"] = EventDataset.pfcands_split_particles(result["final_gen_particles"], random_generator)
+ else:
+ n_soft = 500
+ result["pfcands"] = EventDataset.pfcands_add_soft_particles(result["pfcands"], n_soft, random_generator,
+ add_original_particle_mapping=True)
+ if "final_parton_level_particles" in result:
+ result["final_parton_level_particles"] = EventDataset.pfcands_add_soft_particles(
+ result["final_parton_level_particles"], n_soft, random_generator, add_original_particle_mapping=True
+ )
+ # Also augment parton-level event for testing
+ if "final_gen_particles" in result:
+ result["final_gen_particles"] = EventDataset.pfcands_add_soft_particles(
+ result["final_gen_particles"],
+ n_soft,
+ random_generator,
+ add_original_particle_mapping=True
+ )
+
+ if self.model_output is not None:
+ #if "final_parton_level_particles" in result and len(result["final_parton_level_particles"]) == 0:
+ # print("!!")
+ # return None
+ result["model_jets"], bc_scores_pfcands, bc_labels_pfcands = self.get_model_jets(i, pfcands=result[self.pfcands_key], include_target=1, dq=result["matrix_element_gen_particles"])
+ result[self.pfcands_key].bc_scores_pfcands = bc_scores_pfcands
+ result[self.pfcands_key].bc_labels_pfcands = bc_labels_pfcands
+ if self.include_model_jets_unfiltered:
+ result["model_jets_unfiltered"], _, _ = self.get_model_jets(i, pfcands=result[self.pfcands_key], filter=False)
+ if hasattr(self, "fastjet_jetdef") and self.fastjet_jetdef is not None:
+ if self.gen_level:
+ result["fastjet_jets"] = {key: EventDataset.get_fastjet_jets(result, self.fastjet_jetdef[key], key="final_gen_particles", pt_cutoff=self.pt_jet_cutoff) for key in self.fastjet_jetdef}
+ elif self.parton_level:
+ result["fastjet_jets"] = {key: EventDataset.get_fastjet_jets(result, self.fastjet_jetdef[key], key="final_parton_level_particles", pt_cutoff=self.pt_jet_cutoff) for key in self.fastjet_jetdef}
+ else:
+ result["fastjet_jets"] = {key: EventDataset.get_fastjet_jets(result, self.fastjet_jetdef[key], key="pfcands", pt_cutoff=self.pt_jet_cutoff) for key
+ in self.fastjet_jetdef}
+ if "genjets" in result:
+ result["genjets"] = EventDataset.mask_jets(result["genjets"])
+ evt = Event(**result)
+ assert evt.pfcands.original_particle_mapping.max() < len(evt.pfcands.pt), "Original particle mapping is out of bounds: " + str(evt.original_particle_mapping.max()) + " >= " + str(len(evt.pfcands.pt))
+ return evt
+
+ @staticmethod
+ def get_target_obj_score(clusters_eta, clusters_phi, clusters_pt, event_idx_clusters, dq_eta, dq_phi, dq_event_idx):
+ # return the target scores for each cluster (reteurns list of 1's and 0's)
+ # dq_coords: list of [eta, phi] for each dark quark
+ # dq_event_idx: list of event_idx for each dark quarks
+ target = []
+ for event in event_idx_clusters.unique():
+ filt = event_idx_clusters == event
+ clusters = torch.stack([clusters_eta[filt], clusters_phi[filt], clusters_pt[filt]], dim=1)
+ dq_coords_event = torch.stack([dq_eta[dq_event_idx == event], dq_phi[dq_event_idx == event]], dim=1)
+ dist_matrix = torch.cdist(
+ dq_coords_event,
+ clusters[:, :2].to(dq_coords_event.device),
+ p=2
+ ).T
+ if len(dist_matrix) == 0:
+ target.append(torch.zeros(len(clusters)).int().to(dist_matrix.device))
+ continue
+ closest_quark_dist, closest_quark_idx = dist_matrix.min(dim=1)
+ closest_quark_idx[closest_quark_dist > 0.8] = -1
+ target.append((closest_quark_idx != -1).float())
+ if len(target):
+ return torch.cat(target).flatten()
+ return torch.tensor([])
+
+ @staticmethod
+ def mask_jets(jets, cutoff=100):
+ mask = jets.pt >= cutoff
+ return EventJets(jets.pt[mask], jets.eta[mask], jets.phi[mask], jets.mass[mask])
+
+ @staticmethod
+ def get_model_jets_static(i, pfcands, model_output, model_clusters):
+ event_filter_s, event_filter_e = model_output["event_idx_bounds"][i].int().item(), model_output["event_idx_bounds"][i + 1].int().item()
+ pfcands_pt = pfcands.pt
+ pfcands_pxyz = pfcands.pxyz
+ pfcands_E = pfcands.E
+ #assert len(pfcands_pt) == event_filter_e - event_filter_s, "Error!, len(pfcands_pt)==%d, event_filter_e-event_filter_s=%d" % (len(pfcands_pt), event_filter_e - event_filter_s)
+ if not len(pfcands_pt) == event_filter_e - event_filter_s:
+ return None
+ # jets_pt = scatter_sum(to_tensor(pfcands_pt), self.model_clusters[event_filter] + 1, dim=0)[1:]
+ jets_pxyz = scatter_sum(to_tensor(pfcands_pxyz), model_clusters[event_filter_s:event_filter_e] + 1, dim=0)[1:]
+ jets_pt = torch.norm(jets_pxyz[:, :2], p=2, dim=-1)
+ jets_eta, jets_phi = calc_eta_phi(jets_pxyz, False)
+ # jets_mass = torch.zeros_like(jets_eta)
+ jets_E = scatter_sum(to_tensor(pfcands_E), model_clusters[event_filter_s:event_filter_e] + 1, dim=0)[1:]
+ jets_mass = torch.sqrt(jets_E ** 2 - jets_pxyz.norm(dim=-1) ** 2)
+ cluster_labels = model_clusters[event_filter_s:event_filter_e]
+ bc_scores = model_output["pred"][event_filter_s:event_filter_e, -1]
+ cutoff = 100
+ mask = jets_pt >= cutoff
+ return EventJets(jets_pt[mask], jets_eta[mask], jets_phi[mask], jets_mass[mask])
+
+ @staticmethod
+ def get_jets_fastjets_raw_with_assignment(pfcands, jetdef, pt_cutoff=100):
+ pt = []
+ eta = []
+ phis = []
+ mass = []
+ particle_to_jet = {} # this will map particle_idx -> jet_idx
+ array = get_pseudojets_fastjet(pfcands)
+ for idx, pseudojet in enumerate(array):
+ pseudojet.set_user_index(idx)
+
+ cluster = fastjet.ClusterSequence(array, jetdef)
+ inc_jets = cluster.inclusive_jets()
+ jet_idx = 0
+ for elem in inc_jets:
+ if elem.pt() < pt_cutoff:
+ continue
+ # print("pt:", elem.pt(), "eta:", elem.rap(), "phi:", elem.phi())ž
+ pt.append(elem.pt())
+ eta.append(elem.rap())
+ phi = elem.phi()
+ if phi > np.pi:
+ phi -= 2 * np.pi
+ phis.append(phi)
+ mass.append(elem.m())
+ # Get constituents of this jet
+ constituents = cluster.constituents(elem)
+ for constituent in constituents:
+ particle_idx = constituent.user_index()
+ particle_to_jet[particle_idx] = jet_idx
+ jet_idx += 1
+ return pt, eta, phis, mass, particle_to_jet
+ @staticmethod
+ def get_jets_fastjets_raw(pfcands, jetdef, pt_cutoff=100):
+ pt = []
+ eta = []
+ phis = []
+ mass = []
+ array = get_pseudojets_fastjet(pfcands)
+ cluster = fastjet.ClusterSequence(array, jetdef)
+ inc_jets = cluster.inclusive_jets()
+ for elem in inc_jets:
+ if elem.pt() < pt_cutoff:
+ continue
+ # print("pt:", elem.pt(), "eta:", elem.rap(), "phi:", elem.phi())ž
+ pt.append(elem.pt())
+ eta.append(elem.rap())
+ phi = elem.phi()
+ if phi > np.pi:
+ phi -= 2 * np.pi
+ phis.append(phi)
+ mass.append(elem.m())
+ return pt, eta, phis, mass
+
+ @staticmethod
+ def get_fastjet_jets_with_assignment(event, jetdef, key="pfcands", pt_cutoff=100):
+ if type(event) == dict:
+ k = event[key]
+ else:
+ k = getattr(event, key)
+ pt, eta, phi, m, assignment = EventDataset.get_jets_fastjets_raw_with_assignment(k, jetdef, pt_cutoff=pt_cutoff)
+ return EventJets(torch.tensor(pt), torch.tensor(eta), torch.tensor(phi), torch.tensor(m)), assignment
+ @staticmethod
+ def get_fastjet_jets(event, jetdef, key="pfcands", pt_cutoff=100):
+ if type(event) == dict:
+ k = event[key]
+ else:
+ k = getattr(event, key)
+ pt, eta, phi, m = EventDataset.get_jets_fastjets_raw(k, jetdef, pt_cutoff=pt_cutoff)
+ return EventJets(torch.tensor(pt), torch.tensor(eta), torch.tensor(phi), torch.tensor(m))
+
+ def get_model_jets(self, i, pfcands, filter=True, dq=None, include_target=False):
+ event_filter_s, event_filter_e = self.model_output["event_idx_bounds"][i].int().item(), self.model_output["event_idx_bounds"][i+1].int().item()
+ pfcands_pt = pfcands.pt
+ pfcands_pxyz = pfcands.pxyz
+ pfcands_E = pfcands.E
+ obj_score = None
+ #print("Len pfcands_pt", len(pfcands_pt), "event_filter_e", event_filter_e, "event_filter_s", event_filter_s)
+ if len(pfcands_pt) == 0:
+ return EventJets(torch.tensor([]), torch.tensor([]), torch.tensor([]) ,torch.tensor([])), None, None
+ assert len(pfcands_pt) == event_filter_e - event_filter_s, "Error! filter={} len(pfcands_pt)={} event_filter_e={} event_filter_s={}".format(filter, len(pfcands_pt), event_filter_e, event_filter_s)
+ #jets_pt = scatter_sum(to_tensor(pfcands_pt), self.model_clusters[event_filter] + 1, dim=0)[1:]
+ jets_pxyz = scatter_sum(to_tensor(pfcands_pxyz), self.model_clusters[event_filter_s:event_filter_e] + 1, dim=0)[1:]
+ jets_pt = torch.norm(jets_pxyz[:, :2], p=2, dim=-1)
+ jets_eta, jets_phi = calc_eta_phi(jets_pxyz, False)
+ #jets_mass = torch.zeros_like(jets_eta)
+ jets_E = scatter_sum(to_tensor(pfcands_E), self.model_clusters[event_filter_s:event_filter_e] + 1, dim=0)[1:]
+ jets_mass = torch.sqrt(jets_E**2 - jets_pxyz.norm(dim=-1)**2)
+ cluster_labels = self.model_clusters[event_filter_s:event_filter_e]
+ bc_scores = self.model_output["pred"][event_filter_s:event_filter_e, -1]
+ if "obj_score_pred" in self.model_output and not torch.is_tensor(self.model_output["obj_score_pred"]):
+ self.model_output["obj_score_pred"] = torch.cat(self.model_output["obj_score_pred"])
+ print("Concatenated obj_score_pred")
+ target_obj_score = None
+ if filter:
+ cutoff = self.pt_jet_cutoff
+ mask = jets_pt >= cutoff
+ if "obj_score_pred" in self.model_output:
+ obj_score = self.model_output["obj_score_pred"][(self.model_output["event_clusters_idx"] == i)]
+ #print("Jets pt", jets_pt, "obj score", obj_score)
+ assert len(obj_score) == len(jets_pt), "Error! len(obj_score)=%d, len(jets_pt)=%d" % (
+ len(obj_score), len(jets_pt))
+ if include_target:
+ target_obj_score = EventDataset.get_target_obj_score(jets_eta, jets_phi, jets_pt, torch.zeros(jets_pt.size(0)), dq.eta, dq.phi, torch.zeros(dq.eta.size(0)))
+ else:
+ mask = torch.ones_like(jets_pt, dtype=torch.bool)
+ if obj_score is not None:
+ obj_score = obj_score[mask]
+ assert len(jets_pt[mask]) == len(obj_score), "Error! len(jets_pt[mask])=%d, len(obj_score)=%d" % (len(jets_pt[mask]), len(obj_score))
+ if target_obj_score is not None:
+ target_obj_score = target_obj_score[mask]
+ assert len(jets_pt[mask]) == len(target_obj_score), "Error! len(jets_pt[mask])=%d, len(obj_score)=%d" % (len(jets_pt[mask]), len(obj_score))
+ return EventJets(jets_pt[mask], jets_eta[mask], jets_phi[mask], jets_mass[mask], obj_score=obj_score, target_obj_score=target_obj_score), bc_scores, cluster_labels
+ def get_iter(self):
+ self.i = 0
+ while self.i < self.n_events:
+ yield self.get_idx(self.i)
+ self.i += 1
+ def __iter__(self):
+ return self.get_iter()
+ def __getitem__(self, i):
+ assert i < self.n_events, "Index out of bounds: %d >= %d" % (i, self.n_events)
+ return self.get_idx(i)
+
+
+class SimpleIterDataset(torch.utils.data.IterableDataset):
+ r"""Base IterableDataset.
+ Handles dataloading.
+ Arguments:
+ file_dict (dict): dictionary of lists of files to be loaded.
+ data_config_file (str): YAML file containing data format information.
+ for_training (bool): flag indicating whether the dataset is used for training or testing.
+ When set to ``True``, will enable shuffling and sampling-based reweighting.
+ When set to ``False``, will disable shuffling and reweighting, but will load the observer variables.
+ load_range_and_fraction (tuple of tuples, ``((start_pos, end_pos), load_frac)``): fractional range of events to load from each file.
+ E.g., setting load_range_and_fraction=((0, 0.8), 0.5) will randomly load 50% out of the first 80% events from each file (so load 50%*80% = 40% of the file).
+ fetch_by_files (bool): flag to control how events are retrieved each time we fetch data from disk.
+ When set to ``True``, will read only a small number (set by ``fetch_step``) of files each time, but load all the events in these files.
+ When set to ``False``, will read from all input files, but load only a small fraction (set by ``fetch_step``) of events each time.
+ Default is ``False``, which results in a more uniform sample distribution but reduces the data loading speed.
+ fetch_step (float or int): fraction of events (when ``fetch_by_files=False``) or number of files (when ``fetch_by_files=True``) to load each time we fetch data from disk.
+ Event shuffling and reweighting (sampling) is performed each time after we fetch data.
+ So set this to a large enough value to avoid getting an imbalanced minibatch (due to reweighting/sampling), especially when ``fetch_by_files`` set to ``True``.
+ Will load all events (files) at once if set to non-positive value.
+ file_fraction (float): fraction of files to load.
+ """
+
+ def __init__(
+ self,
+ file_dict,
+ data_config_file,
+ for_training=True,
+ load_range_and_fraction=None,
+ extra_selection=None,
+ fetch_by_files=False,
+ fetch_step=0.01,
+ file_fraction=1,
+ remake_weights=False,
+ up_sample=True,
+ weight_scale=1,
+ max_resample=10,
+ async_load=True,
+ infinity_mode=False,
+ in_memory=False,
+ name="",
+ laplace=False,
+ edges=False,
+ diffs=False,
+ dataset_cap=None,
+ n_noise=0,
+ synthetic=False,
+ synthetic_npart_min=2,
+ synthetic_npart_max=5,
+ jets=False,
+ ):
+ self._iters = {} if infinity_mode or in_memory else None
+ _init_args = set(self.__dict__.keys())
+ self._init_file_dict = file_dict
+ self._init_load_range_and_fraction = load_range_and_fraction
+ self._fetch_by_files = fetch_by_files
+ self._fetch_step = fetch_step
+ self._file_fraction = file_fraction
+ self._async_load = async_load
+ self._infinity_mode = infinity_mode
+ self._in_memory = in_memory
+ self._name = name
+ self.laplace = laplace
+ self.edges = edges
+ self.diffs = diffs
+ self.synthetic = synthetic
+ self.synthetic_npart_min = synthetic_npart_min
+ self.synthetic_npart_max = synthetic_npart_max
+ self.dataset_cap = dataset_cap # used to cap the dataset to some fixed number of events - used for debugging purposes
+ self.n_noise = n_noise
+ self.jets = jets
+ # ==== sampling parameters ====
+ self._sampler_options = {
+ "up_sample": up_sample,
+ "weight_scale": weight_scale,
+ "max_resample": max_resample,
+ }
+
+ if for_training:
+ self._sampler_options.update(training=True, shuffle=False, reweight=True)
+ else:
+ self._sampler_options.update(training=False, shuffle=False, reweight=False)
+
+ # discover auto-generated reweight file
+ if ".auto.yaml" in data_config_file:
+ data_config_autogen_file = data_config_file
+ else:
+ data_config_md5 = _md5(data_config_file)
+ data_config_autogen_file = data_config_file.replace(
+ ".yaml", ".%s.auto.yaml" % data_config_md5
+ )
+ if os.path.exists(data_config_autogen_file):
+ data_config_file = data_config_autogen_file
+ _logger.info(
+ "Found file %s w/ auto-generated preprocessing information, will use that instead!"
+ % data_config_file
+ )
+
+ # load data config (w/ observers now -- so they will be included in the auto-generated yaml)
+ self._data_config = DataConfig.load(data_config_file)
+
+ if for_training:
+ # produce variable standardization info if needed
+ if self._data_config._missing_standardization_info:
+ s = AutoStandardizer(file_dict, self._data_config)
+ self._data_config = s.produce(data_config_autogen_file)
+
+ # produce reweight info if needed
+ # if self._sampler_options['reweight'] and self._data_config.weight_name and not self._data_config.use_precomputed_weights:
+ # if remake_weights or self._data_config.reweight_hists is None:
+ # w = WeightMaker(file_dict, self._data_config)
+ # self._data_config = w.produce(data_config_autogen_file)
+
+ # reload data_config w/o observers for training
+ if (
+ os.path.exists(data_config_autogen_file)
+ and data_config_file != data_config_autogen_file
+ ):
+ data_config_file = data_config_autogen_file
+ _logger.info(
+ "Found file %s w/ auto-generated preprocessing information, will use that instead!"
+ % data_config_file
+ )
+ self._data_config = DataConfig.load(
+ data_config_file, load_observers=False, extra_selection=extra_selection
+ )
+ else:
+ self._data_config = DataConfig.load(
+ data_config_file,
+ load_reweight_info=False,
+ extra_test_selection=extra_selection,
+ )
+
+ # Derive all variables added to self.__dict__
+ self._init_args = set(self.__dict__.keys()) - _init_args
+
+ @property
+ def config(self):
+ return self._data_config
+
+ def __iter__(self):
+ if self._iters is None:
+ kwargs = {k: copy.deepcopy(self.__dict__[k]) for k in self._init_args}
+ return _SimpleIter(**kwargs)
+ else:
+ worker_info = torch.utils.data.get_worker_info()
+ worker_id = worker_info.id if worker_info is not None else 0
+ try:
+ return self._iters[worker_id]
+ except KeyError:
+ kwargs = {k: copy.deepcopy(self.__dict__[k]) for k in self._init_args}
+ self._iters[worker_id] = _SimpleIter(**kwargs)
+ return self._iters[worker_id]
diff --git a/src/dataset/functions_data.py b/src/dataset/functions_data.py
new file mode 100644
index 0000000000000000000000000000000000000000..079f00d3a653a6c7851eb1c9e20de91fe1f692ab
--- /dev/null
+++ b/src/dataset/functions_data.py
@@ -0,0 +1,1087 @@
+import numpy as np
+import torch
+#from torch_scatter import scatter_add, scatter_sum
+
+def get_ratios(e_hits, part_idx, y):
+ """Obtain the percentage of energy of the particle present in the hits
+
+ Args:
+ e_hits (_type_): _description_
+ part_idx (_type_): _description_
+ y (_type_): _description_
+
+ Returns:
+ _type_: _description_
+ """
+ energy_from_showers = scatter_sum(e_hits, part_idx.long(), dim=0)
+ # y_energy = y[:, 3]
+ y_energy = y.E
+ energy_from_showers = energy_from_showers[1:]
+ assert len(energy_from_showers) > 0
+ return (energy_from_showers.flatten() / y_energy).tolist()
+
+
+def get_number_hits(e_hits, part_idx):
+ number_of_hits = scatter_sum(torch.ones_like(e_hits), part_idx.long(), dim=0)
+ return (number_of_hits[1:].flatten()).tolist()
+
+def get_e_reco(e_hits, part_idx):
+ number_of_hits = scatter_sum(e_hits, part_idx.long(), dim=0)
+ return number_of_hits[1:].flatten()
+
+def get_number_of_daughters(hit_type_feature, hit_particle_link, daughters):
+ a = hit_particle_link
+ b = daughters
+ a_u = torch.unique(a)
+ number_of_p = torch.zeros_like(a_u)
+ for p, i in enumerate(a_u):
+ mask2 = a == i
+ number_of_p[p] = torch.sum(torch.unique(b[mask2]) != -1)
+ return number_of_p
+
+
+def find_mask_no_energy(
+ hit_particle_link,
+ hit_type_a,
+ hit_energies,
+ y,
+ daughters,
+ predict=False,
+ is_Ks=False,
+):
+ """This function remove particles with tracks only and remove particles with low fractions
+ # Remove 2212 going to multiple particles without tracks for now
+ # remove particles below energy cut
+ # remove particles that decayed in the tracker
+ # remove particles with two tracks (due to bad tracking)
+ # remove particles with daughters for the moment
+
+ Args:
+ hit_particle_link (_type_): _description_
+ hit_type_a (_type_): _description_
+ hit_energies (_type_): _description_
+ y (_type_): _description_
+
+ Returns:
+ _type_: _description_
+ """
+
+ number_of_daughters = get_number_of_daughters(
+ hit_type_a, hit_particle_link, daughters
+ )
+ list_p = np.unique(hit_particle_link)
+ list_remove = []
+ part_frac = torch.tensor(get_ratios(hit_energies, hit_particle_link, y))
+ number_of_hits = get_number_hits(hit_energies, hit_particle_link)
+ if predict:
+ energy_cut = 0.1
+ filt1 = (torch.where(part_frac >= energy_cut)[0] + 1).long().tolist()
+ else:
+ energy_cut = 0.01
+ filt1 = (torch.where(part_frac >= energy_cut)[0] + 1).long().tolist()
+ number_of_tracks = scatter_add(1 * (hit_type_a == 1), hit_particle_link.long())[1:]
+ if is_Ks == False:
+ for index, p in enumerate(list_p):
+ mask = hit_particle_link == p
+ hit_types = np.unique(hit_type_a[mask])
+
+ if predict:
+ if (
+ np.array_equal(hit_types, [0, 1])
+ or int(p) not in filt1
+ or (number_of_hits[index] < 2)
+ or (y.decayed_in_tracker[index] == 1)
+ or number_of_tracks[index] == 2
+ or number_of_daughters[index] > 1
+ ):
+ list_remove.append(p)
+ else:
+ if (
+ np.array_equal(hit_types, [0, 1])
+ or int(p) not in filt1
+ or (number_of_hits[index] < 2)
+ or number_of_tracks[index] == 2
+ or number_of_daughters[index] > 1
+ ):
+ list_remove.append(p)
+ if len(list_remove) > 0:
+ mask = torch.tensor(np.full((len(hit_particle_link)), False, dtype=bool))
+ for p in list_remove:
+ mask1 = hit_particle_link == p
+ mask = mask1 + mask
+
+ else:
+ mask = np.full((len(hit_particle_link)), False, dtype=bool)
+
+ if len(list_remove) > 0:
+ mask_particles = np.full((len(list_p)), False, dtype=bool)
+ for p in list_remove:
+ mask_particles1 = list_p == p
+ mask_particles = mask_particles1 + mask_particles
+
+ else:
+ mask_particles = np.full((len(list_p)), False, dtype=bool)
+ return mask, mask_particles
+
+
+class CachedIndexList:
+ def __init__(self, lst):
+ self.lst = lst
+ self.cache = {}
+
+ def index(self, value):
+ if value in self.cache:
+ return self.cache[value]
+ else:
+ idx = self.lst.index(value)
+ self.cache[value] = idx
+ return idx
+
+
+def find_cluster_id(hit_particle_link):
+ unique_list_particles = list(np.unique(hit_particle_link))
+
+ if np.sum(np.array(unique_list_particles) == -1) > 0:
+ non_noise_idx = torch.where(hit_particle_link != -1)[0] #
+ noise_idx = torch.where(hit_particle_link == -1)[0] #
+ unique_list_particles1 = torch.unique(hit_particle_link)[1:]
+ cluster_id_ = torch.searchsorted(
+ unique_list_particles1, hit_particle_link[non_noise_idx], right=False
+ )
+ cluster_id_small = 1.0 * cluster_id_ + 1
+ cluster_id = hit_particle_link.clone()
+ cluster_id[non_noise_idx] = cluster_id_small
+ cluster_id[noise_idx] = 0
+ else:
+ c_unique_list_particles = CachedIndexList(unique_list_particles)
+ cluster_id = map(
+ lambda x: c_unique_list_particles.index(x), hit_particle_link.tolist()
+ )
+ cluster_id = torch.Tensor(list(cluster_id)) + 1
+ return cluster_id, unique_list_particles
+
+
+def scatter_count(input: torch.Tensor):
+ return scatter_add(torch.ones_like(input, dtype=torch.long), input.long())
+
+
+def get_particle_features(unique_list_particles, output, prediction, connection_list):
+ unique_list_particles = torch.Tensor(unique_list_particles).to(torch.int64)
+ if prediction:
+ number_particle_features = 12 - 2
+ else:
+ number_particle_features = 9 - 2
+ if output["pf_features"].shape[0] == 18:
+ number_particle_features += 8 # add vertex information
+ features_particles = torch.permute(
+ torch.tensor(
+ output["pf_features"][
+ 2:number_particle_features, list(unique_list_particles)
+ ]
+ ),
+ (1, 0),
+ ) #
+ # particle_coord are just features 10, 11, 12
+ if features_particles.shape[1] == 16: # Using config with part_pxyz and part_vertex_xyz
+ #print("Using config with part_pxyz and part_vertex_xyz")
+ particle_coord = features_particles[:, 10:13]
+ vertex_coord = features_particles[:, 13:16]
+ # normalize particle coords
+ particle_coord = particle_coord# / np.linalg.norm(particle_coord, axis=1).reshape(-1, 1) # DO NOT NORMALIZE
+ #particle_coord, spherical_to_cartesian(
+ # features_particles[:, 1],
+ # features_particles[:, 0], # theta and phi are mixed!!!
+ # features_particles[:, 2],
+ # normalized=True,
+ #)
+ else:
+ particle_coord = spherical_to_cartesian(
+ features_particles[:, 1],
+ features_particles[:, 0], # theta and phi are mixed!!!
+ features_particles[:, 2],
+ normalized=True,
+ )
+ vertex_coord = torch.zeros_like(particle_coord)
+ y_mass = features_particles[:, 3].view(-1).unsqueeze(1)
+ y_mom = features_particles[:, 2].view(-1).unsqueeze(1)
+ y_energy = torch.sqrt(y_mass**2 + y_mom**2)
+ y_pid = features_particles[:, 4].view(-1).unsqueeze(1)
+ if prediction:
+ y_data_graph = Particles_GT(
+ particle_coord,
+ y_energy,
+ y_mom,
+ y_mass,
+ y_pid,
+ features_particles[:, 5].view(-1).unsqueeze(1),
+ features_particles[:, 6].view(-1).unsqueeze(1),
+ unique_list_particles=unique_list_particles,
+ vertex=vertex_coord,
+ )
+ else:
+ y_data_graph = Particles_GT(
+ particle_coord,
+ y_energy,
+ y_mom,
+ y_mass,
+ y_pid,
+ unique_list_particles=unique_list_particles,
+ vertex=vertex_coord,
+ )
+ return y_data_graph
+
+
+def modify_index_link_for_gamma_e(
+ hit_type_feature, hit_particle_link, daughters, output, number_part, is_Ks=False
+):
+ """Split all particles that have daughters, mostly for brems and conversions but also for protons and neutrons
+
+ Returns:
+ hit_particle_link: new link
+ hit_link_modified: bool for modified hits
+ """
+ hit_link_modified = torch.zeros_like(hit_particle_link).to(hit_particle_link.device)
+ mask = hit_type_feature > 1
+ a = hit_particle_link[mask]
+ b = daughters[mask]
+ a_u = torch.unique(a)
+ number_of_p = torch.zeros_like(a_u)
+ connections_list = []
+ for p, i in enumerate(a_u):
+ mask2 = a == i
+ list_of_daugthers = torch.unique(b[mask2])
+ number_of_p[p] = len(list_of_daugthers)
+ if (number_of_p[p] > 1) and (torch.sum(list_of_daugthers == i) > 0):
+ connections_list.append([i, torch.unique(b[mask2])])
+ pid_particles = torch.tensor(output["pf_features"][6, 0:number_part])
+ electron_photon_mask = (torch.abs(pid_particles[a_u.long()]) == 11) + (
+ pid_particles[a_u.long()] == 22
+ )
+ electron_photon_mask = (
+ electron_photon_mask * number_of_p > 1
+ ) # electron_photon_mask *
+ if is_Ks:
+ index_change = a_u # [electron_photon_mask]
+ else:
+ index_change = a_u[electron_photon_mask]
+ for i in index_change:
+ mask_n = mask * (hit_particle_link == i)
+ hit_particle_link[mask_n] = daughters[mask_n]
+ hit_link_modified[mask_n] = 1
+ return hit_particle_link, hit_link_modified, connections_list
+
+
+def get_hit_features(
+ output, number_hits, prediction, number_part, hit_chis, pos_pxpy, is_Ks=False
+):
+
+ hit_particle_link = torch.tensor(output["pf_vectoronly"][0, 0:number_hits])
+ if prediction:
+ indx_daugthers = 3
+ else:
+ indx_daugthers = 1
+ daughters = torch.tensor(output["pf_vectoronly"][indx_daugthers, 0:number_hits])
+ if prediction:
+ pandora_cluster = torch.tensor(output["pf_vectoronly"][1, 0:number_hits])
+ pandora_pfo_link = torch.tensor(output["pf_vectoronly"][2, 0:number_hits])
+ if is_Ks:
+ pandora_mom = torch.permute(
+ torch.tensor(output["pf_points_pfo"][0:3, 0:number_hits]), (1, 0)
+ )
+ pandora_ref_point = torch.permute(
+ torch.tensor(output["pf_points_pfo"][3:6, 0:number_hits]), (1, 0)
+ )
+ if output["pf_points_pfo"].shape[0] > 6:
+ pandora_pid = torch.tensor(output["pf_points_pfo"][6, 0:number_hits])
+ else:
+ # zeros
+ # print("Zeros for pandora pid!")
+ pandora_pid=torch.zeros(number_hits)
+
+ else:
+ pandora_mom = None
+ pandora_ref_point = None
+ pandora_pid = None
+ if is_Ks:
+ pandora_cluster_energy = torch.tensor(
+ output["pf_features"][9, 0:number_hits]
+ )
+ pfo_energy = torch.tensor(output["pf_features"][10, 0:number_hits])
+ chi_squared_tracks = torch.tensor(output["pf_features"][11, 0:number_hits])
+ elif hit_chis:
+ pandora_cluster_energy = torch.tensor(
+ output["pf_features"][-3, 0:number_hits]
+ )
+ pfo_energy = torch.tensor(output["pf_features"][-2, 0:number_hits])
+ chi_squared_tracks = torch.tensor(output["pf_features"][-1, 0:number_hits])
+ else:
+ pandora_cluster_energy = torch.tensor(
+ output["pf_features"][-2, 0:number_hits]
+ )
+ pfo_energy = torch.tensor(output["pf_features"][-1, 0:number_hits])
+ chi_squared_tracks = None
+
+ else:
+ pandora_cluster = None
+ pandora_pfo_link = None
+ pandora_cluster_energy = None
+ pfo_energy = None
+ chi_squared_tracks = None
+ pandora_mom = None
+ pandora_ref_point = None
+ pandora_pid = None
+ # hit type
+ hit_type_feature = torch.permute(
+ torch.tensor(output["pf_vectors"][:, 0:number_hits]), (1, 0)
+ )[:, 0].to(torch.int64)
+
+ (
+ hit_particle_link,
+ hit_link_modified,
+ connection_list,
+ ) = modify_index_link_for_gamma_e(
+ hit_type_feature, hit_particle_link, daughters, output, number_part, is_Ks
+ )
+
+ cluster_id, unique_list_particles = find_cluster_id(hit_particle_link)
+
+ # position, e, p
+ pos_xyz_hits = torch.permute(
+ torch.tensor(output["pf_points"][0:3, 0:number_hits]), (1, 0)
+ )
+ pf_features_hits = torch.permute(
+ torch.tensor(output["pf_features"][0:2, 0:number_hits]), (1, 0)
+ ) # removed theta, phi
+ p_hits = pf_features_hits[:, 0].unsqueeze(1)
+ p_hits[p_hits == -1] = 0 # correct p of Hcal hits to be 0
+ e_hits = pf_features_hits[:, 1].unsqueeze(1)
+ e_hits[e_hits == -1] = 0 # correct the energy of the tracks to be 0
+ if pos_pxpy:
+ pos_pxpypz = torch.permute(
+ torch.tensor(output["pf_points"][3:, 0:number_hits]), (1, 0)
+ )
+ else:
+ pos_pxpypz = pos_xyz_hits
+ # pos_pxpypz = pos_theta_phi
+
+ return (
+ pos_xyz_hits,
+ pos_pxpypz,
+ p_hits,
+ e_hits,
+ hit_particle_link,
+ pandora_cluster,
+ pandora_cluster_energy,
+ pfo_energy,
+ pandora_mom,
+ pandora_ref_point,
+ pandora_pid,
+ unique_list_particles,
+ cluster_id,
+ hit_type_feature,
+ pandora_pfo_link,
+ daughters,
+ hit_link_modified,
+ connection_list,
+ chi_squared_tracks,
+ )
+
+
+def standardize_coordinates(coord_cart_hits):
+ if len(coord_cart_hits) == 0:
+ return coord_cart_hits, None
+ std_scaler = StandardScaler()
+ coord_cart_hits = std_scaler.fit_transform(coord_cart_hits)
+ return torch.tensor(coord_cart_hits).float(), std_scaler
+
+
+def create_dif_interactions(i, j, pos, number_p):
+ x_interactions = pos
+ x_interactions = torch.reshape(x_interactions, [number_p, 1, 2])
+ x_interactions = x_interactions.repeat(1, number_p, 1)
+ xi = x_interactions[i, j, :]
+ xj = x_interactions[j, i, :]
+ x_interactions_m = xi - xj
+ return x_interactions_m
+
+
+def spherical_to_cartesian(phi, theta, r, normalized=False):
+ if normalized:
+ r = torch.ones_like(phi)
+ x = r * torch.sin(theta) * torch.cos(phi)
+ y = r * torch.sin(theta) * torch.sin(phi)
+ z = r * torch.cos(theta)
+ return torch.cat((x.unsqueeze(1), y.unsqueeze(1), z.unsqueeze(1)), dim=1)
+
+
+def calculate_distance_to_boundary(g):
+ r = 2150
+ r_in_endcap = 2307
+ mask_endcap = (torch.abs(g.ndata["pos_hits_xyz"][:, 2]) - r_in_endcap) > 0
+ mask_barrer = ~mask_endcap
+ weight = torch.ones_like(g.ndata["pos_hits_xyz"][:, 0])
+ C = g.ndata["pos_hits_xyz"]
+ A = torch.Tensor([0, 0, 1]).to(C.device)
+ P = (
+ r
+ * 1
+ / (torch.norm(torch.cross(A.view(1, -1), C, dim=-1), dim=1)).unsqueeze(1)
+ * C
+ )
+ P1 = torch.abs(r_in_endcap / g.ndata["pos_hits_xyz"][:, 2].unsqueeze(1)) * C
+ weight[mask_barrer] = torch.norm(P - C, dim=1)[mask_barrer]
+ weight[mask_endcap] = torch.norm(P1[mask_endcap] - C[mask_endcap], dim=1)
+ g.ndata["radial_distance"] = weight
+ weight_ = torch.exp(-(weight / 1000))
+ g.ndata["radial_distance_exp"] = weight_
+ return g
+
+class EventCollection:
+ def mask(self, mask):
+ for k in self.__dict__:
+ if getattr(self, k) is not None:
+ if type(getattr(self, k)) == list:
+ if getattr(self, k)[0] is not None:
+ setattr(self, k, getattr(self, k)[mask])
+ elif not type(getattr(self, k)) == dict:
+ setattr(self, k, getattr(self, k)[mask])
+ else:
+ raise NotImplementedError("Need to implement correct indexing")
+ # TODO: for the mapping pfcands_idx to jet_idx
+
+ def copy(self):
+ obj = type(self).__new__(self.__class__)
+ obj.__dict__.update(self.__dict__)
+ return obj
+
+ def serialize(self):
+ # get all the self.init_attrs and concat them together. Also return batch_number
+ res = []
+ for attr in self.init_attrs:
+ if attr == "status" and not hasattr(self, attr):
+ continue
+ res.append(getattr(self, attr))
+ data = torch.stack(res).T
+ #data = torch.stack([getattr(self, attr) for attr in self.init_attrs]).T
+ assert data.shape[0] == self.batch_number.max().item()
+ return data, self.batch_number
+
+ def __getitem__(self, i):
+ data = {}
+ s, e = self.batch_number[i], self.batch_number[i + 1]
+ for attr in type(self).init_attrs:
+ if attr == "status" and not hasattr(self, attr):
+ continue
+ data[attr] = getattr(self, attr)[s:e]
+ return type(self)(**data)
+
+ @staticmethod
+ def deserialize(data_matrix, batch_number, cls):
+ data = {}
+ filt = None
+ for i, key in enumerate(cls.init_attrs):
+ if i >= data_matrix.shape[1]:
+ break # For some PFCands, 'status' is not populated
+ data[key] = data_matrix[:, i]
+ #if key == "pid" and pid_filter:
+ # filt = ~np.bool(np.abs(data[key]) >= 10000 + (np.abs(data[key]) >= 50 * np.abs(data[key]) <= 60))
+ return cls(**data, batch_number=batch_number)
+
+
+def concat_event_collection(list_event_collection, nobatch=False):
+ c = list_event_collection[0]
+ list_of_attrs = c.init_attrs
+ #for k in c.__dict__:
+ # if getattr(c, k) is not None:
+ # if isinstance(getattr(c, k), torch.Tensor):
+ # list_of_attrs.append(k)
+ result = {}
+ for attr in list_of_attrs:
+ if hasattr(c, attr):
+ result[attr] = torch.cat([getattr(c, attr) for c in list_event_collection], dim=0)
+ if hasattr(c, "original_particle_mapping") and c.original_particle_mapping is not None:
+ result["original_particle_mapping"] = torch.cat([c.original_particle_mapping for c in list_event_collection], dim=0)
+ if not nobatch:
+ batch_number, to_add_idx = add_batch_number(list_event_collection, attr=list_of_attrs[0])
+ #if hasattr(c, "original_particle_mapping") and c.original_particle_mapping is not None:
+ # #filt = result["original_particle_mapping"] != -1
+ # #result["original_particle_mapping"][filt] += to_add_idx[filt]
+ return type(c)(**result, batch_number=batch_number)
+ else:
+ return type(c)(**result)
+
+def concat_events(list_events):
+ attrs = list_events[0].init_attrs
+ result = {}
+ for attr in attrs:
+ result[attr] = concat_event_collection([getattr(e, attr) for e in list_events])
+ # assert result[attr].batch_number.max() == len(list_events)# sometimes the event is empty (e.g. no found jets)
+ return Event(**result, n_events=len(list_events))
+
+def renumber_clusters(tensor):
+ unique = tensor.unique()
+ mapping = torch.zeros(unique.max().int().item() + 1)
+ for i, u in enumerate(unique):
+ mapping[u] = i
+ return mapping[tensor]
+
+class TensorCollection:
+ def __init__(self, **kwargs):
+ self.__dict__.update(kwargs)
+ def to(self, device):
+ # Move all tensors to device
+ for k, v in self.__dict__.items():
+ if torch.is_tensor(v):
+ setattr(self, k, v.to(device))
+ return self
+ def dict_rep(self):
+ d = {}
+ for k, v in self.__dict__.items():
+ if torch.is_tensor(v):
+ d[k] = v
+ return d
+ #def __getitem__(self, i):
+ # return TensorCollection(**{k: v[i] for k, v in self.__dict__.items()})
+
+
+def get_corrected_batch(event_batch, cluster_idx, test):
+ # return a batch with fake nodes in it (as .fake_nodes_idx property) and cluster_idx should be set to -1 for the nodes that don't belong anywhere
+ # cluster_idx should be a tensor of the same length as the input vectors
+ clusters = torch.where(torch.tensor(cluster_idx) != -1)[0]
+ new_batch_idx = torch.tensor(cluster_idx[clusters])
+ # for each cluster, add a fake node that has zeros for vectors, scalars and pt
+ batch_idx_fake_nodes = torch.sort(new_batch_idx.unique())[0]
+ vectors_fake_nodes = torch.zeros(len(batch_idx_fake_nodes), event_batch.input_vectors.shape[1])
+ vectors_fake_nodes = vectors_fake_nodes.to(event_batch.input_vectors.device)
+ scalars_fake_nodes = torch.zeros(len(batch_idx_fake_nodes), event_batch.input_scalars.shape[1])
+ scalars_fake_nodes = scalars_fake_nodes.to(event_batch.input_scalars.device)
+ pt_fake_nodes = torch.zeros(len(batch_idx_fake_nodes))
+ pt_fake_nodes = pt_fake_nodes.to(event_batch.pt.device)
+ #event_batch.input_vectors[clusters]
+ #event_batch.input_scalars[clusters]
+ #event_batch.pt[clusters]
+ #
+ input_vectors = torch.cat([event_batch.input_vectors[clusters], vectors_fake_nodes], dim=0)
+ input_scalars = torch.cat([event_batch.input_scalars[clusters], scalars_fake_nodes], dim=0)
+ pt = torch.cat([event_batch.pt[clusters], pt_fake_nodes], dim=0)
+ batch_idx = torch.cat([new_batch_idx, batch_idx_fake_nodes], dim=0)
+ batch_sort_idx = torch.argsort(batch_idx) # the models need batch idx in ascending order in order to correctly construct the attention mask
+ #return EventBatch(
+ # input_vectors=input_vectors[batch_sort_idx],
+ # input_scalars=input_scalars[batch_sort_idx],
+ # pt=pt[batch_sort_idx],
+ # batch_idx=batch_idx[batch_sort_idx],
+ # fake_nodes_idx=batch_idx_fake_nodes + len(new_batch_idx),
+ #)
+ #For returning without the fake nodes (!!!!!)
+ #print("New batch idx", renumber_clusters(new_batch_idx))
+ return EventBatch(
+ input_vectors=event_batch.input_vectors[clusters],
+ input_scalars=event_batch.input_scalars[clusters],
+ pt=event_batch.pt[clusters],
+ batch_idx=new_batch_idx,
+ renumber_clusters=not test
+ )
+
+def get_batch(event, batch_config, y, test=False, external_batch_filter=None):
+ # Returns the EventBatch class, with correct scalars etc.
+ # If test=True, it will put all events in the batch, i.e. no filtering of the events without signal.
+ pfcands = event.pfcands
+ if batch_config.get("parton_level", False):
+ pfcands = event.final_parton_level_particles
+ if batch_config.get("gen_level", False):
+ pfcands = event.final_gen_particles
+ batch_idx_pfcands = torch.zeros(len(pfcands)).long()
+ #batch_idx_special_pfcands = torch.zeros(len(event.special_pfcands)).long()
+ for i in range(len(pfcands.batch_number) - 1):
+ batch_idx_pfcands[pfcands.batch_number[i]:pfcands.batch_number[i+1]] = i
+ batch_filter = []
+ if batch_config.get("quark_dist_loss", False):
+ lbl = y.labels
+ elif batch_config.get("obj_score", False):
+ lbl = y.labels
+ dq_coords = y.dq_coords
+ dq_coords_batch_idx = y.dq_coords_batch_idx
+ else:
+ lbl = y
+ if not (test or batch_config.get("quark_dist_loss", False)): # dont filter for quark distance loss
+ for i in batch_idx_pfcands.unique().tolist():
+ if (lbl[batch_idx_pfcands == i] == -1).all():
+ batch_filter.append(i)
+ #for i in range(len(event.special_pfcands.batch_number) - 1):
+ # batch_idx_special_pfcands[event.special_pfcands.batch_number[i]:event.special_pfcands.batch_number[i+1]] = i
+ #batch_idx = torch.cat([batch_idx_pfcands, batch_idx_special_pfcands])
+ batch_idx = batch_idx_pfcands
+ batch_idx = batch_idx.to(pfcands.pt.device)
+ if batch_config.get("use_p_xyz", False):
+ #batch_vectors = torch.cat([event.pfcands.pxyz, event.special_pfcands.pxyz], dim=0)
+ batch_vectors = pfcands.pxyz
+ elif batch_config.get("use_four_momenta", False):
+ batch_vectors = torch.cat([pfcands.E.unsqueeze(-1), pfcands.pxyz], dim=1)
+ assert batch_vectors.shape[0] == pfcands.E.shape[0]
+ else:
+ raise NotImplementedError
+ chg = pfcands.charge.unsqueeze(1)
+ if batch_config.get("no_pid", False):
+ batch_scalars_pfcands = chg
+ else:
+ pids = batch_config.get("pids", [11, 13, 22, 130, 211, 0, 1, 2, 3]) # 0, 1, 2, 3 are the special PFcands
+ # onehot encode pids of event.pfcands.pid
+ pids_onehot = torch.zeros(len(pfcands), len(pids))
+ for i in pfcands.pid:
+ if abs(i).item() not in pids:
+ print(i, "not in", pids)
+ raise Exception
+ for i, pid in enumerate(pids):
+ pids_onehot[:, i] = (pfcands.pid.abs() == pid).float()
+ assert (pids_onehot.sum(dim=1) == 1).all()
+ batch_scalars_pfcands = torch.cat([chg, pids_onehot], dim=1)
+ #if batch_config.get("use_p_xyz", False):
+ # # also add pt as a scalar
+ batch_scalars_pfcands = torch.cat([batch_scalars_pfcands, pfcands.pt.unsqueeze(1), pfcands.E.unsqueeze(1)], dim=1)
+ #pids_onehot_special_pfcands = torch.zeros(len(event.special_pfcands), len(pids))
+ #for i, pid in enumerate(pids):
+ # pids_onehot_special_pfcands[:, i] = (event.special_pfcands.pid.abs() == pid).float()
+ #assert (pids_onehot_special_pfcands.sum(dim=1) == 1).all()
+ #batch_scalars_special_pfcands =event.special_pfcands.charge.unsqueeze(1) #torch.cat([event.special_pfcands.charge.unsqueeze(1), pids_onehot_special_pfcands], dim=1)
+ batch_scalars = batch_scalars_pfcands # torch.cat([batch_scalars_pfcands, batch_scalars_special_pfcands], dim=0)
+ if batch_idx.max() != event.n_events - 1:
+ print("Error!!")
+ print("Batch idx", batch_idx.max(), batch_idx.tolist())
+ print("N events", event.n_events)
+ print("Batch number:", pfcands.batch_number)
+ #assert batch_idx.max() == event.n_events - 1
+ filt = ~torch.isin(batch_idx_pfcands, torch.tensor(batch_filter))
+ if batch_config.get("obj_score", False):
+ filt_dq = ~torch.isin(dq_coords_batch_idx, torch.tensor(batch_filter))
+ dropped_batches = batch_idx[~filt].unique()
+ #if (~filt).sum() > 0:
+ # #print("Found events with no signal!!! Dropping it in training", (~filt).sum() / len(filt), batch_filter)
+ # #print("Renumbered", renumber_clusters(batch_idx[filt]).unique())
+ # #print("Original", batch_idx[filt].unique())
+ # #print("ALL", batch_idx.unique())
+ if batch_config.get("quark_dist_loss", False):
+ y_filt = y
+ elif batch_config.get("obj_score", False):
+ #print(dq_coords[0].shape, filt_dq.shape, lbl.shape, filt.shape, dq_coords[1].shape)
+ #print(dq_coords_batch_idx[filt_dq])
+ y_filt = TensorCollection(labels=lbl[filt], dq_eta=dq_coords[0][filt_dq], dq_phi=dq_coords[1][filt_dq],
+ dq_coords_batch_idx=renumber_clusters(dq_coords_batch_idx[filt_dq].int()))
+ else:
+ y_filt = y[filt]
+ #print("Filtering y!" , len(y[filt]), len(batch_vectors[filt]))
+ print("------- Dropped batches:", dropped_batches)
+ if pfcands.original_particle_mapping is not None:
+ opm = pfcands.original_particle_mapping[filt]
+ else: opm = None
+ return EventBatch(
+ input_vectors=batch_vectors[filt],
+ input_scalars=batch_scalars[filt],
+ batch_idx=batch_idx[filt],
+ pt=pfcands.pt[filt],
+ filter=filt,
+ dropped_batches=dropped_batches,
+ renumber=not test,
+ original_particle_mapping=opm
+ ), y_filt
+
+
+def to_tensor(item):
+ if isinstance(item, torch.Tensor):
+ # if it's float, change to double
+ if item.dtype == torch.float32:
+ return item.double()
+ return item
+ item = torch.tensor(item)
+ if item.dtype == torch.float32:
+ return item.double()
+ return item
+
+class EventPFCands(EventCollection):
+ init_attrs = ["pt", "eta", "phi", "mass", "charge", "pid", "pf_cand_jet_idx", "status"]
+ def __init__(
+ self,
+ pt,
+ eta,
+ phi,
+ mass,
+ charge,
+ pid,
+ jet_idx=None,
+ pfcands_idx=None,
+ batch_number=None,
+ offline=False,
+ pf_cand_jet_idx=None, # Optional: provide either this or pfcands_idx & jet_idx
+ status=None, # optional
+ pid_filter=True, # if true, remove invisible GenParticles (abs(pid) > 10000 or (pid >= 50 and pid <= 60)
+ original_particle_mapping=None
+ ):
+ #print("Jet idx:", jet_idx)
+ #print("PFCands_idx:", pfcands_idx)
+ self.pt = to_tensor(pt)
+ self.eta = to_tensor(eta)
+ self.theta = 2 * torch.atan(torch.exp(-self.eta))
+ self.p = self.pt / torch.sin(self.theta)
+ self.phi = to_tensor(phi)
+ self.pxyz = torch.stack(
+ (self.p * torch.cos(self.phi) * torch.sin(self.theta),
+ self.p * torch.sin(self.phi) * torch.sin(self.theta),
+ self.p * torch.cos(self.theta)),
+ dim=1
+ )
+ #assert (torch.abs(torch.norm(self.pxyz, dim=1) - self.p) < 0.1).all(), (torch.abs(torch.norm(self.pxyz, dim=1) - self.p).max())
+ if not (torch.abs(torch.norm(self.pxyz, dim=1) - self.p) < 0.05).all():
+ print("!!!!!", (torch.abs(torch.norm(self.pxyz, dim=1) - self.p)).max())
+ # argmax
+ am = torch.argmax(torch.abs(torch.norm(self.pxyz, dim=1) - self.p))
+ print("pt", self.pt[am], "eta", self.eta[am], "phi", self.phi[am], "mass", mass[am], "batch_number", batch_number)
+ #print("pt", self.pt, "eta", self.eta, "phi", self.phi, "mass", mass, "batch_number", batch_number)
+
+ self.mass = to_tensor(mass)
+ self.E = torch.sqrt(self.mass ** 2 + self.p ** 2)
+ self.charge = to_tensor(charge)
+ self.pid = to_tensor(pid)
+ if original_particle_mapping is not None:
+ self.original_particle_mapping = to_tensor(original_particle_mapping)
+ else:
+ self.original_particle_mapping = original_particle_mapping
+ if status is not None:
+ self.status = to_tensor(status)
+ #self.init_attrs.append("status")
+ if pf_cand_jet_idx is not None:
+ self.pf_cand_jet_idx = to_tensor(pf_cand_jet_idx)
+ else:
+ self.pf_cand_jet_idx = torch.ones(len(self.pt)).int() * -1
+ for i, pfcand_idx in enumerate(pfcands_idx):
+ if int(pfcand_idx) >= len(self.pt):
+ print("Out of bounds")
+ if not offline:
+ raise Exception
+ else:
+ self.pf_cand_jet_idx[int(pfcand_idx)] = int(jet_idx[i])
+ if batch_number is not None:
+ self.batch_number = batch_number
+ def __len__(self):
+ return len(self.pt)
+
+class EventMetadataAndMET(EventCollection):
+ # Extra info belonging to the event: MET, trigger info etc.
+ init_attrs = ["pt", "phi", "scouting_trig", "offline_trig", "veto_trig"]
+ def __init__(self, pt, phi, scouting_trig, offline_trig, veto_trig, batch_number=None):
+
+ self.pt = to_tensor(pt)
+ self.phi = to_tensor(phi)
+ self.scouting_trig = to_tensor(scouting_trig)
+ self.offline_trig = to_tensor(offline_trig)
+ self.veto_trig = to_tensor(veto_trig)
+ if batch_number is not None:
+ self.batch_number = to_tensor(batch_number)
+ def __len__(self):
+ return len(self.pt)
+
+class EventJets(EventCollection):
+ init_attrs = ["pt", "eta", "phi", "mass"]
+ def __init__(
+ self,
+ pt,
+ eta,
+ phi,
+ mass,
+ area=None,
+ obj_score=None,
+ target_obj_score=None,
+ batch_number=None
+ ):
+ self.pt = to_tensor(pt)
+ self.eta = to_tensor(eta)
+ self.theta = 2 * torch.atan(torch.exp(-self.eta))
+ self.p = pt / torch.sin(self.theta)
+ self.phi = to_tensor(phi)
+ self.pxyz = torch.stack(
+ (self.p * torch.cos(self.phi) * torch.sin(self.theta),
+ self.p * torch.sin(self.phi) * torch.sin(self.theta),
+ self.p * torch.cos(self.theta)),
+ dim=1
+ )
+ if obj_score is not None:
+ self.obj_score = to_tensor(obj_score)
+ if target_obj_score is not None:
+ self.target_obj_score = to_tensor(target_obj_score)
+ tst = torch.abs(torch.norm(self.pxyz, dim=1) - self.p)
+ #if not (tst[~torch.isnan(tst)] < 1e-2).all():
+ # print("!!!!!", (torch.abs(torch.norm(self.pxyz, dim=1) - self.p)).max())
+ # print("pt", self.pt, "eta", self.eta, "phi", self.phi, "mass", mass, "batch_number", batch_number)
+ # assert False
+ self.mass = to_tensor(mass)
+ self.area = area
+ self.E = torch.sqrt(self.mass ** 2 + self.p ** 2)
+
+ if self.area is not None:
+ self.area = to_tensor(self.area)
+ if batch_number is not None:
+ self.batch_number = to_tensor(batch_number)
+
+ def __len__(self):
+ return len(self.pt)
+
+class Particles_GT:
+ def __init__(
+ self,
+ coordinates,
+ energy,
+ momentum,
+ mass,
+ pid,
+ decayed_in_calo=None,
+ decayed_in_tracker=None,
+ batch_number=None,
+ unique_list_particles=None,
+ energy_corrected=None,
+ vertex=None,
+ ):
+ self.coord = coordinates
+ self.E = energy
+ self.E_corrected = energy
+ if energy_corrected is not None:
+ self.E_corrected = energy_corrected
+ assert len(coordinates) == len(energy)
+ self.m = momentum
+ self.mass = mass
+ self.pid = pid
+ self.vertex = vertex
+ if unique_list_particles is not None:
+ self.unique_list_particles = unique_list_particles
+ if decayed_in_calo is not None:
+ self.decayed_in_calo = decayed_in_calo
+ if decayed_in_tracker is not None:
+ self.decayed_in_tracker = decayed_in_tracker
+ if batch_number is not None:
+ self.batch_number = batch_number
+
+ def __len__(self):
+ return len(self.E)
+
+ def mask(self, mask):
+ for k in self.__dict__:
+ if getattr(self, k) is not None:
+ if type(getattr(self, k)) == list:
+ if getattr(self, k)[0] is not None:
+ setattr(self, k, getattr(self, k)[mask])
+ else:
+ setattr(self, k, getattr(self, k)[mask])
+
+ def copy(self):
+ obj = type(self).__new__(self.__class__)
+ obj.__dict__.update(self.__dict__)
+ return obj
+
+ def calculate_corrected_E(self, g, connections_list):
+ for element in connections_list:
+ # checked there is track
+ parent_particle = element[0]
+ mask_i = g.ndata["particle_number_nomap"] == parent_particle
+ track_number = torch.sum(g.ndata["hit_type"][mask_i] == 1)
+ if track_number > 0:
+ # find index in list
+ index_parent = torch.argmax(
+ 1 * (self.unique_list_particles == parent_particle)
+ )
+ energy_daugthers = 0
+ for daugther in element[1]:
+ if daugther != parent_particle:
+ if torch.sum(self.unique_list_particles == daugther) > 0:
+ index_daugthers = torch.argmax(
+ 1 * (self.unique_list_particles == daugther)
+ )
+ energy_daugthers = (
+ self.E[index_daugthers] + energy_daugthers
+ )
+ self.E_corrected[index_parent] = (
+ self.E_corrected[index_parent] - energy_daugthers
+ )
+ self.coord[index_parent] *= (1 - energy_daugthers / torch.norm(self.coord[index_parent]))
+
+def concatenate_Particles_GT(list_of_Particles_GT):
+ list_coord = [p[1].coord for p in list_of_Particles_GT]
+ list_vertex = [p[1].vertex for p in list_of_Particles_GT]
+ list_coord = torch.cat(list_coord, dim=0)
+ list_E = [p[1].E for p in list_of_Particles_GT]
+ list_E = torch.cat(list_E, dim=0)
+ list_E_corr = [p[1].E_corrected for p in list_of_Particles_GT]
+ list_E_corr = torch.cat(list_E_corr, dim=0)
+ list_m = [p[1].m for p in list_of_Particles_GT]
+ list_m = torch.cat(list_m, dim=0)
+ list_mass = [p[1].mass for p in list_of_Particles_GT]
+ list_mass = torch.cat(list_mass, dim=0)
+ list_pid = [p[1].pid for p in list_of_Particles_GT]
+ list_pid = torch.cat(list_pid, dim=0)
+ if list_vertex[0] is not None:
+ list_vertex = torch.cat(list_vertex, dim=0)
+ if hasattr(list_of_Particles_GT[0], "decayed_in_calo"):
+ list_dec_calo = [p[1].decayed_in_calo for p in list_of_Particles_GT]
+ list_dec_track = [p[1].decayed_in_tracker for p in list_of_Particles_GT]
+ list_dec_calo = torch.cat(list_dec_calo, dim=0)
+ list_dec_track = torch.cat(list_dec_track, dim=0)
+ else:
+ list_dec_calo = None
+ list_dec_track = None
+ batch_number = add_batch_number(list_of_Particles_GT)
+ return Particles_GT(
+ list_coord,
+ list_E,
+ list_m,
+ list_mass,
+ list_pid,
+ list_dec_calo,
+ list_dec_track,
+ batch_number,
+ energy_corrected=list_E_corr,
+ vertex=list_vertex,
+ )
+
+def add_batch_number(list_event_collections, attr):
+ list_y = []
+ list_y_to_add = [] # Computes a list of numbers to add to the original_particle_idx or similar fields
+ idx = 0
+ list_y.append(idx)
+ for i, el in enumerate(list_event_collections):
+ num_in_batch = el.__dict__[attr].shape[0]
+ list_y.append(idx + num_in_batch)
+ list_y_to_add += [idx] * num_in_batch
+ idx += num_in_batch
+ list_y = torch.tensor(list_y)
+ return list_y, torch.tensor(list_y_to_add)
+
+def create_noise_label(hit_energies, hit_particle_link, y, cluster_id):
+ unique_p_numbers = torch.unique(cluster_id)
+ number_of_hits = get_number_hits(hit_energies, cluster_id)
+ e_reco = get_e_reco(hit_energies, cluster_id)
+ mask_hits = to_tensor(number_of_hits) < 6
+ mask_p = e_reco<0.10
+ mask_all = mask_hits.view(-1) + mask_p.view(-1)
+ list_remove = unique_p_numbers[mask_all.view(-1)]
+
+ if len(list_remove) > 0:
+ mask = to_tensor(np.full((len(cluster_id)), False, dtype=bool))
+ for p in list_remove:
+ mask1 = cluster_id == p
+ mask = mask1 + mask
+ else:
+ mask = to_tensor(np.full((len(cluster_id)), False, dtype=bool))
+ list_p = unique_p_numbers
+ if len(list_remove) > 0:
+ mask_particles = np.full((len(list_p)), False, dtype=bool)
+ for p in list_remove:
+ mask_particles1 = list_p == p
+ mask_particles = mask_particles1 + mask_particles
+ else:
+ mask_particles = to_tensor(np.full((len(list_p)), False, dtype=bool))
+ return mask.to(bool), ~mask_particles.to(bool)
+
+class EventBatch:
+ def __init__(self, input_vectors, input_scalars, batch_idx, pt, original_particle_mapping=None, filter=None, dropped_batches=None, fake_nodes_idx=None, batch_idx_events=None, renumber=False):
+ self.input_vectors = input_vectors
+ self.input_scalars = input_scalars
+ self.batch_idx = batch_idx #renumber_clusters(batch_idx)
+ if renumber:
+ self.batch_idx = renumber_clusters(batch_idx)
+ self.pt = pt
+ self.filter = filter
+ self.dropped_batches = dropped_batches
+ self.original_particle_mapping = original_particle_mapping
+ if fake_nodes_idx is not None:
+ self.fake_nodes_idx = fake_nodes_idx
+ if batch_idx_events is not None:
+ self.batch_idx_events = batch_idx_events # Used for
+ def to(self, device):
+ self.input_vectors = self.input_vectors.to(device)
+ self.input_scalars = self.input_scalars.to(device)
+ self.batch_idx = self.batch_idx.to(device)
+ self.pt = self.pt.to(device)
+ if self.filter is not None:
+ self.filter = self.filter.to(device)
+ if self.original_particle_mapping is not None:
+ self.original_particle_mapping = self.original_particle_mapping.to(device)
+ return self
+ def cpu(self):
+ return self.to(torch.device("cpu"))
+
+class Event:
+ evt_collections = {"jets": EventJets, "genjets": EventJets, "pfcands": EventPFCands,
+ "offline_pfcands": EventPFCands, "MET": EventMetadataAndMET, "fatjets": EventJets,
+ "special_pfcands": EventPFCands, "matrix_element_gen_particles": EventPFCands,
+ "model_jets": EventJets, "final_gen_particles": EventPFCands,
+ "final_parton_level_particles": EventPFCands}
+ def __init__(self, jets=None, genjets=None, pfcands=None, offline_pfcands=None, MET=None, fatjets=None,
+ special_pfcands=None, matrix_element_gen_particles=None, model_jets=None, model_jets_unfiltered=None,
+ n_events=1, fastjet_jets=None, final_gen_particles=None, final_parton_level_particles=None):
+ self.jets = jets
+ self.genjets = genjets
+ self.pfcands = pfcands
+ self.offline_pfcands = offline_pfcands
+ self.MET = MET
+ self.fatjets = fatjets
+ self.fastjet_jets = fastjet_jets
+ self.special_pfcands = special_pfcands
+ self.matrix_element_gen_particles = matrix_element_gen_particles
+ self.model_jets = model_jets
+ self.model_jets_unfiltered = model_jets_unfiltered
+ self.init_attrs = []
+ self.n_events = n_events
+ self.final_gen_particles = final_gen_particles
+ self.final_parton_level_particles = final_parton_level_particles
+ if jets is not None:
+ self.init_attrs.append("jets")
+ if genjets is not None:
+ self.init_attrs.append("genjets")
+ if pfcands is not None:
+ self.init_attrs.append("pfcands")
+ if offline_pfcands is not None:
+ self.init_attrs.append("offline_pfcands")
+ if MET is not None:
+ self.init_attrs.append("MET")
+ if fatjets is not None:
+ self.init_attrs.append("fatjets")
+ if special_pfcands is not None:
+ self.init_attrs.append("special_pfcands")
+ if matrix_element_gen_particles is not None:
+ self.init_attrs.append("matrix_element_gen_particles")
+ if model_jets is not None:
+ self.init_attrs.append("model_jets")
+ if model_jets_unfiltered is not None:
+ self.init_attrs.append("model_jets_unfiltered")
+ if final_gen_particles is not None:
+ self.init_attrs.append("final_gen_particles")
+ if final_parton_level_particles is not None:
+ self.init_attrs.append("final_parton_level_particles")
+ #if fastjet_jets is not None:
+ # self.init_attrs.append("fastjet_jets")
+ ''' @staticmethod
+ def deserialize(result, result_metadata, event_idx=None):
+ # 'result' arrays can be mmap-ed.
+ # If event_idx is not None and is set to a list, only the selected event_idx will be returned.
+ n_events = result_metadata["n_events"]
+ attrs = result.keys()
+ if event_idx is None:
+ event_idx = to_tensor(list(range(n_events)))
+ else:
+ event_idx = to_tensor(event_idx)
+ assert (event_idx < n_events).all()
+ return Event(**{key: result[key][torch.isin(result_metadata[key + "_batch_idx"], event_idx)] for key in attrs}, n_events=n_events)
+ '''
+ def __len__(self):
+ return self.n_events
+ def serialize(self):
+ result = {}
+ result_metadata = {"n_events": self.n_events, "attrs": self.init_attrs}
+ for key in self.init_attrs:
+ s = getattr(self, key).serialize()
+ result[key] = s[0]
+ result_metadata[key + "_batch_idx"] = s[1]
+ return result, result_metadata
+ def __getitem__(self, i):
+ dic = {}
+ for key in self.init_attrs:
+ #s, e = getattr(self, key).batch_number[i], getattr(self, key).batch_number[i + 1]
+ dic[key] = getattr(self, key)[i]
+ return Event(**dic, n_events=1)
diff --git a/src/dataset/functions_graph.py b/src/dataset/functions_graph.py
new file mode 100644
index 0000000000000000000000000000000000000000..153cd686c3588646c5ef4538c49f0a3525478ddb
--- /dev/null
+++ b/src/dataset/functions_graph.py
@@ -0,0 +1,661 @@
+import numpy as np
+import torch
+#from torch_scatter import scatter_add, scatter_sum, scatter_mean
+
+from src.dataset.functions_data import (
+ get_ratios,
+ find_mask_no_energy,
+ find_cluster_id,
+ get_particle_features,
+ get_hit_features,
+ calculate_distance_to_boundary,
+ concatenate_Particles_GT,
+ create_noise_label,
+ EventJets,
+ EventPFCands,
+ EventCollection,
+ Event,
+ EventMetadataAndMET,
+ concat_event_collection
+)
+
+
+def create_inputs_from_table(
+ output, hits_only, prediction=False, hit_chis=False, pos_pxpy=False, is_Ks=False
+):
+ """Used by graph creation to get nodes and edge features
+
+ Args:
+ output (_type_): input from the root reading
+ hits_only (_type_): reading only hits or also tracks
+ prediction (bool, optional): if running in eval mode. Defaults to False.
+
+ Returns:
+ _type_: all information to construct a graph
+ """
+ graph_empty = False
+ number_hits = np.int32(np.sum(output["pf_mask"][0]))
+ number_part = np.int32(np.sum(output["pf_mask"][1]))
+
+ (
+ pos_xyz_hits,
+ pos_pxpypz,
+ p_hits,
+ e_hits,
+ hit_particle_link,
+ pandora_cluster,
+ pandora_cluster_energy,
+ pfo_energy,
+ pandora_mom,
+ pandora_ref_point,
+ pandora_pid,
+ unique_list_particles,
+ cluster_id,
+ hit_type_feature,
+ pandora_pfo_link,
+ daughters,
+ hit_link_modified,
+ connection_list,
+ chi_squared_tracks,
+ ) = get_hit_features(
+ output,
+ number_hits,
+ prediction,
+ number_part,
+ hit_chis=hit_chis,
+ pos_pxpy=pos_pxpy,
+ is_Ks=is_Ks,
+ )
+ # features particles
+ if torch.sum(torch.Tensor(unique_list_particles)>20000)>0:
+ graph_empty = True
+ else:
+ y_data_graph = get_particle_features(
+ unique_list_particles, output, prediction, connection_list
+ )
+ assert len(y_data_graph) == len(unique_list_particles)
+ # remove particles that have no energy, no hits or only track hits
+ if not is_Ks:
+ mask_hits, mask_particles = find_mask_no_energy(
+ cluster_id,
+ hit_type_feature,
+ e_hits,
+ y_data_graph,
+ daughters,
+ prediction,
+ is_Ks=is_Ks,
+ )
+ # create mapping from links to number of particles in the event
+ cluster_id, unique_list_particles = find_cluster_id(hit_particle_link[~mask_hits])
+ y_data_graph.mask(~mask_particles)
+ else:
+ mask_hits = torch.zeros_like(e_hits).bool().view(-1)
+ if prediction:
+ if is_Ks:
+ result = [
+ y_data_graph, # y_data_graph[~mask_particles],
+ p_hits[~mask_hits],
+ e_hits[~mask_hits],
+ cluster_id,
+ hit_particle_link[~mask_hits],
+ pos_xyz_hits[~mask_hits],
+ pos_pxpypz[~mask_hits],
+ pandora_cluster[~mask_hits],
+ pandora_cluster_energy[~mask_hits],
+ pandora_mom[~mask_hits],
+ pandora_ref_point[~mask_hits],
+ pandora_pid[~mask_hits],
+ pfo_energy[~mask_hits],
+ pandora_pfo_link[~mask_hits],
+ hit_type_feature[~mask_hits],
+ hit_link_modified[~mask_hits],
+ daughters[~mask_hits],
+ ]
+ else:
+ result = [
+ y_data_graph, # y_data_graph[~mask_particles],
+ p_hits[~mask_hits],
+ e_hits[~mask_hits],
+ cluster_id,
+ hit_particle_link[~mask_hits],
+ pos_xyz_hits[~mask_hits],
+ pos_pxpypz[~mask_hits],
+ pandora_cluster[~mask_hits],
+ pandora_cluster_energy[~mask_hits],
+ pandora_mom,
+ pandora_ref_point,
+ pandora_pid,
+ pfo_energy[~mask_hits],
+ pandora_pfo_link[~mask_hits],
+ hit_type_feature[~mask_hits],
+ hit_link_modified[~mask_hits],
+ ]
+ else:
+ result = [
+ y_data_graph, # y_data_graph[~mask_particles],
+ p_hits[~mask_hits],
+ e_hits[~mask_hits],
+ cluster_id,
+ hit_particle_link[~mask_hits],
+ pos_xyz_hits[~mask_hits],
+ pos_pxpypz[~mask_hits],
+ pandora_cluster,
+ pandora_cluster_energy,
+ pandora_mom,
+ pandora_ref_point,
+ pandora_pid,
+ pfo_energy,
+ pandora_pfo_link,
+ hit_type_feature[~mask_hits],
+ hit_link_modified[~mask_hits],
+ ]
+ if hit_chis:
+ result.append(
+ chi_squared_tracks[~mask_hits],
+ )
+ else:
+ result.append(None)
+ hit_type = hit_type_feature[~mask_hits]
+ # if hits only remove tracks, otherwise leave tracks
+ if hits_only:
+ hit_mask = (hit_type == 0) | (hit_type == 1)
+ hit_mask = ~hit_mask
+ for i in range(1, len(result)):
+ if result[i] is not None:
+ result[i] = result[i][hit_mask]
+ hit_type_one_hot = torch.nn.functional.one_hot(
+ hit_type_feature[~mask_hits][hit_mask] - 2, num_classes=2
+ )
+
+ else:
+ # if we want the tracks keep only 1 track hit per charged particle.
+ hit_mask = hit_type == 10
+ hit_mask = ~hit_mask
+ for i in range(1, len(result)):
+ if result[i] is not None:
+ # if len(result[i].shape) == 2 and result[i].shape[0] == 3:
+ # result[i] = result[i][:, hit_mask]
+ # else:
+ # result[i] = result[i][hit_mask]
+ result[i] = result[i][hit_mask]
+ hit_type_one_hot = torch.nn.functional.one_hot(
+ hit_type_feature[~mask_hits][hit_mask], num_classes=5
+ )
+ result.append(hit_type_one_hot)
+ result.append(connection_list)
+ return result
+ if graph_empty:
+ return [None]
+
+def remove_hittype0(graph):
+ filt = graph.ndata["hit_type"] == 0
+ # graph.ndata["hit_type"] -= 1
+ return dgl.remove_nodes(graph, torch.where(filt)[0])
+
+def store_track_at_vertex_at_track_at_calo(graph):
+ # To make it compatible with clustering, remove the 0 hit type nodes and store them as pos_pxpypz_at_vertex
+ tracks_at_calo = graph.ndata["hit_type"] == 1
+ tracks_at_vertex = graph.ndata["hit_type"] == 0
+ part = graph.ndata["particle_number"].long()
+ assert (part[tracks_at_calo] == part[tracks_at_vertex]).all()
+ graph.ndata["pos_pxpypz_at_vertex"] = torch.zeros_like(graph.ndata["pos_pxpypz"])
+ graph.ndata["pos_pxpypz_at_vertex"][tracks_at_calo] = graph.ndata["pos_pxpypz"][tracks_at_vertex]
+ return remove_hittype0(graph)
+
+def create_jets_outputs_Delphes2(output): # for the v2 data loading config
+ n_pf = int(output["n_PFCands"][0, 0])
+ n_genp = int(output["NParticles"][0, 0])
+ genp = output["GenParticles"][:, :n_genp]
+ pfcands = output["PFCands"][:, :n_pf]
+ if pfcands.shape[1] < n_pf:
+ n_pf = pfcands.shape[1]
+ pfcands = output["PFCands"][:, :n_pf]
+ genp = genp.T
+ pfcands=pfcands.T
+ genp_status = genp[:, 6]
+ genp_eta = genp[:, 0]
+ genp_pt = genp[:, 2]
+ filter_dq = genp_status == 23
+ genp_pid = genp[:, 4]
+ pfcands = EventPFCands(
+ pt=pfcands[:, 2],
+ eta=pfcands[:, 0],
+ phi=pfcands[:, 1],
+ mass=pfcands[:, 3],
+ charge=pfcands[:, 4],
+ pid=pfcands[:, 5],
+ pf_cand_jet_idx=[-1]*len(pfcands)
+ )
+ filter_pfcands = (pfcands.pt > 0.5) & (torch.abs(pfcands.eta) < 2.4)
+ pfcands.mask(filter_pfcands)
+ filter_partons = (genp_status >= 51) & (genp_status <= 59) & (np.abs(genp_eta) < 2.4) & (genp_pt > 0.5)
+ matrix_element_gen_particles = EventPFCands(
+ genp[filter_dq, 2],
+ genp[filter_dq, 0],
+ genp[filter_dq, 1],
+ genp[filter_dq, 3],
+ np.sign(genp[filter_dq, 4]),
+ genp[filter_dq, 5],
+ pf_cand_jet_idx=-1 * np.ones_like(genp[filter_dq, 0]),
+ )
+ parton_level_particles = EventPFCands(
+ genp[filter_partons, 2],
+ genp[filter_partons, 0],
+ genp[filter_partons, 1],
+ genp[filter_partons, 3],
+ np.sign(genp[filter_partons, 4]),
+ genp[filter_partons, 5],
+ pf_cand_jet_idx=-1 * np.ones_like(genp[filter_partons, 0]),
+ )
+ filter_final_gen_particles = (genp_status == 1) & (np.abs(genp_eta) < 2.4) & (genp_pt > 0.5)
+ final_gen_particles = EventPFCands(
+ genp[filter_final_gen_particles, 2],
+ genp[filter_final_gen_particles, 0],
+ genp[filter_final_gen_particles, 1],
+ genp[filter_final_gen_particles, 3],
+ np.sign(genp[filter_final_gen_particles, 4]),
+ genp[filter_final_gen_particles, 5],
+ pf_cand_jet_idx=-1 * np.ones_like(genp[filter_final_gen_particles, 0]),
+ )
+ if len(final_gen_particles) == 0:
+ print("No gen particles in this event?")
+ print(genp_status, len(genp_status))
+ #print(genp_eta)
+
+ return Event(pfcands=pfcands, matrix_element_gen_particles=matrix_element_gen_particles,
+ final_gen_particles=final_gen_particles, final_parton_level_particles=parton_level_particles)
+
+def create_jets_outputs_Delphes(output):
+ n_ch = int(output["n_CH"][0, 0])
+ n_nh = int(output["n_NH"][0, 0])
+ n_photons = int(output["n_photon"][0, 0])
+ n_genp = int(output["NParticles"][0, 0])
+ ch = output["CH"][:, :n_ch]
+ nh = output["NH"][:, :n_nh]
+ photons = output["EFlowPhoton"][:, :n_photons]
+ genp = output["GenParticles"][:, :n_genp]
+ if nh.shape[1] < n_nh:
+ n_nh = nh.shape[1]
+ if ch.shape[1] < n_ch:
+ n_ch = ch.shape[1]
+ if photons.shape[1] < n_photons:
+ n_photons = photons.shape[1]
+ nh_mass = [0.135] * n_nh # pion mass hypothesis
+ nh_ET = nh[2, :]
+ nh_pt = np.sqrt(nh_ET ** 2 - np.array(nh_mass)**2)
+ # set nans to just et
+ nh_pt[np.isnan(nh_pt)] = nh_ET[np.isnan(nh_pt)]
+ nh_charge = [0] * n_nh
+ nh_pid = [2112] * n_nh
+ nh_jets = [-1] * n_nh
+ ch_charge = ch[4, :]
+ ch_pid = [211] * n_ch
+ ch_jets = [-1] * n_ch
+ photons_jets = [-1] * n_photons
+ photons_mass = [0] * n_photons
+ photons_charge = [0] * n_photons
+ photons_pid = [22] * n_photons
+ nh = nh.T
+ ch = ch.T
+ photons = photons.T
+ genp = genp.T
+ nh_data = EventPFCands(nh_ET, nh[:, 0], nh[:, 1], nh_mass, nh_charge, nh_pid, pf_cand_jet_idx=nh_jets)
+ ch_data = EventPFCands(ch[:, 2], ch[:, 0], ch[:, 1], ch[:, 3], ch_charge, ch_pid, pf_cand_jet_idx=ch_jets)
+ photon_data = EventPFCands(photons[:, 2], photons[:, 0], photons[:, 1], photons_mass, photons_charge,
+ photons_pid, pf_cand_jet_idx=photons_jets)
+ pfcands = concat_event_collection([nh_data, ch_data, photon_data], nobatch=1)
+ filter_pfcands = (pfcands.pt > 0.5) & (torch.abs(pfcands.eta) < 2.4)
+ pfcands.mask(filter_pfcands)
+ genp_status = genp[:, 6]
+ genp_eta = genp[:, 0]
+ genp_pt = genp[:, 2]
+ filter_dq = genp_status == 23
+ genp_pid = genp[:, 4]
+
+ filter_partons = (genp_status >= 51) & (genp_status <= 59) & (np.abs(genp_eta) < 2.4) & (genp_pt > 0.5)
+ matrix_element_gen_particles = EventPFCands(
+ genp[filter_dq, 2],
+ genp[filter_dq, 0],
+ genp[filter_dq, 1],
+ genp[filter_dq, 3],
+ np.sign(genp[filter_dq, 4]),
+ genp[filter_dq, 5],
+ pf_cand_jet_idx=-1 * np.ones_like(genp[filter_dq, 0]),
+ )
+ parton_level_particles = EventPFCands(
+ genp[filter_partons, 2],
+ genp[filter_partons, 0],
+ genp[filter_partons, 1],
+ genp[filter_partons, 3],
+ np.sign(genp[filter_partons, 4]),
+ genp[filter_partons, 5],
+ pf_cand_jet_idx=-1 * np.ones_like(genp[filter_partons, 0]),
+ )
+ filter_final_gen_particles = (genp_status == 1) & (np.abs(genp_eta) < 2.4) & (genp_pt > 0.5)
+ final_gen_particles = EventPFCands(
+ genp[filter_final_gen_particles, 2],
+ genp[filter_final_gen_particles, 0],
+ genp[filter_final_gen_particles, 1],
+ genp[filter_final_gen_particles, 3],
+ np.sign(genp[filter_final_gen_particles, 4]),
+ genp[filter_final_gen_particles, 5],
+ pf_cand_jet_idx=-1 * np.ones_like(genp[filter_final_gen_particles, 0]),
+ )
+ if len(final_gen_particles) == 0:
+ print("No gen particles in this event?")
+ print(genp_status, len(genp_status))
+ #print(genp_eta)
+
+ return Event(pfcands=pfcands, matrix_element_gen_particles=matrix_element_gen_particles,
+ final_gen_particles=final_gen_particles, final_parton_level_particles=parton_level_particles)
+
+def create_jets_outputs(
+ output,
+ config=None,
+):
+ n_jets = int(output["n_jets"][0, 0])
+ jets_data = output["jets"][:, :n_jets]
+ n_genjets = int(output["n_genjets"][0, 0])
+ genjets_data = output["genjets"][:, :n_genjets]
+ n_pfcands = int(output["n_pfcands"][0, 0])
+ n_fat_jets = int(output["n_fat_jets"][0, 0])
+ fat_jets_data = output["fat_jets"][:, :n_fat_jets]
+ #jets_data = EventJets(jets_data[:, 0], )
+ return jets_data, genjets_data, fat_jets_data
+
+def create_jets_outputs_new(
+ output, separate_special_pfcands=False
+):
+ print(output)
+ n_jets = int(output["n_jets"][0, 0])
+ jets_data = output["jets"][:, :n_jets]
+ n_genjets = int(output["n_genjets"][0, 0])
+ genjets_data = output["genjets"][:, :n_genjets]
+ n_pfcands = int(output["n_pfcands"][0, 0])
+ pfcands_data = output["pfcands"][:, :n_pfcands]
+ pfcands_jets_mapping = output["pfcands_jet_mapping"]
+ output_MET = output["MET"]
+ n_fat_jets = int(output["n_fat_jets"][0, 0])
+ fat_jets_data = output["fat_jets"][:, :n_fat_jets]
+ num_mapping = np.argmax(pfcands_jets_mapping[1]) + 1
+ if n_jets == 0:
+ num_mapping = 0
+
+ n_electrons = int(output["n_electrons"][0, 0])
+ electrons_data = output["electrons"][:, :n_electrons]
+ n_muons = int(output["n_muons"][0, 0])
+ muons_data = output["muons"][:, :n_muons]
+ n_photons = int(output["n_photons"][0, 0])
+ photons_data = output["photons"][:, :n_photons]
+ matrix_element_gen_particles_data = output["matrix_element_gen_particles"]
+ if "final_gen_particles" in output:
+ # new config
+ #n_final_gen_particles = int(output["n_final_gen_particles"][0, 0])
+ final_gen_particles_data = output["final_gen_particles"]#[:, :n_final_gen_particles]
+ final_parton_level_particles_data = output["final_parton_level_particles"]#[:, :n_final_gen_particles]
+
+ pfcands_jets_mapping = pfcands_jets_mapping[:, :num_mapping]
+ #n_offline_pfcands = int(output["n_offline_pfcands"][0, 0])
+ #offline_pfcands_data = output["offline_pfcands"][:, :n_offline_pfcands]
+ #offline_jets_mapping = output["offline_pfcands_jet_mapping"]
+ #num_mapping_offline = np.argmax(offline_jets_mapping[1]) + 1
+ #assert offline_jets_mapping[1].max() < n_offline_pfcands
+ if len(pfcands_jets_mapping[1]):
+ assert pfcands_jets_mapping[1].max() < n_pfcands
+ #offline_jets_mapping = offline_jets_mapping[:, :num_mapping_offline]
+ jets_data = jets_data.T
+ genjets_data = genjets_data.T
+ pfcands_data = pfcands_data.T
+ fat_jets_data = fat_jets_data.T
+ matrix_element_gen_particles_data = matrix_element_gen_particles_data.T
+ matrix_element_gen_particles_data = EventPFCands(pt=matrix_element_gen_particles_data[:, 0],
+ eta=matrix_element_gen_particles_data[:, 1],
+ phi=matrix_element_gen_particles_data[:, 2],
+ mass=matrix_element_gen_particles_data[:, 3],
+ charge=np.sign(matrix_element_gen_particles_data[:, 4]),
+ pid=matrix_element_gen_particles_data[:, 4],
+ pf_cand_jet_idx=-1*np.ones_like(matrix_element_gen_particles_data[:, 0]))
+ if "final_gen_particles" in output:
+ final_gen_particles_data = final_gen_particles_data.T
+ final_parton_level_particles_data = final_parton_level_particles_data.T
+ n_fp = torch.argmin(torch.tensor(final_gen_particles_data[:, 0])).item()
+ n_pp = torch.argmin(torch.tensor(final_parton_level_particles_data[:, 0])).item()
+ final_gen_particles_data = EventPFCands(pt=final_gen_particles_data[:n_fp, 0],
+ eta=final_gen_particles_data[:n_fp, 1],
+ phi=final_gen_particles_data[:n_fp, 2],
+ mass=final_gen_particles_data[:n_fp, 3],
+ charge=np.sign(final_gen_particles_data[:n_fp, 4]),
+ pid=final_gen_particles_data[:n_fp, 4],
+ pf_cand_jet_idx=-1*np.ones_like(final_gen_particles_data[:n_fp, 0]))
+ final_parton_level_particles_data = EventPFCands(pt=final_parton_level_particles_data[:n_pp, 0],
+ eta=final_parton_level_particles_data[:n_pp, 1],
+ phi=final_parton_level_particles_data[:n_pp, 2],
+ mass=final_parton_level_particles_data[:n_pp, 3],
+ charge=np.sign(final_parton_level_particles_data[:n_pp, 4]),
+ pid=final_parton_level_particles_data[:n_pp, 4],
+ pf_cand_jet_idx=-1*np.ones_like(final_parton_level_particles_data[:n_pp, 0]),
+ status=final_parton_level_particles_data[:n_pp, 5])
+ #offline_pfcands_data = offline_pfcands_data.T
+ electrons_data = electrons_data.T
+ muons_data = muons_data.T
+ photons_data = photons_data.T
+ electrons_mass = np.ones_like(electrons_data[:, 0]) * 0.511
+ muons_mass = np.ones_like(muons_data[:, 0]) * 105.7
+ photons_mass = np.zeros_like(photons_data[:, 0])
+ electrons_pid = np.ones_like(electrons_data[:, 0]) * 0
+ muons_pid = np.ones_like(muons_data[:, 0]) * 1
+ photons_pid = np.ones_like(photons_data[:, 0]) * 2
+ photons_charge = np.zeros_like(photons_data[:, 0])
+ electrons_data = np.column_stack((electrons_data[:, 0], electrons_data[:, 1], electrons_data[:, 2],
+ electrons_mass, electrons_data[:, 3], electrons_pid))
+ muons_data = np.column_stack((muons_data[:, 0], muons_data[:, 1], muons_data[:, 2],
+ muons_mass, muons_data[:, 3], muons_pid))
+ photons_data = np.column_stack((photons_data[:, 0], photons_data[:, 1], photons_data[:, 2],
+ photons_mass, photons_charge, photons_pid))
+ special_pfcands_data = np.concatenate((electrons_data, muons_data, photons_data), axis=0)
+ special_pfcands_data = torch.tensor(special_pfcands_data)
+ # is there
+ jets_data = EventJets(
+ jets_data[:, 0],
+ jets_data[:, 1],
+ jets_data[:, 2],
+ jets_data[:, 3],
+ #jets_data[:, 4]
+ )
+ genjets_data = EventJets(
+ genjets_data[:, 0],
+ genjets_data[:, 1],
+ genjets_data[:, 2],
+ genjets_data[:, 3],
+ )
+ fatjets_data = EventJets(
+ fat_jets_data[:, 0],
+ fat_jets_data[:, 1],
+ fat_jets_data[:, 2],
+ fat_jets_data[:, 3],
+ #fat_jets_data[:, 4]
+ )
+ pfcands_jets_mapping = list(pfcands_jets_mapping)
+ #offline_jets_mapping = list(offline_jets_mapping)
+ pfcands_data = EventPFCands(*[pfcands_data[:, i] for i in range(6)] + pfcands_jets_mapping)
+ special_pfcands_data = EventPFCands(*[special_pfcands_data[:, i] for i in range(6)], pf_cand_jet_idx=-1*torch.ones_like(special_pfcands_data[:, 0]))
+ if not separate_special_pfcands:
+ pfcands_data = concat_event_collection([pfcands_data, special_pfcands_data])
+ special_pfcands_data = None
+ MET_data = EventMetadataAndMET(pt=output_MET[0], phi=output_MET[1], scouting_trig=output_MET[2], offline_trig=output_MET[3], veto_trig=output_MET[4])
+ #offline_pfcands_data = EventPFCands(*[offline_pfcands_data[:, i] for i in range(6)] + offline_jets_mapping, offline=True)
+ kwargs = {}
+ if "final_gen_particles" in output:
+ kwargs["final_gen_particles"] = final_gen_particles_data
+ kwargs["final_parton_level_particles"] = final_parton_level_particles_data
+ return Event(jets=jets_data, genjets=genjets_data, pfcands=pfcands_data, MET=MET_data, fatjets=fatjets_data,
+ matrix_element_gen_particles=matrix_element_gen_particles_data, special_pfcands=special_pfcands_data,
+ **kwargs)
+ #return {
+ # "jets": jets_data,
+ # "genjets": genjets_data,
+ # "pfcands": pfcands_data,
+ # # "offline_pfcands": offline_pfcands_data
+ #}
+
+def create_graph(
+ output,
+ config=None,
+ n_noise=0,
+):
+ graph_empty = False
+ hits_only = config.graph_config.get(
+ "only_hits", False
+ ) # Whether to only include hits in the graph
+ # standardize_coords = config.graph_config.get("standardize_coords", False)
+ extended_coords = config.graph_config.get("extended_coords", False)
+ prediction = config.graph_config.get("prediction", False)
+ hit_chis = config.graph_config.get("hit_chis_track", False)
+ pos_pxpy = config.graph_config.get("pos_pxpy", False)
+ is_Ks = config.graph_config.get("ks", False)
+ noise_class = config.graph_config.get("noise", False)
+ result = create_inputs_from_table(
+ output,
+ hits_only=hits_only,
+ prediction=prediction,
+ hit_chis=hit_chis,
+ pos_pxpy=pos_pxpy,
+ is_Ks=is_Ks,
+ )
+ if len(result) == 1:
+ graph_empty = True
+ g = 0
+ y_data_graph = 0
+ else:
+ (
+ y_data_graph,
+ p_hits,
+ e_hits,
+ cluster_id,
+ hit_particle_link,
+ pos_xyz_hits,
+ pos_pxpypz,
+ pandora_cluster,
+ pandora_cluster_energy,
+ pandora_mom,
+ pandora_ref_point,
+ pandora_pid,
+ pandora_pfo_energy,
+ pandora_pfo_link,
+ hit_type,
+ hit_link_modified,
+ daughters,
+ chi_squared_tracks,
+ hit_type_one_hot,
+ connections_list
+ ) = result
+ if noise_class:
+ mask_loopers, mask_particles = create_noise_label(
+ e_hits, hit_particle_link, y_data_graph, cluster_id
+ )
+ hit_particle_link[mask_loopers] = -1
+ y_data_graph.mask(mask_particles)
+ cluster_id, unique_list_particles = find_cluster_id(hit_particle_link)
+ graph_coordinates = pos_xyz_hits # / 3330 # divide by detector size
+ graph_empty = False
+ g = dgl.graph(([], []))
+ g.add_nodes(graph_coordinates.shape[0])
+ if hits_only == False:
+ hit_features_graph = torch.cat(
+ (graph_coordinates, hit_type_one_hot, e_hits, p_hits), dim=1
+ ) # dims = 8
+ else:
+ hit_features_graph = torch.cat(
+ (graph_coordinates, hit_type_one_hot, e_hits, p_hits), dim=1
+ ) # dims = 9
+
+ g.ndata["h"] = hit_features_graph
+ g.ndata["pos_hits_xyz"] = pos_xyz_hits
+ g.ndata["pos_pxpypz"] = pos_pxpypz
+ g = calculate_distance_to_boundary(g)
+ g.ndata["hit_type"] = hit_type
+ g.ndata[
+ "e_hits"
+ ] = e_hits # if no tracks this is e and if there are tracks this fills the tracks e values with p
+ if hit_chis:
+ g.ndata["chi_squared_tracks"] = chi_squared_tracks
+ g.ndata["particle_number"] = cluster_id
+ g.ndata["hit_link_modified"] = hit_link_modified
+ g.ndata["particle_number_nomap"] = hit_particle_link
+ if prediction:
+ g.ndata["pandora_cluster"] = pandora_cluster
+ g.ndata["pandora_pfo"] = pandora_pfo_link
+ g.ndata["pandora_cluster_energy"] = pandora_cluster_energy
+ g.ndata["pandora_pfo_energy"] = pandora_pfo_energy
+ if is_Ks:
+ g.ndata["pandora_momentum"] = pandora_mom
+ g.ndata["pandora_reference_point"] = pandora_ref_point
+ g.ndata["daughters"] = daughters
+ g.ndata["pandora_pid"] = pandora_pid
+ y_data_graph.calculate_corrected_E(g, connections_list)
+ # if is_Ks == True:
+ # if y_data_graph.pid.flatten().shape[0] == 4 and np.count_nonzero(y_data_graph.pid.flatten() == 22) == 4:
+ # graph_empty = False
+ # else:
+ # graph_empty = True
+ # if g.ndata["h"].shape[0] < 10 or (set(g.ndata["hit_type"].unique().tolist()) == set([0, 1]) and g.ndata["hit_type"][g.ndata["hit_type"] == 1].shape[0] < 10):
+ # graph_empty = True # less than 10 hits
+ # print("y len", len(y_data_graph))
+ # if is_Ks == False:
+ # if len(y_data_graph) < 4:
+ # graph_empty = True
+
+ if pos_xyz_hits.shape[0] < 10:
+ graph_empty = True
+ if graph_empty:
+ return [g, y_data_graph], graph_empty
+ # print("graph_empty",graph_empty)
+ g = store_track_at_vertex_at_track_at_calo(g)
+ if noise_class:
+ g = make_bad_tracks_noise_tracks(g)
+ return [g, y_data_graph], graph_empty
+
+
+def graph_batch_func(list_graphs):
+ """collator function for graph dataloader
+
+ Args:
+ list_graphs (list): list of graphs from the iterable dataset
+
+ Returns:
+ batch dgl: dgl batch of graphs
+ """
+ list_graphs_g = [el[0] for el in list_graphs]
+ # list_y = add_batch_number(list_graphs)
+ # ys = torch.cat(list_y, dim=0)
+ # ys = torch.reshape(ys, [-1, list_y[0].shape[1]])
+ ys = concatenate_Particles_GT(list_graphs)
+ bg = dgl.batch(list_graphs_g)
+ # reindex particle number
+ return bg, ys
+
+def make_bad_tracks_noise_tracks(g):
+ # is_chardged =scatter_add((g.ndata["hit_type"]==1).view(-1), g.ndata["particle_number"].long())[1:]
+ mask_hit_type_t1 = g.ndata["hit_type"]==2
+ mask_hit_type_t2 = g.ndata["hit_type"]==1
+ mask_all = mask_hit_type_t1
+ # the other error could come from no hits in the ECAL for a cluster
+ mean_pos_cluster = scatter_mean(g.ndata["pos_hits_xyz"][mask_all], g.ndata["particle_number"][mask_all].long().view(-1), dim=0)
+
+ pos_track = g.ndata["pos_hits_xyz"][mask_hit_type_t2]
+ particle_track = g.ndata["particle_number"][mask_hit_type_t2]
+ if torch.sum(g.ndata["particle_number"] == 0)==0:
+ #then index 1 is at 0
+ mean_pos_cluster = mean_pos_cluster[1:,:]
+ particle_track = particle_track-1
+ # print(mean_pos_cluster.shape, torch.unique(g.ndata["particle_number"]).shape)
+ # print("mean_pos_cluster", mean_pos_cluster.shape)
+ # print("particle_track", particle_track)
+ # print("pos_track", pos_track.shape)
+ if mean_pos_cluster.shape[0] == torch.unique(g.ndata["particle_number"]).shape:
+ distance_track_cluster = torch.norm(mean_pos_cluster[particle_track.long()]-pos_track,dim=1)/1000
+ # print("distance_track_cluster", distance_track_cluster)
+ bad_tracks = distance_track_cluster>0.21
+ index_bad_tracks = mask_hit_type_t2.nonzero().view(-1)[bad_tracks]
+ g.ndata["particle_number"][index_bad_tracks]= 0
+ return g
\ No newline at end of file
diff --git a/src/dataset/get_dataset.py b/src/dataset/get_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..e4702f4ccf00d129f02a27067baab29eaa092170
--- /dev/null
+++ b/src/dataset/get_dataset.py
@@ -0,0 +1,57 @@
+import os
+from src.dataset.dataset import SimpleIterDataset, EventDataset
+from src.utils.utils import to_filelist
+from src.utils.paths import get_path
+
+
+# To be used for simple analysis scripts, not for the full training!
+def get_iter(path, full_dataloader=False, model_clusters_file=None, model_output_file=None,
+ include_model_jets_unfiltered=False):
+ if full_dataloader:
+ datasets = os.listdir(path)
+ datasets = [os.path.join(path, x) for x in datasets]
+ class Args:
+ def __init__(self):
+ self.data_train = datasets
+ self.data_val = datasets
+ #self.data_train = files_train
+ self.data_config = get_path('config_files/config_jets.yaml', "code")
+ self.extra_selection = None
+ self.train_val_split = 1
+ self.data_fraction = 1
+ self.file_fraction = 1
+ self.fetch_by_files = False
+ self.fetch_step = 0.1
+ self.steps_per_epoch = None
+ self.in_memory = False
+ self.local_rank = None
+ self.copy_inputs = False
+ self.no_remake_weights = False
+ self.batch_size = 10
+ self.num_workers = 0
+ self.demo = False
+ self.laplace = False
+ self.diffs = False
+ self.class_edges = False
+
+ args = Args()
+ train_range = (0, args.train_val_split)
+ train_file_dict, train_files = to_filelist(args, 'train')
+ train_data = SimpleIterDataset(train_file_dict, args.data_config, for_training=True,
+ extra_selection=args.extra_selection,
+ remake_weights=True,
+ load_range_and_fraction=(train_range, args.data_fraction),
+ file_fraction=args.file_fraction,
+ fetch_by_files=args.fetch_by_files,
+ fetch_step=args.fetch_step,
+ infinity_mode=False,
+ in_memory=args.in_memory,
+ async_load=False,
+ name='train', jets=True)
+
+ iterator = iter(train_data)
+ else:
+ iterator = iter(EventDataset.from_directory(path, model_clusters_file=model_clusters_file,
+ model_output_file=model_output_file,
+ include_model_jets_unfiltered=include_model_jets_unfiltered))
+ return iterator
diff --git a/src/evaluation/clustering_metrics.py b/src/evaluation/clustering_metrics.py
new file mode 100644
index 0000000000000000000000000000000000000000..00fd213f079b83bc320b109ffbf374c02d6b3f01
--- /dev/null
+++ b/src/evaluation/clustering_metrics.py
@@ -0,0 +1,91 @@
+from tqdm import tqdm
+import numpy as np
+from src.dataset.dataset import EventDataset, get_batch_bounds
+
+def compute_f1_score(dataset, dataset_cap=-1):
+ R = 0.8
+ counts = {
+ "n_matched_dark_quarks": 0,
+ "n_jets": 0,
+ "n_dark_quarks": 0
+ } # Array of [n_relevant_retrieved, all_retrieved, all_relevant], or in our language, [n_matched_dark_quarks, n_jets, n_dark_quarks]
+ n = 0
+ for x in tqdm(range(len(dataset))):
+ data = dataset[x]
+ jets_object = data.model_jets
+ n += 1
+ if dataset_cap != -1 and n >= dataset_cap:
+ break
+ jets = [jets_object.eta, jets_object.phi]
+ dq = [data.matrix_element_gen_particles.eta, data.matrix_element_gen_particles.phi]
+ # calculate deltaR between each jet and each quark
+ distance_matrix = np.zeros((len(jets_object), len(data.matrix_element_gen_particles)))
+ for i in range(len(jets_object)):
+ for j in range(len(data.matrix_element_gen_particles)):
+ deta = jets[0][i] - dq[0][j]
+ dphi = jets[1][i] - dq[1][j]
+ distance_matrix[i, j] = np.sqrt(deta**2 + dphi**2)
+ # row-wise argmin
+ distance_matrix = distance_matrix.T
+ #min_distance = np.min(distance_matrix, axis=1)
+ n_jets = len(jets_object)
+ counts["n_jets"] += n_jets
+ counts["n_dark_quarks"] += len(data.matrix_element_gen_particles)
+ if len(jets_object):
+ quark_to_jet = np.min(distance_matrix, axis=1)
+ quark_to_jet[quark_to_jet > R] = -1
+ counts["n_matched_dark_quarks"] += np.sum(quark_to_jet != -1)
+ if counts["n_jets"] != 0:
+ precision = counts["n_matched_dark_quarks"] / counts["n_jets"]
+ else:
+ precision = 0
+ if counts["n_dark_quarks"] != 0:
+ recall = counts["n_matched_dark_quarks"] / counts["n_dark_quarks"]
+ else:
+ recall = 0
+ if precision == 0 or recall == 0:
+ return 0
+ f1_score = 2 * precision * recall / (precision + recall)
+ return f1_score
+
+def compute_f1_score_from_result(result, dataset):
+ R = 0.8
+ counts = {
+ "n_matched_dark_quarks": 0,
+ "n_jets": 0,
+ "n_dark_quarks": 0
+ } # Array of [n_relevant_retrieved, all_retrieved, all_relevant], or in our language, [n_matched_dark_quarks, n_jets, n_dark_quarks]
+ result["event_idx_bounds"] = get_batch_bounds(result["event_idx"])
+ l = result["event_idx"].max().int().item()
+ for x in tqdm(range(len(dataset))):
+ if x >= l:
+ break
+ data = dataset[x]
+ jets_object = EventDataset.get_model_jets_static(x, data.pfcands, result, result["model_cluster"])
+ if jets_object is None:
+ continue
+ jets = [jets_object.eta, jets_object.phi]
+ dq = [data.matrix_element_gen_particles.eta, data.matrix_element_gen_particles.phi]
+ # calculate deltaR between each jet and each quark
+ distance_matrix = np.zeros((len(jets_object), len(data.matrix_element_gen_particles)))
+ for i in range(len(jets_object)):
+ for j in range(len(data.matrix_element_gen_particles)):
+ deta = jets[0][i] - dq[0][j]
+ dphi = jets[1][i] - dq[1][j]
+ distance_matrix[i, j] = np.sqrt(deta**2 + dphi**2)
+ # row-wise argmin
+ distance_matrix = distance_matrix.T
+ #min_distance = np.min(distance_matrix, axis=1)
+ n_jets = len(jets_object)
+ counts["n_jets"] += n_jets
+ counts["n_dark_quarks"] += len(data.matrix_element_gen_particles)
+ if len(jets_object):
+ quark_to_jet = np.min(distance_matrix, axis=1)
+ quark_to_jet[quark_to_jet > R] = -1
+ counts["n_matched_dark_quarks"] += np.sum(quark_to_jet != -1)
+ if counts["n_jets"] == 0 or counts["n_dark_quarks"] == 0:
+ return 0
+ precision = counts["n_matched_dark_quarks"] / counts["n_jets"]
+ recall = counts["n_matched_dark_quarks"] / counts["n_dark_quarks"]
+ f1_score = 2 * precision * recall / (precision + recall)
+ return f1_score
diff --git a/src/jetfinder/basicjetfinder.py b/src/jetfinder/basicjetfinder.py
new file mode 100644
index 0000000000000000000000000000000000000000..7b765937284892f1488a285f5d67a70c5f4e5272
--- /dev/null
+++ b/src/jetfinder/basicjetfinder.py
@@ -0,0 +1,240 @@
+# from https://github.com/graeme-a-stewart/antikt-python/tree/main/src/pyantikt
+from src.jetfinder.basicjetfinder_types import NPHistory
+from src.jetfinder.basicjetfinder_types import PseudoJet
+from src.jetfinder.basicjetfinder_types import NPPseudoJets
+
+
+import logging
+import numpy as np
+import numpy.typing as npt
+
+logger = logging.getLogger("jetfinder")
+
+from numba import njit
+from copy import deepcopy
+
+Invalid = -3
+NonexistentParent = -2
+BeamJet = -1
+
+
+
+def find_closest_jets(akt_dist: npt.ArrayLike, nn: npt.ArrayLike):
+ '''Look over active jets and find the closest'''
+ closest = akt_dist.argmin()
+ return akt_dist[closest], closest
+
+
+def scan_for_all_nearest_neighbours(phi: npt.ArrayLike, rap: npt.ArrayLike, inv_pt2: npt.ArrayLike,
+ dist: npt.ArrayLike, akt_dist: npt.ArrayLike,
+ nn: npt.ArrayLike, mask: npt.ArrayLike, R2: float):
+ '''Do a full scan for nearest (geometrical) neighbours'''
+ for ijet in range(phi.size):
+ if mask[ijet]:
+ continue
+ _dphi = np.pi - np.abs(np.pi - np.abs(phi - phi[ijet]))
+ _drap = rap - rap[ijet]
+ _dist = _dphi * _dphi + _drap * _drap
+ _dist[ijet] = R2 # Avoid measuring the distance 0 to myself!
+ _dist[mask] = 1e20 # Don't consider any masked jets
+ iclosejet = _dist.argmin()
+ dist[ijet] = _dist[iclosejet]
+ if iclosejet == ijet:
+ nn[ijet] = -1
+ akt_dist[ijet] = dist[ijet] * inv_pt2[ijet]
+ else:
+ nn[ijet] = iclosejet
+ akt_dist[ijet] = dist[ijet] * (inv_pt2[ijet] if inv_pt2[ijet] < inv_pt2[iclosejet] else inv_pt2[iclosejet])
+
+
+def scan_for_my_nearest_neighbours(ijet: int, phi: npt.ArrayLike,
+ rap: npt.ArrayLike, inv_pt2: npt.ArrayLike,
+ dist: npt.ArrayLike, akt_dist: npt.ArrayLike, nn: npt.ArrayLike,
+ mask: npt.ArrayLike, R2: float):
+ '''Retest all other jets against the target jet'''
+ nn[ijet] = -1
+ dist[ijet] = R2
+ _dphi = np.pi - np.abs(np.pi - np.abs(phi - phi[ijet]))
+ _drap = rap - rap[ijet]
+ _dist = _dphi * _dphi + _drap * _drap
+ _dist[ijet] = R2 # Avoid measuring the distance 0 to myself!
+ _dist[mask] = 1e20 # Don't consider any masked jets
+ iclosejet = _dist.argmin()
+ dist[ijet] = _dist[iclosejet]
+ if iclosejet == ijet:
+ nn[ijet] = -1
+ akt_dist[ijet] = dist[ijet] * inv_pt2[ijet]
+ else:
+ nn[ijet] = iclosejet
+ akt_dist[ijet] = dist[ijet] * (inv_pt2[ijet] if inv_pt2[ijet] < inv_pt2[iclosejet] else inv_pt2[iclosejet])
+ # As this function is called on new PseudoJets it's possible
+ # that we are now the NN of our NN
+ if dist[iclosejet] > dist[ijet]:
+ dist[iclosejet] = dist[ijet]
+ nn[iclosejet] = ijet
+ akt_dist[iclosejet] = dist[iclosejet] * (
+ inv_pt2[ijet] if inv_pt2[ijet] < inv_pt2[iclosejet] else inv_pt2[iclosejet])
+
+
+def compare_status(working: NPPseudoJets, test: NPPseudoJets):
+ '''Test two different copies of numpy pseudojet containers that should be equal'''
+ dist_diff = working.akt_dist != test.akt_dist
+ idist_diff = np.where(dist_diff)
+ if len(idist_diff[0]) > 0:
+ print(f"Differences found after full scan of NNs: {idist_diff[0]}")
+ for ijet in idist_diff[0]:
+ print(f"{ijet}\nW: {working.print_jet(ijet)}\nT: {test.print_jet(ijet)}")
+ raise RuntimeError("Jet sets are not the same and they should be!")
+
+
+def add_step_to_history(history: NPHistory, jets: list[PseudoJet],
+ parent1: int, parent2: int, jetp_index: int, distance: float):
+ '''Add a merging step to the history of clustering
+ history - list of HistoryElement entities
+ jets - list of pseudojets
+ parent1 - the *history* element which is the parent of this merger
+ parent2 - the *history* element which is the parent of this merger (can be Invalid)
+ jetp_index - the new pseudojet that results from this merger (if both parents exist)
+ distance - the distance metric for this merge step
+ '''
+ max_dij_so_far = max(distance, history.max_dij_so_far[history.size - 1])
+
+ history.append(parent1=parent1, parent2=parent2, jetp_index=jetp_index, dij=distance,
+ max_dij_so_far=max_dij_so_far)
+
+ local_step = history.next - 1
+ logger.debug(f"Added history step {local_step}: {history.parent1[local_step]}")
+
+ if parent1 >= 0:
+ if history.child[parent1] != -1:
+ raise (
+ RuntimeError(
+ f"Internal error. Trying to recombine a parent1 object that has previsously been recombined: {parent1}"
+ )
+ )
+ history.child[parent1] = local_step
+
+ if parent2 >= 0:
+ if history.child[parent2] != -1:
+ raise (
+ RuntimeError(
+ f"Internal error. Trying to recombine a parent1 object that has previsously been recombined: {parent2}"
+ )
+ )
+ history.child[parent2] = local_step
+
+ # get cross-referencing right from PseudoJets
+ if jetp_index >= 0:
+ jets[jetp_index].cluster_history_index = local_step
+
+
+def inclusive_jets(jets: list[PseudoJet], history: NPHistory, ptmin: float = 0.0):
+ '''return all inclusive jets of a ClusterSequence with pt > ptmin'''
+ dcut = ptmin * ptmin
+ jets_local = list()
+ # For inclusive jets with a plugin algorithm, we make no
+ # assumptions about anything (relation of dij to momenta,
+ # ordering of the dij, etc.)
+ for elt in range(history.size - 1, -1, -1):
+ if history.parent2[elt] != BeamJet:
+ continue
+ iparent_jet = history.jetp_index[history.parent1[elt]]
+ jet = jets[iparent_jet]
+ if jet.pt2 >= dcut:
+ jets_local.append(jet)
+
+ return jets_local
+
+
+def basicjetfinder(initial_particles: list[PseudoJet], Rparam: float = 0.8, ptmin: float = 0.0, return_raw=False):
+ """Basic AntiKt Jet finding code"""
+ R2 = Rparam * Rparam
+ invR2 = 1.0 / R2
+
+ # Create a container of PseudoJet objects
+ history = NPHistory(2 * len(initial_particles))
+ Qtot = history.fill_initial_history(initial_particles)
+
+ # Was doing a deepcopy here, but that turns out to be
+ # 1. unnecessary
+ # 2. extremely expensive
+ jets = initial_particles
+
+ # Create the numpy arrays corresponding to the pseudojets that will be used
+ # for fast calculations
+ npjets = NPPseudoJets(len(jets))
+ npjets.set_jets(jets)
+
+ # Setup the nearest neighbours, which is an expensive
+ # initial operation (N^2 scaling here)
+ scan_for_all_nearest_neighbours(npjets.phi, npjets.rap, npjets.inv_pt2,
+ npjets.dist, npjets.akt_dist, npjets.nn,
+ npjets.mask, R2)
+
+ # Each iteration we either merge two jets to one, or we
+ # finalise a jet. Thus it takes a number of iterations
+ # equal to the number of jets to finish
+ for iteration in range(len(initial_particles)):
+ distance, ijetA = find_closest_jets(npjets.akt_dist, npjets.nn)
+ ijetB = npjets.nn[ijetA]
+ # Add normalisation for real distance
+ distance *= invR2
+
+ if (ijetB >= 0):
+ if ijetB < ijetA:
+ ijetA, ijetB = ijetB, ijetA
+ logger.debug(f"Iteration {iteration + 1}: {distance} for jet {ijetA} and jet {ijetB}")
+
+ # Merge jets
+ npjets.mask_slot(ijetA)
+ npjets.mask_slot(ijetB)
+
+ jet_indexA = npjets.jets_index[ijetA]
+ jet_indexB = npjets.jets_index[ijetB]
+
+ merged_jet = jets[jet_indexA] + jets[jet_indexB]
+ imerged_jet = len(jets)
+ jets.append(merged_jet)
+
+ # We recycle the slot of jetA (which is the lowest slot)
+ npjets.insert_jet(merged_jet, slot=ijetA, jet_index=imerged_jet)
+ add_step_to_history(history=history, jets=jets,
+ parent1=jets[jet_indexA].cluster_history_index,
+ parent2=jets[jet_indexB].cluster_history_index,
+ jetp_index=imerged_jet, distance=distance)
+
+ # Get the NNs for the merged pseudojet
+ scan_for_my_nearest_neighbours(ijetA, npjets.phi, npjets.rap, npjets.inv_pt2,
+ npjets.dist, npjets.akt_dist, npjets.nn, npjets.mask, R2)
+ else:
+ logger.debug(f"Iteration {iteration + 1}: {distance} for jet {ijetA} and jet {ijetB}")
+ # Beamjet
+ npjets.mask_slot(ijetA)
+ jet_indexA = npjets.jets_index[ijetA]
+ add_step_to_history(history=history, jets=jets, parent1=jets[jet_indexA].cluster_history_index,
+ parent2=BeamJet,
+ jetp_index=Invalid, distance=distance)
+
+ # Now need to update nearest distances, when pseudojets are unmasked and
+ # had either jetA or jetB as their nearest neighbour
+ # Note, it doesn't matter that we reused the ijetA slot here!
+ if ijetB != -1:
+ jets_to_update = np.logical_and(~npjets.mask, np.logical_or(npjets.nn == ijetA, npjets.nn == ijetB))
+ else:
+ jets_to_update = np.logical_and(~npjets.mask, npjets.nn == ijetA)
+ ijets_to_update = np.where(jets_to_update)
+
+ # Doable without actually needing a loop?
+ for ijet_to_update in ijets_to_update[0]:
+ scan_for_my_nearest_neighbours(ijet_to_update, npjets.phi, npjets.rap, npjets.inv_pt2,
+ npjets.dist, npjets.akt_dist, npjets.nn, npjets.mask, R2)
+
+ # Useful to check that we have done all updates correctly (only for debug!)
+ if logger.level == logging.DEBUG:
+ npjets_copy = deepcopy(npjets)
+ scan_for_all_nearest_neighbours(npjets_copy.phi, npjets_copy.rap, npjets_copy.inv_pt2,
+ npjets_copy.dist, npjets.akt_dist, npjets_copy.nn, npjets_copy.mask, R2)
+ compare_status(npjets, npjets_copy)
+ if return_raw:
+ return jets, history
+ return inclusive_jets(jets, history, ptmin=ptmin)
diff --git a/src/jetfinder/basicjetfinder_types.py b/src/jetfinder/basicjetfinder_types.py
new file mode 100644
index 0000000000000000000000000000000000000000..ea022c05dfbf7ba011f7208abc3dea39209e0c71
--- /dev/null
+++ b/src/jetfinder/basicjetfinder_types.py
@@ -0,0 +1,208 @@
+import numpy as np
+
+from math import atan2, pi, log, sqrt
+
+
+# A few saftey factor constants
+_MaxRap = 1e5
+
+# _invalid_phi = -100.0
+# _invalid_rap = -1.0e200
+
+
+class PseudoJet:
+ def __init__(self, px, py, pz, E):
+ self.px = px
+ self.py = py
+ self.pz = pz
+ self.E = E
+
+ self.pt2 = px * px + py * py
+ self.inv_pt2 = 1.0 / self.pt2
+
+ self.rap = self._set_rap()
+ self.phi = self._set_phi()
+
+ self.cluster_history_index = -1
+
+ def _set_rap(self):
+ if (self.E == abs(self.pz)) and (self.pt2 == 0.0):
+ # Point has infinite rapidity -- convert that into a very large
+ # number, but in such a way that different 0-pt momenta will have
+ # different rapidities (so as to lift the degeneracy between
+ # them) [this can be relevant at parton-level]
+ MaxRapHere = _MaxRap + abs(self.pz)
+ return MaxRapHere if self.pz >= 0.0 else -MaxRapHere
+ effective_m2 = max(0.0, self.m2) # force non tachyonic mass
+ E_plus_pz = self.E + abs(self.pz) # the safer of p+, p-
+ rapidity = 0.5 * log((self.pt2 + effective_m2) / (E_plus_pz * E_plus_pz))
+ return rapidity if self.pz < 0 else -rapidity
+
+ def _set_phi(self):
+ if self.pt2 == 0.0:
+ phi = 0.0
+ else:
+ phi = atan2(self.py, self.px)
+ if phi < 0.0:
+ phi += 2.0 * pi
+ elif phi > 2.0 * pi:
+ phi -= 2.0 * pi
+ return phi
+
+ def __str__(self):
+ return (
+ f"PseudoJet (px: {self.px}, py: {self.py}, pz: {self.pz}, E: {self.E})"
+ )
+ def __repr__(self):
+ return self.__str__()
+
+ @property
+ def pt(self):
+ """transverse momentum"""
+ return sqrt(self.pt2)
+
+ @property
+ def m2(self):
+ """squared invariant mass"""
+ return (self.E + self.pz) * (self.E - self.pz) - self.pt2
+
+ # Need to define the + operator on two jets
+ def __add__(self, jetB):
+ px = self.px + jetB.px
+ py = self.py + jetB.py
+ pz = self.pz + jetB.pz
+ E = self.E + jetB.E
+ return PseudoJet(px, py, pz, E)
+'''Jet merging history as numpy arrays'''
+
+
+class NPHistory:
+ def __init__(self, size: int):
+ '''Initialise a history struture of arrays'''
+ self.size = size
+
+ # Counter for the next slot to fill, which is equivalent to the active 'size'
+ # of the history
+ self.next = 0
+
+ # Index in history where first parent of this jet was created (-1 if this jet is an
+ # original particle)
+ self.parent1 = np.empty(size, dtype=int)
+ self.parent1.fill(-1)
+
+ # Index in history where second parent of this jet was created (-1 if this jet is an
+ # original particle); BeamJet if this history entry just labels the fact that the jet has recombined
+ # with the beam)
+ self.parent2 = np.empty(size, dtype=int)
+ self.parent2.fill(-1)
+
+ # Index in history where the current jet is recombined with another jet to form its child. It
+ # is -1 if this jet does not further recombine
+ self.child = np.empty(size, dtype=int)
+ self.child.fill(-1)
+
+ # Index in the _jets vector where we will find the Jet object corresponding to this jet
+ # (i.e. the jet created at this entry of the history). NB: if this element of the history
+ # corresponds to a beam recombination, then jetp_index=Invalid
+ self.jetp_index = np.empty(size, dtype=int)
+ self.jetp_index.fill(-1)
+
+ # The distance corresponding to the recombination at this stage of the clustering.
+ self.dij = np.zeros(size, dtype=float)
+
+ # The largest recombination distance seen so far in the clustering history.
+ self.max_dij_so_far = np.zeros(size, dtype=float)
+
+ def append(self, parent1: int, parent2: int, jetp_index: int, dij: float, max_dij_so_far: float):
+ '''Append a new item to the history'''
+ if self.next == self.size:
+ raise RuntimeError("History structure is now full, cannot append")
+
+ self.parent1[self.next] = parent1
+ self.parent2[self.next] = parent2
+ self.jetp_index[self.next] = jetp_index
+ self.dij[self.next] = dij
+ self.max_dij_so_far[self.next] = max_dij_so_far
+
+ self.next += 1
+
+ def fill_initial_history(self, jets: list[PseudoJet]) -> float:
+ '''Fill the initial history with source jets'''
+ Qtot = 0.0
+ for ijet, jet in enumerate(jets):
+ self.jetp_index[ijet] = ijet
+ jet.cluster_history_index = ijet
+ Qtot = jet.E
+
+ self.next = len(jets)
+
+ return Qtot
+from math import atan2, pi, log, sqrt
+
+
+# A few saftey factor constants
+_MaxRap = 1e5
+
+# _invalid_phi = -100.0
+# _invalid_rap = -1.0e200
+
+'''Structure of arrays container for holding numpy arrays that correspond to pseudojets'''
+import numpy as np
+from numba import njit
+
+class NPPseudoJets:
+ def __init__(self, size: int):
+ '''Setup blank arrays that will be filled later'''
+ self.size = size
+ self.phi = np.zeros(size, dtype=float) # phi
+ self.rap = np.zeros(size, dtype=float) # rapidity
+ self.inv_pt2 = np.zeros(size, dtype=float) # 1/pt^2
+ self.dist = np.zeros(size, dtype=float) # nearest neighbour geometric distance
+ self.akt_dist = np.zeros(size, dtype=float) # nearest neighbour antikt metric
+ self.nn = np.zeros(size, dtype=int) # index of my nearest neighbour
+ self.mask = np.ones(size, dtype=bool) # if True this is not an active jet anymore
+ self.jets_index = np.zeros(size, dtype=int) # index reference to the PseudoJet list
+
+ def set_jets(self, jets: list[PseudoJet]):
+ if len(jets) > self.phi.size:
+ raise RuntimeError(f"Attempted to fill NP PseudoJets, but containers are too small ({self.size})")
+ for ijet, jet in enumerate(jets):
+ self.phi[ijet] = jet.phi
+ self.rap[ijet] = jet.rap
+ self.inv_pt2[ijet] = jet.inv_pt2
+ self.nn[ijet] = -1
+ self.dist[ijet] = self.akt_dist[ijet] = 1e20
+ self.mask[ijet] = False
+ self.jets_index[ijet] = ijet
+ self.next_slot = len(jets)
+ self.dist[len(jets):] = self.akt_dist[len(jets):] = 1e20
+
+ def __str__(self) -> str:
+ _string = ""
+ for ijet in range(self.phi.size):
+ _string += (f"{ijet} - {self.phi[ijet]} {self.rap[ijet]} {self.inv_pt2[ijet]} {self.dist[ijet]} "
+ f"{self.akt_dist[ijet]} {self.nn[ijet]} {self.jets_index[ijet]} "
+ f"(mask: {self.mask[ijet]})\n")
+ return _string
+
+ def mask_slot(self, ijet: int):
+ self.mask[ijet] = True
+ self.dist[ijet] = self.akt_dist[ijet] = 1e20
+
+ def insert_jet(self, jet: PseudoJet, slot: int, jet_index: int):
+ '''Add a new pseudojet into the numpy structures'''
+ if slot >= self.size:
+ raise RuntimeError(
+ f"Attempted to fill a jet into a slot that doesn't exist (slot {slot} >= size {self.size})")
+ self.phi[slot] = jet.phi
+ self.rap[slot] = jet.rap
+ self.inv_pt2[slot] = jet.inv_pt2
+ self.nn[slot] = -1
+ self.dist[slot] = self.akt_dist[slot] = 1e20 # Necessary?
+ self.jets_index[slot] = jet_index
+ self.mask[slot] = False
+
+ def print_jet(self, ijet: int) -> str:
+ return (f"{ijet} - {self.phi[ijet]} {self.rap[ijet]} {self.inv_pt2[ijet]} "
+ f"{self.dist[ijet]} {self.akt_dist[ijet]} {self.nn[ijet]} {self.jets_index[ijet]} "
+ f"(mask: {self.mask[ijet]} -> {self.mask[self.nn[ijet]] if self.nn[ijet] >= 0 else None})")
diff --git a/src/jetfinder/clustering.py b/src/jetfinder/clustering.py
new file mode 100644
index 0000000000000000000000000000000000000000..d8d7a1899cd1257d8d9c6c3afac34d68c9a1a456
--- /dev/null
+++ b/src/jetfinder/clustering.py
@@ -0,0 +1,136 @@
+import hdbscan
+from tqdm import tqdm
+import numpy as np
+import torch
+from sklearn.cluster import DBSCAN
+
+def lorentz_norm_comp(vec1, vec2):
+ diff = vec1-vec2
+ norm_squared = np.abs(diff[0]**2 - diff[1]**2 - diff[2] ** 2 - diff[3]**2)
+ return np.sqrt(norm_squared)
+
+def get_distance_matrix(v):
+ # compute the cosine similarity between vectors in matrix, fast format
+ # v is a numpy array
+ # returns a numpy array
+ if torch.is_tensor(v):
+ v = v.double().numpy()
+ dot_product = np.dot(v, v.T)
+ magnitude = np.sqrt(np.sum(np.square(v), axis=1))
+ magnitude = magnitude[:, np.newaxis]
+ return dot_product / (magnitude * magnitude.T)
+
+def get_distance_matrix_Lorentz(v):
+ # Lorentz cosine similarity distance metric
+ # Lorentz dot product:
+ if torch.is_tensor(v):
+ v = v.double().numpy()
+ dot_product = np.outer(v[:, 0], v[:, 0]) - np.outer(v[:, 1], v[:, 1]) - np.outer(v[:, 2], v[:, 2]) - np.outer(v[:, 3], v[:, 3])
+ #magnitude = np.sqrt(np.abs(np.sum(np.square(v), axis=1)))
+ # lorentz magnitude
+ magnitude = np.sqrt(np.abs(v[:, 0]**2 - v[:, 1]**2 - v[:, 2] ** 2 - v[:, 3]**2))
+ magnitude = magnitude[:, np.newaxis]
+ return dot_product #/ (magnitude * magnitude.T)
+
+def custom_metric(xyz, pt):
+ """
+ Computes the distance matrix where the distance function is defined as:
+ Euclidean distance between two points in xyz space * min(pt1, pt2)
+
+ Parameters:
+ xyz (numpy.ndarray): An (N, 3) array of N points in 3D space.
+ pt (numpy.ndarray): A (N,) array of scalars associated with each point.
+
+ Returns:
+ numpy.ndarray: An (N, N) distance matrix.
+ """
+ N = xyz.shape[0]
+ print("Len", N)
+ distance_matrix = np.zeros((N, N))
+
+ for i in range(N):
+ for j in range(N):
+ if i != j:
+ euclidean_distance = np.linalg.norm(xyz[i] - xyz[j])
+ scale_factor = min(pt[i], pt[j])
+ distance_matrix[i, j] = euclidean_distance * scale_factor
+
+ return distance_matrix
+
+def get_clustering_labels(coords, batch_idx, min_cluster_size=10, min_samples=20, epsilon=0.1, bar=False,
+ lorentz_cos_sim=False, cos_sim=False, return_labels_event_idx=False, pt=None):
+ # return_labels_event_idx: If True, it will return the labels with unique numbers and event_idx tensor for each label
+ labels = []
+ labels_no_reindex = []
+ it = np.unique(batch_idx)
+ labels_event_idx = []
+ max_cluster_idx = 0
+ count = 0
+ if bar:
+ it = tqdm(it)
+ for i in it:
+ filt = batch_idx == i
+ c = coords[filt]
+ kwargs = {}
+ if lorentz_cos_sim:
+ kwargs["metric"] = "precomputed"
+ c = get_distance_matrix_Lorentz(c)
+ #print(c)
+ elif cos_sim:
+ kwargs["metric"] = "precomputed"
+ c = get_distance_matrix(c)
+ elif pt is not None:
+ kwargs["metric"] = "precomputed"
+ c = custom_metric(c, pt)
+ clusterer = hdbscan.HDBSCAN(min_cluster_size=min_cluster_size, min_samples=min_samples,
+ cluster_selection_epsilon=epsilon, **kwargs)
+ try:
+ cluster_labels = clusterer.fit_predict(c)
+ except Exception as e:
+ print("Error in clustering", e)
+ print("Coords", c.shape)
+ print("Batch idx", batch_idx.shape)
+ print("Setting the labels to -1")
+ cluster_labels = np.full(len(c), -1)
+ labels_no_reindex.append(cluster_labels)
+ if return_labels_event_idx:
+ num_clusters = np.max(cluster_labels) + 1
+ labels_event_idx.append([count] * (num_clusters))
+ count += 1
+ cluster_labels += max_cluster_idx
+ max_cluster_idx += num_clusters
+ labels.append(cluster_labels)
+ assert len(np.concatenate(labels)) == len(coords)
+ if return_labels_event_idx:
+ return np.concatenate(labels_no_reindex), np.concatenate(labels), np.concatenate(labels_event_idx)
+ return np.concatenate(labels)
+
+
+def get_clustering_labels_dbscan(coords, pt, batch_idx, min_samples=10, epsilon=0.1, bar=False, return_labels_event_idx=False):
+ # return_labels_event_idx: If True, it will return the labels with unique numbers and event_idx tensor for each label
+ labels = []
+ labels_no_reindex = []
+ it = np.unique(batch_idx)
+ labels_event_idx = []
+ max_cluster_idx = 0
+ count = 0
+ if bar:
+ it = tqdm(it)
+ for i in it:
+ filt = batch_idx == i
+ c = coords[filt]
+ clusterer = DBSCAN(min_samples=min_samples, eps=epsilon)
+ cluster_labels = clusterer.fit_predict(c, sample_weight=pt[filt])
+ labels_no_reindex.append(cluster_labels)
+ if return_labels_event_idx:
+ num_clusters = np.max(cluster_labels) + 1
+ labels_event_idx.append([count] * (num_clusters))
+ count += 1
+ cluster_labels += max_cluster_idx
+ max_cluster_idx += num_clusters
+ labels.append(cluster_labels)
+ assert len(np.concatenate(labels)) == len(coords)
+ if return_labels_event_idx:
+ return np.concatenate(labels_no_reindex), np.concatenate(labels), np.concatenate(labels_event_idx)
+ return np.concatenate(labels)
+
diff --git a/src/layers/GravNetConv.py b/src/layers/GravNetConv.py
new file mode 100644
index 0000000000000000000000000000000000000000..cf39ab4380c7aaa2ae929770bca94792eaaa4634
--- /dev/null
+++ b/src/layers/GravNetConv.py
@@ -0,0 +1,133 @@
+from typing import Optional, Union
+from torch_geometric.typing import OptTensor, PairTensor, PairOptTensor
+
+import torch
+from torch import Tensor
+from torch.nn import Linear
+from torch_scatter import scatter
+from torch_geometric.nn.conv import MessagePassing
+
+import dgl
+
+
+class GravNetConv(MessagePassing):
+ r"""The GravNet operator from the `"Learning Representations of Irregular
+ Particle-detector Geometry with Distance-weighted Graph
+ Networks" `_ paper, where the graph is
+ dynamically constructed using nearest neighbors.
+ The neighbors are constructed in a learnable low-dimensional projection of
+ the feature space.
+ A second projection of the input feature space is then propagated from the
+ neighbors to each vertex using distance weights that are derived by
+ applying a Gaussian function to the distances.
+ Args:
+ in_channels (int): The number of input channels.
+ out_channels (int): The number of output channels.
+ space_dimensions (int): The dimensionality of the space used to
+ construct the neighbors; referred to as :math:`S` in the paper.
+ propagate_dimensions (int): The number of features to be propagated
+ between the vertices; referred to as :math:`F_{\textrm{LR}}` in the
+ paper.
+ k (int): The number of nearest neighbors.
+ num_workers (int): Number of workers to use for k-NN computation.
+ Has no effect in case :obj:`batch` is not :obj:`None`, or the input
+ lies on the GPU. (default: :obj:`1`)
+ **kwargs (optional): Additional arguments of
+ :class:`torch_geometric.nn.conv.MessagePassing`.
+ """
+
+ def __init__(
+ self,
+ in_channels: int,
+ out_channels: int,
+ space_dimensions: int,
+ propagate_dimensions: int,
+ k: int,
+ num_workers: int = 1,
+ **kwargs
+ ):
+ super(GravNetConv, self).__init__(flow="target_to_source", **kwargs)
+
+ self.in_channels = in_channels
+ self.out_channels = out_channels
+ self.k = k
+ self.num_workers = num_workers
+
+ self.lin_s = Linear(in_channels, space_dimensions, bias=False)
+ self.lin_s.weight.data.copy_(torch.eye(space_dimensions, in_channels))
+ self.lin_h = Linear(in_channels, propagate_dimensions)
+ self.lin = Linear(in_channels + 2 * propagate_dimensions, out_channels)
+
+ # self.reset_parameters()
+
+ def reset_parameters(self):
+ self.lin_s.reset_parameters()
+ self.lin_h.reset_parameters()
+ self.lin.reset_parameters()
+
+ def forward(self, g, x: Tensor, batch: OptTensor = None) -> Tensor:
+ """"""
+
+ assert x.dim() == 2, "Static graphs not supported in `GravNetConv`."
+
+ b: OptTensor = None
+ if isinstance(batch, Tensor):
+ b = batch
+ h_l: Tensor = self.lin_h(x)
+
+ s_l: Tensor = self.lin_s(x)
+
+ graph = knn_per_graph(g, s_l, self.k)
+ graph.ndata["s_l"] = s_l
+ row = graph.edges()[0]
+ col = graph.edges()[1]
+ edge_index = torch.stack([row, col], dim=0)
+
+ edge_weight = (s_l[edge_index[0]] - s_l[edge_index[1]]).pow(2).sum(-1)
+ edge_weight = torch.exp(-10.0 * edge_weight) # 10 gives a better spread
+
+ # propagate_type: (x: OptPairTensor, edge_weight: OptTensor)
+ #! this is the output_feature_transform
+ out = self.propagate(
+ edge_index,
+ x=[h_l, None],
+ edge_weight=edge_weight,
+ size=(s_l.size(0), s_l.size(0)),
+ )
+
+ #! not sure this cat is exactly the same that is happening in the RaggedGravNet but they also cat
+
+ return self.lin(torch.cat([out, x], dim=-1)), graph, s_l
+
+ def message(self, x_j: Tensor, edge_weight: Tensor) -> Tensor:
+ return x_j * edge_weight.unsqueeze(1)
+
+ def aggregate(
+ self, inputs: Tensor, index: Tensor, dim_size: Optional[int] = None
+ ) -> Tensor:
+
+ out_mean = scatter(
+ inputs, index, dim=self.node_dim, dim_size=dim_size, reduce="mean"
+ )
+ out_max = scatter(
+ inputs, index, dim=self.node_dim, dim_size=dim_size, reduce="max"
+ )
+ return torch.cat([out_mean, out_max], dim=-1)
+
+ def __repr__(self):
+ return "{}({}, {}, k={})".format(
+ self.__class__.__name__, self.in_channels, self.out_channels, self.k
+ )
+
+
+def knn_per_graph(g, sl, k):
+ graphs_list = dgl.unbatch(g)
+ node_counter = 0
+ new_graphs = []
+ for graph in graphs_list:
+ non = graph.number_of_nodes()
+ sls_graph = sl[node_counter : node_counter + non]
+ new_graph = dgl.knn_graph(sls_graph, k, exclude_self=True)
+ new_graphs.append(new_graph)
+ node_counter = node_counter + non
+ return dgl.batch(new_graphs)
diff --git a/src/layers/GravNetConv2.py b/src/layers/GravNetConv2.py
new file mode 100644
index 0000000000000000000000000000000000000000..356bc55cf121845df1b03e450e0ae1d333f1e846
--- /dev/null
+++ b/src/layers/GravNetConv2.py
@@ -0,0 +1,204 @@
+from typing import Optional, Union
+from torch_geometric.typing import OptTensor, PairTensor, PairOptTensor
+
+import torch
+from torch import Tensor
+from torch.nn import Linear
+from torch_scatter import scatter
+from torch_geometric.nn.conv import MessagePassing
+import torch.nn as nn
+import dgl
+import dgl.function as fn
+import numpy as np
+from dgl.nn import EdgeWeightNorm
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+
+import torch_cmspepr
+from src.layers.GravNetConv3 import knn_per_graph
+
+
+def src_dot_dst(src_field, dst_field, out_field):
+ def func(edges):
+ return {
+ out_field: (edges.src[src_field] * edges.dst[dst_field]).sum(
+ -1, keepdim=True
+ )
+ }
+
+ return func
+
+
+def src_dot_distance(src_field, dst_field, out_field):
+ def func(edges):
+ dij = (edges.src[src_field] - edges.dst[dst_field]).pow(2).sum(-1, keepdim=True)
+ edge_weight = torch.sqrt(dij + 1e-6)
+ edge_weight = torch.exp(-torch.square(dij))
+ return {out_field: edge_weight}
+
+ return func
+
+
+def scaled_exp(field, scale_constant):
+ def func(edges):
+ # clamp for softmax numerical stability
+ return {field: torch.exp((edges.data[field] / scale_constant).clamp(-5, 5))}
+
+ return func
+
+
+def score_dij(field):
+ def func(edges):
+ # clamp for softmax numerical stability
+ return {field: edges.data["score"].view(-1) * edges.data["dij"].view(-1)}
+
+ return func
+
+
+class MultiHeadAttentionLayer(nn.Module):
+ def __init__(self, in_dim, out_dim, num_heads, use_bias):
+ super().__init__()
+
+ self.out_dim = out_dim
+ self.num_heads = num_heads
+
+ if use_bias:
+ self.Q = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ self.K = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ self.V = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ else:
+ self.Q = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+ self.K = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+ self.V = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+
+ def propagate_attention(self, g):
+ # Compute attention score
+ g.apply_edges(src_dot_dst("K_h", "Q_h", "score")) # , edges)
+ g.apply_edges(scaled_exp("score", np.sqrt(self.out_dim)))
+
+ g.apply_edges(src_dot_distance("s_l", "s_l", "dij"))
+ g.apply_edges(score_dij("news"))
+ # Send weighted values to target nodes
+ eids = g.edges()
+ g.send_and_recv(eids, fn.u_mul_e("V_h", "news", "V_h"), fn.sum("V_h", "wV"))
+ g.send_and_recv(eids, fn.copy_e("score", "score"), fn.sum("score", "z"))
+
+ def forward(self, g, h):
+
+ Q_h = self.Q(h)
+ K_h = self.K(h)
+ V_h = self.V(h)
+
+ # Reshaping into [num_nodes, num_heads, feat_dim] to
+ # get projections for multi-head attention
+ g.ndata["Q_h"] = Q_h.view(-1, self.num_heads, self.out_dim)
+ g.ndata["K_h"] = K_h.view(-1, self.num_heads, self.out_dim)
+ g.ndata["V_h"] = V_h.view(-1, self.num_heads, self.out_dim)
+ self.propagate_attention(g)
+ g.ndata["z"] = g.ndata["z"].tile((1, 1, self.out_dim))
+ mask_empty = g.ndata["z"] > 0
+ head_out = g.ndata["wV"]
+ head_out[mask_empty] = head_out[mask_empty] / (g.ndata["z"][mask_empty])
+ g.ndata["z"] = g.ndata["z"][:, :, 0].view(
+ g.ndata["wV"].shape[0], self.num_heads, 1
+ )
+ return head_out
+
+
+class GraphTransformerLayer(nn.Module):
+ """
+ Param:
+ """
+
+ def __init__(
+ self,
+ in_dim,
+ out_dim,
+ num_heads,
+ k,
+ dropout=0.0,
+ layer_norm=False,
+ batch_norm=True,
+ residual=False,
+ use_bias=False,
+ ):
+ super().__init__()
+
+ self.in_channels = in_dim
+ self.out_channels = out_dim
+ self.num_heads = num_heads
+ self.dropout = dropout
+ self.residual = residual
+ self.layer_norm = layer_norm
+ self.batch_norm = batch_norm
+ self.k = k
+ space_dimensions = 3
+ self.lin_s = Linear(self.in_channels, space_dimensions, bias=False)
+ self.lin_h = Linear(self.in_channels, self.out_channels)
+ self.lin = Linear(self.in_channels + self.out_channels, self.out_channels)
+ self.attention = MultiHeadAttentionLayer(
+ in_dim, out_dim // num_heads, num_heads, use_bias
+ )
+
+ self.O = nn.Linear(out_dim, out_dim)
+
+ if self.layer_norm:
+ self.layer_norm1 = nn.LayerNorm(out_dim)
+
+ if self.batch_norm:
+ self.batch_norm1 = nn.BatchNorm1d(out_dim)
+
+ # FFN
+ self.FFN_layer1 = nn.Linear(out_dim, out_dim * 2)
+ self.FFN_layer2 = nn.Linear(out_dim * 2, out_dim)
+
+ if self.layer_norm:
+ self.layer_norm2 = nn.LayerNorm(out_dim)
+
+ if self.batch_norm:
+ self.batch_norm2 = nn.BatchNorm1d(out_dim)
+
+ def forward(self, g, h):
+ h_l = self.lin_h(h)
+ s_l = self.lin_s(h)
+ graph = knn_per_graph(g, s_l, self.k)
+ graph.ndata["s_l"] = s_l
+ h_in1 = h_l # for first residual connection
+
+ # multi-head attention out
+ attn_out = self.attention(graph, h)
+ h = attn_out.view(-1, self.out_channels)
+
+ h = F.dropout(h, self.dropout, training=self.training)
+
+ h = self.O(h)
+
+ h = self.lin(torch.cat((h_l, h), dim=1))
+ if self.residual:
+ h = h_in1 + h # residual connection
+
+ if self.layer_norm:
+ h = self.layer_norm1(h)
+
+ if self.batch_norm:
+ h = self.batch_norm1(h)
+
+ h_in2 = h # for second residual connection
+
+ # FFN
+ h = self.FFN_layer1(h)
+ h = F.relu(h)
+ h = F.dropout(h, self.dropout, training=self.training)
+ h = self.FFN_layer2(h)
+
+ if self.residual:
+ h = h_in2 + h # residual connection
+
+ if self.layer_norm:
+ h = self.layer_norm2(h)
+
+ if self.batch_norm:
+ h = self.batch_norm2(h)
+
+ return h, s_l
diff --git a/src/layers/GravNetConv3.py b/src/layers/GravNetConv3.py
new file mode 100644
index 0000000000000000000000000000000000000000..d41b452df3025ae3622ba17468f4deabc0299df7
--- /dev/null
+++ b/src/layers/GravNetConv3.py
@@ -0,0 +1,272 @@
+from typing import Optional, Union
+from torch_geometric.typing import OptTensor, PairTensor, PairOptTensor
+
+import torch
+from torch import Tensor
+from torch.nn import Linear
+from torch_scatter import scatter
+from torch_geometric.nn.conv import MessagePassing
+import torch.nn as nn
+import dgl
+import dgl.function as fn
+import numpy as np
+from dgl.nn import EdgeWeightNorm
+
+# import torch_cmspepr
+
+
+class GravNetConv(MessagePassing):
+ """The GravNet operator from the `"Learning Representations of Irregular
+ Particle-detector Geometry with Distance-weighted Graph
+ Networks" `_ paper, where the graph is
+ dynamically constructed using nearest neighbors.
+ The neighbors are constructed in a learnable low-dimensional projection of
+ the feature space.
+ A second projection of the input feature space is then propagated from the
+ neighbors to each vertex using distance weights that are derived by
+ applying a Gaussian function to the distances.
+ Args:
+ in_channels (int): The number of input channels.
+ out_channels (int): The number of output channels.
+ space_dimensions (int): The dimensionality of the space used to
+ construct the neighbors; referred to as :math:`S` in the paper.
+ propagate_dimensions (int): The number of features to be propagated
+ between the vertices; referred to as :math:`F_{\textrm{LR}}` in the
+ paper.
+ k (int): The number of nearest neighbors.
+ num_workers (int): Number of workers to use for k-NN computation.
+ Has no effect in case :obj:`batch` is not :obj:`None`, or the input
+ lies on the GPU. (default: :obj:`1`)
+ **kwargs (optional): Additional arguments of
+ :class:`torch_geometric.nn.conv.MessagePassing`.
+ """
+
+ def __init__(
+ self,
+ in_channels: int,
+ out_channels: int,
+ space_dimensions: int,
+ propagate_dimensions: int,
+ k: int,
+ num_workers: int = 1,
+ weird_batchnom=False,
+ **kwargs
+ ):
+ super(GravNetConv, self).__init__(flow="target_to_source", **kwargs)
+
+ self.in_channels = in_channels
+ self.out_channels = out_channels
+ self.k = k
+ self.num_workers = num_workers
+ # if weird_batchnom:
+ # self.batchnorm_gravconv = WeirdBatchNorm(out_channels)
+ # else:
+ # self.batchnorm_gravconv = nn.BatchNorm1d(out_channels)
+ self.lin_s = Linear(in_channels, space_dimensions, bias=False)
+ # self.lin_s.weight.data.copy_(torch.eye(space_dimensions, in_channels))
+ # torch.nn.init.xavier_uniform_(self.lin_s.weight, gain=0.001)
+ self.lin_h = Linear(in_channels, propagate_dimensions)
+ self.lin = Linear(in_channels + 2 * propagate_dimensions, out_channels)
+ self.norm = EdgeWeightNorm(norm="right", eps=0.0)
+ # self.reset_parameters()
+
+ def reset_parameters(self):
+ self.lin_s.reset_parameters()
+ self.lin_h.reset_parameters()
+ # self.lin.reset_parameters()
+
+ def forward(
+ self, g, x: Tensor, original_coords: Tensor, batch: OptTensor = None
+ ) -> Tensor:
+ """"""
+
+ assert x.dim() == 2, "Static graphs not supported in `GravNetConv`."
+
+ b: OptTensor = None
+ if isinstance(batch, Tensor):
+ b = batch
+ h_l: Tensor = self.lin_h(x) #! input_feature_transform
+
+ # print("weights input_feature_transform", self.lin_h.weight.data)
+ # print("bias input_feature_transform", self.lin_h.bias.data)
+
+ s_l: Tensor = self.lin_s(x)
+ # print("weights input_spatial_transform", self.lin_s.weight.data)
+ # print("bias input_spatial_transform", self.lin_s.bias.data)
+ # print("coordinates INPUTS TO FIRST LAYER")
+ # print(s_l)
+ graph = knn_per_graph(g, s_l, self.k)
+ graph.ndata["s_l"] = s_l
+ row = graph.edges()[0]
+ col = graph.edges()[1]
+ edge_index = torch.stack([row, col], dim=0)
+
+ edge_weight = (s_l[edge_index[0]] - s_l[edge_index[1]]).pow(2).sum(-1)
+ # print("distancesq distancesq distancesq")
+ # print(edge_weight)
+ # edge_weight = edge_weight + 1e-5
+ #! normalized edge weight
+ # print("edge weight", edge_weight)
+ # edge_weight = self.norm(graph, edge_weight)
+ # print("normalized edge weight", edge_weight)
+ # edge_weight = torch.exp(-10.0 * edge_weight) # 10 gives a better spread
+
+ #! AverageDistanceRegularizer
+ # dist = edge_weight
+ # dist = torch.sqrt(dist + 1e-6)
+ # graph.edata["dist"] = dist
+ # graph.ndata["ones"] = torch.ones_like(s_l)
+ # # average dist per node and divide by the number of neighbourgs
+ # graph.update_all(fn.u_mul_e("ones", "dist", "m"), fn.mean("m", "dist"))
+ # avdist = graph.ndata["dist"]
+ # loss_regularizing_neig = 1e-3 * torch.mean(torch.square(avdist - 0.5))
+ # propagate_type: (x: OptPairTensor, edge_weight: OptTensor)
+
+ #! LLRegulariseGravNetSpace
+ #! mean distance in original space vs distance in gravnet space between the neigh
+ # ? This code was checked on 12.01.24 and is correct
+ # graph.edata["_edge_w"] = dist
+ # graph.update_all(fn.copy_e("_edge_w", "m"), fn.sum("m", "in_weight"))
+ # degs = graph.dstdata["in_weight"] + 1e-4
+ # graph.dstdata["_dst_in_w"] = 1 / degs
+ # graph.apply_edges(
+ # lambda e: {"_norm_edge_weights": e.dst["_dst_in_w"] * e.data["_edge_w"]}
+ # )
+ # dist = graph.edata["_norm_edge_weights"]
+
+ # original_coord = g.ndata["pos_hits_xyz"]
+ # #! distance in original coordinates
+ # gndist = (
+ # (original_coord[edge_index[0]] - original_coord[edge_index[1]])
+ # .pow(2)
+ # .sum(-1)
+ # )
+
+ # gndist = torch.sqrt(gndist + 1e-6)
+ # graph.edata["_edge_w_gndist"] = dist
+ # graph.update_all(fn.copy_e("_edge_w_gndist", "m"), fn.sum("m", "in_weight"))
+ # degs = graph.dstdata["in_weight"] + 1e-4
+ # graph.dstdata["_dst_in_w"] = 1 / degs
+ # graph.apply_edges(
+ # lambda e: {"_norm_edge_weights_gn": e.dst["_dst_in_w"] * e.data["_edge_w"]}
+ # )
+ # gndist = graph.edata["_norm_edge_weights_gn"]
+ # loss_llregulariser = torch.mean(torch.square(dist - gndist))
+ # print(torch.square(dist - gndist))
+ #! this is the output_feature_transform
+ edge_weight = torch.sqrt(edge_weight + 1e-6)
+ edge_weight = torch.exp(-torch.square(edge_weight))
+ out = self.propagate(
+ edge_index,
+ x=h_l,
+ edge_weight=edge_weight,
+ size=(s_l.size(0), s_l.size(0)),
+ )
+ # print("outfeats", out)
+ #! not sure this cat is exactly the same that is happening in the RaggedGravNet but they also cat
+ out = self.lin(torch.cat([out, x], dim=-1))
+ # out = self.batchnorm_gravconv(out)
+ return (
+ out,
+ graph,
+ s_l,
+ 0, # loss_regularizing_neig,
+ 0, # loss_llregulariser,
+ )
+
+ def message(self, x_j: Tensor, edge_weight: Tensor) -> Tensor:
+ return x_j * edge_weight.unsqueeze(1)
+
+ def aggregate(
+ self, inputs: Tensor, index: Tensor, dim_size: Optional[int] = None
+ ) -> Tensor:
+
+ out_mean = scatter(
+ inputs, index, dim=self.node_dim, dim_size=dim_size, reduce="mean"
+ )
+
+ out_max = scatter(
+ inputs, index, dim=self.node_dim, dim_size=dim_size, reduce="max"
+ )
+ return torch.cat([out_mean, out_max], dim=-1)
+
+ def __repr__(self):
+ return "{}({}, {}, k={})".format(
+ self.__class__.__name__, self.in_channels, self.out_channels, self.k
+ )
+
+
+def knn_per_graph(g, sl, k):
+ graphs_list = dgl.unbatch(g)
+ node_counter = 0
+ new_graphs = []
+ for graph in graphs_list:
+ non = graph.number_of_nodes()
+ sls_graph = sl[node_counter : node_counter + non]
+ # new_graph = dgl.knn_graph(sls_graph, k, exclude_self=True)
+ edge_index = torch_cmspepr.knn_graph(sls_graph, k=k)
+ new_graph = dgl.graph(
+ (edge_index[0], edge_index[1]), num_nodes=sls_graph.shape[0]
+ )
+ new_graph = dgl.remove_self_loop(new_graph)
+ new_graphs.append(new_graph)
+ node_counter = node_counter + non
+ return dgl.batch(new_graphs)
+
+
+class WeirdBatchNorm(nn.Module):
+ def __init__(self, n_neurons, eps=1e-5):
+
+ super(WeirdBatchNorm, self).__init__()
+
+ # stores number of neuros
+ self.n_neurons = n_neurons
+
+ # initinalize batch normalization parameters
+ self.gamma = nn.Parameter(torch.ones(self.n_neurons))
+ self.beta = nn.Parameter(torch.zeros(self.n_neurons))
+ print("self beta requires grad", self.beta.requires_grad)
+ self.mean = torch.zeros(self.n_neurons)
+ self.den = torch.ones(self.n_neurons)
+ self.viscosity = 0.5
+ self.epsilon = eps
+ self.fluidity_decay = 1e-4
+ self.max_viscosity = 1
+
+ def forward(self, input):
+ x = input.detach()
+ mu = x.mean(dim=0)
+ var = x.var(dim=0, unbiased=False)
+
+ mu_update = self._calc_update(self.mean, mu)
+ self.mean = mu_update
+ var_update = self._calc_update(self.den, var)
+ self.den = var_update
+
+ # normalization
+ center_input = x - self.mean
+ denominator = self.den + self.epsilon
+ denominator = denominator.sqrt()
+
+ in_hat = center_input / denominator
+
+ self._update_viscosity()
+
+ # scale and shift
+ out = self.gamma * in_hat + self.beta
+
+ return out
+
+ def _calc_update(self, old, new):
+ delta = new - old.to(new.device)
+ update = old.to(new.device) + (1 - self.viscosity) * delta.to(new.device)
+ update = update.to(new.device)
+ return update
+
+ def _update_viscosity(self):
+ if self.fluidity_decay > 0:
+ newvisc = (
+ self.viscosity
+ + (self.max_viscosity - self.viscosity) * self.fluidity_decay
+ )
+ self.viscosity = newvisc
diff --git a/src/layers/gated_gcn_layer.py b/src/layers/gated_gcn_layer.py
new file mode 100644
index 0000000000000000000000000000000000000000..6684835cdc0614f492bc284c9d3c0fdc13fdd6e8
--- /dev/null
+++ b/src/layers/gated_gcn_layer.py
@@ -0,0 +1,231 @@
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+import dgl.function as fn
+
+"""
+ ResGatedGCN: Residual Gated Graph ConvNets
+ An Experimental Study of Neural Networks for Variable Graphs (Xavier Bresson and Thomas Laurent, ICLR 2018)
+ https://arxiv.org/pdf/1711.07553v2.pdf
+"""
+
+class GatedGCNLayer(nn.Module):
+ """
+ Param: []
+ """
+ def __init__(self, input_dim, output_dim, dropout, batch_norm, residual=False):
+ super().__init__()
+ self.in_channels = input_dim
+ self.out_channels = output_dim
+ self.dropout = dropout
+ self.batch_norm = batch_norm
+ self.residual = residual
+
+ if input_dim != output_dim:
+ self.residual = False
+
+ self.A = nn.Linear(input_dim, output_dim, bias=True)
+ self.B = nn.Linear(input_dim, output_dim, bias=True)
+ self.C = nn.Linear(input_dim, output_dim, bias=True)
+ self.D = nn.Linear(input_dim, output_dim, bias=True)
+ self.E = nn.Linear(input_dim, output_dim, bias=True)
+ self.bn_node_h = nn.BatchNorm1d(output_dim)
+ self.bn_node_e = nn.BatchNorm1d(output_dim)
+
+ def message_func(self, edges):
+ Bh_j = edges.src['Bh']
+ e_ij = edges.data['Ce'] + edges.src['Dh'] + edges.dst['Eh'] # e_ij = Ce_ij + Dhi + Ehj
+ edges.data['e'] = e_ij
+ return {'Bh_j' : Bh_j, 'e_ij' : e_ij}
+
+ def reduce_func(self, nodes):
+ Ah_i = nodes.data['Ah']
+ Bh_j = nodes.mailbox['Bh_j']
+ e = nodes.mailbox['e_ij']
+ sigma_ij = torch.sigmoid(e) # sigma_ij = sigmoid(e_ij)
+ #h = Ah_i + torch.mean( sigma_ij * Bh_j, dim=1 ) # hi = Ahi + mean_j alpha_ij * Bhj
+ h = Ah_i + torch.sum( sigma_ij * Bh_j, dim=1 ) / ( torch.sum( sigma_ij, dim=1 ) + 1e-6 ) # hi = Ahi + sum_j eta_ij/sum_j' eta_ij' * Bhj <= dense attention
+ return {'h' : h}
+
+ def forward(self, g, h, e):
+
+ h_in = h # for residual connection
+ e_in = e # for residual connection
+
+ g.ndata['h'] = h
+ g.ndata['Ah'] = self.A(h)
+ g.ndata['Bh'] = self.B(h)
+ g.ndata['Dh'] = self.D(h)
+ g.ndata['Eh'] = self.E(h)
+ g.edata['e'] = e
+ g.edata['Ce'] = self.C(e)
+
+ g.apply_edges(fn.u_add_v('Dh', 'Eh', 'DEh'))
+ g.edata['e'] = g.edata['DEh'] + g.edata['Ce']
+ g.edata['sigma'] = torch.sigmoid(g.edata['e'])
+ g.update_all(fn.u_mul_e('Bh', 'sigma', 'm'), fn.sum('m', 'sum_sigma_h'))
+ g.update_all(fn.copy_e('sigma', 'm'), fn.sum('m', 'sum_sigma'))
+ g.ndata['h'] = g.ndata['Ah'] + g.ndata['sum_sigma_h'] / (g.ndata['sum_sigma'] + 1e-6)
+ #g.update_all(self.message_func,self.reduce_func)
+ h = g.ndata['h'] # result of graph convolution
+ e = g.edata['e'] # result of graph convolution
+
+ if self.batch_norm:
+ h = self.bn_node_h(h) # batch normalization
+ e = self.bn_node_e(e) # batch normalization
+
+ h = F.relu(h) # non-linear activation
+ e = F.relu(e) # non-linear activation
+
+ if self.residual:
+ h = h_in + h # residual connection
+ e = e_in + e # residual connection
+
+ h = F.dropout(h, self.dropout, training=self.training)
+ e = F.dropout(e, self.dropout, training=self.training)
+
+ return h, e
+
+ def __repr__(self):
+ return '{}(in_channels={}, out_channels={})'.format(self.__class__.__name__,
+ self.in_channels,
+ self.out_channels)
+
+
+##############################################################
+#
+# Additional layers for edge feature/representation analysis
+#
+##############################################################
+
+
+class GatedGCNLayerEdgeFeatOnly(nn.Module):
+ """
+ Param: []
+ """
+ def __init__(self, input_dim, output_dim, dropout, batch_norm, residual=False):
+ super().__init__()
+ self.in_channels = input_dim
+ self.out_channels = output_dim
+ self.dropout = dropout
+ self.batch_norm = batch_norm
+ self.residual = residual
+
+ if input_dim != output_dim:
+ self.residual = False
+
+ self.A = nn.Linear(input_dim, output_dim, bias=True)
+ self.B = nn.Linear(input_dim, output_dim, bias=True)
+ self.D = nn.Linear(input_dim, output_dim, bias=True)
+ self.E = nn.Linear(input_dim, output_dim, bias=True)
+ self.bn_node_h = nn.BatchNorm1d(output_dim)
+
+ def message_func(self, edges):
+ Bh_j = edges.src['Bh']
+ e_ij = edges.src['Dh'] + edges.dst['Eh'] # e_ij = Dhi + Ehj
+ edges.data['e'] = e_ij
+ return {'Bh_j' : Bh_j, 'e_ij' : e_ij}
+
+ def reduce_func(self, nodes):
+ Ah_i = nodes.data['Ah']
+ Bh_j = nodes.mailbox['Bh_j']
+ e = nodes.mailbox['e_ij']
+ sigma_ij = torch.sigmoid(e) # sigma_ij = sigmoid(e_ij)
+ h = Ah_i + torch.sum( sigma_ij * Bh_j, dim=1 ) / ( torch.sum( sigma_ij, dim=1 ) + 1e-6 ) # hi = Ahi + sum_j eta_ij/sum_j' eta_ij' * Bhj <= dense attention
+ return {'h' : h}
+
+ def forward(self, g, h, e):
+
+ h_in = h # for residual connection
+
+ g.ndata['h'] = h
+ g.ndata['Ah'] = self.A(h)
+ g.ndata['Bh'] = self.B(h)
+ g.ndata['Dh'] = self.D(h)
+ g.ndata['Eh'] = self.E(h)
+ #g.update_all(self.message_func,self.reduce_func)
+ g.apply_edges(fn.u_add_v('Dh', 'Eh', 'e'))
+ g.edata['sigma'] = torch.sigmoid(g.edata['e'])
+ g.update_all(fn.u_mul_e('Bh', 'sigma', 'm'), fn.sum('m', 'sum_sigma_h'))
+ g.update_all(fn.copy_e('sigma', 'm'), fn.sum('m', 'sum_sigma'))
+ g.ndata['h'] = g.ndata['Ah'] + g.ndata['sum_sigma_h'] / (g.ndata['sum_sigma'] + 1e-6)
+ h = g.ndata['h'] # result of graph convolution
+
+ if self.batch_norm:
+ h = self.bn_node_h(h) # batch normalization
+
+ h = F.relu(h) # non-linear activation
+
+ if self.residual:
+ h = h_in + h # residual connection
+
+ h = F.dropout(h, self.dropout, training=self.training)
+
+ return h, e
+
+ def __repr__(self):
+ return '{}(in_channels={}, out_channels={})'.format(self.__class__.__name__,
+ self.in_channels,
+ self.out_channels)
+
+
+##############################################################
+
+
+class GatedGCNLayerIsotropic(nn.Module):
+ """
+ Param: []
+ """
+ def __init__(self, input_dim, output_dim, dropout, batch_norm, residual=False):
+ super().__init__()
+ self.in_channels = input_dim
+ self.out_channels = output_dim
+ self.dropout = dropout
+ self.batch_norm = batch_norm
+ self.residual = residual
+
+ if input_dim != output_dim:
+ self.residual = False
+
+ self.A = nn.Linear(input_dim, output_dim, bias=True)
+ self.B = nn.Linear(input_dim, output_dim, bias=True)
+ self.bn_node_h = nn.BatchNorm1d(output_dim)
+
+ def message_func(self, edges):
+ Bh_j = edges.src['Bh']
+ return {'Bh_j' : Bh_j}
+
+ def reduce_func(self, nodes):
+ Ah_i = nodes.data['Ah']
+ Bh_j = nodes.mailbox['Bh_j']
+ h = Ah_i + torch.sum( Bh_j, dim=1 ) # hi = Ahi + sum_j Bhj
+ return {'h' : h}
+
+ def forward(self, g, h, e):
+
+ h_in = h # for residual connection
+
+ g.ndata['h'] = h
+ g.ndata['Ah'] = self.A(h)
+ g.ndata['Bh'] = self.B(h)
+ #g.update_all(self.message_func,self.reduce_func)
+ g.update_all(fn.copy_u('Bh', 'm'), fn.sum('m', 'sum_h'))
+ g.ndata['h'] = g.ndata['Ah'] + g.ndata['sum_h']
+ h = g.ndata['h'] # result of graph convolution
+
+ if self.batch_norm:
+ h = self.bn_node_h(h) # batch normalization
+
+ h = F.relu(h) # non-linear activation
+
+ if self.residual:
+ h = h_in + h # residual connection
+
+ h = F.dropout(h, self.dropout, training=self.training)
+
+ return h, e
+
+ def __repr__(self):
+ return '{}(in_channels={}, out_channels={})'.format(self.__class__.__name__,
+ self.in_channels,
+ self.out_channels)
\ No newline at end of file
diff --git a/src/layers/gcn_layer.py b/src/layers/gcn_layer.py
new file mode 100644
index 0000000000000000000000000000000000000000..d60c00e907982cb42d8cabad995f945ff8ff2743
--- /dev/null
+++ b/src/layers/gcn_layer.py
@@ -0,0 +1,167 @@
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+
+import dgl
+import dgl.function as fn
+from dgl.nn.pytorch import GraphConv
+
+"""
+ GCN: Graph Convolutional Networks
+ Thomas N. Kipf, Max Welling, Semi-Supervised Classification with Graph Convolutional Networks (ICLR 2017)
+ http://arxiv.org/abs/1609.02907
+"""
+
+# Sends a message of node feature h
+# Equivalent to => return {'m': edges.src['h']}
+msg = fn.copy_u("h", "m")
+reduce = fn.mean("m", "h")
+
+
+class NodeApplyModule(nn.Module):
+ # Update node feature h_v with (Wh_v+b)
+ def __init__(self, in_dim, out_dim):
+ super().__init__()
+ self.linear = nn.Linear(in_dim, out_dim)
+
+ def forward(self, node):
+ h = self.linear(node.data["h"])
+ return {"h": h}
+
+
+class GCNLayer(nn.Module):
+ """
+ Param: [in_dim, out_dim]
+ """
+
+ def __init__(
+ self,
+ in_dim,
+ out_dim,
+ activation,
+ dropout,
+ batch_norm,
+ residual=False,
+ dgl_builtin=True,
+ ):
+ super().__init__()
+ self.in_channels = in_dim
+ self.out_channels = out_dim
+ self.batch_norm = batch_norm
+ self.residual = residual
+ self.dgl_builtin = dgl_builtin
+
+ if in_dim != out_dim:
+ self.residual = False
+
+ self.batchnorm_h = nn.BatchNorm1d(out_dim)
+ self.activation = activation
+ self.dropout = nn.Dropout(dropout)
+ if self.dgl_builtin == False:
+ self.apply_mod = NodeApplyModule(in_dim, out_dim)
+ elif dgl.__version__ < "0.5":
+ self.conv = GraphConv(in_dim, out_dim, bias=False)
+ else:
+ self.conv = GraphConv(
+ in_dim, out_dim, allow_zero_in_degree=True, bias=False
+ )
+
+ self.sc_act = nn.ReLU()
+
+ def forward(self, g, feature):
+ h_in = feature # to be used for residual connection
+
+ if self.dgl_builtin == False:
+ g.ndata["h"] = feature
+ g.update_all(msg, reduce)
+ g.apply_nodes(func=self.apply_mod)
+ h = g.ndata["h"] # result of graph convolution
+ else:
+ h = self.conv(g, feature)
+
+ if self.batch_norm:
+ h = self.batchnorm_h(h) # batch normalization
+
+ if self.activation:
+ h = self.activation(h)
+
+ if self.residual:
+ h = h_in + h # residual connection
+ h = self.sc_act(h)
+
+ h = self.dropout(h)
+ return h
+
+ def __repr__(self):
+ return "{}(in_channels={}, out_channels={}, residual={})".format(
+ self.__class__.__name__, self.in_channels, self.out_channels, self.residual
+ )
+
+
+class GCNLayer(nn.Module):
+ """
+ Param: [in_dim, out_dim]
+ """
+
+ def __init__(
+ self,
+ in_dim,
+ out_dim,
+ activation,
+ dropout,
+ batch_norm,
+ residual=False,
+ dgl_builtin=True,
+ ):
+ super().__init__()
+ self.in_channels = in_dim
+ self.out_channels = out_dim
+ self.batch_norm = batch_norm
+ self.residual = residual
+ self.dgl_builtin = dgl_builtin
+
+ if in_dim != out_dim:
+ self.residual = False
+
+ self.batchnorm_h = nn.BatchNorm1d(out_dim)
+ self.activation = activation
+ self.dropout = nn.Dropout(dropout)
+ if self.dgl_builtin == False:
+ self.apply_mod = NodeApplyModule(in_dim, out_dim)
+ elif dgl.__version__ < "0.5":
+ self.conv = GraphConv(in_dim, out_dim, bias=False)
+ else:
+ self.conv = GraphConv(
+ in_dim, out_dim, allow_zero_in_degree=True, bias=False
+ )
+
+ self.sc_act = nn.ReLU()
+
+ def forward(self, g, feature):
+ h_in = feature # to be used for residual connection
+
+ if self.dgl_builtin == False:
+ g.ndata["h"] = feature
+ g.update_all(msg, reduce)
+ g.apply_nodes(func=self.apply_mod)
+ h = g.ndata["h"] # result of graph convolution
+ else:
+ h = self.conv(g, feature)
+
+ if self.batch_norm:
+ h = self.batchnorm_h(h) # batch normalization
+
+ if self.activation:
+ h = self.activation(h)
+
+ if self.residual:
+ h = h_in + h # residual connection
+ h = self.sc_act(h)
+
+ h = self.dropout(h)
+ return h
+
+ def __repr__(self):
+ return "{}(in_channels={}, out_channels={}, residual={})".format(
+ self.__class__.__name__, self.in_channels, self.out_channels, self.residual
+ )
diff --git a/src/layers/graph_transformer_edge_layer.py b/src/layers/graph_transformer_edge_layer.py
new file mode 100644
index 0000000000000000000000000000000000000000..60df63e3e9dd95af7e13a67554ba4ee0e53c8669
--- /dev/null
+++ b/src/layers/graph_transformer_edge_layer.py
@@ -0,0 +1,223 @@
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+
+import dgl
+import dgl.function as fn
+import numpy as np
+
+"""
+ Graph Transformer Layer with edge features
+
+"""
+
+"""
+ Util functions
+"""
+def src_dot_dst(src_field, dst_field, out_field):
+ def func(edges):
+ return {out_field: (edges.src[src_field] * edges.dst[dst_field])}
+ return func
+
+def scaling(field, scale_constant):
+ def func(edges):
+ return {field: ((edges.data[field]) / scale_constant)}
+ return func
+
+# Improving implicit attention scores with explicit edge features, if available
+def imp_exp_attn(implicit_attn, explicit_edge):
+ """
+ implicit_attn: the output of K Q
+ explicit_edge: the explicit edge features
+ """
+ def func(edges):
+ return {implicit_attn: (edges.data[implicit_attn] * edges.data[explicit_edge])}
+ return func
+
+# To copy edge features to be passed to FFN_e
+def out_edge_features(edge_feat):
+ def func(edges):
+ return {'e_out': edges.data[edge_feat]}
+ return func
+
+
+def exp(field):
+ def func(edges):
+ # clamp for softmax numerical stability
+ return {field: torch.exp((edges.data[field].sum(-1, keepdim=True)).clamp(-5, 5))}
+ return func
+
+
+
+
+"""
+ Single Attention Head
+"""
+
+class MultiHeadAttentionLayer(nn.Module):
+ def __init__(self, in_dim, out_dim, num_heads, use_bias):
+ super().__init__()
+
+ self.out_dim = out_dim
+ self.num_heads = num_heads
+
+ if use_bias:
+ self.Q = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ self.K = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ self.V = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ self.proj_e = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ else:
+ self.Q = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+ self.K = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+ self.V = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+ self.proj_e = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+
+ def propagate_attention(self, g):
+ # Compute attention score
+ g.apply_edges(src_dot_dst('K_h', 'Q_h', 'score')) #, edges)
+
+ # scaling
+ g.apply_edges(scaling('score', np.sqrt(self.out_dim)))
+
+ # Use available edge features to modify the scores
+ g.apply_edges(imp_exp_attn('score', 'proj_e'))
+
+ # Copy edge features as e_out to be passed to FFN_e
+ g.apply_edges(out_edge_features('score'))
+
+ # softmax
+ g.apply_edges(exp('score'))
+
+ # Send weighted values to target nodes
+ eids = g.edges()
+ g.send_and_recv(eids, fn.src_mul_edge('V_h', 'score', 'V_h'), fn.sum('V_h', 'wV'))
+ g.send_and_recv(eids, fn.copy_edge('score', 'score'), fn.sum('score', 'z'))
+
+ def forward(self, g, h, e):
+
+ Q_h = self.Q(h)
+ K_h = self.K(h)
+ V_h = self.V(h)
+ proj_e = self.proj_e(e)
+
+ # Reshaping into [num_nodes, num_heads, feat_dim] to
+ # get projections for multi-head attention
+ g.ndata['Q_h'] = Q_h.view(-1, self.num_heads, self.out_dim)
+ g.ndata['K_h'] = K_h.view(-1, self.num_heads, self.out_dim)
+ g.ndata['V_h'] = V_h.view(-1, self.num_heads, self.out_dim)
+ g.edata['proj_e'] = proj_e.view(-1, self.num_heads, self.out_dim)
+
+ self.propagate_attention(g)
+
+ h_out = g.ndata['wV'] / (g.ndata['z'] + torch.full_like(g.ndata['z'], 1e-6)) # adding eps to all values here
+ e_out = g.edata['e_out']
+
+ return h_out, e_out
+
+
+class GraphTransformerLayer(nn.Module):
+ """
+ Param:
+ """
+ def __init__(self, in_dim, out_dim, num_heads, dropout=0.0, layer_norm=False, batch_norm=True, residual=True, use_bias=False):
+ super().__init__()
+
+ self.in_channels = in_dim
+ self.out_channels = out_dim
+ self.num_heads = num_heads
+ self.dropout = dropout
+ self.residual = residual
+ self.layer_norm = layer_norm
+ self.batch_norm = batch_norm
+
+ self.attention = MultiHeadAttentionLayer(in_dim, out_dim//num_heads, num_heads, use_bias)
+
+ self.O_h = nn.Linear(out_dim, out_dim)
+ self.O_e = nn.Linear(out_dim, out_dim)
+
+ if self.layer_norm:
+ self.layer_norm1_h = nn.LayerNorm(out_dim)
+ self.layer_norm1_e = nn.LayerNorm(out_dim)
+
+ if self.batch_norm:
+ self.batch_norm1_h = nn.BatchNorm1d(out_dim)
+ self.batch_norm1_e = nn.BatchNorm1d(out_dim)
+
+ # FFN for h
+ self.FFN_h_layer1 = nn.Linear(out_dim, out_dim*2)
+ self.FFN_h_layer2 = nn.Linear(out_dim*2, out_dim)
+
+ # FFN for e
+ self.FFN_e_layer1 = nn.Linear(out_dim, out_dim*2)
+ self.FFN_e_layer2 = nn.Linear(out_dim*2, out_dim)
+
+ if self.layer_norm:
+ self.layer_norm2_h = nn.LayerNorm(out_dim)
+ self.layer_norm2_e = nn.LayerNorm(out_dim)
+
+ if self.batch_norm:
+ self.batch_norm2_h = nn.BatchNorm1d(out_dim)
+ self.batch_norm2_e = nn.BatchNorm1d(out_dim)
+
+ def forward(self, g, h, e):
+ h_in1 = h # for first residual connection
+ e_in1 = e # for first residual connection
+
+ # multi-head attention out
+ h_attn_out, e_attn_out = self.attention(g, h, e)
+
+ h = h_attn_out.view(-1, self.out_channels)
+ e = e_attn_out.view(-1, self.out_channels)
+
+ #h = F.dropout(h, self.dropout, training=self.training)
+ #e = F.dropout(e, self.dropout, training=self.training)
+
+ h = self.O_h(h)
+ e = self.O_e(e)
+
+ if self.residual:
+ h = h_in1 + h # residual connection
+ e = e_in1 + e # residual connection
+
+ if self.layer_norm:
+ h = self.layer_norm1_h(h)
+ e = self.layer_norm1_e(e)
+
+ if self.batch_norm:
+ h = self.batch_norm1_h(h)
+ e = self.batch_norm1_e(e)
+
+ h_in2 = h # for second residual connection
+ e_in2 = e # for second residual connection
+
+ # FFN for h
+ h = self.FFN_h_layer1(h)
+ h = F.relu(h)
+ h = F.dropout(h, self.dropout, training=self.training)
+ h = self.FFN_h_layer2(h)
+
+ # FFN for e
+ e = self.FFN_e_layer1(e)
+ e = F.relu(e)
+ e = F.dropout(e, self.dropout, training=self.training)
+ e = self.FFN_e_layer2(e)
+
+ if self.residual:
+ h = h_in2 + h # residual connection
+ e = e_in2 + e # residual connection
+
+ if self.layer_norm:
+ h = self.layer_norm2_h(h)
+ e = self.layer_norm2_e(e)
+
+ if self.batch_norm:
+ h = self.batch_norm2_h(h)
+ e = self.batch_norm2_e(e)
+
+
+ return h, e
+
+ def __repr__(self):
+ return '{}(in_channels={}, out_channels={}, heads={}, residual={})'.format(self.__class__.__name__,
+ self.in_channels,
+ self.out_channels, self.num_heads, self.residual)
\ No newline at end of file
diff --git a/src/layers/graph_transformer_layer.py b/src/layers/graph_transformer_layer.py
new file mode 100644
index 0000000000000000000000000000000000000000..57271b522f3b5bc61f2b8b7b31012d1ec301d900
--- /dev/null
+++ b/src/layers/graph_transformer_layer.py
@@ -0,0 +1,184 @@
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+
+import dgl
+import dgl.function as fn
+import numpy as np
+
+"""
+ Graph Transformer Layer
+
+"""
+
+"""
+ Util functions
+"""
+
+
+def src_dot_dst(src_field, dst_field, out_field):
+ def func(edges):
+ return {
+ out_field: (edges.src[src_field] * edges.dst[dst_field]).sum(
+ -1, keepdim=True
+ )
+ }
+
+ return func
+
+
+def scaled_exp(field, scale_constant):
+ def func(edges):
+ # clamp for softmax numerical stability
+ return {field: torch.exp((edges.data[field] / scale_constant).clamp(-5, 5))}
+
+ return func
+
+
+"""
+ Single Attention Head
+"""
+
+
+class MultiHeadAttentionLayer(nn.Module):
+ def __init__(self, in_dim, out_dim, num_heads, use_bias):
+ super().__init__()
+
+ self.out_dim = out_dim
+ self.num_heads = num_heads
+
+ if use_bias:
+ self.Q = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ self.K = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ self.V = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ else:
+ self.Q = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+ self.K = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+ self.V = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+
+ def propagate_attention(self, g):
+ # Compute attention score
+ g.apply_edges(src_dot_dst("K_h", "Q_h", "score")) # , edges)
+ g.apply_edges(scaled_exp("score", np.sqrt(self.out_dim)))
+ # Send weighted values to target nodes
+ eids = g.edges()
+ g.send_and_recv(eids, fn.u_mul_e("V_h", "score", "V_h"), fn.sum("V_h", "wV"))
+ g.send_and_recv(eids, fn.copy_e("score", "score"), fn.sum("score", "z"))
+
+ def forward(self, g, h):
+
+ Q_h = self.Q(h)
+ K_h = self.K(h)
+ V_h = self.V(h)
+
+ # Reshaping into [num_nodes, num_heads, feat_dim] to
+ # get projections for multi-head attention
+ g.ndata["Q_h"] = Q_h.view(-1, self.num_heads, self.out_dim)
+ g.ndata["K_h"] = K_h.view(-1, self.num_heads, self.out_dim)
+ g.ndata["V_h"] = V_h.view(-1, self.num_heads, self.out_dim)
+ self.propagate_attention(g)
+ g.ndata["z"] = g.ndata["z"].tile((1, 1, self.out_dim))
+ mask_empty = g.ndata["z"] > 0
+ head_out = g.ndata["wV"]
+ head_out[mask_empty] = head_out[mask_empty] / (g.ndata["z"][mask_empty])
+ g.ndata["z"] = g.ndata["z"][:, :, 0].view(
+ g.ndata["wV"].shape[0], self.num_heads, 1
+ )
+ return head_out
+
+
+class GraphTransformerLayer(nn.Module):
+ """
+ Param:
+ """
+
+ def __init__(
+ self,
+ in_dim,
+ out_dim,
+ num_heads,
+ dropout=0.0,
+ layer_norm=False,
+ batch_norm=True,
+ residual=True,
+ use_bias=False,
+ ):
+ super().__init__()
+
+ self.in_channels = in_dim
+ self.out_channels = out_dim
+ self.num_heads = num_heads
+ self.dropout = dropout
+ self.residual = residual
+ self.layer_norm = layer_norm
+ self.batch_norm = batch_norm
+
+ self.attention = MultiHeadAttentionLayer(
+ in_dim, out_dim // num_heads, num_heads, use_bias
+ )
+
+ self.O = nn.Linear(out_dim, out_dim)
+
+ if self.layer_norm:
+ self.layer_norm1 = nn.LayerNorm(out_dim)
+
+ if self.batch_norm:
+ self.batch_norm1 = nn.BatchNorm1d(out_dim)
+
+ # FFN
+ self.FFN_layer1 = nn.Linear(out_dim, out_dim * 2)
+ self.FFN_layer2 = nn.Linear(out_dim * 2, out_dim)
+
+ if self.layer_norm:
+ self.layer_norm2 = nn.LayerNorm(out_dim)
+
+ if self.batch_norm:
+ self.batch_norm2 = nn.BatchNorm1d(out_dim)
+
+ def forward(self, g, h):
+ h_in1 = h # for first residual connection
+
+ # multi-head attention out
+ attn_out = self.attention(g, h)
+ h = attn_out.view(-1, self.out_channels)
+
+ h = F.dropout(h, self.dropout, training=self.training)
+
+ h = self.O(h)
+
+ if self.residual:
+ h = h_in1 + h # residual connection
+
+ if self.layer_norm:
+ h = self.layer_norm1(h)
+
+ if self.batch_norm:
+ h = self.batch_norm1(h)
+
+ h_in2 = h # for second residual connection
+
+ # FFN
+ h = self.FFN_layer1(h)
+ h = F.relu(h)
+ h = F.dropout(h, self.dropout, training=self.training)
+ h = self.FFN_layer2(h)
+
+ if self.residual:
+ h = h_in2 + h # residual connection
+
+ if self.layer_norm:
+ h = self.layer_norm2(h)
+
+ if self.batch_norm:
+ h = self.batch_norm2(h)
+
+ return h
+
+ def __repr__(self):
+ return "{}(in_channels={}, out_channels={}, heads={}, residual={})".format(
+ self.__class__.__name__,
+ self.in_channels,
+ self.out_channels,
+ self.num_heads,
+ self.residual,
+ )
diff --git a/src/layers/graph_transformer_layer_pc.py b/src/layers/graph_transformer_layer_pc.py
new file mode 100644
index 0000000000000000000000000000000000000000..1ce15fe5deddd24cbf89809c3357c416aa9d43b7
--- /dev/null
+++ b/src/layers/graph_transformer_layer_pc.py
@@ -0,0 +1,227 @@
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+
+import dgl
+import dgl.function as fn
+import numpy as np
+
+"""
+ Graph Transformer Layer
+
+"""
+
+"""
+ Util functions
+"""
+
+
+def src_dot_dst(src_field, dst_field, out_field):
+ def func(edges):
+ return {out_field: (edges.src[src_field] - edges.dst[dst_field])}
+
+ return func
+
+
+def scaled_exp(field, scale_constant):
+ def func(edges):
+ # clamp for softmax numerical stability
+ return {field: torch.exp((edges.data[field] / scale_constant).clamp(-5, 5))}
+
+ return func
+
+
+"""
+ Single Attention Head
+"""
+
+
+class MultiHeadAttentionLayer(nn.Module):
+ def __init__(self, in_dim, out_dim, num_heads, use_bias):
+ super().__init__()
+
+ self.out_dim = out_dim
+ self.num_heads = num_heads
+
+ if use_bias:
+ self.Q = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ self.K = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ self.V = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ else:
+ self.Q = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+ self.K = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+ self.V = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+ self.M1 = nn.Linear(out_dim, out_dim, bias=False)
+ self.relu = nn.ReLU()
+ self.M2 = nn.Linear(out_dim, out_dim, bias=False)
+
+ def propagate_attention(self, g):
+ # Compute attention score
+ g.apply_edges(src_dot_dst("K_h", "Q_h", "vector")) # , edges)
+ # if torch.sum(torch.isnan(g.edata["vector"])) > 0:
+ # print("VECTOR ALREADY NAN HERE")
+ # 0 / 0
+ e_data_m1 = self.M1(g.edata["vector"])
+ e_data_m1 = self.relu(e_data_m1)
+ e_data_m1 = self.M2(e_data_m1)
+ # print("e_data_m1", e_data_m1[0:2])
+ g.edata["vector"] = e_data_m1
+ g.apply_edges(scaled_exp("vector", np.sqrt(self.out_dim)))
+ # print("vector", g.edata["vector"][0:2])
+ # if torch.sum(torch.isnan(g.edata["vector"])) > 0:
+ # print(g.edata["vector"])
+ # Send weighted values to target nodes
+ eids = g.edges()
+ # vector attention to modulate individual channels
+ g.send_and_recv(eids, fn.u_mul_e("V_h", "vector", "V_h"), fn.sum("V_h", "wV"))
+ # print("wV", g.ndata["wV"][0:2])
+ g.send_and_recv(eids, fn.copy_e("vector", "vector"), fn.sum("vector", "z"))
+ # print("z", g.ndata["z"][0:2])
+ # if torch.sum(torch.isnan(g.ndata["z"])) > 0:
+ # 0 / 0
+
+ def forward(self, g, h):
+
+ Q_h = self.Q(h)
+ K_h = self.K(h)
+ V_h = self.V(h)
+ # if torch.sum(torch.isnan(Q_h)) > 0:
+ # print("Q_h ALREADY NAN HERE")
+ # 0 / 0
+ # if torch.sum(torch.isnan(V_h)) > 0:
+ # print("V_h ALREADY NAN HERE")
+ # 0 / 0
+ # if torch.sum(torch.isnan(K_h)) > 0:
+ # print("K_h ALREADY NAN HERE")
+ # 0 / 0
+ # Reshaping into [num_nodes, num_heads, feat_dim] to
+ # get projections for multi-head attention
+ g.ndata["Q_h"] = Q_h.view(-1, self.num_heads, self.out_dim)
+ g.ndata["K_h"] = K_h.view(-1, self.num_heads, self.out_dim)
+ g.ndata["V_h"] = V_h.view(-1, self.num_heads, self.out_dim)
+ # print("q_h", Q_h[0:2])
+ # print("K_h", K_h[0:2])
+ # print("V_h", V_h[0:2])
+ self.propagate_attention(g)
+
+ # g.ndata["z"] = g.ndata["z"].tile((1, 1, self.out_dim))
+ mask_empty = g.ndata["z"] > 0
+ head_out = g.ndata["wV"]
+ head_out[mask_empty] = head_out[mask_empty] / (g.ndata["z"][mask_empty])
+ # g.ndata["z"] = g.ndata["z"][:, :, 0].view(
+ # g.ndata["wV"].shape[0], self.num_heads, 1
+ # )
+ # print("head_out", head_out[0:2])
+ # if torch.sum(torch.isnan(head_out)) > 0:
+ # print("head_out ALREADY NAN HERE")
+ # 0 / 0
+ return head_out
+
+
+class GraphTransformerLayer(nn.Module):
+ """
+ Param:
+ """
+
+ def __init__(
+ self,
+ in_dim,
+ out_dim,
+ num_heads,
+ dropout=0.0,
+ layer_norm=False,
+ batch_norm=True,
+ residual=False,
+ use_bias=False,
+ ):
+ super().__init__()
+
+ self.in_channels = in_dim
+ self.out_channels = out_dim
+ self.num_heads = num_heads
+ self.dropout = dropout
+ self.residual = residual
+ self.layer_norm = layer_norm
+ self.batch_norm = batch_norm
+
+ self.attention = MultiHeadAttentionLayer(
+ in_dim, out_dim // num_heads, num_heads, use_bias
+ )
+
+ self.O = nn.Linear(out_dim, out_dim)
+
+ if self.layer_norm:
+ self.layer_norm1 = nn.LayerNorm(out_dim)
+
+ if self.batch_norm:
+ self.batch_norm1 = nn.BatchNorm1d(out_dim)
+
+ # FFN
+ self.FFN_layer1 = nn.Linear(out_dim, out_dim * 2)
+ self.FFN_layer2 = nn.Linear(out_dim * 2, out_dim)
+
+ if self.layer_norm:
+ self.layer_norm2 = nn.LayerNorm(out_dim)
+
+ if self.batch_norm:
+ self.batch_norm2 = nn.BatchNorm1d(out_dim)
+
+ def forward(self, g, h):
+ h_in1 = h # for first residual connection
+
+ # multi-head attention out
+ attn_out = self.attention(g, h)
+ h = attn_out.view(-1, self.out_channels)
+ # print("output of the attention ", h[0:2])
+ # if torch.sum(torch.isnan(h)) > 0:
+ # print("output of the attention ALREADY NAN HERE")
+ # 0 / 0
+ h = F.dropout(h, self.dropout, training=self.training)
+
+ h = self.O(h)
+
+ if self.residual:
+ h = h_in1 + h # residual connection
+ # print("output of residual ", h[0:2])
+ # if torch.sum(torch.isnan(h)) > 0:
+ # print("output of the residual ALREADY NAN HERE")
+ # 0 / 0
+ if self.layer_norm:
+ h = self.layer_norm1(h)
+
+ if self.batch_norm:
+ h = self.batch_norm1(h)
+ # # print("output of batchnorm ", h[0:2])
+ # if torch.sum(torch.isnan(h)) > 0:
+ # print("output of the batchnorm ALREADY NAN HERE")
+ # 0 / 0
+ h_in2 = h # for second residual connection
+
+ # FFN
+ h = self.FFN_layer1(h)
+ h = F.relu(h)
+ h = F.dropout(h, self.dropout, training=self.training)
+ h = self.FFN_layer2(h)
+ # print("output of FFN_layer2 ", h[0:2])
+ # if torch.sum(torch.isnan(h)) > 0:
+ # print("output of the FFN_layer2 ALREADY NAN HERE")
+ # 0 / 0
+ if self.residual:
+ h = h_in2 + h # residual connection
+
+ if self.layer_norm:
+ h = self.layer_norm2(h)
+
+ if self.batch_norm:
+ h = self.batch_norm2(h)
+
+ return h
+
+ def __repr__(self):
+ return "{}(in_channels={}, out_channels={}, heads={}, residual={})".format(
+ self.__class__.__name__,
+ self.in_channels,
+ self.out_channels,
+ self.num_heads,
+ self.residual,
+ )
diff --git a/src/layers/graph_transformer_layer_pc1.py b/src/layers/graph_transformer_layer_pc1.py
new file mode 100644
index 0000000000000000000000000000000000000000..bd3b0d74ab5c511adc5c13013d760db5164cb66c
--- /dev/null
+++ b/src/layers/graph_transformer_layer_pc1.py
@@ -0,0 +1,333 @@
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+
+import dgl
+import dgl.function as fn
+import numpy as np
+from src.layers.GravNetConv3 import WeirdBatchNorm, knn_per_graph
+
+"""
+ Graph Transformer Layer
+
+"""
+
+"""
+ Util functions
+"""
+
+
+def src_dot_dst(src_field, dst_field, out_field):
+ def func(edges):
+ return {
+ out_field: (edges.src[src_field] * edges.dst[dst_field]).sum(
+ -1, keepdim=True
+ )
+ }
+
+ return func
+
+
+def scaled_exp(field, scale_constant):
+ def func(edges):
+ # clamp for softmax numerical stability
+ return {field: torch.exp((edges.data[field] / scale_constant).clamp(-5, 5))}
+
+ return func
+
+
+def src_dot_dst2(src_field, dst_field, out_field):
+ def func(edges):
+ return {out_field: (edges.src[src_field] - edges.dst[dst_field])}
+
+ return func
+
+
+"""
+ Single Attention Head
+"""
+
+
+class RelativePositionMessage(nn.Module):
+ """
+ Compute the input feature from neighbors
+ """
+
+ def __init__(self, out_dim):
+ super(RelativePositionMessage, self).__init__()
+ self.out_dim = out_dim
+
+ def forward(self, edges):
+ dist = -torch.sqrt((edges.src["G_h"] - edges.dst["G_h"]).pow(2).sum(-1) + 1e-6)
+ distance = torch.exp((dist / np.sqrt(self.out_dim)).clamp(-5, 5))
+ score = (edges.src["K_h"] * edges.dst["Q_h"]).sum(-1, keepdim=True)
+ score_e = torch.exp((score / np.sqrt(self.out_dim)).clamp(-5, 5))
+ print("checkling shapes", score_e.shape, distance.shape, edges.src["V_h"].shape)
+ weight = torch.mul(score_e.view(-1, 1, 1), distance.view(-1, 1, 1))
+ v_h = torch.mul(weight, edges.src["V_h"])
+
+ return {"V1_h": v_h}
+
+
+class MultiHeadAttentionLayer(nn.Module):
+ def __init__(self, n_neigh, in_dim, out_dim, num_heads, use_bias):
+ super().__init__()
+
+ self.out_dim = out_dim
+ self.num_heads = num_heads
+ self.n_neigh = n_neigh
+ if use_bias:
+ self.Q = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ self.K = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ self.V = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+ else:
+ self.G = nn.Linear(in_dim, 3 * num_heads, bias=False)
+ self.K = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+ self.Q = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+ self.V = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+ self.RelativePositionMessage = RelativePositionMessage(out_dim)
+ # self.M1 = nn.Linear(1, out_dim, bias=False)
+ # self.relu = nn.ReLU()
+ # self.M2 = nn.Linear(out_dim, out_dim, bias=False)
+
+ def propagate_attention(self, g):
+ # Compute attention score
+ # g.apply_edges(dist_calc("G_h", "G_h", "distance"))
+ g.apply_edges(src_dot_dst("K_h", "Q_h", "score"))
+ g.apply_edges(scaled_exp("score", np.sqrt(self.out_dim)))
+
+ # g.apply_edges(scaled_exp("distance", np.sqrt(self.out_dim)))
+ # g.apply_edges(score_times_dist("score_dis"))
+ eids = g.edges()
+ g.send_and_recv(eids, self.RelativePositionMessage, fn.sum("V1_h", "wV"))
+ g.send_and_recv(eids, fn.copy_e("score", "score"), fn.sum("score", "z"))
+
+ def forward(self, g, h):
+
+ K_h = self.K(h)
+ V_h = self.V(h)
+ Q_h = self.Q(h)
+ G_h = self.G(h)
+ g.ndata["K_h"] = K_h.view(-1, self.num_heads, self.out_dim)
+ g.ndata["Q_h"] = Q_h.view(-1, self.num_heads, self.out_dim)
+ g.ndata["G_h"] = G_h.view(-1, self.num_heads, 3)
+ g.ndata["V_h"] = V_h.view(-1, self.num_heads, self.out_dim)
+ s_l = g.ndata["G_h"]
+ gu = knn_per_graph(g, s_l.view(-1, 3), self.n_neigh)
+ gu.ndata["K_h"] = g.ndata["K_h"]
+ gu.ndata["V_h"] = g.ndata["V_h"]
+ gu.ndata["Q_h"] = g.ndata["Q_h"]
+ gu.ndata["G_h"] = g.ndata["G_h"]
+ self.propagate_attention(gu)
+ # print(gu.ndata["z"].shape)
+ gu.ndata["z"] = gu.ndata["z"].view(-1, 1, 1).tile((1, 1, self.out_dim))
+ mask_empty = gu.ndata["z"] > 0
+ head_out = gu.ndata["wV"]
+ head_out[mask_empty] = head_out[mask_empty] / (gu.ndata["z"][mask_empty])
+ gu.ndata["z"] = gu.ndata["z"][:, :, 0].view(
+ gu.ndata["wV"].shape[0], self.num_heads, 1
+ )
+
+ return head_out
+
+
+class GraphTransformerLayer(nn.Module):
+ """
+ Param:
+ """
+
+ def __init__(
+ self,
+ neigh,
+ in_dim,
+ out_dim,
+ num_heads,
+ dropout=0.0,
+ layer_norm=False,
+ batch_norm=True,
+ residual=False,
+ use_bias=False,
+ ):
+ super().__init__()
+ self.d_shape = 32
+ self.in_channels = in_dim
+ self.out_channels = out_dim
+ self.num_heads = num_heads
+ self.dropout = dropout
+ self.residual = residual
+ self.layer_norm = layer_norm
+ self.batch_norm = batch_norm
+ self.neigh = neigh
+ self.attention = MultiHeadAttentionLayer(
+ self.neigh, self.d_shape, out_dim // num_heads, num_heads, use_bias
+ )
+
+ self.O = nn.Linear(out_dim, out_dim)
+
+ if self.layer_norm:
+ self.layer_norm1 = nn.LayerNorm(out_dim)
+
+ if self.batch_norm:
+ self.batch_norm1 = nn.BatchNorm1d(out_dim)
+
+ # FFN
+ self.FFN_layer1 = nn.Linear(out_dim, out_dim * 2)
+ self.FFN_layer2 = nn.Linear(out_dim * 2, out_dim)
+
+ if self.layer_norm:
+ self.layer_norm2 = nn.LayerNorm(out_dim)
+
+ if self.batch_norm:
+ self.batch_norm2 = nn.BatchNorm1d(out_dim)
+ self.pre_gravnet = nn.Sequential(
+ nn.Linear(self.in_channels, self.d_shape), #! Dense 1
+ nn.ELU(),
+ nn.Linear(self.d_shape, self.d_shape), #! Dense 2
+ nn.ELU(),
+ )
+
+ def forward(self, g, h):
+ h_in1 = h # for first residual connection
+ h = self.pre_gravnet(h)
+ # multi-head attention out
+ attn_out = self.attention(g, h)
+ h = attn_out.view(-1, self.out_channels)
+ # print("output of the attention ", h[0:2])
+ # if torch.sum(torch.isnan(h)) > 0:
+ # print("output of the attention ALREADY NAN HERE")
+ # 0 / 0
+ h = F.dropout(h, self.dropout, training=self.training)
+
+ h = self.O(h)
+
+ if self.residual:
+ h = h_in1 + h # residual connection
+ # print("output of residual ", h[0:2])
+ # if torch.sum(torch.isnan(h)) > 0:
+ # print("output of the residual ALREADY NAN HERE")
+ # 0 / 0
+ if self.layer_norm:
+ h = self.layer_norm1(h)
+
+ if self.batch_norm:
+ h = self.batch_norm1(h)
+ # # print("output of batchnorm ", h[0:2])
+ # if torch.sum(torch.isnan(h)) > 0:
+ # print("output of the batchnorm ALREADY NAN HERE")
+ # 0 / 0
+ h_in2 = h # for second residual connection
+
+ # FFN
+ h = self.FFN_layer1(h)
+ h = F.relu(h)
+ h = F.dropout(h, self.dropout, training=self.training)
+ h = self.FFN_layer2(h)
+ # print("output of FFN_layer2 ", h[0:2])
+ # if torch.sum(torch.isnan(h)) > 0:
+ # print("output of the FFN_layer2 ALREADY NAN HERE")
+ # 0 / 0
+ if self.residual:
+ h = h_in2 + h # residual connection
+
+ if self.layer_norm:
+ h = self.layer_norm2(h)
+
+ if self.batch_norm:
+ h = self.batch_norm2(h)
+
+ return h
+
+ def __repr__(self):
+ return "{}(in_channels={}, out_channels={}, heads={}, residual={})".format(
+ self.__class__.__name__,
+ self.in_channels,
+ self.out_channels,
+ self.num_heads,
+ self.residual,
+ )
+
+ # if torch.sum(torch.isnan(g.edata["vector"])) > 0:
+ # print("VECTOR ALREADY NAN HERE")
+ # 0 / 0
+ # e_data_m1 = self.M1(g.edata["vector"])
+ # e_data_m1 = self.relu(e_data_m1)
+ # e_data_m1 = self.M2(e_data_m1)
+ # print("e_data_m1", e_data_m1[0:2])
+ # g.edata["vector"] = e_data_m1
+ # print("wV", g.ndata["wV"][0:2])
+ # g.send_and_recv(eids, fn.copy_e("vector", "vector"), fn.sum("vector", "z"))
+ # print("z", g.ndata["z"][0:2])
+ # if torch.sum(torch.isnan(g.ndata["z"])) > 0:
+ # 0 / 0
+
+
+# class MultiHeadAttentionLayer2(nn.Module):
+# def __init__(self, n_neigh, in_dim, out_dim, num_heads, use_bias):
+# super().__init__()
+
+# self.out_dim = out_dim
+# self.num_heads = num_heads
+# self.n_neigh = n_neigh
+# if use_bias:
+# self.Q = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+# self.K = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+# self.V = nn.Linear(in_dim, out_dim * num_heads, bias=True)
+# else:
+# self.K = nn.Linear(in_dim, 3 * num_heads, bias=False)
+# self.V = nn.Linear(in_dim, out_dim * num_heads, bias=False)
+# self.M1 = nn.Linear(3, out_dim, bias=False)
+# self.relu = nn.ReLU()
+# self.M2 = nn.Linear(out_dim, out_dim, bias=False)
+
+# def propagate_attention(self, g):
+# # Compute attention score
+# g.apply_edges(src_dot_dst2("K_h", "K_h", "vector")) # , edges)
+# # if torch.sum(torch.isnan(g.edata["vector"])) > 0:
+# # print("VECTOR ALREADY NAN HERE")
+# # 0 / 0
+# e_data_m1 = self.M1(g.edata["vector"])
+# e_data_m1 = self.relu(e_data_m1)
+# e_data_m1 = self.M2(e_data_m1)
+# g.edata["vector"] = e_data_m1
+# g.apply_edges(scaled_exp("vector", np.sqrt(self.out_dim)))
+# # if torch.sum(torch.isnan(g.edata["vector"])) > 0:
+# # print(g.edata["vector"])
+# # Send weighted values to target nodes
+# eids = g.edges()
+# # vector attention to modulate individual channels
+# g.send_and_recv(eids, fn.u_mul_e("V_h", "vector", "V_h"), fn.sum("V_h", "wV"))
+# # print("wV", g.ndata["wV"][0:2])
+# g.send_and_recv(eids, fn.copy_e("vector", "vector"), fn.sum("vector", "z"))
+# # print("z", g.ndata["z"][0:2])
+# # if torch.sum(torch.isnan(g.ndata["z"])) > 0:
+# # 0 / 0
+
+# def forward(self, g, h):
+
+# K_h = self.K(h)
+# V_h = self.V(h)
+
+# g.ndata["K_h"] = K_h.view(-1, self.num_heads, 3)
+# g.ndata["V_h"] = V_h.view(-1, self.num_heads, self.out_dim)
+# # print("q_h", Q_h[0:2])
+# # print("K_h", K_h[0:2])
+# # print("V_h", V_h[0:2])
+# s_l = g.ndata["K_h"]
+# gu = knn_per_graph(g, s_l.view(-1, 3), self.n_neigh)
+# gu.ndata["K_h"] = g.ndata["K_h"]
+# gu.ndata["V_h"] = g.ndata["V_h"]
+# self.propagate_attention(gu)
+# # print(gu.ndata["z"].shape)
+# # gu.ndata["z"] = gu.ndata["z"].view(-1, 1, 1).tile((1, 1, self.out_dim))
+# mask_empty = gu.ndata["z"] > 0
+# head_out = gu.ndata["wV"]
+# # print(head_out.shape, gu.ndata["z"].shape)
+# head_out[mask_empty] = head_out[mask_empty] / (gu.ndata["z"][mask_empty])
+# # g.ndata["z"] = g.ndata["z"][:, :, 0].view(
+# # g.ndata["wV"].shape[0], self.num_heads, 1
+# # )
+# # print("head_out", head_out[0:2])
+# # if torch.sum(torch.isnan(head_out)) > 0:
+# # print("head_out ALREADY NAN HERE")
+# # 0 / 0
+# return head_out
diff --git a/src/layers/inference_oc.py b/src/layers/inference_oc.py
new file mode 100644
index 0000000000000000000000000000000000000000..2e283e24f90268c8cb696a52af04a353834ce7aa
--- /dev/null
+++ b/src/layers/inference_oc.py
@@ -0,0 +1,978 @@
+import dgl
+import torch
+import os
+
+from alembic.command import current
+from sklearn.cluster import DBSCAN, HDBSCAN
+from torch_scatter import scatter_max, scatter_add, scatter_mean
+import numpy as np
+from src.dataset.functions_data import CachedIndexList, spherical_to_cartesian
+import matplotlib.pyplot as plt
+from scipy.optimize import linear_sum_assignment
+import pandas as pd
+import wandb
+from src.utils.inference.per_particle_metrics import plot_event
+import random
+import string
+
+
+def generate_random_string(length):
+ letters = string.ascii_letters + string.digits
+ return "".join(random.choice(letters) for i in range(length))
+
+
+def create_and_store_graph_output(
+ batch_g,
+ model_output,
+ y,
+ local_rank,
+ step,
+ epoch,
+ path_save,
+ store=False,
+ predict=False,
+ tracking=False,
+ e_corr=None,
+ shap_vals=None,
+ ec_x=None, # ec_x: "global" features (what gets inputted into the final deep neural network head) for energy correction
+ tracks=False,
+ store_epoch=False,
+ total_number_events=0,
+ pred_pos=None,
+ pred_ref_pt=None,
+ use_gt_clusters=False,
+ pids_neutral=None,
+ pids_charged=None,
+ pred_pid=None,
+ pred_xyz_track=None,
+ number_of_fakes=None
+):
+ number_of_showers_total = 0
+ number_of_showers_total1 = 0
+ number_of_fake_showers_total1 = 0
+ batch_g.ndata["coords"] = model_output[:, 0:3]
+ batch_g.ndata["beta"] = model_output[:, 3]
+ if not tracking:
+ if e_corr is None:
+ batch_g.ndata["correction"] = model_output[:, 4]
+ graphs = dgl.unbatch(batch_g)
+ batch_id = y.batch_number.view(-1) # y[:, -1].view(-1)
+ df_list = []
+ df_list1 = []
+ df_list_pandora = []
+ total_number_candidates = 0
+ for i in range(0, len(graphs)):
+ mask = batch_id == i
+ dic = {}
+ dic["graph"] = graphs[i]
+ y1 = y.copy()
+ y1.mask(mask)
+ dic["part_true"] = y1 # y[mask]
+ X = dic["graph"].ndata["coords"]
+ # if shap_vals is not None:
+ # dic["shap_values"] = shap_vals
+ # if ec_x is not None:
+ # dic["ec_x"] = ec_x ## ? No mask ?!?
+ if predict:
+ labels_clustering = clustering_obtain_labels(
+ X, dic["graph"].ndata["beta"].view(-1), model_output.device
+ )
+ if use_gt_clusters:
+ labels_hdb = dic["graph"].ndata["particle_number"].type(torch.int64)
+ else:
+ labels_hdb = hfdb_obtain_labels(X, model_output.device)
+ num_clusters = len(labels_hdb.unique())
+ #if labels_hdb.min() == 0 and labels_hdb.sum() == 0:
+ # labels_hdb += 1 # Quick hack
+ # raise Exception("!!!! Labels==0 !!!!")
+ if predict:
+ labels_pandora = get_labels_pandora(tracks, dic, model_output.device)
+ num_clusters_pandora = len(labels_pandora.unique())
+ particle_ids = torch.unique(dic["graph"].ndata["particle_number"])
+ #current_number_candidates = num_clusters
+ #pred_pos_batch = pred_pos[total_number_candidates:total_number_candidates+current_number_candidates]
+ #pred_ref_pt_batch = pred_ref_pt[total_number_candidates:total_number_candidates+current_number_candidates]
+ #pred_pid_batch = pred_pid[total_number_candidates:total_number_candidates+current_number_candidates]
+ #e_corr_batch = e_corr[total_number_candidates:total_number_candidates+current_number_candidates]
+ """if predict:
+ shower_p_unique = torch.unique(labels_clustering)
+ shower_p_unique, row_ind, col_ind, i_m_w, iou_m_c = match_showers(
+ labels_clustering,
+ dic,
+ particle_ids,
+ model_output,
+ local_rank,
+ i,
+ path_save,
+ tracks=tracks,
+ )"""
+ shower_p_unique_hdb, row_ind_hdb, col_ind_hdb, i_m_w_hdb, iou_m = match_showers(
+ labels_hdb,
+ dic,
+ particle_ids,
+ model_output,
+ local_rank,
+ i,
+ path_save,
+ tracks=tracks,
+ hdbscan=True,
+ )
+ if predict:
+ (
+ shower_p_unique_pandora,
+ row_ind_pandora,
+ col_ind_pandora,
+ i_m_w_pandora,
+ iou_m_pandora,
+ ) = match_showers(
+ labels_pandora,
+ dic,
+ particle_ids,
+ model_output,
+ local_rank,
+ i,
+ path_save,
+ pandora=True,
+ tracks=tracks,
+ )
+
+ # # if len(row_ind_hdb) < len(dic["part_true"]):
+ # print(len(row_ind_hdb), len(dic["part_true"]))
+ # print("storing event", local_rank, step, i)
+ # path_graphs_all_comparing = os.path.join(path_save, "graphs_all_comparing")
+ # if not os.path.exists(path_graphs_all_comparing):
+ # os.makedirs(path_graphs_all_comparing)
+ '''torch.save(
+ dic,
+ path_save
+ + "/graphs_all_comparing_Gregor/"
+ + str(local_rank)
+ + "_"
+ + str(step)
+ + "_"
+ + str(i)
+ + ".pt",
+ )'''
+ # torch.save(
+ # dic,
+ # path_save
+ # + "/graphs/"
+ # + str(local_rank)
+ # + "_"
+ # + str(step)
+ # + "_"
+ # + str(i)
+ # + ".pt",
+ # )
+
+ if len(shower_p_unique_hdb) > 1:
+ # df_event, number_of_showers_total = generate_showers_data_frame(
+ # labels_clustering,
+ # labels_clustering,
+ # dic,
+ # shower_p_unique,
+ # particle_ids,
+ # row_ind,
+ # col_ind,
+ # i_m_w,
+ # e_corr=e_corr,
+ # number_of_showers_total=number_of_showers_total,
+ # step=step,
+ # number_in_batch=i,
+ # tracks=tracks,
+ # )
+ # if pred_pos is not None:
+ # Apply temporary correction
+ import math
+ # phi = math.atan2(pred_pos[:, 1], pred_pos[:, 0])
+ # phi = torch.atan2(pred_pos[:, 1], pred_pos[:, 0])
+ # theta = torch.acos(pred_pos[:, 2] / torch.norm(pred_pos, dim=1))
+ # pred_pos = spherical_to_cartesian(theta, phi, torch.norm(pred_pos, dim=1), normalized=True)
+ # pred_pos= pred_pos.to(model_output.device)
+ df_event1, number_of_showers_total1, number_of_fake_showers_total1 = generate_showers_data_frame(
+ labels_hdb,
+ dic,
+ shower_p_unique_hdb,
+ particle_ids,
+ row_ind_hdb,
+ col_ind_hdb,
+ i_m_w_hdb,
+ e_corr=e_corr,
+ number_of_showers_total=number_of_showers_total1,
+ step=step,
+ number_in_batch=total_number_events,
+ tracks=tracks,
+ ec_x=ec_x,
+ shap_vals=shap_vals,
+ pred_pos=pred_pos,
+ pred_ref_pt=pred_ref_pt,
+ pred_pid=pred_pid,
+ save_plots_to_folder=path_save + "/ML_Model_evt_plots_debugging",
+ number_of_fakes=number_of_fakes,
+ number_of_fake_showers_total=number_of_fake_showers_total1,
+ )
+ if len(df_event1) > 1:
+ df_list1.append(df_event1)
+ if predict:
+ df_event_pandora = generate_showers_data_frame(
+ labels_pandora,
+ dic,
+ shower_p_unique_pandora,
+ particle_ids,
+ row_ind_pandora,
+ col_ind_pandora,
+ i_m_w_pandora,
+ pandora=True,
+ tracking=tracking,
+ step=step,
+ number_in_batch=total_number_events,
+ tracks=tracks,
+ save_plots_to_folder=path_save + "/Pandora_evt_plots_debugging",
+ )
+ if df_event_pandora is not None and type(df_event_pandora) is not tuple:
+ df_list_pandora.append(df_event_pandora)
+ total_number_events = total_number_events + 1
+ # print("number of showers total", number_of_showers_total)
+ # number_of_showers_total = number_of_showers_total + len(shower_p_unique_hdb)
+ # print("number of showers total", number_of_showers_total)
+
+ df_batch1 = pd.concat(df_list1)
+ if predict:
+ df_batch_pandora = pd.concat(df_list_pandora)
+ else:
+ df_batch = []
+ df_batch_pandora = []
+ #
+ if store:
+ store_at_batch_end(
+ path_save,
+ df_batch1,
+ df_batch_pandora,
+ # df_batch,
+ local_rank,
+ step,
+ epoch,
+ predict=predict,
+ store=store_epoch,
+ )
+ if predict:
+ return df_batch_pandora, df_batch1, total_number_events
+ else:
+ return df_batch1
+
+
+def store_at_batch_end(
+ path_save,
+ df_batch1,
+ df_batch_pandora,
+ # df_batch,
+ local_rank=0,
+ step=0,
+ epoch=None,
+ predict=False,
+ store=False,
+):
+ if predict:
+ path_save_ = (
+ path_save
+ + "/"
+ + str(local_rank)
+ + "_"
+ + str(step)
+ + "_"
+ + str(epoch)
+ + ".pt"
+ )
+ # if store and predict:
+ # df_batch.to_pickle(path_save_)
+ # log_efficiency(df_batch, clustering=True)
+ path_save_ = (
+ path_save
+ + "/"
+ + str(local_rank)
+ + "_"
+ + str(step)
+ + "_"
+ + str(epoch)
+ + "_hdbscan.pt"
+ )
+ if store and predict:
+ df_batch1.to_pickle(path_save_)
+ if predict:
+ path_save_pandora = (
+ path_save
+ + "/"
+ + str(local_rank)
+ + "_"
+ + str(step)
+ + "_"
+ + str(epoch)
+ + "_pandora.pt"
+ )
+ if store and predict:
+ df_batch_pandora.to_pickle(path_save_pandora)
+ log_efficiency(df_batch1)
+ if predict:
+ log_efficiency(df_batch_pandora, pandora=True)
+
+
+def log_efficiency(df, pandora=False, clustering=False):
+ mask = ~np.isnan(df["reco_showers_E"])
+ eff = np.sum(~np.isnan(df["pred_showers_E"][mask].values)) / len(
+ df["pred_showers_E"][mask].values
+ )
+ if pandora:
+ wandb.log({"efficiency validation pandora": eff})
+ elif clustering:
+ wandb.log({"efficiency validation clustering": eff})
+ else:
+ wandb.log({"efficiency validation": eff})
+
+
+def generate_showers_data_frame(
+ labels,
+ dic,
+ shower_p_unique,
+ particle_ids,
+ row_ind,
+ col_ind,
+ i_m_w,
+ pandora=False,
+ tracking=False,
+ e_corr=None,
+ number_of_showers_total=None,
+ step=0,
+ number_in_batch=0,
+ tracks=False,
+ shap_vals=None,
+ ec_x=None,
+ pred_pos=None,
+ pred_pid=None,
+ save_plots_to_folder="",
+ pred_ref_pt=None,
+ number_of_fake_showers_total=None,
+ number_of_fakes=None
+):
+ shap = shap_vals is not None
+ e_pred_showers = scatter_add(dic["graph"].ndata["e_hits"].view(-1), labels)
+ if pandora:
+ e_pred_showers_cali = scatter_mean(
+ dic["graph"].ndata["pandora_cluster_energy"].view(-1), labels
+ )
+ e_pred_showers_pfo = scatter_mean(
+ dic["graph"].ndata["pandora_pfo_energy"].view(-1), labels
+ )
+ # px_pred_pfo = scatter_mean(dic["graph"].ndata["hit_px"], labels)
+ # py_pred_pfo = scatter_mean(dic["graph"].ndata["hit_py"], labels)
+ # pz_pred_pfo = scatter_mean(dic["graph"].ndata["hit_pz"], labels)
+ # p_pred_pfo = scatter_mean(dic["graph"].ndata["pos_pxpypz"], labels) # FIX THIS: the shape of pos_pxpypz is [-1, 3]
+ calc_pandora_momentum = "pandora_momentum" in dic["graph"].ndata
+ if calc_pandora_momentum:
+ px_pred_pfo = scatter_mean(
+ dic["graph"].ndata["pandora_momentum"][:, 0], labels
+ )
+ py_pred_pfo = scatter_mean(
+ dic["graph"].ndata["pandora_momentum"][:, 1], labels
+ )
+ pz_pred_pfo = scatter_mean(
+ dic["graph"].ndata["pandora_momentum"][:, 2], labels
+ )
+ ref_pt_px_pred_pfo = scatter_mean(
+ dic["graph"].ndata["pandora_reference_point"][:, 0], labels
+ )
+ ref_pt_py_pred_pfo = scatter_mean(
+ dic["graph"].ndata["pandora_reference_point"][:, 1], labels
+ )
+
+ ref_pt_pz_pred_pfo = scatter_mean(
+ dic["graph"].ndata["pandora_reference_point"][:, 2], labels
+ )
+ pandora_pid = scatter_mean(
+ dic["graph"].ndata["pandora_pid"], labels
+ )
+ ref_pt_pred_pfo = torch.stack(
+ (ref_pt_px_pred_pfo, ref_pt_py_pred_pfo, ref_pt_pz_pred_pfo), dim=1
+ )
+ # p_pred_pandora = scatter_mean(dic["graph"].ndata["pandora_momentum"], labels)
+ p_pred_pandora = torch.stack((px_pred_pfo, py_pred_pfo, pz_pred_pfo), dim=1)
+ p_size_pandora = torch.norm(p_pred_pandora, dim=1)
+ pxyz_pred_pfo = (
+ p_pred_pandora # / torch.norm(p_pred_pandora, dim=1).view(-1, 1)
+ )
+ else:
+ if e_corr is None:
+ corrections_per_shower = get_correction_per_shower(labels, dic)
+ e_pred_showers_cali = e_pred_showers * corrections_per_shower
+ else:
+ corrections_per_shower = e_corr.view(-1)
+ if number_of_fakes > 0:
+ corrections_per_shower_fakes = corrections_per_shower[-number_of_fakes:]
+ corrections_per_shower = corrections_per_shower[:-number_of_fakes]
+
+ e_reco_showers = scatter_add(
+ dic["graph"].ndata["e_hits"].view(-1),
+ dic["graph"].ndata["particle_number"].long(),
+ )
+ row_ind = torch.Tensor(row_ind).to(e_pred_showers.device).long()
+ col_ind = torch.Tensor(col_ind).to(e_pred_showers.device).long()
+ if torch.sum(particle_ids == 0) > 0:
+ # particle id can be 0 because there is noise
+ # then row ind 0 in any case corresponds to particle 1.
+ # if there is particle_id 0 then row_ind should be +1?
+ row_ind_ = row_ind - 1
+ else:
+ # if there is no zero then index 0 corresponds to particle 1.
+ row_ind_ = row_ind
+
+ pred_showers = shower_p_unique
+ energy_t = (
+ dic["part_true"].E_corrected.view(-1).to(e_pred_showers.device)
+ ) # dic["part_true"][:, 3].to(e_pred_showers.device)
+ vertex = dic["part_true"].vertex.to(e_pred_showers.device)
+ pos_t = dic["part_true"].coord.to(e_pred_showers.device)
+ pid_t = dic["part_true"].pid.to(e_pred_showers.device)
+ is_track_per_shower = scatter_add((dic["graph"].ndata["hit_type"] == 1), labels).int()
+ is_track = torch.zeros(energy_t.shape).to(e_pred_showers.device)
+ if shap:
+ matched_shap_vals = torch.zeros((energy_t.shape[0], ec_x.shape[1])) * (
+ torch.nan
+ )
+ matched_shap_vals = matched_shap_vals.numpy()
+ matched_ec_x = torch.zeros((energy_t.shape[0], ec_x.shape[1])) * (torch.nan)
+ matched_ec_x = matched_ec_x.numpy()
+ index_matches = col_ind + 1
+ index_matches = index_matches.to(e_pred_showers.device).long()
+ matched_es = torch.zeros_like(energy_t) * (torch.nan)
+ matched_positions = torch.zeros((energy_t.shape[0], 3)) * (torch.nan)
+ matched_positions = matched_positions.to(e_pred_showers.device)
+ matched_ref_pt = torch.zeros((energy_t.shape[0], 3)) * (torch.nan)
+ matched_ref_pt = matched_ref_pt.to(e_pred_showers.device)
+ matched_pid = torch.zeros_like(energy_t) * (torch.nan)
+ matched_pid = matched_pid.to(e_pred_showers.device).long()
+ matched_positions_pfo = torch.zeros((energy_t.shape[0], 3)) * (torch.nan)
+ matched_positions_pfo = matched_positions_pfo.to(e_pred_showers.device)
+ matched_pandora_pid = (torch.zeros((energy_t.shape[0])) * (torch.nan)).to(e_pred_showers.device)
+ matched_ref_pts_pfo = torch.zeros((energy_t.shape[0], 3)) * (torch.nan)
+ matched_ref_pts_pfo = matched_ref_pts_pfo.to(e_pred_showers.device)
+ matched_es = matched_es.to(e_pred_showers.device)
+ matched_es[row_ind_] = e_pred_showers[index_matches]
+ if pandora:
+ matched_es_cali = matched_es.clone()
+ matched_es_cali[row_ind_] = e_pred_showers_cali[index_matches]
+ matched_es_cali_pfo = matched_es.clone()
+ matched_es_cali_pfo[row_ind_] = e_pred_showers_pfo[index_matches]
+ matched_pandora_pid[row_ind_] = pandora_pid[index_matches]
+ if calc_pandora_momentum:
+ matched_positions_pfo[row_ind_] = pxyz_pred_pfo[index_matches]
+ matched_ref_pts_pfo[row_ind_] = ref_pt_pred_pfo[index_matches]
+ is_track[row_ind_] = is_track_per_shower[index_matches].float()
+ else:
+ if e_corr is None:
+ matched_es_cali = matched_es.clone()
+ matched_es_cali[row_ind_] = e_pred_showers_cali[index_matches]
+ calibration_per_shower = matched_es.clone()
+ calibration_per_shower[row_ind_] = corrections_per_shower[index_matches]
+ else:
+ matched_es_cali = matched_es.clone()
+ number_of_showers = e_pred_showers[index_matches].shape[0] # DOESN'T INCLUDE THE FAKE SHOWERS
+ #number_of_fake_showers = e_pred_showers.shape[0] - number_of_showers
+ matched_es_cali[row_ind_] = (
+ corrections_per_shower[
+ number_of_showers_total : number_of_showers_total
+ + number_of_showers
+ ]
+ #* e_pred_showers[index_matches]
+ )
+ # if len(row_ind) and len(index_matches):
+ # assert row_ind.max() < len(is_track)
+ # assert index_matches.max() < len(is_track_per_shower)
+ is_track[row_ind_] = is_track_per_shower[index_matches].float()
+ if pred_pos is not None:
+ matched_positions[row_ind_] = pred_pos[number_of_showers_total : number_of_showers_total
+ + number_of_showers]
+ matched_ref_pt[row_ind_] = pred_ref_pt[number_of_showers_total : number_of_showers_total + number_of_showers]
+ matched_pid[row_ind_] = pred_pid[number_of_showers_total : number_of_showers_total + number_of_showers]
+ if shap:
+ matched_shap_vals[row_ind_.cpu()] = shap_vals[index_matches.cpu()]
+ matched_ec_x[row_ind_.cpu()] = ec_x[index_matches.cpu()]
+ calibration_per_shower = matched_es.clone()
+ calibration_per_shower[row_ind_] = corrections_per_shower[
+ number_of_showers_total : number_of_showers_total + number_of_showers
+ ]
+ number_of_showers_total = number_of_showers_total + number_of_showers
+ intersection_E = torch.zeros_like(energy_t) * (torch.nan)
+ if len(col_ind) > 0:
+ ie_e = obtain_intersection_values(i_m_w, row_ind, col_ind, dic)
+ intersection_E[row_ind_] = ie_e.to(e_pred_showers.device)
+ pred_showers[index_matches] = -1
+ pred_showers[
+ 0
+ ] = (
+ -1
+ ) # This takes into account that the class 0 for pandora and for dbscan is noise
+ mask = pred_showers != -1
+ number_of_fake_showers = mask.sum()
+ fakes_in_event = mask.sum()
+ fake_showers_e = e_pred_showers[mask]
+ if e_corr is None or pandora:
+ fake_showers_e_cali = e_pred_showers_cali[mask]
+ # fakes_positions = dic["graph"].ndata["coords"][mask]
+ else:
+ #fake_showers_e_cali = corrections_per_shower[number_of_showers_total:number_of_showers_total+number_of_showers][mask]# * (torch.nan)
+ #fakes_positions = torch.zeros((fake_showers_e.shape[0], 3)) * (torch.nan)
+ #fake_showers_e_cali = fake_showers_e
+ #fakes_pid_pred = torch.zeros((fake_showers_e.shape[0])) * (torch.nan) # just for now for debugigng
+ #fakes_positions = fakes_positions.to(e_pred_showers.device)
+ #fakes_pid_pred = fakes_pid_pred.to(e_pred_showers.device)
+ fakes_positions = pred_pos[-number_of_fakes:][number_of_fake_showers_total:number_of_fake_showers_total+number_of_fake_showers]
+ fake_showers_e_cali = e_corr[-number_of_fakes:][number_of_fake_showers_total:number_of_fake_showers_total+number_of_fake_showers]
+ fakes_pid_pred = pred_pid[-number_of_fakes:][number_of_fake_showers_total:number_of_fake_showers_total+number_of_fake_showers]
+ fake_showers_e_reco = e_reco_showers[-number_of_fakes:][number_of_fake_showers_total:number_of_fake_showers_total+number_of_fake_showers]
+ fakes_positions = fakes_positions.to(e_pred_showers.device)
+ fake_showers_e_cali = fake_showers_e_cali.to(e_pred_showers.device)
+ fakes_pid_pred = fakes_pid_pred.to(e_pred_showers.device)
+ fake_showers_e_reco = fake_showers_e_reco.to(e_pred_showers.device)
+ #fakes_pid_pred = pred_pid[number_of_showers_total:number_of_showers_total+number_of_showers][mask]
+ #fakes_positions = fakes_positions.to(e_pred_showers.device)
+ if pandora:
+ fake_pandora_pid = (torch.zeros((fake_showers_e.shape[0], 3)) * (torch.nan)).to(e_pred_showers.device)
+ fake_pandora_pid = pandora_pid[mask]
+ if calc_pandora_momentum:
+ fake_positions_pfo = torch.zeros((fake_showers_e.shape[0], 3)) * (torch.nan)
+ fake_positions_pfo = fake_positions_pfo.to(e_pred_showers.device)
+ fake_positions_pfo = pxyz_pred_pfo[mask]
+ fakes_positions_ref = (torch.zeros((fake_showers_e.shape[0], 3)) * (torch.nan)).to(e_pred_showers.device)
+ fakes_positions_ref = ref_pt_pred_pfo[mask]
+ if not pandora:
+ if e_corr is None:
+ fake_showers_e_cali_factor = corrections_per_shower[mask]
+ else:
+ fake_showers_e_cali_factor = fake_showers_e_cali
+ fake_showers_showers_e_truw = torch.zeros((fake_showers_e.shape[0])) * (
+ torch.nan
+ )
+ fake_showers_vertex = torch.zeros((fake_showers_e.shape[0], 3)) * (torch.nan)
+ fakes_is_track = (torch.zeros((fake_showers_e.shape[0])) * (torch.nan)).to(e_pred_showers.device)
+ fakes_is_track = is_track_per_shower[mask]
+ fakes_positions_t = torch.zeros((fake_showers_e.shape[0], 3)) * (torch.nan)
+ if not pandora:
+ number_of_fake_showers_total = number_of_fake_showers_total + number_of_fake_showers
+ """if shap:
+ fake_showers_shap_vals = torch.zeros((fake_showers_e.shape[0], shap_vals_t.shape[1])) * (
+ torch.nan
+ )
+ fake_showers_ec_x_t = torch.zeros((fake_showers_e.shape[0], ec_x_t.shape[1])) * (
+ torch.nan
+ )
+ #fake_showers_shap_vals = fake_showers_shap_vals.to(e_pred_showers.device)
+ #fake_showers_ec_x_t = fake_showers_ec_x_t.to(e_pred_showers.device)
+ shap_vals_t = torch.cat((torch.tensor(shap_vals_t), fake_showers_shap_vals), dim=0)
+ ec_x_t = torch.cat((torch.tensor(ec_x_t), fake_showers_ec_x_t), dim=0)
+ """
+ fake_showers_showers_e_truw = fake_showers_showers_e_truw.to(
+ e_pred_showers.device
+ )
+ fakes_positions_t = fakes_positions_t.to(e_pred_showers.device)
+ fake_showers_vertex = fake_showers_vertex.to(e_pred_showers.device)
+ energy_t = torch.cat(
+ (energy_t, fake_showers_showers_e_truw),
+ dim=0,
+ )
+ vertex = torch.cat((vertex, fake_showers_vertex), dim=0)
+ pid_t = torch.cat(
+ (pid_t.view(-1), fake_showers_showers_e_truw),
+ dim=0,
+ )
+ pos_t = torch.cat(
+ (pos_t, fakes_positions_t),
+ dim=0,
+ )
+ e_reco = torch.cat((e_reco_showers[1:], fake_showers_showers_e_truw), dim=0)
+ e_pred = torch.cat((matched_es, fake_showers_e), dim=0)
+ e_pred_cali = torch.cat((matched_es_cali, fake_showers_e_cali), dim=0)
+ if pred_pos is not None:
+ e_pred_pos = torch.cat((matched_positions, fakes_positions), dim=0)
+ e_pred_pid = torch.cat((matched_pid, fakes_pid_pred), dim=0)
+ e_pred_ref_pt = torch.cat((matched_ref_pt, fakes_positions), dim=0)
+ if pandora:
+ e_pred_cali_pfo = torch.cat(
+ (matched_es_cali_pfo, fake_showers_e_cali), dim=0
+ )
+ positions_pfo = torch.cat((matched_positions_pfo, fake_positions_pfo), dim=0)
+ pandora_pid = torch.cat((matched_pandora_pid, fake_pandora_pid), dim=0)
+ ref_pts_pfo = torch.cat((matched_ref_pts_pfo, fakes_positions_ref), dim=0)
+ if not pandora:
+ calibration_factor = torch.cat(
+ (calibration_per_shower, fake_showers_e_cali_factor), dim=0
+ )
+
+ if shap:
+ # pad
+ matched_shap_vals = torch.cat(
+ (
+ torch.tensor(matched_shap_vals),
+ torch.zeros((fake_showers_e.shape[0], shap_vals.shape[1])),
+ ),
+ dim=0,
+ )
+ matched_ec_x = torch.cat(
+ (
+ torch.tensor(matched_ec_x),
+ torch.zeros((fake_showers_e.shape[0], ec_x.shape[1])),
+ ),
+ dim=0,
+ )
+
+ e_pred_t = torch.cat(
+ (
+ intersection_E,
+ torch.zeros_like(fake_showers_e) * (torch.nan),
+ ),
+ dim=0,
+ )
+ # e_pred_t_pandora = torch.cat(
+ # (
+ # intersection_E,
+ # torch.zeros_like(fake_showers_e) * (-200),
+ # torch.zeros_like(fake_showers_e_pandora) * (-100),
+ # ),
+ # dim=0,
+ # )
+ is_track = torch.cat((is_track, fakes_is_track.to(is_track.device)), dim=0)
+ if pandora:
+ d = {
+ "true_showers_E": energy_t.detach().cpu(),
+ "reco_showers_E": e_reco.detach().cpu(),
+ "pred_showers_E": e_pred.detach().cpu(),
+ "e_pred_and_truth": e_pred_t.detach().cpu(),
+ "pandora_calibrated_E": e_pred_cali.detach().cpu(),
+ "pandora_calibrated_pfo": e_pred_cali_pfo.detach().cpu(),
+ "pandora_calibrated_pos": positions_pfo.detach().cpu().tolist(),
+ "pandora_ref_pt": ref_pts_pfo.detach().cpu().tolist(),
+ "pid": pid_t.detach().cpu(),
+ "pandora_pid":pandora_pid.detach().cpu(),
+ "step": torch.ones_like(energy_t.detach().cpu()) * step,
+ "number_batch": torch.ones_like(energy_t.detach().cpu())
+ * number_in_batch,
+ "is_track_in_cluster": is_track.detach().cpu(),
+ "vertex": vertex.detach().cpu().tolist()
+ }
+ else:
+ d = {
+ "true_showers_E": energy_t.detach().cpu(),
+ "reco_showers_E": e_reco.detach().cpu(),
+ "pred_showers_E": e_pred.detach().cpu(),
+ "e_pred_and_truth": e_pred_t.detach().cpu(),
+ "pid": pid_t.detach().cpu(),
+ "calibration_factor": calibration_factor.detach().cpu(),
+ "calibrated_E": e_pred_cali.detach().cpu(),
+ "step": torch.ones_like(energy_t.detach().cpu()) * step,
+ "number_batch": torch.ones_like(energy_t.detach().cpu())
+ * number_in_batch,
+ "is_track_in_cluster": is_track.detach().cpu(),
+ "vertex": vertex.detach().cpu().tolist()
+ }
+ if pred_pos is not None:
+ pred_pos1 = e_pred_pos.detach().cpu()
+ pred_pid1 = e_pred_pid.detach().cpu()
+ pred_ref_pt1 = e_pred_ref_pt.detach().cpu()
+ d["pred_pos_matched"] = (
+ pred_pos1.tolist()
+ ) # Otherwise it doesn't work nicely with Pandas DataFrames
+ d["pred_pid_matched"] = pred_pid1.tolist()
+ d["pred_ref_pt_matched"] = pred_ref_pt1.tolist()
+ """if shap:
+ print("Adding ec_x and shap_values to the DataFrame")
+ d["ec_x"] = ec_x_t
+ d["shap_values"] = shap_vals_t"""
+ if shap:
+ d["shap_values"] = matched_shap_vals.tolist()
+ d["ec_x"] = matched_ec_x.tolist()
+ d["true_pos"] = pos_t.detach().cpu().tolist()
+ df = pd.DataFrame(data=d)
+ if save_plots_to_folder:
+ event_numbers = np.unique(df.number_batch)
+ for evt in event_numbers:
+ if len(df[df.number_batch == evt]):
+ # Random string
+ rndstr = generate_random_string(5)
+ plot_event(
+ df[df.number_batch == evt],
+ pandora,
+ save_plots_to_folder + str(evt) + rndstr,
+ graph=dic["graph"].to("cpu"),
+ y=dic["part_true"],
+ labels=dic["graph"].ndata["particle_number"].long(),
+ is_track_in_cluster=df.is_track_in_cluster
+ )
+ '''plot_event(
+ df[df.number_batch == evt],
+ pandora,
+ save_plots_to_folder + "_CLUSTERING_" + str(evt) + rndstr,
+ graph=dic["graph"].to("cpu"),
+ y=dic["part_true"],
+ labels=labels.detach().cpu(),
+ is_track_in_cluster=df.is_track_in_cluster
+ )'''
+ if number_of_showers_total is None:
+ return df
+ else:
+ return df, number_of_showers_total, number_of_fake_showers_total
+ else:
+ return [], 0, 0
+
+
+def get_correction_per_shower(labels, dic):
+ unique_labels = torch.unique(labels)
+ list_corr = []
+ for ii, pred_label in enumerate(unique_labels):
+ if ii == 0:
+ if pred_label != 0:
+ list_corr.append(dic["graph"].ndata["correction"][0].view(-1) * 0)
+ mask = labels == pred_label
+ corrections_E_label = dic["graph"].ndata["correction"][mask]
+ betas_label_indmax = torch.argmax(dic["graph"].ndata["beta"][mask])
+ list_corr.append(corrections_E_label[betas_label_indmax].view(-1))
+
+ corrections = torch.cat(list_corr, dim=0)
+ return corrections
+
+
+def obtain_intersection_matrix(shower_p_unique, particle_ids, labels, dic, e_hits):
+ len_pred_showers = len(shower_p_unique)
+ intersection_matrix = torch.zeros((len_pred_showers, len(particle_ids))).to(
+ shower_p_unique.device
+ )
+ intersection_matrix_w = torch.zeros((len_pred_showers, len(particle_ids))).to(
+ shower_p_unique.device
+ )
+
+ for index, id in enumerate(particle_ids):
+ counts = torch.zeros_like(labels)
+ mask_p = dic["graph"].ndata["particle_number"] == id
+ h_hits = e_hits.clone()
+ counts[mask_p] = 1
+ h_hits[~mask_p] = 0
+ intersection_matrix[:, index] = scatter_add(counts, labels)
+ intersection_matrix_w[:, index] = scatter_add(h_hits, labels.to(h_hits.device))
+ return intersection_matrix, intersection_matrix_w
+
+
+def obtain_union_matrix(shower_p_unique, particle_ids, labels, dic):
+ len_pred_showers = len(shower_p_unique)
+ union_matrix = torch.zeros((len_pred_showers, len(particle_ids)))
+
+ for index, id in enumerate(particle_ids):
+ counts = torch.zeros_like(labels)
+ mask_p = dic["graph"].ndata["particle_number"] == id
+ for index_pred, id_pred in enumerate(shower_p_unique):
+ mask_pred_p = labels == id_pred
+ mask_union = mask_pred_p + mask_p
+ union_matrix[index_pred, index] = torch.sum(mask_union)
+
+ return union_matrix
+
+
+def get_clustering(betas: torch.Tensor, X: torch.Tensor, tbeta=0.7, td=0.03):
+ """
+ Returns a clustering of hits -> cluster_index, based on the GravNet model
+ output (predicted betas and cluster space coordinates) and the clustering
+ parameters tbeta and td.
+ Takes torch.Tensors as input.
+ """
+ n_points = betas.size(0)
+ select_condpoints = betas > tbeta
+ # Get indices passing the threshold
+ indices_condpoints = select_condpoints.nonzero()
+ # Order them by decreasing beta value
+ indices_condpoints = indices_condpoints[(-betas[select_condpoints]).argsort()]
+ # Assign points to condensation points
+ # Only assign previously unassigned points (no overwriting)
+ # Points unassigned at the end are bkg (-1)
+ unassigned = torch.arange(n_points).to(betas.device)
+ clustering = -1 * torch.ones(n_points, dtype=torch.long).to(betas.device)
+ while len(indices_condpoints) > 0 and len(unassigned) > 0:
+ index_condpoint = indices_condpoints[0]
+ d = torch.norm(X[unassigned] - X[index_condpoint][0], dim=-1)
+ assigned_to_this_condpoint = unassigned[d < td]
+ clustering[assigned_to_this_condpoint] = index_condpoint[0]
+ unassigned = unassigned[~(d < td)]
+ # calculate indices_codpoints again
+ indices_condpoints = find_condpoints(betas, unassigned, tbeta)
+ return clustering
+
+
+def find_condpoints(betas, unassigned, tbeta):
+ n_points = betas.size(0)
+ select_condpoints = betas > tbeta
+ device = betas.device
+ mask_unassigned = torch.zeros(n_points).to(device)
+ mask_unassigned[unassigned] = True
+ select_condpoints = mask_unassigned.to(bool) * select_condpoints
+ # Get indices passing the threshold
+ indices_condpoints = select_condpoints.nonzero()
+ # Order them by decreasing beta value
+ indices_condpoints = indices_condpoints[(-betas[select_condpoints]).argsort()]
+ return indices_condpoints
+
+
+def obtain_intersection_values(intersection_matrix_w, row_ind, col_ind, dic):
+ list_intersection_E = []
+ # intersection_matrix_w = intersection_matrix_w
+ particle_ids = torch.unique(dic["graph"].ndata["particle_number"])
+ if torch.sum(particle_ids == 0) > 0:
+ # removing also the MC particle corresponding to noise
+ intersection_matrix_wt = torch.transpose(intersection_matrix_w[1:, 1:], 1, 0)
+ row_ind = row_ind - 1
+ else:
+ intersection_matrix_wt = torch.transpose(intersection_matrix_w[1:, :], 1, 0)
+ for i in range(0, len(col_ind)):
+ list_intersection_E.append(
+ intersection_matrix_wt[row_ind[i], col_ind[i]].view(-1)
+ )
+ if len(list_intersection_E) > 0:
+ return torch.cat(list_intersection_E, dim=0)
+ else:
+ return 0
+
+
+def plot_iou_matrix(iou_matrix, image_path, hdbscan=False):
+ iou_matrix = torch.transpose(iou_matrix[1:, :], 1, 0)
+ fig, ax = plt.subplots()
+ iou_matrix = iou_matrix.detach().cpu().numpy()
+ ax.matshow(iou_matrix, cmap=plt.cm.Blues)
+ for i in range(0, iou_matrix.shape[1]):
+ for j in range(0, iou_matrix.shape[0]):
+ c = np.round(iou_matrix[j, i], 1)
+ ax.text(i, j, str(c), va="center", ha="center")
+ fig.savefig(image_path, bbox_inches="tight")
+ if hdbscan:
+ wandb.log({"iou_matrix_hdbscan": wandb.Image(image_path)})
+ else:
+ wandb.log({"iou_matrix": wandb.Image(image_path)})
+
+
+def match_showers(
+ labels,
+ dic,
+ particle_ids,
+ model_output,
+ local_rank,
+ i,
+ path_save,
+ pandora=False,
+ tracks=False,
+ hdbscan=False,
+):
+ iou_threshold = 0.25
+ shower_p_unique = torch.unique(labels)
+ if torch.sum(labels == 0) == 0:
+ shower_p_unique = torch.cat(
+ (
+ torch.Tensor([0]).to(shower_p_unique.device).view(-1),
+ shower_p_unique.view(-1),
+ ),
+ dim=0,
+ )
+ e_hits = dic["graph"].ndata["e_hits"].view(-1)
+ i_m, i_m_w = obtain_intersection_matrix(
+ shower_p_unique, particle_ids, labels, dic, e_hits
+ )
+ i_m = i_m.to(model_output.device)
+ i_m_w = i_m_w.to(model_output.device)
+ u_m = obtain_union_matrix(shower_p_unique, particle_ids, labels, dic)
+ u_m = u_m.to(model_output.device)
+ iou_matrix = i_m / u_m
+ if torch.sum(particle_ids == 0) > 0:
+ # removing also the MC particle corresponding to noise
+ iou_matrix_num = (
+ torch.transpose(iou_matrix[1:, 1:], 1, 0).clone().detach().cpu().numpy()
+ )
+ else:
+ iou_matrix_num = (
+ torch.transpose(iou_matrix[1:, :], 1, 0).clone().detach().cpu().numpy()
+ )
+ iou_matrix_num[iou_matrix_num < iou_threshold] = 0
+ row_ind, col_ind = linear_sum_assignment(-iou_matrix_num)
+ # Next three lines remove solutions where there is a shower that is not associated and iou it's zero (or less than threshold)
+ mask_matching_matrix = iou_matrix_num[row_ind, col_ind] > 0
+ row_ind = row_ind[mask_matching_matrix]
+ col_ind = col_ind[mask_matching_matrix]
+ if torch.sum(particle_ids == 0) > 0:
+ row_ind = row_ind + 1
+ if i == 0 and local_rank == 0:
+ if path_save is not None:
+ if pandora:
+ image_path = path_save + "/example_1_clustering_pandora.png"
+ else:
+ image_path = path_save + "/example_1_clustering.png"
+ # plot_iou_matrix(iou_matrix, image_path, hdbscan)
+ # row_ind are particles that are matched and col_ind the ind of preds they are matched to
+ return shower_p_unique, row_ind, col_ind, i_m_w, iou_matrix
+
+
+def clustering_obtain_labels(X, betas, device):
+ clustering = get_clustering(betas, X)
+ map_from = list(np.unique(clustering.detach().cpu()))
+ cluster_id = map(lambda x: map_from.index(x), clustering.detach().cpu())
+ clustering_ordered = torch.Tensor(list(cluster_id)).long()
+ if torch.unique(clustering)[0] != -1:
+ clustering = clustering_ordered + 1
+ else:
+ clustering = clustering_ordered
+ clustering = torch.Tensor(clustering.view(-1)).long().to(device)
+ return clustering
+
+
+def hfdb_obtain_labels(X, device, eps=0.1):
+ hdb = HDBSCAN(min_cluster_size=8, min_samples=8, cluster_selection_epsilon=eps).fit(
+ X.detach().cpu()
+ )
+ labels_hdb = hdb.labels_ + 1
+ labels_hdb = np.reshape(labels_hdb, (-1))
+ labels_hdb = torch.Tensor(labels_hdb).long().to(device)
+ return labels_hdb
+
+
+def dbscan_obtain_labels(X, device):
+ distance_scale = (
+ (torch.min(torch.abs(torch.min(X, dim=0)[0] - torch.max(X, dim=0)[0])) / 30)
+ .view(-1)
+ .detach()
+ .cpu()
+ .numpy()[0]
+ )
+
+ db = DBSCAN(eps=distance_scale, min_samples=15).fit(X.detach().cpu())
+ # DBSCAN has clustering labels -1,0,.., our cluster 0 is noise so we add 1
+ labels = db.labels_ + 1
+ labels = np.reshape(labels, (-1))
+ labels = torch.Tensor(labels).long().to(device)
+ return labels
+
+
+class CachedIndexList:
+ def __init__(self, lst):
+ self.lst = lst
+ self.cache = {}
+
+ def index(self, value):
+ if value in self.cache:
+ return self.cache[value]
+ else:
+ idx = self.lst.index(value)
+ self.cache[value] = idx
+ return idx
+
+
+def get_labels_pandora(tracks, dic, device):
+ if tracks:
+ labels_pandora = dic["graph"].ndata["pandora_pfo"].long()
+ else:
+ labels_pandora = dic["graph"].ndata["pandora_cluster"].long()
+ labels_pandora = labels_pandora + 1
+ map_from = list(np.unique(labels_pandora.detach().cpu()))
+ map_from = CachedIndexList(map_from)
+ cluster_id = map(lambda x: map_from.index(x), labels_pandora.detach().cpu().numpy())
+ labels_pandora = torch.Tensor(list(cluster_id)).long().to(device)
+ return labels_pandora
diff --git a/src/layers/inference_oc_tracks.py b/src/layers/inference_oc_tracks.py
new file mode 100644
index 0000000000000000000000000000000000000000..53a0ac546ab949f7802deb07b3f9647bd80ece2a
--- /dev/null
+++ b/src/layers/inference_oc_tracks.py
@@ -0,0 +1,329 @@
+import dgl
+import torch
+import os
+from sklearn.cluster import DBSCAN
+from torch_scatter import scatter_max, scatter_add, scatter_mean
+import numpy as np
+
+import matplotlib.pyplot as plt
+from scipy.optimize import linear_sum_assignment
+import pandas as pd
+import wandb
+
+from src.layers.inference_oc import hfdb_obtain_labels
+
+
+def evaluate_efficiency_tracks(
+ batch_g,
+ model_output,
+ embedded_outputs,
+ y,
+ local_rank,
+ step,
+ epoch,
+ path_save,
+ store=False,
+ predict=False,
+):
+ number_of_showers_total = 0
+ batch_g.ndata["coords"] = model_output[:, 0:3]
+ batch_g.ndata["beta"] = model_output[:, 3]
+ batch_g.ndata["embedded_outputs"] = embedded_outputs
+ graphs = dgl.unbatch(batch_g)
+ batch_id = y[:, -1].view(-1)
+ df_list = []
+ for i in range(0, len(graphs)):
+ mask = batch_id == i
+ dic = {}
+ dic["graph"] = graphs[i]
+ dic["part_true"] = y[mask]
+ betas = torch.sigmoid(dic["graph"].ndata["beta"])
+ X = dic["graph"].ndata["coords"]
+ clustering_mode = "dbscan"
+ if clustering_mode == "clustering_normal":
+ clustering = get_clustering(betas, X)
+ elif clustering_mode == "dbscan":
+ labels = hfdb_obtain_labels(X, betas.device, eps=0.05)
+
+ particle_ids = torch.unique(dic["graph"].ndata["particle_number"])
+ shower_p_unique = torch.unique(labels)
+ shower_p_unique, row_ind, col_ind, i_m_w, iou_matrix = match_showers(
+ labels,
+ dic,
+ particle_ids,
+ model_output,
+ local_rank,
+ i,
+ path_save,
+ )
+
+ if len(row_ind) > 1:
+ df_event, number_of_showers_total = generate_showers_data_frame(
+ labels,
+ dic,
+ shower_p_unique,
+ particle_ids,
+ row_ind,
+ col_ind,
+ i_m_w,
+ number_of_showers_total=number_of_showers_total,
+ step=step,
+ number_in_batch=i,
+ )
+ # if len(shower_p_unique) < len(particle_ids):
+ # print("storing event", local_rank, step, i)
+ # torch.save(
+ # dic,
+ # path_save
+ # + "/graphs_all_hdb/"
+ # + str(local_rank)
+ # + "_"
+ # + str(step)
+ # + "_"
+ # + str(i)
+ # + ".pt",
+ # )
+ df_list.append(df_event)
+ if len(df_list) > 0:
+ df_batch = pd.concat(df_list)
+ else:
+ df_batch = []
+ if store:
+ store_at_batch_end(
+ path_save, df_batch, local_rank, step, epoch, predict=predict
+ )
+ return df_batch
+
+
+def store_at_batch_end(
+ path_save,
+ df_batch,
+ local_rank=0,
+ step=0,
+ epoch=None,
+ predict=False,
+):
+ path_save_ = (
+ path_save + "/" + str(local_rank) + "_" + str(step) + "_" + str(epoch) + ".pt"
+ )
+ if predict:
+ print("STORING")
+ df_batch = pd.concat(df_batch)
+ df_batch.to_pickle(path_save_)
+
+ log_efficiency(df_batch)
+
+
+def log_efficiency(df):
+ # take the true showers non nan
+ if len(df) > 0:
+ mask = ~np.isnan(df["reco_showers_E"])
+ eff = np.sum(~np.isnan(df["pred_showers_E"][mask].values)) / len(
+ df["pred_showers_E"][mask].values
+ )
+ wandb.log({"efficiency validation": eff})
+
+
+def generate_showers_data_frame(
+ labels,
+ dic,
+ shower_p_unique,
+ particle_ids,
+ row_ind,
+ col_ind,
+ i_m_w,
+ number_of_showers_total=None,
+ step=0,
+ number_in_batch=0,
+):
+
+ e_pred_showers = 1.0 * scatter_add(
+ torch.ones_like(labels).view(-1),
+ labels.long(),
+ )
+ e_reco_showers = scatter_add(
+ torch.ones_like(labels).view(-1),
+ dic["graph"].ndata["particle_number"].long(),
+ )
+ e_reco_showers = e_reco_showers[1:]
+ e_true_showers = dic["part_true"][:, 5]
+ row_ind = torch.Tensor(row_ind).to(e_pred_showers.device).long()
+ col_ind = torch.Tensor(col_ind).to(e_pred_showers.device).long()
+ pred_showers = shower_p_unique
+
+ index_matches = col_ind + 1
+ index_matches = index_matches.to(e_pred_showers.device).long()
+ matched_es = torch.zeros_like(e_reco_showers) * (torch.nan)
+ matched_es = matched_es.to(e_pred_showers.device)
+
+ matched_es[row_ind] = e_pred_showers[index_matches]
+ intersection_E = torch.zeros_like(e_reco_showers) * (torch.nan)
+ ie_e = obtain_intersection_values(i_m_w, row_ind, col_ind)
+ intersection_E[row_ind] = ie_e.to(e_pred_showers.device)
+
+ pred_showers[index_matches] = -1
+ pred_showers[
+ 0
+ ] = (
+ -1
+ ) # this takes into account that the class 0 for pandora and for dbscan is noise
+ mask = pred_showers != -1
+ fake_showers_e = e_pred_showers[mask]
+
+ fake_showers_showers_e_truw = torch.zeros((fake_showers_e.shape[0])) * (torch.nan)
+ fake_showers_showers_e_truw = fake_showers_showers_e_truw.to(e_pred_showers.device)
+ e_reco = torch.cat((e_reco_showers, fake_showers_showers_e_truw), dim=0)
+
+ e_true = torch.cat((e_true_showers, fake_showers_showers_e_truw), dim=0)
+ e_pred = torch.cat((matched_es, fake_showers_e), dim=0)
+
+ e_pred_t = torch.cat(
+ (
+ intersection_E,
+ torch.zeros_like(fake_showers_e) * (torch.nan),
+ ),
+ dim=0,
+ )
+ # print(e_reco.shape, e_pred.shape, e_pred_t.shape)
+ d = {
+ "reco_showers_E": e_reco.detach().cpu(),
+ "true_showers_E": e_true.detach().cpu(),
+ "pred_showers_E": e_pred.detach().cpu(),
+ "e_pred_and_truth": e_pred_t.detach().cpu(),
+ }
+ df = pd.DataFrame(data=d)
+ if number_of_showers_total is None:
+ return df
+ else:
+ return df, number_of_showers_total
+
+
+def obtain_intersection_matrix(shower_p_unique, particle_ids, labels, dic, e_hits):
+ len_pred_showers = len(shower_p_unique)
+ intersection_matrix = torch.zeros((len_pred_showers, len(particle_ids))).to(
+ shower_p_unique.device
+ )
+ intersection_matrix_w = torch.zeros((len_pred_showers, len(particle_ids))).to(
+ shower_p_unique.device
+ )
+
+ for index, id in enumerate(particle_ids):
+ counts = torch.zeros_like(labels)
+ mask_p = dic["graph"].ndata["particle_number"] == id
+ h_hits = e_hits.clone()
+ counts[mask_p] = 1
+ h_hits[~mask_p] = 0
+ intersection_matrix[:, index] = scatter_add(counts, labels)
+ intersection_matrix_w[:, index] = scatter_add(h_hits, labels.to(h_hits.device))
+ return intersection_matrix, intersection_matrix_w
+
+
+def obtain_union_matrix(shower_p_unique, particle_ids, labels, dic):
+ len_pred_showers = len(shower_p_unique)
+ union_matrix = torch.zeros((len_pred_showers, len(particle_ids)))
+
+ for index, id in enumerate(particle_ids):
+ counts = torch.zeros_like(labels)
+ mask_p = dic["graph"].ndata["particle_number"] == id
+ for index_pred, id_pred in enumerate(shower_p_unique):
+ mask_pred_p = labels == id_pred
+ mask_union = mask_pred_p + mask_p
+ union_matrix[index_pred, index] = torch.sum(mask_union)
+
+ return union_matrix
+
+
+def get_clustering(betas: torch.Tensor, X: torch.Tensor, tbeta=0.1, td=0.5):
+ """
+ Returns a clustering of hits -> cluster_index, based on the GravNet model
+ output (predicted betas and cluster space coordinates) and the clustering
+ parameters tbeta and td.
+ Takes torch.Tensors as input.
+ """
+ n_points = betas.size(0)
+ select_condpoints = betas > tbeta
+ # Get indices passing the threshold
+ indices_condpoints = select_condpoints.nonzero()
+ # Order them by decreasing beta value
+ indices_condpoints = indices_condpoints[(-betas[select_condpoints]).argsort()]
+ # Assign points to condensation points
+ # Only assign previously unassigned points (no overwriting)
+ # Points unassigned at the end are bkg (-1)
+ unassigned = torch.arange(n_points)
+ clustering = -1 * torch.ones(n_points, dtype=torch.long)
+ for index_condpoint in indices_condpoints:
+ d = torch.norm(X[unassigned] - X[index_condpoint][0], dim=-1)
+ assigned_to_this_condpoint = unassigned[d < td]
+ clustering[assigned_to_this_condpoint] = index_condpoint[0]
+ unassigned = unassigned[~(d < td)]
+ return clustering
+
+
+def obtain_intersection_values(intersection_matrix_w, row_ind, col_ind):
+ list_intersection_E = []
+ # intersection_matrix_w = intersection_matrix_w
+ intersection_matrix_wt = torch.transpose(intersection_matrix_w[1:, :], 1, 0)
+ for i in range(0, len(col_ind)):
+ list_intersection_E.append(
+ intersection_matrix_wt[row_ind[i], col_ind[i]].view(-1)
+ )
+ return torch.cat(list_intersection_E, dim=0)
+
+
+def plot_iou_matrix(iou_matrix, image_path):
+ iou_matrix = torch.transpose(iou_matrix[1:, :], 1, 0)
+ fig, ax = plt.subplots()
+ iou_matrix = iou_matrix.detach().cpu().numpy()
+ ax.matshow(iou_matrix, cmap=plt.cm.Blues)
+ for i in range(0, iou_matrix.shape[1]):
+ for j in range(0, iou_matrix.shape[0]):
+ c = np.round(iou_matrix[j, i], 1)
+ ax.text(i, j, str(c), va="center", ha="center")
+ fig.savefig(image_path, bbox_inches="tight")
+ wandb.log({"iou_matrix": wandb.Image(image_path)})
+
+
+def match_showers(
+ labels,
+ dic,
+ particle_ids,
+ model_output,
+ local_rank,
+ i,
+ path_save,
+):
+ iou_threshold = 0.1
+ shower_p_unique = torch.unique(labels)
+ if torch.sum(labels == 0) == 0:
+ shower_p_unique = torch.cat(
+ (
+ torch.Tensor([0]).to(shower_p_unique.device).view(-1),
+ shower_p_unique.view(-1),
+ ),
+ dim=0,
+ )
+ # all hits weight the same
+ e_hits = torch.ones_like(labels)
+ i_m, i_m_w = obtain_intersection_matrix(
+ shower_p_unique, particle_ids, labels, dic, e_hits
+ )
+ i_m = i_m.to(model_output.device)
+ i_m_w = i_m_w.to(model_output.device)
+ u_m = obtain_union_matrix(shower_p_unique, particle_ids, labels, dic)
+ u_m = u_m.to(model_output.device)
+ iou_matrix = i_m / u_m
+ iou_matrix_num = (
+ torch.transpose(iou_matrix[1:, :], 1, 0).clone().detach().cpu().numpy()
+ )
+ iou_matrix_num[iou_matrix_num < iou_threshold] = 0
+ row_ind, col_ind = linear_sum_assignment(-iou_matrix_num)
+ # next three lines remove solutions where there is a shower that is not associated and iou it's zero (or less than threshold)
+ mask_matching_matrix = iou_matrix_num[row_ind, col_ind] > 0
+ row_ind = row_ind[mask_matching_matrix]
+ col_ind = col_ind[mask_matching_matrix]
+ if i == 0 and local_rank == 0:
+ if path_save is not None:
+ image_path = path_save + "/example_1_clustering.png"
+ plot_iou_matrix(iou_matrix, image_path)
+ # row_ind are particles that are matched and col_ind the ind of preds they are matched to
+ return shower_p_unique, row_ind, col_ind, i_m_w, iou_matrix
diff --git a/src/layers/loss_fill_space.py b/src/layers/loss_fill_space.py
new file mode 100644
index 0000000000000000000000000000000000000000..fd3c87a82969c005117e3e51ce9e7821747c8dcc
--- /dev/null
+++ b/src/layers/loss_fill_space.py
@@ -0,0 +1,91 @@
+# copy of the original from https://github.com/cms-pepr/HGCalML/blob/master/modules/LossLayers.py#L916-L943
+
+class LLFillSpace(LossLayerBase):
+ def __init__(self,
+ maxhits: int = 1000,
+ runevery: int = -1,
+ **kwargs):
+ '''
+ calculated a PCA of all points in coordinate space and
+ penalises very asymmetric PCs.
+ Reduces the risk of falling back to a (hyper)surface
+
+ Inputs:
+ - coordinates, row splits, (truth index - optional. then only applied to non-noise)
+ Outputs:
+ - coordinates (unchanged)
+ '''
+ #print('INFO: LLFillSpace: this is actually a regulariser: move to right file soon.')
+ assert maxhits > 0
+ self.maxhits = maxhits
+ self.runevery = runevery
+ self.counter = -1
+ if runevery < 0:
+ self.counter = -2
+ if 'dynamic' in kwargs:
+ super(LLFillSpace, self).__init__(**kwargs)
+ else:
+ super(LLFillSpace, self).__init__(dynamic=True, **kwargs)
+
+ def get_config(self):
+ config = {'maxhits': self.maxhits,
+ 'runevery': self.runevery}
+ base_config = super(LLFillSpace, self).get_config()
+ return dict(list(base_config.items()) + list(config.items()))
+
+ @staticmethod
+ def _rs_loop(coords, tidx, maxhits=1000):
+ # only select a few hits to keep memory managable
+ nhits = coords.shape[0]
+ sel = None
+ if nhits > maxhits:
+ sel = tf.random.uniform(shape=(maxhits,), minval=0, maxval=coords.shape[0] - 1, dtype=tf.int32)
+ else:
+ sel = tf.range(coords.shape[0], dtype=tf.int32)
+ sel = tf.expand_dims(sel, axis=1)
+ coords = tf.gather_nd(coords, sel) # V' x C
+ if tidx is not None:
+ tidx = tf.gather_nd(tidx, sel) # V' x C
+ coords = coords[tidx[:, 0] >= 0]
+ # print('coords',coords.shape)
+ means = tf.reduce_mean(coords, axis=0, keepdims=True) # 1 x C
+ coords -= means # V' x C
+ # build covariance
+ cov = tf.expand_dims(coords, axis=1) * tf.expand_dims(coords, axis=2) # V' x C x C
+ cov = tf.reduce_mean(cov, axis=0, keepdims=False) # 1 x C x C
+ # print('cov',cov)
+ # get eigenvals
+ eigenvals, _ = tf.linalg.eig(cov) # cheap because just once, no need for approx
+ eigenvals = tf.cast(eigenvals, dtype='float32')
+ # penalise one small EV (e.g. when building a surface)
+ pen = tf.math.log((tf.math.divide_no_nan(tf.reduce_mean(eigenvals),
+ tf.reduce_min(eigenvals) + 1e-6) - 1.) ** 2 + 1.)
+ return pen
+
+ @staticmethod
+ def raw_loss(coords, rs, tidx, maxhits=1000):
+ loss = tf.zeros([], dtype='float32')
+ for i in range(len(rs) - 1):
+ rscoords = coords[rs[i]:rs[i + 1]]
+ loss += LLFillSpace._rs_loop(rscoords, tidx, maxhits)
+ return tf.math.divide_no_nan(loss, tf.cast(rs.shape[0], dtype='float32'))
+
+ def loss(self, inputs):
+ assert len(inputs) == 2 or len(inputs) == 3 # coords, rs
+ tidx = None
+ if len(inputs) == 3:
+ coords, rs, tidx = inputs
+ else:
+ coords, rs = inputs
+ if self.counter >= 0: # completely optimise away increment
+ if self.counter < self.runevery:
+ self.counter += 1
+ return tf.zeros_like(coords[0, 0])
+ self.counter = 0
+ lossval = LLFillSpace.raw_loss(coords, rs, tidx, self.maxhits)
+
+ if self.counter == -1:
+ self.counter += 1
+ return lossval
+
+
diff --git a/src/layers/loss_fill_space_torch.py b/src/layers/loss_fill_space_torch.py
new file mode 100644
index 0000000000000000000000000000000000000000..38ca48b9fc8607a03b98e7e322258346a4511d3f
--- /dev/null
+++ b/src/layers/loss_fill_space_torch.py
@@ -0,0 +1,69 @@
+import torch
+
+
+
+class LLFillSpace(torch.nn.Module):
+ def __init__(self,
+ maxhits: int = 1000,
+ runevery: int = -1):
+ #print('INFO: LLFillSpace: this is actually a regulariser: move to right file soon.')
+ assert maxhits > 0
+ self.maxhits = maxhits
+ self.runevery = runevery
+ self.counter = -1
+ if runevery < 0:
+ self.counter = -2
+ super(LLFillSpace, self).__init__()
+
+ def get_config(self):
+ config = {'maxhits': self.maxhits,
+ 'runevery': self.runevery}
+ base_config = super(LLFillSpace, self).get_config()
+ return dict(list(base_config.items()) + list(config.items()))
+
+ def _rs_loop(self, coords):
+ # only select a few hits to keep memory managable
+ nhits = coords.shape[0]
+ maxhits = self.maxhits
+ sel = None
+ if nhits > maxhits:
+ sel = torch.randint(low=0, high=coords.shape[0] - 1, size=(maxhits,), dtype=torch.int32)
+ else:
+ sel = torch.arange(coords.shape[0], dtype=torch.int32)
+ sel = sel.to(coords.device)
+ sel = torch.unsqueeze(sel, dim=1).flatten()
+ coords_selected = torch.index_select(coords, 0, sel).clone() # V' x C
+ # print('coords',coords.shape)
+ means = torch.mean(coords_selected, axis=0) # 1 x C
+ coords_selected = coords_selected - means # V' x C
+ # build covariance
+ cov = torch.unsqueeze(coords_selected, dim=1) * torch.unsqueeze(coords_selected, dim=2)
+ cov = torch.mean(cov, dim=0, keepdim=False) # 1 x C x C
+ # print('cov',cov)
+ # get eigenvals
+ eigenvals, _ = torch.linalg.eig(cov) # cheap because just once, no need for approx
+ eigenvals = eigenvals.to(torch.float32)
+ # penalise one small EV (e.g. when building a surface)
+ pen = torch.log((torch.mean(eigenvals) / (torch.min(eigenvals) + 1e-6) - 1.) ** 2 + 1.)
+ return pen
+
+ def _raw_loss(self, coords, batch_idx):
+ loss = torch.tensor(0).float().to(coords.device)
+ for i in batch_idx.unique():
+ idx = batch_idx == i
+ loss += self._rs_loop(coords[idx, :])
+ return loss
+
+ def forward(self, clust_space, batch_idx):
+ if self.counter >= 0: # completely optimise away increment
+ if self.counter < self.runevery:
+ self.counter += 1
+ return torch.tensor(0).to(clust_space.device)
+ self.counter = 0
+ lossval = self._raw_loss(clust_space, batch_idx)
+
+ if self.counter == -1:
+ self.counter += 1
+ return lossval
+
+
diff --git a/src/layers/mlp_readout_layer.py b/src/layers/mlp_readout_layer.py
new file mode 100644
index 0000000000000000000000000000000000000000..3b5d02789590dde4762a3fc706c03f4ec24ed698
--- /dev/null
+++ b/src/layers/mlp_readout_layer.py
@@ -0,0 +1,27 @@
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+
+"""
+ MLP Layer used after graph vector representation
+"""
+
+class MLPReadout(nn.Module):
+
+ def __init__(self, input_dim, output_dim, L=2): #L=nb_hidden_layers
+ super().__init__()
+ list_FC_layers = [nn.Linear(input_dim, 20)]
+ list_FC_layers += [ nn.Linear( 20, 20 , bias=True ) for l in range(L - 1) ]
+ list_FC_layers.append(nn.Linear( 20 , output_dim , bias=True ))
+ self.FC_layers = nn.ModuleList(list_FC_layers)
+ self.drop_out = nn.Dropout(0.1)
+ self.L = L
+
+ def forward(self, x):
+ y = x
+ for l in range(self.L):
+ y = self.FC_layers[l](y)
+ y = F.relu(y)
+ y = self.drop_out(y)
+ y = self.FC_layers[self.L](y)
+ return y
\ No newline at end of file
diff --git a/src/layers/obj_cond_inf.py b/src/layers/obj_cond_inf.py
new file mode 100644
index 0000000000000000000000000000000000000000..1609064a72e978616e2597f32e727293cb08b7d5
--- /dev/null
+++ b/src/layers/obj_cond_inf.py
@@ -0,0 +1,133 @@
+from typing import Tuple, Union
+import numpy as np
+import torch
+from torch_scatter import scatter_max, scatter_add, scatter_mean
+from src.layers.object_cond import assert_no_nans, scatter_count, batch_cluster_indices
+import dgl
+
+
+def calc_energy_loss(
+ batch, cluster_space_coords, beta, beta_stabilizing="soft_q_scaling", qmin=0.1, radius=0.7,
+ e_frac_loss_return_particles=False, y=None, select_centers_by_particle=True
+):
+ # select_centers_by_particle: if True, we pretend we know which hits belong to which particle...
+ list_graphs = dgl.unbatch(batch)
+ node_counter = 0
+ if beta_stabilizing == "paper":
+ q = beta.arctanh() ** 2 + qmin
+ elif beta_stabilizing == "clip":
+ beta = beta.clip(0.0, 1 - 1e-4)
+ q = beta.arctanh() ** 2 + qmin
+ elif beta_stabilizing == "soft_q_scaling":
+ q = (beta.clip(0.0, 1 - 1e-4) / 1.002).arctanh() ** 2 + qmin
+ else:
+ raise ValueError(f"beta_stablizing mode {beta_stabilizing} is not known")
+ loss_E_frac = []
+ loss_E_frac_true = []
+ particle_ids_all = []
+ reco_count = {} # per-PID count
+ non_reco_count = {}
+ total_count = {}
+ for g in list_graphs:
+ particle_id = g.ndata["particle_number"]
+ number_of_objects = len(particle_id.unique())
+ print("No. of objects", number_of_objects)
+ non = g.number_of_nodes()
+ q_g = q[node_counter : non + node_counter]
+ betas = beta[node_counter : non + node_counter]
+ sorted, indices = torch.sort(betas.view(-1), descending=False)
+ selected_centers = indices[0:number_of_objects]
+ _, selected_centers_particles = scatter_max(
+ betas.flatten().cpu(), particle_id.cpu().long() - 1
+ )
+ assert selected_centers.shape[0] == number_of_objects
+ if select_centers_by_particle:
+ selected_centers = selected_centers_particles.to(g.device)
+ all_particles = set((particle_id.unique()-1).long().tolist())
+ reco_particles = set((particle_id[selected_centers]-1).long().tolist())
+ non_reco_particles = all_particles - reco_particles
+ part_pids = y[:, 6].long()
+ for particle in all_particles:
+ curr_pid = part_pids[particle].item()
+ if curr_pid in total_count:
+ total_count[curr_pid] += 1
+ else:
+ total_count[curr_pid] = 1
+ if particle in reco_particles:
+ if curr_pid in reco_count:
+ reco_count[curr_pid] += 1
+ else:
+ reco_count[curr_pid] = 1
+ else:
+ if curr_pid in non_reco_count:
+ non_reco_count[curr_pid] += 1
+ else:
+ non_reco_count[curr_pid] = 1
+ X = cluster_space_coords[node_counter : non + node_counter]
+
+ if radius == "dynamic":
+ pick_ = torch.argsort(
+ torch.cdist(X[selected_centers], X[selected_centers], p=2),
+ dim=1)[:, 1]
+ current_radius = torch.cdist(torch.Tensor(X[selected_centers]), torch.Tensor(X[selected_centers]), p=2).gather(1, pick_.view(-1, 1))
+ current_radius = current_radius / 2
+ current_radius = max(0.1, current_radius.flatten().min())
+ print("Current radius", current_radius)
+ else:
+ print("Radius", radius)
+ current_radius = radius
+ clusterings = get_clustering(selected_centers, X, betas, td=current_radius)
+ clusterings = clusterings.to(g.device)
+ node_counter += non
+ counter = 0
+ frac_energy = []
+ frac_energy_true = []
+ particle_ids = []
+ for alpha in selected_centers:
+ id_particle = particle_id[alpha]
+ true_mask_particle = particle_id == id_particle
+ true_energy = torch.sum(g.ndata["e_hits"][true_mask_particle])
+ mask_clustering_particle = clusterings == counter
+ clustered_energy = torch.sum(g.ndata["e_hits"][mask_clustering_particle])
+ clustered_energy_true = torch.sum(
+ g.ndata["e_hits"][
+ mask_clustering_particle * true_mask_particle.flatten()
+ ]
+ ) # only consider how much has been correctly assigned
+ counter += 1
+ frac_energy.append(clustered_energy / (true_energy + 1e-7))
+ frac_energy_true.append(clustered_energy_true / (true_energy + 1e-7))
+ particle_ids.append(id_particle.cpu().long().item())
+ frac_energy = torch.stack(frac_energy, dim=0)
+ if not e_frac_loss_return_particles:
+ frac_energy = torch.mean(frac_energy)
+ frac_energy_true = torch.stack(frac_energy_true, dim=0)
+ if not e_frac_loss_return_particles:
+ frac_energy_true = torch.mean(frac_energy_true)
+ loss_E_frac.append(frac_energy)
+ loss_E_frac_true.append(frac_energy_true)
+ particle_ids_all.append(particle_ids)
+ if e_frac_loss_return_particles:
+ return loss_E_frac, [loss_E_frac_true, particle_ids_all, reco_count, non_reco_count, total_count]
+ loss_E_frac = torch.mean(torch.stack(loss_E_frac, dim=0))
+ loss_E_frac_true = torch.mean(torch.stack(loss_E_frac_true, dim=0))
+ return loss_E_frac, loss_E_frac_true
+
+
+def get_clustering(index_alpha_i, X, betas, td=0.7):
+ n_points = betas.size(0)
+ unassigned = torch.arange(n_points).to(betas.device)
+ clustering = -1 * torch.ones(n_points, dtype=torch.long)
+ counter = 0
+ for index_condpoint in index_alpha_i:
+ d = torch.norm(X[unassigned] - X[index_condpoint], dim=-1)
+ assigned_to_this_condpoint = unassigned[d < td]
+ clustering[assigned_to_this_condpoint] = counter
+ unassigned = unassigned[~(d < td)]
+ counter = counter + 1
+ counter = 0
+ for index_condpoint in index_alpha_i:
+ clustering[index_condpoint] = counter
+ counter = counter + 1
+
+ return clustering
diff --git a/src/layers/object_cond.py b/src/layers/object_cond.py
new file mode 100644
index 0000000000000000000000000000000000000000..902b7d3180ec98375dafd113ef743651db229775
--- /dev/null
+++ b/src/layers/object_cond.py
@@ -0,0 +1,1066 @@
+from typing import Tuple, Union
+import numpy as np
+import torch
+from torch_scatter import scatter_max, scatter_add, scatter_mean
+from src.layers.loss_fill_space_torch import LLFillSpace
+
+
+def safe_index(arr, index):
+ # One-hot index (or zero if it's not in the array)
+ if index not in arr:
+ return 0
+ else:
+ return arr.index(index) + 1
+
+
+def assert_no_nans(x):
+ """
+ Raises AssertionError if there is a nan in the tensor
+ """
+ if torch.isnan(x).any():
+ print(x)
+ assert not torch.isnan(x).any()
+
+
+# FIXME: Use a logger instead of this
+DEBUG = False
+
+
+def debug(*args, **kwargs):
+ if DEBUG:
+ print(*args, **kwargs)
+
+
+def calc_LV_Lbeta(
+ original_coords,
+ g,
+ distance_threshold,
+ beta: torch.Tensor,
+ cluster_space_coords: torch.Tensor, # Predicted by model
+ cluster_index_per_event: torch.Tensor, # Truth hit->cluster index, e.g. [0, 1, 1, 0, 1, -1, 0, 1, 1]
+ batch: torch.Tensor, # E.g. [0, 0, 0, 0, 1, 1, 1, 1, 1]
+ # From here on just parameters
+ qmin: float = 0.1,
+ s_B: float = 1.0,
+ noise_cluster_index: int = 0, # cluster_index entries with this value are noise/noise
+ beta_stabilizing="soft_q_scaling",
+ huberize_norm_for_V_attractive=False,
+ beta_term_option="paper",
+ frac_combinations=0, # fraction of the all possible pairs to be used for the clustering loss
+ attr_weight=1.0,
+ repul_weight=1.0,
+ use_average_cc_pos=0.0,
+ loss_type="hgcalimplementation",
+ tracking=False,
+ dis=False,
+ beta_type="default",
+ noise_logits=None,
+ lorentz_norm=False,
+ spatial_part_only=False,
+) -> Union[Tuple[torch.Tensor, torch.Tensor], dict]:
+ """
+ Calculates the L_V and L_beta object condensation losses.
+ Concepts:
+ - A hit belongs to exactly one cluster (cluster_index_per_event is (n_hits,)),
+ and to exactly one event (batch is (n_hits,))
+ - A cluster index of `noise_cluster_index` means the cluster is a noise cluster.
+ There is typically one noise cluster per event. Any hit in a noise cluster
+ is a 'noise hit'. A hit in an object is called a 'signal hit' for lack of a
+ better term.
+ - An 'object' is a cluster that is *not* a noise cluster.
+ beta_stabilizing: Choices are ['paper', 'clip', 'soft_q_scaling']:
+ paper: beta is sigmoid(model_output), q = beta.arctanh()**2 + qmin
+ clip: beta is clipped to 1-1e-4, q = beta.arctanh()**2 + qmin
+ soft_q_scaling: beta is sigmoid(model_output), q = (clip(beta)/1.002).arctanh()**2 + qmin
+ huberize_norm_for_V_attractive: Huberizes the norms when used in the attractive potential
+ beta_term_option: Choices are ['paper', 'short-range-potential']:
+ Choosing 'short-range-potential' introduces a short range potential around high
+ beta points, acting like V_attractive.
+ Note this function has modifications w.r.t. the implementation in 2002.03605:
+ - The norms for V_repulsive are now Gaussian (instead of linear hinge)
+ - Noise_logits: If set to an array, it is the output of the noise classifier (whether a particle belongs to a jet or not)
+ """
+ # remove dummy rows added for dataloader #TODO think of better way to do this
+ device = beta.device
+ if torch.isnan(beta).any():
+ print("There are nans in beta! L198", len(beta[torch.isnan(beta)]))
+
+ beta = torch.nan_to_num(beta, nan=0.0)
+ assert_no_nans(beta)
+ # ________________________________
+
+ # Calculate a bunch of needed counts and indices locally
+
+ # cluster_index: unique index over events
+ # E.g. cluster_index_per_event=[ 0, 0, 1, 2, 0, 0, 1], batch=[0, 0, 0, 0, 1, 1, 1]
+ # -> cluster_index=[ 0, 0, 1, 2, 3, 3, 4 ]
+ cluster_index, n_clusters_per_event = batch_cluster_indices(
+ cluster_index_per_event, batch
+ )
+ n_clusters = n_clusters_per_event.sum()
+ n_hits, cluster_space_dim = cluster_space_coords.size()
+ batch_size = batch.max().detach().cpu().item() + 1
+ n_hits_per_event = scatter_count(batch)
+
+ # Index of cluster -> event (n_clusters,)
+ batch_cluster = scatter_counts_to_indices(n_clusters_per_event)
+
+ # Per-hit boolean, indicating whether hit is sig or noise
+ is_noise = cluster_index_per_event == noise_cluster_index
+ is_sig = ~is_noise
+ n_hits_sig = is_sig.sum()
+ n_sig_hits_per_event = scatter_count(batch[is_sig])
+ # Per-cluster boolean, indicating whether cluster is an object or noise
+ is_object = scatter_max(is_sig.long(), cluster_index)[0].bool()
+ is_noise_cluster = ~is_object
+
+ # FIXME: This assumes noise_cluster_index == 0!!
+ # Not sure how to do this in a performant way in case noise_cluster_index != 0
+ if noise_cluster_index != 0:
+ raise NotImplementedError
+ object_index_per_event = cluster_index_per_event[is_sig] - 1
+ object_index, n_objects_per_event = batch_cluster_indices(
+ object_index_per_event, batch[is_sig]
+ )
+ n_hits_per_object = scatter_count(object_index)
+ # print("n_hits_per_object", n_hits_per_object)
+ batch_object = batch_cluster[is_object]
+ n_objects = is_object.sum()
+
+ assert object_index.size() == (n_hits_sig,)
+ assert is_object.size() == (n_clusters,)
+ assert torch.all(n_hits_per_object > 0)
+ assert object_index.max() + 1 == n_objects
+
+ # ________________________________
+ # L_V term
+ # Calculate q
+ if beta_type == "default":
+ if loss_type == "hgcalimplementation" or loss_type == "vrepweighted":
+ q = (beta.clip(0.0, 1 - 1e-4).arctanh() / 1.01) ** 2 + qmin
+ elif beta_stabilizing == "paper":
+ q = beta.arctanh() ** 2 + qmin
+ elif beta_stabilizing == "clip":
+ beta = beta.clip(0.0, 1 - 1e-4)
+ q = beta.arctanh() ** 2 + qmin
+ elif beta_stabilizing == "soft_q_scaling":
+ q = (beta.clip(0.0, 1 - 1e-4) / 1.002).arctanh() ** 2 + qmin
+ else:
+ raise ValueError(f"beta_stablizing mode {beta_stabilizing} is not known")
+ elif beta_type == "pt":
+ q = beta
+ elif beta_type == "pt+bc":
+ q = beta
+ #if beta_type in ["pt", "pt+bc"]:
+ # q[q<0.5] = 0.5 # cap the q
+ assert_no_nans(q)
+ assert q.device == device
+ assert q.size() == (n_hits,)
+ # Calculate q_alpha, the max q per object, and the indices of said maxima
+ # assert hit_energies.shape == q.shape
+ # q_alpha, index_alpha = scatter_max(hit_energies[is_sig], object_index)
+ q_alpha, index_alpha = scatter_max(q[is_sig], object_index)
+ assert q_alpha.size() == (n_objects,)
+
+ # Get the cluster space coordinates and betas for these maxima hits too
+ x_alpha = cluster_space_coords[is_sig][index_alpha]
+ #x_alpha_original = original_coords[is_sig][index_alpha]
+
+ if use_average_cc_pos > 0:
+ #! this is a func of beta and q so maybe we could also do it with only q
+ x_alpha_sum = scatter_add(
+ q[is_sig].view(-1, 1).repeat(1, 3) * cluster_space_coords[is_sig],
+ object_index,
+ dim=0,
+ ) # * beta[is_sig].view(-1, 1).repeat(1, 3)
+ qbeta_alpha_sum = scatter_add(q[is_sig], object_index) + 1e-9 # * beta[is_sig]
+ div_fac = 1 / qbeta_alpha_sum
+ div_fac = torch.nan_to_num(div_fac, nan=0)
+ x_alpha_mean = torch.mul(x_alpha_sum, div_fac.view(-1, 1).repeat(1, 3))
+ x_alpha = use_average_cc_pos * x_alpha_mean + (1 - use_average_cc_pos) * x_alpha
+ if dis:
+ phi_sum = scatter_add(
+ beta[is_sig].view(-1) * distance_threshold[is_sig].view(-1),
+ object_index,
+ dim=0,
+ )
+ phi_alpha_sum = scatter_add(beta[is_sig].view(-1), object_index) + 1e-9
+ phi_alpha = phi_sum / phi_alpha_sum
+
+ beta_alpha = beta[is_sig][index_alpha]
+ assert x_alpha.size() == (n_objects, cluster_space_dim)
+ assert beta_alpha.size() == (n_objects,)
+
+
+ # Connectivity matrix from hit (row) -> cluster (column)
+ # Index to matrix, e.g.:
+ # [1, 3, 1, 0] --> [
+ # [0, 1, 0, 0],
+ # [0, 0, 0, 1],
+ # [0, 1, 0, 0],
+ # [1, 0, 0, 0]
+ # ]
+ M = torch.nn.functional.one_hot(cluster_index).long()
+
+ # Anti-connectivity matrix; be sure not to connect hits to clusters in different events!
+ M_inv = get_inter_event_norms_mask(batch, n_clusters_per_event) - M
+
+ # Throw away noise cluster columns; we never need them
+ M = M[:, is_object]
+ M_inv = M_inv[:, is_object]
+ assert M.size() == (n_hits, n_objects)
+ assert M_inv.size() == (n_hits, n_objects)
+
+ # Calculate all norms
+ # Warning: Should not be used without a mask!
+ # Contains norms between hits and objects from different events
+ # (n_hits, 1, cluster_space_dim) - (1, n_objects, cluster_space_dim)
+ # gives (n_hits, n_objects, cluster_space_dim)
+ norms = (cluster_space_coords.unsqueeze(1) - x_alpha.unsqueeze(0)).norm(dim=-1)
+ assert norms.size() == (n_hits, n_objects)
+ L_clusters = torch.tensor(0.0).to(device)
+ if frac_combinations != 0:
+ L_clusters = L_clusters_calc(
+ batch, cluster_space_coords, cluster_index, frac_combinations, q
+ )
+
+ # -------
+ # Attractive potential term
+ # First get all the relevant norms: We only want norms of signal hits
+ # w.r.t. the object they belong to, i.e. no noise hits and no noise clusters.
+ # First select all norms of all signal hits w.r.t. all objects, mask out later
+
+ if loss_type == "hgcalimplementation" or loss_type == "vrepweighted":
+ # if dis:
+ # N_k = torch.sum(M, dim=0) # number of hits per object
+ # norms = torch.sum(
+ # torch.square(cluster_space_coords.unsqueeze(1) - x_alpha.unsqueeze(0)),
+ # dim=-1,
+ # )
+ # norms_att = norms[is_sig]
+ # norms_att = norms_att / (2 * phi_alpha.unsqueeze(0) ** 2 + 1e-6)
+ # #! att func as in line 159 of object condensation
+ # norms_att = torch.log(
+ # torch.exp(torch.Tensor([1]).to(norms_att.device)) * norms_att + 1
+ # )
+
+ N_k = torch.sum(M, dim=0) # number of hits per object
+ if lorentz_norm:
+ diff = cluster_space_coords.unsqueeze(1) - x_alpha.unsqueeze(0)
+ norms = diff[:, :, 0]**2 - torch.sum(diff[:, :, 1:] ** 2, dim=-1)
+ norms = norms.abs() ## ??? Why is this needed? wrong convention?
+ #print("Norms", norms[:15])
+ else:
+ if spatial_part_only:
+ norms = torch.sum(
+ torch.square(cluster_space_coords[:, 1:4].unsqueeze(1) - x_alpha[:, 1:4].unsqueeze(0)),
+ dim=-1,
+ )
+ else:
+ norms = torch.sum(
+ torch.square(cluster_space_coords.unsqueeze(1) - x_alpha.unsqueeze(0)),
+ dim=-1,
+ ) # Take the norm squared
+ norms_att = norms[is_sig]
+ #! att func as in line 159 of object condensation
+
+ norms_att = torch.log(
+ torch.exp(torch.Tensor([1]).to(norms_att.device)) * norms_att / 2 + 1
+ )
+
+ elif huberize_norm_for_V_attractive:
+ norms_att = norms[is_sig]
+ # Huberized version (linear but times 4)
+ # Be sure to not move 'off-diagonal' away from zero
+ # (i.e. norms of hits w.r.t. clusters they do _not_ belong to)
+ norms_att = huber(norms_att + 1e-5, 4.0)
+ else:
+ norms_att = norms[is_sig]
+ # Paper version is simply norms squared (no need for mask)
+ norms_att = norms_att**2
+ assert norms_att.size() == (n_hits_sig, n_objects)
+
+ # Now apply the mask to keep only norms of signal hits w.r.t. to the object
+ # they belong to
+ norms_att *= M[is_sig]
+
+ # Sum over hits, then sum per event, then divide by n_hits_per_event, then sum over events
+ if loss_type == "hgcalimplementation":
+ # Final potential term
+ # (n_sig_hits, 1) * (1, n_objects) * (n_sig_hits, n_objects)
+ # hit_type = (g.ndata["hit_type"][is_sig].view(-1)==3)*4+1 #weight 5 for hadronic hits, 1 for
+ # tracks = g.ndata["hit_type"][is_sig]==1
+ # hit_type[tracks] = 250
+ # total_sum_hits_types = scatter_add(hit_type.view(-1), object_index)
+ V_attractive = q[is_sig].unsqueeze(-1) * q_alpha.unsqueeze(0) * norms_att
+ assert V_attractive.size() == (n_hits_sig, n_objects)
+ #! each shower is account for separately
+ V_attractive = V_attractive.sum(dim=0) # K objects
+ #! divide by the number of accounted points
+
+ V_attractive = V_attractive.view(-1) / (N_k.view(-1) + 1e-3)
+ # V_attractive = V_attractive.view(-1) / (total_sum_hits_types.view(-1) + 1e-3)
+ # L_V_attractive = torch.mean(V_attractive)
+
+ ## multiply by a weight that depends on the energy of the shower:
+ # print("e_hits", e_hits)
+ # print("weight_att", weight_att)
+ # L_V_attractive = torch.sum(V_attractive*weight_att)
+ L_V_attractive = torch.mean(V_attractive)
+ # L_V_attractive = L_V_attractive / torch.sum(weight_att)
+
+ L_V_attractive_2 = torch.sum(V_attractive)
+ elif loss_type == "vrepweighted":
+ if tracking:
+ # weight the vtx hits inside the shower
+ V_attractive = (
+ g.ndata["weights"][is_sig].unsqueeze(-1)
+ * q[is_sig].unsqueeze(-1)
+ * q_alpha.unsqueeze(0)
+ * norms_att
+ )
+ assert V_attractive.size() == (n_hits_sig, n_objects)
+ V_attractive = V_attractive.sum(dim=0) # K objects
+
+ L_V_attractive = torch.mean(V_attractive.view(-1))
+ else:
+ # # weight per hit per shower to compensate for ecal hcal unbalance in hadronic showers
+ # ecal_hits = scatter_add(
+ # 1 * (g.ndata["hit_type"][is_sig] == 2), object_index
+ # )
+ # hcal_hits = scatter_add(
+ # 1 * (g.ndata["hit_type"][is_sig] == 3), object_index
+ # )
+ # weights = torch.ones_like(g.ndata["hit_type"][is_sig])
+ # weight_ecal_per_object = 1.0 * ecal_hits.clone() + 1
+ # weight_hcal_per_object = 1.0 * ecal_hits.clone() + 1
+ # mask = (ecal_hits > 2) * (hcal_hits > 2)
+ # weight_ecal_per_object[mask] = (ecal_hits + hcal_hits)[mask] / (
+ # 2 * ecal_hits
+ # )[mask]
+ # weight_hcal_per_object[mask] = (ecal_hits + hcal_hits)[mask] / (
+ # 2 * hcal_hits
+ # )[mask]
+ # weights[g.ndata["hit_type"][is_sig] == 2] = weight_ecal_per_object[
+ # object_index
+ # ]
+ # weights[g.ndata["hit_type"][is_sig] == 3] = weight_hcal_per_object[
+ # object_index
+ # ]
+
+ # # weight with an energy log of the hits
+ # e_hits = g.ndata["e_hits"][is_sig].view(-1)
+ # p_hits = g.ndata["h"][:, -1][is_sig].view(-1)
+ # log_scale_s = torch.log(e_hits + p_hits) + 10
+ # e_sum_hits = scatter_add(log_scale_s, object_index)
+ # # need to take out the weight of alpha otherwise it won't add up to 1
+ # e_sum_hits = e_sum_hits - (log_scale_s[index_alpha])
+ # e_rel = (log_scale_s) / e_sum_hits[object_index]
+
+ # weight of the hit depending on the radial distance:
+ # this weight should help to seed
+ # weight_radial_distance = torch.exp(
+ # -g.ndata["radial_distance"][is_sig] / 100
+ # )
+ # weight_per_object = scatter_add(weight_radial_distance, object_index)
+ # weight_radial_distance = (
+ # weight_radial_distance / weight_per_object[object_index]
+ # )
+
+ V_attractive = (
+ q[is_sig].unsqueeze(-1) ## weight_radial_distance.unsqueeze(-1)
+ * q_alpha.unsqueeze(0)
+ * norms_att
+ )
+
+ # weight modified showers with a higher weight
+ modified_showers = scatter_max(g.ndata["hit_link_modified"], object_index)[
+ 0
+ ]
+ n_modified = torch.sum(modified_showers)
+ weight_modified = len(modified_showers) / (2 * n_modified)
+ weight_unmodified = len(modified_showers) / (
+ 2 * (len(modified_showers) - n_modified)
+ )
+ modified_showers[modified_showers > 0] = weight_modified
+ modified_showers[modified_showers == 0] = weight_unmodified
+ assert V_attractive.size() == (n_hits_sig, n_objects)
+ V_attractive = V_attractive.sum(dim=0) # K objects
+ L_V_attractive = torch.sum(
+ modified_showers.view(-1) * V_attractive.view(-1)
+ ) / len(modified_showers)
+ else:
+ # Final potential term
+ # (n_sig_hits, 1) * (1, n_objects) * (n_sig_hits, n_objects)
+ V_attractive = q[is_sig].unsqueeze(-1) * q_alpha.unsqueeze(0) * norms_att
+ assert V_attractive.size() == (n_hits_sig, n_objects)
+ #! in comparison this works per hit
+ V_attractive = (
+ scatter_add(V_attractive.sum(dim=0), batch_object) / n_hits_per_event
+ )
+ assert V_attractive.size() == (batch_size,)
+ L_V_attractive = V_attractive.sum()
+
+ # -------
+ # Repulsive potential term
+
+ # Get all the relevant norms: We want norms of any hit w.r.t. to
+ # objects they do *not* belong to, i.e. no noise clusters.
+ # We do however want to keep norms of noise hits w.r.t. objects
+ # Power-scale the norms: Gaussian scaling term instead of a cone
+ # Mask out the norms of hits w.r.t. the cluster they belong to
+ if loss_type == "hgcalimplementation" or loss_type == "vrepweighted":
+ if dis:
+ norms = norms / (2 * phi_alpha.unsqueeze(0) ** 2 + 1e-6)
+ norms_rep = torch.exp(-(norms)) * M_inv
+ norms_rep2 = torch.exp(-(norms) * 10) * M_inv
+ else:
+ norms_rep = torch.exp(-(norms) / 2) * M_inv
+ # norms_rep2 = torch.exp(-(norms) * 10) * M_inv
+ norms_rep2 = torch.exp(-(norms) * 10) * M_inv
+ else:
+ norms_rep = torch.exp(-4.0 * norms**2) * M_inv
+
+ # (n_sig_hits, 1) * (1, n_objects) * (n_sig_hits, n_objects)
+ V_repulsive = q.unsqueeze(1) * q_alpha.unsqueeze(0) * norms_rep
+
+ # No need to apply a V = max(0, V); by construction V>=0
+ assert V_repulsive.size() == (n_hits, n_objects)
+
+ # Sum over hits, then sum per event, then divide by n_hits_per_event, then sum up events
+ nope = n_objects_per_event - 1
+ nope[nope == 0] = 1
+ if loss_type == "hgcalimplementation" or loss_type == "vrepweighted":
+ #! sum each object repulsive terms
+ L_V_repulsive = V_repulsive.sum(dim=0) # size number of objects
+ number_of_repulsive_terms_per_object = torch.sum(M_inv, dim=0)
+ L_V_repulsive = L_V_repulsive.view(
+ -1
+ ) / number_of_repulsive_terms_per_object.view(-1)
+ V_repulsive2 = q.unsqueeze(1) * q_alpha.unsqueeze(0) * norms_rep2
+ L_V_repulsive2 = V_repulsive2.sum(dim=0) # size number of objects
+
+ L_V_repulsive2 = L_V_repulsive2.view(-1)
+ L_V_attractive_2 = L_V_attractive_2.view(-1)
+
+ # if not tracking:
+ # #! add to terms function (divide by total number of showers per event)
+ # # L_V_repulsive = scatter_add(L_V_repulsive, object_index) / n_objects
+ # per_shower_weight = torch.exp(1 / (e_particles_pred_per_object + 0.4))
+ # soft_m = torch.nn.Softmax(dim=0)
+ # per_shower_weight = soft_m(per_shower_weight) * len(L_V_repulsive)
+ # L_V_repulsive = torch.mean(L_V_repulsive * per_shower_weight)
+ # else:
+ # if tracking:
+ # L_V_repulsive = torch.mean(L_V_repulsive * per_shower_weight)
+ # else:
+ if loss_type == "vrepweighted":
+ L_V_repulsive = torch.sum(
+ modified_showers.view(-1) * L_V_repulsive.view(-1)
+ ) / len(modified_showers)
+ L_V_repulsive2 = torch.sum(
+ modified_showers.view(-1) * L_V_repulsive2.view(-1)
+ ) / len(modified_showers)
+ else:
+ L_V_repulsive = torch.mean(L_V_repulsive)
+ L_V_repulsive2 = torch.mean(L_V_repulsive2)
+ else:
+ L_V_repulsive = (
+ scatter_add(V_repulsive.sum(dim=0), batch_object)
+ / (n_hits_per_event * nope)
+ ).sum()
+
+ L_V = (
+ attr_weight * L_V_attractive + repul_weight * L_V_repulsive
+ )
+ n_noise_hits_per_event = scatter_count(batch[is_noise])
+ n_noise_hits_per_event[n_noise_hits_per_event == 0] = 1
+ L_beta_noise = (
+ s_B
+ * (
+ (scatter_add(beta[is_noise], batch[is_noise])) / n_noise_hits_per_event
+ ).sum()
+ )
+ if loss_type == "hgcalimplementation":
+ beta_per_object_c = scatter_add(beta[is_sig], object_index)
+ beta_alpha = beta[is_sig][index_alpha]
+ L_beta_sig = torch.mean(
+ 1 - beta_alpha + 1 - torch.clip(beta_per_object_c, 0, 1)
+ )
+
+ L_beta_noise = L_beta_noise / 4
+ # ? note: the training that worked quite well was dividing this by the batch size (1/4)
+
+ elif loss_type == "vrepweighted":
+ # version one:
+ beta_per_object_c = scatter_add(beta[is_sig], object_index)
+ beta_alpha = beta[is_sig][index_alpha]
+ L_beta_sig = 1 - beta_alpha + 1 - torch.clip(beta_per_object_c, 0, 1)
+ L_beta_sig = torch.sum(L_beta_sig.view(-1) * modified_showers.view(-1))
+ L_beta_sig = L_beta_sig / len(modified_showers)
+
+ L_beta_noise = L_beta_noise / batch_size
+ # ? note: the training that worked quite well was dividing this by the batch size (1/4)
+
+ elif beta_term_option == "paper":
+ beta_alpha = beta[is_sig][index_alpha]
+ L_beta_sig = torch.sum( # maybe 0.5 for less aggressive loss
+ scatter_add((1 - beta_alpha), batch_object) / n_objects_per_event
+ )
+ # print("L_beta_sig", L_beta_sig / batch_size)
+ # beta_exp = beta[is_sig]
+ # beta_exp[index_alpha] = 0
+ # # L_exp = torch.mean(beta_exp)
+ # beta_exp = torch.exp(0.5 * beta_exp)
+ # L_exp = torch.mean(scatter_add(beta_exp, batch) / n_hits_per_event)
+
+ elif beta_term_option == "short-range-potential":
+ # First collect the norms: We only want norms of hits w.r.t. the object they
+ # belong to (like in V_attractive)
+ # Apply transformation first, and then apply mask to keep only the norms we want,
+ # then sum over hits, so the result is (n_objects,)
+ norms_beta_sig = (1.0 / (20.0 * norms[is_sig] ** 2 + 1.0) * M[is_sig]).sum(
+ dim=0
+ )
+ assert torch.all(norms_beta_sig >= 1.0) and torch.all(
+ norms_beta_sig <= n_hits_per_object
+ )
+ # Subtract from 1. to remove self interaction, divide by number of hits per object
+ norms_beta_sig = (1.0 - norms_beta_sig) / n_hits_per_object
+ assert torch.all(norms_beta_sig >= -1.0) and torch.all(norms_beta_sig <= 0.0)
+ norms_beta_sig *= beta_alpha
+ # Conclusion:
+ # lower beta --> higher loss (less negative)
+ # higher norms --> higher loss
+
+ # Sum over objects, divide by number of objects per event, then sum over events
+ L_beta_norms_term = (
+ scatter_add(norms_beta_sig, batch_object) / n_objects_per_event
+ ).sum()
+ assert L_beta_norms_term >= -batch_size and L_beta_norms_term <= 0.0
+
+ # Logbeta term: Take -.2*torch.log(beta_alpha[is_object]+1e-9), sum it over objects,
+ # divide by n_objects_per_event, then sum over events (same pattern as above)
+ # lower beta --> higher loss
+ L_beta_logbeta_term = (
+ scatter_add(-0.2 * torch.log(beta_alpha + 1e-9), batch_object)
+ / n_objects_per_event
+ ).sum()
+
+ # Final L_beta term
+ L_beta_sig = L_beta_norms_term + L_beta_logbeta_term
+
+ else:
+ valid_options = ["paper", "short-range-potential"]
+ raise ValueError(
+ f'beta_term_option "{beta_term_option}" is not valid, choose from {valid_options}'
+ )
+
+ L_beta = L_beta_noise + L_beta_sig
+ if beta_type == "pt" or beta_type == "pt+bc":
+ L_beta = torch.tensor(0.)
+ L_beta_sig = torch.tensor(0.)
+ L_beta_noise = torch.tensor(0.)
+ #L_alpha_coordinates = torch.mean(torch.norm(x_alpha_original - x_alpha, p=2, dim=1))
+ x_original = original_coords / torch.norm(original_coords, p=2, dim=1).view(-1, 1)
+ x_virtual = cluster_space_coords / torch.norm(cluster_space_coords, p=2, dim=1).view(-1, 1)
+ loss_coord = torch.mean(torch.norm(x_original - x_virtual, p=2, dim=1)) # We just compare the direction
+ if beta_type == "pt+bc":
+ assert noise_logits is not None
+ y_true_noise = 1 - is_noise.float()
+ num_positives = torch.sum(y_true_noise).item()
+ num_negatives = len(y_true_noise) - num_positives
+ num_all = len(y_true_noise)
+ # Compute weights
+ pos_weight = num_all / num_positives if num_positives > 0 else 0
+ neg_weight = num_all / num_negatives if num_negatives > 0 else 0
+ weight = pos_weight * y_true_noise + neg_weight * (1 - y_true_noise)
+ L_bc = torch.nn.BCELoss(weight=weight)(
+ noise_logits, 1-is_noise.float()
+ )
+ #if torch.isnan(L_beta / batch_size):
+ # print("isnan!!!")
+ # print(L_beta, batch_size)
+ # print("L_beta_noise", L_beta_noise)
+ # print("L_beta_sig", L_beta_sig)
+ result = {
+ "loss_potential": L_V, # 0
+ "loss_beta": L_beta,
+ "loss_beta_sig": L_beta_sig, # signal part of the betas
+ "loss_beta_noise": L_beta_noise, # noise part of the betas
+ "loss_attractive": L_V_attractive,
+ "loss_repulsive": L_V_repulsive,
+ "loss_coord": loss_coord,
+ }
+ if beta_type == "pt+bc":
+ result["loss_noise_classification"] = L_bc
+ return result
+
+
+
+def huber(d, delta):
+ """
+ See: https://en.wikipedia.org/wiki/Huber_loss#Definition
+ Multiplied by 2 w.r.t Wikipedia version (aligning with Jan's definition)
+ """
+ return torch.where(
+ torch.abs(d) <= delta, d**2, 2.0 * delta * (torch.abs(d) - delta)
+ )
+
+
+def batch_cluster_indices(
+ cluster_id: torch.Tensor, batch: torch.Tensor
+) -> Tuple[torch.LongTensor, torch.LongTensor]:
+ """
+ Turns cluster indices per event to an index in the whole batch
+ Example:
+ cluster_id = torch.LongTensor([0, 0, 1, 1, 2, 0, 0, 1, 1, 1, 0, 0, 1])
+ batch = torch.LongTensor([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2])
+ -->
+ offset = torch.LongTensor([0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 5, 5, 5])
+ output = torch.LongTensor([0, 0, 1, 1, 2, 3, 3, 4, 4, 4, 5, 5, 6])
+ """
+ device = cluster_id.device
+ assert cluster_id.device == batch.device
+ # Count the number of clusters per entry in the batch
+ n_clusters_per_event = scatter_max(cluster_id, batch, dim=-1)[0] + 1
+ # Offsets are then a cumulative sum
+ offset_values_nozero = n_clusters_per_event[:-1].cumsum(dim=-1)
+ # Prefix a zero
+ offset_values = torch.cat((torch.zeros(1, device=device), offset_values_nozero))
+ # Fill it per hit
+ offset = torch.gather(offset_values, 0, batch).long()
+ return offset + cluster_id, n_clusters_per_event
+
+
+def get_clustering_np(
+ betas: np.array, X: np.array, tbeta: float = 0.1, td: float = 1.0
+) -> np.array:
+ """
+ Returns a clustering of hits -> cluster_index, based on the GravNet model
+ output (predicted betas and cluster space coordinates) and the clustering
+ parameters tbeta and td.
+ Takes numpy arrays as input.
+ """
+ n_points = betas.shape[0]
+ select_condpoints = betas > tbeta
+ # Get indices passing the threshold
+ indices_condpoints = np.nonzero(select_condpoints)[0]
+ # Order them by decreasing beta value
+ indices_condpoints = indices_condpoints[np.argsort(-betas[select_condpoints])]
+ # Assign points to condensation points
+ # Only assign previously unassigned points (no overwriting)
+ # Points unassigned at the end are bkg (-1)
+ unassigned = np.arange(n_points)
+ clustering = -1 * np.ones(n_points, dtype=np.int32)
+ for index_condpoint in indices_condpoints:
+ d = np.linalg.norm(X[unassigned] - X[index_condpoint], axis=-1)
+ assigned_to_this_condpoint = unassigned[d < td]
+ clustering[assigned_to_this_condpoint] = index_condpoint
+ unassigned = unassigned[~(d < td)]
+ return clustering
+
+
+def get_clustering(betas: torch.Tensor, X: torch.Tensor, tbeta=0.1, td=1.0):
+ """
+ Returns a clustering of hits -> cluster_index, based on the GravNet model
+ output (predicted betas and cluster space coordinates) and the clustering
+ parameters tbeta and td.
+ Takes torch.Tensors as input.
+ """
+ n_points = betas.size(0)
+ select_condpoints = betas > tbeta
+ # Get indices passing the threshold
+ indices_condpoints = select_condpoints.nonzero()
+ # Order them by decreasing beta value
+ indices_condpoints = indices_condpoints[(-betas[select_condpoints]).argsort()]
+ # Assign points to condensation points
+ # Only assign previously unassigned points (no overwriting)
+ # Points unassigned at the end are bkg (-1)
+ unassigned = torch.arange(n_points)
+ clustering = -1 * torch.ones(n_points, dtype=torch.long)
+ for index_condpoint in indices_condpoints:
+ d = torch.norm(X[unassigned] - X[index_condpoint][0], dim=-1)
+ assigned_to_this_condpoint = unassigned[d < td]
+ clustering[assigned_to_this_condpoint] = index_condpoint[0]
+ unassigned = unassigned[~(d < td)]
+ return clustering
+
+
+def scatter_count(input: torch.Tensor):
+ """
+ Returns ordered counts over an index array
+ Example:
+ >>> scatter_count(torch.Tensor([0, 0, 0, 1, 1, 2, 2])) # input
+ >>> [3, 2, 2]
+ Index assumptions work like in torch_scatter, so:
+ >>> scatter_count(torch.Tensor([1, 1, 1, 2, 2, 4, 4]))
+ >>> tensor([0, 3, 2, 0, 2])
+ """
+ return scatter_add(torch.ones_like(input, dtype=torch.long), input.long())
+
+
+def scatter_counts_to_indices(input: torch.LongTensor) -> torch.LongTensor:
+ """
+ Converts counts to indices. This is the inverse operation of scatter_count
+ Example:
+ input: [3, 2, 2]
+ output: [0, 0, 0, 1, 1, 2, 2]
+ """
+ return torch.repeat_interleave(
+ torch.arange(input.size(0), device=input.device), input
+ ).long()
+
+
+def get_inter_event_norms_mask(
+ batch: torch.LongTensor, nclusters_per_event: torch.LongTensor
+):
+ """
+ Creates mask of (nhits x nclusters) that is only 1 if hit i is in the same event as cluster j
+ Example:
+ cluster_id_per_event = torch.LongTensor([0, 0, 1, 1, 2, 0, 0, 1, 1, 1, 0, 0, 1])
+ batch = torch.LongTensor([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2])
+ Should return:
+ torch.LongTensor([
+ [1, 1, 1, 0, 0, 0, 0],
+ [1, 1, 1, 0, 0, 0, 0],
+ [1, 1, 1, 0, 0, 0, 0],
+ [1, 1, 1, 0, 0, 0, 0],
+ [1, 1, 1, 0, 0, 0, 0],
+ [0, 0, 0, 1, 1, 0, 0],
+ [0, 0, 0, 1, 1, 0, 0],
+ [0, 0, 0, 1, 1, 0, 0],
+ [0, 0, 0, 1, 1, 0, 0],
+ [0, 0, 0, 1, 1, 0, 0],
+ [0, 0, 0, 0, 0, 1, 1],
+ [0, 0, 0, 0, 0, 1, 1],
+ [0, 0, 0, 0, 0, 1, 1],
+ ])
+ """
+ device = batch.device
+ # Following the example:
+ # Expand batch to the following (nhits x nevents) matrix (little hacky, boolean mask -> long):
+ # [[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ # [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1]]
+ batch_expanded_as_ones = (
+ batch
+ == torch.arange(batch.max() + 1, dtype=torch.long, device=device).unsqueeze(-1)
+ ).long()
+ # Then repeat_interleave it to expand it to nclusters rows, and transpose to get (nhits x nclusters)
+ return batch_expanded_as_ones.repeat_interleave(nclusters_per_event, dim=0).T
+
+
+def isin(ar1, ar2):
+ """To be replaced by torch.isin for newer releases of torch"""
+ return (ar1[..., None] == ar2).any(-1)
+
+
+def reincrementalize(y: torch.Tensor, batch: torch.Tensor) -> torch.Tensor:
+ """Re-indexes y so that missing clusters are no longer counted.
+ Example:
+ >>> y = torch.LongTensor([
+ 0, 0, 0, 1, 1, 3, 3,
+ 0, 0, 0, 0, 0, 2, 2, 3, 3,
+ 0, 0, 1, 1
+ ])
+ >>> batch = torch.LongTensor([
+ 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2,
+ ])
+ >>> print(reincrementalize(y, batch))
+ tensor([0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 1, 1])
+ """
+ y_offset, n_per_event = batch_cluster_indices(y, batch)
+ offset = y_offset - y
+ n_clusters = n_per_event.sum()
+ holes = (
+ (~isin(torch.arange(n_clusters, device=y.device), y_offset))
+ .nonzero()
+ .squeeze(-1)
+ )
+ n_per_event_without_holes = n_per_event.clone()
+ n_per_event_cumsum = n_per_event.cumsum(0)
+ for hole in holes.sort(descending=True).values:
+ y_offset[y_offset > hole] -= 1
+ i_event = (hole > n_per_event_cumsum).long().argmin()
+ n_per_event_without_holes[i_event] -= 1
+ offset_per_event = torch.zeros_like(n_per_event_without_holes)
+ offset_per_event[1:] = n_per_event_without_holes.cumsum(0)[:-1]
+ offset_without_holes = torch.gather(offset_per_event, 0, batch).long()
+ reincrementalized = y_offset - offset_without_holes
+ return reincrementalized
+
+
+def L_clusters_calc(batch, cluster_space_coords, cluster_index, frac_combinations, q):
+ number_of_pairs = 0
+ for batch_id in batch.unique():
+ # do all possible pairs...
+ bmask = batch == batch_id
+ clust_space_filt = cluster_space_coords[bmask]
+ pos_pairs_all = []
+ neg_pairs_all = []
+ if len(cluster_index[bmask].unique()) <= 1:
+ continue
+ L_clusters = torch.tensor(0.0).to(q.device)
+ for cluster in cluster_index[bmask].unique():
+ coords_pos = clust_space_filt[cluster_index[bmask] == cluster]
+ coords_neg = clust_space_filt[cluster_index[bmask] != cluster]
+ if len(coords_neg) == 0:
+ continue
+ clust_idx = cluster_index[bmask] == cluster
+ # all_ones = torch.ones_like((clust_idx, clust_idx))
+ # pos_pairs = [[i, j] for i in range(len(coords_pos)) for j in range (len(coords_pos)) if i < j]
+ total_num = (len(coords_pos) ** 2) / 2
+ num = int(frac_combinations * total_num)
+ pos_pairs = []
+ for i in range(num):
+ pos_pairs.append(
+ [
+ np.random.randint(len(coords_pos)),
+ np.random.randint(len(coords_pos)),
+ ]
+ )
+ neg_pairs = []
+ for i in range(len(pos_pairs)):
+ neg_pairs.append(
+ [
+ np.random.randint(len(coords_pos)),
+ np.random.randint(len(coords_neg)),
+ ]
+ )
+ pos_pairs_all += pos_pairs
+ neg_pairs_all += neg_pairs
+ pos_pairs = torch.tensor(pos_pairs_all)
+ neg_pairs = torch.tensor(neg_pairs_all)
+ """# do just a small sample of the pairs. ...
+ bmask = batch == batch_id
+
+ #L_clusters = 0 # Loss of randomly sampled distances between points inside and outside clusters
+
+ pos_idx, neg_idx = [], []
+ for cluster in cluster_index[bmask].unique():
+ clust_idx = (cluster_index == cluster)[bmask]
+ perm = torch.randperm(clust_idx.sum())
+ perm1 = torch.randperm((~clust_idx).sum())
+ perm2 = torch.randperm(clust_idx.sum())
+ #cutoff = clust_idx.sum()//2
+ pos_lst = clust_idx.nonzero()[perm]
+ neg_lst = (~clust_idx).nonzero()[perm1]
+ neg_lst_second = clust_idx.nonzero()[perm2]
+ if len(pos_lst) % 2:
+ pos_lst = pos_lst[:-1]
+ if len(neg_lst) % 2:
+ neg_lst = neg_lst[:-1]
+ len_cap = min(len(pos_lst), len(neg_lst), len(neg_lst_second))
+ if len_cap % 2:
+ len_cap -= 1
+ pos_lst = pos_lst[:len_cap]
+ neg_lst = neg_lst[:len_cap]
+ neg_lst_second = neg_lst_second[:len_cap]
+ pos_pairs = pos_lst.reshape(-1, 2)
+ neg_pairs = torch.cat([neg_lst, neg_lst_second], dim=1)
+ neg_pairs = neg_pairs[:pos_lst.shape[0]//2, :]
+ pos_idx.append(pos_pairs)
+ neg_idx.append(neg_pairs)
+ pos_idx = torch.cat(pos_idx)
+ neg_idx = torch.cat(neg_idx)"""
+ assert pos_pairs.shape == neg_pairs.shape
+ if len(pos_pairs) == 0:
+ continue
+ cluster_space_coords_filtered = cluster_space_coords[bmask]
+ qs_filtered = q[bmask]
+ pos_norms = (
+ cluster_space_coords_filtered[pos_pairs[:, 0]]
+ - cluster_space_coords_filtered[pos_pairs[:, 1]]
+ ).norm(dim=-1)
+
+ neg_norms = (
+ cluster_space_coords_filtered[neg_pairs[:, 0]]
+ - cluster_space_coords_filtered[neg_pairs[:, 1]]
+ ).norm(dim=-1)
+ q_pos = qs_filtered[pos_pairs[:, 0]]
+ q_neg = qs_filtered[neg_pairs[:, 0]]
+ q_s = torch.cat([q_pos, q_neg])
+ norms_pos = torch.cat([pos_norms, neg_norms])
+ ys = torch.cat([torch.ones_like(pos_norms), -torch.ones_like(neg_norms)])
+ L_clusters += torch.sum(
+ q_s * torch.nn.HingeEmbeddingLoss(reduce=None)(norms_pos, ys)
+ )
+ number_of_pairs += norms_pos.shape[0]
+ if number_of_pairs > 0:
+ L_clusters = L_clusters / number_of_pairs
+ return L_clusters
+
+def calc_eta_phi(coords, return_stacked=True):
+ """
+ Calculate eta and phi from cartesian coordinates
+ """
+ x = coords[:, 0]
+ y = coords[:, 1]
+ z = coords[:, 2]
+ #eta, phi = torch.atan2(y, x), torch.asin(z / coords.norm(dim=1))
+ phi = torch.arctan2(y, x)
+ eta = torch.arctanh(z / torch.sqrt(x**2 + y**2 + z**2))
+ if not return_stacked:
+ return eta, phi
+ return torch.stack([eta, phi], dim=1)
+
+def loss_func_aug(y_pred, y_pred_aug, batch, batch_aug, event, event_aug):
+ coords_pred = y_pred[:, :3]
+ coords_pred_aug = y_pred_aug[:, :3]
+ original_particle_mapping = batch_aug.original_particle_mapping
+ #print("N in batch:", event.pfcands.batch_number)
+ #print("N in batch aug:", event_aug.pfcands.batch_number)
+ to_add_to_batch = event.pfcands.batch_number[:-1]
+ aug_batch_num = event_aug.pfcands.batch_number
+ print("Original particle mapping: (before sum)", original_particle_mapping.tolist())
+ filt_idx = torch.where(original_particle_mapping != -1)[0].tolist()
+ for i in range(len(aug_batch_num)-1):
+ for item in filt_idx:
+ if item >= aug_batch_num[i] and item < aug_batch_num[i+1]:
+ assert original_particle_mapping[item] != -1, "Original particle mapping should not be -1"
+ assert to_add_to_batch[i] >= 0, "Batch number should be >= 0: " + str(to_add_to_batch[i])
+ original_particle_mapping[item] += to_add_to_batch[i] # Try this due to some indexing issues
+ #original_particle_mapping[aug_batch_num[i]:aug_batch_num[i+1]][filt] += to_add_to_batch[i]
+ #print("Original particle mapping:", original_particle_mapping[original_particle_mapping != -1])
+ #original_particle_mapping[original_particle_mapping != -1] += batch_idx[original_particle_mapping != -1]
+ if not original_particle_mapping.max() < len(coords_pred):
+ print("Coords shapes", coords_pred.shape, coords_pred_aug.shape)
+ print("Original particle mapping:", original_particle_mapping[original_particle_mapping != -1], original_particle_mapping.shape, original_particle_mapping[original_particle_mapping!=-1].max())
+ print("Batch number in event:", event.pfcands.batch_number)
+ print("Batch number in event aug:", event_aug.pfcands.batch_number)
+ print("Len batch", batch.input_vectors.shape, "len batch_aug", batch_aug.input_vectors.shape)
+ raise ValueError("Original particle mapping out of bounds")
+ assert original_particle_mapping.max() < len(coords_pred)
+ coords_pred_aug_target = coords_pred[original_particle_mapping[original_particle_mapping != -1]]
+ coords_pred_aug_output = coords_pred_aug[original_particle_mapping != -1]
+ print("Output:", coords_pred_aug_output[:5], "Target:", coords_pred_aug_target[:5])
+ loss = torch.nn.MSELoss()(coords_pred_aug_output, coords_pred_aug_target)
+ return loss
+
+
+def object_condensation_loss(
+ batch, # input event
+ pred,
+ labels,
+ batch_numbers,
+ q_min=3.0,
+ frac_clustering_loss=0.1,
+ attr_weight=1.0,
+ repul_weight=1.0,
+ fill_loss_weight=1.0,
+ use_average_cc_pos=0.0,
+ loss_type="hgcalimplementation",
+ clust_space_norm="none",
+ dis=False,
+ coord_weight=0.0,
+ beta_type="default",
+ lorentz_norm=False,
+ spatial_part_only=False,
+ loss_quark_distance=False,
+ oc_scalars=False,
+ loss_obj_score=False
+):
+ """
+ :param batch: Model input
+ :param pred: Model output, containing regressed coordinates + betas
+ :param clust_space_dim: Number of dimensions in the cluster space
+ :return:
+ """
+ _, S = pred.shape
+ noise_logits = None
+ if beta_type == "default":
+ clust_space_dim = S - 1
+ bj = torch.sigmoid(torch.reshape(pred[:, clust_space_dim], [-1, 1])) # betas
+ elif beta_type == "pt":
+ bj = batch.pt
+ clust_space_dim = S
+ elif beta_type == "pt+bc":
+ bj = batch.pt
+ clust_space_dim = S - 1
+ noise_logits = pred[:, clust_space_dim]
+ original_coords = batch.input_vectors
+ if oc_scalars:
+ original_coords = original_coords[:, 1:4]
+ if dis:
+ distance_threshold = torch.reshape(pred[:, -1], [-1, 1])
+ else:
+ distance_threshold = 0
+ xj = pred[:, :clust_space_dim] # Coordinates in clustering space
+ #xj = calc_eta_phi(xj)
+ if clust_space_norm == "twonorm":
+ xj = torch.nn.functional.normalize(xj, dim=1)
+ elif clust_space_norm == "tanh":
+ xj = torch.tanh(xj)
+ elif clust_space_norm == "none":
+ pass
+ else:
+ raise NotImplementedError
+ if not loss_quark_distance:
+ clustering_index_l = labels
+ if loss_obj_score:
+ clustering_index_l = labels.labels+1
+ a = calc_LV_Lbeta(
+ original_coords,
+ batch,
+ distance_threshold,
+ beta=bj.view(-1),
+ cluster_space_coords=xj, # Predicted by model
+ cluster_index_per_event=clustering_index_l.view(
+ -1
+ ).long(), # Truth hit->cluster index
+ batch=batch_numbers.long(),
+ qmin=q_min,
+ attr_weight=attr_weight,
+ repul_weight=repul_weight,
+ use_average_cc_pos=use_average_cc_pos,
+ loss_type=loss_type,
+ dis=dis,
+ beta_type=beta_type,
+ noise_logits=noise_logits,
+ lorentz_norm=lorentz_norm,
+ spatial_part_only=spatial_part_only
+ )
+ loss = a["loss_potential"] + a["loss_beta"]
+ if coord_weight > 0:
+ loss += a["loss_coord"] * coord_weight
+ else:
+ # quark distance loss
+ target_coords = labels.labels_coordinates[labels.labels[labels.labels != -1]]
+ if lorentz_norm:
+ diff = xj[labels.labels != -1] - labels.labels_coordinates[labels.labels != -1]
+ norms = diff[:, :, 0]**2 - torch.sum(diff[:, :, 1:] ** 2, dim=-1)
+ norms = norms.abs()
+ else:
+ if spatial_part_only:
+ x_coords = xj[labels.labels != -1, 1:4]
+ x_true = target_coords[:, 1:4]
+ else:
+ x_coords = xj[labels.labels != -1]
+ x_true = target_coords
+ #norms = torch.norm(x_coords - x_true, p=2, dim=1)
+ # cosine similarity
+ norms = 2 - (torch.nn.functional.cosine_similarity(x_coords, x_true[:, 1:4], dim=1) + 1)
+ a = {"norms_loss": torch.mean(norms)}
+ loss = a["norms_loss"]
+ if beta_type == "pt+bc":
+ # TODO: polish this, it's another loss that should be computed outside calc_LV_Lbeta
+ assert noise_logits is not None
+ is_noise = labels.labels == -1
+ y_true_noise = 1 - is_noise.float()
+ num_positives = torch.sum(y_true_noise).item()
+ num_negatives = len(y_true_noise) - num_positives
+ num_all = len(y_true_noise)
+ # Compute weights
+ pos_weight = num_all / num_positives if num_positives > 0 else 0
+ neg_weight = num_all / num_negatives if num_negatives > 0 else 0
+ weight = pos_weight * y_true_noise + neg_weight * (1 - y_true_noise)
+ L_bc = torch.nn.BCELoss(weight=weight)(
+ noise_logits, 1 - is_noise.float()
+ )
+ a["loss_noise_classification"] = L_bc
+ if beta_type == "pt+bc":
+ loss += a["loss_noise_classification"]
+ return loss, a
diff --git a/src/layers/object_cond_infonet.py b/src/layers/object_cond_infonet.py
new file mode 100644
index 0000000000000000000000000000000000000000..33a5cb0f40513d3e4118127c8937fd6965bd03c2
--- /dev/null
+++ b/src/layers/object_cond_infonet.py
@@ -0,0 +1,75 @@
+from typing import Tuple, Union
+import numpy as np
+import torch
+from torch_scatter import scatter_max, scatter_add, scatter_mean
+from src.layers.loss_fill_space_torch import LLFillSpace
+import dgl
+
+
+def infonet_updated(g, qmin, xj, bj):
+ list_graphs = dgl.unbatch(g)
+ loss_total = 0
+ Loss_beta_zero = 0
+ number_particles_accounted_for = 0
+ node_counter = 0
+ Loss_beta = 0
+ for i in range(0, len(list_graphs)):
+ graph_eval = list_graphs[i]
+ non = graph_eval.number_of_nodes()
+ xj_graph = xj[node_counter : non + node_counter]
+ bj_graph = bj[node_counter : non + node_counter]
+ q_graph = bj_graph.arctanh() ** 2 + qmin
+ q = q_graph.detach().cpu().numpy()
+ part_num = graph_eval.ndata["particle_number"].view(-1).to(torch.long)
+ q_alpha, index_alpha = scatter_max(q_graph.view(-1), part_num - 1)
+ x_alpha = xj_graph[index_alpha]
+ number_of_particles = torch.unique(graph_eval.ndata["particle_number"])
+ indx = torch.zeros((len(number_of_particles), 50)).to(x_alpha.device)
+ b_alpha = bj_graph[index_alpha]
+ # beta_zero_loss = torch.sum(torch.exp(10 * bj_graph)) / non
+ beta_zero_loss = torch.sum(bj_graph) / non
+ if len(number_of_particles) > 1:
+ for nn in range(0, len(number_of_particles)):
+ idx_part = number_of_particles[nn]
+ positives_of_class = graph_eval.ndata["particle_number"] == idx_part
+ pos_indx = torch.where(positives_of_class == True)[0]
+ if len(pos_indx) > 50:
+ indx[nn, :] = pos_indx[0:50]
+ else:
+ indx[nn, 0 : len(pos_indx)] = pos_indx
+ indx[nn, len(pos_indx) :] = pos_indx[0]
+ for nn in range(0, len(number_of_particles)):
+ idx_part = number_of_particles[nn]
+ positives_of_class = graph_eval.ndata["particle_number"] == idx_part
+ xj_ = xj_graph[positives_of_class]
+ x_alpha_ = x_alpha[nn]
+ dot_products = torch.mul(
+ xj_, x_alpha_.unsqueeze(0).tile((xj_.shape[0], 1))
+ ).sum(dim=1)
+ dot_products_exp = torch.exp(dot_products)
+ indx_copy = indx.clone()
+ indx_copy[nn] = -1
+ indx_copy = indx_copy.view(-1)
+ indx_copy = indx_copy[indx_copy > -1]
+ neg_indx = indx_copy
+ xj_neg = xj_graph[neg_indx.long()]
+ dot_neg = torch.sum(
+ torch.exp(torch.tensordot(xj_, xj_neg, dims=([1], [1]))), dim=1
+ )
+ loss = torch.mean(-torch.log(dot_products_exp / dot_neg))
+ if torch.sum(torch.isnan(loss)) > 0:
+ print(dot_products)
+ print(dot_neg)
+ print(dot_products / dot_neg)
+ print(torch.log(dot_products / dot_neg))
+ loss_total = loss_total + loss
+ number_particles_accounted_for = number_particles_accounted_for + 1
+ Loss_beta = Loss_beta + torch.sum((1 - b_alpha)) / len(b_alpha)
+ Loss_beta_zero = Loss_beta_zero + beta_zero_loss
+
+ loss_total = loss_total / number_particles_accounted_for
+ Loss_beta = Loss_beta / len(list_graphs)
+ Loss_beta_zero = Loss_beta_zero / len(list_graphs)
+ loss_total_ = loss_total + Loss_beta + Loss_beta_zero
+
+ return loss_total_, Loss_beta, Loss_beta_zero, loss_total
diff --git a/src/layers/object_cond_reimplemented.py b/src/layers/object_cond_reimplemented.py
new file mode 100644
index 0000000000000000000000000000000000000000..ff59b713717d9d7b3a440fedc1bc845a5c7289cb
--- /dev/null
+++ b/src/layers/object_cond_reimplemented.py
@@ -0,0 +1,1450 @@
+import torch
+import torch.nn as nn
+from torch import Tensor
+from torch_scatter import scatter_min, scatter_max, scatter_mean, scatter_add
+
+from src.layers.GravNetConv import GravNetConv
+
+from typing import Tuple, Union, List
+import dgl
+
+
+onehot_particles_arr = [
+ -2212.0,
+ -211.0,
+ -14.0,
+ -13.0,
+ -11.0,
+ 11.0,
+ 12.0,
+ 13.0,
+ 14.0,
+ 22.0,
+ 111.0,
+ 130.0,
+ 211.0,
+ 2112.0,
+ 2212.0,
+ 1000010048.0,
+ 1000020032.0,
+ 1000040064.0,
+ 1000050112.0,
+ 1000060096.0,
+ 1000080128.0,
+]
+onehot_particles_arr = [int(x) for x in onehot_particles_arr]
+pid_dict = {i + 1: onehot_particles_arr[i] for i in range(len(onehot_particles_arr))}
+pid_dict[0] = "other"
+
+
+def safe_index(arr, index):
+ # One-hot index (or zero if it's not in the array)
+ if index not in arr:
+ return 0
+ else:
+ return arr.index(index) + 1
+
+
+def assert_no_nans(x):
+ """
+ Raises AssertionError if there is a nan in the tensor
+ """
+ if torch.isnan(x).any():
+ print(x)
+ assert not torch.isnan(x).any()
+
+
+# FIXME: Use a logger instead of this
+DEBUG = False
+
+
+def debug(*args, **kwargs):
+ if DEBUG:
+ print(*args, **kwargs)
+
+
+def calc_energy_pred(
+ batch,
+ g,
+ cluster_index_per_event,
+ is_sig,
+ q,
+ beta,
+ energy_correction,
+ pid_results,
+ hit_mom,
+):
+ td = 0.7
+ batch_number = torch.max(batch) + 1
+ energies = []
+ pid_outputs = []
+ momenta = []
+ for i in range(0, batch_number):
+ mask_batch = batch == i
+ X = g.ndata["pos_hits_xyz"][mask_batch]
+ cluster_index_i = cluster_index_per_event[mask_batch] - 1
+ is_sig_i = is_sig[mask_batch]
+
+ q_i = q[mask_batch]
+ betas = beta[mask_batch]
+ q_alpha_i, index_alpha_i = scatter_max(q_i[is_sig_i], cluster_index_i)
+ n_points = betas.size(0)
+ unassigned = torch.arange(n_points).to(betas.device)
+ clustering = -1 * torch.ones(n_points, dtype=torch.long)
+ counter = 0
+ # index_alpha_i -= 1
+ for index_condpoint in index_alpha_i:
+ d = torch.norm(X[unassigned] - X[index_condpoint], dim=-1)
+ assigned_to_this_condpoint = unassigned[d < td]
+ clustering[assigned_to_this_condpoint] = counter
+ unassigned = unassigned[~(d < td)]
+ counter = counter + 1
+ counter = 0
+ for index_condpoint in index_alpha_i:
+ clustering[index_condpoint] = counter
+ counter = counter + 1
+ if torch.sum(clustering == -1) > 0:
+ clustering_ = clustering + 1
+ else:
+ clustering_ = clustering
+ clus_values = np.unique(clustering)
+ e_c = g.ndata["e_hits"][mask_batch][is_sig_i].view(-1) * energy_correction[
+ mask_batch
+ ][is_sig_i].view(-1)
+ mom_c = hit_mom[mask_batch][is_sig_i].view(-1)
+ # pid_results_i = pid_results[mask_batch][is_sig_i][index_alpha_i]
+ pid_results_i = scatter_add(
+ pid_results[mask_batch][is_sig_i],
+ clustering_.long().to(pid_results.device),
+ dim=0,
+ )
+ # aggregated "PID embeddings"
+ e_objects = scatter_add(e_c, clustering_.long().to(e_c.device))
+ mom_objects = scatter_add(mom_c, clustering_.long().to(mom_c.device))
+ e_objects = e_objects[clus_values != -1]
+ pid_results_i = pid_results_i[clus_values != -1]
+ mom_objects = mom_objects[clus_values != -1]
+ energies.append(e_objects)
+ pid_outputs.append(pid_results_i)
+ momenta.append(mom_objects)
+ return (
+ torch.cat(energies, dim=0),
+ torch.cat(pid_outputs, dim=0),
+ torch.cat(momenta, dim=0),
+ )
+
+
+def calc_pred_pid(batch, g, cluster_index_per_event, is_sig, q, beta, pred_pid):
+ outputs = []
+ batch_number = torch.max(batch) + 1
+ for i in range(0, batch_number):
+ mask_batch = batch == i
+ is_sig_i = is_sig[mask_batch]
+ pid = pred_pid[mask_batch][is_sig_i].view(-1)
+ outputs.append(pid)
+ return torch.cat(outputs, dim=0)
+
+
+def calc_LV_Lbeta(
+ original_coords,
+ g,
+ y,
+ distance_threshold,
+ energy_correction,
+ momentum: torch.Tensor,
+ beta: torch.Tensor,
+ cluster_space_coords: torch.Tensor, # Predicted by model
+ cluster_index_per_event: torch.Tensor, # Truth hit->cluster index
+ batch: torch.Tensor,
+ predicted_pid: torch.Tensor, # predicted PID embeddings - will be aggregated by summing up the clusters and applying the post_pid_pool_module MLP afterwards
+ post_pid_pool_module: None, # MLP to apply to the pooled embeddings to get the PID predictions torch.nn.Module
+ # From here on just parameters
+ qmin: float = 0.1,
+ s_B: float = 1.0,
+ noise_cluster_index: int = 0, # cluster_index entries with this value are noise/noise
+ beta_stabilizing="soft_q_scaling",
+ huberize_norm_for_V_attractive=False,
+ beta_term_option="paper",
+ return_components=False,
+ return_regression_resolution=False,
+ clust_space_dim=3,
+ frac_combinations=0, # fraction of the all possible pairs to be used for the clustering loss
+ attr_weight=1.0,
+ repul_weight=1.0,
+ fill_loss_weight=0.0,
+ use_average_cc_pos=0.0,
+ hgcal_implementation=False,
+ hit_energies=None,
+ tracking=False,
+ dis = False
+) -> Union[Tuple[torch.Tensor, torch.Tensor], dict]:
+ """
+ Calculates the L_V and L_beta object condensation losses.
+ Concepts:
+ - A hit belongs to exactly one cluster (cluster_index_per_event is (n_hits,)),
+ and to exactly one event (batch is (n_hits,))
+ - A cluster index of `noise_cluster_index` means the cluster is a noise cluster.
+ There is typically one noise cluster per event. Any hit in a noise cluster
+ is a 'noise hit'. A hit in an object is called a 'signal hit' for lack of a
+ better term.
+ - An 'object' is a cluster that is *not* a noise cluster.
+ beta_stabilizing: Choices are ['paper', 'clip', 'soft_q_scaling']:
+ paper: beta is sigmoid(model_output), q = beta.arctanh()**2 + qmin
+ clip: beta is clipped to 1-1e-4, q = beta.arctanh()**2 + qmin
+ soft_q_scaling: beta is sigmoid(model_output), q = (clip(beta)/1.002).arctanh()**2 + qmin
+ huberize_norm_for_V_attractive: Huberizes the norms when used in the attractive potential
+ beta_term_option: Choices are ['paper', 'short-range-potential']:
+ Choosing 'short-range-potential' introduces a short range potential around high
+ beta points, acting like V_attractive.
+ Note this function has modifications w.r.t. the implementation in 2002.03605:
+ - The norms for V_repulsive are now Gaussian (instead of linear hinge)
+ """
+ # remove dummy rows added for dataloader #TODO think of better way to do this
+ device = beta.device
+ if torch.isnan(beta).any():
+ print("There are nans in beta! L198", len(beta[torch.isnan(beta)]))
+
+ beta = torch.nan_to_num(beta, nan=0.0)
+ assert_no_nans(beta)
+ # ________________________________
+
+ # Calculate a bunch of needed counts and indices locally
+
+ # cluster_index: unique index over events
+ # E.g. cluster_index_per_event=[ 0, 0, 1, 2, 0, 0, 1], batch=[0, 0, 0, 0, 1, 1, 1]
+ # -> cluster_index=[ 0, 0, 1, 2, 3, 3, 4 ]
+ cluster_index, n_clusters_per_event = batch_cluster_indices(
+ cluster_index_per_event, batch
+ )
+ n_clusters = n_clusters_per_event.sum()
+ n_hits, cluster_space_dim = cluster_space_coords.size()
+ batch_size = batch.max() + 1
+ n_hits_per_event = scatter_count(batch)
+
+ # Index of cluster -> event (n_clusters,)
+ batch_cluster = scatter_counts_to_indices(n_clusters_per_event)
+
+ # Per-hit boolean, indicating whether hit is sig or noise
+ is_noise = cluster_index_per_event == noise_cluster_index
+ is_sig = ~is_noise
+ n_hits_sig = is_sig.sum()
+ n_sig_hits_per_event = scatter_count(batch[is_sig])
+
+ # Per-cluster boolean, indicating whether cluster is an object or noise
+ is_object = scatter_max(is_sig.long(), cluster_index)[0].bool()
+ is_noise_cluster = ~is_object
+
+ # FIXME: This assumes noise_cluster_index == 0!!
+ # Not sure how to do this in a performant way in case noise_cluster_index != 0
+ if noise_cluster_index != 0:
+ raise NotImplementedError
+ object_index_per_event = cluster_index_per_event[is_sig] - 1
+ object_index, n_objects_per_event = batch_cluster_indices(
+ object_index_per_event, batch[is_sig]
+ )
+ n_hits_per_object = scatter_count(object_index)
+ # print("n_hits_per_object", n_hits_per_object)
+ batch_object = batch_cluster[is_object]
+ n_objects = is_object.sum()
+
+ assert object_index.size() == (n_hits_sig,)
+ assert is_object.size() == (n_clusters,)
+ assert torch.all(n_hits_per_object > 0)
+ assert object_index.max() + 1 == n_objects
+
+ # ________________________________
+ # L_V term
+
+ # Calculate q
+ if hgcal_implementation:
+ q = (beta.arctanh() / 1.01) ** 2 + qmin
+ elif beta_stabilizing == "paper":
+ q = beta.arctanh() ** 2 + qmin
+ elif beta_stabilizing == "clip":
+ beta = beta.clip(0.0, 1 - 1e-4)
+ q = beta.arctanh() ** 2 + qmin
+ elif beta_stabilizing == "soft_q_scaling":
+ q = (beta.clip(0.0, 1 - 1e-4) / 1.002).arctanh() ** 2 + qmin
+ else:
+ raise ValueError(f"beta_stablizing mode {beta_stabilizing} is not known")
+ assert_no_nans(q)
+ assert q.device == device
+ assert q.size() == (n_hits,)
+
+ # Calculate q_alpha, the max q per object, and the indices of said maxima
+ # assert hit_energies.shape == q.shape
+ # q_alpha, index_alpha = scatter_max(hit_energies[is_sig], object_index)
+ q_alpha, index_alpha = scatter_max(q[is_sig], object_index)
+ assert q_alpha.size() == (n_objects,)
+
+ # Get the cluster space coordinates and betas for these maxima hits too
+ x_alpha = cluster_space_coords[is_sig][index_alpha]
+ x_alpha_original = original_coords[is_sig][index_alpha]
+ if use_average_cc_pos > 0:
+ #! this is a func of beta and q so maybe we could also do it with only q
+ x_alpha_sum = scatter_add(
+ q[is_sig].view(-1, 1).repeat(1, 3) * cluster_space_coords[is_sig],
+ object_index,
+ dim=0,
+ ) # * beta[is_sig].view(-1, 1).repeat(1, 3)
+ qbeta_alpha_sum = scatter_add(q[is_sig], object_index) + 1e-9 # * beta[is_sig]
+ div_fac = 1 / qbeta_alpha_sum
+ div_fac = torch.nan_to_num(div_fac, nan=0)
+ x_alpha_mean = torch.mul(x_alpha_sum, div_fac.view(-1, 1).repeat(1, 3))
+ x_alpha = use_average_cc_pos * x_alpha_mean + (1 - use_average_cc_pos) * x_alpha
+ if dis:
+ phi_sum = scatter_add(
+ beta[is_sig].view(-1) * distance_threshold[is_sig].view(-1),
+ object_index,
+ dim=0,
+ )
+ phi_alpha_sum = scatter_add(beta[is_sig].view(-1), object_index) + 1e-9
+ phi_alpha = phi_sum/phi_alpha_sum
+
+ beta_alpha = beta[is_sig][index_alpha]
+ assert x_alpha.size() == (n_objects, cluster_space_dim)
+ assert beta_alpha.size() == (n_objects,)
+
+ if not tracking:
+ positions_particles_pred = g.ndata["pos_hits_xyz"][is_sig][index_alpha]
+ positions_particles_pred = (
+ positions_particles_pred + distance_threshold[is_sig][index_alpha]
+ )
+
+ # e_particles_pred = g.ndata["e_hits"][is_sig][index_alpha]
+ # e_particles_pred = e_particles_pred * energy_correction[is_sig][index_alpha]
+ # particles pred updated to follow end-to-end paper approach, sum the particles in the object and multiply by the correction factor of alpha (the cluster center)
+ # e_particles_pred = (scatter_add(g.ndata["e_hits"][is_sig].view(-1), object_index)*energy_correction[is_sig][index_alpha].view(-1)).view(-1,1)
+ e_particles_pred, pid_particles_pred, mom_particles_pred = calc_energy_pred(
+ batch,
+ g,
+ cluster_index_per_event,
+ is_sig,
+ q,
+ beta,
+ energy_correction,
+ predicted_pid,
+ momentum,
+ )
+
+ if fill_loss_weight > 0:
+ fill_loss = fill_loss_weight * LLFillSpace()(cluster_space_coords, batch)
+ else:
+ fill_loss = 0
+ # pid_particles_pred = post_pid_pool_module(
+ # pid_particles_pred
+ # ) # Project the pooled PID embeddings to the final "one hot encoding" space
+ # pid_particles_pred = calc_pred_pid(
+ # batch, g, cluster_index_per_event, is_sig, q, beta, predicted_pid
+ # )
+ if not tracking:
+ x_particles = y[:, 0:3]
+ e_particles = y[:, 3]
+ mom_particles_true = y[:, 4]
+ mass_particles_true = y[:, 5]
+ # particles_mask = y[:, 6]
+ mom_particles_true = mom_particles_true.to(device)
+ mass_particles_pred = e_particles_pred**2 - mom_particles_pred**2
+ mass_particles_true = mass_particles_true.to(device)
+ mass_particles_pred[mass_particles_pred < 0] = 0.0
+ mass_particles_pred = torch.sqrt(mass_particles_pred)
+ loss_mass = torch.nn.MSELoss()(
+ mass_particles_true, mass_particles_pred
+ ) # only logging this, not using it in the loss func
+ pid_id_particles = y[:, 6].unsqueeze(1).long()
+ pid_particles_true = torch.zeros((pid_id_particles.shape[0], 22))
+ part_idx_onehot = [
+ safe_index(onehot_particles_arr, i)
+ for i in pid_id_particles.flatten().tolist()
+ ]
+ pid_particles_true[
+ torch.arange(pid_id_particles.shape[0]), part_idx_onehot
+ ] = 1.0
+
+ # if return_regression_resolution:
+ # e_particles_pred = e_particles_pred.detach().flatten()
+ # e_particles = e_particles.detach().flatten()
+ # positions_particles_pred = positions_particles_pred.detach().flatten()
+ # x_particles = x_particles.detach().flatten()
+ # mom_particles_pred = mom_particles_pred.detach().flatten().to("cpu")
+ # mom_particles_true = mom_particles_true.detach().flatten().to("cpu")
+ # return (
+ # {
+ # "momentum_res": (
+ # (mom_particles_pred - mom_particles_true) / mom_particles_true
+ # ).tolist(),
+ # "e_res": ((e_particles_pred - e_particles) / e_particles).tolist(),
+ # "pos_res": (
+ # (positions_particles_pred - x_particles) / x_particles
+ # ).tolist(),
+ # },
+ # pid_particles_true,
+ # pid_particles_pred,
+ # )
+
+ e_particles_pred_per_object = scatter_add(
+ g.ndata["e_hits"][is_sig].view(-1), object_index
+ ) # *energy_correction[is_sig][index_alpha].view(-1)).view(-1,1)
+ e_particle_pred_per_particle = e_particles_pred_per_object[
+ object_index
+ ] * energy_correction.view(-1)
+ e_true = y[:, 3].clone()
+ e_true = e_true.to(e_particles_pred_per_object.device)
+ e_true_particle = e_true[object_index]
+ L_i = (e_particle_pred_per_particle - e_true_particle) ** 2 / e_true_particle
+ B_i = (beta[is_sig].arctanh() / 1.01) ** 2 + 1e-3
+ loss_E = torch.sum(L_i * B_i) / torch.sum(B_i)
+
+ # loss_E = torch.mean(
+ # torch.square(
+ # (e_particles_pred.to(device) - e_particles.to(device))
+ # / e_particles.to(device)
+ # )
+ # )
+ loss_momentum = torch.mean(
+ torch.square(
+ (mom_particles_pred.to(device) - mom_particles_true.to(device))
+ / mom_particles_true.to(device)
+ )
+ )
+ # loss_ce = torch.nn.BCELoss()
+ loss_mse = torch.nn.MSELoss()
+ loss_x = loss_mse(positions_particles_pred.to(device), x_particles.to(device))
+ # loss_x = 0. # TEMPORARILY, there is some issue with X loss and it goes to \infty
+ # loss_particle_ids = loss_ce(
+ # pid_particles_pred.to(device), pid_particles_true.to(device)
+ # )
+ # pid_true = pid_particles_true.argmax(dim=1).detach().tolist()
+ # pid_pred = pid_particles_pred.argmax(dim=1).detach().tolist()
+ # pid_true = [pid_dict[i.long().item()] for i in pid_true]
+ # pid_pred = [pid_dict[i.long().item()] for i in pid_pred]
+ # Connectivity matrix from hit (row) -> cluster (column)
+ # Index to matrix, e.g.:
+ # [1, 3, 1, 0] --> [
+ # [0, 1, 0, 0],
+ # [0, 0, 0, 1],
+ # [0, 1, 0, 0],
+ # [1, 0, 0, 0]
+ # ]
+ M = torch.nn.functional.one_hot(cluster_index).long()
+
+ # Anti-connectivity matrix; be sure not to connect hits to clusters in different events!
+ M_inv = get_inter_event_norms_mask(batch, n_clusters_per_event) - M
+
+ # Throw away noise cluster columns; we never need them
+ M = M[:, is_object]
+ M_inv = M_inv[:, is_object]
+ assert M.size() == (n_hits, n_objects)
+ assert M_inv.size() == (n_hits, n_objects)
+
+ # Calculate all norms
+ # Warning: Should not be used without a mask!
+ # Contains norms between hits and objects from different events
+ # (n_hits, 1, cluster_space_dim) - (1, n_objects, cluster_space_dim)
+ # gives (n_hits, n_objects, cluster_space_dim)
+ norms = (cluster_space_coords.unsqueeze(1) - x_alpha.unsqueeze(0)).norm(dim=-1)
+ assert norms.size() == (n_hits, n_objects)
+ L_clusters = torch.tensor(0.0).to(device)
+ if frac_combinations != 0:
+ L_clusters = L_clusters_calc(
+ batch, cluster_space_coords, cluster_index, frac_combinations, q
+ )
+
+ # -------
+ # Attractive potential term
+
+ # First get all the relevant norms: We only want norms of signal hits
+ # w.r.t. the object they belong to, i.e. no noise hits and no noise clusters.
+ # First select all norms of all signal hits w.r.t. all objects, mask out later
+
+ if hgcal_implementation:
+ N_k = torch.sum(M, dim=0) # number of hits per object
+ norms = torch.sum(
+ torch.square(cluster_space_coords.unsqueeze(1) - x_alpha.unsqueeze(0)),
+ dim=-1,
+ )
+ norms_att = norms[is_sig]
+ #! att func as in line 159 of object condensation
+ norms_att = torch.log(
+ torch.exp(torch.Tensor([1]).to(norms_att.device)) * norms_att / 2 + 1
+ )
+ # Power-scale the norms
+ elif huberize_norm_for_V_attractive:
+ norms_att = norms[is_sig]
+ # Huberized version (linear but times 4)
+ # Be sure to not move 'off-diagonal' away from zero
+ # (i.e. norms of hits w.r.t. clusters they do _not_ belong to)
+ norms_att = huber(norms_att + 1e-5, 4.0)
+ else:
+ norms_att = norms[is_sig]
+ # Paper version is simply norms squared (no need for mask)
+ norms_att = norms_att**2
+ assert norms_att.size() == (n_hits_sig, n_objects)
+
+ # Now apply the mask to keep only norms of signal hits w.r.t. to the object
+ # they belong to
+ norms_att *= M[is_sig]
+
+ # Final potential term
+ # (n_sig_hits, 1) * (1, n_objects) * (n_sig_hits, n_objects)
+ V_attractive = q[is_sig].unsqueeze(-1) * q_alpha.unsqueeze(0) * norms_att
+ assert V_attractive.size() == (n_hits_sig, n_objects)
+
+ # Sum over hits, then sum per event, then divide by n_hits_per_event, then sum over events
+ if hgcal_implementation:
+ #! each shower is account for separately
+ V_attractive = V_attractive.sum(dim=0) # K objects
+ #! divide by the number of accounted points
+ V_attractive = V_attractive.view(-1) / (
+ N_k.view(-1) + 1e-3
+ ) # every object is accounted for equally
+ # if not tracking:
+ # #! add to terms function (divide by total number of showers per event)
+ # # L_V_attractive = scatter_add(V_attractive, object_index) / n_objects
+ # # L_V_attractive = torch.mean(
+ # # V_attractive
+ # # ) # V_attractive size n_objects, so per shower metric
+ # per_shower_weight = torch.exp(1 / (e_particles_pred_per_object + 0.4))
+ # soft_m = torch.nn.Softmax(dim=0)
+ # per_shower_weight = soft_m(per_shower_weight) * len(V_attractive)
+ # L_V_attractive = torch.mean(V_attractive * per_shower_weight)
+ # else:
+ # weight classes by bin
+ # if tracking:
+ # e_true = y[:, 5].clone()
+ # # e_true_particle = e_true[object_index]
+ # label = 1 * (e_true > 4)
+ # V = label.size(0)
+ # n_classes = 2
+ # label_count = torch.bincount(label)
+ # label_count = label_count[label_count.nonzero()].squeeze()
+ # cluster_sizes = torch.zeros(n_classes).long().to(label_count.device)
+ # cluster_sizes[torch.unique(label)] = label_count
+ # weight = (V - cluster_sizes).float() / V
+ # weight *= (cluster_sizes > 0).float()
+ # per_shower_weight = weight[label]
+ # soft_m = torch.nn.Softmax(dim=0)
+ # per_shower_weight = soft_m(per_shower_weight) * len(V_attractive)
+ # L_V_attractive = torch.mean(V_attractive * per_shower_weight)
+ # else:
+ L_V_attractive = torch.mean(V_attractive)
+ else:
+ #! in comparison this works per hit
+ V_attractive = (
+ scatter_add(V_attractive.sum(dim=0), batch_object) / n_hits_per_event
+ )
+ assert V_attractive.size() == (batch_size,)
+ L_V_attractive = V_attractive.sum()
+
+ # -------
+ # Repulsive potential term
+
+ # Get all the relevant norms: We want norms of any hit w.r.t. to
+ # objects they do *not* belong to, i.e. no noise clusters.
+ # We do however want to keep norms of noise hits w.r.t. objects
+ # Power-scale the norms: Gaussian scaling term instead of a cone
+ # Mask out the norms of hits w.r.t. the cluster they belong to
+ if hgcal_implementation:
+ norms_rep = torch.exp(-(norms) / 2) * M_inv
+ norms_rep2 = torch.exp(-(norms) * 5) * M_inv
+ else:
+ norms_rep = torch.exp(-4.0 * norms**2) * M_inv
+
+ # (n_sig_hits, 1) * (1, n_objects) * (n_sig_hits, n_objects)
+ V_repulsive = q.unsqueeze(1) * q_alpha.unsqueeze(0) * norms_rep
+ V_repulsive2 = q.unsqueeze(1) * q_alpha.unsqueeze(0) * norms_rep2
+ # No need to apply a V = max(0, V); by construction V>=0
+ assert V_repulsive.size() == (n_hits, n_objects)
+
+ # Sum over hits, then sum per event, then divide by n_hits_per_event, then sum up events
+ nope = n_objects_per_event - 1
+ nope[nope == 0] = 1
+ if hgcal_implementation:
+ #! sum each object repulsive terms
+ L_V_repulsive = V_repulsive.sum(dim=0) # size number of objects
+ number_of_repulsive_terms_per_object = torch.sum(M_inv, dim=0)
+ L_V_repulsive = L_V_repulsive.view(
+ -1
+ ) / number_of_repulsive_terms_per_object.view(-1)
+ L_V_repulsive2 = V_repulsive2.sum(dim=0) # size number of objects
+
+ L_V_repulsive2 = L_V_repulsive2.view(-1)
+
+ # if not tracking:
+ # #! add to terms function (divide by total number of showers per event)
+ # # L_V_repulsive = scatter_add(L_V_repulsive, object_index) / n_objects
+ # per_shower_weight = torch.exp(1 / (e_particles_pred_per_object + 0.4))
+ # soft_m = torch.nn.Softmax(dim=0)
+ # per_shower_weight = soft_m(per_shower_weight) * len(L_V_repulsive)
+ # L_V_repulsive = torch.mean(L_V_repulsive * per_shower_weight)
+ # else:
+ # if tracking:
+ # L_V_repulsive = torch.mean(L_V_repulsive * per_shower_weight)
+ # else:
+ L_V_repulsive = torch.mean(L_V_repulsive)
+ L_V_repulsive2 = torch.mean(L_V_repulsive)
+ else:
+ L_V_repulsive = (
+ scatter_add(V_repulsive.sum(dim=0), batch_object)
+ / (n_hits_per_event * nope)
+ ).sum()
+ L_V = (
+ attr_weight * L_V_attractive
+ # + repul_weight * L_V_repulsive
+ + L_V_repulsive2
+ # + L_clusters
+ # + fill_loss
+ )
+ if L_clusters != 0:
+ print(
+ "L-clusters is",
+ 100 * (L_clusters / L_V).detach().cpu().item(),
+ "% of L_V. L_clusters value:",
+ L_clusters.detach().cpu().item(),
+ )
+ # else:
+ # print("L-clusters is ZERO")
+ # ________________________________
+ # L_beta term
+
+ # -------
+ # L_beta noise term
+
+ n_noise_hits_per_event = scatter_count(batch[is_noise])
+ n_noise_hits_per_event[n_noise_hits_per_event == 0] = 1
+ L_beta_noise = (
+ s_B
+ * (
+ (scatter_add(beta[is_noise], batch[is_noise])) / n_noise_hits_per_event
+ ).sum()
+ )
+ # print("L_beta_noise", L_beta_noise / batch_size)
+ # -------
+ # L_beta signal term
+ if hgcal_implementation:
+ # version one:
+ beta_per_object_c = scatter_add(beta[is_sig], object_index)
+ beta_alpha = beta[is_sig][index_alpha]
+ L_beta_sig = torch.mean(
+ 1 - beta_alpha + 1 - torch.clip(beta_per_object_c, 0, 1)
+ )
+ # this is also per object so not dividing by batch size
+
+ # version 2 with the LSE approximation for the max
+ # eps = 1e-3
+ # beta_per_object = scatter_add(torch.exp(beta[is_sig] / eps), object_index)
+ # beta_pen = 1 - eps * torch.log(beta_per_object)
+ # beta_per_object_c = scatter_add(beta[is_sig], object_index)
+ # beta_pen = beta_pen + 1 - torch.clip(beta_per_object_c, 0, 1)
+ # L_beta_sig = beta_pen.sum() / len(beta_pen)
+ # L_beta_sig = L_beta_sig / 4
+ L_beta_noise = L_beta_noise / batch_size
+ # ? note: the training that worked quite well was dividing this by the batch size (1/4)
+
+ elif beta_term_option == "paper":
+ beta_alpha = beta[is_sig][index_alpha]
+ L_beta_sig = torch.sum( # maybe 0.5 for less aggressive loss
+ scatter_add((1 - beta_alpha), batch_object) / n_objects_per_event
+ )
+ # print("L_beta_sig", L_beta_sig / batch_size)
+ # beta_exp = beta[is_sig]
+ # beta_exp[index_alpha] = 0
+ # # L_exp = torch.mean(beta_exp)
+ # beta_exp = torch.exp(0.5 * beta_exp)
+ # L_exp = torch.mean(scatter_add(beta_exp, batch) / n_hits_per_event)
+
+ elif beta_term_option == "short-range-potential":
+
+ # First collect the norms: We only want norms of hits w.r.t. the object they
+ # belong to (like in V_attractive)
+ # Apply transformation first, and then apply mask to keep only the norms we want,
+ # then sum over hits, so the result is (n_objects,)
+ norms_beta_sig = (1.0 / (20.0 * norms[is_sig] ** 2 + 1.0) * M[is_sig]).sum(
+ dim=0
+ )
+ assert torch.all(norms_beta_sig >= 1.0) and torch.all(
+ norms_beta_sig <= n_hits_per_object
+ )
+ # Subtract from 1. to remove self interaction, divide by number of hits per object
+ norms_beta_sig = (1.0 - norms_beta_sig) / n_hits_per_object
+ assert torch.all(norms_beta_sig >= -1.0) and torch.all(norms_beta_sig <= 0.0)
+ norms_beta_sig *= beta_alpha
+ # Conclusion:
+ # lower beta --> higher loss (less negative)
+ # higher norms --> higher loss
+
+ # Sum over objects, divide by number of objects per event, then sum over events
+ L_beta_norms_term = (
+ scatter_add(norms_beta_sig, batch_object) / n_objects_per_event
+ ).sum()
+ assert L_beta_norms_term >= -batch_size and L_beta_norms_term <= 0.0
+
+ # Logbeta term: Take -.2*torch.log(beta_alpha[is_object]+1e-9), sum it over objects,
+ # divide by n_objects_per_event, then sum over events (same pattern as above)
+ # lower beta --> higher loss
+ L_beta_logbeta_term = (
+ scatter_add(-0.2 * torch.log(beta_alpha + 1e-9), batch_object)
+ / n_objects_per_event
+ ).sum()
+
+ # Final L_beta term
+ L_beta_sig = L_beta_norms_term + L_beta_logbeta_term
+
+ else:
+ valid_options = ["paper", "short-range-potential"]
+ raise ValueError(
+ f'beta_term_option "{beta_term_option}" is not valid, choose from {valid_options}'
+ )
+
+ L_beta = L_beta_noise + L_beta_sig
+
+ L_alpha_coordinates = torch.mean(torch.norm(x_alpha_original - x_alpha, p=2, dim=1))
+ # ________________________________
+ # Returning
+ # Also divide by batch size here
+
+ if return_components or DEBUG:
+ components = dict(
+ L_V=L_V / batch_size,
+ L_V_attractive=L_V_attractive / batch_size,
+ L_V_repulsive=L_V_repulsive / batch_size,
+ L_beta=L_beta / batch_size,
+ L_beta_noise=L_beta_noise / batch_size,
+ L_beta_sig=L_beta_sig / batch_size,
+ )
+ if beta_term_option == "short-range-potential":
+ components["L_beta_norms_term"] = L_beta_norms_term / batch_size
+ components["L_beta_logbeta_term"] = L_beta_logbeta_term / batch_size
+ if DEBUG:
+ debug(formatted_loss_components_string(components))
+ if torch.isnan(L_beta / batch_size):
+ print("isnan!!!")
+ print(L_beta, batch_size)
+ print("L_beta_noise", L_beta_noise)
+ print("L_beta_sig", L_beta_sig)
+ if not tracking:
+ e_particles_pred = e_particles_pred.detach().to("cpu").flatten()
+ e_particles = e_particles.detach().to("cpu").flatten()
+ positions_particles_pred = positions_particles_pred.detach().to("cpu").flatten()
+ x_particles = x_particles.detach().to("cpu").flatten()
+ mom_particles_pred = mom_particles_pred.detach().flatten().to("cpu")
+ mom_particles_true = mom_particles_true.detach().flatten().to("cpu")
+ resolutions = {
+ "momentum_res": (
+ (mom_particles_pred - mom_particles_true) / mom_particles_true
+ ),
+ "e_res": ((e_particles_pred - e_particles) / e_particles).tolist(),
+ "pos_res": (
+ (positions_particles_pred - x_particles) / x_particles
+ ).tolist(),
+ }
+ # also return pid_true an Union[Tuple[torch.Tensor, torch.Tensor], dict]:
+ """
+ Calculates the L_V and L_beta object condensation losses.
+ Concepts:
+ - A hit belongs to exactly one cluster (cluster_index_per_event is (n_hits,)),
+ and to exactly one event (batch is (n_hits,))
+ - A cluster index of `noise_cluster_index` means the cluster is a noise cluster.
+ There is typically one noise cluster per event. Any hit in a noise cluster
+ is a 'noise hit'. A hit in an object is called a 'signal hit' for lack of a
+ better term.
+ - An 'object' is a cluster that is *not* a noise cluster.
+ beta_stabilizing: Choices are ['paper', 'clip', 'soft_q_scaling']:
+ paper: beta is sigmoid(model_output), q = beta.arctanh()**2 + qmin
+ clip: beta is clipped to 1-1e-4, q = beta.arctanh()**2 + qmin
+ soft_q_scaling: beta is sigmoid(model_output), q = (clip(beta)/1.002).arctanh()**2 + qmin
+ huberize_norm_for_V_attractive: Huberizes the norms when used in the attractive potential
+ beta_term_option: Choices are ['paper', 'short-range-potential']:
+ Choosing 'short-range-potential' introduces a short range potential around high
+ beta points, acting like V_attractive.
+ Note this function has modifications w.r.t. the implementation in 2002.03605:
+ - The norms for V_repulsive are now Gaussian (instead of linear hinge)
+ """
+ # remove dummy rows added for dataloader # TODO think of better way to do this
+
+ device = beta.device
+ # alert the user if there are nans
+ if torch.isnan(beta).any():
+ print("There are nans in beta!", len(beta[torch.isnan(beta)]))
+
+ beta = torch.nan_to_num(beta, nan=0.0)
+ assert_no_nans(beta)
+ # ________________________________
+ # Calculate a bunch of needed counts and indices locally
+
+ # cluster_index: unique index over events
+ # E.g. cluster_index_per_event=[ 0, 0, 1, 2, 0, 0, 1], batch=[0, 0, 0, 0, 1, 1, 1]
+ # -> cluster_index=[ 0, 0, 1, 2, 3, 3, 4 ]
+
+ cluster_index, n_clusters_per_event = batch_cluster_indices(
+ cluster_index_per_event, batch
+ )
+ n_clusters = n_clusters_per_event.sum()
+ n_hits, cluster_space_dim = cluster_space_coords.size()
+ batch_size = batch.max() + 1
+ n_hits_per_event = scatter_count(batch)
+
+ # Index of cluster -> event (n_clusters,)
+ # batch_cluster = scatter_counts_to_indices(n_clusters_per_event)
+
+ # Per-hit boolean, indicating whether hit is sig or noise
+ # is_noise = cluster_index_per_event == noise_cluster_index
+ ##is_sig = ~is_noise
+ # n_hits_sig = is_sig.sum()
+ # n_sig_hits_per_event = scatter_count(batch[is_sig])
+
+ # Per-cluster boolean, indicating whether cluster is an object or noise
+ # is_object = scatter_max(is_sig.long(), cluster_index)[0].bool()
+ # is_noise_cluster = ~is_object
+
+ # FIXME: This assumes noise_cluster_index == 0!!
+ # Not sure how to do this in a performant way in case noise_cluster_index != 0
+ # if noise_cluster_index != 0:
+ # raise NotImplementedError
+ # object_index_per_event = cluster_index_per_event[is_sig] - 1
+ # object_index, n_objects_per_event = batch_cluster_indices(
+ # object_index_per_event, batch[is_sig]
+ # )
+ # n_hits_per_object = scatter_count(object_index)
+ # print("n_hits_per_object", n_hits_per_object)
+ # batch_object = batch_cluster[is_object]
+ # n_objects = is_object.sum()
+
+ # assert object_index.size() == (n_hits_sig,)
+ # assert is_object.size() == (n_clusters,)
+ # assert torch.all(n_hits_per_object > 0)
+ # assert object_index.max() + 1 == n_objects
+
+ # ________________________________
+ # L_V term
+
+ # Calculate q
+ if beta_stabilizing == "paper":
+ q = beta.arctanh() ** 2 + qmin
+ elif beta_stabilizing == "clip":
+ beta = beta.clip(0.0, 1 - 1e-4)
+ q = beta.arctanh() ** 2 + qmin
+ elif beta_stabilizing == "soft_q_scaling":
+ q = (beta.clip(0.0, 1 - 1e-4) / 1.002).arctanh() ** 2 + qmin
+ else:
+ raise ValueError(f"beta_stablizing mode {beta_stabilizing} is not known")
+ if torch.isnan(beta).any():
+ print("There are nans in beta!", len(beta[torch.isnan(beta)]))
+
+ beta = torch.nan_to_num(beta, nan=0.0)
+ assert_no_nans(q)
+ assert q.device == device
+ assert q.size() == (n_hits,)
+ # TODO: continue here
+ # Calculate q_alpha, the max q per object, and the indices of said maxima
+ q_alpha, index_alpha = scatter_max(q, cluster_index)
+ assert q_alpha.size() == (n_clusters,)
+
+ # Get the cluster space coordinates and betas for these maxima hits too
+ index_alpha -= 1 # why do we need this?
+ x_alpha = cluster_space_coords[index_alpha]
+ beta_alpha = beta[index_alpha]
+
+ positions_particles_pred = g.ndata["pos_hits_xyz"][index_alpha]
+ positions_particles_pred = (
+ positions_particles_pred + distance_threshold[index_alpha]
+ )
+
+ is_sig_everything = torch.ones_like(batch).bool()
+
+ e_particles_pred, pid_particles_pred, mom_particles_pred = calc_energy_pred(
+ batch,
+ g,
+ cluster_index_per_event,
+ is_sig_everything,
+ q,
+ beta,
+ energy_correction,
+ predicted_pid,
+ momentum,
+ )
+ pid_particles_pred = post_pid_pool_module(
+ pid_particles_pred
+ ) # project the pooled PID embeddings to the final "one hot encoding" space
+
+ mass_particles_pred = e_particles_pred**2 - mom_particles_pred**2
+ mass_particles_pred[mass_particles_pred < 0] = 0.0
+ mass_particles_pred = torch.sqrt(mass_particles_pred)
+
+ pid_pred = pid_particles_pred.argmax(dim=1).detach().tolist()
+ return (
+ pid_pred,
+ pid_particles_pred,
+ mass_particles_pred,
+ e_particles_pred,
+ mom_particles_pred,
+ )
+
+
+def formatted_loss_components_string(components: dict) -> str:
+ """
+ Formats the components returned by calc_LV_Lbeta
+ """
+ total_loss = components["L_V"] + components["L_beta"]
+ fractions = {k: v / total_loss for k, v in components.items()}
+ fkey = lambda key: f"{components[key]:+.4f} ({100.*fractions[key]:.1f}%)"
+ s = (
+ " L_V = {L_V}"
+ "\n L_V_attractive = {L_V_attractive}"
+ "\n L_V_repulsive = {L_V_repulsive}"
+ "\n L_beta = {L_beta}"
+ "\n L_beta_noise = {L_beta_noise}"
+ "\n L_beta_sig = {L_beta_sig}".format(
+ L=total_loss, **{k: fkey(k) for k in components}
+ )
+ )
+ if "L_beta_norms_term" in components:
+ s += (
+ "\n L_beta_norms_term = {L_beta_norms_term}"
+ "\n L_beta_logbeta_term = {L_beta_logbeta_term}".format(
+ **{k: fkey(k) for k in components}
+ )
+ )
+ if "L_noise_filter" in components:
+ s += f'\n L_noise_filter = {fkey("L_noise_filter")}'
+ return s
+
+
+def calc_simple_clus_space_loss(
+ cluster_space_coords: torch.Tensor, # Predicted by model
+ cluster_index_per_event: torch.Tensor, # Truth hit->cluster index
+ batch: torch.Tensor,
+ # From here on just parameters
+ noise_cluster_index: int = 0, # cluster_index entries with this value are noise/noise
+ huberize_norm_for_V_attractive=True,
+ pred_edc: torch.Tensor = None,
+) -> Tuple[torch.Tensor, torch.Tensor]:
+ """
+ Isolating just the V_attractive and V_repulsive parts of object condensation,
+ w.r.t. the geometrical mean of truth cluster centers (rather than the highest
+ beta point of the truth cluster).
+ Most of this code is copied from `calc_LV_Lbeta`, so it's easier to try out
+ different scalings for the norms without breaking the main OC function.
+ `pred_edc`: Predicted estimated distance-to-center.
+ This is an optional column, that should be `n_hits` long. If it is
+ passed, a third loss component is calculated based on the truth distance-to-center
+ w.r.t. predicted distance-to-center. This quantifies how close a hit is to it's center,
+ which provides an ansatz for the clustering.
+ See also the 'Concepts' in the doc of `calc_LV_Lbeta`.
+ """
+ # ________________________________
+ # Calculate a bunch of needed counts and indices locally
+
+ # cluster_index: unique index over events
+ # E.g. cluster_index_per_event=[ 0, 0, 1, 2, 0, 0, 1], batch=[0, 0, 0, 0, 1, 1, 1]
+ # -> cluster_index=[ 0, 0, 1, 2, 3, 3, 4 ]
+ cluster_index, n_clusters_per_event = batch_cluster_indices(
+ cluster_index_per_event, batch
+ )
+ n_hits, cluster_space_dim = cluster_space_coords.size()
+ batch_size = batch.max() + 1
+ n_hits_per_event = scatter_count(batch)
+
+ # Index of cluster -> event (n_clusters,)
+ batch_cluster = scatter_counts_to_indices(n_clusters_per_event)
+
+ # Per-hit boolean, indicating whether hit is sig or noise
+ is_noise = cluster_index_per_event == noise_cluster_index
+ is_sig = ~is_noise
+ n_hits_sig = is_sig.sum()
+
+ # Per-cluster boolean, indicating whether cluster is an object or noise
+ is_object = scatter_max(is_sig.long(), cluster_index)[0].bool()
+
+ # # FIXME: This assumes noise_cluster_index == 0!!
+ # # Not sure how to do this in a performant way in case noise_cluster_index != 0
+ # if noise_cluster_index != 0: raise NotImplementedError
+ # object_index_per_event = cluster_index_per_event[is_sig] - 1
+ batch_object = batch_cluster[is_object]
+ n_objects = is_object.sum()
+
+ # ________________________________
+ # Build the masks
+
+ # Connectivity matrix from hit (row) -> cluster (column)
+ # Index to matrix, e.g.:
+ # [1, 3, 1, 0] --> [
+ # [0, 1, 0, 0],
+ # [0, 0, 0, 1],
+ # [0, 1, 0, 0],
+ # [1, 0, 0, 0]
+ # ]
+ M = torch.nn.functional.one_hot(cluster_index).long()
+
+ # Anti-connectivity matrix; be sure not to connect hits to clusters in different events!
+ M_inv = get_inter_event_norms_mask(batch, n_clusters_per_event) - M
+
+ # Throw away noise cluster columns; we never need them
+ M = M[:, is_object]
+ M_inv = M_inv[:, is_object]
+ assert M.size() == (n_hits, n_objects)
+ assert M_inv.size() == (n_hits, n_objects)
+
+ # ________________________________
+ # Loss terms
+
+ # First calculate all cluster centers, then throw out the noise clusters
+ cluster_centers = scatter_mean(cluster_space_coords, cluster_index, dim=0)
+ object_centers = cluster_centers[is_object]
+
+ # Calculate all norms
+ # Warning: Should not be used without a mask!
+ # Contains norms between hits and objects from different events
+ # (n_hits, 1, cluster_space_dim) - (1, n_objects, cluster_space_dim)
+ # gives (n_hits, n_objects, cluster_space_dim)
+ norms = (cluster_space_coords.unsqueeze(1) - object_centers.unsqueeze(0)).norm(
+ dim=-1
+ )
+ assert norms.size() == (n_hits, n_objects)
+
+ # -------
+ # Attractive loss
+
+ # First get all the relevant norms: We only want norms of signal hits
+ # w.r.t. the object they belong to, i.e. no noise hits and no noise clusters.
+ # First select all norms of all signal hits w.r.t. all objects (filtering out
+ # the noise), mask out later
+ norms_att = norms[is_sig]
+
+ # Power-scale the norms
+ if huberize_norm_for_V_attractive:
+ # Huberized version (linear but times 4)
+ # Be sure to not move 'off-diagonal' away from zero
+ # (i.e. norms of hits w.r.t. clusters they do _not_ belong to)
+ norms_att = huber(norms_att + 1e-5, 4.0)
+ else:
+ # Paper version is simply norms squared (no need for mask)
+ norms_att = norms_att**2
+ assert norms_att.size() == (n_hits_sig, n_objects)
+
+ # Now apply the mask to keep only norms of signal hits w.r.t. to the object
+ # they belong to (throw away norms w.r.t. cluster they do *not* belong to)
+ norms_att *= M[is_sig]
+
+ # Sum norms_att over hits (dim=0), then sum per event, then divide by n_hits_per_event,
+ # then sum over events
+ L_attractive = (
+ scatter_add(norms_att.sum(dim=0), batch_object) / n_hits_per_event
+ ).sum()
+
+ # -------
+ # Repulsive loss
+
+ # Get all the relevant norms: We want norms of any hit w.r.t. to
+ # objects they do *not* belong to, i.e. no noise clusters.
+ # We do however want to keep norms of noise hits w.r.t. objects
+ # Power-scale the norms: Gaussian scaling term instead of a cone
+ # Mask out the norms of hits w.r.t. the cluster they belong to
+ norms_rep = torch.exp(-4.0 * norms**2) * M_inv
+
+ # Sum over hits, then sum per event, then divide by n_hits_per_event, then sum up events
+ L_repulsive = (
+ scatter_add(norms_rep.sum(dim=0), batch_object) / n_hits_per_event
+ ).sum()
+
+ L_attractive /= batch_size
+ L_repulsive /= batch_size
+
+ # -------
+ # Optional: edc column
+
+ if pred_edc is not None:
+ n_hits_per_cluster = scatter_count(cluster_index)
+ cluster_centers_expanded = torch.index_select(cluster_centers, 0, cluster_index)
+ assert cluster_centers_expanded.size() == (n_hits, cluster_space_dim)
+ truth_edc = (cluster_space_coords - cluster_centers_expanded).norm(dim=-1)
+ assert pred_edc.size() == (n_hits,)
+ d_per_hit = (pred_edc - truth_edc) ** 2
+ d_per_object = scatter_add(d_per_hit, cluster_index)[is_object]
+ assert d_per_object.size() == (n_objects,)
+ L_edc = (scatter_add(d_per_object, batch_object) / n_hits_per_event).sum()
+ return L_attractive, L_repulsive, L_edc
+
+ return L_attractive, L_repulsive
+
+
+def huber(d, delta):
+ """
+ See: https://en.wikipedia.org/wiki/Huber_loss#Definition
+ Multiplied by 2 w.r.t Wikipedia version (aligning with Jan's definition)
+ """
+ return torch.where(
+ torch.abs(d) <= delta, d**2, 2.0 * delta * (torch.abs(d) - delta)
+ )
+
+
+def batch_cluster_indices(
+ cluster_id: torch.Tensor, batch: torch.Tensor
+) -> Tuple[torch.LongTensor, torch.LongTensor]:
+ """
+ Turns cluster indices per event to an index in the whole batch
+ Example:
+ cluster_id = torch.LongTensor([0, 0, 1, 1, 2, 0, 0, 1, 1, 1, 0, 0, 1])
+ batch = torch.LongTensor([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2])
+ -->
+ offset = torch.LongTensor([0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 5, 5, 5])
+ output = torch.LongTensor([0, 0, 1, 1, 2, 3, 3, 4, 4, 4, 5, 5, 6])
+ """
+ device = cluster_id.device
+ assert cluster_id.device == batch.device
+ # Count the number of clusters per entry in the batch
+ n_clusters_per_event = scatter_max(cluster_id, batch, dim=-1)[0] + 1
+ # Offsets are then a cumulative sum
+ offset_values_nozero = n_clusters_per_event[:-1].cumsum(dim=-1)
+ # Prefix a zero
+ offset_values = torch.cat((torch.zeros(1, device=device), offset_values_nozero))
+ # Fill it per hit
+ offset = torch.gather(offset_values, 0, batch).long()
+ return offset + cluster_id, n_clusters_per_event
+
+
+def get_clustering_np(
+ betas: np.array, X: np.array, tbeta: float = 0.1, td: float = 1.0
+) -> np.array:
+ """
+ Returns a clustering of hits -> cluster_index, based on the GravNet model
+ output (predicted betas and cluster space coordinates) and the clustering
+ parameters tbeta and td.
+ Takes numpy arrays as input.
+ """
+ n_points = betas.shape[0]
+ select_condpoints = betas > tbeta
+ # Get indices passing the threshold
+ indices_condpoints = np.nonzero(select_condpoints)[0]
+ # Order them by decreasing beta value
+ indices_condpoints = indices_condpoints[np.argsort(-betas[select_condpoints])]
+ # Assign points to condensation points
+ # Only assign previously unassigned points (no overwriting)
+ # Points unassigned at the end are bkg (-1)
+ unassigned = np.arange(n_points)
+ clustering = -1 * np.ones(n_points, dtype=np.int32)
+ for index_condpoint in indices_condpoints:
+ d = np.linalg.norm(X[unassigned] - X[index_condpoint], axis=-1)
+ assigned_to_this_condpoint = unassigned[d < td]
+ clustering[assigned_to_this_condpoint] = index_condpoint
+ unassigned = unassigned[~(d < td)]
+ return clustering
+
+
+def get_clustering(betas: torch.Tensor, X: torch.Tensor, tbeta=0.1, td=1.0):
+ """
+ Returns a clustering of hits -> cluster_index, based on the GravNet model
+ output (predicted betas and cluster space coordinates) and the clustering
+ parameters tbeta and td.
+ Takes torch.Tensors as input.
+ """
+ n_points = betas.size(0)
+ select_condpoints = betas > tbeta
+ # Get indices passing the threshold
+ indices_condpoints = select_condpoints.nonzero()
+ # Order them by decreasing beta value
+ indices_condpoints = indices_condpoints[(-betas[select_condpoints]).argsort()]
+ # Assign points to condensation points
+ # Only assign previously unassigned points (no overwriting)
+ # Points unassigned at the end are bkg (-1)
+ unassigned = torch.arange(n_points)
+ clustering = -1 * torch.ones(n_points, dtype=torch.long)
+ for index_condpoint in indices_condpoints:
+ d = torch.norm(X[unassigned] - X[index_condpoint][0], dim=-1)
+ assigned_to_this_condpoint = unassigned[d < td]
+ clustering[assigned_to_this_condpoint] = index_condpoint[0]
+ unassigned = unassigned[~(d < td)]
+ return clustering
+
+
+def scatter_count(input: torch.Tensor):
+ """
+ Returns ordered counts over an index array
+ Example:
+ >>> scatter_count(torch.Tensor([0, 0, 0, 1, 1, 2, 2])) # input
+ >>> [3, 2, 2]
+ Index assumptions work like in torch_scatter, so:
+ >>> scatter_count(torch.Tensor([1, 1, 1, 2, 2, 4, 4]))
+ >>> tensor([0, 3, 2, 0, 2])
+ """
+ return scatter_add(torch.ones_like(input, dtype=torch.long), input.long())
+
+
+def scatter_counts_to_indices(input: torch.LongTensor) -> torch.LongTensor:
+ """
+ Converts counts to indices. This is the inverse operation of scatter_count
+ Example:
+ input: [3, 2, 2]
+ output: [0, 0, 0, 1, 1, 2, 2]
+ """
+ return torch.repeat_interleave(
+ torch.arange(input.size(0), device=input.device), input
+ ).long()
+
+
+def get_inter_event_norms_mask(
+ batch: torch.LongTensor, nclusters_per_event: torch.LongTensor
+):
+ """
+ Creates mask of (nhits x nclusters) that is only 1 if hit i is in the same event as cluster j
+ Example:
+ cluster_id_per_event = torch.LongTensor([0, 0, 1, 1, 2, 0, 0, 1, 1, 1, 0, 0, 1])
+ batch = torch.LongTensor([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2])
+ Should return:
+ torch.LongTensor([
+ [1, 1, 1, 0, 0, 0, 0],
+ [1, 1, 1, 0, 0, 0, 0],
+ [1, 1, 1, 0, 0, 0, 0],
+ [1, 1, 1, 0, 0, 0, 0],
+ [1, 1, 1, 0, 0, 0, 0],
+ [0, 0, 0, 1, 1, 0, 0],
+ [0, 0, 0, 1, 1, 0, 0],
+ [0, 0, 0, 1, 1, 0, 0],
+ [0, 0, 0, 1, 1, 0, 0],
+ [0, 0, 0, 1, 1, 0, 0],
+ [0, 0, 0, 0, 0, 1, 1],
+ [0, 0, 0, 0, 0, 1, 1],
+ [0, 0, 0, 0, 0, 1, 1],
+ ])
+ """
+ device = batch.device
+ # Following the example:
+ # Expand batch to the following (nhits x nevents) matrix (little hacky, boolean mask -> long):
+ # [[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ # [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1]]
+ batch_expanded_as_ones = (
+ batch
+ == torch.arange(batch.max() + 1, dtype=torch.long, device=device).unsqueeze(-1)
+ ).long()
+ # Then repeat_interleave it to expand it to nclusters rows, and transpose to get (nhits x nclusters)
+ return batch_expanded_as_ones.repeat_interleave(nclusters_per_event, dim=0).T
+
+
+def isin(ar1, ar2):
+ """To be replaced by torch.isin for newer releases of torch"""
+ return (ar1[..., None] == ar2).any(-1)
+
+
+def reincrementalize(y: torch.Tensor, batch: torch.Tensor) -> torch.Tensor:
+ """Re-indexes y so that missing clusters are no longer counted.
+ Example:
+ >>> y = torch.LongTensor([
+ 0, 0, 0, 1, 1, 3, 3,
+ 0, 0, 0, 0, 0, 2, 2, 3, 3,
+ 0, 0, 1, 1
+ ])
+ >>> batch = torch.LongTensor([
+ 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2,
+ ])
+ >>> print(reincrementalize(y, batch))
+ tensor([0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 1, 1])
+ """
+ y_offset, n_per_event = batch_cluster_indices(y, batch)
+ offset = y_offset - y
+ n_clusters = n_per_event.sum()
+ holes = (
+ (~isin(torch.arange(n_clusters, device=y.device), y_offset))
+ .nonzero()
+ .squeeze(-1)
+ )
+ n_per_event_without_holes = n_per_event.clone()
+ n_per_event_cumsum = n_per_event.cumsum(0)
+ for hole in holes.sort(descending=True).values:
+ y_offset[y_offset > hole] -= 1
+ i_event = (hole > n_per_event_cumsum).long().argmin()
+ n_per_event_without_holes[i_event] -= 1
+ offset_per_event = torch.zeros_like(n_per_event_without_holes)
+ offset_per_event[1:] = n_per_event_without_holes.cumsum(0)[:-1]
+ offset_without_holes = torch.gather(offset_per_event, 0, batch).long()
+ reincrementalized = y_offset - offset_without_holes
+ return reincrementalized
+
+
+def L_clusters_calc(batch, cluster_space_coords, cluster_index, frac_combinations, q):
+ number_of_pairs = 0
+ for batch_id in batch.unique():
+ # do all possible pairs...
+ bmask = batch == batch_id
+ clust_space_filt = cluster_space_coords[bmask]
+ pos_pairs_all = []
+ neg_pairs_all = []
+ if len(cluster_index[bmask].unique()) <= 1:
+ continue
+ L_clusters = torch.tensor(0.0).to(q.device)
+ for cluster in cluster_index[bmask].unique():
+ coords_pos = clust_space_filt[cluster_index[bmask] == cluster]
+ coords_neg = clust_space_filt[cluster_index[bmask] != cluster]
+ if len(coords_neg) == 0:
+ continue
+ clust_idx = cluster_index[bmask] == cluster
+ # all_ones = torch.ones_like((clust_idx, clust_idx))
+ # pos_pairs = [[i, j] for i in range(len(coords_pos)) for j in range (len(coords_pos)) if i < j]
+ total_num = (len(coords_pos) ** 2) / 2
+ num = int(frac_combinations * total_num)
+ pos_pairs = []
+ for i in range(num):
+ pos_pairs.append(
+ [
+ np.random.randint(len(coords_pos)),
+ np.random.randint(len(coords_pos)),
+ ]
+ )
+ neg_pairs = []
+ for i in range(len(pos_pairs)):
+ neg_pairs.append(
+ [
+ np.random.randint(len(coords_pos)),
+ np.random.randint(len(coords_neg)),
+ ]
+ )
+ pos_pairs_all += pos_pairs
+ neg_pairs_all += neg_pairs
+ pos_pairs = torch.tensor(pos_pairs_all)
+ neg_pairs = torch.tensor(neg_pairs_all)
+ """# do just a small sample of the pairs. ...
+ bmask = batch == batch_id
+
+ #L_clusters = 0 # Loss of randomly sampled distances between points inside and outside clusters
+
+ pos_idx, neg_idx = [], []
+ for cluster in cluster_index[bmask].unique():
+ clust_idx = (cluster_index == cluster)[bmask]
+ perm = torch.randperm(clust_idx.sum())
+ perm1 = torch.randperm((~clust_idx).sum())
+ perm2 = torch.randperm(clust_idx.sum())
+ #cutoff = clust_idx.sum()//2
+ pos_lst = clust_idx.nonzero()[perm]
+ neg_lst = (~clust_idx).nonzero()[perm1]
+ neg_lst_second = clust_idx.nonzero()[perm2]
+ if len(pos_lst) % 2:
+ pos_lst = pos_lst[:-1]
+ if len(neg_lst) % 2:
+ neg_lst = neg_lst[:-1]
+ len_cap = min(len(pos_lst), len(neg_lst), len(neg_lst_second))
+ if len_cap % 2:
+ len_cap -= 1
+ pos_lst = pos_lst[:len_cap]
+ neg_lst = neg_lst[:len_cap]
+ neg_lst_second = neg_lst_second[:len_cap]
+ pos_pairs = pos_lst.reshape(-1, 2)
+ neg_pairs = torch.cat([neg_lst, neg_lst_second], dim=1)
+ neg_pairs = neg_pairs[:pos_lst.shape[0]//2, :]
+ pos_idx.append(pos_pairs)
+ neg_idx.append(neg_pairs)
+ pos_idx = torch.cat(pos_idx)
+ neg_idx = torch.cat(neg_idx)"""
+ assert pos_pairs.shape == neg_pairs.shape
+ if len(pos_pairs) == 0:
+ continue
+ cluster_space_coords_filtered = cluster_space_coords[bmask]
+ qs_filtered = q[bmask]
+ pos_norms = (
+ cluster_space_coords_filtered[pos_pairs[:, 0]]
+ - cluster_space_coords_filtered[pos_pairs[:, 1]]
+ ).norm(dim=-1)
+
+ neg_norms = (
+ cluster_space_coords_filtered[neg_pairs[:, 0]]
+ - cluster_space_coords_filtered[neg_pairs[:, 1]]
+ ).norm(dim=-1)
+ q_pos = qs_filtered[pos_pairs[:, 0]]
+ q_neg = qs_filtered[neg_pairs[:, 0]]
+ q_s = torch.cat([q_pos, q_neg])
+ norms_pos = torch.cat([pos_norms, neg_norms])
+ ys = torch.cat([torch.ones_like(pos_norms), -torch.ones_like(neg_norms)])
+ L_clusters += torch.sum(
+ q_s * torch.nn.HingeEmbeddingLoss(reduce=None)(norms_pos, ys)
+ )
+ number_of_pairs += norms_pos.shape[0]
+ if number_of_pairs > 0:
+ L_clusters = L_clusters / number_of_pairs
+
+ return L_clusters
+
+
+
+## deprecated code:
+
+
diff --git a/src/layers/obtain_statistics.py b/src/layers/obtain_statistics.py
new file mode 100644
index 0000000000000000000000000000000000000000..a966709885df422a79a58cd554e817e9f9b1a242
--- /dev/null
+++ b/src/layers/obtain_statistics.py
@@ -0,0 +1,144 @@
+import torch
+from torch_scatter import scatter_max, scatter_add, scatter_mean
+import numpy as np
+import matplotlib.pyplot as plt
+import os
+
+
+def obtain_statistics_graph(stat_dict, y_all, g_all, pf=True):
+ import dgl
+ graphs = dgl.unbatch(g_all)
+ batch_id = y_all[:, -1].view(-1)
+ for i in range(0, len(graphs)):
+ mask = batch_id == i
+ y = y_all[mask]
+ g = graphs[i]
+ number_of_particles_event = len(y)
+ if pf:
+ energy_particles = y[:, 3]
+ else:
+ energy_particles = y[:, 3]
+
+ # obtain stats about particles and energy of the particles
+ stat_dict["freq_count_particles"][number_of_particles_event] = (
+ stat_dict["freq_count_particles"][number_of_particles_event] + 1
+ )
+ stat_dict["freq_count_energy"] = stat_dict["freq_count_energy"] + torch.histc(
+ energy_particles, bins=500, min=0.001, max=50
+ )
+
+ # obtain angle stats
+ # if pf:
+ # cluster_space_coords = g.ndata["pos_hits_xyz"]
+ # object_index = g.ndata["particle_number"].view(-1)
+ # x_alpha_sum = scatter_mean(cluster_space_coords, object_index.long(), dim=0)
+ # nVs = x_alpha_sum[1:] / torch.norm(
+ # x_alpha_sum[1:], p=2, dim=-1, keepdim=True
+ # )
+ # # compute cosine of the angles using dot product
+ # cos_ij = torch.einsum("ij,pj->ip", nVs, nVs)
+ # min_cos_per_particle = torch.min(torch.abs(cos_ij), dim=0)[0]
+ # stat_dict["freq_count_angle"] = stat_dict["freq_count_angle"] + torch.histc(
+ # min_cos_per_particle, bins=10, min=0, max=1.1
+ # )
+ # else:
+ eta = y[:, 0]
+ phi = y[:, 1]
+ len_y = len(eta)
+ dr_matrix = torch.sqrt(
+ torch.square(
+ torch.tile(eta.view(1, -1), (len_y, 1))
+ - torch.tile(eta.view(-1, 1), (1, len_y))
+ )
+ + torch.square(
+ torch.tile(phi.view(1, -1), (len_y, 1))
+ - torch.tile(phi.view(-1, 1), (1, len_y))
+ )
+ )
+ device = y.device
+ dr_matrix = dr_matrix + torch.eye(len_y, len_y).to(device) * 10
+ min_cos_per_particle = torch.min(dr_matrix, dim=1)[0]
+ stat_dict["freq_count_angle"] = stat_dict["freq_count_angle"] + torch.histc(
+ min_cos_per_particle, bins=40, min=0, max=4
+ )
+ return stat_dict
+
+
+def create_stats_dict(device):
+ bins_number_of_particles_event = torch.arange(0, 200, 1).to(device)
+ freq_count_particles = torch.zeros_like(bins_number_of_particles_event)
+ # the reason to not do log is that the histc only takes min, max, numbins and the other hist with bins is not supported in cuda
+ energy_event = torch.arange(0.001, 50, 0.1).to(
+ device
+ ) # torch.exp(torch.arange(np.log(0.001), np.log(50), 0.1))
+ freq_count_energy = torch.zeros(len(energy_event)).to(device)
+ angle_distribution = torch.arange(0, 4 + 0.1, 0.1).to(device)
+ freq_count_angle = torch.zeros(len(angle_distribution) - 1).to(device)
+ stat_dict = {}
+ stat_dict["bins_number_of_particles_event"] = bins_number_of_particles_event
+ stat_dict["freq_count_particles"] = freq_count_particles
+ stat_dict["energy_event"] = energy_event
+ stat_dict["freq_count_energy"] = freq_count_energy
+ stat_dict["angle_distribution"] = angle_distribution
+ stat_dict["freq_count_angle"] = freq_count_angle
+ return stat_dict
+
+def save_stat_dict(stat_dict, path):
+ path = path + "/stat_dict.pt"
+ torch.save(stat_dict, path)
+
+def stacked_hist_plot(lst, lst_pandora, path_store, title, title_no_latex):
+ # lst is a list of arrays. plot them in a stacked histogram with the same X-axis
+ fig, ax = plt.subplots(len(lst), 1, figsize=(6, 13))
+ if len(lst) == 1:
+ ax = [ax]
+ binsE = [0, 5, 15, 35, 51]
+ for i in range(len(lst)):
+ if i == 0:
+ bins = np.linspace(-0.03, 0.03, 200)
+ else:
+ bins = np.linspace(-0.005, 0.005, 200)
+ ax[i].hist(lst[i], bins, histtype="step", label="ML", color="red", density=True)
+ if i < len(lst_pandora):
+ ax[i].hist(lst_pandora[i], bins, histtype="step", label="Pandora", color="blue", density=True)
+ ax[i].legend()
+ ax[i].grid()
+ ax[i].set_yscale("log")
+ ax[i].set_xlabel(r"$\Delta \phi$")
+ ax[i].set_title(title + " [{},{}] GeV".format(binsE[i], binsE[i+1]))
+ ax[i].title.set_size(15)
+ # set size of legend as well
+ ax[i].legend(prop={"size": 14})
+ #fig.suptitle(title)
+ fig.tight_layout()
+ fig.savefig(os.path.join(path_store, title_no_latex + "_angle_distributions.pdf"))
+
+def plot_distributions(stat_dict, PATH_store, pf=False):
+ # energy per event
+ print(PATH_store)
+ fig, axs = plt.subplots(1, 3, figsize=(9, 3))
+ b = stat_dict["freq_count_energy"] / torch.sum(stat_dict["freq_count_energy"])
+ a = stat_dict["energy_event"]
+ a = a.detach().cpu()
+ b = b.detach().cpu()
+ axs[0].bar(a, b, width=0.2)
+ axs[0].set_title("Energy distribution")
+ b = stat_dict["freq_count_angle"] / torch.sum(stat_dict["freq_count_angle"])
+ a = stat_dict["angle_distribution"][:-1]
+ a = a.detach().cpu()
+ b = b.detach().cpu()
+ axs[1].bar(a, b, width=0.02)
+ axs[1].set_xlim([0, 1])
+ axs[1].set_title("Angle distribution")
+ # axs[1].set_ylim([0,1])
+ b = stat_dict["freq_count_particles"] / torch.sum(stat_dict["freq_count_particles"])
+ a = stat_dict["bins_number_of_particles_event"]
+ a = a.detach().cpu()
+ b = b.detach().cpu()
+ axs[2].bar(a, b)
+ axs[2].set_title("number of particles")
+ # fig.suptitle('Stats event')
+ fig.savefig(
+ PATH_store + "/stats.png",
+ bbox_inches="tight",
+ )
diff --git a/src/layers/select_knn.py b/src/layers/select_knn.py
new file mode 100644
index 0000000000000000000000000000000000000000..d02188d5975557de9f5bd5d5e041d578f6774d48
--- /dev/null
+++ b/src/layers/select_knn.py
@@ -0,0 +1,124 @@
+from typing import Optional, Tuple
+
+import torch
+
+
+@torch.jit.script
+def select_knn(x: torch.Tensor,
+ k: int,
+ batch_x: Optional[torch.Tensor] = None,
+ inmask: Optional[torch.Tensor] = None,
+ max_radius: float = 1e9,
+ mask_mode: int = 1) -> Tuple[torch.Tensor, torch.Tensor]:
+ r"""Finds for each element in :obj:`x` the :obj:`k` nearest points in
+ :obj:`x`.
+ Args:
+ x (Tensor): Node feature matrix
+ :math:`\mathbf{X} \in \mathbb{R}^{N \times F}`.
+ k (int): The number of neighbors.
+ batch_x (LongTensor, optional): Batch vector
+ :math:`\mathbf{b} \in {\{ 0, \ldots, B-1\}}^N`, which assigns each
+ node to a specific example. :obj:`batch_x` needs to be sorted.
+ (default: :obj:`None`)
+ max_radius (float): Maximum distance to nearest neighbours. (default: :obj:`1e9`)
+ mask_mode (int): ??? (default: :obj:`1`)
+ :rtype: :class:`Tuple`[`LongTensor`,`FloatTensor`]
+ .. code-block:: python
+ import torch
+ from torch_cmspepr import select_knn
+ x = torch.Tensor([[-1, -1], [-1, 1], [1, -1], [1, 1]])
+ batch_x = torch.tensor([0, 0, 0, 0])
+ assign_index = select_knn(x, 2, batch_x)
+ """
+
+ x = x.view(-1, 1) if x.dim() == 1 else x
+ x = x.contiguous()
+
+ mask: torch.Tensor = torch.ones(x.shape[0], dtype=torch.int32, device=x.device)
+ if inmask is not None:
+ mask = inmask
+
+ row_splits: torch.Tensor = torch.tensor([0, x.shape[0]], dtype=torch.int32, device=x.device)
+ if batch_x is not None:
+ assert x.size(0) == batch_x.numel()
+ batch_size = int(batch_x.max()) + 1
+
+ deg = x.new_zeros(batch_size, dtype=torch.long)
+ deg.scatter_add_(0, batch_x, torch.ones_like(batch_x))
+
+ ptr_x = deg.new_zeros(batch_size + 1)
+ torch.cumsum(deg, 0, out=ptr_x[1:])
+
+ return torch.ops.torch_cmspepr.select_knn(
+ x,
+ row_splits,
+ mask,
+ k,
+ max_radius,
+ mask_mode,
+ )
+
+
+@torch.jit.script
+def knn_graph(x: torch.Tensor, k: int, batch: Optional[torch.Tensor] = None,
+ loop: bool = False, flow: str = 'source_to_target',
+ cosine: bool = False, num_workers: int = 1) -> torch.Tensor:
+ r"""Computes graph edges to the nearest :obj:`k` points.
+ Args:
+ x (Tensor): Node feature matrix
+ :math:`\mathbf{X} \in \mathbb{R}^{N \times F}`.
+ k (int): The number of neighbors.
+ batch (LongTensor, optional): Batch vector
+ :math:`\mathbf{b} \in {\{ 0, \ldots, B-1\}}^N`, which assigns each
+ node to a specific example. :obj:`batch` needs to be sorted.
+ (default: :obj:`None`)
+ loop (bool, optional): If :obj:`True`, the graph will contain
+ self-loops. (default: :obj:`False`)
+ flow (string, optional): The flow direction when used in combination
+ with message passing (:obj:`"source_to_target"` or
+ :obj:`"target_to_source"`). (default: :obj:`"source_to_target"`)
+ cosine (boolean, optional): If :obj:`True`, will use the Cosine
+ distance instead of Euclidean distance to find nearest neighbors.
+ (default: :obj:`False`)
+ num_workers (int): Number of workers to use for computation. Has no
+ effect in case :obj:`batch` is not :obj:`None`, or the input lies
+ on the GPU. (default: :obj:`1`)
+ :rtype: :class:`LongTensor`
+ .. code-block:: python
+ import torch
+ from torch_cluster import knn_graph
+ x = torch.Tensor([[-1, -1], [-1, 1], [1, -1], [1, 1]])
+ batch = torch.tensor([0, 0, 0, 0])
+ edge_index = knn_graph(x, k=2, batch=batch, loop=False)
+ """
+
+ assert flow in ['source_to_target', 'target_to_source']
+
+ K = k if loop else k + 1
+ start = 0 if loop else 1
+
+ index_dists = select_knn(x, K, batch) # select_knn is always in "loop" mode
+ neighbours, edge_dists = index_dists[0], index_dists[1]
+
+ sources = torch.arange(neighbours.shape[0], device=neighbours.device)[:, None].expand(-1, k).contiguous().view(-1)
+ targets = neighbours[:,start:].contiguous().view(-1)
+
+ edge_index = torch.cat([sources[None, :], targets[None, :]], dim = 0)
+
+ if flow == 'source_to_target':
+ row, col = edge_index[1], edge_index[0]
+ else:
+ row, col = edge_index[0], edge_index[1]
+
+ if not loop:
+ mask = row != col
+ row, col = row[mask], col[mask]
+
+ return torch.stack([row, col], dim=0)
+
+
+class SelectKnn(torch.autograd.Function):
+
+ @staticmethod
+ def forward(ctx, ):
+ pass
\ No newline at end of file
diff --git a/src/layers/test.py b/src/layers/test.py
new file mode 100644
index 0000000000000000000000000000000000000000..c74125f82b75cf6a6f42c14e980fdbe07925ed28
--- /dev/null
+++ b/src/layers/test.py
@@ -0,0 +1,231 @@
+import tensorflow as tf
+class Basic_OC_per_sample(object):
+ def __init__(self,
+ q_min,
+ s_b,
+ use_mean_x,
+ spect_supp=None, #None means same as noise
+ global_weight=False
+ ):
+
+ self.q_min = q_min
+ self.s_b = s_b
+ self.use_mean_x = use_mean_x
+ self.global_weight = global_weight
+ if spect_supp is None:
+ spect_supp = s_b
+ self.spect_supp = spect_supp
+
+ self.valid=False #constants not created
+
+
+ #helper
+
+ def create_Ms(self, truth_idx):
+ self.Msel, self.Mnot, _ = CreateMidx(truth_idx, calc_m_not=True)
+
+ def set_input(self,
+ beta,
+ x,
+ d,
+ pll,
+ truth_idx,
+ object_weight,
+ is_spectator_weight,
+ calc_Ms=True,
+ ):
+ self.valid=True
+ #used for pll and q
+ self.tanhsqbeta = tf.math.atanh(beta/(1.01))**2
+
+ self.beta_v = tf.debugging.check_numerics(beta,"OC: beta input")
+ self.d_v = tf.debugging.check_numerics(d,"OC: d input")
+ self.x_v = tf.debugging.check_numerics(x,"OC: x input")
+ self.pll_v = tf.debugging.check_numerics(pll,"OC: pll input")
+ self.sw_v = tf.debugging.check_numerics(is_spectator_weight,"OC: is_spectator_weight input")
+
+ object_weight = tf.debugging.check_numerics(object_weight,"OC: object_weight input")
+
+ self.isn_v = tf.where(truth_idx<0, tf.zeros_like(truth_idx,dtype='float32')+1., 0.)
+
+ #spectators do not participate in the potential losses
+ self.q_v = (self.tanhsqbeta + self.q_min)*tf.clip_by_value(1.-is_spectator_weight, 0., 1.)
+
+ if calc_Ms:
+ self.create_Ms(truth_idx)
+ if self.Msel is None:
+ self.valid=False
+ return
+ #if self.Msel.shape[0] < 2:#less than two objects - can be dangerous
+ # self.valid=False
+ # return
+
+ self.mask_k_m = SelectWithDefault(self.Msel, tf.zeros_like(beta)+1., 0.) #K x V-obj x 1
+ self.beta_k_m = SelectWithDefault(self.Msel, self.beta_v, 0.) #K x V-obj x 1
+ self.x_k_m = SelectWithDefault(self.Msel, self.x_v, 0.) #K x V-obj x C
+ self.q_k_m = SelectWithDefault(self.Msel, self.q_v, 0.)#K x V-obj x 1
+ self.d_k_m = SelectWithDefault(self.Msel, self.d_v, 0.)
+
+ self.alpha_k = tf.argmax(self.q_k_m, axis=1)# high beta and not spectator -> large q
+
+ self.beta_k = tf.gather_nd(self.beta_k_m, self.alpha_k, batch_dims=1) # K x 1
+ self.x_k = self._create_x_alpha_k() #K x C
+ self.q_k = tf.gather_nd(self.q_k_m, self.alpha_k, batch_dims=1) # K x 1
+ self.d_k = tf.gather_nd(self.d_k_m, self.alpha_k, batch_dims=1) # K x 1
+
+ #just a temp
+ ow_k_m = SelectWithDefault(self.Msel, object_weight, 0.)
+ self.ow_k = tf.gather_nd(ow_k_m, self.alpha_k, batch_dims=1) # K x 1
+
+
+ ### the following functions should not modify any of the constants and must only depend on them
+
+ #for override through inheriting
+ def att_func(self,dsq_k_m):
+ return tf.math.log(tf.math.exp(1.)*dsq_k_m/2. + 1.)
+
+ def V_att_k(self):
+ '''
+ '''
+ K = tf.reduce_sum(tf.ones_like(self.q_k))
+ N_k = tf.reduce_sum(self.mask_k_m, axis=1)
+ dsq_k_m = self.calc_dsq_att() #K x V-obj x 1
+ sigma = self.weighted_d_k_m(dsq_k_m) #create gradients for all
+ dsq_k_m = tf.math.divide_no_nan(dsq_k_m, sigma + 1e-4)
+ V_att = self.att_func(dsq_k_m) * self.q_k_m * self.mask_k_m #K x V-obj x 1
+ V_att = self.q_k * tf.reduce_sum( V_att ,axis=1) #K x 1
+ # if self.global_weight:
+ # N_full = tf.reduce_sum(tf.ones_like(self.beta_v))
+ # V_att = K * tf.math.divide_no_nan(V_att, N_full+1e-3) #K x 1
+ # else:
+ V_att = tf.math.divide_no_nan(V_att, N_k+1e-3) #K x 1
+
+ #print(tf.reduce_mean(self.d_v),tf.reduce_max(self.d_v))
+
+ return V_att
+
+ def rep_func(self,dsq_k_v):
+ return tf.math.exp(-dsq_k_v/2.)
+
+ def weighted_d_k_m(self, dsq): # dsq K x V x 1
+ return tf.expand_dims(self.d_k, axis=1) # K x 1 x 1
+
+ def calc_dsq_att(self):
+ x_k_e = tf.expand_dims(self.x_k,axis=1)
+ dsq_k_m = tf.reduce_sum((self.x_k_m - x_k_e)**2, axis=-1, keepdims=True) #K x V-obj x 1
+ return dsq_k_m
+
+ def calc_dsq_rep(self):
+ dsq = tf.expand_dims(self.x_k, axis=1) - tf.expand_dims(self.x_v, axis=0) #K x V x C
+ dsq = tf.reduce_sum(dsq**2, axis=-1, keepdims=True) #K x V x 1
+ return dsq
+
+ def V_rep_k(self):
+
+
+ K = tf.reduce_sum(tf.ones_like(self.q_k))
+ N_notk = tf.reduce_sum(self.Mnot, axis=1)
+ #future remark: if this gets too large, one could use a kNN here
+
+ dsq = self.calc_dsq_rep()
+
+ # nogradbeta = tf.stop_gradient(self.beta_k_m)
+ #weight. tf.reduce_sum( tf.exp(-dsq) * d_v_e, , axis=1) / tf.reduce_sum( tf.exp(-dsq) )
+ sigma = self.weighted_d_k_m(dsq) #create gradients for all, but prefer k vertex
+
+ dsq = tf.math.divide_no_nan(dsq, sigma + 1e-4) #K x V x 1
+
+ V_rep = self.rep_func(dsq) * self.Mnot * tf.expand_dims(self.q_v,axis=0) #K x V x 1
+
+ V_rep = self.q_k * tf.reduce_sum(V_rep, axis=1) #K x 1
+ if self.global_weight:
+ N_full = tf.reduce_sum(tf.ones_like(self.beta_v))
+ V_rep = K * tf.math.divide_no_nan(V_rep, N_full+1e-3) #K x 1
+ else:
+ V_rep = tf.math.divide_no_nan(V_rep, N_notk+1e-3) #K x 1
+
+ return V_rep
+
+
+ def Pll_k(self):
+
+ tanhsqbeta = self.beta_v**2 #softer here
+ tanhsqbeta = tf.debugging.check_numerics(tanhsqbeta, "OC: pw b**2")
+ pw = tanhsqbeta * tf.clip_by_value((1.-tf.clip_by_value(self.isn_v+self.sw_v,0.,1.)),0.,1.) + 1e-6
+
+ pw = tf.debugging.check_numerics(pw, "OC: pw")
+
+ pll_k_m = SelectWithDefault(self.Msel, self.pll_v, 0.) #K x V_perobj x P
+ pw_k_m = SelectWithDefault(self.Msel, pw, 0.) #K x V-obj x P
+ pw_k_sum = tf.reduce_sum(pw_k_m, axis=1)
+ pw_k_sum = tf.where(pw_k_sum <= 0., 1e-2, pw_k_sum)
+
+ pll_k = tf.math.divide_no_nan(tf.reduce_sum(pll_k_m * pw_k_m, axis=1),
+ pw_k_sum )#K x P
+ return pll_k
+
+ def Beta_pen_k(self):
+ #use continuous max approximation through LSE
+ eps = 1e-3
+ beta_pen = 1. - eps * tf.reduce_logsumexp(self.beta_k_m/eps, axis=1)#sum over m
+ #for faster convergence
+ beta_pen += 1. - tf.clip_by_value(tf.reduce_sum(self.beta_k_m, axis=1), 0., 1)
+ beta_pen = tf.debugging.check_numerics(beta_pen, "OC: beta pen")
+ return beta_pen
+
+ def Noise_pen(self):
+
+ nsupp_v = self.beta_v * self.isn_v
+ nsupp = tf.math.divide_no_nan(tf.reduce_sum(nsupp_v),
+ tf.reduce_sum(self.isn_v)+1e-3) # nodim
+
+ specsupp_v = self.beta_v * self.sw_v
+ specsupp = tf.math.divide_no_nan(tf.reduce_sum(specsupp_v),
+ tf.reduce_sum(self.sw_v)+1e-3) # nodim
+
+ return self.s_b * nsupp + self.spect_supp * specsupp
+
+
+ # doesn't do anything in this implementation
+ def high_B_pen_k(self):
+ return 0.* self.beta_k
+
+ # override with more complex through inheritance
+ def pll_weight_k(self, ow_k, vatt_k, vrep_k):
+ return ow_k
+
+
+
+ def add_to_terms(self,
+ V_att,
+ V_rep,
+ Noise_pen,
+ B_pen,
+ pll,
+ high_B_pen
+ ):
+
+ zero_tensor = tf.zeros_like(tf.reduce_mean(self.q_v,axis=0))
+
+ if not self.valid: # no objects
+ zero_payload = tf.zeros_like(tf.reduce_mean(self.pll_v,axis=0))
+ print('WARNING: no objects in sample, continue to next')
+ return zero_tensor, zero_tensor, zero_tensor, zero_tensor, zero_payload, zero_tensor
+
+ K = tf.reduce_sum(tf.ones_like(self.q_k)) # > 0
+
+ V_att_k = self.V_att_k()
+ V_rep_k = self.V_rep_k()
+
+ V_att += tf.reduce_sum(self.ow_k * V_att_k)/K
+ V_rep += tf.reduce_sum(self.ow_k * V_rep_k)/K
+ Noise_pen += self.Noise_pen()
+ B_pen += tf.reduce_sum(self.ow_k * self.Beta_pen_k())/K
+
+ pl_ow_k = self.pll_weight_k(self.ow_k, V_att_k, V_rep_k)
+ pll += tf.reduce_sum(pl_ow_k * self.Pll_k(),axis=0)/K
+
+ high_B_pen += tf.reduce_sum(self.ow_k *self.high_B_pen_k())/K
+
+ return V_att, V_rep, Noise_pen, B_pen, pll, high_B_pen
+
\ No newline at end of file
diff --git a/src/layers/utils_training.py b/src/layers/utils_training.py
new file mode 100644
index 0000000000000000000000000000000000000000..096298216278201602f160e77cd70df47fbee586
--- /dev/null
+++ b/src/layers/utils_training.py
@@ -0,0 +1,37 @@
+
+from lightning.pytorch.callbacks import BaseFinetuning
+import torch
+import torch.nn as nn
+
+
+class FreezeClustering(BaseFinetuning):
+ def __init__(
+ self,
+ ):
+ super().__init__()
+ # self._unfreeze_at_epoch = unfreeze_at_epoch
+
+ def freeze_before_training(self, pl_module):
+ print("freezing the following module:", pl_module)
+ # freeze any module you want
+ # Here, we are freezing `feature_extractor`
+
+ self.freeze(pl_module.batch_norm)
+ # self.freeze(pl_module.Dense_1)
+ self.freeze(pl_module.gatr)
+ # self.freeze(pl_module.postgn_dense)
+ # self.freeze(pl_module.ScaledGooeyBatchNorm2_2)
+ self.freeze(pl_module.clustering)
+ self.freeze(pl_module.beta)
+
+ print("CLUSTERING HAS BEEN FROOOZEN")
+
+ def finetune_function(self, pl_module, current_epoch, optimizer):
+ print("Not finetunning")
+ # # When `current_epoch` is 10, feature_extractor will start training.
+ # if current_epoch == self._unfreeze_at_epoch:
+ # self.unfreeze_and_add_param_group(
+ # modules=pl_module.feature_extractor,
+ # optimizer=optimizer,
+ # train_bn=True,
+ # )
diff --git a/src/logger/logger.py b/src/logger/logger.py
new file mode 100644
index 0000000000000000000000000000000000000000..ee8091947e0042f67c34cf524c012a4698233646
--- /dev/null
+++ b/src/logger/logger.py
@@ -0,0 +1,83 @@
+import logging
+import sys
+import os
+from functools import lru_cache
+
+
+def _configLogger(name, stdout=sys.stdout, filename=None, loglevel=logging.INFO):
+ # define a Handler which writes INFO messages or higher to the sys.stdout
+ logger = logging.getLogger(name)
+ logger.setLevel(loglevel)
+ if stdout:
+ console = logging.StreamHandler(stdout)
+ console.setLevel(loglevel)
+ console.setFormatter(logging.Formatter('[%(asctime)s] %(levelname)s: %(message)s'))
+ logger.addHandler(console)
+ if filename:
+ dirname = os.path.dirname(filename)
+ if dirname and not os.path.exists(dirname):
+ os.makedirs(os.path.dirname(filename))
+ logfile = logging.FileHandler(filename)
+ logfile.setLevel(loglevel)
+ logfile.setFormatter(logging.Formatter('[%(asctime)s] %(levelname)s: %(message)s'))
+ logger.addHandler(logfile)
+
+
+class ColoredLogger():
+ color_dict = {
+ 'black': '\033[0;30m',
+ 'red': '\033[0;31m',
+ 'green': '\033[0;32m',
+ 'orange': '\033[0;33m',
+ 'blue': '\033[0;34m',
+ 'purple': '\033[0;35m',
+ 'cyan': '\033[0;36m',
+ 'lightgray': '\033[0;37m',
+
+ 'darkgray': '\033[1;30m',
+ 'lightred': '\033[1;31m',
+ 'lightgreen': '\033[1;32m',
+ 'yellow': '\033[1;33m',
+ 'lightblue': '\033[1;34m',
+ 'lightpurple': '\033[1;35m',
+ 'lightcyan': '\033[1;36m',
+ 'white': '\033[1;37m',
+
+ 'bold': '\033[1m',
+ 'endcolor': '\033[0m',
+ }
+
+ def __init__(self, name):
+ self.logger = logging.getLogger(name)
+
+ def colorize(self, msg, color):
+ return self.color_dict[color] + msg + self.color_dict['endcolor']
+
+ def debug(self, msg, *args, color=None, **kwargs):
+ if color:
+ msg = self.colorize(msg, color)
+ self.logger.debug(msg, *args, **kwargs)
+
+ def info(self, msg, *args, color=None, **kwargs):
+ if color:
+ msg = self.colorize(msg, color)
+ self.logger.info(msg, *args, **kwargs)
+
+ def warning(self, msg, *args, color=None, **kwargs):
+ if color:
+ msg = self.colorize(msg, color)
+ self.logger.warning(msg, *args, **kwargs)
+
+ def error(self, msg, *args, color=None, **kwargs):
+ if color:
+ msg = self.colorize(msg, color)
+ self.logger.error(msg, *args, **kwargs)
+
+
+_logger = ColoredLogger('weaver')
+
+
+@lru_cache(10)
+def warn_once(msg, logger=_logger):
+ # Keep track of 10 different messages and then warn again
+ logger.warning(msg)
\ No newline at end of file
diff --git a/src/model_wrapper_gradio.py b/src/model_wrapper_gradio.py
new file mode 100644
index 0000000000000000000000000000000000000000..2524bd7566f296fb9819538e1c2b46a181f32fb8
--- /dev/null
+++ b/src/model_wrapper_gradio.py
@@ -0,0 +1,185 @@
+# A simple wrapper to run the L-GATr model on HuggingFace spaces
+import shutil
+import glob
+import argparse
+import functools
+import numpy as np
+import math
+import torch
+import sys
+import os
+import wandb
+import time
+from pathlib import Path
+from src.layers.object_cond import calc_eta_phi
+torch.autograd.set_detect_anomaly(True)
+from src.dataset.functions_data import get_batch
+from src.dataset.functions_data import concat_events, Event, EventPFCands
+from src.plotting.plot_event import plot_event
+from src.dataset.dataset import EventDataset
+from src.jetfinder.clustering import get_clustering_labels
+from torch_scatter import scatter_sum
+
+from src.utils.train_utils import (
+ to_filelist,
+ train_load,
+ test_load,
+ get_model,
+ get_optimizer_and_scheduler,
+ get_model_obj_score
+)
+from src.utils.paths import get_path
+import warnings
+import pickle
+import os
+
+import fastjet
+
+def inference(loss_str, train_dataset_str, input_text, input_text_quarks):
+ args = argparse.ArgumentParser()
+ model_path = f"models/{loss_str}/{train_dataset_str}.ckpt"
+ args.spatial_part_only = True # LGATr
+ args.load_model_weights = model_path
+ args.aug_soft = True # LGATr_GP etc.
+ args.network_config = "src/models/LGATr/lgatr.py"
+ args.beta_type = "pt+bc"
+ args.embed_as_vectors = False
+ args.debug = False
+ args.epsilon = 0.3
+ args.gen_level = False
+ args.parton_level = False
+ args.global_features_obj_score = False
+ args.gt_radius = 0.8
+ args.no_pid = True
+ args.hidden_mv_channels = 16
+ args.hidden_s_channels = 64
+ args.internal_dim = 128
+ args.lorentz_norm = False
+ args.min_cluster_size = 2
+ args.min_samples = 1
+ args.n_heads = 4
+ args.num_blocks = 10
+ args.scalars_oc=False
+
+ dev = torch.device("cpu")
+ model = get_model(args, dev)
+ orig_model = model
+ batch_config = {"use_p_xyz": True, "use_four_momenta": False}
+
+ if "lgatr" in args.network_config.lower():
+ batch_config = {"use_four_momenta": True}
+ batch_config["no_pid"] = True
+
+ print("batch_config:", batch_config)
+ model.eval()
+
+ # input text in format pt,eta,phi,mass,charge
+ pt, eta, phi, mass, charge = [], [], [], [], []
+ # now parse the input text
+ for line in input_text.strip().split('\n'):
+ values = list(map(float, line.split()))
+ pt.append(values[0])
+ eta.append(values[1])
+ phi.append(values[2])
+ mass.append(values[3])
+ charge.append(int(values[4]))
+ pt_quarks, eta_quarks, phi_quarks = [], [], []
+ for line in input_text_quarks.strip().split("\n"):
+ values = list(map(float, line.split()))
+ pt_quarks.append(values[0])
+ eta_quarks.append(values[1])
+ phi_quarks.append(values[2])
+ pid = torch.zeros(len(pt))
+ pf_cand_jet_idx = [-1] * len(pt)
+
+ pfcands = EventPFCands(pt, eta, phi, mass, charge, pid, pf_cand_jet_idx=pf_cand_jet_idx)
+ n_soft = 0
+ if "GP" in loss_str:
+ n_soft = 500
+ if n_soft > 0:
+ pfcands = EventDataset.pfcands_add_soft_particles(pfcands, n_soft, random_generator=np.random)
+ event = Event(pfcands=pfcands)
+ event_batch = concat_events([event])
+ batch, _ = get_batch(event_batch, batch_config, torch.zeros(len(pfcands)), test=True)
+
+ with torch.no_grad():
+ coords = model(batch, cpu_demo=True)[:, 1:4] # !!! Only use cpu_demo with batch size of 1 (quick fix for unavailability of xformers attention on CPU)
+ clust_labels = get_clustering_labels(coords.detach().cpu().numpy(), batch.batch_idx, min_cluster_size=args.min_cluster_size, min_samples=args.min_samples, epsilon=args.epsilon)
+ jets_pxyz = scatter_sum(torch.tensor(pfcands.pxyz), torch.tensor(clust_labels+1), dim=0)[1:]
+ jets_pt = torch.norm(jets_pxyz[:, :2], p=2, dim=-1)
+ filt = torch.where(jets_pt > 30)[0].tolist()
+ jets_eta, jets_phi = calc_eta_phi(jets_pxyz, False)
+ clust_assignment = {}
+ for i in range(len(clust_labels)):
+ if clust_labels[i] in filt and clust_labels[i] != -1:
+ clust_assignment[i] = filt.index(clust_labels[i])
+ jets_pt = jets_pt[filt]
+ jets_eta = jets_eta[filt]
+ jets_phi = jets_phi[filt]
+ ak_pt, ak_eta, ak_phi, _, ak_assignment = EventDataset.get_jets_fastjets_raw_with_assignment(pfcands, fastjet.JetDefinition(fastjet.antikt_algorithm, 0.8), pt_cutoff=30)
+ model_coords = calc_eta_phi(coords, return_stacked=0)
+ clist = ['#1f78b4', '#b3df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbe6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99',
+ '#b15928']
+ colors = {
+ -1: "gray",
+ 0: clist[0],
+ 1: clist[1],
+ 2: clist[2],
+ 3: clist[3],
+ 4: clist[4],
+ 5: clist[5],
+ 6: clist[6],
+ 7: clist[7],
+ }
+ c = []
+ c_ak = []
+ for i in range(len(pfcands)):
+ if i in ak_assignment:
+ c_ak.append(colors.get(ak_assignment[i], "purple"))
+ else:
+ c_ak.append("gray")
+ if i in clust_assignment:
+ c.append(colors.get(clust_assignment[i], "gray"))
+ else:
+ c.append("gray")
+ import matplotlib.pyplot as plt
+
+ fig, ax = plt.subplots(1, 3, figsize=(10, 3.33)) # with AK colors, with model colors, with model colors in clustering space
+ ax[0].set_title("Colors: AK clusters")
+ ax[1].set_title("Colors: Model clusters")
+ ax[2].set_title("Colors: Model clusters in cl. space")
+ plot_event(event, colors=c_ak, ax=ax[0], jets=0)
+ plot_event(event, colors=c, ax=ax[1], jets=0)
+ plot_event(event, colors=c, ax=ax[2], custom_coords=model_coords, jets=0)
+ model_jets, ak_jets = [], []
+
+ for j in range(len(ak_pt)):
+ if ak_pt[j] >= 30:
+ ax[0].text(ak_eta[j] + 0.1, ak_phi[j] + 0.1,
+ "pt=" + str(round(ak_pt[j], 1)), color="blue", fontsize=6, alpha=0.5)
+ ak_jets.append({"pt": ak_pt[j], "eta": ak_eta[j], "phi": ak_phi[j]})
+ if ak_pt[j] >= 100:
+ for k in range(3):
+ circle = plt.Circle((ak_eta[j], ak_phi[j]), 0.8, color="green", fill=False, alpha=.7)
+ ax[k].add_artist(circle)
+
+
+ for j in range(len(jets_pt)):
+ if jets_pt[j] >= 30:
+ ax[1].text(jets_eta[j] + 0.1, jets_phi[j] + 0.1,
+ "pt=" + str(round(jets_pt[j].item(), 1)), color="gray", fontsize=6, alpha=0.5)
+ model_jets.append({"pt": jets_pt[j].item(), "eta": jets_eta[j].item(), "phi": jets_phi[j].item()})
+
+ if jets_pt[j] >= 100:
+ for k in range(3):
+ circle = plt.Circle((jets_eta[j], jets_phi[j]), 0.7, color="blue", fill=False, alpha=.7)
+ ax[k].add_artist(circle)
+ for k in range(3):
+ #for n in range(len(phi_quarks)):
+ # # add triangle symb
+ ax[k].scatter(eta_quarks, phi_quarks, s=pt_quarks, c="red", marker="^", alpha=0.3)
+ ax[k].set_xlabel("$\eta$")
+ ax[k].set_ylabel("$\phi$")
+ fig.tight_layout()
+ return model_jets, ak_jets, fig
+
diff --git a/src/plotting/eval_matrix.py b/src/plotting/eval_matrix.py
new file mode 100644
index 0000000000000000000000000000000000000000..da9ce3294eb13da766ea06b2aa62d556dd8e611e
--- /dev/null
+++ b/src/plotting/eval_matrix.py
@@ -0,0 +1,116 @@
+import matplotlib.pyplot as plt
+import numpy as np
+
+
+def ax_tiny_histogram(ax, labels, colors, values):
+ # Create bars
+ bars = ax.barh(range(len(labels)), values, color=colors, alpha=0.5)
+
+ # Add labels inside the bars, left-aligned
+ for i, (bar, label) in enumerate(zip(bars, labels)):
+ ax.text(min(values)-0.004, bar.get_y() + bar.get_height()/2, label,
+ va='center', ha='left', fontsize=8, color='black', clip_on=True)
+ ax.text(max(values)+0.001, bar.get_y() + bar.get_height()/2, f'{values[i]:.3f}',
+ va='center', ha='right', fontsize=8)
+
+ ax.set_yticks([])
+ ax.set_xticks([]) # Hide ticks for minimal look
+ for spine in ax.spines.values():
+ spine.set_visible(False)
+
+ ax.set_xlim(min(values)-0.005, max(values)+0.005)
+ return ax
+
+
+def multiple_matrix_plot(result, labels, colors, custom_val_formula=lambda x: 2*x[0]*x[1]/(x[0]+x[1]), rename_dict={}): # custom_val_formula set to F1 score, and x is [precision, recall]
+ # result: mDark -> mMed -> rinv -> {label->[P, R]} - the order of the labels is set with 'labels' and the colors are set with 'colors'
+ # labels: list of labels to plot
+ mediator_masses = sorted(list(result.keys()))
+ r_invs = sorted(list(set([rinv for mMed in result for rinv in result[mMed]])))
+ sz = 3
+ #fig, ax = plt.subplots(len(mediator_masses), len(r_invs), figsize=(sz*len(r_invs), 6*len(mediator_masses)))
+ fig, ax = plt.subplots(len(mediator_masses), len(r_invs), figsize=(sz*len(r_invs), 0.65*sz*len(mediator_masses)))
+ if len(mediator_masses) == 1 and len(r_invs) == 1:
+ ax = np.array([[ax]])
+ for i, mMed in enumerate(mediator_masses):
+ for k, rinv in enumerate(r_invs):
+ if mMed not in result:
+ continue
+ if rinv not in result[mMed]:
+ continue
+ r = result[mMed][rinv]
+ r = {key: custom_val_formula(val) for key, val in r.items()}
+ #ax_tiny = fig.add_axes([0.3, 0.1 + i*0.2, 0.15, 0.15])
+ #ax_tiny = fig.add_axes([0.1 + k*0.2, 0.1 + i*0.2, 0.15, 0.15])
+ for label in labels:
+ if label not in r:
+ print("Label not in result:", label , " - skipping!")
+ return None, None
+ ax_tiny_histogram(ax[i, k], [rename_dict.get(l,l) for l in labels], colors, [r[label] for label in labels])
+ ax[i, k].set_title(f"$m_{{Z'}}$ = {mMed} GeV, $r_{{inv.}}$ = {rinv}")
+ #ax.set_title(f"$m_{mMed}$ GeV")
+ #ax.set_xlabel("$r_{inv}$")
+ #ax.set_ylabel("$m_{Z'}$ [GeV]")
+ #ax.set_xticks(range(len(r_invs)))
+ #ax.set_xticklabels(r_invs)
+ #ax.set_yticks(range(len(mediator_masses)))
+ #ax.set_yticklabels(mediator_masses)
+ fig.tight_layout()
+ return fig, ax
+
+def matrix_plot(result, color_scheme, cbar_label, ax=None, metric_comp_func=None, is_qcd=False):
+ make_fig = ax is None
+ dark_masses = [20]
+ if is_qcd:
+ dark_masses = [0]
+ if make_fig:
+ fig, ax = plt.subplots(len(dark_masses), 1, figsize=(5, 5))
+ mediator_masses = sorted(list(result.keys()))
+ r_invs = sorted(list(set([rinv for mMed in result for mDark in result[mMed] for rinv in result[mMed][mDark]])))
+ if len(dark_masses) == 1:
+ ax = [ax]
+ for i, mDark in enumerate(dark_masses):
+ data = np.zeros((len(mediator_masses), len(r_invs)))
+ for j, mMed in enumerate(mediator_masses):
+ for k, rinv in enumerate(r_invs):
+ if mMed not in result:
+ continue
+ if mDark not in result[mMed]:
+ continue
+ if rinv not in result[mMed][mDark]:
+ continue
+ r = result[mMed][mDark][rinv]
+ if metric_comp_func is not None:
+ try:
+ r = metric_comp_func(r)
+ except:
+ r=0
+ data[j, k] = r
+ ax[i].imshow(data, cmap="Blues")
+ for (j, k), val in np.ndenumerate(data):
+ ax[i].text(k, j, f'{val:.3f}', ha='center', va='center', color='black')
+ ax[i].set_xticks(range(len(r_invs)))
+ ax[i].set_xticklabels(r_invs)
+ ax[i].set_yticks(range(len(mediator_masses)))
+ ax[i].set_yticklabels(mediator_masses)
+ ax[i].set_xlabel("$r_{inv}$")
+ ax[i].set_ylabel("$m_{Z'}$ [GeV]")
+ #ax[i].set_title(f"mDark = {mDark} GeV")
+ if color_scheme.lower() == "greens":
+ # color it from 0 to 1.0 - set limits on the cbar
+ cbar = plt.colorbar(ax[i].imshow(data, cmap=color_scheme), ax=ax[i])
+ else:
+ cbar = plt.colorbar(ax[i].imshow(data, cmap=color_scheme), ax=ax[i])
+ cbar.set_label(cbar_label)
+ if make_fig:
+ fig.tight_layout()
+ return fig
+
+def scatter_plot(ax, xs, ys, label, color=None, pattern=".--"):
+ idx = np.argsort(xs)
+ xs = np.array(xs)[idx]
+ ys = np.array(ys)[idx]
+ if color is not None:
+ ax.plot(xs, ys, pattern, label=label, color=color)
+ else:
+ ax.plot(xs, ys, pattern, label=label, color=color)
diff --git a/src/plotting/histograms.py b/src/plotting/histograms.py
new file mode 100644
index 0000000000000000000000000000000000000000..11fda525bac4f76839c94e8ffaeaa7f8f3a34eec
--- /dev/null
+++ b/src/plotting/histograms.py
@@ -0,0 +1,55 @@
+import numpy as np
+import matplotlib.pyplot as plt
+
+def score_histogram(scores_true, scores_pred, ax=None, sz=10):
+ make_fig = ax is None
+ if make_fig:
+ fig, ax = plt.subplots(1, 1, figsize=(sz, sz))
+ bins = np.linspace(0, 1, 100)
+ pos_scores = scores_pred[scores_true == 1]
+ neg_scores = scores_pred[scores_true == 0]
+ ax.hist(pos_scores, bins=bins, histtype="step", label="Jet", color=(0, 0.5, 0))
+ ax.hist(neg_scores, bins=bins, histtype="step", label="Noise", color=(0.6, 0.6, 0.6))
+ ax.set_yscale("log")
+ ax.set_xlabel("Classifier score")
+ ax.legend()
+ ax.grid(1)
+ if make_fig:
+ fig.tight_layout()
+ return fig
+
+from sklearn.metrics import confusion_matrix
+def confusion_matrix_plot(ytrue, ypred, ax):
+ cm = confusion_matrix(ytrue.int(), ypred.int())
+ ax.imshow(cm, cmap="Blues")
+ ax.set_xlabel("Predicted label")
+ ax.set_ylabel("True label")
+ ax.set_xticks([0, 1])
+ ax.set_yticks([0, 1])
+ ax.set_xticklabels(["Noise", "Jet"])
+ ax.set_yticklabels(["Noise", "Jet"])
+ for i in range(2):
+ for j in range(2):
+ ax.text(j, i, cm[i, j], ha="center", va="center", color="black")
+
+def per_pt_score_histogram(y_true, y_pred, pt):
+ pt_bins = [[0, 1], [1, 10], [10, 1000]]
+ sz = 4
+ fig, ax = plt.subplots(len(pt_bins), 1, figsize=(sz, sz*len(pt_bins)))
+ for i, (pt_min, pt_max) in enumerate(pt_bins):
+ mask = (pt > pt_min) & (pt < pt_max)
+ score_histogram(y_true[mask], y_pred[mask], ax=ax[i])
+ ax[i].set_title(f"pt $\in$ ({pt_min}, {pt_max})")
+ fig.tight_layout()
+ return fig
+
+def plot_roc_curve(y_true, y_pred):
+ from sklearn.metrics import roc_curve
+ fpr, tpr, _ = roc_curve(y_true, y_pred)
+ fig, ax = plt.subplots(1, 1, figsize=(5, 5))
+ ax.plot(fpr, tpr)
+ ax.set_xlabel("False positive rate")
+ ax.set_ylabel("True positive rate")
+ ax.set_title("ROC curve")
+ ax.grid(1)
+ return fig
diff --git a/src/plotting/plot_coordinates.py b/src/plotting/plot_coordinates.py
new file mode 100644
index 0000000000000000000000000000000000000000..567728f50d3961ff00426dc6ced9d12e13dbfbe4
--- /dev/null
+++ b/src/plotting/plot_coordinates.py
@@ -0,0 +1,45 @@
+import plotly.express as px
+import pandas as pd
+import numpy as np
+import os
+
+def plot_coordinates(
+ coords,
+ pt, # the size of the points
+ tidx, # truth idx
+ outdir=None,
+ filename=None
+):
+ data = {
+ "X": coords[:, 0].view(-1, 1).detach().cpu().numpy(),
+ "Y": coords[:, 1].view(-1, 1).detach().cpu().numpy(),
+ "Z": coords[:, 2].view(-1, 1).detach().cpu().numpy(),
+ "tIdx": tidx.view(-1, 1).detach().cpu().numpy(),
+ "pt": pt.view(-1, 1).detach().cpu().numpy(),
+ }
+ print([(k, data[k].shape) for k in data])
+ df = pd.DataFrame(
+ np.concatenate([data[k] for k in sorted(data.keys())], axis=1),
+ columns=[k for k in sorted(data.keys())],
+ )
+ df["orig_tIdx"] = df["tIdx"]
+ fig = px.scatter_3d(
+ df,
+ x="X",
+ y="Y",
+ z="Z",
+ color="tIdx",
+ size="pt",
+ # hover_data=hover_data,
+ template="plotly_dark",
+ color_continuous_scale=px.colors.sequential.Rainbow,
+ # make it opaque a bit
+ opacity=0.5,
+ )
+ fig.update_traces(marker=dict(line=dict(width=0)))
+ if filename is None or outdir is None:
+ return fig
+ fig.write_html(
+ os.path.join(outdir, filename)
+ )
+
diff --git a/src/plotting/plot_event.py b/src/plotting/plot_event.py
new file mode 100644
index 0000000000000000000000000000000000000000..e7bcde90b558250e9dd5413fbc5f352f1ab6e768
--- /dev/null
+++ b/src/plotting/plot_event.py
@@ -0,0 +1,289 @@
+import matplotlib.pyplot as plt
+import torch
+import os
+import numpy as np
+import matplotlib.colors as mcolors
+from matplotlib import cm
+from sklearn.metrics import confusion_matrix
+from src.plotting.histograms import score_histogram, confusion_matrix_plot
+from src.plotting.plot_coordinates import plot_coordinates
+from src.layers.object_cond import calc_eta_phi
+
+
+def plot_event_comparison(event, ax=None, special_pfcands_size=1, special_pfcands_color="gray"):
+ eta_dq = event.matrix_element_gen_particles.eta
+ phi_dq = event.matrix_element_gen_particles.phi
+ pt_dq = event.matrix_element_gen_particles.pt
+ eta = event.pfcands.eta
+ phi = event.pfcands.phi
+ pt = event.pfcands.pt
+ mapping = event.pfcands.pf_cand_jet_idx.int().tolist()
+ print("N jets:", len(event.jets))
+ genjet_eta = event.genjets.eta
+ genjet_phi = event.genjets.phi
+ genjet_pt = event.genjets.pt
+ if ax is None:
+ fig, ax = plt.subplots(1, 2, figsize=(10, 5))
+ # plot eta, phi and the size of circles proportional to p_t. The colors should be either gray (if not in mapping) or some other color that 'represents' the identified jet
+ colorlist = ["red", "green", "blue", "purple", "orange", "yellow", "black", "pink", "cyan", "brown", "black", "black", "black", "gray"]
+ colors = []
+ for i in range(len(eta)):
+ colors.append(colorlist[mapping[i]])
+ colors = np.array(colors)
+ is_special = (event.pfcands.pid.abs() < 4)
+ #markers = ["." if not is_special[i] else "v" for i in range(len(eta))]
+ #ax[0].scatter(eta, phi, s=pt, c=colors)
+ ax[0].scatter(eta[is_special], phi[is_special], s=pt[is_special]*special_pfcands_size, c=special_pfcands_color, marker="v")
+ ax[0].scatter(eta[~is_special], phi[~is_special], s=pt[~is_special], c=colors[~is_special])
+ ax[0].scatter(eta_dq, phi_dq, s=pt_dq, c="red", marker="^", alpha=1.0)
+ ax[0].scatter(genjet_eta, genjet_phi, marker="*", s=genjet_pt, c="blue", alpha=1.0)
+ #eta_special = event.special_pfcands.eta
+ #phi_special = event.special_pfcands.phi
+ #pt_special = event.special_pfcands.pt
+ #print("N special PFCands:", len(eta_special))
+ #ax[0].scatter(eta_special, phi_special, s=pt_special*special_pfcands_size, c=special_pfcands_color, marker="v")
+ # "special" PFCands - electrons, muons, photons satisfying certain criteria
+ # Display the jets as a circle with R=0.5
+ jet_eta = event.jets.eta
+ jet_phi = event.jets.phi
+ for i in range(len(jet_eta)):
+ circle = plt.Circle((jet_eta[i], jet_phi[i]), 0.5, color="red", fill=False)
+ ax[0].add_artist(circle)
+ ax[0].set_xlabel(r"$\eta$")
+ ax[0].set_ylabel(r"$\phi$")
+ ax[0].set_title("PFCands with Jets")
+ if event.fatjets is not None:
+ colors = []
+ for i in range(len(eta)):
+ colors.append(colorlist[mapping[i]])
+ colors = np.array(colors)
+ is_special = (event.pfcands.pid.abs() < 4)
+ ax[1].scatter(eta[is_special], phi[is_special], s=pt[is_special] * special_pfcands_size,
+ c=colors[is_special], marker="v")
+ ax[1].scatter(eta[~is_special], phi[~is_special], s=pt[~is_special], c=colors[~is_special])
+ ax[1].scatter(eta_dq, phi_dq, s=pt_dq, c="red", marker="^", alpha=1.0)
+ ax[1].scatter(genjet_eta, genjet_phi, marker="*", s=genjet_pt, c="blue", alpha=1.0)
+ ax[1].set_xlabel(r"$\eta$")
+ ax[1].set_ylabel(r"$\phi$")
+ ax[1].set_title("PFCands with FatJets")
+ # Plot the fatjets as a circle with R=0.8 around the center of the fatjet
+ fatjet_eta = event.fatjets.eta
+ fatjet_phi = event.fatjets.phi
+ fatjet_R = 0.8
+ for i in range(len(fatjet_eta)):
+ circle = plt.Circle((fatjet_eta[i], fatjet_phi[i]), fatjet_R, color="red", fill=False)
+ ax[1].add_artist(circle)
+ # even aspect ratio
+ ax[1].set_aspect("equal")
+ ax[0].set_aspect("equal")
+ if ax is not None:
+ fig.tight_layout()
+ return fig
+
+
+def plot_event(event, colors="gray", custom_coords=None, ax=None, jets=True, pfcands="pfcands"):
+ # plots event onto the specified ax.
+ # :colors: color of the pfcands
+ # :colors_special: color of the special pfcands
+ # :ax: matplotlib ax object to plot onto
+ # :custom_coords: Plot eta and phi from custom_coords instead of event.pfcands.
+ make_fig = ax is None
+ if ax is None:
+ fig, ax = plt.subplots(1, 1, figsize=(5, 5))
+
+
+
+ eta = getattr(event, pfcands).eta
+ phi = getattr(event, pfcands).phi
+ pt = getattr(event, pfcands).pt
+
+ #eta_special = event.special_pfcands.eta
+ #phi_special = event.special_pfcands.phi
+ #pt_special = event.special_pfcands.pt
+ if custom_coords:
+ eta = custom_coords[0]
+ phi = custom_coords[1]
+ #if len(eta_special):
+ # eta_special = eta[-len(eta_special):]
+ # phi_special = phi[-len(phi_special):]
+ # eta = eta[:-len(eta_special)]
+ # phi = phi[:-len(eta_special)]
+ #genjet_eta = event.genjets.eta
+ #genjet_phi = event.genjets.phi
+ #genjet_pt = event.genjets.pt
+ #if len(eta_special):
+ # colors_special = colors[-len(eta_special):]
+ # colors = colors[:-len(eta_special)]
+ # print("Colors_special", colors_special)
+ # assert len(colors) == len(phi)
+ # assert len(colors_special) == len(eta_special)
+ ax.scatter(eta, phi, s=pt, c=colors, alpha=0.7)
+ if hasattr(event, "matrix_element_gen_particles") and event.matrix_element_gen_particles is not None:
+ eta_dq = event.matrix_element_gen_particles.eta
+ phi_dq = event.matrix_element_gen_particles.phi
+ pt_dq = event.matrix_element_gen_particles.pt
+ ax.scatter(eta_dq, phi_dq, s=pt_dq, c="red", marker="^", alpha=0.5) # Dark quarks
+ #ax.scatter(genjet_eta, genjet_phi, marker="*", s=genjet_pt, c="blue", alpha=0.5)
+ #if len(eta_special):
+ # ax.scatter(eta_special, phi_special, s=pt_special, c=colors_special, marker="v")
+ if jets:
+ #jet_eta = event.fatjets.eta
+ #jet_phi = event.fatjets.phi
+ #for i in range(len(jet_eta)):
+ # circle = plt.Circle((jet_eta[i], jet_phi[i]), 0.8, color="red", fill=False)
+ # ax.add_artist(circle)
+ if hasattr(event, "model_jets") and event.model_jets is not None:
+ model_jet_eta = event.model_jets.eta
+ model_jet_phi = event.model_jets.phi
+ obj_score = None
+ if hasattr(event.model_jets, "obj_score"):
+ obj_score = event.model_jets.obj_score
+ for i in range(len(model_jet_eta)):
+ circle = plt.Circle((model_jet_eta[i], model_jet_phi[i]), 0.77, color="blue", fill=False, alpha=.7)
+ ax.add_artist(circle)
+ # plot text with obj score
+ if obj_score is not None:
+ ax.text(model_jet_eta[i]+0.2, model_jet_phi[i]-0.2, "o.s.=" + str(round(torch.sigmoid(obj_score[i]).item(), 2)), color="gray", fontsize=10, alpha=0.5)
+ if hasattr(event, "fastjet_jets") and event.fastjet_jets is not None:
+ fj_r = 0.8
+ model_jet_eta = event.fastjet_jets[fj_r].eta
+ model_jet_phi = event.fastjet_jets[fj_r].phi
+ for i in range(len(model_jet_eta)):
+ circle = plt.Circle((model_jet_eta[i], model_jet_phi[i]), 0.74, color="green", fill=False, alpha=.7)
+ ax.add_artist(circle)
+ ax.set_xlabel(r"$\eta$")
+ ax.set_ylabel(r"$\phi$")
+ ax.set_aspect("equal")
+ if make_fig:
+ fig.tight_layout()
+ return fig
+
+
+def get_idx_for_event(obj, i):
+ return obj.batch_number[i], obj.batch_number[i+1]
+
+
+def get_labels_jets(b, pfcands, jets):
+ # b: Batch of events
+ R = 0.8
+ labels = torch.zeros(len(pfcands)).long()
+ for i in range(len(b)):
+ s, e = get_idx_for_event(jets, i)
+ dq_eta = jets.eta[s:e]
+ dq_phi = jets.phi[s:e]
+ if s == e:
+ continue
+ s, e = get_idx_for_event(pfcands, i)
+ pfcands_eta = pfcands.eta[s:e]
+ pfcands_phi = pfcands.phi[s:e]
+ # calculate the distance matrix between each dark quark and pfcands
+ dist_matrix = torch.cdist(
+ torch.stack([dq_eta, dq_phi], dim=1),
+ torch.stack([pfcands_eta, pfcands_phi], dim=1),
+ p=2
+ )
+ dist_matrix = dist_matrix.T
+ closest_quark_dist, closest_quark_idx = dist_matrix.min(dim=1)
+ closest_quark_idx[closest_quark_dist > R] = -1
+ labels[s:e] = closest_quark_idx
+ return (labels >= 0).float()
+
+
+def plot_batch_eval_OC(event_batch, y_true, y_pred, batch_idx, filename, args, batch, dropped_batches):
+ # Plot the batch, together with nice colors with object condensation GT and betas
+ max_events = 5
+ sz = 10
+ assert len(y_true) == len(y_pred), f"y_true: {len(y_true)}, y_pred: {len(y_pred)}"
+ if args.beta_type == "pt+bc":
+ n_columns = 6
+ y_true_bc = (y_true >= 0).int()
+ #score_histogram(y_true_bc, y_pred[:, 3]).savefig(os.path.join(os.path.dirname(filename), "binary_classifier_scores.pdf"))
+ #score_histogram(y_true_bc, (event_batch.pfcands.pf_cand_jet_idx >= 0).float()).savefig(
+ # os.path.join(os.path.dirname(filename), "binary_classifier_scores_AK8.pdf"))
+ #score_histogram(y_true_bc, get_labels_jets(event_batch, event_batch.pfcands, event_batch.fatjets)).savefig(
+ # os.path.join(os.path.dirname(filename), "binary_classifier_scores_radius_FatJets.pdf"))
+ #score_histogram(y_true_bc, get_labels_jets(event_batch, event_batch.pfcands, event_batch.genjets)).savefig(
+ # os.path.join(os.path.dirname(filename), "binary_classifier_scores_radius_GenJets.pdf"))
+ #fig, ax = plt.subplots(1, 3, figsize=(3*sz/2, sz/2))
+ #confusion_matrix_plot(y_true_bc, y_pred[:, 3] > 0.5, ax[0])
+ #ax[0].set_title("Classifier (cut at 0.5)")
+ #confusion_matrix_plot(y_true_bc, get_labels_jets(event_batch, event_batch.pfcands, event_batch.fatjets), ax[2])
+ #ax[2].set_title("FatJets")
+ #confusion_matrix_plot(y_true_bc, get_labels_jets(event_batch, event_batch.pfcands, event_batch.genjets), ax[1])
+ #ax[1].set_title("GenJets")
+ #fig.tight_layout()
+ #fig.savefig(os.path.join(os.path.dirname(filename), "conf_matrices.pdf"))
+ else:
+ n_columns = 4
+ fig, ax = plt.subplots(max_events, n_columns, figsize=(n_columns * sz, sz * max_events))
+ # columns: Input coords, colored by beta ; Input coords, colored by GT labels; model coords, colored by beta; model coords, colored by GT labels
+ print("N events")
+ for i in range(event_batch.n_events):
+ if i >= max_events:
+ break
+ if i not in dropped_batches:
+ continue
+ event = event_batch[i]
+ filt = batch_idx == i
+ y_true_event = y_true[filt]
+ y_pred_event = y_pred[filt]
+ if args.beta_type == "default":
+ betas = y_pred_event[filt, 3]
+ elif args.beta_type == "pt":
+ betas = event.pfcands.pt
+ elif args.beta_type == "pt+bc":
+ betas = event.pfcands.pt
+ classifier_labels = y_pred_event[:, 3]
+ p_xyz = y_pred_event[:, :3]
+ if y_pred_event.shape[1] == 5:
+ p_xyz = y_pred_event[:, 1:4]
+ e = y_pred_event[:, 0]
+ #lorentz_invariant = e**2 - p_xyz.norm(dim=1)**2
+ #lorentz_invariant_inputs = event.pfcands.E ** 2 - event.pfcands.pxyz.norm(dim=1) ** 2
+ plot_coordinates(event.pfcands.pxyz, pt=event.pfcands.pt, tidx=y_true_event,
+ outdir=os.path.dirname(filename),
+ filename="input_coords_batch_" + str(batch) + "_event_" + str(i) + ".html")
+ plot_coordinates(p_xyz, pt=event.pfcands.pt, tidx=y_true_event,
+ outdir=os.path.dirname(filename),
+ filename="model_coords_batch_" + str(batch) + "_event_" + str(i) + ".html")
+ y_true_event = y_true_event.tolist()
+ clist = ['#1f78b4', '#b3df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbe6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928']
+ colors = {
+ -1: "gray",
+ 0: clist[0],
+ 1: clist[1],
+ 2: clist[2],
+ 3: clist[3]
+ }
+ eta, phi = calc_eta_phi(p_xyz, return_stacked=False)
+ plot_event(event, colors=plt.cm.brg(betas), ax=ax[i, 0])
+ cbar = plt.colorbar(mappable=cm.ScalarMappable(cmap=plt.cm.brg), ax=ax[i, 0]) # How to specify the palette?
+ ax[i, 0].set_title(r"input coords, $\beta$ colors")
+ cbar.set_label(r"$\beta$")
+ plot_event(event, colors=[colors[i] for i in y_true_event], ax=ax[i, 1])
+ ax[i, 1].set_title("input coords, GT colors")
+ plot_event(event, custom_coords=[eta, phi], colors=plt.cm.brg(betas), ax=ax[i, 2], jets=False)
+ #assert betas.min() >= 0 and betas.max() <= 1
+ ax[i, 2].set_title(r"model coords, $\beta$ colors")
+ cbar = plt.colorbar(mappable=cm.ScalarMappable(cmap=plt.cm.brg), ax=ax[i, 2])
+ ax[i, 3].set_title("model coords, GT colors")
+ cbar.set_label(r"$\beta$")
+ plot_event(event, custom_coords=[eta, phi], colors=[colors[i] for i in y_true_event], ax=ax[i, 3], jets=False)
+ if args.beta_type == "pt+bc":
+ # Create a custom colormap from light gray to dark green
+ colors = [(0.9, 0.9, 0.9), (0.0, 0.5, 0.0)] # RGB for light gray and dark green
+ cmap_name = "lightgray_to_darkgreen"
+ custom_cmap = mcolors.LinearSegmentedColormap.from_list(cmap_name, colors)
+ plot_event(event, custom_coords=[eta, phi], colors=custom_cmap(classifier_labels), ax=ax[i, 5], jets=False)
+ ax[i, 5].set_title(r"model coords, BC label colors")
+ cbar = plt.colorbar(mappable=cm.ScalarMappable(cmap=custom_cmap), ax=ax[i, 5])
+ cbar.set_label("Classifier score")
+ plot_event(event, colors=custom_cmap(classifier_labels), ax=ax[i, 4], jets=False)
+ ax[i, 4].set_title(r"input coords, BC label colors")
+ cbar = plt.colorbar(mappable=cm.ScalarMappable(cmap=custom_cmap), ax=ax[i, 4])
+ cbar.set_label("Classifier score")
+ print("Saving eval figure to", filename)
+ fig.tight_layout()
+ fig.savefig(filename)
+ fig.clear()
+ plt.close(fig)
diff --git a/src/preprocessing/copy_v2_files.py b/src/preprocessing/copy_v2_files.py
new file mode 100644
index 0000000000000000000000000000000000000000..b44bf3d9c364269b424b81dc446a2c5d97342f8d
--- /dev/null
+++ b/src/preprocessing/copy_v2_files.py
@@ -0,0 +1,37 @@
+# The files from the ntuplizer are produced in parts, so we need to copy them to the appropriate folders in order to have one dataset per signal hypothesis.
+import argparse
+import os
+
+
+parser = argparse.ArgumentParser(description='Copy the files in appropriate folders - no matter how many parts are in the files') # /work/gkrzmanc/jetclustering/data/Feb26_2025_E1000_N500_noPartonFilter_GluonFix_Full/
+parser.add_argument("--input", type=str, default="/work/gkrzmanc/jetclustering/data/Feb26_2025_E1000_N500_noPartonFilter_GluonFix_Full")
+parser.add_argument("--output", type=str, default="/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/data/Feb26_2025_E1000_N500_noPartonFilter_GluonFix_FullF")
+parser.add_argument("--overwrite", action="store_true") # If True, it will overwrite the files, otherwise, it will skip files that have been already copied
+# --input /pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/data/Feb26_2025_E1000_N500_noPartonFilter --output /pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/data/Feb26_2025_E1000_N500_noPartonFilter_Folders
+# --input /pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/data/Feb26_2025_E1000_N500_noPartonFilter_C --output /pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/data/Feb26_2025_E1000_N500_noPartonFilter_C_Folders
+# --input /work/gkrzmanc/jetclustering/data/Feb26_2025_E1000_N500_noPartonFilter_C --output /work/gkrzmanc/jetclustering/data/Feb26_2025_E1000_N500_noPartonFilter_C_F
+
+
+args = parser.parse_args()
+
+if not os.path.exists(args.output):
+ os.makedirs(args.output)
+
+for file in os.listdir(args.input):
+ # if file is less than 0.5MB, ignore - it's probably still in processing
+ if os.path.getsize(os.path.join(args.input, file)) < 0.5e6:
+ continue
+ # filename is like this: PFNano_s-channel_mMed-1100_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000_part_1.root
+ # make a dir PFNano_s-channel_mMed-1100_mDark-20_rinv-0.7_alpha-peak_13TeV-pythia8_n-1000 in output
+ # and put part_X.root in it
+ filename = file.split("_part_")[0]
+ if not os.path.exists(os.path.join(args.output, filename)):
+ os.makedirs(os.path.join(args.output, filename))
+ # copy it
+ print(f"Copying {file} to {os.path.join(args.output, filename)}")
+ if args.overwrite or not os.path.exists( os.path.join(args.output, filename, "part_"+file.split("_part_")[1])):
+ os.system(f"cp {os.path.join(args.input, file)} {os.path.join(args.output, filename)}")
+ # rename it
+ os.rename(os.path.join(args.output, filename, file), os.path.join(args.output, filename, "part_"+file.split("_part_")[1]))
+
+print("Done")
diff --git a/src/preprocessing/preprocess_dataset.py b/src/preprocessing/preprocess_dataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..01176883a2a147824ecc64a47502ab3d464838cf
--- /dev/null
+++ b/src/preprocessing/preprocess_dataset.py
@@ -0,0 +1,130 @@
+import torch
+import os.path as osp
+import os
+import sys
+from src.dataset.dataset import SimpleIterDataset
+from src.utils.utils import to_filelist
+from pathlib import Path
+import pickle
+from src.utils.paths import get_path
+import argparse
+import numpy as np
+
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--input", type=str)
+parser.add_argument("--output", type=str)
+parser.add_argument("--overwrite", action="store_true")
+parser.add_argument("--dataset-cap", type=int, default=-1)
+parser.add_argument("--v2", action="store_true") # V2 means that the dataset also stores parton-level and genParticles
+parser.add_argument("--delphes", action="store_true")
+
+args = parser.parse_args()
+path = get_path(args.input, "data")
+
+def remove_from_list(lst):
+ out = []
+ for item in lst:
+ if item in ["hgcal", "data.txt", "test_file.root"]:
+ continue
+ out.append(item)
+ return out
+
+def preprocess_dataset(datasets, output_path, config_file, dataset_cap):
+ #datasets = os.listdir(path)
+ #datasets = [os.path.join(path, x) for x in datasets]
+ class Args:
+ def __init__(self):
+ self.data_train = datasets
+ self.data_val = datasets
+ #self.data_train = files_train
+ self.data_config = config_file
+ self.extra_selection = None
+ self.train_val_split = 1.0
+ self.data_fraction = 1
+ self.file_fraction = 1
+ self.fetch_by_files = False
+ self.fetch_step = 1
+ self.steps_per_epoch = None
+ self.in_memory = False
+ self.local_rank = None
+ self.copy_inputs = False
+ self.no_remake_weights = False
+ self.batch_size = 10
+ self.num_workers = 0
+ self.demo = False
+ self.laplace = False
+ self.diffs = False
+ self.class_edges = False
+ args = Args()
+ train_range = (0, args.train_val_split)
+ train_file_dict, train_files = to_filelist(args, 'train')
+ train_data = SimpleIterDataset(train_file_dict, args.data_config, for_training=True,
+ extra_selection=args.extra_selection,
+ remake_weights=True,
+ load_range_and_fraction=(train_range, args.data_fraction),
+ file_fraction=args.file_fraction,
+ fetch_by_files=args.fetch_by_files,
+ fetch_step=args.fetch_step,
+ infinity_mode=False,
+ in_memory=args.in_memory,
+ async_load=False,
+ name='train', jets=True)
+ iterator = iter(train_data)
+ from time import time
+ t0 = time()
+ data = []
+ count = 0
+ while True:
+ try:
+ i = next(iterator)
+ data.append(i)
+ count += 1
+ if dataset_cap > 0 and count >= dataset_cap:
+ break
+ except StopIteration:
+ break
+ t1 = time()
+ print("Took", t1-t0, "s -", datasets[0])
+ from src.dataset.functions_data import concat_events
+ events = concat_events(data) # TODO: This can be done in a nicer way, using less memory (?)
+ result = events.serialize()
+ dir_name = datasets[0].split("/")[-2]
+ save_to_dir = os.path.join(output_path, dir_name)
+ Path(save_to_dir).mkdir(parents=True, exist_ok=True)
+ for key in result[0]:
+ with open(osp.join(save_to_dir, key + ".pkl"), "wb") as f:
+ #pickle.dump(result[0][key], f) #save with torch for mmap
+ #torch.save(result[0][key], f)
+ np.save(f, result[0][key].numpy())
+ with open(osp.join(save_to_dir, "metadata.pkl"), "wb") as f:
+ pickle.dump(result[1], f)
+ print("Saved to", save_to_dir)
+ print("Finished", dir_name)
+ '''
+ from src.dataset.functions_data import EventCollection, EventJets, Event
+ from src.dataset.dataset import EventDataset
+ t2 = time()
+ data1 = []
+ for event in EventDataset(result[0], result[1]):
+ data1.append(event)
+ t3 = time()
+ print("Took", t3-t2, "s")
+ print("Done")
+ '''
+output = get_path(args.output, "preprocessed_data")
+for dir in os.listdir(path):
+ if args.overwrite or not os.path.exists(os.path.join(output, dir)):
+ config = get_path('config_files/config_jets.yaml', 'code')
+ if args.v2:
+ delphes_suffix = ""
+ if args.delphes:
+ delphes_suffix = "_delphes"
+ config = get_path(f'config_files/config_jets_2{delphes_suffix}.yaml', 'code')
+ for i, file in enumerate(sorted(os.listdir(os.path.join(path, dir)))):
+ print("Preprocessing file", file)
+ preprocess_dataset([os.path.join(path, dir, file)], output + "_part"+str(i), config_file=config, dataset_cap=args.dataset_cap)
+ else:
+ print("Skipping", dir + ", already exists")
+ # flush
+ sys.stdout.flush()
diff --git a/src/train.py b/src/train.py
new file mode 100644
index 0000000000000000000000000000000000000000..1b2d4a85a6d176726215b27b754feaef9a629dce
--- /dev/null
+++ b/src/train.py
@@ -0,0 +1,295 @@
+#!/usr/bin/env python
+
+import shutil
+import glob
+import argparse
+import functools
+import numpy as np
+import math
+import torch
+import sys
+import os
+import wandb
+import time
+from pathlib import Path
+
+torch.autograd.set_detect_anomaly(True)
+
+from src.utils.train_utils import count_parameters, get_gt_func, get_loss_func
+from src.utils.utils import clear_empty_paths
+from src.utils.wandb_utils import get_run_by_name, update_args
+from src.logger.logger import _logger, _configLogger
+from src.dataset.dataset import SimpleIterDataset
+from src.utils.import_tools import import_module
+from src.utils.train_utils import (
+ to_filelist,
+ train_load,
+ test_load,
+ get_model,
+ get_optimizer_and_scheduler,
+ get_model_obj_score
+)
+from src.evaluation.clustering_metrics import compute_f1_score_from_result
+from src.dataset.functions_graph import graph_batch_func
+from src.utils.parser_args import parser
+from src.utils.paths import get_path
+import warnings
+import pickle
+import os
+
+
+
+def find_free_port():
+ """https://stackoverflow.com/questions/1365265/on-localhost-how-do-i-pick-a-free-port-number"""
+ import socket
+ from contextlib import closing
+
+ with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
+ s.bind(("", 0))
+ s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ return str(s.getsockname()[1])
+
+# Create directories and initialize wandb run
+args = parser.parse_args()
+
+if args.load_from_run:
+ print("Loading args from run", args.load_from_run)
+ run = get_run_by_name(args.load_from_run)
+ args = update_args(args, run)
+timestamp = time.strftime("%Y_%m_%d_%H_%M_%S")
+random_number = str(np.random.randint(0, 1000)) # to avoid overwriting in case two jobs are started at the same time
+args.run_name = f"{args.run_name}_{timestamp}_{random_number}"
+if "transformer" in args.network_config.lower() or args.network_config == "src/models/GATr/Gatr.py":
+ args.spatial_part_only = False
+
+
+if args.load_model_weights:
+ print("Changing args.load_model_weights")
+ args.load_model_weights = get_path(args.load_model_weights, "results", fallback=True)
+if args.load_objectness_score_weights:
+ args.load_objectness_score_weights = get_path(args.load_objectness_score_weights, "results", fallback=True)
+run_path = os.path.join(args.prefix, "train", args.run_name)
+clear_empty_paths(get_path(os.path.join(args.prefix, "train"), "results")) # Clear paths of failed runs that don't have any files or folders in them
+run_path = get_path(run_path, "results")
+#Path(run_path).mkdir(parents=True, exist_ok=False)
+os.makedirs(run_path, exist_ok=False)
+assert os.path.exists(run_path)
+print("Created directory", run_path)
+args.run_path = run_path
+wandb.init(project=args.wandb_projectname, entity=os.environ["SVJ_WANDB_ENTITY"])
+wandb.run.name = args.run_name
+print("Setting the run name to", args.run_name)
+#wandb.config.run_path = run_path
+wandb.config.update(args.__dict__)
+wandb.config.env_vars = {key: os.environ[key] for key in os.environ if key.startswith("SVJ_") or key.startswith("CUDA_") or key.startswith("SLURM_")}
+if args.tag:
+ wandb.run.tags = [args.tag.strip()]
+args.local_rank = (
+ None if args.backend is None else int(os.environ.get("LOCAL_RANK", "0"))
+)
+if args.backend is not None:
+ port = find_free_port()
+ args.port = port
+ world_size = torch.cuda.device_count()
+stdout = sys.stdout
+if args.local_rank is not None:
+ args.log += ".%03d" % args.local_rank
+ if args.local_rank != 0:
+ stdout = None
+_configLogger("weaver", stdout=stdout, filename=args.log)
+
+warnings.filterwarnings("ignore")
+from src.utils.nn.tools_condensation import train_epoch
+from src.utils.nn.tools_condensation import evaluate as evaluate
+
+training_mode = bool(args.data_train)
+if training_mode:
+ # val_loaders and test_loaders are a dictionary file -> Dataloader with only one dataset
+ # train_loader is a single dataloader of all the files
+ train_loader, val_loaders, val_dataset = train_load(args)
+ if args.irc_safety_loss:
+ train_loader_aug, val_loaders_aug, val_dataset_aug = train_load(args, aug_soft=False, aug_collinear=True)
+ else:
+ train_loader_aug = None
+else:
+ test_loaders = test_load(args)
+
+if args.gpus:
+ if args.backend is not None:
+ # distributed training
+ local_rank = args.local_rank
+ print("localrank", local_rank)
+ torch.cuda.set_device(local_rank)
+ gpus = [local_rank]
+ dev = torch.device(local_rank)
+ print("initializing group process", dev)
+ torch.distributed.init_process_group(backend=args.backend)
+ _logger.info(f"Using distributed PyTorch with {args.backend} backend")
+ print("ended initializing group process")
+ else:
+ gpus = [int(i) for i in args.gpus.split(",")]
+ #if os.environ.get("CUDA_VISIBLE_DEVICES", None) is not None:
+ # gpus = [int(i) for i in os.environ["CUDA_VISIBLE_DEVICES"].split(",")]
+ dev = torch.device(gpus[0])
+ local_rank = 0
+else:
+ gpus = None
+ local_rank = 0
+ dev = torch.device("cpu")
+
+model = get_model(args, dev)
+
+if args.train_objectness_score:
+ model_obj_score = get_model_obj_score(args, dev)
+ model_obj_score = model_obj_score.to(dev)
+else:
+ model_obj_score = None
+num_parameters_counted = count_parameters(model)
+print("Number of parameters:", num_parameters_counted)
+wandb.config.num_parameters = num_parameters_counted
+
+orig_model = model
+loss = get_loss_func(args)
+gt = get_gt_func(args)
+batch_config = {"use_p_xyz": True, "use_four_momenta": False}
+
+if "lgatr" in args.network_config.lower():
+ batch_config = {"use_four_momenta": True}
+
+batch_config["quark_dist_loss"] = args.loss == "quark_distance"
+
+batch_config["parton_level"] = args.parton_level
+batch_config["gen_level"] = args.gen_level
+batch_config["obj_score"] = args.train_objectness_score
+if args.no_pid:
+ print("Not using PID in the features")
+ batch_config["no_pid"] = True
+
+print("batch_config:", batch_config)
+if training_mode:
+ model = orig_model.to(dev)
+ if args.backend is not None:
+ model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(model)
+ print("device_ids = gpus", gpus)
+ model = torch.nn.parallel.DistributedDataParallel(
+ model,
+ device_ids=gpus,
+ output_device=local_rank,
+ find_unused_parameters=True,
+ )
+ opt, scheduler = get_optimizer_and_scheduler(args, model, dev)
+ if args.train_objectness_score:
+ opt_os, scheduler_os = get_optimizer_and_scheduler(args, model_obj_score, dev, load_model_weights="load_objectness_score_weights")
+ else:
+ opt_os, scheduler_os = None, None
+ # DataParallel
+ if args.backend is None:
+ if gpus is not None and len(gpus) > 1:
+ # model becomes `torch.nn.DataParallel` w/ model.module being the original `torch.nn.Module`
+ model = torch.nn.DataParallel(model, device_ids=gpus)
+ if local_rank == 0:
+ wandb.watch(model, log="all", log_freq=10)
+ # Training loop
+ best_valid_metric = np.inf
+ grad_scaler = torch.cuda.amp.GradScaler() if args.use_amp else None
+ steps = 0
+ evaluate(
+ model,
+ val_loaders,
+ dev,
+ 0,
+ steps,
+ loss_func=loss,
+ gt_func=gt,
+ local_rank=local_rank,
+ args=args,
+ batch_config=batch_config,
+ predict=False,
+ model_obj_score=model_obj_score
+ )
+ res = evaluate(
+ model,
+ val_loaders,
+ dev,
+ 0,
+ steps,
+ loss_func=loss,
+ gt_func=gt,
+ local_rank=local_rank,
+ args=args,
+ batch_config=batch_config,
+ predict=True,
+ model_obj_score=model_obj_score
+ )
+ # It was the quickest to do it like this
+ if model_obj_score is not None:
+ res, res_obj_score_pred, res_obj_score_target = res
+ f1 = compute_f1_score_from_result(res, val_dataset)
+ wandb.log({"val_f1_score": f1}, step=steps)
+ epochs = args.num_epochs
+ if args.num_steps != -1:
+ epochs = 999999999
+ for epoch in range(1, epochs + 1):
+ _logger.info("-" * 50)
+ _logger.info("Epoch #%d training" % epoch)
+ steps = train_epoch(
+ args,
+ model,
+ loss_func=loss,
+ gt_func=gt,
+ opt=opt,
+ scheduler=scheduler,
+ train_loader=train_loader,
+ dev=dev,
+ epoch=epoch,
+ grad_scaler=grad_scaler,
+ local_rank=local_rank,
+ current_step=steps,
+ val_loader=val_loaders,
+ batch_config=batch_config,
+ val_dataset=val_dataset,
+ obj_score_model=model_obj_score,
+ opt_obj_score=opt_os,
+ sched_obj_score=scheduler_os,
+ train_loader_aug=train_loader_aug
+ )
+ if steps == "quit_training":
+ break
+
+if args.data_test:
+ if args.backend is not None and local_rank != 0:
+ sys.exit(0)
+ if training_mode:
+ del train_loader, val_loaders
+ test_loaders = test_load(args)
+ model = orig_model.to(dev)
+
+ if gpus is not None and len(gpus) > 1:
+ model = torch.nn.DataParallel(model, device_ids=gpus)
+ model = model.to(dev)
+ i = 0
+ for filename, test_loader in test_loaders.items():
+ result = evaluate(
+ model,
+ test_loader,
+ dev,
+ 0,
+ 0,
+ loss_func=loss,
+ gt_func=gt,
+ local_rank=local_rank,
+ args=args,
+ batch_config=batch_config,
+ predict=True,
+ model_obj_score=model_obj_score
+ )
+ if model_obj_score is not None:
+ result, result_obj_score, result_obj_score_target = result
+ result["obj_score_pred"] = result_obj_score
+ result["obj_score_target"] = result_obj_score_target
+ _logger.info(f"Finished evaluating {filename}")
+ result["filename"] = filename
+ os.makedirs(run_path, exist_ok=True)
+ output_filename = os.path.join(run_path, f"eval_{i}.pkl")
+ pickle.dump(result, open(output_filename, "wb"))
+ i += 1
diff --git a/src/turn_on_cuda.py b/src/turn_on_cuda.py
new file mode 100644
index 0000000000000000000000000000000000000000..41ddca5bde7a884920490e04077c8a1b10bc9109
--- /dev/null
+++ b/src/turn_on_cuda.py
@@ -0,0 +1,11 @@
+import torch
+
+
+def main():
+
+ print("CUDA is available?: ", torch.cuda.is_available())
+ print("CUDA device count:", torch.cuda.device_count())
+
+
+if __name__ == "__main__":
+ main()
diff --git a/src/utils/import_tools.py b/src/utils/import_tools.py
new file mode 100644
index 0000000000000000000000000000000000000000..f1ebdbb2e4bfbb7fa1222889099bd0cf2535989e
--- /dev/null
+++ b/src/utils/import_tools.py
@@ -0,0 +1,8 @@
+from importlib.util import spec_from_file_location, module_from_spec
+
+
+def import_module(path, name='_mod'):
+ spec = spec_from_file_location(name, path)
+ mod = module_from_spec(spec)
+ spec.loader.exec_module(mod)
+ return mod
diff --git a/src/utils/inference/event_Ks.py b/src/utils/inference/event_Ks.py
new file mode 100644
index 0000000000000000000000000000000000000000..cdaefe671697fba78a647b1e108a129c43e90ade
--- /dev/null
+++ b/src/utils/inference/event_Ks.py
@@ -0,0 +1,149 @@
+import numpy as np
+import pandas as pd
+import seaborn as sns
+import matplotlib
+matplotlib.rc("font", size=35)
+import matplotlib.pyplot as plt
+import torch
+from torch_scatter import scatter_sum, scatter_mean
+
+
+def calculate_event_energy_resolution(df, pandora=False, full_vector=False):
+ true_e = torch.Tensor(df.true_showers_E.values)
+ mask_nan_true = np.isnan(df.true_showers_E.values)
+ true_e[mask_nan_true] = 0
+ batch_idx = df.number_batch
+ if pandora:
+ pred_E = df.pandora_calibrated_pfo.values
+ nan_mask = np.isnan(df.pandora_calibrated_pfo.values)
+ pred_E[nan_mask] = 0
+ pred_e1 = torch.tensor(pred_E).unsqueeze(1).repeat(1, 3)
+ pred_vect = torch.tensor(np.array(df.pandora_calibrated_pos.values.tolist()))
+ pred_vect[nan_mask] = 0
+ true_vect = torch.tensor(np.array(df.true_pos.values.tolist()))
+ true_vect[mask_nan_true] = 0
+ else:
+ pred_E = df.calibrated_E.values
+ nan_mask = np.isnan(df.calibrated_E.values)
+ # print(np.sum(nan_mask))
+ pred_E[nan_mask] = 0
+ pred_e1 = torch.tensor(pred_E).unsqueeze(1).repeat(1, 3)
+ pred_vect = torch.tensor(np.array(df.pred_pos_matched.values.tolist()))
+ pred_vect[nan_mask] = 0
+ true_vect = torch.tensor(np.array(df.true_pos.values.tolist()))
+ true_vect[mask_nan_true] = 0
+
+ batch_idx = torch.tensor(batch_idx.values).long()
+ pred_E = torch.tensor(pred_E)
+
+ true_jet_vect = scatter_sum(true_vect, batch_idx, dim=0)
+ pred_jet_vect = scatter_sum(pred_vect, batch_idx, dim=0)
+ true_E_jet = scatter_sum(torch.tensor(true_e), batch_idx)
+ pred_E_jet = scatter_sum(torch.tensor(pred_E), batch_idx)
+ true_jet_p = torch.norm(
+ true_jet_vect, dim=1
+ ) # This is actually momentum resolution
+ pred_jet_p = torch.norm(pred_jet_vect, dim=1)
+
+ mass_true = torch.sqrt(torch.abs(true_E_jet**2 - true_jet_p**2))
+ mass_pred = torch.sqrt(torch.abs(pred_E_jet**2 - pred_jet_p**2))
+
+ mass_over_true = mass_pred / mass_true
+
+ return mass_over_true
+
+
+def get_response_for_event_energy(matched_pandora, matched_):
+ mass_over_true_pandora = calculate_event_energy_resolution(
+ matched_pandora, True, True
+ )
+ decay_type = get_decay_type(matched_pandora)
+ mass_over_true_model = calculate_event_energy_resolution(matched_, False, True)
+ dic = {}
+ dic["mass_over_true_model"] = mass_over_true_model
+ dic["mass_over_true_pandora"] = mass_over_true_pandora
+ dic["decay_type"] = decay_type
+ return dic
+
+
+def get_decay_type(sd_hgb1):
+ batch_number = sd_hgb1.number_batch.values
+ decay_type_list = []
+ for batch_id in range(0, int(np.max(batch_number)) + 1):
+ decay_type = determine_decay_type(sd_hgb1, batch_id)
+ decay_type_list.append(decay_type)
+ return torch.cat(decay_type_list)
+
+
+def determine_decay_type(sd_hgb1, i):
+ pid_values = np.abs(sd_hgb1[sd_hgb1.number_batch == i].pid.values)
+ if len(pid_values) == 2:
+ decay_type = 0
+ charged = np.prod(pid_values == [211.0, 211])
+ elif len(pid_values) == 4 and np.count_nonzero(pid_values == 22.0) == 4:
+ decay_type = 1
+ neutral = np.prod(pid_values == [22.0, 22.0, 22.0, 22.0])
+ else:
+ decay_type = 2
+ return torch.Tensor([decay_type])
+
+
+def plot_mass_resolution(event_res_dic, PATH_store):
+ mask_decay_charged = event_res_dic["decay_type"] == 0
+ fig, ax = plt.subplots()
+ ax.set_xlabel("M_pred/M_true")
+ ax.hist(
+ event_res_dic["mass_over_true_model"][mask_decay_charged],
+ bins=100,
+ histtype="step",
+ label="ML",
+ color="red",
+ density=True,
+ )
+
+ ax.hist(
+ event_res_dic["mass_over_true_pandora"][mask_decay_charged],
+ bins=100,
+ histtype="step",
+ label="Pandora",
+ color="blue",
+ density=True,
+ )
+ ax.grid()
+ ax.legend()
+ ax.set_xlim([0, 10])
+ fig.tight_layout()
+ fig.savefig(PATH_store + "mass_resolution_charged.pdf", bbox_inches="tight")
+
+ mask_decay_neutral = event_res_dic["decay_type"] == 1
+ fig, ax = plt.subplots()
+ ax.set_xlabel("M_pred/M_true")
+
+ ax.hist(
+ event_res_dic["mass_over_true_model"][mask_decay_neutral],
+ bins=100,
+ histtype="step",
+ label="ML",
+ color="red",
+ density=True,
+ )
+
+ ax.hist(
+ event_res_dic["mass_over_true_pandora"][mask_decay_neutral],
+ bins=100,
+ histtype="step",
+ label="Pandora",
+ color="blue",
+ density=True,
+ )
+ ax.grid()
+ ax.legend()
+ ax.set_xlim([0, 10])
+ fig.tight_layout()
+
+ fig.savefig(PATH_store + "mass_resolution_neutral.pdf", bbox_inches="tight")
+
+
+def mass_Ks(matched_pandora, matched_, PATH_store):
+ event_res_dic = get_response_for_event_energy(matched_pandora, matched_)
+ plot_mass_resolution(event_res_dic, PATH_store)
diff --git a/src/utils/inference/event_metrics.py b/src/utils/inference/event_metrics.py
new file mode 100644
index 0000000000000000000000000000000000000000..2574cd274a819e10c164c72f4b0b13e53a3d488a
--- /dev/null
+++ b/src/utils/inference/event_metrics.py
@@ -0,0 +1,438 @@
+import numpy as np
+import pandas as pd
+import seaborn as sns
+import matplotlib
+
+matplotlib.rc("font", size=35)
+import matplotlib.pyplot as plt
+import torch
+from src.utils.inference.inference_metrics import get_sigma_gaussian
+from torch_scatter import scatter_sum, scatter_mean
+
+def plot_per_event_metrics(sd, sd_pandora, PATH_store=None):
+ (
+ calibrated_list,
+ calibrated_list_pandora,
+ reco_list,
+ reco_list_pandora,
+ ) = calculate_energy_per_event(sd, sd_pandora)
+ plot_per_event_energy_distribution(
+ calibrated_list,
+ calibrated_list_pandora,
+ reco_list,
+ reco_list_pandora,
+ PATH_store,
+ )
+
+
+def calculate_energy_per_event(
+ sd,
+ sd_pandora,
+):
+ sd = sd.reset_index(drop=True)
+ sd_pandora = sd_pandora.reset_index(drop=True)
+ corrected_list = []
+ reco_list = []
+ reco_list_pandora = []
+ corrected_list_pandora = []
+ for i in range(0, int(np.max(sd.number_batch))):
+ mask = sd.number_batch == i
+ event_E_total_reco = np.nansum(sd.reco_showers_E[mask])
+ event_E_total_true = np.nansum(sd.true_showers_E[mask])
+ event_E_total_reco_corrected = np.nansum(sd.calibrated_E[mask])
+ event_ML_total_reco = np.nansum(sd.pred_showers_E[mask])
+ mask_p = sd_pandora.number_batch == i
+ event_E_total_reco_p = np.nansum(sd_pandora.reco_showers_E[mask_p])
+ event_E_total_true_p = np.nansum(sd_pandora.true_showers_E[mask_p])
+ event_ML_total_reco_p = np.nansum(sd_pandora.pred_showers_E[mask_p])
+ event_ML_total_reco_p_corrected = np.nansum(
+ sd_pandora.pandora_calibrated_pfo[mask_p]
+ )
+
+ reco_list.append(event_ML_total_reco / event_E_total_reco)
+ corrected_list.append(event_E_total_reco_corrected / event_E_total_true)
+ reco_list_pandora.append(event_ML_total_reco_p / event_E_total_reco_p)
+ corrected_list_pandora.append(
+ event_ML_total_reco_p_corrected / event_E_total_true_p
+ )
+ return corrected_list, corrected_list_pandora, reco_list, reco_list_pandora
+
+
+def plot_per_event_energy_distribution(
+ calibrated_list, calibrated_list_pandora, reco_list, reco_list_pandora, PATH_store
+):
+ fig = plt.figure(figsize=(8, 8))
+ sns.histplot(
+ data=np.array(calibrated_list), # + 1 - np.mean(calibrated_list)
+ stat="percent",
+ binwidth=0.01,
+ label="MLPF",
+ # element="step",
+ # fill=False,
+ color="red",
+ # linewidth=2,
+ )
+ sns.histplot(
+ data=calibrated_list_pandora,
+ stat="percent",
+ color="blue",
+ binwidth=0.01,
+ label="Pandora",
+ # element="step",
+ # fill=False,
+ # linewidth=2,
+ )
+ plt.ylabel("Percent of events")
+ plt.xlabel("$E_{corrected}/E_{total}$")
+ # plt.yscale("log")
+ plt.legend()
+ plt.xlim([0, 2])
+ fig.savefig(
+ PATH_store + "per_event_E.png",
+ bbox_inches="tight",
+ )
+ fig = plt.figure(figsize=(8, 8))
+ sns.histplot(data=reco_list, stat="percent", binwidth=0.01, label="MLPF")
+ sns.histplot(
+ data=reco_list_pandora,
+ stat="percent",
+ color="orange",
+ binwidth=0.01,
+ label="Pandora",
+ )
+ plt.ylabel("Percent of events")
+ plt.xlabel("$E_{recoML}/E_{reco}$")
+ plt.legend()
+ plt.xlim([0.5, 1.5])
+ # plt.yscale("log")
+ fig.savefig(
+ PATH_store + "per_event_E_reco.png",
+ bbox_inches="tight",
+ )
+
+particle_masses = {0: 0, 22: 0, 11: 0.00511, 211: 0.13957, 130: 0.493677, 2212: 0.938272, 2112: 0.939565}
+particle_masses_4_class = {0: 0.00511, 1: 0.13957, 2: 0.939565, 3: 0.0} # electron, CH, NH, photon
+
+def safeint(x, default_val=0):
+ if np.isnan(x):
+ return default_val
+ return int(x)
+
+
+
+def calculate_event_mass_resolution(df, pandora, perfect_pid=False, mass_zero=False, ML_pid=False):
+ true_e = torch.Tensor(df.true_showers_E.values)
+ mask_nan_true = np.isnan(df.true_showers_E.values)
+ true_e[mask_nan_true] = 0
+ batch_idx = df.number_batch
+ if pandora:
+ pred_E = df.pandora_calibrated_pfo.values
+ nan_mask = np.isnan(df.pandora_calibrated_pfo.values)
+ pred_E[nan_mask] = 0
+ pred_e1 = torch.tensor(pred_E).unsqueeze(1).repeat(1, 3)
+ pred_vect = torch.tensor(np.array(df.pandora_calibrated_pos.values.tolist()))
+ nan_mask_p = torch.isnan(pred_vect).any(dim=1)
+ pred_vect[nan_mask_p] = 0
+ true_vect = torch.tensor(np.array(df.true_pos.values.tolist()))
+ mask_nan_p = torch.isnan(true_vect).any(dim=1)
+ true_vect[mask_nan_true] = 0
+ else:
+ pred_E = df.calibrated_E.values
+ nan_mask = np.isnan(df.calibrated_E.values)
+ print(np.sum(nan_mask))
+ pred_E[nan_mask] = 0
+ pred_e1 = torch.tensor(pred_E).unsqueeze(1).repeat(1, 3)
+ pred_vect = torch.tensor(
+ np.array(df.pred_pos_matched.values.tolist())
+ )
+ pred_vect[nan_mask] = 0
+ true_vect = torch.tensor(
+ np.array(df.true_pos.values.tolist())
+ )
+ true_vect[mask_nan_true] = 0
+ if perfect_pid or mass_zero or ML_pid:
+ pred_vect /= np.linalg.norm(pred_vect, axis=1).reshape(-1, 1)
+ pred_vect[np.isnan(pred_vect)] = 0
+ if ML_pid:
+ #assert pandora is False
+ if pandora:
+ print("Perfect PID for Pandora")
+ m = np.array([particle_masses.get(abs(safeint(i)), 0) for i in df.pid])
+ else:
+ m = np.array([particle_masses_4_class.get(safeint(i), 0) for i in df.pred_pid_matched.values])
+ else:
+ m = np.array([particle_masses.get(abs(safeint(i)), 0) for i in df.pid])
+ if mass_zero:
+ m = np.array([0 for _ in m])
+ p_squared = (pred_E ** 2 - m ** 2)
+ p_squared[p_squared < 0] = 0 # they are always like of order -1e-8
+ pred_vect = np.sqrt(p_squared).reshape(-1, 1) * np.array(pred_vect)
+ batch_idx = torch.tensor(batch_idx.values).long()
+ pred_E = torch.tensor(pred_E)
+ true_jet_vect = scatter_sum(true_vect, batch_idx, dim=0)
+ pred_jet_vect = scatter_sum(torch.tensor(pred_vect), batch_idx, dim=0)
+ true_E_jet = scatter_sum(torch.tensor(true_e), batch_idx)
+ pred_E_jet = scatter_sum(torch.tensor(pred_E), batch_idx)
+ true_jet_p = torch.norm(true_jet_vect, dim=1) # This is actually momentum resolution
+ pred_jet_p = torch.norm(pred_jet_vect, dim=1)
+ mass_true = torch.sqrt(torch.abs(true_E_jet ** 2) - true_jet_p ** 2)
+ mass_pred_p = torch.sqrt(
+ torch.abs(pred_E_jet ** 2) - pred_jet_p ** 2) ## TODO: fix the nan values in pred_jet_p!!!!!
+ # replace nans in these with 0
+ mass_over_true_p = mass_pred_p / mass_true
+ E_over_true = pred_E_jet / true_E_jet
+ p_over_true = pred_jet_p / true_jet_p
+ p_jet_pandora = pred_jet_p
+ (
+ mean_mass,
+ var_mass,
+ _,
+ _,
+ ) = get_sigma_gaussian(mass_over_true_p, np.linspace(0, 4, 300))
+ return mean_mass, var_mass, mass_over_true_p, mass_true, p_over_true, true_jet_p, E_over_true
+
+
+def calculate_event_energy_resolution(df, pandora=False, full_vector=False):
+ if full_vector and pandora:
+ assert "pandora_calibrated_pos" in df.columns
+ bins = [0, 700]
+ binsx = []
+ mean = []
+ variance = []
+ distributions = []
+ distr_baseline = []
+ mean_baseline = []
+ variance_baseline = []
+ mass_list = []
+ binning = 1e-2
+ bins_per_binned_E = np.arange(0, 2, binning)
+ for i in range(len(bins) - 1):
+ bin_i = bins[i]
+ bin_i1 = bins[i + 1]
+ binsx.append(0.5 * (bin_i + bin_i1))
+ true_e = df.true_showers_E.values
+ batch_idx = df.number_batch
+ if pandora:
+ pred_e = df.pandora_calibrated_pfo.values
+ pred_e1 = torch.tensor(pred_e).unsqueeze(1).repeat(1, 3)
+ if full_vector:
+ pred_vect = (
+ np.array(df.pandora_calibrated_pos.values.tolist())
+ # * pred_e1.numpy()
+ )
+ true_vect = (
+ np.array(df.true_pos.values.tolist())
+ # * torch.tensor(true_e).unsqueeze(1).repeat(1, 3).numpy()
+ )
+ pred_vect = torch.tensor(pred_vect)
+ true_vect = torch.tensor(true_vect)
+ else:
+ pred_e = df.calibrated_E.values
+ pred_e1 = torch.tensor(pred_e).unsqueeze(1).repeat(1, 3)
+ if full_vector:
+ pred_vect = (
+ np.array(df.pred_pos_matched.values.tolist()) * pred_e1.numpy()
+ )
+ true_vect = (
+ np.array(df.true_pos.values.tolist())
+ # * torch.tensor(true_e).unsqueeze(1).repeat(1, 3).numpy()
+ )
+ pred_vect = torch.tensor(pred_vect)
+ true_vect = torch.tensor(true_vect)
+ true_rec = df.reco_showers_E
+ # pred_e_nocor = df.pred_showers_E[mask]
+ true_e = torch.tensor(true_e)
+ batch_idx = torch.tensor(batch_idx.values).long()
+ pred_e = torch.tensor(pred_e)
+ true_rec = torch.tensor(true_rec.values)
+ if full_vector:
+ true_p_vect = scatter_sum(true_vect, batch_idx, dim=0)
+ pred_p_vect = scatter_sum(pred_vect, batch_idx, dim=0)
+ true_e1 = scatter_sum(torch.tensor(true_e), batch_idx)
+ pred_e1 = scatter_sum(torch.tensor(pred_e), batch_idx)
+ true_e = torch.norm(
+ true_p_vect, dim=1
+ ) # This is actually momentum resolution
+ pred_e = torch.norm(pred_p_vect, dim=1)
+ else:
+ true_e = scatter_sum(true_e, batch_idx)
+ pred_e = scatter_sum(pred_e, batch_idx)
+ true_rec = scatter_sum(true_rec, batch_idx)
+ mask_above = true_e <= bin_i1
+ mask_below = true_e > bin_i
+ mask_check = true_e > 0
+ mask = mask_below * mask_above * mask_check
+ true_e = true_e[mask]
+ true_rec = true_rec[mask]
+ pred_e = pred_e[mask]
+ if torch.sum(mask) > 0: # if the bin is not empty
+ e_over_true = pred_e / true_e
+ e_over_reco = true_rec / true_e
+ distributions.append(e_over_true)
+ distr_baseline.append(e_over_reco)
+ (
+ mean_predtotrue,
+ var_predtotrue,
+ err_mean_predtotrue,
+ err_var_predtotrue,
+ ) = get_sigma_gaussian(e_over_true, bins_per_binned_E)
+ if full_vector:
+ mass_true = torch.sqrt(true_e1[mask] ** 2 - true_e**2)
+ mass_pred = torch.sqrt(pred_e1[mask] ** 2 - pred_e**2)
+ print(pandora, len(mass_true), len(mass_pred))
+ mass_over_true = mass_pred / mass_true
+
+ (
+ mean_mass,
+ var_mass,
+ _,
+ _,
+ ) = get_sigma_gaussian(mass_over_true, bins_per_binned_E)
+ mass_list.append(mass_over_true)
+ (
+ mean_reco_true,
+ var_reco_true,
+ err_mean_reco_true,
+ err_var_reco_true,
+ ) = get_sigma_gaussian(e_over_reco, bins_per_binned_E)
+ mean.append(mean_predtotrue)
+ variance.append(np.abs(var_predtotrue))
+ mean_baseline.append(mean_reco_true)
+ variance_baseline.append(np.abs(var_reco_true))
+ if full_vector:
+ mass_list = torch.cat(mass_list)
+ ret = [
+ mean,
+ variance,
+ distributions,
+ binsx,
+ mean_baseline,
+ variance_baseline,
+ distr_baseline,
+ ]
+ if full_vector:
+ ret += [mass_list]
+ else:
+ ret += [None]
+ return ret
+
+
+def get_response_for_event_energy(matched_pandora, matched_, perfect_pid=False, mass_zero=False, ML_pid=False):
+ (
+ mean_p,
+ variance_om_p,
+ distr_p,
+ x_p,
+ _,
+ _,
+ _,
+ mass_over_true_pandora,
+ ) = calculate_event_energy_resolution(matched_pandora, True, False)
+ (
+ mean,
+ variance_om,
+ distr,
+ x,
+ mean_baseline,
+ variance_om_baseline,
+ _,
+ mass_over_true_model,
+ ) = calculate_event_energy_resolution(matched_, False, False)
+ mean_mass_p, var_mass_p, distr_mass_p, mass_true_p, _, _, E_over_true_pandora = calculate_event_mass_resolution(matched_pandora, True, perfect_pid=perfect_pid, mass_zero=mass_zero, ML_pid=ML_pid)
+ mean_mass, var_mass, distr_mass, mass_true, _, _, E_over_true = calculate_event_mass_resolution(matched_, False, perfect_pid=perfect_pid, mass_zero=mass_zero, ML_pid=ML_pid)
+ (
+ mean_energy_over_true,
+ var_energy_over_true,
+ _,
+ _,
+ ) = get_sigma_gaussian(E_over_true, np.linspace(0, 4, 300))
+ (
+ mean_energy_over_true_pandora,
+ var_energy_over_true_pandora,
+ _,
+ _,
+ ) = get_sigma_gaussian(E_over_true_pandora, np.linspace(0, 4, 300))
+ dic = {}
+ dic["mean_p"] = mean_p
+ dic["variance_om_p"] = variance_om_p
+ dic["variance_om"] = variance_om
+ dic["mean"] = mean
+ dic["energy_resolutions"] = x
+ dic["energy_resolutions_p"] = x_p
+ dic["mean_baseline"] = mean_baseline
+ dic["variance_om_baseline"] = variance_om_baseline
+ dic["distributions_pandora"] = distr_p
+ dic["distributions_model"] = distr
+ dic["mass_over_true_model"] = distr_mass
+ dic["mass_over_true_pandora"] = distr_mass_p
+ dic["mass_model"] = distr_mass * mass_true
+ dic["mass_pandora"] = distr_mass_p * mass_true_p
+ dic["mean_mass_model"] = mean_mass
+ dic["mean_mass_pandora"] = mean_mass_p
+ dic["var_mass_model"] = var_mass
+ dic["var_mass_pandora"] = var_mass_p
+ dic["energy_over_true"] = E_over_true
+ dic["energy_over_true_pandora"] = E_over_true_pandora
+ dic["mean_energy_over_true"] = mean_energy_over_true
+ dic["mean_energy_over_true_pandora"] = mean_energy_over_true_pandora
+ dic["var_energy_over_true"] = var_energy_over_true
+ dic["var_energy_over_true_pandora"] = var_energy_over_true_pandora
+ return dic
+
+def plot_mass_resolution(event_res_dic, PATH_store):
+ fig, ax = plt.subplots(figsize=(7, 7))
+ ax.set_xlabel(r"$m_{pred}/m_{true}$")
+ bins = np.linspace(0, 3, 100)
+ ax.hist(
+ event_res_dic["mass_over_true_model"],
+ bins=bins,
+ histtype="step",
+ label="ML $\mu$={} $\sigma/\mu$={}".format(
+ round((event_res_dic["mean_mass_model"]), 2),
+ round((event_res_dic["var_mass_model"]), 2),
+ ),
+ color="red",
+ density=True,
+ )
+ ax.hist(
+ event_res_dic["mass_over_true_pandora"],
+ bins=bins,
+ histtype="step",
+ label="Pandora $\mu$={} $\sigma/\mu$={}".format(
+ round((event_res_dic["mean_mass_pandora"]), 2),
+ round((event_res_dic["var_mass_pandora"]), 2),
+ ),
+ color="blue",
+ density=True,
+ )
+ ax.grid()
+ ax.legend()
+ #ax.set_xlim([0, 10])
+ fig.tight_layout()
+ print("Saving mass resolution")
+ import os
+ fig.savefig(os.path.join(PATH_store, "mass_resolution.pdf"), bbox_inches="tight")
+ fig, ax = plt.subplots(figsize=(7, 7))
+ ax.set_xlabel(r"$M_{reco}$")
+ bins = np.linspace(0, 3, 100)
+ ax.hist(
+ event_res_dic["mass_model"],
+ bins=bins,
+ histtype="step",
+ label="ML",
+ color="red",
+ density=True,
+ )
+ ax.hist(
+ event_res_dic["mass_pandora"],
+ bins=bins,
+ histtype="step",
+ label="Pandora",
+ color="blue",
+ density=True,
+ )
+ ax.grid()
+ ax.legend()
+ #ax.set_xlim([0, 10])
+ fig.tight_layout()
+ fig.savefig(os.path.join(PATH_store, "mass_reco_absolute.pdf"), bbox_inches="tight")
diff --git a/src/utils/inference/inference_metrics.py b/src/utils/inference/inference_metrics.py
new file mode 100644
index 0000000000000000000000000000000000000000..75b98db0c4f9688e95d6cce32c73cbccc1b1689d
--- /dev/null
+++ b/src/utils/inference/inference_metrics.py
@@ -0,0 +1,339 @@
+import matplotlib
+import torch
+#matplotlib.rc("font", size=25)
+import numpy as np
+from scipy import stats
+from scipy.optimize import curve_fit
+from scipy import asarray as ar, exp
+
+def calculate_eff(sd, log_scale=False, pandora=False):
+ if log_scale:
+ bins = np.exp(np.arange(np.log(0.1), np.log(80), 0.3))
+ else:
+ bins = np.arange(0, 51, 5)
+ eff = []
+ energy_eff = []
+ for i in range(len(bins) - 1):
+ bin_i = bins[i]
+ bin_i1 = bins[i + 1]
+ mask_above = sd.reco_showers_E.values <= bin_i1
+ mask_below = sd.reco_showers_E.values > bin_i
+ mask = mask_below * mask_above
+ number_of_non_reconstructed_showers = np.sum(
+ np.isnan(sd.pred_showers_E.values)[mask]
+ )
+ total_showers = len(sd.true_showers_E.values[mask])
+ if pandora:
+ number_of_non_reconstructed_showers = np.sum(
+ np.isnan(sd.pandora_calibrated_E.values)[mask]
+ )
+ total_showers = len(sd.pandora_calibrated_E.values[mask])
+ if total_showers > 0:
+ eff.append(
+ (total_showers - number_of_non_reconstructed_showers) / total_showers
+ )
+ energy_eff.append((bin_i1 + bin_i) / 2)
+ return eff, energy_eff
+
+def calculate_fakes(sd, matched, log_scale=False, pandora=False):
+ if log_scale:
+ bins_fakes = np.exp(np.arange(np.log(0.1), np.log(80), 0.3))
+ else:
+ bins_fakes = np.linspace(0, 51, 5)
+ fake_rate = []
+ energy_fakes = []
+ fake_percent_energy = []
+ total_true_showers = np.sum(
+ ~np.isnan(sd.true_showers_E.values)
+ ) # the ones where truthHitAssignedEnergies is not nan
+ for i in range(len(bins_fakes) - 1):
+ bin_i = bins_fakes[i]
+ bin_i1 = bins_fakes[i + 1]
+ if pandora:
+ mask_above = sd.pred_showers_E.values <= bin_i1
+ mask_below = sd.pred_showers_E.values > bin_i
+ mask = mask_below * mask_above
+ fakes = np.sum(np.isnan(sd.pid)[mask])
+ non_fakes_mask = ~np.isnan(sd.pid)[mask]
+ fakes_mask = np.isnan(sd.pid)[mask]
+ energy_in_fakes = np.sum(sd.pandora_calibrated_pfo[mask].values[fakes_mask])
+ total_energy_true = np.sum(sd.true_showers_E.values[mask][non_fakes_mask])
+ total_showers = len(sd.pred_showers_E.values[mask])
+ else:
+ mask_above = sd.pred_showers_E.values <= bin_i1
+ mask_below = sd.pred_showers_E.values > bin_i
+ mask = mask_below * mask_above
+ fakes = np.sum(np.isnan(sd.pid)[mask])
+ total_showers = len(sd.pred_showers_E.values[mask])
+ fakes_mask = np.isnan(sd.pid)[mask]
+ energy_in_fakes = np.sum(sd.pred_showers_E[mask].values[fakes_mask])
+ non_fakes_mask = ~np.isnan(sd.pid)[mask]
+ total_energy_true = np.sum(sd.true_showers_E.values[mask][non_fakes_mask])
+ if total_showers > 0:
+ # print(fakes, np.mean(sd.pred_energy_hits_raw[mask]))
+ fake_rate.append(fakes / total_true_showers)
+ energy_fakes.append((bin_i1 + bin_i) / 2)
+ fake_percent_energy.append(energy_in_fakes / total_energy_true)
+ return fake_rate, energy_fakes, fake_percent_energy
+
+
+def calculate_response(matched, pandora, log_scale=False):
+ if log_scale:
+ bins = np.exp(np.arange(np.log(0.1), np.log(80), 0.3))
+ else:
+ bins = np.arange(0, 51, 2)
+
+ bins_plot_histogram = [5, 6, 10, 20]
+ if pandora:
+ bins_per_binned_E = np.arange(0, 3, 0.001)
+ else:
+ bins_per_binned_E = np.arange(0, 3, 0.001)
+ mean = []
+ variance_om = []
+ mean_true_rec = []
+ variance_om_true_rec = []
+ energy_resolutions = []
+ energy_resolutions_reco = []
+ dic_histograms = {}
+ for i in range(len(bins) - 1):
+ bin_i = bins[i]
+ bin_i1 = bins[i + 1]
+ mask_above = (
+ matched["reco_showers_E"] <= bin_i1
+ ) # true_showers_E, reco_showers_E
+ mask_below = matched["reco_showers_E"] > bin_i
+ mask_check = matched["pred_showers_E"] > 0
+ mask = mask_below * mask_above * mask_check
+
+ pred_e = matched.calibrated_E[mask]
+ true_rec = matched.reco_showers_E[mask]
+ true_e = matched.true_showers_E[mask]
+ if pandora:
+ pred_e_corrected = matched.pandora_calibrated_E[mask]
+ else:
+ pred_e_corrected = matched.calibrated_E[mask]
+ if np.sum(mask) > 0: # if the bin is not empty
+ e_over_rec = pred_e / true_rec
+ if i in bins_plot_histogram:
+ dic_histograms[str(i) + "reco"] = e_over_rec
+ dic_histograms[str(i) + "reco_baseline"] = true_rec
+ dic_histograms[str(i) + "pred_corr_e"] = pred_e_corrected
+ dic_histograms[str(i) + "true_baseline"] = true_e
+ dic_histograms[str(i) + "pred_e"] = pred_e
+ mean_predtored, variance_om_true_rec_ = obtain_MPV_and_68(
+ e_over_rec, bins_per_binned_E
+ )
+ # mean_predtored = np.mean(e_over_rec)
+ # variance_om_true_rec_ = np.var(e_over_rec) / mean_predtored
+ mean_true_rec.append(mean_predtored)
+ variance_om_true_rec.append(variance_om_true_rec_)
+ energy_resolutions_reco.append((bin_i1 + bin_i) / 2)
+ # TODO change the pred_showers_E to the pandora calibrated E and the calibrated E for the model pandora_calibrated_E
+ if pandora:
+ bins_per_binned_E = np.arange(0, 3, 0.005)
+ else:
+ bins_per_binned_E = np.arange(0, 3, 0.005)
+ for i in range(len(bins) - 1):
+ bin_i = bins[i]
+ bin_i1 = bins[i + 1]
+ mask_above = matched["true_showers_E"] <= bin_i1
+ mask_below = matched["true_showers_E"] > bin_i
+ mask_check = matched["pred_showers_E"] > 0
+ mask = mask_below * mask_above * mask_check
+ true_e = matched.true_showers_E[mask]
+ true_rec = matched.reco_showers_E[mask]
+ if pandora:
+ pred_e = matched.pandora_calibrated_E[mask]
+ else:
+ pred_e = matched.calibrated_E[mask]
+ if np.sum(mask) > 0: # if the bin is not empty
+ e_over_true = pred_e / true_e
+ e_rec_over_true = true_rec / true_e
+ if i in bins_plot_histogram:
+ dic_histograms[str(i) + "true"] = e_over_true
+ dic_histograms[str(i) + "reco_showers"] = e_rec_over_true
+ mean_predtotrue, var_predtotrue = obtain_MPV_and_68(
+ e_over_true, bins_per_binned_E
+ )
+ # mean_predtotrue, var_predtotrue = get_sigma_gaussian(e_over_true,bins_per_binned_E)
+ # mean_predtotrue = np.mean(e_over_true)
+ # var_predtotrue = np.var(e_over_true) / mean_predtotrue
+ print(
+ "bin i ",
+ bins[i],
+ mean_predtotrue,
+ var_predtotrue,
+ np.mean(e_over_true),
+ np.var(e_over_true) / np.mean(e_over_true),
+ )
+ mean.append(mean_predtotrue)
+ variance_om.append(var_predtotrue)
+ energy_resolutions.append((bin_i1 + bin_i) / 2)
+
+ return (
+ mean,
+ variance_om,
+ mean_true_rec,
+ variance_om_true_rec,
+ energy_resolutions,
+ energy_resolutions_reco,
+ dic_histograms,
+ )
+
+
+def get_sigma_gaussian(e_over_reco, bins_per_binned_E):
+ hist, bin_edges = np.histogram(e_over_reco, bins=bins_per_binned_E, density=True)
+ # Calculating the Gaussian PDF values given Gaussian parameters and random variable X
+ def gaus(X, C, X_mean, sigma):
+ return C * exp(-((X - X_mean) ** 2) / (2 * sigma**2))
+ n = len(hist)
+ x_hist = np.zeros((n), dtype=float)
+ for ii in range(n):
+ x_hist[ii] = (bin_edges[ii + 1] + bin_edges[ii]) / 2
+ y_hist = hist
+ if (torch.tensor(hist) == 0).all():
+ return 0,0
+ mean = sum(x_hist * y_hist) / sum(y_hist)
+ sigma = sum(y_hist * (x_hist - mean) ** 2) / sum(y_hist)
+ # cut 1% of highest vals
+ #e_over_reco_filtered = np.sort(e_over_reco)
+ #e_over_reco_filtered = e_over_reco_filtered[:int(len(e_over_reco_filtered) * 0.99)]
+ #mean = np.mean(e_over_reco_filtered)
+ #sigma = np.std(e_over_reco_filtered)
+ try:
+ param_optimised, param_covariance_matrix = curve_fit(
+ gaus, x_hist, y_hist, p0=[max(y_hist), mean, sigma], maxfev=10000
+ )
+ except:
+ print("Error! Using this")
+ return mean, sigma/mean, 0.001, 0.001 # dummy errors temporarily
+ if param_optimised[2] < 0:
+ param_optimised[2] = sigma
+ if param_optimised[1] < 0:
+ param_optimised[1] = mean # due to some weird fitting errors
+ #assert param_optimised[1] >= 0
+ #assert param_optimised[2] >= 0
+ errors = np.sqrt(np.diag(param_covariance_matrix))
+ # sigma_over_E_error = errors[2] / param_optimised[1]
+ return param_optimised[1], param_optimised[2] / param_optimised[1], errors[1], errors[2] / param_optimised[1]
+
+def obtain_MPV_and_68(data_for_hist, bins_per_binned_E, epsilon=0.0001):
+ hist, bin_edges = np.histogram(data_for_hist, bins=bins_per_binned_E, density=True)
+ ind_max_hist = np.argmax(hist)
+ MPV = (bin_edges[ind_max_hist] + bin_edges[ind_max_hist + 1]) / 2
+ std68, low, high = get_std68(hist, bin_edges, epsilon=epsilon)
+ return MPV, std68 / MPV
+
+
+def get_std68(theHist, bin_edges, percentage=0.683, epsilon=0.01):
+ # theHist, bin_edges = np.histogram(data_for_hist, bins=bins, density=True)
+ wmin = 0.2
+ wmax = 1.0
+
+ weight = 0.0
+ points = []
+ sums = []
+
+ # fill list of bin centers and the integral up to those point
+ for i in range(len(bin_edges) - 1):
+ weight += theHist[i] * (bin_edges[i + 1] - bin_edges[i])
+ points.append([(bin_edges[i + 1] + bin_edges[i]) / 2, weight])
+ sums.append(weight)
+ low = wmin
+ high = wmax
+ width = 100
+ for i in range(len(points)):
+ for j in range(i, len(points)):
+ wy = points[j][1] - points[i][1]
+ if abs(wy - percentage) < epsilon:
+ wx = points[j][0] - points[i][0]
+ if wx < width:
+ low = points[i][0]
+ high = points[j][0]
+ width = wx
+ # ii = i
+ # jj = j
+
+ return 0.5 * (high - low), low, high
+
+
+def calculate_purity_containment(matched, log_scale=False):
+ if log_scale:
+ bins = np.exp(np.arange(np.log(0.1), np.log(80), 0.3))
+ else:
+ bins = np.arange(0, 51, 2)
+ fce_energy = []
+ fce_var_energy = []
+ energy_ms = []
+
+ purity_energy = []
+ purity_var_energy = []
+ fce = matched["e_pred_and_truth"] / matched["reco_showers_E"]
+ purity = matched["e_pred_and_truth"] / matched["pred_showers_E"]
+ for i in range(len(bins) - 1):
+ bin_i = bins[i]
+ bin_i1 = bins[i + 1]
+ mask_above = matched["reco_showers_E"] <= bin_i1
+ mask_below = matched["reco_showers_E"] > bin_i
+ mask_check = matched["pred_showers_E"] > 0
+ mask = mask_below * mask_above * mask_check
+ fce_e = np.mean(fce[mask])
+ fce_var = np.var(fce[mask])
+ purity_e = np.mean(purity[mask])
+ purity_var = np.var(purity[mask])
+ if np.sum(mask) > 0:
+ fce_energy.append(fce_e)
+ fce_var_energy.append(fce_var)
+ energy_ms.append((bin_i1 + bin_i) / 2)
+ purity_energy.append(purity_e)
+ purity_var_energy.append(purity_var)
+ return (
+ fce_energy,
+ fce_var_energy,
+ energy_ms,
+ purity_energy,
+ purity_var_energy,
+ )
+
+
+def obtain_metrics(sd, matched, pandora=False, log_scale=False):
+ eff, energy_eff = calculate_eff(sd, log_scale)
+ fake_rate, energy_fakes = calculate_fakes(sd, matched, log_scale)
+
+ (
+ mean,
+ variance_om,
+ mean_true_rec,
+ variance_om_true_rec,
+ energy_resolutions,
+ energy_resolutions_reco,
+ dic_histograms,
+ ) = calculate_response(matched, pandora, log_scale)
+
+ (
+ fce_energy,
+ fce_var_energy,
+ energy_ms,
+ purity_energy,
+ purity_var_energy,
+ ) = calculate_purity_containment(matched, log_scale)
+
+ dict = {
+ "energy_eff": energy_eff,
+ "eff": eff,
+ "energy_fakes": energy_fakes,
+ "fake_rate": fake_rate,
+ "mean": mean,
+ "variance_om": variance_om,
+ "mean_true_rec": mean_true_rec,
+ "variance_om_true_rec": variance_om_true_rec,
+ "fce_energy": fce_energy,
+ "fce_var_energy": fce_var_energy,
+ "energy_ms": energy_ms,
+ "purity_energy": purity_energy,
+ "purity_var_energy": purity_var_energy,
+ "energy_resolutions": energy_resolutions,
+ "energy_resolutions_reco": energy_resolutions_reco,
+ "dic_histograms": dic_histograms,
+ }
+ return dict
diff --git a/src/utils/inference/inference_metrics_hgcal.py b/src/utils/inference/inference_metrics_hgcal.py
new file mode 100644
index 0000000000000000000000000000000000000000..c738ba9b50695b868588c3569679a9549afb9cd1
--- /dev/null
+++ b/src/utils/inference/inference_metrics_hgcal.py
@@ -0,0 +1,113 @@
+
+def obtain_metrics_hgcal(sd, matched, ms):
+ true_e = matched.truthHitAssignedEnergies
+ bins = np.arange(0, 51, 2)
+ eff = []
+ fake_rate = []
+ energy_eff = []
+ for i in range(len(bins) - 1):
+ bin_i = bins[i]
+ bin_i1 = bins[i + 1]
+ mask_above = sd.truthHitAssignedEnergies.values <= bin_i1
+ mask_below = sd.truthHitAssignedEnergies.values > bin_i
+ mask = mask_below * mask_above
+ number_of_non_reconstructed_showers = np.sum(
+ np.isnan(sd.pred_energy_hits_raw.values)[mask]
+ )
+ total_showers = len(sd.t_rec_energy.values[mask])
+ if total_showers > 0:
+ eff.append(
+ (total_showers - number_of_non_reconstructed_showers) / total_showers
+ )
+ energy_eff.append((bin_i1 + bin_i) / 2)
+ # fake rate per energy with a binning of 1
+ true_e = matched.truthHitAssignedEnergies
+ bins_fakes = np.arange(0, 51, 2)
+ fake_rate = []
+ energy_fakes = []
+ total_true_showers = np.sum(
+ ~np.isnan(sd.truthHitAssignedEnergies.values)
+ ) # the ones where truthHitAssignedEnergies is not nan
+ for i in range(len(bins_fakes) - 1):
+ bin_i = bins_fakes[i]
+ bin_i1 = bins_fakes[i + 1]
+ mask_above = sd.pred_energy_hits_raw.values <= bin_i1
+ mask_below = sd.pred_energy_hits_raw.values > bin_i
+ mask = mask_below * mask_above
+ fakes = np.sum(np.isnan(sd.truthHitAssignedEnergies)[mask])
+ total_showers = len(sd.pred_energy_hits_raw.values[mask])
+
+ if total_showers > 0:
+ # print(fakes, np.mean(sd.pred_energy_hits_raw[mask]))
+ fake_rate.append((fakes) / total_true_showers)
+ energy_fakes.append((bin_i1 + bin_i) / 2)
+
+ # plot 2 for each energy bin calculate the mean and the variance of the distribution
+ mean = []
+ variance_om = []
+ mean_true_rec = []
+ variance_om_true_rec = []
+ energy_resolutions = []
+ for i in range(len(bins) - 1):
+ bin_i = bins[i]
+ bin_i1 = bins[i + 1]
+ mask_above = ms["e_truth"] <= bin_i1
+ mask_below = ms["e_truth"] > bin_i
+ mask = mask_below * mask_above
+ pred_e = matched.pred_energy_hits_raw[mask]
+ true_e = matched.truthHitAssignedEnergies[mask]
+ true_rec = ms.e_truth[mask]
+
+ if np.sum(mask) > 0:
+ mean_predtotrue = np.mean(pred_e / true_e)
+ mean_predtored = np.mean(pred_e / true_rec)
+ var_predtotrue = np.var(pred_e / true_e) / mean_predtotrue
+ variance_om_true_rec_ = np.var(pred_e / true_rec) / mean_predtored
+ mean.append(mean_predtotrue)
+ mean_true_rec.append(mean_predtored)
+ variance_om.append(var_predtotrue)
+ variance_om_true_rec.append(variance_om_true_rec_)
+ energy_resolutions.append((bin_i1 + bin_i) / 2)
+
+ bins = np.arange(0, 51, 2)
+ fce_energy = []
+ fce_var_energy = []
+ energy_ms = []
+
+ purity_energy = []
+ purity_var_energy = []
+ fce = ms["e_pred_and_truth"] / ms["e_truth"]
+ purity = ms["e_pred_and_truth"] / ms["e_pred"]
+ for i in range(len(bins) - 1):
+ bin_i = bins[i]
+ bin_i1 = bins[i + 1]
+ mask_above = ms["e_truth"] <= bin_i1
+ mask_below = ms["e_truth"] > bin_i
+ mask = mask_below * mask_above
+ fce_e = np.mean(fce[mask])
+ fce_var = np.var(fce[mask])
+ purity_e = np.mean(purity[mask])
+ purity_var = np.var(purity[mask])
+ if np.sum(mask) > 0:
+ fce_energy.append(fce_e)
+ fce_var_energy.append(fce_var)
+ energy_ms.append((bin_i1 + bin_i) / 2)
+ purity_energy.append(purity_e)
+ purity_var_energy.append(purity_var)
+
+ dict = {
+ "energy_eff": energy_eff,
+ "eff": eff,
+ "energy_fakes": energy_fakes,
+ "fake_rate": fake_rate,
+ "mean_true_rec": mean,
+ "variance_om_true_rec": variance_om,
+ "fce_energy": fce_energy,
+ "fce_var_energy": fce_var_energy,
+ "energy_ms": energy_ms,
+ "purity_energy": purity_energy,
+ "purity_var_energy": purity_var_energy,
+ "energy_resolutions": energy_resolutions,
+ }
+ return dict
+
diff --git a/src/utils/inference/pandas_helpers.py b/src/utils/inference/pandas_helpers.py
new file mode 100644
index 0000000000000000000000000000000000000000..a31a95cee4f9a3f1bdc23c7bd17207c9ddaa6a88
--- /dev/null
+++ b/src/utils/inference/pandas_helpers.py
@@ -0,0 +1,54 @@
+import gzip
+import pickle
+import mplhep as hep
+
+hep.style.use("CMS")
+import matplotlib
+
+matplotlib.rc("font", size=25)
+import numpy as np
+import pandas as pd
+
+
+def open_hgcal(path_hgcal, neutrals_only):
+ with gzip.open(
+ path_hgcal,
+ "rb",
+ ) as f:
+ data = pickle.load(f)
+ sd = data["showers_dataframe"]
+ if neutrals_only:
+ sd = pd.concat(
+ [
+ data[data["pid"] == 130],
+ data[data["pid"] == 2112],
+ data[data["pid"] == 22],
+ ]
+ )
+ else:
+ sd = data
+ matched = sd.dropna()
+ ms = data["matched_showers"]
+
+ return sd, ms
+
+
+def open_mlpf_dataframe(path_mlpf, neutrals_only=False):
+ data = pd.read_pickle(path_mlpf)
+ if neutrals_only:
+ sd = pd.concat(
+ [
+ data[data["pid"] == 130],
+ data[data["pid"] == 2112],
+ data[data["pid"] == 211],
+ ]
+ )
+ else:
+ sd = data
+ pid_conversion_dict = {11: 0, -11: 0, 211: 1, -211: 1, 130: 2, -130: 2, 2112: 2, -2112: 2, 22: 3}
+ mask = (~np.isnan(sd["pred_showers_E"])) * (~np.isnan(sd["reco_showers_E"]))
+ sd["pid_4_class_true"] = sd["pid"].map(pid_conversion_dict)
+ if "pred_pid_matched" in sd.columns:
+ sd.loc[sd["pred_pid_matched"] < -1, "pred_pid_matched"] = np.nan
+ matched = sd[mask]
+ return sd, matched
diff --git a/src/utils/inference/per_particle_metrics.py b/src/utils/inference/per_particle_metrics.py
new file mode 100644
index 0000000000000000000000000000000000000000..04e9ee3aae2a70fcb699e54b32c2cc559ba2e334
--- /dev/null
+++ b/src/utils/inference/per_particle_metrics.py
@@ -0,0 +1,2475 @@
+import numpy as np
+import matplotlib
+import os
+
+from src.layers.obtain_statistics import stacked_hist_plot
+from mpl_toolkits.axes_grid1.inset_locator import inset_axes
+
+matplotlib.rc("font", size=35)
+import pandas as pd
+import matplotlib.pyplot as plt
+import multiprocessing
+from src.utils.inference.inference_metrics import obtain_MPV_and_68
+import concurrent.futures
+import time
+from src.utils.inference.inference_metrics import calculate_eff, calculate_fakes
+import torch
+import plotly
+import plotly.graph_objs as go
+import plotly.express as px
+from pathlib import Path
+import seaborn as sns
+
+# TODO paralellize this script or make the data larger so that the binning needed is larger
+from scipy.optimize import curve_fit
+from src.utils.inference.inference_metrics import get_sigma_gaussian
+from torch_scatter import scatter_sum, scatter_mean
+from src.utils.inference.event_metrics import (
+ get_response_for_event_energy,
+ plot_mass_resolution,
+)
+
+
+def get_mask_id(id, pids_pandora):
+ mask_id = np.full((len(pids_pandora)), False, dtype=bool)
+ for i in id:
+ mask_i = pids_pandora == i
+ mask_id = mask_id + mask_i
+ mask_id = mask_id.astype(bool)
+ return mask_id
+
+
+def get_response_for_id_i(id, matched_pandora, matched_, tracks=False, perfect_pid=False, mass_zero=False, ML_pid=False):
+ pids_pandora = np.abs(matched_pandora["pid"].values)
+ mask_id = get_mask_id(id, pids_pandora)
+ df_id_pandora = matched_pandora[mask_id]
+ pids = np.abs(matched_["pid"].values)
+ mask_id = get_mask_id(id, pids)
+ df_id = matched_[mask_id]
+ (
+ mean_p,
+ variance_om_p,
+ mean_true_rec_p,
+ variance_om_true_rec_p,
+ energy_resolutions_p,
+ energy_resolutions_reco_p,
+ mean_baseline,
+ variance_om_baseline,
+ e_over_e_distr_pandora,
+ mean_errors_p,
+ variance_errors_p,
+ mean_pxyz_pandora, variance_om_pxyz_pandora, masses_pandora, pxyz_true_p, pxyz_pred_p, sigma_phi_pandora, sigma_theta_pandora, distr_phi_pandora, distr_theta_pandora
+ ) = calculate_response(df_id_pandora, True, False, tracks=tracks, perfect_pid=perfect_pid, mass_zero=mass_zero, ML_pid=ML_pid)
+ # Pandora: TODO: do some sort of PID for Pandora
+ (
+ mean,
+ variance_om,
+ mean_true_rec,
+ variance_om_true_rec,
+ energy_resolutions,
+ energy_resolutions_reco,
+ mean_baseline,
+ variance_om_baseline,
+ e_over_e_distr_model,
+ mean_errors,
+ variance_errors,
+ mean_pxyz, variance_om_pxyz, masses, pxyz_true, pxyz_pred, sigma_phi, sigma_theta, distr_phi, distr_theta
+ ) = calculate_response(df_id, False, False, tracks=tracks, perfect_pid=perfect_pid, mass_zero=mass_zero, ML_pid=ML_pid)
+ print(variance_om_p)
+ print(variance_om)
+ print("recoooo")
+ print(variance_om_true_rec_p)
+ print(variance_om_true_rec)
+ dic = {}
+ dic["mean_p"] = mean_p
+ dic["variance_om_p"] = variance_om_p
+ dic["variance_om"] = variance_om
+ dic["mean"] = mean
+ dic["mean_errors"] = mean_errors
+ dic["variance_errors"] = variance_errors
+ dic["variance_errors_p"] = variance_errors_p
+ dic["mean_errors_p"] = mean_errors_p
+ dic["energy_resolutions"] = energy_resolutions
+ dic["energy_resolutions_p"] = energy_resolutions_p
+ dic["mean_p_reco"] = mean_true_rec_p
+ dic["variance_om_p_reco"] = variance_om_true_rec_p
+ dic["energy_resolutions_p_reco"] = energy_resolutions_reco_p
+ dic["mean_reco"] = mean_true_rec
+ dic["variance_om_reco"] = variance_om_true_rec
+ dic["energy_resolutions_reco"] = energy_resolutions_reco
+ dic["mean_baseline"] = mean_baseline
+ dic["variance_om_baseline"] = variance_om_baseline
+ dic["distributions_pandora"] = e_over_e_distr_pandora
+ dic["distributions_model"] = e_over_e_distr_model
+ dic["mean_pxyz"] = mean_pxyz
+ dic["variance_om_pxyz"] = variance_om_pxyz
+ dic["mean_pxyz_pandora"] = mean_pxyz_pandora
+ dic["variance_om_pxyz_pandora"] = variance_om_pxyz_pandora
+ dic["mass_histogram"] = masses
+ dic["mass_histogram_pandora"] = masses_pandora
+ dic["pxyz_true_p"] = pxyz_true_p
+ dic["pxyz_pred_p"] = pxyz_pred_p
+ dic["pxyz_true"] = pxyz_true
+ dic["pxyz_pred"] = pxyz_pred
+ dic["sigma_phi_pandora"] = sigma_phi_pandora
+ dic["sigma_theta_pandora"] = sigma_theta_pandora
+ dic["sigma_phi"] = sigma_phi
+ dic["sigma_theta"] = sigma_theta
+ dic["distr_phi"] = distr_phi
+ dic["distr_theta"] = distr_theta
+ dic["distr_phi_pandora"] = distr_phi_pandora
+ dic["distr_theta_pandora"] = distr_theta_pandora
+ return dic
+
+def plot_X(
+ title,
+ photons_dic,
+ electrons_dic,
+ y_axis,
+ PATH_store,
+ label1,
+ label2,
+ reco,
+ plot_label1=False,
+ plot_label2=False,
+):
+ colors_list = ["#fde0dd", "#c994c7", "#dd1c77"] # color list poster neurips
+ colors_list = ["#FF0000", "#FF0000", "#0000FF"]
+ fig = plt.figure()
+ j = 0
+ plt.xlabel("Energy [GeV]", fontsize=30)
+ # ax[row_i, j].set_xscale("log")
+ plt.title(title, fontsize=30)
+ plt.grid()
+ if plot_label1:
+ plt.scatter(
+ photons_dic["energy_resolutions" + reco],
+ photons_dic[y_axis + reco],
+ facecolors=colors_list[1],
+ edgecolors=colors_list[1],
+ label="ML " + label1,
+ marker="x",
+ s=50,
+ )
+ plt.scatter(
+ photons_dic["energy_resolutions_p" + reco],
+ photons_dic[y_axis + "_p" + reco],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ label="Pandora " + label1,
+ marker="x",
+ s=50,
+ )
+ if plot_label2:
+ plt.scatter(
+ electrons_dic["energy_resolutions" + reco],
+ electrons_dic[y_axis + reco],
+ facecolors=colors_list[1],
+ edgecolors=colors_list[1],
+ marker="o",
+ label="ML " + label2,
+ s=50,
+ )
+ plt.scatter(
+ electrons_dic["energy_resolutions_p" + reco],
+ electrons_dic[y_axis + "_p" + reco],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ marker="o",
+ label="Pandora " + label2,
+ s=50,
+ )
+ if title == "Electromagnetic Resolution" or title == "Hadronic Resolution":
+ if reco == "":
+ if plot_label2:
+ plt.scatter(
+ electrons_dic["energy_resolutions"],
+ electrons_dic["variance_om_baseline"],
+ facecolors="black",
+ edgecolors="black",
+ marker=".",
+ label="Baseline " + label2,
+ s=50,
+ )
+ if plot_label1:
+ plt.scatter(
+ photons_dic["energy_resolutions"],
+ photons_dic["variance_om_baseline"],
+ facecolors="black",
+ edgecolors="black",
+ marker=".",
+ label="Baseline " + label1,
+ s=50,
+ )
+ dic0_fit = get_fit(
+ photons_dic["energy_resolutions"], photons_dic["variance_om_baseline"]
+ )
+ dic01_fit = get_fit(
+ electrons_dic["energy_resolutions"],
+ electrons_dic["variance_om_baseline"],
+ )
+ dic1_fit = get_fit(
+ photons_dic["energy_resolutions" + reco], photons_dic[y_axis + reco]
+ )
+ dic1_fit_pandora = get_fit(
+ photons_dic["energy_resolutions_p" + reco],
+ photons_dic[y_axis + "_p" + reco],
+ )
+ dic2_fit = get_fit(
+ electrons_dic["energy_resolutions" + reco], electrons_dic[y_axis + reco]
+ )
+ dic2_fit_pandora = get_fit(
+ electrons_dic["energy_resolutions_p" + reco],
+ electrons_dic[y_axis + "_p" + reco],
+ )
+ if reco == "":
+ fits_l1 = [
+ dic0_fit,
+ dic1_fit,
+ dic1_fit_pandora,
+ ]
+ fits_l2 = [
+ dic01_fit,
+ dic2_fit,
+ dic2_fit_pandora,
+ ]
+ color_list_fits_l1 = [
+ "black",
+ colors_list[1],
+ colors_list[2],
+ ]
+ color_list_fits_l2 = [
+ "black",
+ colors_list[1],
+ colors_list[2],
+ ]
+ line_type_fits_l1 = ["-", "-", "-."]
+ line_type_fits_l2 = ["-", "-", "-."]
+ else:
+ fits = [dic1_fit, dic1_fit_pandora, dic2_fit, dic2_fit_pandora]
+ fits_l1 = dic1_fit
+ fits_l2 = dic2_fit
+ line_type_fits_l1 = ["-", "-", "-."]
+ line_type_fits_l2 = ["-", "-", "-."]
+ color_list_fits = [
+ colors_list[1],
+ colors_list[2],
+ colors_list[1],
+ colors_list[2],
+ ]
+ line_type_fits = ["-", "-", "-.", "-."]
+ #if plot_label1:
+ # plot_fit(fits_l1, line_type_fits_l1, color_list_fits_l1)
+ #if plot_label2:
+ # plot_fit(fits_l2, line_type_fits_l2, color_list_fits_l2)
+ if reco == "_reco":
+ plt.yscale("log")
+ else:
+ if title == "Electromagnetic Resolution":
+ ymax = 0.3
+ else:
+ ymax = 0.5
+ plt.ylim([0, ymax])
+ plt.xlim([0, 55])
+ ylabel = r"$\frac{\sigma_{E_{reco}}}{\langle E_{reco} \rangle}$"
+ plt.ylabel(ylabel, fontsize=30)
+ else:
+ ylabel = r"$\langle E_{reco} \rangle / E_{true}$"
+ plt.ylabel(ylabel, fontsize=30)
+ # loc="upper right",
+ plt.tick_params(axis="both", which="major", labelsize=40)
+ if title == "Electromagnetic Response" or title == "Hadronic Response":
+ plt.ylim([0.6, 1.4])
+ plt.legend(fontsize=30, bbox_to_anchor=(1.05, 1), loc="upper left")
+ if plot_label1:
+ label = label1
+ if plot_label2:
+ label = label2
+ path = os.path.join(PATH_store, title + reco + label + ".pdf")
+ fig.savefig(path, bbox_inches="tight")
+
+
+def plot_fit(fits, line_type_fits, color_list_fits, ax=None):
+ fitlabel1 = r"$\frac{\sigma_E}{\langle E \rangle} = \sqrt{\frac{a^2}{E} + \frac{b^2}{E^2} + c^2}$"
+ # fitlabel1 = r"$\frac{\sigma_E}{\langle E \rangle} = \sqrt{\frac{a^2}{E} + c^2}$"
+ fitlabel2 = ""
+ for id_fix, fit in enumerate(fits):
+ if id_fix == 0:
+ fitlabel = fitlabel1
+ else:
+ fitlabel = fitlabel2
+ fit_a = f"{np.abs(fit[1][0]):.2f}"
+ fit_b = f"{np.abs(fit[1][1]):.2f}"
+ fit_c = f"{np.abs(fit[1][2]):.2f}"
+ if ax is None:
+ a = plt
+ else:
+ a = ax
+ a.plot(
+ fit[0],
+ resolution(fit[0], *fit[1]),
+ line_type_fits[id_fix],
+ c=color_list_fits[id_fix],
+ #'''label=fitlabel
+ #+ "\nFit: a = "
+ #+ fit_a
+ #+ "; b = "
+ ##+ fit_b
+ #+ "; c = "
+ #+ fit_c,'''
+ )
+
+
+def get_fit(energies, errors):
+ energies = energies
+ errors = errors
+ popt, pcov = curve_fit(resolution, energies, errors)
+ xdata = np.arange(0, 51, 0.1)
+ return [xdata, popt, np.sqrt(np.diag(pcov))]
+
+
+def resolution(E, a, b, c):
+ return (a**2 / E + c**2 + b**2 / E**2) ** 0.5
+ # return (a**2 / E + c**2) ** 0.5
+
+
+def plot_per_energy_resolution2(
+ sd_pandora, sd_hgb, matched_pandora, matched_, PATH_store, tracks=False
+):
+ mask = matched_["calibration_factor"] > 0
+ matched_ = matched_[mask]
+ if tracks:
+ tracks_label = "tracks"
+ else:
+ tracks_label = ""
+ plot_response = True
+ if plot_response:
+ event_numbers = [0, 1, 2, 3]
+ for event_number in event_numbers:
+ filename = os.path.join(PATH_store, f"event_{event_number}_pandora.html")
+ # plot_event(matched_, pandora=False, output_dir=filename)
+ # plot_event(
+ # matched_pandora[matched_pandora.number_batch == event_number],
+ # pandora=True,
+ # output_dir=filename,
+ # )
+ list_plots = [""] # "", "_reco"
+ photons_dic = get_response_for_id_i(
+ [22], matched_pandora, matched_, tracks=tracks
+ )
+ hadrons_dic2 = get_response_for_id_i(
+ [211], matched_pandora, matched_, tracks=tracks
+ )
+ # neutrons = get_response_for_id_i(
+ # [2112], matched_pandora, matched_, tracks=tracks
+ # )
+ # protons = get_response_for_id_i(
+ # [2212], matched_pandora, matched_, tracks=tracks
+ # )
+ #event_res_dic = get_response_for_event_energy(matched_pandora, matched_)
+ plot_per_particle = True
+ if plot_per_particle:
+ for el in list_plots:
+ plot_one_label(
+ "Electromagnetic Resolution",
+ photons_dic,
+ "variance_om",
+ PATH_store,
+ "Photons",
+ el,
+ tracks=tracks_label,
+ )
+ plot_one_label(
+ "Electromagnetic Response",
+ photons_dic,
+ "mean",
+ PATH_store,
+ "Photons",
+ el,
+ tracks=tracks_label,
+ )
+ plot_one_label(
+ "Hadronic Resolution",
+ hadrons_dic2,
+ "variance_om",
+ PATH_store,
+ "Pions",
+ el,
+ tracks=tracks_label,
+ )
+ plot_one_label(
+ "Hadronic Response",
+ hadrons_dic2,
+ "mean",
+ PATH_store,
+ "Pions",
+ el,
+ tracks=tracks_label,
+ )
+
+def plot_hist_distr(values, label, ax, color, bins=np.linspace(0, 3, 50)):
+ ax.hist(values, bins=bins, histtype="step", label=label, color=color, density=True)
+ ax.legend()
+ ax.grid(1)
+
+def plot_pxyz_resolution(x, resolutions_pxyz_pandora, resolutions_pxyz_model, axs, key):
+ for i in [0, 1, 2, 3]:
+ axs[i].scatter(
+ x,
+ resolutions_pxyz_model[:, i],
+ facecolors="red",
+ edgecolors="red",
+ label=key,
+ marker="x",
+ s=50,
+ )
+ if resolutions_pxyz_pandora.shape[1] < i:
+ axs[i].scatter(
+ x,
+ resolutions_pxyz_pandora[:, i],
+ facecolors="blue",
+ edgecolors="blue",
+
+ label="Pandora",
+ marker="x",
+ s=50,
+ )
+ axs[i].grid(1)
+ axs[i].legend()
+
+def plot_mass_hist(masses_lst, masses_pandora_lst, axs, bars=[], energy_ranges=[[0, 5], [5, 15], [15, 35], [35, 50]]):
+ # bars: list of energies at which to plot a vertical line
+ return
+ masses = masses_lst[0]
+ masses_pandora = masses_pandora_lst[0]
+ is_trk_in_clust_pandora = [x.values for x in masses_pandora_lst[1]]
+ for i in range(4):
+ # percentage of nans
+ perc_nan_model = int(torch.sum(torch.isnan(masses[i])) / len(masses[i]) * 100)
+ perc_nan_pandora = int(torch.sum(torch.isnan(masses_pandora[i])) / len(masses_pandora[i]) * 100)
+ #bins = np.linspace(-1, 1, 50)
+ bins = 100
+ axs[i].hist(masses[i], bins=bins, histtype="step", label="ML (nan {} %)".format(perc_nan_model), color="red", density=True)
+ filt = is_trk_in_clust_pandora[i]
+ #axs[i].hist(masses_pandora[i][filt==1], bins=bins, histtype="step", label="Pandora (nan {}%), track in cluster".format(perc_nan_pandora), color="blue", density=True)
+ #axs[i].hist(masses_pandora[i][filt==0], bins=bins, histtype="step", label="Pandora (nan {}%), track not in cluster".format(perc_nan_pandora), color="green", density=True)
+ axs[i].hist(masses_pandora[i], bins=bins, histtype="step", label="Pandora (nan {}%)".format(perc_nan_pandora), color="blue", density=True)
+ #max_mass = max(masses_pandora[i].max(), masses[i].max())
+ axs[i].set_title(f"[{energy_ranges[i][0]}, {energy_ranges[i][1]}] GeV")
+ axs[i].legend()
+ axs[i].grid(1)
+ axs[i].set_yscale("log")
+ mean_mass = masses[i][torch.isnan(masses[i])].mean()
+ mean_mass_pandora = masses_pandora[i][torch.isnan(masses_pandora[i])].mean()
+ #for bar in bars:
+ # if bar * 0.95 < mean_mass:
+ # axs[i].axvline(bar, color="black", linestyle="--")
+
+def plot_confusion_matrix(sd_hgb1, save_dir):
+ pid_conversion_dict = {11: 0, -11: 0, 211: 1, -211: 1, 130: 2, -130: 2, 2112: 2, -2112: 2, 22: 3}
+ #sd_hgb1["pid_4_class_true"] = sd_hgb1["pid"].map(pid_conversion_dict)
+ # sd_hgb1["pred_pid_matched"][sd_hgb1["pred_pid_matched"] < -1] = np.nan
+ #sd_hgb1.loc[sd_hgb1["pred_pid_matched"] == -1, "pred_pid_matched"] = np.nan
+ class_true = sd_hgb1["pid_4_class_true"].values
+ class_pred = sd_hgb1["pred_pid_matched"].values
+ is_trk = sd_hgb1.is_track_in_cluster.values
+ no_nan_filter = ~np.isnan(class_pred) & ~np.isnan(class_true)
+ from sklearn.metrics import confusion_matrix
+ cm = confusion_matrix(class_true[no_nan_filter], class_pred[no_nan_filter])
+ # plot cm
+ class_names = ["e", "CH", "NH", "gamma"]
+
+ import seaborn as sns
+ plt.figure()
+ sns.heatmap(cm, annot=True, fmt="d", xticklabels=class_names, yticklabels=class_names)
+ # axes
+ plt.xlabel("Predicted")
+ plt.ylabel("True")
+ plt.title("Confusion Matrix")
+ plt.savefig(os.path.join(save_dir, "confusion_matrix_PID.pdf"), bbox_inches="tight")
+ plt.clf()
+ f = no_nan_filter & (is_trk == 1)
+ f1 = no_nan_filter & (is_trk == 0)
+ cm = confusion_matrix(class_true[f], class_pred[f])
+ cm1 = confusion_matrix(class_true[f1], class_pred[f1])
+ # plot cm
+ class_names = ["e", "CH", "NH", "gamma"]
+ import seaborn as sns
+ plt.figure()
+ sns.heatmap(cm, annot=True, fmt="d", xticklabels=class_names, yticklabels=class_names)
+ # axes
+ plt.xlabel("Predicted")
+ plt.ylabel("True")
+ plt.title("Confusion Matrix (track in cluster)")
+ plt.savefig(os.path.join(save_dir, "confusion_matrix_PID_track_in_cluster.pdf"), bbox_inches="tight")
+ plt.clf()
+ plt.figure()
+ sns.heatmap(cm1, annot=True, fmt="d", xticklabels=class_names, yticklabels=class_names)
+ # axes
+ plt.xlabel("Predicted")
+ plt.ylabel("True")
+ plt.title("Confusion Matrix (no track in cluster)")
+ plt.savefig(os.path.join(save_dir, "confusion_matrix_PID_NO_track_in_cluster.pdf"), bbox_inches="tight")
+ plt.clf()
+
+
+def plot_per_energy_resolution2_multiple(
+ matched_pandora, matched_all, PATH_store, tracks=False, perfect_pid=False, mass_zero=False, ML_pid=False
+):
+ # matched_all: label -> matched df
+ figs, axs = {}, {} # resolution
+ figs_r, axs_r = {}, {}
+ figs_distr, axs_distr = {}, {} # response
+ figs_distr_HE, axs_distr_HE = {}, {} # response high energy
+ figs_theta_res, axs_theta_res = {}, {} # theta resolution
+ figs_resolution_pxyz, axs_resolution_pxyz = {}, {} # px, py, pz resolution
+ figs_response_pxyz, axs_response_pxyz = {}, {} # px, py, pz response
+ figs_mass_hist, axs_mass_hist = {}, {}
+ # distribution at some energy slice for each particle (the little histogram plots)
+ # colors = {"DNN": "green", "GNN+DNN": "purple", "DNN w/o FT": "blue"}
+ colors = {
+ "ML": "red",
+ }
+ plot_pandora, plot_baseline = True, True
+ for pid in [22, 11, 130, 211, 2112, 2212]:
+ figs_theta_res[pid], axs_theta_res[pid] = plt.subplots(1, 1, figsize=(7, 7))
+ figs[pid], axs[pid] = plt.subplots(2, 1, figsize=(15, 10), sharex=False)
+ figs_r[pid], axs_r[pid] = plt.subplots(2, 1, figsize=(15, 10), sharex=False)
+ figs_distr[pid], axs_distr[pid] = plt.subplots(1, 1, figsize=(7, 7))
+ figs_distr_HE[pid], axs_distr_HE[pid] = plt.subplots(1, 1, figsize=(7, 7))
+ figs_resolution_pxyz[pid], axs_resolution_pxyz[pid] = plt.subplots(4, 1, figsize=(8, 15), sharex=True)
+ figs_response_pxyz[pid], axs_response_pxyz[pid] = plt.subplots(4, 1, figsize=(8, 15), sharex=True)
+ figs_mass_hist[pid], axs_mass_hist[pid] = plt.subplots(4, 1, figsize=(8, 20), sharex=False)
+ axs_resolution_pxyz[pid][0].set_title(f"{pid} px resolution")
+ axs_resolution_pxyz[pid][1].set_title(f"{pid} py resolution")
+ axs_resolution_pxyz[pid][2].set_title(f"{pid} pz resolution")
+ axs_resolution_pxyz[pid][3].set_title("p norm resolution [GeV]")
+ axs_resolution_pxyz[pid][2].set_xlabel("Energy [GeV]")
+ axs_response_pxyz[pid][0].set_title(f"{pid} px response")
+ axs_response_pxyz[pid][1].set_title(f"{pid} py response")
+ axs_response_pxyz[pid][2].set_title(f"{pid} pz response")
+ axs_response_pxyz[pid][3].set_title("p norm response [GeV]")
+ axs_response_pxyz[pid][2].set_xlabel("Energy [GeV]")
+ axs_mass_hist[pid][-1].set_xlabel("Mass [GeV]")
+ event_res_dic = {} # Event energy resolution
+ event_res_dic_p = {} # Event p resolution
+ event_res_dic_mass = {} # Event mass resolution
+ fig_event_res, ax_event_res = plt.subplots(1, 1, figsize=(7, 7))
+ fig_event_res_hadronic, ax_event_res_hadronic = plt.subplots(1, 1, figsize=(10, 6))
+ fig_event_res_electromagnetic, ax_event_res_electromagnetic = plt.subplots(1, 1, figsize=(10, 6))
+ fig_mass_res, ax_mass_res = plt.subplots(1, 1, figsize=(15, 10))
+ for key in matched_all:
+ matched_ = matched_all[key]
+ ##mask = matched_["calibration_factor"] > 0
+ #matched_ = matched_[mask]
+ if tracks:
+ tracks_label = "tracks"
+ else:
+ tracks_label = ""
+ plot_response = True
+ if plot_response:
+ list_plots = [""] # "","_reco"
+ event_res_dic[key] = get_response_for_event_energy(
+ matched_pandora, matched_, perfect_pid=perfect_pid, mass_zero=mass_zero, ML_pid=ML_pid
+ )
+ photons_dic = get_response_for_id_i(
+ [22], matched_pandora, matched_, tracks=tracks, perfect_pid=perfect_pid, mass_zero=mass_zero,
+ ML_pid=ML_pid
+ )
+ electrons_dic = get_response_for_id_i(
+ [11], matched_pandora, matched_, tracks=tracks, perfect_pid=perfect_pid , mass_zero=mass_zero, ML_pid=ML_pid
+ )
+ hadrons_dic = get_response_for_id_i(
+ [130], matched_pandora, matched_, tracks=tracks, perfect_pid=perfect_pid, mass_zero=mass_zero, ML_pid=ML_pid
+ )
+ hadrons_dic2 = get_response_for_id_i(
+ [211], matched_pandora, matched_, tracks=tracks, perfect_pid=perfect_pid, mass_zero=mass_zero, ML_pid=ML_pid
+ )
+ neutrons = get_response_for_id_i(
+ [2112], matched_pandora, matched_, tracks=tracks, perfect_pid=perfect_pid, mass_zero=mass_zero, ML_pid=ML_pid
+ )
+ protons = get_response_for_id_i(
+ [2212], matched_pandora, matched_, tracks=tracks, perfect_pid=perfect_pid, mass_zero=mass_zero, ML_pid=ML_pid
+ )
+ # For neutrons
+ if True:
+ if len(neutrons["distributions_pandora"]) :
+ plot_hist_distr(neutrons["distributions_pandora"][0], "Pandora", axs_distr[2112], "blue")
+ if len(hadrons_dic["distributions_pandora"]):
+ # Same for 130
+ plot_hist_distr(hadrons_dic["distributions_pandora"][0], "Pandora", axs_distr[130], "blue")
+ mean_e_over_true_pandora, sigma_e_over_true_pandora = round(event_res_dic["ML"]["mean_energy_over_true_pandora"], 2), round(event_res_dic["ML"]["var_energy_over_true_pandora"], 2)
+ mean_e_over_true, sigma_e_over_true = round(event_res_dic["ML"]["mean_energy_over_true"], 2), round(event_res_dic["ML"]["var_energy_over_true"], 2)
+ ax_event_res.hist(event_res_dic["ML"]["energy_over_true_pandora"], bins=np.linspace(0.5, 1.5, 100), histtype="step",
+ label=r"Pandora $\mu$={} $\sigma / \mu$={}".format(mean_e_over_true_pandora, sigma_e_over_true_pandora), color="blue", density=True)
+ ax_event_res.hist(event_res_dic["ML"]["energy_over_true"], bins=np.linspace(0.5, 1.5, 100), histtype="step",
+ label=r"ML $\mu$={} $\sigma / \mu$={}".format(mean_e_over_true, sigma_e_over_true), color="red", density=True)
+ ax_event_res.grid(1)
+ ax_event_res.set_xlabel(r"$E_{vis,pred} / E_{vis,true}$")
+ ax_event_res.legend()
+ fig_event_res.savefig(
+ os.path.join(PATH_store, "total_visible_energy_resolution.pdf"), bbox_inches="tight"
+ )
+ # for pions 211
+ if len(hadrons_dic2["distributions_pandora"]):
+ plot_hist_distr(hadrons_dic2["distributions_pandora"][0], "Pandora", axs_distr[211], "blue")
+ # same for 11
+ if len(electrons_dic["distributions_pandora"]):
+ plot_hist_distr(electrons_dic["distributions_pandora"][0], "Pandora", axs_distr[11], "blue")
+ # same for 2212
+ if len(protons["distributions_pandora"]) > 0:
+ plot_hist_distr(protons["distributions_pandora"][0], "Pandora", axs_distr[2212], "blue", bins=np.linspace(0.5, 1.1, 200))
+ plot_hist_distr(protons["distributions_pandora"][-1], "Pandora", axs_distr_HE[2212], "blue",
+ bins=np.linspace(0.9, 1.1, 100))
+ if len(photons_dic["distributions_pandora"]) > 0:
+ bins=np.linspace(0, 5, 100)
+ plot_hist_distr(photons_dic["distributions_pandora"][0], "Pandora", axs_distr[22], "blue")
+ distances_p = np.linalg.norm(photons_dic["pxyz_true_p"][0] - photons_dic["pxyz_pred_p"][0], axis=1)
+ distances = np.linalg.norm(photons_dic["pxyz_true"][0] - photons_dic["pxyz_pred"][0], axis=1)
+ fig, ax = plt.subplots()
+ ax.hist(distances_p, bins=bins, histtype="step", label="Pandora", color="blue", density=True)
+ ax.hist(distances, bins=bins, histtype="step", label="ML", color="red", density=True)
+ ax.legend()
+ ax.grid(1)
+ ax.set_yscale("log")
+ ax.set_title("Photons p distance from truth [0,5] GeV")
+ fig.tight_layout()
+ fig.savefig(PATH_store + "/Photons_p_distance.pdf", bbox_inches="tight")
+ if len(neutrons["distributions_model"]) > 0:
+ plot_hist_distr(neutrons["distributions_model"][0], key, axs_distr[2112], colors[key])
+ axs_distr[2112].set_title("Neutrons [0, 5] GeV")
+ axs_distr[2112].set_xlabel("$E_{pred.} / E_{true}$")
+ # y label density
+ axs_distr[2112].set_ylabel("Density")
+ axs_distr[2112].legend()
+ if len(protons["distributions_model"]) > 0:
+ plot_hist_distr(protons["distributions_model"][0], key, axs_distr[2212], colors[key], bins=np.linspace(0.5, 1.1, 200))
+ axs_distr[2212].set_title("Protons [0, 5] GeV")
+ axs_distr[2212].set_xlabel("$E_{pred.} / E_{true}$")
+ axs_distr[2212].set_ylabel("Density")
+ axs_distr[2212].legend()
+ if len(hadrons_dic["distributions_model"]) > 0:
+ plot_hist_distr(hadrons_dic["distributions_model"][0], key, axs_distr[130], colors[key])
+ axs_distr[130].set_ylabel("Density")
+ axs_distr[130].set_title("$K_L$ [0, 5] GeV")
+ axs_distr[130].set_xlabel("$E_{pred.} / E_{true}$")
+ axs_distr[130].legend()
+ if len(hadrons_dic2["distributions_model"]) > 0:
+ plot_hist_distr(hadrons_dic2["distributions_model"][0], key, axs_distr[211], colors[key])
+ axs_distr[211].set_ylabel("Density")
+ axs_distr[211].set_title("Pions [0, 5] GeV")
+ axs_distr[211].set_xlabel("$E_{pred.} / E_{true}$")
+ axs_distr[211].legend()
+ axs_distr[211].set_yscale("log")
+ plot_hist_distr(hadrons_dic2["distributions_model"][0], key, axs_distr[11], colors[key])
+ axs_distr[11].set_ylabel("Density")
+ axs_distr[11].set_title("Electrons [0, 5] GeV")
+ axs_distr[11].set_xlabel("$E_{pred.} / E_{true}$")
+ axs_distr[11].legend()
+ axs_distr[11].set_yscale("log")
+ if len(photons_dic["distributions_model"]) > 0:
+ plot_hist_distr(photons_dic["distributions_model"][0], key, axs_distr[22], colors[key])
+ axs_distr[22].set_title("Photons [0, 5] GeV")
+ axs_distr[22].set_xlabel("$E_{pred.} / E_{true}$")
+ axs_distr[22].set_ylabel("Density")
+ axs_distr[22].legend()
+ if len(neutrons["distributions_model"]) > 0:
+ plot_hist_distr(neutrons["distributions_model"][-1], key, axs_distr_HE[2212], colors[key], bins=np.linspace(0.9, 1.1, 100))
+ axs_distr_HE[2112].set_title("Protons [35, 50] GeV")
+ axs_distr_HE[2112].set_xlabel("$E_{pred.} / E_{true}$")
+ axs_distr_HE[2112].set_ylabel("Density")
+ axs_distr_HE[2112].legend()
+ '''plot_histograms(
+ "Event Energy Resolution",
+ event_res_dic[key],
+ fig_event_res,
+ ax_event_res,
+ plot_pandora,
+ prefix=key + " ",
+ color=colors[key],
+ )'''
+ plot_mass_resolution(event_res_dic[key], PATH_store)
+ neutral_masses = [0.0, 497.611/1000, 0.939565]
+ charged_masses = [0.139570, 0.511/1000]
+ neutral_masses = [x**2 for x in neutral_masses]
+ charged_masses = [x**2 for x in charged_masses]
+ for el in list_plots:
+ #if len(photons_dic["mass_histogram"]) > 2:
+ # plot_pxyz_resolution(photons_dic["energy_resolutions"], photons_dic["variance_om_pxyz_pandora"], photons_dic["variance_om_pxyz"], axs_resolution_pxyz[22], key)
+ # plot_pxyz_resolution(photons_dic["energy_resolutions"], photons_dic["mean_pxyz_pandora"],
+ # photons_dic["mean_pxyz"], axs_response_pxyz[22], key)
+ # plot_mass_hist(photons_dic["mass_histogram"], photons_dic["mass_histogram_pandora"], axs_mass_hist[22], bars=neutral_masses)
+ #if len(neutrons["mass_histogram"]) > 2:
+ # plot_pxyz_resolution(neutrons["energy_resolutions"], neutrons["variance_om_pxyz_pandora"], neutrons["variance_om_pxyz"], axs_resolution_pxyz[2112], key)
+ #if len(hadrons_dic["mass_histogram"]) > 2:
+ # #plot_pxyz_resolution(hadrons_dic["energy_resolutions"], hadrons_dic["variance_om_pxyz_pandora"], hadrons_dic["variance_om_pxyz"], axs_resolution_pxyz[130], key)
+ #if len(hadrons_dic2["mass_histogram"]) > 2:
+ # #plot_mass_hist(hadrons_dic["mass_histogram"], hadrons_dic["mass_histogram_pandora"], axs_mass_hist[130], bars=neutral_masses)
+ #if len(hadrons_dic2["energy_resolutions"]) > 1:
+ ## #plot_pxyz_resolution(hadrons_dic2["energy_resolutions"], hadrons_dic2["variance_om_pxyz_pandora"], hadrons_dic2["variance_om_pxyz"], axs_resolution_pxyz[211], key)
+ # #plot_pxyz_resolution(hadrons_dic2["energy_resolutions"], hadrons_dic2["mean_pxyz_pandora"],
+ # # hadrons_dic2["mean_pxyz"], axs_response_pxyz[211], key)
+ # #plot_mass_hist(hadrons_dic2["mass_histogram"], hadrons_dic2["mass_histogram_pandora"], axs_mass_hist[211], bars=charged_masses)
+ '''if len(electrons_dic["energy_resolutions"]) > 1 and len(electrons_dic["mass_histogram"]) > 2:
+ plot_pxyz_resolution(electrons_dic["energy_resolutions"], electrons_dic["variance_om_pxyz_pandora"], electrons_dic["variance_om_pxyz"], axs_resolution_pxyz[11], key)
+ plot_pxyz_resolution(electrons_dic["energy_resolutions"], electrons_dic["mean_pxyz_pandora"],
+ electrons_dic["mean_pxyz"], axs_response_pxyz[11], key)
+ plot_mass_hist(electrons_dic["mass_histogram"], electrons_dic["mass_histogram_pandora"], axs_mass_hist[11], bars=charged_masses)
+ if len(neutrons["energy_resolutions"]) > 2:
+ plot_pxyz_resolution(neutrons["energy_resolutions"], neutrons["mean_pxyz_pandora"], neutrons["mean_pxyz"], axs_response_pxyz[2112], key)
+ #plot_pxyz_resolution(event_res_dic[key]["energy_resolutions"], protons["variance_om_pxyz_pandora"], protons["variance_om_pxyz_pandora"], axs_resolution_pxyz[2212], key)
+ # same but for response instead of resolution. use "mean_pxyz" instead of "variance_om_pxyz"
+ if len(neutrons["energy_resolutions"]) > 2:
+ plot_pxyz_resolution(neutrons["energy_resolutions"], neutrons["mean_pxyz_pandora"], neutrons["mean_pxyz"], axs_response_pxyz[2112], key)
+ if len(neutrons["mass_histogram"]) > 2:
+ plot_mass_hist(neutrons["mass_histogram"], neutrons["mass_histogram_pandora"], axs_mass_hist[2112], bars=neutral_masses)
+ if len(hadrons_dic["energy_resolutions"]) > 0:
+ plot_pxyz_resolution(hadrons_dic["energy_resolutions"], hadrons_dic["mean_pxyz_pandora"], hadrons_dic["mean_pxyz"], axs_response_pxyz[130], key)'''
+ #plot_pxyz_resolution(event_res_dic[key]["energy_resolutions"], protons["mean_pxyz_pandora"], protons["mean_pxyz"], axs_response_pxyz[2212], key)
+ for angle in ["theta", "phi"]:
+ if len(photons_dic["distr_phi"]) > 0:
+ stacked_hist_plot(photons_dic["distr_phi"], photons_dic["distr_phi_pandora"], PATH_store, r"Photons $\Phi$", "Photons_Phi")
+ stacked_hist_plot(photons_dic["distr_theta"], photons_dic["distr_theta_pandora"], PATH_store, r"Photons $\theta$", "Photons_Theta")
+ plot_sigma_angle_vs_energy(photons_dic, PATH_store, "photons", angle, "Photons")
+ if len(neutrons["distr_phi"]) > 3:
+ stacked_hist_plot(neutrons["distr_phi"], neutrons["distr_phi_pandora"], PATH_store, "Neutrons $\Phi$", "Neutrons_Phi")
+ stacked_hist_plot(neutrons["distr_theta"], neutrons["distr_theta_pandora"], PATH_store, "Neutrons $\Theta$", "Neutrons_Theta")
+ plot_sigma_angle_vs_energy(neutrons, PATH_store, "neutrons", angle, "Neutrons")
+ if len(hadrons_dic["distr_phi"]) > 0:
+ stacked_hist_plot(hadrons_dic["distr_phi"], hadrons_dic["distr_phi_pandora"], PATH_store, r"K_L $\Phi$", "KL_Phi")
+ stacked_hist_plot(hadrons_dic["distr_theta"], hadrons_dic["distr_theta_pandora"], PATH_store, r"K_L $\theta$", "KL_Theta")
+ plot_sigma_angle_vs_energy(hadrons_dic, PATH_store, "KL", angle, "$K_L$")
+ if len(hadrons_dic2["distr_phi"]) > 0:
+ stacked_hist_plot(hadrons_dic2["distr_phi"], hadrons_dic2["distr_phi_pandora"], PATH_store, r"$\Pi^{\pm}$ $\Phi$", "Pions_Phi")
+ stacked_hist_plot(hadrons_dic2["distr_theta"], hadrons_dic2["distr_theta_pandora"], PATH_store, r"$\Pi^{\pm}$ $\theta$", "Pions_Theta")
+ plot_sigma_angle_vs_energy(hadrons_dic2, PATH_store, "Pions", angle, "Pions")
+ if len(electrons_dic["distr_phi"]) > 0:
+ stacked_hist_plot(electrons_dic["distr_phi"], electrons_dic["distr_phi_pandora"], PATH_store, r"e $\Phi$", "Electrons_Phi")
+ stacked_hist_plot(electrons_dic["distr_theta"], electrons_dic["distr_theta_pandora"], PATH_store, r"e $\theta$", "Electrons_Theta")
+ plot_sigma_angle_vs_energy(electrons_dic, PATH_store, "electrons", angle, "Electrons")
+ if len(photons_dic["energy_resolutions"]) > 1:
+ plot_one_label(
+ "Electromagnetic Resolution",
+ photons_dic,
+ "variance_om",
+ PATH_store,
+ "Photons " + key,
+ el,
+ tracks=tracks_label,
+ fig=figs[22],
+ ax=axs[22],
+ save=False,
+ plot_pandora=plot_pandora,
+ plot_baseline=plot_baseline,
+ color=colors[key],
+ pandora_label="Pandora"
+ )
+ plot_one_label(
+ "Electromagnetic Response",
+ photons_dic,
+ "mean",
+ PATH_store,
+ "Photons " + key,
+ el,
+ tracks=tracks_label,
+ fig=figs_r[22],
+ ax=axs_r[22],
+ save=False,
+ plot_pandora=plot_pandora,
+ plot_baseline=plot_baseline,
+ color=colors[key],
+ pandora_label="Pandora"
+ )
+ if len(electrons_dic["energy_resolutions"]) > 2:
+ plot_one_label(
+ "Electromagnetic Response",
+ electrons_dic,
+ "mean",
+ PATH_store,
+ "Electrons " + key,
+ el,
+ tracks=tracks_label,
+ fig=figs_r[11],
+ ax=axs_r[11],
+ save=False,
+ plot_pandora=plot_pandora,
+ plot_baseline=plot_baseline,
+ color=colors[key],
+ pandora_label="Pandora"
+ )
+ plot_one_label(
+ "Electromagnetic Resolution",
+ electrons_dic,
+ "variance_om",
+ PATH_store,
+ "Electrons " + key,
+ el,
+ tracks=tracks_label,
+ fig=figs[11],
+ ax=axs[11],
+ save=False,
+ plot_pandora=plot_pandora,
+ plot_baseline=plot_baseline,
+ color=colors[key],
+ pandora_label="Pandora"
+ )
+ if len(hadrons_dic["energy_resolutions"]) > 1:
+ plot_one_label(
+ "Hadronic Resolution",
+ hadrons_dic,
+ "variance_om",
+ PATH_store,
+ "" + key,
+ el,
+ tracks=tracks_label,
+ fig=figs[130],
+ ax=axs[130],
+ save=False,
+ plot_pandora=plot_pandora,
+ plot_baseline=plot_baseline,
+ color=colors[key],
+ pandora_label="Pandora"
+ )
+ plot_one_label(
+ "Hadronic Response",
+ hadrons_dic,
+ "mean",
+ PATH_store,
+ "" + key,
+ el,
+ tracks=tracks_label,
+ fig=figs_r[130],
+ ax=axs_r[130],
+ save=False,
+ plot_pandora=plot_pandora,
+ plot_baseline=plot_baseline,
+ color=colors[key],
+ pandora_label="Pandora"
+
+ )
+ if len(hadrons_dic2["mean_baseline"]) > 1: # if there are pions in dataset
+ plot_one_label(
+ "Hadronic Resolution",
+ hadrons_dic2,
+ "variance_om",
+ PATH_store,
+ "Pions " + key,
+ el,
+ tracks=tracks_label,
+ fig=figs[211],
+ ax=axs[211],
+ save=False,
+ plot_pandora=plot_pandora,
+ plot_baseline=plot_baseline,
+ color=colors[key],
+ pandora_label="Pandora"
+ )
+ plot_one_label(
+ "Hadronic Response",
+ hadrons_dic2,
+ "mean",
+ PATH_store,
+ "Pions " + key,
+ el,
+ tracks=tracks_label,
+ fig=figs_r[211],
+ ax=axs_r[211],
+ save=False,
+ plot_pandora=plot_pandora,
+ plot_baseline=plot_baseline,
+ color=colors[key],
+ pandora_label="Pandora"
+ )
+ # plot the neutrons and protons
+ if len(neutrons["mean_baseline"]) > 2: # If there are neutrons in dataset
+ plot_one_label(
+ "Hadronic Resolution",
+ neutrons,
+ "variance_om",
+ PATH_store,
+ "" + key,
+ el,
+ tracks=tracks_label,
+ fig=figs[2112],
+ ax=axs[2112],
+ save=False,
+ plot_pandora=plot_pandora,
+ plot_baseline=plot_baseline,
+ color=colors[key],
+ pandora_label="Pandora"
+ )
+ plot_one_label(
+ "Hadronic Response",
+ neutrons,
+ "mean",
+ PATH_store,
+ "" + key,#NEUTRONS
+ el,
+ tracks=tracks_label,
+ fig=figs_r[2112],
+ ax=axs_r[2112],
+ save=False,
+ plot_pandora=plot_pandora,
+ plot_baseline=plot_baseline,
+ color=colors[key],
+ pandora_label="Pandora"
+ )
+ plot_one_label(
+ "Hadronic Response",
+ neutrons,
+ "mean",
+ PATH_store,
+ "Protons " + key,
+ el,
+ tracks=tracks_label,
+ fig=figs_r[2212],
+ ax=axs_r[2212],
+ save=False,
+ plot_pandora=plot_pandora,
+ plot_baseline=plot_baseline,
+ color=colors[key],
+ pandora_label="Pandora"
+ )
+ if len(protons["mean_baseline"]) > 2: # if there are protons in dataset
+ plot_one_label(
+ "Hadronic Resolution",
+ protons,
+ "variance_om",
+ PATH_store,
+ "Protons " + key,
+ el,
+ tracks=tracks_label,
+ fig=figs[2212],
+ ax=axs[2212],
+ save=False,
+ plot_pandora=plot_pandora,
+ plot_baseline=plot_baseline,
+ color=colors[key],
+ pandora_label="Pandora"
+ )
+ plot_pandora = False
+ plot_baseline = False
+ for key in figs:
+ for a in axs[key]:
+ a.grid(1)
+ for a in axs_r[key]:
+ a.grid(1)
+ axs_distr[key].grid(1)
+ figs[key].tight_layout()
+ figs_resolution_pxyz[key].tight_layout()
+ Path(os.path.join(PATH_store, "p_resolutions")).mkdir(parents=True, exist_ok=True)
+ figs_resolution_pxyz[key].savefig(
+ os.path.join(PATH_store, "p_resolutions", f"resolution_pxyz_{key}.pdf"),
+ bbox_inches="tight",
+ )
+ figs_response_pxyz[key].tight_layout()
+ Path(os.path.join(PATH_store, "p_response")).mkdir(parents=True, exist_ok=True)
+ figs_response_pxyz[key].savefig(
+ os.path.join(PATH_store, "p_response", f"response_pxyz_{key}.pdf"),
+ bbox_inches="tight",
+ )
+ figs[key].savefig(
+ os.path.join(PATH_store, f"comparison_resolution_{key}.pdf"),
+ bbox_inches="tight",
+ )
+ figs_r[key].tight_layout()
+ figs_r[key].savefig(
+ os.path.join(PATH_store, f"comparison_response_{key}.pdf"),
+ bbox_inches="tight",
+ )
+ figs_distr[key].tight_layout()
+ figs_distr[key].savefig(
+ os.path.join(PATH_store, f"distr_5_10_GeV_{key}.pdf"),
+ bbox_inches="tight",
+ )
+ figs_distr_HE[key].tight_layout()
+ figs_distr_HE[key].savefig(
+ os.path.join(PATH_store, f"distr_35_50_GeV_{key}.pdf"),
+ bbox_inches="tight",
+ )
+ figs_mass_hist[key].tight_layout()
+ Path(os.path.join(PATH_store, "mass_hist")).mkdir(parents=True, exist_ok=True)
+ figs_mass_hist[key].savefig(
+ os.path.join(PATH_store, "mass_hist", f"mass_hist_{key}.pdf"),
+ bbox_inches="tight",
+ )
+ dist_pandora, pids, phi_dist_pandora, eta_dist_pandora = calc_unit_circle_dist(matched_pandora, pandora=True)
+ dist_ml, pids_ml, phi_dist_ml, eta_dist_ml = calc_unit_circle_dist(matched_, pandora=False)
+ for pid in [22, -211, 211, 2112, 130, 11]:
+ # plot histogram
+ fig, ax = plt.subplots(1, 1, figsize=(10, 10))
+ figphi, axphi = plt.subplots(1, 1, figsize=(10, 10))
+ figeta, axeta = plt.subplots(1, 1, figsize=(10, 10))
+ bins = np.linspace(0, 1, 100)
+ bins_log = np.linspace(-5, 0, 100)
+ bins_phi = np.linspace(-0.1, 0.1, 200)
+ mu, var, _ , _ = get_sigma_gaussian((dist_pandora[np.where(pids == pid)]), bins)
+ ax.hist(
+ np.log10(dist_pandora[np.where(pids == pid)]),
+ bins=bins_log,
+ histtype="step",
+ label="Pandora $\mu$={} $\sigma/\mu$={}".format(
+ round(mu, 2),
+ round(var, 2)),
+ color="blue",
+ )
+ mu, var, _ , _ = get_sigma_gaussian((dist_ml[np.where(pids_ml == pid)]), bins_phi)
+ ax.hist(
+ np.log10(dist_ml[np.where(pids_ml == pid)]),
+ bins=bins_log,
+ histtype="step",
+ label="Model $\mu$={} $\sigma/\mu$={}".format(
+ round(mu, 2),
+ round(var, 2)),
+ color="red",
+ )
+ mu, var, _ , _ = get_sigma_gaussian((phi_dist_pandora[np.where(pids == pid)]), bins_phi)
+ var *= mu
+ axphi.hist(
+ phi_dist_pandora[np.where(pids == pid)],
+ bins=bins_phi,
+ histtype="step",
+ label="Pandora $\sigma={}$".format(
+ round(var, 4)),
+ color="blue",
+ )
+ mu, var, _ , _ = get_sigma_gaussian((phi_dist_ml[np.where(pids_ml == pid)]), bins_phi)
+ var_phi_model = var * mu
+ axphi.hist(
+ phi_dist_ml[np.where(pids_ml == pid)],
+ bins=bins_phi,
+ histtype="step",
+ label=r"Model $\sigma={}$".format(
+ round(var_phi_model, 4)),
+ color="red",
+ )
+ ax.set_xlabel("log norm $n-n_{pred}$")
+ ax.set_yscale("log")
+ ax.legend()
+ ax.grid(True)
+ fig.savefig(os.path.join(PATH_store, f"unit_circle_dist_{pid}.pdf"))
+ axphi.set_xlabel(r"$\Delta \Phi$")
+ axphi.set_yscale("log")
+ axphi.legend()
+ axphi.grid(True)
+ figphi.savefig(os.path.join(PATH_store, f"phi_dist_{pid}.pdf"))
+ mu, var, _ ,_ = get_sigma_gaussian((eta_dist_pandora[np.where(pids == pid)]), bins_phi)
+ # also for eta dist
+ var_eta_pandora = var*mu
+ mu, var, _, _ = get_sigma_gaussian((eta_dist_ml[np.where(pids_ml == pid)[0]]), bins_phi)
+ # also for eta dist
+ var_eta_model = var * mu
+ axeta.hist(
+ eta_dist_pandora[np.where(pids == pid)],
+ bins=bins_phi,
+ histtype="step",
+ label="Pandora $\sigma$={}".format(
+ round(var_eta_pandora, 4)),
+ color="blue",
+ )
+ axeta.hist(
+ eta_dist_ml[np.where(pids_ml == pid)],
+ bins=bins_phi,
+ histtype="step",
+ label="Model $\sigma$={}".format(
+ round(var_eta_model, 4)),
+ color="red",
+ )
+ axeta.set_xlabel(r"$\Delta \theta$")
+ axeta.set_yscale("log")
+ axeta.legend()
+ axeta.grid(True)
+ figeta.savefig(os.path.join(PATH_store, f"eta_dist_{pid}.pdf"))
+
+ #fig_mass_res.savefig(
+ # os.path.join(PATH_store, "event_mass_resolution.pdf"), bbox_inches="tight"
+ #)
+
+def reco_hist(ml, pandora, PATH_store, pids=[22, 130, 2112, 211]):
+ e_bins = [[0,5], [5, 15], [15, 50]]
+ path_reco = os.path.join(PATH_store, "reco_histograms")
+ if not os.path.exists(path_reco):
+ os.makedirs(path_reco)
+ for pid in pids:
+ # make n rows, where n is the number of energy bins
+ fig, ax = plt.subplots(len(e_bins), 1, figsize=(15, 10))
+ for i, bin in enumerate(e_bins):
+ filt_ml = (ml.pid==pid) & (ml.true_showers_E < bin[1]) & (ml.true_showers_E >= bin[0])
+ filt_pandora = (pandora.pid==pid) & (pandora.true_showers_E < bin[1]) & (pandora.true_showers_E >= bin[0])
+ reco_ml = ml.pred_showers_E[filt_ml] / ml.reco_showers_E[filt_ml]
+ reco_pandora = pandora.pandora_calibrated_pfo[filt_pandora] / pandora.true_showers_E[filt_pandora]
+ bins = np.linspace(0, 3,300)
+ if i == 0 and pid == 22:
+ fig1, ax1 = plt.subplots()
+ ax1.hist(reco_ml, bins=bins, histtype='step', label='ML', color='red', density=True)
+ ax1.hist(reco_pandora, bins=bins, histtype='step', label='Pandora', color='blue', density=True)
+ ax1.set_xlabel(r"$E_{reco, pred.}/E_{reco, true}$")
+ ax1.set_ylabel("Density")
+ ax1.set_title("Photons [0, 5] GeV")
+ ax1.set_yscale("log")
+ ax1.legend()
+ fig1.savefig(os.path.join(PATH_store, "reco_hist_photons_5GeV.pdf"))
+ #filt_ml = (ml.pid == 130) & (ml.true_showers_E < 5)
+ #filt_pandora = (pandora.pid == 130) & (pandora.true_showers_E < 5)
+ #reco_ml = ml.pred_showers_E[filt_ml] / ml.reco_showers_E[filt_ml]
+ #reco_pandora = pandora.pandora_calibrated_pfo[filt_pandora] / pandora.true_showers_E[filt_pandora]
+ #bins = np.linspace(0, 2, 200)
+ #fig, ax = plt.subplots()
+ ax[i].hist(reco_ml, bins=bins, histtype='step', label='ML', color='red', density=True)
+ ax[i].hist(reco_pandora, bins=bins, histtype='step', label='Pandora', color='blue', density=True)
+ ax[i].set_xlabel(r"$E_{reco, pred.}/E_{reco, true}$")
+ ax[i].set_ylabel("Density")
+ ax[i].set_title("PID: {}, E range: {} GeV".format(pid, bin))
+ ax[i].set_yscale("log")
+ ax[i].legend()
+ fig.tight_layout()
+ fig.savefig(os.path.join(path_reco, "reco_hist_{}.pdf".format(pid)))
+
+
+def plot_per_energy_resolution(
+ matched_pandora, matched_, PATH_store, tracks=False
+):
+ plot_response = True
+ if plot_response:
+ list_plots = ["_reco"] # "","_reco"
+ for el in list_plots:
+ colors_list = ["#fde0dd", "#c994c7", "#dd1c77"] # Color list poster Neurips
+ marker_size = 15
+ log_scale = True
+ photons_dic = get_response_for_id_i([22], matched_pandora, matched_)
+ electrons_dic = get_response_for_id_i([11], matched_pandora, matched_)
+ plot_X(
+ "Electromagnetic Response",
+ photons_dic,
+ electrons_dic,
+ "mean",
+ PATH_store,
+ "Photons",
+ "Electrons",
+ el,
+ plot_label1=True,
+ )
+ plot_X(
+ "Electromagnetic Resolution",
+ photons_dic,
+ electrons_dic,
+ "variance_om",
+ PATH_store,
+ "Photons",
+ "Electrons",
+ el,
+ plot_label1=True,
+ )
+ plot_X(
+ "Electromagnetic Resolution",
+ photons_dic,
+ electrons_dic,
+ "variance_om",
+ PATH_store,
+ "Photons",
+ "Electrons",
+ el,
+ plot_label2=True,
+ )
+ pions_dic = get_response_for_id_i([211], matched_pandora, matched_)
+ kaons_dic = get_response_for_id_i([130], matched_pandora, matched_)
+ plot_X(
+ "Hadronic Response",
+ pions_dic,
+ kaons_dic,
+ "mean",
+ PATH_store,
+ "Pions",
+ "Kaons",
+ el,
+ plot_label1=True,
+ )
+ plot_X(
+ "Hadronic Resolution",
+ pions_dic,
+ kaons_dic,
+ "variance_om",
+ PATH_store,
+ "Pions",
+ "Kaons",
+ el,
+ plot_label1=True,
+ )
+ plot_X(
+ "Hadronic Resolution",
+ pions_dic,
+ kaons_dic,
+ "variance_om",
+ PATH_store,
+ "Pions",
+ "Kaons",
+ el,
+ plot_label2=True,
+ )
+
+def plot_efficiency_all(sd_pandora, df_list, PATH_store, labels):
+ photons_dic = create_eff_dic_pandora(sd_pandora, 22)
+ electrons_dic = create_eff_dic_pandora(sd_pandora, 11)
+ pions_dic = create_eff_dic_pandora(sd_pandora, 211)
+ kaons_dic = create_eff_dic_pandora(sd_pandora, 130)
+ fakes_dic_p = calculate_fakes(sd_pandora, None, False, pandora=True)
+ fakes_dic_p = {"fakes_p": fakes_dic_p[0], "energy_fakes_p": fakes_dic_p[1], "fake_percent_energy_p": fakes_dic_p[2]}
+ for var_i, sd_hgb in enumerate(df_list):
+ photons_dic = create_eff_dic(photons_dic, sd_hgb, 22, var_i=var_i)
+ fakes_dic = calculate_fakes(sd_hgb, None, False, pandora=False)
+ fakes_dic_p.update({"fakes_" + str(var_i): fakes_dic[0], "energy_fakes_" + str(var_i): fakes_dic[1], "fake_percent_energy_" + str(var_i): fakes_dic[2]})
+ #photons_dic.update(create_fakes_dic(photons_dic, sd_hgb, 22, var_i))
+ electrons_dic = create_eff_dic(electrons_dic, sd_hgb, 11, var_i=var_i)
+ #electrons_dic.update(create_fakes_dic(electrons_dic, sd_hgb, 11, var_i))
+ pions_dic = create_eff_dic(pions_dic, sd_hgb, 211, var_i=var_i)
+ #pions_dic.update(create_fakes_dic(pions_dic, sd_hgb, 211, var_i))
+ kaons_dic = create_eff_dic(kaons_dic, sd_hgb, 130, var_i=var_i)
+ #kaons_dic.update(create_fakes_dic(kaons_dic, sd_hgb, 130, var_i))
+ plot_eff_and_fakes(
+ "Electromagnetic",
+ photons_dic,
+ "Photons",
+ PATH_store,
+ labels,
+ )
+ plot_eff(
+ "Electromagnetic",
+ photons_dic,
+ "Photons",
+ PATH_store,
+ labels,
+ )
+ plot_fakes(
+ "Electromagnetic",
+ fakes_dic_p,
+ "Photons",
+ PATH_store,
+ labels,
+ )
+ plot_fakes_E(
+ "Electromagnetic",
+ fakes_dic_p,
+ "Photons",
+ PATH_store,
+ labels,
+ )
+ if len(electrons_dic["eff_p"]) > 0:
+ plot_eff(
+ "Electromagnetic",
+ electrons_dic,
+ "Electrons",
+ PATH_store,
+ labels,
+ )
+ plot_fakes(
+ "Electromagnetic",
+ electrons_dic,
+ "Electrons",
+ PATH_store,
+ labels,
+ )
+ if len(pions_dic["eff_p"]) > 0:
+ plot_eff(
+ "Hadronic",
+ pions_dic,
+ "Pions",
+ PATH_store,
+ labels,
+ )
+ plot_fakes(
+ "Hadronic",
+ pions_dic,
+ "Pions",
+ PATH_store,
+ labels,
+ )
+ if len(kaons_dic["eff_p"]) > 0:
+ plot_eff(
+ "Hadronic",
+ kaons_dic,
+ "Kaons",
+ PATH_store,
+ labels,
+ )
+ plot_fakes(
+ "Hadronic",
+ kaons_dic,
+ "Kaons",
+ PATH_store,
+ labels,
+ )
+
+def create_eff_dic_pandora(matched_pandora, id):
+ pids_pandora = np.abs(matched_pandora["pid"].values)
+ mask_id = pids_pandora == id
+ df_id_pandora = matched_pandora[mask_id]
+ eff_p, energy_eff_p = calculate_eff(df_id_pandora, False, pandora=True)
+ fakes_p, energy_fakes_p, fake_percent_energy = calculate_fakes(df_id_pandora, None, False, pandora=True)
+ photons_dic = {}
+ photons_dic["eff_p"] = eff_p
+ photons_dic["energy_eff_p"] = energy_eff_p
+ photons_dic["fakes_p"] = fakes_p
+ photons_dic["energy_fakes_p"] = energy_fakes_p
+ photons_dic["fake_percent_energy_p"] = fake_percent_energy
+ return photons_dic
+
+def create_eff_dic(photons_dic, matched_, id, var_i):
+ pids = np.abs(matched_["pid"].values)
+ mask_id = pids == id
+ df_id = matched_[mask_id]
+ eff, energy_eff = calculate_eff(df_id, False)
+ fakes, energy_fakes, fake_percent_energy = calculate_fakes(df_id, None, False, pandora=False)
+ photons_dic["eff_" + str(var_i)] = eff
+ photons_dic["energy_eff_" + str(var_i)] = energy_eff
+ photons_dic["fakes_" + str(var_i)] = fakes
+ photons_dic["energy_fakes_" + str(var_i)] = energy_fakes
+ photons_dic["fake_percent_energy_" + str(var_i)] = fake_percent_energy
+ return photons_dic
+
+def create_fakes_dic(photons_dic, matched_, id, var_i):
+ pids = np.abs(matched_["pid"].values)
+ mask_id = pids == id
+ df_id = matched_[mask_id]
+ eff, energy_eff = calculate_eff(df_id, False)
+ fakes, energy_fakes, fake_percent_energy = calculate_fakes(df_id, None, False, pandora=False)
+ photons_dic["eff_" + str(var_i)] = eff
+ photons_dic["energy_eff_" + str(var_i)] = energy_eff
+ photons_dic["fakes_" + str(var_i)] = fakes
+ photons_dic["energy_fakes_" + str(var_i)] = energy_fakes
+ return photons_dic
+
+def plot_eff(title, photons_dic, label1, PATH_store, labels):
+ colors_list = ["#FF0000", "#00FF00", "#0000FF"]
+ markers = ["^", "*", "x", "d", ".", "s"]
+ fig = plt.figure()
+ j = 0
+ plt.xlabel("Energy [GeV]")
+ plt.ylabel("Efficiency")
+ # ax[row_i, j].set_xscale("log")
+ plt.title(title)
+ plt.grid()
+ for i in range(0, len(labels)):
+ plt.plot(photons_dic["energy_eff_" + str(i)],
+ photons_dic["eff_" + str(i)], "--", color=colors_list[0])
+ plt.scatter(
+ photons_dic["energy_eff_" + str(i)],
+ photons_dic["eff_" + str(i)],
+ label="ML " + label1, # temporarily, for the ML-Pandora comparison plots, change if plotting more labels!
+ marker=markers[i],
+ color=colors_list[0],
+ s=50,
+ )
+ plt.plot(photons_dic["energy_eff_p"],
+ photons_dic["eff_p"], "--", color=colors_list[2])
+ plt.scatter(
+ photons_dic["energy_eff_p"],
+ photons_dic["eff_p"],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ label="Pandora " + label1,
+ marker="x",
+ # Add -- line
+ s=50,
+ )
+ plt.legend(loc="lower right")
+ if title == "Electromagnetic":
+ plt.ylim([0.5, 1.1])
+ else:
+ plt.ylim([0.5, 1.1])
+ plt.xscale("log")
+ fig.savefig(
+ os.path.join(PATH_store, title + label1 + ".pdf"),
+ bbox_inches="tight",
+ )
+
+
+def plot_eff_and_fakes(title, photons_dic, label1, PATH_store, labels):
+ colors_list = ["#FF0000", "#00FF00", "#0000FF"]
+ markers = ["^", "*", "x", "d", ".", "s"]
+ fig, ax = plt.subplots()
+ j = 0
+ ax.set_xlabel("Energy [GeV]")
+ ax.set_ylabel("Efficiency")
+ # ax[row_i, j].set_xscale("log")
+ ax.set_title(title)
+ ax.grid(1)
+ for i in range(0, len(labels)):
+ ax.plot(photons_dic["energy_eff_" + str(i)],
+ photons_dic["eff_" + str(i)], "--", color=colors_list[0])
+ ax.scatter(
+ photons_dic["energy_eff_" + str(i)],
+ photons_dic["eff_" + str(i)],
+ label="ML " + label1, # Temporarily, for the ML-Pandora comparison plots, change if plotting more labels!
+ marker=markers[i],
+ color=colors_list[0],
+ s=50,
+ )
+ ax.plot(photons_dic["energy_eff_p"],
+ photons_dic["eff_p"], "--", color=colors_list[2])
+ ax.scatter(
+ photons_dic["energy_eff_p"],
+ photons_dic["eff_p"],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ label="Pandora " + label1,
+ marker="x",
+ s=50,
+ )
+ ax.legend(loc="upper right")
+ if title == "Electromagnetic":
+ ax.set_ylim([0.5, 1.1])
+ else:
+ ax.set_ylim([0.5, 1.1])
+ ax.set_xscale("log")
+ ax.set_xlabel("Efficiency")
+ ax_fakes = inset_axes(ax,
+ width="50%", # width = 30% of parent_bbox
+ height="40%", # height : 1 inch
+ loc="lower right")
+ ax_fakes.set_ylabel("Fake rate")
+ for i in range(0, len(labels)):
+ ax_fakes.plot(photons_dic["energy_fakes_" + str(i)],
+ photons_dic["fakes_" + str(i)], "--", color=colors_list[0])
+ ax_fakes.scatter(
+ photons_dic["energy_fakes_" + str(i)],
+ photons_dic["fakes_" + str(i)],
+ label="ML", # Temporarily, for the ML-Pandora comparison plots, change if plotting more labels!
+ marker=markers[i],
+ color=colors_list[0],
+ s=50,
+ )
+ ax_fakes.grid()
+ ax_fakes.set_xlabel("Energy [GeV]")
+ ax_fakes.plot(photons_dic["energy_fakes_p"],
+ photons_dic["fakes_p"], "--", color=colors_list[2])
+ ax_fakes.scatter(
+ photons_dic["energy_fakes_p"],
+ photons_dic["fakes_p"],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ label="Pandora",
+ marker="x",
+ # add -- line
+ s=50,
+ )
+ fig.savefig(
+ os.path.join(PATH_store, "DoublePlot_" + title + label1 + ".pdf"),
+ bbox_inches="tight",
+ )
+
+
+def plot_fakes_E(title, photons_dic, label1, PATH_store, labels):
+ colors_list = ["#FF0000", "#00FF00", "#0000FF"]
+ markers = ["x", "*", "x", "d", ".", "s"]
+ fig = plt.figure()
+ j = 0
+ plt.xlabel("Energy [GeV]")
+ plt.ylabel("Fake energy rate")
+ # ax[row_i, j].set_xscale("log")
+ plt.title(title)
+ plt.grid()
+ for i in range(0, len(labels)):
+ plt.plot(photons_dic["energy_fakes_" + str(i)],
+ photons_dic["fake_percent_energy_" + str(i)], "--", color=colors_list[0])
+ plt.scatter(
+ photons_dic["energy_fakes_" + str(i)],
+ photons_dic["fake_percent_energy_" + str(i)],
+ label="ML", # Temporarily, for the ML-Pandora comparison plots, change if plotting more labels!
+ marker=markers[i],
+ color=colors_list[0],
+ s=50,
+ )
+ plt.plot(photons_dic["energy_fakes_p"],
+ photons_dic["fake_percent_energy_p"], "--", color=colors_list[2])
+ plt.scatter(
+ photons_dic["energy_fakes_p"],
+ photons_dic["fake_percent_energy_p"],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ label="Pandora",
+ marker="x",
+ # add -- line
+ s=50,
+ )
+ plt.legend(loc="upper right")
+ #if title == "Electromagnetic":
+ # plt.ylim([0.0, 0.5])
+ #else:
+ # plt.ylim([0.0, 0.5])
+ plt.xscale("log")
+ fig.savefig(
+ os.path.join(PATH_store, "Fake_Energy_Frac_" + title + label1 + ".pdf"),
+ bbox_inches="tight",
+ )
+
+def plot_fakes(title, photons_dic, label1, PATH_store, labels):
+ colors_list = ["#FF0000", "#00FF00", "#0000FF"]
+ markers = ["^", "*", "x", "d", ".", "s"]
+ fig = plt.figure()
+ j = 0
+ plt.xlabel("Energy [GeV]")
+ plt.ylabel("Fake rate")
+ plt.title(title)
+ plt.grid()
+ for i in range(0, len(labels)):
+ plt.plot(photons_dic["energy_fakes_" + str(i)],
+ photons_dic["fakes_" + str(i)], "--", color=colors_list[0])
+ plt.scatter(
+ photons_dic["energy_fakes_" + str(i)],
+ photons_dic["fakes_" + str(i)],
+ label="ML", # Temporarily, for the ML-Pandora comparison plots, change if plotting more labels!
+ marker=markers[i],
+ color=colors_list[0],
+ s=50,
+ )
+ plt.plot(photons_dic["energy_fakes_p"],
+ photons_dic["fakes_p"], "--", color=colors_list[2])
+ plt.scatter(
+ photons_dic["energy_fakes_p"],
+ photons_dic["fakes_p"],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ label="Pandora",
+ marker="x",
+ # add -- line
+ s=50,
+ )
+ plt.legend(loc="lower right")
+ #if title == "Electromagnetic":
+ # plt.ylim([0.0, 0.07])
+ #else:
+ # plt.ylim([0.0, 0.07])
+ plt.xscale("log")
+ fig.savefig(
+ os.path.join(PATH_store, "Fake_Rate_" + title + label1 + ".pdf"),
+ bbox_inches="tight",
+ )
+
+def calculate_phi(x, y, z=None):
+ return torch.arctan2(y, x)
+
+def calculate_eta(x, y, z):
+ theta = torch.arctan2(torch.sqrt(x**2 + y**2), z)
+ return -torch.log(torch.tan(theta / 2))
+
+from copy import copy
+
+def plot_event(df, pandora=True, output_dir="", graph=None, y=None, labels=None, is_track_in_cluster=None):
+ # Plot the event with Plotly. Compare ML and Pandora reconstructed with truth
+ # Also plot Eta-Phi (a bit easier debugging)
+ # df = df[(df.pid == 2112.0) | (pd.isna(df.pid)) | (df.pid == 130.0)] # We are debugging photons now!
+ # y_filt = np.where((y.pid.flatten() == 2112.0) + (y.pid.flatten() == 130.0))[0]
+ # y = copy(y)
+ # y.mask(y_filt)
+ # if len(df) == 0:
+ # return
+ return
+ import plotly
+ import plotly.graph_objs as go
+ import plotly.express as px
+ # arrows from 0,0,0 to df.true_pos and the hover text should be the true energy (df.true_showers_E)
+ fig = go.Figure()
+ # scale = 1. # Size of the direction vector, to make it easier to see it with the hits
+ # list of 20 random colors
+ # color_list = px.colors.qualitative.Plotly # This is only 10, not enough
+ color_list = px.colors.qualitative.Light24 + px.colors.qualitative.Dark24 + px.colors.qualitative.Plotly
+ #ref_pt = np.array(df.vertex.values.tolist())
+
+ if graph is not None:
+ sum_hits = scatter_sum(
+ graph.ndata["e_hits"].flatten(), graph.ndata["particle_number"].long()
+ )
+ hit_pos = graph.ndata["pos_hits_xyz"].numpy()
+ scale = np.mean(np.linalg.norm(hit_pos, axis=1))
+ truepos = np.array(df.true_pos.values.tolist()) * scale
+ #truepos = truepos[~np.isnan(truepos[:, 0])]
+ #vertices = np.zeros_like(truepos[~np.isnan(truepos[:, 0])])
+ vertices = np.stack(df.vertex.values)
+ #if y is not None:
+ # assert vertices.shape == y.vertex.shape
+ # vertices = y.vertex
+ # fig.add_trace(go.Scatter3d(x=hit_pos[:, 0], y=hit_pos[:, 1], z=hit_pos[:, 2], mode='markers', color=graph.ndata["particle_number"], name='hits'))
+ # fix this: color by particle number (it is an array of size [0,0,0,0,1,1,1,2,2,2...]
+ ht = [
+ f"part. {int(i)}, sum_hits={sum_hits[i]:.2f}"
+ for i in graph.ndata["particle_number"].long().tolist()
+ ]
+ if labels is not None:
+ has_track = scatter_sum(graph.ndata["h"][:, 8], labels.long().cpu())
+ #if has_track.sum() == 0.0:
+ # return # filter ! ! ! Only plot those with tracks
+ pids = df.pid.values
+ ht_clusters = [f"c123luster {i}, has_track={has_track[i]}" for i in labels]
+ ht = zip(ht, ht_clusters)
+ ht = [f"{a}, {b}" for a, b in ht]
+ c = [color_list[int(i.item())] for i in graph.ndata["particle_number"]]
+ if labels is not None:
+ c = [color_list[int(i.item())] for i in labels]
+ if pandora:
+ c = [color_list[int(i.item())] for i in graph.ndata["pandora_cluster"]]
+ fig.add_trace(
+ go.Scatter3d(
+ x=hit_pos[:, 0],
+ y=hit_pos[:, 1],
+ z=hit_pos[:, 2],
+ mode="markers",
+ marker=dict(size=4, color=c),
+ name="hits",
+ hovertext=ht,
+ hoverinfo="text",
+ )
+ )
+ if is_track_in_cluster is not None:
+ plt.title(f"Track in cluster {is_track_in_cluster}")
+ fig.update_layout(title_text=f"Track in cluster {is_track_in_cluster}")
+ fig.update_layout(title_text=f"Track in cluster {is_track_in_cluster}")
+ # set scale to avg hit_pos
+ if "pos_pxpypz" in graph.ndata.keys():
+ vectors = graph.ndata["pos_pxpypz"].numpy()
+ if "pos_pxpypz_at_vertex" in graph.ndata.keys():
+ pos_at_vertex = graph.ndata["pos_pxpypz_at_vertex"].numpy()
+ ps_vertex = graph.ndata["pos_pxpypz_at_vertex"]
+ ps_vertex = torch.norm(ps_vertex, dim=1).numpy()
+ else:
+ pos_at_vertex = None
+ trks = graph.ndata["pos_hits_xyz"].numpy()
+ # filt = (vectors[:, 0] != 0) & (vectors[:, 1] != 0) & (vectors[:, 2] != 0)
+ filt = graph.ndata["h"][:, 8] > 0
+ hit_type = graph.ndata["hit_type"][filt]
+ vf = vectors[filt]
+ vectors = vectors[filt]
+ if pos_at_vertex is not None:
+ pos_at_vertex = pos_at_vertex[filt]
+ ps_vertex = ps_vertex[filt]
+ trks = trks[filt] # track positions
+ # normalize 3-comp vectors / np.linalg.norm(vectors, axis=1) * scale # remove zero vectors
+ vectors = vectors / np.linalg.norm(vectors, axis=1).reshape(-1, 1) * scale
+ if pos_at_vertex is not None:
+ pos_at_vertex = (
+ pos_at_vertex
+ / np.linalg.norm(pos_at_vertex, axis=1).reshape(-1, 1)
+ * scale
+ )
+ track_p = graph.ndata["h"][:, 8].numpy()[filt]
+ pnum = graph.ndata["particle_number"].long()[filt]
+ # plot these vectors
+ for i in range(len(vectors)):
+ if hit_type[i] == 0:
+ line = dict(color="black", width=1)
+ elif hit_type[i] == 1:
+ line = dict(color="black", width=1, dash="dash")
+ else:
+ line = dict(color="purple", width=1, dash="dot")
+ pass # muons
+ #raise Exception
+ def plot_single_arrow(
+ fig, vec, hovertext="", init_pt=[0, 0, 0], line=line
+ ):
+ # init_pt: initial point of the vector
+ fig.add_trace(
+ go.Scatter3d(
+ x=[init_pt[0], vec[0] + init_pt[0]],
+ y=[init_pt[1], init_pt[1] + vec[1]],
+ z=[init_pt[2], init_pt[2] + vec[2]],
+ mode="lines",
+ line=line,
+ )
+ )
+ fig.add_trace(
+ go.Scatter3d(
+ x=[vec[0] + init_pt[0]],
+ y=[vec[1] + init_pt[1]],
+ z=[vec[2] + init_pt[2]],
+ mode="markers",
+ marker=dict(size=4, color="black"),
+ hovertext=hovertext,
+ )
+ )
+ plot_single_arrow(
+ fig,
+ vectors[i] / 5,
+ hovertext=f"track {track_p[i]} , pxpypz={vf[i]}",
+ init_pt=trks[i],
+ ) # a bit smaller
+ if pos_at_vertex is not None:
+ plot_single_arrow(
+ fig,
+ pos_at_vertex[i],
+ hovertext=f"track at DCA {ps_vertex[i]}, px,py,pz={pos_at_vertex[i]}",
+ init_pt=[0, 0, 0],
+ )
+ # Color this by graph.ndata["particle_number"]
+ # Get the norm of vertices
+ displacement = np.linalg.norm(vertices, axis=1)
+ #if displacement.max() < 400:
+ # return
+ #else:
+ # print("Displaced")
+ pids = [str(x) for x in df.pid.values]
+ col = np.arange(1, len(truepos) + 1)
+ true_E = df.true_showers_E.values
+ true_P = np.array(df.true_pos.values.tolist())
+ true_P /= np.linalg.norm(true_P, axis=1).reshape(-1, 1)
+ true_P *= scale
+ ht = [
+ f"GT E={true_E[i]:.2f}, PID={pids[i]}, p={true_P[i]}"
+ for i in range(len(true_E))
+ ]
+ if pandora:
+ pandora_cluster = graph.ndata["pandora_cluster"].long() + 1
+ pandorapos = np.array(df.pandora_calibrated_pos.values.tolist())
+ mask = ~np.isnan(df.pandora_calibrated_E.values)
+ pandoramomentum = np.linalg.norm(pandorapos, axis=1)
+ pandorapos = pandorapos / np.linalg.norm(pandorapos, axis=1).reshape(-1, 1)
+ #pandorapos = pandorapos[1:]
+ # normalize
+ #pandora_ref_pt = scatter_mean(
+ # graph.ndata["pandora_reference_point"], pandora_cluster.long(), dim=0
+ #)
+ #pandora_ref_pt = pandora_ref_pt[1:]
+ pandora_ref_pt = torch.tensor(np.stack(df.pandora_ref_pt.values.tolist()))
+ #pandora_ref_pt #/= np.linalg.norm(pandora_ref_pt, axis=1).reshape(-1, 1)
+ assert pandora_ref_pt.shape == pandorapos.shape
+ ref_pt = pandora_ref_pt
+ pandora_ref_pt_diff = pandora_ref_pt[mask] - vertices[mask]
+ pandora_ref_pt_diff_norm = pandora_ref_pt_diff / np.linalg.norm(pandora_ref_pt_diff, axis=1).reshape(-1, 1)
+ GT_translation = pandora_ref_pt_diff_norm.numpy()
+ assert pandora_ref_pt.shape == pandorapos.shape
+ pandorapos *= scale
+ # fig.add_trace(go.Scatter3d(x=vertices[:, 0] + pandorapos[:, 0], y=vertices[:, 1] + pandorapos[:, 1], z=vertices[:, 2] + pandorapos[:, 2], mode='markers', marker=dict(size=4, color='green'), name='Pandora', hovertext=df.pandora_calibrated_E.values, hoverinfo="text"))
+ fig.add_trace(
+ go.Scatter3d(
+ x=torch.tensor(pandora_ref_pt[:, 0]) + pandorapos[:, 0],
+ y=torch.tensor(pandora_ref_pt[:, 1]) + pandorapos[:, 1],
+ z=torch.tensor(pandora_ref_pt[:, 2]) + pandorapos[:, 2],
+ mode="markers",
+ marker=dict(size=4, color="green"),
+ name="Pandora",
+ hovertext=pandoramomentum.flatten()[1:],
+ hoverinfo="text",
+ ))
+ # Also add the lines herepandora_ref_pt.shape == pandorapos.shape
+ for i in range(len(pandorapos)):
+ #v = [0, 0, 0] # Temporarily. TODO: find the Pandora 'vertex'
+ v = pandora_ref_pt[i]
+ #v = [0,0,0]
+ fig.add_trace(
+ go.Scatter3d(
+ x=[v[0], v[0] + pandorapos[i, 0]],
+ y=[v[1], v[1] + pandorapos[i, 1]],
+ z=[v[2], v[2] + pandorapos[i, 2]],
+ mode="lines",
+ line=dict(color="green", width=1),
+ )
+ )
+ else:
+ predpos = np.array(df.pred_pos_matched.values.tolist())
+ mask = ~np.isnan(np.stack(df.pred_pos_matched.values)[:, 0])
+ predpos = predpos[mask]
+ predpos /= np.linalg.norm(predpos, axis=1).reshape(-1, 1)
+ predpos *= scale
+ pred_ref_pt = np.array(df.pred_ref_pt_matched.values.tolist())
+ ref_pt = pred_ref_pt
+ pred_ref_pt_diff = pred_ref_pt[mask] - vertices[mask]
+ pred_ref_pt_diff_norm = pred_ref_pt_diff / np.linalg.norm(pred_ref_pt_diff, axis=1).reshape(-1, 1)
+ #GT_translation = pred_ref_pt_diff_norm[mask]
+ #pred_ref_pt /= np.linalg.norm(pred_ref_pt, axis=1).reshape(-1, 1)
+ #v = [0, 0, 0] # Do an average of the hits for plotting this
+ #v = vertices[i]
+ # ... Add lines ...
+ fig.add_trace(
+ go.Scatter3d(
+ x=ref_pt[mask][:, 0] + predpos[:, 0],
+ y=ref_pt[mask][:, 1] + predpos[:, 1],
+ z=ref_pt[mask][:, 2] + predpos[:, 2],
+ mode="markers",
+ marker=dict(size=4, color="red"),
+ name="ML",
+ hovertext=df.calibrated_E.values,
+ )
+ )
+ for i in range(len(predpos)):
+ v = ref_pt[i]
+ fig.add_trace(
+ go.Scatter3d(
+ x=[v[0], v[0] + predpos[i, 0]],
+ y=[v[1], v[1] + predpos[i, 1]],
+ z=[v[2], v[2] + predpos[i, 2]],
+ mode="lines",
+ line=dict(color="red", width=1),
+ )
+ )
+ # Plot GT (but translate it according to the Pandora or ML reference pt)
+ # Add lines from (0, 0, 0) to these points...
+ truepos_norm = truepos / np.linalg.norm(truepos, axis=1).reshape(-1, 1) # From vertex!
+ truepos_norm_from_ref_pt = truepos_norm# - GT_translation
+ truepos_norm_from_ref_pt /= np.linalg.norm(truepos_norm_from_ref_pt, axis=1).reshape(-1, 1)
+ truepos_norm_from_ref_pt *= scale
+ fig.add_trace(
+ go.Scatter3d(
+ x=ref_pt[:, 0] + truepos_norm_from_ref_pt[:, 0],
+ y=ref_pt[:, 1] + truepos_norm_from_ref_pt[:, 1],
+ z=ref_pt[:, 2] + truepos_norm_from_ref_pt[:, 2],
+ mode="markers",
+ marker=dict(size=4, color=[color_list[c] for c in col]),
+ name="ground truth",
+ hovertext=ht,
+ hoverinfo="text",
+ )
+ )
+ # Also plot a dotted black line for each vertex from vertex to the true position
+ for i in range(len(truepos[mask])):
+ v = ref_pt[i]
+ fig.add_trace(
+ go.Scatter3d(
+ x=[v[0], v[0] + truepos_norm_from_ref_pt[i, 0]],
+ y=[v[1], v[1] + truepos_norm_from_ref_pt[i, 1]],
+ z=[v[2], v[2] + truepos_norm_from_ref_pt[i, 2]],
+ mode="lines",
+ line=dict(color="blue", width=1),
+ )
+ )
+ v = vertices[mask][i]
+ fig.add_trace(
+ go.Scatter3d(
+ x=[v[0], v[0] + truepos_norm_from_ref_pt[i, 0]],
+ y=[v[1], v[1] + truepos_norm_from_ref_pt[i, 1]],
+ z=[v[2], v[2] + truepos_norm_from_ref_pt[i, 2]],
+ mode="lines",
+ line=dict(color="black", width=2),
+ )
+ )
+ v = [0, 0, 0]
+ fig.add_trace(
+ go.Scatter3d(
+ x=[v[0], v[0] + truepos_norm_from_ref_pt[i, 0]],
+ y=[v[1], v[1] + truepos_norm_from_ref_pt[i, 1]],
+ z=[v[2], v[2] + truepos_norm_from_ref_pt[i, 2]],
+ mode="lines",
+ line=dict(color="gray", width=2),
+ )
+ )
+ assert output_dir != ""
+ if "25.0" in output_dir:
+ print("26")
+ plotly.offline.plot(fig, filename=output_dir + "event.html")
+ # also plot a png for big events which cannot be rendered fast
+ fig.write_image(output_dir + "event.png")
+
+
+def calculate_theta(x, y, z):
+ return torch.acos(z / torch.sqrt(x ** 2 + y ** 2 + z ** 2))
+
+def phi_dist(phi_pred, phi_true):
+ # if the difference is larger than pi, take the smaller angle
+ diff = phi_pred - phi_true
+ # diff has to be a Gaussian centered around zero
+ diff = np.where(diff > np.pi, 2 * np.pi - diff, diff)
+ diff = np.where(diff < -np.pi, 2 * np.pi + diff, diff)
+ return diff
+
+def calc_unit_circle_dist(df, pandora=False):
+ # A quick histogram of distances between unit vectors of directions - to compare with the light training model
+ # Also returns the delta phi and delta theta
+ if pandora:
+ assert "pandora_calibrated_pos" in df.columns
+ pids = []
+ distances = []
+ true_e = df.true_showers_E.values
+ batch_idx = df.number_batch
+ if pandora:
+ pred_vect = np.array(df.pandora_calibrated_pos.values.tolist())
+ true_vect = (
+ np.array(df.true_pos.values.tolist())
+ * torch.tensor(true_e).unsqueeze(1).repeat(1, 3).numpy()
+ )
+ pred_vect = torch.tensor(pred_vect)
+ true_vect = torch.tensor(true_vect)
+ # normalize
+ pred_vect = pred_vect / torch.norm(pred_vect, dim=1).reshape(-1, 1)
+ true_vect = true_vect / torch.norm(true_vect, dim=1).reshape(-1, 1)
+ else:
+ pred_vect = np.array(df.pred_pos_matched.values.tolist())
+ true_vect = (
+ np.array(df.true_pos.values.tolist())
+ * torch.tensor(true_e).unsqueeze(1).repeat(1, 3).numpy()
+ )
+ pred_vect = torch.tensor(pred_vect)
+ true_vect = torch.tensor(true_vect)
+ # normalize
+ pred_vect = pred_vect / torch.norm(pred_vect, dim=1).reshape(-1, 1)
+ true_vect = true_vect / torch.norm(true_vect, dim=1).reshape(-1, 1)
+ phi_pred, phi_true = calculate_phi(pred_vect[:, 0], pred_vect[:, 1]), calculate_phi(
+ true_vect[:, 0], true_vect[:, 1]
+ )
+ #eta_pred, eta_true = calculate_eta(
+ # pred_vect[:, 0], pred_vect[:, 1], pred_vect[:, 2]
+ #), calculate_eta(true_vect[:, 0], true_vect[:, 1], true_vect[:, 2])
+ theta_pred = calculate_theta(pred_vect[:, 0], pred_vect[:, 1], pred_vect[:, 2])
+ theta_true = calculate_theta(true_vect[:, 0], true_vect[:, 1], true_vect[:, 2])
+ dist = torch.sqrt(torch.sum((pred_vect - true_vect) ** 2, dim=1))
+ phidist = phi_dist(phi_pred, phi_true)
+ etadist = theta_pred - theta_true # formely eta
+ return dist, df.pid.values, phidist, etadist
+
+particle_masses = {22: 0, 11: 0.00511, 211: 0.13957, 130: 0.493677, 2212: 0.938272, 2112: 0.939565}
+particle_masses_4_class = {0: 0.00511, 1: 0.13957, 2: 0.939565, 3: 0.0} # Electron, CH, NH, photon
+
+def safeint(x):
+ # if x is nan, return nan
+ try:
+ return int(x)
+ except:
+ return x
+def calculate_response(matched, pandora, log_scale=False, tracks=False, perfect_pid=False, mass_zero=False, ML_pid=False):
+ if log_scale:
+ bins = np.exp(np.arange(np.log(0.1), np.log(80), 0.3))
+ else:
+ #bins = np.linspace(0, 51, 5)
+ bins = [0, 5, 15, 35, 51]
+ mean = []
+ variance_om = []
+ mean_baseline = []
+ variance_om_baseline = []
+ mean_true_rec = []
+ variance_om_true_rec = []
+ mean_errors = []
+ variance_om_errors = []
+ energy_resolutions = []
+ energy_resolutions_reco = []
+ distributions = [] # Distributions of E/Etrue for plotting later
+ mean_pxyz = []
+ variance_pxyz = []
+ masses = []
+ is_track_in_cluster = []
+ pxyz_true, pxyz_pred = [], []
+ sigma_phi, sigma_theta = [], [] # for the angular resolution vs. energy
+ distr_phi, distr_theta = [], []
+ binning = 1e-2
+ bins_per_binned_E = np.arange(0, 2, binning)
+ for i in range(len(bins) - 1):
+ bin_i = bins[i]
+ bin_i1 = bins[i + 1]
+ mask_above = matched["true_showers_E"] <= bin_i1
+ mask_below = matched["true_showers_E"] > bin_i
+ mask_check = ~pd.isna(matched["pred_showers_E"])
+ mask = mask_below * mask_above * mask_check
+ true_e = matched.true_showers_E[mask]
+ true_rec = matched.reco_showers_E[mask]
+ if pandora:
+ pred_e = matched.pandora_calibrated_pfo[mask]
+ pred_pxyz = np.array(matched.pandora_calibrated_pos[mask].tolist())
+ else:
+ pred_e = matched.calibrated_E[mask]
+ pred_pxyz = np.array(matched.pred_pos_matched[mask].tolist())
+ pred_e_nocor = matched.pred_showers_E[mask]
+ trk_in_clust = matched.is_track_in_cluster[mask]
+ if perfect_pid or mass_zero or ML_pid:
+ if len(pred_pxyz):
+ pred_pxyz /= np.linalg.norm(pred_pxyz, axis=1).reshape(-1, 1)
+ if perfect_pid:
+ m = np.array([particle_masses[abs(int(i))] for i in matched.pid[mask]])
+ elif ML_pid:
+ #assert not pandora
+ if pandora:
+ print("Perf. PID for Pandora")
+ m = np.array([particle_masses[abs(int(i))] for i in matched.pid[mask]])
+ else:
+ m = np.array([particle_masses_4_class.get(safeint(i), 0.0) for i in matched.pred_pid_matched[mask]])
+ if mass_zero:
+ m = np.array([0 for _ in range(len(matched.pid[mask]))])
+ p_squared = (pred_e**2 - m**2).values
+ pred_pxyz = np.sqrt(p_squared).reshape(-1, 1) * pred_pxyz
+ true_pxyz = np.array(matched.true_pos[mask].tolist())
+ bins_angle = np.linspace(-0.1, +0.1, 400)
+ if np.sum(mask) > 0: # if the bin is not empty
+ e_over_true = pred_e / true_e
+ e_over_reco = true_rec / true_e
+ e_over_reco_ML = pred_e_nocor / true_rec
+ pxyz_over_true = pred_pxyz / true_pxyz
+ dist, _, phi_dist, eta_dist = calc_unit_circle_dist(matched[mask], pandora=pandora)
+ p_size_over_true = np.linalg.norm(pred_pxyz, axis=1) / np.linalg.norm(true_pxyz, axis=1)
+ #mu, var, _, _ = get_sigma_gaussian(phi_dist, bins_angle)
+ mu, var = obtain_MPV_and_68(phi_dist, bins_angle)
+ var_phi = var * mu
+ #mu, var, _, _ = get_sigma_gaussian(eta_dist, bins_angle)
+ mu, var = obtain_MPV_and_68(eta_dist, bins_angle)
+ var_theta = var * mu
+ sigma_phi.append(var_phi)
+ sigma_theta.append(var_theta)
+ distr_theta.append(eta_dist)
+ distr_phi.append(phi_dist)
+ distributions.append(e_over_true)
+ (
+ mean_predtotrue,
+ var_predtotrue,
+ err_mean_predtotrue,
+ err_var_predtotrue,
+ ) = get_sigma_gaussian(e_over_true, bins_per_binned_E)
+ pred_ps = np.linalg.norm(pred_pxyz, axis=1)
+ masses.append((torch.tensor(pred_e.values) ** 2 - torch.tensor(pred_ps) ** 2))
+ (
+ mean_reco_true,
+ var_reco_true,
+ err_mean_reco_true,
+ err_var_reco_true,
+ ) = get_sigma_gaussian(e_over_reco, bins_per_binned_E)
+ (
+ mean_reco_ML,
+ var_reco_ML,
+ err_mean_reco_ML,
+ err_mean_var_reco_ML,
+ ) = get_sigma_gaussian(e_over_reco_ML, bins_per_binned_E)
+ if not pandora:
+ print("Not Pandora")
+ mean_pxyz_, var_pxyz_ = [], []
+ pxyz_true.append(true_pxyz)
+ pxyz_pred.append(pred_pxyz)
+ for i in [0, 1, 2]: # x, y, z
+ (
+ mean_px,
+ var_px,
+ _,
+ _,
+ ) = get_sigma_gaussian(pxyz_over_true[:, i], bins_per_binned_E)
+ mean_pxyz_.append(mean_px)
+ var_pxyz_.append(var_px)
+ (
+ mean_px,
+ var_px,
+ _,
+ _,
+ ) = get_sigma_gaussian(p_size_over_true, bins_per_binned_E)
+ mean_pxyz_.append(mean_px)
+ var_pxyz_.append(var_px)
+ #mean_pxyz_ = np.array(mean_pxyz_)
+ #var_pxyz_ = np.array(var_pxyz_)
+ # raise err if mean_reco_ML is nan
+ #if np.isnan(mean_reco_ML):
+ # raise ValueError("mean_reco_ML is nan")
+ mean_true_rec.append(mean_reco_ML)
+ variance_om_true_rec.append(np.abs(var_reco_ML))
+ mean_baseline.append(mean_reco_true)
+ variance_om_baseline.append(np.abs(var_reco_true))
+ mean.append(mean_predtotrue)
+ variance_om.append(np.abs(var_predtotrue))
+ energy_resolutions.append((bin_i1 + bin_i) / 2)
+ energy_resolutions_reco.append((bin_i1 + bin_i) / 2)
+ mean_errors.append(err_mean_predtotrue)
+ variance_om_errors.append(err_var_predtotrue)
+ mean_pxyz.append(mean_pxyz_)
+ variance_pxyz.append(var_pxyz_)
+ is_track_in_cluster.append(trk_in_clust)
+
+ return (
+ mean,
+ variance_om,
+ mean_true_rec,
+ variance_om_true_rec,
+ energy_resolutions,
+ energy_resolutions_reco,
+ mean_baseline,
+ variance_om_baseline,
+ distributions,
+ mean_errors,
+ variance_om_errors,
+ np.array(mean_pxyz),
+ np.array(variance_pxyz),
+ [masses, is_track_in_cluster],
+ pxyz_true,
+ pxyz_pred,
+ sigma_phi,
+ sigma_theta,
+ distr_phi,
+ distr_theta
+ )
+
+
+def process_element(i, bins, matched, pandora, bins_per_binned_E):
+ # Your processing logic here
+ bin_i = bins[i]
+ bin_i1 = bins[i + 1]
+ print(i)
+ mask_above = matched["reco_showers_E"] <= bin_i1
+ mask_below = matched["reco_showers_E"] > bin_i
+ mask_check = matched["pred_showers_E"] > 0
+ mask = mask_below * mask_above * mask_check
+
+ pred_e = matched.calibrated_E[mask]
+ true_rec = matched.reco_showers_E[mask]
+ if np.sum(mask) > 0: # if the bin is not empty
+ e_over_rec = pred_e / true_rec
+
+ mean_predtored, variance_om_true_rec_ = obtain_MPV_and_68(
+ e_over_rec, bins_per_binned_E
+ )
+
+ return mean_predtored, variance_om_true_rec_, (bin_i1 + bin_i) / 2
+
+
+def parallel_process(
+ vector, fixed_arg1, fixed_arg2, fixed_arg3, fixed_arg4, num_workers=16
+):
+ with concurrent.futures.ThreadPoolExecutor(max_workers=num_workers) as executor:
+ # Use executor.map to parallelize the processing of vector elements
+ results1 = list(
+ executor.map(
+ process_element,
+ vector,
+ [fixed_arg1] * len(vector),
+ [fixed_arg2] * len(vector),
+ [fixed_arg3] * len(vector),
+ [fixed_arg4] * len(vector),
+ )
+ )
+ return results1
+
+def plot_sigma_angle_vs_energy(dic, PATH_store, label, angle, title=""):
+ assert angle in ['theta', 'phi']
+ fig, ax = plt.subplots(1, 1, figsize=(14, 10))
+ E = np.array(dic["energy_resolutions"])
+ if angle == 'theta':
+ sigma = np.array(dic["sigma_theta"])
+ sigma_pandora = np.array(dic["sigma_theta_pandora"])
+ #if len(sigma_pandora) < len(sigma):
+ # sigma_pandora = np.pad(sigma_pandora, (0, len(sigma) - len(sigma_pandora)))
+ #elif len(sigma_pandora) > len(sigma):
+ # sigma = np.pad(sigma, (0, len(sigma_pandora) - len(sigma)))
+ else:
+ sigma = np.array(dic["sigma_phi"])
+ sigma_pandora = np.array(dic["sigma_phi_pandora"])
+ ax.plot(E, sigma, "--", marker=".", label="ML", color="red")
+ try:
+ ax.plot(E, sigma_pandora, "--", marker=".", label="Pandora", color="blue")
+ except:
+ print("Error plotting pandora")
+ ax.set_xlabel("Energy [GeV]")
+ if angle == "theta":
+ ax.set_ylabel(r"$\theta$ resolution")
+ else:
+ ax.set_ylabel(r"$\phi$ resolution")
+ ax.set_title(title)
+ ax.legend()
+ fig.savefig(
+ os.path.join(PATH_store, "angles_" + title + label + "-" + angle + ".pdf"),
+ bbox_inches="tight",
+ )
+
+def plot_one_label(
+ title,
+ photons_dic,
+ y_axis,
+ PATH_store,
+ label1,
+ reco,
+ tracks="",
+ fig=None,
+ ax=None,
+ save=True,
+ plot_pandora=True,
+ plot_baseline=True,
+ color=None,
+ pandora_label="Pandora"
+):
+ if reco == "":
+ label_add = " raw"
+ label_add_pandora = " corrected"
+ else:
+ label_add = " raw"
+ label_add_pandora = " raw"
+ colors_list = ["#FF0000", "#00FF00", "#0000FF"]
+ if color is not None:
+ colors_list[1] = color
+ fig_distr, ax_distr = plt.subplots(
+ len(photons_dic["energy_resolutions" + reco]), 1, figsize=(14, 18), sharex=True
+ )
+ if title == "Event Energy Resolution":
+ fig_distr, ax_distr = plt.subplots(
+ len(photons_dic["energy_resolutions" + reco]),
+ 1,
+ figsize=(14, 10),
+ sharex=True,
+ )
+ if not type(ax_distr) == list and not type(ax_distr) == np.ndarray:
+ ax_distr = [ax_distr]
+ for i in range(len(photons_dic["energy_resolutions" + reco])):
+ distr_model = photons_dic["distributions_model"][i]
+ distr_pandora = photons_dic["distributions_pandora"][i]
+ if type(distr_model) == torch.Tensor:
+ distr_model = distr_model.numpy()
+ distr_pandora = distr_pandora.numpy()
+ else:
+ distr_model = distr_model.values
+ distr_pandora = distr_pandora.values
+ max_distr_model = np.max(distr_model)
+ max_distr_pandora = np.max(distr_pandora)
+ # remove everything higher than 2.0 and note the fraction of such events
+ mask = distr_model < 2.0
+ distr_model = distr_model[mask]
+ frac_model_dropped = int(
+ (1 - len(distr_model) / len(photons_dic["distributions_model"][i])) * 1000
+ )
+ mask = distr_pandora < 2.0
+ distr_pandora = distr_pandora[mask]
+ frac_pandora_dropped = int(
+ (1 - len(distr_pandora) / len(photons_dic["distributions_pandora"][i]))
+ * 1000
+ )
+ mu = photons_dic["mean"][i]
+ sigma = (photons_dic["variance_om"][i]) * mu
+ mu_pandora = photons_dic["mean_p"][i]
+ sigma_pandora = (photons_dic["variance_om_p"][i]) * mu
+ ax_distr[i].hist(
+ distr_model,
+ bins=np.arange(0, 2, 1e-2),
+ color="blue",
+ label=r"ML $\mu={} \sigma / \mu={}$".format(round(mu, 2), round(sigma, 2)),
+ alpha=0.5,
+ histtype="step",
+ )
+ ax_distr[i].hist(
+ distr_pandora,
+ bins=np.arange(0, 2, 1e-2),
+ color="red",
+ label=r"Pandora $\mu={} \sigma / \mu={}$".format(
+ round(mu_pandora, 2), round(sigma_pandora, 2)
+ ),
+ alpha=0.5,
+ histtype="step",
+ )
+ # ALSO PLOT MU AND SIGMA #
+ ax_distr[i].axvline(mu, color="blue", linestyle="-", ymin=0.95, ymax=1.0)
+ ax_distr[i].axvline(
+ mu + sigma, color="blue", linestyle="--", ymin=0.95, ymax=1.0
+ )
+ ax_distr[i].axvline(
+ mu - sigma, color="blue", linestyle="--", ymin=0.95, ymax=1.0
+ )
+ ax_distr[i].axvline(mu_pandora, color="red", linestyle="-", ymin=0.95, ymax=1.0)
+ ax_distr[i].axvline(
+ mu_pandora + sigma_pandora, color="red", linestyle="--", ymin=0.95, ymax=1.0
+ )
+ ax_distr[i].axvline(
+ mu_pandora - sigma_pandora, color="red", linestyle="--", ymin=0.95, ymax=1.0
+ )
+ # variance_om
+ ax_distr[i].set_xlabel("E/Etrue")
+ ax_distr[i].set_xlim([0, 2])
+ ax_distr[i].set_title(
+ f"{title} {photons_dic['energy_resolutions' + reco][i]:.2f} GeV / max model: "
+ + str(max_distr_model)
+ + " / max pandora: "
+ + str(max_distr_pandora)
+ )
+ ax_distr[i].legend()
+ # ax_distr[i].set_yscale("log")
+ fig_distr.tight_layout()
+ if fig is None or ax is None:
+ fig, ax = plt.subplots(2, 1, figsize=(14, 10), sharex=False)
+ j = 0
+ ax[1].set_xlabel("Energy [GeV]", fontsize=30)
+ ax[0].set_xlabel("Energy [GeV]", fontsize=30)
+ # ax[row_i, j].set_xscale("log")
+ ax[0].set_title(title, fontsize=30)
+ ax[0].grid()
+ ax[1].grid()
+ ax[1].set_yscale("log")
+ """f y_axis == "mean":
+ # error is the mean error
+ errors = photons_dic["mean_errors"]
+ pandora_errors = photons_dic["mean_errors_p"]
+ else:
+ errors = photons_dic["variance_errors"]
+ pandora_errors = photons_dic["variance_errors_p"]"""
+ for a in ax:
+ a.errorbar(
+ photons_dic["energy_resolutions" + reco],
+ photons_dic[y_axis + reco],
+ # yerr=errors,
+ color=colors_list[1],
+ # edgecolors=colors_list[1],
+ label=label1,
+ marker="x",
+ markersize=8,
+ linestyle="None",
+ # error color
+ ecolor=colors_list[1],
+ capsize=5,
+ )
+ if plot_pandora:
+ a.errorbar(
+ photons_dic["energy_resolutions_p" + reco],
+ photons_dic[y_axis + "_p" + reco],
+ # yerr=pandora_errors,
+ color=colors_list[2],
+ # edgecolors=colors_list[2],
+ label=pandora_label,
+ marker="x",
+ markersize=8,
+ capsize=5,
+ ecolor=colors_list[2],
+ linestyle="None",
+ )
+
+ if title == "Electromagnetic Resolution" or title == "Hadronic Resolution":
+ if reco == "":
+ for a in ax:
+ if plot_baseline:
+ a.scatter(
+ photons_dic["energy_resolutions"],
+ photons_dic["variance_om_baseline"],
+ facecolors="black",
+ edgecolors="black",
+ marker=".",
+ label="Baseline",
+ s=50,
+ )
+ dic0_fit = get_fit(
+ photons_dic["energy_resolutions"], photons_dic["variance_om_baseline"]
+ )
+
+ dic1_fit = get_fit(
+ photons_dic["energy_resolutions" + reco], photons_dic[y_axis + reco]
+ )
+ dic1_fit_pandora = get_fit(
+ photons_dic["energy_resolutions_p" + reco],
+ photons_dic[y_axis + "_p" + reco],
+ )
+ if reco == "":
+ fits_l1 = [
+ # dic0_fit,
+ dic1_fit,
+ # dic1_fit_pandora,
+ ]
+ color_list_fits_l1 = [
+ # "black",
+ colors_list[1],
+ # colors_list[2],
+ ]
+ line_type_fits_l1 = ["-"] # , "-", "-."]
+ if plot_baseline:
+ fits_l1.append(dic0_fit)
+ color_list_fits_l1.append("black")
+ line_type_fits_l1.append("-")
+ if plot_pandora:
+ fits_l1.append(dic1_fit_pandora)
+ color_list_fits_l1.append(colors_list[2])
+ line_type_fits_l1.append("-.")
+ for a in ax:
+ plot_fit(fits_l1, line_type_fits_l1, color_list_fits_l1, ax=a)
+ else:
+ #raise NotImplementedError
+ line_type_fits = ["-", "-."]
+ for a in ax:
+ plot_fit(fits, line_type_fits, color_list_fits, ax=a)
+ if reco == "_reco":
+ plt.yscale("log")
+ else:
+ if title == "Electromagnetic Resolution":
+ ymax = 0.3
+ else:
+ ymax = 0.6
+ ax[0].set_ylim([0, ymax])
+ ax[1].set_ylim([0, ymax])
+ ax[0].set_xlim([0, 55])
+ ax[1].set_xlim([0, 55])
+ ylabel = r"$\frac{\sigma_{E_{reco}}}{\langle E_{reco} \rangle}$"
+ ax[0].set_ylabel(ylabel, fontsize=30)
+ ax[1].set_ylabel(ylabel, fontsize=30)
+ else:
+ ylabel = r"$\langle E_{reco} \rangle / E_{true}$"
+ ax[0].set_ylabel(ylabel, fontsize=30)
+ ax[1].set_ylabel(ylabel, fontsize=30)
+ # loc="upper right",
+ # plt.tick_params(axis="both", which="major", labelsize=40)
+ ax[0].tick_params(axis="both", which="major", labelsize=30)
+ ax[1].tick_params(axis="both", which="major", labelsize=30)
+ if title == "Electromagnetic Response" or title == "Hadronic Response":
+ ax[0].set_ylim([0.6, 1.4])
+ ax[1].set_ylim([0.6, 1.4])
+ ax[0].legend(fontsize=20) #, bbox_to_anchor=(1.05, 1), loc="upper left")
+ label = label1
+ if save:
+ fig.tight_layout()
+ fig.savefig(
+ PATH_store + title + reco + label + tracks + "_v1.pdf", bbox_inches="tight"
+ )
+ fig_distr.savefig(
+ PATH_store + title + reco + label + tracks + "_v1_distributions.pdf",
+ bbox_inches="tight",
+ )
+
+
+def plot_histograms(
+ title,
+ photons_dic,
+ fig_distr,
+ ax_distr,
+ plot_pandora,
+ prefix="ML ",
+ color="blue",
+ normalize=True,
+):
+ assert title == "Event Energy Resolution" # Fix
+ # if title == "Event Energy Resolution":
+ # fig_distr, ax_distr = plt.subplots(len(photons_dic["energy_resolutions"]), 1, figsize=(14, 10), sharex=True)
+ # if not type(ax_distr) == list and not type(ax_distr) == np.ndarray:
+ # ax_distr = [ax_distr]
+ distr_model = photons_dic["distributions_model"][0]
+ distr_pandora = photons_dic["distributions_pandora"][0]
+ if type(distr_model) == torch.Tensor:
+ distr_model = distr_model.numpy()
+ distr_pandora = distr_pandora.numpy()
+ else:
+ distr_model = distr_model.values
+ distr_pandora = distr_pandora.values
+ # max_distr_model = np.max(distr_model)
+ # max_distr_pandora = np.max(distr_pandora)
+ # remove everything higher than 2.0 and note the fraction of such events
+ mask = distr_model < 2.0
+ distr_model = distr_model[mask]
+ mask = distr_pandora < 2.0
+ distr_pandora = distr_pandora[mask]
+ mu = photons_dic["mean"][0]
+ sigma = (photons_dic["variance_om"][0]) * mu
+ mu_pandora = photons_dic["mean_p"][0]
+ sigma_pandora = (photons_dic["variance_om_p"][0]) * mu
+ ax_distr.hist(
+ distr_model,
+ bins=np.arange(0, 2, 1e-2),
+ color=color,
+ label=prefix + r"$\mu={} \sigma/\mu={}$".format(round(mu, 2), round(sigma, 2)),
+ alpha=0.5,
+ histtype="step",
+ density=normalize,
+ )
+ if plot_pandora:
+ ax_distr.hist(
+ distr_pandora,
+ bins=np.arange(0, 2, 1e-2),
+ color="red",
+ label=r"Pandora $\mu={} \sigma/\mu={}$".format(
+ round(mu_pandora, 2), round(sigma_pandora, 2)
+ ),
+ alpha=0.5,
+ histtype="step",
+ density=normalize,
+ )
+ # ALSO PLOT MU AND SIGMA #
+ ax_distr.axvline(mu, color=color, linestyle="-", ymin=0.95, ymax=1.0)
+ ax_distr.axvline(mu + sigma, color=color, linestyle="--", ymin=0.95, ymax=1.0)
+ ax_distr.axvline(mu - sigma, color=color, linestyle="--", ymin=0.95, ymax=1.0)
+ ax_distr.axvline(mu_pandora, color="red", linestyle="-", ymin=0.95, ymax=1.0)
+ ax_distr.axvline(
+ mu_pandora + sigma_pandora, color="red", linestyle="--", ymin=0.95, ymax=1.0
+ )
+ ax_distr.axvline(
+ mu_pandora - sigma_pandora, color="red", linestyle="--", ymin=0.95, ymax=1.0
+ )
+ # variance_om
+ ax_distr.set_xlabel("$E_{reco} / E_{true}$")
+ ax_distr.set_xlim([0, 2])
+ ax_distr.set_title(f"{title}")
+ ax_distr.legend()
+ ax_distr.set_yscale("log")
+ fig_distr.tight_layout()
diff --git a/src/utils/inference/plots.py b/src/utils/inference/plots.py
new file mode 100644
index 0000000000000000000000000000000000000000..c6c43f4a88c82fa30775d36962b18ed80e642f5c
--- /dev/null
+++ b/src/utils/inference/plots.py
@@ -0,0 +1,777 @@
+import matplotlib
+
+matplotlib.rc("font", size=35)
+import numpy as np
+import pandas as pd
+import matplotlib.pyplot as plt
+import mplhep as hep
+import seaborn as sns
+from scipy.optimize import curve_fit
+
+hep.style.use("CMS")
+# colors_list = ["#fff7bc", "#fec44f", "#d95f0e"]
+colors_list = ["#fde0dd", "#c994c7", "#dd1c77"] # color list poster neurips
+marker_size = 20
+
+
+def plot_for_jan(neutrals_only, dic1, dic2, dict_1, dict_2, dict_3, colors_list):
+ marker_size = 15
+ log_scale = False
+ fig = plt.figure()
+ if dic1:
+ plt.scatter(
+ dict_1["energy_resolutions"],
+ dict_1["variance_om"],
+ facecolors=colors_list[0],
+ edgecolors=colors_list[0],
+ label="HDBSCAN",
+ s=70,
+ )
+ if dic2:
+ plt.scatter(
+ dict_2["energy_resolutions"],
+ dict_2["variance_om"],
+ facecolors=colors_list[1],
+ edgecolors=colors_list[1],
+ label="GNN",
+ s=70,
+ )
+ plt.scatter(
+ dict_3["energy_resolutions"],
+ dict_3["variance_om"],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ label="Pandora",
+ marker="^",
+ s=70,
+ )
+ if log_scale:
+ plt.xlabel("Log True Energy [GeV]")
+ else:
+ plt.xlabel("True Energy [GeV]")
+ plt.ylabel("Resolution")
+ plt.grid()
+ plt.legend(loc="upper right")
+ plt.xlim([0, 21])
+ plt.yscale("log")
+ fig.tight_layout(pad=2.0)
+ if neutrals_only:
+ fig.savefig(
+ "/afs/cern.ch/work/m/mgarciam/private/mlpf/summ_results/Pandora_mix/histograms_energy_neutrals_only_jan.png",
+ bbox_inches="tight",
+ )
+ else:
+ fig.savefig(
+ "/afs/cern.ch/work/m/mgarciam/private/mlpf/summ_results/Pandora_mix/histograms_energy_jan.png",
+ bbox_inches="tight",
+ )
+
+
+def plot_eff(ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, log_scale, i, j, idx_start):
+ if dic1:
+ ax[i, j].scatter(
+ dict_1["energy_eff"][idx_start:],
+ dict_1["eff"][idx_start:],
+ facecolors=colors_list[0],
+ edgecolors=colors_list[0],
+ marker="o",
+ label="HDBSCAN",
+ s=80,
+ )
+ if dic2:
+ ax[i, j].scatter(
+ dict_2["energy_eff"][idx_start:],
+ dict_2["eff"][idx_start:],
+ facecolors=colors_list[1],
+ edgecolors=colors_list[1],
+ label="GNN",
+ s=70,
+ )
+ if dic3:
+ ax[i, j].scatter(
+ dict_3["energy_eff"][idx_start:],
+ dict_3["eff"][idx_start:],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ label="Pandora",
+ marker="^",
+ s=70,
+ )
+ # ax[i, j].axvline(x=0.5, color="b")
+ if log_scale:
+ ax[i, j].set_xlabel("Log True Energy [GeV]")
+ ax[i, j].set_xscale("log")
+ else:
+ ax[i, j].set_xlabel("True Energy [GeV]")
+ ax[i, j].set_ylabel("Efficiency")
+ ax[i, j].grid()
+ ax[i, j].legend(loc="lower right")
+ return ax
+
+
+def plot_fakes(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, log_scale, i, j, idx_start
+):
+
+ if dic1:
+ ax[i, j].scatter(
+ dict_1["energy_fakes"][idx_start:],
+ dict_1["fake_rate"][idx_start:],
+ facecolors=colors_list[0],
+ edgecolors=colors_list[0],
+ label="HDBSCAN",
+ marker="o",
+ s=80,
+ )
+ if dic2:
+ ax[i, j].scatter(
+ dict_2["energy_fakes"][idx_start:],
+ dict_2["fake_rate"][idx_start:],
+ facecolors=colors_list[1],
+ edgecolors=colors_list[1],
+ label="GNN",
+ s=70,
+ )
+ if dic3:
+ ax[i, j].scatter(
+ dict_3["energy_fakes"][idx_start:],
+ dict_3["fake_rate"][idx_start:],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ label="Pandora",
+ s=70,
+ marker="^",
+ )
+ # ax[i, j].axvline(x=0.5, color="b", label="axvline")
+ if log_scale:
+ ax[i, j].set_xlabel("Log Reconstructed Energy [GeV]")
+ ax[i, j].set_xscale("log")
+ else:
+ ax[i, j].set_xlabel("Reconstructed Energy [GeV]")
+ ax[i, j].set_ylabel("Fake rate")
+ ax[i, j].grid()
+ ax[i, j].set_yscale("log")
+ ax[i, j].legend(loc="upper right")
+ return ax
+
+
+def plot_response(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, log_scale, i, j, idx_start
+):
+ # Energy resolution is parametrized
+ if dic1:
+ ax[i, j].scatter(
+ dict_1["energy_resolutions_reco"][idx_start:],
+ dict_1["mean_true_rec"][idx_start:],
+ facecolors=colors_list[0],
+ edgecolors=colors_list[0],
+ marker="o",
+ label="HDBSCAN",
+ s=80,
+ )
+ if dic2:
+ ax[i, j].scatter(
+ dict_2["energy_resolutions_reco"][idx_start:],
+ dict_2["mean_true_rec"][idx_start:],
+ facecolors=colors_list[1],
+ edgecolors=colors_list[1],
+ label="GNN",
+ s=70,
+ )
+ if dic3:
+ ax[i, j].scatter(
+ dict_3["energy_resolutions_reco"][idx_start:],
+ dict_3["mean_true_rec"][idx_start:],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ label="Pandora",
+ marker="^",
+ s=70,
+ )
+ if log_scale:
+ ax[i, j].set_xlabel("Log Reco Energy [GeV]")
+ ax[i, j].set_xscale("log")
+ else:
+ ax[i, j].set_xlabel("Reco Energy [GeV]")
+ ax[i, j].set_ylabel("Response")
+ ax[i, j].grid()
+ ax[i, j].legend(loc="lower right")
+ return ax
+
+
+def plot_fit_energy_resolution(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, log_scale, i, j, reco=False
+):
+ if reco:
+ energies = np.array(dict_1["energy_resolutions_reco"])
+ errors = np.array(dict_1["variance_om_true_rec"])
+ else:
+ energies = np.array(dict_1["energy_resolutions"])
+ errors = np.array(dict_1["variance_om"])
+ mask = (energies > 1.0) * (errors < 0.38)
+ energies = energies[mask]
+ errors = errors[mask]
+ popt, pcov = curve_fit(resolution, energies, errors)
+ xdata = np.arange(1, 51, 0.1)
+ ax[i, j].plot(
+ xdata,
+ resolution(xdata, *popt),
+ "-",
+ c=colors_list[1],
+ label="fit GNN: a=%5.3f, b=%5.3f, c=%5.3f" % tuple(popt),
+ )
+
+ if reco:
+ energies = np.array(dict_3["energy_resolutions_reco"])
+ errors = np.array(dict_3["variance_om_true_rec"])
+ else:
+ energies = np.array(dict_3["energy_resolutions"])
+ errors = np.array(dict_3["variance_om"])
+ mask = (energies > 1.0) * (errors < 0.38)
+ energies = energies[mask]
+ errors = errors[mask]
+ popt, pcov = curve_fit(resolution, energies, errors)
+ xdata = np.arange(1, 51, 0.1)
+ ax[i, j].plot(
+ xdata,
+ resolution(xdata, *popt),
+ "-",
+ c=colors_list[2],
+ label="fit Pandora: a=%5.3f, b=%5.3f, c=%5.3f" % tuple(popt),
+ )
+ ax[i, j].legend(loc="upper right")
+ return ax
+
+
+def resolution(E, a, b, c):
+ return (a**2 / E + c**2 + b**2 / E**2) ** 0.5
+
+
+def plot_resolution(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, log_scale, i, j, idx_start
+):
+ if dic1:
+ ax[i, j].scatter(
+ dict_1["energy_resolutions_reco"][idx_start:],
+ dict_1["variance_om_true_rec"][idx_start:],
+ facecolors=colors_list[0],
+ edgecolors=colors_list[0],
+ label="HDBSCAN",
+ marker="o",
+ s=80,
+ )
+ if dic2:
+ ax[i, j].scatter(
+ dict_2["energy_resolutions_reco"][idx_start:],
+ dict_2["variance_om_true_rec"][idx_start:],
+ facecolors=colors_list[1],
+ edgecolors=colors_list[1],
+ label="GNN",
+ s=70,
+ )
+ if dic3:
+ ax[i, j].scatter(
+ dict_3["energy_resolutions_reco"][idx_start:],
+ dict_3["variance_om_true_rec"][idx_start:],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ label="Pandora",
+ marker="^",
+ s=70,
+ )
+ # ax[i, j].axvline(x=0.5, color="b", label="axvline")
+ if log_scale:
+ ax[i, j].set_xlabel("Log Reco Energy [GeV]")
+ ax[i, j].set_xscale("log")
+ else:
+ ax[i, j].set_xlabel("Reco Energy [GeV]")
+ ax[i, j].set_ylabel("Resolution")
+ ax[i, j].grid()
+ ax[i, j].set_yscale("log")
+ ax[i, j].legend(loc="upper right")
+ # ax[1, 1].set_ylim([0, 1])
+ return ax
+
+
+def plot_response_trueE(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, log_scale, i, j, idx_start
+):
+ if dic1:
+ ax[i, j].scatter(
+ dict_1["energy_resolutions"][idx_start:],
+ dict_1["mean"][idx_start:],
+ facecolors=colors_list[0],
+ edgecolors=colors_list[0],
+ label="HDBSCAN",
+ marker="o",
+ s=80,
+ )
+ if dic2:
+ ax[i, j].scatter(
+ dict_2["energy_resolutions"][idx_start:],
+ dict_2["mean"][idx_start:],
+ facecolors=colors_list[1],
+ edgecolors=colors_list[1],
+ label="GNN",
+ s=70,
+ )
+ if dic3:
+ ax[i, j].scatter(
+ dict_3["energy_resolutions"][idx_start:],
+ dict_3["mean"][idx_start:],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ label="Pandora",
+ marker="^",
+ s=70,
+ )
+ # ax[i, j].axvline(x=0.5, color="b", label="axvline")
+ if log_scale:
+ ax[i, j].set_xlabel("Log True Energy [GeV]")
+ ax[i, j].set_xscale("log")
+ else:
+ ax[i, j].set_xlabel("True Energy [GeV]")
+ ax[i, j].set_ylabel("Resolution")
+ ax[i, j].set_ylabel("Response")
+ ax[i, j].grid()
+ ax[i, j].legend(loc="lower right")
+ # ax[2, 0].set_ylim([0, 1.5])
+ return ax
+
+
+def plot_resolution_trueE(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, log_scale, i, j, idx_start
+):
+ if dic1:
+ ax[i, j].scatter(
+ dict_1["energy_resolutions"][idx_start:],
+ dict_1["variance_om"][idx_start:],
+ facecolors=colors_list[0],
+ edgecolors=colors_list[0],
+ label="HDBSCAN",
+ marker="o",
+ s=80,
+ )
+ if dic2:
+ ax[i, j].scatter(
+ dict_2["energy_resolutions"][idx_start:],
+ dict_2["variance_om"][idx_start:],
+ facecolors=colors_list[1],
+ edgecolors=colors_list[1],
+ label="GNN",
+ s=70,
+ )
+ if dic3:
+ ax[i, j].scatter(
+ dict_3["energy_resolutions"][idx_start:],
+ dict_3["variance_om"][idx_start:],
+ facecolors=colors_list[2],
+ edgecolors=colors_list[2],
+ label="Pandora",
+ marker="^",
+ s=70,
+ )
+ # ax[i, j].axvline(x=0.5, color="b", label="axvline")
+ if log_scale:
+ ax[i, j].set_xlabel("Log True Energy [GeV]")
+ ax[i, j].set_xscale("log")
+ else:
+ ax[i, j].set_xlabel("True Energy [GeV]")
+ ax[i, j].set_ylabel("Resolution")
+ ax[i, j].set_ylabel("Resolution")
+ ax[i, j].set_yscale("log")
+ ax[i, j].grid()
+ ax[i, j].legend(loc="upper right")
+ return ax
+
+
+def plot_containment(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, log_scale, i, j, idx_start
+):
+ if dic1:
+ ax[i, j].errorbar(
+ np.array(dict_1["energy_ms"])[idx_start:],
+ np.array(dict_1["fce_energy"])[idx_start:],
+ np.array(dict_1["fce_var_energy"])[idx_start:],
+ marker="o",
+ mec=colors_list[0],
+ mfc=colors_list[0],
+ ecolor=colors_list[0],
+ ms=marker_size,
+ mew=4,
+ linestyle="",
+ )
+ if dic2:
+ ax[i, j].errorbar(
+ np.array(dict_2["energy_ms"])[idx_start:],
+ np.array(dict_2["fce_energy"])[idx_start:],
+ np.array(dict_2["fce_var_energy"])[idx_start:],
+ marker=".",
+ mfc=colors_list[1],
+ mec=colors_list[1],
+ ecolor=colors_list[1],
+ ms=marker_size,
+ mew=4,
+ linestyle="",
+ )
+ if dic3:
+ # ax[i, j].axvline(x=0.5, color="b", label="axvline")
+ ax[i, j].errorbar(
+ np.array(dict_3["energy_ms"])[idx_start:],
+ np.array(dict_3["fce_energy"])[idx_start:],
+ np.array(dict_3["fce_var_energy"])[idx_start:],
+ marker="^",
+ mfc=colors_list[2],
+ mec=colors_list[2],
+ ecolor=colors_list[2],
+ ms=marker_size,
+ mew=4,
+ linestyle="",
+ )
+ if log_scale:
+ ax[i, j].set_xlabel("Log Reco Energy [GeV]")
+ ax[i, j].set_xscale("log")
+ else:
+ ax[i, j].set_xlabel("Reco Energy [GeV]")
+ ax[i, j].set_ylabel("Containment")
+ ax[i, j].grid()
+ # ax[3, 0].set_yscale("log")
+ return ax
+
+
+def plot_purity(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, log_scale, i, j, idx_start
+):
+ if dic1:
+ ax[i, j].errorbar(
+ np.array(dict_1["energy_ms"])[idx_start:],
+ np.array(dict_1["purity_energy"])[idx_start:],
+ np.array(dict_1["purity_var_energy"])[idx_start:],
+ marker="o",
+ mec=colors_list[0],
+ mfc=colors_list[0],
+ ecolor=colors_list[0],
+ ms=marker_size,
+ mew=4,
+ linestyle="",
+ )
+ if dic2:
+ ax[i, j].errorbar(
+ np.array(dict_2["energy_ms"])[idx_start:],
+ np.array(dict_2["purity_energy"])[idx_start:],
+ np.array(dict_2["purity_var_energy"])[idx_start:],
+ marker=".",
+ mec=colors_list[1],
+ mfc=colors_list[1],
+ ecolor=colors_list[1],
+ ms=marker_size,
+ mew=4,
+ linestyle="",
+ )
+ if dic3:
+ # ax[i, j].axvline(x=0.5, color="b", label="axvline")
+ ax[i, j].errorbar(
+ np.array(dict_3["energy_ms"])[idx_start:],
+ np.array(dict_3["purity_energy"])[idx_start:],
+ np.array(dict_3["purity_var_energy"])[idx_start:],
+ marker="^",
+ mec=colors_list[2],
+ mfc=colors_list[2],
+ ecolor=colors_list[2],
+ ms=marker_size,
+ mew=4,
+ linestyle="",
+ )
+
+ if log_scale:
+ ax[i, j].set_xlabel("Log Reco Energy [GeV]")
+ ax[i, j].set_xscale("log")
+ else:
+ ax[i, j].set_xlabel("Reco Energy [GeV]")
+ ax[i, j].set_ylabel("Purity")
+ ax[i, j].grid()
+ # ax[3, 1].set_yscale("log")
+ # ax[3, 1].set_ylim([0, 1.5])
+ return ax
+
+
+def plot_metrics(
+ neutrals_only,
+ dic1,
+ dic2,
+ dic3,
+ dict_1,
+ dict_2,
+ dict_3,
+ colors_list,
+ PATH_store,
+ log_scale,
+):
+ marker_size = 15
+ idx_start = 5
+ fig, ax = plt.subplots(4, 4, figsize=(9 * 4, 8 * 4))
+ # efficiency plot
+ ax = plot_eff(ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, True, 0, 0, idx_start)
+ ax = plot_eff(ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, False, 0, 2, idx_start)
+
+ # fake rates
+ ax = plot_fakes(ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, True, 0, 1, idx_start)
+ ax = plot_fakes(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, False, 0, 3, idx_start
+ )
+
+ # response
+ ax = plot_response(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, True, 1, 0, idx_start
+ )
+ ax = plot_response(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, False, 1, 2, idx_start
+ )
+
+ # resolution
+ ax = plot_resolution(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, True, 1, 1, idx_start
+ )
+ ax = plot_resolution(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, False, 1, 3, idx_start
+ )
+ # ax = plot_fit_energy_resolution(
+ # ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, log_scale, 1, 1, reco=True
+ # )
+ # ax = plot_fit_energy_resolution(
+ # ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, log_scale, 1, 3, reco=True
+ # )
+
+ # response true_e
+ ax = plot_response_trueE(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, True, 2, 0, idx_start
+ )
+ ax = plot_response_trueE(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, False, 2, 2, idx_start
+ )
+
+ # resolution true_e
+ ax = plot_resolution_trueE(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, True, 2, 1, idx_start
+ )
+ ax = plot_resolution_trueE(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, False, 2, 3, idx_start
+ )
+ # ax = plot_fit_energy_resolution(
+ # ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, log_scale, 2, 1, reco=False
+ # )
+ # ax = plot_fit_energy_resolution(
+ # ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, log_scale, 2, 3, reco=False
+ # )
+ # containment
+ ax = plot_containment(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, True, 3, 0, idx_start
+ )
+ ax = plot_containment(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, False, 3, 2, idx_start
+ )
+ # containment
+ ax = plot_purity(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, True, 3, 1, idx_start
+ )
+ ax = plot_purity(
+ ax, dic1, dict_1, dic2, dict_2, dic3, dict_3, False, 3, 3, idx_start
+ )
+
+ if neutrals_only:
+ fig.savefig(
+ PATH_store + "testeq_rec_comp_MVP_68_calibrated_neutrals_compare_to_V8.png",
+ bbox_inches="tight",
+ )
+ else:
+ fig.savefig(
+ PATH_store + "testeq_rec_comp_MVP_68_calibrated_compare_to_V8.png",
+ bbox_inches="tight",
+ )
+
+
+def plot_histograms_energy(
+ dic1, dic2, dict_1, dict_2, dict_3, neutrals_only=False, PATH_store=None
+):
+ dict_2 = dict_1
+ bins_plot_histogram = [5, 6, 10, 20]
+ bins = np.exp(np.arange(np.log(0.1), np.log(80), 0.3))
+ bins = np.arange(0, 51, 2)
+ fig, ax = plt.subplots(4, 2, figsize=(18, 25))
+
+ for i in range(0, 4):
+ bin_name = bins_plot_histogram[i]
+ sns.histplot(
+ data=np.array(dict_2["dic_histograms"][str(bin_name) + "reco"]),
+ label="MLPF",
+ stat="percent",
+ color=colors_list[1],
+ element="step",
+ binwidth=0.02,
+ fill=False,
+ ax=ax[i, 0],
+ linewidth=2,
+ )
+ sns.histplot(
+ dict_3["dic_histograms"][str(bin_name) + "reco"],
+ label="Pandora",
+ stat="percent",
+ color=colors_list[2],
+ element="step",
+ fill=False,
+ ax=ax[i, 0],
+ binwidth=0.02,
+ linewidth=2,
+ )
+ sns.histplot(
+ dict_2["dic_histograms"][str(bin_name) + "true"],
+ label="MLPF",
+ stat="percent",
+ color=colors_list[1],
+ element="step",
+ fill=False,
+ ax=ax[i, 1],
+ binwidth=0.02,
+ linewidth=2,
+ )
+ sns.histplot(
+ dict_3["dic_histograms"][str(bin_name) + "true"],
+ label="Pandora",
+ stat="percent",
+ color=colors_list[2],
+ element="step",
+ fill=False,
+ ax=ax[i, 1],
+ binwidth=0.02,
+ linewidth=2,
+ )
+
+ sns.histplot(
+ dict_2["dic_histograms"][str(bin_name) + "reco_showers"],
+ label="Reco",
+ stat="percent",
+ color=colors_list[0],
+ element="step",
+ fill=False,
+ ax=ax[i, 1],
+ binwidth=0.02,
+ linewidth=2,
+ )
+ ax[i, 1].set_xlabel("E pred / True Energy [GeV]")
+ # ax[i, 1].set_xlim([0, 2])
+ ax[i, 1].grid()
+ ax[i, 1].legend(loc="upper right")
+ ax[i, 1].set_title(
+ "["
+ + str(np.round(bins[bin_name], 2))
+ + ", "
+ + str(np.round(bins[bin_name + 1], 2))
+ + "]"
+ + " GeV"
+ )
+ ax[i, 0].set_xlabel("E pred / Reco Energy [GeV]")
+ ax[i, 0].grid()
+ ax[i, 0].set_xlim([0, 2])
+ ax[i, 0].legend(loc="upper right")
+ ax[i, 0].set_title(
+ "["
+ + str(np.round(bins[bin_name], 2))
+ + ", "
+ + str(np.round(bins[bin_name + 1], 2))
+ + "]"
+ + " GeV"
+ )
+ # ax[i, 0].set_yscale("log")
+ fig.tight_layout(pad=2.0)
+ if neutrals_only:
+ fig.savefig(
+ PATH_store + "histograms_energy_neutrals_only_iou_th.png",
+ bbox_inches="tight",
+ )
+ else:
+ fig.savefig(
+ PATH_store + "histograms_energy_iou_th.png",
+ bbox_inches="tight",
+ )
+
+
+def plot_correction(
+ dic1, dic2, dict_1, dict_2, dict_3, neutrals_only=False, PATH_store=None
+):
+ bins = np.exp(np.arange(np.log(0.1), np.log(80), 0.3))
+ bins_plot_histogram = [5, 6, 10, 20]
+ fig, ax = plt.subplots(4, 3, figsize=(9 * 3, 25))
+
+ for i in range(0, 4):
+ bin_name = bins_plot_histogram[i]
+ ax[i, 0].scatter(
+ dict_3["dic_histograms"][str(bin_name) + "pred_e"],
+ dict_3["dic_histograms"][str(bin_name) + "pred_corr_e"],
+ label="Pandora",
+ color=colors_list[2],
+ )
+ ax[i, 1].scatter(
+ dict_2["dic_histograms"][str(bin_name) + "pred_e"],
+ dict_2["dic_histograms"][str(bin_name) + "pred_corr_e"],
+ label="MLPF",
+ c=colors_list[1],
+ marker="^",
+ )
+ ax[i, 2].scatter(
+ dict_2["dic_histograms"][str(bin_name) + "reco_baseline"],
+ dict_2["dic_histograms"][str(bin_name) + "true_baseline"],
+ label="True",
+ color=colors_list[0],
+ )
+
+ ax[i, 0].set_xlabel("E pred [GeV]")
+ ax[i, 0].set_ylabel("E calibrated[GeV]")
+ ax[i, 0].grid()
+ # ax[i, 0].set_xlim([0, 2])
+ ax[i, 0].legend(loc="upper right")
+ ax[i, 0].set_title(
+ "["
+ + str(np.round(bins[bin_name], 2))
+ + ", "
+ + str(np.round(bins[bin_name + 1], 2))
+ + "]"
+ + " GeV"
+ )
+ ax[i, 1].set_xlabel("E pred [GeV]")
+ ax[i, 1].set_ylabel("E calibrated[GeV]")
+ ax[i, 1].grid()
+ # ax[i, 0].set_xlim([0, 2])
+ ax[i, 1].legend(loc="upper right")
+ ax[i, 1].set_title(
+ "["
+ + str(np.round(bins[bin_name], 2))
+ + ", "
+ + str(np.round(bins[bin_name + 1], 2))
+ + "]"
+ + " GeV"
+ )
+ ax[i, 2].set_xlabel("E pred [GeV]")
+ ax[i, 2].set_ylabel("E calibrated[GeV]")
+ ax[i, 2].grid()
+ # ax[i, 0].set_xlim([0, 2])
+ ax[i, 2].legend(loc="upper right")
+ ax[i, 2].set_title(
+ "["
+ + str(np.round(bins[bin_name], 2))
+ + ", "
+ + str(np.round(bins[bin_name + 1], 2))
+ + "]"
+ + " GeV"
+ )
+ # ax[i, 0].set_yscale("log")
+ fig.tight_layout(pad=2.0)
+ if neutrals_only:
+ fig.savefig(
+ PATH_store + "correction_energy_neutrals_only.png",
+ bbox_inches="tight",
+ )
+ else:
+ fig.savefig(
+ PATH_store + "correction_energy.png",
+ bbox_inches="tight",
+ )
diff --git a/src/utils/logger_wandb.py b/src/utils/logger_wandb.py
new file mode 100644
index 0000000000000000000000000000000000000000..6292ffeb00b173b017203b845f0182fa2020a1de
--- /dev/null
+++ b/src/utils/logger_wandb.py
@@ -0,0 +1,427 @@
+import wandb
+import numpy as np
+import torch
+from sklearn.metrics import roc_curve, roc_auc_score
+import json
+import dgl
+import matplotlib.pyplot as plt
+from sklearn.decomposition import PCA
+from torch_scatter import scatter_max
+from matplotlib.cm import ScalarMappable
+from matplotlib.colors import Normalize
+
+
+def log_wandb_init(args, data_config={}):
+ """log information about the run in the config section of wandb
+ Currently wandb is only initialized in training mode
+
+ Args:
+ args (_type_): parsed args from training
+ """
+ if args.regression_mode:
+ wandb.config.regression_mode = True
+ else:
+ wandb.config.classification_mode = True
+ wandb.config.num_epochs = args.num_epochs
+ wandb.config.args = vars(args)
+ wandb.config.graph_config = data_config.graph_config
+ wandb.config.custom_model_kwargs = data_config.custom_model_kwargs
+
+
+def log_confussion_matrix_wandb(y_true, y_score, epoch):
+ """function to log confussion matrix in the wandb.ai website
+
+ Args:
+ y_true (_type_): labels (B,)
+ y_score (_type_): probabilities (B,num_classes)
+ epoch (_type_): epoch of training so that maybe we can build slider in wandb
+ """
+ if y_score.ndim == 1:
+ y_pred = y_score > 0.5
+ else:
+ y_pred = y_score.argmax(1)
+ cm = wandb.plot.confusion_matrix(y_score, y_true=y_true)
+ wandb.log({"confussion matrix": cm})
+ # we could also log multiple cm during training but no sliding for now.
+
+
+def log_roc_curves(y_true, y_score, epoch):
+
+ # 5 classes G(0),Q(1),S(2),C(3),B(4)
+ # b tagging (b/g, b/ud, b/c)
+ _bg = create_binary_rocs(4, 0, y_true, y_score)
+ _bud = create_binary_rocs(4, 1, y_true, y_score)
+ _bc = create_binary_rocs(4, 3, y_true, y_score)
+ if len(_bg) > 0 and len(_bud) > 0 and len(_bc) > 0:
+ # this if checks if all elements are not of the same class
+ calculate_and_log_tpr_1_10_percent(_bg[0], _bg[1], "b", "g")
+ calculate_and_log_tpr_1_10_percent(_bud[0], _bud[1], "b", "ud")
+ calculate_and_log_tpr_1_10_percent(_bc[0], _bc[1], "b", "c")
+ columns = ["b vs g", "b vs ud", "b vs c"]
+ xs = [_bg[1], _bud[1], _bc[1]]
+ ys = [_bg[0], _bud[0], _bc[0]]
+ auc_ = [_bg[2], _bud[2], _bc[2]]
+ title_log = "roc b"
+ title_plot = "b tagging"
+ wandb_log_multiline_rocs(xs, ys, title_log, title_plot, columns)
+ wandb_log_auc(auc_, ["b_g", "b_ud", "b_c"])
+ else:
+ print("all batch from the same class in b", len(_bg), len(_bud), len(_bc))
+
+ # c tagging (c/g, c/ud, c/b)
+ _cg = create_binary_rocs(3, 0, y_true, y_score)
+ _cud = create_binary_rocs(3, 1, y_true, y_score)
+ _cb = create_binary_rocs(3, 4, y_true, y_score)
+ if len(_cg) > 0 and len(_cud) > 0 and len(_cb) > 0:
+ calculate_and_log_tpr_1_10_percent(_cg[0], _cg[1], "c", "g")
+ calculate_and_log_tpr_1_10_percent(_cud[0], _cud[1], "c", "ud")
+ calculate_and_log_tpr_1_10_percent(_cb[0], _cb[1], "c", "b")
+ columns = ["c vs g", "c vs ud", "c vs b"]
+ xs = [_cg[1], _cud[1], _cb[1]]
+ ys = [_cg[0], _cud[0], _cb[0]]
+ auc_ = [_cg[2], _cud[2], _cb[2]]
+ title_log = "roc c"
+ title_plot = "c tagging"
+ wandb_log_multiline_rocs(xs, ys, title_log, title_plot, columns)
+ wandb_log_auc(auc_, ["c_g", "c_ud", "c_b"])
+ else:
+ print("all batch from the same class in c", len(_cg), len(_cud), len(_cb))
+
+ # s tagging (s/g, s/ud, s/c, s/b)
+
+ _sg = create_binary_rocs(2, 0, y_true, y_score)
+ _sud = create_binary_rocs(2, 1, y_true, y_score)
+ _sc = create_binary_rocs(2, 3, y_true, y_score)
+ _sb = create_binary_rocs(2, 4, y_true, y_score)
+ if len(_sg) > 0 and len(_sud) > 0 and len(_sc) > 0 and len(_sb) > 0:
+ calculate_and_log_tpr_1_10_percent(_sg[0], _sg[1], "s", "g")
+ calculate_and_log_tpr_1_10_percent(_sud[0], _sud[1], "s", "ud")
+ calculate_and_log_tpr_1_10_percent(_sc[0], _sc[1], "s", "c")
+ calculate_and_log_tpr_1_10_percent(_sb[0], _sb[1], "s", "b")
+ columns = ["s vs g", "s vs ud", "s vs c", "s vs b"]
+ xs = [_sg[1], _sud[1], _sc[1], _sb[1]]
+ ys = [_sg[0], _sud[0], _sc[0], _sb[0]]
+ auc_ = [_sg[2], _sud[2], _sb[2]]
+ title_log = "roc s"
+ title_plot = "s tagging"
+ wandb_log_multiline_rocs(xs, ys, title_log, title_plot, columns)
+ wandb_log_auc(auc_, ["s_g", "s_ud", "s_c", "s_b"])
+ else:
+ print(
+ "all batch from the same class in s",
+ len(_sg),
+ len(_sud),
+ len(_sc),
+ len(_sb),
+ )
+
+ # g tagging (g/ud, g/s, g/c, g/b)
+ _gud = create_binary_rocs(0, 1, y_true, y_score)
+ _gs = create_binary_rocs(0, 2, y_true, y_score)
+ _gc = create_binary_rocs(0, 3, y_true, y_score)
+ _gb = create_binary_rocs(0, 4, y_true, y_score)
+ if len(_gud) > 0 and len(_gs) > 0 and len(_gc) > 0 and len(_gb) > 0:
+ calculate_and_log_tpr_1_10_percent(_gud[0], _gud[1], "g", "ud")
+ calculate_and_log_tpr_1_10_percent(_gs[0], _gs[1], "g", "s")
+ calculate_and_log_tpr_1_10_percent(_gc[0], _gc[1], "g", "c")
+ calculate_and_log_tpr_1_10_percent(_gb[0], _gb[1], "g", "b")
+ columns = ["g vs ud", "g vs s", "g vs c", "g vs b"]
+ xs = [_gud[1], _gs[1], _gc[1], _gb[1]]
+ ys = [_gud[0], _gs[0], _gc[0], _gb[0]]
+ auc_ = [_gud[2], _gs[2], _gc[2], _gb[2]]
+ title_log = "roc g"
+ title_plot = "g tagging"
+ wandb_log_multiline_rocs(xs, ys, title_log, title_plot, columns)
+ wandb_log_auc(auc_, ["g_ud", "g_s", "g_c", "g_b"])
+ else:
+ print(
+ "all batch from the same class in g",
+ len(_gud),
+ len(_gs),
+ len(_gc),
+ len(_gb),
+ )
+
+
+# def tagging_at_xpercent_misstag():
+
+
+def log_histograms(y_true_wandb, scores_wandb, counts_particles, epoch):
+ print("logging hist func")
+ y_pred = np.argmax(scores_wandb, axis=1)
+ errors_class_examples = y_true_wandb != y_pred
+ correct_class_examples = y_true_wandb == y_pred
+ errors_number_count = counts_particles[errors_class_examples]
+ correct_number_count = counts_particles[correct_class_examples]
+ #print("count", errors_number_count.shape, correct_number_count.shape)
+ data_correct = [
+ [i, correct_number_count[i]] for i in range(0, len(correct_number_count))
+ ]
+ data_errors = [
+ [i, errors_number_count[i]] for i in range(0, len(errors_number_count))
+ ]
+ table_correct = wandb.Table(
+ data=data_correct, columns=["IDs", "correct_number_count"]
+ )
+ table_errors = wandb.Table(data=data_errors, columns=["IDs", "errors_number_count"])
+
+ wandb.log({"hist_errors_count": wandb.Histogram(errors_number_count)})
+ # wandb.log({'hist_errors_count': wandb.plot.histogram(table_errors, "errors_number_count",
+ # title="Histogram errors number const")})
+
+
+def wandb_log_auc(auc_, names):
+ for i in range(0, len(auc_)):
+ name = "auc/" + names[i]
+ # logging 1-auc because we are looking at roc with flipped axis
+ wandb.log({name: 1 - auc_[i]})
+
+ return auc_
+
+
+def wandb_log_multiline_rocs(xs, ys, title_log, title_plot, columns):
+ ys_log = [np.log10(j + 1e-8) for j in ys]
+ wandb.log(
+ {
+ title_log: wandb.plot.line_series(
+ xs=xs,
+ ys=ys_log,
+ keys=columns,
+ title=title_plot,
+ xname="jet tagging efficiency",
+ )
+ }
+ )
+
+
+def find_nearest(a, a0):
+ "Element in nd array `a` closest to the scalar value `a0`"
+ idx = np.abs(a - a0).argmin()
+ return idx
+
+
+def create_binary_rocs(positive, negative, y_true, y_score):
+ mask_positive = y_true == positive
+ mask_negative = y_true == negative
+ # print(y_true.shape, np.sum(mask_positive), np.sum(mask_negative), positive, negative)
+ number_positive = len(y_true[mask_positive])
+ number_negative = len(y_true[mask_negative])
+ if number_positive > 0 and number_negative > 0:
+ # print('s',positive,negative,number_positive,number_negative)
+ y_true_positive = torch.reshape(torch.ones([number_positive]), (-1,))
+ y_true_negative = torch.reshape(torch.zeros([number_negative]), (-1,))
+ y_true_ = torch.cat((y_true_positive, y_true_negative), dim=0)
+ y_score_positive = torch.tensor(y_score[mask_positive])
+ y_score_negative = torch.tensor(y_score[mask_negative])
+ indices = torch.tensor([negative, positive])
+ y_score_positive_ = torch.index_select(y_score_positive, 1, indices)
+ y_score_negative_ = torch.index_select(y_score_negative, 1, indices)
+
+ y_scores_pos_prob = torch.exp(y_score_positive_) / torch.sum(
+ torch.exp(y_score_positive_), keepdim=True, dim=1
+ )
+ y_scores_neg_prob = torch.exp(y_score_negative_) / torch.sum(
+ torch.exp(y_score_negative_), keepdim=True, dim=1
+ )
+
+ y_prob_positiveclass = torch.reshape(y_scores_pos_prob[:, 1], (-1,))
+ y_prob_positiveclass_neg = torch.reshape(y_scores_neg_prob[:, 1], (-1,))
+
+ y_prob_positive = torch.cat(
+ (y_prob_positiveclass, y_prob_positiveclass_neg), dim=0
+ )
+
+ fpr, tpr, thrs = roc_curve(
+ y_true_.numpy(), y_prob_positive.numpy(), pos_label=1
+ )
+
+ auc_score = roc_auc_score(y_true_.numpy(), y_prob_positive.numpy())
+ return [fpr, tpr, auc_score]
+ else:
+ return []
+
+
+def calculate_and_log_tpr_1_10_percent(fpr, tpr, name_pos, name_neg):
+ idx_10_percent = find_nearest(fpr, 0.1)
+ idx_1_percent = find_nearest(fpr, 0.01)
+
+ tpr_10_percent = tpr[idx_10_percent]
+ tpr_1_percent = tpr[idx_1_percent]
+
+ name_10 = "te/" + name_pos + "_vs_" + name_neg + "_10%"
+ name_1 = "te/" + name_pos + "_vs_" + name_neg + "_1%"
+ wandb.log({name_10: tpr_10_percent, name_1: tpr_1_percent})
+
+
+def plot_clust(g, q, xj, title_prefix="", y=None, radius=None, betas=None, loss_e_frac=None):
+ graph_list = dgl.unbatch(g)
+ node_counter = 0
+ particle_counter = 0
+ fig, ax = plt.subplots(12, 10, figsize=(33, 40))
+ for i in range(0, min(12, len(graph_list))):
+ graph_eval = graph_list[i]
+ # print([g.num_nodes() for g in graph_list])
+ non = graph_eval.number_of_nodes()
+ assert non == graph_eval.ndata["h"].shape[0]
+ n_part = graph_eval.ndata["particle_number"].max().long().item()
+ particle_number = graph_eval.ndata["particle_number"]
+ # if particle_number.max() > 1:
+ # print("skipping one, only plotting events with 2 particles")
+ # continue
+ q_graph = q[node_counter : node_counter + non].flatten()
+ if betas != None:
+ beta_graph = betas[node_counter : node_counter + non].flatten()
+ hit_type = torch.argmax(graph_eval.ndata["hit_type"], dim=1).view(-1)
+ part_num = graph_eval.ndata["particle_number"].view(-1).to(torch.long)
+ q_alpha, index_alpha = scatter_max(
+ q_graph.cpu().view(-1), part_num.cpu() - 1
+ )
+ # print(part_num.unique())
+ xj_graph = xj[node_counter : node_counter + non, :].detach().cpu()
+ if len(index_alpha) == 1:
+ index_alpha = index_alpha.item()
+ clr = graph_eval.ndata["particle_number"]
+ ax[i, 2].set_title("x and y of hits")
+ xhits, yhits = (
+ graph_eval.ndata["h"][:, 0].detach().cpu(),
+ graph_eval.ndata["h"][:, 1].detach().cpu(),
+ )
+ hittype = torch.argmax(graph_eval.ndata["h"][:, [3, 4, 5, 6]], dim=1).view(
+ -1
+ )
+ clr_energy = torch.log10(graph_eval.ndata["h"][:, 7].detach().cpu())
+ ax[i, 2].scatter(xhits, yhits, c=clr.tolist(), alpha=0.2)
+ ax[i, 3].scatter(xhits, yhits, c=clr_energy.tolist(), alpha=0.2)
+ ax[i, 3].set_title("x and y of hits colored by log10 energy")
+ ax[i, 4].scatter(xhits, yhits, c=hittype.tolist(), alpha=0.2)
+ ax[i, 4].set_title("x and y of hits colored by hit type (ecal/hcal)")
+ if betas != None:
+ ax[i, 5].scatter(xhits, yhits, c=beta_graph.detach().cpu(), alpha=0.2)
+ ax[i, 5].set_title("hits coloored by beta")
+ fig.colorbar(
+ ScalarMappable(norm=Normalize(vmin=0, vmax=1)), ax=ax[i, 5]
+ ).set_label("beta")
+ ax[i, 6].hist(beta_graph.detach().cpu(), bins=100, range=(0, 1))
+ ax[i, 6].set_title("beta distr.")
+ fig.colorbar(
+ ScalarMappable(norm=Normalize(vmin=0.5, vmax=1)), ax=ax[i, 7]
+ ).set_label("beta > 0.5")
+ no_objects = len(np.unique(part_num.cpu()))
+ ax[i, 7].scatter(
+ xj_graph[:, 0][beta_graph.detach().cpu() > 0.5],
+ xj_graph[:, 1][beta_graph.detach().cpu() > 0.5],
+ c=beta_graph[beta_graph.detach().cpu() > 0.5].detach().cpu(),
+ alpha=0.2
+ )
+ # plot no_objects highest betas
+ index_highest = np.argsort(beta_graph.detach().cpu())[-no_objects:]
+ ax[i, 7].scatter(
+ xj_graph[:, 0][index_highest],
+ xj_graph[:, 1][index_highest],
+ marker="*",
+ c="red"
+ )
+ ax[i, 7].set_title("hits with beta > 0.5")
+ ax[i, 8].set_title("hits of particles that have a low loss_e_frac")
+ if loss_e_frac is not None:
+ if not isinstance(loss_e_frac, torch.Tensor):
+ loss_e_frac = torch.cat(loss_e_frac)
+ loss_e_frac_batch = loss_e_frac[particle_counter : particle_counter + n_part]
+ particle_counter += n_part
+ low_filter = torch.nonzero(loss_e_frac_batch < 0.05).flatten()
+ if not len(low_filter):
+ continue
+ ax[i, 8].set_title(loss_e_frac_batch[low_filter[0]])
+ particle_number_low = part_num[low_filter[0]]
+ # filter to particle numbers contained in particle_number_low
+ low_filter = torch.nonzero(part_num == particle_number_low).flatten().detach().cpu()
+ ax[i, 8].scatter(
+ xj_graph[:, 0],
+ xj_graph[:, 1],
+ c="gray",
+ alpha=0.2
+ )
+ ax[i, 9].scatter(
+ xj_graph[:, 0],
+ xj_graph[:, 2],
+ c="gray",
+ alpha=0.2
+ )
+ ax[i, 8].set_xlabel("X")
+ ax[i, 8].set_ylabel("Y")
+ ax[i, 9].set_xlabel("X")
+ ax[i, 9].set_ylabel("Z")
+ ax[i, 8].scatter(
+ xj_graph[:, 0][low_filter],
+ xj_graph[:, 1][low_filter],
+ c="blue",
+ alpha=0.2
+ )
+ ax[i, 9].scatter(
+ xj_graph[:, 0][low_filter],
+ xj_graph[:, 2][low_filter],
+ c="blue",
+ alpha=0.2
+ )
+ ia1 = torch.zeros(xj_graph.shape[0]).long()
+ ia2 = torch.zeros_like(ia1)
+ ia1[index_alpha] = 1.
+ ia2[low_filter] = 1.
+ ax[i, 8].scatter(
+ xj_graph[ia1, 0],
+ xj_graph[ia1, 1],
+ marker="*",
+ c="r",
+ alpha=1.0,
+ )
+ ax[i, 8].scatter(
+ xj_graph[ia1*ia2, 0],
+ xj_graph[ia1*ia2, 1],
+ marker="*",
+ c="g",
+ alpha=1.0,
+ )
+ ax[i, 9].scatter(
+ xj_graph[ia1, 0],
+ xj_graph[ia1, 2],
+ marker="*",
+ c="r",
+ alpha=1.0,
+ )
+ ax[i, 9].scatter(
+ xj_graph[ia1 * ia2, 0],
+ xj_graph[ia1 * ia2, 2],
+ marker="*",
+ c="g",
+ alpha=1.0,
+ )
+ ax[i, 0].set_title(
+ title_prefix
+ + " "
+ + str(np.unique(part_num.cpu()))
+ + " "
+ + str(len(np.unique(part_num.cpu())))
+ )
+ ax[i, 1].set_title("PCA of node features")
+ ax[i, 0].scatter(xj_graph[:, 0], xj_graph[:, 1], c=clr.tolist(), alpha=0.2)
+ if non > 1:
+ PCA_2d_node_feats = PCA(n_components=2).fit_transform(
+ graph_eval.ndata["h"].detach().cpu().numpy()
+ )
+ ax[i, 1].scatter(
+ PCA_2d_node_feats[:, 0],
+ PCA_2d_node_feats[:, 1],
+ c=clr.tolist(),
+ alpha=0.2,
+ )
+ ax[i, 0].scatter(
+ xj_graph[index_alpha, 0],
+ xj_graph[index_alpha, 1],
+ marker="*",
+ c="r",
+ alpha=1.0,
+ )
+ pos = graph_eval.ndata["pos_hits_norm"]
+ node_counter += non
+
+ return fig, ax
diff --git a/src/utils/metrics.py b/src/utils/metrics.py
new file mode 100644
index 0000000000000000000000000000000000000000..0ef6809febe057ea7cf97c6b81f2ec7cd9dcd497
--- /dev/null
+++ b/src/utils/metrics.py
@@ -0,0 +1,72 @@
+import numpy as np
+import traceback
+import sklearn.metrics as _m
+from functools import partial
+from src.logger.logger import _logger
+
+# def _bkg_rejection(y_true, y_score, sig_eff):
+# fpr, tpr, _ = _m.roc_curve(y_true, y_score)
+# idx = next(idx for idx, v in enumerate(tpr) if v > sig_eff)
+# rej = 1. / fpr[idx]
+# return rej
+#
+#
+# def bkg_rejection(y_true, y_score, sig_eff):
+# if y_score.ndim == 1:
+# return _bkg_rejection(y_true, y_score, sig_eff)
+# else:
+# num_classes = y_score.shape[1]
+# for i in range(num_classes):
+# for j in range(i + 1, num_classes):
+# weights = np.logical_or(y_true == i, y_true == j)
+# truth =
+
+
+def roc_auc_score_ovo(y_true, y_score):
+ if y_score.ndim == 1:
+ return _m.roc_auc_score(y_true, y_score)
+ else:
+ num_classes = y_score.shape[1]
+ result = np.zeros((num_classes, num_classes), dtype='float32')
+ for i in range(num_classes):
+ for j in range(i + 1, num_classes):
+ weights = np.logical_or(y_true == i, y_true == j)
+ truth = y_true == j
+ score = y_score[:, j] / np.maximum(y_score[:, i] + y_score[:, j], 1e-6)
+ result[i, j] = _m.roc_auc_score(truth, score, sample_weight=weights)
+ return result
+
+
+def confusion_matrix(y_true, y_score):
+ if y_score.ndim == 1:
+ y_pred = y_score > 0.5
+ else:
+ y_pred = y_score.argmax(1)
+ return _m.confusion_matrix(y_true, y_pred, normalize='true')
+
+
+_metric_dict = {
+ 'roc_auc_score': partial(_m.roc_auc_score, multi_class='ovo'),
+ 'roc_auc_score_matrix': roc_auc_score_ovo,
+ 'confusion_matrix': confusion_matrix,
+ }
+
+
+def _get_metric(metric):
+ try:
+ return _metric_dict[metric]
+ except KeyError:
+ return getattr(_m, metric)
+
+
+def evaluate_metrics(y_true, y_score, eval_metrics=[]):
+ results = {}
+ for metric in eval_metrics:
+ func = _get_metric(metric)
+ try:
+ results[metric] = func(y_true, y_score)
+ except Exception as e:
+ results[metric] = None
+ _logger.error(str(e))
+ _logger.debug(traceback.format_exc())
+ return
\ No newline at end of file
diff --git a/src/utils/nn/deprecated.py b/src/utils/nn/deprecated.py
new file mode 100644
index 0000000000000000000000000000000000000000..966884b212f64b0fa3d34e8871d8bd45d2151c03
--- /dev/null
+++ b/src/utils/nn/deprecated.py
@@ -0,0 +1,501 @@
+if alternate_steps is not None:
+ if not hasattr(model.mod, "current_state_alternate_steps"):
+ model.mod.current_state_alternate_steps = 0
+if alternate_steps is not None and step_count % alternate_steps == 0:
+ print("Flipping steps")
+ state = model.mod.current_state_alternate_steps
+ state = 1 - state
+ model.mod.current_state_alternate_steps = state
+ wandb.log(
+ {"current_state_alternate_steps": model.mod.current_state_alternate_steps}
+ )
+ if state == 0:
+ print("Switched to beta loss")
+ model.mod.beta_weight = (
+ 1.0 # set this to zero for no beta loss (when it's frozen)
+ )
+ model.mod.beta_exp_weight = 1.0
+ model.mod.attr_rep_weight = 0.0
+ else:
+ print("Switched to clustering loss")
+ model.mod.beta_weight = (
+ 0.0 # set this to zero for no beta loss (when it's frozen)
+ )
+ model.mod.beta_exp_weight = 0.0
+ model.mod.attr_rep_weight = 1.0
+
+
+# if clust_loss_only and calc_e_frac_loss and logwandb and local_rank == 0:
+# wandb.log(
+# {
+# "loss e frac": loss_E_frac,
+# "loss e frac true": loss_E_frac_true,
+# }
+# )
+
+if tb_helper:
+ print("tb_helper!", tb_helper)
+ tb_helper.write_scalars(
+ [
+ ("Loss/train", loss, tb_helper.batch_train_count + num_batches),
+ ]
+ )
+ if tb_helper.custom_fn:
+ with torch.no_grad():
+ tb_helper.custom_fn(
+ model_output=model_output,
+ model=model,
+ epoch=epoch,
+ i_batch=num_batches,
+ mode="train",
+ )
+
+# fig, ax = plt.subplots()
+# repulsive, attractive = (
+# lst_nonzero(losses[16].detach().cpu().flatten()),
+# lst_nonzero(losses[17].detach().cpu().flatten()),
+# )
+# ax.hist(
+# repulsive.view(-1),
+# bins=100,
+# alpha=0.5,
+# label="repulsive",
+# color="r",
+# )
+# ax.hist(
+# attractive.view(-1),
+# bins=100,
+# alpha=0.5,
+# label="attractive",
+# color="b",
+# )
+# ax.set_yscale("log")
+# ax.legend()
+# wandb.log({"rep. and att. norms": wandb.Image(fig)})
+# plt.close(fig)
+
+
+if tb_helper:
+ tb_helper.write_scalars(
+ [
+ ("Loss/train (epoch)", total_loss / num_batches, epoch),
+ ("MSE/train (epoch)", sum_sqr_err / count, epoch),
+ ("MAE/train (epoch)", sum_abs_err / count, epoch),
+ ]
+ )
+ if tb_helper.custom_fn:
+ with torch.no_grad():
+ tb_helper.custom_fn(
+ model_output=model_output,
+ model=model,
+ epoch=epoch,
+ i_batch=-1,
+ mode="train",
+ )
+ # update the batch state
+ tb_helper.batch_train_count += num_batches
+
+
+def inference_statistics(
+ model,
+ train_loader,
+ dev,
+ grad_scaler=None,
+ loss_terms=[],
+ args=None,
+ radius=0.7,
+ total_num_batches=10,
+ save_ckpt_to_folder=None,
+):
+ model.eval()
+ clust_loss_only = loss_terms[0]
+ add_energy_loss = loss_terms[1]
+ num_batches = 0
+ loss_E_fracs = []
+ loss_E_fracs_true = []
+ loss_E_fracs_true_nopart = []
+ loss_E_fracs_nopart = []
+ part_E_true = []
+ part_PID_true = []
+ betas_list = []
+ figs = []
+ reco_counts, non_reco_counts = {}, {}
+ total_counts = {}
+ with tqdm.tqdm(train_loader) as tq:
+ for batch_g, y in tq:
+ with torch.cuda.amp.autocast(enabled=grad_scaler is not None):
+ batch_g = batch_g.to(dev)
+ if args.loss_regularization:
+ model_output, loss_regularizing_neig, loss_ll = model(batch_g)
+ else:
+ model_output = model(batch_g, 1)
+ preds = model_output.squeeze()
+ (
+ loss,
+ losses,
+ loss_E_frac,
+ loss_E_frac_true,
+ loss_E_frac_nopart,
+ loss_E_frac_true_nopart,
+ ) = object_condensation_loss2(
+ batch_g,
+ model_output,
+ y,
+ clust_loss_only=clust_loss_only,
+ add_energy_loss=add_energy_loss,
+ calc_e_frac_loss=True,
+ e_frac_loss_return_particles=True,
+ q_min=args.qmin,
+ frac_clustering_loss=args.frac_cluster_loss,
+ attr_weight=args.L_attractive_weight,
+ repul_weight=args.L_repulsive_weight,
+ fill_loss_weight=args.fill_loss_weight,
+ use_average_cc_pos=args.use_average_cc_pos,
+ hgcalloss=args.hgcalloss,
+ e_frac_loss_radius=radius,
+ )
+ (
+ loss_E_frac_true,
+ particle_ids_all,
+ reco_count,
+ non_reco_count,
+ total_count,
+ ) = loss_E_frac_true
+ (
+ loss_E_frac_true_nopart,
+ particle_ids_all_nopart,
+ reco_count_nopart,
+ non_reco_count_nopart,
+ total_count_nopart,
+ ) = loss_E_frac_true_nopart
+ update_dict(reco_counts, reco_count_nopart)
+ update_dict(total_counts, total_count_nopart)
+ if len(reco_count):
+ assert len(reco_counts) >= len(reco_count_nopart)
+ update_dict(non_reco_counts, non_reco_count_nopart)
+ loss_E_fracs.append([x.cpu() for x in loss_E_frac])
+ loss_E_fracs_true.append([x.cpu() for x in loss_E_frac_true])
+ loss_E_fracs_true_nopart.append(
+ [x.cpu() for x in loss_E_frac_true_nopart]
+ )
+ loss_E_fracs_nopart.append([x.cpu() for x in loss_E_frac_nopart])
+ part_PID_true.append(
+ [
+ y[torch.tensor(pidall) - 1, 6].long()
+ for pidall in particle_ids_all
+ ]
+ )
+ part_E_true.append(
+ [y[torch.tensor(pidall) - 1, 3] for pidall in particle_ids_all]
+ )
+ if clust_loss_only:
+ clust_space_dim = 3
+ else:
+ clust_space_dim = model.mod.output_dim - 28
+ xj = model_output[:, 0:clust_space_dim]
+ # if model.mod.clust_space_norm == "twonorm":
+ # xj = torch.nn.functional.normalize(xj, dim=1)
+ # elif model.mod.clust_space_norm == "tanh":
+ # xj = torch.tanh(xj)
+ # elif model.mod.clust_space_norm == "none":
+ # pass
+ bj = torch.sigmoid(
+ torch.reshape(model_output[:, clust_space_dim], [-1, 1])
+ ) # 3: betas
+ bj = bj.clip(0.0, 1 - 1e-4)
+ q = bj.arctanh() ** 2 + args.qmin
+ fig, ax = plot_clust(
+ batch_g,
+ q,
+ xj,
+ y=y,
+ radius=radius,
+ loss_e_frac=loss_E_fracs[-1],
+ betas=bj,
+ )
+ betas = (
+ torch.sigmoid(
+ torch.reshape(preds[:, args.clustering_space_dim], [-1, 1])
+ )
+ .detach()
+ .cpu()
+ .numpy()
+ )
+ # figs.append(fig)
+ betas_list.append(betas)
+ num_batches += 1
+ if num_batches % 5 == 0 and save_ckpt_to_folder is not None:
+ Path(save_ckpt_to_folder).mkdir(parents=True, exist_ok=True)
+ loss_E_fracs_fold = [
+ item for sublist in loss_E_fracs for item in sublist
+ ]
+ loss_E_fracs_fold = torch.concat(loss_E_fracs_fold).flatten()
+ loss_E_fracs_true_fold = [
+ item for sublist in loss_E_fracs_true for item in sublist
+ ]
+ loss_E_fracs_true_fold = torch.concat(loss_E_fracs_true_fold).flatten()
+ part_E_true_fold = [item for sublist in part_E_true for item in sublist]
+ part_E_true_fold = torch.concat(part_E_true_fold).flatten()
+ part_PID_true_fold = [
+ item for sublist in part_PID_true for item in sublist
+ ]
+ part_PID_true_fold = torch.concat(part_PID_true_fold).flatten()
+ loss_E_fracs_nopart_fold = [
+ item for sublist in loss_E_fracs_nopart for item in sublist
+ ]
+ loss_E_fracs_true_nopart_fold = [
+ item for sublist in loss_E_fracs_true_nopart for item in sublist
+ ]
+ obj = {
+ "loss_e_fracs_nopart": loss_E_fracs_nopart_fold,
+ "loss_e_fracs_true_nopart": loss_E_fracs_true_nopart_fold,
+ "loss_e_fracs": loss_E_fracs_fold,
+ "loss_e_fracs_true": loss_E_fracs_true_fold,
+ "part_E_true": part_E_true_fold,
+ "part_PID_true": part_PID_true_fold,
+ "reco_counts": reco_counts,
+ "non_reco_counts": non_reco_counts,
+ "total_counts": total_counts,
+ }
+ file_to_save = os.path.join(save_ckpt_to_folder, "temp_ckpt" + ".pkl")
+ with open(file_to_save, "wb") as f:
+ pickle.dump(obj, f)
+ if num_batches >= total_num_batches:
+ break
+ # flatten the lists
+ if save_ckpt_to_folder is not None:
+ return
+ loss_E_fracs = [item for sublist in loss_E_fracs for item in sublist]
+ loss_E_fracs = torch.concat(loss_E_fracs).flatten()
+ loss_E_fracs_true = [item for sublist in loss_E_fracs_true for item in sublist]
+ loss_E_fracs_true = torch.concat(loss_E_fracs_true).flatten()
+ part_E_true = [item for sublist in part_E_true for item in sublist]
+ part_E_true = torch.concat(part_E_true).flatten()
+ part_PID_true = [item for sublist in part_PID_true for item in sublist]
+ part_PID_true = torch.concat(part_PID_true).flatten()
+ loss_E_fracs_nopart = [
+ item for sublist in loss_E_fracs_nopart for item in sublist
+ ]
+ loss_E_fracs_true_nopart = [
+ item for sublist in loss_E_fracs_true_nopart for item in sublist
+ ]
+
+ return {
+ "loss_e_fracs": loss_E_fracs,
+ "loss_e_fracs_true": loss_E_fracs_true,
+ "loss_e_fracs_nopart": loss_E_fracs_nopart,
+ "loss_e_fracs_true_nopart": loss_E_fracs_true_nopart,
+ "betas": betas_list,
+ "part_E_true": part_E_true,
+ "part_PID_true": part_PID_true,
+ "reco_counts": reco_counts,
+ "non_reco_counts": non_reco_counts,
+ "total_counts": total_counts,
+ }
+
+
+def inference(model, test_loader, dev):
+ """
+ Similar to evaluate_regression, but without the ground truth labels.
+ """
+ model.eval()
+ num_batches = 0
+ count = 0
+ results = []
+ start_time = time.time()
+ with torch.no_grad():
+ with tqdm.tqdm(test_loader) as tq:
+ for batch_g, _ in tq:
+ batch_g = batch_g.to(dev)
+ model_output = model(batch_g)
+ # preds = model_output.squeeze().float()
+ preds = model.mod.object_condensation_inference(batch_g, model_output)
+ num_batches += 1
+ results.append(preds)
+ time_diff = time.time() - start_time
+ _logger.info(
+ "Processed %d entries in total (avg. speed %.1f entries/s)"
+ % (count, count / time_diff)
+ )
+ return results
+
+ #! create output graph with shower id ndata and store it for each event
+ # if args.store_output:
+ # print("calculating clustering and matching showers")
+ # if step == 0 and local_rank == 0:
+ # create_and_store_graph_output(
+ # batch_g,
+ # model_output,
+ # y,
+ # local_rank,
+ # step,
+ # epoch,
+ # path_save=args.model_prefix + "/showers_df",
+ # store=True,
+ # )
+
+ # losses_cpu = [
+ # x.detach().to("cpu") if isinstance(x, torch.Tensor) else x
+ # for x in losses
+ # ]
+ # all_val_losses.append(losses_cpu)
+ # all_val_loss.append(loss.detach().to("cpu").item())
+
+ # pid_true, pid_pred = torch.cat(
+ # [torch.tensor(x[7]) for x in all_val_losses]
+ # ), torch.cat([torch.tensor(x[8]) for x in all_val_losses])
+ # pid_true, pid_pred = pid_true.tolist(), pid_pred.tolist()
+
+
+# , step=step)
+# if clust_loss_only and calc_e_frac_loss:
+# wandb.log(
+# {
+# "loss e frac val": loss_E_frac,
+# "loss e frac true val": loss_E_frac_true,
+# }
+# )
+# ks = sorted(list(all_val_losses[0][9].keys()))
+# concatenated = {}
+# for key in ks:
+# concatenated[key] = np.concatenate([x[9][key] for x in all_val_losses])
+# tables = {}
+# for key in ks:
+# tables[key] = concatenated[
+# key
+# ] # wandb.Table(data=[[x] for x in concatenated[key]], columns=[key])
+# wandb.log(
+# {
+# "val " + key: wandb.Histogram(clip_list(tables[key]), num_bins=100)
+# for key in ks
+# }
+# ) # , step=step)
+
+# scores = np.concatenate(scores)
+# labels = {k: _concat(v) for k, v in labels.items()}
+# metric_results = evaluate_metrics(labels[data_config.label_names[0]], scores, eval_metrics=eval_metrics)
+# _logger.info('Evaluation metrics: \n%s', '\n'.join(
+# [' - %s: \n%s' % (k, str(v)) for k, v in metric_results.items()]))
+
+
+def plot_regression_resolution(model, test_loader, dev, **kwargs):
+ model.eval()
+ results = [] # resolution results
+ pid_classification_results = []
+ with torch.no_grad():
+ with tqdm.tqdm(test_loader) as tq:
+ for batch_g, y in tq:
+ batch_g = batch_g.to(dev)
+ if args.loss_regularization:
+ model_output, loss_regularizing_neig = model(batch_g)
+ else:
+ model_output = model(batch_g)
+ resolutions, pid_true, pid_pred = model.mod.object_condensation_loss2(
+ batch_g,
+ model_output,
+ y,
+ return_resolution=True,
+ q_min=args.qmin,
+ frac_clustering_loss=0,
+ use_average_cc_pos=args.use_average_cc_pos,
+ hgcalloss=args.hgcalloss,
+ )
+ results.append(resolutions)
+ pid_classification_results.append((pid_true, pid_pred))
+ result_dict = {}
+ for key in results[0]:
+ result_dict[key] = np.concatenate([r[key] for r in results])
+ result_dict["event_by_event_accuracy"] = [
+ accuracy_score(pid_true.argmax(dim=0), pid_pred.argmax(dim=0))
+ for pid_true, pid_pred in pid_classification_results
+ ]
+ # just plot all for now
+ result = {}
+ for key in results[0]:
+ data = result_dict[key]
+ fig, ax = plt.subplots()
+ ax.hist(data, bins=100, range=(-1.5, 1.5), histtype="step", label=key)
+ ax.set_xlabel("resolution")
+ ax.set_ylabel("count")
+ ax.legend()
+ result[key] = fig
+ conf_mat = confusion_matrix(pid_true.argmax(dim=0), pid_pred.argmax(dim=0))
+ # confusion matrix
+ fig, ax = plt.subplots(figsize=(7.5, 7.5))
+ # add onehot_particle_arr as class names
+ class_names = onehot_particles_arr
+ im = ax.matshow(conf_mat, cmap=plt.cm.Blues)
+ ax.set_xticks(np.arange(len(class_names)), class_names, rotation=45)
+ ax.set_yticks(np.arange(len(class_names)), class_names)
+ result["PID_confusion_matrix"] = fig
+
+ return result
+
+
+# if args.loss_regularization:
+# wandb.log({"loss regul neigh": loss_regularizing_neig})
+# wandb.log({"loss ll": loss_ll})
+
+# if (num_batches - 1) % 100 == 0:
+# if clust_loss_only:
+# clust_space_dim = 3 # model.mod.output_dim - 1
+# else:
+# clust_space_dim = model.mod.output_dim - 28
+# bj = torch.sigmoid(
+# torch.reshape(model_output[:, clust_space_dim], [-1, 1])
+# ) # 3: betas
+# xj = model_output[:, 0:clust_space_dim] # xj: cluster space coords
+# # assert len(bj) == len(xj)
+# # if model.mod.clust_space_norm == "twonorm":
+# # xj = torch.nn.functional.normalize(
+# # xj, dim=1
+# # ) # 0, 1, 2: cluster space coords
+# # elif model.mod.clust_space_norm == "tanh":
+# # xj = torch.tanh(xj)
+# # elif model.mod.clust_space_norm == "none":
+# # pass
+
+# bj = bj.clip(0.0, 1 - 1e-4)
+# q = bj.arctanh() ** 2 + args.qmin
+# assert q.shape[0] == xj.shape[0]
+# assert batch_g.ndata["h"].shape[0] == xj.shape[0]
+# fig, ax = plot_clust(
+# batch_g,
+# q,
+# xj,
+# title_prefix="train ep. {}, batch {}".format(
+# epoch, num_batches
+# ),
+# y=y,
+# betas=bj,
+# )
+# wandb.log({"clust": wandb.Image(fig)})
+# fig.clf()
+# # if (num_batches - 1) % 500 == 0:
+# # wandb.log(
+# # {
+# # "conf_mat_train": wandb.plot.confusion_matrix(
+# # y_true=pid_true,
+# # preds=pid_pred,
+# # class_names=class_names,
+# # )
+# # }
+# # )
+# ks = sorted(list(losses[9].keys()))
+# losses_cpu = [
+# x.detach().to("cpu") if isinstance(x, torch.Tensor) else x
+# for x in losses
+# ]
+# tables = {}
+# for key in ks:
+# tables[key] = losses[9][
+# key
+# ] # wandb.Table(data=[[x] for x in losses[9][key]], columns=[key])
+# if local_rank == 0:
+# wandb.log(
+# {
+# key: wandb.Histogram(clip_list(tables[key]), num_bins=100)
+# for key, val in losses_cpu[9].items()
+# }
+# ) # , step=step_count)
+# return loss_epoch_total, losses_epoch_total
diff --git a/src/utils/nn/optimizer/lookahead.py b/src/utils/nn/optimizer/lookahead.py
new file mode 100644
index 0000000000000000000000000000000000000000..a1a752b0357d521e76bf591a07e029a5d288baae
--- /dev/null
+++ b/src/utils/nn/optimizer/lookahead.py
@@ -0,0 +1,108 @@
+import math
+import torch
+import itertools as it
+from torch.optim import Optimizer
+from collections import defaultdict
+
+
+# https://github.com/lonePatient/lookahead_pytorch/blob/1055128057408fe8533ffa30654551a317f07f0a/optimizer.py
+class Lookahead(Optimizer):
+ '''
+ PyTorch implementation of the lookahead wrapper.
+ Lookahead Optimizer: https://arxiv.org/abs/1907.08610
+ '''
+
+ def __init__(self, optimizer, alpha=0.5, k=6, pullback_momentum="none"):
+ '''
+ :param optimizer:inner optimizer
+ :param k (int): number of lookahead steps
+ :param alpha(float): linear interpolation factor. 1.0 recovers the inner optimizer.
+ :param pullback_momentum (str): change to inner optimizer momentum on interpolation update
+ '''
+ if not 0.0 <= alpha <= 1.0:
+ raise ValueError(f'Invalid slow update rate: {alpha}')
+ if not 1 <= k:
+ raise ValueError(f'Invalid lookahead steps: {k}')
+ self.optimizer = optimizer
+ self.alpha = alpha
+ self.k = k
+ self.step_counter = 0
+ assert pullback_momentum in ["reset", "pullback", "none"]
+ self.pullback_momentum = pullback_momentum
+ self.defaults = optimizer.defaults
+ self.reset()
+
+ def reset(self):
+ self.param_groups = self.optimizer.param_groups
+ self.state = defaultdict(dict)
+
+ # Cache the current optimizer parameters
+ for group in self.optimizer.param_groups:
+ for p in group['params']:
+ param_state = self.state[p]
+ param_state['cached_params'] = torch.zeros_like(p.data)
+ param_state['cached_params'].copy_(p.data)
+
+ def __getstate__(self):
+ return {
+ 'state': self.state,
+ 'optimizer': self.optimizer,
+ 'alpha': self.alpha,
+ 'step_counter': self.step_counter,
+ 'k': self.k,
+ 'pullback_momentum': self.pullback_momentum
+ }
+
+ def zero_grad(self):
+ self.optimizer.zero_grad()
+
+ def state_dict(self):
+ return self.optimizer.state_dict()
+
+ def load_state_dict(self, state_dict):
+ self.optimizer.load_state_dict(state_dict)
+ self.reset()
+
+ def _backup_and_load_cache(self):
+ """Useful for performing evaluation on the slow weights (which typically generalize better)
+ """
+ for group in self.optimizer.param_groups:
+ for p in group['params']:
+ param_state = self.state[p]
+ param_state['backup_params'] = torch.zeros_like(p.data)
+ param_state['backup_params'].copy_(p.data)
+ p.data.copy_(param_state['cached_params'])
+
+ def _clear_and_load_backup(self):
+ for group in self.optimizer.param_groups:
+ for p in group['params']:
+ param_state = self.state[p]
+ p.data.copy_(param_state['backup_params'])
+ del param_state['backup_params']
+
+ def step(self, closure=None):
+ """Performs a single Lookahead optimization step.
+ Arguments:
+ closure (callable, optional): A closure that reevaluates the model
+ and returns the loss.
+ """
+ loss = self.optimizer.step(closure)
+ self.step_counter += 1
+
+ if self.step_counter >= self.k:
+ self.step_counter = 0
+ # Lookahead and cache the current optimizer parameters
+ for group in self.optimizer.param_groups:
+ for p in group['params']:
+ param_state = self.state[p]
+ p.data.mul_(self.alpha).add_(param_state['cached_params'], alpha=1.0 - self.alpha) # crucial line
+ param_state['cached_params'].copy_(p.data)
+ if self.pullback_momentum == "pullback":
+ internal_momentum = self.optimizer.state[p]["momentum_buffer"]
+ self.optimizer.state[p]["momentum_buffer"] = internal_momentum.mul_(self.alpha).add_(
+ param_state["cached_mom"], alpha=1.0 - self.alpha)
+ param_state["cached_mom"] = self.optimizer.state[p]["momentum_buffer"]
+ elif self.pullback_momentum == "reset":
+ self.optimizer.state[p]["momentum_buffer"] = torch.zeros_like(p.data)
+
+ return loss
diff --git a/src/utils/nn/optimizer/radam.py b/src/utils/nn/optimizer/radam.py
new file mode 100644
index 0000000000000000000000000000000000000000..559f077ee850d9de8845231bc23963c2a7867bb9
--- /dev/null
+++ b/src/utils/nn/optimizer/radam.py
@@ -0,0 +1,245 @@
+import math
+import torch
+from torch.optim.optimizer import Optimizer, required
+
+# https://github.com/LiyuanLucasLiu/RAdam/blob/688cb1ec99944d52690c1034f6dcfe830b24d3fd/radam/radam.py
+class RAdam(Optimizer):
+
+ def __init__(self, params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8, weight_decay=0, degenerated_to_sgd=True):
+ if not 0.0 <= lr:
+ raise ValueError("Invalid learning rate: {}".format(lr))
+ if not 0.0 <= eps:
+ raise ValueError("Invalid epsilon value: {}".format(eps))
+ if not 0.0 <= betas[0] < 1.0:
+ raise ValueError("Invalid beta parameter at index 0: {}".format(betas[0]))
+ if not 0.0 <= betas[1] < 1.0:
+ raise ValueError("Invalid beta parameter at index 1: {}".format(betas[1]))
+
+ self.degenerated_to_sgd = degenerated_to_sgd
+ if isinstance(params, (list, tuple)) and len(params) > 0 and isinstance(params[0], dict):
+ for param in params:
+ if 'betas' in param and (param['betas'][0] != betas[0] or param['betas'][1] != betas[1]):
+ param['buffer'] = [[None, None, None] for _ in range(10)]
+ defaults = dict(lr=lr, betas=betas, eps=eps, weight_decay=weight_decay, buffer=[[None, None, None] for _ in range(10)])
+ super(RAdam, self).__init__(params, defaults)
+
+ def __setstate__(self, state):
+ super(RAdam, self).__setstate__(state)
+
+ def step(self, closure=None):
+
+ loss = None
+ if closure is not None:
+ loss = closure()
+
+ for group in self.param_groups:
+
+ for p in group['params']:
+ if p.grad is None:
+ continue
+ grad = p.grad.data.float()
+ if grad.is_sparse:
+ raise RuntimeError('RAdam does not support sparse gradients')
+
+ p_data_fp32 = p.data.float()
+
+ state = self.state[p]
+
+ if len(state) == 0:
+ state['step'] = 0
+ state['exp_avg'] = torch.zeros_like(p_data_fp32)
+ state['exp_avg_sq'] = torch.zeros_like(p_data_fp32)
+ else:
+ state['exp_avg'] = state['exp_avg'].type_as(p_data_fp32)
+ state['exp_avg_sq'] = state['exp_avg_sq'].type_as(p_data_fp32)
+
+ exp_avg, exp_avg_sq = state['exp_avg'], state['exp_avg_sq']
+ beta1, beta2 = group['betas']
+
+ exp_avg_sq.mul_(beta2).addcmul_(grad, grad, value=1 - beta2)
+ exp_avg.mul_(beta1).add_(grad, alpha=1 - beta1)
+
+ state['step'] += 1
+ buffered = group['buffer'][int(state['step'] % 10)]
+ if state['step'] == buffered[0]:
+ N_sma, step_size = buffered[1], buffered[2]
+ else:
+ buffered[0] = state['step']
+ beta2_t = beta2 ** state['step']
+ N_sma_max = 2 / (1 - beta2) - 1
+ N_sma = N_sma_max - 2 * state['step'] * beta2_t / (1 - beta2_t)
+ buffered[1] = N_sma
+
+ # more conservative since it's an approximated value
+ if N_sma >= 5:
+ step_size = math.sqrt((1 - beta2_t) * (N_sma - 4) / (N_sma_max - 4) * (N_sma - 2) / N_sma * N_sma_max / (N_sma_max - 2)) / (1 - beta1 ** state['step'])
+ elif self.degenerated_to_sgd:
+ step_size = 1.0 / (1 - beta1 ** state['step'])
+ else:
+ step_size = -1
+ buffered[2] = step_size
+
+ # more conservative since it's an approximated value
+ if N_sma >= 5:
+ if group['weight_decay'] != 0:
+ p_data_fp32.add_(p_data_fp32, alpha=-group['weight_decay'] * group['lr'])
+ denom = exp_avg_sq.sqrt().add_(group['eps'])
+ p_data_fp32.addcdiv_(exp_avg, denom, value=-step_size * group['lr'])
+ p.data.copy_(p_data_fp32)
+ elif step_size > 0:
+ if group['weight_decay'] != 0:
+ p_data_fp32.add_(p_data_fp32, alpha=-group['weight_decay'] * group['lr'])
+ p_data_fp32.add_(exp_avg, alpha=-step_size * group['lr'])
+ p.data.copy_(p_data_fp32)
+
+ return loss
+
+class PlainRAdam(Optimizer):
+
+ def __init__(self, params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8, weight_decay=0, degenerated_to_sgd=True):
+ if not 0.0 <= lr:
+ raise ValueError("Invalid learning rate: {}".format(lr))
+ if not 0.0 <= eps:
+ raise ValueError("Invalid epsilon value: {}".format(eps))
+ if not 0.0 <= betas[0] < 1.0:
+ raise ValueError("Invalid beta parameter at index 0: {}".format(betas[0]))
+ if not 0.0 <= betas[1] < 1.0:
+ raise ValueError("Invalid beta parameter at index 1: {}".format(betas[1]))
+
+ self.degenerated_to_sgd = degenerated_to_sgd
+ defaults = dict(lr=lr, betas=betas, eps=eps, weight_decay=weight_decay)
+
+ super(PlainRAdam, self).__init__(params, defaults)
+
+ def __setstate__(self, state):
+ super(PlainRAdam, self).__setstate__(state)
+
+ def step(self, closure=None):
+
+ loss = None
+ if closure is not None:
+ loss = closure()
+
+ for group in self.param_groups:
+
+ for p in group['params']:
+ if p.grad is None:
+ continue
+ grad = p.grad.data.float()
+ if grad.is_sparse:
+ raise RuntimeError('RAdam does not support sparse gradients')
+
+ p_data_fp32 = p.data.float()
+
+ state = self.state[p]
+
+ if len(state) == 0:
+ state['step'] = 0
+ state['exp_avg'] = torch.zeros_like(p_data_fp32)
+ state['exp_avg_sq'] = torch.zeros_like(p_data_fp32)
+ else:
+ state['exp_avg'] = state['exp_avg'].type_as(p_data_fp32)
+ state['exp_avg_sq'] = state['exp_avg_sq'].type_as(p_data_fp32)
+
+ exp_avg, exp_avg_sq = state['exp_avg'], state['exp_avg_sq']
+ beta1, beta2 = group['betas']
+
+ exp_avg_sq.mul_(beta2).addcmul_(grad, grad, value=1 - beta2)
+ exp_avg.mul_(beta1).add_(grad, alpha=1 - beta1)
+
+ state['step'] += 1
+ beta2_t = beta2 ** state['step']
+ N_sma_max = 2 / (1 - beta2) - 1
+ N_sma = N_sma_max - 2 * state['step'] * beta2_t / (1 - beta2_t)
+
+
+ # more conservative since it's an approximated value
+ if N_sma >= 5:
+ if group['weight_decay'] != 0:
+ p_data_fp32.add_(p_data_fp32, alpha=-group['weight_decay'] * group['lr'])
+ step_size = group['lr'] * math.sqrt((1 - beta2_t) * (N_sma - 4) / (N_sma_max - 4) * (N_sma - 2) / N_sma * N_sma_max / (N_sma_max - 2)) / (1 - beta1 ** state['step'])
+ denom = exp_avg_sq.sqrt().add_(group['eps'])
+ p_data_fp32.addcdiv_(exp_avg, denom, value=-step_size)
+ p.data.copy_(p_data_fp32)
+ elif self.degenerated_to_sgd:
+ if group['weight_decay'] != 0:
+ p_data_fp32.add_(p_data_fp32, alpha=-group['weight_decay'] * group['lr'])
+ step_size = group['lr'] / (1 - beta1 ** state['step'])
+ p_data_fp32.add_(exp_avg, alpha=-step_size)
+ p.data.copy_(p_data_fp32)
+
+ return loss
+
+
+class AdamW(Optimizer):
+
+ def __init__(self, params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8, weight_decay=0, warmup = 0):
+ if not 0.0 <= lr:
+ raise ValueError("Invalid learning rate: {}".format(lr))
+ if not 0.0 <= eps:
+ raise ValueError("Invalid epsilon value: {}".format(eps))
+ if not 0.0 <= betas[0] < 1.0:
+ raise ValueError("Invalid beta parameter at index 0: {}".format(betas[0]))
+ if not 0.0 <= betas[1] < 1.0:
+ raise ValueError("Invalid beta parameter at index 1: {}".format(betas[1]))
+
+ defaults = dict(lr=lr, betas=betas, eps=eps,
+ weight_decay=weight_decay, warmup = warmup)
+ super(AdamW, self).__init__(params, defaults)
+
+ def __setstate__(self, state):
+ super(AdamW, self).__setstate__(state)
+
+ def step(self, closure=None):
+ loss = None
+ if closure is not None:
+ loss = closure()
+
+ for group in self.param_groups:
+
+ for p in group['params']:
+ if p.grad is None:
+ continue
+ grad = p.grad.data.float()
+ if grad.is_sparse:
+ raise RuntimeError('Adam does not support sparse gradients, please consider SparseAdam instead')
+
+ p_data_fp32 = p.data.float()
+
+ state = self.state[p]
+
+ if len(state) == 0:
+ state['step'] = 0
+ state['exp_avg'] = torch.zeros_like(p_data_fp32)
+ state['exp_avg_sq'] = torch.zeros_like(p_data_fp32)
+ else:
+ state['exp_avg'] = state['exp_avg'].type_as(p_data_fp32)
+ state['exp_avg_sq'] = state['exp_avg_sq'].type_as(p_data_fp32)
+
+ exp_avg, exp_avg_sq = state['exp_avg'], state['exp_avg_sq']
+ beta1, beta2 = group['betas']
+
+ state['step'] += 1
+
+ exp_avg_sq.mul_(beta2).addcmul_(grad, grad, value=1 - beta2)
+ exp_avg.mul_(beta1).add_(grad, alpha=1 - beta1)
+
+ denom = exp_avg_sq.sqrt().add_(group['eps'])
+ bias_correction1 = 1 - beta1 ** state['step']
+ bias_correction2 = 1 - beta2 ** state['step']
+
+ if group['warmup'] > state['step']:
+ scheduled_lr = 1e-8 + state['step'] * group['lr'] / group['warmup']
+ else:
+ scheduled_lr = group['lr']
+
+ step_size = scheduled_lr * math.sqrt(bias_correction2) / bias_correction1
+
+ if group['weight_decay'] != 0:
+ p_data_fp32.add_(p_data_fp32, alpha=-group['weight_decay'] * scheduled_lr)
+
+ p_data_fp32.addcdiv_(exp_avg, denom, value=-step_size)
+
+ p.data.copy_(p_data_fp32)
+
+ return loss
diff --git a/src/utils/nn/optimizer/ranger.py b/src/utils/nn/optimizer/ranger.py
new file mode 100644
index 0000000000000000000000000000000000000000..eb36e003440e524702f13b8a4d488f74bb332a96
--- /dev/null
+++ b/src/utils/nn/optimizer/ranger.py
@@ -0,0 +1,11 @@
+from .radam import RAdam
+from .lookahead import Lookahead
+
+
+def Ranger(params,
+ lr=1e-3, # lr
+ betas=(.95, 0.999), eps=1e-5, weight_decay=0, # RAdam options
+ alpha=0.5, k=6, # LookAhead options
+ ):
+ radam = RAdam(params, lr=lr, betas=betas, eps=eps, weight_decay=weight_decay)
+ return Lookahead(radam, alpha, k)
diff --git a/src/utils/nn/tools_condensation.py b/src/utils/nn/tools_condensation.py
new file mode 100644
index 0000000000000000000000000000000000000000..73b289ec795a581657d738fed466b45e301ce6dc
--- /dev/null
+++ b/src/utils/nn/tools_condensation.py
@@ -0,0 +1,459 @@
+import numpy as np
+import awkward as ak
+import tqdm
+import time
+import torch
+from collections import defaultdict, Counter
+
+from src.utils.metrics import evaluate_metrics
+from src.data.tools import _concat
+from src.logger.logger import _logger
+from torch_scatter import scatter_sum, scatter_max
+import wandb
+import matplotlib.pyplot as plt
+from sklearn.metrics import accuracy_score
+from sklearn.metrics import confusion_matrix
+from pathlib import Path
+from src.layers.object_cond import calc_eta_phi
+import os
+import pickle
+from src.dataset.functions_data import get_batch, get_corrected_batch
+from src.plotting.plot_event import plot_batch_eval_OC, get_labels_jets
+from src.jetfinder.clustering import get_clustering_labels
+from src.evaluation.clustering_metrics import compute_f1_score_from_result
+from src.utils.train_utils import get_target_obj_score, plot_obj_score_debug # for debugging only!
+from src.layers.object_cond import loss_func_aug
+
+def train_epoch(
+ args,
+ model,
+ loss_func,
+ gt_func,
+ opt,
+ scheduler,
+ train_loader,
+ dev,
+ epoch,
+ grad_scaler=None,
+ local_rank=0,
+ current_step=0,
+ val_loader=None,
+ batch_config=None,
+ val_dataset=None,
+ obj_score_model=None,
+ opt_obj_score=None,
+ sched_obj_score=None,
+ train_loader_aug=None, # if it's not None, it will also use the augmented events for the IRC safety loss term
+):
+ if obj_score_model is None:
+ model.train()
+ else:
+ obj_score_model.train()
+ step_count = current_step
+ start_time = time.time()
+ prev_time = time.time()
+ if train_loader_aug is not None:
+ train_loader_aug = iter(train_loader_aug)
+ for event_batch in tqdm.tqdm(train_loader):
+ time_preprocess_start = time.time()
+ y = gt_func(event_batch)
+ batch, y = get_batch(event_batch, batch_config, y)
+ if train_loader_aug is not None:
+ event_batch_aug = next(train_loader_aug)
+ assert event_batch_aug.pfcands.original_particle_mapping.max() < len(event_batch.pfcands), f"The original particle mapping out of bounds: {event_batch_aug.pfcands_original_particle_mapping.max()} >= {len(event_batch.pfcands)}"
+ if len(batch.dropped_batches):
+ print("Dropped batches:", batch.dropped_batches, " - skipping this iteration")
+ # Quicker this than to implement all the indexing complications from dropped batches
+ continue
+ y_aug = gt_func(event_batch_aug)
+ #print("len(event_batch_aug):", len(event_batch_aug))
+ #print("len(event_batch):", len(event_batch))
+ #print("number of pfcands:", len(event_batch.pfcands.pt), len(event_batch_aug.pfcands.pt))
+ batch_aug, y_aug = get_batch(event_batch_aug, batch_config, y_aug)
+ time_preprocess_end = time.time()
+ step_count += 1
+ y = y.to(dev)
+ opt.zero_grad()
+ if obj_score_model is not None:
+ opt_obj_score.zero_grad()
+ torch.autograd.set_detect_anomaly(True)
+ with torch.cuda.amp.autocast(enabled=grad_scaler is not None):
+ batch.to(dev)
+ if train_loader_aug is not None:
+ batch_aug.to(dev)
+ model_forward_time_start = time.time()
+ if obj_score_model is not None:
+ with torch.no_grad():
+ y_pred = model(batch) # Only train the objectness score model
+ else:
+ y_pred = model(batch)
+ if train_loader_aug is not None:
+ y_pred_aug = model(batch_aug)
+ model_forward_time_end = time.time()
+ loss, loss_dict = loss_func(batch, y_pred, y)
+ if train_loader_aug is not None:
+ loss_aug = loss_func_aug(y_pred, y_pred_aug, batch, batch_aug, event_batch, event_batch_aug)
+ loss += loss_aug * 100.0
+ loss_dict["loss_IRC"] = loss_aug
+ loss_time_end = time.time()
+ wandb.log({
+ "time_preprocess": time_preprocess_end - time_preprocess_start,
+ "time_model_forward": model_forward_time_end - model_forward_time_start,
+ "time_loss": loss_time_end - model_forward_time_end,
+ }, step=step_count)
+ if obj_score_model is not None:
+ # Compute the objectness score
+ coords = y_pred[:, 1:4]
+ # TODO: update this to match the model architecture, as it's written here it's only suitable for L-GATr
+ _, clusters, event_idx_clusters = get_clustering_labels(coords.detach().cpu().numpy(),
+ batch.batch_idx.detach().cpu().numpy(),
+ min_cluster_size=args.min_cluster_size,
+ min_samples=args.min_samples, epsilon=args.epsilon,
+ return_labels_event_idx=True)
+ # Loop through the events in a batch
+ input_pxyz = event_batch.pfcands.pxyz[batch.filter.cpu()]
+ #input_pt = torch.sqrt(torch.sum(input_pxyz[:, :2] ** 2, dim=-1))
+ clusters_pxyz = scatter_sum(input_pxyz, torch.tensor(clusters) + 1, dim=0)[1:]
+ #clusters_highest_pt_particle = scatter_max(input_pt, torch.tensor(clusters) + 1, dim=0)[0][1:]
+ clusters_eta, clusters_phi = calc_eta_phi(clusters_pxyz, return_stacked=False)
+ #pfcands_eta, pfcands_phi = calc_eta_phi(input_pxyz, return_stacked=False)
+ clusters_pt = torch.norm(clusters_pxyz[:, :2], dim=-1)
+ filter = clusters_pt >= 100 # Don't train on the clusters that eventually get cut off
+ batch_corr = get_corrected_batch(batch, clusters, test=False)
+ if not args.global_features_obj_score:
+ objectness_score = obj_score_model(batch_corr)[filter].flatten() # Obj. score is [0, 1]
+ else:
+ objectness_score = obj_score_model(batch_corr, batch, clusters)[filter].flatten()
+ target_obj_score = get_target_obj_score(clusters_eta[filter], clusters_phi[filter], clusters_pt[filter],
+ torch.tensor(event_idx_clusters)[filter], y.dq_eta, y.dq_phi,
+ y.dq_coords_batch_idx, gt_mode=args.objectness_score_gt_mode)
+ #target_obj_score = clusters_highest_pt_particle[filter].to(objectness_score.device)
+ #fig = plot_obj_score_debug(y.dq_eta, y.dq_phi, y.dq_coords_batch_idx, clusters_eta[filter], clusters_phi[filter], clusters_pt[filter],
+ # torch.tensor(event_idx_clusters)[filter], target_obj_score, input_pxyz, batch.batch_idx.detach().cpu(), torch.tensor(clusters), objectness_score)
+ #fig.savefig(os.path.join(args.run_path, "obj_score_debug_{}.pdf".format(step_count)))
+ n_positive, n_negative = target_obj_score.sum(), (1-target_obj_score).sum()
+ # set weights for the loss according to the class imbalance
+ #pos_weight = n_negative / (n_positive + n_negative)
+ #neg_weight = n_positive / (n_positive + n_negative)
+ n_all = n_positive + n_negative
+ pos_weight = n_all / n_positive if n_positive > 0 else 0
+ neg_weight = n_all / n_negative if n_negative > 0 else 0
+ #print("Positive weight:", pos_weight, "Negative weight:", neg_weight)
+ #weight = pos_weight * target_obj_score + neg_weight * (1 - target_obj_score)
+ # Weights for BCELoss: per-element weight
+ weights = torch.where(target_obj_score == 1, pos_weight, neg_weight)
+ print("N positive:", n_positive.item(), "N negative:", n_negative.item())
+ print("First 20 predictions:", objectness_score[:20], "First 20 targets:", target_obj_score[:20])
+ objectness_score = objectness_score.clamp(min=-10, max=10)
+ target_obj_score = target_obj_score.to(objectness_score.device)
+ weights = weights.to(objectness_score.device)
+ ##### TEMPORARY: PREDICT HIGHEST PT OF PARTICLE !!!!!! ######
+ #loss_obj_score = torch.mean(torch.square(target_obj_score - objectness_score)) # temporarily just regress the highest pt particle to check for expresiveness of the model
+ loss_obj_score = torch.nn.BCEWithLogitsLoss(weight=weights)(objectness_score, target_obj_score)
+ #loss_obj_score = torch.mean(weights * (objectness_score - target_obj_score) ** 2)
+ loss = loss_obj_score
+ loss_dict["loss_obj_score"] = loss_obj_score
+ if obj_score_model is None:
+ if grad_scaler is None:
+ loss.backward()
+ opt.step()
+ else:
+ grad_scaler.scale(loss).backward()
+ grad_scaler.step(opt)
+ grad_scaler.update()
+ else:
+ if grad_scaler is None:
+ loss.backward()
+ opt_obj_score.step()
+ else:
+ grad_scaler.scale(loss).backward()
+ grad_scaler.step(opt_obj_score)
+ grad_scaler.update()
+ step_end_time = time.time()
+ loss = loss.item()
+ wandb.log({key: value.detach().cpu().item() for key, value in loss_dict.items()}, step=step_count)
+ wandb.log({"loss": loss}, step=step_count)
+ del loss_dict
+ del loss
+ if (local_rank == 0) and (step_count % args.validation_steps) == 0:
+ dirname = args.run_path
+ if obj_score_model is None:
+ model_state_dict = (
+ model.module.state_dict()
+ if isinstance(
+ model,
+ (
+ torch.nn.DataParallel,
+ torch.nn.parallel.DistributedDataParallel,
+ ),
+ )
+ else model.state_dict()
+ )
+ state_dict = {"model": model_state_dict, "optimizer": opt.state_dict(), "scheduler": scheduler.state_dict()}
+ path = os.path.join(dirname, "step_%d_epoch_%d.ckpt" % (step_count, epoch))
+ torch.save(
+ state_dict,
+ path
+ )
+ else:
+ model_state_dict = (
+ obj_score_model.module.state_dict()
+ if isinstance(
+ model,
+ (
+ torch.nn.DataParallel,
+ torch.nn.parallel.DistributedDataParallel,
+ ),
+ )
+ else obj_score_model.state_dict()
+ )
+ sched_sd = {}
+ if sched_obj_score is not None:
+ sched_sd = sched_obj_score.state_dict()
+ state_dict = {"model": model_state_dict, "optimizer": opt_obj_score.state_dict(),
+ "scheduler": sched_sd}
+ path = os.path.join(dirname, "OS_step_%d_epoch_%d.ckpt" % (step_count, epoch))
+ torch.save(
+ state_dict,
+ path
+ )
+ res = evaluate(
+ model,
+ val_loader,
+ dev,
+ epoch,
+ step_count,
+ loss_func=loss_func,
+ gt_func=gt_func,
+ local_rank=local_rank,
+ args=args,
+ batch_config=batch_config,
+ predict=False,
+ model_obj_score=obj_score_model
+ )
+ if obj_score_model is not None:
+ res, res_obj_score, res_obj_score1 = res
+ # TODO: use the obj score here for quick evaluation
+ f1 = compute_f1_score_from_result(res, val_dataset)
+ wandb.log({"val_f1_score": f1}, step=step_count)
+ if args.num_steps != -1 and step_count >= args.num_steps:
+ print("Quitting training as the required number of steps has been reached.")
+ return "quit_training"
+ #_logger.info(
+ # "Epoch %d, step %d: loss=%.5f, time=%.2fs"
+ # % (epoch, step_count, loss, step_end_time - prev_time)
+ #)
+ time_diff = time.time() - start_time
+ return step_count
+
+
+def evaluate(
+ model,
+ eval_loader,
+ dev,
+ epoch,
+ step,
+ loss_func,
+ gt_func,
+ local_rank=0,
+ args=None,
+ batch_config=None,
+ predict=False,
+ model_obj_score=None # if not None, it will compute the objectness score of each cluster using the proposed method
+):
+ model.eval()
+ count = 0
+ start_time = time.time()
+ total_loss = 0
+ total_loss_dict = {}
+ plot_batches = [0, 1]
+ n_batches = 0
+ if predict or True: # predict also on validation set
+ predictions = {
+ "event_idx": [],
+ "GT_cluster": [],
+ "pred": [],
+ "eta": [],
+ "phi": [],
+ "pt": [],
+ "mass": [],
+ "AK8_cluster": [],
+ #"radius_cluster_GenJets": [],
+ #"radius_cluster_FatJets": [],
+ "model_cluster": [],
+ #"event_clusters_idx": []
+ }
+ if model_obj_score is not None:
+ obj_score_predictions = []
+ obj_score_targets = []
+ predictions["event_clusters_idx"] = []
+ if args.beta_type != "pt+bc":
+ del predictions["BC_score"]
+ last_event_idx = 0
+ with torch.no_grad():
+ with tqdm.tqdm(eval_loader) as tq:
+ for event_batch in tq:
+ count += event_batch.n_events # number of samples
+ y = gt_func(event_batch)
+ batch, y = get_batch(event_batch, batch_config, y, test=predict)
+ pfcands = event_batch.pfcands
+ if args.parton_level:
+ pfcands = event_batch.final_parton_level_particles
+ elif args.gen_level:
+ pfcands = event_batch.final_gen_particles
+ y = y.to(dev)
+ batch = batch.to(dev)
+ y_pred = model(batch)
+ if not predict:
+ loss, loss_dict = loss_func(batch, y_pred, y)
+ loss = loss.item()
+ total_loss += loss
+ for key in loss_dict:
+ if key not in total_loss_dict:
+ total_loss_dict[key] = 0
+ total_loss_dict[key] += loss_dict[key].item()
+ del loss_dict
+ if n_batches in plot_batches and not predict: # don't plot these for prediction - they are useful in training
+ plot_folder = os.path.join(args.run_path, "eval_plots", "epoch_" + str(epoch) + "_step_" + str(step))
+ Path(plot_folder).mkdir(parents=True, exist_ok=True)
+ if args.loss == "quark_distance":
+ label_true = y.labels_no_renumber.detach().cpu()
+ elif args.train_objectness_score:
+ label_true = y.labels.detach().cpu()
+ else:
+ label_true = y.detach().cpu()
+ #plot_batch_eval_OC(event_batch, label_true,
+ # y_pred.detach().cpu(), batch.batch_idx.detach().cpu(),
+ # os.path.join(plot_folder, "batch_" + str(n_batches) + ".pdf"),
+ # args=args, batch=n_batches, dropped_batches=batch.dropped_batches)
+ n_batches += 1
+ if not predict:
+ tq.set_postfix(
+ {
+ "Loss": "%.5f" % loss,
+ "AvgLoss": "%.5f" % (total_loss / n_batches),
+ }
+ )
+ if predict or True:
+ #print("Last event idx =", last_event_idx)
+ #print("Batch idx =", batch.batch_idx.tolist())
+ event_idx = batch.batch_idx + last_event_idx
+ #print("Event idx:", event_idx)
+ predictions["event_idx"].append(event_idx)
+ if not model_obj_score:
+ predictions["GT_cluster"].append(y.detach().cpu())
+ else:
+ predictions["GT_cluster"].append(y.labels.detach().cpu())
+ predictions["pred"].append(y_pred.detach().cpu())
+ predictions["eta"].append(pfcands.eta.detach().cpu())
+ predictions["phi"].append(pfcands.phi.detach().cpu())
+ predictions["pt"].append(pfcands.pt.detach().cpu())
+ predictions["AK8_cluster"].append(event_batch.pfcands.pf_cand_jet_idx.detach().cpu())
+ #predictions["radius_cluster_GenJets"].append(get_labels_jets(event_batch, event_batch.pfcands, event_batch.genjets).detach().cpu())
+ #predictions["radius_cluster_FatJets"].append(get_labels_jets(event_batch, event_batch.pfcands, event_batch.fatjets).detach().cpu())
+ predictions["mass"].append(pfcands.mass.detach().cpu())
+ if predictions["pred"][-1].shape[1] == 4:
+ coords = predictions["pred"][-1][:, :3]
+ else:
+ coords = predictions["pred"][-1][:, 1:4]
+ #if model_obj_score is None:
+ clustering_labels = torch.tensor(
+ get_clustering_labels(
+ coords.detach().cpu().numpy(),
+ event_idx.detach().cpu().numpy(),
+ min_cluster_size=args.min_cluster_size,
+ min_samples=args.min_samples,
+ epsilon=args.epsilon,
+ return_labels_event_idx=False)
+ )
+ if model_obj_score is not None:
+ _, clusters, event_idx_clusters = get_clustering_labels(coords.detach().cpu().numpy(),
+ batch.batch_idx.detach().cpu().numpy(),
+ min_cluster_size=args.min_cluster_size,
+ min_samples=args.min_samples,
+ epsilon=args.epsilon,
+ return_labels_event_idx=True)
+ assert len(event_idx_clusters) == clusters.max() + 1
+ batch_corr = get_corrected_batch(batch, clusters, test=predict)
+ input_pxyz = pfcands.pxyz[batch.filter.cpu()]
+ clusters_pxyz = scatter_sum(input_pxyz, torch.tensor(clusters) + 1, dim=0)[1:]
+ clusters_eta, clusters_phi = calc_eta_phi(clusters_pxyz, return_stacked=False)
+ # pfcands_eta, pfcands_phi = calc_eta_phi(input_pxyz, return_stacked=False)
+ clusters_pt = torch.norm(clusters_pxyz[:, :2], dim=-1)
+ filter = clusters_pt >= 100 # Don't train on the clusters that eventually get cut off
+ if not args.global_features_obj_score:
+ objectness_score = model_obj_score(batch_corr)
+ else:
+ objectness_score = model_obj_score(batch_corr, batch, clusters)
+ obj_score_predictions.append(objectness_score.detach().cpu())
+ target_obj_score = get_target_obj_score(clusters_eta[filter], clusters_phi[filter],
+ clusters_pt[filter],
+ torch.tensor(event_idx_clusters)[filter], y.dq_eta,
+ y.dq_phi, y.dq_coords_batch_idx, gt_mode=args.objectness_score_gt_mode) # [filter]
+ n_positive, n_negative = target_obj_score.sum(), (1 - target_obj_score.float()).sum()
+ # set weights for the loss according to the class imbalance
+ # pos_weight = n_negative / (n_positive + n_negative)
+ # neg_weight = n_positive / (n_positive + n_negative)
+ n_all = n_positive + n_negative
+ pos_weight = n_all / n_positive if n_positive > 0 else 0
+ neg_weight = n_all / n_negative if n_negative > 0 else 0
+
+ # Weights for BCELoss: per-element weight
+ weights = torch.where(target_obj_score == 1, pos_weight, neg_weight)
+ print("N positive (eval):", n_positive.item(), "N negative (eval):", n_negative.item())
+ print("First 10 predictions (eval):", objectness_score[:20], "First 10 targets (eval):",
+ target_obj_score[:20])
+ objectness_score = objectness_score.clamp(min=-10, max=10)
+ target_obj_score = target_obj_score.to(objectness_score.device)
+ #print(target_obj_score.device, filter.device, objectness_score.device, weights.device)
+ weights = weights.to(objectness_score.device)
+ filter = filter.to(objectness_score.device)
+ loss_obj_score = torch.nn.BCEWithLogitsLoss(weight=weights)(objectness_score.flatten()[filter], target_obj_score.flatten()).cpu().item()
+ # compute ROC AUC
+ obj_score_targets.append(target_obj_score)
+ k = "val_loss_obj_score"
+ if k not in total_loss_dict:
+ total_loss_dict[k] = 0
+ total_loss_dict[k] += loss_obj_score
+ predictions["event_clusters_idx"].append(torch.tensor(event_idx_clusters) + last_event_idx)
+ # loss_obj_score = torch.mean(weights * (objectness_score - target_obj_score) ** 2)
+ predictions["model_cluster"].append(
+ torch.tensor(clustering_labels)
+ )
+ last_event_idx = count
+ if event_idx.max().item() + 1 != last_event_idx:
+ print(f"event_idx.max() = {event_idx.max().item()}, last_event_idx = {last_event_idx} - the eval would have failed here before the update")
+ #print("Setting new last_event_idx to", last_event_idx)
+ if local_rank == 0 and not predict:
+ wandb.log({"val_loss": total_loss / n_batches}, step=step)
+ wandb.log({"val_" + key: value / n_batches for key, value in total_loss_dict.items()}, step=step)
+
+ time_diff = time.time() - start_time
+ _logger.info(
+ "Evaluated on %d samples in total (avg. speed %.1f samples/s)"
+ % (count, count / time_diff)
+ )
+ if predict or True:
+ #for key in predictions:
+ # predictions[key] = torch.cat(predictions[key], dim=0)
+ #predictions = {key: torch.cat(predictions[key], dim=0) for key in predictions}
+ predictions_1 = {}
+ for key in predictions:
+ #print("key", key, predictions[key])
+ predictions_1[key] = torch.cat(predictions[key], dim=0)
+ predictions = predictions_1
+ #predictions["event_idx"] = torch.cat(predictions["event_idx"], dim=0)
+ #predictions["GT_cluster"] = torch.cat(predictions["GT_cluster"], dim=0)
+ #predictions["pred"] = torch.cat(predictions["pred"], dim=0)
+ #predictions["eta"] = torch.cat(predictions["eta"], dim=0)
+ #predictions["phi"] = torch.cat(predictions["phi"], dim=0)
+ #predictions["pt"] = torch.cat(predictions["pt"], dim=0)
+ #predictions["AK8_cluster"] = torch.cat(predictions["AK8_cluster"], dim=0)
+ #predictions["radius_cluster_GenJets"] = torch.cat(predictions["radius_cluster_GenJets"], dim=0)
+ #predictions["radius_cluster_FatJets"] = torch.cat(predictions["radius_cluster_FatJets"], dim=0)
+ #predictions["mass"] = torch.cat(predictions["mass"], dim=0)
+ #predictions["model_cluster"] = torch.cat(predictions["model_cluster"], dim=0)
+ if model_obj_score is not None:
+ return predictions, torch.cat(obj_score_predictions), torch.cat(obj_score_targets)
+ return predictions
+ return total_loss / count # Average loss is the validation metric here
diff --git a/src/utils/parser_args.py b/src/utils/parser_args.py
new file mode 100644
index 0000000000000000000000000000000000000000..f676209c2998d6092626021e015815eda52b2b2e
--- /dev/null
+++ b/src/utils/parser_args.py
@@ -0,0 +1,375 @@
+import argparse
+
+parser = argparse.ArgumentParser()
+
+######### Data-related arguments #########
+
+parser.add_argument("-c", "--data-config", type=str, help="data config YAML file", default="config_files/config_jets.yaml")
+
+parser.add_argument(
+ "-train",
+ "--data-train",
+ nargs="*",
+ default=[],
+ help="training files; supported syntax:"
+ " (a) plain list, `--data-train /path/to/a/* /path/to/b/*`;"
+ " (b) (named) groups [Recommended], `--data-train a:/path/to/a/* b:/path/to/b/*`,"
+ " the file splitting (for each dataloader worker) will be performed per group,"
+ " and then mixed together, to ensure a uniform mixing from all groups for each worker.",
+)
+parser.add_argument(
+ "-val",
+ "--data-val",
+ nargs="*",
+ help="validation files",
+)
+parser.add_argument(
+ "-tag",
+ "--tag",
+ type=str,
+ required=False
+)
+parser.add_argument(
+ "-ckpt-step",
+ "--ckpt-step",
+ type=int,
+ required=False,
+ default=0
+) # to make it easier to find the actual number of steps
+
+parser.add_argument(
+ "-load-from-run",
+ "--load-from-run",
+ required=False,
+ default="",
+ type=str,
+ help="WandB run name from which to pull the training settings"
+)
+
+parser.add_argument("--train-dataset-size", type=int, default=None, help="number of events to use from the training dataset")
+parser.add_argument("--val-dataset-size", type=int, default=None, help="number of events to use from the validation dataset")
+parser.add_argument("--test-dataset-max-size", type=int, default=None, help="number of events to use from the testing dataset (per signal hypothesis)")
+
+parser.add_argument(
+ "-test",
+ "--data-test",
+ nargs="*",
+ default=[],
+ help="testing files; supported syntax:"
+ " (a) plain list, `--data-test /path/to/a/* /path/to/b/*`;"
+ " (b) keyword-based, `--data-test a:/path/to/a/* b:/path/to/b/*`, will produce output_a, output_b;"
+ " (c) split output per N input files, `--data-test a%10:/path/to/a/*`, will split per 10 input files",
+)
+
+######### Model and training-related arguments #########
+
+parser.add_argument(
+ "-net",
+ "--network-config",
+ type=str,
+ help="network architecture configuration file; the path must be relative to the current dir",
+)
+
+parser.add_argument(
+ "-n-blocks",
+ "--num-blocks",
+ type=int,
+ help="Number of blocks for GATr/LGATr/Transformer",
+ required=False,
+ default=10
+)
+
+##### Transformer-specific arguments #####
+
+parser.add_argument(
+ "-internal-dim",
+ "--internal-dim",
+ type=int,
+ help="Internal dim for transformer",
+ required=False,
+ default=128
+)
+
+
+parser.add_argument("--no-pid", "-np", action="store_true", help="If turned on, the PID is not going to be used as an input feature")
+parser.add_argument(
+ "-heads",
+ "--n-heads",
+ type=int,
+ help="N attention heads for transformer",
+ required=False,
+ default=4
+)
+
+##### L-GATr-specific arguments #####
+
+parser.add_argument(
+ "-mv-ch",
+ "--hidden-mv-channels",
+ type=int,
+ help="Hidden multivector channels for GATr and L-GATr",
+ required=False,
+ default=16
+)
+
+parser.add_argument(
+ "-s-ch",
+ "--hidden-s-channels",
+ type=int,
+ help="Hidden scalar channels for GATr and L-GATr",
+ required=False,
+ default=64
+)
+
+parser.add_argument(
+ "--load-model-weights",
+ type=str,
+ default=None,
+ help="initialize model with pre-trained weights",
+)
+
+parser.add_argument(
+ "--run-name",
+ type=str,
+ help="The name of the run. The wandb name and the folder it gets saved to will be this name + timestamp.",
+)
+
+parser.add_argument(
+ "--prefix",
+ type=str,
+ default="",
+ help="Path to the results folder, if empty, it will be set to the results folder in the current environment.",
+)
+
+parser.add_argument(
+ "--debug",
+ action="store_true",
+ default=False,
+ help="quickly test the setup by running over only a small number of events - use for debugging",
+)
+
+parser.add_argument(
+ "--wandb-projectname", type=str, help="project where the run is stored inside wandb", default="svj_clustering"
+)
+
+parser.add_argument("--batch-size", "-bs", type=int, default=128, help="batch size")
+parser.add_argument("--num-epochs", type=int, default=20, help="number of epochs")
+parser.add_argument("--num-steps", type=int, default=-1, help="Number of steps. If set to -1, it will be ignored and only num_epochs will be considered. Otherwise, training will stop after the reached number of steps.")
+
+parser.add_argument(
+ "--gpus",
+ type=str,
+ default="0",
+ help='device for the training/testing; to use CPU, set to empty string (""); to use multiple gpu, set it as a comma separated list, e.g., `1,2,3,4`',
+)
+
+parser.add_argument(
+ "--num-workers",
+ type=int,
+ default=1,
+ help="number of threads to load the dataset; memory consumption and disk access load increases (~linearly) with this numbers",
+)
+
+
+### Loss-related arguments ###
+
+parser.add_argument(
+ "--loss",
+ type=str,
+ default="oc",
+ choices=["oc", "quark_distance"],
+ help="Loss function to use (oc is object condensation, quark_distance aims to cluster things around the corresponding dark quark)"
+)
+
+parser.add_argument("--gt-radius", type=float, default=0.8, help="GT radius R - within the radius of a dark quark, GT points to the dark quark, out of the radius it's noise")
+
+parser.add_argument("--attr-loss-weight", type=float, default=1.0, help="weight for the attractive loss")
+parser.add_argument("--repul-loss-weight", type=float, default=1.0, help="weight for the repulsive loss")
+parser.add_argument("--coord-loss-weight", type=float, default=0.0, help="weight for the coordinate loss")
+parser.add_argument(
+ "--beta-type",
+ type=str,
+ default="default",
+ choices=["default", "pt", "pt+bc"],
+ help="How to predict betas",
+)
+
+parser.add_argument(
+ "--lorentz-norm",
+ help="Whether the norm in clustering space should be the Lorentz one (otherwise it's usual Euclidean 2-norm)",
+ action="store_true",
+ default=False,
+)
+
+parser.add_argument(
+ "--scalars-oc",
+ help="For L-GATr, use scalar virtual coordinates in the OC loss",
+ action="store_true",
+ default=False,
+)
+
+parser.add_argument(
+ "--spatial-part-only",
+ help="For L-GATr: if turned on, the spatial part is only going to be used for the loss.",
+ action="store_true",
+ default=False,
+)
+
+
+# defaults: --min-cluster-size 11 --min-samples 18 --epsilon 0.48
+
+parser.add_argument(
+ "--min-cluster-size",
+ help="parameter of the HDBSCAN clustering",
+ type=int,
+ default=2
+)
+
+parser.add_argument(
+ "--min-samples",
+ help="parameter of the HDBSCAN clustering",
+ type=int,
+ default=1
+)
+
+parser.add_argument(
+ "--parton-level",
+ help="Run on parton-level particles",
+ action="store_true"
+)
+
+parser.add_argument(
+ "--gen-level",
+ help="Run on gen-level final particles",
+ action="store_true"
+)
+
+parser.add_argument(
+ "--epsilon",
+ help="parameter of the HDBSCAN clustering",
+ type=float,
+ default=0.3
+)
+
+
+parser.add_argument(
+ "-embed-as-vectors",
+ "--embed-as-vectors",
+ action="store_true",
+ default=False,
+ help="Whether to embed the input p_xyz as vectors (translations) or points",
+)
+
+#### Optimizer and LR-related arguments ####
+
+parser.add_argument(
+ "--optimizer",
+ type=str,
+ default="ranger",
+ choices=["adam", "adamW", "radam", "ranger"],
+ help="optimizer for the training",
+)
+parser.add_argument(
+ "--optimizer-option",
+ nargs=2,
+ action="append",
+ default=[],
+ help="options to pass to the optimizer class constructor, e.g., `--optimizer-option weight_decay 1e-4`",
+)
+parser.add_argument(
+ "--lr-scheduler",
+ type=str,
+ default="flat+decay",
+ choices=[
+ "none",
+ "steps",
+ "flat+decay",
+ "flat+linear",
+ "flat+cos",
+ "one-cycle",
+ "reduceplateau",
+ ],
+ help="learning rate scheduler",
+)
+parser.add_argument("--start-lr", type=float, default=5e-3, help="start learning rate")
+parser.add_argument("--validation-steps", type=float, default=1000, help="Run eval on validation set every x steps")
+
+
+
+parser.add_argument(
+ "--backend",
+ type=str,
+ choices=["gloo", "nccl", "mpi"],
+ default=None,
+ help="backend for distributed training",
+)
+parser.add_argument(
+ "--log",
+ type=str,
+ default="",
+ help="path to the log file; `{auto}` can be used as part of the path to auto-generate a name, based on the timestamp and network configuration",
+)
+parser.add_argument(
+ "--use-amp",
+ action="store_true",
+ default=False,
+ help="use mixed precision training (fp16)",
+)
+
+
+# Objectness score submodel settings
+
+parser.add_argument(
+ "-obj-score",
+ "--train-objectness-score",
+ action="store_true",
+ help="Whether to train the objectness classifier next to the usual clustering loss",
+)
+
+parser.add_argument(
+ "--obj-score-module",
+ default="src/models/transformer/transformer.py",
+ help="Path to the objectness score model",
+ type=str
+)
+
+parser.add_argument(
+ "-obj-score-gt",
+ "--objectness-score-gt-mode",
+ default="all_in_radius",
+ choices=["all_in_radius", "closest_only"],
+ help="Whether to train the objectness classifier next to the usual clustering loss",
+)
+
+parser.add_argument(
+ "-obj-score-weights",
+ "--load-objectness-score-weights",
+ type=str,
+ help="Ckpt file for the objectness score model",
+ default=None,
+ required=False
+)
+
+parser.add_argument(
+ "--global-features-obj-score",
+ "-global-features-os",
+ action="store_true",
+ help="Whether to use global features in the objectness score model",
+ default=False
+)
+
+parser.add_argument(
+ "--augment-soft-particles",
+ "-aug-soft",
+ help="add soft particles to the event - will add 10, 100, 1000, 10000 soft particles to the events (alternating in this order) and will split an energy of 0.5 GeV evenly among them",
+ action="store_true",
+ default=False
+)
+
+parser.add_argument(
+ "--irc-safety-loss",
+ "-irc",
+ help="add an IRC safety loss term",
+ action="store_true",
+ default=False
+)
diff --git a/src/utils/paths.py b/src/utils/paths.py
new file mode 100644
index 0000000000000000000000000000000000000000..e611b01c228a7d56d7000ddb2948df84d6c6596b
--- /dev/null
+++ b/src/utils/paths.py
@@ -0,0 +1,26 @@
+# As the data and code is moved frequently between machines, we give the paths (to the data, config file, etc...) in one of the following ways:
+# - either as an absolute path, i.e. /eos/home-g/gkrzmanc/jetclustering/code/config_files/config_jets.yaml
+# - or as a path relative to either the SVJ_CODE_ROOT, SVJ_DATA_ROOT, SVJ_PREPROCESSED_DATA_ROOT, or RESULTS_ROOT directories: config_files/config_jets.yaml
+# these env_vars are set in env.sh and this file is not copied between machines, i.e. lxplus and tier3.
+
+import os
+
+def get_path(path, type="code", fallback=False):
+ assert type in ["code", "data", "preprocessed_data", "results"]
+ path = path.strip()
+ if path.startswith("/"):
+ return path
+ if type == "code":
+ return os.path.join(os.environ["SVJ_CODE_ROOT"], path)
+ if type == "data":
+ return os.path.join(os.environ["SVJ_DATA_ROOT"], path)
+ if type == "preprocessed_data":
+ print("Getting query for path", path, " | Preproc. data root=", os.environ["SVJ_PREPROCESSED_DATA_ROOT"])
+ return os.path.join(os.environ["SVJ_PREPROCESSED_DATA_ROOT"], path)
+ if type == "results":
+ results = os.path.join(os.environ["SVJ_RESULTS_ROOT"], path)
+ print("Checking if", results, "exists")
+ if fallback and not os.path.exists(results):
+ print("Returning fallback")
+ return os.path.join(os.environ["SVJ_RESULTS_ROOT_FALLBACK"], path) # return the record on the Storage Element
+ return results
diff --git a/src/utils/train_utils.py b/src/utils/train_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..b90c10a3d7f8a5905ef25eff16a171279b24ba2e
--- /dev/null
+++ b/src/utils/train_utils.py
@@ -0,0 +1,519 @@
+import os
+import ast
+import glob
+import functools
+import math
+import torch
+from torch.utils.data import DataLoader
+from src.logger.logger import _logger, _configLogger
+from src.dataset.dataset import EventDatasetCollection, EventDataset
+from src.utils.import_tools import import_module
+from src.dataset.functions_graph import graph_batch_func
+from src.dataset.functions_data import concat_events
+from src.utils.paths import get_path
+from src.layers.object_cond import calc_eta_phi
+from src.layers.object_cond import object_condensation_loss
+
+
+def to_filelist(args, mode="train"):
+ if mode == "train":
+ flist = args.data_train
+ elif mode == "val":
+ flist = args.data_val
+ elif mode == "test":
+ flist = args.data_test
+ else:
+ raise NotImplementedError("Invalid mode %s" % mode)
+ print(mode, "filelist:", flist)
+ flist = [get_path(p, "preprocessed_data") for p in flist]
+ return flist
+
+class TensorCollection:
+ def __init__(self, **kwargs):
+ self.__dict__.update(kwargs)
+ def to(self, device):
+ # Move all tensors to device
+ for k, v in self.__dict__.items():
+ if torch.is_tensor(v):
+ setattr(self, k, v.to(device))
+ return self
+ def dict_rep(self):
+ d = {}
+ for k, v in self.__dict__.items():
+ if torch.is_tensor(v):
+ d[k] = v
+ return d
+ #def __getitem__(self, i):
+ # return TensorCollection(**{k: v[i] for k, v in self.__dict__.items()})
+
+def train_load(args, aug_soft=False, aug_collinear=False):
+ train_files = to_filelist(args, "train")
+ val_files = to_filelist(args, "val")
+ train_data = EventDatasetCollection(train_files, args, aug_soft=aug_soft, aug_collinear=aug_collinear)
+ if args.train_dataset_size is not None:
+ train_data = torch.utils.data.Subset(train_data, list(range(args.train_dataset_size)))
+ train_loader = DataLoader(
+ train_data,
+ batch_size=args.batch_size,
+ drop_last=True,
+ pin_memory=True,
+ num_workers=args.num_workers,
+ collate_fn=concat_events,
+ persistent_workers=args.num_workers > 0,
+ shuffle=False
+ )
+
+ '''val_loaders = {}
+ for filename in val_files:
+ val_data = EventDataset.from_directory(filename, mmap=True)
+ val_loaders[filename] = DataLoader(
+ val_data,
+ batch_size=args.batch_size,
+ drop_last=True,
+ pin_memory=True,
+ collate_fn=concat_events,
+ num_workers=args.num_workers,
+ persistent_workers=args.num_workers > 0,
+ )'''
+ val_data = EventDatasetCollection(val_files, args)
+ if args.val_dataset_size is not None:
+ val_data = torch.utils.data.Subset(val_data, list(range(args.val_dataset_size)))
+ val_loader = DataLoader(
+ val_data,
+ batch_size=args.batch_size,
+ drop_last=True,
+ pin_memory=True,
+ num_workers=args.num_workers,
+ collate_fn=concat_events,
+ persistent_workers=args.num_workers > 0,
+ shuffle=False
+ )
+ return train_loader, val_loader, val_data
+
+def test_load(args):
+ test_files = to_filelist(args, "test")
+ test_loaders = {}
+ for filename in test_files:
+ test_data = EventDataset.from_directory(filename, mmap=True, aug_soft=args.augment_soft_particles, seed=1000000)
+ if args.test_dataset_max_size is not None:
+ print("Limiting test dataset size to", args.test_dataset_max_size)
+ test_data = torch.utils.data.Subset(test_data, list(range(args.test_dataset_max_size)))
+ test_loaders[filename] = DataLoader(
+ test_data,
+ batch_size=args.batch_size,
+ drop_last=True,
+ pin_memory=True,
+ collate_fn=concat_events,
+ num_workers=args.num_workers,
+ persistent_workers=args.num_workers > 0,
+ )
+
+ return test_loaders
+
+def get_optimizer_and_scheduler(args, model, device, load_model_weights="load_model_weights"):
+ """
+ Optimizer and scheduler.
+ :param args:
+ :param model:
+ :return:
+ """
+ optimizer_options = {k: ast.literal_eval(v) for k, v in args.optimizer_option}
+ _logger.info("Optimizer options: %s" % str(optimizer_options))
+
+ names_lr_mult = []
+ if "weight_decay" in optimizer_options or "lr_mult" in optimizer_options:
+ # https://github.com/rwightman/pytorch-image-models/blob/master/timm/optim/optim_factory.py#L31
+ import re
+
+ decay, no_decay = {}, {}
+ names_no_decay = []
+ for name, param in model.named_parameters():
+ if not param.requires_grad:
+ continue # frozen weights
+ if (
+ len(param.shape) == 1
+ or name.endswith(".bias")
+ or (
+ hasattr(model, "no_weight_decay")
+ and name in model.no_weight_decay()
+ )
+ ):
+ no_decay[name] = param
+ names_no_decay.append(name)
+ else:
+ decay[name] = param
+
+ decay_1x, no_decay_1x = [], []
+ decay_mult, no_decay_mult = [], []
+ mult_factor = 1
+ if "lr_mult" in optimizer_options:
+ pattern, mult_factor = optimizer_options.pop("lr_mult")
+ for name, param in decay.items():
+ if re.match(pattern, name):
+ decay_mult.append(param)
+ names_lr_mult.append(name)
+ else:
+ decay_1x.append(param)
+ for name, param in no_decay.items():
+ if re.match(pattern, name):
+ no_decay_mult.append(param)
+ names_lr_mult.append(name)
+ else:
+ no_decay_1x.append(param)
+ assert len(decay_1x) + len(decay_mult) == len(decay)
+ assert len(no_decay_1x) + len(no_decay_mult) == len(no_decay)
+ else:
+ decay_1x, no_decay_1x = list(decay.values()), list(no_decay.values())
+ wd = optimizer_options.pop("weight_decay", 0.0)
+ parameters = [
+ {"params": no_decay_1x, "weight_decay": 0.0},
+ {"params": decay_1x, "weight_decay": wd},
+ {
+ "params": no_decay_mult,
+ "weight_decay": 0.0,
+ "lr": args.start_lr * mult_factor,
+ },
+ {
+ "params": decay_mult,
+ "weight_decay": wd,
+ "lr": args.start_lr * mult_factor,
+ },
+ ]
+ _logger.info(
+ "Parameters excluded from weight decay:\n - %s",
+ "\n - ".join(names_no_decay),
+ )
+ if len(names_lr_mult):
+ _logger.info(
+ "Parameters with lr multiplied by %s:\n - %s",
+ mult_factor,
+ "\n - ".join(names_lr_mult),
+ )
+ else:
+ parameters = model.parameters()
+
+ if args.optimizer == "ranger":
+ from src.utils.nn.optimizer.ranger import Ranger
+ opt = Ranger(parameters, lr=args.start_lr, **optimizer_options)
+ elif args.optimizer == "adam":
+ opt = torch.optim.Adam(parameters, lr=args.start_lr, **optimizer_options)
+ elif args.optimizer == "adamW":
+ opt = torch.optim.AdamW(parameters, lr=args.start_lr, **optimizer_options)
+ elif args.optimizer == "radam":
+ opt = torch.optim.RAdam(parameters, lr=args.start_lr, **optimizer_options)
+
+ if args.__dict__[load_model_weights] is not None:
+ _logger.info("Resume training from file %s" % args.__dict__[load_model_weights])
+ model_state = torch.load(
+ args.__dict__[load_model_weights],
+ map_location=device,
+ )
+ if isinstance(model, torch.nn.parallel.DistributedDataParallel):
+ model.module.load_state_dict(model_state["model"])
+ else:
+ model.load_state_dict(model_state["model"])
+ opt_state = model_state["optimizer"]
+ opt.load_state_dict(opt_state)
+ scheduler = None
+ if args.lr_scheduler == "steps":
+ lr_step = round(args.num_epochs / 3)
+ scheduler = torch.optim.lr_scheduler.MultiStepLR(
+ opt,
+ milestones=[10],
+ gamma=0.20,
+ last_epoch=-1
+ )
+ elif args.lr_scheduler == "flat+decay":
+ num_decay_epochs = max(1, int(args.num_epochs * 0.3))
+ milestones = list(
+ range(args.num_epochs - num_decay_epochs, args.num_epochs)
+ )
+ gamma = 0.01 ** (1.0 / num_decay_epochs)
+ if len(names_lr_mult):
+
+ def get_lr(epoch):
+ return gamma ** max(0, epoch - milestones[0] + 1) # noqa
+
+ scheduler = torch.optim.lr_scheduler.LambdaLR(
+ opt,
+ (lambda _: 1, lambda _: 1, get_lr, get_lr),
+ last_epoch=-1,
+ verbose=True,
+ )
+ else:
+ scheduler = torch.optim.lr_scheduler.MultiStepLR(
+ opt,
+ milestones=milestones,
+ gamma=gamma,
+ last_epoch=-1
+ )
+ elif args.lr_scheduler == "flat+linear" or args.lr_scheduler == "flat+cos":
+ total_steps = args.num_epochs * args.steps_per_epoch
+ warmup_steps = args.warmup_steps
+ flat_steps = total_steps * 0.7 - 1
+ min_factor = 0.001
+
+ def lr_fn(step_num):
+ if step_num > total_steps:
+ raise ValueError(
+ "Tried to step {} times. The specified number of total steps is {}".format(
+ step_num + 1, total_steps
+ )
+ )
+ if step_num < warmup_steps:
+ return 1.0 * step_num / warmup_steps
+ if step_num <= flat_steps:
+ return 1.0
+ pct = (step_num - flat_steps) / (total_steps - flat_steps)
+ if args.lr_scheduler == "flat+linear":
+ return max(min_factor, 1 - pct)
+ else:
+ return max(min_factor, 0.5 * (math.cos(math.pi * pct) + 1))
+
+ scheduler = torch.optim.lr_scheduler.LambdaLR(
+ opt,
+ lr_fn,
+ last_epoch=-1
+ if args.load_epoch is None
+ else args.load_epoch * args.steps_per_epoch,
+ )
+ scheduler._update_per_step = (
+ True # mark it to update the lr every step, instead of every epoch
+ )
+ elif args.lr_scheduler == "one-cycle":
+ scheduler = torch.optim.lr_scheduler.OneCycleLR(
+ opt,
+ max_lr=args.start_lr,
+ epochs=args.num_epochs,
+ steps_per_epoch=args.steps_per_epoch,
+ pct_start=0.3,
+ anneal_strategy="cos",
+ div_factor=25.0,
+ last_epoch=-1 if args.load_epoch is None else args.load_epoch,
+ )
+ scheduler._update_per_step = (
+ True # mark it to update the lr every step, instead of every epoch
+ )
+ elif args.lr_scheduler == "reduceplateau":
+ scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(
+ opt, patience=2, threshold=0.01
+ )
+ # scheduler._update_per_step = (
+ # True # mark it to update the lr every step, instead of every epoch
+ # )
+ scheduler._update_per_step = (
+ False # mark it to update the lr every step, instead of every epoch
+ )
+ if args.__dict__[load_model_weights]:
+ if scheduler is not None:
+ scheduler.load_state_dict(model_state["scheduler"])
+ return opt, scheduler
+
+def get_target_obj_score(clusters_eta, clusters_phi, clusters_pt, event_idx_clusters, dq_eta, dq_phi, dq_event_idx, gt_mode="all_in_radius"):
+ # return the target scores for each cluster (reteurns list of 1's and 0's)
+ # dq_coords: list of [eta, phi] for each dark quark
+ # dq_event_idx: list of event_idx for each dark quarks
+ target = []
+ if gt_mode == "all_in_radius":
+ for event in event_idx_clusters.unique():
+ filt = event_idx_clusters == event
+ clusters = torch.stack([clusters_eta[filt], clusters_phi[filt], clusters_pt[filt]], dim=1)
+ dq_coords_event = torch.stack([dq_eta[dq_event_idx == event], dq_phi[dq_event_idx == event]], dim=1)
+ dist_matrix = torch.cdist(
+ dq_coords_event,
+ clusters[:, :2].to(dq_coords_event.device),
+ p=2
+ ).T
+ if len(dist_matrix) == 0:
+ target.append(torch.zeros(len(clusters)).int().to(dist_matrix.device))
+ continue
+ closest_quark_dist, closest_quark_idx = dist_matrix.min(dim=1)
+ closest_quark_idx[closest_quark_dist > 0.8] = -1
+ target.append((closest_quark_idx != -1).float())
+ else:
+ # GT is set by only considering the closest jet to each dark quark (if it's within radius)
+ for event in event_idx_clusters.unique():
+ filt = event_idx_clusters == event
+ clusters = torch.stack([clusters_eta[filt], clusters_phi[filt], clusters_pt[filt]], dim=1)
+ dq_coords_event = torch.stack([dq_eta[dq_event_idx == event], dq_phi[dq_event_idx == event]], dim=1)
+ dist_matrix = torch.cdist(
+ dq_coords_event,
+ clusters[:, :2].to(dq_coords_event.device),
+ p=2
+ ).T
+ if len(dist_matrix) == 0:
+ target.append(torch.zeros(len(clusters)).int().to(dist_matrix.device))
+ continue
+ closest_cluster_dist, closest_cluster_idx = dist_matrix.min(dim=0)
+ closest_cluster_idx[closest_cluster_dist > 0.8] = -1
+ matched_clusters = closest_cluster_idx[closest_cluster_idx != -1]
+ t = torch.zeros_like(clusters_eta[filt])
+ print(matched_clusters)
+ print(matched_clusters.int())
+ t[matched_clusters.long()] = 1
+ target.append(t)
+ return torch.cat(target).flatten()
+
+
+def plot_obj_score_debug(dq_eta, dq_phi, dq_batch_idx, clusters_eta, clusters_phi, clusters_pt, clusters_batch_idx, clusters_labels, input_pxyz, input_event_idx, input_clusters, pred_obj_score_clusters):
+ # For debugging the Objectness Score head.
+ import matplotlib.pyplot as plt
+ n_events = dq_batch_idx.max().int().item() + 1
+ pfcands_pt = torch.sqrt(input_pxyz[:, 0] ** 2 + input_pxyz[:, 1] ** 2)
+ pfcands_eta, pfcands_phi = calc_eta_phi(input_pxyz, return_stacked=0)
+ fig, ax = plt.subplots(1, n_events, figsize=(n_events * 3, 3))
+ colors = {0: "grey", 1: "green"}
+ for i in range(n_events):
+ # Plot the clusters as dots that are green for label 1 and gray for label 0
+ filt = clusters_batch_idx == i
+ ax[i].scatter(clusters_eta[filt].cpu(), clusters_phi[filt].cpu(), c=[colors[x] for x in clusters_labels[filt].tolist()], cmap="coolwarm", s=clusters_pt[filt].cpu(), alpha=0.5)
+ # with a light gray text, also plot the target objectness score for each cluster
+ for j in range(len(clusters_eta[filt])):
+ ax[i].text(clusters_eta[filt][j].cpu()-0.5, clusters_phi[filt][j].cpu()-0.5, str(round(pred_obj_score_clusters[filt][j].item(), 2)), fontsize=6, color="gray", alpha=0.7)
+ # Plot the dark quarks as red dots
+ filt = dq_batch_idx == i
+ ax[i].scatter(dq_eta[filt].cpu(), dq_phi[filt].cpu(), c="red", alpha=0.5)
+ ax[i].scatter(pfcands_eta[input_event_idx == i].cpu(), pfcands_phi[input_event_idx == i].cpu(), c=input_clusters[input_event_idx == i].cpu(), cmap="coolwarm", s=pfcands_pt[input_event_idx == i].cpu(), alpha=0.5)
+ # put pt of the clusters in gray text on top of them
+ filt = clusters_batch_idx == i
+ for j in range(len(clusters_eta[filt])):
+ ax[i].text(clusters_eta[filt][j].cpu(), clusters_phi[filt][j].cpu(), str(round(clusters_pt[filt][j].item(), 2)), fontsize=8, color="black")
+
+ fig.tight_layout()
+ return fig
+
+
+def get_loss_func(args):
+ # Loss function takes in the output of a model and the output of GT (the GT labels) and returns the loss.
+ def loss(model_input, model_output, gt_labels):
+ batch_numbers = model_input.batch_idx
+ if not (args.loss == "quark_distance" or args.train_objectness_score):
+ labels = gt_labels+1
+ else:
+ labels = gt_labels
+ return object_condensation_loss(model_input, model_output, labels, batch_numbers,
+ attr_weight=args.attr_loss_weight,
+ repul_weight=args.repul_loss_weight,
+ coord_weight=args.coord_loss_weight,
+ beta_type=args.beta_type,
+ lorentz_norm=args.lorentz_norm,
+ spatial_part_only=args.spatial_part_only,
+ loss_quark_distance=args.loss=="quark_distance",
+ oc_scalars=args.scalars_oc,
+ loss_obj_score=args.train_objectness_score)
+ return loss
+
+
+def renumber_clusters(tensor):
+ unique = tensor.unique()
+ mapping = torch.zeros(unique.max() + 1)
+ for i, u in enumerate(unique):
+ mapping[u] = i
+ return mapping[tensor]
+
+def get_gt_func(args):
+ # Gets the GT function: the function accepts an Event batch
+ # and returns the ground truth labels (GT idx of a dark quark it belongs to, or -1 for noise)
+ # By default, it returns the dark quark that is closest to the event, IF it's closer than R.
+ R = args.gt_radius
+ def get_idx_for_event(obj, i):
+ return obj.batch_number[i], obj.batch_number[i + 1]
+ def get_labels(b, pfcands, special=False, get_coordinates=False, get_dq_coords=False):
+ # b: Batch of events
+ # if get_coordinates is true, it returns the coordinates of the labels rather than the clustering labels themselves.
+ labels = torch.zeros(len(pfcands)).long()
+ if get_coordinates:
+ labels_coordinates = torch.zeros(len(b.matrix_element_gen_particles.pt), 4).float()
+ labels_no_renumber = torch.ones_like(labels)*-1
+ offset = 0
+ if get_dq_coords:
+ dq_coords = [b.matrix_element_gen_particles.eta, b.matrix_element_gen_particles.phi]
+ #dq_coords_batch_idx = b.matrix_element_gen_particles.batch_number
+ dq_coords_batch_idx = torch.zeros(b.matrix_element_gen_particles.pt.shape)
+ for i in range(len(b.matrix_element_gen_particles.batch_number) - 1):
+ dq_coords_batch_idx[b.matrix_element_gen_particles.batch_number[i]:b.matrix_element_gen_particles.batch_number[i + 1]] = i
+ for i in range(len(b)):
+ s_dq, e_dq = get_idx_for_event(b.matrix_element_gen_particles, i)
+ dq_eta = b.matrix_element_gen_particles.eta[s_dq:e_dq]
+ dq_phi = b.matrix_element_gen_particles.phi[s_dq:e_dq]
+ # dq_pt = b.matrix_element_gen_particles.pt[s:e] # Maybe we can somehow weigh the loss by pt?
+ s, e = get_idx_for_event(pfcands, i)
+ pfcands_eta = pfcands.eta[s:e]
+ pfcands_phi = pfcands.phi[s:e]
+ # calculate the distance matrix between each dark quark and pfcands
+ dist_matrix = torch.cdist(
+ torch.stack([dq_eta, dq_phi], dim=1),
+ torch.stack([pfcands_eta, pfcands_phi], dim=1),
+ p=2
+ )
+ dist_matrix = dist_matrix.T
+ closest_quark_dist, closest_quark_idx = dist_matrix.min(dim=1)
+ closest_quark_idx[closest_quark_dist > R] = -1
+ if len(closest_quark_idx):
+ #if special: print("Closest quark idx", closest_quark_idx, "; renumbered ",
+ # renumber_clusters(closest_quark_idx + 1) - 1)
+ if not get_coordinates:
+ closest_quark_idx = renumber_clusters(closest_quark_idx + 1) - 1
+ else:
+ labels_no_renumber[s:e] = closest_quark_idx
+ closest_quark_idx[closest_quark_idx != -1] += offset
+ labels[s:e] = closest_quark_idx
+ if get_coordinates:
+ E_dq = b.matrix_element_gen_particles.E[s_dq:e_dq]
+ pxyz_dq = b.matrix_element_gen_particles.pxyz[s_dq:e_dq] # the -1 doesn't matter as it will be ignored anyway
+ labels_coordinates[s_dq:e_dq] = torch.cat([E_dq.unsqueeze(-1), pxyz_dq], dim=1)
+ offset += len(E_dq)
+ if get_coordinates:
+ return TensorCollection(labels=labels, labels_coordinates=labels_coordinates, labels_no_renumber=labels_no_renumber)
+ if get_dq_coords:
+ return TensorCollection(labels=labels, dq_coords=dq_coords, dq_coords_batch_idx=dq_coords_batch_idx)
+ return labels
+ def gt(events):
+ #special_labels = get_labels(events, events.special_pfcands, special=True)
+ #print("Special pfcands labels", special_labels)
+ #return torch.cat([get_labels(events, events.pfcands), special_labels])
+ pfcands = events.pfcands
+ if args.parton_level:
+ pfcands = events.final_parton_level_particles
+ if args.gen_level:
+ pfcands = events.final_gen_particles
+ return get_labels(events, pfcands, get_coordinates=args.loss=="quark_distance",
+ get_dq_coords=args.train_objectness_score)
+ return gt
+
+
+def count_parameters(model):
+ return sum(p.numel() for p in model.parameters() if p.requires_grad)
+
+def get_model(args, dev):
+ network_options = {} # TODO: implement network options
+ network_module = import_module(args.network_config, name="_network_module")
+ model = network_module.get_model(obj_score=False, args=args, **network_options)
+ if args.load_model_weights:
+ print("Loading model state dict from %s" % args.load_model_weights)
+ model_state = torch.load(args.load_model_weights, map_location=dev)["model"]
+ missing_keys, unexpected_keys = model.load_state_dict(model_state, strict=False)
+ _logger.info(
+ "Model initialized with weights from %s\n ... Missing: %s\n ... Unexpected: %s"
+ % (args.load_model_weights, missing_keys, unexpected_keys)
+ )
+ assert len(missing_keys) == 0
+ assert len(unexpected_keys) == 0
+ return model
+
+def get_model_obj_score(args, dev):
+ network_options = {} # TODO: implement network options
+ network_module = import_module(args.obj_score_module, name="_network_module")
+ model = network_module.get_model(obj_score=True, args=args, **network_options)
+ if args.load_objectness_score_weights:
+ assert args.train_objectness_score
+ print("Loading objectness score model state dict from %s" % args.load_objectness_score_weights)
+ model_state = torch.load(args.load_objectness_score_weights, map_location=dev)["model"]
+ missing_keys, unexpected_keys = model.load_state_dict(model_state, strict=False)
+ _logger.info(
+ "Objectness score model initialized with weights from %s\n ... Missing: %s\n ... Unexpected: %s"
+ % (args.load_objectness_score_weights, missing_keys, unexpected_keys)
+ )
+ assert len(missing_keys) == 0
+ assert len(unexpected_keys) == 0
+ return model
diff --git a/src/utils/utils.py b/src/utils/utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..b40af27c0b7c180811760b6d32ce32af32d3e275
--- /dev/null
+++ b/src/utils/utils.py
@@ -0,0 +1,94 @@
+import glob
+import numpy as np
+import os
+import shutil
+from src.logger.logger import _logger
+
+
+def to_filelist(args, mode="train"):
+ if mode == "train":
+ flist = args.data_train
+ elif mode == "val":
+ flist = args.data_val
+ elif mode == "test":
+ flist = args.data_test
+ else:
+ raise NotImplementedError("Invalid mode %s" % mode)
+ print(flist)
+ # keyword-based: 'a:/path/to/a b:/path/to/b'
+ file_dict = {}
+ for f in flist:
+ if ":" in f:
+ name, fp = f.split(":")
+ else:
+ name, fp = "_", f
+ files = glob.glob(fp)
+ if name in file_dict:
+ file_dict[name] += files
+ else:
+ file_dict[name] = files
+ # sort files
+ for name, files in file_dict.items():
+ file_dict[name] = sorted(files)
+
+ if args.local_rank is not None:
+ if mode == "train":
+ local_world_size = int(os.environ["LOCAL_WORLD_SIZE"])
+ new_file_dict = {}
+ for name, files in file_dict.items():
+ new_files = files[args.local_rank :: local_world_size]
+ assert len(new_files) > 0
+ np.random.shuffle(new_files)
+ new_file_dict[name] = new_files
+ file_dict = new_file_dict
+
+ if args.copy_inputs:
+ import tempfile
+
+ tmpdir = tempfile.mkdtemp()
+ if os.path.exists(tmpdir):
+ shutil.rmtree(tmpdir)
+ new_file_dict = {name: [] for name in file_dict}
+ for name, files in file_dict.items():
+ for src in files:
+ dest = os.path.join(tmpdir, src.lstrip("/"))
+ if not os.path.exists(os.path.dirname(dest)):
+ os.makedirs(os.path.dirname(dest), exist_ok=True)
+ shutil.copy2(src, dest)
+ _logger.info("Copied file %s to %s" % (src, dest))
+ new_file_dict[name].append(dest)
+ if len(files) != len(new_file_dict[name]):
+ _logger.error(
+ "Only %d/%d files copied for %s file group %s",
+ len(new_file_dict[name]),
+ len(files),
+ mode,
+ name,
+ )
+ file_dict = new_file_dict
+
+ filelist = sum(file_dict.values(), [])
+ assert len(filelist) == len(set(filelist))
+ return file_dict, filelist
+
+
+def clear_empty_paths(dir):
+ # clear the dirs in this folder that are empty (i.e. don't have any files or folders in them)
+ for f in os.listdir(dir):
+ if not os.path.isdir(os.path.join(dir, f)):
+ continue
+ if not os.listdir(os.path.join(dir, f)):
+ shutil.rmtree(os.path.join(dir, f))
+ _logger.info("Removed empty path %s" % f)
+
+import io
+import torch
+import pickle
+
+class CPU_Unpickler(pickle.Unpickler):
+ def find_class(self, module, name):
+ if module == 'torch.storage' and name == '_load_from_bytes':
+ return lambda b: torch.load(io.BytesIO(b), map_location='cpu')
+ else:
+ return super().find_class(module, name)
+
diff --git a/src/utils/wandb_utils.py b/src/utils/wandb_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..2d687361f44c3506aef270b1efca2c34b59623db
--- /dev/null
+++ b/src/utils/wandb_utils.py
@@ -0,0 +1,88 @@
+import os
+import wandb
+from src.utils.paths import get_path
+
+api = wandb.Api()
+
+def get_run_by_name(name):
+ runs = api.runs(
+ path="fcc_ml/svj_clustering",
+ filters={"display_name": {"$eq": name.strip()}}
+ )
+ runs = api.runs(
+ path="fcc_ml/svj_clustering",
+ filters={"display_name": {"$eq": name.strip()}}
+ )
+
+ if runs.length != 1:
+ return None
+ return runs[0]
+
+def get_steps_from_file(fname):
+ # fname looks like "/work/gkrzmanc/jetclustering/results/train/lgatr_CONT_ds_cap_1000_2025_01_21_19_41_51/step_22000_epoch_1467.ckpt" -> extract 22000
+ return int(fname.split("/")[-1].split("_")[1])
+
+def get_run_initial_steps(run):
+ if not run.config["load_model_weights"]:
+ return 0
+ else:
+ run_name_1 = run.config["load_model_weights"].split("/")[-2]
+ run_1 = get_run_by_name(run_name_1)
+ if run_1 is None: raise Exception("Run doesn't exist: " + run_name_1)
+ return get_run_initial_steps(run_1) + get_steps_from_file(run.config["load_model_weights"])
+
+def extract_relative_path(run_path):
+ # just return everything after train/.. - run_path looks like /a/b/c/d/train/e/f
+ return get_path("train/" + run_path.split("train/")[-1], type="results", fallback=True)
+ #return "train/" + run_path.split("train/")[-1]
+
+
+def get_run_step_direct(run_path, step):
+ # get the step of the run directly
+ p = extract_relative_path(run_path)
+ print("Run-path:", p)
+ lst = os.listdir(p)
+ lst = [x for x in lst if x.endswith(".ckpt")] # files are of format step_x_epoch_y.ckpt
+ steps = [int(x.split("_")[1]) for x in lst]
+ if step not in steps:
+ print("Available steps:", steps)
+ raise Exception("Step not found in run")
+ full_path = os.path.join(p, [x for x in lst if int(x.split("_")[1]) == step][0])
+ # return everything after "train/"
+ return "train/" + full_path.split("train/")[-1]
+
+
+def get_run_step_ckpt(run, step, steps_from_zero):
+ if not run.config["load_model_weights"] or steps_from_zero:
+ return get_run_step_direct(run.config["run_path"], step), run
+ else:
+ run_name_1 = run.config["load_model_weights"].split("/")[-2]
+ run_1 = get_run_by_name(run_name_1)
+ if run_1 is None: raise Exception("Run doesn't exist: " + run_name_1)
+ steps = get_run_initial_steps(run)
+ if step > steps:
+ print("Step", step, "is in run", run.name)
+ return get_run_step_direct(run_1.config["run_path"], step - steps), run_1
+ else:
+ return get_run_step_ckpt(run_1, step)
+
+args_to_update = ["validation_steps", "start_lr", "lr_scheduler", "optimizer", "embed_as_vectors", "epsilon",
+ "min_samples", "min_cluster_size", "spatial_part_only", "scalars_oc", "lorentz_norm", "beta_type",
+ "coord_loss_weight", "repul_loss_weight", "attr_loss_weight", "gt_radius", "loss", "num_steps",
+ "num_epochs", "hidden_s_channels", "hidden_mv_channels", "n_heads", "internal_dim",
+ "num_blocks", "network_config", "data_config", "no_pid"]
+
+def update_args(args, run):
+ for arg in args_to_update:
+ if arg in ["min_samples", "min_cluster_size", "epsilon"]:
+ print("Skipping setting clustering args")
+ continue
+ if arg not in run.config:
+ print("Skipping setting", arg)
+ continue
+ print("Setting", arg, run.config[arg])
+ setattr(args, arg, run.config[arg])
+ print("Loaded args from run", run.name)
+ args.parent_run = run.name
+ return args
+
diff --git a/sync_files.sh b/sync_files.sh
new file mode 100644
index 0000000000000000000000000000000000000000..f102aa311a6b47f156e059fb4be875c88ef19539
--- /dev/null
+++ b/sync_files.sh
@@ -0,0 +1,35 @@
+# Used to store commands to download files from lxplus to another machine, e.g. PSI T3
+prefix="/work/gkrzmanc/"
+prefix_left="gkrzmanc@lxplus.cern.ch:/eos/user/g/gkrzmanc/jetclustering"
+rsync -avz -e "ssh" --exclude "old_code" --exclude "env.sh" $prefix_left $prefix
+
+
+#rsync -avz -e "ssh" t3:/work/gkrzmanc/jetclustering/preprocessed_data /eos/home-g/gkrzmanc/jetclustering/
+#rsync -avz -e "ssh" t3:/work/gkrzmanc/jetclustering/results /eos/home-g/gkrzmanc/jetclustering/
+
+# rsync -avz -e "ssh" t3:/work/gkrzmanc/jetclustering/code /ceph/hpc/home/krzmancg/jetclustering/ --exclude "wandb" --exclude ".env" --exclude "env.sh"
+
+# rsync -avz -e "ssh" t3:/work/gkrzmanc/jetclustering/results /ceph/hpc/home/krzmancg/jetclustering/
+
+### Vega -> T3 results
+# rsync -avz -e "ssh" /ceph/hpc/home/krzmancg/jetclustering/results t3:/pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering
+
+# Local to SE results
+rsync -avz -e "ssh" /work/gkrzmanc/jetclustering/results/ /pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/results
+
+# Local to SE data
+rsync -avz -e "ssh" /work/gkrzmanc/jetclustering/data/ /pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/data
+
+rsync -avz -e "ssh" /work/gkrzmanc/jetclustering/preprocessed_data/ /pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/preprocessed_data
+rsync -avz -e "ssh" /pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/preprocessed_data/ /work/gkrzmanc/jetclustering/preprocessed_data
+
+### Local -> Vega (when T3 is down)
+#rsync -avz -e "ssh -i .ssh/id_rs_sling_gk" /home/gregor/cern/jetclustering/ krzmancg@logingpu.vega.izum.si:/ceph/hpc/home/krzmancg/jetclustering/code --exclude "wandb" --exclude ".env" --exclude "env.sh" --exclude "__pycache__" --exclude ".git"
+
+# T3 -> Vega data
+# rsync -avz -e "ssh" t3:/work/gkrzmanc/jetclustering/preprocessed_data /ceph/hpc/home/krzmancg/jetclustering/
+# rsync -avz -e "ssh" t3:/work/gkrzmanc/jetclustering/preprocessed_data/Feb26_2025_E1000_N500_full/PFNano_s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 /ceph/hpc/home/krzmancg/jetclustering/
+# rsync -avz -e "ssh" t3:/work/gkrzmanc/jetclustering/preprocessed_data/Feb26_2025_E1000_N500_noPartonFilter_Folders/PFNano_s-channel_mMed-900_mDark-20_rinv-0.3_alpha-peak_13TeV-pythia8_n-1000 /ceph/hpc/home/krzmancg/jetclustering/preprocessed_data/Feb26_2025_E1000_N500_noPartonFilter_Folders
+
+# T3 -> Vega code
+rsync -avz -e "ssh" t3:/work/gkrzmanc/jetclustering/code /ceph/hpc/home/krzmancg/jetclustering/ --exclude "wandb" --exclude ".env" --exclude "env.sh" --exclude "__pycache__" --exclude ".git" --exclude "*.log" --exclude "*.txt"
diff --git a/t3_sync_train_results_to_SE.sh b/t3_sync_train_results_to_SE.sh
new file mode 100644
index 0000000000000000000000000000000000000000..800d1fee7ce94e50a1e3ced441d4ba52cf2d405a
--- /dev/null
+++ b/t3_sync_train_results_to_SE.sh
@@ -0,0 +1 @@
+rsync -avz --progress /work/gkrzmanc/jetclustering/results/train/ /pnfs/psi.ch/cms/trivcat/store/user/gkrzmanc/jetclustering/results/train