##// END OF EJS Templates
Added Noise Vs Temperature analysis on 06/2018 PPBI
jeandet -
r17:b99dfda4ef4c master
parent child
Show More
This diff has been collapsed as it changes many lines, (1901 lines changed) Show them Hide them
@@ -5,8 +5,8
5 5 "execution_count": 1,
6 6 "metadata": {
7 7 "ExecuteTime": {
8 "end_time": "2018-06-29T12:19:37.010079Z",
9 "start_time": "2018-06-29T12:19:36.575782Z"
8 "end_time": "2018-07-04T06:49:55.623000Z",
9 "start_time": "2018-07-04T06:49:55.151858Z"
10 10 }
11 11 },
12 12 "outputs": [
@@ -50,6 +50,7
50 50 "from lfrcompliance.test_engine.testcontext import *\n",
51 51 "from lfrcompliance.test_engine.result_loader import *\n",
52 52 "from lfrcompliance.tcpackets.constants import *\n",
53 "from lfrcompliance.test_engine.tests.analysis import TF\n",
53 54 "import multiprocessing.dummy\n",
54 55 "from dateutil import parser\n",
55 56 "import gc\n",
@@ -74,8 +75,8
74 75 "execution_count": 2,
75 76 "metadata": {
76 77 "ExecuteTime": {
77 "end_time": "2018-06-29T12:19:40.297058Z",
78 "start_time": "2018-06-29T12:19:40.273101Z"
78 "end_time": "2018-07-04T06:49:59.147479Z",
79 "start_time": "2018-07-04T06:49:59.132804Z"
79 80 }
80 81 },
81 82 "outputs": [],
@@ -1726,11 +1727,11
1726 1727 },
1727 1728 {
1728 1729 "cell_type": "code",
1729 "execution_count": 5,
1730 "execution_count": 4,
1730 1731 "metadata": {
1731 1732 "ExecuteTime": {
1732 "end_time": "2018-06-29T12:19:46.965856Z",
1733 "start_time": "2018-06-29T12:19:46.947036Z"
1733 "end_time": "2018-07-04T06:53:55.741692Z",
1734 "start_time": "2018-07-04T06:53:55.733872Z"
1734 1735 }
1735 1736 },
1736 1737 "outputs": [],
@@ -1765,11 +1766,11
1765 1766 },
1766 1767 {
1767 1768 "cell_type": "code",
1768 "execution_count": 7,
1769 "execution_count": 33,
1769 1770 "metadata": {
1770 1771 "ExecuteTime": {
1771 "end_time": "2018-06-29T12:19:51.511148Z",
1772 "start_time": "2018-06-29T12:19:50.066350Z"
1772 "end_time": "2018-07-04T13:22:50.356614Z",
1773 "start_time": "2018-07-04T13:22:48.981284Z"
1773 1774 }
1774 1775 },
1775 1776 "outputs": [],
@@ -1869,117 +1870,1747
1869 1870 ]
1870 1871 },
1871 1872 {
1872 "cell_type": "markdown",
1873 "metadata": {},
1874 "source": [
1875 "# -30°C to 20°C transition analysis"
1876 ]
1877 },
1878 {
1879 "cell_type": "code",
1880 "execution_count": 10,
1881 "metadata": {
1882 "ExecuteTime": {
1883 "end_time": "2018-06-29T12:21:38.812448Z",
1884 "start_time": "2018-06-29T12:21:38.694283Z"
1885 }
1886 },
1887 "outputs": [],
1888 "source": [
1889 "!rm /home/jeandet/Documents/SOLO_LFR_Notebooks/PPBI_06_2018/temp/*.png"
1890 ]
1891 },
1892 {
1893 1873 "cell_type": "code",
1894 "execution_count": 11,
1874 "execution_count": 39,
1895 1875 "metadata": {
1896 1876 "ExecuteTime": {
1897 "end_time": "2018-06-29T12:21:41.747277Z",
1898 "start_time": "2018-06-29T12:21:40.400048Z"
1899 }
1877 "end_time": "2018-07-04T13:37:56.932529Z",
1878 "start_time": "2018-07-04T13:37:56.803657Z"
1879 },
1880 "scrolled": false
1900 1881 },
1901 "outputs": [],
1902 "source": [
1903 "res = ResultLoader(\"/home/jeandet/Documents/SOLO_LFR_Notebooks/PPBI_06_2018/-30_to_20_transition.outpout\")\n",
1904 "res.decomutePackets()\n",
1905 "res.loadSWF()\n",
1906 "temperatures = load_temperatures('/home/jeandet/ownCloud/TESTS_LFR_PFM1_PPBI_06_2018/Thermal_Chamber_Logs/Essai du 26 juin 2018.csv', [\"Time\",\"air\",\"PCB\", \"socket\"])\n",
1907 "times=load_packets_time(\n",
1908 " sumfile=\"/home/jeandet/Documents/DATA/LFR_Packets/decom/2018_06_26_15_00_52_packet_record.sum\",\n",
1909 " logfile=\"/home/jeandet/Documents/DATA/LFR_Packets/2018_06_26_15_00_51_packet_log.data\")\n",
1910 "\n",
1911 "\n",
1912 "with open(\"/home/jeandet/Documents/DATA/LFR_Packets/decom/2018_06_26_15_00_52_packet_record_HK.hk\",\"r\") as file:\n",
1913 " lines=file.readlines()\n",
1914 " HK_TEMP = lines[6::9] \n",
1915 " HK_PCB_TEMP = [float(T.split()[1]) for T in HK_TEMP]\n",
1916 " HK_PCB_TIME = [val['Time'] for val in times[\"HK\"]]\n",
1917 " HK_TEMP_df = pds.Series(HK_PCB_TEMP, name='PCBTemp',index=pds.DatetimeIndex(HK_PCB_TIME, dtype='datetime64[ns]', freq=None))"
1918 ]
1919 },
1920 {
1921 "cell_type": "code",
1922 "execution_count": 12,
1923 "metadata": {
1924 "ExecuteTime": {
1925 "end_time": "2018-06-29T12:23:08.428149Z",
1926 "start_time": "2018-06-29T12:21:43.373905Z"
1882 "outputs": [
1883 {
1884 "data": {
1885 "application/javascript": [
1886 "/* Put everything inside the global mpl namespace */\n",
1887 "window.mpl = {};\n",
1888 "\n",
1889 "\n",
1890 "mpl.get_websocket_type = function() {\n",
1891 " if (typeof(WebSocket) !== 'undefined') {\n",
1892 " return WebSocket;\n",
1893 " } else if (typeof(MozWebSocket) !== 'undefined') {\n",
1894 " return MozWebSocket;\n",
1895 " } else {\n",
1896 " alert('Your browser does not have WebSocket support.' +\n",
1897 " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
1898 " 'Firefox 4 and 5 are also supported but you ' +\n",
1899 " 'have to enable WebSockets in about:config.');\n",
1900 " };\n",
1901 "}\n",
1902 "\n",
1903 "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
1904 " this.id = figure_id;\n",
1905 "\n",
1906 " this.ws = websocket;\n",
1907 "\n",
1908 " this.supports_binary = (this.ws.binaryType != undefined);\n",
1909 "\n",
1910 " if (!this.supports_binary) {\n",
1911 " var warnings = document.getElementById(\"mpl-warnings\");\n",
1912 " if (warnings) {\n",
1913 " warnings.style.display = 'block';\n",
1914 " warnings.textContent = (\n",
1915 " \"This browser does not support binary websocket messages. \" +\n",
1916 " \"Performance may be slow.\");\n",
1917 " }\n",
1918 " }\n",
1919 "\n",
1920 " this.imageObj = new Image();\n",
1921 "\n",
1922 " this.context = undefined;\n",
1923 " this.message = undefined;\n",
1924 " this.canvas = undefined;\n",
1925 " this.rubberband_canvas = undefined;\n",
1926 " this.rubberband_context = undefined;\n",
1927 " this.format_dropdown = undefined;\n",
1928 "\n",
1929 " this.image_mode = 'full';\n",
1930 "\n",
1931 " this.root = $('<div/>');\n",
1932 " this._root_extra_style(this.root)\n",
1933 " this.root.attr('style', 'display: inline-block');\n",
1934 "\n",
1935 " $(parent_element).append(this.root);\n",
1936 "\n",
1937 " this._init_header(this);\n",
1938 " this._init_canvas(this);\n",
1939 " this._init_toolbar(this);\n",
1940 "\n",
1941 " var fig = this;\n",
1942 "\n",
1943 " this.waiting = false;\n",
1944 "\n",
1945 " this.ws.onopen = function () {\n",
1946 " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
1947 " fig.send_message(\"send_image_mode\", {});\n",
1948 " if (mpl.ratio != 1) {\n",
1949 " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
1950 " }\n",
1951 " fig.send_message(\"refresh\", {});\n",
1952 " }\n",
1953 "\n",
1954 " this.imageObj.onload = function() {\n",
1955 " if (fig.image_mode == 'full') {\n",
1956 " // Full images could contain transparency (where diff images\n",
1957 " // almost always do), so we need to clear the canvas so that\n",
1958 " // there is no ghosting.\n",
1959 " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
1960 " }\n",
1961 " fig.context.drawImage(fig.imageObj, 0, 0);\n",
1962 " };\n",
1963 "\n",
1964 " this.imageObj.onunload = function() {\n",
1965 " fig.ws.close();\n",
1966 " }\n",
1967 "\n",
1968 " this.ws.onmessage = this._make_on_message_function(this);\n",
1969 "\n",
1970 " this.ondownload = ondownload;\n",
1971 "}\n",
1972 "\n",
1973 "mpl.figure.prototype._init_header = function() {\n",
1974 " var titlebar = $(\n",
1975 " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
1976 " 'ui-helper-clearfix\"/>');\n",
1977 " var titletext = $(\n",
1978 " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
1979 " 'text-align: center; padding: 3px;\"/>');\n",
1980 " titlebar.append(titletext)\n",
1981 " this.root.append(titlebar);\n",
1982 " this.header = titletext[0];\n",
1983 "}\n",
1984 "\n",
1985 "\n",
1986 "\n",
1987 "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
1988 "\n",
1989 "}\n",
1990 "\n",
1991 "\n",
1992 "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
1993 "\n",
1994 "}\n",
1995 "\n",
1996 "mpl.figure.prototype._init_canvas = function() {\n",
1997 " var fig = this;\n",
1998 "\n",
1999 " var canvas_div = $('<div/>');\n",
2000 "\n",
2001 " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
2002 "\n",
2003 " function canvas_keyboard_event(event) {\n",
2004 " return fig.key_event(event, event['data']);\n",
2005 " }\n",
2006 "\n",
2007 " canvas_div.keydown('key_press', canvas_keyboard_event);\n",
2008 " canvas_div.keyup('key_release', canvas_keyboard_event);\n",
2009 " this.canvas_div = canvas_div\n",
2010 " this._canvas_extra_style(canvas_div)\n",
2011 " this.root.append(canvas_div);\n",
2012 "\n",
2013 " var canvas = $('<canvas/>');\n",
2014 " canvas.addClass('mpl-canvas');\n",
2015 " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
2016 "\n",
2017 " this.canvas = canvas[0];\n",
2018 " this.context = canvas[0].getContext(\"2d\");\n",
2019 "\n",
2020 " var backingStore = this.context.backingStorePixelRatio ||\n",
2021 "\tthis.context.webkitBackingStorePixelRatio ||\n",
2022 "\tthis.context.mozBackingStorePixelRatio ||\n",
2023 "\tthis.context.msBackingStorePixelRatio ||\n",
2024 "\tthis.context.oBackingStorePixelRatio ||\n",
2025 "\tthis.context.backingStorePixelRatio || 1;\n",
2026 "\n",
2027 " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
2028 "\n",
2029 " var rubberband = $('<canvas/>');\n",
2030 " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
2031 "\n",
2032 " var pass_mouse_events = true;\n",
2033 "\n",
2034 " canvas_div.resizable({\n",
2035 " start: function(event, ui) {\n",
2036 " pass_mouse_events = false;\n",
2037 " },\n",
2038 " resize: function(event, ui) {\n",
2039 " fig.request_resize(ui.size.width, ui.size.height);\n",
2040 " },\n",
2041 " stop: function(event, ui) {\n",
2042 " pass_mouse_events = true;\n",
2043 " fig.request_resize(ui.size.width, ui.size.height);\n",
2044 " },\n",
2045 " });\n",
2046 "\n",
2047 " function mouse_event_fn(event) {\n",
2048 " if (pass_mouse_events)\n",
2049 " return fig.mouse_event(event, event['data']);\n",
2050 " }\n",
2051 "\n",
2052 " rubberband.mousedown('button_press', mouse_event_fn);\n",
2053 " rubberband.mouseup('button_release', mouse_event_fn);\n",
2054 " // Throttle sequential mouse events to 1 every 20ms.\n",
2055 " rubberband.mousemove('motion_notify', mouse_event_fn);\n",
2056 "\n",
2057 " rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
2058 " rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
2059 "\n",
2060 " canvas_div.on(\"wheel\", function (event) {\n",
2061 " event = event.originalEvent;\n",
2062 " event['data'] = 'scroll'\n",
2063 " if (event.deltaY < 0) {\n",
2064 " event.step = 1;\n",
2065 " } else {\n",
2066 " event.step = -1;\n",
2067 " }\n",
2068 " mouse_event_fn(event);\n",
2069 " });\n",
2070 "\n",
2071 " canvas_div.append(canvas);\n",
2072 " canvas_div.append(rubberband);\n",
2073 "\n",
2074 " this.rubberband = rubberband;\n",
2075 " this.rubberband_canvas = rubberband[0];\n",
2076 " this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
2077 " this.rubberband_context.strokeStyle = \"#000000\";\n",
2078 "\n",
2079 " this._resize_canvas = function(width, height) {\n",
2080 " // Keep the size of the canvas, canvas container, and rubber band\n",
2081 " // canvas in synch.\n",
2082 " canvas_div.css('width', width)\n",
2083 " canvas_div.css('height', height)\n",
2084 "\n",
2085 " canvas.attr('width', width * mpl.ratio);\n",
2086 " canvas.attr('height', height * mpl.ratio);\n",
2087 " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
2088 "\n",
2089 " rubberband.attr('width', width);\n",
2090 " rubberband.attr('height', height);\n",
2091 " }\n",
2092 "\n",
2093 " // Set the figure to an initial 600x600px, this will subsequently be updated\n",
2094 " // upon first draw.\n",
2095 " this._resize_canvas(600, 600);\n",
2096 "\n",
2097 " // Disable right mouse context menu.\n",
2098 " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
2099 " return false;\n",
2100 " });\n",
2101 "\n",
2102 " function set_focus () {\n",
2103 " canvas.focus();\n",
2104 " canvas_div.focus();\n",
2105 " }\n",
2106 "\n",
2107 " window.setTimeout(set_focus, 100);\n",
2108 "}\n",
2109 "\n",
2110 "mpl.figure.prototype._init_toolbar = function() {\n",
2111 " var fig = this;\n",
2112 "\n",
2113 " var nav_element = $('<div/>')\n",
2114 " nav_element.attr('style', 'width: 100%');\n",
2115 " this.root.append(nav_element);\n",
2116 "\n",
2117 " // Define a callback function for later on.\n",
2118 " function toolbar_event(event) {\n",
2119 " return fig.toolbar_button_onclick(event['data']);\n",
2120 " }\n",
2121 " function toolbar_mouse_event(event) {\n",
2122 " return fig.toolbar_button_onmouseover(event['data']);\n",
2123 " }\n",
2124 "\n",
2125 " for(var toolbar_ind in mpl.toolbar_items) {\n",
2126 " var name = mpl.toolbar_items[toolbar_ind][0];\n",
2127 " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
2128 " var image = mpl.toolbar_items[toolbar_ind][2];\n",
2129 " var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
2130 "\n",
2131 " if (!name) {\n",
2132 " // put a spacer in here.\n",
2133 " continue;\n",
2134 " }\n",
2135 " var button = $('<button/>');\n",
2136 " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
2137 " 'ui-button-icon-only');\n",
2138 " button.attr('role', 'button');\n",
2139 " button.attr('aria-disabled', 'false');\n",
2140 " button.click(method_name, toolbar_event);\n",
2141 " button.mouseover(tooltip, toolbar_mouse_event);\n",
2142 "\n",
2143 " var icon_img = $('<span/>');\n",
2144 " icon_img.addClass('ui-button-icon-primary ui-icon');\n",
2145 " icon_img.addClass(image);\n",
2146 " icon_img.addClass('ui-corner-all');\n",
2147 "\n",
2148 " var tooltip_span = $('<span/>');\n",
2149 " tooltip_span.addClass('ui-button-text');\n",
2150 " tooltip_span.html(tooltip);\n",
2151 "\n",
2152 " button.append(icon_img);\n",
2153 " button.append(tooltip_span);\n",
2154 "\n",
2155 " nav_element.append(button);\n",
2156 " }\n",
2157 "\n",
2158 " var fmt_picker_span = $('<span/>');\n",
2159 "\n",
2160 " var fmt_picker = $('<select/>');\n",
2161 " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
2162 " fmt_picker_span.append(fmt_picker);\n",
2163 " nav_element.append(fmt_picker_span);\n",
2164 " this.format_dropdown = fmt_picker[0];\n",
2165 "\n",
2166 " for (var ind in mpl.extensions) {\n",
2167 " var fmt = mpl.extensions[ind];\n",
2168 " var option = $(\n",
2169 " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
2170 " fmt_picker.append(option)\n",
2171 " }\n",
2172 "\n",
2173 " // Add hover states to the ui-buttons\n",
2174 " $( \".ui-button\" ).hover(\n",
2175 " function() { $(this).addClass(\"ui-state-hover\");},\n",
2176 " function() { $(this).removeClass(\"ui-state-hover\");}\n",
2177 " );\n",
2178 "\n",
2179 " var status_bar = $('<span class=\"mpl-message\"/>');\n",
2180 " nav_element.append(status_bar);\n",
2181 " this.message = status_bar[0];\n",
2182 "}\n",
2183 "\n",
2184 "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
2185 " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
2186 " // which will in turn request a refresh of the image.\n",
2187 " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
2188 "}\n",
2189 "\n",
2190 "mpl.figure.prototype.send_message = function(type, properties) {\n",
2191 " properties['type'] = type;\n",
2192 " properties['figure_id'] = this.id;\n",
2193 " this.ws.send(JSON.stringify(properties));\n",
2194 "}\n",
2195 "\n",
2196 "mpl.figure.prototype.send_draw_message = function() {\n",
2197 " if (!this.waiting) {\n",
2198 " this.waiting = true;\n",
2199 " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
2200 " }\n",
2201 "}\n",
2202 "\n",
2203 "\n",
2204 "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
2205 " var format_dropdown = fig.format_dropdown;\n",
2206 " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
2207 " fig.ondownload(fig, format);\n",
2208 "}\n",
2209 "\n",
2210 "\n",
2211 "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
2212 " var size = msg['size'];\n",
2213 " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
2214 " fig._resize_canvas(size[0], size[1]);\n",
2215 " fig.send_message(\"refresh\", {});\n",
2216 " };\n",
2217 "}\n",
2218 "\n",
2219 "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
2220 " var x0 = msg['x0'] / mpl.ratio;\n",
2221 " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
2222 " var x1 = msg['x1'] / mpl.ratio;\n",
2223 " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
2224 " x0 = Math.floor(x0) + 0.5;\n",
2225 " y0 = Math.floor(y0) + 0.5;\n",
2226 " x1 = Math.floor(x1) + 0.5;\n",
2227 " y1 = Math.floor(y1) + 0.5;\n",
2228 " var min_x = Math.min(x0, x1);\n",
2229 " var min_y = Math.min(y0, y1);\n",
2230 " var width = Math.abs(x1 - x0);\n",
2231 " var height = Math.abs(y1 - y0);\n",
2232 "\n",
2233 " fig.rubberband_context.clearRect(\n",
2234 " 0, 0, fig.canvas.width, fig.canvas.height);\n",
2235 "\n",
2236 " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
2237 "}\n",
2238 "\n",
2239 "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
2240 " // Updates the figure title.\n",
2241 " fig.header.textContent = msg['label'];\n",
2242 "}\n",
2243 "\n",
2244 "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
2245 " var cursor = msg['cursor'];\n",
2246 " switch(cursor)\n",
2247 " {\n",
2248 " case 0:\n",
2249 " cursor = 'pointer';\n",
2250 " break;\n",
2251 " case 1:\n",
2252 " cursor = 'default';\n",
2253 " break;\n",
2254 " case 2:\n",
2255 " cursor = 'crosshair';\n",
2256 " break;\n",
2257 " case 3:\n",
2258 " cursor = 'move';\n",
2259 " break;\n",
2260 " }\n",
2261 " fig.rubberband_canvas.style.cursor = cursor;\n",
2262 "}\n",
2263 "\n",
2264 "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
2265 " fig.message.textContent = msg['message'];\n",
2266 "}\n",
2267 "\n",
2268 "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
2269 " // Request the server to send over a new figure.\n",
2270 " fig.send_draw_message();\n",
2271 "}\n",
2272 "\n",
2273 "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
2274 " fig.image_mode = msg['mode'];\n",
2275 "}\n",
2276 "\n",
2277 "mpl.figure.prototype.updated_canvas_event = function() {\n",
2278 " // Called whenever the canvas gets updated.\n",
2279 " this.send_message(\"ack\", {});\n",
2280 "}\n",
2281 "\n",
2282 "// A function to construct a web socket function for onmessage handling.\n",
2283 "// Called in the figure constructor.\n",
2284 "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
2285 " return function socket_on_message(evt) {\n",
2286 " if (evt.data instanceof Blob) {\n",
2287 " /* FIXME: We get \"Resource interpreted as Image but\n",
2288 " * transferred with MIME type text/plain:\" errors on\n",
2289 " * Chrome. But how to set the MIME type? It doesn't seem\n",
2290 " * to be part of the websocket stream */\n",
2291 " evt.data.type = \"image/png\";\n",
2292 "\n",
2293 " /* Free the memory for the previous frames */\n",
2294 " if (fig.imageObj.src) {\n",
2295 " (window.URL || window.webkitURL).revokeObjectURL(\n",
2296 " fig.imageObj.src);\n",
2297 " }\n",
2298 "\n",
2299 " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
2300 " evt.data);\n",
2301 " fig.updated_canvas_event();\n",
2302 " fig.waiting = false;\n",
2303 " return;\n",
2304 " }\n",
2305 " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
2306 " fig.imageObj.src = evt.data;\n",
2307 " fig.updated_canvas_event();\n",
2308 " fig.waiting = false;\n",
2309 " return;\n",
2310 " }\n",
2311 "\n",
2312 " var msg = JSON.parse(evt.data);\n",
2313 " var msg_type = msg['type'];\n",
2314 "\n",
2315 " // Call the \"handle_{type}\" callback, which takes\n",
2316 " // the figure and JSON message as its only arguments.\n",
2317 " try {\n",
2318 " var callback = fig[\"handle_\" + msg_type];\n",
2319 " } catch (e) {\n",
2320 " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
2321 " return;\n",
2322 " }\n",
2323 "\n",
2324 " if (callback) {\n",
2325 " try {\n",
2326 " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
2327 " callback(fig, msg);\n",
2328 " } catch (e) {\n",
2329 " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
2330 " }\n",
2331 " }\n",
2332 " };\n",
2333 "}\n",
2334 "\n",
2335 "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
2336 "mpl.findpos = function(e) {\n",
2337 " //this section is from http://www.quirksmode.org/js/events_properties.html\n",
2338 " var targ;\n",
2339 " if (!e)\n",
2340 " e = window.event;\n",
2341 " if (e.target)\n",
2342 " targ = e.target;\n",
2343 " else if (e.srcElement)\n",
2344 " targ = e.srcElement;\n",
2345 " if (targ.nodeType == 3) // defeat Safari bug\n",
2346 " targ = targ.parentNode;\n",
2347 "\n",
2348 " // jQuery normalizes the pageX and pageY\n",
2349 " // pageX,Y are the mouse positions relative to the document\n",
2350 " // offset() returns the position of the element relative to the document\n",
2351 " var x = e.pageX - $(targ).offset().left;\n",
2352 " var y = e.pageY - $(targ).offset().top;\n",
2353 "\n",
2354 " return {\"x\": x, \"y\": y};\n",
2355 "};\n",
2356 "\n",
2357 "/*\n",
2358 " * return a copy of an object with only non-object keys\n",
2359 " * we need this to avoid circular references\n",
2360 " * http://stackoverflow.com/a/24161582/3208463\n",
2361 " */\n",
2362 "function simpleKeys (original) {\n",
2363 " return Object.keys(original).reduce(function (obj, key) {\n",
2364 " if (typeof original[key] !== 'object')\n",
2365 " obj[key] = original[key]\n",
2366 " return obj;\n",
2367 " }, {});\n",
2368 "}\n",
2369 "\n",
2370 "mpl.figure.prototype.mouse_event = function(event, name) {\n",
2371 " var canvas_pos = mpl.findpos(event)\n",
2372 "\n",
2373 " if (name === 'button_press')\n",
2374 " {\n",
2375 " this.canvas.focus();\n",
2376 " this.canvas_div.focus();\n",
2377 " }\n",
2378 "\n",
2379 " var x = canvas_pos.x * mpl.ratio;\n",
2380 " var y = canvas_pos.y * mpl.ratio;\n",
2381 "\n",
2382 " this.send_message(name, {x: x, y: y, button: event.button,\n",
2383 " step: event.step,\n",
2384 " guiEvent: simpleKeys(event)});\n",
2385 "\n",
2386 " /* This prevents the web browser from automatically changing to\n",
2387 " * the text insertion cursor when the button is pressed. We want\n",
2388 " * to control all of the cursor setting manually through the\n",
2389 " * 'cursor' event from matplotlib */\n",
2390 " event.preventDefault();\n",
2391 " return false;\n",
2392 "}\n",
2393 "\n",
2394 "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
2395 " // Handle any extra behaviour associated with a key event\n",
2396 "}\n",
2397 "\n",
2398 "mpl.figure.prototype.key_event = function(event, name) {\n",
2399 "\n",
2400 " // Prevent repeat events\n",
2401 " if (name == 'key_press')\n",
2402 " {\n",
2403 " if (event.which === this._key)\n",
2404 " return;\n",
2405 " else\n",
2406 " this._key = event.which;\n",
2407 " }\n",
2408 " if (name == 'key_release')\n",
2409 " this._key = null;\n",
2410 "\n",
2411 " var value = '';\n",
2412 " if (event.ctrlKey && event.which != 17)\n",
2413 " value += \"ctrl+\";\n",
2414 " if (event.altKey && event.which != 18)\n",
2415 " value += \"alt+\";\n",
2416 " if (event.shiftKey && event.which != 16)\n",
2417 " value += \"shift+\";\n",
2418 "\n",
2419 " value += 'k';\n",
2420 " value += event.which.toString();\n",
2421 "\n",
2422 " this._key_event_extra(event, name);\n",
2423 "\n",
2424 " this.send_message(name, {key: value,\n",
2425 " guiEvent: simpleKeys(event)});\n",
2426 " return false;\n",
2427 "}\n",
2428 "\n",
2429 "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
2430 " if (name == 'download') {\n",
2431 " this.handle_save(this, null);\n",
2432 " } else {\n",
2433 " this.send_message(\"toolbar_button\", {name: name});\n",
2434 " }\n",
2435 "};\n",
2436 "\n",
2437 "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
2438 " this.message.textContent = tooltip;\n",
2439 "};\n",
2440 "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",
2441 "\n",
2442 "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
2443 "\n",
2444 "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
2445 " // Create a \"websocket\"-like object which calls the given IPython comm\n",
2446 " // object with the appropriate methods. Currently this is a non binary\n",
2447 " // socket, so there is still some room for performance tuning.\n",
2448 " var ws = {};\n",
2449 "\n",
2450 " ws.close = function() {\n",
2451 " comm.close()\n",
2452 " };\n",
2453 " ws.send = function(m) {\n",
2454 " //console.log('sending', m);\n",
2455 " comm.send(m);\n",
2456 " };\n",
2457 " // Register the callback with on_msg.\n",
2458 " comm.on_msg(function(msg) {\n",
2459 " //console.log('receiving', msg['content']['data'], msg);\n",
2460 " // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
2461 " ws.onmessage(msg['content']['data'])\n",
2462 " });\n",
2463 " return ws;\n",
2464 "}\n",
2465 "\n",
2466 "mpl.mpl_figure_comm = function(comm, msg) {\n",
2467 " // This is the function which gets called when the mpl process\n",
2468 " // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
2469 "\n",
2470 " var id = msg.content.data.id;\n",
2471 " // Get hold of the div created by the display call when the Comm\n",
2472 " // socket was opened in Python.\n",
2473 " var element = $(\"#\" + id);\n",
2474 " var ws_proxy = comm_websocket_adapter(comm)\n",
2475 "\n",
2476 " function ondownload(figure, format) {\n",
2477 " window.open(figure.imageObj.src);\n",
2478 " }\n",
2479 "\n",
2480 " var fig = new mpl.figure(id, ws_proxy,\n",
2481 " ondownload,\n",
2482 " element.get(0));\n",
2483 "\n",
2484 " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
2485 " // web socket which is closed, not our websocket->open comm proxy.\n",
2486 " ws_proxy.onopen();\n",
2487 "\n",
2488 " fig.parent_element = element.get(0);\n",
2489 " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
2490 " if (!fig.cell_info) {\n",
2491 " console.error(\"Failed to find cell for figure\", id, fig);\n",
2492 " return;\n",
2493 " }\n",
2494 "\n",
2495 " var output_index = fig.cell_info[2]\n",
2496 " var cell = fig.cell_info[0];\n",
2497 "\n",
2498 "};\n",
2499 "\n",
2500 "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
2501 " var width = fig.canvas.width/mpl.ratio\n",
2502 " fig.root.unbind('remove')\n",
2503 "\n",
2504 " // Update the output cell to use the data from the current canvas.\n",
2505 " fig.push_to_output();\n",
2506 " var dataURL = fig.canvas.toDataURL();\n",
2507 " // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
2508 " // the notebook keyboard shortcuts fail.\n",
2509 " IPython.keyboard_manager.enable()\n",
2510 " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
2511 " fig.close_ws(fig, msg);\n",
2512 "}\n",
2513 "\n",
2514 "mpl.figure.prototype.close_ws = function(fig, msg){\n",
2515 " fig.send_message('closing', msg);\n",
2516 " // fig.ws.close()\n",
2517 "}\n",
2518 "\n",
2519 "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
2520 " // Turn the data on the canvas into data in the output cell.\n",
2521 " var width = this.canvas.width/mpl.ratio\n",
2522 " var dataURL = this.canvas.toDataURL();\n",
2523 " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
2524 "}\n",
2525 "\n",
2526 "mpl.figure.prototype.updated_canvas_event = function() {\n",
2527 " // Tell IPython that the notebook contents must change.\n",
2528 " IPython.notebook.set_dirty(true);\n",
2529 " this.send_message(\"ack\", {});\n",
2530 " var fig = this;\n",
2531 " // Wait a second, then push the new image to the DOM so\n",
2532 " // that it is saved nicely (might be nice to debounce this).\n",
2533 " setTimeout(function () { fig.push_to_output() }, 1000);\n",
2534 "}\n",
2535 "\n",
2536 "mpl.figure.prototype._init_toolbar = function() {\n",
2537 " var fig = this;\n",
2538 "\n",
2539 " var nav_element = $('<div/>')\n",
2540 " nav_element.attr('style', 'width: 100%');\n",
2541 " this.root.append(nav_element);\n",
2542 "\n",
2543 " // Define a callback function for later on.\n",
2544 " function toolbar_event(event) {\n",
2545 " return fig.toolbar_button_onclick(event['data']);\n",
2546 " }\n",
2547 " function toolbar_mouse_event(event) {\n",
2548 " return fig.toolbar_button_onmouseover(event['data']);\n",
2549 " }\n",
2550 "\n",
2551 " for(var toolbar_ind in mpl.toolbar_items){\n",
2552 " var name = mpl.toolbar_items[toolbar_ind][0];\n",
2553 " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
2554 " var image = mpl.toolbar_items[toolbar_ind][2];\n",
2555 " var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
2556 "\n",
2557 " if (!name) { continue; };\n",
2558 "\n",
2559 " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
2560 " button.click(method_name, toolbar_event);\n",
2561 " button.mouseover(tooltip, toolbar_mouse_event);\n",
2562 " nav_element.append(button);\n",
2563 " }\n",
2564 "\n",
2565 " // Add the status bar.\n",
2566 " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
2567 " nav_element.append(status_bar);\n",
2568 " this.message = status_bar[0];\n",
2569 "\n",
2570 " // Add the close button to the window.\n",
2571 " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
2572 " 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",
2573 " button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
2574 " button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
2575 " buttongrp.append(button);\n",
2576 " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
2577 " titlebar.prepend(buttongrp);\n",
2578 "}\n",
2579 "\n",
2580 "mpl.figure.prototype._root_extra_style = function(el){\n",
2581 " var fig = this\n",
2582 " el.on(\"remove\", function(){\n",
2583 "\tfig.close_ws(fig, {});\n",
2584 " });\n",
2585 "}\n",
2586 "\n",
2587 "mpl.figure.prototype._canvas_extra_style = function(el){\n",
2588 " // this is important to make the div 'focusable\n",
2589 " el.attr('tabindex', 0)\n",
2590 " // reach out to IPython and tell the keyboard manager to turn it's self\n",
2591 " // off when our div gets focus\n",
2592 "\n",
2593 " // location in version 3\n",
2594 " if (IPython.notebook.keyboard_manager) {\n",
2595 " IPython.notebook.keyboard_manager.register_events(el);\n",
2596 " }\n",
2597 " else {\n",
2598 " // location in version 2\n",
2599 " IPython.keyboard_manager.register_events(el);\n",
2600 " }\n",
2601 "\n",
2602 "}\n",
2603 "\n",
2604 "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
2605 " var manager = IPython.notebook.keyboard_manager;\n",
2606 " if (!manager)\n",
2607 " manager = IPython.keyboard_manager;\n",
2608 "\n",
2609 " // Check for shift+enter\n",
2610 " if (event.shiftKey && event.which == 13) {\n",
2611 " this.canvas_div.blur();\n",
2612 " event.shiftKey = false;\n",
2613 " // Send a \"J\" for go to next cell\n",
2614 " event.which = 74;\n",
2615 " event.keyCode = 74;\n",
2616 " manager.command_mode();\n",
2617 " manager.handle_keydown(event);\n",
2618 " }\n",
2619 "}\n",
2620 "\n",
2621 "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
2622 " fig.ondownload(fig, null);\n",
2623 "}\n",
2624 "\n",
2625 "\n",
2626 "mpl.find_output_cell = function(html_output) {\n",
2627 " // Return the cell and output element which can be found *uniquely* in the notebook.\n",
2628 " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
2629 " // IPython event is triggered only after the cells have been serialised, which for\n",
2630 " // our purposes (turning an active figure into a static one), is too late.\n",
2631 " var cells = IPython.notebook.get_cells();\n",
2632 " var ncells = cells.length;\n",
2633 " for (var i=0; i<ncells; i++) {\n",
2634 " var cell = cells[i];\n",
2635 " if (cell.cell_type === 'code'){\n",
2636 " for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
2637 " var data = cell.output_area.outputs[j];\n",
2638 " if (data.data) {\n",
2639 " // IPython >= 3 moved mimebundle to data attribute of output\n",
2640 " data = data.data;\n",
2641 " }\n",
2642 " if (data['text/html'] == html_output) {\n",
2643 " return [cell, data, j];\n",
2644 " }\n",
2645 " }\n",
2646 " }\n",
2647 " }\n",
2648 "}\n",
2649 "\n",
2650 "// Register the function which deals with the matplotlib target/channel.\n",
2651 "// The kernel may be null if the page has been refreshed.\n",
2652 "if (IPython.notebook.kernel != null) {\n",
2653 " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
2654 "}\n"
2655 ],
2656 "text/plain": [
2657 "<IPython.core.display.Javascript object>"
2658 ]
2659 },
2660 "metadata": {},
2661 "output_type": "display_data"
2662 },
2663 {
2664 "data": {
2665 "text/html": [
2666 "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAALQCAYAAAB118BaAAAgAElEQVR4nOzdZ3hUZf7/8XvGhCTUBVTUBQOiuCvwEwULFkRFsYuuiF0kqCgiokAASxAWVLC7CqirrLprV9QoIEVFKdJEigWI9N6lJRDy+T/gPycZ5pwhKMm5Z877dV1zLZmZTO6wfh9830wxAgAAAAAASHDG7wMAAAAAAAD8WQQOAAAAAACQ8AgcAAAAAAAg4RE4AAAAAABAwiNwAAAAAACAhEfgAAAAAAAACY/AAQAAAAAAEh6BAwAAAAAAJDwCBwAAAAAASHgEDgAAAAAAkPAIHAAAAAAAIOEROAAAAAAAQMIjcAAAAAAAgIRH4AAAIEHt3r1bxhidf/75fh8FAADAdwQOAAi4f/7znzLGyBijX375xe/j4ADYEDgKCwt11FFHyRijX3/9Ne59t23bpipVqigtLU3r1q0rszM9+OCDzn/TpbnUr1+/zM4SBM8884yMMfr444/9PgoAIOAIHAAQYEVFRapbt65CoZCMMXrggQf8PhIO0M8//6ylS5f6eoZIUOjRo0fc+7366qsyxui6664r0/OMGzdOOTk5UZfLL79cxhiddNJJMbc999xzZXqeZEfgAADYgsABAAE2atQoGWPUvn17HXHEETr00ENVUFDg97GQYBYtWqRwOKzDDz9cu3bt8rzf6aefLmOMxo8fX46n2+uVV16RMUZZWVnl/rOTHYEDAGALAgcABNg//vEPGWM0ceJEPfDAAzLG6J133om5X1ZWlowxys3NdX2c7777TsYYtWvXLur6bdu2acCAAfq///s/VaxYUZUqVVLz5s1df8aYMWNkjFH//v01efJkXXzxxapevbqMMVq2bJkkaezYscrKytLf/vY3ValSRRkZGWrYsKH69eun/Px817OtWLFCt9xyiw499FClp6erSZMmevPNN6N+3r7Wr1+vnj176vjjj1daWpqqVaumVq1aacyYMfv9O40o+fKRtWvXKisrS7Vq1VKFChXUsGFD/ec//3H9vj179ujFF19U06ZNVbFiRVWsWFGnnHKKhg4dqqKiIs+fUdKWLVvUt29fNWzYUJUrV1blypVVv359tWvXTjNnzoz5mZMmTdLVV1+tww8/XKmpqapdu7buvPNOrVy5stS/b+vWrWWM0QcffOB6+5w5c2SM0XHHHRd1/cKFC5WVlaVjjjlG6enpqlGjhho1aqROnTpp48aNpf75+3MggePjjz9Wq1atVL16dVWoUEHHHXecHnzwQW3bti3mvtWqVdOJJ56ojRs3qlOnTjryyCOVkZGhZs2aafTo0ZKk/Px8PfTQQ6pXr54qVKigBg0a6PXXX3f9ucYYPfPMMxo3bpxatGihypUrq2rVqrrssss0Z84c1/MWFBTo6aefVtOmTVWpUiVVrFhRzZo106uvvhpz3x9++EHGGHXt2lWzZ89WmzZtVLNmTRlj9MMPP0iSJk6cqLvuuksNGzZUtWrVlJaWpuOPP169evXS1q1box7vxBNP9Hzpz6ZNmyRJV155ZdTXXr/zvo9brVo1bd++Xb1799Yxxxyj1NRUde3a1blPUVGR/v3vf+vMM89U1apVlZ6erkaNGmnQoEHavXu3698VACC5ETgAIKBWr16t1NRUNWjQQFLxAnreeefF3HfChAkyxujaa691fazbb79dxhiNHDnSuW7jxo3O8tO0aVPdc889uvvuu3XMMcfIGKOcnJyox4gEh9atWys1NVXnn3++unfvrltuuUWrV6+WJJ1//vmqV6+err/+evXo0UOdO3dWkyZNnCW/sLAw6jFXrVqlo48+WsYYtWzZUr169dKtt96qjIwMtWnTxjVw/Pbbb8rMzJQxRi1atFC3bt3UsWNHHXHEEQqFQnrttddK9fcbiQ8nnXSS6tevr8aNG6tLly7q2LGjqlatKmOM3nrrrajvKSoq0rXXXitjjDIzM9W1a1d17drV+R1uvvlm159RMnAUFRXptNNOkzFGZ5xxhrp166bu3bvruuuuU61atTRkyJCox3j55ZcVDodVqVIl5+/1yiuvVDgc1l//+lctX768VL/vBx98IGOMLrroItfbu3btKmOMnnjiCee65cuXq3r16kpNTdWVV16pnj17qkuXLrrssstUsWJF/fzzz6X62aVR2sDRrVs3GWNUq1YttW/fXt27d1fLli1ljFGzZs20c+fOqPtXq1ZNxx13nBo3bqyGDRuqS5cuuu2225Senq7U1FRNnjxZrVq1Ut26dXXnnXeqU6dOTrgbNWpU1GNFlv1LL71UKSkpatOmjXr37q0rr7xSoVBIVapU0YwZM6K+Z/v27TrzzDNljFGjRo101113qUuXLvr73/8uY4w6d+4cdf9I4DjvvPNUsWJF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LWrWrJmMiX6fj/0Fjt9//1316tWTMXvfBLRnz55q166dKlWq5Lxh574xYeXKlU78aNmypXr37q327dsrIyNDbdq0kTFGAwYMiPqeJUuW6Nhjj3Xeu+COO+5Qz549dcMNN+iEE06QMUbTpk2L+/cn/bHAUVRU5LwHSr169dStWzfdd999yszMdF343X7G+++/r1AopNNOO03t27dX7969lZWVpUMPPVTGGD333HNRjzF8+HClpqYqNTVVV1xxhR544AHdc889uuKKK1S9enU1bNhwv7/rvubPnx/1cqeRI0e63q9z585KT0/XBRdcoE6dOqlXr1665pprlJaWpvT09LgR7kCVJnBIUu/evWXM3vcsufbaa9WzZ0/deeedat26tdLT09WuXbuo+5dF4Lj00kuVkpKiNm3aqHfv3mrTpo1CoZAqV64c84ksO3bscN4zo27durr11lvVq1cvtW/fXs2bN1coFNKQIUOc++8vcBQUFDgvXTrnnHPUo0cP3XjjjfrLX/6iiy++WFWqVIn5fZctW6bU1FTVqFFDXbt2Vf/+/dW/f3/l5+dL2huGInPYqlUrde/eXVdffbVSU1PVtm3bPxQ49uzZ48zQ4YcfrhtvvFHZ2dnq2LGjWrZsqZSUFGVnZ3t+PwAgORE4ACBAbrjhBtcl180FF1wgY4w++uijqOuLioqc0HDYYYe5fjpHRH5+vp577jmdfvrpqlq1qtLS0nT00Ufr/PPP17PPPqsNGzY4991f4JD2xofrr79eRx55pNLT03XCCSdo8ODBys/P94wJy5Yt080336yaNWsqPT1dTZo00RtvvOE8S8DtzSy3bNmi/v3766STTlKlSpWUkZGhevXq6dJLL9XLL79cqqfF/5HAIUmFhYV64YUXdPLJJysjI0MZGRlq2rSpXnrppZj3RHD7GUuXLlWvXr3UvHlz1apVSxUqVFDt2rV1ySWXeL4UZdasWbrlllt09NFHq0KFCk7Y6NSpk7766qv9/q5uIh+5mpmZGXPuiEmTJunOO+9U48aNVb16daWnp6t+/fq67bbboj6V52AobeCQ9n7KUJs2bVSrVi2lpqbqsMMO08knn6yePXvGPCugLALHM888o3HjxqlFixaqVKmSqlSpossuu0yzZ892fazCwkK98soratGihapVq+b8f96iRQsNGjQo6uVB+wsckrR69Wrd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\" width=\"900\">"
2667 ],
2668 "text/plain": [
2669 "<IPython.core.display.HTML object>"
2670 ]
2671 },
2672 "metadata": {},
2673 "output_type": "display_data"
2674 }
2675 ],
2676 "source": [
2677 "values = np.zeros(res.SWFCount())\n",
2678 "T = np.zeros(res.SWFCount())\n",
2679 "values2 = np.zeros(res.SWFCount())\n",
2680 "for i in range(0,res.SWFCount()):\n",
2681 " spec = TF.fft(res.SWF(0,i)[\"E1\"], TF.LFR_Fs0, np.hanning(2048))\n",
2682 " values[i] = spec[\"mod\"][200:].mean()\n",
2683 " T[i] = get_temperature_at(HK_TEMP_df,times[\"SWF0\"][i][\"Time\"])\n",
2684 " \n",
2685 "plt.figure(figsize=(9,6))\n",
2686 "plt.suptitle(\"Average noise Vs Temperature\")\n",
2687 "plt.xlabel(\"PCB Temperature(°C)\")\n",
2688 "plt.ylabel(\"Average noise\")\n",
2689 "plt.plot(T,values)\n",
2690 "plt.semilogy()\n",
2691 "plt.show()"
2692 ]
2693 },
2694 {
2695 "cell_type": "markdown",
2696 "metadata": {},
2697 "source": [
2698 "# -30°C to 20°C transition analysis"
2699 ]
2700 },
2701 {
2702 "cell_type": "code",
2703 "execution_count": 10,
2704 "metadata": {
2705 "ExecuteTime": {
2706 "end_time": "2018-06-29T12:21:38.812448Z",
2707 "start_time": "2018-06-29T12:21:38.694283Z"
2708 }
2709 },
2710 "outputs": [],
2711 "source": [
2712 "!rm /home/jeandet/Documents/SOLO_LFR_Notebooks/PPBI_06_2018/temp/*.png"
2713 ]
2714 },
2715 {
2716 "cell_type": "code",
2717 "execution_count": 40,
2718 "metadata": {
2719 "ExecuteTime": {
2720 "end_time": "2018-07-04T13:38:10.890126Z",
2721 "start_time": "2018-07-04T13:38:09.466843Z"
2722 }
2723 },
2724 "outputs": [],
2725 "source": [
2726 "res = ResultLoader(\"/home/jeandet/Documents/SOLO_LFR_Notebooks/PPBI_06_2018/-30_to_20_transition.outpout\")\n",
2727 "res.decomutePackets()\n",
2728 "res.loadSWF()\n",
2729 "temperatures = load_temperatures('/home/jeandet/ownCloud/TESTS_LFR_PFM1_PPBI_06_2018/Thermal_Chamber_Logs/Essai du 26 juin 2018.csv', [\"Time\",\"air\",\"PCB\", \"socket\"])\n",
2730 "times=load_packets_time(\n",
2731 " sumfile=\"/home/jeandet/Documents/DATA/LFR_Packets/decom/2018_06_26_15_00_52_packet_record.sum\",\n",
2732 " logfile=\"/home/jeandet/Documents/DATA/LFR_Packets/2018_06_26_15_00_51_packet_log.data\")\n",
2733 "\n",
2734 "\n",
2735 "with open(\"/home/jeandet/Documents/DATA/LFR_Packets/decom/2018_06_26_15_00_52_packet_record_HK.hk\",\"r\") as file:\n",
2736 " lines=file.readlines()\n",
2737 " HK_TEMP = lines[6::9] \n",
2738 " HK_PCB_TEMP = [float(T.split()[1]) for T in HK_TEMP]\n",
2739 " HK_PCB_TIME = [val['Time'] for val in times[\"HK\"]]\n",
2740 " HK_TEMP_df = pds.Series(HK_PCB_TEMP, name='PCBTemp',index=pds.DatetimeIndex(HK_PCB_TIME, dtype='datetime64[ns]', freq=None))"
2741 ]
2742 },
2743 {
2744 "cell_type": "code",
2745 "execution_count": 12,
2746 "metadata": {
2747 "ExecuteTime": {
2748 "end_time": "2018-06-29T12:23:08.428149Z",
2749 "start_time": "2018-06-29T12:21:43.373905Z"
2750 },
2751 "scrolled": true
2752 },
2753 "outputs": [],
2754 "source": [
2755 "%%capture\n",
2756 "for i in range(0,res.SWFCount()):\n",
2757 " f, axes = plt.subplots(nrows=2, ncols=3,figsize=(24,10))\n",
2758 " df=res.SWF(0,i)\n",
2759 " for ax,col in zip(axes.flatten(),df.columns):\n",
2760 " ax.plot(np.arange(2048),df[col])\n",
2761 " ax.set_ylim(-30000,30000)\n",
2762 " patches, labels = ax.get_legend_handles_labels()\n",
2763 " ax.legend(patches, labels, loc='upper left')\n",
2764 " T = get_temperature_at(temperatures,times[\"SWF0\"][i][\"Time\"]-datetime.timedelta(minutes=4,seconds=10))\n",
2765 " T_HK = get_temperature_at(HK_TEMP_df,times[\"SWF0\"][i][\"Time\"])\n",
2766 " suptitle=plt.suptitle(\"Air={T_Air:3.1f}°C PCB(HK)={T_PCB:3.1f}°C socket={T_socket:3.1f}°C\".format(T_Air=T[\"air\"],T_PCB=T_HK,T_socket=T[\"socket\"]),y=1.05, fontsize=24)\n",
2767 " plt.tight_layout()\n",
2768 " plt.savefig(\"/home/jeandet/Documents/SOLO_LFR_Notebooks/PPBI_06_2018/temp/\"+\"/plot_{i}.png\".format(i=i),bbox_inches='tight',bbox_extra_artists=[suptitle])\n",
2769 " plt.close()\n",
2770 " del axes\n",
2771 " del f\n",
2772 " del df\n",
2773 " del suptitle\n",
2774 " gc.collect()"
2775 ]
2776 },
2777 {
2778 "cell_type": "code",
2779 "execution_count": 13,
2780 "metadata": {
2781 "ExecuteTime": {
2782 "end_time": "2018-06-29T12:24:22.887029Z",
2783 "start_time": "2018-06-29T12:24:11.457143Z"
2784 }
2785 },
2786 "outputs": [],
2787 "source": [
2788 "%%capture\n",
2789 "!cd /home/jeandet/Documents/SOLO_LFR_Notebooks/PPBI_06_2018/temp/ && ffmpeg -y -framerate 15 -i plot_%d.png minus30_to_20_transition.mp4 && ffmpeg -y -i minus30_to_20_transition.mp4 -c:v libvpx-vp9 -b:v 2M -threads 8 minus30_to_20_transition.webm"
2790 ]
2791 },
2792 {
2793 "cell_type": "code",
2794 "execution_count": 14,
2795 "metadata": {
2796 "ExecuteTime": {
2797 "end_time": "2018-06-29T12:25:16.067271Z",
2798 "start_time": "2018-06-29T12:25:16.062111Z"
2799 }
2800 },
2801 "outputs": [
2802 {
2803 "data": {
2804 "text/html": [
2805 "<video width=\"90%\" style=\"display:block; margin: 0 auto;\" controls src=\"https://hephaistos.lpp.polytechnique.fr/data/LFR/PPBI_06_2018/minus30_to_20_transition.webm\" type=\"video/webm\">"
2806 ],
2807 "text/plain": [
2808 "<IPython.core.display.HTML object>"
2809 ]
2810 },
2811 "metadata": {},
2812 "output_type": "display_data"
2813 }
2814 ],
2815 "source": [
2816 "%%HTML\n",
2817 "<video width=\"90%\" style=\"display:block; margin: 0 auto;\" controls src=\"https://hephaistos.lpp.polytechnique.fr/data/LFR/PPBI_06_2018/minus30_to_20_transition.webm\" type=\"video/webm\">"
2818 ]
2819 },
2820 {
2821 "cell_type": "code",
2822 "execution_count": 42,
2823 "metadata": {
2824 "ExecuteTime": {
2825 "end_time": "2018-07-04T13:38:34.304348Z",
2826 "start_time": "2018-07-04T13:38:34.172511Z"
2827 }
2828 },
2829 "outputs": [
2830 {
2831 "data": {
2832 "application/javascript": [
2833 "/* Put everything inside the global mpl namespace */\n",
2834 "window.mpl = {};\n",
2835 "\n",
2836 "\n",
2837 "mpl.get_websocket_type = function() {\n",
2838 " if (typeof(WebSocket) !== 'undefined') {\n",
2839 " return WebSocket;\n",
2840 " } else if (typeof(MozWebSocket) !== 'undefined') {\n",
2841 " return MozWebSocket;\n",
2842 " } else {\n",
2843 " alert('Your browser does not have WebSocket support.' +\n",
2844 " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
2845 " 'Firefox 4 and 5 are also supported but you ' +\n",
2846 " 'have to enable WebSockets in about:config.');\n",
2847 " };\n",
2848 "}\n",
2849 "\n",
2850 "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
2851 " this.id = figure_id;\n",
2852 "\n",
2853 " this.ws = websocket;\n",
2854 "\n",
2855 " this.supports_binary = (this.ws.binaryType != undefined);\n",
2856 "\n",
2857 " if (!this.supports_binary) {\n",
2858 " var warnings = document.getElementById(\"mpl-warnings\");\n",
2859 " if (warnings) {\n",
2860 " warnings.style.display = 'block';\n",
2861 " warnings.textContent = (\n",
2862 " \"This browser does not support binary websocket messages. \" +\n",
2863 " \"Performance may be slow.\");\n",
2864 " }\n",
2865 " }\n",
2866 "\n",
2867 " this.imageObj = new Image();\n",
2868 "\n",
2869 " this.context = undefined;\n",
2870 " this.message = undefined;\n",
2871 " this.canvas = undefined;\n",
2872 " this.rubberband_canvas = undefined;\n",
2873 " this.rubberband_context = undefined;\n",
2874 " this.format_dropdown = undefined;\n",
2875 "\n",
2876 " this.image_mode = 'full';\n",
2877 "\n",
2878 " this.root = $('<div/>');\n",
2879 " this._root_extra_style(this.root)\n",
2880 " this.root.attr('style', 'display: inline-block');\n",
2881 "\n",
2882 " $(parent_element).append(this.root);\n",
2883 "\n",
2884 " this._init_header(this);\n",
2885 " this._init_canvas(this);\n",
2886 " this._init_toolbar(this);\n",
2887 "\n",
2888 " var fig = this;\n",
2889 "\n",
2890 " this.waiting = false;\n",
2891 "\n",
2892 " this.ws.onopen = function () {\n",
2893 " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
2894 " fig.send_message(\"send_image_mode\", {});\n",
2895 " if (mpl.ratio != 1) {\n",
2896 " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
2897 " }\n",
2898 " fig.send_message(\"refresh\", {});\n",
2899 " }\n",
2900 "\n",
2901 " this.imageObj.onload = function() {\n",
2902 " if (fig.image_mode == 'full') {\n",
2903 " // Full images could contain transparency (where diff images\n",
2904 " // almost always do), so we need to clear the canvas so that\n",
2905 " // there is no ghosting.\n",
2906 " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
2907 " }\n",
2908 " fig.context.drawImage(fig.imageObj, 0, 0);\n",
2909 " };\n",
2910 "\n",
2911 " this.imageObj.onunload = function() {\n",
2912 " fig.ws.close();\n",
2913 " }\n",
2914 "\n",
2915 " this.ws.onmessage = this._make_on_message_function(this);\n",
2916 "\n",
2917 " this.ondownload = ondownload;\n",
2918 "}\n",
2919 "\n",
2920 "mpl.figure.prototype._init_header = function() {\n",
2921 " var titlebar = $(\n",
2922 " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
2923 " 'ui-helper-clearfix\"/>');\n",
2924 " var titletext = $(\n",
2925 " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
2926 " 'text-align: center; padding: 3px;\"/>');\n",
2927 " titlebar.append(titletext)\n",
2928 " this.root.append(titlebar);\n",
2929 " this.header = titletext[0];\n",
2930 "}\n",
2931 "\n",
2932 "\n",
2933 "\n",
2934 "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
2935 "\n",
2936 "}\n",
2937 "\n",
2938 "\n",
2939 "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
2940 "\n",
2941 "}\n",
2942 "\n",
2943 "mpl.figure.prototype._init_canvas = function() {\n",
2944 " var fig = this;\n",
2945 "\n",
2946 " var canvas_div = $('<div/>');\n",
2947 "\n",
2948 " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
2949 "\n",
2950 " function canvas_keyboard_event(event) {\n",
2951 " return fig.key_event(event, event['data']);\n",
2952 " }\n",
2953 "\n",
2954 " canvas_div.keydown('key_press', canvas_keyboard_event);\n",
2955 " canvas_div.keyup('key_release', canvas_keyboard_event);\n",
2956 " this.canvas_div = canvas_div\n",
2957 " this._canvas_extra_style(canvas_div)\n",
2958 " this.root.append(canvas_div);\n",
2959 "\n",
2960 " var canvas = $('<canvas/>');\n",
2961 " canvas.addClass('mpl-canvas');\n",
2962 " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
2963 "\n",
2964 " this.canvas = canvas[0];\n",
2965 " this.context = canvas[0].getContext(\"2d\");\n",
2966 "\n",
2967 " var backingStore = this.context.backingStorePixelRatio ||\n",
2968 "\tthis.context.webkitBackingStorePixelRatio ||\n",
2969 "\tthis.context.mozBackingStorePixelRatio ||\n",
2970 "\tthis.context.msBackingStorePixelRatio ||\n",
2971 "\tthis.context.oBackingStorePixelRatio ||\n",
2972 "\tthis.context.backingStorePixelRatio || 1;\n",
2973 "\n",
2974 " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
2975 "\n",
2976 " var rubberband = $('<canvas/>');\n",
2977 " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
2978 "\n",
2979 " var pass_mouse_events = true;\n",
2980 "\n",
2981 " canvas_div.resizable({\n",
2982 " start: function(event, ui) {\n",
2983 " pass_mouse_events = false;\n",
2984 " },\n",
2985 " resize: function(event, ui) {\n",
2986 " fig.request_resize(ui.size.width, ui.size.height);\n",
2987 " },\n",
2988 " stop: function(event, ui) {\n",
2989 " pass_mouse_events = true;\n",
2990 " fig.request_resize(ui.size.width, ui.size.height);\n",
2991 " },\n",
2992 " });\n",
2993 "\n",
2994 " function mouse_event_fn(event) {\n",
2995 " if (pass_mouse_events)\n",
2996 " return fig.mouse_event(event, event['data']);\n",
2997 " }\n",
2998 "\n",
2999 " rubberband.mousedown('button_press', mouse_event_fn);\n",
3000 " rubberband.mouseup('button_release', mouse_event_fn);\n",
3001 " // Throttle sequential mouse events to 1 every 20ms.\n",
3002 " rubberband.mousemove('motion_notify', mouse_event_fn);\n",
3003 "\n",
3004 " rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
3005 " rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
3006 "\n",
3007 " canvas_div.on(\"wheel\", function (event) {\n",
3008 " event = event.originalEvent;\n",
3009 " event['data'] = 'scroll'\n",
3010 " if (event.deltaY < 0) {\n",
3011 " event.step = 1;\n",
3012 " } else {\n",
3013 " event.step = -1;\n",
3014 " }\n",
3015 " mouse_event_fn(event);\n",
3016 " });\n",
3017 "\n",
3018 " canvas_div.append(canvas);\n",
3019 " canvas_div.append(rubberband);\n",
3020 "\n",
3021 " this.rubberband = rubberband;\n",
3022 " this.rubberband_canvas = rubberband[0];\n",
3023 " this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
3024 " this.rubberband_context.strokeStyle = \"#000000\";\n",
3025 "\n",
3026 " this._resize_canvas = function(width, height) {\n",
3027 " // Keep the size of the canvas, canvas container, and rubber band\n",
3028 " // canvas in synch.\n",
3029 " canvas_div.css('width', width)\n",
3030 " canvas_div.css('height', height)\n",
3031 "\n",
3032 " canvas.attr('width', width * mpl.ratio);\n",
3033 " canvas.attr('height', height * mpl.ratio);\n",
3034 " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
3035 "\n",
3036 " rubberband.attr('width', width);\n",
3037 " rubberband.attr('height', height);\n",
3038 " }\n",
3039 "\n",
3040 " // Set the figure to an initial 600x600px, this will subsequently be updated\n",
3041 " // upon first draw.\n",
3042 " this._resize_canvas(600, 600);\n",
3043 "\n",
3044 " // Disable right mouse context menu.\n",
3045 " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
3046 " return false;\n",
3047 " });\n",
3048 "\n",
3049 " function set_focus () {\n",
3050 " canvas.focus();\n",
3051 " canvas_div.focus();\n",
3052 " }\n",
3053 "\n",
3054 " window.setTimeout(set_focus, 100);\n",
3055 "}\n",
3056 "\n",
3057 "mpl.figure.prototype._init_toolbar = function() {\n",
3058 " var fig = this;\n",
3059 "\n",
3060 " var nav_element = $('<div/>')\n",
3061 " nav_element.attr('style', 'width: 100%');\n",
3062 " this.root.append(nav_element);\n",
3063 "\n",
3064 " // Define a callback function for later on.\n",
3065 " function toolbar_event(event) {\n",
3066 " return fig.toolbar_button_onclick(event['data']);\n",
3067 " }\n",
3068 " function toolbar_mouse_event(event) {\n",
3069 " return fig.toolbar_button_onmouseover(event['data']);\n",
3070 " }\n",
3071 "\n",
3072 " for(var toolbar_ind in mpl.toolbar_items) {\n",
3073 " var name = mpl.toolbar_items[toolbar_ind][0];\n",
3074 " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
3075 " var image = mpl.toolbar_items[toolbar_ind][2];\n",
3076 " var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
3077 "\n",
3078 " if (!name) {\n",
3079 " // put a spacer in here.\n",
3080 " continue;\n",
3081 " }\n",
3082 " var button = $('<button/>');\n",
3083 " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
3084 " 'ui-button-icon-only');\n",
3085 " button.attr('role', 'button');\n",
3086 " button.attr('aria-disabled', 'false');\n",
3087 " button.click(method_name, toolbar_event);\n",
3088 " button.mouseover(tooltip, toolbar_mouse_event);\n",
3089 "\n",
3090 " var icon_img = $('<span/>');\n",
3091 " icon_img.addClass('ui-button-icon-primary ui-icon');\n",
3092 " icon_img.addClass(image);\n",
3093 " icon_img.addClass('ui-corner-all');\n",
3094 "\n",
3095 " var tooltip_span = $('<span/>');\n",
3096 " tooltip_span.addClass('ui-button-text');\n",
3097 " tooltip_span.html(tooltip);\n",
3098 "\n",
3099 " button.append(icon_img);\n",
3100 " button.append(tooltip_span);\n",
3101 "\n",
3102 " nav_element.append(button);\n",
3103 " }\n",
3104 "\n",
3105 " var fmt_picker_span = $('<span/>');\n",
3106 "\n",
3107 " var fmt_picker = $('<select/>');\n",
3108 " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
3109 " fmt_picker_span.append(fmt_picker);\n",
3110 " nav_element.append(fmt_picker_span);\n",
3111 " this.format_dropdown = fmt_picker[0];\n",
3112 "\n",
3113 " for (var ind in mpl.extensions) {\n",
3114 " var fmt = mpl.extensions[ind];\n",
3115 " var option = $(\n",
3116 " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
3117 " fmt_picker.append(option)\n",
3118 " }\n",
3119 "\n",
3120 " // Add hover states to the ui-buttons\n",
3121 " $( \".ui-button\" ).hover(\n",
3122 " function() { $(this).addClass(\"ui-state-hover\");},\n",
3123 " function() { $(this).removeClass(\"ui-state-hover\");}\n",
3124 " );\n",
3125 "\n",
3126 " var status_bar = $('<span class=\"mpl-message\"/>');\n",
3127 " nav_element.append(status_bar);\n",
3128 " this.message = status_bar[0];\n",
3129 "}\n",
3130 "\n",
3131 "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
3132 " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
3133 " // which will in turn request a refresh of the image.\n",
3134 " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
3135 "}\n",
3136 "\n",
3137 "mpl.figure.prototype.send_message = function(type, properties) {\n",
3138 " properties['type'] = type;\n",
3139 " properties['figure_id'] = this.id;\n",
3140 " this.ws.send(JSON.stringify(properties));\n",
3141 "}\n",
3142 "\n",
3143 "mpl.figure.prototype.send_draw_message = function() {\n",
3144 " if (!this.waiting) {\n",
3145 " this.waiting = true;\n",
3146 " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
3147 " }\n",
3148 "}\n",
3149 "\n",
3150 "\n",
3151 "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
3152 " var format_dropdown = fig.format_dropdown;\n",
3153 " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
3154 " fig.ondownload(fig, format);\n",
3155 "}\n",
3156 "\n",
3157 "\n",
3158 "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
3159 " var size = msg['size'];\n",
3160 " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
3161 " fig._resize_canvas(size[0], size[1]);\n",
3162 " fig.send_message(\"refresh\", {});\n",
3163 " };\n",
3164 "}\n",
3165 "\n",
3166 "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
3167 " var x0 = msg['x0'] / mpl.ratio;\n",
3168 " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
3169 " var x1 = msg['x1'] / mpl.ratio;\n",
3170 " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
3171 " x0 = Math.floor(x0) + 0.5;\n",
3172 " y0 = Math.floor(y0) + 0.5;\n",
3173 " x1 = Math.floor(x1) + 0.5;\n",
3174 " y1 = Math.floor(y1) + 0.5;\n",
3175 " var min_x = Math.min(x0, x1);\n",
3176 " var min_y = Math.min(y0, y1);\n",
3177 " var width = Math.abs(x1 - x0);\n",
3178 " var height = Math.abs(y1 - y0);\n",
3179 "\n",
3180 " fig.rubberband_context.clearRect(\n",
3181 " 0, 0, fig.canvas.width, fig.canvas.height);\n",
3182 "\n",
3183 " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
3184 "}\n",
3185 "\n",
3186 "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
3187 " // Updates the figure title.\n",
3188 " fig.header.textContent = msg['label'];\n",
3189 "}\n",
3190 "\n",
3191 "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
3192 " var cursor = msg['cursor'];\n",
3193 " switch(cursor)\n",
3194 " {\n",
3195 " case 0:\n",
3196 " cursor = 'pointer';\n",
3197 " break;\n",
3198 " case 1:\n",
3199 " cursor = 'default';\n",
3200 " break;\n",
3201 " case 2:\n",
3202 " cursor = 'crosshair';\n",
3203 " break;\n",
3204 " case 3:\n",
3205 " cursor = 'move';\n",
3206 " break;\n",
3207 " }\n",
3208 " fig.rubberband_canvas.style.cursor = cursor;\n",
3209 "}\n",
3210 "\n",
3211 "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
3212 " fig.message.textContent = msg['message'];\n",
3213 "}\n",
3214 "\n",
3215 "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
3216 " // Request the server to send over a new figure.\n",
3217 " fig.send_draw_message();\n",
3218 "}\n",
3219 "\n",
3220 "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
3221 " fig.image_mode = msg['mode'];\n",
3222 "}\n",
3223 "\n",
3224 "mpl.figure.prototype.updated_canvas_event = function() {\n",
3225 " // Called whenever the canvas gets updated.\n",
3226 " this.send_message(\"ack\", {});\n",
3227 "}\n",
3228 "\n",
3229 "// A function to construct a web socket function for onmessage handling.\n",
3230 "// Called in the figure constructor.\n",
3231 "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
3232 " return function socket_on_message(evt) {\n",
3233 " if (evt.data instanceof Blob) {\n",
3234 " /* FIXME: We get \"Resource interpreted as Image but\n",
3235 " * transferred with MIME type text/plain:\" errors on\n",
3236 " * Chrome. But how to set the MIME type? It doesn't seem\n",
3237 " * to be part of the websocket stream */\n",
3238 " evt.data.type = \"image/png\";\n",
3239 "\n",
3240 " /* Free the memory for the previous frames */\n",
3241 " if (fig.imageObj.src) {\n",
3242 " (window.URL || window.webkitURL).revokeObjectURL(\n",
3243 " fig.imageObj.src);\n",
3244 " }\n",
3245 "\n",
3246 " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
3247 " evt.data);\n",
3248 " fig.updated_canvas_event();\n",
3249 " fig.waiting = false;\n",
3250 " return;\n",
3251 " }\n",
3252 " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
3253 " fig.imageObj.src = evt.data;\n",
3254 " fig.updated_canvas_event();\n",
3255 " fig.waiting = false;\n",
3256 " return;\n",
3257 " }\n",
3258 "\n",
3259 " var msg = JSON.parse(evt.data);\n",
3260 " var msg_type = msg['type'];\n",
3261 "\n",
3262 " // Call the \"handle_{type}\" callback, which takes\n",
3263 " // the figure and JSON message as its only arguments.\n",
3264 " try {\n",
3265 " var callback = fig[\"handle_\" + msg_type];\n",
3266 " } catch (e) {\n",
3267 " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
3268 " return;\n",
3269 " }\n",
3270 "\n",
3271 " if (callback) {\n",
3272 " try {\n",
3273 " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
3274 " callback(fig, msg);\n",
3275 " } catch (e) {\n",
3276 " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
3277 " }\n",
3278 " }\n",
3279 " };\n",
3280 "}\n",
3281 "\n",
3282 "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
3283 "mpl.findpos = function(e) {\n",
3284 " //this section is from http://www.quirksmode.org/js/events_properties.html\n",
3285 " var targ;\n",
3286 " if (!e)\n",
3287 " e = window.event;\n",
3288 " if (e.target)\n",
3289 " targ = e.target;\n",
3290 " else if (e.srcElement)\n",
3291 " targ = e.srcElement;\n",
3292 " if (targ.nodeType == 3) // defeat Safari bug\n",
3293 " targ = targ.parentNode;\n",
3294 "\n",
3295 " // jQuery normalizes the pageX and pageY\n",
3296 " // pageX,Y are the mouse positions relative to the document\n",
3297 " // offset() returns the position of the element relative to the document\n",
3298 " var x = e.pageX - $(targ).offset().left;\n",
3299 " var y = e.pageY - $(targ).offset().top;\n",
3300 "\n",
3301 " return {\"x\": x, \"y\": y};\n",
3302 "};\n",
3303 "\n",
3304 "/*\n",
3305 " * return a copy of an object with only non-object keys\n",
3306 " * we need this to avoid circular references\n",
3307 " * http://stackoverflow.com/a/24161582/3208463\n",
3308 " */\n",
3309 "function simpleKeys (original) {\n",
3310 " return Object.keys(original).reduce(function (obj, key) {\n",
3311 " if (typeof original[key] !== 'object')\n",
3312 " obj[key] = original[key]\n",
3313 " return obj;\n",
3314 " }, {});\n",
3315 "}\n",
3316 "\n",
3317 "mpl.figure.prototype.mouse_event = function(event, name) {\n",
3318 " var canvas_pos = mpl.findpos(event)\n",
3319 "\n",
3320 " if (name === 'button_press')\n",
3321 " {\n",
3322 " this.canvas.focus();\n",
3323 " this.canvas_div.focus();\n",
3324 " }\n",
3325 "\n",
3326 " var x = canvas_pos.x * mpl.ratio;\n",
3327 " var y = canvas_pos.y * mpl.ratio;\n",
3328 "\n",
3329 " this.send_message(name, {x: x, y: y, button: event.button,\n",
3330 " step: event.step,\n",
3331 " guiEvent: simpleKeys(event)});\n",
3332 "\n",
3333 " /* This prevents the web browser from automatically changing to\n",
3334 " * the text insertion cursor when the button is pressed. We want\n",
3335 " * to control all of the cursor setting manually through the\n",
3336 " * 'cursor' event from matplotlib */\n",
3337 " event.preventDefault();\n",
3338 " return false;\n",
3339 "}\n",
3340 "\n",
3341 "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
3342 " // Handle any extra behaviour associated with a key event\n",
3343 "}\n",
3344 "\n",
3345 "mpl.figure.prototype.key_event = function(event, name) {\n",
3346 "\n",
3347 " // Prevent repeat events\n",
3348 " if (name == 'key_press')\n",
3349 " {\n",
3350 " if (event.which === this._key)\n",
3351 " return;\n",
3352 " else\n",
3353 " this._key = event.which;\n",
3354 " }\n",
3355 " if (name == 'key_release')\n",
3356 " this._key = null;\n",
3357 "\n",
3358 " var value = '';\n",
3359 " if (event.ctrlKey && event.which != 17)\n",
3360 " value += \"ctrl+\";\n",
3361 " if (event.altKey && event.which != 18)\n",
3362 " value += \"alt+\";\n",
3363 " if (event.shiftKey && event.which != 16)\n",
3364 " value += \"shift+\";\n",
3365 "\n",
3366 " value += 'k';\n",
3367 " value += event.which.toString();\n",
3368 "\n",
3369 " this._key_event_extra(event, name);\n",
3370 "\n",
3371 " this.send_message(name, {key: value,\n",
3372 " guiEvent: simpleKeys(event)});\n",
3373 " return false;\n",
3374 "}\n",
3375 "\n",
3376 "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
3377 " if (name == 'download') {\n",
3378 " this.handle_save(this, null);\n",
3379 " } else {\n",
3380 " this.send_message(\"toolbar_button\", {name: name});\n",
3381 " }\n",
3382 "};\n",
3383 "\n",
3384 "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
3385 " this.message.textContent = tooltip;\n",
3386 "};\n",
3387 "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",
3388 "\n",
3389 "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
3390 "\n",
3391 "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
3392 " // Create a \"websocket\"-like object which calls the given IPython comm\n",
3393 " // object with the appropriate methods. Currently this is a non binary\n",
3394 " // socket, so there is still some room for performance tuning.\n",
3395 " var ws = {};\n",
3396 "\n",
3397 " ws.close = function() {\n",
3398 " comm.close()\n",
3399 " };\n",
3400 " ws.send = function(m) {\n",
3401 " //console.log('sending', m);\n",
3402 " comm.send(m);\n",
3403 " };\n",
3404 " // Register the callback with on_msg.\n",
3405 " comm.on_msg(function(msg) {\n",
3406 " //console.log('receiving', msg['content']['data'], msg);\n",
3407 " // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
3408 " ws.onmessage(msg['content']['data'])\n",
3409 " });\n",
3410 " return ws;\n",
3411 "}\n",
3412 "\n",
3413 "mpl.mpl_figure_comm = function(comm, msg) {\n",
3414 " // This is the function which gets called when the mpl process\n",
3415 " // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
3416 "\n",
3417 " var id = msg.content.data.id;\n",
3418 " // Get hold of the div created by the display call when the Comm\n",
3419 " // socket was opened in Python.\n",
3420 " var element = $(\"#\" + id);\n",
3421 " var ws_proxy = comm_websocket_adapter(comm)\n",
3422 "\n",
3423 " function ondownload(figure, format) {\n",
3424 " window.open(figure.imageObj.src);\n",
3425 " }\n",
3426 "\n",
3427 " var fig = new mpl.figure(id, ws_proxy,\n",
3428 " ondownload,\n",
3429 " element.get(0));\n",
3430 "\n",
3431 " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
3432 " // web socket which is closed, not our websocket->open comm proxy.\n",
3433 " ws_proxy.onopen();\n",
3434 "\n",
3435 " fig.parent_element = element.get(0);\n",
3436 " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
3437 " if (!fig.cell_info) {\n",
3438 " console.error(\"Failed to find cell for figure\", id, fig);\n",
3439 " return;\n",
3440 " }\n",
3441 "\n",
3442 " var output_index = fig.cell_info[2]\n",
3443 " var cell = fig.cell_info[0];\n",
3444 "\n",
3445 "};\n",
3446 "\n",
3447 "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
3448 " var width = fig.canvas.width/mpl.ratio\n",
3449 " fig.root.unbind('remove')\n",
3450 "\n",
3451 " // Update the output cell to use the data from the current canvas.\n",
3452 " fig.push_to_output();\n",
3453 " var dataURL = fig.canvas.toDataURL();\n",
3454 " // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
3455 " // the notebook keyboard shortcuts fail.\n",
3456 " IPython.keyboard_manager.enable()\n",
3457 " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
3458 " fig.close_ws(fig, msg);\n",
3459 "}\n",
3460 "\n",
3461 "mpl.figure.prototype.close_ws = function(fig, msg){\n",
3462 " fig.send_message('closing', msg);\n",
3463 " // fig.ws.close()\n",
3464 "}\n",
3465 "\n",
3466 "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
3467 " // Turn the data on the canvas into data in the output cell.\n",
3468 " var width = this.canvas.width/mpl.ratio\n",
3469 " var dataURL = this.canvas.toDataURL();\n",
3470 " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
3471 "}\n",
3472 "\n",
3473 "mpl.figure.prototype.updated_canvas_event = function() {\n",
3474 " // Tell IPython that the notebook contents must change.\n",
3475 " IPython.notebook.set_dirty(true);\n",
3476 " this.send_message(\"ack\", {});\n",
3477 " var fig = this;\n",
3478 " // Wait a second, then push the new image to the DOM so\n",
3479 " // that it is saved nicely (might be nice to debounce this).\n",
3480 " setTimeout(function () { fig.push_to_output() }, 1000);\n",
3481 "}\n",
3482 "\n",
3483 "mpl.figure.prototype._init_toolbar = function() {\n",
3484 " var fig = this;\n",
3485 "\n",
3486 " var nav_element = $('<div/>')\n",
3487 " nav_element.attr('style', 'width: 100%');\n",
3488 " this.root.append(nav_element);\n",
3489 "\n",
3490 " // Define a callback function for later on.\n",
3491 " function toolbar_event(event) {\n",
3492 " return fig.toolbar_button_onclick(event['data']);\n",
3493 " }\n",
3494 " function toolbar_mouse_event(event) {\n",
3495 " return fig.toolbar_button_onmouseover(event['data']);\n",
3496 " }\n",
3497 "\n",
3498 " for(var toolbar_ind in mpl.toolbar_items){\n",
3499 " var name = mpl.toolbar_items[toolbar_ind][0];\n",
3500 " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
3501 " var image = mpl.toolbar_items[toolbar_ind][2];\n",
3502 " var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
3503 "\n",
3504 " if (!name) { continue; };\n",
3505 "\n",
3506 " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
3507 " button.click(method_name, toolbar_event);\n",
3508 " button.mouseover(tooltip, toolbar_mouse_event);\n",
3509 " nav_element.append(button);\n",
3510 " }\n",
3511 "\n",
3512 " // Add the status bar.\n",
3513 " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
3514 " nav_element.append(status_bar);\n",
3515 " this.message = status_bar[0];\n",
3516 "\n",
3517 " // Add the close button to the window.\n",
3518 " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
3519 " 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",
3520 " button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
3521 " button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
3522 " buttongrp.append(button);\n",
3523 " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
3524 " titlebar.prepend(buttongrp);\n",
3525 "}\n",
3526 "\n",
3527 "mpl.figure.prototype._root_extra_style = function(el){\n",
3528 " var fig = this\n",
3529 " el.on(\"remove\", function(){\n",
3530 "\tfig.close_ws(fig, {});\n",
3531 " });\n",
3532 "}\n",
3533 "\n",
3534 "mpl.figure.prototype._canvas_extra_style = function(el){\n",
3535 " // this is important to make the div 'focusable\n",
3536 " el.attr('tabindex', 0)\n",
3537 " // reach out to IPython and tell the keyboard manager to turn it's self\n",
3538 " // off when our div gets focus\n",
3539 "\n",
3540 " // location in version 3\n",
3541 " if (IPython.notebook.keyboard_manager) {\n",
3542 " IPython.notebook.keyboard_manager.register_events(el);\n",
3543 " }\n",
3544 " else {\n",
3545 " // location in version 2\n",
3546 " IPython.keyboard_manager.register_events(el);\n",
3547 " }\n",
3548 "\n",
3549 "}\n",
3550 "\n",
3551 "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
3552 " var manager = IPython.notebook.keyboard_manager;\n",
3553 " if (!manager)\n",
3554 " manager = IPython.keyboard_manager;\n",
3555 "\n",
3556 " // Check for shift+enter\n",
3557 " if (event.shiftKey && event.which == 13) {\n",
3558 " this.canvas_div.blur();\n",
3559 " event.shiftKey = false;\n",
3560 " // Send a \"J\" for go to next cell\n",
3561 " event.which = 74;\n",
3562 " event.keyCode = 74;\n",
3563 " manager.command_mode();\n",
3564 " manager.handle_keydown(event);\n",
3565 " }\n",
3566 "}\n",
3567 "\n",
3568 "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
3569 " fig.ondownload(fig, null);\n",
3570 "}\n",
3571 "\n",
3572 "\n",
3573 "mpl.find_output_cell = function(html_output) {\n",
3574 " // Return the cell and output element which can be found *uniquely* in the notebook.\n",
3575 " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
3576 " // IPython event is triggered only after the cells have been serialised, which for\n",
3577 " // our purposes (turning an active figure into a static one), is too late.\n",
3578 " var cells = IPython.notebook.get_cells();\n",
3579 " var ncells = cells.length;\n",
3580 " for (var i=0; i<ncells; i++) {\n",
3581 " var cell = cells[i];\n",
3582 " if (cell.cell_type === 'code'){\n",
3583 " for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
3584 " var data = cell.output_area.outputs[j];\n",
3585 " if (data.data) {\n",
3586 " // IPython >= 3 moved mimebundle to data attribute of output\n",
3587 " data = data.data;\n",
3588 " }\n",
3589 " if (data['text/html'] == html_output) {\n",
3590 " return [cell, data, j];\n",
3591 " }\n",
3592 " }\n",
3593 " }\n",
3594 " }\n",
3595 "}\n",
3596 "\n",
3597 "// Register the function which deals with the matplotlib target/channel.\n",
3598 "// The kernel may be null if the page has been refreshed.\n",
3599 "if (IPython.notebook.kernel != null) {\n",
3600 " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
3601 "}\n"
3602 ],
3603 "text/plain": [
3604 "<IPython.core.display.Javascript object>"
3605 ]
3606 },
3607 "metadata": {},
3608 "output_type": "display_data"
1927 3609 },
1928 "scrolled": true
1929 },
1930 "outputs": [],
1931 "source": [
1932 "%%capture\n",
1933 "for i in range(0,res.SWFCount()):\n",
1934 " f, axes = plt.subplots(nrows=2, ncols=3,figsize=(24,10))\n",
1935 " df=res.SWF(0,i)\n",
1936 " for ax,col in zip(axes.flatten(),df.columns):\n",
1937 " ax.plot(np.arange(2048),df[col])\n",
1938 " ax.set_ylim(-30000,30000)\n",
1939 " patches, labels = ax.get_legend_handles_labels()\n",
1940 " ax.legend(patches, labels, loc='upper left')\n",
1941 " T = get_temperature_at(temperatures,times[\"SWF0\"][i][\"Time\"]-datetime.timedelta(minutes=4,seconds=10))\n",
1942 " T_HK = get_temperature_at(HK_TEMP_df,times[\"SWF0\"][i][\"Time\"])\n",
1943 " suptitle=plt.suptitle(\"Air={T_Air:3.1f}°C PCB(HK)={T_PCB:3.1f}°C socket={T_socket:3.1f}°C\".format(T_Air=T[\"air\"],T_PCB=T_HK,T_socket=T[\"socket\"]),y=1.05, fontsize=24)\n",
1944 " plt.tight_layout()\n",
1945 " plt.savefig(\"/home/jeandet/Documents/SOLO_LFR_Notebooks/PPBI_06_2018/temp/\"+\"/plot_{i}.png\".format(i=i),bbox_inches='tight',bbox_extra_artists=[suptitle])\n",
1946 " plt.close()\n",
1947 " del axes\n",
1948 " del f\n",
1949 " del df\n",
1950 " del suptitle\n",
1951 " gc.collect()"
1952 ]
1953 },
1954 {
1955 "cell_type": "code",
1956 "execution_count": 13,
1957 "metadata": {
1958 "ExecuteTime": {
1959 "end_time": "2018-06-29T12:24:22.887029Z",
1960 "start_time": "2018-06-29T12:24:11.457143Z"
1961 }
1962 },
1963 "outputs": [],
1964 "source": [
1965 "%%capture\n",
1966 "!cd /home/jeandet/Documents/SOLO_LFR_Notebooks/PPBI_06_2018/temp/ && ffmpeg -y -framerate 15 -i plot_%d.png minus30_to_20_transition.mp4 && ffmpeg -y -i minus30_to_20_transition.mp4 -c:v libvpx-vp9 -b:v 2M -threads 8 minus30_to_20_transition.webm"
1967 ]
1968 },
1969 {
1970 "cell_type": "code",
1971 "execution_count": 14,
1972 "metadata": {
1973 "ExecuteTime": {
1974 "end_time": "2018-06-29T12:25:16.067271Z",
1975 "start_time": "2018-06-29T12:25:16.062111Z"
1976 }
1977 },
1978 "outputs": [
1979 3610 {
1980 3611 "data": {
1981 3612 "text/html": [
1982 "<video width=\"90%\" style=\"display:block; margin: 0 auto;\" controls src=\"https://hephaistos.lpp.polytechnique.fr/data/LFR/PPBI_06_2018/minus30_to_20_transition.webm\" type=\"video/webm\">"
3613 "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAALQCAYAAAB118BaAAAgAElEQVR4nOzdd3wUdf7H8UlMqAKH5dQ7zwER9A44C1iwouJhO8XCYT8UC1bkJzCACiiCCiKoKCAqil1PRR167733DqH3koT0ff/+iBlYMoEkZLP73X09H499PM7d2e98Nufnj8/bme9YAgAAAAAAMJwV7gIAAAAAAABOFAEHAAAAAAAwHgEHAAAAAAAwHgEHAAAAAAAwHgEHAAAAAAAwHgEHAAAAAAAwHgEHAAAAAAAwHgEHAAAAAAAwHgEHAAAAAAAwHgEHAAAAAAAwHgEHAAAAAAAwHgEHAAAAAAAwHgEHAAAAAAAwHgEHAACGysrKkmVZuvHGG8NdCgAAQNgRcABAjHvjjTdkWZYsy9KKFSvCXQ6KIBICjuzsbP3lL3+RZVlauXLlMY9NSUlRpUqVVLZsWe3atStkNb388svev9OFedWoUSNktcSC3r17y7Is/fLLL+EuBQAQ4wg4ACCGBQIBVatWTXFxcbIsSy+99FK4S0IRLV++XElJSWGtIS9QaNu27TGP++STT2RZlu67776Q1jN27Fh17tw56PXvf/9blmXp4osvzvfZe++9F9J6oh0BBwAgUhBwAEAMGzFihCzLUvPmzXXmmWfqtNNOU0ZGRrjLgmHWr1+v+Ph4/fnPf1ZmZmaBx11xxRWyLEvjxo0rxepyDRw4UJZlqUWLFqV+7mhHwAEAiBQEHAAQw+655x5ZlqWpU6fqpZdekmVZ+u677/Id16JFC1mWJdd1fdeZMmWKLMtSs2bNgt5PSUlRt27d9M9//lMVKlRQxYoV1aBBA99zjB49WpZlqWvXrpo+fbpuueUWVa1aVZZladOmTZKkMWPGqEWLFrrgggtUqVIllS9fXrVr19brr7+u9PR039q2bNmiRx55RKeddprKlSuniy66SF9++WXQ+Y62e/dutWvXTueff77Kli2rKlWqqFGjRho9evRx/6Z5jrx9ZOfOnWrRooXOOOMMlSlTRrVr19YXX3zh+72cnBx9+OGHqlevnipUqKAKFSro0ksvVf/+/RUIBAo8x5EOHDigLl26qHbt2jr55JN18sknq0aNGmrWrJnmzZuX75zTpk3T3XffrT//+c9KTEzU2Wefraeeekpbt24t9O9t3LixLMvS//73P9/PFy9eLMuyVLNmzaD316xZoxYtWujcc89VuXLldMopp6hOnTpq2bKl9u7dW+jzH09RAo5ffvlFjRo1UtWqVVWmTBnVrFlTL7/8slJSUvIdW6VKFV144YXau3evWrZsqbPOOkvly5dX/fr1NXLkSElSenq6XnnlFVWvXl1lypRRrVq1NGjQIN/zWpal3r17a+zYsbr22mt18sknq3Llyrr99tu1ePFi33ozMjL07rvvql69eqpYsaIqVKig+vXr65NPPsl37Pz582VZllq1aqVFixapSZMmOvXUU2VZlubPny9Jmjp1qp5++mnVrl1bVapUUdmyZXX++eerffv2Sk5ODlrvwgsvLPDWn3379kmS7rzzzqB/Lug3H71ulSpVlJqaqg4dOujcc89VYmKiWrVq5R0TCAT06aef6qqrrlLlypVVrlw51alTRz169FBWVpbv3woAEN0IOAAgRm3fvl2JiYmqVauWpMMD6A033JDv2EmTJsmyLP3nP//xXeuJJ56QZVkaPny4997evXu94adevXp67rnn9Mwzz+jcc8+VZVnq3Llz0Bp5gUPjxo2VmJioG2+8UW3atNEjjzyi7du3S5JuvPFGVa9eXffff7/atm2rZ599VhdddJE35GdnZwetuW3bNp1zzjmyLEsNGzZU+/bt9d///lfly5dXkyZNfAOOdevWybZtWZala6+9Vq1bt9bjjz+uM888U3Fxcfrss88K9ffNCx8uvvhi1ahRQ3Xr1tXzzz+vxx9/XJUrV5ZlWfrqq6+CvhMIBPSf//xHlmXJtm21atVKrVq18n7Dww8/7HuOIwOOQCCgyy+/XJZl6corr1Tr1q3Vpk0b3XfffTrjjDPUr1+/oDU+/vhjxcfHq2LFit7f9c4771R8fLz++te/avPmzYX6vf/73/9kWZZuvvlm389btWoly7L09ttve+9t3rxZVatWVWJiou688061a9dOzz//vG6//XZVqFBBy5cvL9S5C6OwAUfr1q1lWZbOOOMMNW/eXG3atFHDhg1lWZbq16+vtLS0oOOrVKmimjVrqm7duqpdu7aef/55PfrooypXrpwSExM1ffp0NWrUSNWqVdNTTz2lli1besHdiBEjgtbKG/Zvu+02JSQkqEmTJurQoYPuvPNOxcXFqVKlSpo7d27Qd1JTU3XVVVfJsizVqVNHTz/9tJ5//nn9/e9/l2VZevbZZ4OOzws4brjhBlWoUEFXX321/u///k8tWrTw9lBp1qyZ/vrXv6pZs2Z66aWX9MILL3j/TtWvXz8oTOzXr58XbjVr1izo1p+8v1VxA45KlSrpuuuu09lnn63HHntMbdu21UcffSQpNwjMC2irV6+uJ554Qq1bt1b9+vVlWZb+/e9/5wsEAQDRj4ADAGLUm2++Kcuy1L17d++9evXqKS4uTqtXr853fI0aNVSuXLl8Q0paWpqqVKmis846KyhgePDBB2VZlnr16hV0/KFDh9SoUSPFxcVp0aJF3vt5AYdlWb7/5VmS1q5d6zu0tG/f3vfqgUceeUSWZaljx45B78+dO1eJiYm+AcdVV12luLg4/fDDD0Hv7927V3Xq1FGFChW0c+dO3/qOlBc+WJalJ598Muhvs2jRIsXHx6tu3bpB3xk8eLA3RB55tUBycrIuvvhiWZal77//Pt85jgw45s2bJ8uydO+99+arKTs7O+iqiGXLlnkh19FXa4wcOVLx8fG+6/jJzMzUGWecofj4eG3cuDHos/T0dJ1yyilKTEzUjh07vPffffddWZalvn375lsvOTk5X5hwIgoTcOQN2zfddFO+KxXybsPo0qVL0PtVqlSRZVm6//77g64a+O2332RZlqpWraqGDRsG/f+5YMECxcXFqWHDhr7ntyxLX375ZdBnn3/+uSzL0iWXXBL0fl5w1LFjR+Xk5HjvZ2Zm6t5775VlWZowYYL3fl7AYVmW3nrrLd+/w7p164LWyvPOO+/Isiz179/f929T0C0qxQ04LMvSFVdcof379+f7Xt45H3nkkaDb6gKBgF588UVZlqXPP//ctx4AQPQi4ACAGBQIBFSjRg3Fx8cH/Rf6Dz74QJZlqV27dvm+89prr/kON99++22+DSZ37Nih+Ph4XXHFFb7nnzNnjizLUocOHbz38gKO+vXrF/n37NixQ5Zl6YknnvDeS0tLU9myZVW1alXfWwuaN2+eL+DIq6ugTTDzrlIYMGDAcWvKCx9OPvnkfMOyJF155ZWKi4vToUOHvPfyrhQYO3ZsvuPz9ku56aab8p3DL+A4+moPP88995zvlQR5br/9diUkJPj+/fzkBU1HX53zzTffyLIsNW3aNOj9vIDj008/LdT6J6IwAUfe3z/vlqijVa9ePd8tNlWqVFF8fLxv6JV3pcbRV11I0kUXXaQ//elPQe/lDftHhxhHfseyLC1YsEBS7r/j5cuXV82aNX2Dvw0bNuTri7yAo0aNGvmueDqe9PR0JSQk6K677gp6P5QBx5HhzJGqVaumk08+2TcES09PV9myZYN6BQAQGwg4ACAGjRkzxrsd5Eh79uxRmTJlfDeL3LBhg+Li4tSgQYOg92+++WZZlqWlS5d67/3++++yLEuXX355vidWdO7c2RuEmzRp4n0nL+B45plnCqw7OTlZXbt2Vb169VSpUiXv6S95r1tvvdU7Nm/Qv/76633Xynuix5EBR17A07hxY9+6W7ZsKcuy9OKLLx7jr5srL3yoV6+e7+fNmjWTZVlBV05UrlxZJ510ku/+Aenp6YqLi9Npp52W7xxHBhxZWVmqW7euLMvS1VdfrR49emjatGm+m3/Wq1dPlmXJcRzf35u3KWjeQH08a9euVVxcnP72t78FXQFw/fXXy7IsjRo1Kt/xFStWVGJiou655x59/PHHWrp0aUhuLShMwFGuXDlVqlTJ92/RuXNn7/aqI///qVKliqpVq+a7Xu3atZWQkOD7/+dtt90my7KCwqO8Yb9169a+6+VdrZG3f8f06dNlWZbq1q1bYM3x8fG6+uqrvTXyAo6CbjeTcv9de+edd3T55ZerSpUq+frssssuCzo+lAHHkQFgnm3btsmyLP3tb38r8HefcsopOvvsswv8jQCA6ETAAQAxKG+fh2+//TbfZ3n3tf/444/5PssbVPPu1d+6datOOumkfFdd5F1Of7xXo0aNvO/kBRyvv/66b80ZGRneQF63bl098cQT6tixozp37qxXX30136A/fvz4Y16NkRfCHBlwdOnSpVB1P/7448f46+YqaAPQPHm38ORdLRAIBGRZls4888wC1zz11FOVkJBw3HPs3r1bL7zwgv761796NVeuXFkvvPBC0EBdrVq1Qv3eKVOmHPf35rnxxhtlWZaGDRsmKXcT0bi4OJ177rm+wcWSJUvUtGlTb18Sy7J0zjnn6IMPPij0OQvjeAFHSkpKof4WlmUF3TKRt8mon7yNMv34Df15w35Bt47k3VbWp08fSZLruoWq96KLLvLWyAs4XnjhBd9zBAIB3XDDDbIsS+eff75atGihDh06eMFB2bJl8/3eUAUclStX9l1vyZIlhfrdR18hAwCIfgQcABBjdu7cqTJlyhx3OPC7vDsvuHj55ZclST169JBlWfmG0byh5cjbVo7nWE81kQ7fCuM3oCYlJeUb9OfOnVvkKzjyBrUPP/yw0HUXpKgBh5R7BUdCQoLvrQMZGRmKi4vTqaeeWuhzSNKqVav08ccfe+FQ8+bNvc/y/it5ampqcX6ir++//16WZXm3MeRdrXPkXi9+srKyNGfOHHXv3l1nnXWWLKtk91A4XsARCASUmJio6tWrF2ndUAQchb2CY/LkybIsS48++mih6z3yKSp+8vrwrrvuyrcPR2pqquLi4ooccNx1112yLEu7du3K99mgQYMKDDgK+ttt2rTpmL0NAIhdBBwAEGN69uwpy8q9daJFixa+r9NPP11xcXFat25d0HdTUlJ08skn65xzzlEgEFCdOnVUpkwZ7d69O+i4rVu3Ki4ursA9OPwcL+Do2rVr0JUBR/ryyy/zDfrF2YMj75L/gq76KIriBBzXXXedLMt/34GRI0fmC54KE3DkSUlJUfny5YP+q/ZTTz0lyyp4D47iyMjI0Omnn67ExERt3rxZZ555phISErRt27ZCrzFu3DhZVvAtTCeqMLeo5G0wm5SUVOh1QxFwFHYPjpSUFJUtW1a1atUq9G09xws4+vXrJ8uyNHjw4HyfDR8+XJZl5fu977//viyr4EcEP/bYY7Isy/cRxc8++2yRAw5JOvvss73HyAIAkIeAAwBiTK1atWRZlmbOnFngMa+88oosK//TR6TDwUBeUHL33Xf7rnH//fd7/+Xe74qE1atXa8OGDd4/Hy/gyAsxjt4Adc2aNTr77LN9B/2HHnrI93fMmzevwKeoNGjQQPHx8QVePbBgwQLf/xJ9tOIEHF988YUsK/fJEUfuPZCSkuJdgfHdd98d8xxr167V+vXr851v06ZNSkhI0F/+8hfvvSVLlighIUHnn3++75NzMjIyNHny5OP+1qO1adNGlmXpmmuuCbqa42izZ8/WgQMH8r2fd7XOAw88UORzF6QwAcdPP/0ky8q9dcpv09ADBw5o1qxZQe+FIuCwrIKfonLxxRcHvf/88897V0sd+TSRPBs3btSqVau8fz5ewJEXYjz22GNB72/evFkXXHCBb8Dx9ddfy7Isvfvuu75r9u/fX5Zl6emnnw56f8aMGSpbtmyxAo5evXrJsiw9+OCDvpv47ty5UwsXLizw+wCA6ETAAQAxJG9fiqMfT3q09evXKy4uTmeddVa+DRLz1sgLCH799VffNfbv369LL71UlmWpVq1aeuyxx+Q4jh555BHVr19flhW8z8fxAo6DBw+qevXqsqzcTUDbtWunZs2aqWLFit6GnUeHCVu3bvXCj4YNG6pDhw5q3ry5ypcvryZNmsiyLHXr1i3oOxs3btR5553n7V3w5JNPql27dnrggQf0j3/8Q5Zlafbs2cf8+0nFCzgCgYC3B0r16tXVunVrvfjii7Jt23fg9zvHjz/+qLi4OF1++eVq3ry5OnTooBYtWui0006TZVl67733gtb4/PPPlZiYqMTERN1xxx166aWX9Nxzz+mOO+5Q1apVVbt27eP+1qOtWrUq6Han4cOH+x737LPPqly5crrpppvUsmVLtW/fXvfee6/Kli2rcuXKHTOEK6rCBByS1KFDB1lW7p4l//nPf9SuXTs99dRTaty4scqVK6dmzZoFHR+KgOO2225TQkKCmjRpog4dOqhJkyaKi4vTySefnO+JLIcOHfL2zKhWrZr++9//qn379mrevLkaNGiguLg49evXzzv+eAFHRkaGd+vSddddp7Zt2+rBBx/Un/70J91yyy2qVKlSvt+7adMmJSYm6pRTTlGrVq3UtWtXde3aVenp6ZJyg6G8PmzUqJHatGmju+++W4mJiWratGmxAo6cnByvh/785z/rwQcflOM4evzxx9WwYUMlJCTIcZwCvw8AiE4EHAAQQx544AHfIdfPTTfdJMuy9PPPPwe9HwgEvKDh9NNP9306R5709HS99957uuKKK1S5cmWVLVtW55xzjm688Ub16dNHe/bs8Y49XsAh5YYP999/v8466yyVK1dO//jHP9SzZ0+lp6cXGCZs2rRJDz/8sE499VSVK1dOF110kQYPHuxdJeC3meWBAwfUtWtXXXzxxapYsaLKly+v6tWr67bbbtPHH39cqMviixNwSFJ2drY++OADXXLJJSpfvrzKly+vevXq6aOPPsq3J4LfOZKSktS+fXs1aNBAZ5xxhsqUKaOzzz5bt956a4G3oixYsECPPPKIzjnnHJUpU8YLNlq2bKnx48cf97f6yXvkqm3b+erOM23aND311FOqW7euqlatqnLlyqlGjRp69NFHg57KUxIKG3BIuU8ZatKkic444wwlJibq9NNP1yWXXKJ27drluyogFAFH7969NXbsWF177bWqWLGiKlWqpNtvv12L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N3tVD0launSpevTooWuuuUYNGzbUQw89pL179zrdd8WKFTLGKCYmxul4dna2GjRooJkzZ+rQoUMaMWKEevToYb1+7tw5NWjQQJ07d3b6bJfToUMHPf74416fDwCAHRBwAABQSsUFHB999JGMMZoxY4YkqWfPnvLz83PbkXend+/euvnmm5WcnKzk5GQlJCRo9erV6tixowIDA72+j3T5gOONN95Q7dq19eSTTyosLEzBwcFq1KiRAgMDlZ6ebp3XvXt33XDDDWrZsqVGjx6tqVOnqn379rrqqqu0YMECNW/eXOPHj9fkyZPVvHlzNWnSxGkKRH7A0alTJw0cOFDTp0/X4MGDZYzRs88+W+o6tWrVSk2aNNErr7yi8PBwLVu2TJI0YMAADR48WO+//74++eQTDRw4UMYYvfHGG9b1kZGR6tixo1q0aGFN3Vm6dKmkkgccxdVj5syZMsbogQce0LRp0/T2229b5x4/ftzpM9epU8fttJG5c+fq6quvljFG1113nbZu3Wq9tnTpUhlj9N5777n9/RbnqaeeUsuWLUt0DQAA1R0BBwAApZQfcKxatUrJycmKj4/XggUL1KRJE/n5+Vkd2EaNGqlz585e37e4hUI7dOig3377rUR19BRw7Nu3T7Vr19YHH3zgdDw2NtbleP5oh2+//dY6tnPnThljVKdOHacpEN99952MMfrqq6+sY/kBR9FRA0OHDlWtWrWsEQ2lqdPcuXNdPpu7oODpp59Ww4YNlZOTYx0rbopKSQMOd/VISUlR/fr19dJLLzkdj4+Pdzn+2GOPeQwckpKSFBMT4xTwSNK7774rY4wiIiKKvdadN998U8YYpaWlleg6AACqMwIOAABKqeguKvklICBAkZGR1nl16tTRnXfe6fV9e/furRtvvFFRUVGKiopSRESEPvzwQ/3hD3/QTTfdpFOnTnl9L08BR2hoqOrUqaMjR45Yo0XyS5s2bZy2K+3evbuaNGnicg9fX1917drV6VhiYqLTFB2pIOCIjo52OnfHjh0yxmjKlCmlqlODBg2Um5vr8Ts4d+6ckpOTNWvWLBljnKaHlFfA4a4eX375pYwx2rRpk8tn6d27t2699Vbr3D59+jj97K2goCAZY7Rhw4YSXTdlyhQZY3To0KESvycAANUVAQcAAKWUH3B8/PHHioqK0tq1a7V7926XtRBKM4LD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\" width=\"900\">"
1983 3614 ],
1984 3615 "text/plain": [
1985 3616 "<IPython.core.display.HTML object>"
@@ -1990,16 +3621,22
1990 3621 }
1991 3622 ],
1992 3623 "source": [
1993 "%%HTML\n",
1994 "<video width=\"90%\" style=\"display:block; margin: 0 auto;\" controls src=\"https://hephaistos.lpp.polytechnique.fr/data/LFR/PPBI_06_2018/minus30_to_20_transition.webm\" type=\"video/webm\">"
3624 "values = np.zeros(res.SWFCount())\n",
3625 "T = np.zeros(res.SWFCount())\n",
3626 "values2 = np.zeros(res.SWFCount())\n",
3627 "for i in range(0,res.SWFCount()):\n",
3628 " spec = TF.fft(res.SWF(0,i)[\"E1\"], TF.LFR_Fs0, np.hanning(2048))\n",
3629 " values[i] = spec[\"mod\"][200:].mean()\n",
3630 " T[i] = get_temperature_at(HK_TEMP_df,times[\"SWF0\"][i][\"Time\"])\n",
3631 " \n",
3632 "plt.figure(figsize=(9,6))\n",
3633 "plt.suptitle(\"Average noise Vs Temperature\")\n",
3634 "plt.xlabel(\"PCB Temperature(°C)\")\n",
3635 "plt.ylabel(\"Average noise\")\n",
3636 "plt.plot(T,values)\n",
3637 "plt.semilogy()\n",
3638 "plt.show()"
1995 3639 ]
1996 },
1997 {
1998 "cell_type": "code",
1999 "execution_count": null,
2000 "metadata": {},
2001 "outputs": [],
2002 "source": []
2003 3640 }
2004 3641 ],
2005 3642 "metadata": {
@@ -2021,28 +3658,20
2021 3658 "version": "3.6.5"
2022 3659 },
2023 3660 "toc": {
2024 "colors": {
2025 "hover_highlight": "#DAA520",
2026 "navigate_num": "#000000",
2027 "navigate_text": "#333333",
2028 "running_highlight": "#FF0000",
2029 "selected_highlight": "#FFD700",
2030 "sidebar_border": "#EEEEEE",
2031 "wrapper_background": "#FFFFFF"
2032 },
2033 "moveMenuLeft": true,
3661 "base_numbering": 1,
2034 3662 "nav_menu": {
2035 3663 "height": "12px",
2036 3664 "width": "252px"
2037 3665 },
2038 "navigate_menu": true,
2039 3666 "number_sections": true,
2040 3667 "sideBar": true,
2041 "threshold": 4,
3668 "skip_h1_title": false,
3669 "title_cell": "Table of Contents",
3670 "title_sidebar": "Contents",
2042 3671 "toc_cell": false,
3672 "toc_position": {},
2043 3673 "toc_section_display": "block",
2044 "toc_window_display": false,
2045 "widenNotebook": false
3674 "toc_window_display": false
2046 3675 },
2047 3676 "varInspector": {
2048 3677 "cols": {
General Comments 0
You need to be logged in to leave comments. Login now