summaryrefslogtreecommitdiff
path: root/lab-windows/gps_clock_jitter_analysis.ipynb
blob: c72858c12053493a44f2cf0d2a01c57136f882a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Setup\n",
    "## Import required packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "import sqlite3\n",
    "import struct\n",
    "import datetime\n",
    "import scipy.fftpack\n",
    "from scipy import signal as sig\n",
    "from scipy import optimize as opt\n",
    "\n",
    "import matplotlib\n",
    "from matplotlib import pyplot as plt\n",
    "from matplotlib import patches\n",
    "import numpy as np\n",
    "from scipy import signal, optimize\n",
    "from tqdm.notebook import tnrange, tqdm\n",
    "from IPython.display import set_matplotlib_formats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "set_matplotlib_formats('png', 'pdf')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load data series information from sqlite capture file\n",
    "\n",
    "One capture file may contain multiple runs/data series. Display a list of runs and their start/end time and sample count, then select the newest one in `last_run` variable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "db = sqlite3.connect('data/waveform_1pps_debug.sqlite3')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Run 000: 2020-03-31 16:58:00 - 2020-03-31 16:58:36 (  0:00:36.029,     36512sp)\n",
      "Run 001: 2020-03-31 16:58:51 - 2020-03-31 17:05:19 (  0:06:27.729,    392608sp)\n",
      "Run 002: 2020-03-31 17:07:02 - 2020-03-31 17:41:34 (  0:34:32.105,     37024sp)\n",
      "Run 003: 2020-03-31 18:50:05 - 2020-03-31 18:50:43 (  0:00:37.576,     38048sp)\n",
      "Run 004: 2020-03-31 18:54:08 - 2020-03-31 19:14:32 (  0:20:24.104,   1239424sp)\n"
     ]
    }
   ],
   "source": [
    "for run_id, start, end, count in db.execute('SELECT run_id, MIN(rx_ts), MAX(rx_ts), COUNT(*) FROM measurements GROUP BY run_id'):\n",
    "    foo = lambda x: datetime.datetime.fromtimestamp(x/1000)\n",
    "    start, end = foo(start), foo(end)\n",
    "    print(f'Run {run_id:03d}: {start:%Y-%m-%d %H:%M:%S} - {end:%Y-%m-%d %H:%M:%S} ({str(end-start)[:-3]:>13}, {count*32:>9d}sp)')\n",
    "last_run, n_records = run_id, count\n",
    "sampling_rate = 1000.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Calculate period measurement histograms and convert to Hz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/pdf": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1BhZ2VzIDIgMCBSIC9UeXBlIC9DYXRhbG9nID4+CmVuZG9iago4IDAgb2JqCjw8IC9FeHRHU3RhdGUgNCAwIFIgL0ZvbnQgMyAwIFIgL1BhdHRlcm4gNSAwIFIKL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gL1NoYWRpbmcgNiAwIFIKL1hPYmplY3QgNyAwIFIgPj4KZW5kb2JqCjEwIDAgb2JqCjw8IC9Bbm5vdHMgWyBdIC9Db250ZW50cyA5IDAgUgovR3JvdXAgPDwgL0NTIC9EZXZpY2VSR0IgL1MgL1RyYW5zcGFyZW5jeSAvVHlwZSAvR3JvdXAgPj4KL01lZGlhQm94IFsgMCAwIDM2Ni40NzgxMjUgMjYyLjUxMTg3NSBdIC9QYXJlbnQgMiAwIFIgL1Jlc291cmNlcyA4IDAgUgovVHlwZSAvUGFnZSA+PgplbmRvYmoKOSAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDExIDAgUiA+PgpzdHJlYW0KeJzFms+OGzcSxu/9FAT24iAwhyz+P+zB3mwc7C3JIHtIcnAce9aGNU486wTIY+0T7q/I1qh7JI9sBZEjBJa+ZherPlYVq8jx5tV08cibqxvjzCv+/918b37k35+NN0/MxRfPf3v57Pk3Tx6bZzeTA99MIWcbS/WS+Pl6+VOy2OR9LQncrX/+Z5quJ+bhnSeIvpqmmG1LJhRbSx+DZElr6PUWkpRs2IoaL64gpL+YfjV3RUppRnyxMZq3z82/zbVx1otPuWbhsbMxz/8VfhSXapWQpE1vrz5wpHmLJanZHHz1dWWN986G1FzzK4sWsKpbmzQB3slYot2ur82fsmy6o+/HWHbQBkzL3rqaQ45r03Zwrix9cyGuLV7Cn9y2Q0ZsJvHeVh/AV7YtYAnNVqyRsLZ5hX9q6w6agXUak9GxGGvrFnC1JdRY/droJfzJbTtkBOnDByuZEJJ1ClnA1frsSox7Jt/CH2HbxSPRvCnmXyQ0cqetu+yJebk53xBb414iLdXmFPms9N+hq9w2fdv1mWdzpNC92XpS5clRwSHasOVlekw+/n16fGkuvvTGO3P5Yso8j+Jimh3dysjslz9PD3z0Nn1mLl+Zf17+5Qy9L/Hs4JM5Oi76GEstWxczY6tEv8eSWHc2lnSyvBfkC/h0lo6KPsaSl2IL+3/IUtWn92g6nzOVYMvdxLBZwqfTdFT0UZrY+WMi8flygKVwPmcSlyjkhM96x9jBJ7N0XPRRlprXHC0MdikeoOlsziSI9QWdw9qWHXw6TUdFH6NJRGzNkcGZ/LRHUzyjN1Hq1bpXFC/g02k6KvooTSnalJvW25LDAZrO5k3BOZv2i9AFfDJNx0UfpalmiAkM5oW6R1PaedOvvOzMQ4c61HBKV9uOfbZBqLaONro83r34UuYZHrxQCeRAW1qqrcagxV+XP54Q2AS8G6IeeptXQkqXcd1HRhtDThIWIt7MD6RK8RHhdX6w6Q+KdU2kJjRGn5XoLQMPzKyFLxDo2k729/MDljbkQeJ48NUsmz4nhdEkK/xHh5OV2NxKyR/7A+UQipzS6MYXcmOuoxbuikEkvvPq6Xfvvn16ffNw8/L63Y354s30tX7+Yjf9oF79Y5xzXyA5PN6Rd8AlAw7ROh04ryvDFc+W1IbsTPnHbu0WNOygU2hYChw0rOQdiky3NY8uhvKqBudzqyMw3Zn5aERY8yks+NhBp/CxFDj4WMm7l49GuDSaRxdCK50POTcfnk04aVrIO0IW2CmMrEQOStYS7+WE3YMWOpJ5kmsjZMLZSUm08d4zaEHKDjuJlKXImZSVxPtJUSFUjuJyabGTEs9OCp15E+9kScoOO4mUpciZlJXE+0kpyXqa2uRqbNJJSecmRRzlbnA1LUhZYKeQshI5SFlLvJcUccEG0kn1aN45yWfnJFAEUgbUJSc77CROliJnTlYS7+ckeJsoqIi1WgcpZUfK6iUtCh9qXeMjVZ4WPt5Vm/2oji43/VpBBfzNvPnp5vnb357+9+Wb65s/RTDKLW8ylOK4PUQE+uYuy1ONtrVEH76dpY0zIYqwEGvu3X2jjOyJxcNDST77fqIo0th9O8wulfmpaB65VlE9z/cJXUOz3gddZYWpkJVsRQsVKAU2KLSKk4iNkTIdfQYqiKh0LUbP4NjqOxj1xgClTBS+sd0NOFvfYqLWZVFVZd+PqdE/tyy8St2eSopQqHDT1hKw6CVOlj4dU2eqfhJARDfJMfSxevTTWqnBJLGB7TiWDlOS4Qfon1QyRZl0mPag9pOf1AifDJcdzpbqDQ8wOdhKNTxmhEanLYDJKBRqakN0s5Tn6o9Fq2Evvo9OkABj6FchRlzshieiNIv2Nc1biv0mnefePjnWELeDJzSSrl9S92HJdHuk/eD3mBNta8u5GWUdcV46jLa+RtTvDY7zwAMnt7KD4Di+UfRDcOvTFs9a0zXhrP0QPeaxPAWN2Yq1sRNvW5E2pi30L8q04k0r/lg7XxheYoo95DR+6liLglM5QkCAcTb29lkMbopO5CmyODUT2ozxVa8milM8WOhIfoxvLB7JHjiiMIvXPbk6K0n7ro5nQnysNThrI5o+wFtQljvu0b7oYnacdRpeB05YzVJKamGgrAMc1DEaP+pJ2FftL9l7UtdR8KPSqSQ2XUxSS7eJ4JRUZrxhWA395oUGrcShTGIFiQE9Jsq24nluyKHhc9UlPdgWW3KcY67ifDmrb4kU7M56uqk4Ql1xECW+QbeePimOe9E2OyKMTZVgK6FP2/C/6hRWT/C6yGM47lJqa3iUrg68hn63wq5StS1lPJ6QG41u6ThNNy03hHu+hpTKGF5txKtIGFoMu1qq9BsaZ7XtJXCrnt0378ZtlaAYvkyPjDiCcYZJCbSruBZxFvG9NK55EgsCNXkEJbE/RsOGRD3jTpq5sg5QWH1JXYnQwrrhSUJOZPpAjiI8SaWl50R1cqwMxCLBzMINyQJXLQihEnVRcKguWXRFkzCG7OGDpqkO6w0z9npNaSkz9RhdyTB8D5oAJbfuiho9TKLRibN4dZAuQ/cr9CAayG5Uv7mvpWg/iek4FC5E8qp5jMaF1M2CpvIGHW2MZg2YnaXhWwpEXVeEiQhMPn07cOSm1mFWL1N093uG1iI5WOGkjSvuNs5Cm6tVvVAIrVZjTrenNeMGDqclX6Q7rfF74HUVoJvhqADcBzT0B27VEbfX5m8OXskz8kOPCPbmea/Ei0dhFDO6p1/1v024/eMBddla+/kI66R7GOvV/zgh4e4r8PUOVOoj4Sez028lLPF+AXinjvIHqqjFkZemh60oXJHAT3l78rW8XGMbJBH004tR8fzP/N2wUaD4V3+YHx4ESzP3yy8//fDZ7ZnQtD4T0i93zoFuXl5tnm7Pgd6jlFYVKfXa64BSbJpuPmrqWqHU57qre9O1+rwwBLU2H6XWu+uXLjz+x+0B1fR/PugoAAplbmRzdHJlYW0KZW5kb2JqCjExIDAgb2JqCjIyMjEKZW5kb2JqCjE2IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTQ0ID4+CnN0cmVhbQp4nD2POxIDIQxDe06hI+A/nGczqTb3b6MlkAa/sbAlWyg6cvDxGqjseEk7+GmeTjVwN2Nvk8ciU0Gya72QGbiaTkVyow4qOqHliLkU7gkvTrvoJpuTpg9pyCaJJ8rd8lckj1CxYYw9LnVWCu1iRZNpSKexMCKN1RPFmAzA4eJv01ynGX8+9fofe7f3F0y4M9YKZW5kc3RyZWFtCmVuZG9iagoxNyAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDMzMiA+PgpzdHJlYW0KeJw9kjl2JTEIRfNaBUsQM6zn9+nI3n/qByo7ERxAcBk6jQ6p4+kT5HHoHz/VRaqHvp/S8X89aVfWSVLJ1ZrUmIoZ/xVSSUPp8xQbaY7FSYtf2etxMi4qlDL8zT5knvAkOAx/0pmshFJk5eeJrNVCmyyc4iCHTh1PxJ5DbiBBFkeEwvt5LHtpp+pIA9+lNgfLZEK8+lTHHzSNP3g1YQn0U7+y1sNLbS5LbRovtclZau1cRo1+qVV8NSlfapm+llo4l5rbl5oRcalZ/FJfwSZobaBF/7QZYMjaUKqNJNA44HQGoZNGUcZRTqN2n/buFbjm15K5Q/ODSJnFzOsH8TZrgD6jMdkhT2sHY4eVISeHTrbAaicuuTdrer916tw6hWG5BdUy7gG0glr21sztym1+NO2xzLFMhO04x4PBesCCBRnO6j3Oz/P/B+5ag90KZW5kc3RyZWFtCmVuZG9iagoxOCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDIxMyA+PgpzdHJlYW0KeJw9ULFxRTEI6z0FIxiQsD3Py6VK9m8j8/6lsMUhEIJK2LSkPlbpTfvyQS7LnPY7cFLUz8D8YImJ1dGxRBiWq5/CtBT7DCxarqNMWe794mEzZQj1qA5IA6feuUxeJRim6neo/8VnXB83iqski0H1yfUzwpWZYS7t5DbfQvl8hgfbbb7gcCOu6cj/yCVT3jmZORogU/RqCfaAzG2k1tNC9zJwNMpuxZs5p/UYul24GFKLHPY1IVON3kzdM6i+ZHOrpyBlNKOFa7ZiQkqf8z/j+w+d+05BCmVuZHN0cmVhbQplbmRvYmoKMTkgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAyOTkgPj4Kc3RyZWFtCnicNZFLbgQxCET3cwouEMn8jH2eibLL/bd50JlFi2rMp6rYarIktnypS+7Nt+RbX5Yxqd+X3jVI/coWXSaR8n7tkBPdqH462CqyDaIkTeyU7BS3Q7pKfF+5NKwQ1ZRwI6/URjHjsHwdMSPa5cU2KK442abk+URW2BoURYw1fbl6WrI99iMj0NXRs3sGLcTllWdysWteHD7QSy3RQNslaoyUFFYEdBz651JH2iH15Ux7/Pn4hBb8MV3tGEhhqJQqipQxt0W1lRVsNtk4hIW7ebsN8HI5eNlehzaDBF1HKXtGMXufl0ZdS1vQHWQjzr87UTZ8gwM52Y5sQVUjOz6eW+L9OGre3TEn7H49NdMhXMrhcAjf3LlT8r9yLgcntIxqfPuof79+/gAU+G5UCmVuZHN0cmVhbQplbmRvYmoKMTQgMCBvYmoKPDwgL0Jhc2VGb250IC9EZWphVnVTYW5zLU9ibGlxdWUgL0NoYXJQcm9jcyAxNSAwIFIKL0VuY29kaW5nIDw8IC9EaWZmZXJlbmNlcyBbIDEwMiAvZiAxMDkgL20gL24gL28gXSAvVHlwZSAvRW5jb2RpbmcgPj4KL0ZpcnN0Q2hhciAwIC9Gb250QkJveCBbIC0xMDE2IC0zNTEgMTY2MCAxMDY4IF0gL0ZvbnREZXNjcmlwdG9yIDEzIDAgUgovRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXSAvTGFzdENoYXIgMjU1IC9OYW1lIC9EZWphVnVTYW5zLU9ibGlxdWUKL1N1YnR5cGUgL1R5cGUzIC9UeXBlIC9Gb250IC9XaWR0aHMgMTIgMCBSID4+CmVuZG9iagoxMyAwIG9iago8PCAvQXNjZW50IDkyOSAvQ2FwSGVpZ2h0IDAgL0Rlc2NlbnQgLTIzNiAvRmxhZ3MgOTYKL0ZvbnRCQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXSAvRm9udE5hbWUgL0RlamFWdVNhbnMtT2JsaXF1ZQovSXRhbGljQW5nbGUgMCAvTWF4V2lkdGggMTM1MCAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMTIgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM1MCA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDI4IDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxNyA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjE3IDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDgKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk5NSA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMTUgMCBvYmoKPDwgL2YgMTYgMCBSIC9tIDE3IDAgUiAvbiAxOCAwIFIgL28gMTkgMCBSID4+CmVuZG9iagoyNCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDc3ID4+CnN0cmVhbQp4nDM3NVIwULC0ABJmpiYK5kaWCimGXEA+iJXLZWhpDmblgFkmxgZAlqmpKRILIgvTC2HB5GC0sYk51AQECyQHtjYHZlsOVxoAnuAbmgplbmRzdHJlYW0KZW5kb2JqCjI1IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMzA0ID4+CnN0cmVhbQp4nD2SO5LDMAxDe52CF8iM+JPk82Qnlff+7T4yyVaASYkAKC91mbKmPCBpJgn/0eHhYjvld9iezczAtUQvE8spz6ErxNxF+bKZjbqyOsWqwzCdW/SonIuGTZOa5ypLGbcLnsO1ieeWfcQPNzSoB3WNS8IN3dVoWQrNcHX/O71H2Xc1PBebVOrUF48XURXm+SFPoofpSuJ8PCghXHswRhYS5FPRQI6zXK3yXkL2DrcassJBaknnsyc82HV6Ty5uF80QD2S5VPhOUezt0DO+7EoJPRK24VjufTuasekamzjsfu9G1sqMrmghfshXJ+slYNxTJkUSZE62WG6L1Z7uoSimc4ZzGSDq2YqGUuZiV6t/DDtvLC/ZLMiUzAsyRqdNnjh4yH6NmvR5led4/QFs83M7CmVuZHN0cmVhbQplbmRvYmoKMjYgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAyMzcgPj4Kc3RyZWFtCnicRVFJcgQhDLv3K/SBqcIr8J5Ozanz/2ssM0lOFmBrMWmBgS14iSHWwMyBL7l8Teg0fDcy2/A62R5wT7gu3JfLgmfClsBXVJd3vS9d2Uh9d4eqfmZke7NIzZCVlTr1QjQm2CERPSMyyVYsc4OkKa1S5b4oW4Au6pW2TjuNkqAjFOFvlCPh6RVKdk1sGqvUOqChCMu2Log6mSSidmFxavGWISKfdWM1x/iLTiJ2x+P+rDDrUSSS0mcH3XEmo02WXQM5uXmqsFYqOYg+XtHGhOp0qoFjvNe29BNp4Ln2X+EHPn3/jxj6ud4/xu5cIgplbmRzdHJlYW0KZW5kb2JqCjI3IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggNzEgPj4Kc3RyZWFtCnicM7Y0UDBQsDBT0DU0NlQwsjRWMDczUEgx5AIKgVi5XDCxHDDLzBLEMjQ3Q2LpmhlCZZFYIONyuGAG58DMy+FKAwDxtBYjCmVuZHN0cmVhbQplbmRvYmoKMjggMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA2NyA+PgpzdHJlYW0KeJwztjRQMFCwNFfQNTQ2VDA2MFEwNzNQSDHkgjFzwSywbA4XTB2EZQZiGBmaILHMgMaBJeEMkBk5cNNyuNIAzoMV0wplbmRzdHJlYW0KZW5kb2JqCjI5IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjQ1ID4+CnN0cmVhbQp4nEVQu41DMQzrPQUXCGD9LHued0iV2789SkZwhSFaP5JaEpiIwEsMsZRv4kdGQT0LvxeF4jPEzxeFQc6EpECc9RkQmXiG2kZu6HZwzrzDM4w5AhfFWnCm05n2XNjknAcnEM5tlPGMQrpJVBVxVJ9xTPGqss+N14GltWyz05HsIY2ES0klJpd+Uyr/tClbKujaRROwSOSBk0004Sw/Q5JizKCUUfcwtY70cbKRR3XQydmcOS2Z2e6n7Ux8D1gmmVHlKZ3nMj4nqfNcTn3usx3R5KKlVfuc/d6RlvIitduh1elXJVGZjdWnkLg8/4yf8f4DjqBZPgplbmRzdHJlYW0KZW5kb2JqCjMwIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggNzEgPj4Kc3RyZWFtCnicszC2UDBQMDQwUzA0N1IwNzZSMDE1UUgx5AIJgZi5XDDBHDDLGKgsByyLYEFkQSwjU1OoDhALosMQrg7BgsimAQDr5xgyCmVuZHN0cmVhbQplbmRvYmoKMzEgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAyNDcgPj4Kc3RyZWFtCnicTVG7bUQxDOvfFFzgAOtreZ4LUl32b0PJCJDCIKEvKaclFvbGSwzhB1sPvuSRVUN/Hj8x7DMsPcnk1D/muclUFL4VqpuYUBdi4f1oBLwWdC8iK8oH349lDHPO9+CjEJdgJjRgrG9JJhfVvDNkwomhjsNBm1QYd00ULK4VzTPI7VY3sjqzIGx4JRPixgBEBNkXkM1go4yxlZDFch6oCpIFWmDX6RtRi4IrlNYJdKLWxLrM4Kvn9nY3Qy/y4Ki6eH0M60uwwuileyx8rkIfzPRMO3dJI73wphMRZg8FUpmdkZU6PWJ9t0D/n2Ur+PvJz/P9CxUoXCoKZW5kc3RyZWFtCmVuZG9iagozMiAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDkwID4+CnN0cmVhbQp4nE2NQRLAIAgD77wiT1BE0P90etL/X6vUDr3ATgKJFkWC9DVqSzDuuDIVa1ApmJSXwFUwXAva7qLK/jJJTJ2G03u3A4Oy8XGD0kn79nF6AKv9egbdD9IcIlgKZW5kc3RyZWFtCmVuZG9iagozMyAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDY4ID4+CnN0cmVhbQp4nDMyt1AwULA0ARKGFiYK5mYGCimGXEC+qYm5Qi4XSAzEygGzDIC0JZyCiFtCNEGUglgQpWYmZhBJOAMilwYAybQV5QplbmRzdHJlYW0KZW5kb2JqCjM0IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjU1ID4+CnN0cmVhbQp4nEWRS5IDIAhE956CI4D85DyZmlVy/+00mEw2dpeo/YRKI6YSLOcUeTD9yPLNZLbptRyrnY0CiiIUzOQq9FiB1Z0p4sy1RLX1sTJy3Okdg+IN566cVLK4UcY6qjoVOKbnyvqq7vy4LMq+I4cyBWzWOQ42cOW2YYwTo81Wd4f7RJCnk6mj4naQbPiDk8a+ytUVuE42++olGAeCfqEJTPJNoHWGQOPmKXpyCfbxcbvzQLC3vAmkbAjkyBCMDkG7Tq5/cev83v86w53n2gxXjnfxO0xru+MvMcmKuYBF7hTU8z0XresMHe/JmWNy031D51ywy91Bps/8H+v3D1CKZogKZW5kc3RyZWFtCmVuZG9iagozNSAwIG9iago8PCAvQkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAzNwovU3VidHlwZSAvRm9ybSAvVHlwZSAvWE9iamVjdCA+PgpzdHJlYW0KeJzjMjQwUzA2NVXI5TI3NgKzcsAsI3MjIAski2BBZNMAAV8KCgplbmRzdHJlYW0KZW5kb2JqCjM2IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTYxID4+CnN0cmVhbQp4nEWQSxLDIAxD95xCR/BHBnyedLpK77+tIU2zgKexQAZ3JwSptQUT0QUvbUu6Cz5bCc7GeOg2bjUS5AR1gFak42iUUn25xWmVdPFoNnMrC60THWYOepSjGaAQOhXe7aLkcqbuzvlHcPVf9Uex7pzNxMBk5Q6EZvUp7nybHVFd3WR/0mNu1mt/FfaqsLSspeWE285dM6AE7qkc7f0FqXM6hAplbmRzdHJlYW0KZW5kb2JqCjM3IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTQ4ID4+CnN0cmVhbQp4nE2QORYEIQhEc0/BEVhE8D7zJnLunw4u2J3o14Iq1MUBwWwujcDI4UNFiaBWhF+R1heNIuzAUThKNTqUdXEXPrM5OtxASacqmOTbepSmPQn7UWfwQ9tPOyYpnjRDfRPyyqBD1RHWJHFau/JRJJI2caRPjU4t3+6wfWBlcO1JdxYSedGeWe475L4tf2OU7x/FgEPlCmVuZHN0cmVhbQplbmRvYmoKMzggMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAyMTQgPj4Kc3RyZWFtCnicPVC7EUMxCOs9BQvkznztN8/Lpcv+bSScpEI2QhKUmkzJlIc6ypKsKU8dPktih7yH5W5kNiUqRS+TsCX30ArxfYnmFPfd1ZazQzSXaDl+CzMqqhsd00s2mnAqE7qg3MMz+g1tdANWhx6xWyDQpGDXtiByxw8YDMGZE4siDEpNBv+tcvdS3O89HG+iiJR08K755fTLzy28Tj2ORLq9+YprcaY6CkRwRmryinRhxbLIQ6TVBDU9A2u1AK7eevk3aEd0GYDsE4njNKUcQ//WuMfrA4eKUvQKZW5kc3RyZWFtCmVuZG9iagozOSAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDgwID4+CnN0cmVhbQp4nEWMuw3AMAhEe6ZgBH4mZp8olbN/GyBK3HBPunu4OhIyU95hhocEngwshlPxBpmjYDW4RlKNneyjsG5fdYHmelOr9fcHKk92dnE9zcsZ9AplbmRzdHJlYW0KZW5kb2JqCjQwIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjM2ID4+CnN0cmVhbQp4nE1QS25EIQzbc4pc4EkkIQHOQ9VV5/7bscNU7SqGGH9ID+myVR7rU2J1iezypU2XyjJ5FajlT9v/UQwCbv/QyEG0t4ydYuYS1sXCJDzlNCMbJ9csH487TxtmhcbEjeOdLhlgnxYBNVuVzYE5bTo3QLqQGreqs95kUAwi6kLNB5MunKfRl4g5nqhgSncmtZAbXD7VoQNxWr0KuWOLk2/EHFmhwGHQTHHWXwHWqMmyWcggSYYhzn2je5QKjajKeSsVwg+ToRH1htWgBpW5haKp5ZL8HdoCMAW2jHXpDEqBqgDB3yqnfb8BJI1dUwplbmRzdHJlYW0KZW5kb2JqCjQxIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTQ3ID4+CnN0cmVhbQp4nD1PuQ0DMQzrPQUXOMB6LFvzXJDqsn8bykZSCCJA8ZFlR8cKXGICk445Ei9pP/hpGoFYBjVH9ISKYVjgbpICD4MsSleeLV4MkdpCXUj41hDerUxkojyvETtwJxejBz5UG1keekA7RBVZrknDWNVWXWqdsAIcss7CdT3MqgTl0SdrKR9QVEK9dP+fe9r7CwBvL+sKZW5kc3RyZWFtCmVuZG9iago0MiAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDE0OSA+PgpzdHJlYW0KeJw1j0sOAyEMQ/c5hS8wUn6EcB6qrqb33zZhWgkJC9svwRaDkYxLTGDsmGPhJVRPrT4kI4+6STkQqVA3BE9oTAwzbNIl8Mp03zKeW7ycVuqCTkjk6aw2GqKMZl7D0VPOCpv+y9wkamVGmQMy61S3E7KyYAXmBbU89zPuqFzohIedyrDoTjGi3GZGGn7/2/T+AnsyMGMKZW5kc3RyZWFtCmVuZG9iago0MyAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDQ5ID4+CnN0cmVhbQp4nDM2tFAwUDA0MAeSRoZAlpGJQoohF0gAxMzlggnmgFkGQBqiOAeuJocrDQDG6A0mCmVuZHN0cmVhbQplbmRvYmoKNDQgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA3OSA+PgpzdHJlYW0KeJxFjbENwDAIBHumYAQMMTBQlIrs3xpsyTT/J5307+JIOEgzTRiVDd8Bj9LGf5PMiQGlm9g4qWwTZYv57WNqvOkslG2qp7ifAd8CZvEc5wplbmRzdHJlYW0KZW5kb2JqCjQ1IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTU3ID4+CnN0cmVhbQp4nEWQuRFDMQhEc1VBCRKwCOqxx9F3/6kX+Uq0bwAth68lU6ofJyKm3Ndo9DB5Dp9NJVYs2Ca2kxpyGxZBSjGYeE4xq6O3oZmH1Ou4qKq4dWaV02nLysV/82hXM5M9wjXqJ/BN6PifPLSp6FugrwuUfUC1OJ1JUDF9r2KBo5x2fyKcGOA+GUeZKSNxYm4K7PcZAGa+V7jG4wXdATd5CmVuZHN0cmVhbQplbmRvYmoKNDYgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAzMzIgPj4Kc3RyZWFtCnicLVI5jiQxDMv9Cn5gAOvy8Z4eTNT7/3RJVQUFqmzLPORyw0QlfiyQ21Fr4tdGZqDC8K+rzIXvSNvIOohryEVcyZbCZ0Qs5DHEPMSC79v4GR75rMzJswfGL9n3GVbsqQnLQsaLM7TDKo7DKsixYOsiqnt4U6TDqSTY44v/PsVzF4IWviNowC/556sjeL6kRdo9Ztu0Ww+WaUeVFJaD7WnOy+RL6yxXx+P5INneFTtCaleAojB3xnkujjJtZURrYWeDpMbF9ubYj6UEXejGZaQ4AvmZKsIDSprMbKIg/sjpIacyEKau6Uont1EVd+rJXLO5vJ1JMlv3RYrNFM7rwpn1d5gyq807eZYTpU5F+Bl7tgQNnePq2WuZhUa3OcErJXw2dnpy8r2aWQ/JqUhIFdO6Ck6jyBRL2Jb4moqa0tTL8N+X9xl//wEz4nwBCmVuZHN0cmVhbQplbmRvYmoKNDcgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA2OCA+PgpzdHJlYW0KeJwzMzZTMFCwMAISpqaGCuZGlgophlxAPoiVywUTywGzzCzMgSwjC5CWHC5DC2MwbWJspGBmYgZkWSAxILrSAHL4EpEKZW5kc3RyZWFtCmVuZG9iago0OCAwIG9iago8PCAvQkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAyMDkKL1N1YnR5cGUgL0Zvcm0gL1R5cGUgL1hPYmplY3QgPj4Kc3RyZWFtCnicRVE5kgQhDMt5hT4wVfgE3tNVE83+P13Z3bMbWSBZlmHYTPhK/AyNG6lseGzIUbgqriHpsO2QmDCLrrqsmEJzQdJ4m+wRCPuvoXKwScZCKmpKlpWF95neZF3nI3ffbeAky7BrjyhkxihU2NbuuWPZ8Q5qT/DvKmSIwheXyumNPo08CsU/sgMvLU/m0fWeWki2IYxri8HPRHYcykT7OV68r0lVubCuRpJZAmHEblirDSJuv/gbACNP1s1a7bSsF90I5S9wzQr+XeUa71+Ey0+XCmVuZHN0cmVhbQplbmRvYmoKNDkgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAzMTcgPj4Kc3RyZWFtCnicNVJLckMxCNu/U3CBzpi/fZ50smruv62EJyuwLUBCLi9Z0kt+1CXbpcPkVx/3JbFCPo/tmsxSxfcWsxTPLa9HzxG3LQoEURM9+DInFSLUz9ToOnhhlz4DrxBOKRZ4B5MABq/hX3iUToPAOxsy3hGTkRoQJMGaS4tNSJQ9Sfwr5fWklTR0fiYrc/l7cqkUaqPJCBUgWLnYB6QrKR4kEz2JSLJyvTdWiN6QV5LHZyUmGRDdJrFNtMDj3JW0hJmYQgXmWIDVdLO6+hxMWOOwhPEqYRbVg02eNamEZrSOY2TDePfCTImFhsMSUJt9lQmql4/T3AkjpkdNdu3Csls27yFEo/kzLJTBxygkAYdOYyQK0rCAEYE5vbCKveYLORbAiGWdmiwMbWglu3qOhcDQnLOlYcbXntfz/gdFW3ujCmVuZHN0cmVhbQplbmRvYmoKNTAgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAxNyA+PgpzdHJlYW0KeJwzNrRQMIDDFEMuABqUAuwKZW5kc3RyZWFtCmVuZG9iago1MSAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDEzMSA+PgpzdHJlYW0KeJxFj8sNBCEMQ+9U4RLyGT6ph9We2P6v6zCaQUL4QSI78TAIrPPyNtDF8NGiwzf+NtWrY5UsH7p6UlYP6ZCHvPIVUGkwUcSFWUwdQ2HOmMrIljK3G+G2TYOsbJVUrYN2PAYPtqdlqwh+qW1h6izxDMJVXrjHDT+QS613vVW+f0JTMJcKZW5kc3RyZWFtCmVuZG9iago1MiAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDMzOCA+PgpzdHJlYW0KeJw1Ujmu3UAM630KXSCAds2c5wWpfu7fhpRfCkO0VoqajhaVafllIVUtky6/7UltiRvy98kKiROSVyXapQyRUPk8hVS/Z8u8vtacESBLlQqTk5LHJQv+DJfeLhznY2s/jyN3PXpgVYyEEgHLFBOja1k6u8Oajfw8pgE/4hFyrli3HGMVSA26cdoV70PzecgaIGaYlooKXVaJFn5B8aBHrX33WFRYINHtHElwjI1QkYB2gdpIDDmzFruoL/pZlJgJdO2LIu6iwBJJzJxiXTr6Dz50LKi/NuPLr45K+kgra0zad6NJacwik66XRW83b309uEDzLsp/Xs0gQVPWKGl80KqdYyiaGWWFdxyaDDTHHIfMEzyHMxKU9H0ofl9LJrookT8ODaF/Xx6jjJwGbwFz0Z+2igMX8dlhrxxghdLFmuR9QCoTemD6/9f4ef78Axy2gFQKZW5kc3RyZWFtCmVuZG9iago1MyAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDI0OCA+PgpzdHJlYW0KeJwtUTmSA0EIy+cVekJz0++xy5H3/+kKygGDhkMgOi1xUMZPEJYr3vLIVbTh75kYwXfBod/KdRsWORAVSNIYVE2oXbwevQd2HGYC86Q1LIMZ6wM/Ywo3enF4TMbZ7XUZNQR712tPZlAyKxdxycQFU3XYyJnDT6aMC+1czw3IuRHWZRikm5XGjIQjTSFSSKHqJqkzQZAEo6tRo40cxX7pyyOdYVUjagz7XEvb13MTzho0OxarPDmlR1ecy8nFCysH/bzNwEVUGqs8EBJwv9tD/Zzs5Dfe0rmzxfT4XnOyvDAVWPHmtRuQTbX4Ny/i+D3j6/n8A6ilWxYKZW5kc3RyZWFtCmVuZG9iago1NCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDIwMiA+PgpzdHJlYW0KeJw1UDtyBTEI630KHYG/zXk2k+rl/m2ENyk80gCWBCEKQRTc+Pxgh+FLl7rCj+FnTXHY52Uc+6y/+ZccIckNb8F2hASaYIZnmSTSFFaKPHWxdE9nGAUtDZUJ80RVT0cPiobaRWwoq4PP0pmdigexoDoo7DTJDmz2qxB9JZ9FsjUZj7m2MVcxofIf9/QZ0JjM4yF3c919kSm43zCruH+sjVrj5SZ05SluYnnRRm1YUsEOt+WszjnoNcmTh6F+6L3T/3mf9f0Lv35IZQplbmRzdHJlYW0KZW5kb2JqCjU1IDAgb2JqCjw8IC9CQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDI0OAovU3VidHlwZSAvRm9ybSAvVHlwZSAvWE9iamVjdCA+PgpzdHJlYW0KeJxNUcttxTAMu3sKLhDA+loeozMU6Kk9dP9LKbstHhJEFCVKpjO+IZh87vf9a1Tg0blwUPjC55D1irp4kcSGVELUyRZkcsJQm1gJTQdfI8/wPizy5FuxFlwom0HenctN4WGQZSeqVleI7trwVySaf2gm+QBnRgjKqIpY4JhIrtuIVR1Il5ycpjpsnlGa3tHdObXPnKKo9nBAL9l0RVHi4cjleFaLUvEI+ZiMLNg+kRXaauTUsdX7CtsJdwlT6owheCY71m+u2lWjppvtrjH67VEm8TtcaaGR8l7Y0Pfc/cpLoFyqYI1oUEk3eO6/qn/0Md7GDw+KXMwKZW5kc3RyZWFtCmVuZG9iago1NiAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDcyID4+CnN0cmVhbQp4nDWMsRHAMAgDe6bQCDZYYO+TS0X2b0N8TgMvHQ+XosFaDbqCI3B1qfzRI125KUWXY86C4XGqX0gxRj2oI+Pex0+5X3AWEn0KZW5kc3RyZWFtCmVuZG9iago1NyAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDc0ID4+CnN0cmVhbQp4nD2MwQ2AMAwD/50iIzSJTTIQ4gX7f2kK7cc+nWTTKF3gFWlChJzayElPW+6ehIODFJCwX23o1b4qS3uqIGoy/jZ8d9cLdxwXTgplbmRzdHJlYW0KZW5kb2JqCjU4IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjEwID4+CnN0cmVhbQp4nDVQyw1DMQi7ZwoWqBQCgWSeVr11/2tt0DthEf9CWMiUCHmpyc4p6Us+OkwPti6/sSILrXUl7MqaIJ4r76GZsrHR2OJgcBomXoAWN2DoaY0aNXThgqYulUKBxSXwmXx1e+i+Txl4ahlydgQRQ8lgCWq6Fk1YtDyfkE4B4v9+w+4t5KGS88qeG/kbnO3wO7Nu4SdqdiLRchUy1LM0xxgIE0UePHlFpnDis9Z31TQS1GYLTpYBrk4/jA4AYCJeWYDsrkQ5S9KOpZ9vvMf3D0AAU7QKZW5kc3RyZWFtCmVuZG9iagoyMiAwIG9iago8PCAvQmFzZUZvbnQgL0RlamFWdVNhbnMgL0NoYXJQcm9jcyAyMyAwIFIKL0VuY29kaW5nIDw8Ci9EaWZmZXJlbmNlcyBbIDMyIC9zcGFjZSAzNSAvbnVtYmVyc2lnbiA0MCAvcGFyZW5sZWZ0IC9wYXJlbnJpZ2h0IDQzIC9wbHVzIDQ2IC9wZXJpb2QKNDggL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciAvZml2ZSAvc2l4IC9zZXZlbiA2MSAvZXF1YWwgNzIgL0ggOTEKL2JyYWNrZXRsZWZ0IDkzIC9icmFja2V0cmlnaHQgOTcgL2EgL2IgMTAxIC9lIDEwNSAvaSAxMDkgL20gL24gL28gL3AgMTE0IC9yCi9zIC90IDExOCAvdiAxMjIgL3ogMTc4IC90d29zdXBlcmlvciBdCi9UeXBlIC9FbmNvZGluZyA+PgovRmlyc3RDaGFyIDAgL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvRm9udERlc2NyaXB0b3IgMjEgMCBSCi9Gb250TWF0cml4IFsgMC4wMDEgMCAwIDAuMDAxIDAgMCBdIC9MYXN0Q2hhciAyNTUgL05hbWUgL0RlamFWdVNhbnMKL1N1YnR5cGUgL1R5cGUzIC9UeXBlIC9Gb250IC9XaWR0aHMgMjAgMCBSID4+CmVuZG9iagoyMSAwIG9iago8PCAvQXNjZW50IDkyOSAvQ2FwSGVpZ2h0IDAgL0Rlc2NlbnQgLTIzNiAvRmxhZ3MgMzIKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvRm9udE5hbWUgL0RlamFWdVNhbnMgL0l0YWxpY0FuZ2xlIDAKL01heFdpZHRoIDEzNDIgL1N0ZW1WIDAgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9YSGVpZ2h0IDAgPj4KZW5kb2JqCjIwIDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjIzIDAgb2JqCjw8IC9IIDI0IDAgUiAvYSAyNSAwIFIgL2IgMjYgMCBSIC9icmFja2V0bGVmdCAyNyAwIFIgL2JyYWNrZXRyaWdodCAyOCAwIFIKL2UgMjkgMCBSIC9lcXVhbCAzMCAwIFIgL2ZpdmUgMzEgMCBSIC9mb3VyIDMyIDAgUiAvaSAzMyAwIFIgL20gMzQgMCBSCi9uIDM2IDAgUiAvbnVtYmVyc2lnbiAzNyAwIFIgL28gMzggMCBSIC9vbmUgMzkgMCBSIC9wIDQwIDAgUgovcGFyZW5sZWZ0IDQxIDAgUiAvcGFyZW5yaWdodCA0MiAwIFIgL3BlcmlvZCA0MyAwIFIgL3BsdXMgNDQgMCBSIC9yIDQ1IDAgUgovcyA0NiAwIFIgL3NldmVuIDQ3IDAgUiAvc2l4IDQ5IDAgUiAvc3BhY2UgNTAgMCBSIC90IDUxIDAgUiAvdGhyZWUgNTIgMCBSCi90d28gNTMgMCBSIC90d29zdXBlcmlvciA1NCAwIFIgL3YgNTYgMCBSIC96IDU3IDAgUiAvemVybyA1OCAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YxIDIyIDAgUiAvRjIgMTQgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvQ0EgMCAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+Ci9BMiA8PCAvQ0EgMSAvVHlwZSAvRXh0R1N0YXRlIC9jYSAxID4+Ci9BMyA8PCAvQ0EgMC44IC9UeXBlIC9FeHRHU3RhdGUgL2NhIDAuOCA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvRGVqYVZ1U2Fucy1taW51cyAzNSAwIFIgL0RlamFWdVNhbnMtc2lnbWEgNDggMCBSCi9EZWphVnVTYW5zLXVuaTAzQkMgNTUgMCBSID4+CmVuZG9iagoyIDAgb2JqCjw8IC9Db3VudCAxIC9LaWRzIFsgMTAgMCBSIF0gL1R5cGUgL1BhZ2VzID4+CmVuZG9iago1OSAwIG9iago8PCAvQ3JlYXRpb25EYXRlIChEOjIwMjAwNDAzMTU1NTMyKzAyJzAwJykKL0NyZWF0b3IgKG1hdHBsb3RsaWIgMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChtYXRwbG90bGliIHBkZiBiYWNrZW5kIDMuMS4zKSA+PgplbmRvYmoKeHJlZgowIDYwCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDE2NTg5IDAwMDAwIG4gCjAwMDAwMTYyNjQgMDAwMDAgbiAKMDAwMDAxNjMwNyAwMDAwMCBuIAowMDAwMDE2NDQ5IDAwMDAwIG4gCjAwMDAwMTY0NzAgMDAwMDAgbiAKMDAwMDAxNjQ5MSAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzOTkgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDAyNjk1IDAwMDAwIG4gCjAwMDAwMDQ1MzMgMDAwMDAgbiAKMDAwMDAwNDMyNSAwMDAwMCBuIAowMDAwMDAzOTk2IDAwMDAwIG4gCjAwMDAwMDU1ODYgMDAwMDAgbiAKMDAwMDAwMjcxNiAwMDAwMCBuIAowMDAwMDAyOTMzIDAwMDAwIG4gCjAwMDAwMDMzMzggMDAwMDAgbiAKMDAwMDAwMzYyNCAwMDAwMCBuIAowMDAwMDE0NzczIDAwMDAwIG4gCjAwMDAwMTQ1NzMgMDAwMDAgbiAKMDAwMDAxNDAyNyAwMDAwMCBuIAowMDAwMDE1ODI2IDAwMDAwIG4gCjAwMDAwMDU2NDggMDAwMDAgbiAKMDAwMDAwNTc5NyAwMDAwMCBuIAowMDAwMDA2MTc0IDAwMDAwIG4gCjAwMDAwMDY0ODQgMDAwMDAgbiAKMDAwMDAwNjYyNyAwMDAwMCBuIAowMDAwMDA2NzY2IDAwMDAwIG4gCjAwMDAwMDcwODQgMDAwMDAgbiAKMDAwMDAwNzIyNyAwMDAwMCBuIAowMDAwMDA3NTQ3IDAwMDAwIG4gCjAwMDAwMDc3MDkgMDAwMDAgbiAKMDAwMDAwNzg0OSAwMDAwMCBuIAowMDAwMDA4MTc3IDAwMDAwIG4gCjAwMDAwMDgzNDcgMDAwMDAgbiAKMDAwMDAwODU4MSAwMDAwMCBuIAowMDAwMDA4ODAyIDAwMDAwIG4gCjAwMDAwMDkwODkgMDAwMDAgbiAKMDAwMDAwOTI0MSAwMDAwMCBuIAowMDAwMDA5NTUwIDAwMDAwIG4gCjAwMDAwMDk3NzAgMDAwMDAgbiAKMDAwMDAwOTk5MiAwMDAwMCBuIAowMDAwMDEwMTEzIDAwMDAwIG4gCjAwMDAwMTAyNjQgMDAwMDAgbiAKMDAwMDAxMDQ5NCAwMDAwMCBuIAowMDAwMDEwODk5IDAwMDAwIG4gCjAwMDAwMTEwMzkgMDAwMDAgbiAKMDAwMDAxMTM4MiAwMDAwMCBuIAowMDAwMDExNzcyIDAwMDAwIG4gCjAwMDAwMTE4NjEgMDAwMDAgbiAKMDAwMDAxMjA2NSAwMDAwMCBuIAowMDAwMDEyNDc2IDAwMDAwIG4gCjAwMDAwMTI3OTcgMDAwMDAgbiAKMDAwMDAxMzA3MiAwMDAwMCBuIAowMDAwMDEzNDU0IDAwMDAwIG4gCjAwMDAwMTM1OTggMDAwMDAgbiAKMDAwMDAxMzc0NCAwMDAwMCBuIAowMDAwMDE2NjQ5IDAwMDAwIG4gCnRyYWlsZXIKPDwgL0luZm8gNTkgMCBSIC9Sb290IDEgMCBSIC9TaXplIDYwID4+CnN0YXJ0eHJlZgoxNjgwMwolJUVPRgo=\n",
      "image/png": "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uuiiocnJyek//OEPk5544one6enpo4YPHz56+/btLoC4uLi65OTkSvfxmuLN5fc6+6YEVwCPGWP+JCKbvdhPqZaV5UJkPMW1wT03cn5VIpFSy4CoI/X3jvSnF154gQcffLDR+mHDhrXYDNFWZWVlPPDAA6xataq+acSttraWSZMmkZuby80338yUKVOaOUrr3EPZ3Y4fP14/mtLdnfBf//oXf/jDH7wayu6t1obxr1y5kp///OcUFRXx1ltvAdZQ9/j4eH70ox+5CgsLR8+YMaPk8ccfL2hqEFR5eXnYrl27drzzzjuxixYtGpyTk3K2c6UAABzASURBVLMdYOfOnTEbN27cWVpaGn7uueeOvvLKK08C7Nq1K2bbtm3b+/XrV5OSkpLucrmObt26dedvfvObfosXL+63dOnSAwATJ048lZmZGTdr1qzTTeXtTdGuFpHvANdizakNEFxzaKrQVLoH4oZizYwQvDx7kASiaC9YsIAFCxZ4vf2UKVOorKykrKyM48eP1xfIBx54oMVh7Pfeey+33XZbozZngPDwcLKysiguLmb+/Pls27at3cXTl0PZ33vvPe666y7CwsLYv38/H374IbGxsbhcLj777LP67aqqqnjjjTf43e9+12xe8+fPZ/78+axbt65+SHxNTQ0ffPABL774YtXFF1+8Y86cOUP/9Kc/nXPbbbc1msv2u9/97nGA2bNnl5WVlYUdPXo03F4ujo2NNbGxsTXnn39+yQcffNC9V69etenp6adSUlKqAQYNGlQ5e/bskwDjx48vf//99+vPXPr161eza9euZgcueFO0rwduAu4zxuwTkcHAX73YT6mWlWbDOec7nUWr8uwuiSmuQj4oa2XjVniOi6iurm5ym7aeabuLVWZmJsuWLWPZsmVe5fLZZ5+xYsUKfvrTn1JcXExYWBjR0dENLhLGx8cza9Ys3n333XYX7Za0dSj7JZdcwrRp04iLi2PhwoUsXLiwyfEC77zzDhMnTiQhocXmYaDhkPjk5GQmTJjAoEGDTGRkJHPnzj3x6aefNv6tRvND15tb73K56n/49r+1cb+ura2t36mioiIsJiam2W7V3vQe2QHcCWwXkXTgoDHmgdb2U6pFtRVwKh/ihjudSauKanpTXufyycXI/Px8jhw5Ql1dHevWraO2tvGsxwsWLGgwbN398GXTCMAHH3xA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\n",
      "text/plain": [
       "<Figure size 360x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "histogram = np.array(db.execute('SELECT gps_1pps, COUNT(*) FROM measurements WHERE gps_1pps != -1 AND run_id = ? GROUP BY gps_1pps', (last_run,)).fetchall())\n",
    "hist_plot = histogram.astype(float)[1:-1]\n",
    "hist_plot[:, 0] *= 2 / 5 * 2\n",
    "hist_plot[:, 1] /= (1000 / 32)\n",
    "\n",
    "f_nom = 19.440e6\n",
    "\n",
    "font = {'family' : 'normal',\n",
    "        'weight' : 'normal',\n",
    "        'size'   : 10}\n",
    "matplotlib.rc('font', **font)\n",
    "fig, ax = plt.subplots(figsize=(5, 4))\n",
    "ax.grid()\n",
    "# We have a bug that causes our measurements to occassionally be out by +/- 65534 counts.\n",
    "# For now, fix this by simply throwing away these (very obviously invalid) bins.\n",
    "ax.bar(hist_plot[:,0] - f_nom , hist_plot[:, 1])\n",
    "\n",
    "def gauss(x, *p):\n",
    "    A, mu, sigma = p\n",
    "    return A*np.exp(-(x-mu)**2/(2.*sigma**2))\n",
    "\n",
    "gauss_x = np.linspace(np.min(hist_plot[:,0]), np.max(hist_plot[:,0]), 10000)\n",
    "coeff, var_matrix = opt.curve_fit(gauss, hist_plot[:,0], hist_plot[:,1], p0=[np.max(hist_plot[:,1]), np.mean(hist_plot[:,0]), 1])\n",
    "hist_fit = gauss(gauss_x, *coeff)\n",
    "ax.plot(gauss_x - f_nom, hist_fit, color='orange')\n",
    "_A, mu, sigma = coeff\n",
    "bbox_props = dict(fc='white', alpha=0.8, ec='none')\n",
    "ax.annotate(f'σ² = {sigma**2 * 1e3:.1f} mHz ({sigma**2 / f_nom * 1e9:.2f} ppb)\\n'\n",
    "            f'μ = {mu-f_nom:+.1f} Hz ({(mu-f_nom)/f_nom * 1e6:+.2f} ppm)',\n",
    "            xy=[0.6, 0.5], xycoords='figure fraction', bbox=bbox_props)\n",
    "ax.set_xlabel('$f - f_{nom}$ [Hz]')\n",
    "ax.set_ylabel('# observations')\n",
    "\n",
    "#ax.set_title('OCXO frequency derivation relative to GPS 1pps')\n",
    "fig.savefig('fig_out/ocxo_freq_stability.pdf', format='pdf')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "labenv",
   "language": "python",
   "name": "labenv"
  },
  "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.8.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}