From 07fe8434b8cc08e36ee06f88b06ba2a9b1f8fe08 Mon Sep 17 00:00:00 2001
From: Claudia Onorato
Date: Sun, 22 Nov 2020 18:47:07 -0500
Subject: [PATCH 01/14] updated 78yo anon prediction for clf, electro,
physionet
---
ai/models/model_utils.py | 1 -
ai/prediction_anonymous.ipynb | 74 +-
ai/prediction_anonymous_classifier.ipynb | 444 ++++
...lectrophysiologist_woman78yo_sleepedf.json | 2065 +----------------
.../data/physionet_woman78yo_sleepedf.json | 2065 +----------------
.../data/predicted_woman78yo_sleepedf.json | 2065 +----------------
web/src/views/performance/index.js | 5 +-
web/src/views/performance/text.json | 2 +-
8 files changed, 504 insertions(+), 6217 deletions(-)
create mode 100644 ai/prediction_anonymous_classifier.ipynb
diff --git a/ai/models/model_utils.py b/ai/models/model_utils.py
index f959a987..2dd8fb3f 100644
--- a/ai/models/model_utils.py
+++ b/ai/models/model_utils.py
@@ -114,7 +114,6 @@ def train_test_split_according_to_age(X, y, use_continuous_age, subjects_test=No
[85,110] # 32 recordings
]
age_categories = np.unique(X[:, AGE_CATEGORY_COL_IDX])
- assert subjects_test is None or len(subjects_test) == len(age_categories), "If subjects are specified, they must be specified for all age groups"
if subjects_test is None:
unique_subject_with_age = np.array([
diff --git a/ai/prediction_anonymous.ipynb b/ai/prediction_anonymous.ipynb
index 028b0bb1..0d817dc9 100644
--- a/ai/prediction_anonymous.ipynb
+++ b/ai/prediction_anonymous.ipynb
@@ -18,18 +18,9 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 1,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "The autoreload extension is already loaded. To reload it, use:\n",
- " %reload_ext autoreload\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"%load_ext autoreload\n",
"%autoreload 2"
@@ -37,13 +28,14 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"import mne\n",
+ "import json\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
@@ -65,7 +57,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
@@ -81,7 +73,7 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 4,
"metadata": {},
"outputs": [
{
@@ -155,7 +147,7 @@
"1 25620.0 1989-04-25 14:50:00 609519000.0 "
]
},
- "execution_count": 9,
+ "execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
@@ -175,7 +167,7 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
@@ -231,7 +223,7 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 6,
"metadata": {},
"outputs": [
{
@@ -257,7 +249,7 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 7,
"metadata": {},
"outputs": [
{
@@ -282,7 +274,7 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": 8,
"metadata": {},
"outputs": [
{
@@ -310,7 +302,7 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": 9,
"metadata": {},
"outputs": [
{
@@ -357,6 +349,48 @@
"print(\"Agreement score (Cohen Kappa): \", cohen_kappa_score(y_physionet, y_electrophysiologist))"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "electro_hypno = {\n",
+ " 'timestamps': [\n",
+ " int((datetime.fromtimestamp(615514680) + timedelta(seconds=index*EPOCH_DURATION)).timestamp())\n",
+ " for index, stage in enumerate(y_electrophysiologist)\n",
+ " ],\n",
+ " 'stages': [\n",
+ " str(list(SLEEP_STAGES_VALUES.keys())[list(SLEEP_STAGES_VALUES.values()).index(stage)])\n",
+ " for index, stage in enumerate(y_electrophysiologist)\n",
+ " ]\n",
+ "}\n",
+ "\n",
+ "with open('data/electrophysiologist_woman78yo_sleepedf.json', 'w') as fp:\n",
+ " json.dump(dict(epochs=electro_hypno), fp)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sleepedf_hypno = {\n",
+ " 'timestamps': [\n",
+ " int((datetime.fromtimestamp(615514680) + timedelta(seconds=index*EPOCH_DURATION)).timestamp())\n",
+ " for index, stage in enumerate(y_physionet)\n",
+ " ],\n",
+ " 'stages': [\n",
+ " str(list(SLEEP_STAGES_VALUES.keys())[list(SLEEP_STAGES_VALUES.values()).index(stage)])\n",
+ " for index, stage in enumerate(y_physionet)\n",
+ " ]\n",
+ "}\n",
+ "\n",
+ "with open('data/physionet_woman78yo_sleepedf.json', 'w') as fp:\n",
+ " json.dump(dict(epochs=sleepedf_hypno), fp)"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
diff --git a/ai/prediction_anonymous_classifier.ipynb b/ai/prediction_anonymous_classifier.ipynb
new file mode 100644
index 00000000..174e814b
--- /dev/null
+++ b/ai/prediction_anonymous_classifier.ipynb
@@ -0,0 +1,444 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Prediction on anonymous by our classifier\n",
+ "___\n",
+ "\n",
+ "This notebook aims to try on our dataset, without including the anonymous subject, and then to see what is the classification accuracy.\n",
+ "\n",
+ "The recording that was randomly selected is `SC4441EC-Hypnogram.edf`. It corresponds to an 74 year old woman, and the subject index is then 44."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%matplotlib inline\n",
+ "\n",
+ "import numpy as np\n",
+ "import json\n",
+ "\n",
+ "from datetime import datetime, timedelta\n",
+ "\n",
+ "from sklearn.pipeline import Pipeline\n",
+ "from sklearn.compose import ColumnTransformer\n",
+ "from sklearn.preprocessing import StandardScaler\n",
+ "from sklearn.neighbors import KNeighborsClassifier\n",
+ "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n",
+ "from sklearn.ensemble import (RandomForestClassifier,\n",
+ " VotingClassifier)\n",
+ "from sklearn.metrics import (confusion_matrix,\n",
+ " classification_report,\n",
+ " cohen_kappa_score)\n",
+ "from hmmlearn.hmm import MultinomialHMM\n",
+ "\n",
+ "from models.model_utils import (train_test_split_according_to_age)\n",
+ "from constants import (SLEEP_STAGES_VALUES, EPOCH_DURATION,N_STAGES)\n",
+ "from models.model_utils import (print_hypnogram)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Generate trained pipeline\n",
+ "____"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "SUBJECT_IDX = 0 \n",
+ "NIGHT_IDX = 1\n",
+ "USE_CONTINUOUS_AGE = False\n",
+ "DOWNSIZE_SET = False\n",
+ "TEST_SET_SUBJECTS = [44]\n",
+ "MODELS_DIR = \"trained_model\"\n",
+ "\n",
+ "NIGHT = [1]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(168954, 50)\n",
+ "(168954,)\n",
+ "Number of subjects: 78\n",
+ "Number of nights: 153\n",
+ "Subjects available: [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.\n",
+ " 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.\n",
+ " 36. 37. 38. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.\n",
+ " 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 70. 71. 72. 73. 74.\n",
+ " 75. 76. 77. 80. 81. 82.]\n",
+ "Selected subjects for the test set are: [44]\n",
+ "(2223, 50) (166731, 50) (2223,) (166731,)\n"
+ ]
+ }
+ ],
+ "source": [
+ "def load_features():\n",
+ " if USE_CONTINUOUS_AGE:\n",
+ " X_file_name = \"data/x_features-age-continuous.npy\"\n",
+ " y_file_name = \"data/y_observations-age-continuous.npy\"\n",
+ " else:\n",
+ " X_file_name = \"data/x_features.npy\"\n",
+ " y_file_name = \"data/y_observations.npy\"\n",
+ "\n",
+ " X_init = np.load(X_file_name, allow_pickle=True)\n",
+ " y_init = np.load(y_file_name, allow_pickle=True)\n",
+ "\n",
+ " X_init = np.vstack(X_init)\n",
+ " y_init = np.hstack(y_init)\n",
+ "\n",
+ " print(X_init.shape)\n",
+ " print(y_init.shape)\n",
+ " print(\"Number of subjects: \", np.unique(X_init[:,SUBJECT_IDX]).shape[0]) # Some subject indexes are skipped, thus total number is below 83 (as we can see in https://physionet.org/content/sleep-edfx/1.0.0/)\n",
+ " print(\"Number of nights: \", len(np.unique([f\"{int(x[0])}-{int(x[1])}\" for x in X_init[:,SUBJECT_IDX:NIGHT_IDX+1]])))\n",
+ " print(\"Subjects available: \", np.unique(X_init[:,SUBJECT_IDX]))\n",
+ " \n",
+ " return X_init, y_init\n",
+ "\n",
+ "def split_data(X_init, y_init):\n",
+ " X_test, X_train_valid, y_test, y_train_valid = train_test_split_according_to_age(\n",
+ " X_init,\n",
+ " y_init,\n",
+ " use_continuous_age=USE_CONTINUOUS_AGE,\n",
+ " subjects_test=TEST_SET_SUBJECTS)\n",
+ " \n",
+ " print(X_test.shape, X_train_valid.shape, y_test.shape, y_train_valid.shape)\n",
+ " \n",
+ " return X_test, X_train_valid, y_test, y_train_valid\n",
+ "\n",
+ "X_init, y_init = load_features()\n",
+ "X_test, X_train_valid, y_test, y_train_valid = split_data(X_init, y_init)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "hmm_model = MultinomialHMM(n_components=N_STAGES)\n",
+ "\n",
+ "\n",
+ "hmm_model.emissionprob_ = np.load(f\"{MODELS_DIR}/HMM_emissionprob.npy\", allow_pickle=True)\n",
+ "hmm_model.startprob_ = np.load(f\"{MODELS_DIR}/HMM_startprob.npy\", allow_pickle=True)\n",
+ "hmm_model.transmat_ = np.load(f\"{MODELS_DIR}/HMM_transmat.npy\", allow_pickle=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Pipeline(memory=None,\n",
+ " steps=[('scaling',\n",
+ " ColumnTransformer(n_jobs=None, remainder='drop',\n",
+ " sparse_threshold=0.3,\n",
+ " transformer_weights=None,\n",
+ " transformers=[('pass-through-categorical',\n",
+ " 'passthrough', [0, 1]),\n",
+ " ('scaling-continuous',\n",
+ " StandardScaler(copy=False,\n",
+ " with_mean=True,\n",
+ " with_std=True),\n",
+ " [2, 3, 4, 5, 6, 7, 8, 9, 10,\n",
+ " 11, 12, 13, 14, 15, 16, 17,\n",
+ " 18, 19, 20, 21, 22, 23, 24,\n",
+ " 25, 26, 27, 28, 29,...\n",
+ " LinearDiscriminantAnalysis(n_components=None,\n",
+ " priors=None,\n",
+ " shrinkage=None,\n",
+ " solver='svd',\n",
+ " store_covariance=False,\n",
+ " tol=0.0001)),\n",
+ " ('knn_clf',\n",
+ " KNeighborsClassifier(algorithm='auto',\n",
+ " leaf_size=100,\n",
+ " metric='chebyshev',\n",
+ " metric_params=None,\n",
+ " n_jobs=-1,\n",
+ " n_neighbors=300,\n",
+ " p=2,\n",
+ " weights='uniform'))],\n",
+ " verbose=False))],\n",
+ " flatten_transform=False, n_jobs=-1,\n",
+ " voting='soft',\n",
+ " weights=array([0.83756205, 0.16243795])))],\n",
+ " verbose=False)"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def get_voting_classifier_pipeline():\n",
+ " NB_CATEGORICAL_FEATURES = 2\n",
+ " NB_FEATURES = 48\n",
+ "\n",
+ " estimator_list = [\n",
+ " ('random_forest', RandomForestClassifier(\n",
+ " random_state=42, # enables deterministic behaviour\n",
+ " n_jobs=-1\n",
+ " )),\n",
+ " ('knn', Pipeline([\n",
+ " ('knn_dim_red', LinearDiscriminantAnalysis()),\n",
+ " ('knn_clf', KNeighborsClassifier(\n",
+ " weights='uniform',\n",
+ " n_neighbors=300,\n",
+ " leaf_size=100,\n",
+ " metric='chebyshev',\n",
+ " n_jobs=-1\n",
+ " ))\n",
+ " ])),\n",
+ " ]\n",
+ " \n",
+ " return Pipeline([\n",
+ " ('scaling', ColumnTransformer([\n",
+ " ('pass-through-categorical', 'passthrough', list(range(NB_CATEGORICAL_FEATURES))),\n",
+ " ('scaling-continuous', StandardScaler(copy=False), list(range(NB_CATEGORICAL_FEATURES,NB_FEATURES)))\n",
+ " ])),\n",
+ " ('voting_clf', VotingClassifier(\n",
+ " estimators=estimator_list,\n",
+ " voting='soft',\n",
+ " weights=np.array([0.83756205, 0.16243795]),\n",
+ " flatten_transform=False,\n",
+ " n_jobs=-1,\n",
+ " ))\n",
+ " ])\n",
+ "\n",
+ "vtg_testing_pipeline = get_voting_classifier_pipeline()\n",
+ "vtg_testing_pipeline.fit(X_train_valid[:, 2:], y_train_valid)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[[394 11 2 0 2]\n",
+ " [ 37 66 52 0 28]\n",
+ " [ 5 24 321 1 54]\n",
+ " [ 0 0 52 39 0]\n",
+ " [ 0 0 0 0 100]]\n",
+ " precision recall f1-score support\n",
+ "\n",
+ " W 0.90 0.96 0.93 409\n",
+ " N1 0.65 0.36 0.46 183\n",
+ " N2 0.75 0.79 0.77 405\n",
+ " N3 0.97 0.43 0.60 91\n",
+ " REM 0.54 1.00 0.70 100\n",
+ "\n",
+ " accuracy 0.77 1188\n",
+ " macro avg 0.77 0.71 0.69 1188\n",
+ "weighted avg 0.79 0.77 0.76 1188\n",
+ "\n",
+ "Agreement score (Cohen Kappa): 0.687724728854155\n"
+ ]
+ }
+ ],
+ "source": [
+ "X_test_selected_night = X_test[X_test[:,1] == NIGHT[0]]\n",
+ "y_test_selected_night = y_test[X_test[:,1] == NIGHT[0]]\n",
+ "\n",
+ "voting_y_test_pred = vtg_testing_pipeline.predict(X_test_selected_night[:,2:])\n",
+ "voting_y_test_pred = hmm_model.predict(voting_y_test_pred.reshape(-1, 1))\n",
+ "\n",
+ "print(confusion_matrix(y_test_selected_night, voting_y_test_pred))\n",
+ "print(classification_report(y_test_selected_night, voting_y_test_pred, target_names=SLEEP_STAGES_VALUES.keys()))\n",
+ "print(\"Agreement score (Cohen Kappa): \", cohen_kappa_score(y_test_selected_night, voting_y_test_pred))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Generate RF trained pipeline\n",
+ "___"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "CPU times: user 3min 51s, sys: 2.08 s, total: 3min 53s\n",
+ "Wall time: 1min 25s\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%time\n",
+ "\n",
+ "def get_random_forest_model():\n",
+ " NB_CATEGORICAL_FEATURES = 2\n",
+ " NB_FEATURES = 48\n",
+ " \n",
+ " return Pipeline([\n",
+ " ('scaling', ColumnTransformer([\n",
+ " ('pass-through-categorical', 'passthrough', list(range(NB_CATEGORICAL_FEATURES))),\n",
+ " ('scaling-continuous', StandardScaler(copy=False), list(range(NB_CATEGORICAL_FEATURES,NB_FEATURES)))\n",
+ " ])),\n",
+ " ('classifier', RandomForestClassifier(\n",
+ " n_estimators=100,\n",
+ " max_depth=24,\n",
+ " random_state=42, # enables deterministic behaviour\n",
+ " n_jobs=-1\n",
+ " ))\n",
+ " ])\n",
+ "\n",
+ "rf_testing_pipeline = get_random_forest_model()\n",
+ "rf_testing_pipeline.fit(X_train_valid[:, 2:], y_train_valid)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[[398 8 1 0 2]\n",
+ " [ 48 64 45 0 26]\n",
+ " [ 4 26 313 0 62]\n",
+ " [ 0 1 59 31 0]\n",
+ " [ 0 0 0 0 100]]\n",
+ " precision recall f1-score support\n",
+ "\n",
+ " W 0.88 0.97 0.93 409\n",
+ " N1 0.65 0.35 0.45 183\n",
+ " N2 0.75 0.77 0.76 405\n",
+ " N3 1.00 0.34 0.51 91\n",
+ " REM 0.53 1.00 0.69 100\n",
+ "\n",
+ " accuracy 0.76 1188\n",
+ " macro avg 0.76 0.69 0.67 1188\n",
+ "weighted avg 0.78 0.76 0.75 1188\n",
+ "\n",
+ "Agreement score (Cohen Kappa): 0.6709289967448082\n"
+ ]
+ }
+ ],
+ "source": [
+ "X_test_selected_night = X_test[X_test[:,1] == NIGHT[0]]\n",
+ "y_test_selected_night = y_test[X_test[:,1] == NIGHT[0]]\n",
+ "\n",
+ "rf_y_test_pred = rf_testing_pipeline.predict(X_test_selected_night[:,2:])\n",
+ "rf_y_test_pred = hmm_model.predict(rf_y_test_pred.reshape(-1, 1))\n",
+ "\n",
+ "print(confusion_matrix(y_test_selected_night, rf_y_test_pred))\n",
+ "print(classification_report(y_test_selected_night, rf_y_test_pred, target_names=SLEEP_STAGES_VALUES.keys()))\n",
+ "print(\"Agreement score (Cohen Kappa): \", cohen_kappa_score(y_test_selected_night, rf_y_test_pred))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Saving to display in performance page\n",
+ "___\n",
+ "\n",
+ "She went to bed at 1989-07-04 00:18:00, so in UTC its 615514680."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "rf_hypnogram = {\n",
+ " 'timestamps': [\n",
+ " int((datetime.fromtimestamp(615514680) + timedelta(seconds=index*EPOCH_DURATION)).timestamp())\n",
+ " for index, stage in enumerate(rf_y_test_pred)\n",
+ " ],\n",
+ " 'stages': [\n",
+ " str(list(SLEEP_STAGES_VALUES.keys())[list(SLEEP_STAGES_VALUES.values()).index(stage)])\n",
+ " for index, stage in enumerate(rf_y_test_pred)\n",
+ " ]\n",
+ "}\n",
+ "\n",
+ "with open('data/predicted_woman78yo_sleepedf.json', 'w') as fp:\n",
+ " json.dump(dict(epochs=rf_hypnogram), fp)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "voting_hypnogram = {\n",
+ " 'timestamps': [int((datetime.fromtimestamp(615514680) + timedelta(seconds=index*EPOCH_DURATION)).timestamp()) for index, stage in enumerate(voting_y_test_pred)],\n",
+ " 'stages': [str(list(SLEEP_STAGES_VALUES.keys())[list(SLEEP_STAGES_VALUES.values()).index(stage)]) for index, stage in enumerate(voting_y_test_pred)]\n",
+ "}\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.6.8"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/web/src/assets/data/electrophysiologist_woman78yo_sleepedf.json b/web/src/assets/data/electrophysiologist_woman78yo_sleepedf.json
index 386081e2..a353def7 100644
--- a/web/src/assets/data/electrophysiologist_woman78yo_sleepedf.json
+++ b/web/src/assets/data/electrophysiologist_woman78yo_sleepedf.json
@@ -1,2064 +1 @@
-{
- "epochs": {
- "timestamps": [
- 637454400,
- 637454430,
- 637454460,
- 637454490,
- 637454520,
- 637454550,
- 637454580,
- 637454610,
- 637454640,
- 637454670,
- 637454700,
- 637454730,
- 637454760,
- 637454790,
- 637454820,
- 637454850,
- 637454880,
- 637454910,
- 637454940,
- 637454970,
- 637455000,
- 637455030,
- 637455060,
- 637455090,
- 637455120,
- 637455150,
- 637455180,
- 637455210,
- 637455270,
- 637455240,
- 637455300,
- 637455330,
- 637455360,
- 637455390,
- 637455420,
- 637455450,
- 637455480,
- 637455510,
- 637455540,
- 637455570,
- 637455600,
- 637455630,
- 637455660,
- 637455690,
- 637455720,
- 637455750,
- 637455780,
- 637455810,
- 637455840,
- 637455870,
- 637455900,
- 637455930,
- 637455960,
- 637455990,
- 637456020,
- 637456050,
- 637456080,
- 637456110,
- 637456140,
- 637456170,
- 637456200,
- 637456230,
- 637456260,
- 637456290,
- 637456320,
- 637456350,
- 637456380,
- 637456410,
- 637456440,
- 637456470,
- 637456500,
- 637456530,
- 637456560,
- 637456590,
- 637456620,
- 637456650,
- 637456680,
- 637456710,
- 637456740,
- 637456770,
- 637456800,
- 637456830,
- 637456860,
- 637456890,
- 637456920,
- 637456950,
- 637456980,
- 637457010,
- 637457040,
- 637457070,
- 637457100,
- 637457130,
- 637457160,
- 637457190,
- 637457220,
- 637457250,
- 637457280,
- 637457310,
- 637457340,
- 637457370,
- 637457400,
- 637457430,
- 637457460,
- 637457490,
- 637457520,
- 637457550,
- 637457580,
- 637457610,
- 637457640,
- 637457670,
- 637457700,
- 637457730,
- 637457760,
- 637457790,
- 637457820,
- 637457850,
- 637457880,
- 637457910,
- 637457940,
- 637457970,
- 637458000,
- 637458030,
- 637458060,
- 637458090,
- 637458120,
- 637458150,
- 637458180,
- 637458210,
- 637458240,
- 637458270,
- 637458300,
- 637458330,
- 637458360,
- 637458390,
- 637458420,
- 637458450,
- 637458480,
- 637458510,
- 637458540,
- 637458570,
- 637458600,
- 637458630,
- 637458660,
- 637458690,
- 637458720,
- 637458750,
- 637458780,
- 637458810,
- 637458840,
- 637458870,
- 637458900,
- 637458930,
- 637458960,
- 637458990,
- 637459020,
- 637459050,
- 637459080,
- 637459110,
- 637459140,
- 637459170,
- 637459200,
- 637459230,
- 637459260,
- 637459290,
- 637459320,
- 637459350,
- 637459380,
- 637459410,
- 637459440,
- 637459470,
- 637459500,
- 637459530,
- 637459560,
- 637459590,
- 637459620,
- 637459650,
- 637459680,
- 637459710,
- 637459740,
- 637459770,
- 637459800,
- 637459830,
- 637459860,
- 637459890,
- 637459920,
- 637459950,
- 637459980,
- 637460010,
- 637460040,
- 637460070,
- 637460100,
- 637460130,
- 637460160,
- 637460190,
- 637460220,
- 637460250,
- 637460280,
- 637460310,
- 637460340,
- 637460370,
- 637460400,
- 637460430,
- 637460460,
- 637460490,
- 637460520,
- 637460550,
- 637460580,
- 637460610,
- 637460640,
- 637460670,
- 637460700,
- 637460730,
- 637460760,
- 637460790,
- 637460820,
- 637460850,
- 637460880,
- 637460910,
- 637460940,
- 637460970,
- 637461000,
- 637461030,
- 637461060,
- 637461090,
- 637461120,
- 637461150,
- 637461180,
- 637461210,
- 637461240,
- 637461270,
- 637461300,
- 637461330,
- 637461360,
- 637461390,
- 637461420,
- 637461450,
- 637461480,
- 637461510,
- 637461540,
- 637461570,
- 637461600,
- 637461630,
- 637461660,
- 637461690,
- 637461720,
- 637461750,
- 637461780,
- 637461810,
- 637461840,
- 637461870,
- 637461900,
- 637461930,
- 637461960,
- 637461990,
- 637462020,
- 637462050,
- 637462080,
- 637462110,
- 637462140,
- 637462170,
- 637462200,
- 637462230,
- 637462260,
- 637462290,
- 637462320,
- 637462350,
- 637462380,
- 637462410,
- 637462440,
- 637462470,
- 637462500,
- 637462530,
- 637462560,
- 637462590,
- 637462620,
- 637462650,
- 637462680,
- 637462710,
- 637462740,
- 637462770,
- 637462800,
- 637462830,
- 637462860,
- 637462890,
- 637462920,
- 637462950,
- 637462980,
- 637463010,
- 637463040,
- 637463070,
- 637463100,
- 637463130,
- 637463160,
- 637463190,
- 637463220,
- 637463250,
- 637463280,
- 637463310,
- 637463340,
- 637463370,
- 637463400,
- 637463430,
- 637463460,
- 637463490,
- 637463520,
- 637463550,
- 637463580,
- 637463610,
- 637463640,
- 637463670,
- 637463700,
- 637463730,
- 637463760,
- 637463790,
- 637463820,
- 637463850,
- 637463880,
- 637463910,
- 637463940,
- 637463970,
- 637464000,
- 637464030,
- 637464060,
- 637464090,
- 637464120,
- 637464150,
- 637464180,
- 637464210,
- 637464240,
- 637464270,
- 637464300,
- 637464330,
- 637464360,
- 637464390,
- 637464420,
- 637464450,
- 637464480,
- 637464510,
- 637464540,
- 637464570,
- 637464600,
- 637464630,
- 637464660,
- 637464690,
- 637464720,
- 637464750,
- 637464780,
- 637464810,
- 637464840,
- 637464870,
- 637464900,
- 637464930,
- 637464960,
- 637464990,
- 637465020,
- 637465050,
- 637465080,
- 637465110,
- 637465140,
- 637465170,
- 637465200,
- 637465230,
- 637465260,
- 637465290,
- 637465320,
- 637465350,
- 637465380,
- 637465410,
- 637465440,
- 637465470,
- 637465500,
- 637465530,
- 637465560,
- 637465590,
- 637465620,
- 637465650,
- 637465680,
- 637465710,
- 637465740,
- 637465770,
- 637465800,
- 637465830,
- 637465860,
- 637465890,
- 637465920,
- 637465950,
- 637465980,
- 637466010,
- 637466040,
- 637466070,
- 637466100,
- 637466130,
- 637466160,
- 637466190,
- 637466220,
- 637466250,
- 637466280,
- 637466310,
- 637466340,
- 637466370,
- 637466400,
- 637466430,
- 637466460,
- 637466490,
- 637466520,
- 637466550,
- 637466580,
- 637466610,
- 637466640,
- 637466670,
- 637466700,
- 637466730,
- 637466760,
- 637466790,
- 637466820,
- 637466850,
- 637466880,
- 637466910,
- 637466940,
- 637466970,
- 637467000,
- 637467030,
- 637467060,
- 637467090,
- 637467120,
- 637467150,
- 637467180,
- 637467210,
- 637467240,
- 637467270,
- 637467300,
- 637467330,
- 637467360,
- 637467390,
- 637467420,
- 637467450,
- 637467480,
- 637467510,
- 637467540,
- 637467570,
- 637467600,
- 637467630,
- 637467660,
- 637467690,
- 637467720,
- 637467750,
- 637467780,
- 637467810,
- 637467840,
- 637467870,
- 637467900,
- 637467930,
- 637467960,
- 637467990,
- 637468020,
- 637468050,
- 637468080,
- 637468110,
- 637468140,
- 637468170,
- 637468200,
- 637468230,
- 637468260,
- 637468290,
- 637468320,
- 637468350,
- 637468380,
- 637468410,
- 637468440,
- 637468470,
- 637468500,
- 637468530,
- 637468560,
- 637468590,
- 637468620,
- 637468650,
- 637468680,
- 637468710,
- 637468740,
- 637468770,
- 637468800,
- 637468830,
- 637468860,
- 637468890,
- 637468920,
- 637468950,
- 637468980,
- 637469010,
- 637469040,
- 637469070,
- 637469100,
- 637469130,
- 637469160,
- 637469190,
- 637469220,
- 637469250,
- 637469280,
- 637469310,
- 637469340,
- 637469370,
- 637469400,
- 637469430,
- 637469460,
- 637469490,
- 637469520,
- 637469550,
- 637469580,
- 637469610,
- 637469640,
- 637469670,
- 637469700,
- 637469730,
- 637469760,
- 637469790,
- 637469820,
- 637469850,
- 637469880,
- 637469910,
- 637469940,
- 637469970,
- 637470000,
- 637470030,
- 637470060,
- 637470090,
- 637470120,
- 637470150,
- 637470180,
- 637470210,
- 637470240,
- 637470270,
- 637470300,
- 637470330,
- 637470360,
- 637470390,
- 637470420,
- 637470450,
- 637470480,
- 637470510,
- 637470540,
- 637470570,
- 637470600,
- 637470630,
- 637470660,
- 637470690,
- 637470720,
- 637470750,
- 637470780,
- 637470810,
- 637470840,
- 637470870,
- 637470900,
- 637470930,
- 637470960,
- 637470990,
- 637471020,
- 637471050,
- 637471080,
- 637471110,
- 637471140,
- 637471170,
- 637471200,
- 637471230,
- 637471260,
- 637471290,
- 637471320,
- 637471350,
- 637471380,
- 637471410,
- 637471440,
- 637471470,
- 637471500,
- 637471530,
- 637471560,
- 637471590,
- 637471620,
- 637471650,
- 637471680,
- 637471710,
- 637471740,
- 637471770,
- 637471800,
- 637471830,
- 637471860,
- 637471890,
- 637471920,
- 637471950,
- 637471980,
- 637472010,
- 637472040,
- 637472070,
- 637472100,
- 637472130,
- 637472160,
- 637472190,
- 637472220,
- 637472250,
- 637472280,
- 637472310,
- 637472340,
- 637472370,
- 637472400,
- 637472430,
- 637472460,
- 637472490,
- 637472520,
- 637472550,
- 637472580,
- 637472610,
- 637472640,
- 637472670,
- 637472700,
- 637472730,
- 637472760,
- 637472790,
- 637472820,
- 637472850,
- 637472880,
- 637472910,
- 637472940,
- 637472970,
- 637473000,
- 637473030,
- 637473060,
- 637473090,
- 637473120,
- 637473150,
- 637473180,
- 637473210,
- 637473240,
- 637473270,
- 637473300,
- 637473330,
- 637473360,
- 637473390,
- 637473420,
- 637473450,
- 637473480,
- 637473510,
- 637473540,
- 637473570,
- 637473600,
- 637473630,
- 637473660,
- 637473690,
- 637473720,
- 637473750,
- 637473780,
- 637473810,
- 637473840,
- 637473870,
- 637473900,
- 637473930,
- 637473960,
- 637473990,
- 637474020,
- 637474050,
- 637474080,
- 637474110,
- 637474140,
- 637474170,
- 637474200,
- 637474230,
- 637474260,
- 637474290,
- 637474320,
- 637474350,
- 637474380,
- 637474410,
- 637474440,
- 637474470,
- 637474500,
- 637474530,
- 637474560,
- 637474590,
- 637474620,
- 637474650,
- 637474680,
- 637474710,
- 637474740,
- 637474770,
- 637474800,
- 637474830,
- 637474860,
- 637474890,
- 637474920,
- 637474950,
- 637474980,
- 637475010,
- 637475040,
- 637475070,
- 637475100,
- 637475130,
- 637475160,
- 637475190,
- 637475220,
- 637475250,
- 637475280,
- 637475310,
- 637475340,
- 637475370,
- 637475400,
- 637475430,
- 637475460,
- 637475490,
- 637475520,
- 637475550,
- 637475580,
- 637475610,
- 637475640,
- 637475670,
- 637475700,
- 637475730,
- 637475760,
- 637475790,
- 637475820,
- 637475850,
- 637475880,
- 637475910,
- 637475940,
- 637475970,
- 637476000,
- 637476030,
- 637476060,
- 637476090,
- 637476120,
- 637476150,
- 637476180,
- 637476210,
- 637476240,
- 637476270,
- 637476300,
- 637476330,
- 637476360,
- 637476390,
- 637476420,
- 637476450,
- 637476480,
- 637476510,
- 637476540,
- 637476570,
- 637476600,
- 637476630,
- 637476660,
- 637476690,
- 637476720,
- 637476750,
- 637476780,
- 637476810,
- 637476840,
- 637476870,
- 637476900,
- 637476930,
- 637476960,
- 637476990,
- 637477020,
- 637477050,
- 637477080,
- 637477110,
- 637477140,
- 637477170,
- 637477200,
- 637477230,
- 637477260,
- 637477290,
- 637477320,
- 637477350,
- 637477380,
- 637477410,
- 637477440,
- 637477470,
- 637477500,
- 637477530,
- 637477560,
- 637477590,
- 637477620,
- 637477650,
- 637477680,
- 637477710,
- 637477740,
- 637477770,
- 637477800,
- 637477830,
- 637477860,
- 637477890,
- 637477920,
- 637477950,
- 637477980,
- 637478010,
- 637478040,
- 637478070,
- 637478100,
- 637478130,
- 637478160,
- 637478190,
- 637478220,
- 637478250,
- 637478280,
- 637478310,
- 637478340,
- 637478370,
- 637478400,
- 637478430,
- 637478460,
- 637478490,
- 637478520,
- 637478550,
- 637478580,
- 637478610,
- 637478640,
- 637478670,
- 637478700,
- 637478730,
- 637478760,
- 637478790,
- 637478820,
- 637478850,
- 637478880,
- 637478910,
- 637478940,
- 637478970,
- 637479000,
- 637479030,
- 637479060,
- 637479090,
- 637479120,
- 637479150,
- 637479180,
- 637479210,
- 637479240,
- 637479270,
- 637479300,
- 637479330,
- 637479360,
- 637479390,
- 637479420,
- 637479450,
- 637479480,
- 637479510,
- 637479540,
- 637479570,
- 637479600,
- 637479630,
- 637479660,
- 637479690,
- 637479720,
- 637479750,
- 637479780,
- 637479810,
- 637479840,
- 637479870,
- 637479900,
- 637479930,
- 637479960,
- 637479990,
- 637480020,
- 637480050,
- 637480080,
- 637480110,
- 637480140,
- 637480170,
- 637480200,
- 637480230,
- 637480260,
- 637480290,
- 637480320,
- 637480350,
- 637480380,
- 637480410,
- 637480440,
- 637480470,
- 637480500,
- 637480530,
- 637480560,
- 637480590,
- 637480620,
- 637480650,
- 637480680,
- 637480710,
- 637480740,
- 637480770,
- 637480800,
- 637480830,
- 637480860,
- 637480890,
- 637480920,
- 637480950,
- 637480980,
- 637481010,
- 637481040,
- 637481070,
- 637481100,
- 637481130,
- 637481160,
- 637481190,
- 637481220,
- 637481250,
- 637481280,
- 637481310,
- 637481340,
- 637481370,
- 637481400,
- 637481430,
- 637481460,
- 637481490,
- 637481520,
- 637481550,
- 637481580,
- 637481610,
- 637481640,
- 637481670,
- 637481700,
- 637481730,
- 637481760,
- 637481790,
- 637481820,
- 637481850,
- 637481880,
- 637481910,
- 637481940,
- 637481970,
- 637482000,
- 637482030,
- 637482060,
- 637482090,
- 637482120,
- 637482150,
- 637482180,
- 637482210,
- 637482240,
- 637482270,
- 637482300,
- 637482330,
- 637482360,
- 637482390,
- 637482420,
- 637482450,
- 637482480,
- 637482510,
- 637482540,
- 637482570,
- 637482600,
- 637482630,
- 637482660,
- 637482690,
- 637482720,
- 637482750,
- 637482780,
- 637482810,
- 637482840,
- 637482870,
- 637482900,
- 637482930,
- 637482960,
- 637482990,
- 637483020,
- 637483050,
- 637483080,
- 637483110,
- 637483140,
- 637483170,
- 637483200,
- 637483230,
- 637483260,
- 637483290,
- 637483320,
- 637483350,
- 637483380,
- 637483410,
- 637483440,
- 637483470,
- 637483500,
- 637483530,
- 637483560,
- 637483590,
- 637483620,
- 637483650,
- 637483680,
- 637483710,
- 637483740,
- 637483770,
- 637483800,
- 637483830,
- 637483860,
- 637483890,
- 637483920,
- 637483950,
- 637483980,
- 637484010,
- 637484040,
- 637484070,
- 637484100,
- 637484130,
- 637484160,
- 637484190,
- 637484220,
- 637484250,
- 637484280,
- 637484310,
- 637484340,
- 637484370,
- 637484400,
- 637484430,
- 637484460,
- 637484490,
- 637484520,
- 637484550,
- 637484580,
- 637484610,
- 637484640,
- 637484670,
- 637484700,
- 637484730,
- 637484760,
- 637484790,
- 637484820,
- 637484850,
- 637484880,
- 637484910,
- 637484940,
- 637484970,
- 637485000,
- 637485030,
- 637485060,
- 637485090,
- 637485120,
- 637485150,
- 637485180,
- 637485210
- ],
- "stages": [
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "REM",
- "REM",
- "W",
- "W",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N3",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "W",
- "N1",
- "N1",
- "N1",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "W",
- "W",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W"
- ]
- }
-}
+{"epochs": {"timestamps": [615514680, 615514710, 615514740, 615514770, 615514800, 615514830, 615514860, 615514890, 615514920, 615514950, 615514980, 615515010, 615515040, 615515070, 615515100, 615515130, 615515160, 615515190, 615515220, 615515250, 615515280, 615515310, 615515340, 615515370, 615515400, 615515430, 615515460, 615515490, 615515520, 615515550, 615515580, 615515610, 615515640, 615515670, 615515700, 615515730, 615515760, 615515790, 615515820, 615515850, 615515880, 615515910, 615515940, 615515970, 615516000, 615516030, 615516060, 615516090, 615516120, 615516150, 615516180, 615516210, 615516240, 615516270, 615516300, 615516330, 615516360, 615516390, 615516420, 615516450, 615516480, 615516510, 615516540, 615516570, 615516600, 615516630, 615516660, 615516690, 615516720, 615516750, 615516780, 615516810, 615516840, 615516870, 615516900, 615516930, 615516960, 615516990, 615517020, 615517050, 615517080, 615517110, 615517140, 615517170, 615517200, 615517230, 615517260, 615517290, 615517320, 615517350, 615517380, 615517410, 615517440, 615517470, 615517500, 615517530, 615517560, 615517590, 615517620, 615517650, 615517680, 615517710, 615517740, 615517770, 615517800, 615517830, 615517860, 615517890, 615517920, 615517950, 615517980, 615518010, 615518040, 615518070, 615518100, 615518130, 615518160, 615518190, 615518220, 615518250, 615518280, 615518310, 615518340, 615518370, 615518400, 615518430, 615518460, 615518490, 615518520, 615518550, 615518580, 615518610, 615518640, 615518670, 615518700, 615518730, 615518760, 615518790, 615518820, 615518850, 615518880, 615518910, 615518940, 615518970, 615519000, 615519030, 615519060, 615519090, 615519120, 615519150, 615519180, 615519210, 615519240, 615519270, 615519300, 615519330, 615519360, 615519390, 615519420, 615519450, 615519480, 615519510, 615519540, 615519570, 615519600, 615519630, 615519660, 615519690, 615519720, 615519750, 615519780, 615519810, 615519840, 615519870, 615519900, 615519930, 615519960, 615519990, 615520020, 615520050, 615520080, 615520110, 615520140, 615520170, 615520200, 615520230, 615520260, 615520290, 615520320, 615520350, 615520380, 615520410, 615520440, 615520470, 615520500, 615520530, 615520560, 615520590, 615520620, 615520650, 615520680, 615520710, 615520740, 615520770, 615520800, 615520830, 615520860, 615520890, 615520920, 615520950, 615520980, 615521010, 615521040, 615521070, 615521100, 615521130, 615521160, 615521190, 615521220, 615521250, 615521280, 615521310, 615521340, 615521370, 615521400, 615521430, 615521460, 615521490, 615521520, 615521550, 615521580, 615521610, 615521640, 615521670, 615521700, 615521730, 615521760, 615521790, 615521820, 615521850, 615521880, 615521910, 615521940, 615521970, 615522000, 615522030, 615522060, 615522090, 615522120, 615522150, 615522180, 615522210, 615522240, 615522270, 615522300, 615522330, 615522360, 615522390, 615522420, 615522450, 615522480, 615522510, 615522540, 615522570, 615522600, 615522630, 615522660, 615522690, 615522720, 615522750, 615522780, 615522810, 615522840, 615522870, 615522900, 615522930, 615522960, 615522990, 615523020, 615523050, 615523080, 615523110, 615523140, 615523170, 615523200, 615523230, 615523260, 615523290, 615523320, 615523350, 615523380, 615523410, 615523440, 615523470, 615523500, 615523530, 615523560, 615523590, 615523620, 615523650, 615523680, 615523710, 615523740, 615523770, 615523800, 615523830, 615523860, 615523890, 615523920, 615523950, 615523980, 615524010, 615524040, 615524070, 615524100, 615524130, 615524160, 615524190, 615524220, 615524250, 615524280, 615524310, 615524340, 615524370, 615524400, 615524430, 615524460, 615524490, 615524520, 615524550, 615524580, 615524610, 615524640, 615524670, 615524700, 615524730, 615524760, 615524790, 615524820, 615524850, 615524880, 615524910, 615524940, 615524970, 615525000, 615525030, 615525060, 615525090, 615525120, 615525150, 615525180, 615525210, 615525240, 615525270, 615525300, 615525330, 615525360, 615525390, 615525420, 615525450, 615525480, 615525510, 615525540, 615525570, 615525600, 615525630, 615525660, 615525690, 615525720, 615525750, 615525780, 615525810, 615525840, 615525870, 615525900, 615525930, 615525960, 615525990, 615526020, 615526050, 615526080, 615526110, 615526140, 615526170, 615526200, 615526230, 615526260, 615526290, 615526320, 615526350, 615526380, 615526410, 615526440, 615526470, 615526500, 615526530, 615526560, 615526590, 615526620, 615526650, 615526680, 615526710, 615526740, 615526770, 615526800, 615526830, 615526860, 615526890, 615526920, 615526950, 615526980, 615527010, 615527040, 615527070, 615527100, 615527130, 615527160, 615527190, 615527220, 615527250, 615527280, 615527310, 615527340, 615527370, 615527400, 615527430, 615527460, 615527490, 615527520, 615527550, 615527580, 615527610, 615527640, 615527670, 615527700, 615527730, 615527760, 615527790, 615527820, 615527850, 615527880, 615527910, 615527940, 615527970, 615528000, 615528030, 615528060, 615528090, 615528120, 615528150, 615528180, 615528210, 615528240, 615528270, 615528300, 615528330, 615528360, 615528390, 615528420, 615528450, 615528480, 615528510, 615528540, 615528570, 615528600, 615528630, 615528660, 615528690, 615528720, 615528750, 615528780, 615528810, 615528840, 615528870, 615528900, 615528930, 615528960, 615528990, 615529020, 615529050, 615529080, 615529110, 615529140, 615529170, 615529200, 615529230, 615529260, 615529290, 615529320, 615529350, 615529380, 615529410, 615529440, 615529470, 615529500, 615529530, 615529560, 615529590, 615529620, 615529650, 615529680, 615529710, 615529740, 615529770, 615529800, 615529830, 615529860, 615529890, 615529920, 615529950, 615529980, 615530010, 615530040, 615530070, 615530100, 615530130, 615530160, 615530190, 615530220, 615530250, 615530280, 615530310, 615530340, 615530370, 615530400, 615530430, 615530460, 615530490, 615530520, 615530550, 615530580, 615530610, 615530640, 615530670, 615530700, 615530730, 615530760, 615530790, 615530820, 615530850, 615530880, 615530910, 615530940, 615530970, 615531000, 615531030, 615531060, 615531090, 615531120, 615531150, 615531180, 615531210, 615531240, 615531270, 615531300, 615531330, 615531360, 615531390, 615531420, 615531450, 615531480, 615531510, 615531540, 615531570, 615531600, 615531630, 615531660, 615531690, 615531720, 615531750, 615531780, 615531810, 615531840, 615531870, 615531900, 615531930, 615531960, 615531990, 615532020, 615532050, 615532080, 615532110, 615532140, 615532170, 615532200, 615532230, 615532260, 615532290, 615532320, 615532350, 615532380, 615532410, 615532440, 615532470, 615532500, 615532530, 615532560, 615532590, 615532620, 615532650, 615532680, 615532710, 615532740, 615532770, 615532800, 615532830, 615532860, 615532890, 615532920, 615532950, 615532980, 615533010, 615533040, 615533070, 615533100, 615533130, 615533160, 615533190, 615533220, 615533250, 615533280, 615533310, 615533340, 615533370, 615533400, 615533430, 615533460, 615533490, 615533520, 615533550, 615533580, 615533610, 615533640, 615533670, 615533700, 615533730, 615533760, 615533790, 615533820, 615533850, 615533880, 615533910, 615533940, 615533970, 615534000, 615534030, 615534060, 615534090, 615534120, 615534150, 615534180, 615534210, 615534240, 615534270, 615534300, 615534330, 615534360, 615534390, 615534420, 615534450, 615534480, 615534510, 615534540, 615534570, 615534600, 615534630, 615534660, 615534690, 615534720, 615534750, 615534780, 615534810, 615534840, 615534870, 615534900, 615534930, 615534960, 615534990, 615535020, 615535050, 615535080, 615535110, 615535140, 615535170, 615535200, 615535230, 615535260, 615535290, 615535320, 615535350, 615535380, 615535410, 615535440, 615535470, 615535500, 615535530, 615535560, 615535590, 615535620, 615535650, 615535680, 615535710, 615535740, 615535770, 615535800, 615535830, 615535860, 615535890, 615535920, 615535950, 615535980, 615536010, 615536040, 615536070, 615536100, 615536130, 615536160, 615536190, 615536220, 615536250, 615536280, 615536310, 615536340, 615536370, 615536400, 615536430, 615536460, 615536490, 615536520, 615536550, 615536580, 615536610, 615536640, 615536670, 615536700, 615536730, 615536760, 615536790, 615536820, 615536850, 615536880, 615536910, 615536940, 615536970, 615537000, 615537030, 615537060, 615537090, 615537120, 615537150, 615537180, 615537210, 615537240, 615537270, 615537300, 615537330, 615537360, 615537390, 615537420, 615537450, 615537480, 615537510, 615537540, 615537570, 615537600, 615537630, 615537660, 615537690, 615537720, 615537750, 615537780, 615537810, 615537840, 615537870, 615537900, 615537930, 615537960, 615537990, 615538020, 615538050, 615538080, 615538110, 615538140, 615538170, 615538200, 615538230, 615538260, 615538290, 615538320, 615538350, 615538380, 615538410, 615538440, 615538470, 615538500, 615538530, 615538560, 615538590, 615538620, 615538650, 615538680, 615538710, 615538740, 615538770, 615538800, 615538830, 615538860, 615538890, 615538920, 615538950, 615538980, 615539010, 615539040, 615539070, 615539100, 615539130, 615539160, 615539190, 615539220, 615539250, 615539280, 615539310, 615539340, 615539370, 615539400, 615539430, 615539460, 615539490, 615539520, 615539550, 615539580, 615539610, 615539640, 615539670, 615539700, 615539730, 615539760, 615539790, 615539820, 615539850, 615539880, 615539910, 615539940, 615539970, 615540000, 615540030, 615540060, 615540090, 615540120, 615540150, 615540180, 615540210, 615540240, 615540270, 615540300, 615540330, 615540360, 615540390, 615540420, 615540450, 615540480, 615540510, 615540540, 615540570, 615540600, 615540630, 615540660, 615540690, 615540720, 615540750, 615540780, 615540810, 615540840, 615540870, 615540900, 615540930, 615540960, 615540990, 615541020, 615541050, 615541080, 615541110, 615541140, 615541170, 615541200, 615541230, 615541260, 615541290, 615541320, 615541350, 615541380, 615541410, 615541440, 615541470, 615541500, 615541530, 615541560, 615541590, 615541620, 615541650, 615541680, 615541710, 615541740, 615541770, 615541800, 615541830, 615541860, 615541890, 615541920, 615541950, 615541980, 615542010, 615542040, 615542070, 615542100, 615542130, 615542160, 615542190, 615542220, 615542250, 615542280, 615542310, 615542340, 615542370, 615542400, 615542430, 615542460, 615542490, 615542520, 615542550, 615542580, 615542610, 615542640, 615542670, 615542700, 615542730, 615542760, 615542790, 615542820, 615542850, 615542880, 615542910, 615542940, 615542970, 615543000, 615543030, 615543060, 615543090, 615543120, 615543150, 615543180, 615543210, 615543240, 615543270, 615543300, 615543330, 615543360, 615543390, 615543420, 615543450, 615543480, 615543510, 615543540, 615543570, 615543600, 615543630, 615543660, 615543690, 615543720, 615543750, 615543780, 615543810, 615543840, 615543870, 615543900, 615543930, 615543960, 615543990, 615544020, 615544050, 615544080, 615544110, 615544140, 615544170, 615544200, 615544230, 615544260, 615544290, 615544320, 615544350, 615544380, 615544410, 615544440, 615544470, 615544500, 615544530, 615544560, 615544590, 615544620, 615544650, 615544680, 615544710, 615544740, 615544770, 615544800, 615544830, 615544860, 615544890, 615544920, 615544950, 615544980, 615545010, 615545040, 615545070, 615545100, 615545130, 615545160, 615545190, 615545220, 615545250, 615545280, 615545310, 615545340, 615545370, 615545400, 615545430, 615545460, 615545490, 615545520, 615545550, 615545580, 615545610, 615545640, 615545670, 615545700, 615545730, 615545760, 615545790, 615545820, 615545850, 615545880, 615545910, 615545940, 615545970, 615546000, 615546030, 615546060, 615546090, 615546120, 615546150, 615546180, 615546210, 615546240, 615546270, 615546300, 615546330, 615546360, 615546390, 615546420, 615546450, 615546480, 615546510, 615546540, 615546570, 615546600, 615546630, 615546660, 615546690, 615546720, 615546750, 615546780, 615546810, 615546840, 615546870, 615546900, 615546930, 615546960, 615546990, 615547020, 615547050, 615547080, 615547110, 615547140, 615547170, 615547200, 615547230, 615547260, 615547290, 615547320, 615547350, 615547380, 615547410, 615547440, 615547470, 615547500, 615547530, 615547560, 615547590, 615547620, 615547650, 615547680, 615547710, 615547740, 615547770, 615547800, 615547830, 615547860, 615547890, 615547920, 615547950, 615547980, 615548010, 615548040, 615548070, 615548100, 615548130, 615548160, 615548190, 615548220, 615548250, 615548280, 615548310, 615548340, 615548370, 615548400, 615548430, 615548460, 615548490, 615548520, 615548550, 615548580, 615548610, 615548640, 615548670, 615548700, 615548730, 615548760, 615548790, 615548820, 615548850, 615548880, 615548910, 615548940, 615548970, 615549000, 615549030, 615549060, 615549090, 615549120, 615549150, 615549180, 615549210, 615549240, 615549270, 615549300, 615549330, 615549360, 615549390, 615549420, 615549450, 615549480, 615549510, 615549540, 615549570, 615549600, 615549630, 615549660, 615549690, 615549720, 615549750, 615549780, 615549810, 615549840, 615549870, 615549900, 615549930, 615549960, 615549990, 615550020, 615550050, 615550080, 615550110, 615550140, 615550170, 615550200, 615550230, 615550260, 615550290], "stages": ["W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "W", "N1", "N1", "W", "W", "W", "N1", "W", "N1", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "W", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "W", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "N1", "W", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "N1", "W", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "W", "W", "W", "W", "W", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "N1", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W"]}}
\ No newline at end of file
diff --git a/web/src/assets/data/physionet_woman78yo_sleepedf.json b/web/src/assets/data/physionet_woman78yo_sleepedf.json
index 38ba9c2a..6bc54879 100644
--- a/web/src/assets/data/physionet_woman78yo_sleepedf.json
+++ b/web/src/assets/data/physionet_woman78yo_sleepedf.json
@@ -1,2064 +1 @@
-{
- "epochs": {
- "timestamps": [
- 637454400,
- 637454430,
- 637454460,
- 637454490,
- 637454520,
- 637454550,
- 637454580,
- 637454610,
- 637454640,
- 637454670,
- 637454700,
- 637454730,
- 637454760,
- 637454790,
- 637454820,
- 637454850,
- 637454880,
- 637454910,
- 637454940,
- 637454970,
- 637455000,
- 637455030,
- 637455060,
- 637455090,
- 637455120,
- 637455150,
- 637455180,
- 637455210,
- 637455270,
- 637455240,
- 637455300,
- 637455330,
- 637455360,
- 637455390,
- 637455420,
- 637455450,
- 637455480,
- 637455510,
- 637455540,
- 637455570,
- 637455600,
- 637455630,
- 637455660,
- 637455690,
- 637455720,
- 637455750,
- 637455780,
- 637455810,
- 637455840,
- 637455870,
- 637455900,
- 637455930,
- 637455960,
- 637455990,
- 637456020,
- 637456050,
- 637456080,
- 637456110,
- 637456140,
- 637456170,
- 637456200,
- 637456230,
- 637456260,
- 637456290,
- 637456320,
- 637456350,
- 637456380,
- 637456410,
- 637456440,
- 637456470,
- 637456500,
- 637456530,
- 637456560,
- 637456590,
- 637456620,
- 637456650,
- 637456680,
- 637456710,
- 637456740,
- 637456770,
- 637456800,
- 637456830,
- 637456860,
- 637456890,
- 637456920,
- 637456950,
- 637456980,
- 637457010,
- 637457040,
- 637457070,
- 637457100,
- 637457130,
- 637457160,
- 637457190,
- 637457220,
- 637457250,
- 637457280,
- 637457310,
- 637457340,
- 637457370,
- 637457400,
- 637457430,
- 637457460,
- 637457490,
- 637457520,
- 637457550,
- 637457580,
- 637457610,
- 637457640,
- 637457670,
- 637457700,
- 637457730,
- 637457760,
- 637457790,
- 637457820,
- 637457850,
- 637457880,
- 637457910,
- 637457940,
- 637457970,
- 637458000,
- 637458030,
- 637458060,
- 637458090,
- 637458120,
- 637458150,
- 637458180,
- 637458210,
- 637458240,
- 637458270,
- 637458300,
- 637458330,
- 637458360,
- 637458390,
- 637458420,
- 637458450,
- 637458480,
- 637458510,
- 637458540,
- 637458570,
- 637458600,
- 637458630,
- 637458660,
- 637458690,
- 637458720,
- 637458750,
- 637458780,
- 637458810,
- 637458840,
- 637458870,
- 637458900,
- 637458930,
- 637458960,
- 637458990,
- 637459020,
- 637459050,
- 637459080,
- 637459110,
- 637459140,
- 637459170,
- 637459200,
- 637459230,
- 637459260,
- 637459290,
- 637459320,
- 637459350,
- 637459380,
- 637459410,
- 637459440,
- 637459470,
- 637459500,
- 637459530,
- 637459560,
- 637459590,
- 637459620,
- 637459650,
- 637459680,
- 637459710,
- 637459740,
- 637459770,
- 637459800,
- 637459830,
- 637459860,
- 637459890,
- 637459920,
- 637459950,
- 637459980,
- 637460010,
- 637460040,
- 637460070,
- 637460100,
- 637460130,
- 637460160,
- 637460190,
- 637460220,
- 637460250,
- 637460280,
- 637460310,
- 637460340,
- 637460370,
- 637460400,
- 637460430,
- 637460460,
- 637460490,
- 637460520,
- 637460550,
- 637460580,
- 637460610,
- 637460640,
- 637460670,
- 637460700,
- 637460730,
- 637460760,
- 637460790,
- 637460820,
- 637460850,
- 637460880,
- 637460910,
- 637460940,
- 637460970,
- 637461000,
- 637461030,
- 637461060,
- 637461090,
- 637461120,
- 637461150,
- 637461180,
- 637461210,
- 637461240,
- 637461270,
- 637461300,
- 637461330,
- 637461360,
- 637461390,
- 637461420,
- 637461450,
- 637461480,
- 637461510,
- 637461540,
- 637461570,
- 637461600,
- 637461630,
- 637461660,
- 637461690,
- 637461720,
- 637461750,
- 637461780,
- 637461810,
- 637461840,
- 637461870,
- 637461900,
- 637461930,
- 637461960,
- 637461990,
- 637462020,
- 637462050,
- 637462080,
- 637462110,
- 637462140,
- 637462170,
- 637462200,
- 637462230,
- 637462260,
- 637462290,
- 637462320,
- 637462350,
- 637462380,
- 637462410,
- 637462440,
- 637462470,
- 637462500,
- 637462530,
- 637462560,
- 637462590,
- 637462620,
- 637462650,
- 637462680,
- 637462710,
- 637462740,
- 637462770,
- 637462800,
- 637462830,
- 637462860,
- 637462890,
- 637462920,
- 637462950,
- 637462980,
- 637463010,
- 637463040,
- 637463070,
- 637463100,
- 637463130,
- 637463160,
- 637463190,
- 637463220,
- 637463250,
- 637463280,
- 637463310,
- 637463340,
- 637463370,
- 637463400,
- 637463430,
- 637463460,
- 637463490,
- 637463520,
- 637463550,
- 637463580,
- 637463610,
- 637463640,
- 637463670,
- 637463700,
- 637463730,
- 637463760,
- 637463790,
- 637463820,
- 637463850,
- 637463880,
- 637463910,
- 637463940,
- 637463970,
- 637464000,
- 637464030,
- 637464060,
- 637464090,
- 637464120,
- 637464150,
- 637464180,
- 637464210,
- 637464240,
- 637464270,
- 637464300,
- 637464330,
- 637464360,
- 637464390,
- 637464420,
- 637464450,
- 637464480,
- 637464510,
- 637464540,
- 637464570,
- 637464600,
- 637464630,
- 637464660,
- 637464690,
- 637464720,
- 637464750,
- 637464780,
- 637464810,
- 637464840,
- 637464870,
- 637464900,
- 637464930,
- 637464960,
- 637464990,
- 637465020,
- 637465050,
- 637465080,
- 637465110,
- 637465140,
- 637465170,
- 637465200,
- 637465230,
- 637465260,
- 637465290,
- 637465320,
- 637465350,
- 637465380,
- 637465410,
- 637465440,
- 637465470,
- 637465500,
- 637465530,
- 637465560,
- 637465590,
- 637465620,
- 637465650,
- 637465680,
- 637465710,
- 637465740,
- 637465770,
- 637465800,
- 637465830,
- 637465860,
- 637465890,
- 637465920,
- 637465950,
- 637465980,
- 637466010,
- 637466040,
- 637466070,
- 637466100,
- 637466130,
- 637466160,
- 637466190,
- 637466220,
- 637466250,
- 637466280,
- 637466310,
- 637466340,
- 637466370,
- 637466400,
- 637466430,
- 637466460,
- 637466490,
- 637466520,
- 637466550,
- 637466580,
- 637466610,
- 637466640,
- 637466670,
- 637466700,
- 637466730,
- 637466760,
- 637466790,
- 637466820,
- 637466850,
- 637466880,
- 637466910,
- 637466940,
- 637466970,
- 637467000,
- 637467030,
- 637467060,
- 637467090,
- 637467120,
- 637467150,
- 637467180,
- 637467210,
- 637467240,
- 637467270,
- 637467300,
- 637467330,
- 637467360,
- 637467390,
- 637467420,
- 637467450,
- 637467480,
- 637467510,
- 637467540,
- 637467570,
- 637467600,
- 637467630,
- 637467660,
- 637467690,
- 637467720,
- 637467750,
- 637467780,
- 637467810,
- 637467840,
- 637467870,
- 637467900,
- 637467930,
- 637467960,
- 637467990,
- 637468020,
- 637468050,
- 637468080,
- 637468110,
- 637468140,
- 637468170,
- 637468200,
- 637468230,
- 637468260,
- 637468290,
- 637468320,
- 637468350,
- 637468380,
- 637468410,
- 637468440,
- 637468470,
- 637468500,
- 637468530,
- 637468560,
- 637468590,
- 637468620,
- 637468650,
- 637468680,
- 637468710,
- 637468740,
- 637468770,
- 637468800,
- 637468830,
- 637468860,
- 637468890,
- 637468920,
- 637468950,
- 637468980,
- 637469010,
- 637469040,
- 637469070,
- 637469100,
- 637469130,
- 637469160,
- 637469190,
- 637469220,
- 637469250,
- 637469280,
- 637469310,
- 637469340,
- 637469370,
- 637469400,
- 637469430,
- 637469460,
- 637469490,
- 637469520,
- 637469550,
- 637469580,
- 637469610,
- 637469640,
- 637469670,
- 637469700,
- 637469730,
- 637469760,
- 637469790,
- 637469820,
- 637469850,
- 637469880,
- 637469910,
- 637469940,
- 637469970,
- 637470000,
- 637470030,
- 637470060,
- 637470090,
- 637470120,
- 637470150,
- 637470180,
- 637470210,
- 637470240,
- 637470270,
- 637470300,
- 637470330,
- 637470360,
- 637470390,
- 637470420,
- 637470450,
- 637470480,
- 637470510,
- 637470540,
- 637470570,
- 637470600,
- 637470630,
- 637470660,
- 637470690,
- 637470720,
- 637470750,
- 637470780,
- 637470810,
- 637470840,
- 637470870,
- 637470900,
- 637470930,
- 637470960,
- 637470990,
- 637471020,
- 637471050,
- 637471080,
- 637471110,
- 637471140,
- 637471170,
- 637471200,
- 637471230,
- 637471260,
- 637471290,
- 637471320,
- 637471350,
- 637471380,
- 637471410,
- 637471440,
- 637471470,
- 637471500,
- 637471530,
- 637471560,
- 637471590,
- 637471620,
- 637471650,
- 637471680,
- 637471710,
- 637471740,
- 637471770,
- 637471800,
- 637471830,
- 637471860,
- 637471890,
- 637471920,
- 637471950,
- 637471980,
- 637472010,
- 637472040,
- 637472070,
- 637472100,
- 637472130,
- 637472160,
- 637472190,
- 637472220,
- 637472250,
- 637472280,
- 637472310,
- 637472340,
- 637472370,
- 637472400,
- 637472430,
- 637472460,
- 637472490,
- 637472520,
- 637472550,
- 637472580,
- 637472610,
- 637472640,
- 637472670,
- 637472700,
- 637472730,
- 637472760,
- 637472790,
- 637472820,
- 637472850,
- 637472880,
- 637472910,
- 637472940,
- 637472970,
- 637473000,
- 637473030,
- 637473060,
- 637473090,
- 637473120,
- 637473150,
- 637473180,
- 637473210,
- 637473240,
- 637473270,
- 637473300,
- 637473330,
- 637473360,
- 637473390,
- 637473420,
- 637473450,
- 637473480,
- 637473510,
- 637473540,
- 637473570,
- 637473600,
- 637473630,
- 637473660,
- 637473690,
- 637473720,
- 637473750,
- 637473780,
- 637473810,
- 637473840,
- 637473870,
- 637473900,
- 637473930,
- 637473960,
- 637473990,
- 637474020,
- 637474050,
- 637474080,
- 637474110,
- 637474140,
- 637474170,
- 637474200,
- 637474230,
- 637474260,
- 637474290,
- 637474320,
- 637474350,
- 637474380,
- 637474410,
- 637474440,
- 637474470,
- 637474500,
- 637474530,
- 637474560,
- 637474590,
- 637474620,
- 637474650,
- 637474680,
- 637474710,
- 637474740,
- 637474770,
- 637474800,
- 637474830,
- 637474860,
- 637474890,
- 637474920,
- 637474950,
- 637474980,
- 637475010,
- 637475040,
- 637475070,
- 637475100,
- 637475130,
- 637475160,
- 637475190,
- 637475220,
- 637475250,
- 637475280,
- 637475310,
- 637475340,
- 637475370,
- 637475400,
- 637475430,
- 637475460,
- 637475490,
- 637475520,
- 637475550,
- 637475580,
- 637475610,
- 637475640,
- 637475670,
- 637475700,
- 637475730,
- 637475760,
- 637475790,
- 637475820,
- 637475850,
- 637475880,
- 637475910,
- 637475940,
- 637475970,
- 637476000,
- 637476030,
- 637476060,
- 637476090,
- 637476120,
- 637476150,
- 637476180,
- 637476210,
- 637476240,
- 637476270,
- 637476300,
- 637476330,
- 637476360,
- 637476390,
- 637476420,
- 637476450,
- 637476480,
- 637476510,
- 637476540,
- 637476570,
- 637476600,
- 637476630,
- 637476660,
- 637476690,
- 637476720,
- 637476750,
- 637476780,
- 637476810,
- 637476840,
- 637476870,
- 637476900,
- 637476930,
- 637476960,
- 637476990,
- 637477020,
- 637477050,
- 637477080,
- 637477110,
- 637477140,
- 637477170,
- 637477200,
- 637477230,
- 637477260,
- 637477290,
- 637477320,
- 637477350,
- 637477380,
- 637477410,
- 637477440,
- 637477470,
- 637477500,
- 637477530,
- 637477560,
- 637477590,
- 637477620,
- 637477650,
- 637477680,
- 637477710,
- 637477740,
- 637477770,
- 637477800,
- 637477830,
- 637477860,
- 637477890,
- 637477920,
- 637477950,
- 637477980,
- 637478010,
- 637478040,
- 637478070,
- 637478100,
- 637478130,
- 637478160,
- 637478190,
- 637478220,
- 637478250,
- 637478280,
- 637478310,
- 637478340,
- 637478370,
- 637478400,
- 637478430,
- 637478460,
- 637478490,
- 637478520,
- 637478550,
- 637478580,
- 637478610,
- 637478640,
- 637478670,
- 637478700,
- 637478730,
- 637478760,
- 637478790,
- 637478820,
- 637478850,
- 637478880,
- 637478910,
- 637478940,
- 637478970,
- 637479000,
- 637479030,
- 637479060,
- 637479090,
- 637479120,
- 637479150,
- 637479180,
- 637479210,
- 637479240,
- 637479270,
- 637479300,
- 637479330,
- 637479360,
- 637479390,
- 637479420,
- 637479450,
- 637479480,
- 637479510,
- 637479540,
- 637479570,
- 637479600,
- 637479630,
- 637479660,
- 637479690,
- 637479720,
- 637479750,
- 637479780,
- 637479810,
- 637479840,
- 637479870,
- 637479900,
- 637479930,
- 637479960,
- 637479990,
- 637480020,
- 637480050,
- 637480080,
- 637480110,
- 637480140,
- 637480170,
- 637480200,
- 637480230,
- 637480260,
- 637480290,
- 637480320,
- 637480350,
- 637480380,
- 637480410,
- 637480440,
- 637480470,
- 637480500,
- 637480530,
- 637480560,
- 637480590,
- 637480620,
- 637480650,
- 637480680,
- 637480710,
- 637480740,
- 637480770,
- 637480800,
- 637480830,
- 637480860,
- 637480890,
- 637480920,
- 637480950,
- 637480980,
- 637481010,
- 637481040,
- 637481070,
- 637481100,
- 637481130,
- 637481160,
- 637481190,
- 637481220,
- 637481250,
- 637481280,
- 637481310,
- 637481340,
- 637481370,
- 637481400,
- 637481430,
- 637481460,
- 637481490,
- 637481520,
- 637481550,
- 637481580,
- 637481610,
- 637481640,
- 637481670,
- 637481700,
- 637481730,
- 637481760,
- 637481790,
- 637481820,
- 637481850,
- 637481880,
- 637481910,
- 637481940,
- 637481970,
- 637482000,
- 637482030,
- 637482060,
- 637482090,
- 637482120,
- 637482150,
- 637482180,
- 637482210,
- 637482240,
- 637482270,
- 637482300,
- 637482330,
- 637482360,
- 637482390,
- 637482420,
- 637482450,
- 637482480,
- 637482510,
- 637482540,
- 637482570,
- 637482600,
- 637482630,
- 637482660,
- 637482690,
- 637482720,
- 637482750,
- 637482780,
- 637482810,
- 637482840,
- 637482870,
- 637482900,
- 637482930,
- 637482960,
- 637482990,
- 637483020,
- 637483050,
- 637483080,
- 637483110,
- 637483140,
- 637483170,
- 637483200,
- 637483230,
- 637483260,
- 637483290,
- 637483320,
- 637483350,
- 637483380,
- 637483410,
- 637483440,
- 637483470,
- 637483500,
- 637483530,
- 637483560,
- 637483590,
- 637483620,
- 637483650,
- 637483680,
- 637483710,
- 637483740,
- 637483770,
- 637483800,
- 637483830,
- 637483860,
- 637483890,
- 637483920,
- 637483950,
- 637483980,
- 637484010,
- 637484040,
- 637484070,
- 637484100,
- 637484130,
- 637484160,
- 637484190,
- 637484220,
- 637484250,
- 637484280,
- 637484310,
- 637484340,
- 637484370,
- 637484400,
- 637484430,
- 637484460,
- 637484490,
- 637484520,
- 637484550,
- 637484580,
- 637484610,
- 637484640,
- 637484670,
- 637484700,
- 637484730,
- 637484760,
- 637484790,
- 637484820,
- 637484850,
- 637484880,
- 637484910,
- 637484940,
- 637484970,
- 637485000,
- 637485030,
- 637485060,
- 637485090,
- 637485120,
- 637485150,
- 637485180,
- 637485210
- ],
- "stages": [
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "W",
- "W",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N3",
- "N2",
- "N2",
- "N3",
- "N3",
- "N2",
- "N3",
- "N3",
- "N3",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N3",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "W",
- "N1",
- "N1",
- "N1",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "W",
- "W",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "N1",
- "N1",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "W",
- "N1",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "N1",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W"
- ]
- }
-}
+{"epochs": {"timestamps": [615514680, 615514710, 615514740, 615514770, 615514800, 615514830, 615514860, 615514890, 615514920, 615514950, 615514980, 615515010, 615515040, 615515070, 615515100, 615515130, 615515160, 615515190, 615515220, 615515250, 615515280, 615515310, 615515340, 615515370, 615515400, 615515430, 615515460, 615515490, 615515520, 615515550, 615515580, 615515610, 615515640, 615515670, 615515700, 615515730, 615515760, 615515790, 615515820, 615515850, 615515880, 615515910, 615515940, 615515970, 615516000, 615516030, 615516060, 615516090, 615516120, 615516150, 615516180, 615516210, 615516240, 615516270, 615516300, 615516330, 615516360, 615516390, 615516420, 615516450, 615516480, 615516510, 615516540, 615516570, 615516600, 615516630, 615516660, 615516690, 615516720, 615516750, 615516780, 615516810, 615516840, 615516870, 615516900, 615516930, 615516960, 615516990, 615517020, 615517050, 615517080, 615517110, 615517140, 615517170, 615517200, 615517230, 615517260, 615517290, 615517320, 615517350, 615517380, 615517410, 615517440, 615517470, 615517500, 615517530, 615517560, 615517590, 615517620, 615517650, 615517680, 615517710, 615517740, 615517770, 615517800, 615517830, 615517860, 615517890, 615517920, 615517950, 615517980, 615518010, 615518040, 615518070, 615518100, 615518130, 615518160, 615518190, 615518220, 615518250, 615518280, 615518310, 615518340, 615518370, 615518400, 615518430, 615518460, 615518490, 615518520, 615518550, 615518580, 615518610, 615518640, 615518670, 615518700, 615518730, 615518760, 615518790, 615518820, 615518850, 615518880, 615518910, 615518940, 615518970, 615519000, 615519030, 615519060, 615519090, 615519120, 615519150, 615519180, 615519210, 615519240, 615519270, 615519300, 615519330, 615519360, 615519390, 615519420, 615519450, 615519480, 615519510, 615519540, 615519570, 615519600, 615519630, 615519660, 615519690, 615519720, 615519750, 615519780, 615519810, 615519840, 615519870, 615519900, 615519930, 615519960, 615519990, 615520020, 615520050, 615520080, 615520110, 615520140, 615520170, 615520200, 615520230, 615520260, 615520290, 615520320, 615520350, 615520380, 615520410, 615520440, 615520470, 615520500, 615520530, 615520560, 615520590, 615520620, 615520650, 615520680, 615520710, 615520740, 615520770, 615520800, 615520830, 615520860, 615520890, 615520920, 615520950, 615520980, 615521010, 615521040, 615521070, 615521100, 615521130, 615521160, 615521190, 615521220, 615521250, 615521280, 615521310, 615521340, 615521370, 615521400, 615521430, 615521460, 615521490, 615521520, 615521550, 615521580, 615521610, 615521640, 615521670, 615521700, 615521730, 615521760, 615521790, 615521820, 615521850, 615521880, 615521910, 615521940, 615521970, 615522000, 615522030, 615522060, 615522090, 615522120, 615522150, 615522180, 615522210, 615522240, 615522270, 615522300, 615522330, 615522360, 615522390, 615522420, 615522450, 615522480, 615522510, 615522540, 615522570, 615522600, 615522630, 615522660, 615522690, 615522720, 615522750, 615522780, 615522810, 615522840, 615522870, 615522900, 615522930, 615522960, 615522990, 615523020, 615523050, 615523080, 615523110, 615523140, 615523170, 615523200, 615523230, 615523260, 615523290, 615523320, 615523350, 615523380, 615523410, 615523440, 615523470, 615523500, 615523530, 615523560, 615523590, 615523620, 615523650, 615523680, 615523710, 615523740, 615523770, 615523800, 615523830, 615523860, 615523890, 615523920, 615523950, 615523980, 615524010, 615524040, 615524070, 615524100, 615524130, 615524160, 615524190, 615524220, 615524250, 615524280, 615524310, 615524340, 615524370, 615524400, 615524430, 615524460, 615524490, 615524520, 615524550, 615524580, 615524610, 615524640, 615524670, 615524700, 615524730, 615524760, 615524790, 615524820, 615524850, 615524880, 615524910, 615524940, 615524970, 615525000, 615525030, 615525060, 615525090, 615525120, 615525150, 615525180, 615525210, 615525240, 615525270, 615525300, 615525330, 615525360, 615525390, 615525420, 615525450, 615525480, 615525510, 615525540, 615525570, 615525600, 615525630, 615525660, 615525690, 615525720, 615525750, 615525780, 615525810, 615525840, 615525870, 615525900, 615525930, 615525960, 615525990, 615526020, 615526050, 615526080, 615526110, 615526140, 615526170, 615526200, 615526230, 615526260, 615526290, 615526320, 615526350, 615526380, 615526410, 615526440, 615526470, 615526500, 615526530, 615526560, 615526590, 615526620, 615526650, 615526680, 615526710, 615526740, 615526770, 615526800, 615526830, 615526860, 615526890, 615526920, 615526950, 615526980, 615527010, 615527040, 615527070, 615527100, 615527130, 615527160, 615527190, 615527220, 615527250, 615527280, 615527310, 615527340, 615527370, 615527400, 615527430, 615527460, 615527490, 615527520, 615527550, 615527580, 615527610, 615527640, 615527670, 615527700, 615527730, 615527760, 615527790, 615527820, 615527850, 615527880, 615527910, 615527940, 615527970, 615528000, 615528030, 615528060, 615528090, 615528120, 615528150, 615528180, 615528210, 615528240, 615528270, 615528300, 615528330, 615528360, 615528390, 615528420, 615528450, 615528480, 615528510, 615528540, 615528570, 615528600, 615528630, 615528660, 615528690, 615528720, 615528750, 615528780, 615528810, 615528840, 615528870, 615528900, 615528930, 615528960, 615528990, 615529020, 615529050, 615529080, 615529110, 615529140, 615529170, 615529200, 615529230, 615529260, 615529290, 615529320, 615529350, 615529380, 615529410, 615529440, 615529470, 615529500, 615529530, 615529560, 615529590, 615529620, 615529650, 615529680, 615529710, 615529740, 615529770, 615529800, 615529830, 615529860, 615529890, 615529920, 615529950, 615529980, 615530010, 615530040, 615530070, 615530100, 615530130, 615530160, 615530190, 615530220, 615530250, 615530280, 615530310, 615530340, 615530370, 615530400, 615530430, 615530460, 615530490, 615530520, 615530550, 615530580, 615530610, 615530640, 615530670, 615530700, 615530730, 615530760, 615530790, 615530820, 615530850, 615530880, 615530910, 615530940, 615530970, 615531000, 615531030, 615531060, 615531090, 615531120, 615531150, 615531180, 615531210, 615531240, 615531270, 615531300, 615531330, 615531360, 615531390, 615531420, 615531450, 615531480, 615531510, 615531540, 615531570, 615531600, 615531630, 615531660, 615531690, 615531720, 615531750, 615531780, 615531810, 615531840, 615531870, 615531900, 615531930, 615531960, 615531990, 615532020, 615532050, 615532080, 615532110, 615532140, 615532170, 615532200, 615532230, 615532260, 615532290, 615532320, 615532350, 615532380, 615532410, 615532440, 615532470, 615532500, 615532530, 615532560, 615532590, 615532620, 615532650, 615532680, 615532710, 615532740, 615532770, 615532800, 615532830, 615532860, 615532890, 615532920, 615532950, 615532980, 615533010, 615533040, 615533070, 615533100, 615533130, 615533160, 615533190, 615533220, 615533250, 615533280, 615533310, 615533340, 615533370, 615533400, 615533430, 615533460, 615533490, 615533520, 615533550, 615533580, 615533610, 615533640, 615533670, 615533700, 615533730, 615533760, 615533790, 615533820, 615533850, 615533880, 615533910, 615533940, 615533970, 615534000, 615534030, 615534060, 615534090, 615534120, 615534150, 615534180, 615534210, 615534240, 615534270, 615534300, 615534330, 615534360, 615534390, 615534420, 615534450, 615534480, 615534510, 615534540, 615534570, 615534600, 615534630, 615534660, 615534690, 615534720, 615534750, 615534780, 615534810, 615534840, 615534870, 615534900, 615534930, 615534960, 615534990, 615535020, 615535050, 615535080, 615535110, 615535140, 615535170, 615535200, 615535230, 615535260, 615535290, 615535320, 615535350, 615535380, 615535410, 615535440, 615535470, 615535500, 615535530, 615535560, 615535590, 615535620, 615535650, 615535680, 615535710, 615535740, 615535770, 615535800, 615535830, 615535860, 615535890, 615535920, 615535950, 615535980, 615536010, 615536040, 615536070, 615536100, 615536130, 615536160, 615536190, 615536220, 615536250, 615536280, 615536310, 615536340, 615536370, 615536400, 615536430, 615536460, 615536490, 615536520, 615536550, 615536580, 615536610, 615536640, 615536670, 615536700, 615536730, 615536760, 615536790, 615536820, 615536850, 615536880, 615536910, 615536940, 615536970, 615537000, 615537030, 615537060, 615537090, 615537120, 615537150, 615537180, 615537210, 615537240, 615537270, 615537300, 615537330, 615537360, 615537390, 615537420, 615537450, 615537480, 615537510, 615537540, 615537570, 615537600, 615537630, 615537660, 615537690, 615537720, 615537750, 615537780, 615537810, 615537840, 615537870, 615537900, 615537930, 615537960, 615537990, 615538020, 615538050, 615538080, 615538110, 615538140, 615538170, 615538200, 615538230, 615538260, 615538290, 615538320, 615538350, 615538380, 615538410, 615538440, 615538470, 615538500, 615538530, 615538560, 615538590, 615538620, 615538650, 615538680, 615538710, 615538740, 615538770, 615538800, 615538830, 615538860, 615538890, 615538920, 615538950, 615538980, 615539010, 615539040, 615539070, 615539100, 615539130, 615539160, 615539190, 615539220, 615539250, 615539280, 615539310, 615539340, 615539370, 615539400, 615539430, 615539460, 615539490, 615539520, 615539550, 615539580, 615539610, 615539640, 615539670, 615539700, 615539730, 615539760, 615539790, 615539820, 615539850, 615539880, 615539910, 615539940, 615539970, 615540000, 615540030, 615540060, 615540090, 615540120, 615540150, 615540180, 615540210, 615540240, 615540270, 615540300, 615540330, 615540360, 615540390, 615540420, 615540450, 615540480, 615540510, 615540540, 615540570, 615540600, 615540630, 615540660, 615540690, 615540720, 615540750, 615540780, 615540810, 615540840, 615540870, 615540900, 615540930, 615540960, 615540990, 615541020, 615541050, 615541080, 615541110, 615541140, 615541170, 615541200, 615541230, 615541260, 615541290, 615541320, 615541350, 615541380, 615541410, 615541440, 615541470, 615541500, 615541530, 615541560, 615541590, 615541620, 615541650, 615541680, 615541710, 615541740, 615541770, 615541800, 615541830, 615541860, 615541890, 615541920, 615541950, 615541980, 615542010, 615542040, 615542070, 615542100, 615542130, 615542160, 615542190, 615542220, 615542250, 615542280, 615542310, 615542340, 615542370, 615542400, 615542430, 615542460, 615542490, 615542520, 615542550, 615542580, 615542610, 615542640, 615542670, 615542700, 615542730, 615542760, 615542790, 615542820, 615542850, 615542880, 615542910, 615542940, 615542970, 615543000, 615543030, 615543060, 615543090, 615543120, 615543150, 615543180, 615543210, 615543240, 615543270, 615543300, 615543330, 615543360, 615543390, 615543420, 615543450, 615543480, 615543510, 615543540, 615543570, 615543600, 615543630, 615543660, 615543690, 615543720, 615543750, 615543780, 615543810, 615543840, 615543870, 615543900, 615543930, 615543960, 615543990, 615544020, 615544050, 615544080, 615544110, 615544140, 615544170, 615544200, 615544230, 615544260, 615544290, 615544320, 615544350, 615544380, 615544410, 615544440, 615544470, 615544500, 615544530, 615544560, 615544590, 615544620, 615544650, 615544680, 615544710, 615544740, 615544770, 615544800, 615544830, 615544860, 615544890, 615544920, 615544950, 615544980, 615545010, 615545040, 615545070, 615545100, 615545130, 615545160, 615545190, 615545220, 615545250, 615545280, 615545310, 615545340, 615545370, 615545400, 615545430, 615545460, 615545490, 615545520, 615545550, 615545580, 615545610, 615545640, 615545670, 615545700, 615545730, 615545760, 615545790, 615545820, 615545850, 615545880, 615545910, 615545940, 615545970, 615546000, 615546030, 615546060, 615546090, 615546120, 615546150, 615546180, 615546210, 615546240, 615546270, 615546300, 615546330, 615546360, 615546390, 615546420, 615546450, 615546480, 615546510, 615546540, 615546570, 615546600, 615546630, 615546660, 615546690, 615546720, 615546750, 615546780, 615546810, 615546840, 615546870, 615546900, 615546930, 615546960, 615546990, 615547020, 615547050, 615547080, 615547110, 615547140, 615547170, 615547200, 615547230, 615547260, 615547290, 615547320, 615547350, 615547380, 615547410, 615547440, 615547470, 615547500, 615547530, 615547560, 615547590, 615547620, 615547650, 615547680, 615547710, 615547740, 615547770, 615547800, 615547830, 615547860, 615547890, 615547920, 615547950, 615547980, 615548010, 615548040, 615548070, 615548100, 615548130, 615548160, 615548190, 615548220, 615548250, 615548280, 615548310, 615548340, 615548370, 615548400, 615548430, 615548460, 615548490, 615548520, 615548550, 615548580, 615548610, 615548640, 615548670, 615548700, 615548730, 615548760, 615548790, 615548820, 615548850, 615548880, 615548910, 615548940, 615548970, 615549000, 615549030, 615549060, 615549090, 615549120, 615549150, 615549180, 615549210, 615549240, 615549270, 615549300, 615549330, 615549360, 615549390, 615549420, 615549450, 615549480, 615549510, 615549540, 615549570, 615549600, 615549630, 615549660, 615549690, 615549720, 615549750, 615549780, 615549810, 615549840, 615549870, 615549900, 615549930, 615549960, 615549990, 615550020, 615550050, 615550080, 615550110, 615550140, 615550170, 615550200, 615550230, 615550260, 615550290], "stages": ["W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "W", "W", "W", "N1", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N3", "N2", "N3", "N3", "N2", "N3", "N2", "N3", "N3", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N3", "N3", "N3", "N3", "N2", "N2", "N2", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "W", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N3", "N3", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N1", "N2", "N2", "N2", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "W", "N1", "N1", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "N1", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N3", "N3", "N3", "N3", "N3", "N2", "N2", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N2", "N2", "N3", "N3", "N2", "N2", "N2", "N2", "N2", "N2", "N3", "N3", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N1", "N2", "N1", "N2", "N2", "N2", "N3", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N3", "N3", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N3", "N3", "N3", "N3", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N3", "N2", "N2", "N2", "N2", "N3", "N2", "N2", "N2", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N2", "W", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "W", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W"]}}
\ No newline at end of file
diff --git a/web/src/assets/data/predicted_woman78yo_sleepedf.json b/web/src/assets/data/predicted_woman78yo_sleepedf.json
index 33e810c3..dcfffd80 100644
--- a/web/src/assets/data/predicted_woman78yo_sleepedf.json
+++ b/web/src/assets/data/predicted_woman78yo_sleepedf.json
@@ -1,2064 +1 @@
-{
- "epochs": {
- "timestamps": [
- 637454400,
- 637454430,
- 637454460,
- 637454490,
- 637454520,
- 637454550,
- 637454580,
- 637454610,
- 637454640,
- 637454670,
- 637454700,
- 637454730,
- 637454760,
- 637454790,
- 637454820,
- 637454850,
- 637454880,
- 637454910,
- 637454940,
- 637454970,
- 637455000,
- 637455030,
- 637455060,
- 637455090,
- 637455120,
- 637455150,
- 637455180,
- 637455210,
- 637455270,
- 637455240,
- 637455300,
- 637455330,
- 637455360,
- 637455390,
- 637455420,
- 637455450,
- 637455480,
- 637455510,
- 637455540,
- 637455570,
- 637455600,
- 637455630,
- 637455660,
- 637455690,
- 637455720,
- 637455750,
- 637455780,
- 637455810,
- 637455840,
- 637455870,
- 637455900,
- 637455930,
- 637455960,
- 637455990,
- 637456020,
- 637456050,
- 637456080,
- 637456110,
- 637456140,
- 637456170,
- 637456200,
- 637456230,
- 637456260,
- 637456290,
- 637456320,
- 637456350,
- 637456380,
- 637456410,
- 637456440,
- 637456470,
- 637456500,
- 637456530,
- 637456560,
- 637456590,
- 637456620,
- 637456650,
- 637456680,
- 637456710,
- 637456740,
- 637456770,
- 637456800,
- 637456830,
- 637456860,
- 637456890,
- 637456920,
- 637456950,
- 637456980,
- 637457010,
- 637457040,
- 637457070,
- 637457100,
- 637457130,
- 637457160,
- 637457190,
- 637457220,
- 637457250,
- 637457280,
- 637457310,
- 637457340,
- 637457370,
- 637457400,
- 637457430,
- 637457460,
- 637457490,
- 637457520,
- 637457550,
- 637457580,
- 637457610,
- 637457640,
- 637457670,
- 637457700,
- 637457730,
- 637457760,
- 637457790,
- 637457820,
- 637457850,
- 637457880,
- 637457910,
- 637457940,
- 637457970,
- 637458000,
- 637458030,
- 637458060,
- 637458090,
- 637458120,
- 637458150,
- 637458180,
- 637458210,
- 637458240,
- 637458270,
- 637458300,
- 637458330,
- 637458360,
- 637458390,
- 637458420,
- 637458450,
- 637458480,
- 637458510,
- 637458540,
- 637458570,
- 637458600,
- 637458630,
- 637458660,
- 637458690,
- 637458720,
- 637458750,
- 637458780,
- 637458810,
- 637458840,
- 637458870,
- 637458900,
- 637458930,
- 637458960,
- 637458990,
- 637459020,
- 637459050,
- 637459080,
- 637459110,
- 637459140,
- 637459170,
- 637459200,
- 637459230,
- 637459260,
- 637459290,
- 637459320,
- 637459350,
- 637459380,
- 637459410,
- 637459440,
- 637459470,
- 637459500,
- 637459530,
- 637459560,
- 637459590,
- 637459620,
- 637459650,
- 637459680,
- 637459710,
- 637459740,
- 637459770,
- 637459800,
- 637459830,
- 637459860,
- 637459890,
- 637459920,
- 637459950,
- 637459980,
- 637460010,
- 637460040,
- 637460070,
- 637460100,
- 637460130,
- 637460160,
- 637460190,
- 637460220,
- 637460250,
- 637460280,
- 637460310,
- 637460340,
- 637460370,
- 637460400,
- 637460430,
- 637460460,
- 637460490,
- 637460520,
- 637460550,
- 637460580,
- 637460610,
- 637460640,
- 637460670,
- 637460700,
- 637460730,
- 637460760,
- 637460790,
- 637460820,
- 637460850,
- 637460880,
- 637460910,
- 637460940,
- 637460970,
- 637461000,
- 637461030,
- 637461060,
- 637461090,
- 637461120,
- 637461150,
- 637461180,
- 637461210,
- 637461240,
- 637461270,
- 637461300,
- 637461330,
- 637461360,
- 637461390,
- 637461420,
- 637461450,
- 637461480,
- 637461510,
- 637461540,
- 637461570,
- 637461600,
- 637461630,
- 637461660,
- 637461690,
- 637461720,
- 637461750,
- 637461780,
- 637461810,
- 637461840,
- 637461870,
- 637461900,
- 637461930,
- 637461960,
- 637461990,
- 637462020,
- 637462050,
- 637462080,
- 637462110,
- 637462140,
- 637462170,
- 637462200,
- 637462230,
- 637462260,
- 637462290,
- 637462320,
- 637462350,
- 637462380,
- 637462410,
- 637462440,
- 637462470,
- 637462500,
- 637462530,
- 637462560,
- 637462590,
- 637462620,
- 637462650,
- 637462680,
- 637462710,
- 637462740,
- 637462770,
- 637462800,
- 637462830,
- 637462860,
- 637462890,
- 637462920,
- 637462950,
- 637462980,
- 637463010,
- 637463040,
- 637463070,
- 637463100,
- 637463130,
- 637463160,
- 637463190,
- 637463220,
- 637463250,
- 637463280,
- 637463310,
- 637463340,
- 637463370,
- 637463400,
- 637463430,
- 637463460,
- 637463490,
- 637463520,
- 637463550,
- 637463580,
- 637463610,
- 637463640,
- 637463670,
- 637463700,
- 637463730,
- 637463760,
- 637463790,
- 637463820,
- 637463850,
- 637463880,
- 637463910,
- 637463940,
- 637463970,
- 637464000,
- 637464030,
- 637464060,
- 637464090,
- 637464120,
- 637464150,
- 637464180,
- 637464210,
- 637464240,
- 637464270,
- 637464300,
- 637464330,
- 637464360,
- 637464390,
- 637464420,
- 637464450,
- 637464480,
- 637464510,
- 637464540,
- 637464570,
- 637464600,
- 637464630,
- 637464660,
- 637464690,
- 637464720,
- 637464750,
- 637464780,
- 637464810,
- 637464840,
- 637464870,
- 637464900,
- 637464930,
- 637464960,
- 637464990,
- 637465020,
- 637465050,
- 637465080,
- 637465110,
- 637465140,
- 637465170,
- 637465200,
- 637465230,
- 637465260,
- 637465290,
- 637465320,
- 637465350,
- 637465380,
- 637465410,
- 637465440,
- 637465470,
- 637465500,
- 637465530,
- 637465560,
- 637465590,
- 637465620,
- 637465650,
- 637465680,
- 637465710,
- 637465740,
- 637465770,
- 637465800,
- 637465830,
- 637465860,
- 637465890,
- 637465920,
- 637465950,
- 637465980,
- 637466010,
- 637466040,
- 637466070,
- 637466100,
- 637466130,
- 637466160,
- 637466190,
- 637466220,
- 637466250,
- 637466280,
- 637466310,
- 637466340,
- 637466370,
- 637466400,
- 637466430,
- 637466460,
- 637466490,
- 637466520,
- 637466550,
- 637466580,
- 637466610,
- 637466640,
- 637466670,
- 637466700,
- 637466730,
- 637466760,
- 637466790,
- 637466820,
- 637466850,
- 637466880,
- 637466910,
- 637466940,
- 637466970,
- 637467000,
- 637467030,
- 637467060,
- 637467090,
- 637467120,
- 637467150,
- 637467180,
- 637467210,
- 637467240,
- 637467270,
- 637467300,
- 637467330,
- 637467360,
- 637467390,
- 637467420,
- 637467450,
- 637467480,
- 637467510,
- 637467540,
- 637467570,
- 637467600,
- 637467630,
- 637467660,
- 637467690,
- 637467720,
- 637467750,
- 637467780,
- 637467810,
- 637467840,
- 637467870,
- 637467900,
- 637467930,
- 637467960,
- 637467990,
- 637468020,
- 637468050,
- 637468080,
- 637468110,
- 637468140,
- 637468170,
- 637468200,
- 637468230,
- 637468260,
- 637468290,
- 637468320,
- 637468350,
- 637468380,
- 637468410,
- 637468440,
- 637468470,
- 637468500,
- 637468530,
- 637468560,
- 637468590,
- 637468620,
- 637468650,
- 637468680,
- 637468710,
- 637468740,
- 637468770,
- 637468800,
- 637468830,
- 637468860,
- 637468890,
- 637468920,
- 637468950,
- 637468980,
- 637469010,
- 637469040,
- 637469070,
- 637469100,
- 637469130,
- 637469160,
- 637469190,
- 637469220,
- 637469250,
- 637469280,
- 637469310,
- 637469340,
- 637469370,
- 637469400,
- 637469430,
- 637469460,
- 637469490,
- 637469520,
- 637469550,
- 637469580,
- 637469610,
- 637469640,
- 637469670,
- 637469700,
- 637469730,
- 637469760,
- 637469790,
- 637469820,
- 637469850,
- 637469880,
- 637469910,
- 637469940,
- 637469970,
- 637470000,
- 637470030,
- 637470060,
- 637470090,
- 637470120,
- 637470150,
- 637470180,
- 637470210,
- 637470240,
- 637470270,
- 637470300,
- 637470330,
- 637470360,
- 637470390,
- 637470420,
- 637470450,
- 637470480,
- 637470510,
- 637470540,
- 637470570,
- 637470600,
- 637470630,
- 637470660,
- 637470690,
- 637470720,
- 637470750,
- 637470780,
- 637470810,
- 637470840,
- 637470870,
- 637470900,
- 637470930,
- 637470960,
- 637470990,
- 637471020,
- 637471050,
- 637471080,
- 637471110,
- 637471140,
- 637471170,
- 637471200,
- 637471230,
- 637471260,
- 637471290,
- 637471320,
- 637471350,
- 637471380,
- 637471410,
- 637471440,
- 637471470,
- 637471500,
- 637471530,
- 637471560,
- 637471590,
- 637471620,
- 637471650,
- 637471680,
- 637471710,
- 637471740,
- 637471770,
- 637471800,
- 637471830,
- 637471860,
- 637471890,
- 637471920,
- 637471950,
- 637471980,
- 637472010,
- 637472040,
- 637472070,
- 637472100,
- 637472130,
- 637472160,
- 637472190,
- 637472220,
- 637472250,
- 637472280,
- 637472310,
- 637472340,
- 637472370,
- 637472400,
- 637472430,
- 637472460,
- 637472490,
- 637472520,
- 637472550,
- 637472580,
- 637472610,
- 637472640,
- 637472670,
- 637472700,
- 637472730,
- 637472760,
- 637472790,
- 637472820,
- 637472850,
- 637472880,
- 637472910,
- 637472940,
- 637472970,
- 637473000,
- 637473030,
- 637473060,
- 637473090,
- 637473120,
- 637473150,
- 637473180,
- 637473210,
- 637473240,
- 637473270,
- 637473300,
- 637473330,
- 637473360,
- 637473390,
- 637473420,
- 637473450,
- 637473480,
- 637473510,
- 637473540,
- 637473570,
- 637473600,
- 637473630,
- 637473660,
- 637473690,
- 637473720,
- 637473750,
- 637473780,
- 637473810,
- 637473840,
- 637473870,
- 637473900,
- 637473930,
- 637473960,
- 637473990,
- 637474020,
- 637474050,
- 637474080,
- 637474110,
- 637474140,
- 637474170,
- 637474200,
- 637474230,
- 637474260,
- 637474290,
- 637474320,
- 637474350,
- 637474380,
- 637474410,
- 637474440,
- 637474470,
- 637474500,
- 637474530,
- 637474560,
- 637474590,
- 637474620,
- 637474650,
- 637474680,
- 637474710,
- 637474740,
- 637474770,
- 637474800,
- 637474830,
- 637474860,
- 637474890,
- 637474920,
- 637474950,
- 637474980,
- 637475010,
- 637475040,
- 637475070,
- 637475100,
- 637475130,
- 637475160,
- 637475190,
- 637475220,
- 637475250,
- 637475280,
- 637475310,
- 637475340,
- 637475370,
- 637475400,
- 637475430,
- 637475460,
- 637475490,
- 637475520,
- 637475550,
- 637475580,
- 637475610,
- 637475640,
- 637475670,
- 637475700,
- 637475730,
- 637475760,
- 637475790,
- 637475820,
- 637475850,
- 637475880,
- 637475910,
- 637475940,
- 637475970,
- 637476000,
- 637476030,
- 637476060,
- 637476090,
- 637476120,
- 637476150,
- 637476180,
- 637476210,
- 637476240,
- 637476270,
- 637476300,
- 637476330,
- 637476360,
- 637476390,
- 637476420,
- 637476450,
- 637476480,
- 637476510,
- 637476540,
- 637476570,
- 637476600,
- 637476630,
- 637476660,
- 637476690,
- 637476720,
- 637476750,
- 637476780,
- 637476810,
- 637476840,
- 637476870,
- 637476900,
- 637476930,
- 637476960,
- 637476990,
- 637477020,
- 637477050,
- 637477080,
- 637477110,
- 637477140,
- 637477170,
- 637477200,
- 637477230,
- 637477260,
- 637477290,
- 637477320,
- 637477350,
- 637477380,
- 637477410,
- 637477440,
- 637477470,
- 637477500,
- 637477530,
- 637477560,
- 637477590,
- 637477620,
- 637477650,
- 637477680,
- 637477710,
- 637477740,
- 637477770,
- 637477800,
- 637477830,
- 637477860,
- 637477890,
- 637477920,
- 637477950,
- 637477980,
- 637478010,
- 637478040,
- 637478070,
- 637478100,
- 637478130,
- 637478160,
- 637478190,
- 637478220,
- 637478250,
- 637478280,
- 637478310,
- 637478340,
- 637478370,
- 637478400,
- 637478430,
- 637478460,
- 637478490,
- 637478520,
- 637478550,
- 637478580,
- 637478610,
- 637478640,
- 637478670,
- 637478700,
- 637478730,
- 637478760,
- 637478790,
- 637478820,
- 637478850,
- 637478880,
- 637478910,
- 637478940,
- 637478970,
- 637479000,
- 637479030,
- 637479060,
- 637479090,
- 637479120,
- 637479150,
- 637479180,
- 637479210,
- 637479240,
- 637479270,
- 637479300,
- 637479330,
- 637479360,
- 637479390,
- 637479420,
- 637479450,
- 637479480,
- 637479510,
- 637479540,
- 637479570,
- 637479600,
- 637479630,
- 637479660,
- 637479690,
- 637479720,
- 637479750,
- 637479780,
- 637479810,
- 637479840,
- 637479870,
- 637479900,
- 637479930,
- 637479960,
- 637479990,
- 637480020,
- 637480050,
- 637480080,
- 637480110,
- 637480140,
- 637480170,
- 637480200,
- 637480230,
- 637480260,
- 637480290,
- 637480320,
- 637480350,
- 637480380,
- 637480410,
- 637480440,
- 637480470,
- 637480500,
- 637480530,
- 637480560,
- 637480590,
- 637480620,
- 637480650,
- 637480680,
- 637480710,
- 637480740,
- 637480770,
- 637480800,
- 637480830,
- 637480860,
- 637480890,
- 637480920,
- 637480950,
- 637480980,
- 637481010,
- 637481040,
- 637481070,
- 637481100,
- 637481130,
- 637481160,
- 637481190,
- 637481220,
- 637481250,
- 637481280,
- 637481310,
- 637481340,
- 637481370,
- 637481400,
- 637481430,
- 637481460,
- 637481490,
- 637481520,
- 637481550,
- 637481580,
- 637481610,
- 637481640,
- 637481670,
- 637481700,
- 637481730,
- 637481760,
- 637481790,
- 637481820,
- 637481850,
- 637481880,
- 637481910,
- 637481940,
- 637481970,
- 637482000,
- 637482030,
- 637482060,
- 637482090,
- 637482120,
- 637482150,
- 637482180,
- 637482210,
- 637482240,
- 637482270,
- 637482300,
- 637482330,
- 637482360,
- 637482390,
- 637482420,
- 637482450,
- 637482480,
- 637482510,
- 637482540,
- 637482570,
- 637482600,
- 637482630,
- 637482660,
- 637482690,
- 637482720,
- 637482750,
- 637482780,
- 637482810,
- 637482840,
- 637482870,
- 637482900,
- 637482930,
- 637482960,
- 637482990,
- 637483020,
- 637483050,
- 637483080,
- 637483110,
- 637483140,
- 637483170,
- 637483200,
- 637483230,
- 637483260,
- 637483290,
- 637483320,
- 637483350,
- 637483380,
- 637483410,
- 637483440,
- 637483470,
- 637483500,
- 637483530,
- 637483560,
- 637483590,
- 637483620,
- 637483650,
- 637483680,
- 637483710,
- 637483740,
- 637483770,
- 637483800,
- 637483830,
- 637483860,
- 637483890,
- 637483920,
- 637483950,
- 637483980,
- 637484010,
- 637484040,
- 637484070,
- 637484100,
- 637484130,
- 637484160,
- 637484190,
- 637484220,
- 637484250,
- 637484280,
- 637484310,
- 637484340,
- 637484370,
- 637484400,
- 637484430,
- 637484460,
- 637484490,
- 637484520,
- 637484550,
- 637484580,
- 637484610,
- 637484640,
- 637484670,
- 637484700,
- 637484730,
- 637484760,
- 637484790,
- 637484820,
- 637484850,
- 637484880,
- 637484910,
- 637484940,
- 637484970,
- 637485000,
- 637485030,
- 637485060,
- 637485090,
- 637485120,
- 637485150,
- 637485180,
- 637485210
- ],
- "stages": [
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "REM",
- "REM",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N2",
- "N3",
- "N2",
- "N2",
- "N3",
- "N3",
- "N2",
- "N3",
- "N3",
- "N3",
- "N2",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "N1",
- "N1",
- "N1",
- "REM",
- "REM",
- "REM",
- "REM",
- "W",
- "N1",
- "N1",
- "N1",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N3",
- "N3",
- "N3",
- "N3",
- "N3",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "N2",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "REM",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "N1",
- "W",
- "N1",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "W",
- "N1",
- "W",
- "W",
- "N1",
- "W",
- "N1",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W",
- "W"
- ]
- }
-}
+{"epochs": {"timestamps": [615514680, 615514710, 615514740, 615514770, 615514800, 615514830, 615514860, 615514890, 615514920, 615514950, 615514980, 615515010, 615515040, 615515070, 615515100, 615515130, 615515160, 615515190, 615515220, 615515250, 615515280, 615515310, 615515340, 615515370, 615515400, 615515430, 615515460, 615515490, 615515520, 615515550, 615515580, 615515610, 615515640, 615515670, 615515700, 615515730, 615515760, 615515790, 615515820, 615515850, 615515880, 615515910, 615515940, 615515970, 615516000, 615516030, 615516060, 615516090, 615516120, 615516150, 615516180, 615516210, 615516240, 615516270, 615516300, 615516330, 615516360, 615516390, 615516420, 615516450, 615516480, 615516510, 615516540, 615516570, 615516600, 615516630, 615516660, 615516690, 615516720, 615516750, 615516780, 615516810, 615516840, 615516870, 615516900, 615516930, 615516960, 615516990, 615517020, 615517050, 615517080, 615517110, 615517140, 615517170, 615517200, 615517230, 615517260, 615517290, 615517320, 615517350, 615517380, 615517410, 615517440, 615517470, 615517500, 615517530, 615517560, 615517590, 615517620, 615517650, 615517680, 615517710, 615517740, 615517770, 615517800, 615517830, 615517860, 615517890, 615517920, 615517950, 615517980, 615518010, 615518040, 615518070, 615518100, 615518130, 615518160, 615518190, 615518220, 615518250, 615518280, 615518310, 615518340, 615518370, 615518400, 615518430, 615518460, 615518490, 615518520, 615518550, 615518580, 615518610, 615518640, 615518670, 615518700, 615518730, 615518760, 615518790, 615518820, 615518850, 615518880, 615518910, 615518940, 615518970, 615519000, 615519030, 615519060, 615519090, 615519120, 615519150, 615519180, 615519210, 615519240, 615519270, 615519300, 615519330, 615519360, 615519390, 615519420, 615519450, 615519480, 615519510, 615519540, 615519570, 615519600, 615519630, 615519660, 615519690, 615519720, 615519750, 615519780, 615519810, 615519840, 615519870, 615519900, 615519930, 615519960, 615519990, 615520020, 615520050, 615520080, 615520110, 615520140, 615520170, 615520200, 615520230, 615520260, 615520290, 615520320, 615520350, 615520380, 615520410, 615520440, 615520470, 615520500, 615520530, 615520560, 615520590, 615520620, 615520650, 615520680, 615520710, 615520740, 615520770, 615520800, 615520830, 615520860, 615520890, 615520920, 615520950, 615520980, 615521010, 615521040, 615521070, 615521100, 615521130, 615521160, 615521190, 615521220, 615521250, 615521280, 615521310, 615521340, 615521370, 615521400, 615521430, 615521460, 615521490, 615521520, 615521550, 615521580, 615521610, 615521640, 615521670, 615521700, 615521730, 615521760, 615521790, 615521820, 615521850, 615521880, 615521910, 615521940, 615521970, 615522000, 615522030, 615522060, 615522090, 615522120, 615522150, 615522180, 615522210, 615522240, 615522270, 615522300, 615522330, 615522360, 615522390, 615522420, 615522450, 615522480, 615522510, 615522540, 615522570, 615522600, 615522630, 615522660, 615522690, 615522720, 615522750, 615522780, 615522810, 615522840, 615522870, 615522900, 615522930, 615522960, 615522990, 615523020, 615523050, 615523080, 615523110, 615523140, 615523170, 615523200, 615523230, 615523260, 615523290, 615523320, 615523350, 615523380, 615523410, 615523440, 615523470, 615523500, 615523530, 615523560, 615523590, 615523620, 615523650, 615523680, 615523710, 615523740, 615523770, 615523800, 615523830, 615523860, 615523890, 615523920, 615523950, 615523980, 615524010, 615524040, 615524070, 615524100, 615524130, 615524160, 615524190, 615524220, 615524250, 615524280, 615524310, 615524340, 615524370, 615524400, 615524430, 615524460, 615524490, 615524520, 615524550, 615524580, 615524610, 615524640, 615524670, 615524700, 615524730, 615524760, 615524790, 615524820, 615524850, 615524880, 615524910, 615524940, 615524970, 615525000, 615525030, 615525060, 615525090, 615525120, 615525150, 615525180, 615525210, 615525240, 615525270, 615525300, 615525330, 615525360, 615525390, 615525420, 615525450, 615525480, 615525510, 615525540, 615525570, 615525600, 615525630, 615525660, 615525690, 615525720, 615525750, 615525780, 615525810, 615525840, 615525870, 615525900, 615525930, 615525960, 615525990, 615526020, 615526050, 615526080, 615526110, 615526140, 615526170, 615526200, 615526230, 615526260, 615526290, 615526320, 615526350, 615526380, 615526410, 615526440, 615526470, 615526500, 615526530, 615526560, 615526590, 615526620, 615526650, 615526680, 615526710, 615526740, 615526770, 615526800, 615526830, 615526860, 615526890, 615526920, 615526950, 615526980, 615527010, 615527040, 615527070, 615527100, 615527130, 615527160, 615527190, 615527220, 615527250, 615527280, 615527310, 615527340, 615527370, 615527400, 615527430, 615527460, 615527490, 615527520, 615527550, 615527580, 615527610, 615527640, 615527670, 615527700, 615527730, 615527760, 615527790, 615527820, 615527850, 615527880, 615527910, 615527940, 615527970, 615528000, 615528030, 615528060, 615528090, 615528120, 615528150, 615528180, 615528210, 615528240, 615528270, 615528300, 615528330, 615528360, 615528390, 615528420, 615528450, 615528480, 615528510, 615528540, 615528570, 615528600, 615528630, 615528660, 615528690, 615528720, 615528750, 615528780, 615528810, 615528840, 615528870, 615528900, 615528930, 615528960, 615528990, 615529020, 615529050, 615529080, 615529110, 615529140, 615529170, 615529200, 615529230, 615529260, 615529290, 615529320, 615529350, 615529380, 615529410, 615529440, 615529470, 615529500, 615529530, 615529560, 615529590, 615529620, 615529650, 615529680, 615529710, 615529740, 615529770, 615529800, 615529830, 615529860, 615529890, 615529920, 615529950, 615529980, 615530010, 615530040, 615530070, 615530100, 615530130, 615530160, 615530190, 615530220, 615530250, 615530280, 615530310, 615530340, 615530370, 615530400, 615530430, 615530460, 615530490, 615530520, 615530550, 615530580, 615530610, 615530640, 615530670, 615530700, 615530730, 615530760, 615530790, 615530820, 615530850, 615530880, 615530910, 615530940, 615530970, 615531000, 615531030, 615531060, 615531090, 615531120, 615531150, 615531180, 615531210, 615531240, 615531270, 615531300, 615531330, 615531360, 615531390, 615531420, 615531450, 615531480, 615531510, 615531540, 615531570, 615531600, 615531630, 615531660, 615531690, 615531720, 615531750, 615531780, 615531810, 615531840, 615531870, 615531900, 615531930, 615531960, 615531990, 615532020, 615532050, 615532080, 615532110, 615532140, 615532170, 615532200, 615532230, 615532260, 615532290, 615532320, 615532350, 615532380, 615532410, 615532440, 615532470, 615532500, 615532530, 615532560, 615532590, 615532620, 615532650, 615532680, 615532710, 615532740, 615532770, 615532800, 615532830, 615532860, 615532890, 615532920, 615532950, 615532980, 615533010, 615533040, 615533070, 615533100, 615533130, 615533160, 615533190, 615533220, 615533250, 615533280, 615533310, 615533340, 615533370, 615533400, 615533430, 615533460, 615533490, 615533520, 615533550, 615533580, 615533610, 615533640, 615533670, 615533700, 615533730, 615533760, 615533790, 615533820, 615533850, 615533880, 615533910, 615533940, 615533970, 615534000, 615534030, 615534060, 615534090, 615534120, 615534150, 615534180, 615534210, 615534240, 615534270, 615534300, 615534330, 615534360, 615534390, 615534420, 615534450, 615534480, 615534510, 615534540, 615534570, 615534600, 615534630, 615534660, 615534690, 615534720, 615534750, 615534780, 615534810, 615534840, 615534870, 615534900, 615534930, 615534960, 615534990, 615535020, 615535050, 615535080, 615535110, 615535140, 615535170, 615535200, 615535230, 615535260, 615535290, 615535320, 615535350, 615535380, 615535410, 615535440, 615535470, 615535500, 615535530, 615535560, 615535590, 615535620, 615535650, 615535680, 615535710, 615535740, 615535770, 615535800, 615535830, 615535860, 615535890, 615535920, 615535950, 615535980, 615536010, 615536040, 615536070, 615536100, 615536130, 615536160, 615536190, 615536220, 615536250, 615536280, 615536310, 615536340, 615536370, 615536400, 615536430, 615536460, 615536490, 615536520, 615536550, 615536580, 615536610, 615536640, 615536670, 615536700, 615536730, 615536760, 615536790, 615536820, 615536850, 615536880, 615536910, 615536940, 615536970, 615537000, 615537030, 615537060, 615537090, 615537120, 615537150, 615537180, 615537210, 615537240, 615537270, 615537300, 615537330, 615537360, 615537390, 615537420, 615537450, 615537480, 615537510, 615537540, 615537570, 615537600, 615537630, 615537660, 615537690, 615537720, 615537750, 615537780, 615537810, 615537840, 615537870, 615537900, 615537930, 615537960, 615537990, 615538020, 615538050, 615538080, 615538110, 615538140, 615538170, 615538200, 615538230, 615538260, 615538290, 615538320, 615538350, 615538380, 615538410, 615538440, 615538470, 615538500, 615538530, 615538560, 615538590, 615538620, 615538650, 615538680, 615538710, 615538740, 615538770, 615538800, 615538830, 615538860, 615538890, 615538920, 615538950, 615538980, 615539010, 615539040, 615539070, 615539100, 615539130, 615539160, 615539190, 615539220, 615539250, 615539280, 615539310, 615539340, 615539370, 615539400, 615539430, 615539460, 615539490, 615539520, 615539550, 615539580, 615539610, 615539640, 615539670, 615539700, 615539730, 615539760, 615539790, 615539820, 615539850, 615539880, 615539910, 615539940, 615539970, 615540000, 615540030, 615540060, 615540090, 615540120, 615540150, 615540180, 615540210, 615540240, 615540270, 615540300, 615540330, 615540360, 615540390, 615540420, 615540450, 615540480, 615540510, 615540540, 615540570, 615540600, 615540630, 615540660, 615540690, 615540720, 615540750, 615540780, 615540810, 615540840, 615540870, 615540900, 615540930, 615540960, 615540990, 615541020, 615541050, 615541080, 615541110, 615541140, 615541170, 615541200, 615541230, 615541260, 615541290, 615541320, 615541350, 615541380, 615541410, 615541440, 615541470, 615541500, 615541530, 615541560, 615541590, 615541620, 615541650, 615541680, 615541710, 615541740, 615541770, 615541800, 615541830, 615541860, 615541890, 615541920, 615541950, 615541980, 615542010, 615542040, 615542070, 615542100, 615542130, 615542160, 615542190, 615542220, 615542250, 615542280, 615542310, 615542340, 615542370, 615542400, 615542430, 615542460, 615542490, 615542520, 615542550, 615542580, 615542610, 615542640, 615542670, 615542700, 615542730, 615542760, 615542790, 615542820, 615542850, 615542880, 615542910, 615542940, 615542970, 615543000, 615543030, 615543060, 615543090, 615543120, 615543150, 615543180, 615543210, 615543240, 615543270, 615543300, 615543330, 615543360, 615543390, 615543420, 615543450, 615543480, 615543510, 615543540, 615543570, 615543600, 615543630, 615543660, 615543690, 615543720, 615543750, 615543780, 615543810, 615543840, 615543870, 615543900, 615543930, 615543960, 615543990, 615544020, 615544050, 615544080, 615544110, 615544140, 615544170, 615544200, 615544230, 615544260, 615544290, 615544320, 615544350, 615544380, 615544410, 615544440, 615544470, 615544500, 615544530, 615544560, 615544590, 615544620, 615544650, 615544680, 615544710, 615544740, 615544770, 615544800, 615544830, 615544860, 615544890, 615544920, 615544950, 615544980, 615545010, 615545040, 615545070, 615545100, 615545130, 615545160, 615545190, 615545220, 615545250, 615545280, 615545310, 615545340, 615545370, 615545400, 615545430, 615545460, 615545490, 615545520, 615545550, 615545580, 615545610, 615545640, 615545670, 615545700, 615545730, 615545760, 615545790, 615545820, 615545850, 615545880, 615545910, 615545940, 615545970, 615546000, 615546030, 615546060, 615546090, 615546120, 615546150, 615546180, 615546210, 615546240, 615546270, 615546300, 615546330, 615546360, 615546390, 615546420, 615546450, 615546480, 615546510, 615546540, 615546570, 615546600, 615546630, 615546660, 615546690, 615546720, 615546750, 615546780, 615546810, 615546840, 615546870, 615546900, 615546930, 615546960, 615546990, 615547020, 615547050, 615547080, 615547110, 615547140, 615547170, 615547200, 615547230, 615547260, 615547290, 615547320, 615547350, 615547380, 615547410, 615547440, 615547470, 615547500, 615547530, 615547560, 615547590, 615547620, 615547650, 615547680, 615547710, 615547740, 615547770, 615547800, 615547830, 615547860, 615547890, 615547920, 615547950, 615547980, 615548010, 615548040, 615548070, 615548100, 615548130, 615548160, 615548190, 615548220, 615548250, 615548280, 615548310, 615548340, 615548370, 615548400, 615548430, 615548460, 615548490, 615548520, 615548550, 615548580, 615548610, 615548640, 615548670, 615548700, 615548730, 615548760, 615548790, 615548820, 615548850, 615548880, 615548910, 615548940, 615548970, 615549000, 615549030, 615549060, 615549090, 615549120, 615549150, 615549180, 615549210, 615549240, 615549270, 615549300, 615549330, 615549360, 615549390, 615549420, 615549450, 615549480, 615549510, 615549540, 615549570, 615549600, 615549630, 615549660, 615549690, 615549720, 615549750, 615549780, 615549810, 615549840, 615549870, 615549900, 615549930, 615549960, 615549990, 615550020, 615550050, 615550080, 615550110, 615550140, 615550170, 615550200, 615550230, 615550260, 615550290], "stages": ["W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N3", "N3", "N3", "N3", "N3", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "W", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N3", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "W", "W", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "W", "W", "N1", "N1", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N3", "N3", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "REM", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "N1", "N1", "N1", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N2", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "N1", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W"]}}
\ No newline at end of file
diff --git a/web/src/views/performance/index.js b/web/src/views/performance/index.js
index 027d4e27..3171cb45 100644
--- a/web/src/views/performance/index.js
+++ b/web/src/views/performance/index.js
@@ -57,9 +57,8 @@ const Performance = () => {
/>
- Ever wonder what is the value of this application? This page aims to illustrate the relative performance of
- our sleep scoring compared to clinical hypnogram scoring (which is usually considered the state-of-the-art
- technique).
+ This page aims to illustrate the relative performance of our sleep scoring compared to clinical hypnogram
+ scoring (which is usually considered the state-of-the-art technique).
Here is the plan:
diff --git a/web/src/views/performance/text.json b/web/src/views/performance/text.json
index 2d865b90..f8e4812f 100644
--- a/web/src/views/performance/text.json
+++ b/web/src/views/performance/text.json
@@ -1,5 +1,5 @@
{
"header_title": "Performances",
- "header_subtitle": "of our classifier and the state of the art",
+ "header_subtitle": "of our classifier compared to manual scoring",
"header_description": "Let's see the performances of Polydodo and nuance its output"
}
From cb0eb23642ca97222bbf3a38f60f0e461eed8434 Mon Sep 17 00:00:00 2001
From: Claudia Onorato
Date: Sun, 22 Nov 2020 19:24:31 -0500
Subject: [PATCH 02/14] added results on test set
---
ai/models/RF_HMM_smaller.ipynb | 63 +++++++++++++++++++++++----
web/src/views/performance/index.js | 69 ++++++++++++++++++++----------
2 files changed, 100 insertions(+), 32 deletions(-)
diff --git a/ai/models/RF_HMM_smaller.ipynb b/ai/models/RF_HMM_smaller.ipynb
index 7e6f6838..a1c29d41 100644
--- a/ai/models/RF_HMM_smaller.ipynb
+++ b/ai/models/RF_HMM_smaller.ipynb
@@ -30,7 +30,7 @@
},
{
"cell_type": "code",
- "execution_count": 18,
+ "execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
@@ -164,7 +164,7 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
@@ -188,7 +188,7 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 8,
"metadata": {},
"outputs": [
{
@@ -225,7 +225,7 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": 9,
"metadata": {},
"outputs": [
{
@@ -259,7 +259,7 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
@@ -533,15 +533,15 @@
},
{
"cell_type": "code",
- "execution_count": 20,
+ "execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "CPU times: user 3min 41s, sys: 2.12 s, total: 3min 43s\n",
- "Wall time: 1min 13s\n"
+ "CPU times: user 3min 41s, sys: 2.2 s, total: 3min 44s\n",
+ "Wall time: 1min 21s\n"
]
}
],
@@ -620,7 +620,7 @@
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": 12,
"metadata": {},
"outputs": [
{
@@ -658,6 +658,51 @@
"print(\"Agreement score (Cohen Kappa): \", cohen_kappa_score(y_test, y_test_pred))"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[[1457 66 41 5 55]\n",
+ " [ 186 259 318 3 217]\n",
+ " [ 6 43 3195 245 114]\n",
+ " [ 0 0 34 577 0]\n",
+ " [ 7 10 146 0 1139]]\n",
+ " precision recall f1-score support\n",
+ "\n",
+ " W 0.88 0.90 0.89 1624\n",
+ " N1 0.69 0.26 0.38 983\n",
+ " N2 0.86 0.89 0.87 3603\n",
+ " N3 0.70 0.94 0.80 611\n",
+ " REM 0.75 0.87 0.81 1302\n",
+ "\n",
+ " accuracy 0.82 8123\n",
+ " macro avg 0.77 0.77 0.75 8123\n",
+ "weighted avg 0.81 0.82 0.80 8123\n",
+ "\n",
+ "Agreement score (Cohen Kappa): 0.7413141526163325\n"
+ ]
+ }
+ ],
+ "source": [
+ "hmm_model = MultinomialHMM(n_components=N_STAGES)\n",
+ "\n",
+ "MODELS_DIR = \"../trained_model\"\n",
+ "hmm_model.emissionprob_ = np.load(f\"{MODELS_DIR}/HMM_emissionprob.npy\", allow_pickle=True)\n",
+ "hmm_model.startprob_ = np.load(f\"{MODELS_DIR}/HMM_startprob.npy\", allow_pickle=True)\n",
+ "hmm_model.transmat_ = np.load(f\"{MODELS_DIR}/HMM_transmat.npy\", allow_pickle=True)\n",
+ "\n",
+ "y_test_pred = hmm_model.predict(y_test_pred.reshape(-1, 1))\n",
+ "\n",
+ "print(confusion_matrix(y_test, y_test_pred))\n",
+ "print(classification_report(y_test, y_test_pred, target_names=SLEEP_STAGES_VALUES.keys()))\n",
+ "print(\"Agreement score (Cohen Kappa): \", cohen_kappa_score(y_test, y_test_pred))"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
diff --git a/web/src/views/performance/index.js b/web/src/views/performance/index.js
index 3171cb45..08104ec0 100644
--- a/web/src/views/performance/index.js
+++ b/web/src/views/performance/index.js
@@ -56,9 +56,17 @@ const Performance = () => {
description={text['header_description']}
/>
+
+ This page aims to illustrate the performance of our sleep scoring compared to clinical hypnogram scoring
+ (which is usually considered the state-of-the-art technique). If you want to learn more about how we've
+ defined our sleep scoring algorithm, please either refer to our presentation video in our home page, or to our{' '}
+
+ wiki page
+
+ .
+
- This page aims to illustrate the relative performance of our sleep scoring compared to clinical hypnogram
- scoring (which is usually considered the state-of-the-art technique).
+
Here is the plan:
@@ -81,49 +89,64 @@ const Performance = () => {
results and maybe get an idea of the usual disagreement level between professional scorers.
-
Classifier's accuracy according to Sleep-EDF
+ Classifier's accuracy according to Sleep-EDF (kappa:0.6709)
createComparativeHypnogram(svg, data, ['Classifier', 'Sleep-EDF'])}
data={[predictedWoman78yoSleepEDF.epochs, physionetWoman78yoSleepEDF.epochs]}
/>
- Classifier's accuracy according to the electrophysiologist
+ Classifier's accuracy according to the electrophysiologist (kappa;0.8310)
createComparativeHypnogram(svg, data, ['Classifier', 'Electrophysiologist'])}
data={[predictedWilliamCyton.epochs, electrophysiologistWilliamCyton.epochs]}
/>
- Electrophysiologist and Sleep-EDF's agreement
+ Electrophysiologist and Sleep-EDF's agreement (kappa:0.6315)
createComparativeHypnogram(svg, data, ['Electrophysiologist', 'Sleep-EDF'])}
data={[electrophysiologistWoman78yoSleepEDF.epochs, physionetWoman78yoSleepEDF.epochs]}
/>
+ Classifier's accuracy according to Sleep-EDF testing set (kappa:0.74131)
+ createComparativeHypnogram(svg, data, ['Classifier', 'Sleep-EDF'])}
+ data={[predictedWoman78yoSleepEDF.epochs, physionetWoman78yoSleepEDF.epochs]}
+ />
+
From 592b0654c9f4d984aefe4bfd84b37b543d1a38a2 Mon Sep 17 00:00:00 2001
From: Claudia Onorato
Date: Sun, 22 Nov 2020 20:35:36 -0500
Subject: [PATCH 03/14] added performance metrics on test set
---
web/src/views/performance/index.js | 78 ++++++++++++++++++++++--------
1 file changed, 59 insertions(+), 19 deletions(-)
diff --git a/web/src/views/performance/index.js b/web/src/views/performance/index.js
index 08104ec0..b50b4221 100644
--- a/web/src/views/performance/index.js
+++ b/web/src/views/performance/index.js
@@ -57,20 +57,75 @@ const Performance = () => {
/>
- This page aims to illustrate the performance of our sleep scoring compared to clinical hypnogram scoring
- (which is usually considered the state-of-the-art technique). If you want to learn more about how we've
- defined our sleep scoring algorithm, please either refer to our presentation video in our home page, or to our{' '}
+ This page aims to illustrate the performance of our sleep scoring compared to clinical hypnogram scoring,
+ which is usually considered the gold standard in sleep stage scoring. If you want to learn more about how
+ we've defined our sleep scoring algorithm, please either refer to our presentation video in our home page, or
+ to our{' '}
wiki page
.
+ Model training and selection
+ In order to train our model to predict sleep stages based on EEG data, we used an open source dataset,
+
+ Physionet SleepEDF expanded
+
+ , which is composed of 153 nights of sleep coming from 82 subjects, of different ages and sex. The labelled
+ data has been produced by well-trained technicians according to the 1968 Rechtschaffen and Kales manual,
+ adapted to the used EEG montage. In order to compare and validate the prototyped models, we divided the data
+ into a training and testing set, and we made sure that both sets had different subjects. Indeed, we didn't
+ want our test metrics to be biaised, as we'd have already trained on data coming from a same subject.
+
+
+ In order to select the most accurate model, we looked at the{' '}
+
+ Cohen's Kappa agreement score
+
+ , as it is often used in the automatic sleep scoring litterature. We then chose the model with the highest
+ agreement score, which is a voting classifier, composed of a K Nearest Neighbour and a Random Forest
+ classifiers. Unfortunatly, the model couldn't be exported to be used in the server, as we included, inside the
+ voting classifier, a pipeline to reduce the dimension of the inputed features. We then decided to use our
+ second best model, which is a Random Forest. It is the one we will evaluate the performances, as it is the one
+ currently used to classify sleep stages in our server.
- Here is the plan:
+ Let's first look at the performances of the classifier over the selected test set composed of subjects from
+ the SleepEDF dataset. The resulted Cohen's Kappa agreement score is{' '}
+
+ 0.741
+
+ . Please note that the classes are imbalanced, and thus impacting the metrics displayed.
+ Classifier's accuracy according to Sleep-EDF testing set
+
+
+
+
+ The test set, on which these metrics were calculated, is composed of subjects from different ages groups (33
+ year old female, 54 year old female, 67 year old female, 88 year old male), so that the obtained score is the
+ most representative of our ability to classify sleep, no matter the age. In another side, we could compare the
+ results obtained to the ones found in the litterature. To do so, we had to find a paper that uses the same
+ dataset, the same metric and that splits their dataset in a similar fashion as ours.TODO.
+
+
+ Although we obtain good results, it didn't quite validate that our classifier could accurately score OpenBCI
+ data into sleep stages. After all, we only validated on data coming from the same acquisition hardware than
+ the data we trained on, which is not the case when we analyze data submitted in the application. We then had
+ to make our own polysomnographic dataset based on the hardware we use, so using an OpenBCI board.
+
+
First, we will check how our classifier’s scoring agrees with the scoring within the Physionet's Sleep-EDF
@@ -134,21 +189,6 @@ const Performance = () => {
['Accuracy', '', '', 74, 1188],
]}
/>
- Classifier's accuracy according to Sleep-EDF testing set (kappa:0.74131)
- createComparativeHypnogram(svg, data, ['Classifier', 'Sleep-EDF'])}
- data={[predictedWoman78yoSleepEDF.epochs, physionetWoman78yoSleepEDF.epochs]}
- />
-
);
From cd9b7ac73cfa4095984b5e506411a53f4bb10d20 Mon Sep 17 00:00:00 2001
From: Claudia Onorato
Date: Sun, 22 Nov 2020 21:18:15 -0500
Subject: [PATCH 04/14] added openbci dataset intro
---
web/src/views/performance/index.js | 106 +++++++++++++++++------------
1 file changed, 63 insertions(+), 43 deletions(-)
diff --git a/web/src/views/performance/index.js b/web/src/views/performance/index.js
index b50b4221..7382e829 100644
--- a/web/src/views/performance/index.js
+++ b/web/src/views/performance/index.js
@@ -66,7 +66,29 @@ const Performance = () => {
.
- Model training and selection
+
+ In summary, we will look at our classifier's performance against three different point of view, as described
+ here;
+
+
+
+ First, we will check how our classifier’s scoring agrees with the scoring within the Physionet's Sleep-EDF
+ dataset. Of course, we will perform this agreement test on a subset of EEG data that was never trained on.
+ This subset is composed of full nights of sleep coming from five subject of a different age group.{' '}
+
+
+ Then, we will check how this classifier performs on a full night recorded on one of our members. In order to
+ be able to make comparisons, we asked for the help of a medical electrophysiologist to score our data. This
+ manual scoring will serve as reference to get an idea of the accuracy of our model on data acquired using an
+ OpenBCI under non-clinical conditions. The AASM manual was used for scoring.
+
+
+ Finally, we will present the scoring differences between the medical electrophysiologist and Sleep-EDF. To
+ do this, we will take a random night in our dataset. This will allow us to qualify somewhat the previous
+ results and maybe get an idea of the usual disagreement level between professional scorers.
+
+
+ Model training and selection
In order to train our model to predict sleep stages based on EEG data, we used an open source dataset,
@@ -113,53 +135,35 @@ const Performance = () => {
/>
- The test set, on which these metrics were calculated, is composed of subjects from different ages groups (33
- year old female, 54 year old female, 67 year old female, 88 year old male), so that the obtained score is the
- most representative of our ability to classify sleep, no matter the age. In another side, we could compare the
- results obtained to the ones found in the litterature. To do so, we had to find a paper that uses the same
- dataset, the same metric and that splits their dataset in a similar fashion as ours.TODO.
+ The test set, on which these metrics were calculated, is composed of randomly chosen subjects from different
+ ages groups (a 33 year old female, a 54 year old female, a 67 year old female and a 88 year old male), so that
+ the obtained score is the most representative of our ability to classify sleep, no matter the age. On another
+ side, we could compare the results obtained to the ones found in the litterature. To do so, we had to find a
+ paper that uses the same dataset, the same metric and that splits their dataset in a similar fashion as
+ ours.TODO.
Although we obtain good results, it didn't quite validate that our classifier could accurately score OpenBCI
data into sleep stages. After all, we only validated on data coming from the same acquisition hardware than
- the data we trained on, which is not the case when we analyze data submitted in the application. We then had
- to make our own polysomnographic dataset based on the hardware we use, so using an OpenBCI board.
+ the data we've trained on, which is not the case when we analyze data submitted in the application. We then
+ had to make our own polysomnographic dataset based on the hardware we use, namely an OpenBCI board.
-
-
-
- First, we will check how our classifier’s scoring agrees with the scoring within the Physionet's Sleep-EDF
- dataset. Of course, we will perform this agreement test on a subset of EEG data that was never trained on.
- This subset is composed of full nights of sleep coming from five subject of a different age group.{' '}
-
-
- Then, we will check how this classifier performs on a full night recorded on one of our members. In order to
- be able to make comparisons, we ask for the help of a medical electrophysiologist to score our data. This
- manual scoring will serve as reference to get an idea of the accuracy of our model on data acquired using an
- OpenBCI under non-clinical conditions. The AASM manual was used for scoring.
-
-
- Finally, we will present the scoring differences between the medical electrophysiologist and Sleep-EDF. To
- do this, we will take a random night in our dataset. This will allow us to qualify somewhat the previous
- results and maybe get an idea of the usual disagreement level between professional scorers.
-
-
- Classifier's accuracy according to Sleep-EDF (kappa:0.6709)
- createComparativeHypnogram(svg, data, ['Classifier', 'Sleep-EDF'])}
- data={[predictedWoman78yoSleepEDF.epochs, physionetWoman78yoSleepEDF.epochs]}
- />
-
- Classifier's accuracy according to the electrophysiologist (kappa;0.8310)
+ Manual scoring of OpenBCI data and comparaison to our classifier
+
+ As we had limited resources, we had in mind to create a small dataset of two manually scored night's of sleep,
+ based on biosginals acquired with OpenBCI Cyton boards. Due to a technical problem that occured while
+ recording one of them, we only had one night of sleep scored. The subject is one of our team member, William,
+ who turned exactly 23 years old on the night of the recording 🥳. Afterwards, Alexandra, the
+ electrophysiologist with who this part of the project was realized, manually scored the night of sleep based
+ on the signals from the EEG channels, namely Fpz-Cz and Pz-Oz, the EOG channel and the EMG channel. We finally
+ compared the scoring made by our classifier, which we recall has been trained on the SleepEDF dataset, and the
+ scoring made by Alexandra.
+
+ We obtained a Cohen's Kappa agreement score of 0.8310 !
+ {' '}
+ Let's see below how the scorings compare in a hypnogram.
+
+ Classifier's accuracy according to the electrophysiologist
createComparativeHypnogram(svg, data, ['Classifier', 'Electrophysiologist'])}
data={[predictedWilliamCyton.epochs, electrophysiologistWilliamCyton.epochs]}
@@ -189,6 +193,22 @@ const Performance = () => {
['Accuracy', '', '', 74, 1188],
]}
/>
+
+ Classifier's accuracy according to Sleep-EDF (kappa:0.6709)
+ createComparativeHypnogram(svg, data, ['Classifier', 'Sleep-EDF'])}
+ data={[predictedWoman78yoSleepEDF.epochs, physionetWoman78yoSleepEDF.epochs]}
+ />
+
);
From 6367be0549e8d5ac74f36740f8cb303fe6969092 Mon Sep 17 00:00:00 2001
From: Claudia Onorato
Date: Sun, 22 Nov 2020 21:42:09 -0500
Subject: [PATCH 05/14] completed electro vs clf
---
web/src/views/performance/index.js | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/web/src/views/performance/index.js b/web/src/views/performance/index.js
index 7382e829..a323cd7f 100644
--- a/web/src/views/performance/index.js
+++ b/web/src/views/performance/index.js
@@ -168,6 +168,14 @@ const Performance = () => {
callback={(svg, data) => createComparativeHypnogram(svg, data, ['Classifier', 'Electrophysiologist'])}
data={[predictedWilliamCyton.epochs, electrophysiologistWilliamCyton.epochs]}
/>
+
+ The results are quite similar! If we take a step back and look at the main differences between the automatic
+ and manual scoring, there's notably the manual used for the classification. Indeed, the dataset we've used to
+ train our model contains sleep stages classification based on the 1968 Rechtschaffen and Kales manual, whereas
+ Alexandra, of course, used the most recent manual scoring guide, whereas the American Academy of Sleep
+ Medicine Manual for the Scoring of Sleep and Assoicated Events. Below are the other metrics describing the
+ differences in the classification of William's night.
+
{
['Accuracy', '', '', 87, 1232],
]}
/>
+
+ So, we have been able to verify that, indeed, our automatic sleep stage classifier could accurately score EEG
+ data acquired from an OpenBCI Cyton. Of course, we only verified on one night of sleep, and on a single
+ subject. In the future, it would be interesting to test our classifier on subjects of different age and sex.
+ Also, we did not tested on OpenBCI Ganglion boards , and it would be really helpful to be able
+ to certify, in the same maner as we did for the Cyton, that the classification works also accurately on this
+ board.
+
Electrophysiologist and Sleep-EDF's agreement (kappa:0.6315)
createComparativeHypnogram(svg, data, ['Electrophysiologist', 'Sleep-EDF'])}
From 74605302c504db2c6cfa62053585586afa85ef88 Mon Sep 17 00:00:00 2001
From: Claudia Onorato
Date: Sun, 22 Nov 2020 22:22:45 -0500
Subject: [PATCH 06/14] added further dev section
---
web/src/views/performance/index.js | 65 +++++++++++++++++++++---------
1 file changed, 46 insertions(+), 19 deletions(-)
diff --git a/web/src/views/performance/index.js b/web/src/views/performance/index.js
index a323cd7f..552c6e64 100644
--- a/web/src/views/performance/index.js
+++ b/web/src/views/performance/index.js
@@ -62,7 +62,7 @@ const Performance = () => {
we've defined our sleep scoring algorithm, please either refer to our presentation video in our home page, or
to our{' '}
- wiki page
+ wiki
.
@@ -71,19 +71,15 @@ const Performance = () => {
here;
+ First, we will check how our classifier’s labels agrees with the labels scored within our dataset.
- First, we will check how our classifier’s scoring agrees with the scoring within the Physionet's Sleep-EDF
- dataset. Of course, we will perform this agreement test on a subset of EEG data that was never trained on.
- This subset is composed of full nights of sleep coming from five subject of a different age group.{' '}
+ Then, we will check how this classifier performs on a full night recorded on one of our members. It is the
+ night displayed in preview mode. In order to be able to make comparisons, we asked for the help of a medical
+ electrophysiologist to score our data. This manual scoring will serve as reference to get an idea of the
+ accuracy of our model on data acquired using an OpenBCI under non-clinical conditions.
- Then, we will check how this classifier performs on a full night recorded on one of our members. In order to
- be able to make comparisons, we asked for the help of a medical electrophysiologist to score our data. This
- manual scoring will serve as reference to get an idea of the accuracy of our model on data acquired using an
- OpenBCI under non-clinical conditions. The AASM manual was used for scoring.
-
-
- Finally, we will present the scoring differences between the medical electrophysiologist and Sleep-EDF. To
+ Finally, we will present the scoring differences between the medical electrophysiologist and our dataset. To
do this, we will take a random night in our dataset. This will allow us to qualify somewhat the previous
results and maybe get an idea of the usual disagreement level between professional scorers.
@@ -142,13 +138,13 @@ const Performance = () => {
paper that uses the same dataset, the same metric and that splits their dataset in a similar fashion as
ours.TODO.
-
+
Although we obtain good results, it didn't quite validate that our classifier could accurately score OpenBCI
data into sleep stages. After all, we only validated on data coming from the same acquisition hardware than
the data we've trained on, which is not the case when we analyze data submitted in the application. We then
had to make our own polysomnographic dataset based on the hardware we use, namely an OpenBCI board.
- Manual scoring of OpenBCI data and comparaison to our classifier
+ Manual scoring of OpenBCI data and comparison to our classifier
As we had limited resources, we had in mind to create a small dataset of two manually scored night's of sleep,
based on biosginals acquired with OpenBCI Cyton boards. Due to a technical problem that occured while
@@ -169,12 +165,8 @@ const Performance = () => {
data={[predictedWilliamCyton.epochs, electrophysiologistWilliamCyton.epochs]}
/>
- The results are quite similar! If we take a step back and look at the main differences between the automatic
- and manual scoring, there's notably the manual used for the classification. Indeed, the dataset we've used to
- train our model contains sleep stages classification based on the 1968 Rechtschaffen and Kales manual, whereas
- Alexandra, of course, used the most recent manual scoring guide, whereas the American Academy of Sleep
- Medicine Manual for the Scoring of Sleep and Assoicated Events. Below are the other metrics describing the
- differences in the classification of William's night.
+ The results are quite similar! Below are the other metrics describing the differences in the classification of
+ William's night.
{
['Accuracy', '', '', 76, 1188],
]}
/>
+ Limitations and further development
+
+ If we take a step back and look at the main differences between the automatic and manual scoring that
+ Alexandra did, there's notably the manual used for the classification. Indeed, the dataset we've used to train
+ our model contains sleep stages classification based on the 1968 Rechtschaffen and Kales manual, whereas
+ Alexandra, of course, used the most recent manual scoring guide, whereas the American Academy of Sleep
+ Medicine Manual for the Scoring of Sleep and Assoicated Events. In order to output AASM's sleep stages instead
+ of R&K's sleep stages, we've merged both Sleep Stage 3 and 4 together. Further work could be done to either
+ look at the litterature to see if there's a better way to translate R&K's sleep stages into AASM's sleep
+ stages. Even better, it would be to train on labels scored based on the latest AASM's sleep stages. We have
+ considered more recent datasets, such as{' '}
+
+ the Montreal Archive of Sleep Studies (MASS)
+
+ , but it involved having a complete accreditation coming from an ethic board.
+
+
+ Furthermore, as we've already mentionned, we would also like to test our automatic sleep stage scoring based
+ on OpenBCI Ganglion board's data, by comparing it to manual scoring. It could also be interesting to test on
+ subjects of different age groups and sex.
+
+
+ Finally, in terms of the explored machine learning models, we've mostly looked at classic statistical models,
+ and have not exhaustively looked at deep learning algorithms. We did look at the differences between manual
+ feature extraction and representation learning, through a CNN (we've written{' '}
+
+ an article
+ {' '}
+ about the results we've obtained, which currently is in french only). Since we were limited in both time and
+ in hardware, we only trained on a few subjects.
+
);
From a2bd63078554b0dd03471299b61ab6d98ddda6d3 Mon Sep 17 00:00:00 2001
From: Claudia Onorato
Date: Sun, 22 Nov 2020 22:48:05 -0500
Subject: [PATCH 07/14] added intro alex vs sleepedf
---
web/src/views/performance/index.js | 35 +++++++++++++++++++++++++++++-
1 file changed, 34 insertions(+), 1 deletion(-)
diff --git a/web/src/views/performance/index.js b/web/src/views/performance/index.js
index 552c6e64..1bf2bc28 100644
--- a/web/src/views/performance/index.js
+++ b/web/src/views/performance/index.js
@@ -186,11 +186,42 @@ const Performance = () => {
to certify, in the same maner as we did for the Cyton, that the classification works also accurately on this
board.
+ Inter-scorer agreement based on a night from our dataset
+
+ As it is stated in{' '}
+ The American Academy of Sleep Medicine Inter-scorer Reliability Program: Sleep Stage Scoring , written
+ by R. Rosenberg, manual sleep stage agreement averaged 82.6% when scorers based their analysis on the AASM's
+ scoring manual [R. Rosenberg, 2013]. Based on that statistic, we were curious to see how the classification
+ made by Alexandra compares to the classification found in our dataset. As we've already mentionned, we were
+ expecting some differences, as the scoring is based on two different manuals (see our further developmnent
+ section below).
+
+
+ We then randomly selected a night of sleep within our dataset and asked Alexandra to score it. The selected
+ subject is a 74 year old women. You can see below the differences between both classification. The Cohen's
+ Kappa agreement score is of{' '}
+
+ 0.6315
+
+ .
+
Electrophysiologist and Sleep-EDF's agreement (kappa:0.6315)
createComparativeHypnogram(svg, data, ['Electrophysiologist', 'Sleep-EDF'])}
data={[electrophysiologistWoman78yoSleepEDF.epochs, physionetWoman78yoSleepEDF.epochs]}
/>
+
+ The main differences can be seen at the N3 sleep stage level, as no epochs were tagged as N3 by our
+ electrophysiologist. She'd explain to us, in an{' '}
+
+ interview you can view here
+ {' '}
+ (in french only), that no epochs filled all the N3 sleep stage conditions.
+
{
an article
{' '}
about the results we've obtained, which currently is in french only). Since we were limited in both time and
- in hardware, we only trained on a few subjects.
+ in hardware, we only trained on a few subjects. Also, considering that the dependancy of sleep stages over
+ time is quite important, we could greatly improve our model by exploring recurrent neural networks (RNN) or
+ long short term memory (LSTM) networks.
From 49c6fe1424c08dc0e2ce52412bc0c792830f5051 Mon Sep 17 00:00:00 2001
From: Claudia Onorato
Date: Sun, 22 Nov 2020 23:07:28 -0500
Subject: [PATCH 08/14] finish
---
web/src/views/performance/index.js | 38 +++++++++++++++++++++++-------
1 file changed, 29 insertions(+), 9 deletions(-)
diff --git a/web/src/views/performance/index.js b/web/src/views/performance/index.js
index 1bf2bc28..5b522fb9 100644
--- a/web/src/views/performance/index.js
+++ b/web/src/views/performance/index.js
@@ -57,8 +57,8 @@ const Performance = () => {
/>
- This page aims to illustrate the performance of our sleep scoring compared to clinical hypnogram scoring,
- which is usually considered the gold standard in sleep stage scoring. If you want to learn more about how
+ This page aims to illustrate the performance of our sleep scoring algorithmcompared to manual and professional
+ scoring, which is considered the gold standard in sleep stage scoring. If you want to learn more about how
we've defined our sleep scoring algorithm, please either refer to our presentation video in our home page, or
to our{' '}
@@ -84,6 +84,10 @@ const Performance = () => {
results and maybe get an idea of the usual disagreement level between professional scorers.
+
+ We will finally cover the limitations of our current sleep staging model and further work to be done in order
+ to improve our results.
+
Model training and selection
In order to train our model to predict sleep stages based on EEG data, we used an open source dataset,
@@ -133,10 +137,10 @@ const Performance = () => {
The test set, on which these metrics were calculated, is composed of randomly chosen subjects from different
ages groups (a 33 year old female, a 54 year old female, a 67 year old female and a 88 year old male), so that
- the obtained score is the most representative of our ability to classify sleep, no matter the age. On another
- side, we could compare the results obtained to the ones found in the litterature. To do so, we had to find a
+ the obtained score is the most representative of our ability to classify sleep, no matter the age.
+ {/* On another side, we could compare the results obtained to the ones found in the litterature. To do so, we had to find a
paper that uses the same dataset, the same metric and that splits their dataset in a similar fashion as
- ours.TODO.
+ ours.TODO. */}
Although we obtain good results, it didn't quite validate that our classifier could accurately score OpenBCI
@@ -198,7 +202,7 @@ const Performance = () => {
We then randomly selected a night of sleep within our dataset and asked Alexandra to score it. The selected
- subject is a 74 year old women. You can see below the differences between both classification. The Cohen's
+ subject is a 74 year old woman. You can see below the differences between both classification. The Cohen's
Kappa agreement score is of{' '}
0.6315
@@ -220,7 +224,8 @@ const Performance = () => {
>
interview you can view here
{' '}
- (in french only), that no epochs filled all the N3 sleep stage conditions.
+ (in french only), that no epochs filled the N3 sleep stage conditions. It may be explained by the fact that
+ the scoring manual used is different.
{
['Accuracy', '', '', 74, 1188],
]}
/>
-
- Classifier's accuracy according to Sleep-EDF (kappa:0.6709)
+
+ And what if we looked at the automatic sleep classification of the same subject? We then reused the same model
+ description, trained on all the dataset's recording except for the randomly selected recording, and looked at
+ the results. The Cohen's Kappa agreement score is of{' '}
+
+ 0.6709
+
+ .
+
+ Classifier's accuracy according to Sleep-EDF
createComparativeHypnogram(svg, data, ['Classifier', 'Sleep-EDF'])}
data={[predictedWoman78yoSleepEDF.epochs, physionetWoman78yoSleepEDF.epochs]}
/>
+
+ We can see that some differences between the automatic classification and SleepEDF's are the same as
+ Alexandra's. Per example, near the end of the night, both Alexandra and the automatic scoring model classified
+ N2 instead of N1. On another note, we can see that the obtained Cohen's Kappa agreement score is less than the
+ one obtained for our test set above, which was 0.741. We can then reasonably assume that this night of sleep
+ may be hard to conclude on.
+
Date: Sun, 22 Nov 2020 23:24:16 -0500
Subject: [PATCH 09/14] Update web/src/views/performance/index.js
Co-authored-by: William Harvey
---
web/src/views/performance/index.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web/src/views/performance/index.js b/web/src/views/performance/index.js
index cdf78e74..16a0347b 100644
--- a/web/src/views/performance/index.js
+++ b/web/src/views/performance/index.js
@@ -58,7 +58,7 @@ const Performance = () => {
This page aims to illustrate the performance of our sleep scoring algorithm compared to manual and professional
- scoring, which is considered the gold standard in sleep stage scoring. If you want to learn more about how
+ manual scoring, which is considered the gold standard in sleep stage scoring. If you want to learn more about how
we've defined our sleep scoring algorithm, please either refer to our presentation video in our home page, or
to our{' '}
From f364bd9df417c62cc19a7abb25ab15bdcbbdb11f Mon Sep 17 00:00:00 2001
From: Claudia Onorato
Date: Sun, 22 Nov 2020 23:26:46 -0500
Subject: [PATCH 10/14] oups
---
web/src/views/performance/index.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/web/src/views/performance/index.js b/web/src/views/performance/index.js
index 16a0347b..ad2bc9f2 100644
--- a/web/src/views/performance/index.js
+++ b/web/src/views/performance/index.js
@@ -57,8 +57,8 @@ const Performance = () => {
/>
- This page aims to illustrate the performance of our sleep scoring algorithm compared to manual and professional
- manual scoring, which is considered the gold standard in sleep stage scoring. If you want to learn more about how
+ This page aims to illustrate the performance of our sleep scoring algorithm compared to professional manual
+ scoring, which is considered the gold standard in sleep stage scoring. If you want to learn more about how
we've defined our sleep scoring algorithm, please either refer to our presentation video in our home page, or
to our{' '}
From e5cfba3f5ca90dcdc2b2af3533201acfbd87fa7d Mon Sep 17 00:00:00 2001
From: Claudia Onorato
Date: Sun, 22 Nov 2020 23:38:10 -0500
Subject: [PATCH 11/14] updated youtube link!!!
---
web/src/views/home/hero/hero.js | 2 +-
web/src/views/performance/index.js | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/web/src/views/home/hero/hero.js b/web/src/views/home/hero/hero.js
index 87773225..27ab3c61 100644
--- a/web/src/views/home/hero/hero.js
+++ b/web/src/views/home/hero/hero.js
@@ -31,7 +31,7 @@ class Hero extends React.Component {
VIDEO
diff --git a/web/src/views/performance/index.js b/web/src/views/performance/index.js
index ad2bc9f2..b0a69d43 100644
--- a/web/src/views/performance/index.js
+++ b/web/src/views/performance/index.js
@@ -71,7 +71,7 @@ const Performance = () => {
here;
- First, we will check how our classifier’s labels agrees with the labels scored within our dataset.
+ First, we will check how our classifier’s labels agree with the labels scored within our dataset.
Then, we will check how this classifier performs on a full night recorded on one of our members. It is the
night displayed in preview mode. In order to be able to make comparisons, we asked for the help of a medical
@@ -81,7 +81,7 @@ const Performance = () => {
Finally, we will present the scoring differences between the medical electrophysiologist and our dataset. To
do this, we will take a random night in our dataset. This will allow us to qualify somewhat the previous
- results and maybe get an idea of the usual disagreement level between professional scorers.
+ results and maybe get an idea of the usual agreement level between professional scorers.
From 5fe696d06eb829127ca90a4d25979c764d2826ca Mon Sep 17 00:00:00 2001
From: Claudia Onorato
Date: Sun, 22 Nov 2020 23:42:31 -0500
Subject: [PATCH 12/14] Apply suggestions from code review
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Mathieu Bélanger
---
web/src/views/performance/index.js | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/web/src/views/performance/index.js b/web/src/views/performance/index.js
index b0a69d43..0ac7af4b 100644
--- a/web/src/views/performance/index.js
+++ b/web/src/views/performance/index.js
@@ -61,7 +61,7 @@ const Performance = () => {
scoring, which is considered the gold standard in sleep stage scoring. If you want to learn more about how
we've defined our sleep scoring algorithm, please either refer to our presentation video in our home page, or
to our{' '}
-
+
wiki
.
@@ -75,8 +75,8 @@ const Performance = () => {
Then, we will check how this classifier performs on a full night recorded on one of our members. It is the
night displayed in preview mode. In order to be able to make comparisons, we asked for the help of a medical
- electrophysiologist to score our data. This manual scoring will serve as reference to get an idea of the
- accuracy of our model on data acquired using an OpenBCI under non-clinical conditions.
+ electrophysiologist to score our data. This manual scoring will serve as reference to get an idea of our
+ model's accuracy on data acquired using an OpenBCI under non-clinical conditions.
Finally, we will present the scoring differences between the medical electrophysiologist and our dataset. To
@@ -90,7 +90,7 @@ const Performance = () => {
Model training and selection
- In order to train our model to predict sleep stages based on EEG data, we used an open source dataset,
+ In order to train our model for the prediction of sleep stages based on EEG data, we used an open source dataset,
Physionet SleepEDF expanded
@@ -143,14 +143,14 @@ const Performance = () => {
ours.TODO. */}
- Although we obtain good results, it didn't quite validate that our classifier could accurately score OpenBCI
+ Although we obtained good results, it didn't quite validated that our classifier could accurately score OpenBCI
data into sleep stages. After all, we only validated on data coming from the same acquisition hardware than
the data we've trained on, which is not the case when we analyze data submitted in the application. We then
had to make our own polysomnographic dataset based on the hardware we use, namely an OpenBCI board.
Manual scoring of OpenBCI data and comparison to our classifier
- As we had limited resources, we had in mind to create a small dataset of two manually scored night's of sleep,
+ As we had limited resources, we planned to create a small dataset of two manually scored night's of sleep,
based on biosginals acquired with OpenBCI Cyton boards. Due to a technical problem that occured while
recording one of them, we only had one night of sleep scored. The subject is one of our team member, William,
who turned exactly 23 years old on the night of the recording 🥳. Afterwards, Alexandra, the
From 45de3b6233c24773954b097b616695c2c8273d5b Mon Sep 17 00:00:00 2001
From: Claudia Onorato
Date: Sun, 22 Nov 2020 23:49:44 -0500
Subject: [PATCH 13/14] update link to embed
---
web/src/views/home/hero/hero.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web/src/views/home/hero/hero.js b/web/src/views/home/hero/hero.js
index 27ab3c61..a8e0a3aa 100644
--- a/web/src/views/home/hero/hero.js
+++ b/web/src/views/home/hero/hero.js
@@ -31,7 +31,7 @@ class Hero extends React.Component {
From 7bc69001107d46c9d87884fcd33887a07323eb28 Mon Sep 17 00:00:00 2001
From: Claudia Onorato
Date: Sun, 22 Nov 2020 23:51:07 -0500
Subject: [PATCH 14/14] Apply suggestions from code review
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Mathieu Bélanger
---
web/src/views/performance/index.js | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/web/src/views/performance/index.js b/web/src/views/performance/index.js
index 0ac7af4b..e4f489f4 100644
--- a/web/src/views/performance/index.js
+++ b/web/src/views/performance/index.js
@@ -253,7 +253,7 @@ const Performance = () => {
/>
We can see that some differences between the automatic classification and SleepEDF's are the same as
- Alexandra's. Per example, near the end of the night, both Alexandra and the automatic scoring model classified
+ Alexandra's. For instance, near the end of the night, both Alexandra and the automatic scoring model classified
N2 instead of N1. On another note, we can see that the obtained Cohen's Kappa agreement score is less than the
one obtained for our test set above, which was 0.741. We can then reasonably assume that this night of sleep
may be hard to conclude on.
@@ -273,16 +273,16 @@ const Performance = () => {
If we take a step back and look at the main differences between the automatic and manual scoring that
Alexandra did, there's notably the manual used for the classification. Indeed, the dataset we've used to train
our model contains sleep stages classification based on the 1968 Rechtschaffen and Kales manual, whereas
- Alexandra, of course, used the most recent manual scoring guide, whereas the American Academy of Sleep
+ Alexandra, of course, used the most recent manual scoring guide, which is the American Academy of Sleep
Medicine Manual for the Scoring of Sleep and Assoicated Events. In order to output AASM's sleep stages instead
of R&K's sleep stages, we've merged both Sleep Stage 3 and 4 together. Further work could be done to either
- look at the litterature to see if there's a better way to translate R&K's sleep stages into AASM's sleep
+ review the litterature to see if there's a better way to translate R&K's sleep stages into AASM's sleep
stages. Even better, it would be to train on labels scored based on the latest AASM's sleep stages. We have
considered more recent datasets, such as{' '}
the Montreal Archive of Sleep Studies (MASS)
- , but it involved having a complete accreditation coming from an ethic board.
+ , but it involved having a complete accreditation coming from an ethics board.
Furthermore, as we've already mentionned, we would also like to test our automatic sleep stage scoring based