Last active
November 30, 2017 18:13
-
-
Save jasonmhite/7dbc23ccd69a554e366551910111a357 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Populating the interactive namespace from numpy and matplotlib\n" | |
] | |
} | |
], | |
"source": [ | |
"%pylab notebook" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"import seaborn as sb # not essential, just for pretty plots\n", | |
"import pandas as pd" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"sb.set_style(\"white\")" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Load the full data set" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"data = pd.read_json(\"data.json\")" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Extract just the data related to the calibration measurements" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"caldata = data.query('group == \"Calibration\"')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style>\n", | |
" .dataframe thead tr:only-child th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: left;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>all_tags</th>\n", | |
" <th>altitude</th>\n", | |
" <th>counts</th>\n", | |
" <th>datestamp</th>\n", | |
" <th>detector</th>\n", | |
" <th>end_time</th>\n", | |
" <th>gain</th>\n", | |
" <th>group</th>\n", | |
" <th>high_voltage</th>\n", | |
" <th>hostname</th>\n", | |
" <th>is_alive</th>\n", | |
" <th>latitude</th>\n", | |
" <th>live_time</th>\n", | |
" <th>longitude</th>\n", | |
" <th>n_meas</th>\n", | |
" <th>original_fname</th>\n", | |
" <th>real_time</th>\n", | |
" <th>spectrum</th>\n", | |
" <th>start_time</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>258.461641</td>\n", | |
" <td>506765</td>\n", | |
" <td>1494238388679</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:18:08.382</td>\n", | |
" <td>[3.0138549243, 3.0138549243, 3.0138549243, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937202</td>\n", | |
" <td>296.716449</td>\n", | |
" <td>-84.274756</td>\n", | |
" <td>2995</td>\n", | |
" <td>Calibration/001-Runix01-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.5</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:13:08.682</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>100</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>249.697731</td>\n", | |
" <td>584984</td>\n", | |
" <td>1494266923269</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:13:42.555</td>\n", | |
" <td>[3.0705873832, 3.0705873832, 3.0705873832, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix04</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.924602</td>\n", | |
" <td>296.285295</td>\n", | |
" <td>-84.247728</td>\n", | |
" <td>2997</td>\n", | |
" <td>Calibration/100-Runix04-Calibration-Co60-10uC-...</td>\n", | |
" <td>299.7</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:08:42.955</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>101</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>261.233456</td>\n", | |
" <td>516400</td>\n", | |
" <td>1494266924264</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:13:43.850</td>\n", | |
" <td>[2.5078026892, 2.5078026892, 2.5078026892, 2.5...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[850, 850, 850, 850, 850, 850, 850, 850, 850, ...</td>\n", | |
" <td>Runix05</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937176</td>\n", | |
" <td>297.157845</td>\n", | |
" <td>-84.274726</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/101-Runix05-Calibration-Co60-10uC-...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:08:44.050</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>102</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>251.866989</td>\n", | |
" <td>586233</td>\n", | |
" <td>1494266926057</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:13:45.315</td>\n", | |
" <td>[2.7590321056, 2.7590321056, 2.7590321056, 2.7...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[900, 900, 900, 900, 900, 900, 900, 900, 900, ...</td>\n", | |
" <td>Runix06</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937208</td>\n", | |
" <td>296.268990</td>\n", | |
" <td>-84.274753</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/102-Runix06-Calibration-Co60-10uC-...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:08:45.515</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>103</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>283.872257</td>\n", | |
" <td>488712</td>\n", | |
" <td>1494267277591</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:19:37.136</td>\n", | |
" <td>[3.0362493167, 3.0362493167, 3.0362493167, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937147</td>\n", | |
" <td>297.218338</td>\n", | |
" <td>-84.274740</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/103-Runix01-Calibration-Th232-2017...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:14:37.336</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>104</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>268.888767</td>\n", | |
" <td>477409</td>\n", | |
" <td>1494267279026</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:19:38.450</td>\n", | |
" <td>[2.6928524736, 2.6928524736, 2.6928524736, 2.6...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[851, 851, 851, 851, 851, 851, 851, 851, 851, ...</td>\n", | |
" <td>Runix02</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937295</td>\n", | |
" <td>297.304656</td>\n", | |
" <td>-84.274797</td>\n", | |
" <td>3000</td>\n", | |
" <td>Calibration/104-Runix02-Calibration-Th232-2017...</td>\n", | |
" <td>300.0</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:14:38.550</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>105</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>259.019446</td>\n", | |
" <td>463188</td>\n", | |
" <td>1494267279225</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:19:38.780</td>\n", | |
" <td>[3.2728579752, 3.2728579752, 3.2728579752, 3.2...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix03</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937169</td>\n", | |
" <td>297.221703</td>\n", | |
" <td>-84.274730</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/105-Runix03-Calibration-Th232-2017...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:14:39.080</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>106</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>254.749783</td>\n", | |
" <td>455133</td>\n", | |
" <td>1494267279770</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:19:39.155</td>\n", | |
" <td>[3.0510487279, 3.0510487279, 3.0510487279, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix04</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937147</td>\n", | |
" <td>297.242245</td>\n", | |
" <td>-84.274774</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/106-Runix04-Calibration-Th232-2017...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:14:39.455</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>107</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>261.982161</td>\n", | |
" <td>406750</td>\n", | |
" <td>1494267280765</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:19:40.350</td>\n", | |
" <td>[2.5403353015, 2.5403353015, 2.5403353015, 2.5...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[850, 850, 850, 850, 850, 850, 850, 850, 850, ...</td>\n", | |
" <td>Runix05</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937208</td>\n", | |
" <td>297.733472</td>\n", | |
" <td>-84.274711</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/107-Runix05-Calibration-Th232-2017...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:14:40.550</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>108</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>255.484623</td>\n", | |
" <td>454340</td>\n", | |
" <td>1494267282507</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:19:41.715</td>\n", | |
" <td>[2.8045966133, 2.8045966133, 2.8045966133, 2.8...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[900, 900, 900, 900, 900, 900, 900, 900, 900, ...</td>\n", | |
" <td>Runix06</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937228</td>\n", | |
" <td>297.112950</td>\n", | |
" <td>-84.274757</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/108-Runix06-Calibration-Th232-2017...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:14:42.015</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>109</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>276.285652</td>\n", | |
" <td>596160</td>\n", | |
" <td>1494267685121</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:26:24.636</td>\n", | |
" <td>[3.0301348538, 3.0301348538, 3.0301348538, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937181</td>\n", | |
" <td>296.588060</td>\n", | |
" <td>-84.274713</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/109-Runix01-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:21:24.936</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>110</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>265.163688</td>\n", | |
" <td>561909</td>\n", | |
" <td>1494267686977</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:26:26.250</td>\n", | |
" <td>[2.7239522558, 2.7239522558, 2.7239522558, 2.7...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[851, 851, 851, 851, 851, 851, 851, 851, 851, ...</td>\n", | |
" <td>Runix02</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937241</td>\n", | |
" <td>296.790544</td>\n", | |
" <td>-84.274761</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/110-Runix02-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:21:26.450</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>111</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>260.243929</td>\n", | |
" <td>557922</td>\n", | |
" <td>1494267687166</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:26:26.680</td>\n", | |
" <td>[3.2896090963, 3.2896090963, 3.2896090963, 3.2...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix03</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937191</td>\n", | |
" <td>296.149687</td>\n", | |
" <td>-84.274722</td>\n", | |
" <td>2992</td>\n", | |
" <td>Calibration/111-Runix03-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.2</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:21:26.980</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>112</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>254.972548</td>\n", | |
" <td>538330</td>\n", | |
" <td>1494267687740</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:26:27.155</td>\n", | |
" <td>[3.0405295495, 3.0405295495, 3.0405295495, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix04</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937098</td>\n", | |
" <td>296.906253</td>\n", | |
" <td>-84.274750</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/112-Runix04-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:21:27.355</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>113</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>265.184662</td>\n", | |
" <td>478941</td>\n", | |
" <td>1494267689155</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:26:28.750</td>\n", | |
" <td>[2.5732899449, 2.5732899449, 2.5732899449, 2.5...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[850, 850, 850, 850, 850, 850, 850, 850, 850, ...</td>\n", | |
" <td>Runix05</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937175</td>\n", | |
" <td>297.438688</td>\n", | |
" <td>-84.274703</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/113-Runix05-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:21:28.950</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>114</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>261.376384</td>\n", | |
" <td>546308</td>\n", | |
" <td>1494267690918</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:26:30.115</td>\n", | |
" <td>[2.7755435077, 2.7755435077, 2.7755435077, 2.7...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[900, 900, 900, 900, 900, 900, 900, 900, 900, ...</td>\n", | |
" <td>Runix06</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937277</td>\n", | |
" <td>296.611208</td>\n", | |
" <td>-84.274745</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/114-Runix06-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:21:30.415</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>115</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>265.322892</td>\n", | |
" <td>568143</td>\n", | |
" <td>1494322359325</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:37:39.337</td>\n", | |
" <td>[3.0566190535, 3.0566190535, 3.0566190535, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937179</td>\n", | |
" <td>296.974872</td>\n", | |
" <td>-84.274736</td>\n", | |
" <td>3001</td>\n", | |
" <td>Calibration/115-Runix01-Calibration-Eu152-10.1...</td>\n", | |
" <td>300.1</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:32:39.237</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>116</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>266.797132</td>\n", | |
" <td>499806</td>\n", | |
" <td>1494322361012</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:37:24.202</td>\n", | |
" <td>[2.6689435667, 2.6689435667, 2.6689435667, 2.6...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[851, 851, 851, 851, 851, 851, 851, 851, 851, ...</td>\n", | |
" <td>Runix02</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937232</td>\n", | |
" <td>297.034733</td>\n", | |
" <td>-84.274707</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/116-Runix02-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:32:24.402</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>117</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>269.874283</td>\n", | |
" <td>683363</td>\n", | |
" <td>1494322361415</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:37:41.238</td>\n", | |
" <td>[3.1217596464, 3.1217596464, 3.1217596464, 3.1...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix03</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937203</td>\n", | |
" <td>296.038238</td>\n", | |
" <td>-84.274781</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/117-Runix03-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:32:41.438</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>118</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>277.699967</td>\n", | |
" <td>590587</td>\n", | |
" <td>1494322362470</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:37:42.060</td>\n", | |
" <td>[3.0217572994, 3.0217572994, 3.0217572994, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix04</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937096</td>\n", | |
" <td>296.309623</td>\n", | |
" <td>-84.274780</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/118-Runix04-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:32:42.360</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>119</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>272.840347</td>\n", | |
" <td>576261</td>\n", | |
" <td>1494322363453</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:37:43.166</td>\n", | |
" <td>[2.5157803438, 2.5157803438, 2.5157803438, 2.5...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[850, 850, 850, 850, 850, 850, 850, 850, 850, ...</td>\n", | |
" <td>Runix05</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937238</td>\n", | |
" <td>296.805652</td>\n", | |
" <td>-84.274770</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/119-Runix05-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:32:43.366</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>120</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>259.445230</td>\n", | |
" <td>580640</td>\n", | |
" <td>1494322365426</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:37:45.248</td>\n", | |
" <td>[2.7859962911, 2.7859962911, 2.7859962911, 2.7...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[900, 900, 900, 900, 900, 900, 900, 900, 900, ...</td>\n", | |
" <td>Runix06</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937068</td>\n", | |
" <td>296.335190</td>\n", | |
" <td>-84.275374</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/120-Runix06-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:32:45.448</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>121</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>263.834078</td>\n", | |
" <td>491722</td>\n", | |
" <td>1494322861415</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:46:01.137</td>\n", | |
" <td>[3.0566190535, 3.0566190535, 3.0566190535, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937180</td>\n", | |
" <td>297.154394</td>\n", | |
" <td>-84.274735</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/121-Runix01-Calibration-Th232-2017...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:41:01.337</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>122</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>264.790730</td>\n", | |
" <td>425245</td>\n", | |
" <td>1494322863093</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:45:44.702</td>\n", | |
" <td>[2.6689435667, 2.6689435667, 2.6689435667, 2.6...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[851, 851, 851, 851, 851, 851, 851, 851, 851, ...</td>\n", | |
" <td>Runix02</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937140</td>\n", | |
" <td>297.311844</td>\n", | |
" <td>-84.274667</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/122-Runix02-Calibration-Th232-2017...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:40:45.002</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>123</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>269.627709</td>\n", | |
" <td>549694</td>\n", | |
" <td>1494322863443</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:46:03.238</td>\n", | |
" <td>[3.1217596464, 3.1217596464, 3.1217596464, 3.1...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix03</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937227</td>\n", | |
" <td>296.584904</td>\n", | |
" <td>-84.274780</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/123-Runix03-Calibration-Th232-2017...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:41:03.538</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>124</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>287.315905</td>\n", | |
" <td>488213</td>\n", | |
" <td>1494322864462</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:46:04.060</td>\n", | |
" <td>[3.0217572994, 3.0217572994, 3.0217572994, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix04</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.900372</td>\n", | |
" <td>296.852626</td>\n", | |
" <td>-84.191199</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/124-Runix04-Calibration-Th232-2017...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:41:04.360</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>125</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>270.503836</td>\n", | |
" <td>479417</td>\n", | |
" <td>1494322865369</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:46:04.966</td>\n", | |
" <td>[2.5157803438, 2.5157803438, 2.5157803438, 2.5...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[850, 850, 850, 850, 850, 850, 850, 850, 850, ...</td>\n", | |
" <td>Runix05</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.900303</td>\n", | |
" <td>297.183839</td>\n", | |
" <td>-84.191096</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/125-Runix05-Calibration-Th232-2017...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:41:05.266</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>126</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>255.395697</td>\n", | |
" <td>489539</td>\n", | |
" <td>1494322867376</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:46:07.048</td>\n", | |
" <td>[2.7859962911, 2.7859962911, 2.7859962911, 2.7...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[900, 900, 900, 900, 900, 900, 900, 900, 900, ...</td>\n", | |
" <td>Runix06</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937063</td>\n", | |
" <td>296.632856</td>\n", | |
" <td>-84.275317</td>\n", | |
" <td>2997</td>\n", | |
" <td>Calibration/126-Runix06-Calibration-Th232-2017...</td>\n", | |
" <td>299.7</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:41:07.448</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>127</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>262.573816</td>\n", | |
" <td>592910</td>\n", | |
" <td>1494337649236</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 17:52:28.337</td>\n", | |
" <td>[3.1838403297, 3.1838403297, 3.1838403297, 3.1...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937240</td>\n", | |
" <td>296.791126</td>\n", | |
" <td>-84.274686</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/127-Runix01-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 17:47:28.537</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>128</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>240.673558</td>\n", | |
" <td>497387</td>\n", | |
" <td>1494337650834</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 17:51:28.502</td>\n", | |
" <td>[2.7648356997, 2.7648356997, 2.7648356997, 2.7...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[851, 851, 851, 851, 851, 851, 851, 851, 851, ...</td>\n", | |
" <td>Runix02</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937194</td>\n", | |
" <td>297.184361</td>\n", | |
" <td>-84.274644</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/128-Runix02-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 17:46:28.702</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>70</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>252.030113</td>\n", | |
" <td>562359</td>\n", | |
" <td>1494239486687</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:36:26.481</td>\n", | |
" <td>[2.99, 2.99, 2.99, 2.99, 2.99, 2.99, 2.99, 2.9...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix04</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937188</td>\n", | |
" <td>296.520415</td>\n", | |
" <td>-84.274845</td>\n", | |
" <td>3001</td>\n", | |
" <td>Calibration/070-Runix04-Calibration-Co60-10uC-...</td>\n", | |
" <td>300.1</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:31:26.481</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>71</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>247.461233</td>\n", | |
" <td>493738</td>\n", | |
" <td>1494239487659</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:36:27.464</td>\n", | |
" <td>[2.85, 2.85, 2.85, 2.85, 2.85, 2.85, 2.85, 2.8...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[850, 850, 850, 850, 850, 850, 850, 850, 850, ...</td>\n", | |
" <td>Runix05</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937227</td>\n", | |
" <td>296.934830</td>\n", | |
" <td>-84.274693</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/071-Runix05-Calibration-Co60-10uC-...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:31:27.664</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>72</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>284.751083</td>\n", | |
" <td>569723</td>\n", | |
" <td>1494239490063</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:36:29.909</td>\n", | |
" <td>[2.771808081, 2.771808081, 2.771808081, 2.7718...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[900, 900, 900, 900, 900, 900, 900, 900, 900, ...</td>\n", | |
" <td>Runix06</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937504</td>\n", | |
" <td>296.237356</td>\n", | |
" <td>-84.276005</td>\n", | |
" <td>3000</td>\n", | |
" <td>Calibration/072-Runix06-Calibration-Co60-10uC-...</td>\n", | |
" <td>300.0</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:31:30.009</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>73</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>244.602533</td>\n", | |
" <td>491705</td>\n", | |
" <td>1494240204801</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:48:24.382</td>\n", | |
" <td>[3.0138549243, 3.0138549243, 3.0138549243, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937277</td>\n", | |
" <td>297.117462</td>\n", | |
" <td>-84.274897</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/073-Runix01-Calibration-Cs137-12uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:43:24.582</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>74</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>250.628757</td>\n", | |
" <td>534428</td>\n", | |
" <td>1494240206706</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:48:26.348</td>\n", | |
" <td>[2.6854253379, 2.6854253379, 2.6854253379, 2.6...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[851, 851, 851, 851, 851, 851, 851, 851, 851, ...</td>\n", | |
" <td>Runix02</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937333</td>\n", | |
" <td>296.843045</td>\n", | |
" <td>-84.274880</td>\n", | |
" <td>3000</td>\n", | |
" <td>Calibration/074-Runix02-Calibration-Cs137-12uC...</td>\n", | |
" <td>300.0</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:43:26.448</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>75</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>253.690130</td>\n", | |
" <td>562933</td>\n", | |
" <td>1494240206930</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:48:26.890</td>\n", | |
" <td>[3.0702936159, 3.0702936159, 3.0702936159, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix03</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937337</td>\n", | |
" <td>296.599336</td>\n", | |
" <td>-84.274917</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/075-Runix03-Calibration-Cs137-12uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:43:27.090</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>76</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>249.384172</td>\n", | |
" <td>492367</td>\n", | |
" <td>1494240207238</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:48:26.981</td>\n", | |
" <td>[2.99, 2.99, 2.99, 2.99, 2.99, 2.99, 2.99, 2.9...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix04</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937212</td>\n", | |
" <td>296.988934</td>\n", | |
" <td>-84.274819</td>\n", | |
" <td>3000</td>\n", | |
" <td>Calibration/076-Runix04-Calibration-Cs137-12uC...</td>\n", | |
" <td>300.0</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:43:27.081</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>77</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>249.718494</td>\n", | |
" <td>441332</td>\n", | |
" <td>1494240208220</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:48:27.964</td>\n", | |
" <td>[2.85, 2.85, 2.85, 2.85, 2.85, 2.85, 2.85, 2.8...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[850, 850, 850, 850, 850, 850, 850, 850, 850, ...</td>\n", | |
" <td>Runix05</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937265</td>\n", | |
" <td>297.501250</td>\n", | |
" <td>-84.274821</td>\n", | |
" <td>3000</td>\n", | |
" <td>Calibration/077-Runix05-Calibration-Cs137-12uC...</td>\n", | |
" <td>300.0</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:43:28.064</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>78</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>286.320693</td>\n", | |
" <td>502233</td>\n", | |
" <td>1494240210754</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:48:30.609</td>\n", | |
" <td>[2.771808081, 2.771808081, 2.771808081, 2.7718...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[900, 900, 900, 900, 900, 900, 900, 900, 900, ...</td>\n", | |
" <td>Runix06</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.925260</td>\n", | |
" <td>296.863474</td>\n", | |
" <td>-84.248987</td>\n", | |
" <td>3000</td>\n", | |
" <td>Calibration/078-Runix06-Calibration-Cs137-12uC...</td>\n", | |
" <td>300.0</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:43:30.709</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>79</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>247.611463</td>\n", | |
" <td>526020</td>\n", | |
" <td>1494240709502</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:56:49.082</td>\n", | |
" <td>[3.0138549243, 3.0138549243, 3.0138549243, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937299</td>\n", | |
" <td>297.074687</td>\n", | |
" <td>-84.274924</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/079-Runix01-Calibration-Ba133-14uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:51:49.182</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>80</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>251.612596</td>\n", | |
" <td>576814</td>\n", | |
" <td>1494240711357</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:56:51.048</td>\n", | |
" <td>[2.6854253379, 2.6854253379, 2.6854253379, 2.6...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[851, 851, 851, 851, 851, 851, 851, 851, 851, ...</td>\n", | |
" <td>Runix02</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937259</td>\n", | |
" <td>296.576801</td>\n", | |
" <td>-84.274864</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/080-Runix02-Calibration-Ba133-14uC...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:51:51.148</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>81</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>248.889940</td>\n", | |
" <td>602939</td>\n", | |
" <td>1494240711680</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:56:51.490</td>\n", | |
" <td>[3.0702936159, 3.0702936159, 3.0702936159, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix03</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937353</td>\n", | |
" <td>295.855866</td>\n", | |
" <td>-84.274929</td>\n", | |
" <td>2992</td>\n", | |
" <td>Calibration/081-Runix03-Calibration-Ba133-14uC...</td>\n", | |
" <td>299.2</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:51:51.890</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>82</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>248.744229</td>\n", | |
" <td>520580</td>\n", | |
" <td>1494240712008</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:56:51.681</td>\n", | |
" <td>[2.99, 2.99, 2.99, 2.99, 2.99, 2.99, 2.99, 2.9...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix04</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937254</td>\n", | |
" <td>294.159818</td>\n", | |
" <td>-84.274833</td>\n", | |
" <td>2972</td>\n", | |
" <td>Calibration/082-Runix04-Calibration-Ba133-14uC...</td>\n", | |
" <td>297.2</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:51:51.881</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>83</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>255.493002</td>\n", | |
" <td>464282</td>\n", | |
" <td>1494240712921</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:56:52.664</td>\n", | |
" <td>[2.85, 2.85, 2.85, 2.85, 2.85, 2.85, 2.85, 2.8...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[850, 850, 850, 850, 850, 850, 850, 850, 850, ...</td>\n", | |
" <td>Runix05</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937314</td>\n", | |
" <td>297.356423</td>\n", | |
" <td>-84.274863</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/083-Runix05-Calibration-Ba133-14uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:51:52.764</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>84</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>310.931967</td>\n", | |
" <td>553627</td>\n", | |
" <td>1494240715285</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:56:55.109</td>\n", | |
" <td>[2.771808081, 2.771808081, 2.771808081, 2.7718...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[900, 900, 900, 900, 900, 900, 900, 900, 900, ...</td>\n", | |
" <td>Runix06</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937365</td>\n", | |
" <td>296.395528</td>\n", | |
" <td>-84.275737</td>\n", | |
" <td>2997</td>\n", | |
" <td>Calibration/084-Runix06-Calibration-Ba133-14uC...</td>\n", | |
" <td>299.7</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:51:55.309</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>85</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>259.257839</td>\n", | |
" <td>615487</td>\n", | |
" <td>1494266156279</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:00:55.836</td>\n", | |
" <td>[3.0305620073, 3.0305620073, 3.0305620073, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937206</td>\n", | |
" <td>296.616903</td>\n", | |
" <td>-84.274703</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/085-Runix01-Calibration-Ba133-14uC...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 21:55:56.136</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>86</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>262.682422</td>\n", | |
" <td>575365</td>\n", | |
" <td>1494266157825</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:00:57.150</td>\n", | |
" <td>[2.7046995073, 2.7046995073, 2.7046995073, 2.7...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[851, 851, 851, 851, 851, 851, 851, 851, 851, ...</td>\n", | |
" <td>Runix02</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.888878</td>\n", | |
" <td>296.699713</td>\n", | |
" <td>-84.162597</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/086-Runix02-Calibration-Ba133-14uC...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 21:55:57.450</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>87</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>254.333911</td>\n", | |
" <td>576466</td>\n", | |
" <td>1494266158133</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:00:57.780</td>\n", | |
" <td>[3.226074203, 3.226074203, 3.226074203, 3.2260...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix03</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937256</td>\n", | |
" <td>296.877433</td>\n", | |
" <td>-84.274723</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/087-Runix03-Calibration-Ba133-14uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 21:55:57.980</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>88</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>257.173249</td>\n", | |
" <td>550656</td>\n", | |
" <td>1494266158848</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:00:58.355</td>\n", | |
" <td>[3.0646040434, 3.0646040434, 3.0646040434, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix04</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937203</td>\n", | |
" <td>296.937612</td>\n", | |
" <td>-84.274747</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/088-Runix04-Calibration-Ba133-14uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 21:55:58.555</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>89</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>257.746115</td>\n", | |
" <td>493835</td>\n", | |
" <td>1494266159943</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:00:59.550</td>\n", | |
" <td>[2.5078026892, 2.5078026892, 2.5078026892, 2.5...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[850, 850, 850, 850, 850, 850, 850, 850, 850, ...</td>\n", | |
" <td>Runix05</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937229</td>\n", | |
" <td>297.417525</td>\n", | |
" <td>-84.274704</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/089-Runix05-Calibration-Ba133-14uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 21:55:59.750</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>90</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>262.853702</td>\n", | |
" <td>563965</td>\n", | |
" <td>1494266161866</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:01:01.115</td>\n", | |
" <td>[2.7590321056, 2.7590321056, 2.7590321056, 2.7...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[900, 900, 900, 900, 900, 900, 900, 900, 900, ...</td>\n", | |
" <td>Runix06</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937358</td>\n", | |
" <td>296.580011</td>\n", | |
" <td>-84.274763</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/090-Runix06-Calibration-Ba133-14uC...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 21:56:01.415</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>91</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>262.489193</td>\n", | |
" <td>564517</td>\n", | |
" <td>1494266553380</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:07:32.936</td>\n", | |
" <td>[3.0305620073, 3.0305620073, 3.0305620073, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937199</td>\n", | |
" <td>296.731823</td>\n", | |
" <td>-84.274749</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/091-Runix01-Calibration-Cs137-12uC...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:02:33.236</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>92</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>259.195432</td>\n", | |
" <td>539273</td>\n", | |
" <td>1494266554805</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:07:34.150</td>\n", | |
" <td>[2.7046995073, 2.7046995073, 2.7046995073, 2.7...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[851, 851, 851, 851, 851, 851, 851, 851, 851, ...</td>\n", | |
" <td>Runix02</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.925149</td>\n", | |
" <td>296.834706</td>\n", | |
" <td>-84.246740</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/092-Runix02-Calibration-Cs137-12uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:02:34.350</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>93</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>252.519140</td>\n", | |
" <td>529141</td>\n", | |
" <td>1494266555034</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:07:34.680</td>\n", | |
" <td>[3.2210675311, 3.2210675311, 3.2210675311, 3.2...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix03</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937214</td>\n", | |
" <td>296.986878</td>\n", | |
" <td>-84.274731</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/093-Runix03-Calibration-Cs137-12uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:02:34.880</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>94</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>254.146498</td>\n", | |
" <td>516804</td>\n", | |
" <td>1494266555599</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:07:35.055</td>\n", | |
" <td>[3.0705873832, 3.0705873832, 3.0705873832, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix04</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937082</td>\n", | |
" <td>296.959548</td>\n", | |
" <td>-84.274738</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/094-Runix04-Calibration-Cs137-12uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:02:35.255</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>95</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>260.529090</td>\n", | |
" <td>459398</td>\n", | |
" <td>1494266557044</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:07:36.650</td>\n", | |
" <td>[2.5078026892, 2.5078026892, 2.5078026892, 2.5...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[850, 850, 850, 850, 850, 850, 850, 850, 850, ...</td>\n", | |
" <td>Runix05</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.888716</td>\n", | |
" <td>297.485605</td>\n", | |
" <td>-84.162545</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/095-Runix05-Calibration-Cs137-12uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:02:36.850</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>96</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>249.746782</td>\n", | |
" <td>517100</td>\n", | |
" <td>1494266558796</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:07:38.115</td>\n", | |
" <td>[2.7590321056, 2.7590321056, 2.7590321056, 2.7...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[900, 900, 900, 900, 900, 900, 900, 900, 900, ...</td>\n", | |
" <td>Runix06</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937232</td>\n", | |
" <td>296.826067</td>\n", | |
" <td>-84.274770</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/096-Runix06-Calibration-Cs137-12uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:02:38.315</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>97</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>281.935512</td>\n", | |
" <td>642610</td>\n", | |
" <td>1494266921040</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:13:40.636</td>\n", | |
" <td>[3.0256675416, 3.0256675416, 3.0256675416, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937210</td>\n", | |
" <td>296.257130</td>\n", | |
" <td>-84.246674</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/097-Runix01-Calibration-Co60-10uC-...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:08:40.836</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>98</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>269.458606</td>\n", | |
" <td>606658</td>\n", | |
" <td>1494266922466</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:13:41.750</td>\n", | |
" <td>[2.7046995073, 2.7046995073, 2.7046995073, 2.7...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[851, 851, 851, 851, 851, 851, 851, 851, 851, ...</td>\n", | |
" <td>Runix02</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937265</td>\n", | |
" <td>296.275920</td>\n", | |
" <td>-84.274775</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/098-Runix02-Calibration-Co60-10uC-...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:08:42.050</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>99</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>255.971815</td>\n", | |
" <td>603460</td>\n", | |
" <td>1494266922705</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:13:42.180</td>\n", | |
" <td>[3.2162935397, 3.2162935397, 3.2162935397, 3.2...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[875, 875, 875, 875, 875, 875, 875, 875, 875, ...</td>\n", | |
" <td>Runix03</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937147</td>\n", | |
" <td>296.331214</td>\n", | |
" <td>-84.274729</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/099-Runix03-Calibration-Co60-10uC-...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:08:42.480</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>90 rows × 19 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" all_tags altitude counts \\\n", | |
"1 {u'group': u'Calibration', u'hostname': u'Runi... 258.461641 506765 \n", | |
"100 {u'group': u'Calibration', u'hostname': u'Runi... 249.697731 584984 \n", | |
"101 {u'group': u'Calibration', u'hostname': u'Runi... 261.233456 516400 \n", | |
"102 {u'group': u'Calibration', u'hostname': u'Runi... 251.866989 586233 \n", | |
"103 {u'group': u'Calibration', u'hostname': u'Runi... 283.872257 488712 \n", | |
"104 {u'group': u'Calibration', u'hostname': u'Runi... 268.888767 477409 \n", | |
"105 {u'group': u'Calibration', u'hostname': u'Runi... 259.019446 463188 \n", | |
"106 {u'group': u'Calibration', u'hostname': u'Runi... 254.749783 455133 \n", | |
"107 {u'group': u'Calibration', u'hostname': u'Runi... 261.982161 406750 \n", | |
"108 {u'group': u'Calibration', u'hostname': u'Runi... 255.484623 454340 \n", | |
"109 {u'group': u'Calibration', u'hostname': u'Runi... 276.285652 596160 \n", | |
"110 {u'group': u'Calibration', u'hostname': u'Runi... 265.163688 561909 \n", | |
"111 {u'group': u'Calibration', u'hostname': u'Runi... 260.243929 557922 \n", | |
"112 {u'group': u'Calibration', u'hostname': u'Runi... 254.972548 538330 \n", | |
"113 {u'group': u'Calibration', u'hostname': u'Runi... 265.184662 478941 \n", | |
"114 {u'group': u'Calibration', u'hostname': u'Runi... 261.376384 546308 \n", | |
"115 {u'group': u'Calibration', u'hostname': u'Runi... 265.322892 568143 \n", | |
"116 {u'group': u'Calibration', u'hostname': u'Runi... 266.797132 499806 \n", | |
"117 {u'group': u'Calibration', u'hostname': u'Runi... 269.874283 683363 \n", | |
"118 {u'group': u'Calibration', u'hostname': u'Runi... 277.699967 590587 \n", | |
"119 {u'group': u'Calibration', u'hostname': u'Runi... 272.840347 576261 \n", | |
"120 {u'group': u'Calibration', u'hostname': u'Runi... 259.445230 580640 \n", | |
"121 {u'group': u'Calibration', u'hostname': u'Runi... 263.834078 491722 \n", | |
"122 {u'group': u'Calibration', u'hostname': u'Runi... 264.790730 425245 \n", | |
"123 {u'group': u'Calibration', u'hostname': u'Runi... 269.627709 549694 \n", | |
"124 {u'group': u'Calibration', u'hostname': u'Runi... 287.315905 488213 \n", | |
"125 {u'group': u'Calibration', u'hostname': u'Runi... 270.503836 479417 \n", | |
"126 {u'group': u'Calibration', u'hostname': u'Runi... 255.395697 489539 \n", | |
"127 {u'group': u'Calibration', u'hostname': u'Runi... 262.573816 592910 \n", | |
"128 {u'group': u'Calibration', u'hostname': u'Runi... 240.673558 497387 \n", | |
".. ... ... ... \n", | |
"70 {u'group': u'Calibration', u'hostname': u'Runi... 252.030113 562359 \n", | |
"71 {u'group': u'Calibration', u'hostname': u'Runi... 247.461233 493738 \n", | |
"72 {u'group': u'Calibration', u'hostname': u'Runi... 284.751083 569723 \n", | |
"73 {u'group': u'Calibration', u'hostname': u'Runi... 244.602533 491705 \n", | |
"74 {u'group': u'Calibration', u'hostname': u'Runi... 250.628757 534428 \n", | |
"75 {u'group': u'Calibration', u'hostname': u'Runi... 253.690130 562933 \n", | |
"76 {u'group': u'Calibration', u'hostname': u'Runi... 249.384172 492367 \n", | |
"77 {u'group': u'Calibration', u'hostname': u'Runi... 249.718494 441332 \n", | |
"78 {u'group': u'Calibration', u'hostname': u'Runi... 286.320693 502233 \n", | |
"79 {u'group': u'Calibration', u'hostname': u'Runi... 247.611463 526020 \n", | |
"80 {u'group': u'Calibration', u'hostname': u'Runi... 251.612596 576814 \n", | |
"81 {u'group': u'Calibration', u'hostname': u'Runi... 248.889940 602939 \n", | |
"82 {u'group': u'Calibration', u'hostname': u'Runi... 248.744229 520580 \n", | |
"83 {u'group': u'Calibration', u'hostname': u'Runi... 255.493002 464282 \n", | |
"84 {u'group': u'Calibration', u'hostname': u'Runi... 310.931967 553627 \n", | |
"85 {u'group': u'Calibration', u'hostname': u'Runi... 259.257839 615487 \n", | |
"86 {u'group': u'Calibration', u'hostname': u'Runi... 262.682422 575365 \n", | |
"87 {u'group': u'Calibration', u'hostname': u'Runi... 254.333911 576466 \n", | |
"88 {u'group': u'Calibration', u'hostname': u'Runi... 257.173249 550656 \n", | |
"89 {u'group': u'Calibration', u'hostname': u'Runi... 257.746115 493835 \n", | |
"90 {u'group': u'Calibration', u'hostname': u'Runi... 262.853702 563965 \n", | |
"91 {u'group': u'Calibration', u'hostname': u'Runi... 262.489193 564517 \n", | |
"92 {u'group': u'Calibration', u'hostname': u'Runi... 259.195432 539273 \n", | |
"93 {u'group': u'Calibration', u'hostname': u'Runi... 252.519140 529141 \n", | |
"94 {u'group': u'Calibration', u'hostname': u'Runi... 254.146498 516804 \n", | |
"95 {u'group': u'Calibration', u'hostname': u'Runi... 260.529090 459398 \n", | |
"96 {u'group': u'Calibration', u'hostname': u'Runi... 249.746782 517100 \n", | |
"97 {u'group': u'Calibration', u'hostname': u'Runi... 281.935512 642610 \n", | |
"98 {u'group': u'Calibration', u'hostname': u'Runi... 269.458606 606658 \n", | |
"99 {u'group': u'Calibration', u'hostname': u'Runi... 255.971815 603460 \n", | |
"\n", | |
" datestamp detector end_time \\\n", | |
"1 1494238388679 NaN 2017-05-08 14:18:08.382 \n", | |
"100 1494266923269 NaN 2017-05-08 22:13:42.555 \n", | |
"101 1494266924264 NaN 2017-05-08 22:13:43.850 \n", | |
"102 1494266926057 NaN 2017-05-08 22:13:45.315 \n", | |
"103 1494267277591 NaN 2017-05-08 22:19:37.136 \n", | |
"104 1494267279026 NaN 2017-05-08 22:19:38.450 \n", | |
"105 1494267279225 NaN 2017-05-08 22:19:38.780 \n", | |
"106 1494267279770 NaN 2017-05-08 22:19:39.155 \n", | |
"107 1494267280765 NaN 2017-05-08 22:19:40.350 \n", | |
"108 1494267282507 NaN 2017-05-08 22:19:41.715 \n", | |
"109 1494267685121 NaN 2017-05-08 22:26:24.636 \n", | |
"110 1494267686977 NaN 2017-05-08 22:26:26.250 \n", | |
"111 1494267687166 NaN 2017-05-08 22:26:26.680 \n", | |
"112 1494267687740 NaN 2017-05-08 22:26:27.155 \n", | |
"113 1494267689155 NaN 2017-05-08 22:26:28.750 \n", | |
"114 1494267690918 NaN 2017-05-08 22:26:30.115 \n", | |
"115 1494322359325 NaN 2017-05-09 13:37:39.337 \n", | |
"116 1494322361012 NaN 2017-05-09 13:37:24.202 \n", | |
"117 1494322361415 NaN 2017-05-09 13:37:41.238 \n", | |
"118 1494322362470 NaN 2017-05-09 13:37:42.060 \n", | |
"119 1494322363453 NaN 2017-05-09 13:37:43.166 \n", | |
"120 1494322365426 NaN 2017-05-09 13:37:45.248 \n", | |
"121 1494322861415 NaN 2017-05-09 13:46:01.137 \n", | |
"122 1494322863093 NaN 2017-05-09 13:45:44.702 \n", | |
"123 1494322863443 NaN 2017-05-09 13:46:03.238 \n", | |
"124 1494322864462 NaN 2017-05-09 13:46:04.060 \n", | |
"125 1494322865369 NaN 2017-05-09 13:46:04.966 \n", | |
"126 1494322867376 NaN 2017-05-09 13:46:07.048 \n", | |
"127 1494337649236 NaN 2017-05-09 17:52:28.337 \n", | |
"128 1494337650834 NaN 2017-05-09 17:51:28.502 \n", | |
".. ... ... ... \n", | |
"70 1494239486687 NaN 2017-05-08 14:36:26.481 \n", | |
"71 1494239487659 NaN 2017-05-08 14:36:27.464 \n", | |
"72 1494239490063 NaN 2017-05-08 14:36:29.909 \n", | |
"73 1494240204801 NaN 2017-05-08 14:48:24.382 \n", | |
"74 1494240206706 NaN 2017-05-08 14:48:26.348 \n", | |
"75 1494240206930 NaN 2017-05-08 14:48:26.890 \n", | |
"76 1494240207238 NaN 2017-05-08 14:48:26.981 \n", | |
"77 1494240208220 NaN 2017-05-08 14:48:27.964 \n", | |
"78 1494240210754 NaN 2017-05-08 14:48:30.609 \n", | |
"79 1494240709502 NaN 2017-05-08 14:56:49.082 \n", | |
"80 1494240711357 NaN 2017-05-08 14:56:51.048 \n", | |
"81 1494240711680 NaN 2017-05-08 14:56:51.490 \n", | |
"82 1494240712008 NaN 2017-05-08 14:56:51.681 \n", | |
"83 1494240712921 NaN 2017-05-08 14:56:52.664 \n", | |
"84 1494240715285 NaN 2017-05-08 14:56:55.109 \n", | |
"85 1494266156279 NaN 2017-05-08 22:00:55.836 \n", | |
"86 1494266157825 NaN 2017-05-08 22:00:57.150 \n", | |
"87 1494266158133 NaN 2017-05-08 22:00:57.780 \n", | |
"88 1494266158848 NaN 2017-05-08 22:00:58.355 \n", | |
"89 1494266159943 NaN 2017-05-08 22:00:59.550 \n", | |
"90 1494266161866 NaN 2017-05-08 22:01:01.115 \n", | |
"91 1494266553380 NaN 2017-05-08 22:07:32.936 \n", | |
"92 1494266554805 NaN 2017-05-08 22:07:34.150 \n", | |
"93 1494266555034 NaN 2017-05-08 22:07:34.680 \n", | |
"94 1494266555599 NaN 2017-05-08 22:07:35.055 \n", | |
"95 1494266557044 NaN 2017-05-08 22:07:36.650 \n", | |
"96 1494266558796 NaN 2017-05-08 22:07:38.115 \n", | |
"97 1494266921040 NaN 2017-05-08 22:13:40.636 \n", | |
"98 1494266922466 NaN 2017-05-08 22:13:41.750 \n", | |
"99 1494266922705 NaN 2017-05-08 22:13:42.180 \n", | |
"\n", | |
" gain group \\\n", | |
"1 [3.0138549243, 3.0138549243, 3.0138549243, 3.0... Calibration \n", | |
"100 [3.0705873832, 3.0705873832, 3.0705873832, 3.0... Calibration \n", | |
"101 [2.5078026892, 2.5078026892, 2.5078026892, 2.5... Calibration \n", | |
"102 [2.7590321056, 2.7590321056, 2.7590321056, 2.7... Calibration \n", | |
"103 [3.0362493167, 3.0362493167, 3.0362493167, 3.0... Calibration \n", | |
"104 [2.6928524736, 2.6928524736, 2.6928524736, 2.6... Calibration \n", | |
"105 [3.2728579752, 3.2728579752, 3.2728579752, 3.2... Calibration \n", | |
"106 [3.0510487279, 3.0510487279, 3.0510487279, 3.0... Calibration \n", | |
"107 [2.5403353015, 2.5403353015, 2.5403353015, 2.5... Calibration \n", | |
"108 [2.8045966133, 2.8045966133, 2.8045966133, 2.8... Calibration \n", | |
"109 [3.0301348538, 3.0301348538, 3.0301348538, 3.0... Calibration \n", | |
"110 [2.7239522558, 2.7239522558, 2.7239522558, 2.7... Calibration \n", | |
"111 [3.2896090963, 3.2896090963, 3.2896090963, 3.2... Calibration \n", | |
"112 [3.0405295495, 3.0405295495, 3.0405295495, 3.0... Calibration \n", | |
"113 [2.5732899449, 2.5732899449, 2.5732899449, 2.5... Calibration \n", | |
"114 [2.7755435077, 2.7755435077, 2.7755435077, 2.7... Calibration \n", | |
"115 [3.0566190535, 3.0566190535, 3.0566190535, 3.0... Calibration \n", | |
"116 [2.6689435667, 2.6689435667, 2.6689435667, 2.6... Calibration \n", | |
"117 [3.1217596464, 3.1217596464, 3.1217596464, 3.1... Calibration \n", | |
"118 [3.0217572994, 3.0217572994, 3.0217572994, 3.0... Calibration \n", | |
"119 [2.5157803438, 2.5157803438, 2.5157803438, 2.5... Calibration \n", | |
"120 [2.7859962911, 2.7859962911, 2.7859962911, 2.7... Calibration \n", | |
"121 [3.0566190535, 3.0566190535, 3.0566190535, 3.0... Calibration \n", | |
"122 [2.6689435667, 2.6689435667, 2.6689435667, 2.6... Calibration \n", | |
"123 [3.1217596464, 3.1217596464, 3.1217596464, 3.1... Calibration \n", | |
"124 [3.0217572994, 3.0217572994, 3.0217572994, 3.0... Calibration \n", | |
"125 [2.5157803438, 2.5157803438, 2.5157803438, 2.5... Calibration \n", | |
"126 [2.7859962911, 2.7859962911, 2.7859962911, 2.7... Calibration \n", | |
"127 [3.1838403297, 3.1838403297, 3.1838403297, 3.1... Calibration \n", | |
"128 [2.7648356997, 2.7648356997, 2.7648356997, 2.7... Calibration \n", | |
".. ... ... \n", | |
"70 [2.99, 2.99, 2.99, 2.99, 2.99, 2.99, 2.99, 2.9... Calibration \n", | |
"71 [2.85, 2.85, 2.85, 2.85, 2.85, 2.85, 2.85, 2.8... Calibration \n", | |
"72 [2.771808081, 2.771808081, 2.771808081, 2.7718... Calibration \n", | |
"73 [3.0138549243, 3.0138549243, 3.0138549243, 3.0... Calibration \n", | |
"74 [2.6854253379, 2.6854253379, 2.6854253379, 2.6... Calibration \n", | |
"75 [3.0702936159, 3.0702936159, 3.0702936159, 3.0... Calibration \n", | |
"76 [2.99, 2.99, 2.99, 2.99, 2.99, 2.99, 2.99, 2.9... Calibration \n", | |
"77 [2.85, 2.85, 2.85, 2.85, 2.85, 2.85, 2.85, 2.8... Calibration \n", | |
"78 [2.771808081, 2.771808081, 2.771808081, 2.7718... Calibration \n", | |
"79 [3.0138549243, 3.0138549243, 3.0138549243, 3.0... Calibration \n", | |
"80 [2.6854253379, 2.6854253379, 2.6854253379, 2.6... Calibration \n", | |
"81 [3.0702936159, 3.0702936159, 3.0702936159, 3.0... Calibration \n", | |
"82 [2.99, 2.99, 2.99, 2.99, 2.99, 2.99, 2.99, 2.9... Calibration \n", | |
"83 [2.85, 2.85, 2.85, 2.85, 2.85, 2.85, 2.85, 2.8... Calibration \n", | |
"84 [2.771808081, 2.771808081, 2.771808081, 2.7718... Calibration \n", | |
"85 [3.0305620073, 3.0305620073, 3.0305620073, 3.0... Calibration \n", | |
"86 [2.7046995073, 2.7046995073, 2.7046995073, 2.7... Calibration \n", | |
"87 [3.226074203, 3.226074203, 3.226074203, 3.2260... Calibration \n", | |
"88 [3.0646040434, 3.0646040434, 3.0646040434, 3.0... Calibration \n", | |
"89 [2.5078026892, 2.5078026892, 2.5078026892, 2.5... Calibration \n", | |
"90 [2.7590321056, 2.7590321056, 2.7590321056, 2.7... Calibration \n", | |
"91 [3.0305620073, 3.0305620073, 3.0305620073, 3.0... Calibration \n", | |
"92 [2.7046995073, 2.7046995073, 2.7046995073, 2.7... Calibration \n", | |
"93 [3.2210675311, 3.2210675311, 3.2210675311, 3.2... Calibration \n", | |
"94 [3.0705873832, 3.0705873832, 3.0705873832, 3.0... Calibration \n", | |
"95 [2.5078026892, 2.5078026892, 2.5078026892, 2.5... Calibration \n", | |
"96 [2.7590321056, 2.7590321056, 2.7590321056, 2.7... Calibration \n", | |
"97 [3.0256675416, 3.0256675416, 3.0256675416, 3.0... Calibration \n", | |
"98 [2.7046995073, 2.7046995073, 2.7046995073, 2.7... Calibration \n", | |
"99 [3.2162935397, 3.2162935397, 3.2162935397, 3.2... Calibration \n", | |
"\n", | |
" high_voltage hostname \\\n", | |
"1 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"100 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix04 \n", | |
"101 [850, 850, 850, 850, 850, 850, 850, 850, 850, ... Runix05 \n", | |
"102 [900, 900, 900, 900, 900, 900, 900, 900, 900, ... Runix06 \n", | |
"103 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"104 [851, 851, 851, 851, 851, 851, 851, 851, 851, ... Runix02 \n", | |
"105 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix03 \n", | |
"106 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix04 \n", | |
"107 [850, 850, 850, 850, 850, 850, 850, 850, 850, ... Runix05 \n", | |
"108 [900, 900, 900, 900, 900, 900, 900, 900, 900, ... Runix06 \n", | |
"109 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"110 [851, 851, 851, 851, 851, 851, 851, 851, 851, ... Runix02 \n", | |
"111 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix03 \n", | |
"112 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix04 \n", | |
"113 [850, 850, 850, 850, 850, 850, 850, 850, 850, ... Runix05 \n", | |
"114 [900, 900, 900, 900, 900, 900, 900, 900, 900, ... Runix06 \n", | |
"115 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"116 [851, 851, 851, 851, 851, 851, 851, 851, 851, ... Runix02 \n", | |
"117 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix03 \n", | |
"118 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix04 \n", | |
"119 [850, 850, 850, 850, 850, 850, 850, 850, 850, ... Runix05 \n", | |
"120 [900, 900, 900, 900, 900, 900, 900, 900, 900, ... Runix06 \n", | |
"121 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"122 [851, 851, 851, 851, 851, 851, 851, 851, 851, ... Runix02 \n", | |
"123 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix03 \n", | |
"124 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix04 \n", | |
"125 [850, 850, 850, 850, 850, 850, 850, 850, 850, ... Runix05 \n", | |
"126 [900, 900, 900, 900, 900, 900, 900, 900, 900, ... Runix06 \n", | |
"127 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"128 [851, 851, 851, 851, 851, 851, 851, 851, 851, ... Runix02 \n", | |
".. ... ... \n", | |
"70 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix04 \n", | |
"71 [850, 850, 850, 850, 850, 850, 850, 850, 850, ... Runix05 \n", | |
"72 [900, 900, 900, 900, 900, 900, 900, 900, 900, ... Runix06 \n", | |
"73 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"74 [851, 851, 851, 851, 851, 851, 851, 851, 851, ... Runix02 \n", | |
"75 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix03 \n", | |
"76 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix04 \n", | |
"77 [850, 850, 850, 850, 850, 850, 850, 850, 850, ... Runix05 \n", | |
"78 [900, 900, 900, 900, 900, 900, 900, 900, 900, ... Runix06 \n", | |
"79 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"80 [851, 851, 851, 851, 851, 851, 851, 851, 851, ... Runix02 \n", | |
"81 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix03 \n", | |
"82 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix04 \n", | |
"83 [850, 850, 850, 850, 850, 850, 850, 850, 850, ... Runix05 \n", | |
"84 [900, 900, 900, 900, 900, 900, 900, 900, 900, ... Runix06 \n", | |
"85 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"86 [851, 851, 851, 851, 851, 851, 851, 851, 851, ... Runix02 \n", | |
"87 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix03 \n", | |
"88 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix04 \n", | |
"89 [850, 850, 850, 850, 850, 850, 850, 850, 850, ... Runix05 \n", | |
"90 [900, 900, 900, 900, 900, 900, 900, 900, 900, ... Runix06 \n", | |
"91 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"92 [851, 851, 851, 851, 851, 851, 851, 851, 851, ... Runix02 \n", | |
"93 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix03 \n", | |
"94 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix04 \n", | |
"95 [850, 850, 850, 850, 850, 850, 850, 850, 850, ... Runix05 \n", | |
"96 [900, 900, 900, 900, 900, 900, 900, 900, 900, ... Runix06 \n", | |
"97 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"98 [851, 851, 851, 851, 851, 851, 851, 851, 851, ... Runix02 \n", | |
"99 [875, 875, 875, 875, 875, 875, 875, 875, 875, ... Runix03 \n", | |
"\n", | |
" is_alive latitude live_time \\\n", | |
"1 [True, True, True, True, True, True, True, Tru... 35.937202 296.716449 \n", | |
"100 [True, True, True, True, True, True, True, Tru... 35.924602 296.285295 \n", | |
"101 [True, True, True, True, True, True, True, Tru... 35.937176 297.157845 \n", | |
"102 [True, True, True, True, True, True, True, Tru... 35.937208 296.268990 \n", | |
"103 [True, True, True, True, True, True, True, Tru... 35.937147 297.218338 \n", | |
"104 [True, True, True, True, True, True, True, Tru... 35.937295 297.304656 \n", | |
"105 [True, True, True, True, True, True, True, Tru... 35.937169 297.221703 \n", | |
"106 [True, True, True, True, True, True, True, Tru... 35.937147 297.242245 \n", | |
"107 [True, True, True, True, True, True, True, Tru... 35.937208 297.733472 \n", | |
"108 [True, True, True, True, True, True, True, Tru... 35.937228 297.112950 \n", | |
"109 [True, True, True, True, True, True, True, Tru... 35.937181 296.588060 \n", | |
"110 [True, True, True, True, True, True, True, Tru... 35.937241 296.790544 \n", | |
"111 [True, True, True, True, True, True, True, Tru... 35.937191 296.149687 \n", | |
"112 [True, True, True, True, True, True, True, Tru... 35.937098 296.906253 \n", | |
"113 [True, True, True, True, True, True, True, Tru... 35.937175 297.438688 \n", | |
"114 [True, True, True, True, True, True, True, Tru... 35.937277 296.611208 \n", | |
"115 [True, True, True, True, True, True, True, Tru... 35.937179 296.974872 \n", | |
"116 [True, True, True, True, True, True, True, Tru... 35.937232 297.034733 \n", | |
"117 [True, True, True, True, True, True, True, Tru... 35.937203 296.038238 \n", | |
"118 [True, True, True, True, True, True, True, Tru... 35.937096 296.309623 \n", | |
"119 [True, True, True, True, True, True, True, Tru... 35.937238 296.805652 \n", | |
"120 [True, True, True, True, True, True, True, Tru... 35.937068 296.335190 \n", | |
"121 [True, True, True, True, True, True, True, Tru... 35.937180 297.154394 \n", | |
"122 [True, True, True, True, True, True, True, Tru... 35.937140 297.311844 \n", | |
"123 [True, True, True, True, True, True, True, Tru... 35.937227 296.584904 \n", | |
"124 [True, True, True, True, True, True, True, Tru... 35.900372 296.852626 \n", | |
"125 [True, True, True, True, True, True, True, Tru... 35.900303 297.183839 \n", | |
"126 [True, True, True, True, True, True, True, Tru... 35.937063 296.632856 \n", | |
"127 [True, True, True, True, True, True, True, Tru... 35.937240 296.791126 \n", | |
"128 [True, True, True, True, True, True, True, Tru... 35.937194 297.184361 \n", | |
".. ... ... ... \n", | |
"70 [True, True, True, True, True, True, True, Tru... 35.937188 296.520415 \n", | |
"71 [True, True, True, True, True, True, True, Tru... 35.937227 296.934830 \n", | |
"72 [True, True, True, True, True, True, True, Tru... 35.937504 296.237356 \n", | |
"73 [True, True, True, True, True, True, True, Tru... 35.937277 297.117462 \n", | |
"74 [True, True, True, True, True, True, True, Tru... 35.937333 296.843045 \n", | |
"75 [True, True, True, True, True, True, True, Tru... 35.937337 296.599336 \n", | |
"76 [True, True, True, True, True, True, True, Tru... 35.937212 296.988934 \n", | |
"77 [True, True, True, True, True, True, True, Tru... 35.937265 297.501250 \n", | |
"78 [True, True, True, True, True, True, True, Tru... 35.925260 296.863474 \n", | |
"79 [True, True, True, True, True, True, True, Tru... 35.937299 297.074687 \n", | |
"80 [True, True, True, True, True, True, True, Tru... 35.937259 296.576801 \n", | |
"81 [True, True, True, True, True, True, True, Tru... 35.937353 295.855866 \n", | |
"82 [True, True, True, True, True, True, True, Tru... 35.937254 294.159818 \n", | |
"83 [True, True, True, True, True, True, True, Tru... 35.937314 297.356423 \n", | |
"84 [True, True, True, True, True, True, True, Tru... 35.937365 296.395528 \n", | |
"85 [True, True, True, True, True, True, True, Tru... 35.937206 296.616903 \n", | |
"86 [True, True, True, True, True, True, True, Tru... 35.888878 296.699713 \n", | |
"87 [True, True, True, True, True, True, True, Tru... 35.937256 296.877433 \n", | |
"88 [True, True, True, True, True, True, True, Tru... 35.937203 296.937612 \n", | |
"89 [True, True, True, True, True, True, True, Tru... 35.937229 297.417525 \n", | |
"90 [True, True, True, True, True, True, True, Tru... 35.937358 296.580011 \n", | |
"91 [True, True, True, True, True, True, True, Tru... 35.937199 296.731823 \n", | |
"92 [True, True, True, True, True, True, True, Tru... 35.925149 296.834706 \n", | |
"93 [True, True, True, True, True, True, True, Tru... 35.937214 296.986878 \n", | |
"94 [True, True, True, True, True, True, True, Tru... 35.937082 296.959548 \n", | |
"95 [True, True, True, True, True, True, True, Tru... 35.888716 297.485605 \n", | |
"96 [True, True, True, True, True, True, True, Tru... 35.937232 296.826067 \n", | |
"97 [True, True, True, True, True, True, True, Tru... 35.937210 296.257130 \n", | |
"98 [True, True, True, True, True, True, True, Tru... 35.937265 296.275920 \n", | |
"99 [True, True, True, True, True, True, True, Tru... 35.937147 296.331214 \n", | |
"\n", | |
" longitude n_meas original_fname \\\n", | |
"1 -84.274756 2995 Calibration/001-Runix01-Calibration-Eu152-10.1... \n", | |
"100 -84.247728 2997 Calibration/100-Runix04-Calibration-Co60-10uC-... \n", | |
"101 -84.274726 2999 Calibration/101-Runix05-Calibration-Co60-10uC-... \n", | |
"102 -84.274753 2999 Calibration/102-Runix06-Calibration-Co60-10uC-... \n", | |
"103 -84.274740 2999 Calibration/103-Runix01-Calibration-Th232-2017... \n", | |
"104 -84.274797 3000 Calibration/104-Runix02-Calibration-Th232-2017... \n", | |
"105 -84.274730 2998 Calibration/105-Runix03-Calibration-Th232-2017... \n", | |
"106 -84.274774 2998 Calibration/106-Runix04-Calibration-Th232-2017... \n", | |
"107 -84.274711 2999 Calibration/107-Runix05-Calibration-Th232-2017... \n", | |
"108 -84.274757 2998 Calibration/108-Runix06-Calibration-Th232-2017... \n", | |
"109 -84.274713 2998 Calibration/109-Runix01-Calibration-Eu152-10.1... \n", | |
"110 -84.274761 2999 Calibration/110-Runix02-Calibration-Eu152-10.1... \n", | |
"111 -84.274722 2992 Calibration/111-Runix03-Calibration-Eu152-10.1... \n", | |
"112 -84.274750 2999 Calibration/112-Runix04-Calibration-Eu152-10.1... \n", | |
"113 -84.274703 2999 Calibration/113-Runix05-Calibration-Eu152-10.1... \n", | |
"114 -84.274745 2998 Calibration/114-Runix06-Calibration-Eu152-10.1... \n", | |
"115 -84.274736 3001 Calibration/115-Runix01-Calibration-Eu152-10.1... \n", | |
"116 -84.274707 2999 Calibration/116-Runix02-Calibration-Eu152-10.1... \n", | |
"117 -84.274781 2999 Calibration/117-Runix03-Calibration-Eu152-10.1... \n", | |
"118 -84.274780 2998 Calibration/118-Runix04-Calibration-Eu152-10.1... \n", | |
"119 -84.274770 2999 Calibration/119-Runix05-Calibration-Eu152-10.1... \n", | |
"120 -84.275374 2999 Calibration/120-Runix06-Calibration-Eu152-10.1... \n", | |
"121 -84.274735 2999 Calibration/121-Runix01-Calibration-Th232-2017... \n", | |
"122 -84.274667 2998 Calibration/122-Runix02-Calibration-Th232-2017... \n", | |
"123 -84.274780 2998 Calibration/123-Runix03-Calibration-Th232-2017... \n", | |
"124 -84.191199 2998 Calibration/124-Runix04-Calibration-Th232-2017... \n", | |
"125 -84.191096 2998 Calibration/125-Runix05-Calibration-Th232-2017... \n", | |
"126 -84.275317 2997 Calibration/126-Runix06-Calibration-Th232-2017... \n", | |
"127 -84.274686 2999 Calibration/127-Runix01-Calibration-Eu152-10.1... \n", | |
"128 -84.274644 2999 Calibration/128-Runix02-Calibration-Eu152-10.1... \n", | |
".. ... ... ... \n", | |
"70 -84.274845 3001 Calibration/070-Runix04-Calibration-Co60-10uC-... \n", | |
"71 -84.274693 2998 Calibration/071-Runix05-Calibration-Co60-10uC-... \n", | |
"72 -84.276005 3000 Calibration/072-Runix06-Calibration-Co60-10uC-... \n", | |
"73 -84.274897 2999 Calibration/073-Runix01-Calibration-Cs137-12uC... \n", | |
"74 -84.274880 3000 Calibration/074-Runix02-Calibration-Cs137-12uC... \n", | |
"75 -84.274917 2999 Calibration/075-Runix03-Calibration-Cs137-12uC... \n", | |
"76 -84.274819 3000 Calibration/076-Runix04-Calibration-Cs137-12uC... \n", | |
"77 -84.274821 3000 Calibration/077-Runix05-Calibration-Cs137-12uC... \n", | |
"78 -84.248987 3000 Calibration/078-Runix06-Calibration-Cs137-12uC... \n", | |
"79 -84.274924 2999 Calibration/079-Runix01-Calibration-Ba133-14uC... \n", | |
"80 -84.274864 2998 Calibration/080-Runix02-Calibration-Ba133-14uC... \n", | |
"81 -84.274929 2992 Calibration/081-Runix03-Calibration-Ba133-14uC... \n", | |
"82 -84.274833 2972 Calibration/082-Runix04-Calibration-Ba133-14uC... \n", | |
"83 -84.274863 2999 Calibration/083-Runix05-Calibration-Ba133-14uC... \n", | |
"84 -84.275737 2997 Calibration/084-Runix06-Calibration-Ba133-14uC... \n", | |
"85 -84.274703 2998 Calibration/085-Runix01-Calibration-Ba133-14uC... \n", | |
"86 -84.162597 2998 Calibration/086-Runix02-Calibration-Ba133-14uC... \n", | |
"87 -84.274723 2999 Calibration/087-Runix03-Calibration-Ba133-14uC... \n", | |
"88 -84.274747 2999 Calibration/088-Runix04-Calibration-Ba133-14uC... \n", | |
"89 -84.274704 2999 Calibration/089-Runix05-Calibration-Ba133-14uC... \n", | |
"90 -84.274763 2998 Calibration/090-Runix06-Calibration-Ba133-14uC... \n", | |
"91 -84.274749 2998 Calibration/091-Runix01-Calibration-Cs137-12uC... \n", | |
"92 -84.246740 2999 Calibration/092-Runix02-Calibration-Cs137-12uC... \n", | |
"93 -84.274731 2999 Calibration/093-Runix03-Calibration-Cs137-12uC... \n", | |
"94 -84.274738 2999 Calibration/094-Runix04-Calibration-Cs137-12uC... \n", | |
"95 -84.162545 2999 Calibration/095-Runix05-Calibration-Cs137-12uC... \n", | |
"96 -84.274770 2999 Calibration/096-Runix06-Calibration-Cs137-12uC... \n", | |
"97 -84.246674 2999 Calibration/097-Runix01-Calibration-Co60-10uC-... \n", | |
"98 -84.274775 2998 Calibration/098-Runix02-Calibration-Co60-10uC-... \n", | |
"99 -84.274729 2998 Calibration/099-Runix03-Calibration-Co60-10uC-... \n", | |
"\n", | |
" real_time spectrum \\\n", | |
"1 299.5 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"100 299.7 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"101 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"102 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"103 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"104 300.0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"105 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"106 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"107 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"108 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"109 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"110 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"111 299.2 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"112 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"113 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"114 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"115 300.1 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"116 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"117 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"118 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"119 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"120 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"121 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"122 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"123 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"124 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"125 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"126 299.7 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"127 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"128 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
".. ... ... \n", | |
"70 300.1 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"71 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"72 300.0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"73 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"74 300.0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"75 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"76 300.0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"77 300.0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"78 300.0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"79 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"80 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"81 299.2 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"82 297.2 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"83 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"84 299.7 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"85 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"86 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"87 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"88 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"89 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"90 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"91 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"92 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"93 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"94 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"95 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"96 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"97 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"98 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"99 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"\n", | |
" start_time \n", | |
"1 2017-05-08 14:13:08.682 \n", | |
"100 2017-05-08 22:08:42.955 \n", | |
"101 2017-05-08 22:08:44.050 \n", | |
"102 2017-05-08 22:08:45.515 \n", | |
"103 2017-05-08 22:14:37.336 \n", | |
"104 2017-05-08 22:14:38.550 \n", | |
"105 2017-05-08 22:14:39.080 \n", | |
"106 2017-05-08 22:14:39.455 \n", | |
"107 2017-05-08 22:14:40.550 \n", | |
"108 2017-05-08 22:14:42.015 \n", | |
"109 2017-05-08 22:21:24.936 \n", | |
"110 2017-05-08 22:21:26.450 \n", | |
"111 2017-05-08 22:21:26.980 \n", | |
"112 2017-05-08 22:21:27.355 \n", | |
"113 2017-05-08 22:21:28.950 \n", | |
"114 2017-05-08 22:21:30.415 \n", | |
"115 2017-05-09 13:32:39.237 \n", | |
"116 2017-05-09 13:32:24.402 \n", | |
"117 2017-05-09 13:32:41.438 \n", | |
"118 2017-05-09 13:32:42.360 \n", | |
"119 2017-05-09 13:32:43.366 \n", | |
"120 2017-05-09 13:32:45.448 \n", | |
"121 2017-05-09 13:41:01.337 \n", | |
"122 2017-05-09 13:40:45.002 \n", | |
"123 2017-05-09 13:41:03.538 \n", | |
"124 2017-05-09 13:41:04.360 \n", | |
"125 2017-05-09 13:41:05.266 \n", | |
"126 2017-05-09 13:41:07.448 \n", | |
"127 2017-05-09 17:47:28.537 \n", | |
"128 2017-05-09 17:46:28.702 \n", | |
".. ... \n", | |
"70 2017-05-08 14:31:26.481 \n", | |
"71 2017-05-08 14:31:27.664 \n", | |
"72 2017-05-08 14:31:30.009 \n", | |
"73 2017-05-08 14:43:24.582 \n", | |
"74 2017-05-08 14:43:26.448 \n", | |
"75 2017-05-08 14:43:27.090 \n", | |
"76 2017-05-08 14:43:27.081 \n", | |
"77 2017-05-08 14:43:28.064 \n", | |
"78 2017-05-08 14:43:30.709 \n", | |
"79 2017-05-08 14:51:49.182 \n", | |
"80 2017-05-08 14:51:51.148 \n", | |
"81 2017-05-08 14:51:51.890 \n", | |
"82 2017-05-08 14:51:51.881 \n", | |
"83 2017-05-08 14:51:52.764 \n", | |
"84 2017-05-08 14:51:55.309 \n", | |
"85 2017-05-08 21:55:56.136 \n", | |
"86 2017-05-08 21:55:57.450 \n", | |
"87 2017-05-08 21:55:57.980 \n", | |
"88 2017-05-08 21:55:58.555 \n", | |
"89 2017-05-08 21:55:59.750 \n", | |
"90 2017-05-08 21:56:01.415 \n", | |
"91 2017-05-08 22:02:33.236 \n", | |
"92 2017-05-08 22:02:34.350 \n", | |
"93 2017-05-08 22:02:34.880 \n", | |
"94 2017-05-08 22:02:35.255 \n", | |
"95 2017-05-08 22:02:36.850 \n", | |
"96 2017-05-08 22:02:38.315 \n", | |
"97 2017-05-08 22:08:40.836 \n", | |
"98 2017-05-08 22:08:42.050 \n", | |
"99 2017-05-08 22:08:42.480 \n", | |
"\n", | |
"[90 rows x 19 columns]" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"caldata" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The info on the calibration source is not broken out originally in the way I dumped the data and is stuck in the `all_tags` column. You can add it like this:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"caldata = caldata.assign(source=caldata[\"all_tags\"].apply(lambda x: x[\"source\"]))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You can group by hostname to sort the calibration measurements for each detector:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"by_hostname = caldata.groupby(\"hostname\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style>\n", | |
" .dataframe thead tr:only-child th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: left;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>all_tags</th>\n", | |
" <th>altitude</th>\n", | |
" <th>counts</th>\n", | |
" <th>datestamp</th>\n", | |
" <th>detector</th>\n", | |
" <th>end_time</th>\n", | |
" <th>gain</th>\n", | |
" <th>group</th>\n", | |
" <th>high_voltage</th>\n", | |
" <th>hostname</th>\n", | |
" <th>is_alive</th>\n", | |
" <th>latitude</th>\n", | |
" <th>live_time</th>\n", | |
" <th>longitude</th>\n", | |
" <th>n_meas</th>\n", | |
" <th>original_fname</th>\n", | |
" <th>real_time</th>\n", | |
" <th>spectrum</th>\n", | |
" <th>start_time</th>\n", | |
" <th>source</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>258.461641</td>\n", | |
" <td>506765</td>\n", | |
" <td>1494238388679</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:18:08.382</td>\n", | |
" <td>[3.0138549243, 3.0138549243, 3.0138549243, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937202</td>\n", | |
" <td>296.716449</td>\n", | |
" <td>-84.274756</td>\n", | |
" <td>2995</td>\n", | |
" <td>Calibration/001-Runix01-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.5</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:13:08.682</td>\n", | |
" <td>Eu152</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>103</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>283.872257</td>\n", | |
" <td>488712</td>\n", | |
" <td>1494267277591</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:19:37.136</td>\n", | |
" <td>[3.0362493167, 3.0362493167, 3.0362493167, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937147</td>\n", | |
" <td>297.218338</td>\n", | |
" <td>-84.274740</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/103-Runix01-Calibration-Th232-2017...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:14:37.336</td>\n", | |
" <td>Th232</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>109</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>276.285652</td>\n", | |
" <td>596160</td>\n", | |
" <td>1494267685121</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:26:24.636</td>\n", | |
" <td>[3.0301348538, 3.0301348538, 3.0301348538, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937181</td>\n", | |
" <td>296.588060</td>\n", | |
" <td>-84.274713</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/109-Runix01-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:21:24.936</td>\n", | |
" <td>Eu152</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>115</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>265.322892</td>\n", | |
" <td>568143</td>\n", | |
" <td>1494322359325</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:37:39.337</td>\n", | |
" <td>[3.0566190535, 3.0566190535, 3.0566190535, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937179</td>\n", | |
" <td>296.974872</td>\n", | |
" <td>-84.274736</td>\n", | |
" <td>3001</td>\n", | |
" <td>Calibration/115-Runix01-Calibration-Eu152-10.1...</td>\n", | |
" <td>300.1</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:32:39.237</td>\n", | |
" <td>Eu152</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>121</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>263.834078</td>\n", | |
" <td>491722</td>\n", | |
" <td>1494322861415</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:46:01.137</td>\n", | |
" <td>[3.0566190535, 3.0566190535, 3.0566190535, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937180</td>\n", | |
" <td>297.154394</td>\n", | |
" <td>-84.274735</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/121-Runix01-Calibration-Th232-2017...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:41:01.337</td>\n", | |
" <td>Th232</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>127</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>262.573816</td>\n", | |
" <td>592910</td>\n", | |
" <td>1494337649236</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 17:52:28.337</td>\n", | |
" <td>[3.1838403297, 3.1838403297, 3.1838403297, 3.1...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937240</td>\n", | |
" <td>296.791126</td>\n", | |
" <td>-84.274686</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/127-Runix01-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 17:47:28.537</td>\n", | |
" <td>Eu152</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>133</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>262.120340</td>\n", | |
" <td>636739</td>\n", | |
" <td>1494337288516</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 17:46:27.637</td>\n", | |
" <td>[3.1255244284, 3.1255244284, 3.1255244284, 3.1...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937219</td>\n", | |
" <td>296.245643</td>\n", | |
" <td>-84.274706</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/133-Runix01-Calibration-Co60-10uC-...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 17:41:27.937</td>\n", | |
" <td>Co60</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>139</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>260.468289</td>\n", | |
" <td>491089</td>\n", | |
" <td>1494338068687</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 17:59:27.737</td>\n", | |
" <td>[3.2432442866, 3.2432442866, 3.2432442866, 3.2...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937247</td>\n", | |
" <td>297.256420</td>\n", | |
" <td>-84.274713</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/139-Runix01-Calibration-Th232-2017...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 17:54:27.937</td>\n", | |
" <td>Th232</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>61</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>256.950367</td>\n", | |
" <td>433459</td>\n", | |
" <td>1494238750149</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:24:09.882</td>\n", | |
" <td>[3.0138549243, 3.0138549243, 3.0138549243, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937194</td>\n", | |
" <td>296.967746</td>\n", | |
" <td>-84.274754</td>\n", | |
" <td>2994</td>\n", | |
" <td>Calibration/061-Runix01-Calibration-Th232-2017...</td>\n", | |
" <td>299.4</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:19:10.082</td>\n", | |
" <td>Th232</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>67</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>245.789703</td>\n", | |
" <td>545597</td>\n", | |
" <td>1494239484100</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:36:23.782</td>\n", | |
" <td>[3.0138549243, 3.0138549243, 3.0138549243, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937224</td>\n", | |
" <td>296.844491</td>\n", | |
" <td>-84.274835</td>\n", | |
" <td>3000</td>\n", | |
" <td>Calibration/067-Runix01-Calibration-Co60-10uC-...</td>\n", | |
" <td>300.0</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:31:23.882</td>\n", | |
" <td>Co60</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>73</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>244.602533</td>\n", | |
" <td>491705</td>\n", | |
" <td>1494240204801</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:48:24.382</td>\n", | |
" <td>[3.0138549243, 3.0138549243, 3.0138549243, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937277</td>\n", | |
" <td>297.117462</td>\n", | |
" <td>-84.274897</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/073-Runix01-Calibration-Cs137-12uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:43:24.582</td>\n", | |
" <td>Cs137</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>79</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>247.611463</td>\n", | |
" <td>526020</td>\n", | |
" <td>1494240709502</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:56:49.082</td>\n", | |
" <td>[3.0138549243, 3.0138549243, 3.0138549243, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937299</td>\n", | |
" <td>297.074687</td>\n", | |
" <td>-84.274924</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/079-Runix01-Calibration-Ba133-14uC...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:51:49.182</td>\n", | |
" <td>Ba133</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>85</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>259.257839</td>\n", | |
" <td>615487</td>\n", | |
" <td>1494266156279</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:00:55.836</td>\n", | |
" <td>[3.0305620073, 3.0305620073, 3.0305620073, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937206</td>\n", | |
" <td>296.616903</td>\n", | |
" <td>-84.274703</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/085-Runix01-Calibration-Ba133-14uC...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 21:55:56.136</td>\n", | |
" <td>Ba133</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>91</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>262.489193</td>\n", | |
" <td>564517</td>\n", | |
" <td>1494266553380</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:07:32.936</td>\n", | |
" <td>[3.0305620073, 3.0305620073, 3.0305620073, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937199</td>\n", | |
" <td>296.731823</td>\n", | |
" <td>-84.274749</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/091-Runix01-Calibration-Cs137-12uC...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:02:33.236</td>\n", | |
" <td>Cs137</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>97</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>281.935512</td>\n", | |
" <td>642610</td>\n", | |
" <td>1494266921040</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:13:40.636</td>\n", | |
" <td>[3.0256675416, 3.0256675416, 3.0256675416, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937210</td>\n", | |
" <td>296.257130</td>\n", | |
" <td>-84.246674</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/097-Runix01-Calibration-Co60-10uC-...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:08:40.836</td>\n", | |
" <td>Co60</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" all_tags altitude counts \\\n", | |
"1 {u'group': u'Calibration', u'hostname': u'Runi... 258.461641 506765 \n", | |
"103 {u'group': u'Calibration', u'hostname': u'Runi... 283.872257 488712 \n", | |
"109 {u'group': u'Calibration', u'hostname': u'Runi... 276.285652 596160 \n", | |
"115 {u'group': u'Calibration', u'hostname': u'Runi... 265.322892 568143 \n", | |
"121 {u'group': u'Calibration', u'hostname': u'Runi... 263.834078 491722 \n", | |
"127 {u'group': u'Calibration', u'hostname': u'Runi... 262.573816 592910 \n", | |
"133 {u'group': u'Calibration', u'hostname': u'Runi... 262.120340 636739 \n", | |
"139 {u'group': u'Calibration', u'hostname': u'Runi... 260.468289 491089 \n", | |
"61 {u'group': u'Calibration', u'hostname': u'Runi... 256.950367 433459 \n", | |
"67 {u'group': u'Calibration', u'hostname': u'Runi... 245.789703 545597 \n", | |
"73 {u'group': u'Calibration', u'hostname': u'Runi... 244.602533 491705 \n", | |
"79 {u'group': u'Calibration', u'hostname': u'Runi... 247.611463 526020 \n", | |
"85 {u'group': u'Calibration', u'hostname': u'Runi... 259.257839 615487 \n", | |
"91 {u'group': u'Calibration', u'hostname': u'Runi... 262.489193 564517 \n", | |
"97 {u'group': u'Calibration', u'hostname': u'Runi... 281.935512 642610 \n", | |
"\n", | |
" datestamp detector end_time \\\n", | |
"1 1494238388679 NaN 2017-05-08 14:18:08.382 \n", | |
"103 1494267277591 NaN 2017-05-08 22:19:37.136 \n", | |
"109 1494267685121 NaN 2017-05-08 22:26:24.636 \n", | |
"115 1494322359325 NaN 2017-05-09 13:37:39.337 \n", | |
"121 1494322861415 NaN 2017-05-09 13:46:01.137 \n", | |
"127 1494337649236 NaN 2017-05-09 17:52:28.337 \n", | |
"133 1494337288516 NaN 2017-05-09 17:46:27.637 \n", | |
"139 1494338068687 NaN 2017-05-09 17:59:27.737 \n", | |
"61 1494238750149 NaN 2017-05-08 14:24:09.882 \n", | |
"67 1494239484100 NaN 2017-05-08 14:36:23.782 \n", | |
"73 1494240204801 NaN 2017-05-08 14:48:24.382 \n", | |
"79 1494240709502 NaN 2017-05-08 14:56:49.082 \n", | |
"85 1494266156279 NaN 2017-05-08 22:00:55.836 \n", | |
"91 1494266553380 NaN 2017-05-08 22:07:32.936 \n", | |
"97 1494266921040 NaN 2017-05-08 22:13:40.636 \n", | |
"\n", | |
" gain group \\\n", | |
"1 [3.0138549243, 3.0138549243, 3.0138549243, 3.0... Calibration \n", | |
"103 [3.0362493167, 3.0362493167, 3.0362493167, 3.0... Calibration \n", | |
"109 [3.0301348538, 3.0301348538, 3.0301348538, 3.0... Calibration \n", | |
"115 [3.0566190535, 3.0566190535, 3.0566190535, 3.0... Calibration \n", | |
"121 [3.0566190535, 3.0566190535, 3.0566190535, 3.0... Calibration \n", | |
"127 [3.1838403297, 3.1838403297, 3.1838403297, 3.1... Calibration \n", | |
"133 [3.1255244284, 3.1255244284, 3.1255244284, 3.1... Calibration \n", | |
"139 [3.2432442866, 3.2432442866, 3.2432442866, 3.2... Calibration \n", | |
"61 [3.0138549243, 3.0138549243, 3.0138549243, 3.0... Calibration \n", | |
"67 [3.0138549243, 3.0138549243, 3.0138549243, 3.0... Calibration \n", | |
"73 [3.0138549243, 3.0138549243, 3.0138549243, 3.0... Calibration \n", | |
"79 [3.0138549243, 3.0138549243, 3.0138549243, 3.0... Calibration \n", | |
"85 [3.0305620073, 3.0305620073, 3.0305620073, 3.0... Calibration \n", | |
"91 [3.0305620073, 3.0305620073, 3.0305620073, 3.0... Calibration \n", | |
"97 [3.0256675416, 3.0256675416, 3.0256675416, 3.0... Calibration \n", | |
"\n", | |
" high_voltage hostname \\\n", | |
"1 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"103 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"109 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"115 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"121 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"127 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"133 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"139 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"61 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"67 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"73 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"79 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"85 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"91 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"97 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"\n", | |
" is_alive latitude live_time \\\n", | |
"1 [True, True, True, True, True, True, True, Tru... 35.937202 296.716449 \n", | |
"103 [True, True, True, True, True, True, True, Tru... 35.937147 297.218338 \n", | |
"109 [True, True, True, True, True, True, True, Tru... 35.937181 296.588060 \n", | |
"115 [True, True, True, True, True, True, True, Tru... 35.937179 296.974872 \n", | |
"121 [True, True, True, True, True, True, True, Tru... 35.937180 297.154394 \n", | |
"127 [True, True, True, True, True, True, True, Tru... 35.937240 296.791126 \n", | |
"133 [True, True, True, True, True, True, True, Tru... 35.937219 296.245643 \n", | |
"139 [True, True, True, True, True, True, True, Tru... 35.937247 297.256420 \n", | |
"61 [True, True, True, True, True, True, True, Tru... 35.937194 296.967746 \n", | |
"67 [True, True, True, True, True, True, True, Tru... 35.937224 296.844491 \n", | |
"73 [True, True, True, True, True, True, True, Tru... 35.937277 297.117462 \n", | |
"79 [True, True, True, True, True, True, True, Tru... 35.937299 297.074687 \n", | |
"85 [True, True, True, True, True, True, True, Tru... 35.937206 296.616903 \n", | |
"91 [True, True, True, True, True, True, True, Tru... 35.937199 296.731823 \n", | |
"97 [True, True, True, True, True, True, True, Tru... 35.937210 296.257130 \n", | |
"\n", | |
" longitude n_meas original_fname \\\n", | |
"1 -84.274756 2995 Calibration/001-Runix01-Calibration-Eu152-10.1... \n", | |
"103 -84.274740 2999 Calibration/103-Runix01-Calibration-Th232-2017... \n", | |
"109 -84.274713 2998 Calibration/109-Runix01-Calibration-Eu152-10.1... \n", | |
"115 -84.274736 3001 Calibration/115-Runix01-Calibration-Eu152-10.1... \n", | |
"121 -84.274735 2999 Calibration/121-Runix01-Calibration-Th232-2017... \n", | |
"127 -84.274686 2999 Calibration/127-Runix01-Calibration-Eu152-10.1... \n", | |
"133 -84.274706 2998 Calibration/133-Runix01-Calibration-Co60-10uC-... \n", | |
"139 -84.274713 2999 Calibration/139-Runix01-Calibration-Th232-2017... \n", | |
"61 -84.274754 2994 Calibration/061-Runix01-Calibration-Th232-2017... \n", | |
"67 -84.274835 3000 Calibration/067-Runix01-Calibration-Co60-10uC-... \n", | |
"73 -84.274897 2999 Calibration/073-Runix01-Calibration-Cs137-12uC... \n", | |
"79 -84.274924 2999 Calibration/079-Runix01-Calibration-Ba133-14uC... \n", | |
"85 -84.274703 2998 Calibration/085-Runix01-Calibration-Ba133-14uC... \n", | |
"91 -84.274749 2998 Calibration/091-Runix01-Calibration-Cs137-12uC... \n", | |
"97 -84.246674 2999 Calibration/097-Runix01-Calibration-Co60-10uC-... \n", | |
"\n", | |
" real_time spectrum \\\n", | |
"1 299.5 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"103 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"109 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"115 300.1 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"121 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"127 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"133 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"139 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"61 299.4 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"67 300.0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"73 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"79 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"85 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"91 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"97 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"\n", | |
" start_time source \n", | |
"1 2017-05-08 14:13:08.682 Eu152 \n", | |
"103 2017-05-08 22:14:37.336 Th232 \n", | |
"109 2017-05-08 22:21:24.936 Eu152 \n", | |
"115 2017-05-09 13:32:39.237 Eu152 \n", | |
"121 2017-05-09 13:41:01.337 Th232 \n", | |
"127 2017-05-09 17:47:28.537 Eu152 \n", | |
"133 2017-05-09 17:41:27.937 Co60 \n", | |
"139 2017-05-09 17:54:27.937 Th232 \n", | |
"61 2017-05-08 14:19:10.082 Th232 \n", | |
"67 2017-05-08 14:31:23.882 Co60 \n", | |
"73 2017-05-08 14:43:24.582 Cs137 \n", | |
"79 2017-05-08 14:51:49.182 Ba133 \n", | |
"85 2017-05-08 21:55:56.136 Ba133 \n", | |
"91 2017-05-08 22:02:33.236 Cs137 \n", | |
"97 2017-05-08 22:08:40.836 Co60 " | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"by_hostname.get_group(\"Runix01\") # all the calibration measurements for Runix01" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You can pull out the calibration measurements for each source like this:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style>\n", | |
" .dataframe thead tr:only-child th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: left;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>all_tags</th>\n", | |
" <th>altitude</th>\n", | |
" <th>counts</th>\n", | |
" <th>datestamp</th>\n", | |
" <th>detector</th>\n", | |
" <th>end_time</th>\n", | |
" <th>gain</th>\n", | |
" <th>group</th>\n", | |
" <th>high_voltage</th>\n", | |
" <th>hostname</th>\n", | |
" <th>is_alive</th>\n", | |
" <th>latitude</th>\n", | |
" <th>live_time</th>\n", | |
" <th>longitude</th>\n", | |
" <th>n_meas</th>\n", | |
" <th>original_fname</th>\n", | |
" <th>real_time</th>\n", | |
" <th>spectrum</th>\n", | |
" <th>start_time</th>\n", | |
" <th>source</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>258.461641</td>\n", | |
" <td>506765</td>\n", | |
" <td>1494238388679</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 14:18:08.382</td>\n", | |
" <td>[3.0138549243, 3.0138549243, 3.0138549243, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937202</td>\n", | |
" <td>296.716449</td>\n", | |
" <td>-84.274756</td>\n", | |
" <td>2995</td>\n", | |
" <td>Calibration/001-Runix01-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.5</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 14:13:08.682</td>\n", | |
" <td>Eu152</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>109</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>276.285652</td>\n", | |
" <td>596160</td>\n", | |
" <td>1494267685121</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-08 22:26:24.636</td>\n", | |
" <td>[3.0301348538, 3.0301348538, 3.0301348538, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937181</td>\n", | |
" <td>296.588060</td>\n", | |
" <td>-84.274713</td>\n", | |
" <td>2998</td>\n", | |
" <td>Calibration/109-Runix01-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.8</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-08 22:21:24.936</td>\n", | |
" <td>Eu152</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>115</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>265.322892</td>\n", | |
" <td>568143</td>\n", | |
" <td>1494322359325</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 13:37:39.337</td>\n", | |
" <td>[3.0566190535, 3.0566190535, 3.0566190535, 3.0...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937179</td>\n", | |
" <td>296.974872</td>\n", | |
" <td>-84.274736</td>\n", | |
" <td>3001</td>\n", | |
" <td>Calibration/115-Runix01-Calibration-Eu152-10.1...</td>\n", | |
" <td>300.1</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 13:32:39.237</td>\n", | |
" <td>Eu152</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>127</th>\n", | |
" <td>{u'group': u'Calibration', u'hostname': u'Runi...</td>\n", | |
" <td>262.573816</td>\n", | |
" <td>592910</td>\n", | |
" <td>1494337649236</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2017-05-09 17:52:28.337</td>\n", | |
" <td>[3.1838403297, 3.1838403297, 3.1838403297, 3.1...</td>\n", | |
" <td>Calibration</td>\n", | |
" <td>[800, 800, 800, 800, 800, 800, 800, 800, 800, ...</td>\n", | |
" <td>Runix01</td>\n", | |
" <td>[True, True, True, True, True, True, True, Tru...</td>\n", | |
" <td>35.937240</td>\n", | |
" <td>296.791126</td>\n", | |
" <td>-84.274686</td>\n", | |
" <td>2999</td>\n", | |
" <td>Calibration/127-Runix01-Calibration-Eu152-10.1...</td>\n", | |
" <td>299.9</td>\n", | |
" <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n", | |
" <td>2017-05-09 17:47:28.537</td>\n", | |
" <td>Eu152</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" all_tags altitude counts \\\n", | |
"1 {u'group': u'Calibration', u'hostname': u'Runi... 258.461641 506765 \n", | |
"109 {u'group': u'Calibration', u'hostname': u'Runi... 276.285652 596160 \n", | |
"115 {u'group': u'Calibration', u'hostname': u'Runi... 265.322892 568143 \n", | |
"127 {u'group': u'Calibration', u'hostname': u'Runi... 262.573816 592910 \n", | |
"\n", | |
" datestamp detector end_time \\\n", | |
"1 1494238388679 NaN 2017-05-08 14:18:08.382 \n", | |
"109 1494267685121 NaN 2017-05-08 22:26:24.636 \n", | |
"115 1494322359325 NaN 2017-05-09 13:37:39.337 \n", | |
"127 1494337649236 NaN 2017-05-09 17:52:28.337 \n", | |
"\n", | |
" gain group \\\n", | |
"1 [3.0138549243, 3.0138549243, 3.0138549243, 3.0... Calibration \n", | |
"109 [3.0301348538, 3.0301348538, 3.0301348538, 3.0... Calibration \n", | |
"115 [3.0566190535, 3.0566190535, 3.0566190535, 3.0... Calibration \n", | |
"127 [3.1838403297, 3.1838403297, 3.1838403297, 3.1... Calibration \n", | |
"\n", | |
" high_voltage hostname \\\n", | |
"1 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"109 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"115 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"127 [800, 800, 800, 800, 800, 800, 800, 800, 800, ... Runix01 \n", | |
"\n", | |
" is_alive latitude live_time \\\n", | |
"1 [True, True, True, True, True, True, True, Tru... 35.937202 296.716449 \n", | |
"109 [True, True, True, True, True, True, True, Tru... 35.937181 296.588060 \n", | |
"115 [True, True, True, True, True, True, True, Tru... 35.937179 296.974872 \n", | |
"127 [True, True, True, True, True, True, True, Tru... 35.937240 296.791126 \n", | |
"\n", | |
" longitude n_meas original_fname \\\n", | |
"1 -84.274756 2995 Calibration/001-Runix01-Calibration-Eu152-10.1... \n", | |
"109 -84.274713 2998 Calibration/109-Runix01-Calibration-Eu152-10.1... \n", | |
"115 -84.274736 3001 Calibration/115-Runix01-Calibration-Eu152-10.1... \n", | |
"127 -84.274686 2999 Calibration/127-Runix01-Calibration-Eu152-10.1... \n", | |
"\n", | |
" real_time spectrum \\\n", | |
"1 299.5 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"109 299.8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"115 300.1 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"127 299.9 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", | |
"\n", | |
" start_time source \n", | |
"1 2017-05-08 14:13:08.682 Eu152 \n", | |
"109 2017-05-08 22:21:24.936 Eu152 \n", | |
"115 2017-05-09 13:32:39.237 Eu152 \n", | |
"127 2017-05-09 17:47:28.537 Eu152 " | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"by_hostname \\\n", | |
" . get_group(\"Runix01\") \\\n", | |
" . query(\"source == 'Eu152'\")" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"collapsed": true | |
}, | |
"source": [ | |
"Here's a list of every isotope key name you can use:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([u'Eu152', u'Co60', u'Th232', u'Cs137', u'Ba133'], dtype=object)" | |
] | |
}, | |
"execution_count": 11, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"caldata[\"source\"].unique()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Example to plot the spectra... use the start time labels to identify which calibration measurement you are looking at.\n", | |
"\n", | |
"Each day there was a calibration in the morning and one in the afternoon, all done at the same time (so the start times should be close)." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"/* Put everything inside the global mpl namespace */\n", | |
"window.mpl = {};\n", | |
"\n", | |
"mpl.get_websocket_type = function() {\n", | |
" if (typeof(WebSocket) !== 'undefined') {\n", | |
" return WebSocket;\n", | |
" } else if (typeof(MozWebSocket) !== 'undefined') {\n", | |
" return MozWebSocket;\n", | |
" } else {\n", | |
" alert('Your browser does not have WebSocket support.' +\n", | |
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", | |
" 'Firefox 4 and 5 are also supported but you ' +\n", | |
" 'have to enable WebSockets in about:config.');\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", | |
" this.id = figure_id;\n", | |
"\n", | |
" this.ws = websocket;\n", | |
"\n", | |
" this.supports_binary = (this.ws.binaryType != undefined);\n", | |
"\n", | |
" if (!this.supports_binary) {\n", | |
" var warnings = document.getElementById(\"mpl-warnings\");\n", | |
" if (warnings) {\n", | |
" warnings.style.display = 'block';\n", | |
" warnings.textContent = (\n", | |
" \"This browser does not support binary websocket messages. \" +\n", | |
" \"Performance may be slow.\");\n", | |
" }\n", | |
" }\n", | |
"\n", | |
" this.imageObj = new Image();\n", | |
"\n", | |
" this.context = undefined;\n", | |
" this.message = undefined;\n", | |
" this.canvas = undefined;\n", | |
" this.rubberband_canvas = undefined;\n", | |
" this.rubberband_context = undefined;\n", | |
" this.format_dropdown = undefined;\n", | |
"\n", | |
" this.image_mode = 'full';\n", | |
"\n", | |
" this.root = $('<div/>');\n", | |
" this._root_extra_style(this.root)\n", | |
" this.root.attr('style', 'display: inline-block');\n", | |
"\n", | |
" $(parent_element).append(this.root);\n", | |
"\n", | |
" this._init_header(this);\n", | |
" this._init_canvas(this);\n", | |
" this._init_toolbar(this);\n", | |
"\n", | |
" var fig = this;\n", | |
"\n", | |
" this.waiting = false;\n", | |
"\n", | |
" this.ws.onopen = function () {\n", | |
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", | |
" fig.send_message(\"send_image_mode\", {});\n", | |
" fig.send_message(\"refresh\", {});\n", | |
" }\n", | |
"\n", | |
" this.imageObj.onload = function() {\n", | |
" if (fig.image_mode == 'full') {\n", | |
" // Full images could contain transparency (where diff images\n", | |
" // almost always do), so we need to clear the canvas so that\n", | |
" // there is no ghosting.\n", | |
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", | |
" }\n", | |
" fig.context.drawImage(fig.imageObj, 0, 0);\n", | |
" };\n", | |
"\n", | |
" this.imageObj.onunload = function() {\n", | |
" this.ws.close();\n", | |
" }\n", | |
"\n", | |
" this.ws.onmessage = this._make_on_message_function(this);\n", | |
"\n", | |
" this.ondownload = ondownload;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_header = function() {\n", | |
" var titlebar = $(\n", | |
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", | |
" 'ui-helper-clearfix\"/>');\n", | |
" var titletext = $(\n", | |
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", | |
" 'text-align: center; padding: 3px;\"/>');\n", | |
" titlebar.append(titletext)\n", | |
" this.root.append(titlebar);\n", | |
" this.header = titletext[0];\n", | |
"}\n", | |
"\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", | |
"\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", | |
"\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_canvas = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var canvas_div = $('<div/>');\n", | |
"\n", | |
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", | |
"\n", | |
" function canvas_keyboard_event(event) {\n", | |
" return fig.key_event(event, event['data']);\n", | |
" }\n", | |
"\n", | |
" canvas_div.keydown('key_press', canvas_keyboard_event);\n", | |
" canvas_div.keyup('key_release', canvas_keyboard_event);\n", | |
" this.canvas_div = canvas_div\n", | |
" this._canvas_extra_style(canvas_div)\n", | |
" this.root.append(canvas_div);\n", | |
"\n", | |
" var canvas = $('<canvas/>');\n", | |
" canvas.addClass('mpl-canvas');\n", | |
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", | |
"\n", | |
" this.canvas = canvas[0];\n", | |
" this.context = canvas[0].getContext(\"2d\");\n", | |
"\n", | |
" var rubberband = $('<canvas/>');\n", | |
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", | |
"\n", | |
" var pass_mouse_events = true;\n", | |
"\n", | |
" canvas_div.resizable({\n", | |
" start: function(event, ui) {\n", | |
" pass_mouse_events = false;\n", | |
" },\n", | |
" resize: function(event, ui) {\n", | |
" fig.request_resize(ui.size.width, ui.size.height);\n", | |
" },\n", | |
" stop: function(event, ui) {\n", | |
" pass_mouse_events = true;\n", | |
" fig.request_resize(ui.size.width, ui.size.height);\n", | |
" },\n", | |
" });\n", | |
"\n", | |
" function mouse_event_fn(event) {\n", | |
" if (pass_mouse_events)\n", | |
" return fig.mouse_event(event, event['data']);\n", | |
" }\n", | |
"\n", | |
" rubberband.mousedown('button_press', mouse_event_fn);\n", | |
" rubberband.mouseup('button_release', mouse_event_fn);\n", | |
" // Throttle sequential mouse events to 1 every 20ms.\n", | |
" rubberband.mousemove('motion_notify', mouse_event_fn);\n", | |
"\n", | |
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n", | |
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n", | |
"\n", | |
" canvas_div.on(\"wheel\", function (event) {\n", | |
" event = event.originalEvent;\n", | |
" event['data'] = 'scroll'\n", | |
" if (event.deltaY < 0) {\n", | |
" event.step = 1;\n", | |
" } else {\n", | |
" event.step = -1;\n", | |
" }\n", | |
" mouse_event_fn(event);\n", | |
" });\n", | |
"\n", | |
" canvas_div.append(canvas);\n", | |
" canvas_div.append(rubberband);\n", | |
"\n", | |
" this.rubberband = rubberband;\n", | |
" this.rubberband_canvas = rubberband[0];\n", | |
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n", | |
" this.rubberband_context.strokeStyle = \"#000000\";\n", | |
"\n", | |
" this._resize_canvas = function(width, height) {\n", | |
" // Keep the size of the canvas, canvas container, and rubber band\n", | |
" // canvas in synch.\n", | |
" canvas_div.css('width', width)\n", | |
" canvas_div.css('height', height)\n", | |
"\n", | |
" canvas.attr('width', width);\n", | |
" canvas.attr('height', height);\n", | |
"\n", | |
" rubberband.attr('width', width);\n", | |
" rubberband.attr('height', height);\n", | |
" }\n", | |
"\n", | |
" // Set the figure to an initial 600x600px, this will subsequently be updated\n", | |
" // upon first draw.\n", | |
" this._resize_canvas(600, 600);\n", | |
"\n", | |
" // Disable right mouse context menu.\n", | |
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", | |
" return false;\n", | |
" });\n", | |
"\n", | |
" function set_focus () {\n", | |
" canvas.focus();\n", | |
" canvas_div.focus();\n", | |
" }\n", | |
"\n", | |
" window.setTimeout(set_focus, 100);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_toolbar = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var nav_element = $('<div/>')\n", | |
" nav_element.attr('style', 'width: 100%');\n", | |
" this.root.append(nav_element);\n", | |
"\n", | |
" // Define a callback function for later on.\n", | |
" function toolbar_event(event) {\n", | |
" return fig.toolbar_button_onclick(event['data']);\n", | |
" }\n", | |
" function toolbar_mouse_event(event) {\n", | |
" return fig.toolbar_button_onmouseover(event['data']);\n", | |
" }\n", | |
"\n", | |
" for(var toolbar_ind in mpl.toolbar_items) {\n", | |
" var name = mpl.toolbar_items[toolbar_ind][0];\n", | |
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", | |
" var image = mpl.toolbar_items[toolbar_ind][2];\n", | |
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n", | |
"\n", | |
" if (!name) {\n", | |
" // put a spacer in here.\n", | |
" continue;\n", | |
" }\n", | |
" var button = $('<button/>');\n", | |
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", | |
" 'ui-button-icon-only');\n", | |
" button.attr('role', 'button');\n", | |
" button.attr('aria-disabled', 'false');\n", | |
" button.click(method_name, toolbar_event);\n", | |
" button.mouseover(tooltip, toolbar_mouse_event);\n", | |
"\n", | |
" var icon_img = $('<span/>');\n", | |
" icon_img.addClass('ui-button-icon-primary ui-icon');\n", | |
" icon_img.addClass(image);\n", | |
" icon_img.addClass('ui-corner-all');\n", | |
"\n", | |
" var tooltip_span = $('<span/>');\n", | |
" tooltip_span.addClass('ui-button-text');\n", | |
" tooltip_span.html(tooltip);\n", | |
"\n", | |
" button.append(icon_img);\n", | |
" button.append(tooltip_span);\n", | |
"\n", | |
" nav_element.append(button);\n", | |
" }\n", | |
"\n", | |
" var fmt_picker_span = $('<span/>');\n", | |
"\n", | |
" var fmt_picker = $('<select/>');\n", | |
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", | |
" fmt_picker_span.append(fmt_picker);\n", | |
" nav_element.append(fmt_picker_span);\n", | |
" this.format_dropdown = fmt_picker[0];\n", | |
"\n", | |
" for (var ind in mpl.extensions) {\n", | |
" var fmt = mpl.extensions[ind];\n", | |
" var option = $(\n", | |
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", | |
" fmt_picker.append(option)\n", | |
" }\n", | |
"\n", | |
" // Add hover states to the ui-buttons\n", | |
" $( \".ui-button\" ).hover(\n", | |
" function() { $(this).addClass(\"ui-state-hover\");},\n", | |
" function() { $(this).removeClass(\"ui-state-hover\");}\n", | |
" );\n", | |
"\n", | |
" var status_bar = $('<span class=\"mpl-message\"/>');\n", | |
" nav_element.append(status_bar);\n", | |
" this.message = status_bar[0];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", | |
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", | |
" // which will in turn request a refresh of the image.\n", | |
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.send_message = function(type, properties) {\n", | |
" properties['type'] = type;\n", | |
" properties['figure_id'] = this.id;\n", | |
" this.ws.send(JSON.stringify(properties));\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.send_draw_message = function() {\n", | |
" if (!this.waiting) {\n", | |
" this.waiting = true;\n", | |
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype.handle_save = function(fig, msg) {\n", | |
" var format_dropdown = fig.format_dropdown;\n", | |
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", | |
" fig.ondownload(fig, format);\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n", | |
" var size = msg['size'];\n", | |
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", | |
" fig._resize_canvas(size[0], size[1]);\n", | |
" fig.send_message(\"refresh\", {});\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", | |
" var x0 = msg['x0'];\n", | |
" var y0 = fig.canvas.height - msg['y0'];\n", | |
" var x1 = msg['x1'];\n", | |
" var y1 = fig.canvas.height - msg['y1'];\n", | |
" x0 = Math.floor(x0) + 0.5;\n", | |
" y0 = Math.floor(y0) + 0.5;\n", | |
" x1 = Math.floor(x1) + 0.5;\n", | |
" y1 = Math.floor(y1) + 0.5;\n", | |
" var min_x = Math.min(x0, x1);\n", | |
" var min_y = Math.min(y0, y1);\n", | |
" var width = Math.abs(x1 - x0);\n", | |
" var height = Math.abs(y1 - y0);\n", | |
"\n", | |
" fig.rubberband_context.clearRect(\n", | |
" 0, 0, fig.canvas.width, fig.canvas.height);\n", | |
"\n", | |
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", | |
" // Updates the figure title.\n", | |
" fig.header.textContent = msg['label'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", | |
" var cursor = msg['cursor'];\n", | |
" switch(cursor)\n", | |
" {\n", | |
" case 0:\n", | |
" cursor = 'pointer';\n", | |
" break;\n", | |
" case 1:\n", | |
" cursor = 'default';\n", | |
" break;\n", | |
" case 2:\n", | |
" cursor = 'crosshair';\n", | |
" break;\n", | |
" case 3:\n", | |
" cursor = 'move';\n", | |
" break;\n", | |
" }\n", | |
" fig.rubberband_canvas.style.cursor = cursor;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_message = function(fig, msg) {\n", | |
" fig.message.textContent = msg['message'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n", | |
" // Request the server to send over a new figure.\n", | |
" fig.send_draw_message();\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", | |
" fig.image_mode = msg['mode'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.updated_canvas_event = function() {\n", | |
" // Called whenever the canvas gets updated.\n", | |
" this.send_message(\"ack\", {});\n", | |
"}\n", | |
"\n", | |
"// A function to construct a web socket function for onmessage handling.\n", | |
"// Called in the figure constructor.\n", | |
"mpl.figure.prototype._make_on_message_function = function(fig) {\n", | |
" return function socket_on_message(evt) {\n", | |
" if (evt.data instanceof Blob) {\n", | |
" /* FIXME: We get \"Resource interpreted as Image but\n", | |
" * transferred with MIME type text/plain:\" errors on\n", | |
" * Chrome. But how to set the MIME type? It doesn't seem\n", | |
" * to be part of the websocket stream */\n", | |
" evt.data.type = \"image/png\";\n", | |
"\n", | |
" /* Free the memory for the previous frames */\n", | |
" if (fig.imageObj.src) {\n", | |
" (window.URL || window.webkitURL).revokeObjectURL(\n", | |
" fig.imageObj.src);\n", | |
" }\n", | |
"\n", | |
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", | |
" evt.data);\n", | |
" fig.updated_canvas_event();\n", | |
" fig.waiting = false;\n", | |
" return;\n", | |
" }\n", | |
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", | |
" fig.imageObj.src = evt.data;\n", | |
" fig.updated_canvas_event();\n", | |
" fig.waiting = false;\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" var msg = JSON.parse(evt.data);\n", | |
" var msg_type = msg['type'];\n", | |
"\n", | |
" // Call the \"handle_{type}\" callback, which takes\n", | |
" // the figure and JSON message as its only arguments.\n", | |
" try {\n", | |
" var callback = fig[\"handle_\" + msg_type];\n", | |
" } catch (e) {\n", | |
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" if (callback) {\n", | |
" try {\n", | |
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", | |
" callback(fig, msg);\n", | |
" } catch (e) {\n", | |
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", | |
" }\n", | |
" }\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", | |
"mpl.findpos = function(e) {\n", | |
" //this section is from http://www.quirksmode.org/js/events_properties.html\n", | |
" var targ;\n", | |
" if (!e)\n", | |
" e = window.event;\n", | |
" if (e.target)\n", | |
" targ = e.target;\n", | |
" else if (e.srcElement)\n", | |
" targ = e.srcElement;\n", | |
" if (targ.nodeType == 3) // defeat Safari bug\n", | |
" targ = targ.parentNode;\n", | |
"\n", | |
" // jQuery normalizes the pageX and pageY\n", | |
" // pageX,Y are the mouse positions relative to the document\n", | |
" // offset() returns the position of the element relative to the document\n", | |
" var x = e.pageX - $(targ).offset().left;\n", | |
" var y = e.pageY - $(targ).offset().top;\n", | |
"\n", | |
" return {\"x\": x, \"y\": y};\n", | |
"};\n", | |
"\n", | |
"/*\n", | |
" * return a copy of an object with only non-object keys\n", | |
" * we need this to avoid circular references\n", | |
" * http://stackoverflow.com/a/24161582/3208463\n", | |
" */\n", | |
"function simpleKeys (original) {\n", | |
" return Object.keys(original).reduce(function (obj, key) {\n", | |
" if (typeof original[key] !== 'object')\n", | |
" obj[key] = original[key]\n", | |
" return obj;\n", | |
" }, {});\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.mouse_event = function(event, name) {\n", | |
" var canvas_pos = mpl.findpos(event)\n", | |
"\n", | |
" if (name === 'button_press')\n", | |
" {\n", | |
" this.canvas.focus();\n", | |
" this.canvas_div.focus();\n", | |
" }\n", | |
"\n", | |
" var x = canvas_pos.x;\n", | |
" var y = canvas_pos.y;\n", | |
"\n", | |
" this.send_message(name, {x: x, y: y, button: event.button,\n", | |
" step: event.step,\n", | |
" guiEvent: simpleKeys(event)});\n", | |
"\n", | |
" /* This prevents the web browser from automatically changing to\n", | |
" * the text insertion cursor when the button is pressed. We want\n", | |
" * to control all of the cursor setting manually through the\n", | |
" * 'cursor' event from matplotlib */\n", | |
" event.preventDefault();\n", | |
" return false;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._key_event_extra = function(event, name) {\n", | |
" // Handle any extra behaviour associated with a key event\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.key_event = function(event, name) {\n", | |
"\n", | |
" // Prevent repeat events\n", | |
" if (name == 'key_press')\n", | |
" {\n", | |
" if (event.which === this._key)\n", | |
" return;\n", | |
" else\n", | |
" this._key = event.which;\n", | |
" }\n", | |
" if (name == 'key_release')\n", | |
" this._key = null;\n", | |
"\n", | |
" var value = '';\n", | |
" if (event.ctrlKey && event.which != 17)\n", | |
" value += \"ctrl+\";\n", | |
" if (event.altKey && event.which != 18)\n", | |
" value += \"alt+\";\n", | |
" if (event.shiftKey && event.which != 16)\n", | |
" value += \"shift+\";\n", | |
"\n", | |
" value += 'k';\n", | |
" value += event.which.toString();\n", | |
"\n", | |
" this._key_event_extra(event, name);\n", | |
"\n", | |
" this.send_message(name, {key: value,\n", | |
" guiEvent: simpleKeys(event)});\n", | |
" return false;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", | |
" if (name == 'download') {\n", | |
" this.handle_save(this, null);\n", | |
" } else {\n", | |
" this.send_message(\"toolbar_button\", {name: name});\n", | |
" }\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", | |
" this.message.textContent = tooltip;\n", | |
"};\n", | |
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", | |
"\n", | |
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", | |
"\n", | |
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", | |
" // Create a \"websocket\"-like object which calls the given IPython comm\n", | |
" // object with the appropriate methods. Currently this is a non binary\n", | |
" // socket, so there is still some room for performance tuning.\n", | |
" var ws = {};\n", | |
"\n", | |
" ws.close = function() {\n", | |
" comm.close()\n", | |
" };\n", | |
" ws.send = function(m) {\n", | |
" //console.log('sending', m);\n", | |
" comm.send(m);\n", | |
" };\n", | |
" // Register the callback with on_msg.\n", | |
" comm.on_msg(function(msg) {\n", | |
" //console.log('receiving', msg['content']['data'], msg);\n", | |
" // Pass the mpl event to the overriden (by mpl) onmessage function.\n", | |
" ws.onmessage(msg['content']['data'])\n", | |
" });\n", | |
" return ws;\n", | |
"}\n", | |
"\n", | |
"mpl.mpl_figure_comm = function(comm, msg) {\n", | |
" // This is the function which gets called when the mpl process\n", | |
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n", | |
"\n", | |
" var id = msg.content.data.id;\n", | |
" // Get hold of the div created by the display call when the Comm\n", | |
" // socket was opened in Python.\n", | |
" var element = $(\"#\" + id);\n", | |
" var ws_proxy = comm_websocket_adapter(comm)\n", | |
"\n", | |
" function ondownload(figure, format) {\n", | |
" window.open(figure.imageObj.src);\n", | |
" }\n", | |
"\n", | |
" var fig = new mpl.figure(id, ws_proxy,\n", | |
" ondownload,\n", | |
" element.get(0));\n", | |
"\n", | |
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", | |
" // web socket which is closed, not our websocket->open comm proxy.\n", | |
" ws_proxy.onopen();\n", | |
"\n", | |
" fig.parent_element = element.get(0);\n", | |
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", | |
" if (!fig.cell_info) {\n", | |
" console.error(\"Failed to find cell for figure\", id, fig);\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" var output_index = fig.cell_info[2]\n", | |
" var cell = fig.cell_info[0];\n", | |
"\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.handle_close = function(fig, msg) {\n", | |
" fig.root.unbind('remove')\n", | |
"\n", | |
" // Update the output cell to use the data from the current canvas.\n", | |
" fig.push_to_output();\n", | |
" var dataURL = fig.canvas.toDataURL();\n", | |
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n", | |
" // the notebook keyboard shortcuts fail.\n", | |
" IPython.keyboard_manager.enable()\n", | |
" $(fig.parent_element).html('<img src=\"' + dataURL + '\">');\n", | |
" fig.close_ws(fig, msg);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.close_ws = function(fig, msg){\n", | |
" fig.send_message('closing', msg);\n", | |
" // fig.ws.close()\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", | |
" // Turn the data on the canvas into data in the output cell.\n", | |
" var dataURL = this.canvas.toDataURL();\n", | |
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.updated_canvas_event = function() {\n", | |
" // Tell IPython that the notebook contents must change.\n", | |
" IPython.notebook.set_dirty(true);\n", | |
" this.send_message(\"ack\", {});\n", | |
" var fig = this;\n", | |
" // Wait a second, then push the new image to the DOM so\n", | |
" // that it is saved nicely (might be nice to debounce this).\n", | |
" setTimeout(function () { fig.push_to_output() }, 1000);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_toolbar = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var nav_element = $('<div/>')\n", | |
" nav_element.attr('style', 'width: 100%');\n", | |
" this.root.append(nav_element);\n", | |
"\n", | |
" // Define a callback function for later on.\n", | |
" function toolbar_event(event) {\n", | |
" return fig.toolbar_button_onclick(event['data']);\n", | |
" }\n", | |
" function toolbar_mouse_event(event) {\n", | |
" return fig.toolbar_button_onmouseover(event['data']);\n", | |
" }\n", | |
"\n", | |
" for(var toolbar_ind in mpl.toolbar_items){\n", | |
" var name = mpl.toolbar_items[toolbar_ind][0];\n", | |
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", | |
" var image = mpl.toolbar_items[toolbar_ind][2];\n", | |
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n", | |
"\n", | |
" if (!name) { continue; };\n", | |
"\n", | |
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", | |
" button.click(method_name, toolbar_event);\n", | |
" button.mouseover(tooltip, toolbar_mouse_event);\n", | |
" nav_element.append(button);\n", | |
" }\n", | |
"\n", | |
" // Add the status bar.\n", | |
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", | |
" nav_element.append(status_bar);\n", | |
" this.message = status_bar[0];\n", | |
"\n", | |
" // Add the close button to the window.\n", | |
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", | |
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", | |
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n", | |
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n", | |
" buttongrp.append(button);\n", | |
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", | |
" titlebar.prepend(buttongrp);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._root_extra_style = function(el){\n", | |
" var fig = this\n", | |
" el.on(\"remove\", function(){\n", | |
"\tfig.close_ws(fig, {});\n", | |
" });\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._canvas_extra_style = function(el){\n", | |
" // this is important to make the div 'focusable\n", | |
" el.attr('tabindex', 0)\n", | |
" // reach out to IPython and tell the keyboard manager to turn it's self\n", | |
" // off when our div gets focus\n", | |
"\n", | |
" // location in version 3\n", | |
" if (IPython.notebook.keyboard_manager) {\n", | |
" IPython.notebook.keyboard_manager.register_events(el);\n", | |
" }\n", | |
" else {\n", | |
" // location in version 2\n", | |
" IPython.keyboard_manager.register_events(el);\n", | |
" }\n", | |
"\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._key_event_extra = function(event, name) {\n", | |
" var manager = IPython.notebook.keyboard_manager;\n", | |
" if (!manager)\n", | |
" manager = IPython.keyboard_manager;\n", | |
"\n", | |
" // Check for shift+enter\n", | |
" if (event.shiftKey && event.which == 13) {\n", | |
" this.canvas_div.blur();\n", | |
" event.shiftKey = false;\n", | |
" // Send a \"J\" for go to next cell\n", | |
" event.which = 74;\n", | |
" event.keyCode = 74;\n", | |
" manager.command_mode();\n", | |
" manager.handle_keydown(event);\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_save = function(fig, msg) {\n", | |
" fig.ondownload(fig, null);\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.find_output_cell = function(html_output) {\n", | |
" // Return the cell and output element which can be found *uniquely* in the notebook.\n", | |
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", | |
" // IPython event is triggered only after the cells have been serialised, which for\n", | |
" // our purposes (turning an active figure into a static one), is too late.\n", | |
" var cells = IPython.notebook.get_cells();\n", | |
" var ncells = cells.length;\n", | |
" for (var i=0; i<ncells; i++) {\n", | |
" var cell = cells[i];\n", | |
" if (cell.cell_type === 'code'){\n", | |
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n", | |
" var data = cell.output_area.outputs[j];\n", | |
" if (data.data) {\n", | |
" // IPython >= 3 moved mimebundle to data attribute of output\n", | |
" data = data.data;\n", | |
" }\n", | |
" if (data['text/html'] == html_output) {\n", | |
" return [cell, data, j];\n", | |
" }\n", | |
" }\n", | |
" }\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"// Register the function which deals with the matplotlib target/channel.\n", | |
"// The kernel may be null if the page has been refreshed.\n", | |
"if (IPython.notebook.kernel != null) {\n", | |
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", | |
"}\n" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<img src=\"data:image/png;base64,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\">" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/opt/anaconda2/lib/python2.7/site-packages/ipykernel/__main__.py:6: RuntimeWarning: divide by zero encountered in log\n" | |
] | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"/* Put everything inside the global mpl namespace */\n", | |
"window.mpl = {};\n", | |
"\n", | |
"mpl.get_websocket_type = function() {\n", | |
" if (typeof(WebSocket) !== 'undefined') {\n", | |
" return WebSocket;\n", | |
" } else if (typeof(MozWebSocket) !== 'undefined') {\n", | |
" return MozWebSocket;\n", | |
" } else {\n", | |
" alert('Your browser does not have WebSocket support.' +\n", | |
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", | |
" 'Firefox 4 and 5 are also supported but you ' +\n", | |
" 'have to enable WebSockets in about:config.');\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", | |
" this.id = figure_id;\n", | |
"\n", | |
" this.ws = websocket;\n", | |
"\n", | |
" this.supports_binary = (this.ws.binaryType != undefined);\n", | |
"\n", | |
" if (!this.supports_binary) {\n", | |
" var warnings = document.getElementById(\"mpl-warnings\");\n", | |
" if (warnings) {\n", | |
" warnings.style.display = 'block';\n", | |
" warnings.textContent = (\n", | |
" \"This browser does not support binary websocket messages. \" +\n", | |
" \"Performance may be slow.\");\n", | |
" }\n", | |
" }\n", | |
"\n", | |
" this.imageObj = new Image();\n", | |
"\n", | |
" this.context = undefined;\n", | |
" this.message = undefined;\n", | |
" this.canvas = undefined;\n", | |
" this.rubberband_canvas = undefined;\n", | |
" this.rubberband_context = undefined;\n", | |
" this.format_dropdown = undefined;\n", | |
"\n", | |
" this.image_mode = 'full';\n", | |
"\n", | |
" this.root = $('<div/>');\n", | |
" this._root_extra_style(this.root)\n", | |
" this.root.attr('style', 'display: inline-block');\n", | |
"\n", | |
" $(parent_element).append(this.root);\n", | |
"\n", | |
" this._init_header(this);\n", | |
" this._init_canvas(this);\n", | |
" this._init_toolbar(this);\n", | |
"\n", | |
" var fig = this;\n", | |
"\n", | |
" this.waiting = false;\n", | |
"\n", | |
" this.ws.onopen = function () {\n", | |
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", | |
" fig.send_message(\"send_image_mode\", {});\n", | |
" fig.send_message(\"refresh\", {});\n", | |
" }\n", | |
"\n", | |
" this.imageObj.onload = function() {\n", | |
" if (fig.image_mode == 'full') {\n", | |
" // Full images could contain transparency (where diff images\n", | |
" // almost always do), so we need to clear the canvas so that\n", | |
" // there is no ghosting.\n", | |
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", | |
" }\n", | |
" fig.context.drawImage(fig.imageObj, 0, 0);\n", | |
" };\n", | |
"\n", | |
" this.imageObj.onunload = function() {\n", | |
" this.ws.close();\n", | |
" }\n", | |
"\n", | |
" this.ws.onmessage = this._make_on_message_function(this);\n", | |
"\n", | |
" this.ondownload = ondownload;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_header = function() {\n", | |
" var titlebar = $(\n", | |
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", | |
" 'ui-helper-clearfix\"/>');\n", | |
" var titletext = $(\n", | |
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", | |
" 'text-align: center; padding: 3px;\"/>');\n", | |
" titlebar.append(titletext)\n", | |
" this.root.append(titlebar);\n", | |
" this.header = titletext[0];\n", | |
"}\n", | |
"\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", | |
"\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", | |
"\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_canvas = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var canvas_div = $('<div/>');\n", | |
"\n", | |
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", | |
"\n", | |
" function canvas_keyboard_event(event) {\n", | |
" return fig.key_event(event, event['data']);\n", | |
" }\n", | |
"\n", | |
" canvas_div.keydown('key_press', canvas_keyboard_event);\n", | |
" canvas_div.keyup('key_release', canvas_keyboard_event);\n", | |
" this.canvas_div = canvas_div\n", | |
" this._canvas_extra_style(canvas_div)\n", | |
" this.root.append(canvas_div);\n", | |
"\n", | |
" var canvas = $('<canvas/>');\n", | |
" canvas.addClass('mpl-canvas');\n", | |
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", | |
"\n", | |
" this.canvas = canvas[0];\n", | |
" this.context = canvas[0].getContext(\"2d\");\n", | |
"\n", | |
" var rubberband = $('<canvas/>');\n", | |
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", | |
"\n", | |
" var pass_mouse_events = true;\n", | |
"\n", | |
" canvas_div.resizable({\n", | |
" start: function(event, ui) {\n", | |
" pass_mouse_events = false;\n", | |
" },\n", | |
" resize: function(event, ui) {\n", | |
" fig.request_resize(ui.size.width, ui.size.height);\n", | |
" },\n", | |
" stop: function(event, ui) {\n", | |
" pass_mouse_events = true;\n", | |
" fig.request_resize(ui.size.width, ui.size.height);\n", | |
" },\n", | |
" });\n", | |
"\n", | |
" function mouse_event_fn(event) {\n", | |
" if (pass_mouse_events)\n", | |
" return fig.mouse_event(event, event['data']);\n", | |
" }\n", | |
"\n", | |
" rubberband.mousedown('button_press', mouse_event_fn);\n", | |
" rubberband.mouseup('button_release', mouse_event_fn);\n", | |
" // Throttle sequential mouse events to 1 every 20ms.\n", | |
" rubberband.mousemove('motion_notify', mouse_event_fn);\n", | |
"\n", | |
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n", | |
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n", | |
"\n", | |
" canvas_div.on(\"wheel\", function (event) {\n", | |
" event = event.originalEvent;\n", | |
" event['data'] = 'scroll'\n", | |
" if (event.deltaY < 0) {\n", | |
" event.step = 1;\n", | |
" } else {\n", | |
" event.step = -1;\n", | |
" }\n", | |
" mouse_event_fn(event);\n", | |
" });\n", | |
"\n", | |
" canvas_div.append(canvas);\n", | |
" canvas_div.append(rubberband);\n", | |
"\n", | |
" this.rubberband = rubberband;\n", | |
" this.rubberband_canvas = rubberband[0];\n", | |
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n", | |
" this.rubberband_context.strokeStyle = \"#000000\";\n", | |
"\n", | |
" this._resize_canvas = function(width, height) {\n", | |
" // Keep the size of the canvas, canvas container, and rubber band\n", | |
" // canvas in synch.\n", | |
" canvas_div.css('width', width)\n", | |
" canvas_div.css('height', height)\n", | |
"\n", | |
" canvas.attr('width', width);\n", | |
" canvas.attr('height', height);\n", | |
"\n", | |
" rubberband.attr('width', width);\n", | |
" rubberband.attr('height', height);\n", | |
" }\n", | |
"\n", | |
" // Set the figure to an initial 600x600px, this will subsequently be updated\n", | |
" // upon first draw.\n", | |
" this._resize_canvas(600, 600);\n", | |
"\n", | |
" // Disable right mouse context menu.\n", | |
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", | |
" return false;\n", | |
" });\n", | |
"\n", | |
" function set_focus () {\n", | |
" canvas.focus();\n", | |
" canvas_div.focus();\n", | |
" }\n", | |
"\n", | |
" window.setTimeout(set_focus, 100);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_toolbar = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var nav_element = $('<div/>')\n", | |
" nav_element.attr('style', 'width: 100%');\n", | |
" this.root.append(nav_element);\n", | |
"\n", | |
" // Define a callback function for later on.\n", | |
" function toolbar_event(event) {\n", | |
" return fig.toolbar_button_onclick(event['data']);\n", | |
" }\n", | |
" function toolbar_mouse_event(event) {\n", | |
" return fig.toolbar_button_onmouseover(event['data']);\n", | |
" }\n", | |
"\n", | |
" for(var toolbar_ind in mpl.toolbar_items) {\n", | |
" var name = mpl.toolbar_items[toolbar_ind][0];\n", | |
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", | |
" var image = mpl.toolbar_items[toolbar_ind][2];\n", | |
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n", | |
"\n", | |
" if (!name) {\n", | |
" // put a spacer in here.\n", | |
" continue;\n", | |
" }\n", | |
" var button = $('<button/>');\n", | |
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", | |
" 'ui-button-icon-only');\n", | |
" button.attr('role', 'button');\n", | |
" button.attr('aria-disabled', 'false');\n", | |
" button.click(method_name, toolbar_event);\n", | |
" button.mouseover(tooltip, toolbar_mouse_event);\n", | |
"\n", | |
" var icon_img = $('<span/>');\n", | |
" icon_img.addClass('ui-button-icon-primary ui-icon');\n", | |
" icon_img.addClass(image);\n", | |
" icon_img.addClass('ui-corner-all');\n", | |
"\n", | |
" var tooltip_span = $('<span/>');\n", | |
" tooltip_span.addClass('ui-button-text');\n", | |
" tooltip_span.html(tooltip);\n", | |
"\n", | |
" button.append(icon_img);\n", | |
" button.append(tooltip_span);\n", | |
"\n", | |
" nav_element.append(button);\n", | |
" }\n", | |
"\n", | |
" var fmt_picker_span = $('<span/>');\n", | |
"\n", | |
" var fmt_picker = $('<select/>');\n", | |
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", | |
" fmt_picker_span.append(fmt_picker);\n", | |
" nav_element.append(fmt_picker_span);\n", | |
" this.format_dropdown = fmt_picker[0];\n", | |
"\n", | |
" for (var ind in mpl.extensions) {\n", | |
" var fmt = mpl.extensions[ind];\n", | |
" var option = $(\n", | |
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", | |
" fmt_picker.append(option)\n", | |
" }\n", | |
"\n", | |
" // Add hover states to the ui-buttons\n", | |
" $( \".ui-button\" ).hover(\n", | |
" function() { $(this).addClass(\"ui-state-hover\");},\n", | |
" function() { $(this).removeClass(\"ui-state-hover\");}\n", | |
" );\n", | |
"\n", | |
" var status_bar = $('<span class=\"mpl-message\"/>');\n", | |
" nav_element.append(status_bar);\n", | |
" this.message = status_bar[0];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", | |
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", | |
" // which will in turn request a refresh of the image.\n", | |
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.send_message = function(type, properties) {\n", | |
" properties['type'] = type;\n", | |
" properties['figure_id'] = this.id;\n", | |
" this.ws.send(JSON.stringify(properties));\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.send_draw_message = function() {\n", | |
" if (!this.waiting) {\n", | |
" this.waiting = true;\n", | |
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype.handle_save = function(fig, msg) {\n", | |
" var format_dropdown = fig.format_dropdown;\n", | |
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", | |
" fig.ondownload(fig, format);\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n", | |
" var size = msg['size'];\n", | |
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", | |
" fig._resize_canvas(size[0], size[1]);\n", | |
" fig.send_message(\"refresh\", {});\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", | |
" var x0 = msg['x0'];\n", | |
" var y0 = fig.canvas.height - msg['y0'];\n", | |
" var x1 = msg['x1'];\n", | |
" var y1 = fig.canvas.height - msg['y1'];\n", | |
" x0 = Math.floor(x0) + 0.5;\n", | |
" y0 = Math.floor(y0) + 0.5;\n", | |
" x1 = Math.floor(x1) + 0.5;\n", | |
" y1 = Math.floor(y1) + 0.5;\n", | |
" var min_x = Math.min(x0, x1);\n", | |
" var min_y = Math.min(y0, y1);\n", | |
" var width = Math.abs(x1 - x0);\n", | |
" var height = Math.abs(y1 - y0);\n", | |
"\n", | |
" fig.rubberband_context.clearRect(\n", | |
" 0, 0, fig.canvas.width, fig.canvas.height);\n", | |
"\n", | |
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", | |
" // Updates the figure title.\n", | |
" fig.header.textContent = msg['label'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", | |
" var cursor = msg['cursor'];\n", | |
" switch(cursor)\n", | |
" {\n", | |
" case 0:\n", | |
" cursor = 'pointer';\n", | |
" break;\n", | |
" case 1:\n", | |
" cursor = 'default';\n", | |
" break;\n", | |
" case 2:\n", | |
" cursor = 'crosshair';\n", | |
" break;\n", | |
" case 3:\n", | |
" cursor = 'move';\n", | |
" break;\n", | |
" }\n", | |
" fig.rubberband_canvas.style.cursor = cursor;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_message = function(fig, msg) {\n", | |
" fig.message.textContent = msg['message'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n", | |
" // Request the server to send over a new figure.\n", | |
" fig.send_draw_message();\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", | |
" fig.image_mode = msg['mode'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.updated_canvas_event = function() {\n", | |
" // Called whenever the canvas gets updated.\n", | |
" this.send_message(\"ack\", {});\n", | |
"}\n", | |
"\n", | |
"// A function to construct a web socket function for onmessage handling.\n", | |
"// Called in the figure constructor.\n", | |
"mpl.figure.prototype._make_on_message_function = function(fig) {\n", | |
" return function socket_on_message(evt) {\n", | |
" if (evt.data instanceof Blob) {\n", | |
" /* FIXME: We get \"Resource interpreted as Image but\n", | |
" * transferred with MIME type text/plain:\" errors on\n", | |
" * Chrome. But how to set the MIME type? It doesn't seem\n", | |
" * to be part of the websocket stream */\n", | |
" evt.data.type = \"image/png\";\n", | |
"\n", | |
" /* Free the memory for the previous frames */\n", | |
" if (fig.imageObj.src) {\n", | |
" (window.URL || window.webkitURL).revokeObjectURL(\n", | |
" fig.imageObj.src);\n", | |
" }\n", | |
"\n", | |
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", | |
" evt.data);\n", | |
" fig.updated_canvas_event();\n", | |
" fig.waiting = false;\n", | |
" return;\n", | |
" }\n", | |
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", | |
" fig.imageObj.src = evt.data;\n", | |
" fig.updated_canvas_event();\n", | |
" fig.waiting = false;\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" var msg = JSON.parse(evt.data);\n", | |
" var msg_type = msg['type'];\n", | |
"\n", | |
" // Call the \"handle_{type}\" callback, which takes\n", | |
" // the figure and JSON message as its only arguments.\n", | |
" try {\n", | |
" var callback = fig[\"handle_\" + msg_type];\n", | |
" } catch (e) {\n", | |
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" if (callback) {\n", | |
" try {\n", | |
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", | |
" callback(fig, msg);\n", | |
" } catch (e) {\n", | |
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", | |
" }\n", | |
" }\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", | |
"mpl.findpos = function(e) {\n", | |
" //this section is from http://www.quirksmode.org/js/events_properties.html\n", | |
" var targ;\n", | |
" if (!e)\n", | |
" e = window.event;\n", | |
" if (e.target)\n", | |
" targ = e.target;\n", | |
" else if (e.srcElement)\n", | |
" targ = e.srcElement;\n", | |
" if (targ.nodeType == 3) // defeat Safari bug\n", | |
" targ = targ.parentNode;\n", | |
"\n", | |
" // jQuery normalizes the pageX and pageY\n", | |
" // pageX,Y are the mouse positions relative to the document\n", | |
" // offset() returns the position of the element relative to the document\n", | |
" var x = e.pageX - $(targ).offset().left;\n", | |
" var y = e.pageY - $(targ).offset().top;\n", | |
"\n", | |
" return {\"x\": x, \"y\": y};\n", | |
"};\n", | |
"\n", | |
"/*\n", | |
" * return a copy of an object with only non-object keys\n", | |
" * we need this to avoid circular references\n", | |
" * http://stackoverflow.com/a/24161582/3208463\n", | |
" */\n", | |
"function simpleKeys (original) {\n", | |
" return Object.keys(original).reduce(function (obj, key) {\n", | |
" if (typeof original[key] !== 'object')\n", | |
" obj[key] = original[key]\n", | |
" return obj;\n", | |
" }, {});\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.mouse_event = function(event, name) {\n", | |
" var canvas_pos = mpl.findpos(event)\n", | |
"\n", | |
" if (name === 'button_press')\n", | |
" {\n", | |
" this.canvas.focus();\n", | |
" this.canvas_div.focus();\n", | |
" }\n", | |
"\n", | |
" var x = canvas_pos.x;\n", | |
" var y = canvas_pos.y;\n", | |
"\n", | |
" this.send_message(name, {x: x, y: y, button: event.button,\n", | |
" step: event.step,\n", | |
" guiEvent: simpleKeys(event)});\n", | |
"\n", | |
" /* This prevents the web browser from automatically changing to\n", | |
" * the text insertion cursor when the button is pressed. We want\n", | |
" * to control all of the cursor setting manually through the\n", | |
" * 'cursor' event from matplotlib */\n", | |
" event.preventDefault();\n", | |
" return false;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._key_event_extra = function(event, name) {\n", | |
" // Handle any extra behaviour associated with a key event\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.key_event = function(event, name) {\n", | |
"\n", | |
" // Prevent repeat events\n", | |
" if (name == 'key_press')\n", | |
" {\n", | |
" if (event.which === this._key)\n", | |
" return;\n", | |
" else\n", | |
" this._key = event.which;\n", | |
" }\n", | |
" if (name == 'key_release')\n", | |
" this._key = null;\n", | |
"\n", | |
" var value = '';\n", | |
" if (event.ctrlKey && event.which != 17)\n", | |
" value += \"ctrl+\";\n", | |
" if (event.altKey && event.which != 18)\n", | |
" value += \"alt+\";\n", | |
" if (event.shiftKey && event.which != 16)\n", | |
" value += \"shift+\";\n", | |
"\n", | |
" value += 'k';\n", | |
" value += event.which.toString();\n", | |
"\n", | |
" this._key_event_extra(event, name);\n", | |
"\n", | |
" this.send_message(name, {key: value,\n", | |
" guiEvent: simpleKeys(event)});\n", | |
" return false;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", | |
" if (name == 'download') {\n", | |
" this.handle_save(this, null);\n", | |
" } else {\n", | |
" this.send_message(\"toolbar_button\", {name: name});\n", | |
" }\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", | |
" this.message.textContent = tooltip;\n", | |
"};\n", | |
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", | |
"\n", | |
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", | |
"\n", | |
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", | |
" // Create a \"websocket\"-like object which calls the given IPython comm\n", | |
" // object with the appropriate methods. Currently this is a non binary\n", | |
" // socket, so there is still some room for performance tuning.\n", | |
" var ws = {};\n", | |
"\n", | |
" ws.close = function() {\n", | |
" comm.close()\n", | |
" };\n", | |
" ws.send = function(m) {\n", | |
" //console.log('sending', m);\n", | |
" comm.send(m);\n", | |
" };\n", | |
" // Register the callback with on_msg.\n", | |
" comm.on_msg(function(msg) {\n", | |
" //console.log('receiving', msg['content']['data'], msg);\n", | |
" // Pass the mpl event to the overriden (by mpl) onmessage function.\n", | |
" ws.onmessage(msg['content']['data'])\n", | |
" });\n", | |
" return ws;\n", | |
"}\n", | |
"\n", | |
"mpl.mpl_figure_comm = function(comm, msg) {\n", | |
" // This is the function which gets called when the mpl process\n", | |
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n", | |
"\n", | |
" var id = msg.content.data.id;\n", | |
" // Get hold of the div created by the display call when the Comm\n", | |
" // socket was opened in Python.\n", | |
" var element = $(\"#\" + id);\n", | |
" var ws_proxy = comm_websocket_adapter(comm)\n", | |
"\n", | |
" function ondownload(figure, format) {\n", | |
" window.open(figure.imageObj.src);\n", | |
" }\n", | |
"\n", | |
" var fig = new mpl.figure(id, ws_proxy,\n", | |
" ondownload,\n", | |
" element.get(0));\n", | |
"\n", | |
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", | |
" // web socket which is closed, not our websocket->open comm proxy.\n", | |
" ws_proxy.onopen();\n", | |
"\n", | |
" fig.parent_element = element.get(0);\n", | |
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", | |
" if (!fig.cell_info) {\n", | |
" console.error(\"Failed to find cell for figure\", id, fig);\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" var output_index = fig.cell_info[2]\n", | |
" var cell = fig.cell_info[0];\n", | |
"\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.handle_close = function(fig, msg) {\n", | |
" fig.root.unbind('remove')\n", | |
"\n", | |
" // Update the output cell to use the data from the current canvas.\n", | |
" fig.push_to_output();\n", | |
" var dataURL = fig.canvas.toDataURL();\n", | |
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n", | |
" // the notebook keyboard shortcuts fail.\n", | |
" IPython.keyboard_manager.enable()\n", | |
" $(fig.parent_element).html('<img src=\"' + dataURL + '\">');\n", | |
" fig.close_ws(fig, msg);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.close_ws = function(fig, msg){\n", | |
" fig.send_message('closing', msg);\n", | |
" // fig.ws.close()\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", | |
" // Turn the data on the canvas into data in the output cell.\n", | |
" var dataURL = this.canvas.toDataURL();\n", | |
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.updated_canvas_event = function() {\n", | |
" // Tell IPython that the notebook contents must change.\n", | |
" IPython.notebook.set_dirty(true);\n", | |
" this.send_message(\"ack\", {});\n", | |
" var fig = this;\n", | |
" // Wait a second, then push the new image to the DOM so\n", | |
" // that it is saved nicely (might be nice to debounce this).\n", | |
" setTimeout(function () { fig.push_to_output() }, 1000);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_toolbar = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var nav_element = $('<div/>')\n", | |
" nav_element.attr('style', 'width: 100%');\n", | |
" this.root.append(nav_element);\n", | |
"\n", | |
" // Define a callback function for later on.\n", | |
" function toolbar_event(event) {\n", | |
" return fig.toolbar_button_onclick(event['data']);\n", | |
" }\n", | |
" function toolbar_mouse_event(event) {\n", | |
" return fig.toolbar_button_onmouseover(event['data']);\n", | |
" }\n", | |
"\n", | |
" for(var toolbar_ind in mpl.toolbar_items){\n", | |
" var name = mpl.toolbar_items[toolbar_ind][0];\n", | |
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", | |
" var image = mpl.toolbar_items[toolbar_ind][2];\n", | |
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n", | |
"\n", | |
" if (!name) { continue; };\n", | |
"\n", | |
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", | |
" button.click(method_name, toolbar_event);\n", | |
" button.mouseover(tooltip, toolbar_mouse_event);\n", | |
" nav_element.append(button);\n", | |
" }\n", | |
"\n", | |
" // Add the status bar.\n", | |
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", | |
" nav_element.append(status_bar);\n", | |
" this.message = status_bar[0];\n", | |
"\n", | |
" // Add the close button to the window.\n", | |
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", | |
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", | |
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n", | |
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n", | |
" buttongrp.append(button);\n", | |
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", | |
" titlebar.prepend(buttongrp);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._root_extra_style = function(el){\n", | |
" var fig = this\n", | |
" el.on(\"remove\", function(){\n", | |
"\tfig.close_ws(fig, {});\n", | |
" });\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._canvas_extra_style = function(el){\n", | |
" // this is important to make the div 'focusable\n", | |
" el.attr('tabindex', 0)\n", | |
" // reach out to IPython and tell the keyboard manager to turn it's self\n", | |
" // off when our div gets focus\n", | |
"\n", | |
" // location in version 3\n", | |
" if (IPython.notebook.keyboard_manager) {\n", | |
" IPython.notebook.keyboard_manager.register_events(el);\n", | |
" }\n", | |
" else {\n", | |
" // location in version 2\n", | |
" IPython.keyboard_manager.register_events(el);\n", | |
" }\n", | |
"\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._key_event_extra = function(event, name) {\n", | |
" var manager = IPython.notebook.keyboard_manager;\n", | |
" if (!manager)\n", | |
" manager = IPython.keyboard_manager;\n", | |
"\n", | |
" // Check for shift+enter\n", | |
" if (event.shiftKey && event.which == 13) {\n", | |
" this.canvas_div.blur();\n", | |
" event.shiftKey = false;\n", | |
" // Send a \"J\" for go to next cell\n", | |
" event.which = 74;\n", | |
" event.keyCode = 74;\n", | |
" manager.command_mode();\n", | |
" manager.handle_keydown(event);\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_save = function(fig, msg) {\n", | |
" fig.ondownload(fig, null);\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.find_output_cell = function(html_output) {\n", | |
" // Return the cell and output element which can be found *uniquely* in the notebook.\n", | |
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", | |
" // IPython event is triggered only after the cells have been serialised, which for\n", | |
" // our purposes (turning an active figure into a static one), is too late.\n", | |
" var cells = IPython.notebook.get_cells();\n", | |
" var ncells = cells.length;\n", | |
" for (var i=0; i<ncells; i++) {\n", | |
" var cell = cells[i];\n", | |
" if (cell.cell_type === 'code'){\n", | |
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n", | |
" var data = cell.output_area.outputs[j];\n", | |
" if (data.data) {\n", | |
" // IPython >= 3 moved mimebundle to data attribute of output\n", | |
" data = data.data;\n", | |
" }\n", | |
" if (data['text/html'] == html_output) {\n", | |
" return [cell, data, j];\n", | |
" }\n", | |
" }\n", | |
" }\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"// Register the function which deals with the matplotlib target/channel.\n", | |
"// The kernel may be null if the page has been refreshed.\n", | |
"if (IPython.notebook.kernel != null) {\n", | |
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", | |
"}\n" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAG4CAYAAADVDFZ+AAAgAElEQVR4Xuydd3wUVduG79kk9CICCig9u0tHQLp0pAmIYEN5RcSKiChFpKoUqVYsiCiiooggTYr0JlKlk50NVQxIFRKBkGTn/Z1JdtlsdrPl7CaBveef1+zMc8o1z/Bd35k55yjgQQIkQAIkQAIkQAIkEFYElLDqLTtLAiRAAiRAAiRAAiQACiCTgARIgARIgARIgATCjAAFMMxuOLtLAiRAAiRAAiRAAhRA5gAJkAAJkAAJkAAJhBkBCmCY3XB2lwRIgARIgARIgAQogMwBEiABEiABEiABEggzAhTAMLvh7C4JkAAJkAAJkAAJUACZAyRAAiRAAiRAAiQQZgQogGF2w9ldEiABEiABEiABEqAAMgdIgARIgARIgARIIMwIUADD7IazuyRAAiRAAiRAAiRAAWQOkAAJkAAJkAAJkECYEaAAhtkNZ3dJgARIgARIgARIgALIHCABEiABEiABEiCBMCNAAQyzG87ukgAJkAAJkAAJkAAFkDlAAiRAAiRAAiRAAmFGgAIYZjec3SUBEiABEiABEiABCiBzgARIgARIgARIgATCjAAFMMxuOLtLAiRAAiRAAiRAAhRA5gAJkAAJkAAJkAAJhBkBCmCY3XB2lwRIgARIgARIgAQogMwBEiABEiABEiABEggzAhTAMLvh7C4JkAAJkAAJkAAJUACZAyRAAiRAAiRAAiQQZgQogGF2w9ldEiABEiABEiABEqAAMgdIgARIgARIgARIIMwIUADD7IazuyRAAiRAAiRAAiRAAWQOkAAJkAAJkAAJkECYEaAAhtkNZ3dvTQImk6kJgPEAimiaFglgvtVqHZLWW8VkMo0D0ENRFJumaQdTUlKeP3z48F92GkajsZuiKJ8BWKCq6vNOvy9UFMXoRE38m2FUFKWZxWLZ7IZmpnWZTCYbgMMAkgCIsjRN0/pZrdZV7u5MdHR0rYiIiE8A3KVpWjKA91VVnerSr64AUgCcNRgMr8fExOx0V5bJZHoOwKsAIkRZBoNhvMVi+V5cGx0dfbfBYPgQQDVN0xRFUXYD6KOq6jnXsurUqRN1+fLliYqidBDtF/UqivKaxWLZ4Y2na1m+1hsdHV3RYDCINk1SVfUdD6waGgyGSQCKA4jSNO19q9X6sbi2XLlyeaKiot4D0FrkAIB/nFmZzeaCmqYJrs0AiPNrIiMj+xw8ePC6uE+Z5Y+P98hj7t2aTyR7RQI5nwAFMOffI7aQBDIlYDKZigE4CuAxVVWXpv29Q9O0t61W69cmk6kvgBeTk5MbHzly5JLJZHoXQFNVVRuLgs1m82gA9dIE629nAXSt2GQytQfwjqqq9dLkJ90l3uoymUwpKSkp5Zzl01PnqlSpkis5OfmwpmmjrVbrFxUqVCgTGRm5TdO0HkIYjUbji0K8IiMj6xw8eDAh7e8Rqqre5aHdMyMiIuodOnToeHR0dAODwbA+JSWl6uHDh2NNJtMfmqatt1qtbwhBNJlM8wBcUlW1p2tZRqNxvMFgaJCYmNju2LFj18xm82AAL1sslrIB8PSlXoPJZNqgadodiqJ8504Aq1atentSUpJVUZR+QmorVqwYHRERsU1RlCcsFstyo9H4gaIo0QULFnxo586dSWaz+Q1N0/qqqlpatNlkMv0E4ISqqgMF95SUlNkAvrVYLAszu6fe7pG3fOCjTQIkkH0EKIDZx541k0BQCAjh0zStqdVqnW8v0GQy/ahp2mmr1drfZDJtASDEQYykoUKFCoUjIyMv2Gw2U2xs7GGz2dxYjOaZTKavxcicJwGsUaNG/mvXru3RNO1hq9UqRqMyHN7qEiOAycnJ5Y4cOXLCW+crVarU1mazzVJV9U6nfolRrOKqqv7PZDKJEavC4r/F+TTpsURFRRU/cODABefyTSZTpbS4jU5lnRZirKrqQqPR2DUpKWn1sWPH/hXn02RSnLsnTZAOaZrWXfTbaDQ2NRgM/1gsFkvaOVH2gevXrxcV8ZnxNJlMdQHMUFW1hhhZ81ZvWvlv2kdhNU075k4AjUbjA4qifK2q6h32/pnNZjGiW8hisTxpNptbpqSkHBf3W5yPjo6uYjAY9imKcltERET+5ORkS0JCQsm4uLgrbuTZY/5ERkZGe7lHmeaetxzgeRIggdARoACGji1LJoFsIRAdHV087f+4P2+xWBaZTKZ/NU17xGq1rnSWH0VR9PNOv2UqgCaT6S1FUcpYLJZnPHXMW11pr4B/dHrVOldV1TFprx3TFWs2m/uLdttHKp3E7HlVVWunSc8nERERDQ8dOnQqbVSrq6qq9b2Bj46ObmYwGJZERESYRKzL9eKVp2C1V1XV172VZTKZRgF4ULTJRToz5emm3Az1mkymmgB+EqOcycnJ4nXuUXcCaDKZxOvob1VVLep0P99VFKWNxWKp41yXeB2cK1euKZqmVbRare3SYt/VNO0nRVEeFSOgiqL8YrFY3hKv1jO7p+L/n8jsHnnLB29seZ4ESCB0BCiAoWPLkkkgywmkvf5dDGC/qqrimzfxek98O9dcVdVNTnJwRNO04VarVbzq04/MRgCrVKlSIDk5+ajBYKgbExNzLBMBzLQuo9E4w2AwzBWvJc1mc3mbzbZCUZSvVFUV3y+mO4xG43BFUUS7Wzu18am0dpvShFC82nwZwEUA1202W+fY2NhdmYGPjo6ubTAYfgUwWFXVb12uFa9bxchZ/YSEhEbuRsRcJE+8Ip5ss9max8bGHpAQwAz1pr1e3Waz2V6NjY1dn3Z/3Apg2qhurKIoYywWy4eVKlWqbrPZhNxfVVW1ir1dRqNxrqIoDwDYJWTPYrHEmc3mJzVN+1rTtBfEJwNp3yWKbzLF6Ou4zPJHCGBm98jX3MvyB4UVkgAJ6B9h8yABErgFCKS91lsI4GdVVd90kiYxAvik1WoV0mOXPfEKuGdsbKyQRftvHkesTCaTkKyOqqqKbwDt13cBIL4nFBMhxLeD96eN+Hity0lI+imK0kN8U2gymYR0iO/3xCwM0f7yot2qqorXpvphNBr7GQyGnmJUS3y7qGlafZvN9nBsbOxl+yhYZGRk1YMHD4rXuxmOtMkun2qa1sdqtYrv/BxHdHR0IYPBMEdRFENSUtKj4nvJzNIibWLEo2nSedD1Wm+v1O3Xe6rXbDZPFBN67KOQmQmgKEu8XlYUZZLNZiulKMqf4nWxoiiNVVW9z6VtitlsfkbTtLFiJFZRlHs1TRMSXsrp3oqRTzH62jCzexoREVExs3vkbz5kxpvnSIAEgkuAAhhcniyNBLKFgNlsrqFp2nJN0wY6j+qlicFGTdMWWq3WyeLvypUrl0xJSfnLYDBEO4/mZSYsJpPpt7QZwp96kSKPdRkMhnNJSUmlrVbrISfReA1ANzeSIoSmVZrMikkuYpavmLDymaZpeVVVfdpoNIpv2D5UVfVLp/LixOQG5+8hnc79T4yQaZrWWVXVPW7kb7WiKL9bLJb+7ia4OF9vMpm+EM3JnTt3l3379onRxwyHLwKYJn9u6zWZTGJij/g3WszKFf8rOIjZ0xtUVRXynelhMplmaZp23mq1vmYymR632WybYmNjTzrxOGuz2cTr/INihrGqqrc5cRav38V9aWIymTzeU5vNVjGze5RZbGYjyd76xvMkQALyBCiA8gxZAglkKwHxqjApKWm/kBtVVWe5NsZsNvfWNG2wwWBoFBMTc8FoNL6vKEo151eraaLocQTQbDb/l5KS0io2NvaPzDrroa6qYnSwcuXK1VJSUranzUDeXr58+TujoqLWKYoyzWKxfOBabvPmzSPj4uJiNE37UCxnkjbJ43cA4ju/TSaT6VtN0wpFRUU9IpYrSZvZuzYiIqLGoUOHrM7lGY3GykLuADRUVTXGtS5RlqIoSZl932iPSevja9evX79XzAL2xMMXAfSn3sxGAKOjo3MbDIY/DQZDn5iYmHVpLJYqitJQTFYxmUxLxGvyggULPiNmAUdHR7cxGAwLk5OTzWJCjtlsXgFgk8ViGV29evUiiYmJ6zRN+85qtU7KLH+83SNfcy9bHyBWTgJhSoACGKY3nt2+dQiI0R0xyxeAal9bL61328RIWZrciYkKvcV/a5r2p81me+7w4cNnxN9Go3GHoij5AJRMG/kSr0+PqKraUZxPW2JErHUXbbFYxKhUpkfapAi3dZnN5kc0TRsBQKxVKF4di9nJ4vs/8d8ZjjRxmw6gjPjGT9O0MVardaa4ME1U3gcglrNJUhTlqjivquovbiT4c03TngBgHwHT1yAEMDUyMnJ+cnJyHADxbWNi2u/6efv3cyaTyTEL2GQyCYEUo2X2mcb6tYqiPCXWAsyMp/Ms4CpVqpRITk7+G8BxT/U698NVANNey9dSVfVZcZ3ZbH5Q0zSx3mMuTdOuRUREDIyJiRFiJ0ZTxUxxIdn1FEVJ1jRNzPYdZf8sIG1UWIxqinUQxSjj/Lvuumv4unXrxDedIj6z/BFy7fYeeYv1lks8TwIkEDoCFMDQsWXJJEACJEACJEACJJAjCVAAnW5L2gK5LQCI/6/3F1VVp+TIu8ZGkQAJkAAJkAAJkIAEAQpgGjyj0dhRUZQhaR+ji50A1ttstn7elpSQYM9QEiABEiABEiABEsgWAhTAGwI4SFGUkk5LLozSNC3CarWOzJY7w0pJgARIgARIgARIIEQEKIA3BFBskj4lISGhofipQIECYtmLGPsH1iHiz2JJgARIgARIgARIIMsJUACdkIutpMSWTpqm/QPgLwAGVVX7erorlSpVKpqSktI2IiLiWHJyssflILL8rrJCEiABEiABEiABjwQiIyPzpKSklIuIiFgRExNzPhxRUQA93HWxVprY3cC+eK67y4xG4xOKonwfjonDPpMACZAACZDAzU4gbZckx5aYN3t//Gk/BTCNltlsNmua9r6qqg9UrVq1SFJS0q6UlJQmhw8fFiOBbo9KlSo1stlsmydNmoSKFcWC+DxIgARIgARIgARyOoHDhw9j0KBBMBgMjWNiYsQi8WF3UACdbrnJZJqiaVozRVGiAExxt6uCc4akbSq/c/78+WKx3LBLHnaYBEiABEiABG5GAgcOHEDXrl1hs9nqhOtqHxRAicylAErAYygJkAAJkAAJZBMBCmDqBuM8AiRAAQwQHMNIgARIgARIIBsJUAApgFLpRwGUwsdgEiABEiABEsgWAhRACqBU4lEApfAxmARIgARIgASyhQAFkAIolXgUQCl8DCYBEiABEiCBbCFAAaQASiUeBVAKH4NJgARIgARIIFsIUAApgFKJRwGUwsdgEiABEiABEsgWAhRACqBU4lEApfAxmARIgARIgASyhQAFkAIolXgUQCl8DCYBEiABEiCBbCFAAaQASiUeBVAKH4NJgARIgARIIFsIUAApgFKJFywB/Dc+EX+fTUDVCkWl2sNgEiABEiABEiAB7wQogBRA71mSyRXBEMBr15PxyJu/6rVMebUpTGWKSLWJwSRAAiRAAiRAApkToABSAKWekWAI4K6YMxg1fYvejgFP1EbzOqWl2sRgEiABEiABEiABCqC3HOBewN4IhXgEcM2OE3j/hz/1Wl5/ojZaUAAl7ghDSYAESIAESMA7AY4AcgTQe5aEWAAXbTiM6Qv367U836U6OjWpINUmBpMACZAACZAACXAE0FsOcATQG6EQC+APK2Iw+zeLXssTbczo3raSRIsYSgIkQAIkQAIk4I0ARwA5AugtRzI9H4xvAKcv2IdFG4/o9XRuUgHPdaku1SYGkwAJkAAJkAAJcATQWw5wBNAboRCPAL7/wy6s2fGXXkuLOnfj9SfqSLSIoSRAAiRAAiRAAt4IcASQI4DeciTkI4BjvtqKrQdO6/XUrXInRvZuINUmBpMACZAACZAACXAE0FsOcATQG6EQjwAO+WQTDhw5r9dSudztmPhKE4kWMZQESIAESIAESMAbAY4AcgTQW46EfATwlclr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WCyfeTyexk6n8/jJkycr7dix41ROG4mh34aSJO038DiGBBAIlA6n03kJgImSJF2qoQ32AGgk/iVusVgmuN3uH0SMmDMFQLTblwStj0CwAAZGOxyOdDG07vF4nCrfA9tCH+oCS6empja3Wq3TfT5fTzHKwO8ignB13iq4LYLD+V2cJ0IB1Jlconh6errD6/V+nZWV1WLLli1nnU7nAr/f/7zH41lo4HYM0UDA5XLd6fP5LvJ4PE8DsDgcjs+tVusvfr+/n81mu379+vXiv3KjAJySJGm40+n82GKxiNXZ77tcruv9fv+AoAUkGp7KImoE0tLS6vh8PjEHUKwCFotAJD1t4HQ6HwTQWpKkexs0aFDV6/UuS0xMbLB27doTJK6PQGBb5MyBneTz+TpmZmaeyTnbvJUkSbeF+h7YFvp4q5VOSUkpWbp06TU2m63b+vXr/84pY3U6nR5+F+b56rmDWlukpaU5fT7fm/wu8pOkAOrJroCyOb9cewHwAvhGkqQhBm/FMA0ExIedlJT0rt/vF3ObxFYXKyVJejItLe0qn88n5o6dFfPIjh07ds+uXbtOpqam1rBarWIuVKmcn4k5mm4Nj2KREATEEPvp06dnWa3WRL/fL1Y8LrFYLOu8Xq/4u/Fa26Bt27b2Xbt2vWuxWJrkbFcyzO12iyF9XhoJhGoLv9//r8Vi6eHz+Y5ardZjVqu19/r163eH+h7YFhqBF1AsR6LFVlRrle13APzk8/mW8Lswz1fPHUK1heg04HdBAdSTSyxLAiRAAiRAAiRAAhckAfYAXpDNypciARIgARIgARIggdAEKIDMDhIgARIgARIgARKIMwIUwDhrcL4uCZAACZAACZAACVAAmQMkQAIkQAIkQAIkEGcEKIBx1uB8XRIgARIgARIgARKgADIHSIAESIAESIAESCDOCFAA46zB+bokQAIkQAIkQAIkQAFkDpAACZAACZAACZBAnBGgAMZZg/N1SYAESIAESIAESIACyBwgARIgARIgARIggTgjQAGMswbn65IACZAACZAACZAABZA5QAIkQAIkQAIkQAJxRoACGGcNztclARIgARIgARIgAQogc4AESIAESIAESIAE4owABTDOGpyvSwIkQAIkQAIkQAIUQOYACZAACZAACZAACcQZAQpgnDU4X5cESIAESIAESIAEKIDMARIgARIgARIgARKIMwIUwDhrcL4uCZAACZAACZAACVAAmQMkQAIkQAIkQAIkEGcEKIBx1uB8XRIgARIgARIgARKgADIHSIAESIAESIAESCDOCFAA46zB+bokQAIkQAIkQAIkQAFkDpAACZAACZAACZBAnBGgAMZZg/N1SYAESIAESIAESIACyBwgARIgARIgARIggTgjQAGMswbn65IACZAACZAACZDA/wMFUZ0Aup08UAAAAABJRU5ErkJggg==\">" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"/* Put everything inside the global mpl namespace */\n", | |
"window.mpl = {};\n", | |
"\n", | |
"mpl.get_websocket_type = function() {\n", | |
" if (typeof(WebSocket) !== 'undefined') {\n", | |
" return WebSocket;\n", | |
" } else if (typeof(MozWebSocket) !== 'undefined') {\n", | |
" return MozWebSocket;\n", | |
" } else {\n", | |
" alert('Your browser does not have WebSocket support.' +\n", | |
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", | |
" 'Firefox 4 and 5 are also supported but you ' +\n", | |
" 'have to enable WebSockets in about:config.');\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", | |
" this.id = figure_id;\n", | |
"\n", | |
" this.ws = websocket;\n", | |
"\n", | |
" this.supports_binary = (this.ws.binaryType != undefined);\n", | |
"\n", | |
" if (!this.supports_binary) {\n", | |
" var warnings = document.getElementById(\"mpl-warnings\");\n", | |
" if (warnings) {\n", | |
" warnings.style.display = 'block';\n", | |
" warnings.textContent = (\n", | |
" \"This browser does not support binary websocket messages. \" +\n", | |
" \"Performance may be slow.\");\n", | |
" }\n", | |
" }\n", | |
"\n", | |
" this.imageObj = new Image();\n", | |
"\n", | |
" this.context = undefined;\n", | |
" this.message = undefined;\n", | |
" this.canvas = undefined;\n", | |
" this.rubberband_canvas = undefined;\n", | |
" this.rubberband_context = undefined;\n", | |
" this.format_dropdown = undefined;\n", | |
"\n", | |
" this.image_mode = 'full';\n", | |
"\n", | |
" this.root = $('<div/>');\n", | |
" this._root_extra_style(this.root)\n", | |
" this.root.attr('style', 'display: inline-block');\n", | |
"\n", | |
" $(parent_element).append(this.root);\n", | |
"\n", | |
" this._init_header(this);\n", | |
" this._init_canvas(this);\n", | |
" this._init_toolbar(this);\n", | |
"\n", | |
" var fig = this;\n", | |
"\n", | |
" this.waiting = false;\n", | |
"\n", | |
" this.ws.onopen = function () {\n", | |
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", | |
" fig.send_message(\"send_image_mode\", {});\n", | |
" fig.send_message(\"refresh\", {});\n", | |
" }\n", | |
"\n", | |
" this.imageObj.onload = function() {\n", | |
" if (fig.image_mode == 'full') {\n", | |
" // Full images could contain transparency (where diff images\n", | |
" // almost always do), so we need to clear the canvas so that\n", | |
" // there is no ghosting.\n", | |
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", | |
" }\n", | |
" fig.context.drawImage(fig.imageObj, 0, 0);\n", | |
" };\n", | |
"\n", | |
" this.imageObj.onunload = function() {\n", | |
" this.ws.close();\n", | |
" }\n", | |
"\n", | |
" this.ws.onmessage = this._make_on_message_function(this);\n", | |
"\n", | |
" this.ondownload = ondownload;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_header = function() {\n", | |
" var titlebar = $(\n", | |
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", | |
" 'ui-helper-clearfix\"/>');\n", | |
" var titletext = $(\n", | |
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", | |
" 'text-align: center; padding: 3px;\"/>');\n", | |
" titlebar.append(titletext)\n", | |
" this.root.append(titlebar);\n", | |
" this.header = titletext[0];\n", | |
"}\n", | |
"\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", | |
"\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", | |
"\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_canvas = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var canvas_div = $('<div/>');\n", | |
"\n", | |
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", | |
"\n", | |
" function canvas_keyboard_event(event) {\n", | |
" return fig.key_event(event, event['data']);\n", | |
" }\n", | |
"\n", | |
" canvas_div.keydown('key_press', canvas_keyboard_event);\n", | |
" canvas_div.keyup('key_release', canvas_keyboard_event);\n", | |
" this.canvas_div = canvas_div\n", | |
" this._canvas_extra_style(canvas_div)\n", | |
" this.root.append(canvas_div);\n", | |
"\n", | |
" var canvas = $('<canvas/>');\n", | |
" canvas.addClass('mpl-canvas');\n", | |
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", | |
"\n", | |
" this.canvas = canvas[0];\n", | |
" this.context = canvas[0].getContext(\"2d\");\n", | |
"\n", | |
" var rubberband = $('<canvas/>');\n", | |
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", | |
"\n", | |
" var pass_mouse_events = true;\n", | |
"\n", | |
" canvas_div.resizable({\n", | |
" start: function(event, ui) {\n", | |
" pass_mouse_events = false;\n", | |
" },\n", | |
" resize: function(event, ui) {\n", | |
" fig.request_resize(ui.size.width, ui.size.height);\n", | |
" },\n", | |
" stop: function(event, ui) {\n", | |
" pass_mouse_events = true;\n", | |
" fig.request_resize(ui.size.width, ui.size.height);\n", | |
" },\n", | |
" });\n", | |
"\n", | |
" function mouse_event_fn(event) {\n", | |
" if (pass_mouse_events)\n", | |
" return fig.mouse_event(event, event['data']);\n", | |
" }\n", | |
"\n", | |
" rubberband.mousedown('button_press', mouse_event_fn);\n", | |
" rubberband.mouseup('button_release', mouse_event_fn);\n", | |
" // Throttle sequential mouse events to 1 every 20ms.\n", | |
" rubberband.mousemove('motion_notify', mouse_event_fn);\n", | |
"\n", | |
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n", | |
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n", | |
"\n", | |
" canvas_div.on(\"wheel\", function (event) {\n", | |
" event = event.originalEvent;\n", | |
" event['data'] = 'scroll'\n", | |
" if (event.deltaY < 0) {\n", | |
" event.step = 1;\n", | |
" } else {\n", | |
" event.step = -1;\n", | |
" }\n", | |
" mouse_event_fn(event);\n", | |
" });\n", | |
"\n", | |
" canvas_div.append(canvas);\n", | |
" canvas_div.append(rubberband);\n", | |
"\n", | |
" this.rubberband = rubberband;\n", | |
" this.rubberband_canvas = rubberband[0];\n", | |
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n", | |
" this.rubberband_context.strokeStyle = \"#000000\";\n", | |
"\n", | |
" this._resize_canvas = function(width, height) {\n", | |
" // Keep the size of the canvas, canvas container, and rubber band\n", | |
" // canvas in synch.\n", | |
" canvas_div.css('width', width)\n", | |
" canvas_div.css('height', height)\n", | |
"\n", | |
" canvas.attr('width', width);\n", | |
" canvas.attr('height', height);\n", | |
"\n", | |
" rubberband.attr('width', width);\n", | |
" rubberband.attr('height', height);\n", | |
" }\n", | |
"\n", | |
" // Set the figure to an initial 600x600px, this will subsequently be updated\n", | |
" // upon first draw.\n", | |
" this._resize_canvas(600, 600);\n", | |
"\n", | |
" // Disable right mouse context menu.\n", | |
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", | |
" return false;\n", | |
" });\n", | |
"\n", | |
" function set_focus () {\n", | |
" canvas.focus();\n", | |
" canvas_div.focus();\n", | |
" }\n", | |
"\n", | |
" window.setTimeout(set_focus, 100);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_toolbar = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var nav_element = $('<div/>')\n", | |
" nav_element.attr('style', 'width: 100%');\n", | |
" this.root.append(nav_element);\n", | |
"\n", | |
" // Define a callback function for later on.\n", | |
" function toolbar_event(event) {\n", | |
" return fig.toolbar_button_onclick(event['data']);\n", | |
" }\n", | |
" function toolbar_mouse_event(event) {\n", | |
" return fig.toolbar_button_onmouseover(event['data']);\n", | |
" }\n", | |
"\n", | |
" for(var toolbar_ind in mpl.toolbar_items) {\n", | |
" var name = mpl.toolbar_items[toolbar_ind][0];\n", | |
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", | |
" var image = mpl.toolbar_items[toolbar_ind][2];\n", | |
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n", | |
"\n", | |
" if (!name) {\n", | |
" // put a spacer in here.\n", | |
" continue;\n", | |
" }\n", | |
" var button = $('<button/>');\n", | |
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", | |
" 'ui-button-icon-only');\n", | |
" button.attr('role', 'button');\n", | |
" button.attr('aria-disabled', 'false');\n", | |
" button.click(method_name, toolbar_event);\n", | |
" button.mouseover(tooltip, toolbar_mouse_event);\n", | |
"\n", | |
" var icon_img = $('<span/>');\n", | |
" icon_img.addClass('ui-button-icon-primary ui-icon');\n", | |
" icon_img.addClass(image);\n", | |
" icon_img.addClass('ui-corner-all');\n", | |
"\n", | |
" var tooltip_span = $('<span/>');\n", | |
" tooltip_span.addClass('ui-button-text');\n", | |
" tooltip_span.html(tooltip);\n", | |
"\n", | |
" button.append(icon_img);\n", | |
" button.append(tooltip_span);\n", | |
"\n", | |
" nav_element.append(button);\n", | |
" }\n", | |
"\n", | |
" var fmt_picker_span = $('<span/>');\n", | |
"\n", | |
" var fmt_picker = $('<select/>');\n", | |
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", | |
" fmt_picker_span.append(fmt_picker);\n", | |
" nav_element.append(fmt_picker_span);\n", | |
" this.format_dropdown = fmt_picker[0];\n", | |
"\n", | |
" for (var ind in mpl.extensions) {\n", | |
" var fmt = mpl.extensions[ind];\n", | |
" var option = $(\n", | |
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", | |
" fmt_picker.append(option)\n", | |
" }\n", | |
"\n", | |
" // Add hover states to the ui-buttons\n", | |
" $( \".ui-button\" ).hover(\n", | |
" function() { $(this).addClass(\"ui-state-hover\");},\n", | |
" function() { $(this).removeClass(\"ui-state-hover\");}\n", | |
" );\n", | |
"\n", | |
" var status_bar = $('<span class=\"mpl-message\"/>');\n", | |
" nav_element.append(status_bar);\n", | |
" this.message = status_bar[0];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", | |
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", | |
" // which will in turn request a refresh of the image.\n", | |
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.send_message = function(type, properties) {\n", | |
" properties['type'] = type;\n", | |
" properties['figure_id'] = this.id;\n", | |
" this.ws.send(JSON.stringify(properties));\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.send_draw_message = function() {\n", | |
" if (!this.waiting) {\n", | |
" this.waiting = true;\n", | |
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype.handle_save = function(fig, msg) {\n", | |
" var format_dropdown = fig.format_dropdown;\n", | |
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", | |
" fig.ondownload(fig, format);\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n", | |
" var size = msg['size'];\n", | |
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", | |
" fig._resize_canvas(size[0], size[1]);\n", | |
" fig.send_message(\"refresh\", {});\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", | |
" var x0 = msg['x0'];\n", | |
" var y0 = fig.canvas.height - msg['y0'];\n", | |
" var x1 = msg['x1'];\n", | |
" var y1 = fig.canvas.height - msg['y1'];\n", | |
" x0 = Math.floor(x0) + 0.5;\n", | |
" y0 = Math.floor(y0) + 0.5;\n", | |
" x1 = Math.floor(x1) + 0.5;\n", | |
" y1 = Math.floor(y1) + 0.5;\n", | |
" var min_x = Math.min(x0, x1);\n", | |
" var min_y = Math.min(y0, y1);\n", | |
" var width = Math.abs(x1 - x0);\n", | |
" var height = Math.abs(y1 - y0);\n", | |
"\n", | |
" fig.rubberband_context.clearRect(\n", | |
" 0, 0, fig.canvas.width, fig.canvas.height);\n", | |
"\n", | |
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", | |
" // Updates the figure title.\n", | |
" fig.header.textContent = msg['label'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", | |
" var cursor = msg['cursor'];\n", | |
" switch(cursor)\n", | |
" {\n", | |
" case 0:\n", | |
" cursor = 'pointer';\n", | |
" break;\n", | |
" case 1:\n", | |
" cursor = 'default';\n", | |
" break;\n", | |
" case 2:\n", | |
" cursor = 'crosshair';\n", | |
" break;\n", | |
" case 3:\n", | |
" cursor = 'move';\n", | |
" break;\n", | |
" }\n", | |
" fig.rubberband_canvas.style.cursor = cursor;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_message = function(fig, msg) {\n", | |
" fig.message.textContent = msg['message'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n", | |
" // Request the server to send over a new figure.\n", | |
" fig.send_draw_message();\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", | |
" fig.image_mode = msg['mode'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.updated_canvas_event = function() {\n", | |
" // Called whenever the canvas gets updated.\n", | |
" this.send_message(\"ack\", {});\n", | |
"}\n", | |
"\n", | |
"// A function to construct a web socket function for onmessage handling.\n", | |
"// Called in the figure constructor.\n", | |
"mpl.figure.prototype._make_on_message_function = function(fig) {\n", | |
" return function socket_on_message(evt) {\n", | |
" if (evt.data instanceof Blob) {\n", | |
" /* FIXME: We get \"Resource interpreted as Image but\n", | |
" * transferred with MIME type text/plain:\" errors on\n", | |
" * Chrome. But how to set the MIME type? It doesn't seem\n", | |
" * to be part of the websocket stream */\n", | |
" evt.data.type = \"image/png\";\n", | |
"\n", | |
" /* Free the memory for the previous frames */\n", | |
" if (fig.imageObj.src) {\n", | |
" (window.URL || window.webkitURL).revokeObjectURL(\n", | |
" fig.imageObj.src);\n", | |
" }\n", | |
"\n", | |
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", | |
" evt.data);\n", | |
" fig.updated_canvas_event();\n", | |
" fig.waiting = false;\n", | |
" return;\n", | |
" }\n", | |
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", | |
" fig.imageObj.src = evt.data;\n", | |
" fig.updated_canvas_event();\n", | |
" fig.waiting = false;\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" var msg = JSON.parse(evt.data);\n", | |
" var msg_type = msg['type'];\n", | |
"\n", | |
" // Call the \"handle_{type}\" callback, which takes\n", | |
" // the figure and JSON message as its only arguments.\n", | |
" try {\n", | |
" var callback = fig[\"handle_\" + msg_type];\n", | |
" } catch (e) {\n", | |
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" if (callback) {\n", | |
" try {\n", | |
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", | |
" callback(fig, msg);\n", | |
" } catch (e) {\n", | |
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", | |
" }\n", | |
" }\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", | |
"mpl.findpos = function(e) {\n", | |
" //this section is from http://www.quirksmode.org/js/events_properties.html\n", | |
" var targ;\n", | |
" if (!e)\n", | |
" e = window.event;\n", | |
" if (e.target)\n", | |
" targ = e.target;\n", | |
" else if (e.srcElement)\n", | |
" targ = e.srcElement;\n", | |
" if (targ.nodeType == 3) // defeat Safari bug\n", | |
" targ = targ.parentNode;\n", | |
"\n", | |
" // jQuery normalizes the pageX and pageY\n", | |
" // pageX,Y are the mouse positions relative to the document\n", | |
" // offset() returns the position of the element relative to the document\n", | |
" var x = e.pageX - $(targ).offset().left;\n", | |
" var y = e.pageY - $(targ).offset().top;\n", | |
"\n", | |
" return {\"x\": x, \"y\": y};\n", | |
"};\n", | |
"\n", | |
"/*\n", | |
" * return a copy of an object with only non-object keys\n", | |
" * we need this to avoid circular references\n", | |
" * http://stackoverflow.com/a/24161582/3208463\n", | |
" */\n", | |
"function simpleKeys (original) {\n", | |
" return Object.keys(original).reduce(function (obj, key) {\n", | |
" if (typeof original[key] !== 'object')\n", | |
" obj[key] = original[key]\n", | |
" return obj;\n", | |
" }, {});\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.mouse_event = function(event, name) {\n", | |
" var canvas_pos = mpl.findpos(event)\n", | |
"\n", | |
" if (name === 'button_press')\n", | |
" {\n", | |
" this.canvas.focus();\n", | |
" this.canvas_div.focus();\n", | |
" }\n", | |
"\n", | |
" var x = canvas_pos.x;\n", | |
" var y = canvas_pos.y;\n", | |
"\n", | |
" this.send_message(name, {x: x, y: y, button: event.button,\n", | |
" step: event.step,\n", | |
" guiEvent: simpleKeys(event)});\n", | |
"\n", | |
" /* This prevents the web browser from automatically changing to\n", | |
" * the text insertion cursor when the button is pressed. We want\n", | |
" * to control all of the cursor setting manually through the\n", | |
" * 'cursor' event from matplotlib */\n", | |
" event.preventDefault();\n", | |
" return false;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._key_event_extra = function(event, name) {\n", | |
" // Handle any extra behaviour associated with a key event\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.key_event = function(event, name) {\n", | |
"\n", | |
" // Prevent repeat events\n", | |
" if (name == 'key_press')\n", | |
" {\n", | |
" if (event.which === this._key)\n", | |
" return;\n", | |
" else\n", | |
" this._key = event.which;\n", | |
" }\n", | |
" if (name == 'key_release')\n", | |
" this._key = null;\n", | |
"\n", | |
" var value = '';\n", | |
" if (event.ctrlKey && event.which != 17)\n", | |
" value += \"ctrl+\";\n", | |
" if (event.altKey && event.which != 18)\n", | |
" value += \"alt+\";\n", | |
" if (event.shiftKey && event.which != 16)\n", | |
" value += \"shift+\";\n", | |
"\n", | |
" value += 'k';\n", | |
" value += event.which.toString();\n", | |
"\n", | |
" this._key_event_extra(event, name);\n", | |
"\n", | |
" this.send_message(name, {key: value,\n", | |
" guiEvent: simpleKeys(event)});\n", | |
" return false;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", | |
" if (name == 'download') {\n", | |
" this.handle_save(this, null);\n", | |
" } else {\n", | |
" this.send_message(\"toolbar_button\", {name: name});\n", | |
" }\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", | |
" this.message.textContent = tooltip;\n", | |
"};\n", | |
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", | |
"\n", | |
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", | |
"\n", | |
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", | |
" // Create a \"websocket\"-like object which calls the given IPython comm\n", | |
" // object with the appropriate methods. Currently this is a non binary\n", | |
" // socket, so there is still some room for performance tuning.\n", | |
" var ws = {};\n", | |
"\n", | |
" ws.close = function() {\n", | |
" comm.close()\n", | |
" };\n", | |
" ws.send = function(m) {\n", | |
" //console.log('sending', m);\n", | |
" comm.send(m);\n", | |
" };\n", | |
" // Register the callback with on_msg.\n", | |
" comm.on_msg(function(msg) {\n", | |
" //console.log('receiving', msg['content']['data'], msg);\n", | |
" // Pass the mpl event to the overriden (by mpl) onmessage function.\n", | |
" ws.onmessage(msg['content']['data'])\n", | |
" });\n", | |
" return ws;\n", | |
"}\n", | |
"\n", | |
"mpl.mpl_figure_comm = function(comm, msg) {\n", | |
" // This is the function which gets called when the mpl process\n", | |
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n", | |
"\n", | |
" var id = msg.content.data.id;\n", | |
" // Get hold of the div created by the display call when the Comm\n", | |
" // socket was opened in Python.\n", | |
" var element = $(\"#\" + id);\n", | |
" var ws_proxy = comm_websocket_adapter(comm)\n", | |
"\n", | |
" function ondownload(figure, format) {\n", | |
" window.open(figure.imageObj.src);\n", | |
" }\n", | |
"\n", | |
" var fig = new mpl.figure(id, ws_proxy,\n", | |
" ondownload,\n", | |
" element.get(0));\n", | |
"\n", | |
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", | |
" // web socket which is closed, not our websocket->open comm proxy.\n", | |
" ws_proxy.onopen();\n", | |
"\n", | |
" fig.parent_element = element.get(0);\n", | |
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", | |
" if (!fig.cell_info) {\n", | |
" console.error(\"Failed to find cell for figure\", id, fig);\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" var output_index = fig.cell_info[2]\n", | |
" var cell = fig.cell_info[0];\n", | |
"\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.handle_close = function(fig, msg) {\n", | |
" fig.root.unbind('remove')\n", | |
"\n", | |
" // Update the output cell to use the data from the current canvas.\n", | |
" fig.push_to_output();\n", | |
" var dataURL = fig.canvas.toDataURL();\n", | |
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n", | |
" // the notebook keyboard shortcuts fail.\n", | |
" IPython.keyboard_manager.enable()\n", | |
" $(fig.parent_element).html('<img src=\"' + dataURL + '\">');\n", | |
" fig.close_ws(fig, msg);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.close_ws = function(fig, msg){\n", | |
" fig.send_message('closing', msg);\n", | |
" // fig.ws.close()\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", | |
" // Turn the data on the canvas into data in the output cell.\n", | |
" var dataURL = this.canvas.toDataURL();\n", | |
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.updated_canvas_event = function() {\n", | |
" // Tell IPython that the notebook contents must change.\n", | |
" IPython.notebook.set_dirty(true);\n", | |
" this.send_message(\"ack\", {});\n", | |
" var fig = this;\n", | |
" // Wait a second, then push the new image to the DOM so\n", | |
" // that it is saved nicely (might be nice to debounce this).\n", | |
" setTimeout(function () { fig.push_to_output() }, 1000);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_toolbar = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var nav_element = $('<div/>')\n", | |
" nav_element.attr('style', 'width: 100%');\n", | |
" this.root.append(nav_element);\n", | |
"\n", | |
" // Define a callback function for later on.\n", | |
" function toolbar_event(event) {\n", | |
" return fig.toolbar_button_onclick(event['data']);\n", | |
" }\n", | |
" function toolbar_mouse_event(event) {\n", | |
" return fig.toolbar_button_onmouseover(event['data']);\n", | |
" }\n", | |
"\n", | |
" for(var toolbar_ind in mpl.toolbar_items){\n", | |
" var name = mpl.toolbar_items[toolbar_ind][0];\n", | |
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", | |
" var image = mpl.toolbar_items[toolbar_ind][2];\n", | |
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n", | |
"\n", | |
" if (!name) { continue; };\n", | |
"\n", | |
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", | |
" button.click(method_name, toolbar_event);\n", | |
" button.mouseover(tooltip, toolbar_mouse_event);\n", | |
" nav_element.append(button);\n", | |
" }\n", | |
"\n", | |
" // Add the status bar.\n", | |
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", | |
" nav_element.append(status_bar);\n", | |
" this.message = status_bar[0];\n", | |
"\n", | |
" // Add the close button to the window.\n", | |
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", | |
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", | |
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n", | |
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n", | |
" buttongrp.append(button);\n", | |
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", | |
" titlebar.prepend(buttongrp);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._root_extra_style = function(el){\n", | |
" var fig = this\n", | |
" el.on(\"remove\", function(){\n", | |
"\tfig.close_ws(fig, {});\n", | |
" });\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._canvas_extra_style = function(el){\n", | |
" // this is important to make the div 'focusable\n", | |
" el.attr('tabindex', 0)\n", | |
" // reach out to IPython and tell the keyboard manager to turn it's self\n", | |
" // off when our div gets focus\n", | |
"\n", | |
" // location in version 3\n", | |
" if (IPython.notebook.keyboard_manager) {\n", | |
" IPython.notebook.keyboard_manager.register_events(el);\n", | |
" }\n", | |
" else {\n", | |
" // location in version 2\n", | |
" IPython.keyboard_manager.register_events(el);\n", | |
" }\n", | |
"\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._key_event_extra = function(event, name) {\n", | |
" var manager = IPython.notebook.keyboard_manager;\n", | |
" if (!manager)\n", | |
" manager = IPython.keyboard_manager;\n", | |
"\n", | |
" // Check for shift+enter\n", | |
" if (event.shiftKey && event.which == 13) {\n", | |
" this.canvas_div.blur();\n", | |
" event.shiftKey = false;\n", | |
" // Send a \"J\" for go to next cell\n", | |
" event.which = 74;\n", | |
" event.keyCode = 74;\n", | |
" manager.command_mode();\n", | |
" manager.handle_keydown(event);\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_save = function(fig, msg) {\n", | |
" fig.ondownload(fig, null);\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.find_output_cell = function(html_output) {\n", | |
" // Return the cell and output element which can be found *uniquely* in the notebook.\n", | |
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", | |
" // IPython event is triggered only after the cells have been serialised, which for\n", | |
" // our purposes (turning an active figure into a static one), is too late.\n", | |
" var cells = IPython.notebook.get_cells();\n", | |
" var ncells = cells.length;\n", | |
" for (var i=0; i<ncells; i++) {\n", | |
" var cell = cells[i];\n", | |
" if (cell.cell_type === 'code'){\n", | |
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n", | |
" var data = cell.output_area.outputs[j];\n", | |
" if (data.data) {\n", | |
" // IPython >= 3 moved mimebundle to data attribute of output\n", | |
" data = data.data;\n", | |
" }\n", | |
" if (data['text/html'] == html_output) {\n", | |
" return [cell, data, j];\n", | |
" }\n", | |
" }\n", | |
" }\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"// Register the function which deals with the matplotlib target/channel.\n", | |
"// The kernel may be null if the page has been refreshed.\n", | |
"if (IPython.notebook.kernel != null) {\n", | |
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", | |
"}\n" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<img src=\"data:image/png;base64,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UQAl4DGUBEiABEiABDKJAAWQAiiVehRAKXwMJgESIAESIIFMIUABpABKJR4FUAofg0mABEiABEggUwhQACmAUolHAZTCx2ASIAESIAESyBQCFEAKoFTiUQCl8DGYBEiABEiABDKFAAWQAiiVeBRAKXwMJgESIAESIIFMIUABpABKJR4FUAofg0mABEiABEggUwhQACmAUolHAZTCx2ASIAESIAESyBQCFEAKoFTiUQCl8DGYBEiABEiABDKFAAWQAiiVeBRAKXwMJgESIAESIIFMIUABpABKJR4FUAofg0mABEiABEggUwhQACmAUolHAZTCx2ASIAESIAESyBQCFEAKoFTiUQCl8DGYBEiABEiABDKFAAWQAiiVeBRAKXwMJgESIAESIIFMIUABpABKJR4FUAofg0mABEiABEggUwhQACmAUolHAZTCx2ASIAESIAESyBQCFEAKoFTiUQCl8DGYBEiABEiABDKFAAWQAiiVeMESwG3aSbz59XbMeLoZihbMIzUmBpMACZAACZAACXgnQAGkAEo9I8ESwO7DlhjjqF65qCGBLCRAAiRAAiRAAqEjQAGkAEplVzAE8NqNRNw7erkxjgiTgu9m95AaE4NJgARIgARIgAQ4A5heDijpVeDvngkEQwAPn7yEp2auMTopVjA3PhzfkchJgARIgARIgARCSIAzgJwBlEqvYAjgnv1nMWLeb8Y4cuWMwNcvdZMaE4NJgARIgARIgAQ4A5heDnAGMD1CXn4PhgBu2nkMUz/809HL4pndkSPSJDEqhpIACZAACZAACXgjwBlAzgBKPSHBEMBVmw7i9a+2OcbxycSOKByVW2pcDCYBEiABEiABEvBMgAJIAZR6PoIhgN+sseKj5bsd45g/og3KlYiSGheDSYAESIAESIAEKIDecoCvgCWekGAI4IfLdmHx2r2OUcwa3BxVKxWRGBVDSYAESIAESIAEvBHgDCBnAKWekGAI4GtfbMXqv/6FogC6Dozv1wgNqpWUGheDSYAESIAESIAEOAPIGcAQPQXBEMCpH2zCpl3HUaZ4Phw5dQVDH6iLNvXLhWjEbJYESIAESIAESIAzgJwBlHoKgiGAL7y2DpZ/z6FR9ZKGCPbvVQM9mleRGheDSYAESIAESIAEOAPIGcAQPQXBEMB+U3/CyXPXcFfraHzzy1480MGMBzvGhmjEbJYE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\">" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"/* Put everything inside the global mpl namespace */\n", | |
"window.mpl = {};\n", | |
"\n", | |
"mpl.get_websocket_type = function() {\n", | |
" if (typeof(WebSocket) !== 'undefined') {\n", | |
" return WebSocket;\n", | |
" } else if (typeof(MozWebSocket) !== 'undefined') {\n", | |
" return MozWebSocket;\n", | |
" } else {\n", | |
" alert('Your browser does not have WebSocket support.' +\n", | |
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", | |
" 'Firefox 4 and 5 are also supported but you ' +\n", | |
" 'have to enable WebSockets in about:config.');\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", | |
" this.id = figure_id;\n", | |
"\n", | |
" this.ws = websocket;\n", | |
"\n", | |
" this.supports_binary = (this.ws.binaryType != undefined);\n", | |
"\n", | |
" if (!this.supports_binary) {\n", | |
" var warnings = document.getElementById(\"mpl-warnings\");\n", | |
" if (warnings) {\n", | |
" warnings.style.display = 'block';\n", | |
" warnings.textContent = (\n", | |
" \"This browser does not support binary websocket messages. \" +\n", | |
" \"Performance may be slow.\");\n", | |
" }\n", | |
" }\n", | |
"\n", | |
" this.imageObj = new Image();\n", | |
"\n", | |
" this.context = undefined;\n", | |
" this.message = undefined;\n", | |
" this.canvas = undefined;\n", | |
" this.rubberband_canvas = undefined;\n", | |
" this.rubberband_context = undefined;\n", | |
" this.format_dropdown = undefined;\n", | |
"\n", | |
" this.image_mode = 'full';\n", | |
"\n", | |
" this.root = $('<div/>');\n", | |
" this._root_extra_style(this.root)\n", | |
" this.root.attr('style', 'display: inline-block');\n", | |
"\n", | |
" $(parent_element).append(this.root);\n", | |
"\n", | |
" this._init_header(this);\n", | |
" this._init_canvas(this);\n", | |
" this._init_toolbar(this);\n", | |
"\n", | |
" var fig = this;\n", | |
"\n", | |
" this.waiting = false;\n", | |
"\n", | |
" this.ws.onopen = function () {\n", | |
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", | |
" fig.send_message(\"send_image_mode\", {});\n", | |
" fig.send_message(\"refresh\", {});\n", | |
" }\n", | |
"\n", | |
" this.imageObj.onload = function() {\n", | |
" if (fig.image_mode == 'full') {\n", | |
" // Full images could contain transparency (where diff images\n", | |
" // almost always do), so we need to clear the canvas so that\n", | |
" // there is no ghosting.\n", | |
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", | |
" }\n", | |
" fig.context.drawImage(fig.imageObj, 0, 0);\n", | |
" };\n", | |
"\n", | |
" this.imageObj.onunload = function() {\n", | |
" this.ws.close();\n", | |
" }\n", | |
"\n", | |
" this.ws.onmessage = this._make_on_message_function(this);\n", | |
"\n", | |
" this.ondownload = ondownload;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_header = function() {\n", | |
" var titlebar = $(\n", | |
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", | |
" 'ui-helper-clearfix\"/>');\n", | |
" var titletext = $(\n", | |
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", | |
" 'text-align: center; padding: 3px;\"/>');\n", | |
" titlebar.append(titletext)\n", | |
" this.root.append(titlebar);\n", | |
" this.header = titletext[0];\n", | |
"}\n", | |
"\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", | |
"\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", | |
"\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_canvas = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var canvas_div = $('<div/>');\n", | |
"\n", | |
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", | |
"\n", | |
" function canvas_keyboard_event(event) {\n", | |
" return fig.key_event(event, event['data']);\n", | |
" }\n", | |
"\n", | |
" canvas_div.keydown('key_press', canvas_keyboard_event);\n", | |
" canvas_div.keyup('key_release', canvas_keyboard_event);\n", | |
" this.canvas_div = canvas_div\n", | |
" this._canvas_extra_style(canvas_div)\n", | |
" this.root.append(canvas_div);\n", | |
"\n", | |
" var canvas = $('<canvas/>');\n", | |
" canvas.addClass('mpl-canvas');\n", | |
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", | |
"\n", | |
" this.canvas = canvas[0];\n", | |
" this.context = canvas[0].getContext(\"2d\");\n", | |
"\n", | |
" var rubberband = $('<canvas/>');\n", | |
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", | |
"\n", | |
" var pass_mouse_events = true;\n", | |
"\n", | |
" canvas_div.resizable({\n", | |
" start: function(event, ui) {\n", | |
" pass_mouse_events = false;\n", | |
" },\n", | |
" resize: function(event, ui) {\n", | |
" fig.request_resize(ui.size.width, ui.size.height);\n", | |
" },\n", | |
" stop: function(event, ui) {\n", | |
" pass_mouse_events = true;\n", | |
" fig.request_resize(ui.size.width, ui.size.height);\n", | |
" },\n", | |
" });\n", | |
"\n", | |
" function mouse_event_fn(event) {\n", | |
" if (pass_mouse_events)\n", | |
" return fig.mouse_event(event, event['data']);\n", | |
" }\n", | |
"\n", | |
" rubberband.mousedown('button_press', mouse_event_fn);\n", | |
" rubberband.mouseup('button_release', mouse_event_fn);\n", | |
" // Throttle sequential mouse events to 1 every 20ms.\n", | |
" rubberband.mousemove('motion_notify', mouse_event_fn);\n", | |
"\n", | |
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n", | |
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n", | |
"\n", | |
" canvas_div.on(\"wheel\", function (event) {\n", | |
" event = event.originalEvent;\n", | |
" event['data'] = 'scroll'\n", | |
" if (event.deltaY < 0) {\n", | |
" event.step = 1;\n", | |
" } else {\n", | |
" event.step = -1;\n", | |
" }\n", | |
" mouse_event_fn(event);\n", | |
" });\n", | |
"\n", | |
" canvas_div.append(canvas);\n", | |
" canvas_div.append(rubberband);\n", | |
"\n", | |
" this.rubberband = rubberband;\n", | |
" this.rubberband_canvas = rubberband[0];\n", | |
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n", | |
" this.rubberband_context.strokeStyle = \"#000000\";\n", | |
"\n", | |
" this._resize_canvas = function(width, height) {\n", | |
" // Keep the size of the canvas, canvas container, and rubber band\n", | |
" // canvas in synch.\n", | |
" canvas_div.css('width', width)\n", | |
" canvas_div.css('height', height)\n", | |
"\n", | |
" canvas.attr('width', width);\n", | |
" canvas.attr('height', height);\n", | |
"\n", | |
" rubberband.attr('width', width);\n", | |
" rubberband.attr('height', height);\n", | |
" }\n", | |
"\n", | |
" // Set the figure to an initial 600x600px, this will subsequently be updated\n", | |
" // upon first draw.\n", | |
" this._resize_canvas(600, 600);\n", | |
"\n", | |
" // Disable right mouse context menu.\n", | |
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", | |
" return false;\n", | |
" });\n", | |
"\n", | |
" function set_focus () {\n", | |
" canvas.focus();\n", | |
" canvas_div.focus();\n", | |
" }\n", | |
"\n", | |
" window.setTimeout(set_focus, 100);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_toolbar = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var nav_element = $('<div/>')\n", | |
" nav_element.attr('style', 'width: 100%');\n", | |
" this.root.append(nav_element);\n", | |
"\n", | |
" // Define a callback function for later on.\n", | |
" function toolbar_event(event) {\n", | |
" return fig.toolbar_button_onclick(event['data']);\n", | |
" }\n", | |
" function toolbar_mouse_event(event) {\n", | |
" return fig.toolbar_button_onmouseover(event['data']);\n", | |
" }\n", | |
"\n", | |
" for(var toolbar_ind in mpl.toolbar_items) {\n", | |
" var name = mpl.toolbar_items[toolbar_ind][0];\n", | |
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", | |
" var image = mpl.toolbar_items[toolbar_ind][2];\n", | |
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n", | |
"\n", | |
" if (!name) {\n", | |
" // put a spacer in here.\n", | |
" continue;\n", | |
" }\n", | |
" var button = $('<button/>');\n", | |
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", | |
" 'ui-button-icon-only');\n", | |
" button.attr('role', 'button');\n", | |
" button.attr('aria-disabled', 'false');\n", | |
" button.click(method_name, toolbar_event);\n", | |
" button.mouseover(tooltip, toolbar_mouse_event);\n", | |
"\n", | |
" var icon_img = $('<span/>');\n", | |
" icon_img.addClass('ui-button-icon-primary ui-icon');\n", | |
" icon_img.addClass(image);\n", | |
" icon_img.addClass('ui-corner-all');\n", | |
"\n", | |
" var tooltip_span = $('<span/>');\n", | |
" tooltip_span.addClass('ui-button-text');\n", | |
" tooltip_span.html(tooltip);\n", | |
"\n", | |
" button.append(icon_img);\n", | |
" button.append(tooltip_span);\n", | |
"\n", | |
" nav_element.append(button);\n", | |
" }\n", | |
"\n", | |
" var fmt_picker_span = $('<span/>');\n", | |
"\n", | |
" var fmt_picker = $('<select/>');\n", | |
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", | |
" fmt_picker_span.append(fmt_picker);\n", | |
" nav_element.append(fmt_picker_span);\n", | |
" this.format_dropdown = fmt_picker[0];\n", | |
"\n", | |
" for (var ind in mpl.extensions) {\n", | |
" var fmt = mpl.extensions[ind];\n", | |
" var option = $(\n", | |
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", | |
" fmt_picker.append(option)\n", | |
" }\n", | |
"\n", | |
" // Add hover states to the ui-buttons\n", | |
" $( \".ui-button\" ).hover(\n", | |
" function() { $(this).addClass(\"ui-state-hover\");},\n", | |
" function() { $(this).removeClass(\"ui-state-hover\");}\n", | |
" );\n", | |
"\n", | |
" var status_bar = $('<span class=\"mpl-message\"/>');\n", | |
" nav_element.append(status_bar);\n", | |
" this.message = status_bar[0];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", | |
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", | |
" // which will in turn request a refresh of the image.\n", | |
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.send_message = function(type, properties) {\n", | |
" properties['type'] = type;\n", | |
" properties['figure_id'] = this.id;\n", | |
" this.ws.send(JSON.stringify(properties));\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.send_draw_message = function() {\n", | |
" if (!this.waiting) {\n", | |
" this.waiting = true;\n", | |
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype.handle_save = function(fig, msg) {\n", | |
" var format_dropdown = fig.format_dropdown;\n", | |
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", | |
" fig.ondownload(fig, format);\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n", | |
" var size = msg['size'];\n", | |
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", | |
" fig._resize_canvas(size[0], size[1]);\n", | |
" fig.send_message(\"refresh\", {});\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", | |
" var x0 = msg['x0'];\n", | |
" var y0 = fig.canvas.height - msg['y0'];\n", | |
" var x1 = msg['x1'];\n", | |
" var y1 = fig.canvas.height - msg['y1'];\n", | |
" x0 = Math.floor(x0) + 0.5;\n", | |
" y0 = Math.floor(y0) + 0.5;\n", | |
" x1 = Math.floor(x1) + 0.5;\n", | |
" y1 = Math.floor(y1) + 0.5;\n", | |
" var min_x = Math.min(x0, x1);\n", | |
" var min_y = Math.min(y0, y1);\n", | |
" var width = Math.abs(x1 - x0);\n", | |
" var height = Math.abs(y1 - y0);\n", | |
"\n", | |
" fig.rubberband_context.clearRect(\n", | |
" 0, 0, fig.canvas.width, fig.canvas.height);\n", | |
"\n", | |
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", | |
" // Updates the figure title.\n", | |
" fig.header.textContent = msg['label'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", | |
" var cursor = msg['cursor'];\n", | |
" switch(cursor)\n", | |
" {\n", | |
" case 0:\n", | |
" cursor = 'pointer';\n", | |
" break;\n", | |
" case 1:\n", | |
" cursor = 'default';\n", | |
" break;\n", | |
" case 2:\n", | |
" cursor = 'crosshair';\n", | |
" break;\n", | |
" case 3:\n", | |
" cursor = 'move';\n", | |
" break;\n", | |
" }\n", | |
" fig.rubberband_canvas.style.cursor = cursor;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_message = function(fig, msg) {\n", | |
" fig.message.textContent = msg['message'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n", | |
" // Request the server to send over a new figure.\n", | |
" fig.send_draw_message();\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", | |
" fig.image_mode = msg['mode'];\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.updated_canvas_event = function() {\n", | |
" // Called whenever the canvas gets updated.\n", | |
" this.send_message(\"ack\", {});\n", | |
"}\n", | |
"\n", | |
"// A function to construct a web socket function for onmessage handling.\n", | |
"// Called in the figure constructor.\n", | |
"mpl.figure.prototype._make_on_message_function = function(fig) {\n", | |
" return function socket_on_message(evt) {\n", | |
" if (evt.data instanceof Blob) {\n", | |
" /* FIXME: We get \"Resource interpreted as Image but\n", | |
" * transferred with MIME type text/plain:\" errors on\n", | |
" * Chrome. But how to set the MIME type? It doesn't seem\n", | |
" * to be part of the websocket stream */\n", | |
" evt.data.type = \"image/png\";\n", | |
"\n", | |
" /* Free the memory for the previous frames */\n", | |
" if (fig.imageObj.src) {\n", | |
" (window.URL || window.webkitURL).revokeObjectURL(\n", | |
" fig.imageObj.src);\n", | |
" }\n", | |
"\n", | |
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", | |
" evt.data);\n", | |
" fig.updated_canvas_event();\n", | |
" fig.waiting = false;\n", | |
" return;\n", | |
" }\n", | |
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", | |
" fig.imageObj.src = evt.data;\n", | |
" fig.updated_canvas_event();\n", | |
" fig.waiting = false;\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" var msg = JSON.parse(evt.data);\n", | |
" var msg_type = msg['type'];\n", | |
"\n", | |
" // Call the \"handle_{type}\" callback, which takes\n", | |
" // the figure and JSON message as its only arguments.\n", | |
" try {\n", | |
" var callback = fig[\"handle_\" + msg_type];\n", | |
" } catch (e) {\n", | |
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" if (callback) {\n", | |
" try {\n", | |
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", | |
" callback(fig, msg);\n", | |
" } catch (e) {\n", | |
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", | |
" }\n", | |
" }\n", | |
" };\n", | |
"}\n", | |
"\n", | |
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", | |
"mpl.findpos = function(e) {\n", | |
" //this section is from http://www.quirksmode.org/js/events_properties.html\n", | |
" var targ;\n", | |
" if (!e)\n", | |
" e = window.event;\n", | |
" if (e.target)\n", | |
" targ = e.target;\n", | |
" else if (e.srcElement)\n", | |
" targ = e.srcElement;\n", | |
" if (targ.nodeType == 3) // defeat Safari bug\n", | |
" targ = targ.parentNode;\n", | |
"\n", | |
" // jQuery normalizes the pageX and pageY\n", | |
" // pageX,Y are the mouse positions relative to the document\n", | |
" // offset() returns the position of the element relative to the document\n", | |
" var x = e.pageX - $(targ).offset().left;\n", | |
" var y = e.pageY - $(targ).offset().top;\n", | |
"\n", | |
" return {\"x\": x, \"y\": y};\n", | |
"};\n", | |
"\n", | |
"/*\n", | |
" * return a copy of an object with only non-object keys\n", | |
" * we need this to avoid circular references\n", | |
" * http://stackoverflow.com/a/24161582/3208463\n", | |
" */\n", | |
"function simpleKeys (original) {\n", | |
" return Object.keys(original).reduce(function (obj, key) {\n", | |
" if (typeof original[key] !== 'object')\n", | |
" obj[key] = original[key]\n", | |
" return obj;\n", | |
" }, {});\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.mouse_event = function(event, name) {\n", | |
" var canvas_pos = mpl.findpos(event)\n", | |
"\n", | |
" if (name === 'button_press')\n", | |
" {\n", | |
" this.canvas.focus();\n", | |
" this.canvas_div.focus();\n", | |
" }\n", | |
"\n", | |
" var x = canvas_pos.x;\n", | |
" var y = canvas_pos.y;\n", | |
"\n", | |
" this.send_message(name, {x: x, y: y, button: event.button,\n", | |
" step: event.step,\n", | |
" guiEvent: simpleKeys(event)});\n", | |
"\n", | |
" /* This prevents the web browser from automatically changing to\n", | |
" * the text insertion cursor when the button is pressed. We want\n", | |
" * to control all of the cursor setting manually through the\n", | |
" * 'cursor' event from matplotlib */\n", | |
" event.preventDefault();\n", | |
" return false;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._key_event_extra = function(event, name) {\n", | |
" // Handle any extra behaviour associated with a key event\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.key_event = function(event, name) {\n", | |
"\n", | |
" // Prevent repeat events\n", | |
" if (name == 'key_press')\n", | |
" {\n", | |
" if (event.which === this._key)\n", | |
" return;\n", | |
" else\n", | |
" this._key = event.which;\n", | |
" }\n", | |
" if (name == 'key_release')\n", | |
" this._key = null;\n", | |
"\n", | |
" var value = '';\n", | |
" if (event.ctrlKey && event.which != 17)\n", | |
" value += \"ctrl+\";\n", | |
" if (event.altKey && event.which != 18)\n", | |
" value += \"alt+\";\n", | |
" if (event.shiftKey && event.which != 16)\n", | |
" value += \"shift+\";\n", | |
"\n", | |
" value += 'k';\n", | |
" value += event.which.toString();\n", | |
"\n", | |
" this._key_event_extra(event, name);\n", | |
"\n", | |
" this.send_message(name, {key: value,\n", | |
" guiEvent: simpleKeys(event)});\n", | |
" return false;\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", | |
" if (name == 'download') {\n", | |
" this.handle_save(this, null);\n", | |
" } else {\n", | |
" this.send_message(\"toolbar_button\", {name: name});\n", | |
" }\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", | |
" this.message.textContent = tooltip;\n", | |
"};\n", | |
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", | |
"\n", | |
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", | |
"\n", | |
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", | |
" // Create a \"websocket\"-like object which calls the given IPython comm\n", | |
" // object with the appropriate methods. Currently this is a non binary\n", | |
" // socket, so there is still some room for performance tuning.\n", | |
" var ws = {};\n", | |
"\n", | |
" ws.close = function() {\n", | |
" comm.close()\n", | |
" };\n", | |
" ws.send = function(m) {\n", | |
" //console.log('sending', m);\n", | |
" comm.send(m);\n", | |
" };\n", | |
" // Register the callback with on_msg.\n", | |
" comm.on_msg(function(msg) {\n", | |
" //console.log('receiving', msg['content']['data'], msg);\n", | |
" // Pass the mpl event to the overriden (by mpl) onmessage function.\n", | |
" ws.onmessage(msg['content']['data'])\n", | |
" });\n", | |
" return ws;\n", | |
"}\n", | |
"\n", | |
"mpl.mpl_figure_comm = function(comm, msg) {\n", | |
" // This is the function which gets called when the mpl process\n", | |
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n", | |
"\n", | |
" var id = msg.content.data.id;\n", | |
" // Get hold of the div created by the display call when the Comm\n", | |
" // socket was opened in Python.\n", | |
" var element = $(\"#\" + id);\n", | |
" var ws_proxy = comm_websocket_adapter(comm)\n", | |
"\n", | |
" function ondownload(figure, format) {\n", | |
" window.open(figure.imageObj.src);\n", | |
" }\n", | |
"\n", | |
" var fig = new mpl.figure(id, ws_proxy,\n", | |
" ondownload,\n", | |
" element.get(0));\n", | |
"\n", | |
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", | |
" // web socket which is closed, not our websocket->open comm proxy.\n", | |
" ws_proxy.onopen();\n", | |
"\n", | |
" fig.parent_element = element.get(0);\n", | |
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", | |
" if (!fig.cell_info) {\n", | |
" console.error(\"Failed to find cell for figure\", id, fig);\n", | |
" return;\n", | |
" }\n", | |
"\n", | |
" var output_index = fig.cell_info[2]\n", | |
" var cell = fig.cell_info[0];\n", | |
"\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.handle_close = function(fig, msg) {\n", | |
" fig.root.unbind('remove')\n", | |
"\n", | |
" // Update the output cell to use the data from the current canvas.\n", | |
" fig.push_to_output();\n", | |
" var dataURL = fig.canvas.toDataURL();\n", | |
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n", | |
" // the notebook keyboard shortcuts fail.\n", | |
" IPython.keyboard_manager.enable()\n", | |
" $(fig.parent_element).html('<img src=\"' + dataURL + '\">');\n", | |
" fig.close_ws(fig, msg);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.close_ws = function(fig, msg){\n", | |
" fig.send_message('closing', msg);\n", | |
" // fig.ws.close()\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", | |
" // Turn the data on the canvas into data in the output cell.\n", | |
" var dataURL = this.canvas.toDataURL();\n", | |
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.updated_canvas_event = function() {\n", | |
" // Tell IPython that the notebook contents must change.\n", | |
" IPython.notebook.set_dirty(true);\n", | |
" this.send_message(\"ack\", {});\n", | |
" var fig = this;\n", | |
" // Wait a second, then push the new image to the DOM so\n", | |
" // that it is saved nicely (might be nice to debounce this).\n", | |
" setTimeout(function () { fig.push_to_output() }, 1000);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._init_toolbar = function() {\n", | |
" var fig = this;\n", | |
"\n", | |
" var nav_element = $('<div/>')\n", | |
" nav_element.attr('style', 'width: 100%');\n", | |
" this.root.append(nav_element);\n", | |
"\n", | |
" // Define a callback function for later on.\n", | |
" function toolbar_event(event) {\n", | |
" return fig.toolbar_button_onclick(event['data']);\n", | |
" }\n", | |
" function toolbar_mouse_event(event) {\n", | |
" return fig.toolbar_button_onmouseover(event['data']);\n", | |
" }\n", | |
"\n", | |
" for(var toolbar_ind in mpl.toolbar_items){\n", | |
" var name = mpl.toolbar_items[toolbar_ind][0];\n", | |
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", | |
" var image = mpl.toolbar_items[toolbar_ind][2];\n", | |
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n", | |
"\n", | |
" if (!name) { continue; };\n", | |
"\n", | |
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", | |
" button.click(method_name, toolbar_event);\n", | |
" button.mouseover(tooltip, toolbar_mouse_event);\n", | |
" nav_element.append(button);\n", | |
" }\n", | |
"\n", | |
" // Add the status bar.\n", | |
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", | |
" nav_element.append(status_bar);\n", | |
" this.message = status_bar[0];\n", | |
"\n", | |
" // Add the close button to the window.\n", | |
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", | |
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", | |
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n", | |
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n", | |
" buttongrp.append(button);\n", | |
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", | |
" titlebar.prepend(buttongrp);\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._root_extra_style = function(el){\n", | |
" var fig = this\n", | |
" el.on(\"remove\", function(){\n", | |
"\tfig.close_ws(fig, {});\n", | |
" });\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._canvas_extra_style = function(el){\n", | |
" // this is important to make the div 'focusable\n", | |
" el.attr('tabindex', 0)\n", | |
" // reach out to IPython and tell the keyboard manager to turn it's self\n", | |
" // off when our div gets focus\n", | |
"\n", | |
" // location in version 3\n", | |
" if (IPython.notebook.keyboard_manager) {\n", | |
" IPython.notebook.keyboard_manager.register_events(el);\n", | |
" }\n", | |
" else {\n", | |
" // location in version 2\n", | |
" IPython.keyboard_manager.register_events(el);\n", | |
" }\n", | |
"\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype._key_event_extra = function(event, name) {\n", | |
" var manager = IPython.notebook.keyboard_manager;\n", | |
" if (!manager)\n", | |
" manager = IPython.keyboard_manager;\n", | |
"\n", | |
" // Check for shift+enter\n", | |
" if (event.shiftKey && event.which == 13) {\n", | |
" this.canvas_div.blur();\n", | |
" event.shiftKey = false;\n", | |
" // Send a \"J\" for go to next cell\n", | |
" event.which = 74;\n", | |
" event.keyCode = 74;\n", | |
" manager.command_mode();\n", | |
" manager.handle_keydown(event);\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"mpl.figure.prototype.handle_save = function(fig, msg) {\n", | |
" fig.ondownload(fig, null);\n", | |
"}\n", | |
"\n", | |
"\n", | |
"mpl.find_output_cell = function(html_output) {\n", | |
" // Return the cell and output element which can be found *uniquely* in the notebook.\n", | |
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", | |
" // IPython event is triggered only after the cells have been serialised, which for\n", | |
" // our purposes (turning an active figure into a static one), is too late.\n", | |
" var cells = IPython.notebook.get_cells();\n", | |
" var ncells = cells.length;\n", | |
" for (var i=0; i<ncells; i++) {\n", | |
" var cell = cells[i];\n", | |
" if (cell.cell_type === 'code'){\n", | |
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n", | |
" var data = cell.output_area.outputs[j];\n", | |
" if (data.data) {\n", | |
" // IPython >= 3 moved mimebundle to data attribute of output\n", | |
" data = data.data;\n", | |
" }\n", | |
" if (data['text/html'] == html_output) {\n", | |
" return [cell, data, j];\n", | |
" }\n", | |
" }\n", | |
" }\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"// Register the function which deals with the matplotlib target/channel.\n", | |
"// The kernel may be null if the page has been refreshed.\n", | |
"if (IPython.notebook.kernel != null) {\n", | |
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", | |
"}\n" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAG4CAYAAADVDFZ+AAAgAElEQVR4Xuydd3wURRvHf3tJ6L2DdHJ7VGnSu/QWEAREEQtiQSy8VAEpUqSIiF1RsWJHqiIoRRCRKj23F3rvLdQkt+9nNrnjktxd7jJ3pP32n/fN7Twzs999lvf7zu7MKOBBAiRAAiRAAiRAAiSQpQgoWepqebEkQAIkQAIkQAIkQAKgADIJSIAESIAESIAESCCLEaAAZrEbzsslARIgARIgARIgAQogc4AESIAESIAESIAEshgBCmAWu+G8XBIgARIgARIgARKgADIHSIAESIAESIAESCCLEaAAZrEbzsslARIgARIgARIgAQogc4AESIAESIAESIAEshgBCmAWu+G8XBIgARIgARIgARKgADIHSIAESIAESIAESCCLEaAAZrEbzsslARIgARIgARIgAQogc4AESIAESIAESIAEshgBCmAWu+G8XBIgARIgARIgARKgADIHSIAESIAESIAESCCLEaAAZrEbzsslARIgARIgARIgAQogc4AESIAESIAESIAEshgBCmAWu+G8XBIgARIgARIgARKgADIHSIAESIAESIAESCCLEaAAZrEbzsslARIgARIgARIgAQogc4AESIAESIAESIAEshgBCmAWu+G8XBIgARIgARIgARKgADIHSIAESIAESIAESCCLEaAAZrEbzsslARIgARIgARIgAQogc4AESIAESIAESIAEshgBCmAWu+G8XBIgARIgARIgARKgADIHSIAESIAESIAESCCLEaAAZrEbzsslARIgARIgARIgAQogc4AESIAESIAESIAEshgBCmAWu+G83MxJQFXVZgCmASio63oogAU2m21UwtUqqqpOBdBPURS7rut74+Lint6/f/9RBw2z2dxTUZQPACzUNO1pl98XKYpidqEm/s0wK4rSwmq1/u2Gpte2VFW1A9gPIAaAqEvXdf1Fm832h7s7Ex4eXjskJOQ9APfouh4LYLamae+KslWrVs0WFxc3Wdf1CEVRcorrio2NfebAgQNHPNzlEFVVxwIYo+v64zabbb4oV7FixfyhoaEbRV9c4nIAKKNpWpi3jFFV9SEA83Vdb2mz2f4ym81tFUV5O0ldhQDs0jStbdK6wsPDS5tMpjkAquu6riiK8h+AQZqmnRNlzWbzw4qiiPso7mmM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\">" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"with numpy.warnings.catch_warnings(): # This just suppresses divide by zero warnings in log\n", | |
" for _, meas in by_hostname.get_group(\"Runix01\").query(\"source == 'Eu152'\").iterrows():\n", | |
" figure()\n", | |
" \n", | |
" spec = meas[\"spectrum\"]\n", | |
" ax = plot(arange(len(spec)), log(spec))\n", | |
" title(meas[\"start_time\"])\n", | |
" \n", | |
" display()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 2", | |
"language": "python2", | |
"name": "python2" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 2 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython2", | |
"version": "2.7.12" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment